ttfautohint-1.8.1/0000755000175000001440000000000013222454026013733 5ustar00wlusers00000000000000ttfautohint-1.8.1/gnulib/0000755000175000001440000000000013222454026015213 5ustar00wlusers00000000000000ttfautohint-1.8.1/gnulib/m4/0000755000175000001440000000000013222454025015532 5ustar00wlusers00000000000000ttfautohint-1.8.1/gnulib/m4/00gnulib.m40000644000175000001440000000415213222450622017415 0ustar00wlusers00000000000000# 00gnulib.m4 serial 3 dnl Copyright (C) 2009-2017 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 This file must be named something that sorts before all other dnl gnulib-provided .m4 files. It is needed until such time as we can dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and dnl m4_divert semantics. # Until autoconf 2.63, handling of the diversion stack required m4_init # to be called first; but this does not happen with aclocal. Wrapping # the entire execution in another layer of the diversion stack fixes this. # Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4 # for whether it was FIFO or LIFO; in order to properly balance with # m4_init, we need to undo our push just before anything wrapped within # the m4_init body. The way to ensure this is to wrap both sides of # m4_init with a one-shot macro that does the pop at the right time. m4_ifndef([_m4_divert_diversion], [m4_divert_push([KILL]) m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])]) m4_define([m4_init], [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])]) # AC_DEFUN_ONCE([NAME], VALUE) # ---------------------------- # Define NAME to expand to VALUE on the first use (whether by direct # expansion, or by AC_REQUIRE), and to nothing on all subsequent uses. # Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This # definition is slower than the version in Autoconf 2.64, because it # can only use interfaces that existed since 2.59; but it achieves the # same effect. Quoting is necessary to avoid confusing Automake. m4_version_prereq([2.63.263], [], [m4_define([AC][_DEFUN_ONCE], [AC][_DEFUN([$1], [AC_REQUIRE([_gl_DEFUN_ONCE([$1])], [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl [AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) # gl_00GNULIB # ----------- # Witness macro that this file has been included. Needed to force # Automake to include this file prior to all other gnulib .m4 files. AC_DEFUN([gl_00GNULIB]) ttfautohint-1.8.1/gnulib/m4/absolute-header.m40000644000175000001440000001034713222450622021044 0ustar00wlusers00000000000000# absolute-header.m4 serial 16 dnl Copyright (C) 2006-2017 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 Derek Price. # gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) # --------------------------------------- # Find the absolute name of a header file, testing first if the header exists. # If the header were sys/inttypes.h, this macro would define # ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h # in config.h # (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. AC_DEFUN([gl_ABSOLUTE_HEADER], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PREPROC_REQUIRE()dnl dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted dnl until we can assume autoconf 2.64 or newer. m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_absolute_header], [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], m4_defn([gl_absolute_header]), [AS_VAR_PUSHDEF([ac_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl if test AS_VAR_GET(ac_header_exists) = yes; then gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) fi AS_VAR_POPDEF([ac_header_exists])dnl ])dnl AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), ["AS_VAR_GET(gl_absolute_header)"], [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.]) AS_VAR_POPDEF([gl_absolute_header])dnl ])dnl ])# gl_ABSOLUTE_HEADER # gl_ABSOLUTE_HEADER_ONE(HEADER) # ------------------------------ # Like gl_ABSOLUTE_HEADER, except that: # - it assumes that the header exists, # - it uses the current CPPFLAGS, # - it does not cache the result, # - it is silent. AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) dnl AIX "xlc -E" and "cc -E" omit #line directives for header files dnl that contain only a #include of other header files and no dnl non-comment tokens of their own. This leads to a failure to dnl detect the absolute name of , , dnl and others. The workaround is to force preservation of comments dnl through option -C. This ensures all necessary #line directives dnl are present. GCC supports option -C as well. case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac changequote(,) case "$host_os" in mingw*) dnl For the sake of native Windows compilers (excluding gcc), dnl treat backslash as a directory separator, like /. dnl Actually, these compilers use a double-backslash as dnl directory separator, inside the dnl # line "filename" dnl directives. gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac dnl A sed expression that turns a string into a basic regular dnl expression, for use within "/.../". gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo '$1' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' changequote([,]) dnl eval is necessary to expand gl_absname_cpp. dnl Ultrix and Pyramid sh refuse to redirect output of eval, dnl so use subshell. AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]), [`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | sed -n "$gl_absolute_header_sed"`]) ]) ttfautohint-1.8.1/gnulib/m4/alloca.m40000644000175000001440000001037213222450622017231 0ustar00wlusers00000000000000# alloca.m4 serial 14 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2017 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. AC_DEFUN([gl_FUNC_ALLOCA], [ AC_REQUIRE([AC_FUNC_ALLOCA]) if test $ac_cv_func_alloca_works = no; then gl_PREREQ_ALLOCA fi # Define an additional variable used in the Makefile substitution. if test $ac_cv_working_alloca_h = yes; then AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [ AC_EGREP_CPP([Need own alloca], [ #if defined __GNUC__ || defined _AIX || defined _MSC_VER Need own alloca #endif ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no]) ]) if test $gl_cv_rpl_alloca = yes; then dnl OK, alloca can be implemented through a compiler built-in. AC_DEFINE([HAVE_ALLOCA], [1], [Define to 1 if you have 'alloca' after including , a header that may be supplied by this distribution.]) ALLOCA_H=alloca.h else dnl alloca exists as a library function, i.e. it is slow and probably dnl a memory leak. Don't define HAVE_ALLOCA in this case. ALLOCA_H= fi else ALLOCA_H=alloca.h fi AC_SUBST([ALLOCA_H]) AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"]) ]) # Prerequisites of lib/alloca.c. # STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. AC_DEFUN([gl_PREREQ_ALLOCA], [:]) # This works around a bug in autoconf <= 2.68. # See . m4_version_prereq([2.69], [] ,[ # This is taken from the following Autoconf patch: # https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=6cd9f12520b0d6f76d3230d7565feba1ecf29497 # _AC_LIBOBJ_ALLOCA # ----------------- # Set up the LIBOBJ replacement of 'alloca'. Well, not exactly # AC_LIBOBJ since we actually set the output variable 'ALLOCA'. # Nevertheless, for Automake, AC_LIBSOURCES it. m4_define([_AC_LIBOBJ_ALLOCA], [# 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. AC_LIBSOURCES(alloca.c) AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.]) AC_CACHE_CHECK(whether 'alloca.c' needs Cray hooks, ac_cv_os_cray, [AC_EGREP_CPP(webecray, [#if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif ], ac_cv_os_cray=yes, ac_cv_os_cray=no)]) if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do AC_CHECK_FUNC($ac_func, [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func, [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.]) break]) done fi AC_CACHE_CHECK([stack direction for C alloca], [ac_cv_c_stack_direction], [AC_RUN_IFELSE([AC_LANG_SOURCE( [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; }])], [ac_cv_c_stack_direction=1], [ac_cv_c_stack_direction=-1], [ac_cv_c_stack_direction=0])]) AH_VERBATIM([STACK_DIRECTION], [/* 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])dnl AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction) ])# _AC_LIBOBJ_ALLOCA ]) ttfautohint-1.8.1/gnulib/m4/asm-underscore.m40000644000175000001440000000440213222450622020722 0ustar00wlusers00000000000000# asm-underscore.m4 serial 3 dnl Copyright (C) 2010-2017 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. Based on as-underscore.m4 in GNU clisp. # gl_ASM_SYMBOL_PREFIX # Tests for the prefix of C symbols at the assembly language level and the # linker level. This prefix is either an underscore or empty. Defines the # C macro USER_LABEL_PREFIX to this prefix, and sets ASM_SYMBOL_PREFIX to # a stringified variant of this prefix. AC_DEFUN([gl_ASM_SYMBOL_PREFIX], [ dnl We don't use GCC's __USER_LABEL_PREFIX__ here, because dnl 1. It works only for GCC. dnl 2. It is incorrectly defined on some platforms, in some GCC versions. AC_REQUIRE([gl_C_ASM]) AC_CACHE_CHECK( [whether C symbols are prefixed with underscore at the linker level], [gl_cv_prog_as_underscore], [cat > conftest.c </dev/null 2>&1 if LC_ALL=C grep -E '(^|[[^a-zA-Z0-9_]])_foo([[^a-zA-Z0-9_]]|$)' conftest.$gl_asmext >/dev/null; then gl_cv_prog_as_underscore=yes else gl_cv_prog_as_underscore=no fi rm -f conftest* ]) if test $gl_cv_prog_as_underscore = yes; then USER_LABEL_PREFIX=_ else USER_LABEL_PREFIX= fi AC_DEFINE_UNQUOTED([USER_LABEL_PREFIX], [$USER_LABEL_PREFIX], [Define to the prefix of C symbols at the assembler and linker level, either an underscore or empty.]) ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"' AC_SUBST([ASM_SYMBOL_PREFIX]) ]) # gl_C_ASM # Determines how to produce an assembly language file from C source code. # Sets the variables: # gl_asmext - the extension of assembly language output, # gl_c_asm_opt - the C compiler option that produces assembly language output. AC_DEFUN([gl_C_ASM], [ AC_EGREP_CPP([MicrosoftCompiler], [ #ifdef _MSC_VER MicrosoftCompiler #endif ], [gl_asmext='asm' gl_c_asm_opt='-c -Fa' ], [gl_asmext='s' gl_c_asm_opt='-S' ]) ]) ttfautohint-1.8.1/gnulib/m4/builtin-expect.m40000644000175000001440000000302313222450622020725 0ustar00wlusers00000000000000dnl Check for __builtin_expect. dnl Copyright 2016-2017 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 Written by Paul Eggert. AC_DEFUN([gl___BUILTIN_EXPECT], [ AC_CACHE_CHECK([for __builtin_expect], [gl_cv___builtin_expect], [AC_LINK_IFELSE( [AC_LANG_SOURCE([[ int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; }]])], [gl_cv___builtin_expect=yes], [AC_LINK_IFELSE( [AC_LANG_SOURCE([[ #include int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; }]])], [gl_cv___builtin_expect="in "], [gl_cv___builtin_expect=no])])]) if test "$gl_cv___builtin_expect" = yes; then AC_DEFINE([HAVE___BUILTIN_EXPECT], [1]) elif test "$gl_cv___builtin_expect" = "in "; then AC_DEFINE([HAVE___BUILTIN_EXPECT], [2]) fi AH_VERBATIM([HAVE___BUILTIN_EXPECT], [/* Define to 1 if the compiler supports __builtin_expect, and to 2 if does. */ #undef HAVE___BUILTIN_EXPECT #ifndef HAVE___BUILTIN_EXPECT # define __builtin_expect(e, c) (e) #elif HAVE___BUILTIN_EXPECT == 2 # include #endif ]) ]) ttfautohint-1.8.1/gnulib/m4/dirname.m40000644000175000001440000000105413222450622017412 0ustar00wlusers00000000000000#serial 10 -*- autoconf -*- dnl Copyright (C) 2002-2006, 2009-2017 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. AC_DEFUN([gl_DIRNAME], [ AC_REQUIRE([gl_DIRNAME_LGPL]) ]) AC_DEFUN([gl_DIRNAME_LGPL], [ dnl Prerequisites of lib/dirname.h. AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) dnl No prerequisites of lib/basename-lgpl.c, lib/dirname-lgpl.c, dnl lib/stripslash.c. ]) ttfautohint-1.8.1/gnulib/m4/double-slash-root.m40000644000175000001440000000312513222450622021337 0ustar00wlusers00000000000000# double-slash-root.m4 serial 4 -*- Autoconf -*- dnl Copyright (C) 2006, 2008-2017 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. AC_DEFUN([gl_DOUBLE_SLASH_ROOT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root], [ if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # . case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi]) if test "$gl_cv_double_slash_root" = yes; then AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1], [Define to 1 if // is a file system root distinct from /.]) fi ]) ttfautohint-1.8.1/gnulib/m4/errno_h.m40000644000175000001440000000623413222450622017434 0ustar00wlusers00000000000000# errno_h.m4 serial 12 dnl Copyright (C) 2004, 2006, 2008-2017 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. AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ AC_EGREP_CPP([booboo],[ #include #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif ], [gl_cv_header_errno_h_complete=no], [gl_cv_header_errno_h_complete=yes]) ]) if test $gl_cv_header_errno_h_complete = yes; then ERRNO_H='' else gl_NEXT_HEADERS([errno.h]) ERRNO_H='errno.h' fi AC_SUBST([ERRNO_H]) AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"]) gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) gl_REPLACE_ERRNO_VALUE([ENOLINK]) gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) ]) # Assuming $1 = EOVERFLOW. # The EOVERFLOW errno value ought to be defined in , according to # POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and # some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. # Check for the value of EOVERFLOW. # Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. AC_DEFUN([gl_REPLACE_ERRNO_VALUE], [ if test -n "$ERRNO_H"; then AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ AC_EGREP_CPP([yes],[ #include #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=yes], [gl_cv_header_errno_h_]$1[=no]) if test $gl_cv_header_errno_h_]$1[ = no; then AC_EGREP_CPP([yes],[ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=hidden]) if test $gl_cv_header_errno_h_]$1[ = hidden; then dnl The macro exists but is hidden. dnl Define it to the same value. AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include ]) fi fi ]) case $gl_cv_header_errno_h_]$1[ in yes | no) ]$1[_HIDDEN=0; ]$1[_VALUE= ;; *) ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" ;; esac AC_SUBST($1[_HIDDEN]) AC_SUBST($1[_VALUE]) fi ]) dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. dnl Remove this when we can assume autoconf >= 2.61. m4_ifdef([AC_COMPUTE_INT], [], [ AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) ]) ttfautohint-1.8.1/gnulib/m4/error.m40000644000175000001440000000151013222450622017121 0ustar00wlusers00000000000000#serial 14 # Copyright (C) 1996-1998, 2001-2004, 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. AC_DEFUN([gl_ERROR], [ dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer dnl maintained in Autoconf and because it invokes AC_LIBOBJ. AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[error_at_line (0, 0, "", 0, "an error occurred");]])], [ac_cv_lib_error_at_line=yes], [ac_cv_lib_error_at_line=no])]) ]) # Prerequisites of lib/error.c. AC_DEFUN([gl_PREREQ_ERROR], [ AC_REQUIRE([AC_FUNC_STRERROR_R]) : ]) ttfautohint-1.8.1/gnulib/m4/exponentd.m40000644000175000001440000000755213222450622020010 0ustar00wlusers00000000000000# exponentd.m4 serial 3 dnl Copyright (C) 2007-2008, 2010-2017 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. AC_DEFUN([gl_DOUBLE_EXPONENT_LOCATION], [ AC_CACHE_CHECK([where to find the exponent in a 'double'], [gl_cv_cc_double_expbit0], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include #include #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (double x) { memory_double m; size_t i; /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ memset (&m, 0, sizeof (memory_double)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25); add_to_ored_words (0.5); add_to_ored_words (1.0); add_to_ored_words (2.0); add_to_ored_words (4.0); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } ]])], [gl_cv_cc_double_expbit0=`cat conftest.out`], [gl_cv_cc_double_expbit0="unknown"], [ dnl On ARM, there are two 'double' floating-point formats, used by dnl different sets of instructions: The older FPA instructions assume dnl that they are stored in big-endian word order, while the words dnl (like integer types) are stored in little-endian byte order. dnl The newer VFP instructions assume little-endian order dnl consistently. AC_EGREP_CPP([mixed_endianness], [ #if defined arm || defined __arm || defined __arm__ mixed_endianness #endif ], [gl_cv_cc_double_expbit0="unknown"], [ pushdef([AC_MSG_CHECKING],[:])dnl pushdef([AC_MSG_RESULT],[:])dnl pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl AC_C_BIGENDIAN( [gl_cv_cc_double_expbit0="word 0 bit 20"], [gl_cv_cc_double_expbit0="word 1 bit 20"], [gl_cv_cc_double_expbit0="unknown"]) popdef([AC_MSG_RESULT_UNQUOTED])dnl popdef([AC_MSG_RESULT])dnl popdef([AC_MSG_CHECKING])dnl ]) ]) rm -f conftest.out ]) case "$gl_cv_cc_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word], [Define as the word index where to find the exponent of 'double'.]) AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit], [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.]) ;; esac ]) ttfautohint-1.8.1/gnulib/m4/extensions.m40000644000175000001440000001536513222450622020204 0ustar00wlusers00000000000000# serial 17 -*- Autoconf -*- # Enable extensions on systems that normally disable them. # Copyright (C) 2003, 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. # This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git # Autoconf. Perhaps we can remove this once we can assume Autoconf # 2.70 or later everywhere, but since Autoconf mutates rapidly # enough in this area it's likely we'll need to redefine # AC_USE_SYSTEM_EXTENSIONS for quite some time. # If autoconf reports a warning # warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # the fix is # 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked # but always AC_REQUIREd, # 2) to ensure that for each occurrence of # AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) # or # AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # the corresponding gnulib module description has 'extensions' among # its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS # invocation occurs in gl_EARLY, not in gl_INIT. # AC_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. # # Remember that #undef in AH_VERBATIM gets replaced with #define by # AC_DEFINE. The goal here is to define all known feature-enabling # macros, then, if reports of conflicts are made, disable macros that # cause problems on some platforms (such as __EXTENSIONS__). AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], [AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl AC_BEFORE([$0], [AC_RUN_IFELSE])dnl AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) if test "$MINIX" = yes; then AC_DEFINE([_POSIX_SOURCE], [1], [Define to 1 if you need to in order for 'stat' and other things to work.]) AC_DEFINE([_POSIX_1_SOURCE], [2], [Define to 2 if the system does not provide POSIX.1 features except with this defined.]) AC_DEFINE([_MINIX], [1], [Define to 1 if on MINIX.]) AC_DEFINE([_NETBSD_SOURCE], [1], [Define to 1 to make NetBSD features available. MINIX 3 needs this.]) fi dnl Use a different key than __EXTENSIONS__, as that name broke existing dnl configure.ac when using autoheader 2.62. AH_VERBATIM([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable NetBSD extensions on NetBSD. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD extensions on NetBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions if necessary. HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif ]) AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], [ac_cv_safe_to_define___extensions__], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ # define __EXTENSIONS__ 1 ]AC_INCLUDES_DEFAULT])], [ac_cv_safe_to_define___extensions__=yes], [ac_cv_safe_to_define___extensions__=no])]) test $ac_cv_safe_to_define___extensions__ = yes && AC_DEFINE([__EXTENSIONS__]) AC_DEFINE([_ALL_SOURCE]) AC_DEFINE([_DARWIN_C_SOURCE]) AC_DEFINE([_GNU_SOURCE]) AC_DEFINE([_NETBSD_SOURCE]) AC_DEFINE([_OPENBSD_SOURCE]) AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__]) AC_DEFINE([__STDC_WANT_LIB_EXT2__]) AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__]) AC_DEFINE([_TANDEM_SOURCE]) AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined], [ac_cv_should_define__xopen_source], [ac_cv_should_define__xopen_source=no AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include mbstate_t x;]])], [], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #define _XOPEN_SOURCE 500 #include mbstate_t x;]])], [ac_cv_should_define__xopen_source=yes])])]) test $ac_cv_should_define__xopen_source = yes && AC_DEFINE([_XOPEN_SOURCE], [500]) ])# AC_USE_SYSTEM_EXTENSIONS # gl_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], [ dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS. dnl gnulib does not need it. But if it gets required by third-party macros dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE, dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck. AC_REQUIRE([AC_GNU_SOURCE]) AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) ]) ttfautohint-1.8.1/gnulib/m4/extern-inline.m40000644000175000001440000001036313222450622020557 0ustar00wlusers00000000000000dnl 'extern inline' a la ISO C99. dnl Copyright 2012-2017 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. AC_DEFUN([gl_EXTERN_INLINE], [ AH_VERBATIM([extern_inline], [/* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see . Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like . For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions. This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see . Assume DragonFly and FreeBSD will be similar. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined __header_inline \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see and . */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif]) ]) ttfautohint-1.8.1/gnulib/m4/fcntl-o.m40000644000175000001440000001144013222450622017335 0ustar00wlusers00000000000000# fcntl-o.m4 serial 5 dnl Copyright (C) 2006, 2009-2017 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 Written by Paul Eggert. # Test whether the flags O_NOATIME and O_NOFOLLOW actually work. # Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. # Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. AC_DEFUN([gl_FCNTL_O_FLAGS], [ dnl Persuade glibc to define O_NOATIME and O_NOFOLLOW. dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes dnl AC_GNU_SOURCE. m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], [AC_REQUIRE([AC_GNU_SOURCE])]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_FUNCS_ONCE([symlink]) AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include #if HAVE_UNISTD_H # include #else /* on Windows with MSVC */ # include # include # defined sleep(n) _sleep ((n) * 1000) #endif #include #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; ]], [[ int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result;]])], [gl_cv_header_working_fcntl_h=yes], [case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac], [case "$host_os" in # Guess 'no' on native Windows. mingw*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac ]) ]) case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], [Define to 1 if O_NOATIME works.]) case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], [Define to 1 if O_NOFOLLOW works.]) ]) ttfautohint-1.8.1/gnulib/m4/fcntl_h.m40000644000175000001440000000327113222450622017413 0ustar00wlusers00000000000000# serial 15 # Configure fcntl.h. dnl Copyright (C) 2006-2007, 2009-2017 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 Written by Paul Eggert. AC_DEFUN([gl_FCNTL_H], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([gl_FCNTL_O_FLAGS]) gl_NEXT_HEADERS([fcntl.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, if it is not common dnl enough to be declared everywhere. gl_WARN_ON_USE_PREPARE([[#include ]], [fcntl openat]) ]) AC_DEFUN([gl_FCNTL_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_FCNTL_H_DEFAULTS], [ GNULIB_FCNTL=0; AC_SUBST([GNULIB_FCNTL]) GNULIB_NONBLOCKING=0; AC_SUBST([GNULIB_NONBLOCKING]) GNULIB_OPEN=0; AC_SUBST([GNULIB_OPEN]) GNULIB_OPENAT=0; AC_SUBST([GNULIB_OPENAT]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCNTL=1; AC_SUBST([HAVE_FCNTL]) HAVE_OPENAT=1; AC_SUBST([HAVE_OPENAT]) REPLACE_FCNTL=0; AC_SUBST([REPLACE_FCNTL]) REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN]) REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT]) ]) ttfautohint-1.8.1/gnulib/m4/float_h.m40000644000175000001440000000545713222450622017422 0ustar00wlusers00000000000000# float_h.m4 serial 12 dnl Copyright (C) 2007, 2009-2017 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. AC_DEFUN([gl_FLOAT_H], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) FLOAT_H= REPLACE_FLOAT_LDBL=0 case "$host_os" in aix* | beos* | openbsd* | mirbsd* | irix*) FLOAT_H=float.h ;; freebsd* | dragonfly*) case "$host_cpu" in changequote(,)dnl i[34567]86 ) changequote([,])dnl FLOAT_H=float.h ;; x86_64 ) # On x86_64 systems, the C compiler may still be generating # 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __x86_64__ || defined __amd64__ int ok; #else error fail #endif ]])], [], [FLOAT_H=float.h]) ;; esac ;; linux*) case "$host_cpu" in powerpc*) FLOAT_H=float.h ;; esac ;; esac case "$host_os" in aix* | freebsd* | dragonfly* | linux*) if test -n "$FLOAT_H"; then REPLACE_FLOAT_LDBL=1 fi ;; esac dnl Test against glibc-2.7 Linux/SPARC64 bug. REPLACE_ITOLD=0 AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works], [gl_cv_func_itold_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ int i = -1; volatile long double ld; int main () { ld += i * 1.0L; if (ld > 0) return 1; return 0; }]])], [gl_cv_func_itold_works=yes], [gl_cv_func_itold_works=no], [case "$host" in sparc*-*-linux*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_func_itold_works="guessing no"], [gl_cv_func_itold_works="guessing yes"]) ;; # Guess yes on native Windows. mingw*) gl_cv_func_itold_works="guessing yes" ;; *) gl_cv_func_itold_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_itold_works" in *no) REPLACE_ITOLD=1 dnl We add the workaround to but also to , dnl to increase the chances that the fix function gets pulled in. FLOAT_H=float.h ;; esac if test -n "$FLOAT_H"; then gl_NEXT_HEADERS([float.h]) fi AC_SUBST([FLOAT_H]) AM_CONDITIONAL([GL_GENERATE_FLOAT_H], [test -n "$FLOAT_H"]) AC_SUBST([REPLACE_ITOLD]) ]) ttfautohint-1.8.1/gnulib/m4/getopt.m40000644000175000001440000003131113222450622017274 0ustar00wlusers00000000000000# getopt.m4 serial 46 dnl Copyright (C) 2002-2006, 2008-2017 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. # Request a POSIX compliant getopt function. AC_DEFUN([gl_FUNC_GETOPT_POSIX], [ m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) dnl Other modules can request the gnulib implementation of the getopt dnl functions unconditionally, by defining gl_REPLACE_GETOPT_ALWAYS. dnl argp.m4 does this. m4_ifdef([gl_REPLACE_GETOPT_ALWAYS], [ REPLACE_GETOPT=1 ], [ REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then REPLACE_GETOPT=1 fi ]) if test $REPLACE_GETOPT = 1; then dnl Arrange for getopt.h to be created. gl_GETOPT_SUBSTITUTE_HEADER fi ]) # Request a POSIX compliant getopt function with GNU extensions (such as # options with optional arguments) and the functions getopt_long, # getopt_long_only. AC_DEFUN([gl_FUNC_GETOPT_GNU], [ dnl Set the variable gl_getopt_required, so that all invocations of dnl gl_GETOPT_CHECK_HEADERS in the scope of the current configure file dnl will check for getopt with GNU extensions. dnl This means that if one gnulib-tool invocation requests getopt-posix dnl and another gnulib-tool invocation requests getopt-gnu, it is as if dnl both had requested getopt-gnu. m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU]) dnl No need to invoke gl_FUNC_GETOPT_POSIX here; this is automatically dnl done through the module dependency getopt-gnu -> getopt-posix. ]) # Determine whether to replace the entire getopt facility. AC_DEFUN([gl_GETOPT_CHECK_HEADERS], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON dnl Persuade Solaris to declare optarg, optind, opterr, optopt. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) gl_CHECK_NEXT_HEADERS([getopt.h]) if test $ac_cv_header_getopt_h = yes; then HAVE_GETOPT_H=1 else HAVE_GETOPT_H=0 fi AC_SUBST([HAVE_GETOPT_H]) gl_replace_getopt= dnl Test whether is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes]) fi dnl Test whether the function getopt_long is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes]) fi dnl POSIX 2008 does not specify leading '+' behavior, but see dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on dnl the next version of POSIX. For now, we only guarantee leading '+' dnl behavior with getopt-gnu. if test -z "$gl_replace_getopt"; then AC_CACHE_CHECK([whether getopt is POSIX compatible], [gl_cv_func_getopt_posix], [ dnl Merging these three different test programs into a single one dnl would require a reset mechanism. On BSD systems, it can be done dnl through 'optreset'; on some others (glibc), it can be done by dnl setting 'optind' to 0; on others again (HP-UX, IRIX, OSF/1, dnl Solaris 9, musl libc), there is no such mechanism. if test $cross_compiling = no; then dnl Sanity check. Succeeds everywhere (except on MSVC, dnl which lacks and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include int main () { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) if test $gl_cv_func_getopt_posix = maybe; then dnl Sanity check with '+'. Succeeds everywhere (except on MSVC, dnl which lacks and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include int main () { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; c = getopt (7, argv, "+abp:q:"); if (!(c == -1)) return 4; if (!(strcmp (argv[0], "program") == 0)) return 5; if (!(strcmp (argv[1], "donald") == 0)) return 6; if (!(strcmp (argv[2], "-p") == 0)) return 7; if (!(strcmp (argv[3], "billy") == 0)) return 8; if (!(strcmp (argv[4], "duck") == 0)) return 9; if (!(strcmp (argv[5], "-a") == 0)) return 10; if (!(strcmp (argv[6], "bar") == 0)) return 11; if (!(optind == 1)) return 12; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) fi if test $gl_cv_func_getopt_posix = maybe; then dnl Detect Mac OS X 10.5, AIX 7.1, mingw bug. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include int main () { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; if (getopt (2, argv, "ab:") != 'a') return 13; if (getopt (2, argv, "ab:") != '?') return 14; if (optopt != 'b') return 15; if (optind != 2) return 16; return 0; } ]])], [gl_cv_func_getopt_posix=yes], [gl_cv_func_getopt_posix=no]) fi else case "$host_os" in darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac fi ]) case "$gl_cv_func_getopt_posix" in *no) gl_replace_getopt=yes ;; esac fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu], [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the # optstring is necessary for programs like m4 that have POSIX-mandated # semantics for supporting options interspersed with files. # Also, since getopt_long is a GNU extension, we require optind=0. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. dnl GNU Coding Standards currently allow awk but not env; besides, env dnl is ambiguous with environment values that contain newlines. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" #include #include ]GL_NOCRASH[ ]], [[ int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 16; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 32; else if (getopt (3, argv, "+:a:b") != ':') result |= 32; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 64; } return result; ]])], [gl_cv_func_getopt_gnu=yes], [gl_cv_func_getopt_gnu=no], [dnl Cross compiling. Assume the worst, even on glibc platforms. gl_cv_func_getopt_gnu="guessing no" ]) case $gl_had_POSIXLY_CORRECT in exported) ;; yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;; *) AS_UNSET([POSIXLY_CORRECT]) ;; esac ]) if test "$gl_cv_func_getopt_gnu" != yes; then gl_replace_getopt=yes else AC_CACHE_CHECK([for working GNU getopt_long function], [gl_cv_func_getopt_long_gnu], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include #include ]], [[static const struct option long_options[] = { { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; /* This code fails on OpenBSD 5.0. */ { static char program[] = "program"; static char xtremel[] = "--xtremel"; char *argv[] = { program, xtremel, NULL }; int option_index; optind = 1; opterr = 0; if (getopt_long (2, argv, "", long_options, &option_index) != 1003) return 1; } return 0; ]])], [gl_cv_func_getopt_long_gnu=yes], [gl_cv_func_getopt_long_gnu=no], [dnl Cross compiling. Guess no on OpenBSD, yes otherwise. case "$host_os" in openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; *) gl_cv_func_getopt_long_gnu="guessing yes";; esac ]) ]) case "$gl_cv_func_getopt_long_gnu" in *yes) ;; *) gl_replace_getopt=yes ;; esac fi fi ]) AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], [ AC_CHECK_HEADERS_ONCE([sys/cdefs.h]) if test $ac_cv_header_sys_cdefs_h = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi AC_SUBST([HAVE_SYS_CDEFS_H]) AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], [Define to rpl_ if the getopt replacement functions and variables should be used.]) GETOPT_H=getopt.h GETOPT_CDEFS_H=getopt-cdefs.h AC_SUBST([GETOPT_H]) AC_SUBST([GETOPT_CDEFS_H]) ]) ttfautohint-1.8.1/gnulib/m4/getprogname.m40000644000175000001440000000263313222450622020307 0ustar00wlusers00000000000000# getprogname.m4 - check for getprogname or replacements for it # Copyright (C) 2016-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. # serial 4 AC_DEFUN([gl_FUNC_GETPROGNAME], [ AC_CHECK_FUNCS_ONCE([getprogname getexecname]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) ac_found=0 AC_CHECK_DECLS([program_invocation_name], [ac_found=1], [], [#include ]) AC_CHECK_DECLS([program_invocation_short_name], [ac_found=1], [], [#include ]) AC_CHECK_DECLS([__argv], [ac_found=1], [], [#include ]) # Incur the cost of this test only if none of the above worked. if test $ac_found = 0; then # On OpenBSD 5.1, using the global __progname variable appears to be # the only way to implement getprogname. AC_CACHE_CHECK([whether __progname is defined in default libraries], [gl_cv_var___progname], [ gl_cv_var___progname= AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern char *__progname;]], [[return *__progname;]] )], [gl_cv_var___progname=yes] ) ] ) if test "$gl_cv_var___progname" = yes; then AC_DEFINE([HAVE_VAR___PROGNAME], 1, [Define if you have a global __progname variable]) fi fi ]) ttfautohint-1.8.1/gnulib/m4/gnulib-common.m40000644000175000001440000004273613222450622020555 0ustar00wlusers00000000000000# gnulib-common.m4 serial 38 dnl Copyright (C) 2007-2017 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. # gl_COMMON # is expanded unconditionally through gnulib-tool magic. AC_DEFUN([gl_COMMON], [ dnl Use AC_REQUIRE here, so that the code is expanded once only. AC_REQUIRE([gl_00GNULIB]) AC_REQUIRE([gl_COMMON_BODY]) ]) AC_DEFUN([gl_COMMON_BODY], [ AH_VERBATIM([_Noreturn], [/* The _Noreturn keyword of C11. */ #if ! (defined _Noreturn \ || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ]) AH_VERBATIM([isoc99_inline], [/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif]) AH_VERBATIM([unused_parameter], [/* Define as a marker that can be attached to declarations that might not be used. This helps to reduce warnings, such as from GCC -Wunused-parameter. */ #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED __attribute__ ((__unused__)) #else # define _GL_UNUSED #endif /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name is a misnomer outside of parameter lists. */ #define _UNUSED_PARAMETER_ _GL_UNUSED /* gcc supports the "unused" attribute on possibly unused labels, and g++ has since version 4.5. Note to support C++ as well as C, _GL_UNUSED_LABEL should be used with a trailing ; */ #if !defined __cplusplus || __GNUC__ > 4 \ || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) # define _GL_UNUSED_LABEL _GL_UNUSED #else # define _GL_UNUSED_LABEL #endif /* The __pure__ attribute was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The __const__ attribute was added in gcc 2.95. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST /* empty */ #endif ]) dnl Preparation for running test programs: dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not dnl to /dev/tty, so they can be redirected to log files. Such diagnostics dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ ]) # gl_MODULE_INDICATOR_CONDITION # expands to a C preprocessor expression that evaluates to 1 or 0, depending # whether a gnulib module that has been requested shall be considered present # or not. m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) # gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) # sets the shell variable that indicates the presence of the given module to # a C preprocessor expression that will evaluate to 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], [ gl_MODULE_INDICATOR_SET_VARIABLE_AUX( [GNULIB_[]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], [gl_MODULE_INDICATOR_CONDITION]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) # modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. # The shell variable's value is a C preprocessor expression that evaluates # to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], [ m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], [ dnl Simplify the expression VALUE || 1 to 1. $1=1 ], [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], [gl_MODULE_INDICATOR_CONDITION])]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) # modifies the shell variable to include the given condition. The shell # variable's value is a C preprocessor expression that evaluates to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], [ dnl Simplify the expression 1 || CONDITION to 1. if test "$[]$1" != 1; then dnl Simplify the expression 0 || CONDITION to CONDITION. if test "$[]$1" = 0; then $1=$2 else $1="($[]$1 || $2)" fi fi ]) # gl_MODULE_INDICATOR([modulename]) # defines a C macro indicating the presence of the given module # in a location where it can be used. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 0 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR], [ AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [gl_MODULE_INDICATOR_CONDITION], [Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module $1 shall be considered present.]) ]) # gl_MODULE_INDICATOR_FOR_TESTS([modulename]) # defines a C macro indicating the presence of the given module # in lib or tests. This is useful to determine whether the module # should be tested. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [ AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], [Define to 1 when the gnulib module $1 should be tested.]) ]) # gl_ASSERT_NO_GNULIB_POSIXCHECK # asserts that there will never be a need to #define GNULIB_POSIXCHECK. # and thereby enables an optimization of configure and config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], [ dnl Override gl_WARN_ON_USE_PREPARE. dnl But hide this definition from 'aclocal'. AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) ]) # gl_ASSERT_NO_GNULIB_TESTS # asserts that there will be no gnulib tests in the scope of the configure.ac # and thereby enables an optimization of config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], [ dnl Override gl_MODULE_INDICATOR_FOR_TESTS. AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) ]) # Test whether exists. # Set HAVE_FEATURES_H. AC_DEFUN([gl_FEATURES_H], [ AC_CHECK_HEADERS_ONCE([features.h]) if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi AC_SUBST([HAVE_FEATURES_H]) ]) # m4_foreach_w # is a backport of autoconf-2.59c's m4_foreach_w. # Remove this macro when we can assume autoconf >= 2.60. m4_ifndef([m4_foreach_w], [m4_define([m4_foreach_w], [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) # AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH]) # ---------------------------------------------------- # Backport of autoconf-2.63b's macro. # Remove this macro when we can assume autoconf >= 2.64. m4_ifndef([AS_VAR_IF], [m4_define([AS_VAR_IF], [AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])]) # gl_PROG_CC_C99 # Modifies the value of the shell variable CC in an attempt to make $CC # understand ISO C99 source code. # This is like AC_PROG_CC_C99, except that # - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60, # - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC # , # but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99 # . # Remaining problems: # - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options # to CC twice # . # - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard. AC_DEFUN([gl_PROG_CC_C99], [ dnl Change that version number to the minimum Autoconf version that supports dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls. m4_version_prereq([9.0], [AC_REQUIRE([AC_PROG_CC_C99])], [AC_REQUIRE([AC_PROG_CC_STDC])]) ]) # gl_PROG_AR_RANLIB # Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. # The user can set the variables AR, ARFLAGS, RANLIB if he wants to override # the values. AC_DEFUN([gl_PROG_AR_RANLIB], [ dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler dnl as "cc", and GCC as "gcc". They have different object file formats and dnl library formats. In particular, the GNU binutils programs ar and ranlib dnl produce libraries that work only with gcc, not with cc. AC_REQUIRE([AC_PROG_CC]) dnl The '][' hides this use from 'aclocal'. AC_BEFORE([$0], [A][M_PROG_AR]) AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], [ AC_EGREP_CPP([Amsterdam], [ #ifdef __ACK__ Amsterdam #endif ], [gl_cv_c_amsterdam_compiler=yes], [gl_cv_c_amsterdam_compiler=no]) ]) dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not dnl building with __ACK__. if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST dnl ARFLAGS variable (it is filed into Makefile.in directly by automake dnl script on-demand, if not specified by ./configure of course). dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block dnl because AM_PROG_AR is written so it could re-set AR variable even for dnl __ACK__. It may seem like its easier to avoid calling the macro here, dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good dnl default value and automake should usually know them). dnl dnl The '][' hides this use from 'aclocal'. m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:]) fi dnl In case the code above has not helped with setting AR/ARFLAGS, use dnl Automake-documented default values for AR and ARFLAGS, but prefer dnl ${host}-ar over ar (useful for cross-compiling). AC_CHECK_TOOL([AR], [ar], [ar]) if test -z "$ARFLAGS"; then ARFLAGS='cr' fi AC_SUBST([AR]) AC_SUBST([ARFLAGS]) if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else dnl Use the ranlib program if it is available. AC_PROG_RANLIB fi fi AC_SUBST([RANLIB]) ]) # AC_PROG_MKDIR_P # is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix # for interoperability with automake-1.9.6 from autoconf-2.62. # Remove this macro when we can assume autoconf >= 2.62 or # autoconf >= 2.60 && automake >= 1.10. # AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness. m4_ifndef([AC_AUTOCONF_VERSION],[ m4_ifdef([AC_PROG_MKDIR_P], [ dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed. m4_define([AC_PROG_MKDIR_P], m4_defn([AC_PROG_MKDIR_P])[ AC_SUBST([MKDIR_P])])], [ dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P. AC_DEFUN_ONCE([AC_PROG_MKDIR_P], [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake MKDIR_P='$(mkdir_p)' AC_SUBST([MKDIR_P])])]) ]) # AC_C_RESTRICT # This definition is copied from post-2.69 Autoconf and overrides the # AC_C_RESTRICT macro from autoconf 2.60..2.69. It can be removed # once autoconf >= 2.70 can be assumed. It's painful to check version # numbers, and in practice this macro is more up-to-date than Autoconf # is, so override Autoconf unconditionally. AC_DEFUN([AC_C_RESTRICT], [AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], [ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. for ac_kw in __restrict __restrict__ _Restrict restrict; do AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } ]], [[int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ]])], [ac_cv_c_restrict=$ac_kw]) test "$ac_cv_c_restrict" != no && break done ]) AH_VERBATIM([restrict], [/* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict /* Work around a bug in Sun C++: it does not support _Restrict or __restrict__, even though the corresponding Sun C compiler ends up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. Perhaps some future version of Sun C++ will work with restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ #if defined __SUNPRO_CC && !defined __RESTRICT # define _Restrict # define __restrict__ #endif]) case $ac_cv_c_restrict in restrict) ;; no) AC_DEFINE([restrict], []) ;; *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; esac ])# AC_C_RESTRICT # gl_BIGENDIAN # is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. # Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some # macros invoke AC_C_BIGENDIAN with arguments. AC_DEFUN([gl_BIGENDIAN], [ AC_C_BIGENDIAN ]) # gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) # is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not # output a spurious "(cached)" mark in the midst of other configure output. # This macro should be used instead of AC_CACHE_VAL when it is not surrounded # by an AC_MSG_CHECKING/AC_MSG_RESULT pair. AC_DEFUN([gl_CACHE_VAL_SILENT], [ saved_as_echo_n="$as_echo_n" as_echo_n=':' AC_CACHE_VAL([$1], [$2]) as_echo_n="$saved_as_echo_n" ]) # AS_VAR_COPY was added in autoconf 2.63b m4_define_default([AS_VAR_COPY], [AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])]) # AC_PROG_SED was added in autoconf 2.59b m4_ifndef([AC_PROG_SED], [AC_DEFUN([AC_PROG_SED], [AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED, [dnl ac_script should not contain more than 99 commands (for HP-UX sed), dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed. 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 AS_UNSET([ac_script]) if test -z "$SED"; then ac_path_SED_found=false _AS_PATH_WALK([], [ 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_EXECUTABLE_P(["$ac_path_SED"]) || continue 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 echo >> conftest.nl "$ac_path_SED" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_SED_max-0}; then # Best so far, but keep looking for better ac_cv_path_SED=$ac_path_SED ac_path_SED_max=$ac_count fi 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]) if test -z "$ac_cv_path_SED"; then AC_ERROR([no acceptable sed could be found in \$PATH]) fi else ac_cv_path_SED=$SED fi ]) SED="$ac_cv_path_SED" AC_SUBST([SED])dnl rm -f conftest.sed ]) ]) ttfautohint-1.8.1/gnulib/m4/gnulib-comp.m40000644000175000001440000004111713222450627020220 0ustar00wlusers00000000000000# DO NOT EDIT! GENERATED AUTOMATICALLY! # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # 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 file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # 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. # # Generated by gnulib-tool. # # This file represents the compiled summary of the specification in # gnulib-cache.m4. It lists the computed macro invocations that need # to be invoked from configure.ac. # In projects that use version control, this file can be treated like # other built files. # This macro should be invoked from ./configure.ac, in the section # "Checks for programs", right after AC_PROG_CC, and certainly before # any checks for libraries, header files, types and library functions. AC_DEFUN([gl_EARLY], [ m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace m4_pattern_allow([^gl_ES$])dnl a valid locale name m4_pattern_allow([^gl_LIBOBJS$])dnl a variable m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable # Pre-early section. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_PROG_AR_RANLIB]) AC_REQUIRE([AM_PROG_CC_C_O]) # Code from module absolute-header: # Code from module alloca-opt: # Code from module builtin-expect: # Code from module dirname: # Code from module dirname-lgpl: # Code from module dosname: # Code from module double-slash-root: # Code from module errno: # Code from module error: # Code from module exitfail: # Code from module extensions: # Code from module extern-inline: # Code from module fcntl-h: # Code from module float: # Code from module getopt-gnu: # Code from module getopt-posix: # Code from module getprogname: # Code from module gettext-h: # Code from module git-version-gen: # Code from module havelib: # Code from module host-cpu-c-abi: # Code from module include_next: # Code from module intprops: # Code from module isatty: # Code from module limits-h: # Code from module lock: # Code from module malloc-posix: # Code from module memchr: # Code from module memmem-simple: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module multiarch: # Code from module nocrash: # Code from module progname: # Code from module size_max: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module ssize_t: # Code from module std-gnu11: # Code from module stdarg: dnl Some compilers (e.g., AIX 5.3 cc) need to be in c99 mode dnl for the builtin va_copy to work. With Autoconf 2.60 or later, dnl gl_PROG_CC_C99 arranges for this. With older Autoconf gl_PROG_CC_C99 dnl shouldn't hurt, though installers are on their own to set c99 mode. gl_PROG_CC_C99 # Code from module stdbool: # Code from module stddef: # Code from module stdint: # Code from module stdio: # Code from module stdlib: # Code from module strerror: # Code from module strerror-override: # Code from module strerror_r-posix: # Code from module string: # Code from module strndup: # Code from module strnlen: # Code from module strtok_r: # Code from module strtoull: # Code from module sys_types: # Code from module threadlib: gl_THREADLIB_EARLY # Code from module unistd: # Code from module vasnprintf: # Code from module vasprintf: # Code from module verify: # Code from module wchar: # Code from module xalloc: # Code from module xalloc-die: # Code from module xalloc-oversized: # Code from module xsize: # Code from module xstrndup: ]) # This macro should be invoked from ./configure.ac, in the section # "Check for header files, types and library functions". AC_DEFUN([gl_INIT], [ AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) gl_cond_libtool=true gl_m4_base='gnulib/m4' m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) m4_pushdef([gl_LIBSOURCES_LIST], []) m4_pushdef([gl_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='gnulib/src' gl_FUNC_ALLOCA gl___BUILTIN_EXPECT gl_DIRNAME gl_MODULE_INDICATOR([dirname]) gl_DIRNAME_LGPL gl_DOUBLE_SLASH_ROOT gl_HEADER_ERRNO_H gl_ERROR if test $ac_cv_lib_error_at_line = no; then AC_LIBOBJ([error]) gl_PREREQ_ERROR fi m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=error:3:c-format]) AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) AC_REQUIRE([gl_EXTERN_INLINE]) gl_FCNTL_H gl_FLOAT_H if test $REPLACE_FLOAT_LDBL = 1; then AC_LIBOBJ([float]) fi if test $REPLACE_ITOLD = 1; then AC_LIBOBJ([itold]) fi gl_FUNC_GETOPT_GNU dnl Because of the way gl_FUNC_GETOPT_GNU is implemented (the gl_getopt_required dnl mechanism), there is no need to do any AC_LIBOBJ or AC_SUBST here; they are dnl done in the getopt-posix module. gl_FUNC_GETOPT_POSIX if test $REPLACE_GETOPT = 1; then AC_LIBOBJ([getopt]) AC_LIBOBJ([getopt1]) dnl Arrange for unistd.h to include getopt.h. GNULIB_GL_UNISTD_H_GETOPT=1 fi AC_SUBST([GNULIB_GL_UNISTD_H_GETOPT]) gl_FUNC_GETPROGNAME AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_REQUIRE([gl_HOST_CPU_C_ABI]) gl_FUNC_ISATTY if test $REPLACE_ISATTY = 1; then AC_LIBOBJ([isatty]) gl_PREREQ_ISATTY fi gl_UNISTD_MODULE_INDICATOR([isatty]) gl_LIMITS_H gl_LOCK gl_MODULE_INDICATOR([lock]) gl_FUNC_MALLOC_POSIX if test $REPLACE_MALLOC = 1; then AC_LIBOBJ([malloc]) fi gl_STDLIB_MODULE_INDICATOR([malloc-posix]) gl_FUNC_MEMCHR if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then AC_LIBOBJ([memchr]) gl_PREREQ_MEMCHR fi gl_STRING_MODULE_INDICATOR([memchr]) gl_FUNC_MEMMEM_SIMPLE if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then AC_LIBOBJ([memmem]) fi gl_STRING_MODULE_INDICATOR([memmem]) AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-inval]) fi AC_REQUIRE([gl_MSVC_NOTHROW]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-nothrow]) fi gl_MODULE_INDICATOR([msvc-nothrow]) gl_MULTIARCH AC_CHECK_DECLS([program_invocation_name], [], [], [#include ]) AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include ]) gl_SIZE_MAX gt_TYPE_SSIZE_T gl_STDARG_H AM_STDBOOL_H gl_STDDEF_H gl_STDINT_H gl_STDIO_H gl_STDLIB_H gl_FUNC_STRERROR if test $REPLACE_STRERROR = 1; then AC_LIBOBJ([strerror]) fi gl_MODULE_INDICATOR([strerror]) gl_STRING_MODULE_INDICATOR([strerror]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then AC_LIBOBJ([strerror-override]) gl_PREREQ_SYS_H_WINSOCK2 fi gl_FUNC_STRERROR_R if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1; then AC_LIBOBJ([strerror_r]) gl_PREREQ_STRERROR_R fi gl_STRING_MODULE_INDICATOR([strerror_r]) dnl For the modules argp, error. gl_MODULE_INDICATOR([strerror_r-posix]) gl_HEADER_STRING_H gl_FUNC_STRNDUP if test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1; then AC_LIBOBJ([strndup]) fi gl_STRING_MODULE_INDICATOR([strndup]) gl_FUNC_STRNLEN if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then AC_LIBOBJ([strnlen]) gl_PREREQ_STRNLEN fi gl_STRING_MODULE_INDICATOR([strnlen]) gl_FUNC_STRTOK_R if test $HAVE_STRTOK_R = 0 || test $REPLACE_STRTOK_R = 1; then AC_LIBOBJ([strtok_r]) gl_PREREQ_STRTOK_R fi gl_STRING_MODULE_INDICATOR([strtok_r]) gl_FUNC_STRTOULL if test $HAVE_STRTOULL = 0; then AC_LIBOBJ([strtoull]) gl_PREREQ_STRTOULL fi gl_STDLIB_MODULE_INDICATOR([strtoull]) gl_SYS_TYPES_H AC_PROG_MKDIR_P gl_THREADLIB gl_UNISTD_H gl_FUNC_VASNPRINTF gl_FUNC_VASPRINTF gl_STDIO_MODULE_INDICATOR([vasprintf]) m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=asprintf:2:c-format]) AM_][XGETTEXT_OPTION([--flag=vasprintf:2:c-format])]) gl_WCHAR_H gl_XALLOC gl_XSIZE gl_XSTRNDUP # End of code from modules m4_ifval(gl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || for gl_file in ]gl_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([gl_LIBSOURCES_DIR]) m4_popdef([gl_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gl_libobjs= gl_ltlibobjs= if test -n "$gl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" done fi AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) ]) gltests_libdeps= gltests_ltlibdeps= m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) m4_pushdef([gltests_LIBSOURCES_LIST], []) m4_pushdef([gltests_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='tests' changequote(,)dnl gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS changequote([, ])dnl AC_SUBST([gltests_WITNESS]) gl_module_indicator_condition=$gltests_WITNESS m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) m4_popdef([gl_MODULE_INDICATOR_CONDITION]) m4_ifval(gltests_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ || for gl_file in ]gltests_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([gltests_LIBSOURCES_DIR]) m4_popdef([gltests_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gltests_libobjs= gltests_ltlibobjs= if test -n "$gltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" done fi AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_LIBOBJ], [ AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gl_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gl_LIBSOURCES_DIR], [gnulib/src]) m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_LIBOBJ], [ AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gltests_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gltests_LIBSOURCES_DIR], [tests]) m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # This macro records the list of files which have been installed by # gnulib-tool and may be removed by future gnulib-tool invocations. AC_DEFUN([gl_FILE_LIST], [ build-aux/config.rpath build-aux/git-version-gen lib/_Noreturn.h lib/alloca.in.h lib/arg-nonnull.h lib/asnprintf.c lib/asprintf.c lib/basename-lgpl.c lib/basename.c lib/c++defs.h lib/dirname-lgpl.c lib/dirname.c lib/dirname.h lib/dosname.h lib/errno.in.h lib/error.c lib/error.h lib/exitfail.c lib/exitfail.h lib/fcntl.in.h lib/float+.h lib/float.c lib/float.in.h lib/getopt-cdefs.in.h lib/getopt-core.h lib/getopt-ext.h lib/getopt-pfx-core.h lib/getopt-pfx-ext.h lib/getopt.c lib/getopt.in.h lib/getopt1.c lib/getopt_int.h lib/getprogname.c lib/getprogname.h lib/gettext.h lib/glthread/lock.c lib/glthread/lock.h lib/glthread/threadlib.c lib/intprops.h lib/isatty.c lib/itold.c lib/limits.in.h lib/malloc.c lib/memchr.c lib/memchr.valgrind lib/memmem.c lib/msvc-inval.c lib/msvc-inval.h lib/msvc-nothrow.c lib/msvc-nothrow.h lib/printf-args.c lib/printf-args.h lib/printf-parse.c lib/printf-parse.h lib/progname.c lib/progname.h lib/size_max.h lib/stdarg.in.h lib/stdbool.in.h lib/stddef.in.h lib/stdint.in.h lib/stdio.in.h lib/stdlib.in.h lib/str-two-way.h lib/strerror-override.c lib/strerror-override.h lib/strerror.c lib/strerror_r.c lib/string.in.h lib/stripslash.c lib/strndup.c lib/strnlen.c lib/strtok_r.c lib/strtol.c lib/strtoul.c lib/strtoull.c lib/sys_types.in.h lib/unistd.c lib/unistd.in.h lib/vasnprintf.c lib/vasnprintf.h lib/vasprintf.c lib/verify.h lib/warn-on-use.h lib/wchar.in.h lib/xalloc-die.c lib/xalloc-oversized.h lib/xalloc.h lib/xmalloc.c lib/xsize.c lib/xsize.h lib/xstrndup.c lib/xstrndup.h m4/00gnulib.m4 m4/absolute-header.m4 m4/alloca.m4 m4/asm-underscore.m4 m4/builtin-expect.m4 m4/dirname.m4 m4/double-slash-root.m4 m4/errno_h.m4 m4/error.m4 m4/exponentd.m4 m4/extensions.m4 m4/extern-inline.m4 m4/fcntl-o.m4 m4/fcntl_h.m4 m4/float_h.m4 m4/getopt.m4 m4/getprogname.m4 m4/gnulib-common.m4 m4/host-cpu-c-abi.m4 m4/include_next.m4 m4/intmax_t.m4 m4/inttypes_h.m4 m4/isatty.m4 m4/lib-ld.m4 m4/lib-link.m4 m4/lib-prefix.m4 m4/limits-h.m4 m4/lock.m4 m4/longlong.m4 m4/malloc.m4 m4/math_h.m4 m4/memchr.m4 m4/memmem.m4 m4/mmap-anon.m4 m4/msvc-inval.m4 m4/msvc-nothrow.m4 m4/multiarch.m4 m4/nocrash.m4 m4/off_t.m4 m4/onceonly.m4 m4/printf.m4 m4/pthread_rwlock_rdlock.m4 m4/size_max.m4 m4/ssize_t.m4 m4/std-gnu11.m4 m4/stdarg.m4 m4/stdbool.m4 m4/stddef_h.m4 m4/stdint.m4 m4/stdint_h.m4 m4/stdio_h.m4 m4/stdlib_h.m4 m4/strerror.m4 m4/strerror_r.m4 m4/string_h.m4 m4/strndup.m4 m4/strnlen.m4 m4/strtok_r.m4 m4/strtoull.m4 m4/sys_socket_h.m4 m4/sys_types_h.m4 m4/threadlib.m4 m4/unistd_h.m4 m4/vasnprintf.m4 m4/vasprintf.m4 m4/warn-on-use.m4 m4/wchar_h.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/xalloc.m4 m4/xsize.m4 m4/xstrndup.m4 ]) ttfautohint-1.8.1/gnulib/m4/host-cpu-c-abi.m40000644000175000001440000003043113222450622020507 0ustar00wlusers00000000000000# host-cpu-c-abi.m4 serial 8 dnl Copyright (C) 2002-2017 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 and Sam Steingold. dnl Sets the HOST_CPU variable to the canonical name of the CPU. dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its dnl C language ABI (application binary interface). dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in dnl config.h. dnl dnl This canonical name can be used to select a particular assembly language dnl source file that will interoperate with C code on the given host. dnl dnl For example: dnl * 'i386' and 'sparc' are different canonical names, because code for i386 dnl will not run on SPARC CPUs and vice versa. They have different dnl instruction sets. dnl * 'sparc' and 'sparc64' are different canonical names, because code for dnl 'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code dnl contains 32-bit instructions, whereas 'sparc64' code contains 64-bit dnl instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit dnl mode, but not both. dnl * 'mips' and 'mipsn32' are different canonical names, because they use dnl different argument passing and return conventions for C functions, and dnl although the instruction set of 'mips' is a large subset of the dnl instruction set of 'mipsn32'. dnl * 'mipsn32' and 'mips64' are different canonical names, because they use dnl different sizes for the C types like 'int' and 'void *', and although dnl the instruction sets of 'mipsn32' and 'mips64' are the same. dnl * The same canonical name is used for different endiannesses. You can dnl determine the endianness through preprocessor symbols: dnl - 'arm': test __ARMEL__. dnl - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL. dnl - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN. dnl * The same name 'i386' is used for CPUs of type i386, i486, i586 dnl (Pentium), AMD K7, Pentium II, Pentium IV, etc., because dnl - Instructions that do not exist on all of these CPUs (cmpxchg, dnl MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your dnl assembly language source files use such instructions, you will dnl need to make the distinction. dnl - Speed of execution of the common instruction set is reasonable across dnl the entire family of CPUs. If you have assembly language source files dnl that are optimized for particular CPU types (like GNU gmp has), you dnl will need to make the distinction. dnl See . AC_DEFUN([gl_HOST_CPU_C_ABI], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_C_ASM]) AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi], [case "$host_cpu" in changequote(,)dnl i[4567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi=i386 ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=x86_64-x32], [gl_cv_host_cpu_c_abi=x86_64])], [gl_cv_host_cpu_c_abi=i386]) ;; changequote(,)dnl alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) changequote([,])dnl gl_cv_host_cpu_c_abi=alpha ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __aarch64__ int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=arm64-ilp32], [gl_cv_host_cpu_c_abi=arm64])], [# Don't distinguish little-endian and big-endian arm, since they # don't require different machine code for simple operations and # since the user can distinguish them through the preprocessor # defines __ARMEL__ vs. __ARMEB__. # But distinguish arm which passes floating-point arguments and # return values in integer registers (r0, r1, ...) - this is # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which # passes them in float registers (s0, s1, ...) and double registers # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer # sets the preprocessor defines __ARM_PCS (for the first case) and # __ARM_PCS_VFP (for the second case), but older GCC does not. echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c # Look for a reference to the register d0 in the .s file. AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 if LC_ALL=C grep -E 'd0,' conftest.$gl_asmext >/dev/null; then gl_cv_host_cpu_c_abi=armhf else gl_cv_host_cpu_c_abi=arm fi rm -f conftest* ]) ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=hppa64], [gl_cv_host_cpu_c_abi=hppa]) ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=ia64-ilp32], [gl_cv_host_cpu_c_abi=ia64]) ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mips64], [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIN32. # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIO32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (_MIPS_SIM == _ABIN32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mipsn32], [gl_cv_host_cpu_c_abi=mips])]) ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail #endif ]])], [# On powerpc64, there are two ABIs on Linux: The AIX compatible # one and the ELFv2 one. The latter defines _CALL_ELF=2. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _CALL_ELF && _CALL_ELF == 2 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=powerpc64-elfv2], [gl_cv_host_cpu_c_abi=powerpc64]) ], [gl_cv_host_cpu_c_abi=powerpc]) ;; rs6000 ) gl_cv_host_cpu_c_abi=powerpc ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=s390x], [gl_cv_host_cpu_c_abi=s390]) ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=sparc64], [gl_cv_host_cpu_c_abi=sparc]) ;; *) gl_cv_host_cpu_c_abi="$host_cpu" ;; esac ]) dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same. HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" AC_SUBST([HOST_CPU]) AC_SUBST([HOST_CPU_C_ABI]) # This was # AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) # earlier, but KAI C++ 3.2d doesn't like this. sed -e 's/-/_/g' >> confdefs.h <. dnl Additionally, with this same compiler, include_next is a no-op when dnl used in a header file that was included by specifying its absolute dnl file name. Despite these two bugs, include_next is used in the dnl compiler's . By virtue of the second bug, we need to use dnl include_next as well in this case. cat < conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" dnl We intentionally avoid using AC_LANG_SOURCE here. AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], [gl_cv_have_include_next=yes], [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], [gl_cv_have_include_next=buggy], [gl_cv_have_include_next=no]) ]) CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 ]) PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi AC_SUBST([INCLUDE_NEXT]) AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) AC_SUBST([PRAGMA_SYSTEM_HEADER]) AC_CACHE_CHECK([whether system header files limit the line length], [gl_cv_pragma_columns], [dnl HP NonStop systems, which define __TANDEM, have this misfeature. AC_EGREP_CPP([choke me], [ #ifdef __TANDEM choke me #endif ], [gl_cv_pragma_columns=yes], [gl_cv_pragma_columns=no]) ]) if test $gl_cv_pragma_columns = yes; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi AC_SUBST([PRAGMA_COLUMNS]) ]) # gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------------ # For each arg foo.h, if #include_next works, define NEXT_FOO_H to be # ''; otherwise define it to be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # Also, if #include_next works as first preprocessing directive in a file, # define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be ''; otherwise define it to # be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # That way, a header file with the following line: # #@INCLUDE_NEXT@ @NEXT_FOO_H@ # or # #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ # behaves (after sed substitution) as if it contained # #include_next # even if the compiler does not support include_next. # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. # # This macro also checks whether each header exists, by invoking # AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. AC_DEFUN([gl_CHECK_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [check]) ]) # gl_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------ # Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. # This is suitable for headers like that are standardized by C89 # and therefore can be assumed to exist. AC_DEFUN([gl_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [assume]) ]) # The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], [ AC_REQUIRE([gl_INCLUDE_NEXT]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_if([$2], [check], [AC_CHECK_HEADERS_ONCE([$1]) ]) dnl FIXME: gl_next_header and gl_header_exists must be used unquoted dnl until we can assume autoconf 2.64 or newer. m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_next_header], [gl_cv_next_]m4_defn([gl_HEADER_NAME])) if test $gl_cv_have_include_next = yes; then AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) else AC_CACHE_CHECK( [absolute name of <]m4_defn([gl_HEADER_NAME])[>], m4_defn([gl_next_header]), [m4_if([$2], [check], [AS_VAR_PUSHDEF([gl_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME])) if test AS_VAR_GET(gl_header_exists) = yes; then AS_VAR_POPDEF([gl_header_exists]) ]) gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) AS_VAR_SET(gl_next_header, ['"'$gl_header'"']) m4_if([$2], [check], [else AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) fi ]) ]) fi AC_SUBST( AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), [AS_VAR_GET(gl_next_header)]) if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'gl_HEADER_NAME'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=AS_VAR_GET(gl_next_header) fi AC_SUBST( AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), [$gl_next_as_first_directive]) AS_VAR_POPDEF([gl_next_header])]) ]) # Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; # this fallback is safe for all earlier autoconf versions. m4_define_default([AC_LANG_DEFINES_PROVIDED]) ttfautohint-1.8.1/gnulib/m4/intmax_t.m40000644000175000001440000000416613222450622017625 0ustar00wlusers00000000000000# intmax_t.m4 serial 8 dnl Copyright (C) 1997-2004, 2006-2007, 2009-2017 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 Paul Eggert. AC_PREREQ([2.53]) # Define intmax_t to 'long' or 'long long' # if it is not already defined in or . AC_DEFUN([gl_AC_TYPE_INTMAX_T], [ dnl For simplicity, we assume that a header file defines 'intmax_t' if and dnl only if it defines 'uintmax_t'. AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) test $ac_cv_type_long_long_int = yes \ && ac_type='long long' \ || ac_type='long' AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], [Define to long or long long if and don't define.]) else AC_DEFINE([HAVE_INTMAX_T], [1], [Define if you have the 'intmax_t' type in or .]) fi ]) dnl An alternative would be to explicitly test for 'intmax_t'. AC_DEFUN([gt_AC_TYPE_INTMAX_T], [ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include #if HAVE_STDINT_H_WITH_UINTMAX #include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include #endif ]], [[intmax_t x = -1; return !x;]])], [gt_cv_c_intmax_t=yes], [gt_cv_c_intmax_t=no])]) if test $gt_cv_c_intmax_t = yes; then AC_DEFINE([HAVE_INTMAX_T], [1], [Define if you have the 'intmax_t' type in or .]) else AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) test $ac_cv_type_long_long_int = yes \ && ac_type='long long' \ || ac_type='long' AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], [Define to long or long long if and don't define.]) fi ]) ttfautohint-1.8.1/gnulib/m4/inttypes_h.m40000644000175000001440000000177413222450622020172 0ustar00wlusers00000000000000# inttypes_h.m4 serial 10 dnl Copyright (C) 1997-2004, 2006, 2008-2017 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 Paul Eggert. # Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[uintmax_t i = (uintmax_t) -1; return !i;]])], [gl_cv_header_inttypes_h=yes], [gl_cv_header_inttypes_h=no])]) if test $gl_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) ttfautohint-1.8.1/gnulib/m4/isatty.m40000644000175000001440000000124213222450622017307 0ustar00wlusers00000000000000# isatty.m4 serial 3 dnl Copyright (C) 2012-2017 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. AC_DEFUN([gl_FUNC_ISATTY], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl On native Windows, the system's isatty(), defined as an alias of _isatty() dnl in the "oldnames" library, returns true for the NUL device. case $host_os in mingw*) REPLACE_ISATTY=1 ;; esac ]) # Prerequisites of lib/isatty.c. AC_DEFUN([gl_PREREQ_ISATTY], [:]) ttfautohint-1.8.1/gnulib/m4/lib-ld.m40000644000175000001440000001237213222450622017143 0ustar00wlusers00000000000000# lib-ld.m4 serial 9 dnl Copyright (C) 1996-2003, 2009-2017 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 Subroutines of libtool.m4, dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 /dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi if test -n "$LD"; then AC_MSG_CHECKING([for ld]) elif test "$GCC" = yes; then AC_MSG_CHECKING([for ld used by $CC]) elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi if test -n "$LD"; then # Let the user override the test with a path. : else AC_CACHE_VAL([acl_cv_path_LD], [ acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) acl_output=`($CC -print-prog-name=ld) 2>&5` ;; esac case $acl_output in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` done # Got the pathname. No search in PATH is needed. acl_cv_path_LD="$acl_output" ac_prog= ;; "") # If it fails, then pretend we aren't using GCC. ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac fi if test -n "$ac_prog"; then # Search for $ac_prog in $PATH. acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_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 `"$acl_cv_path_LD" -v 2>&1 = 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl Autoconf >= 2.61 supports dots in --with options. pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH(P_A_C_K[-prefix], [[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([P_A_C_K]) popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) ttfautohint-1.8.1/gnulib/m4/lib-prefix.m40000644000175000001440000002405513222450622020042 0ustar00wlusers00000000000000# lib-prefix.m4 serial 11 dnl Copyright (C) 2001-2005, 2008-2017 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. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a variable acl_libdirstem, containing the basename of the libdir, either dnl "lib" or "lib64" or "lib/64", dnl - a variable acl_libdirstem2, as a secondary possible value for dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or dnl "lib/amd64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. dnl On glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine dnl the compiler's default mode by looking at the compiler's library search dnl path. If at least one of its elements ends in /lib64 or points to a dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. dnl Otherwise we use the default, namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_HOST_CPU_C_ABI]) dnl Allow the user to override the result by setting acl_cv_libdirstems. AC_CACHE_CHECK([for the common suffixes of directories in the library search path], [acl_cv_libdirstems], [acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl . dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _LP64 int ok; #else error fail #endif ]])], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) ]) if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) dnl If $CC generates code for a 32-bit ABI, the libraries are dnl surely under $prefix/lib, not $prefix/lib64. case "$gl_cv_host_cpu_c_abi" in i386 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | s390 | sparc) ;; *) # x86_64 | arm64 | hppa64 | ia64 | mips64 | powerpc64* | s390x | sparc64 | ... dnl The result is a property of the system. However, non-system dnl compilers sometimes have odd library search paths. Therefore dnl prefer asking /usr/bin/gcc, if available, rather than $CC. searchpath=`(if test -f /usr/bin/gcc \ && LC_ALL=C /usr/bin/gcc -print-search-dirs >/dev/null 2>/dev/null; then \ LC_ALL=C /usr/bin/gcc -print-search-dirs; \ else \ LC_ALL=C $CC -print-search-dirs; \ fi) 2>/dev/null \ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2" ]) # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2. acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'` ]) ttfautohint-1.8.1/gnulib/m4/libtool.m40000644000175000001440000112507313222450616017453 0ustar00wlusers00000000000000# 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 # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # 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' ;; 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*) 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*) ;; *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 ;; *) _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 ;; 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*) 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 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*) 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 ttfautohint-1.8.1/gnulib/m4/limits-h.m40000644000175000001440000000202613222450622017521 0ustar00wlusers00000000000000dnl Check whether limits.h has needed features. dnl Copyright 2016-2017 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 Paul Eggert. AC_DEFUN_ONCE([gl_LIMITS_H], [ gl_CHECK_NEXT_HEADERS([limits.h]) AC_CACHE_CHECK([whether limits.h has ULLONG_WIDTH etc.], [gl_cv_header_limits_width], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include int ullw = ULLONG_WIDTH;]])], [gl_cv_header_limits_width=yes], [gl_cv_header_limits_width=no])]) if test "$gl_cv_header_limits_width" = yes; then LIMITS_H= else LIMITS_H=limits.h fi AC_SUBST([LIMITS_H]) AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) ]) ttfautohint-1.8.1/gnulib/m4/lock.m40000644000175000001440000000303713222450622016726 0ustar00wlusers00000000000000# lock.m4 serial 14 dnl Copyright (C) 2005-2017 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([gl_LOCK], [ AC_REQUIRE([gl_THREADLIB]) if test "$gl_threads_api" = posix; then # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. has_rwlock=false AC_CHECK_TYPE([pthread_rwlock_t], [has_rwlock=true AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1], [Define if the POSIX multithreading library has read/write locks.])], [], [#include ]) if $has_rwlock; then gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. AC_COMPILE_IFELSE([ AC_LANG_PROGRAM( [[#include ]], [[ #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ]])], [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1], [Define if the defines PTHREAD_MUTEX_RECURSIVE.])]) fi gl_PREREQ_LOCK ]) # Prerequisites of lib/glthread/lock.c. AC_DEFUN([gl_PREREQ_LOCK], [:]) ttfautohint-1.8.1/gnulib/m4/longlong.m40000644000175000001440000001120313222450622017607 0ustar00wlusers00000000000000# longlong.m4 serial 17 dnl Copyright (C) 1999-2007, 2009-2017 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 Paul Eggert. # Define HAVE_LONG_LONG_INT if 'long long int' works. # This fixes a bug in Autoconf 2.61, and can be faster # than what's in Autoconf 2.62 through 2.68. # Note: If the type 'long long int' exists but is only 32 bits large # (as on some very old compilers), HAVE_LONG_LONG_INT will not be # defined. In this case you can treat 'long long int' like 'long int'. AC_DEFUN([AC_TYPE_LONG_LONG_INT], [ AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], [ac_cv_type_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int if test $ac_cv_type_long_long_int = yes; then dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. dnl If cross compiling, assume the bug is not important, since dnl nobody cross compiles for this platform as far as we know. AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[@%:@include @%:@ifndef LLONG_MAX @%:@ define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) @%:@ define LLONG_MAX (HALF - 1 + HALF) @%:@endif]], [[long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0;]])], [], [ac_cv_type_long_long_int=no], [:]) fi fi]) if test $ac_cv_type_long_long_int = yes; then AC_DEFINE([HAVE_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'long long int'.]) fi ]) # Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. # This fixes a bug in Autoconf 2.61, and can be faster # than what's in Autoconf 2.62 through 2.68. # Note: If the type 'unsigned long long int' exists but is only 32 bits # large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT # will not be defined. In this case you can treat 'unsigned long long int' # like 'unsigned long int'. AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], [ AC_CACHE_CHECK([for unsigned long long int], [ac_cv_type_unsigned_long_long_int], [ac_cv_type_unsigned_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then AC_LINK_IFELSE( [_AC_TYPE_LONG_LONG_SNIPPET], [], [ac_cv_type_unsigned_long_long_int=no]) fi]) if test $ac_cv_type_unsigned_long_long_int = yes; then AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'unsigned long long int'.]) fi ]) # Expands to a C program that can be used to test for simultaneous support # of 'long long' and 'unsigned long long'. We don't want to say that # 'long long' is available if 'unsigned long long' is not, or vice versa, # because too many programs rely on the symmetry between signed and unsigned # integer types (excluding 'bool'). AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], [ AC_LANG_PROGRAM( [[/* For now, do not test the preprocessor; as of 2007 there are too many implementations with broken preprocessors. Perhaps this can be revisited in 2012. In the meantime, code should not expect #if to work with literals wider than 32 bits. */ /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63;]], [[/* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull));]]) ]) ttfautohint-1.8.1/gnulib/m4/ltoptions.m40000644000175000001440000003426213222450616020040 0ustar00wlusers00000000000000# 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])]) ttfautohint-1.8.1/gnulib/m4/ltsugar.m40000644000175000001440000001044013222450616017456 0ustar00wlusers00000000000000# 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 ]) ttfautohint-1.8.1/gnulib/m4/ltversion.m40000644000175000001440000000127313222450616020026 0ustar00wlusers00000000000000# 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) ]) ttfautohint-1.8.1/gnulib/m4/lt~obsolete.m40000644000175000001440000001377413222450616020364 0ustar00wlusers00000000000000# 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])]) ttfautohint-1.8.1/gnulib/m4/malloc.m40000644000175000001440000000643313222450622017250 0ustar00wlusers00000000000000# malloc.m4 serial 16 dnl Copyright (C) 2007, 2009-2017 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. m4_version_prereq([2.70], [] ,[ # This is adapted with modifications from upstream Autoconf here: # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c AC_DEFUN([_AC_FUNC_MALLOC_IF], [ AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CHECK_HEADERS([stdlib.h]) AC_CACHE_CHECK([for GNU libc compatible malloc], [ac_cv_func_malloc_0_nonnull], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif ]], [[char *p = malloc (0); int result = !p; free (p); return result;]]) ], [ac_cv_func_malloc_0_nonnull=yes], [ac_cv_func_malloc_0_nonnull=no], [case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | gnu* | freebsd* | netbsd* | openbsd* \ | hpux* | solaris* | cygwin* | mingw*) ac_cv_func_malloc_0_nonnull=yes ;; # If we don't know, assume the worst. *) ac_cv_func_malloc_0_nonnull=no ;; esac ]) ]) AS_IF([test $ac_cv_func_malloc_0_nonnull = yes], [$1], [$2]) ])# _AC_FUNC_MALLOC_IF ]) # gl_FUNC_MALLOC_GNU # ------------------ # Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if # it is not. AC_DEFUN([gl_FUNC_MALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl _AC_FUNC_MALLOC_IF is defined in Autoconf. _AC_FUNC_MALLOC_IF( [AC_DEFINE([HAVE_MALLOC_GNU], [1], [Define to 1 if your system has a GNU libc compatible 'malloc' function, and to 0 otherwise.])], [AC_DEFINE([HAVE_MALLOC_GNU], [0]) REPLACE_MALLOC=1 ]) ]) # gl_FUNC_MALLOC_POSIX # -------------------- # Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it # fails), and replace malloc if it is not. AC_DEFUN([gl_FUNC_MALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) if test $gl_cv_func_malloc_posix = yes; then AC_DEFINE([HAVE_MALLOC_POSIX], [1], [Define if the 'malloc' function is POSIX compliant.]) else REPLACE_MALLOC=1 fi ]) # Test whether malloc, realloc, calloc are POSIX compliant, # Set gl_cv_func_malloc_posix to yes or no accordingly. AC_DEFUN([gl_CHECK_MALLOC_POSIX], [ AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant], [gl_cv_func_malloc_posix], [ dnl It is too dangerous to try to allocate a large amount of memory: dnl some systems go to their knees when you do that. So assume that dnl all Unix implementations of the function are POSIX compliant. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[]], [[#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ choke me #endif ]])], [gl_cv_func_malloc_posix=yes], [gl_cv_func_malloc_posix=no]) ]) ]) ttfautohint-1.8.1/gnulib/m4/memchr.m40000644000175000001440000000602213222450622017246 0ustar00wlusers00000000000000# memchr.m4 serial 13 dnl Copyright (C) 2002-2004, 2009-2017 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. AC_DEFUN_ONCE([gl_FUNC_MEMCHR], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) m4_ifdef([gl_FUNC_MEMCHR_OBSOLETE], [ dnl These days, we assume memchr is present. But if support for old dnl platforms is desired: AC_CHECK_FUNCS_ONCE([memchr]) if test $ac_cv_func_memchr = no; then HAVE_MEMCHR=0 fi ]) if test $HAVE_MEMCHR = 1; then # Detect platform-specific bugs in some versions of glibc: # memchr should not dereference anything with length 0 # https://bugzilla.redhat.com/show_bug.cgi?id=499689 # memchr should not dereference overestimated length after a match # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 # https://sourceware.org/bugzilla/show_bug.cgi?id=10162 # Assume that memchr works on platforms that lack mprotect. AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #if HAVE_SYS_MMAN_H # include # include # include # include # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif ]], [[ int result = 0; char *fence = NULL; #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) fence = two_pages + pagesize; } #endif if (fence) { if (memchr (fence, 0, 0)) result |= 1; strcpy (fence - 9, "12345678"); if (memchr (fence - 9, 0, 79) != fence - 1) result |= 2; if (memchr (fence - 1, 0, 3) != fence - 1) result |= 4; } return result; ]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_memchr_works="guessing yes" ;; # Be pessimistic for now. *) gl_cv_func_memchr_works="guessing no" ;; esac ]) ]) case "$gl_cv_func_memchr_works" in *yes) ;; *) REPLACE_MEMCHR=1 ;; esac fi ]) # Prerequisites of lib/memchr.c. AC_DEFUN([gl_PREREQ_MEMCHR], [ AC_CHECK_HEADERS([bp-sym.h]) ]) ttfautohint-1.8.1/gnulib/m4/memmem.m40000644000175000001440000001136613222450622017257 0ustar00wlusers00000000000000# memmem.m4 serial 25 dnl Copyright (C) 2002-2004, 2007-2017 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 Check that memmem is present and functional. AC_DEFUN([gl_FUNC_MEMMEM_SIMPLE], [ dnl Persuade glibc to declare memmem(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([memmem]) if test $ac_cv_func_memmem = yes; then HAVE_MEMMEM=1 else HAVE_MEMMEM=0 fi AC_CHECK_DECLS_ONCE([memmem]) if test $ac_cv_have_decl_memmem = no; then HAVE_DECL_MEMMEM=0 else dnl Detect https://sourceware.org/bugzilla/show_bug.cgi?id=12092. dnl Also check that we handle empty needles correctly. AC_CACHE_CHECK([whether memmem works], [gl_cv_func_memmem_works_always], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include /* for memmem */ #define P "_EF_BF_BD" #define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P #define NEEDLE P P P P P ]], [[ int result = 0; if (memmem (HAYSTACK, strlen (HAYSTACK), NEEDLE, strlen (NEEDLE))) result |= 1; /* Check for empty needle behavior. */ { const char *haystack = "AAA"; if (memmem (haystack, 3, NULL, 0) != haystack) result |= 2; } return result; ]])], [gl_cv_func_memmem_works_always=yes], [gl_cv_func_memmem_works_always=no], [dnl glibc 2.9..2.12 and cygwin 1.7.7 have issue #12092 above. dnl Also empty needles work on glibc >= 2.1 and cygwin >= 1.7.0. dnl uClibc is not affected, since it uses different source code. dnl Assume that it works on all other platforms (even if not linear). AC_EGREP_CPP([Lucky user], [ #ifdef __GNU_LIBRARY__ #include #if ((__GLIBC__ == 2 && ((__GLIBC_MINOR > 0 && __GLIBC_MINOR__ < 9) \ || __GLIBC_MINOR__ > 12)) \ || (__GLIBC__ > 2)) \ || defined __UCLIBC__ Lucky user #endif #elif defined __CYGWIN__ #include #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) Lucky user #endif #else Lucky user #endif ], [gl_cv_func_memmem_works_always="guessing yes"], [gl_cv_func_memmem_works_always="guessing no"]) ]) ]) case "$gl_cv_func_memmem_works_always" in *yes) ;; *) REPLACE_MEMMEM=1 ;; esac fi gl_PREREQ_MEMMEM ]) # gl_FUNC_MEMMEM_SIMPLE dnl Additionally, check that memmem has linear performance characteristics AC_DEFUN([gl_FUNC_MEMMEM], [ AC_REQUIRE([gl_FUNC_MEMMEM_SIMPLE]) if test $HAVE_DECL_MEMMEM = 1 && test $REPLACE_MEMMEM = 0; then AC_CACHE_CHECK([whether memmem works in linear time], [gl_cv_func_memmem_works_fast], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include /* for signal */ #include /* for memmem */ #include /* for malloc */ #include /* for alarm */ static void quit (int sig) { _exit (sig + 128); } ]], [[ int result = 0; size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 1); char *needle = (char *) malloc (m + 1); /* Failure to compile this test due to missing alarm is okay, since all such platforms (mingw) also lack memmem. */ signal (SIGALRM, quit); alarm (5); /* Check for quadratic performance. */ if (haystack && needle) { memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; memset (needle, 'A', m); needle[m] = 'B'; if (!memmem (haystack, 2 * m + 1, needle, m + 1)) result |= 1; } /* Free allocated memory, in case some sanitizer is watching. */ free (haystack); free (needle); return result; ]])], [gl_cv_func_memmem_works_fast=yes], [gl_cv_func_memmem_works_fast=no], [dnl Only glibc >= 2.9 and cygwin > 1.7.0 are known to have a dnl memmem that works in linear time. AC_EGREP_CPP([Lucky user], [ #include #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2)) \ && !defined __UCLIBC__ Lucky user #endif #endif #ifdef __CYGWIN__ #include #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 0) Lucky user #endif #endif ], [gl_cv_func_memmem_works_fast="guessing yes"], [gl_cv_func_memmem_works_fast="guessing no"]) ]) ]) case "$gl_cv_func_memmem_works_fast" in *yes) ;; *) REPLACE_MEMMEM=1 ;; esac fi ]) # gl_FUNC_MEMMEM # Prerequisites of lib/memmem.c. AC_DEFUN([gl_PREREQ_MEMMEM], [:]) ttfautohint-1.8.1/gnulib/m4/mmap-anon.m40000644000175000001440000000373313222450622017664 0ustar00wlusers00000000000000# mmap-anon.m4 serial 10 dnl Copyright (C) 2005, 2007, 2009-2017 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. # Detect how mmap can be used to create anonymous (not file-backed) memory # mappings. # - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS # and MAP_ANON exist and have the same value. # - On HP-UX, only MAP_ANONYMOUS exists. # - On Mac OS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists. # - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be # used. AC_DEFUN([gl_FUNC_MMAP_ANON], [ dnl Persuade glibc to define MAP_ANONYMOUS. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no]) # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then AC_MSG_CHECKING([for MAP_ANONYMOUS]) AC_EGREP_CPP([I cannot identify this map], [ #include #ifdef MAP_ANONYMOUS I cannot identify this map #endif ], [gl_have_mmap_anonymous=yes]) if test $gl_have_mmap_anonymous != yes; then AC_EGREP_CPP([I cannot identify this map], [ #include #ifdef MAP_ANON I cannot identify this map #endif ], [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON], [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.]) gl_have_mmap_anonymous=yes]) fi AC_MSG_RESULT([$gl_have_mmap_anonymous]) if test $gl_have_mmap_anonymous = yes; then AC_DEFINE([HAVE_MAP_ANONYMOUS], [1], [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including config.h and .]) fi fi ]) ttfautohint-1.8.1/gnulib/m4/msvc-inval.m40000644000175000001440000000133413222450622020053 0ustar00wlusers00000000000000# msvc-inval.m4 serial 1 dnl Copyright (C) 2011-2017 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. AC_DEFUN([gl_MSVC_INVAL], [ AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler]) if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1], [Define to 1 on MSVC platforms that have the "invalid parameter handler" concept.]) else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER]) ]) ttfautohint-1.8.1/gnulib/m4/msvc-nothrow.m40000644000175000001440000000053013222450622020437 0ustar00wlusers00000000000000# msvc-nothrow.m4 serial 1 dnl Copyright (C) 2011-2017 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. AC_DEFUN([gl_MSVC_NOTHROW], [ AC_REQUIRE([gl_MSVC_INVAL]) ]) ttfautohint-1.8.1/gnulib/m4/multiarch.m40000644000175000001440000000367413222450622017775 0ustar00wlusers00000000000000# multiarch.m4 serial 7 dnl Copyright (C) 2008-2017 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. # Determine whether the compiler is or may be producing universal binaries. # # On Mac OS X 10.5 and later systems, the user can create libraries and # executables that work on multiple system types--known as "fat" or # "universal" binaries--by specifying multiple '-arch' options to the # compiler but only a single '-arch' option to the preprocessor. Like # this: # # ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CPP="gcc -E" CXXCPP="g++ -E" # # Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly. AC_DEFUN_ONCE([gl_MULTIARCH], [ dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. gl_cv_c_multiarch=no AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; ]])], [ dnl Check for potential -arch flags. It is not universal unless dnl there are at least two -arch flags with different values. arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done ]) if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi AC_SUBST([APPLE_UNIVERSAL_BUILD]) ]) ttfautohint-1.8.1/gnulib/m4/nocrash.m40000644000175000001440000001060213222450622017427 0ustar00wlusers00000000000000# nocrash.m4 serial 4 dnl Copyright (C) 2005, 2009-2017 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 Based on libsigsegv, from Bruno Haible and Paolo Bonzini. AC_PREREQ([2.13]) dnl Expands to some code for use in .c programs that will cause the configure dnl test to exit instead of crashing. This is useful to avoid triggering dnl action from a background debugger and to avoid core dumps. dnl Usage: ... dnl ]GL_NOCRASH[ dnl ... dnl int main() { nocrash_init(); ... } AC_DEFUN([GL_NOCRASH],[[ #include #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include #include #include #include #include #include /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include #include static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include #include /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif ]]) ttfautohint-1.8.1/gnulib/m4/off_t.m40000644000175000001440000000100613222450622017065 0ustar00wlusers00000000000000# off_t.m4 serial 1 dnl Copyright (C) 2012-2017 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 Check whether to override the 'off_t' type. dnl Set WINDOWS_64_BIT_OFF_T. AC_DEFUN([gl_TYPE_OFF_T], [ m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_OFF_T=0 ]) AC_SUBST([WINDOWS_64_BIT_OFF_T]) ]) ttfautohint-1.8.1/gnulib/m4/onceonly.m40000644000175000001440000001063013222450622017621 0ustar00wlusers00000000000000# onceonly.m4 serial 9 dnl Copyright (C) 2002-2003, 2005-2006, 2008-2017 Free Software Foundation, dnl Inc. dnl dnl This file 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 3 of the License, or dnl (at your option) any later version. dnl dnl This file is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this file. If not, see . dnl dnl As a special exception to the GNU General Public License, dnl this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl This file defines some "once only" variants of standard autoconf macros. dnl AC_CHECK_HEADERS_ONCE like AC_CHECK_HEADERS dnl AC_CHECK_FUNCS_ONCE like AC_CHECK_FUNCS dnl AC_CHECK_DECLS_ONCE like AC_CHECK_DECLS dnl AC_REQUIRE([AC_FUNC_STRCOLL]) like AC_FUNC_STRCOLL dnl The advantage is that the check for each of the headers/functions/decls dnl will be put only once into the 'configure' file. It keeps the size of dnl the 'configure' file down, and avoids redundant output when 'configure' dnl is run. dnl The drawback is that the checks cannot be conditionalized. If you write dnl if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to dnl empty, and the check will be inserted before the body of the AC_DEFUNed dnl function. dnl The original code implemented AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE dnl in terms of AC_DEFUN and AC_REQUIRE. This implementation uses diversions to dnl named sections DEFAULTS and INIT_PREPARE in order to check all requested dnl headers at once, thus reducing the size of 'configure'. It is known to work dnl with autoconf 2.57..2.62 at least . The size reduction is ca. 9%. dnl Autoconf version 2.59 plus gnulib is required; this file is not needed dnl with Autoconf 2.60 or greater. But note that autoconf's implementation of dnl AC_CHECK_DECLS_ONCE expects a comma-separated list of symbols as first dnl argument! AC_PREREQ([2.59]) # AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of # AC_CHECK_HEADERS(HEADER1 HEADER2 ...). AC_DEFUN([AC_CHECK_HEADERS_ONCE], [ : m4_foreach_w([gl_HEADER_NAME], [$1], [ AC_DEFUN([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME, [./-], [___])), [ m4_divert_text([INIT_PREPARE], [gl_header_list="$gl_header_list gl_HEADER_NAME"]) gl_HEADERS_EXPANSION AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])), [Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.]) ]) AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME, [./-], [___]))) ]) ]) m4_define([gl_HEADERS_EXPANSION], [ m4_divert_text([DEFAULTS], [gl_header_list=]) AC_CHECK_HEADERS([$gl_header_list]) m4_define([gl_HEADERS_EXPANSION], []) ]) # AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of # AC_CHECK_FUNCS(FUNC1 FUNC2 ...). AC_DEFUN([AC_CHECK_FUNCS_ONCE], [ : m4_foreach_w([gl_FUNC_NAME], [$1], [ AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [ m4_divert_text([INIT_PREPARE], [gl_func_list="$gl_func_list gl_FUNC_NAME"]) gl_FUNCS_EXPANSION AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])), [Define to 1 if you have the ']m4_defn([gl_FUNC_NAME])[' function.]) ]) AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME])) ]) ]) m4_define([gl_FUNCS_EXPANSION], [ m4_divert_text([DEFAULTS], [gl_func_list=]) AC_CHECK_FUNCS([$gl_func_list]) m4_define([gl_FUNCS_EXPANSION], []) ]) # AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of # AC_CHECK_DECLS(DECL1, DECL2, ...). AC_DEFUN([AC_CHECK_DECLS_ONCE], [ : m4_foreach_w([gl_DECL_NAME], [$1], [ AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [ AC_CHECK_DECLS(m4_defn([gl_DECL_NAME])) ]) AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME])) ]) ]) ttfautohint-1.8.1/gnulib/m4/printf.m40000644000175000001440000017465413222450622017316 0ustar00wlusers00000000000000# printf.m4 serial 58 dnl Copyright (C) 2003, 2007-2017 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 Test whether the *printf family of functions supports the 'j', 'z', 't', dnl 'L' size specifiers. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_sizes_c99. AC_DEFUN([gl_PRINTF_SIZES_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports size specifiers as in C99], [gl_cv_func_printf_sizes_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include #include #if HAVE_STDINT_H_WITH_UINTMAX # include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX # include #endif static char buf[100]; int main () { int result = 0; #if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX buf[0] = '\0'; if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 || strcmp (buf, "12345671 33") != 0) result |= 1; #else result |= 1; #endif buf[0] = '\0'; if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 || strcmp (buf, "12345672 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 || strcmp (buf, "12345673 33") != 0) result |= 4; buf[0] = '\0'; if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 || strcmp (buf, "1.5 33") != 0) result |= 8; return result; }]])], [gl_cv_func_printf_sizes_c99=yes], [gl_cv_func_printf_sizes_c99=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_printf_sizes_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_printf_sizes_c99="guessing no";; openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_printf_sizes_c99="guessing no";; netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_sizes_c99="guessing yes"], [gl_cv_func_printf_sizes_c99="guessing no"]) ;; # If we don't know, assume the worst. *) gl_cv_func_printf_sizes_c99="guessing no";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports 'long double' dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_long_double. AC_DEFUN([gl_PRINTF_LONG_DOUBLE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports 'long double' arguments], [gl_cv_func_printf_long_double], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[10000]; int main () { int result = 0; buf[0] = '\0'; if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.750000 33") != 0) result |= 1; buf[0] = '\0'; if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.750000e+00 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.75 33") != 0) result |= 4; return result; }]])], [gl_cv_func_printf_long_double=yes], [gl_cv_func_printf_long_double=no], [case "$host_os" in beos*) gl_cv_func_printf_long_double="guessing no";; # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_long_double="guessing yes"], [gl_cv_func_printf_long_double="guessing no"]) ;; *) gl_cv_func_printf_long_double="guessing yes";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports infinite and NaN dnl 'double' arguments and negative zero arguments in the %f, %e, %g dnl directives. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_infinite. AC_DEFUN([gl_PRINTF_INFINITE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports infinite 'double' arguments], [gl_cv_func_printf_infinite], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static int strisnan (const char *string, size_t start_index, size_t end_index) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static int have_minus_zero () { static double plus_zero = 0.0; double minus_zero = - plus_zero; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } static char buf[10000]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%f", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%f", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%f", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%e", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 4; if (sprintf (buf, "%e", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 4; if (sprintf (buf, "%e", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 8; if (sprintf (buf, "%g", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 16; if (sprintf (buf, "%g", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 16; if (sprintf (buf, "%g", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 32; /* This test fails on HP-UX 10.20. */ if (have_minus_zero ()) if (sprintf (buf, "%g", - zero) < 0 || strcmp (buf, "-0") != 0) result |= 64; return result; }]])], [gl_cv_func_printf_infinite=yes], [gl_cv_func_printf_infinite=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; darwin*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; hpux*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_printf_infinite="guessing no";; netbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_infinite="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_infinite="guessing yes"], [gl_cv_func_printf_infinite="guessing no"]) ;; # If we don't know, assume the worst. *) gl_cv_func_printf_infinite="guessing no";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports infinite and NaN dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_infinite_long_double. AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl The user can set or unset the variable gl_printf_safe to indicate dnl that he wishes a safe handling of non-IEEE-754 'long double' values. if test -n "$gl_printf_safe"; then AC_DEFINE([CHECK_PRINTF_SAFE], [1], [Define if you wish *printf() functions that have a safe handling of non-IEEE-754 'long double' values.]) fi case "$gl_cv_func_printf_long_double" in *yes) AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments], [gl_cv_func_printf_infinite_long_double], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ ]GL_NOCRASH[ #include #include #include static int strisnan (const char *string, size_t start_index, size_t end_index) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static char buf[10000]; static long double zeroL = 0.0L; int main () { int result = 0; nocrash_init(); if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; if (sprintf (buf, "%Le", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Le", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Le", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; #if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; } { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 4; if (sprintf (buf, "%Le", x.value) <= 0) result |= 4; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 4; } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 8; if (sprintf (buf, "%Le", x.value) <= 0) result |= 8; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 8; } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 16; if (sprintf (buf, "%Le", x.value) <= 0) result |= 16; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 16; } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 32; if (sprintf (buf, "%Le", x.value) <= 0) result |= 32; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 32; } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 64; if (sprintf (buf, "%Le", x.value) <= 0) result |= 64; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 64; } #endif return result; }]])], [gl_cv_func_printf_infinite_long_double=yes], [gl_cv_func_printf_infinite_long_double=no], [case "$host_cpu" in # Guess no on ia64, x86_64, i386. ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; *) case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_infinite_long_double="guessing yes"], [gl_cv_func_printf_infinite_long_double="guessing no"]) ;; # If we don't know, assume the worst. *) gl_cv_func_printf_infinite_long_double="guessing no";; esac ;; esac ]) ]) ;; *) gl_cv_func_printf_infinite_long_double="irrelevant" ;; esac ]) dnl Test whether the *printf family of functions supports the 'a' and 'A' dnl conversion specifier for hexadecimal output of floating-point numbers. dnl (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_a. AC_DEFUN([gl_PRINTF_DIRECTIVE_A], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives], [gl_cv_func_printf_directive_a], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[100]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 || (strcmp (buf, "0x1.922p+1 33") != 0 && strcmp (buf, "0x3.244p+0 33") != 0 && strcmp (buf, "0x6.488p-1 33") != 0 && strcmp (buf, "0xc.91p-2 33") != 0)) result |= 1; if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 || (strcmp (buf, "-0X1.922P+1 33") != 0 && strcmp (buf, "-0X3.244P+0 33") != 0 && strcmp (buf, "-0X6.488P-1 33") != 0 && strcmp (buf, "-0XC.91P-2 33") != 0)) result |= 2; /* This catches a FreeBSD 6.1 bug: it doesn't round. */ if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 || (strcmp (buf, "0x1.83p+0 33") != 0 && strcmp (buf, "0x3.05p-1 33") != 0 && strcmp (buf, "0x6.0ap-2 33") != 0 && strcmp (buf, "0xc.14p-3 33") != 0)) result |= 4; /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round. */ if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0 || (strcmp (buf, "0x2p+0 33") != 0 && strcmp (buf, "0x3p-1 33") != 0 && strcmp (buf, "0x6p-2 33") != 0 && strcmp (buf, "0xcp-3 33") != 0)) result |= 4; /* This catches a FreeBSD 6.1 bug. See */ if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 || buf[0] == '0') result |= 8; /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug. */ if (sprintf (buf, "%.1a", 1.999) < 0 || (strcmp (buf, "0x1.0p+1") != 0 && strcmp (buf, "0x2.0p+0") != 0 && strcmp (buf, "0x4.0p-1") != 0 && strcmp (buf, "0x8.0p-2") != 0)) result |= 16; /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a glibc 2.4 bug . */ if (sprintf (buf, "%.1La", 1.999L) < 0 || (strcmp (buf, "0x1.0p+1") != 0 && strcmp (buf, "0x2.0p+0") != 0 && strcmp (buf, "0x4.0p-1") != 0 && strcmp (buf, "0x8.0p-2") != 0)) result |= 32; return result; }]])], [gl_cv_func_printf_directive_a=yes], [gl_cv_func_printf_directive_a=no], [ case "$host_os" in # Guess yes on glibc >= 2.5 systems. *-gnu* | gnu*) AC_EGREP_CPP([BZ2908], [ #include #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__ BZ2908 #endif #endif ], [gl_cv_func_printf_directive_a="guessing yes"], [gl_cv_func_printf_directive_a="guessing no"]) ;; # Guess no on native Windows. mingw*) gl_cv_func_printf_directive_a="guessing no";; # If we don't know, assume the worst. *) gl_cv_func_printf_directive_a="guessing no";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %F format dnl directive. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_f. AC_DEFUN([gl_PRINTF_DIRECTIVE_F], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'F' directive], [gl_cv_func_printf_directive_f], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[100]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 || strcmp (buf, "1234567.000000 33") != 0) result |= 1; if (sprintf (buf, "%F", 1.0 / zero) < 0 || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) result |= 2; /* This catches a Cygwin 1.5.x bug. */ if (sprintf (buf, "%.F", 1234.0) < 0 || strcmp (buf, "1234") != 0) result |= 4; return result; }]])], [gl_cv_func_printf_directive_f=yes], [gl_cv_func_printf_directive_f=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; darwin*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";; solaris*) gl_cv_func_printf_directive_f="guessing no";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_directive_f="guessing yes"], [gl_cv_func_printf_directive_f="guessing no"]) ;; # If we don't know, assume the worst. *) gl_cv_func_printf_directive_f="guessing no";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %n format dnl directive. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_n. AC_DEFUN([gl_PRINTF_DIRECTIVE_N], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'n' directive], [gl_cv_func_printf_directive_n], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include #ifdef _MSC_VER /* See page about "Parameter Validation" on msdn.microsoft.com. */ static void cdecl invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { exit (1); } #endif static char fmtstring[10]; static char buf[100]; int main () { int count = -1; #ifdef _MSC_VER _set_invalid_parameter_handler (invalid_parameter_handler); #endif /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) support %n in format strings in read-only memory but not in writable memory. */ strcpy (fmtstring, "%d %n"); if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 || strcmp (buf, "123 ") != 0 || count != 4) return 1; return 0; }]])], [gl_cv_func_printf_directive_n=yes], [gl_cv_func_printf_directive_n=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_printf_directive_n="guessing no";; *) gl_cv_func_printf_directive_n="guessing yes";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %ls format dnl directive and in particular, when a precision is specified, whether dnl the functions stop converting the wide string argument when the number dnl of bytes that have been produced by this conversion equals or exceeds dnl the precision. dnl Result is gl_cv_func_printf_directive_ls. AC_DEFUN([gl_PRINTF_DIRECTIVE_LS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'ls' directive], [gl_cv_func_printf_directive_ls], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #include int main () { int result = 0; char buf[100]; /* Test whether %ls works at all. This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on Cygwin 1.5. */ { static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; buf[0] = '\0'; if (sprintf (buf, "%ls", wstring) < 0 || strcmp (buf, "abc") != 0) result |= 1; } /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an assertion failure inside libc), but not on OpenBSD 4.0. */ { static const wchar_t wstring[] = { 'a', 0 }; buf[0] = '\0'; if (sprintf (buf, "%ls", wstring) < 0 || strcmp (buf, "a") != 0) result |= 2; } /* Test whether precisions in %ls are supported as specified in ISO C 99 section 7.19.6.1: "If a precision is specified, no more than that many bytes are written (including shift sequences, if any), and the array shall contain a null wide character if, to equal the multibyte character sequence length given by the precision, the function would need to access a wide character one past the end of the array." This test fails on Solaris 10. */ { static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; buf[0] = '\0'; if (sprintf (buf, "%.2ls", wstring) < 0 || strcmp (buf, "ab") != 0) result |= 8; } return result; }]])], [gl_cv_func_printf_directive_ls=yes], [gl_cv_func_printf_directive_ls=no], [ changequote(,)dnl case "$host_os" in openbsd*) gl_cv_func_printf_directive_ls="guessing no";; irix*) gl_cv_func_printf_directive_ls="guessing no";; solaris*) gl_cv_func_printf_directive_ls="guessing no";; cygwin*) gl_cv_func_printf_directive_ls="guessing no";; beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; # Guess yes on native Windows. mingw*) gl_cv_func_printf_directive_ls="guessing yes";; *) gl_cv_func_printf_directive_ls="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports POSIX/XSI format dnl strings with positions. (POSIX:2001) dnl Result is gl_cv_func_printf_positions. AC_DEFUN([gl_PRINTF_POSITIONS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions], [gl_cv_func_printf_positions], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); }]])], [gl_cv_func_printf_positions=yes], [gl_cv_func_printf_positions=no], [ changequote(,)dnl case "$host_os" in netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) gl_cv_func_printf_positions="guessing no";; beos*) gl_cv_func_printf_positions="guessing no";; # Guess no on native Windows. mingw* | pw*) gl_cv_func_printf_positions="guessing no";; *) gl_cv_func_printf_positions="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports POSIX/XSI format dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001) dnl Result is gl_cv_func_printf_flag_grouping. AC_DEFUN([gl_PRINTF_FLAG_GROUPING], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the grouping flag], [gl_cv_func_printf_flag_grouping], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[100]; int main () { if (sprintf (buf, "%'d %d", 1234567, 99) < 0 || buf[strlen (buf) - 1] != '9') return 1; return 0; }]])], [gl_cv_func_printf_flag_grouping=yes], [gl_cv_func_printf_flag_grouping=no], [ changequote(,)dnl case "$host_os" in cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; # Guess no on native Windows. mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; *) gl_cv_func_printf_flag_grouping="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports the - flag correctly. dnl (ISO C99.) See dnl dnl Result is gl_cv_func_printf_flag_leftadjust. AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly], [gl_cv_func_printf_flag_leftadjust], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[100]; int main () { /* Check that a '-' flag is not annihilated by a negative width. */ if (sprintf (buf, "a%-*sc", -3, "b") < 0 || strcmp (buf, "ab c") != 0) return 1; return 0; }]])], [gl_cv_func_printf_flag_leftadjust=yes], [gl_cv_func_printf_flag_leftadjust=no], [ changequote(,)dnl case "$host_os" in # Guess yes on HP-UX 11. hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess no on HP-UX 10 and older. hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; # Guess yes on native Windows. mingw*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess yes otherwise. *) gl_cv_func_printf_flag_leftadjust="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports padding of non-finite dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See dnl dnl Result is gl_cv_func_printf_flag_zero. AC_DEFUN([gl_PRINTF_FLAG_ZERO], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the zero flag correctly], [gl_cv_func_printf_flag_zero], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[100]; static double zero = 0.0; int main () { if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0 || (strcmp (buf, " inf") != 0 && strcmp (buf, " infinity") != 0)) return 1; return 0; }]])], [gl_cv_func_printf_flag_zero=yes], [gl_cv_func_printf_flag_zero=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess no on native Windows. mingw*) gl_cv_func_printf_flag_zero="guessing no";; # If we don't know, assume the worst. *) gl_cv_func_printf_flag_zero="guessing no";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports large precisions. dnl On mingw, precisions larger than 512 are treated like 512, in integer, dnl floating-point or pointer output. On Solaris 10/x86, precisions larger dnl than 510 in floating-point output crash the program. On Solaris 10/SPARC, dnl precisions larger than 510 in floating-point output yield wrong results. dnl On AIX 7.1, precisions larger than 998 in floating-point output yield dnl wrong results. On BeOS, precisions larger than 1044 crash the program. dnl Result is gl_cv_func_printf_precision. AC_DEFUN([gl_PRINTF_PRECISION], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports large precisions], [gl_cv_func_printf_precision], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[5000]; int main () { int result = 0; #ifdef __BEOS__ /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ return 1; #endif if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) result |= 1; if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) result |= 2; if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 || buf[0] != '1') result |= 4; if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 || buf[0] != '1') result |= 4; return result; }]])], [gl_cv_func_printf_precision=yes], [gl_cv_func_printf_precision=no], [ changequote(,)dnl case "$host_os" in # Guess no only on Solaris, native Windows, and BeOS systems. solaris*) gl_cv_func_printf_precision="guessing no" ;; mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; beos*) gl_cv_func_printf_precision="guessing no" ;; *) gl_cv_func_printf_precision="guessing yes" ;; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions recovers gracefully in case dnl of an out-of-memory condition, or whether it crashes the entire program. dnl Result is gl_cv_func_printf_enomem. AC_DEFUN([gl_PRINTF_ENOMEM], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_MULTIARCH]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf survives out-of-memory conditions], [gl_cv_func_printf_enomem], [ gl_cv_func_printf_enomem="guessing no" if test "$cross_compiling" = no; then if test $APPLE_UNIVERSAL_BUILD = 0; then AC_LANG_CONFTEST([AC_LANG_SOURCE([ ]GL_NOCRASH[ changequote(,)dnl #include #include #include #include #include int main() { struct rlimit limit; int ret; nocrash_init (); /* Some printf implementations allocate temporary space with malloc. */ /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ #ifdef RLIMIT_DATA if (getrlimit (RLIMIT_DATA, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_DATA, &limit) < 0) return 77; #endif /* On Linux systems, malloc() is limited by RLIMIT_AS. */ #ifdef RLIMIT_AS if (getrlimit (RLIMIT_AS, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_AS, &limit) < 0) return 77; #endif /* Some printf implementations allocate temporary space on the stack. */ #ifdef RLIMIT_STACK if (getrlimit (RLIMIT_STACK, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_STACK, &limit) < 0) return 77; #endif ret = printf ("%.5000000f", 1.0); return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); } changequote([,])dnl ])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then (./conftest 2>&AS_MESSAGE_LOG_FD result=$? _AS_ECHO_LOG([\$? = $result]) if test $result != 0 && test $result != 77; then result=1; fi exit $result ) >/dev/null 2>/dev/null case $? in 0) gl_cv_func_printf_enomem="yes" ;; 77) gl_cv_func_printf_enomem="guessing no" ;; *) gl_cv_func_printf_enomem="no" ;; esac else gl_cv_func_printf_enomem="guessing no" fi rm -fr conftest* else dnl A universal build on Apple Mac OS X platforms. dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode. dnl But we need a configuration result that is valid in both modes. gl_cv_func_printf_enomem="guessing no" fi fi if test "$gl_cv_func_printf_enomem" = "guessing no"; then changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on Solaris. solaris*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on AIX. aix*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on HP-UX/hppa. hpux*) case "$host_cpu" in hppa*) gl_cv_func_printf_enomem="guessing yes";; *) gl_cv_func_printf_enomem="guessing no";; esac ;; # Guess yes on IRIX. irix*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on OSF/1. osf*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on Haiku. haiku*) gl_cv_func_printf_enomem="guessing yes";; # If we don't know, assume the worst. *) gl_cv_func_printf_enomem="guessing no";; esac changequote([,])dnl fi ]) ]) dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001) dnl Result is ac_cv_func_snprintf. AC_DEFUN([gl_SNPRINTF_PRESENCE], [ AC_CHECK_FUNCS_ONCE([snprintf]) ]) dnl Test whether the string produced by the snprintf function is always NUL dnl terminated. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_snprintf_truncation_c99. AC_DEFUN([gl_SNPRINTF_TRUNCATION_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf truncates the result as in C99], [gl_cv_func_snprintf_truncation_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); my_snprintf (buf, 3, "%d %d", 4567, 89); if (memcmp (buf, "45\0DEF", 6) != 0) return 1; return 0; }]])], [gl_cv_func_snprintf_truncation_c99=yes], [gl_cv_func_snprintf_truncation_c99=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_truncation_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_truncation_c99="guessing no";; openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_snprintf_truncation_c99="guessing no";; solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OSF/1 >= 5. osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_truncation_c99="guessing no";; netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess no on native Windows. mingw*) gl_cv_func_snprintf_truncation_c99="guessing no";; # If we don't know, assume the worst. *) gl_cv_func_snprintf_truncation_c99="guessing no";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the return value of the snprintf function is the number dnl of bytes (excluding the terminating NUL) that would have been produced dnl if the buffer had been large enough. (ISO C99, POSIX:2001) dnl For example, this test program fails on IRIX 6.5: dnl --------------------------------------------------------------------- dnl #include dnl int main() dnl { dnl static char buf[8]; dnl int retval = snprintf (buf, 3, "%d", 12345); dnl return retval >= 0 && retval < 3; dnl } dnl --------------------------------------------------------------------- dnl Result is gl_cv_func_snprintf_retval_c99. AC_DEFUN_ONCE([gl_SNPRINTF_RETVAL_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf returns a byte count as in C99], [gl_cv_func_snprintf_retval_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) return 1; if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) return 2; if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) return 3; return 0; }]])], [gl_cv_func_snprintf_retval_c99=yes], [gl_cv_func_snprintf_retval_c99=no], [case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_retval_c99="guessing no";; openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_retval_c99="guessing no";; netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_snprintf_retval_c99="guessing yes"], [gl_cv_func_snprintf_retval_c99="guessing no"]) ;; # If we don't know, assume the worst. *) gl_cv_func_snprintf_retval_c99="guessing no";; esac ]) ]) ]) dnl Test whether the snprintf function supports the %n format directive dnl also in truncated portions of the format string. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_snprintf_directive_n. AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive], [gl_cv_func_snprintf_directive_n], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char fmtstring[10]; static char buf[100]; int main () { int count = -1; /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) support %n in format strings in read-only memory but not in writable memory. */ strcpy (fmtstring, "%d %n"); my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); if (count != 6) return 1; return 0; }]])], [gl_cv_func_snprintf_directive_n=yes], [gl_cv_func_snprintf_directive_n=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_directive_n="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";; darwin*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_snprintf_directive_n="guessing no";; solaris*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";; aix*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on OSF/1 >= 5. osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";; osf*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_directive_n="guessing no";; netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess no on native Windows. mingw*) gl_cv_func_snprintf_directive_n="guessing no";; # If we don't know, assume the worst. *) gl_cv_func_snprintf_directive_n="guessing no";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the snprintf function, when passed a size = 1, writes any dnl output without bounds in this case, behaving like sprintf. This is the dnl case on Linux libc5. dnl Result is gl_cv_func_snprintf_size1. AC_DEFUN([gl_SNPRINTF_SIZE1], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf respects a size of 1], [gl_cv_func_snprintf_size1], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif int main() { static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; my_snprintf (buf, 1, "%d", 12345); return buf[1] != 'E'; }]])], [gl_cv_func_snprintf_size1=yes], [gl_cv_func_snprintf_size1=no], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_snprintf_size1="guessing yes" ;; *) gl_cv_func_snprintf_size1="guessing yes" ;; esac ]) ]) ]) dnl Test whether the vsnprintf function, when passed a zero size, produces no dnl output. (ISO C99, POSIX:2001) dnl For example, snprintf nevertheless writes a NUL byte in this case dnl on OSF/1 5.1: dnl --------------------------------------------------------------------- dnl #include dnl int main() dnl { dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; dnl snprintf (buf, 0, "%d", 12345); dnl return buf[0] != 'D'; dnl } dnl --------------------------------------------------------------------- dnl And vsnprintf writes any output without bounds in this case, behaving like dnl vsprintf, on HP-UX 11 and OSF/1 5.1: dnl --------------------------------------------------------------------- dnl #include dnl #include dnl static int my_snprintf (char *buf, int size, const char *format, ...) dnl { dnl va_list args; dnl int ret; dnl va_start (args, format); dnl ret = vsnprintf (buf, size, format, args); dnl va_end (args); dnl return ret; dnl } dnl int main() dnl { dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; dnl my_snprintf (buf, 0, "%d", 12345); dnl return buf[0] != 'D'; dnl } dnl --------------------------------------------------------------------- dnl Result is gl_cv_func_vsnprintf_zerosize_c99. AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99], [gl_cv_func_vsnprintf_zerosize_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } int main() { static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; my_snprintf (buf, 0, "%d", 12345); return buf[0] != 'D'; }]])], [gl_cv_func_vsnprintf_zerosize_c99=yes], [gl_cv_func_vsnprintf_zerosize_c99=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Cygwin. cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on native Windows. mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # If we don't know, assume the worst. *) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; esac changequote([,])dnl ]) ]) ]) dnl The results of these tests on various platforms are: dnl dnl 1 = gl_PRINTF_SIZES_C99 dnl 2 = gl_PRINTF_LONG_DOUBLE dnl 3 = gl_PRINTF_INFINITE dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE dnl 5 = gl_PRINTF_DIRECTIVE_A dnl 6 = gl_PRINTF_DIRECTIVE_F dnl 7 = gl_PRINTF_DIRECTIVE_N dnl 8 = gl_PRINTF_DIRECTIVE_LS dnl 9 = gl_PRINTF_POSITIONS dnl 10 = gl_PRINTF_FLAG_GROUPING dnl 11 = gl_PRINTF_FLAG_LEFTADJUST dnl 12 = gl_PRINTF_FLAG_ZERO dnl 13 = gl_PRINTF_PRECISION dnl 14 = gl_PRINTF_ENOMEM dnl 15 = gl_SNPRINTF_PRESENCE dnl 16 = gl_SNPRINTF_TRUNCATION_C99 dnl 17 = gl_SNPRINTF_RETVAL_C99 dnl 18 = gl_SNPRINTF_DIRECTIVE_N dnl 19 = gl_SNPRINTF_SIZE1 dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99 dnl dnl 1 = checking whether printf supports size specifiers as in C99... dnl 2 = checking whether printf supports 'long double' arguments... dnl 3 = checking whether printf supports infinite 'double' arguments... dnl 4 = checking whether printf supports infinite 'long double' arguments... dnl 5 = checking whether printf supports the 'a' and 'A' directives... dnl 6 = checking whether printf supports the 'F' directive... dnl 7 = checking whether printf supports the 'n' directive... dnl 8 = checking whether printf supports the 'ls' directive... dnl 9 = checking whether printf supports POSIX/XSI format strings with positions... dnl 10 = checking whether printf supports the grouping flag... dnl 11 = checking whether printf supports the left-adjust flag correctly... dnl 12 = checking whether printf supports the zero flag correctly... dnl 13 = checking whether printf supports large precisions... dnl 14 = checking whether printf survives out-of-memory conditions... dnl 15 = checking for snprintf... dnl 16 = checking whether snprintf truncates the result as in C99... dnl 17 = checking whether snprintf returns a byte count as in C99... dnl 18 = checking whether snprintf fully supports the 'n' directive... dnl 19 = checking whether snprintf respects a size of 1... dnl 20 = checking whether vsnprintf respects a zero size as in C99... dnl dnl . = yes, # = no. dnl dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 dnl glibc 2.5 . . . . . . . . . . . . . . . . . . . . dnl glibc 2.3.6 . . . . # . . . . . . . . . . . . . . . dnl FreeBSD 5.4, 6.1 . . . . # . . . . . . # . # . . . . . . dnl Mac OS X 10.5.8 . . . # # . . . . . . # . . . . . . . . dnl Mac OS X 10.3.9 . . . . # . . . . . . # . # . . . . . . dnl OpenBSD 3.9, 4.0 . . # # # # . # . # . # . # . . . . . . dnl Cygwin 1.7.0 (2009) . . . # . . . ? . . . . . ? . . . . . . dnl Cygwin 1.5.25 (2008) . . . # # . . # . . . . . # . . . . . . dnl Cygwin 1.5.19 (2006) # . . # # # . # . # . # # # . . . . . . dnl Solaris 11.3 . . . . # . . # . . . . . . . . . . . . dnl Solaris 11.0 . . # # # . . # . . . # . . . . . . . . dnl Solaris 10 . . # # # . . # . . . # # . . . . . . . dnl Solaris 2.6 ... 9 # . # # # # . # . . . # # . . . # . . . dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # # dnl AIX 7.1 . . # # # . . . . . . # # . . . . . . . dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . . dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . # . . . dnl HP-UX 11.31 . . . . # . . . . . . # . . . . # # . . dnl HP-UX 11.{00,11,23} # . . . # # . . . . . # . . . . # # . # dnl HP-UX 10.20 # . # . # # . ? . . # # . . . . # # ? # dnl IRIX 6.5 # . # # # # . # . . . # . . . . # . . . dnl OSF/1 5.1 # . # # # # . . . . . # . . . . # . . # dnl OSF/1 4.0d # . # # # # . . . . . # . . # # # # # # dnl NetBSD 5.0 . . . # # . . . . . . # . # . . . . . . dnl NetBSD 4.0 . ? ? ? ? ? . ? . ? ? ? ? ? . . . ? ? ? dnl NetBSD 3.0 . . . . # # . ? # # ? # . # . . . . . . dnl Haiku . . . # # # . # . . . . . ? . . ? . . . dnl BeOS # # . # # # . ? # . ? . # ? . . ? . . . dnl old mingw / msvcrt # # # # # # . . # # . # # ? . # # # . . dnl MSVC 9 # # # # # # # . # # . # # ? # # # # . . dnl mingw 2009-2011 . # . # . . . . # # . . . ? . . . . . . dnl mingw-w64 2011 # # # # # # . . # # . # # ? . # # # . . ttfautohint-1.8.1/gnulib/m4/pthread_rwlock_rdlock.m40000644000175000001440000001274313222450622022350 0ustar00wlusers00000000000000# pthread_rwlock_rdlock.m4 serial 1 dnl Copyright (C) 2017 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. dnl Inspired by dnl https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_rdlock/2-2.c dnl by Intel Corporation. dnl Test whether in a situation where dnl - an rwlock is taken by a reader and has a writer waiting, dnl - an additional reader requests the lock, dnl - the waiting writer and the requesting reader threads have the same dnl priority, dnl the requesting reader thread gets blocked, so that at some point the dnl waiting writer can acquire the lock. dnl Without such a guarantee, when there a N readers and each of the readers dnl spends more than 1/Nth of the time with the lock held, there is a high dnl probability that the waiting writer will not get the lock in a given finite dnl time, a phenomenon called "writer starvation". dnl Without such a guarantee, applications have a hard time avoiding writer dnl starvation. dnl dnl POSIX:2008 makes this requirement only for implementations that support TPS dnl (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO dnl and SCHED_RR, see dnl http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html dnl but test verifies the guarantee regardless of TPS and regardless of dnl scheduling policy. AC_DEFUN([gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [ AC_REQUIRE([gl_THREADLIB_EARLY]) AC_CACHE_CHECK([whether pthread_rwlock_rdlock prefers a writer to a reader], [gl_cv_pthread_rwlock_rdlock_prefer_writer], [save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include #include #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (exit (10 + (n))) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static pthread_rwlock_t lock; static pthread_t reader1; static pthread_t writer; static pthread_t reader2; static pthread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static pthread_mutex_t baton; static void * timer_func (void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9: The second reader thread requests the lock. */ err = pthread_rwlock_tryrdlock (&lock); if (err == 0) FAILURE (); else if (err != EBUSY) UNEXPECTED (9); /* Step 10: Launch a timer, to test whether the next call blocks. */ if (pthread_create (&timer, NULL, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = pthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (pthread_create (&reader2, NULL, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (pthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = pthread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (pthread_rwlock_init (&lock, NULL)) UNEXPECTED (1); if (pthread_mutex_init (&baton, NULL)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (pthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (pthread_create (&writer, NULL, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { sleep (1); } } ]])], [gl_cv_pthread_rwlock_rdlock_prefer_writer=yes], [gl_cv_pthread_rwlock_rdlock_prefer_writer=no], [gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes"]) LIBS="$save_LIBS" ]) case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in *yes) AC_DEFINE([HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [1], [Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader.]) ;; esac ]) ttfautohint-1.8.1/gnulib/m4/size_max.m40000644000175000001440000000577013222450622017623 0ustar00wlusers00000000000000# size_max.m4 serial 10 dnl Copyright (C) 2003, 2005-2006, 2008-2017 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([gl_SIZE_MAX], [ AC_CHECK_HEADERS([stdint.h]) dnl First test whether the system already has SIZE_MAX. AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ gl_cv_size_max= AC_EGREP_CPP([Found it], [ #include #if HAVE_STDINT_H #include #endif #ifdef SIZE_MAX Found it #endif ], [gl_cv_size_max=yes]) if test -z "$gl_cv_size_max"; then dnl Define it ourselves. Here we assume that the type 'size_t' is not wider dnl than the type 'unsigned long'. Try hard to find a definition that can dnl be used in a preprocessor #if, i.e. doesn't contain a cast. AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], [#include #include ], [size_t_bits_minus_1=]) AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], [#include ], [fits_in_uint=]) if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then if test $fits_in_uint = 1; then dnl Even though SIZE_MAX fits in an unsigned int, it must be of type dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include extern size_t foo; extern unsigned long foo; ]], [[]])], [fits_in_uint=0]) fi dnl We cannot use 'expr' to simplify this expression, because 'expr' dnl works only with 'long' integers in the host environment, while we dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" else gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" fi else dnl Shouldn't happen, but who knows... gl_cv_size_max='((size_t)~(size_t)0)' fi fi ]) if test "$gl_cv_size_max" != yes; then AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], [Define as the maximum value of type 'size_t', if the system doesn't define it.]) fi dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after dnl . Remember that the #undef in AH_VERBATIM gets replaced with dnl #define by AC_DEFINE_UNQUOTED. AH_VERBATIM([SIZE_MAX], [/* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #ifndef SIZE_MAX # undef SIZE_MAX #endif]) ]) dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. dnl Remove this when we can assume autoconf >= 2.61. m4_ifdef([AC_COMPUTE_INT], [], [ AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) ]) ttfautohint-1.8.1/gnulib/m4/ssize_t.m40000644000175000001440000000146313222450622017457 0ustar00wlusers00000000000000# ssize_t.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2001-2003, 2006, 2010-2017 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. dnl Test whether ssize_t is defined. AC_DEFUN([gt_TYPE_SSIZE_T], [ AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x;]])], [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) if test $gt_cv_ssize_t = no; then AC_DEFINE([ssize_t], [int], [Define as a signed type of the same size as size_t.]) fi ]) ttfautohint-1.8.1/gnulib/m4/std-gnu11.m40000644000175000001440000005760213222450622017530 0ustar00wlusers00000000000000# Prefer GNU C11 and C++11 to earlier versions. -*- coding: utf-8 -*- # This implementation is taken from GNU Autoconf lib/autoconf/c.m4 # commit 017d5ddd82854911f0119691d91ea8a1438824d6 # dated Sun Apr 3 13:57:17 2016 -0700 # This implementation will be obsolete once we can assume Autoconf 2.70 # or later is installed everywhere a Gnulib program might be developed. # Copyright (C) 2001-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 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 . # Written by David MacKenzie, with help from # Akim Demaille, Paul Eggert, # François Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor, # Roland McGrath, Noah Friedman, david d zuhn, and many others. # AC_PROG_CC([COMPILER ...]) # -------------------------- # COMPILER ... is a space separated list of C compilers to search for. # This just gives the user an opportunity to specify an alternative # search list for the C compiler. AC_DEFUN_ONCE([AC_PROG_CC], [AC_LANG_PUSH(C)dnl AC_ARG_VAR([CC], [C compiler command])dnl AC_ARG_VAR([CFLAGS], [C compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl _AC_ARG_VAR_LIBS()dnl _AC_ARG_VAR_CPPFLAGS()dnl m4_ifval([$1], [AC_CHECK_TOOLS(CC, [$1])], [AC_CHECK_TOOL(CC, gcc) if test -z "$CC"; then dnl Here we want: dnl AC_CHECK_TOOL(CC, cc) dnl but without the check for a tool without the prefix. dnl Until the check is removed from there, copy the code: if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(CC, [${ac_tool_prefix}cc], [${ac_tool_prefix}cc]) fi fi if test -z "$CC"; then AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc) fi if test -z "$CC"; then AC_CHECK_TOOLS(CC, cl.exe) fi if test -z "$CC"; then AC_CHECK_TOOL(CC, clang) fi ]) test -z "$CC" && AC_MSG_FAILURE([no acceptable C compiler found in \$PATH]) # Provide some information about the compiler. _AS_ECHO_LOG([checking for _AC_LANG compiler version]) set X $ac_compile ac_compiler=$[2] for ac_option in --version -v -V -qversion -version; do _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD]) done m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl _AC_LANG_COMPILER_GNU if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi _AC_PROG_CC_G dnl dnl Set ac_prog_cc_stdc to the supported C version. dnl Also set the documented variable ac_cv_prog_cc_stdc; dnl its name was chosen when it was cached, but it is no longer cached. _AC_PROG_CC_C11([ac_prog_cc_stdc=c11 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11], [_AC_PROG_CC_C99([ac_prog_cc_stdc=c99 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99], [_AC_PROG_CC_C89([ac_prog_cc_stdc=c89 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89], [ac_prog_cc_stdc=no ac_cv_prog_cc_stdc=no])])]) dnl AC_LANG_POP(C)dnl ])# AC_PROG_CC # AC_PROG_CXX([LIST-OF-COMPILERS]) # -------------------------------- # LIST-OF-COMPILERS is a space separated list of C++ compilers to search # for (if not specified, a default list is used). This just gives the # user an opportunity to specify an alternative search list for the C++ # compiler. # aCC HP-UX C++ compiler much better than `CC', so test before. # FCC Fujitsu C++ compiler # KCC KAI C++ compiler # RCC Rational C++ # xlC_r AIX C Set++ (with support for reentrant code) # xlC AIX C Set++ AC_DEFUN([AC_PROG_CXX], [AC_LANG_PUSH(C++)dnl AC_ARG_VAR([CXX], [C++ compiler command])dnl AC_ARG_VAR([CXXFLAGS], [C++ compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl _AC_ARG_VAR_LIBS()dnl _AC_ARG_VAR_CPPFLAGS()dnl _AC_ARG_VAR_PRECIOUS([CCC])dnl if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else AC_CHECK_TOOLS(CXX, [m4_default([$1], [g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++])], g++) fi fi # Provide some information about the compiler. _AS_ECHO_LOG([checking for _AC_LANG compiler version]) set X $ac_compile ac_compiler=$[2] for ac_option in --version -v -V -qversion; do _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD]) done m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl _AC_LANG_COMPILER_GNU if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi _AC_PROG_CXX_G _AC_PROG_CXX_CXX11([ac_prog_cxx_stdcxx=cxx11 ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_cv_prog_cxx_cxx98=$ac_cv_prog_cxx_cxx11], [_AC_PROG_CXX_CXX98([ac_prog_cxx_stdcxx=cxx98 ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98], [ac_prog_cxx_stdcxx=no ac_cv_prog_cxx_stdcxx=no])]) AC_LANG_POP(C++)dnl ])# AC_PROG_CXX # _AC_C_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST, # ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE) # -------------------------------------------------------------- # Check whether the C compiler accepts features of STANDARD (e.g `c89', `c99') # by trying to compile a program of TEST-PROLOGUE and TEST-BODY. If this fails, # try again with each compiler option in the space-separated OPTION-LIST; if one # helps, append it to CC. If eventually successful, run ACTION-IF-AVAILABLE, # else ACTION-IF-UNAVAILABLE. AC_DEFUN([_AC_C_STD_TRY], [AC_MSG_CHECKING([for $CC option to enable ]m4_translit($1, [c], [C])[ features]) AC_CACHE_VAL(ac_cv_prog_cc_$1, [ac_cv_prog_cc_$1=no ac_save_CC=$CC AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])]) for ac_arg in '' $4 do CC="$ac_save_CC $ac_arg" _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_$1=$ac_arg]) test "x$ac_cv_prog_cc_$1" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ])# AC_CACHE_VAL ac_prog_cc_stdc_options= case "x$ac_cv_prog_cc_$1" in x) AC_MSG_RESULT([none needed]) ;; xno) AC_MSG_RESULT([unsupported]) ;; *) ac_prog_cc_stdc_options=" $ac_cv_prog_cc_$1" CC=$CC$ac_prog_cc_stdc_options AC_MSG_RESULT([$ac_cv_prog_cc_$1]) ;; esac AS_IF([test "x$ac_cv_prog_cc_$1" != xno], [$5], [$6]) ])# _AC_C_STD_TRY # _AC_C_C99_TEST_HEADER # --------------------- # A C header suitable for testing for C99. AC_DEFUN([_AC_C_C99_TEST_HEADER], [[#include #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; }]])# _AC_C_C99_TEST_HEADER # _AC_C_C99_TEST_BODY # ------------------- # A C body suitable for testing for C99, assuming the corresponding header. AC_DEFUN([_AC_C_C99_TEST_BODY], [[ // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ]]) # _AC_PROG_CC_C99 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) # ---------------------------------------------------------------- # If the C compiler is not in ISO C99 mode by default, try to add an # option to output variable CC to make it so. This macro tries # various options that select ISO C99 on some system or another. It # considers the compiler to be in ISO C99 mode if it handles _Bool, # // comments, flexible array members, inline, long long int, mixed # code and declarations, named initialization of structs, restrict, # va_copy, varargs macros, variable declarations in for loops and # variable length arrays. AC_DEFUN([_AC_PROG_CC_C99], [_AC_C_STD_TRY([c99], [_AC_C_C99_TEST_HEADER], [_AC_C_C99_TEST_BODY], dnl Try dnl GCC -std=gnu99 (unused restrictive modes: -std=c99 -std=iso9899:1999) dnl IBM XL C -qlanglvl=extc1x (V12.1; does not pass C11 test) dnl IBM XL C -qlanglvl=extc99 dnl (pre-V12.1; unused restrictive mode: -qlanglvl=stdc99) dnl HP cc -AC99 dnl Intel ICC -std=c99, -c99 (deprecated) dnl IRIX -c99 dnl Solaris -D_STDC_C99= dnl cc's -xc99 option uses linker magic to define the external dnl symbol __xpg4 as if by "int __xpg4 = 1;", which enables C99 dnl behavior for C library functions. This is not wanted here, dnl because it means that a single module compiled with -xc99 dnl alters C runtime behavior for the entire program, not for dnl just the module. Instead, define the (private) symbol dnl _STDC_C99, which suppresses a bogus failure in . dnl The resulting compiler passes the test case here, and that's dnl good enough. For more, please see the thread starting at: dnl https://lists.gnu.org/r/autoconf/2010-12/msg00059.html dnl Tru64 -c99 dnl with extended modes being tried first. [[-std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc1x -qlanglvl=extc99]], [$1], [$2])[]dnl ])# _AC_PROG_CC_C99 # _AC_PROG_CC_C11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) # ---------------------------------------------------------------- # If the C compiler is not in ISO C11 mode by default, try to add an # option to output variable CC to make it so. This macro tries # various options that select ISO C11 on some system or another. It # considers the compiler to be in ISO C11 mode if it handles _Alignas, # _Alignof, _Noreturn, _Static_assert, UTF-8 string literals, # duplicate typedefs, and anonymous structures and unions. AC_DEFUN([_AC_PROG_CC_C11], [_AC_C_STD_TRY([c11], [_AC_C_C99_TEST_HEADER[ // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ]], [_AC_C_C99_TEST_BODY[ v1.i = 2; v1.w.k = 5; _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); ]], dnl Try dnl GCC -std=gnu11 (unused restrictive mode: -std=c11) dnl with extended modes being tried first. dnl dnl Do not try -qlanglvl=extc1x, because IBM XL C V12.1 (the latest version as dnl of September 2012) does not pass the C11 test. For now, try extc1x when dnl compiling the C99 test instead, since it enables _Static_assert and dnl _Noreturn, which is a win. If -qlanglvl=extc11 or -qlanglvl=extc1x passes dnl the C11 test in some future version of IBM XL C, we'll add it here, dnl preferably extc11. [[-std=gnu11]], [$1], [$2])[]dnl ])# _AC_PROG_CC_C11 # AC_PROG_CC_C89 # -------------- # Do not use AU_ALIAS here and in AC_PROG_CC_C99 and AC_PROG_CC_STDC, # as that'd be incompatible with how Automake redefines AC_PROG_CC. See # . AU_DEFUN([AC_PROG_CC_C89], [AC_REQUIRE([AC_PROG_CC])], [$0 is obsolete; use AC_PROG_CC] ) # AC_PROG_CC_C99 # -------------- AU_DEFUN([AC_PROG_CC_C99], [AC_REQUIRE([AC_PROG_CC])], [$0 is obsolete; use AC_PROG_CC] ) # AC_PROG_CC_STDC # --------------- AU_DEFUN([AC_PROG_CC_STDC], [AC_REQUIRE([AC_PROG_CC])], [$0 is obsolete; use AC_PROG_CC] ) # AC_C_PROTOTYPES # --------------- # Check if the C compiler supports prototypes, included if it needs # options. AC_DEFUN([AC_C_PROTOTYPES], [AC_REQUIRE([AC_PROG_CC])dnl if test "$ac_prog_cc_stdc" != no; then AC_DEFINE(PROTOTYPES, 1, [Define to 1 if the C compiler supports function prototypes.]) AC_DEFINE(__PROTOTYPES, 1, [Define like PROTOTYPES; this can be used by system headers.]) fi ])# AC_C_PROTOTYPES # _AC_CXX_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST, # ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE) # ---------------------------------------------------------------- # Check whether the C++ compiler accepts features of STANDARD (e.g # `cxx98', `cxx11') by trying to compile a program of TEST-PROLOGUE # and TEST-BODY. If this fails, try again with each compiler option # in the space-separated OPTION-LIST; if one helps, append it to CXX. # If eventually successful, run ACTION-IF-AVAILABLE, else # ACTION-IF-UNAVAILABLE. AC_DEFUN([_AC_CXX_STD_TRY], [AC_MSG_CHECKING([for $CXX option to enable ]m4_translit(m4_translit($1, [x], [+]), [a-z], [A-Z])[ features]) AC_LANG_PUSH(C++)dnl AC_CACHE_VAL(ac_cv_prog_cxx_$1, [ac_cv_prog_cxx_$1=no ac_save_CXX=$CXX AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])]) for ac_arg in '' $4 do CXX="$ac_save_CXX $ac_arg" _AC_COMPILE_IFELSE([], [ac_cv_prog_cxx_$1=$ac_arg]) test "x$ac_cv_prog_cxx_$1" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX ])# AC_CACHE_VAL ac_prog_cxx_stdcxx_options= case "x$ac_cv_prog_cxx_$1" in x) AC_MSG_RESULT([none needed]) ;; xno) AC_MSG_RESULT([unsupported]) ;; *) ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_$1" CXX=$CXX$ac_prog_cxx_stdcxx_options AC_MSG_RESULT([$ac_cv_prog_cxx_$1]) ;; esac AC_LANG_POP(C++)dnl AS_IF([test "x$ac_cv_prog_cxx_$1" != xno], [$5], [$6]) ])# _AC_CXX_STD_TRY # _AC_CXX_CXX98_TEST_HEADER # ------------------------- # A C++ header suitable for testing for CXX98. AC_DEFUN([_AC_CXX_CXX98_TEST_HEADER], [[ #include #include #include #include #include #include #include #include #include #include #include #include #include namespace test { typedef std::vector string_vec; typedef std::pair map_value; typedef std::map map_type; typedef std::set set_type; template class printer { public: printer(std::ostringstream& os): os(os) {} void operator() (T elem) { os << elem << std::endl; } private: std::ostringstream& os; }; } ]])# _AC_CXX_CXX98_TEST_HEADER # _AC_CXX_CXX98_TEST_BODY # ----------------------- # A C++ body suitable for testing for CXX98, assuming the corresponding header. AC_DEFUN([_AC_CXX_CXX98_TEST_BODY], [[ try { // Basic string. std::string teststr("ASCII text"); teststr += " string"; // Simple vector. test::string_vec testvec; testvec.push_back(teststr); testvec.push_back("foo"); testvec.push_back("bar"); if (testvec.size() != 3) { throw std::runtime_error("vector size is not 1"); } // Dump vector into stringstream and obtain string. std::ostringstream os; for (test::string_vec::const_iterator i = testvec.begin(); i != testvec.end(); ++i) { if (i + 1 != testvec.end()) { os << teststr << '\n'; } } // Check algorithms work. std::for_each(testvec.begin(), testvec.end(), test::printer(os)); std::string os_out = os.str(); // Test pair and map. test::map_type testmap; testmap.insert(std::make_pair(std::string("key"), std::make_pair(53,false))); // Test set. int values[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; test::set_type testset(values, values + sizeof(values)/sizeof(values[0])); std::list testlist(testset.begin(), testset.end()); std::copy(testset.begin(), testset.end(), std::back_inserter(testlist)); } catch (const std::exception& e) { std::cerr << "Caught exception: " << e.what() << std::endl; // Test fstream std::ofstream of("test.txt"); of << "Test ASCII text\n" << std::flush; of << "N= " << std::hex << std::setw(8) << std::left << 534 << std::endl; of.close(); } std::exit(0); ]]) # _AC_CXX_CXX11_TEST_HEADER # ------------------------- # A C++ header suitable for testing for CXX11. AC_DEFUN([_AC_CXX_CXX11_TEST_HEADER], [[ #include #include #include #include #include #include #include namespace cxx11test { typedef std::shared_ptr sptr; typedef std::weak_ptr wptr; typedef std::tuple tp; typedef std::array int_array; constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; } ]])# _AC_CXX_CXX11_TEST_HEADER # _AC_CXX_CXX11_TEST_BODY # ----------------------- # A C++ body suitable for testing for CXX11, assuming the corresponding header. AC_DEFUN([_AC_CXX_CXX11_TEST_BODY], [[ { // Test auto and decltype std::deque d; d.push_front(43); d.push_front(484); d.push_front(3); d.push_front(844); int total = 0; for (auto i = d.begin(); i != d.end(); ++i) { total += *i; } auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for and lambda cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (int &x : array) { x += 23; } std::for_each(array.begin(), array.end(), [](int v1){ std::cout << v1; }); } { using cxx11test::sptr; using cxx11test::wptr; sptr sp(new std::string("ASCII string")); wptr wp(sp); sptr sp2(wp); } { cxx11test::tp tuple("test", 54, 45.53434); double d = std::get<2>(tuple); std::string s; int i; std::tie(s,i,d) = tuple; } { static std::regex filename_regex("^_?([a-z0-9_.]+-)+[a-z0-9]+$"); std::string testmatch("Test if this string matches"); bool match = std::regex_search(testmatch, filename_regex); } { cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; cxx11test::int_array::size_type size = array.size(); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets std::vector> v1; } { // Unicode literals char const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-8 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } ]]) # _AC_PROG_CXX_CXX98 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) # ------------------------------------------------------------------- # If the C++ compiler is not in ISO C++98 mode by default, try to add # an option to output variable CXX to make it so. This macro tries # various options that select ISO C++98 on some system or another. It # considers the compiler to be in ISO C++98 mode if it handles basic # features of the std namespace including: string, containers (list, # map, set, vector), streams (fstreams, iostreams, stringstreams, # iomanip), pair, exceptions and algorithms. AC_DEFUN([_AC_PROG_CXX_CXX98], [_AC_CXX_STD_TRY([cxx98], [_AC_CXX_CXX98_TEST_HEADER], [_AC_CXX_CXX98_TEST_BODY], dnl Try dnl GCC -std=gnu++98 (unused restrictive mode: -std=c++98) dnl IBM XL C -qlanglvl=extended dnl HP aC++ -AA dnl Intel ICC -std=gnu++98 dnl Solaris N/A (default) dnl Tru64 N/A (default, but -std gnu could be used) dnl with extended modes being tried first. [[-std=gnu++98 -std=c++98 -qlanglvl=extended -AA]], [$1], [$2])[]dnl ])# _AC_PROG_CXX_CXX98 # _AC_PROG_CXX_CXX11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) # ------------------------------------------------------------------- # If the C++ compiler is not in ISO CXX11 mode by default, try to add # an option to output variable CXX to make it so. This macro tries # various options that select ISO C++11 on some system or another. It # considers the compiler to be in ISO C++11 mode if it handles all the # tests from the C++98 checks, plus the following: Language features # (auto, constexpr, decltype, default/deleted constructors, delegate # constructors, final, initializer lists, lambda functions, nullptr, # override, range-based for loops, template brackets without spaces, # unicode literals) and library features (array, memory (shared_ptr, # weak_ptr), regex and tuple types). AC_DEFUN([_AC_PROG_CXX_CXX11], [_AC_CXX_STD_TRY([cxx11], [_AC_CXX_CXX11_TEST_HEADER _AC_CXX_CXX98_TEST_HEADER], [_AC_CXX_CXX11_TEST_BODY _AC_CXX_CXX98_TEST_BODY], dnl Try dnl GCC -std=gnu++11 (unused restrictive mode: -std=c++11) [and 0x variants] dnl IBM XL C -qlanglvl=extended0x dnl (pre-V12.1; unused restrictive mode: -qlanglvl=stdcxx11) dnl HP aC++ -AA dnl Intel ICC -std=c++11 -std=c++0x dnl Solaris N/A (no support) dnl Tru64 N/A (no support) dnl with extended modes being tried first. [[-std=gnu++11 -std=c++11 -std=gnu++0x -std=c++0x -qlanglvl=extended0x -AA]], [$1], [$2])[]dnl ])# _AC_PROG_CXX_CXX11 ttfautohint-1.8.1/gnulib/m4/stdarg.m40000644000175000001440000000540413222450622017262 0ustar00wlusers00000000000000# stdarg.m4 serial 6 dnl Copyright (C) 2006, 2008-2017 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. dnl Provide a working va_copy in combination with . AC_DEFUN([gl_STDARG_H], [ STDARG_H='' NEXT_STDARG_H='' AC_MSG_CHECKING([for va_copy]) AC_CACHE_VAL([gl_cv_func_va_copy], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[ #ifndef va_copy void (*func) (va_list, va_list) = va_copy; #endif ]])], [gl_cv_func_va_copy=yes], [gl_cv_func_va_copy=no])]) AC_MSG_RESULT([$gl_cv_func_va_copy]) if test $gl_cv_func_va_copy = no; then dnl Provide a substitute. dnl Usually a simple definition in is enough. Not so on AIX 5 dnl with some versions of the /usr/vac/bin/cc compiler. It has an dnl which does '#undef va_copy', leading to a missing va_copy symbol. For dnl this platform, we use an substitute. But we cannot use this dnl approach on other platforms, because often defines only dnl preprocessor macros and gl_ABSOLUTE_HEADER, gl_CHECK_NEXT_HEADERS do dnl not work in this situation. AC_EGREP_CPP([vaccine], [#if defined _AIX && !defined __GNUC__ AIX vaccine #endif ], [gl_aixcc=yes], [gl_aixcc=no]) if test $gl_aixcc = yes; then dnl Provide a substitute file. STDARG_H=stdarg.h gl_NEXT_HEADERS([stdarg.h]) dnl Fallback for the case when contains only macro definitions. if test "$gl_cv_next_stdarg_h" = '""'; then gl_cv_next_stdarg_h='"///usr/include/stdarg.h"' NEXT_STDARG_H="$gl_cv_next_stdarg_h" fi else dnl Provide a substitute in , either __va_copy or as a simple dnl assignment. gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[ #ifndef __va_copy error, bail out #endif ]])], [gl_cv_func___va_copy=yes], [gl_cv_func___va_copy=no])]) if test $gl_cv_func___va_copy = yes; then AC_DEFINE([va_copy], [__va_copy], [Define as a macro for copying va_list variables.]) else AH_VERBATIM([gl_VA_COPY], [/* A replacement for va_copy, if needed. */ #define gl_va_copy(a,b) ((a) = (b))]) AC_DEFINE([va_copy], [gl_va_copy], [Define as a macro for copying va_list variables.]) fi fi fi AC_SUBST([STDARG_H]) AM_CONDITIONAL([GL_GENERATE_STDARG_H], [test -n "$STDARG_H"]) AC_SUBST([NEXT_STDARG_H]) ]) ttfautohint-1.8.1/gnulib/m4/stdbool.m40000644000175000001440000000671613222450622017453 0ustar00wlusers00000000000000# Check for stdbool.h that conforms to C99. dnl Copyright (C) 2002-2006, 2009-2017 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. #serial 7 # Prepare for substituting if it is not supported. AC_DEFUN([AM_STDBOOL_H], [ AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) # Define two additional variables used in the Makefile substitution. if test "$ac_cv_header_stdbool_h" = yes; then STDBOOL_H='' else STDBOOL_H='stdbool.h' fi AC_SUBST([STDBOOL_H]) AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"]) if test "$ac_cv_type__Bool" = yes; then HAVE__BOOL=1 else HAVE__BOOL=0 fi AC_SUBST([HAVE__BOOL]) ]) # AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) # This version of the macro is needed in autoconf <= 2.68. AC_DEFUN([AC_CHECK_HEADER_STDBOOL], [AC_CACHE_CHECK([for stdbool.h that conforms to C99], [ac_cv_header_stdbool_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifdef __cplusplus typedef bool Bool; #else typedef _Bool Bool; #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ Bool q = true; Bool *pq = &q; bool *qq = &q; ]], [[ bool e = &s; *pq |= q; *pq |= ! q; *qq |= q; *qq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq + !qq); ]])], [ac_cv_header_stdbool_h=yes], [ac_cv_header_stdbool_h=no])]) AC_CHECK_TYPES([_Bool]) ]) ttfautohint-1.8.1/gnulib/m4/stddef_h.m40000644000175000001440000000321613222450622017555 0ustar00wlusers00000000000000dnl A placeholder for , for platforms that have issues. # stddef_h.m4 serial 5 dnl Copyright (C) 2009-2017 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. AC_DEFUN([gl_STDDEF_H], [ AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) STDDEF_H= AC_CHECK_TYPE([max_align_t], [], [HAVE_MAX_ALIGN_T=0; STDDEF_H=stddef.h], [[#include ]]) if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], [gl_cv_decl_null_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include int test[2 * (sizeof NULL == sizeof (void *)) -1]; ]])], [gl_cv_decl_null_works=yes], [gl_cv_decl_null_works=no])]) if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 STDDEF_H=stddef.h fi AC_SUBST([STDDEF_H]) AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"]) if test -n "$STDDEF_H"; then gl_NEXT_HEADERS([stddef.h]) fi ]) AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_STDDEF_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) HAVE_MAX_ALIGN_T=1; AC_SUBST([HAVE_MAX_ALIGN_T]) HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) ]) ttfautohint-1.8.1/gnulib/m4/stdint.m40000644000175000001440000004373513222450622017314 0ustar00wlusers00000000000000# stdint.m4 serial 51 dnl Copyright (C) 2001-2017 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 Paul Eggert and Bruno Haible. dnl Test whether is supported or must be substituted. AC_DEFUN_ONCE([gl_STDINT_H], [ AC_PREREQ([2.59])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_LIMITS_H]) AC_REQUIRE([gt_TYPE_WINT_T]) dnl Check for long long int and unsigned long long int. AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) if test $ac_cv_type_long_long_int = yes; then HAVE_LONG_LONG_INT=1 else HAVE_LONG_LONG_INT=0 fi AC_SUBST([HAVE_LONG_LONG_INT]) AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) if test $ac_cv_type_unsigned_long_long_int = yes; then HAVE_UNSIGNED_LONG_LONG_INT=1 else HAVE_UNSIGNED_LONG_LONG_INT=0 fi AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT]) dnl Check for , in the same way as gl_WCHAR_H does. AC_CHECK_HEADERS_ONCE([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) dnl Check for . dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h. if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi AC_SUBST([HAVE_INTTYPES_H]) dnl Check for . dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h. if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi AC_SUBST([HAVE_SYS_TYPES_H]) gl_CHECK_NEXT_HEADERS([stdint.h]) if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi AC_SUBST([HAVE_STDINT_H]) dnl Now see whether we need a substitute . if test $ac_cv_header_stdint_h = yes; then AC_CACHE_CHECK([whether stdint.h conforms to C99], [gl_cv_header_working_stdint_h], [gl_cv_header_working_stdint_h=no AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in " #endif ] gl_STDINT_INCLUDES [ #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ #if 201112 <= __STDC_VERSION__ int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0 / ia64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; ]])], [dnl Determine whether the various *_MIN, *_MAX macros are usable dnl in preprocessor expression. We could do it by compiling a test dnl program for each of these macros. It is faster to run a program dnl that inspects the macro expansion. dnl This detects a bug on HP-UX 11.23/ia64. AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include ] gl_STDINT_INCLUDES [ #include #include #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; ]], [[ const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ]])], [gl_cv_header_working_stdint_h=yes], [], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac ]) ]) ]) fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 STDINT_H=stdint.h case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 dnl Now see whether the system works without dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. AC_CACHE_CHECK([whether stdint.h predates C++11], [gl_cv_header_stdint_predates_cxx11_h], [gl_cv_header_stdint_predates_cxx11_h=yes AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include ] gl_STDINT_INCLUDES [ intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); ]])], [gl_cv_header_stdint_predates_cxx11_h=no])]) if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then AC_DEFINE([__STDC_CONSTANT_MACROS], [1], [Define to 1 if the system predates C++11.]) AC_DEFINE([__STDC_LIMIT_MACROS], [1], [Define to 1 if the system predates C++11.]) fi AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], [gl_cv_header_stdint_width], [gl_cv_header_stdint_width=no AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include ]gl_STDINT_INCLUDES[ int iw = UINTMAX_WIDTH; ]])], [gl_cv_header_stdint_width=yes])]) if test "$gl_cv_header_stdint_width" = yes; then STDINT_H= fi ;; *) dnl Check for , and for dnl (used in Linux libc4 >= 4.6.7 and libc5). AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi gl_STDINT_TYPE_PROPERTIES ;; esac dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. LIMITS_H=limits.h AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) AC_SUBST([HAVE_C99_STDINT_H]) AC_SUBST([HAVE_SYS_BITYPES_H]) AC_SUBST([HAVE_SYS_INTTYPES_H]) AC_SUBST([STDINT_H]) AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"]) ]) dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) dnl Determine the size of each of the given types in bits. AC_DEFUN([gl_STDINT_BITSIZEOF], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to the number of bits in type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], [$2 #include ], [result=unknown]) eval gl_cv_bitsizeof_${gltype}=\$result ]) eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, dnl do a syntax check even on unused #if conditions and give an error dnl on valid C code like this: dnl #if 0 dnl # if > 32 dnl # endif dnl #endif result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) eval BITSIZEOF_${GLTYPE}=\$result done m4_foreach_w([gltype], [$1], [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) dnl Determine the signedness of each of the given types. dnl Define HAVE_SIGNED_TYPE if type is signed. AC_DEFUN([gl_CHECK_TYPES_SIGNED], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to 1 if ']gltype[' is a signed integer type.])]) for gltype in $1 ; do AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], result=yes, result=no) eval gl_cv_type_${gltype}_signed=\$result ]) eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done m4_foreach_w([gltype], [$1], [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) dnl Determine the suffix to use for integer constants of the given types. dnl Define t_SUFFIX for each such type. AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], [Define to l, ll, u, ul, ull, etc., as suitable for constants of type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for $gltype integer literal suffix], [gl_cv_type_${gltype}_suffix], [eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ extern $gltype foo; extern $gltype1 foo;]])], [eval gl_cv_type_${gltype}_suffix=\$glsuf]) eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done]) GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) done m4_foreach_w([gltype], [$1], [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) ]) dnl gl_STDINT_INCLUDES AC_DEFUN([gl_STDINT_INCLUDES], [[ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif ]]) dnl gl_STDINT_TYPE_PROPERTIES dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t dnl of interest to stdint.in.h. AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], [ AC_REQUIRE([gl_MULTIARCH]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_STDINT_BITSIZEOF([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99 dnl requirement that wint_t is "unchanged by default argument promotions". dnl In this case gnulib's and override wint_t. dnl Set the variable BITSIZEOF_WINT_T accordingly. if test $GNULIB_OVERRIDES_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ]) dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. dnl Remove this when we can assume autoconf >= 2.61. m4_ifdef([AC_COMPUTE_INT], [], [ AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) ]) ttfautohint-1.8.1/gnulib/m4/stdint_h.m40000644000175000001440000000174313222450622017614 0ustar00wlusers00000000000000# stdint_h.m4 serial 9 dnl Copyright (C) 1997-2004, 2006, 2008-2017 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 Paul Eggert. # Define HAVE_STDINT_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_STDINT_H], [ AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include #include ]], [[uintmax_t i = (uintmax_t) -1; return !i;]])], [gl_cv_header_stdint_h=yes], [gl_cv_header_stdint_h=no])]) if test $gl_cv_header_stdint_h = yes; then AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) ttfautohint-1.8.1/gnulib/m4/stdio_h.m40000644000175000001440000002525613222450622017436 0ustar00wlusers00000000000000# stdio_h.m4 serial 48 dnl Copyright (C) 2007-2017 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. AC_DEFUN([gl_STDIO_H], [ AH_VERBATIM([MINGW_ANSI_STDIO], [/* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO #endif ]) AC_DEFINE([__USE_MINGW_ANSI_STDIO]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_NEXT_HEADERS([stdio.h]) dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and dnl inttypes.h behave like gnu instead of system; we must give our dnl printf wrapper the right attribute to match. AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros], [gl_cv_func_printf_attribute_flavor], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define __STDC_FORMAT_MACROS 1 #include #include /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif ]])], [gl_cv_func_printf_attribute_flavor=system], [gl_cv_func_printf_attribute_flavor=gnu])]) if test "$gl_cv_func_printf_attribute_flavor" = gnu; then AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1], [Define to 1 if printf and friends should be labeled with attribute "__gnu_printf__" instead of "__printf__"]) fi dnl No need to create extra modules for these functions. Everyone who uses dnl likely needs them. GNULIB_FSCANF=1 gl_MODULE_INDICATOR([fscanf]) GNULIB_SCANF=1 gl_MODULE_INDICATOR([scanf]) GNULIB_FGETC=1 GNULIB_GETC=1 GNULIB_GETCHAR=1 GNULIB_FGETS=1 GNULIB_FREAD=1 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING dnl or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_READ_FUNCS=1 AC_LIBOBJ([stdio-read]) fi ]) dnl No need to create extra modules for these functions. Everyone who uses dnl likely needs them. GNULIB_FPRINTF=1 GNULIB_PRINTF=1 GNULIB_VFPRINTF=1 GNULIB_VPRINTF=1 GNULIB_FPUTC=1 GNULIB_PUTC=1 GNULIB_PUTCHAR=1 GNULIB_FPUTS=1 GNULIB_PUTS=1 GNULIB_FWRITE=1 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or dnl GNULIB_SIGPIPE redundant. m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_STDIO_WRITE_FUNCS=1 AC_LIBOBJ([stdio-write]) fi ]) dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING dnl or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_WRITE_FUNCS=1 AC_LIBOBJ([stdio-write]) fi ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by both C89 and C11. gl_WARN_ON_USE_PREPARE([[#include ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf]) ]) AC_DEFUN([gl_STDIO_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_STDIO_H_DEFAULTS], [ GNULIB_DPRINTF=0; AC_SUBST([GNULIB_DPRINTF]) GNULIB_FCLOSE=0; AC_SUBST([GNULIB_FCLOSE]) GNULIB_FDOPEN=0; AC_SUBST([GNULIB_FDOPEN]) GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH]) GNULIB_FGETC=0; AC_SUBST([GNULIB_FGETC]) GNULIB_FGETS=0; AC_SUBST([GNULIB_FGETS]) GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN]) GNULIB_FPRINTF=0; AC_SUBST([GNULIB_FPRINTF]) GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX]) GNULIB_FPURGE=0; AC_SUBST([GNULIB_FPURGE]) GNULIB_FPUTC=0; AC_SUBST([GNULIB_FPUTC]) GNULIB_FPUTS=0; AC_SUBST([GNULIB_FPUTS]) GNULIB_FREAD=0; AC_SUBST([GNULIB_FREAD]) GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN]) GNULIB_FSCANF=0; AC_SUBST([GNULIB_FSCANF]) GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK]) GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO]) GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL]) GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO]) GNULIB_FWRITE=0; AC_SUBST([GNULIB_FWRITE]) GNULIB_GETC=0; AC_SUBST([GNULIB_GETC]) GNULIB_GETCHAR=0; AC_SUBST([GNULIB_GETCHAR]) GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM]) GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE]) GNULIB_OBSTACK_PRINTF=0; AC_SUBST([GNULIB_OBSTACK_PRINTF]) GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX]) GNULIB_PCLOSE=0; AC_SUBST([GNULIB_PCLOSE]) GNULIB_PERROR=0; AC_SUBST([GNULIB_PERROR]) GNULIB_POPEN=0; AC_SUBST([GNULIB_POPEN]) GNULIB_PRINTF=0; AC_SUBST([GNULIB_PRINTF]) GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX]) GNULIB_PUTC=0; AC_SUBST([GNULIB_PUTC]) GNULIB_PUTCHAR=0; AC_SUBST([GNULIB_PUTCHAR]) GNULIB_PUTS=0; AC_SUBST([GNULIB_PUTS]) GNULIB_REMOVE=0; AC_SUBST([GNULIB_REMOVE]) GNULIB_RENAME=0; AC_SUBST([GNULIB_RENAME]) GNULIB_RENAMEAT=0; AC_SUBST([GNULIB_RENAMEAT]) GNULIB_SCANF=0; AC_SUBST([GNULIB_SCANF]) GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF]) GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX]) GNULIB_STDIO_H_NONBLOCKING=0; AC_SUBST([GNULIB_STDIO_H_NONBLOCKING]) GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE]) GNULIB_TMPFILE=0; AC_SUBST([GNULIB_TMPFILE]) GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF]) GNULIB_VFSCANF=0; AC_SUBST([GNULIB_VFSCANF]) GNULIB_VSCANF=0; AC_SUBST([GNULIB_VSCANF]) GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF]) GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF]) GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX]) GNULIB_VPRINTF=0; AC_SUBST([GNULIB_VPRINTF]) GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX]) GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF]) GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE]) HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO]) HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO]) HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF]) HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF]) HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE]) HAVE_POPEN=1; AC_SUBST([HAVE_POPEN]) HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT]) HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF]) REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF]) REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE]) REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN]) REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE]) REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM]) REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF]) REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR]) REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN]) REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE]) REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME]) REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT]) REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS]) REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE]) REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) ]) ttfautohint-1.8.1/gnulib/m4/stdlib_h.m40000644000175000001440000001375013222450622017571 0ustar00wlusers00000000000000# stdlib_h.m4 serial 44 dnl Copyright (C) 2007-2017 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. AC_DEFUN([gl_STDLIB_H], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) gl_NEXT_HEADERS([stdlib.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include #if HAVE_SYS_LOADAVG_H # include #endif #if HAVE_RANDOM_H # include #endif ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray realpath rpmatch secure_getenv setenv setstate setstate_r srandom srandom_r strtod strtoll strtoull unlockpt unsetenv]) ]) AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_STDLIB_H_DEFAULTS], [ GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT]) GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL]) GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX]) GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME]) GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG]) GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT]) GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT]) GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX]) GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC]) GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP]) GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP]) GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS]) GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP]) GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS]) GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT]) GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME]) GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R]) GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV]) GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R]) GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM]) GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R]) GNULIB_REALLOCARRAY=0; AC_SUBST([GNULIB_REALLOCARRAY]) GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX]) GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH]) GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH]) GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV]) GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV]) GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD]) GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL]) GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL]) GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX]) GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT]) GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV]) GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE__EXIT=1; AC_SUBST([HAVE__EXIT]) HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME]) HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) HAVE_DECL_INITSTATE=1; AC_SUBST([HAVE_DECL_INITSTATE]) HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP]) HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS]) HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP]) HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS]) HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT]) HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME]) HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R]) HAVE_QSORT_R=1; AC_SUBST([HAVE_QSORT_R]) HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM]) HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H]) HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) HAVE_REALLOCARRAY=1; AC_SUBST([HAVE_REALLOCARRAY]) HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV]) HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV]) HAVE_DECL_SETSTATE=1; AC_SUBST([HAVE_DECL_SETSTATE]) HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT]) HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV]) REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC]) REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC]) REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME]) REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R]) REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R]) REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC]) REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH]) REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV]) REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV]) REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB]) ]) ttfautohint-1.8.1/gnulib/m4/strerror.m40000644000175000001440000000652313222450622017663 0ustar00wlusers00000000000000# strerror.m4 serial 19 dnl Copyright (C) 2002, 2007-2017 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. AC_DEFUN([gl_FUNC_STRERROR], [ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) ]) if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then AC_CACHE_CHECK([for working strerror function], [gl_cv_func_working_strerror], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[if (!*strerror (-2)) return 1;]])], [gl_cv_func_working_strerror=yes], [gl_cv_func_working_strerror=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_working_strerror="guessing no" ;; esac ]) ]) case "$gl_cv_func_working_strerror" in *yes) ;; *) dnl The system's strerror() fails to return a string for out-of-range dnl integers. Replace it. REPLACE_STRERROR=1 ;; esac m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's dnl buffer, we must replace strerror. case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR=1 ;; esac ]) else dnl The system's strerror() cannot know about the new errno values we add dnl to , or any fix for strerror(0). Replace it. REPLACE_STRERROR=1 fi ]) dnl Detect if strerror(0) passes (that is, does not set errno, and does not dnl return a string that matches strerror(-1)). AC_DEFUN([gl_FUNC_STRERROR_0], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles REPLACE_STRERROR_0=0 AC_CACHE_CHECK([whether strerror(0) succeeds], [gl_cv_func_strerror_0_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include ]], [[int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result;]])], [gl_cv_func_strerror_0_works=yes], [gl_cv_func_strerror_0_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_strerror_0_works="guessing no" ;; esac ]) ]) case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0) does not return a message implying success.]) ;; esac ]) ttfautohint-1.8.1/gnulib/m4/strerror_r.m40000644000175000001440000001506713222450622020207 0ustar00wlusers00000000000000# strerror_r.m4 serial 19 dnl Copyright (C) 2002, 2007-2017 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. AC_DEFUN([gl_FUNC_STRERROR_R], [ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) dnl Persuade Solaris to declare strerror_r(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Some systems don't declare strerror_r() if _THREAD_SAFE and _REENTRANT dnl are not defined. AC_CHECK_DECLS_ONCE([strerror_r]) if test $ac_cv_have_decl_strerror_r = no; then HAVE_DECL_STRERROR_R=0 fi if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then if test $gl_cv_func_strerror_r_posix_signature = yes; then case "$gl_cv_func_strerror_r_works" in dnl The system's strerror_r has bugs. Replace it. *no) REPLACE_STRERROR_R=1 ;; esac else dnl The system's strerror_r() has a wrong signature. Replace it. REPLACE_STRERROR_R=1 fi else dnl The system's strerror_r() cannot know about the new errno values we dnl add to , or any fix for strerror(0). Replace it. REPLACE_STRERROR_R=1 fi fi ]) # Prerequisites of lib/strerror_r.c. AC_DEFUN([gl_PREREQ_STRERROR_R], [ dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r. AC_CHECK_FUNCS_ONCE([__xpg_strerror_r]) AC_CHECK_FUNCS_ONCE([catgets]) AC_CHECK_FUNCS_ONCE([snprintf]) ]) # Detect if strerror_r works, but without affecting whether a replacement # strerror_r will be used. AC_DEFUN([gl_FUNC_STRERROR_R_WORKS], [ AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_CHECK_FUNCS_ONCE([strerror_r]) if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then dnl The POSIX prototype is: int strerror_r (int, char *, size_t); dnl glibc, Cygwin: char *strerror_r (int, char *, size_t); dnl AIX 5.1, OSF/1 5.1: int strerror_r (int, char *, int); AC_CACHE_CHECK([for strerror_r with POSIX signature], [gl_cv_func_strerror_r_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include int strerror_r (int, char *, size_t); ]], [])], [gl_cv_func_strerror_r_posix_signature=yes], [gl_cv_func_strerror_r_posix_signature=no]) ]) if test $gl_cv_func_strerror_r_posix_signature = yes; then dnl AIX 6.1 strerror_r fails by returning -1, not an error number. dnl HP-UX 11.31 strerror_r always fails when the buffer length argument dnl is less than 80. dnl FreeBSD 8.s strerror_r claims failure on 0 dnl Mac OS X 10.5 strerror_r treats 0 like -1 dnl Solaris 10 strerror_r corrupts errno on failure AC_CACHE_CHECK([whether strerror_r works], [gl_cv_func_strerror_r_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include ]], [[int result = 0; char buf[79]; if (strerror_r (EACCES, buf, 0) < 0) result |= 1; errno = 0; if (strerror_r (EACCES, buf, sizeof buf) != 0) result |= 2; strcpy (buf, "Unknown"); if (strerror_r (0, buf, sizeof buf) != 0) result |= 4; if (errno) result |= 8; if (strstr (buf, "nknown") || strstr (buf, "ndefined")) result |= 0x10; errno = 0; *buf = 0; if (strerror_r (-3, buf, sizeof buf) < 0) result |= 0x20; if (errno) result |= 0x40; if (!*buf) result |= 0x80; return result; ]])], [gl_cv_func_strerror_r_works=yes], [gl_cv_func_strerror_r_works=no], [ changequote(,)dnl case "$host_os" in # Guess no on AIX. aix*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on HP-UX. hpux*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on BSD variants. *bsd*) gl_cv_func_strerror_r_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_strerror_r_works="guessing yes";; esac changequote([,])dnl ]) ]) else dnl The system's strerror() has a wrong signature. dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r. AC_CHECK_FUNCS_ONCE([__xpg_strerror_r]) dnl In glibc < 2.14, __xpg_strerror_r does not populate buf on failure. dnl In cygwin < 1.7.10, __xpg_strerror_r clobbers strerror's buffer. if test $ac_cv_func___xpg_strerror_r = yes; then AC_CACHE_CHECK([whether __xpg_strerror_r works], [gl_cv_func_strerror_r_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include extern #ifdef __cplusplus "C" #endif int __xpg_strerror_r(int, char *, size_t); ]], [[int result = 0; char buf[256] = "^"; char copy[256]; char *str = strerror (-1); strcpy (copy, str); if (__xpg_strerror_r (-2, buf, 1) == 0) result |= 1; if (*buf) result |= 2; __xpg_strerror_r (-2, buf, 256); if (strcmp (str, copy)) result |= 4; return result; ]])], [gl_cv_func_strerror_r_works=yes], [gl_cv_func_strerror_r_works=no], [dnl Guess no on all platforms that have __xpg_strerror_r, dnl at least until fixed glibc and cygwin are more common. gl_cv_func_strerror_r_works="guessing no" ]) ]) fi fi fi fi ]) ttfautohint-1.8.1/gnulib/m4/string_h.m40000644000175000001440000001311113222450622017605 0ustar00wlusers00000000000000# Configure a GNU-like replacement for . # Copyright (C) 2007-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. # serial 22 # Written by Paul Eggert. AC_DEFUN([gl_HEADER_STRING_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_HEADER_STRING_H_BODY]) ]) AC_DEFUN([gl_HEADER_STRING_H_BODY], [ AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) gl_NEXT_HEADERS([string.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include ]], [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strsignal strverscmp]) ]) AC_DEFUN([gl_STRING_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], [ GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO]) GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL]) GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT]) GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R]) GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO]) HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) HAVE_MEMCHR=1; AC_SUBST([HAVE_MEMCHR]) HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) ]) ttfautohint-1.8.1/gnulib/m4/strndup.m40000644000175000001440000000327413222450622017500 0ustar00wlusers00000000000000# strndup.m4 serial 22 dnl Copyright (C) 2002-2003, 2005-2017 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. AC_DEFUN([gl_FUNC_STRNDUP], [ dnl Persuade glibc to declare strndup(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([strndup]) AC_CHECK_FUNCS_ONCE([strndup]) if test $ac_cv_have_decl_strndup = no; then HAVE_DECL_STRNDUP=0 fi if test $ac_cv_func_strndup = yes; then HAVE_STRNDUP=1 # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. AC_CACHE_CHECK([for working strndup], [gl_cv_func_strndup_works], [AC_RUN_IFELSE([ AC_LANG_PROGRAM([[#include #include ]], [[ #if !HAVE_DECL_STRNDUP extern #ifdef __cplusplus "C" #endif char *strndup (const char *, size_t); #endif int result; char *s; s = strndup ("some longer string", 15); free (s); s = strndup ("shorter string", 13); result = s[13] != '\0'; free (s); return result;]])], [gl_cv_func_strndup_works=yes], [gl_cv_func_strndup_works=no], [ changequote(,)dnl case $host_os in aix | aix[3-6]*) gl_cv_func_strndup_works="guessing no";; *) gl_cv_func_strndup_works="guessing yes";; esac changequote([,])dnl ])]) case $gl_cv_func_strndup_works in *no) REPLACE_STRNDUP=1 ;; esac else HAVE_STRNDUP=0 fi ]) ttfautohint-1.8.1/gnulib/m4/strnlen.m40000644000175000001440000000156113222450622017463 0ustar00wlusers00000000000000# strnlen.m4 serial 13 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2017 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. AC_DEFUN([gl_FUNC_STRNLEN], [ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) dnl Persuade glibc to declare strnlen(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([strnlen]) if test $ac_cv_have_decl_strnlen = no; then HAVE_DECL_STRNLEN=0 else m4_pushdef([AC_LIBOBJ], [:]) dnl Note: AC_FUNC_STRNLEN does AC_LIBOBJ([strnlen]). AC_FUNC_STRNLEN m4_popdef([AC_LIBOBJ]) if test $ac_cv_func_strnlen_working = no; then REPLACE_STRNLEN=1 fi fi ]) # Prerequisites of lib/strnlen.c. AC_DEFUN([gl_PREREQ_STRNLEN], [:]) ttfautohint-1.8.1/gnulib/m4/strtok_r.m40000644000175000001440000000512313222450622017643 0ustar00wlusers00000000000000# strtok_r.m4 serial 15 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2017 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. AC_DEFUN([gl_FUNC_STRTOK_R], [ dnl The strtok_r() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS([strtok_r]) if test $ac_cv_func_strtok_r = yes; then HAVE_STRTOK_R=1 dnl glibc 2.7 has a bug in strtok_r that causes a segmentation fault dnl when the second argument to strtok_r is a constant string that has dnl exactly one byte and compiling with optimization. This bug is, for dnl example, present in the glibc 2.7-18 package in Debian "lenny". dnl See . AC_CACHE_CHECK([whether strtok_r works], [gl_cv_func_strtok_r_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #ifndef __OPTIMIZE__ # define __OPTIMIZE__ 1 #endif #undef __OPTIMIZE_SIZE__ #undef __NO_INLINE__ #include #include ]], [[static const char dummy[] = "\177\01a"; char delimiters[] = "xxxxxxxx"; char *save_ptr = (char *) dummy; strtok_r (delimiters, "x", &save_ptr); strtok_r (NULL, "x", &save_ptr); return 0; ]]) ], [gl_cv_func_strtok_r_works=yes], [gl_cv_func_strtok_r_works=no], [case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_func_strtok_r_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strtok_r_works="guessing yes" ;; *) gl_cv_func_strtok_r_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_strtok_r_works" in *no) dnl We could set REPLACE_STRTOK_R=1 here, but it's only the macro dnl version in which is wrong. The code compiled dnl into libc is fine. UNDEFINE_STRTOK_R=1 ;; esac else HAVE_STRTOK_R=0 fi AC_CHECK_DECLS_ONCE([strtok_r]) if test $ac_cv_have_decl_strtok_r = no; then HAVE_DECL_STRTOK_R=0 fi ]) # Prerequisites of lib/strtok_r.c. AC_DEFUN([gl_PREREQ_STRTOK_R], [ : ]) ttfautohint-1.8.1/gnulib/m4/strtoull.m40000644000175000001440000000141113222450622017660 0ustar00wlusers00000000000000# strtoull.m4 serial 7 dnl Copyright (C) 2002, 2004, 2006, 2008-2017 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. AC_DEFUN([gl_FUNC_STRTOULL], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl We don't need (and can't compile) the replacement strtoull dnl unless the type 'unsigned long long int' exists. AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) if test "$ac_cv_type_unsigned_long_long_int" = yes; then AC_CHECK_FUNCS([strtoull]) if test $ac_cv_func_strtoull = no; then HAVE_STRTOULL=0 fi fi ]) # Prerequisites of lib/strtoull.c. AC_DEFUN([gl_PREREQ_STRTOULL], [ : ]) ttfautohint-1.8.1/gnulib/m4/sys_socket_h.m40000644000175000001440000001416313222450622020475 0ustar00wlusers00000000000000# sys_socket_h.m4 serial 23 dnl Copyright (C) 2005-2017 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 Simon Josefsson. AC_DEFUN([gl_HEADER_SYS_SOCKET], [ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have dnl old-style declarations (with return type 'int' instead of 'ssize_t') dnl unless _POSIX_PII_SOCKET is defined. case "$host_os" in osf*) AC_DEFINE([_POSIX_PII_SOCKET], [1], [Define to 1 in order to get the POSIX compatible declarations of socket functions.]) ;; esac AC_CACHE_CHECK([whether is self-contained], [gl_cv_header_sys_socket_h_selfcontained], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])], [gl_cv_header_sys_socket_h_selfcontained=yes], [gl_cv_header_sys_socket_h_selfcontained=no]) ]) if test $gl_cv_header_sys_socket_h_selfcontained = yes; then dnl If the shutdown function exists, should define dnl SHUT_RD, SHUT_WR, SHUT_RDWR. AC_CHECK_FUNCS([shutdown]) if test $ac_cv_func_shutdown = yes; then AC_CACHE_CHECK([whether defines the SHUT_* macros], [gl_cv_header_sys_socket_h_shut], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])], [gl_cv_header_sys_socket_h_shut=yes], [gl_cv_header_sys_socket_h_shut=no]) ]) if test $gl_cv_header_sys_socket_h_shut = no; then SYS_SOCKET_H='sys/socket.h' fi fi fi # We need to check for ws2tcpip.h now. gl_PREREQ_SYS_H_SOCKET AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[ /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif ]) if test $ac_cv_type_struct_sockaddr_storage = no; then HAVE_STRUCT_SOCKADDR_STORAGE=0 fi if test $ac_cv_type_sa_family_t = no; then HAVE_SA_FAMILY_T=0 fi if test $ac_cv_type_struct_sockaddr_storage != no; then AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family], [], [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0], [#include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif ]) fi if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then SYS_SOCKET_H='sys/socket.h' fi gl_PREREQ_SYS_H_WINSOCK2 dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Some systems require prerequisite headers. */ #include #include ]], [socket connect accept bind getpeername getsockname getsockopt listen recv send recvfrom sendto setsockopt shutdown accept4]) ]) AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], [ dnl Check prerequisites of the replacement. AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) gl_CHECK_NEXT_HEADERS([sys/socket.h]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_SYS_SOCKET_H=1 HAVE_WS2TCPIP_H=0 else HAVE_SYS_SOCKET_H=0 if test $ac_cv_header_ws2tcpip_h = yes; then HAVE_WS2TCPIP_H=1 else HAVE_WS2TCPIP_H=0 fi fi AC_SUBST([HAVE_SYS_SOCKET_H]) AC_SUBST([HAVE_WS2TCPIP_H]) ]) # Common prerequisites of the replacement and of the # replacement. # Sets and substitutes HAVE_WINSOCK2_H. AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2], [ m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) AC_CHECK_HEADERS_ONCE([sys/socket.h]) if test $ac_cv_header_sys_socket_h != yes; then dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make dnl the check for those headers unconditional; yet cygwin reports dnl that the headers are present but cannot be compiled (since on dnl cygwin, all socket information should come from sys/socket.h). AC_CHECK_HEADERS([winsock2.h]) fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi AC_SUBST([HAVE_WINSOCK2_H]) ]) AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS], [ GNULIB_SOCKET=0; AC_SUBST([GNULIB_SOCKET]) GNULIB_CONNECT=0; AC_SUBST([GNULIB_CONNECT]) GNULIB_ACCEPT=0; AC_SUBST([GNULIB_ACCEPT]) GNULIB_BIND=0; AC_SUBST([GNULIB_BIND]) GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME]) GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME]) GNULIB_GETSOCKOPT=0; AC_SUBST([GNULIB_GETSOCKOPT]) GNULIB_LISTEN=0; AC_SUBST([GNULIB_LISTEN]) GNULIB_RECV=0; AC_SUBST([GNULIB_RECV]) GNULIB_SEND=0; AC_SUBST([GNULIB_SEND]) GNULIB_RECVFROM=0; AC_SUBST([GNULIB_RECVFROM]) GNULIB_SENDTO=0; AC_SUBST([GNULIB_SENDTO]) GNULIB_SETSOCKOPT=0; AC_SUBST([GNULIB_SETSOCKOPT]) GNULIB_SHUTDOWN=0; AC_SUBST([GNULIB_SHUTDOWN]) GNULIB_ACCEPT4=0; AC_SUBST([GNULIB_ACCEPT4]) HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE]) HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY]) HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T]) HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4]) ]) ttfautohint-1.8.1/gnulib/m4/sys_types_h.m40000644000175000001440000000337313222450622020352 0ustar00wlusers00000000000000# sys_types_h.m4 serial 9 dnl Copyright (C) 2011-2017 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. AC_DEFUN_ONCE([gl_SYS_TYPES_H], [ dnl Use sane struct stat types in OpenVMS 8.2 and later. AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.]) AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) gl_NEXT_HEADERS([sys/types.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to override the 'off_t' type. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Whether to override the 'dev_t' and 'ino_t' types. m4_ifdef([gl_WINDOWS_STAT_INODES], [ AC_REQUIRE([gl_WINDOWS_STAT_INODES]) ], [ WINDOWS_STAT_INODES=0 ]) AC_SUBST([WINDOWS_STAT_INODES]) ]) AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], [ ]) # This works around a buggy version in autoconf <= 2.69. # See m4_version_prereq([2.70], [], [ # This is taken from the following Autoconf patch: # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=e17a30e987d7ee695fb4294a82d987ec3dc9b974 m4_undefine([AC_HEADER_MAJOR]) AC_DEFUN([AC_HEADER_MAJOR], [AC_CHECK_HEADERS_ONCE([sys/types.h]) AC_CHECK_HEADER([sys/mkdev.h], [AC_DEFINE([MAJOR_IN_MKDEV], [1], [Define to 1 if `major', `minor', and `makedev' are declared in .])]) if test $ac_cv_header_sys_mkdev_h = no; then AC_CHECK_HEADER([sys/sysmacros.h], [AC_DEFINE([MAJOR_IN_SYSMACROS], [1], [Define to 1 if `major', `minor', and `makedev' are declared in .])]) fi ]) ]) ttfautohint-1.8.1/gnulib/m4/threadlib.m40000644000175000001440000003614213222450622017737 0ustar00wlusers00000000000000# threadlib.m4 serial 13 dnl Copyright (C) 2005-2017 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. dnl gl_THREADLIB dnl ------------ dnl Tests for a multithreading library to be used. dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the dnl default is 'no', otherwise it is system dependent. In both cases, the user dnl can change the choice through the options --enable-threads=choice or dnl --disable-threads. dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS, dnl USE_PTH_THREADS, USE_WINDOWS_THREADS dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with dnl libtool). dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for dnl programs that really need multithread functionality. The difference dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. AC_DEFUN([gl_THREADLIB_EARLY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) ]) dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_EARLY_BODY], [ dnl Ordering constraints: This macro modifies CPPFLAGS in a way that dnl influences the result of the autoconf tests that test for *_unlocked dnl declarations, on AIX 5 at least. Therefore it must come early. AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl AC_BEFORE([$0], [gl_ARGP])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems. dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes dnl AC_GNU_SOURCE. m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], [AC_REQUIRE([AC_GNU_SOURCE])]) dnl Check for multithreading. m4_ifdef([gl_THREADLIB_DEFAULT_NO], [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])], [m4_divert_text([DEFAULTS], [gl_use_threads_default=])]) AC_ARG_ENABLE([threads], AC_HELP_STRING([--enable-threads={posix|solaris|pth|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ AC_HELP_STRING([--disable-threads], [build without multithread safety])]), [gl_use_threads=$enableval], [if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else changequote(,)dnl case "$host_os" in dnl Disable multithreading by default on OSF/1, because it interferes dnl with fork()/exec(): When msgexec is linked with -lpthread, its dnl child process gets an endless segmentation fault inside execvp(). dnl Disable multithreading by default on Cygwin 1.5.x, because it has dnl bugs that lead to endless loops or crashes. See dnl . osf*) gl_use_threads=no ;; cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac changequote([,])dnl fi ]) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # For using : case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks . cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in . case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac fi ]) dnl The guts of gl_THREADLIB. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_BODY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then dnl Check whether the compiler and linker support weak declarations. AC_CACHE_CHECK([whether imported symbols can be declared weak], [gl_cv_have_weak], [gl_cv_have_weak=no dnl First, test whether the compiler accepts it syntactically. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern void xyzzy (); #pragma weak xyzzy]], [[xyzzy();]])], [gl_cv_have_weak=maybe]) if test $gl_cv_have_weak = maybe; then dnl Second, test whether it actually works. On Cygwin 1.7.2, with dnl gcc 4.3, symbols declared weak always evaluate to the address 0. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #pragma weak fputs int main () { return (fputs == NULL); }]])], [gl_cv_have_weak=yes], [gl_cv_have_weak=no], [dnl When cross-compiling, assume that only ELF platforms support dnl weak symbols. AC_EGREP_CPP([Extensible Linking Format], [#ifdef __ELF__ Extensible Linking Format #endif ], [gl_cv_have_weak="guessing yes"], [gl_cv_have_weak="guessing no"]) ]) fi dnl But when linking statically, weak symbols don't work. case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac ]) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks . It's added above, in gl_THREADLIB_EARLY_BODY. AC_CHECK_HEADER([pthread.h], [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads gl_have_pthread= # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include pthread_mutex_t m; pthread_mutexattr_t ma; ]], [[pthread_mutex_lock (&m); pthread_mutexattr_init (&ma);]])], [gl_have_pthread=yes LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread]) LIBS=$save_LIBS test -n "$gl_have_pthread" && break done # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. AC_CHECK_LIB([pthread], [pthread_kill], [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], [Define if the pthread_in_use() detection is hard.]) esac ]) elif test -z "$gl_have_pthread"; then # Some library is needed. Try libpthread and libc_r. AC_CHECK_LIB([pthread], [pthread_kill], [gl_have_pthread=yes LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread]) if test -z "$gl_have_pthread"; then # For FreeBSD 4. AC_CHECK_LIB([c_r], [pthread_kill], [gl_have_pthread=yes LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r]) fi fi if test -n "$gl_have_pthread"; then gl_threads_api=posix AC_DEFINE([USE_POSIX_THREADS], [1], [Define if the POSIX multithreading library can be used.]) if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], [Define if references to the POSIX multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi fi fi fi if test -z "$gl_have_pthread"; then if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then gl_have_solaristhread= gl_save_LIBS="$LIBS" LIBS="$LIBS -lthread" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[thr_self();]])], [gl_have_solaristhread=yes]) LIBS="$gl_save_LIBS" if test -n "$gl_have_solaristhread"; then gl_threads_api=solaris LIBTHREAD=-lthread LTLIBTHREAD=-lthread LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" AC_DEFINE([USE_SOLARIS_THREADS], [1], [Define if the old Solaris multithreading library can be used.]) if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1], [Define if references to the old Solaris multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi fi fi if test "$gl_use_threads" = pth; then gl_save_CPPFLAGS="$CPPFLAGS" AC_LIB_LINKFLAGS([pth]) gl_have_pth= gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBPTH" AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[pth_self();]])], [gl_have_pth=yes]) LIBS="$gl_save_LIBS" if test -n "$gl_have_pth"; then gl_threads_api=pth LIBTHREAD="$LIBPTH" LTLIBTHREAD="$LTLIBPTH" LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" AC_DEFINE([USE_PTH_THREADS], [1], [Define if the GNU Pth multithreading library can be used.]) if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_PTH_THREADS_WEAK], [1], [Define if references to the GNU Pth multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi else CPPFLAGS="$gl_save_CPPFLAGS" fi fi if test -z "$gl_have_pthread"; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=windows AC_DEFINE([USE_WINDOWS_THREADS], [1], [Define if the native Windows multithreading API can be used.]) fi ;; esac fi fi AC_MSG_CHECKING([for multithread API to use]) AC_MSG_RESULT([$gl_threads_api]) AC_SUBST([LIBTHREAD]) AC_SUBST([LTLIBTHREAD]) AC_SUBST([LIBMULTITHREAD]) AC_SUBST([LTLIBMULTITHREAD]) ]) AC_DEFUN([gl_THREADLIB], [ AC_REQUIRE([gl_THREADLIB_EARLY]) AC_REQUIRE([gl_THREADLIB_BODY]) ]) dnl gl_DISABLE_THREADS dnl ------------------ dnl Sets the gl_THREADLIB default so that threads are not used by default. dnl The user can still override it at installation time, by using the dnl configure option '--enable-threads'. AC_DEFUN([gl_DISABLE_THREADS], [ m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no]) ]) dnl Survey of platforms: dnl dnl Platform Available Compiler Supports test-lock dnl flavours option weak result dnl --------------- --------- --------- -------- --------- dnl Linux 2.4/glibc posix -lpthread Y OK dnl dnl GNU Hurd/glibc posix dnl dnl Ubuntu 14.04 posix -pthread Y OK dnl dnl FreeBSD 5.3 posix -lc_r Y dnl posix -lkse ? Y dnl posix -lpthread ? Y dnl posix -lthr Y dnl dnl FreeBSD 5.2 posix -lc_r Y dnl posix -lkse Y dnl posix -lthr Y dnl dnl FreeBSD 4.0,4.10 posix -lc_r Y OK dnl dnl NetBSD 1.6 -- dnl dnl OpenBSD 3.4 posix -lpthread Y OK dnl dnl Mac OS X 10.[123] posix -lpthread Y OK dnl dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK dnl solaris -lthread Y Sol 7,8: 0.0; Sol 9: OK dnl dnl HP-UX 11 posix -lpthread N (cc) OK dnl Y (gcc) dnl dnl IRIX 6.5 posix -lpthread Y 0.5 dnl dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK dnl dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK dnl -lpthread (gcc) Y dnl dnl Cygwin posix -lpthread Y OK dnl dnl Any of the above pth -lpth 0.0 dnl dnl Mingw windows N OK dnl dnl BeOS 5 -- dnl dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is dnl turned off: dnl OK if all three tests terminate OK, dnl 0.5 if the first test terminates OK but the second one loops endlessly, dnl 0.0 if the first test already loops endlessly. ttfautohint-1.8.1/gnulib/m4/unistd_h.m40000644000175000001440000002235413222450622017616 0ustar00wlusers00000000000000# unistd_h.m4 serial 71 dnl Copyright (C) 2006-2017 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 Written by Simon Josefsson, Bruno Haible. AC_DEFUN([gl_UNISTD_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([unistd.h]) if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi AC_SUBST([HAVE_UNISTD_H]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Determine WINDOWS_64_BIT_OFF_T. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_UNISTD_H # include #endif /* Some systems declare various items in the wrong headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include # endif #endif ]], [chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups gethostname getlogin getlogin_r getpagesize getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sethostname sleep symlink symlinkat truncate ttyname_r unlink unlinkat usleep]) ]) AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_UNISTD_H_DEFAULTS], [ GNULIB_CHDIR=0; AC_SUBST([GNULIB_CHDIR]) GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) GNULIB_DUP=0; AC_SUBST([GNULIB_DUP]) GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2]) GNULIB_DUP3=0; AC_SUBST([GNULIB_DUP3]) GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON]) GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS]) GNULIB_FACCESSAT=0; AC_SUBST([GNULIB_FACCESSAT]) GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR]) GNULIB_FCHOWNAT=0; AC_SUBST([GNULIB_FCHOWNAT]) GNULIB_FDATASYNC=0; AC_SUBST([GNULIB_FDATASYNC]) GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC]) GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE]) GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME]) GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE]) GNULIB_GETGROUPS=0; AC_SUBST([GNULIB_GETGROUPS]) GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME]) GNULIB_GETLOGIN=0; AC_SUBST([GNULIB_GETLOGIN]) GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL]) GNULIB_GROUP_MEMBER=0; AC_SUBST([GNULIB_GROUP_MEMBER]) GNULIB_ISATTY=0; AC_SUBST([GNULIB_ISATTY]) GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN]) GNULIB_LINK=0; AC_SUBST([GNULIB_LINK]) GNULIB_LINKAT=0; AC_SUBST([GNULIB_LINKAT]) GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK]) GNULIB_PIPE=0; AC_SUBST([GNULIB_PIPE]) GNULIB_PIPE2=0; AC_SUBST([GNULIB_PIPE2]) GNULIB_PREAD=0; AC_SUBST([GNULIB_PREAD]) GNULIB_PWRITE=0; AC_SUBST([GNULIB_PWRITE]) GNULIB_READ=0; AC_SUBST([GNULIB_READ]) GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) GNULIB_READLINKAT=0; AC_SUBST([GNULIB_READLINKAT]) GNULIB_RMDIR=0; AC_SUBST([GNULIB_RMDIR]) GNULIB_SETHOSTNAME=0; AC_SUBST([GNULIB_SETHOSTNAME]) GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK]) GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT]) GNULIB_TRUNCATE=0; AC_SUBST([GNULIB_TRUNCATE]) GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R]) GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING]) GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE]) GNULIB_UNLINK=0; AC_SUBST([GNULIB_UNLINK]) GNULIB_UNLINKAT=0; AC_SUBST([GNULIB_UNLINKAT]) GNULIB_USLEEP=0; AC_SUBST([GNULIB_USLEEP]) GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT]) HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR]) HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT]) HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC]) HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS]) HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN]) HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) HAVE_LINK=1; AC_SUBST([HAVE_LINK]) HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) HAVE_PIPE=1; AC_SUBST([HAVE_PIPE]) HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2]) HAVE_PREAD=1; AC_SUBST([HAVE_PREAD]) HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE]) HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT]) HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME]) HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) HAVE_TRUNCATE=1; AC_SUBST([HAVE_TRUNCATE]) HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT]) HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP]) HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) HAVE_DECL_GETLOGIN=1; AC_SUBST([HAVE_DECL_GETLOGIN]) HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE]) HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL]) HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME]) HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) REPLACE_DUP=0; AC_SUBST([REPLACE_DUP]) REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2]) REPLACE_FACCESSAT=0; AC_SUBST([REPLACE_FACCESSAT]) REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE]) REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE]) REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY]) REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) REPLACE_LINK=0; AC_SUBST([REPLACE_LINK]) REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT]) REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD]) REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE]) REPLACE_READ=0; AC_SUBST([REPLACE_READ]) REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK]) REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT]) REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT]) REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE]) REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R]) REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK]) REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT]) REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP]) REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) ]) ttfautohint-1.8.1/gnulib/m4/vasnprintf.m40000644000175000001440000002113313222450622020165 0ustar00wlusers00000000000000# vasnprintf.m4 serial 36 dnl Copyright (C) 2002-2004, 2006-2017 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. AC_DEFUN([gl_FUNC_VASNPRINTF], [ AC_CHECK_FUNCS_ONCE([vasnprintf]) if test $ac_cv_func_vasnprintf = no; then gl_REPLACE_VASNPRINTF fi ]) AC_DEFUN([gl_REPLACE_VASNPRINTF], [ AC_CHECK_FUNCS_ONCE([vasnprintf]) AC_LIBOBJ([vasnprintf]) AC_LIBOBJ([printf-args]) AC_LIBOBJ([printf-parse]) AC_LIBOBJ([asnprintf]) if test $ac_cv_func_vasnprintf = yes; then AC_DEFINE([REPLACE_VASNPRINTF], [1], [Define if vasnprintf exists but is overridden by gnulib.]) fi gl_PREREQ_PRINTF_ARGS gl_PREREQ_PRINTF_PARSE gl_PREREQ_VASNPRINTF gl_PREREQ_ASNPRINTF ]) # Prerequisites of lib/printf-args.h, lib/printf-args.c. AC_DEFUN([gl_PREREQ_PRINTF_ARGS], [ AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) ]) # Prerequisites of lib/printf-parse.h, lib/printf-parse.c. AC_DEFUN([gl_PREREQ_PRINTF_PARSE], [ AC_REQUIRE([gl_FEATURES_H]) AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) AC_REQUIRE([AC_TYPE_SIZE_T]) AC_CHECK_TYPE([ptrdiff_t], , [AC_DEFINE([ptrdiff_t], [long], [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) ]) AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) ]) # Prerequisites of lib/vasnprintf.c. AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF], [ AC_REQUIRE([AC_FUNC_ALLOCA]) AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb]) dnl Use the _snprintf function only if it is declared (because on NetBSD it dnl is defined as a weak alias of snprintf; we prefer to use the latter). AC_CHECK_DECLS([_snprintf], , , [[#include ]]) dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE. AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) dnl We can avoid a lot of code by assuming that snprintf's return value dnl conforms to ISO C99. So check that. AC_REQUIRE([gl_SNPRINTF_RETVAL_C99]) case "$gl_cv_func_snprintf_retval_c99" in *yes) AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1], [Define if the return value of the snprintf function is the number of of bytes (excluding the terminating NUL) that would have been produced if the buffer had been large enough.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting 'long double' # arguments. AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) case "$gl_cv_func_printf_long_double" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' # arguments. AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], [ AC_REQUIRE([gl_PRINTF_INFINITE]) case "$gl_cv_func_printf_infinite" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for infinite 'double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' # arguments. AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if dnl NEED_PRINTF_LONG_DOUBLE is already set. AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE]) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for infinite 'long double' arguments.]) ;; esac ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) case "$gl_cv_func_printf_directive_a" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1], [Define if the vasnprintf implementation needs special code for the 'a' and 'A' directives.]) AC_CHECK_FUNCS([nl_langinfo]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) case "$gl_cv_func_printf_directive_f" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1], [Define if the vasnprintf implementation needs special code for the 'F' directive.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) case "$gl_cv_func_printf_directive_ls" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1], [Define if the vasnprintf implementation needs special code for the 'ls' directive.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], [ AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) case "$gl_cv_func_printf_flag_grouping" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1], [Define if the vasnprintf implementation needs special code for the ' flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], [ AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) case "$gl_cv_func_printf_flag_leftadjust" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1], [Define if the vasnprintf implementation needs special code for the '-' flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], [ AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) case "$gl_cv_func_printf_flag_zero" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1], [Define if the vasnprintf implementation needs special code for the 0 flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting large precisions. AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], [ AC_REQUIRE([gl_PRINTF_PRECISION]) case "$gl_cv_func_printf_precision" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1], [Define if the vasnprintf implementation needs special code for supporting large precisions without arbitrary bounds.]) AC_DEFINE([NEED_PRINTF_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'double' arguments.]) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory # conditions. AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], [ AC_REQUIRE([gl_PRINTF_ENOMEM]) case "$gl_cv_func_printf_enomem" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_ENOMEM], [1], [Define if the vasnprintf implementation needs special code for surviving out-of-memory conditions.]) AC_DEFINE([NEED_PRINTF_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'double' arguments.]) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS], [ AC_REQUIRE([gl_PREREQ_VASNPRINTF]) gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM ]) # Prerequisites of lib/asnprintf.c. AC_DEFUN([gl_PREREQ_ASNPRINTF], [ ]) ttfautohint-1.8.1/gnulib/m4/vasprintf.m40000644000175000001440000000210013222450622020000 0ustar00wlusers00000000000000# vasprintf.m4 serial 6 dnl Copyright (C) 2002-2003, 2006-2007, 2009-2017 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. AC_DEFUN([gl_FUNC_VASPRINTF], [ AC_CHECK_FUNCS([vasprintf]) if test $ac_cv_func_vasprintf = no; then gl_REPLACE_VASPRINTF fi ]) AC_DEFUN([gl_REPLACE_VASPRINTF], [ AC_LIBOBJ([vasprintf]) AC_LIBOBJ([asprintf]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) if test $ac_cv_func_vasprintf = yes; then REPLACE_VASPRINTF=1 else HAVE_VASPRINTF=0 fi gl_PREREQ_VASPRINTF_H gl_PREREQ_VASPRINTF gl_PREREQ_ASPRINTF ]) # Prerequisites of the vasprintf portion of lib/stdio.h. AC_DEFUN([gl_PREREQ_VASPRINTF_H], [ dnl Persuade glibc to declare asprintf() and vasprintf(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) ]) # Prerequisites of lib/vasprintf.c. AC_DEFUN([gl_PREREQ_VASPRINTF], [ ]) # Prerequisites of lib/asprintf.c. AC_DEFUN([gl_PREREQ_ASPRINTF], [ ]) ttfautohint-1.8.1/gnulib/m4/warn-on-use.m40000644000175000001440000000415413222450622020152 0ustar00wlusers00000000000000# warn-on-use.m4 serial 5 dnl Copyright (C) 2010-2017 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. # gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES) # --------------------------------------- # For each whitespace-separated element in the list of NAMES, define # HAVE_RAW_DECL_name if the function has a declaration among INCLUDES # even after being undefined as a macro. # # See warn-on-use.h for some hints on how to poison function names, as # well as ideas on poisoning global variables and macros. NAMES may # include global variables, but remember that only functions work with # _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single # header, but if the replacement header pulls in other headers because # some systems declare functions in the wrong header, then INCLUDES # should do likewise. # # It is generally safe to assume declarations for functions declared # in the intersection of C89 and C11 (such as printf) without # needing gl_WARN_ON_USE_PREPARE. AC_DEFUN([gl_WARN_ON_USE_PREPARE], [ m4_foreach_w([gl_decl], [$2], [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), [Define to 1 if ]m4_defn([gl_decl])[ is declared even after undefining macros.])])dnl dnl FIXME: gl_Symbol must be used unquoted until we can assume dnl autoconf 2.64 or newer. for gl_func in m4_flatten([$2]); do AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl AC_CACHE_CHECK([whether $gl_func is declared without a macro], gl_Symbol, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], [@%:@undef $gl_func (void) $gl_func;])], [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])]) AS_VAR_IF(gl_Symbol, [yes], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) dnl shortcut - if the raw declaration exists, then set a cache dnl variable to allow skipping any later AC_CHECK_DECL efforts eval ac_cv_have_decl_$gl_func=yes]) AS_VAR_POPDEF([gl_Symbol])dnl done ]) ttfautohint-1.8.1/gnulib/m4/wchar_h.m40000644000175000001440000002354413222450622017416 0ustar00wlusers00000000000000dnl A placeholder for ISO C99 , for platforms that have issues. dnl Copyright (C) 2007-2017 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 Written by Eric Blake. # wchar_h.m4 serial 42 AC_DEFUN([gl_WCHAR_H], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) dnl Prepare for creating substitute . dnl Check for (missing in Linux uClibc when built without wide dnl character support). dnl is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) AC_REQUIRE([gl_FEATURES_H]) AC_REQUIRE([gt_TYPE_WINT_T]) if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi AC_SUBST([HAVE_WINT_T]) AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include #endif #include ]], [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime ]) ]) dnl Check whether is usable at all. AC_DEFUN([gl_WCHAR_H_INLINE_OK], [ dnl Test whether suffers due to the transition from '__inline' to dnl 'gnu_inline'. See dnl and . In summary, dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and dnl the option -std=c99 or -std=gnu99, leads to a broken . AC_CACHE_CHECK([whether uses 'inline' correctly], [gl_cv_header_wchar_h_correct_inline], [gl_cv_header_wchar_h_correct_inline=yes AC_LANG_CONFTEST([ AC_LANG_SOURCE([[#define wcstod renamed_wcstod /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include extern int zero (void); int main () { return zero(); } ]])]) dnl Do not rename the object file from conftest.$ac_objext to dnl conftest1.$ac_objext, as this will cause the link to fail on dnl z/OS when using the XPLINK object format (due to duplicate dnl CSECT names). Instead, temporarily redefine $ac_compile so dnl that the object file has the latter name from the start. save_ac_compile="$ac_compile" ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` if AC_TRY_EVAL([ac_compile]); then AC_LANG_CONFTEST([ AC_LANG_SOURCE([[#define wcstod renamed_wcstod /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int zero (void) { return 0; } ]])]) dnl See note above about renaming object files. ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` if AC_TRY_EVAL([ac_compile]); then if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then : else gl_cv_header_wchar_h_correct_inline=no fi fi fi ac_compile="$save_ac_compile" rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext ]) if test $gl_cv_header_wchar_h_correct_inline = no; then AC_MSG_ERROR([ cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in C99 mode. You have four options: - Add the flag -fgnu89-inline to CC and reconfigure, or - Fix your include files, using parts of , or - Use a gcc version older than 4.3, or - Don't use the flags -std=c99 or -std=gnu99. Configuration aborted.]) fi ]) AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_WCHAR_H_DEFAULTS], [ GNULIB_BTOWC=0; AC_SUBST([GNULIB_BTOWC]) GNULIB_WCTOB=0; AC_SUBST([GNULIB_WCTOB]) GNULIB_MBSINIT=0; AC_SUBST([GNULIB_MBSINIT]) GNULIB_MBRTOWC=0; AC_SUBST([GNULIB_MBRTOWC]) GNULIB_MBRLEN=0; AC_SUBST([GNULIB_MBRLEN]) GNULIB_MBSRTOWCS=0; AC_SUBST([GNULIB_MBSRTOWCS]) GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS]) GNULIB_WCRTOMB=0; AC_SUBST([GNULIB_WCRTOMB]) GNULIB_WCSRTOMBS=0; AC_SUBST([GNULIB_WCSRTOMBS]) GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS]) GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH]) GNULIB_WMEMCHR=0; AC_SUBST([GNULIB_WMEMCHR]) GNULIB_WMEMCMP=0; AC_SUBST([GNULIB_WMEMCMP]) GNULIB_WMEMCPY=0; AC_SUBST([GNULIB_WMEMCPY]) GNULIB_WMEMMOVE=0; AC_SUBST([GNULIB_WMEMMOVE]) GNULIB_WMEMSET=0; AC_SUBST([GNULIB_WMEMSET]) GNULIB_WCSLEN=0; AC_SUBST([GNULIB_WCSLEN]) GNULIB_WCSNLEN=0; AC_SUBST([GNULIB_WCSNLEN]) GNULIB_WCSCPY=0; AC_SUBST([GNULIB_WCSCPY]) GNULIB_WCPCPY=0; AC_SUBST([GNULIB_WCPCPY]) GNULIB_WCSNCPY=0; AC_SUBST([GNULIB_WCSNCPY]) GNULIB_WCPNCPY=0; AC_SUBST([GNULIB_WCPNCPY]) GNULIB_WCSCAT=0; AC_SUBST([GNULIB_WCSCAT]) GNULIB_WCSNCAT=0; AC_SUBST([GNULIB_WCSNCAT]) GNULIB_WCSCMP=0; AC_SUBST([GNULIB_WCSCMP]) GNULIB_WCSNCMP=0; AC_SUBST([GNULIB_WCSNCMP]) GNULIB_WCSCASECMP=0; AC_SUBST([GNULIB_WCSCASECMP]) GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP]) GNULIB_WCSCOLL=0; AC_SUBST([GNULIB_WCSCOLL]) GNULIB_WCSXFRM=0; AC_SUBST([GNULIB_WCSXFRM]) GNULIB_WCSDUP=0; AC_SUBST([GNULIB_WCSDUP]) GNULIB_WCSCHR=0; AC_SUBST([GNULIB_WCSCHR]) GNULIB_WCSRCHR=0; AC_SUBST([GNULIB_WCSRCHR]) GNULIB_WCSCSPN=0; AC_SUBST([GNULIB_WCSCSPN]) GNULIB_WCSSPN=0; AC_SUBST([GNULIB_WCSSPN]) GNULIB_WCSPBRK=0; AC_SUBST([GNULIB_WCSPBRK]) GNULIB_WCSSTR=0; AC_SUBST([GNULIB_WCSSTR]) GNULIB_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK]) GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH]) GNULIB_WCSFTIME=0; AC_SUBST([GNULIB_WCSFTIME]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC]) HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN]) HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS]) HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS]) HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB]) HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS]) HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS]) HAVE_WMEMCHR=1; AC_SUBST([HAVE_WMEMCHR]) HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP]) HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY]) HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE]) HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET]) HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN]) HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN]) HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY]) HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY]) HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY]) HAVE_WCPNCPY=1; AC_SUBST([HAVE_WCPNCPY]) HAVE_WCSCAT=1; AC_SUBST([HAVE_WCSCAT]) HAVE_WCSNCAT=1; AC_SUBST([HAVE_WCSNCAT]) HAVE_WCSCMP=1; AC_SUBST([HAVE_WCSCMP]) HAVE_WCSNCMP=1; AC_SUBST([HAVE_WCSNCMP]) HAVE_WCSCASECMP=1; AC_SUBST([HAVE_WCSCASECMP]) HAVE_WCSNCASECMP=1; AC_SUBST([HAVE_WCSNCASECMP]) HAVE_WCSCOLL=1; AC_SUBST([HAVE_WCSCOLL]) HAVE_WCSXFRM=1; AC_SUBST([HAVE_WCSXFRM]) HAVE_WCSDUP=1; AC_SUBST([HAVE_WCSDUP]) HAVE_WCSCHR=1; AC_SUBST([HAVE_WCSCHR]) HAVE_WCSRCHR=1; AC_SUBST([HAVE_WCSRCHR]) HAVE_WCSCSPN=1; AC_SUBST([HAVE_WCSCSPN]) HAVE_WCSSPN=1; AC_SUBST([HAVE_WCSSPN]) HAVE_WCSPBRK=1; AC_SUBST([HAVE_WCSPBRK]) HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR]) HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK]) HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH]) HAVE_WCSFTIME=1; AC_SUBST([HAVE_WCSFTIME]) HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC]) REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB]) REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT]) REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC]) REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN]) REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS]) REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS]) REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB]) REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS]) REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS]) REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH]) REPLACE_WCSFTIME=0; AC_SUBST([REPLACE_WCSFTIME]) ]) ttfautohint-1.8.1/gnulib/m4/wchar_t.m40000644000175000001440000000146213222450622017425 0ustar00wlusers00000000000000# wchar_t.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2002-2003, 2008-2017 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. dnl Test whether has the 'wchar_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WCHAR_T], [ AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include wchar_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])]) if test $gt_cv_c_wchar_t = yes; then AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) fi ]) ttfautohint-1.8.1/gnulib/m4/wint_t.m40000644000175000001440000000444313222450622017304 0ustar00wlusers00000000000000# wint_t.m4 serial 7 dnl Copyright (C) 2003, 2007-2017 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. dnl Test whether has the 'wint_t' type and whether gnulib's dnl or would, if present, override 'wint_t'. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WINT_T], [ AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include wint_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])]) if test $gt_cv_c_wint_t = yes; then AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) dnl Determine whether gnulib's or would, if present, dnl override 'wint_t'. AC_CACHE_CHECK([whether wint_t is too small], [gl_cv_type_wint_t_too_small], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include #endif #include int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; ]])], [gl_cv_type_wint_t_too_small=no], [gl_cv_type_wint_t_too_small=yes])]) if test $gl_cv_type_wint_t_too_small = yes; then GNULIB_OVERRIDES_WINT_T=1 else GNULIB_OVERRIDES_WINT_T=0 fi else GNULIB_OVERRIDES_WINT_T=0 fi AC_SUBST([GNULIB_OVERRIDES_WINT_T]) ]) dnl Prerequisites of the 'wint_t' override. AC_DEFUN([gl_TYPE_WINT_T_PREREQ], [ AC_CHECK_HEADERS_ONCE([crtdefs.h]) if test $ac_cv_header_crtdefs_h = yes; then HAVE_CRTDEFS_H=1 else HAVE_CRTDEFS_H=0 fi AC_SUBST([HAVE_CRTDEFS_H]) ]) ttfautohint-1.8.1/gnulib/m4/xalloc.m40000644000175000001440000000047213222450622017260 0ustar00wlusers00000000000000# xalloc.m4 serial 18 dnl Copyright (C) 2002-2006, 2009-2017 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. AC_DEFUN([gl_XALLOC], [:]) ttfautohint-1.8.1/gnulib/m4/xsize.m40000644000175000001440000000062613222450622017141 0ustar00wlusers00000000000000# xsize.m4 serial 5 dnl Copyright (C) 2003-2004, 2008-2017 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. AC_DEFUN([gl_XSIZE], [ dnl Prerequisites of lib/xsize.h. AC_REQUIRE([gl_SIZE_MAX]) AC_CHECK_HEADERS([stdint.h]) ]) ttfautohint-1.8.1/gnulib/m4/xstrndup.m40000644000175000001440000000063113222450622017662 0ustar00wlusers00000000000000# xstrndup.m4 serial 2 dnl Copyright (C) 2003, 2009-2017 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. AC_DEFUN([gl_XSTRNDUP], [ gl_PREREQ_XSTRNDUP ]) # Prerequisites of lib/xstrndup.c. AC_DEFUN([gl_PREREQ_XSTRNDUP], [ : ]) ttfautohint-1.8.1/gnulib/m4/gnulib-cache.m40000644000175000001440000000421713222450626020324 0ustar00wlusers00000000000000# Copyright (C) 2002-2017 Free Software Foundation, Inc. # # 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 file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # 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. # # Generated by gnulib-tool. # # This file represents the specification of how gnulib-tool is used. # It acts as a cache: It is written and read by gnulib-tool. # In projects that use version control, this file is meant to be put under # version control, like the configure.ac and various Makefile.am files. # Specification in the form of a command-line invocation: # gnulib-tool --import --local-dir=gl --lib=libgnu --source-base=gnulib/src --m4-base=gnulib/m4 --doc-base=doc --tests-base=tests --aux-dir=gnulib --no-conditional-dependencies --libtool --macro-prefix=gl dirname fcntl-h getopt-gnu git-version-gen isatty memmem-simple progname std-gnu11 stdarg stdbool stdint strerror_r-posix strndup strtok_r strtoull vasprintf # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([gl]) gl_MODULES([ dirname fcntl-h getopt-gnu git-version-gen isatty memmem-simple progname std-gnu11 stdarg stdbool stdint strerror_r-posix strndup strtok_r strtoull vasprintf ]) gl_AVOID([]) gl_SOURCE_BASE([gnulib/src]) gl_M4_BASE([gnulib/m4]) gl_PO_BASE([]) gl_DOC_BASE([doc]) gl_TESTS_BASE([tests]) gl_LIB([libgnu]) gl_MAKEFILE_NAME([]) gl_LIBTOOL gl_MACRO_PREFIX([gl]) gl_PO_DOMAIN([]) gl_WITNESS_C_MACRO([]) ttfautohint-1.8.1/gnulib/ar-lib0000755000175000001440000001330213222450647016313 0ustar00wlusers00000000000000#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2014 Free Software Foundation, Inc. # Written by Peter Rosin . # # This program is free software; you can redistribute 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 # . # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. 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 in 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_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat <. # # 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-2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(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:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:*) 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 ;; 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: ttfautohint-1.8.1/gnulib/config.rpath0000755000175000001440000004421613222450622017530 0ustar00wlusers00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2017 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally 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. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # 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. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : 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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) 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 hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; 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. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) 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 ;; hpux10*) if test "$with_gnu_ld" = no; then 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 fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # 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*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; freebsd* | dragonfly*) library_names_spec='$libname$shrext' ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. # # 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-2017 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 | pdp11 | 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 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | 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-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; 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 ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; 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 ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; wasm32) basic_machine=wasm32-unknown ;; 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 ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases that might get confused # with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # 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* | -386bsd* | -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* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -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 ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ttfautohint-1.8.1/gnulib/install-sh0000755000175000001440000003471713222247025017232 0ustar00wlusers00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2017-09-23.17; # 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. 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 dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_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: "UTC0" # time-stamp-end: "; # UTC" # End: ttfautohint-1.8.1/gnulib/ltmain.sh0000644000175000001440000117077113222450616017052 0ustar00wlusers00000000000000#! /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 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 (GNU libtool) 2.4.6 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 # -stdlib=* select c++ std lib with clang -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=*) 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% $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" elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test 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 ;; 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: ttfautohint-1.8.1/gnulib/missing0000755000175000001440000001533013222450647016621 0ustar00wlusers00000000000000#! /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: ttfautohint-1.8.1/gnulib/src/0000755000175000001440000000000013222454026016002 5ustar00wlusers00000000000000ttfautohint-1.8.1/gnulib/src/glthread/0000755000175000001440000000000013222454026017574 5ustar00wlusers00000000000000ttfautohint-1.8.1/gnulib/src/glthread/lock.h0000644000175000001440000011346013222450623020701 0ustar00wlusers00000000000000/* Locking in multithreaded situations. Copyright (C) 2005-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ /* Written by Bruno Haible , 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, gthr-win32.h. */ /* This file contains locking primitives for use with a given thread library. It does not contain primitives for creating threads or for other synchronization primitives. Normal (non-recursive) locks: Type: gl_lock_t Declaration: gl_lock_define(extern, name) Initializer: gl_lock_define_initialized(, name) Initialization: gl_lock_init (name); Taking the lock: gl_lock_lock (name); Releasing the lock: gl_lock_unlock (name); De-initialization: gl_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_lock_init (&name); Taking the lock: err = glthread_lock_lock (&name); Releasing the lock: err = glthread_lock_unlock (&name); De-initialization: err = glthread_lock_destroy (&name); Read-Write (non-recursive) locks: Type: gl_rwlock_t Declaration: gl_rwlock_define(extern, name) Initializer: gl_rwlock_define_initialized(, name) Initialization: gl_rwlock_init (name); Taking the lock: gl_rwlock_rdlock (name); gl_rwlock_wrlock (name); Releasing the lock: gl_rwlock_unlock (name); De-initialization: gl_rwlock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_rwlock_init (&name); Taking the lock: err = glthread_rwlock_rdlock (&name); err = glthread_rwlock_wrlock (&name); Releasing the lock: err = glthread_rwlock_unlock (&name); De-initialization: err = glthread_rwlock_destroy (&name); Recursive locks: Type: gl_recursive_lock_t Declaration: gl_recursive_lock_define(extern, name) Initializer: gl_recursive_lock_define_initialized(, name) Initialization: gl_recursive_lock_init (name); Taking the lock: gl_recursive_lock_lock (name); Releasing the lock: gl_recursive_lock_unlock (name); De-initialization: gl_recursive_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_recursive_lock_init (&name); Taking the lock: err = glthread_recursive_lock_lock (&name); Releasing the lock: err = glthread_recursive_lock_unlock (&name); De-initialization: err = glthread_recursive_lock_destroy (&name); Once-only execution: Type: gl_once_t Initializer: gl_once_define(extern, name) Execution: gl_once (name, initfunction); Equivalent functions with control of error handling: Execution: err = glthread_once (&name, initfunction); */ #ifndef _LOCK_H #define _LOCK_H #include #include /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include # ifdef __cplusplus extern "C" { # endif # if PTHREAD_IN_USE_DETECTION_HARD /* The pthread_in_use() detection needs to be done at runtime. */ # define pthread_in_use() \ glthread_in_use () extern int glthread_in_use (void); # endif # if USE_POSIX_THREADS_WEAK /* Use weak references to the POSIX threads library. */ /* Weak references avoid dragging in external libraries if the other parts of the program don't use them. Here we use them, because we don't want every program that uses libintl to depend on libpthread. This assumes that libpthread would not be loaded after libintl; i.e. if libintl is loaded first, by an executable that does not depend on libpthread, and then a module is dynamically loaded that depends on libpthread, libintl will not be multithread-safe. */ /* The way to test at runtime whether libpthread is present is to test whether a function pointer's value, such as &pthread_mutex_init, is non-NULL. However, some versions of GCC have a bug through which, in PIC mode, &foo != NULL always evaluates to true if there is a direct call to foo(...) in the same function. To avoid this, we test the address of a function in libpthread that we don't use. */ # pragma weak pthread_mutex_init # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock # pragma weak pthread_mutex_destroy # pragma weak pthread_rwlock_init # pragma weak pthread_rwlock_rdlock # pragma weak pthread_rwlock_wrlock # pragma weak pthread_rwlock_unlock # pragma weak pthread_rwlock_destroy # pragma weak pthread_once # pragma weak pthread_cond_init # pragma weak pthread_cond_wait # pragma weak pthread_cond_signal # pragma weak pthread_cond_broadcast # pragma weak pthread_cond_destroy # pragma weak pthread_mutexattr_init # pragma weak pthread_mutexattr_settype # pragma weak pthread_mutexattr_destroy # pragma weak pthread_rwlockattr_init # if __GNU_LIBRARY__ > 1 # pragma weak pthread_rwlockattr_setkind_np # endif # pragma weak pthread_rwlockattr_destroy # ifndef pthread_self # pragma weak pthread_self # endif # if !PTHREAD_IN_USE_DETECTION_HARD # pragma weak pthread_cancel # define pthread_in_use() (pthread_cancel != NULL) # endif # else # if !PTHREAD_IN_USE_DETECTION_HARD # define pthread_in_use() 1 # endif # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef pthread_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ PTHREAD_MUTEX_INITIALIZER # define glthread_lock_init(LOCK) \ (pthread_in_use () ? pthread_mutex_init (LOCK, NULL) : 0) # define glthread_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) # ifdef PTHREAD_RWLOCK_INITIALIZER typedef pthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer; # if HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER # define gl_rwlock_initializer \ PTHREAD_RWLOCK_INITIALIZER # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0) # else /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ # define gl_rwlock_initializer \ PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_for_glibc (LOCK) : 0) extern int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock); # endif # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_wrlock (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_unlock (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? pthread_rwlock_destroy (LOCK) : 0) # else typedef struct { int initialized; pthread_mutex_t guard; /* protects the initialization */ pthread_rwlock_t rwlock; /* read-write lock */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { 0, PTHREAD_MUTEX_INITIALIZER } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif # else typedef struct { pthread_mutex_t lock; /* protects the remaining fields */ pthread_cond_t waiting_readers; /* waiting readers */ pthread_cond_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP typedef pthread_mutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer; # ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER # else # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP # endif # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); # else typedef struct { pthread_mutex_t recmutex; /* recursive mutex */ pthread_mutex_t guard; /* protects the initialization */ int initialized; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif # else /* Old versions of POSIX threads on Solaris did not have recursive locks. We have to implement them ourselves. */ typedef struct { pthread_mutex_t mutex; pthread_t owner; unsigned long depth; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif /* -------------------------- gl_once_t datatype -------------------------- */ typedef pthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pthread_in_use () \ ? pthread_once (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_singlethreaded (pthread_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_PTH_THREADS /* Use the GNU Pth threads library. */ # include # ifdef __cplusplus extern "C" { # endif # if USE_PTH_THREADS_WEAK /* Use weak references to the GNU Pth threads library. */ # pragma weak pth_mutex_init # pragma weak pth_mutex_acquire # pragma weak pth_mutex_release # pragma weak pth_rwlock_init # pragma weak pth_rwlock_acquire # pragma weak pth_rwlock_release # pragma weak pth_once # pragma weak pth_cancel # define pth_in_use() (pth_cancel != NULL) # else # define pth_in_use() 1 # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef pth_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ PTH_MUTEX_INIT # define glthread_lock_init(LOCK) \ (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0) # define glthread_lock_lock(LOCK) \ (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) # define glthread_lock_unlock(LOCK) \ (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0) # define glthread_lock_destroy(LOCK) \ ((void)(LOCK), 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* Pth pth_rwlock_acquire always prefers readers. No autoconf test so far. */ # if HAVE_PTH_RWLOCK_ACQUIRE_PREFER_WRITER typedef pth_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ PTH_RWLOCK_INIT # define glthread_rwlock_init(LOCK) \ (pth_in_use () && !pth_rwlock_init (LOCK) ? errno : 0) # define glthread_rwlock_rdlock(LOCK) \ (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RD, 0, NULL) ? errno : 0) # define glthread_rwlock_wrlock(LOCK) \ (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RW, 0, NULL) ? errno : 0) # define glthread_rwlock_unlock(LOCK) \ (pth_in_use () && !pth_rwlock_release (LOCK) ? errno : 0) # define glthread_rwlock_destroy(LOCK) \ ((void)(LOCK), 0) # else typedef struct { int initialized; pth_mutex_t lock; /* protects the remaining fields */ pth_cond_t waiting_readers; /* waiting readers */ pth_cond_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { 0 } # define glthread_rwlock_init(LOCK) \ (pth_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pth_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pth_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pth_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pth_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* In Pth, mutexes are recursive by default. */ typedef pth_mutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ PTH_MUTEX_INIT # define glthread_recursive_lock_init(LOCK) \ (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0) # define glthread_recursive_lock_lock(LOCK) \ (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0) # define glthread_recursive_lock_destroy(LOCK) \ ((void)(LOCK), 0) /* -------------------------- gl_once_t datatype -------------------------- */ typedef pth_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pth_once_t NAME = PTH_ONCE_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pth_in_use () \ ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)); extern int glthread_once_singlethreaded (pth_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ # include # include # ifdef __cplusplus extern "C" { # endif # if USE_SOLARIS_THREADS_WEAK /* Use weak references to the old Solaris threads library. */ # pragma weak mutex_init # pragma weak mutex_lock # pragma weak mutex_unlock # pragma weak mutex_destroy # pragma weak rwlock_init # pragma weak rw_rdlock # pragma weak rw_wrlock # pragma weak rw_unlock # pragma weak rwlock_destroy # pragma weak thr_self # pragma weak thr_suspend # define thread_in_use() (thr_suspend != NULL) # else # define thread_in_use() 1 # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ DEFAULTMUTEX # define glthread_lock_init(LOCK) \ (thread_in_use () ? mutex_init (LOCK, USYNC_THREAD, NULL) : 0) # define glthread_lock_lock(LOCK) \ (thread_in_use () ? mutex_lock (LOCK) : 0) # define glthread_lock_unlock(LOCK) \ (thread_in_use () ? mutex_unlock (LOCK) : 0) # define glthread_lock_destroy(LOCK) \ (thread_in_use () ? mutex_destroy (LOCK) : 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ DEFAULTRWLOCK # define glthread_rwlock_init(LOCK) \ (thread_in_use () ? rwlock_init (LOCK, USYNC_THREAD, NULL) : 0) # define glthread_rwlock_rdlock(LOCK) \ (thread_in_use () ? rw_rdlock (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (thread_in_use () ? rw_wrlock (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (thread_in_use () ? rw_unlock (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (thread_in_use () ? rwlock_destroy (LOCK) : 0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* Old Solaris threads did not have recursive locks. We have to implement them ourselves. */ typedef struct { mutex_t mutex; thread_t owner; unsigned long depth; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { DEFAULTMUTEX, (thread_t) 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (thread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (thread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (thread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (thread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); /* -------------------------- gl_once_t datatype -------------------------- */ typedef struct { volatile int inited; mutex_t mutex; } gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = { 0, DEFAULTMUTEX }; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (thread_in_use () \ ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)); extern int glthread_once_singlethreaded (gl_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include # ifdef __cplusplus extern "C" { # endif /* We can use CRITICAL_SECTION directly, rather than the native Windows Event, Mutex, Semaphore types, because - we need only to synchronize inside a single process (address space), not inter-process locking, - we don't need to support trylock operations. (TryEnterCriticalSection does not work on Windows 95/98/ME. Packages that need trylock usually define their own mutex type.) */ /* There is no way to statically initialize a CRITICAL_SECTION. It needs to be done lazily, once only. For this we need spinlocks. */ typedef struct { volatile int done; volatile long started; } gl_spinlock_t; /* -------------------------- gl_lock_t datatype -------------------------- */ typedef struct { gl_spinlock_t guard; /* protects the initialization */ CRITICAL_SECTION lock; } gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME = gl_lock_initializer; # define gl_lock_initializer \ { { 0, -1 } } # define glthread_lock_init(LOCK) \ (glthread_lock_init_func (LOCK), 0) # define glthread_lock_lock(LOCK) \ glthread_lock_lock_func (LOCK) # define glthread_lock_unlock(LOCK) \ glthread_lock_unlock_func (LOCK) # define glthread_lock_destroy(LOCK) \ glthread_lock_destroy_func (LOCK) extern void glthread_lock_init_func (gl_lock_t *lock); extern int glthread_lock_lock_func (gl_lock_t *lock); extern int glthread_lock_unlock_func (gl_lock_t *lock); extern int glthread_lock_destroy_func (gl_lock_t *lock); /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* It is impossible to implement read-write locks using plain locks, without introducing an extra thread dedicated to managing read-write locks. Therefore here we need to use the low-level Event type. */ typedef struct { HANDLE *array; /* array of waiting threads, each represented by an event */ unsigned int count; /* number of waiting threads */ unsigned int alloc; /* length of allocated array */ unsigned int offset; /* index of first waiting thread in array */ } gl_carray_waitqueue_t; typedef struct { gl_spinlock_t guard; /* protects the initialization */ CRITICAL_SECTION lock; /* protects the remaining fields */ gl_carray_waitqueue_t waiting_readers; /* waiting readers */ gl_carray_waitqueue_t waiting_writers; /* waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { { 0, -1 } } # define glthread_rwlock_init(LOCK) \ (glthread_rwlock_init_func (LOCK), 0) # define glthread_rwlock_rdlock(LOCK) \ glthread_rwlock_rdlock_func (LOCK) # define glthread_rwlock_wrlock(LOCK) \ glthread_rwlock_wrlock_func (LOCK) # define glthread_rwlock_unlock(LOCK) \ glthread_rwlock_unlock_func (LOCK) # define glthread_rwlock_destroy(LOCK) \ glthread_rwlock_destroy_func (LOCK) extern void glthread_rwlock_init_func (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_func (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_func (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_func (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_func (gl_rwlock_t *lock); /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* The native Windows documentation says that CRITICAL_SECTION already implements a recursive lock. But we need not rely on it: It's easy to implement a recursive lock without this assumption. */ typedef struct { gl_spinlock_t guard; /* protects the initialization */ DWORD owner; unsigned long depth; CRITICAL_SECTION lock; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { { 0, -1 }, 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (glthread_recursive_lock_init_func (LOCK), 0) # define glthread_recursive_lock_lock(LOCK) \ glthread_recursive_lock_lock_func (LOCK) # define glthread_recursive_lock_unlock(LOCK) \ glthread_recursive_lock_unlock_func (LOCK) # define glthread_recursive_lock_destroy(LOCK) \ glthread_recursive_lock_destroy_func (LOCK) extern void glthread_recursive_lock_init_func (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock); /* -------------------------- gl_once_t datatype -------------------------- */ typedef struct { volatile int inited; volatile long started; CRITICAL_SECTION lock; } gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = { -1, -1 }; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (glthread_once_func (ONCE_CONTROL, INITFUNCTION), 0) extern void glthread_once_func (gl_once_t *once_control, void (*initfunction) (void)); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ /* -------------------------- gl_lock_t datatype -------------------------- */ typedef int gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) # define gl_lock_define_initialized(STORAGECLASS, NAME) # define glthread_lock_init(NAME) 0 # define glthread_lock_lock(NAME) 0 # define glthread_lock_unlock(NAME) 0 # define glthread_lock_destroy(NAME) 0 /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef int gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) # define gl_rwlock_define_initialized(STORAGECLASS, NAME) # define glthread_rwlock_init(NAME) 0 # define glthread_rwlock_rdlock(NAME) 0 # define glthread_rwlock_wrlock(NAME) 0 # define glthread_rwlock_unlock(NAME) 0 # define glthread_rwlock_destroy(NAME) 0 /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef int gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) # define glthread_recursive_lock_init(NAME) 0 # define glthread_recursive_lock_lock(NAME) 0 # define glthread_recursive_lock_unlock(NAME) 0 # define glthread_recursive_lock_destroy(NAME) 0 /* -------------------------- gl_once_t datatype -------------------------- */ typedef int gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = 0; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (*(ONCE_CONTROL) == 0 ? (*(ONCE_CONTROL) = ~ 0, INITFUNCTION (), 0) : 0) #endif /* ========================================================================= */ /* Macros with built-in error handling. */ /* -------------------------- gl_lock_t datatype -------------------------- */ #define gl_lock_init(NAME) \ do \ { \ if (glthread_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_lock(NAME) \ do \ { \ if (glthread_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_unlock(NAME) \ do \ { \ if (glthread_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_destroy(NAME) \ do \ { \ if (glthread_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ #define gl_rwlock_init(NAME) \ do \ { \ if (glthread_rwlock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_rdlock(NAME) \ do \ { \ if (glthread_rwlock_rdlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_wrlock(NAME) \ do \ { \ if (glthread_rwlock_wrlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_unlock(NAME) \ do \ { \ if (glthread_rwlock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_destroy(NAME) \ do \ { \ if (glthread_rwlock_destroy (&NAME)) \ abort (); \ } \ while (0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ #define gl_recursive_lock_init(NAME) \ do \ { \ if (glthread_recursive_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_lock(NAME) \ do \ { \ if (glthread_recursive_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_unlock(NAME) \ do \ { \ if (glthread_recursive_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_destroy(NAME) \ do \ { \ if (glthread_recursive_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* -------------------------- gl_once_t datatype -------------------------- */ #define gl_once(NAME, INITFUNCTION) \ do \ { \ if (glthread_once (&NAME, INITFUNCTION)) \ abort (); \ } \ while (0) /* ========================================================================= */ #endif /* _LOCK_H */ ttfautohint-1.8.1/gnulib/src/glthread/lock.c0000644000175000001440000007566013222450623020705 0ustar00wlusers00000000000000/* Locking in multithreaded situations. Copyright (C) 2005-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ /* Written by Bruno Haible , 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, gthr-win32.h. */ #include #include "glthread/lock.h" /* ========================================================================= */ #if USE_POSIX_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) # ifdef PTHREAD_RWLOCK_INITIALIZER # if !HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock) { pthread_rwlockattr_t attributes; int err; err = pthread_rwlockattr_init (&attributes); if (err != 0) return err; /* Note: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP is the only value that causes the writer to be preferred. PTHREAD_RWLOCK_PREFER_WRITER_NP does not do this; see http://man7.org/linux/man-pages/man3/pthread_rwlockattr_setkind_np.3.html */ err = pthread_rwlockattr_setkind_np (&attributes, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP); if (err == 0) err = pthread_rwlock_init(lock, &attributes); /* pthread_rwlockattr_destroy always returns 0. It cannot influence the return value. */ pthread_rwlockattr_destroy (&attributes); return err; } # endif # else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_rwlock_init (&lock->rwlock, NULL); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_rdlock (&lock->rwlock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_wrlock (&lock->rwlock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_rwlock_unlock (&lock->rwlock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_rwlock_destroy (&lock->rwlock); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_init (&lock->lock, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_readers, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_writers, NULL); if (err != 0) return err; lock->waiting_writers_count = 0; lock->runcount = 0; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ err = pthread_cond_wait (&lock->waiting_readers, &lock->lock); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } lock->runcount++; return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; err = pthread_cond_wait (&lock->waiting_writers, &lock->lock); if (err != 0) { lock->waiting_writers_count--; pthread_mutex_unlock (&lock->lock); return err; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ err = pthread_cond_signal (&lock->waiting_writers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } else { /* Wake up all waiting readers. */ err = pthread_cond_broadcast (&lock->waiting_readers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } } return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_destroy (&lock->lock); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_readers); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_writers); if (err != 0) return err; return 0; } # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (lock, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; return 0; } # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (&lock->recmutex, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_recursive_lock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_mutex_lock (&lock->recmutex); } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_mutex_unlock (&lock->recmutex); } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_mutex_destroy (&lock->recmutex); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { int err; err = pthread_mutex_init (&lock->mutex, NULL); if (err != 0) return err; lock->owner = (pthread_t) 0; lock->depth = 0; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { pthread_t self = pthread_self (); if (lock->owner != self) { int err; err = pthread_mutex_lock (&lock->mutex); if (err != 0) return err; lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } return 0; } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != pthread_self ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = (pthread_t) 0; return pthread_mutex_unlock (&lock->mutex); } else return 0; } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != (pthread_t) 0) return EBUSY; return pthread_mutex_destroy (&lock->mutex); } # endif /* -------------------------- gl_once_t datatype -------------------------- */ static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT; int glthread_once_singlethreaded (pthread_once_t *once_control) { /* We don't know whether pthread_once_t is an integer type, a floating-point type, a pointer type, or a structure type. */ char *firstbyte = (char *)once_control; if (*firstbyte == *(const char *)&fresh_once) { /* First time use of once_control. Invert the first byte. */ *firstbyte = ~ *(const char *)&fresh_once; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_PTH_THREADS /* Use the GNU Pth threads library. */ /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if !HAVE_PTH_RWLOCK_ACQUIRE_PREFER_WRITER int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { if (!pth_mutex_init (&lock->lock)) return errno; if (!pth_cond_init (&lock->waiting_readers)) return errno; if (!pth_cond_init (&lock->waiting_writers)) return errno; lock->waiting_writers_count = 0; lock->runcount = 0; lock->initialized = 1; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) glthread_rwlock_init_multithreaded (lock); if (!pth_mutex_acquire (&lock->lock, 0, NULL)) return errno; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ if (!pth_cond_await (&lock->waiting_readers, &lock->lock, NULL)) { int err = errno; pth_mutex_release (&lock->lock); return err; } } lock->runcount++; return (!pth_mutex_release (&lock->lock) ? errno : 0); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) glthread_rwlock_init_multithreaded (lock); if (!pth_mutex_acquire (&lock->lock, 0, NULL)) return errno; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; if (!pth_cond_await (&lock->waiting_writers, &lock->lock, NULL)) { int err = errno; lock->waiting_writers_count--; pth_mutex_release (&lock->lock); return err; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ return (!pth_mutex_release (&lock->lock) ? errno : 0); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { int err; if (!lock->initialized) return EINVAL; if (!pth_mutex_acquire (&lock->lock, 0, NULL)) return errno; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { pth_mutex_release (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { pth_mutex_release (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ if (!pth_cond_notify (&lock->waiting_writers, FALSE)) { int err = errno; pth_mutex_release (&lock->lock); return err; } } else { /* Wake up all waiting readers. */ if (!pth_cond_notify (&lock->waiting_readers, TRUE)) { int err = errno; pth_mutex_release (&lock->lock); return err; } } } return (!pth_mutex_release (&lock->lock) ? errno : 0); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { lock->initialized = 0; return 0; } # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* -------------------------- gl_once_t datatype -------------------------- */ static void glthread_once_call (void *arg) { void (**gl_once_temp_addr) (void) = (void (**) (void)) arg; void (*initfunction) (void) = *gl_once_temp_addr; initfunction (); } int glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)) { void (*temp) (void) = initfunction; return (!pth_once (once_control, glthread_once_call, &temp) ? errno : 0); } int glthread_once_singlethreaded (pth_once_t *once_control) { /* We know that pth_once_t is an integer type. */ if (*once_control == PTH_ONCE_INIT) { /* First time use of once_control. Invert the marker. */ *once_control = ~ PTH_ONCE_INIT; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* --------------------- gl_recursive_lock_t datatype --------------------- */ int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { int err; err = mutex_init (&lock->mutex, USYNC_THREAD, NULL); if (err != 0) return err; lock->owner = (thread_t) 0; lock->depth = 0; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { thread_t self = thr_self (); if (lock->owner != self) { int err; err = mutex_lock (&lock->mutex); if (err != 0) return err; lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } return 0; } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != thr_self ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = (thread_t) 0; return mutex_unlock (&lock->mutex); } else return 0; } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != (thread_t) 0) return EBUSY; return mutex_destroy (&lock->mutex); } /* -------------------------- gl_once_t datatype -------------------------- */ int glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)) { if (!once_control->inited) { int err; /* Use the mutex to guarantee that if another thread is already calling the initfunction, this thread waits until it's finished. */ err = mutex_lock (&once_control->mutex); if (err != 0) return err; if (!once_control->inited) { once_control->inited = 1; initfunction (); } return mutex_unlock (&once_control->mutex); } else return 0; } int glthread_once_singlethreaded (gl_once_t *once_control) { /* We know that gl_once_t contains an integer type. */ if (!once_control->inited) { /* First time use of once_control. Invert the marker. */ once_control->inited = ~ 0; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ void glthread_lock_init_func (gl_lock_t *lock) { InitializeCriticalSection (&lock->lock); lock->guard.done = 1; } int glthread_lock_lock_func (gl_lock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_lock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } EnterCriticalSection (&lock->lock); return 0; } int glthread_lock_unlock_func (gl_lock_t *lock) { if (!lock->guard.done) return EINVAL; LeaveCriticalSection (&lock->lock); return 0; } int glthread_lock_destroy_func (gl_lock_t *lock) { if (!lock->guard.done) return EINVAL; DeleteCriticalSection (&lock->lock); lock->guard.done = 0; return 0; } /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* In this file, the waitqueues are implemented as circular arrays. */ #define gl_waitqueue_t gl_carray_waitqueue_t static void gl_waitqueue_init (gl_waitqueue_t *wq) { wq->array = NULL; wq->count = 0; wq->alloc = 0; wq->offset = 0; } /* Enqueues the current thread, represented by an event, in a wait queue. Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */ static HANDLE gl_waitqueue_add (gl_waitqueue_t *wq) { HANDLE event; unsigned int index; if (wq->count == wq->alloc) { unsigned int new_alloc = 2 * wq->alloc + 1; HANDLE *new_array = (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE)); if (new_array == NULL) /* No more memory. */ return INVALID_HANDLE_VALUE; /* Now is a good opportunity to rotate the array so that its contents starts at offset 0. */ if (wq->offset > 0) { unsigned int old_count = wq->count; unsigned int old_alloc = wq->alloc; unsigned int old_offset = wq->offset; unsigned int i; if (old_offset + old_count > old_alloc) { unsigned int limit = old_offset + old_count - old_alloc; for (i = 0; i < limit; i++) new_array[old_alloc + i] = new_array[i]; } for (i = 0; i < old_count; i++) new_array[i] = new_array[old_offset + i]; wq->offset = 0; } wq->array = new_array; wq->alloc = new_alloc; } /* Whether the created event is a manual-reset one or an auto-reset one, does not matter, since we will wait on it only once. */ event = CreateEvent (NULL, TRUE, FALSE, NULL); if (event == INVALID_HANDLE_VALUE) /* No way to allocate an event. */ return INVALID_HANDLE_VALUE; index = wq->offset + wq->count; if (index >= wq->alloc) index -= wq->alloc; wq->array[index] = event; wq->count++; return event; } /* Notifies the first thread from a wait queue and dequeues it. */ static void gl_waitqueue_notify_first (gl_waitqueue_t *wq) { SetEvent (wq->array[wq->offset + 0]); wq->offset++; wq->count--; if (wq->count == 0 || wq->offset == wq->alloc) wq->offset = 0; } /* Notifies all threads from a wait queue and dequeues them all. */ static void gl_waitqueue_notify_all (gl_waitqueue_t *wq) { unsigned int i; for (i = 0; i < wq->count; i++) { unsigned int index = wq->offset + i; if (index >= wq->alloc) index -= wq->alloc; SetEvent (wq->array[index]); } wq->count = 0; wq->offset = 0; } void glthread_rwlock_init_func (gl_rwlock_t *lock) { InitializeCriticalSection (&lock->lock); gl_waitqueue_init (&lock->waiting_readers); gl_waitqueue_init (&lock->waiting_writers); lock->runcount = 0; lock->guard.done = 1; } int glthread_rwlock_rdlock_func (gl_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_rwlock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ HANDLE event = gl_waitqueue_add (&lock->waiting_readers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_readers, incremented lock->runcount. */ if (!(lock->runcount > 0)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount + 1 > 0)); } } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glthread_rwlock_wrlock_func (gl_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_rwlock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ HANDLE event = gl_waitqueue_add (&lock->waiting_writers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_writers, set lock->runcount = -1. */ if (!(lock->runcount == -1)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount == 0)); } } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glthread_rwlock_unlock_func (gl_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; EnterCriticalSection (&lock->lock); if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) abort (); lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { LeaveCriticalSection (&lock->lock); return EPERM; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers.count > 0) { /* Wake up one of the waiting writers. */ lock->runcount--; gl_waitqueue_notify_first (&lock->waiting_writers); } else { /* Wake up all waiting readers. */ lock->runcount += lock->waiting_readers.count; gl_waitqueue_notify_all (&lock->waiting_readers); } } LeaveCriticalSection (&lock->lock); return 0; } int glthread_rwlock_destroy_func (gl_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; if (lock->runcount != 0) return EBUSY; DeleteCriticalSection (&lock->lock); if (lock->waiting_readers.array != NULL) free (lock->waiting_readers.array); if (lock->waiting_writers.array != NULL) free (lock->waiting_writers.array); lock->guard.done = 0; return 0; } /* --------------------- gl_recursive_lock_t datatype --------------------- */ void glthread_recursive_lock_init_func (gl_recursive_lock_t *lock) { lock->owner = 0; lock->depth = 0; InitializeCriticalSection (&lock->lock); lock->guard.done = 1; } int glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_recursive_lock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } { DWORD self = GetCurrentThreadId (); if (lock->owner != self) { EnterCriticalSection (&lock->lock); lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } } return 0; } int glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock) { if (lock->owner != GetCurrentThreadId ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = 0; LeaveCriticalSection (&lock->lock); } return 0; } int glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock) { if (lock->owner != 0) return EBUSY; DeleteCriticalSection (&lock->lock); lock->guard.done = 0; return 0; } /* -------------------------- gl_once_t datatype -------------------------- */ void glthread_once_func (gl_once_t *once_control, void (*initfunction) (void)) { if (once_control->inited <= 0) { if (InterlockedIncrement (&once_control->started) == 0) { /* This thread is the first one to come to this once_control. */ InitializeCriticalSection (&once_control->lock); EnterCriticalSection (&once_control->lock); once_control->inited = 0; initfunction (); once_control->inited = 1; LeaveCriticalSection (&once_control->lock); } else { /* Undo last operation. */ InterlockedDecrement (&once_control->started); /* Some other thread has already started the initialization. Yield the CPU while waiting for the other thread to finish initializing and taking the lock. */ while (once_control->inited < 0) Sleep (0); if (once_control->inited <= 0) { /* Take the lock. This blocks until the other thread has finished calling the initfunction. */ EnterCriticalSection (&once_control->lock); LeaveCriticalSection (&once_control->lock); if (!(once_control->inited > 0)) abort (); } } } } #endif /* ========================================================================= */ ttfautohint-1.8.1/gnulib/src/glthread/threadlib.c0000644000175000001440000000353713222450623021705 0ustar00wlusers00000000000000/* Multithreading primitives. Copyright (C) 2005-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ /* Written by Bruno Haible , 2005. */ #include /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include # include # if PTHREAD_IN_USE_DETECTION_HARD /* The function to be executed by a dummy thread. */ static void * dummy_thread_func (void *arg) { return arg; } int glthread_in_use (void) { static int tested; static int result; /* 1: linked with -lpthread, 0: only with libc */ if (!tested) { pthread_t thread; if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0) /* Thread creation failed. */ result = 0; else { /* Thread creation works. */ void *retval; if (pthread_join (thread, &retval) != 0) abort (); result = 1; } tested = 1; } return result; } # endif #endif /* ========================================================================= */ /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; ttfautohint-1.8.1/gnulib/src/Makefile.am0000644000175000001440000015240313222450626020045 0ustar00wlusers00000000000000## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # 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 file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # 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. # # Generated by gnulib-tool. # Reproduce by: gnulib-tool --import --local-dir=gl --lib=libgnu --source-base=gnulib/src --m4-base=gnulib/m4 --doc-base=doc --tests-base=tests --aux-dir=gnulib --no-conditional-dependencies --libtool --macro-prefix=gl dirname fcntl-h getopt-gnu git-version-gen isatty memmem-simple progname std-gnu11 stdarg stdbool stdint strerror_r-posix strndup strtok_r strtoull vasprintf AUTOMAKE_OPTIONS = 1.9.6 gnits subdir-objects SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = EXTRA_DIST = BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = # No GNU Make output. AM_CPPFLAGS = AM_CFLAGS = noinst_LTLIBRARIES += libgnu.la libgnu_la_SOURCES = libgnu_la_LIBADD = $(gl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = libgnu_la_LDFLAGS = $(AM_LDFLAGS) libgnu_la_LDFLAGS += -no-undefined libgnu_la_LDFLAGS += $(LTLIBINTL) libgnu_la_LDFLAGS += $(LTLIBTHREAD) ## begin gnulib module absolute-header # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) ## end gnulib module absolute-header ## begin gnulib module alloca-opt BUILT_SOURCES += $(ALLOCA_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_ALLOCA_H alloca.h: alloca.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/alloca.in.h; \ } > $@-t && \ mv -f $@-t $@ else alloca.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += alloca.h alloca.h-t EXTRA_DIST += alloca.in.h ## end gnulib module alloca-opt ## begin gnulib module dirname libgnu_la_SOURCES += dirname.c basename.c EXTRA_DIST += stripslash.c EXTRA_libgnu_la_SOURCES += stripslash.c ## end gnulib module dirname ## begin gnulib module dirname-lgpl libgnu_la_SOURCES += dirname-lgpl.c basename-lgpl.c stripslash.c EXTRA_DIST += dirname.h ## end gnulib module dirname-lgpl ## begin gnulib module dosname EXTRA_DIST += dosname.h ## end gnulib module dosname ## begin gnulib module errno BUILT_SOURCES += $(ERRNO_H) # We need the following in order to create when the system # doesn't have one that is POSIX compliant. if GL_GENERATE_ERRNO_H errno.h: errno.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ < $(srcdir)/errno.in.h; \ } > $@-t && \ mv $@-t $@ else errno.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += errno.h errno.h-t EXTRA_DIST += errno.in.h ## end gnulib module errno ## begin gnulib module error EXTRA_DIST += error.c error.h EXTRA_libgnu_la_SOURCES += error.c ## end gnulib module error ## begin gnulib module exitfail libgnu_la_SOURCES += exitfail.c EXTRA_DIST += exitfail.h ## end gnulib module exitfail ## begin gnulib module fcntl-h BUILT_SOURCES += fcntl.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/fcntl.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += fcntl.h fcntl.h-t EXTRA_DIST += fcntl.in.h ## end gnulib module fcntl-h ## begin gnulib module float BUILT_SOURCES += $(FLOAT_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_FLOAT_H float.h: float.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ < $(srcdir)/float.in.h; \ } > $@-t && \ mv $@-t $@ else float.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += float.h float.h-t EXTRA_DIST += float.c float.in.h itold.c EXTRA_libgnu_la_SOURCES += float.c itold.c ## end gnulib module float ## begin gnulib module getopt-posix BUILT_SOURCES += $(GETOPT_H) $(GETOPT_CDEFS_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. getopt.h: getopt.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ < $(srcdir)/getopt.in.h; \ } > $@-t && \ mv -f $@-t $@ getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ < $(srcdir)/getopt-cdefs.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += getopt.h getopt.h-t getopt-cdefs.h getopt-cdefs.h-t EXTRA_DIST += getopt-cdefs.in.h getopt-core.h getopt-ext.h getopt-pfx-core.h getopt-pfx-ext.h getopt.c getopt.in.h getopt1.c getopt_int.h EXTRA_libgnu_la_SOURCES += getopt.c getopt1.c ## end gnulib module getopt-posix ## begin gnulib module getprogname libgnu_la_SOURCES += getprogname.h getprogname.c ## end gnulib module getprogname ## begin gnulib module gettext-h libgnu_la_SOURCES += gettext.h ## end gnulib module gettext-h ## begin gnulib module git-version-gen EXTRA_DIST += $(top_srcdir)/gnulib/git-version-gen ## end gnulib module git-version-gen ## begin gnulib module havelib EXTRA_DIST += $(top_srcdir)/gnulib/config.rpath ## end gnulib module havelib ## begin gnulib module intprops EXTRA_DIST += intprops.h ## end gnulib module intprops ## begin gnulib module isatty EXTRA_DIST += isatty.c EXTRA_libgnu_la_SOURCES += isatty.c ## end gnulib module isatty ## begin gnulib module limits-h BUILT_SOURCES += $(LIMITS_H) # We need the following in order to create when the system # doesn't have one that is compatible with GNU. if GL_GENERATE_LIMITS_H limits.h: limits.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ < $(srcdir)/limits.in.h; \ } > $@-t && \ mv $@-t $@ else limits.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += limits.h limits.h-t EXTRA_DIST += limits.in.h ## end gnulib module limits-h ## begin gnulib module lock libgnu_la_SOURCES += glthread/lock.h glthread/lock.c ## end gnulib module lock ## begin gnulib module malloc-posix EXTRA_DIST += malloc.c EXTRA_libgnu_la_SOURCES += malloc.c ## end gnulib module malloc-posix ## begin gnulib module memchr EXTRA_DIST += memchr.c memchr.valgrind EXTRA_libgnu_la_SOURCES += memchr.c ## end gnulib module memchr ## begin gnulib module memmem-simple EXTRA_DIST += memmem.c str-two-way.h EXTRA_libgnu_la_SOURCES += memmem.c ## end gnulib module memmem-simple ## begin gnulib module msvc-inval EXTRA_DIST += msvc-inval.c msvc-inval.h EXTRA_libgnu_la_SOURCES += msvc-inval.c ## end gnulib module msvc-inval ## begin gnulib module msvc-nothrow EXTRA_DIST += msvc-nothrow.c msvc-nothrow.h EXTRA_libgnu_la_SOURCES += msvc-nothrow.c ## end gnulib module msvc-nothrow ## begin gnulib module progname libgnu_la_SOURCES += progname.h progname.c ## end gnulib module progname ## begin gnulib module size_max libgnu_la_SOURCES += size_max.h ## end gnulib module size_max ## begin gnulib module snippet/_Noreturn # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H=$(srcdir)/_Noreturn.h EXTRA_DIST += _Noreturn.h ## end gnulib module snippet/_Noreturn ## begin gnulib module snippet/arg-nonnull # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H=$(srcdir)/arg-nonnull.h EXTRA_DIST += arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/c++defs # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H=$(srcdir)/c++defs.h EXTRA_DIST += c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/warn-on-use # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H=$(srcdir)/warn-on-use.h EXTRA_DIST += warn-on-use.h ## end gnulib module snippet/warn-on-use ## begin gnulib module stdarg BUILT_SOURCES += $(STDARG_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDARG_H stdarg.h: stdarg.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ < $(srcdir)/stdarg.in.h; \ } > $@-t && \ mv $@-t $@ else stdarg.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdarg.h stdarg.h-t EXTRA_DIST += stdarg.in.h ## end gnulib module stdarg ## begin gnulib module stdbool BUILT_SOURCES += $(STDBOOL_H) # We need the following in order to create when the system # doesn't have one that works. if GL_GENERATE_STDBOOL_H stdbool.h: stdbool.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ } > $@-t && \ mv $@-t $@ else stdbool.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdbool.h stdbool.h-t EXTRA_DIST += stdbool.in.h ## end gnulib module stdbool ## begin gnulib module stddef BUILT_SOURCES += $(STDDEF_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDDEF_H stddef.h: stddef.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ < $(srcdir)/stddef.in.h; \ } > $@-t && \ mv $@-t $@ else stddef.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stddef.h stddef.h-t EXTRA_DIST += stddef.in.h ## end gnulib module stddef ## begin gnulib module stdint BUILT_SOURCES += $(STDINT_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDINT_H stdint.h: stdint.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ < $(srcdir)/stdint.in.h; \ } > $@-t && \ mv $@-t $@ else stdint.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdint.h stdint.h-t EXTRA_DIST += stdint.in.h ## end gnulib module stdint ## begin gnulib module stdio BUILT_SOURCES += stdio.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ < $(srcdir)/stdio.in.h | \ sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += stdio.h stdio.h-t EXTRA_DIST += stdio.in.h ## end gnulib module stdio ## begin gnulib module stdlib BUILT_SOURCES += stdlib.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \ -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ < $(srcdir)/stdlib.in.h | \ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += stdlib.h stdlib.h-t EXTRA_DIST += stdlib.in.h ## end gnulib module stdlib ## begin gnulib module strerror EXTRA_DIST += strerror.c EXTRA_libgnu_la_SOURCES += strerror.c ## end gnulib module strerror ## begin gnulib module strerror-override EXTRA_DIST += strerror-override.c strerror-override.h EXTRA_libgnu_la_SOURCES += strerror-override.c ## end gnulib module strerror-override ## begin gnulib module strerror_r-posix EXTRA_DIST += strerror_r.c EXTRA_libgnu_la_SOURCES += strerror_r.c ## end gnulib module strerror_r-posix ## begin gnulib module string BUILT_SOURCES += string.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ < $(srcdir)/string.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += string.h string.h-t EXTRA_DIST += string.in.h ## end gnulib module string ## begin gnulib module strndup EXTRA_DIST += strndup.c EXTRA_libgnu_la_SOURCES += strndup.c ## end gnulib module strndup ## begin gnulib module strnlen EXTRA_DIST += strnlen.c EXTRA_libgnu_la_SOURCES += strnlen.c ## end gnulib module strnlen ## begin gnulib module strtok_r EXTRA_DIST += strtok_r.c EXTRA_libgnu_la_SOURCES += strtok_r.c ## end gnulib module strtok_r ## begin gnulib module strtoull EXTRA_DIST += strtol.c strtoul.c strtoull.c EXTRA_libgnu_la_SOURCES += strtol.c strtoul.c strtoull.c ## end gnulib module strtoull ## begin gnulib module sys_types BUILT_SOURCES += sys/types.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ < $(srcdir)/sys_types.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/types.h sys/types.h-t EXTRA_DIST += sys_types.in.h ## end gnulib module sys_types ## begin gnulib module threadlib libgnu_la_SOURCES += glthread/threadlib.c EXTRA_DIST += $(top_srcdir)/gnulib/config.rpath ## end gnulib module threadlib ## begin gnulib module unistd BUILT_SOURCES += unistd.h libgnu_la_SOURCES += unistd.c # We need the following in order to create an empty placeholder for # when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_TRUNCATE''@|$(HAVE_TRUNCATE)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += unistd.h unistd.h-t EXTRA_DIST += unistd.in.h ## end gnulib module unistd ## begin gnulib module vasnprintf EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h EXTRA_libgnu_la_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c ## end gnulib module vasnprintf ## begin gnulib module vasprintf EXTRA_DIST += asprintf.c vasprintf.c EXTRA_libgnu_la_SOURCES += asprintf.c vasprintf.c ## end gnulib module vasprintf ## begin gnulib module verify EXTRA_DIST += verify.h ## end gnulib module verify ## begin gnulib module wchar BUILT_SOURCES += wchar.h # We need the following in order to create when the system # version does not work standalone. wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \ -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \ -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \ -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \ -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \ -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \ -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \ -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \ -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \ -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \ -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \ -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \ -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \ -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \ -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \ -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \ -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \ -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \ -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \ -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \ -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \ -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \ -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \ -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \ -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \ -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \ < $(srcdir)/wchar.in.h | \ sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ | \ sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += wchar.h wchar.h-t EXTRA_DIST += wchar.in.h ## end gnulib module wchar ## begin gnulib module xalloc libgnu_la_SOURCES += xmalloc.c EXTRA_DIST += xalloc.h ## end gnulib module xalloc ## begin gnulib module xalloc-die libgnu_la_SOURCES += xalloc-die.c ## end gnulib module xalloc-die ## begin gnulib module xalloc-oversized EXTRA_DIST += xalloc-oversized.h ## end gnulib module xalloc-oversized ## begin gnulib module xsize libgnu_la_SOURCES += xsize.h xsize.c ## end gnulib module xsize ## begin gnulib module xstrndup libgnu_la_SOURCES += xstrndup.h xstrndup.c ## end gnulib module xstrndup mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : ttfautohint-1.8.1/gnulib/src/Makefile.in0000644000175000001440000031231513222450650020053 0ustar00wlusers00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # 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 file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # 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. # # Generated by gnulib-tool. # Reproduce by: gnulib-tool --import --local-dir=gl --lib=libgnu --source-base=gnulib/src --m4-base=gnulib/m4 --doc-base=doc --tests-base=tests --aux-dir=gnulib --no-conditional-dependencies --libtool --macro-prefix=gl dirname fcntl-h getopt-gnu git-version-gen isatty memmem-simple progname std-gnu11 stdarg stdbool stdint strerror_r-posix strndup strtok_r strtoull vasprintf 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 = gnulib/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autotroll.m4 \ $(top_srcdir)/m4/ltlize_lang.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/gnulib/m4/00gnulib.m4 \ $(top_srcdir)/gnulib/m4/absolute-header.m4 \ $(top_srcdir)/gnulib/m4/alloca.m4 \ $(top_srcdir)/gnulib/m4/asm-underscore.m4 \ $(top_srcdir)/gnulib/m4/builtin-expect.m4 \ $(top_srcdir)/gnulib/m4/dirname.m4 \ $(top_srcdir)/gnulib/m4/double-slash-root.m4 \ $(top_srcdir)/gnulib/m4/errno_h.m4 \ $(top_srcdir)/gnulib/m4/error.m4 \ $(top_srcdir)/gnulib/m4/exponentd.m4 \ $(top_srcdir)/gnulib/m4/extensions.m4 \ $(top_srcdir)/gnulib/m4/extern-inline.m4 \ $(top_srcdir)/gnulib/m4/fcntl-o.m4 \ $(top_srcdir)/gnulib/m4/fcntl_h.m4 \ $(top_srcdir)/gnulib/m4/float_h.m4 \ $(top_srcdir)/gnulib/m4/getopt.m4 \ $(top_srcdir)/gnulib/m4/getprogname.m4 \ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \ $(top_srcdir)/gnulib/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/gnulib/m4/include_next.m4 \ $(top_srcdir)/gnulib/m4/intmax_t.m4 \ $(top_srcdir)/gnulib/m4/inttypes_h.m4 \ $(top_srcdir)/gnulib/m4/isatty.m4 \ $(top_srcdir)/gnulib/m4/lib-ld.m4 \ $(top_srcdir)/gnulib/m4/lib-link.m4 \ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \ $(top_srcdir)/gnulib/m4/libtool.m4 \ $(top_srcdir)/gnulib/m4/limits-h.m4 \ $(top_srcdir)/gnulib/m4/lock.m4 \ $(top_srcdir)/gnulib/m4/longlong.m4 \ $(top_srcdir)/gnulib/m4/ltoptions.m4 \ $(top_srcdir)/gnulib/m4/ltsugar.m4 \ $(top_srcdir)/gnulib/m4/ltversion.m4 \ $(top_srcdir)/gnulib/m4/lt~obsolete.m4 \ $(top_srcdir)/gnulib/m4/malloc.m4 \ $(top_srcdir)/gnulib/m4/memchr.m4 \ $(top_srcdir)/gnulib/m4/memmem.m4 \ $(top_srcdir)/gnulib/m4/mmap-anon.m4 \ $(top_srcdir)/gnulib/m4/msvc-inval.m4 \ $(top_srcdir)/gnulib/m4/msvc-nothrow.m4 \ $(top_srcdir)/gnulib/m4/multiarch.m4 \ $(top_srcdir)/gnulib/m4/nocrash.m4 \ $(top_srcdir)/gnulib/m4/off_t.m4 \ $(top_srcdir)/gnulib/m4/onceonly.m4 \ $(top_srcdir)/gnulib/m4/printf.m4 \ $(top_srcdir)/gnulib/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/gnulib/m4/size_max.m4 \ $(top_srcdir)/gnulib/m4/ssize_t.m4 \ $(top_srcdir)/gnulib/m4/std-gnu11.m4 \ $(top_srcdir)/gnulib/m4/stdarg.m4 \ $(top_srcdir)/gnulib/m4/stdbool.m4 \ $(top_srcdir)/gnulib/m4/stddef_h.m4 \ $(top_srcdir)/gnulib/m4/stdint.m4 \ $(top_srcdir)/gnulib/m4/stdint_h.m4 \ $(top_srcdir)/gnulib/m4/stdio_h.m4 \ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \ $(top_srcdir)/gnulib/m4/strerror.m4 \ $(top_srcdir)/gnulib/m4/strerror_r.m4 \ $(top_srcdir)/gnulib/m4/string_h.m4 \ $(top_srcdir)/gnulib/m4/strndup.m4 \ $(top_srcdir)/gnulib/m4/strnlen.m4 \ $(top_srcdir)/gnulib/m4/strtok_r.m4 \ $(top_srcdir)/gnulib/m4/strtoull.m4 \ $(top_srcdir)/gnulib/m4/sys_socket_h.m4 \ $(top_srcdir)/gnulib/m4/sys_types_h.m4 \ $(top_srcdir)/gnulib/m4/threadlib.m4 \ $(top_srcdir)/gnulib/m4/unistd_h.m4 \ $(top_srcdir)/gnulib/m4/vasnprintf.m4 \ $(top_srcdir)/gnulib/m4/vasprintf.m4 \ $(top_srcdir)/gnulib/m4/warn-on-use.m4 \ $(top_srcdir)/gnulib/m4/wchar_h.m4 \ $(top_srcdir)/gnulib/m4/wchar_t.m4 \ $(top_srcdir)/gnulib/m4/wint_t.m4 \ $(top_srcdir)/gnulib/m4/xalloc.m4 \ $(top_srcdir)/gnulib/m4/xsize.m4 \ $(top_srcdir)/gnulib/m4/xstrndup.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = am__dirstamp = $(am__leading_dot)dirstamp am_libgnu_la_OBJECTS = dirname.lo basename.lo dirname-lgpl.lo \ basename-lgpl.lo stripslash.lo exitfail.lo getprogname.lo \ glthread/lock.lo progname.lo glthread/threadlib.lo unistd.lo \ xmalloc.lo xalloc-die.lo xsize.lo xstrndup.lo libgnu_la_OBJECTS = $(am_libgnu_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgnu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libgnu_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/gnulib/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 = SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) DIST_SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_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 HEADERS = $(noinst_HEADERS) 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)/gnulib/depcomp 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@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLEX = @FLEX@ FLOAT_H = @FLOAT_H@ FREETYPE_CPPFLAGS = @FREETYPE_CPPFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@ HARFBUZZ_LIBS = @HARFBUZZ_LIBS@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ IMPORT = @IMPORT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KPSEWHICH = @KPSEWHICH@ LATEX = @LATEX@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MOC = @MOC@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ 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@ PANDOC = @PANDOC@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ QMAKE = @QMAKE@ QT_CFLAGS = @QT_CFLAGS@ QT_CPPFLAGS = @QT_CPPFLAGS@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DEFINES = @QT_DEFINES@ QT_INCPATH = @QT_INCPATH@ QT_LDFLAGS = @QT_LDFLAGS@ QT_LFLAGS = @QT_LFLAGS@ QT_LIBS = @QT_LIBS@ QT_PATH = @QT_PATH@ QT_VERSION = @QT_VERSION@ QT_VERSION_MAJOR = @QT_VERSION_MAJOR@ RANLIB = @RANLIB@ RCC = @RCC@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UIC = @UIC@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ ft_config = @ft_config@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ttfautohint_major = @ttfautohint_major@ ttfautohint_minor = @ttfautohint_minor@ ttfautohint_revision = @ttfautohint_revision@ AUTOMAKE_OPTIONS = 1.9.6 gnits subdir-objects SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = libgnu.la EXTRA_DIST = alloca.in.h stripslash.c dirname.h dosname.h errno.in.h \ error.c error.h exitfail.h fcntl.in.h float.c float.in.h \ itold.c getopt-cdefs.in.h getopt-core.h getopt-ext.h \ getopt-pfx-core.h getopt-pfx-ext.h getopt.c getopt.in.h \ getopt1.c getopt_int.h $(top_srcdir)/gnulib/git-version-gen \ $(top_srcdir)/gnulib/config.rpath intprops.h isatty.c \ limits.in.h malloc.c memchr.c memchr.valgrind memmem.c \ str-two-way.h msvc-inval.c msvc-inval.h msvc-nothrow.c \ msvc-nothrow.h _Noreturn.h arg-nonnull.h c++defs.h \ warn-on-use.h stdarg.in.h stdbool.in.h stddef.in.h stdint.in.h \ stdio.in.h stdlib.in.h strerror.c strerror-override.c \ strerror-override.h strerror_r.c string.in.h strndup.c \ strnlen.c strtok_r.c strtol.c strtoul.c strtoull.c \ sys_types.in.h $(top_srcdir)/gnulib/config.rpath unistd.in.h \ asnprintf.c float+.h printf-args.c printf-args.h \ printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h \ asprintf.c vasprintf.c verify.h wchar.in.h xalloc.h \ xalloc-oversized.h BUILT_SOURCES = $(ALLOCA_H) $(ERRNO_H) fcntl.h $(FLOAT_H) $(GETOPT_H) \ $(GETOPT_CDEFS_H) $(LIMITS_H) $(STDARG_H) $(STDBOOL_H) \ $(STDDEF_H) $(STDINT_H) stdio.h stdlib.h string.h sys/types.h \ unistd.h wchar.h SUFFIXES = MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t errno.h \ errno.h-t fcntl.h fcntl.h-t float.h float.h-t getopt.h \ getopt.h-t getopt-cdefs.h getopt-cdefs.h-t limits.h limits.h-t \ stdarg.h stdarg.h-t stdbool.h stdbool.h-t stddef.h stddef.h-t \ stdint.h stdint.h-t stdio.h stdio.h-t stdlib.h stdlib.h-t \ string.h string.h-t sys/types.h sys/types.h-t unistd.h \ unistd.h-t wchar.h wchar.h-t MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = # No GNU Make output. AM_CPPFLAGS = AM_CFLAGS = libgnu_la_SOURCES = dirname.c basename.c dirname-lgpl.c \ basename-lgpl.c stripslash.c exitfail.c getprogname.h \ getprogname.c gettext.h glthread/lock.h glthread/lock.c \ progname.h progname.c size_max.h glthread/threadlib.c unistd.c \ xmalloc.c xalloc-die.c xsize.h xsize.c xstrndup.h xstrndup.c libgnu_la_LIBADD = $(gl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = stripslash.c error.c float.c itold.c \ getopt.c getopt1.c isatty.c malloc.c memchr.c memmem.c \ msvc-inval.c msvc-nothrow.c strerror.c strerror-override.c \ strerror_r.c strndup.c strnlen.c strtok_r.c strtol.c strtoul.c \ strtoull.c asnprintf.c printf-args.c printf-parse.c \ vasnprintf.c asprintf.c vasprintf.c libgnu_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(LTLIBINTL) \ $(LTLIBTHREAD) # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H = $(srcdir)/_Noreturn.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H = $(srcdir)/arg-nonnull.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H = $(srcdir)/c++defs.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H = $(srcdir)/warn-on-use.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits gnulib/src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits gnulib/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): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } glthread/$(am__dirstamp): @$(MKDIR_P) glthread @: > glthread/$(am__dirstamp) glthread/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) glthread/$(DEPDIR) @: > glthread/$(DEPDIR)/$(am__dirstamp) glthread/lock.lo: glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) glthread/threadlib.lo: glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) $(EXTRA_libgnu_la_DEPENDENCIES) $(AM_V_CCLD)$(libgnu_la_LINK) $(libgnu_la_OBJECTS) $(libgnu_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f glthread/*.$(OBJEXT) -rm -f glthread/*.lo distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asnprintf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asprintf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename-lgpl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname-lgpl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exitfail.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getprogname.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isatty.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itold.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memchr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memmem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-inval.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-nothrow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-args.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-parse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progname.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror-override.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror_r.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stripslash.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strndup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtok_r.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoul.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoull.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unistd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vasnprintf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vasprintf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xalloc-die.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsize.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrndup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/lock.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/threadlib.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf glthread/.libs glthread/_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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) 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) -rm -f glthread/$(DEPDIR)/$(am__dirstamp) -rm -f glthread/$(am__dirstamp) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) glthread/$(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-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) glthread/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool \ clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_ALLOCA_H_TRUE@alloca.h: alloca.in.h $(top_builddir)/config.status @GL_GENERATE_ALLOCA_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_ALLOCA_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_ALLOCA_H_TRUE@ cat $(srcdir)/alloca.in.h; \ @GL_GENERATE_ALLOCA_H_TRUE@ } > $@-t && \ @GL_GENERATE_ALLOCA_H_TRUE@ mv -f $@-t $@ @GL_GENERATE_ALLOCA_H_FALSE@alloca.h: $(top_builddir)/config.status @GL_GENERATE_ALLOCA_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that is POSIX compliant. @GL_GENERATE_ERRNO_H_TRUE@errno.h: errno.in.h $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_ERRNO_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_ERRNO_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ < $(srcdir)/errno.in.h; \ @GL_GENERATE_ERRNO_H_TRUE@ } > $@-t && \ @GL_GENERATE_ERRNO_H_TRUE@ mv $@-t $@ @GL_GENERATE_ERRNO_H_FALSE@errno.h: $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/fcntl.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_FLOAT_H_TRUE@float.h: float.in.h $(top_builddir)/config.status @GL_GENERATE_FLOAT_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_FLOAT_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_FLOAT_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ @GL_GENERATE_FLOAT_H_TRUE@ < $(srcdir)/float.in.h; \ @GL_GENERATE_FLOAT_H_TRUE@ } > $@-t && \ @GL_GENERATE_FLOAT_H_TRUE@ mv $@-t $@ @GL_GENERATE_FLOAT_H_FALSE@float.h: $(top_builddir)/config.status @GL_GENERATE_FLOAT_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. getopt.h: getopt.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ < $(srcdir)/getopt.in.h; \ } > $@-t && \ mv -f $@-t $@ getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ < $(srcdir)/getopt-cdefs.in.h; \ } > $@-t && \ mv -f $@-t $@ # We need the following in order to create when the system # doesn't have one that is compatible with GNU. @GL_GENERATE_LIMITS_H_TRUE@limits.h: limits.in.h $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_LIMITS_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_LIMITS_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ < $(srcdir)/limits.in.h; \ @GL_GENERATE_LIMITS_H_TRUE@ } > $@-t && \ @GL_GENERATE_LIMITS_H_TRUE@ mv $@-t $@ @GL_GENERATE_LIMITS_H_FALSE@limits.h: $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDARG_H_TRUE@stdarg.h: stdarg.in.h $(top_builddir)/config.status @GL_GENERATE_STDARG_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDARG_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_STDARG_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ @GL_GENERATE_STDARG_H_TRUE@ < $(srcdir)/stdarg.in.h; \ @GL_GENERATE_STDARG_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDARG_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDARG_H_FALSE@stdarg.h: $(top_builddir)/config.status @GL_GENERATE_STDARG_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works. @GL_GENERATE_STDBOOL_H_TRUE@stdbool.h: stdbool.in.h $(top_builddir)/config.status @GL_GENERATE_STDBOOL_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDBOOL_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_STDBOOL_H_TRUE@ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ @GL_GENERATE_STDBOOL_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDBOOL_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDBOOL_H_FALSE@stdbool.h: $(top_builddir)/config.status @GL_GENERATE_STDBOOL_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDDEF_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_STDDEF_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ < $(srcdir)/stddef.in.h; \ @GL_GENERATE_STDDEF_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDDEF_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status @GL_GENERATE_STDINT_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDINT_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_STDINT_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ < $(srcdir)/stdint.in.h; \ @GL_GENERATE_STDINT_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDINT_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status @GL_GENERATE_STDINT_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ < $(srcdir)/stdio.in.h | \ sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \ -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ < $(srcdir)/stdlib.in.h | \ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ < $(srcdir)/string.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ < $(srcdir)/sys_types.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create an empty placeholder for # when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_TRUNCATE''@|$(HAVE_TRUNCATE)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # version does not work standalone. wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \ -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \ -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \ -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \ -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \ -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \ -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \ -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \ -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \ -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \ -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \ -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \ -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \ -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \ -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \ -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \ -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \ -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \ -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \ -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \ -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \ -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \ -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \ -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \ -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \ -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \ < $(srcdir)/wchar.in.h | \ sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ | \ sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : # 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: ttfautohint-1.8.1/gnulib/src/dirname.c0000644000175000001440000000226413222450622017567 0ustar00wlusers00000000000000/* dirname.c -- return all but the last element in a file name Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "dirname.h" #include #include #include "xalloc.h" /* Just like mdir_name (dirname-lgpl.c), except, rather than returning NULL upon malloc failure, here, we report the "memory exhausted" condition and exit. */ char * dir_name (char const *file) { char *result = mdir_name (file); if (!result) xalloc_die (); return result; } ttfautohint-1.8.1/gnulib/src/basename.c0000644000175000001440000000334613222450622017725 0ustar00wlusers00000000000000/* basename.c -- return the last element in a file name Copyright (C) 1990, 1998-2001, 2003-2006, 2009-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "dirname.h" #include #include "xalloc.h" #include "xstrndup.h" char * base_name (char const *name) { char const *base = last_component (name); size_t length; /* If there is no last component, then name is a file system root or the empty string. */ if (! *base) return xstrndup (name, base_len (name)); /* Collapse a sequence of trailing slashes into one. */ length = base_len (base); if (ISSLASH (base[length])) length++; /* On systems with drive letters, "a/b:c" must return "./b:c" rather than "b:c" to avoid confusion with a drive letter. On systems with pure POSIX semantics, this is not an issue. */ if (FILE_SYSTEM_PREFIX_LEN (base)) { char *p = xmalloc (length + 3); p[0] = '.'; p[1] = '/'; memcpy (p + 2, base, length); p[length + 2] = '\0'; return p; } /* Finally, copy the basename. */ return xstrndup (base, length); } ttfautohint-1.8.1/gnulib/src/dirname-lgpl.c0000644000175000001440000000612113222450622020517 0ustar00wlusers00000000000000/* dirname.c -- return all but the last element in a file name Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "dirname.h" #include #include /* Return the length of the prefix of FILE that will be used by dir_name. If FILE is in the working directory, this returns zero even though 'dir_name (FILE)' will return ".". Works properly even if there are trailing slashes (by effectively ignoring them). */ size_t dir_len (char const *file) { size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file); size_t length; /* Advance prefix_length beyond important leading slashes. */ prefix_length += (prefix_length != 0 ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && ISSLASH (file[prefix_length])) : (ISSLASH (file[0]) ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT && ISSLASH (file[1]) && ! ISSLASH (file[2]) ? 2 : 1)) : 0)); /* Strip the basename and any redundant slashes before it. */ for (length = last_component (file) - file; prefix_length < length; length--) if (! ISSLASH (file[length - 1])) break; return length; } /* In general, we can't use the builtin 'dirname' function if available, since it has different meanings in different environments. In some environments the builtin 'dirname' modifies its argument. Return the leading directories part of FILE, allocated with malloc. Works properly even if there are trailing slashes (by effectively ignoring them). Return NULL on failure. If lstat (FILE) would succeed, then { chdir (dir_name (FILE)); lstat (base_name (FILE)); } will access the same file. Likewise, if the sequence { chdir (dir_name (FILE)); rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE to "foo" in the same directory FILE was in. */ char * mdir_name (char const *file) { size_t length = dir_len (file); bool append_dot = (length == 0 || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && length == FILE_SYSTEM_PREFIX_LEN (file) && file[2] != '\0' && ! ISSLASH (file[2]))); char *dir = malloc (length + append_dot + 1); if (!dir) return NULL; memcpy (dir, file, length); if (append_dot) dir[length++] = '.'; dir[length] = '\0'; return dir; } ttfautohint-1.8.1/gnulib/src/basename-lgpl.c0000644000175000001440000000406213222450622020655 0ustar00wlusers00000000000000/* basename.c -- return the last element in a file name Copyright (C) 1990, 1998-2001, 2003-2006, 2009-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "dirname.h" #include /* Return the address of the last file name component of NAME. If NAME has no relative file name components because it is a file system root, return the empty string. */ char * last_component (char const *name) { char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); char const *p; bool saw_slash = false; while (ISSLASH (*base)) base++; for (p = base; *p; p++) { if (ISSLASH (*p)) saw_slash = true; else if (saw_slash) { base = p; saw_slash = false; } } return (char *) base; } /* Return the length of the basename NAME. Typically NAME is the value returned by base_name or last_component. Act like strlen (NAME), except omit all trailing slashes. */ size_t base_len (char const *name) { size_t len; size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1 && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2]) return 2; if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len && len == prefix_len && ISSLASH (name[prefix_len])) return prefix_len + 1; return len; } ttfautohint-1.8.1/gnulib/src/stripslash.c0000644000175000001440000000304213222450623020340 0ustar00wlusers00000000000000/* stripslash.c -- remove redundant trailing slashes from a file name Copyright (C) 1990, 2001, 2003-2006, 2009-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "dirname.h" /* Remove trailing slashes from FILE. Return true if a trailing slash was removed. This is useful when using file name completion from a shell that adds a "/" after directory names (such as tcsh and bash), because on symlinks to directories, several system calls have different semantics according to whether a trailing slash is present. */ bool strip_trailing_slashes (char *file) { char *base = last_component (file); char *base_lim; bool had_slash; /* last_component returns "" for file system roots, but we need to turn "///" into "/". */ if (! *base) base = file; base_lim = base + base_len (base); had_slash = (*base_lim != '\0'); *base_lim = '\0'; return had_slash; } ttfautohint-1.8.1/gnulib/src/exitfail.c0000644000175000001440000000153413222450623017755 0ustar00wlusers00000000000000/* Failure exit status Copyright (C) 2002-2003, 2005-2007, 2009-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "exitfail.h" #include int volatile exit_failure = EXIT_FAILURE; ttfautohint-1.8.1/gnulib/src/getprogname.h0000644000175000001440000000217413222450623020466 0ustar00wlusers00000000000000/* Program name management. Copyright (C) 2016-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _GL_GETPROGNAME_H #define _GL_GETPROGNAME_H #include #ifdef __cplusplus extern "C" { #endif /* Return the base name of the executing program. On native Windows this will usually end in ".exe" or ".EXE". */ #ifndef HAVE_GETPROGNAME extern char const *getprogname (void) # ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME _GL_ATTRIBUTE_PURE # endif ; #endif #ifdef __cplusplus } #endif #endif ttfautohint-1.8.1/gnulib/src/getprogname.c0000644000175000001440000001335113222450623020460 0ustar00wlusers00000000000000/* Program name management. Copyright (C) 2016-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include "getprogname.h" #include /* get program_invocation_name declaration */ #include /* get __argv declaration */ #ifdef _AIX # include # include # include #endif #ifdef __MVS__ # ifndef _OPEN_SYS # define _OPEN_SYS # endif # include # include #endif #ifdef __hpux # include # include # include # include #endif #ifdef __sgi # include # include # include # include # include #endif #include "dirname.h" #ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Cygwin */ char const * getprogname (void) { # if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return program_invocation_short_name; # elif HAVE_DECL_PROGRAM_INVOCATION_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return last_component (program_invocation_name); # elif HAVE_GETEXECNAME /* Solaris */ /* https://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */ const char *p = getexecname (); if (!p) p = "?"; return last_component (p); # elif HAVE_DECL___ARGV /* mingw, MSVC */ /* https://msdn.microsoft.com/en-us/library/dn727674.aspx */ const char *p = __argv && __argv[0] ? __argv[0] : "?"; return last_component (p); # elif HAVE_VAR___PROGNAME /* OpenBSD, QNX */ /* https://man.openbsd.org/style.9 */ /* http://www.qnx.de/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2F__progname.html */ /* Be careful to declare this only when we absolutely need it (OpenBSD 5.1), rather than when it's available. Otherwise, its mere declaration makes program_invocation_short_name malfunction (have zero length) with Fedora 25's glibc. */ extern char *__progname; const char *p = __progname; return p && p[0] ? p : "?"; # elif _AIX /* AIX */ /* Idea by Bastien ROUCARIÈS, https://lists.gnu.org/r/bug-gnulib/2010-12/msg00095.html Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm */ static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct procentry64 procs; p = (0 < getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1) ? strdup (procs.pi_comm) : NULL); if (!p) p = "?"; } return p; # elif defined __hpux static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct pst_status status; p = (0 < pstat_getproc (&status, sizeof status, 0, pid) ? strdup (status.pst_ucomm) : NULL); if (!p) p = "?"; } return p; # elif __MVS__ /* z/OS */ /* https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rtwgetp.htm */ static char *p = "?"; static int first = 1; if (first) { pid_t pid = getpid (); int token; W_PSPROC buf; first = 0; memset (&buf, 0, sizeof(buf)); buf.ps_cmdptr = (char *) malloc (buf.ps_cmdlen = PS_CMDBLEN_LONG); buf.ps_conttyptr = (char *) malloc (buf.ps_conttylen = PS_CONTTYBLEN); buf.ps_pathptr = (char *) malloc (buf.ps_pathlen = PS_PATHBLEN); if (buf.ps_cmdptr && buf.ps_conttyptr && buf.ps_pathptr) { for (token = 0; token >= 0; token = w_getpsent (token, &buf, sizeof(buf))) { if (token > 0 && buf.ps_pid == pid) { char *s = strdup (last_component (buf.ps_pathptr)); if (s) p = s; break; } } } free (buf.ps_cmdptr); free (buf.ps_conttyptr); free (buf.ps_pathptr); } return p; # elif defined __sgi /* IRIX */ char filename[50]; int fd; sprintf (filename, "/proc/pinfo/%d", (int) getpid ()); fd = open (filename, O_RDONLY); if (0 <= fd) { prpsinfo_t buf; int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf); close (fd); if (ioctl_ok) { char *name = buf.pr_fname; size_t namesize = sizeof buf.pr_fname; char *namenul = memchr (name, '\0', namesize); size_t namelen = namenul ? namenul - name : namesize; char *namecopy = malloc (namelen + 1); if (namecopy) { namecopy[namelen] = 0; return memcpy (namecopy, name, namelen); } } } return NULL; # else # error "getprogname module not ported to this OS" # endif } #endif ttfautohint-1.8.1/gnulib/src/gettext.h0000644000175000001440000002410013222450623017633 0ustar00wlusers00000000000000/* Convenience header for conditional use of GNU . Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option or through "#define ENABLE NLS 0" before including this file. */ #if defined ENABLE_NLS && ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include /* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by the gettext() and ngettext() macros. This is an alternative to calling textdomain(), and is useful for libraries. */ # ifdef DEFAULT_TEXT_DOMAIN # undef gettext # define gettext(Msgid) \ dgettext (DEFAULT_TEXT_DOMAIN, Msgid) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) # endif #else /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. We don't include as well because people using "gettext.h" will not include , and also including would fail on SunOS 4, whereas is OK. */ #if defined(__sun) # include #endif /* Many header files from the libstdc++ coming with g++ 3.3 or newer include , which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. */ #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) # include # if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H # include # endif #endif /* Disabled NLS. The casts to 'const char *' serve the purpose of producing warnings for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ # undef gettext # define gettext(Msgid) ((const char *) (Msgid)) # undef dgettext # define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) # undef dcgettext # define dcgettext(Domainname, Msgid, Category) \ ((void) (Category), dgettext (Domainname, Msgid)) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ ((N) == 1 \ ? ((void) (Msgid2), (const char *) (Msgid1)) \ : ((void) (Msgid1), (const char *) (Msgid2))) # undef dngettext # define dngettext(Domainname, Msgid1, Msgid2, N) \ ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) # undef dcngettext # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) # undef textdomain # define textdomain(Domainname) ((const char *) (Domainname)) # undef bindtextdomain # define bindtextdomain(Domainname, Dirname) \ ((void) (Domainname), (const char *) (Dirname)) # undef bind_textdomain_codeset # define bind_textdomain_codeset(Domainname, Codeset) \ ((void) (Domainname), (const char *) (Codeset)) #endif /* Prefer gnulib's setlocale override over libintl's setlocale override. */ #ifdef GNULIB_defined_setlocale # undef setlocale # define setlocale rpl_setlocale #endif /* A pseudo function call that serves as a marker for the automated extraction of messages, but does not call gettext(). The run-time translation is done at a different place in the code. The argument, String, should be a literal string. Concatenated strings and other string expressions won't work. The macro's expansion is not parenthesized, so that it is suitable as initializer for static 'char[]' or 'const char[]' variables. */ #define gettext_noop(String) String /* The separator between msgctxt and msgid in a .mo file. */ #define GETTEXT_CONTEXT_GLUE "\004" /* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be short and rarely need to change. The letter 'p' stands for 'particular' or 'special'. */ #ifdef DEFAULT_TEXT_DOMAIN # define pgettext(Msgctxt, Msgid) \ pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #else # define pgettext(Msgctxt, Msgid) \ pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #endif #define dpgettext(Domainname, Msgctxt, Msgid) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) #ifdef DEFAULT_TEXT_DOMAIN # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #else # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #endif #define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * pgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, int category) { const char *translation = dcgettext (domain, msg_ctxt_id, category); if (translation == msg_ctxt_id) return msgid; else return translation; } #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * npgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { const char *translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); if (translation == msg_ctxt_id || translation == msgid_plural) return (n == 1 ? msgid : msgid_plural); else return translation; } /* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID can be arbitrary expressions. But for string literals these macros are less efficient than those above. */ #include #if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ /* || __STDC_VERSION__ == 199901L || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ ) # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 #else # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 #endif #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS #include #endif #define pgettext_expr(Msgctxt, Msgid) \ dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) #define dpgettext_expr(Domainname, Msgctxt, Msgid) \ dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcgettext (domain, msg_ctxt_id, category); found_translation = (translation != msg_ctxt_id); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) return translation; } return msgid; } #define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcnpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) return translation; } return (n == 1 ? msgid : msgid_plural); } #endif /* _LIBGETTEXT_H */ ttfautohint-1.8.1/gnulib/src/progname.h0000644000175000001440000000374013222450623017766 0ustar00wlusers00000000000000/* Program name management. Copyright (C) 2001-2004, 2006, 2009-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2001. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _PROGNAME_H #define _PROGNAME_H /* Programs using this file should do the following in main(): set_program_name (argv[0]); */ #ifdef __cplusplus extern "C" { #endif /* String containing name the program is called with. */ extern const char *program_name; /* Set program_name, based on argv[0]. argv0 must be a string allocated with indefinite extent, and must not be modified after this call. */ extern void set_program_name (const char *argv0); #if ENABLE_RELOCATABLE /* Set program_name, based on argv[0], and original installation prefix and directory, for relocatability. */ extern void set_program_name_and_installdir (const char *argv0, const char *orig_installprefix, const char *orig_installdir); #undef set_program_name #define set_program_name(ARG0) \ set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR) /* Return the full pathname of the current executable, based on the earlier call to set_program_name_and_installdir. Return NULL if unknown. */ extern char *get_full_program_name (void); #endif #ifdef __cplusplus } #endif #endif /* _PROGNAME_H */ ttfautohint-1.8.1/gnulib/src/progname.c0000644000175000001440000000615113222450623017760 0ustar00wlusers00000000000000/* Program name management. Copyright (C) 2001-2003, 2005-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2001. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */ #include "progname.h" #include /* get program_invocation_name declaration */ #include #include #include /* String containing name the program is called with. To be initialized by main(). */ const char *program_name = NULL; /* Set program_name, based on argv[0]. argv0 must be a string allocated with indefinite extent, and must not be modified after this call. */ void set_program_name (const char *argv0) { /* libtool creates a temporary executable whose name is sometimes prefixed with "lt-" (depends on the platform). It also makes argv[0] absolute. But the name of the temporary executable is a detail that should not be visible to the end user and to the test suite. Remove this "/.libs/" or "/.libs/lt-" prefix here. */ const char *slash; const char *base; /* Sanity check. POSIX requires the invoking process to pass a non-NULL argv[0]. */ if (argv0 == NULL) { /* It's a bug in the invoking program. Help diagnosing it. */ fputs ("A NULL argv[0] was passed through an exec system call.\n", stderr); abort (); } slash = strrchr (argv0, '/'); base = (slash != NULL ? slash + 1 : argv0); if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0) { argv0 = base; if (strncmp (base, "lt-", 3) == 0) { argv0 = base + 3; /* On glibc systems, remove the "lt-" prefix from the variable program_invocation_short_name. */ #if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME program_invocation_short_name = (char *) argv0; #endif } } /* But don't strip off a leading / in general, because when the user runs /some/hidden/place/bin/cp foo foo he should get the error message /some/hidden/place/bin/cp: `foo' and `foo' are the same file not cp: `foo' and `foo' are the same file */ program_name = argv0; /* On glibc systems, the error() function comes from libc and uses the variable program_invocation_name, not program_name. So set this variable as well. */ #if HAVE_DECL_PROGRAM_INVOCATION_NAME program_invocation_name = (char *) argv0; #endif } ttfautohint-1.8.1/gnulib/src/size_max.h0000644000175000001440000000221213222450623017766 0ustar00wlusers00000000000000/* size_max.h -- declare SIZE_MAX through system headers Copyright (C) 2005-2006, 2009-2017 Free Software Foundation, Inc. Written by Simon Josefsson. This program is free software; you can 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef GNULIB_SIZE_MAX_H #define GNULIB_SIZE_MAX_H /* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ # include /* Get SIZE_MAX declaration on systems like glibc 2. */ # if HAVE_STDINT_H # include # endif /* On systems where these include files don't define it, SIZE_MAX is defined in config.h. */ #endif /* GNULIB_SIZE_MAX_H */ ttfautohint-1.8.1/gnulib/src/unistd.c0000644000175000001440000000014713222450623017455 0ustar00wlusers00000000000000#include #define _GL_UNISTD_INLINE _GL_EXTERN_INLINE #include "unistd.h" typedef int dummy; ttfautohint-1.8.1/gnulib/src/xmalloc.c0000644000175000001440000000641513222450624017613 0ustar00wlusers00000000000000/* xmalloc.c -- malloc with out of memory checking Copyright (C) 1990-2000, 2002-2006, 2008-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #define XALLOC_INLINE _GL_EXTERN_INLINE #include "xalloc.h" #include #include /* 1 if calloc is known to be compatible with GNU calloc. This matters if we are not also using the calloc module, which defines HAVE_CALLOC_GNU and supports the GNU API even on non-GNU platforms. */ #if defined HAVE_CALLOC_GNU || (defined __GLIBC__ && !defined __UCLIBC__) enum { HAVE_GNU_CALLOC = 1 }; #else enum { HAVE_GNU_CALLOC = 0 }; #endif /* Allocate N bytes of memory dynamically, with error checking. */ void * xmalloc (size_t n) { void *p = malloc (n); if (!p && n != 0) xalloc_die (); return p; } /* Change the size of an allocated block of memory P to N bytes, with error checking. */ void * xrealloc (void *p, size_t n) { if (!n && p) { /* The GNU and C99 realloc behaviors disagree here. Act like GNU, even if the underlying realloc is C99. */ free (p); return NULL; } p = realloc (p, n); if (!p && n) xalloc_die (); return p; } /* If P is null, allocate a block of at least *PN bytes; otherwise, reallocate P so that it contains more than *PN bytes. *PN must be nonzero unless P is null. Set *PN to the new block's size, and return the pointer to the new block. *PN is never set to zero, and the returned pointer is never null. */ void * x2realloc (void *p, size_t *pn) { return x2nrealloc (p, pn, 1); } /* Allocate S bytes of zeroed memory dynamically, with error checking. There's no need for xnzalloc (N, S), since it would be equivalent to xcalloc (N, S). */ void * xzalloc (size_t s) { return memset (xmalloc (s), 0, s); } /* Allocate zeroed memory for N elements of S bytes, with error checking. S must be nonzero. */ void * xcalloc (size_t n, size_t s) { void *p; /* Test for overflow, since objects with size greater than PTRDIFF_MAX cause pointer subtraction to go awry. Omit size-zero tests if HAVE_GNU_CALLOC, since GNU calloc never returns NULL if successful. */ if (xalloc_oversized (n, s) || (! (p = calloc (n, s)) && (HAVE_GNU_CALLOC || n != 0))) xalloc_die (); return p; } /* Clone an object P of size S, with error checking. There's no need for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any need for an arithmetic overflow check. */ void * xmemdup (void const *p, size_t s) { return memcpy (xmalloc (s), p, s); } /* Clone STRING. */ char * xstrdup (char const *string) { return xmemdup (string, strlen (string) + 1); } ttfautohint-1.8.1/gnulib/src/xalloc-die.c0000644000175000001440000000243513222450624020173 0ustar00wlusers00000000000000/* Report a memory allocation failure and exit. Copyright (C) 1997-2000, 2002-2004, 2006, 2009-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "xalloc.h" #include #include "error.h" #include "exitfail.h" #include "gettext.h" #define _(msgid) gettext (msgid) void xalloc_die (void) { error (exit_failure, 0, "%s", _("memory exhausted")); /* _Noreturn cannot be given to error, since it may return if its first argument is 0. To help compilers understand the xalloc_die does not return, call abort. Also, the abort is a safety feature if exit_failure is 0 (which shouldn't happen). */ abort (); } ttfautohint-1.8.1/gnulib/src/xsize.h0000644000175000001440000000705713222450624017326 0ustar00wlusers00000000000000/* xsize.h -- Checked size_t computations. Copyright (C) 2003, 2008-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _XSIZE_H #define _XSIZE_H /* Get size_t. */ #include /* Get SIZE_MAX. */ #include #if HAVE_STDINT_H # include #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef XSIZE_INLINE # define XSIZE_INLINE _GL_INLINE #endif /* The size of memory objects is often computed through expressions of type size_t. Example: void* p = malloc (header_size + n * element_size). These computations can lead to overflow. When this happens, malloc() returns a piece of memory that is way too small, and the program then crashes while attempting to fill the memory. To avoid this, the functions and macros in this file check for overflow. The convention is that SIZE_MAX represents overflow. malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc implementation that uses mmap --, it's recommended to use size_overflow_p() or size_in_bounds_p() before invoking malloc(). The example thus becomes: size_t size = xsum (header_size, xtimes (n, element_size)); void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); */ /* Convert an arbitrary value >= 0 to type size_t. */ #define xcast_size_t(N) \ ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) /* Sum of two sizes, with overflow check. */ XSIZE_INLINE size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum (size_t size1, size_t size2) { size_t sum = size1 + size2; return (sum >= size1 ? sum : SIZE_MAX); } /* Sum of three sizes, with overflow check. */ XSIZE_INLINE size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum3 (size_t size1, size_t size2, size_t size3) { return xsum (xsum (size1, size2), size3); } /* Sum of four sizes, with overflow check. */ XSIZE_INLINE size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) { return xsum (xsum (xsum (size1, size2), size3), size4); } /* Maximum of two sizes, with overflow check. */ XSIZE_INLINE size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xmax (size_t size1, size_t size2) { /* No explicit check is needed here, because for any n: max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ return (size1 >= size2 ? size1 : size2); } /* Multiplication of a count with an element size, with overflow check. The count must be >= 0 and the element size must be > 0. This is a macro, not a function, so that it works correctly even when N is of a wider type and N > SIZE_MAX. */ #define xtimes(N, ELSIZE) \ ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) /* Check for overflow. */ #define size_overflow_p(SIZE) \ ((SIZE) == SIZE_MAX) /* Check against overflow. */ #define size_in_bounds_p(SIZE) \ ((SIZE) != SIZE_MAX) _GL_INLINE_HEADER_END #endif /* _XSIZE_H */ ttfautohint-1.8.1/gnulib/src/xsize.c0000644000175000001440000000011613222450624017306 0ustar00wlusers00000000000000#include #define XSIZE_INLINE _GL_EXTERN_INLINE #include "xsize.h" ttfautohint-1.8.1/gnulib/src/xstrndup.h0000644000175000001440000000177513222450624020054 0ustar00wlusers00000000000000/* Duplicate a bounded initial segment of a string, with out-of-memory checking. Copyright (C) 2003, 2009-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Return a newly allocated copy of at most N bytes of STRING. In other words, return a copy of the initial segment of length N of STRING. */ extern char *xstrndup (const char *string, size_t n); ttfautohint-1.8.1/gnulib/src/xstrndup.c0000644000175000001440000000224613222450624020041 0ustar00wlusers00000000000000/* Duplicate a bounded initial segment of a string, with out-of-memory checking. Copyright (C) 2003, 2006-2007, 2009-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include "xstrndup.h" #include #include "xalloc.h" /* Return a newly allocated copy of at most N bytes of STRING. In other words, return a copy of the initial segment of length N of STRING. */ char * xstrndup (const char *string, size_t n) { char *s = strndup (string, n); if (! s) xalloc_die (); return s; } ttfautohint-1.8.1/gnulib/src/error.c0000644000175000001440000002476313222450623017312 0ustar00wlusers00000000000000/* Error handler for noninteractive utilities Copyright (C) 1990-1998, 2000-2007, 2009-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can 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 . */ /* Written by David MacKenzie . */ #if !_LIBC # include #endif #include "error.h" #include #include #include #include #if !_LIBC && ENABLE_NLS # include "gettext.h" # define _(msgid) gettext (msgid) #endif #ifdef _LIBC # include # include # include # include # define mbsrtowcs __mbsrtowcs # define USE_UNLOCKED_IO 0 # define _GL_ATTRIBUTE_FORMAT_PRINTF(a, b) # define _GL_ARG_NONNULL(a) #else # include "getprogname.h" #endif #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #ifndef _ # define _(String) String #endif /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ unsigned int error_message_count; #ifdef _LIBC /* In the GNU C library, there is a predefined variable for this. */ # define program_name program_invocation_name # include # include # include /* In GNU libc we want do not want to use the common name 'error' directly. Instead make it a weak alias. */ extern void __error (int status, int errnum, const char *message, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern void __error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) __attribute__ ((__format__ (__printf__, 5, 6))); # define error __error # define error_at_line __error_at_line # include # define fflush(s) _IO_fflush (s) # undef putc # define putc(c, fp) _IO_putc (c, fp) # include #else /* not _LIBC */ # include # include # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif # endif /* The gnulib override of fcntl is not needed in this file. */ # undef fcntl # if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R) # ifndef HAVE_DECL_STRERROR_R "this configure-time declaration test was not run" # endif # if STRERROR_R_CHAR_P char *strerror_r (int errnum, char *buf, size_t buflen); # else int strerror_r (int errnum, char *buf, size_t buflen); # endif # endif #define program_name getprogname () # if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r # define __strerror_r strerror_r # endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */ #endif /* not _LIBC */ #if !_LIBC /* Return non-zero if FD is open. */ static int is_open (int fd) { # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows: The initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE. There is no fcntl, and the gnulib replacement fcntl does not support F_GETFL. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; # else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); # endif } #endif static void flush_stdout (void) { #if !_LIBC int stdout_fd; # if GNULIB_FREOPEN_SAFER /* Use of gnulib's freopen-safer module normally ensures that fileno (stdout) == 1 whenever stdout is open. */ stdout_fd = STDOUT_FILENO; # else /* POSIX states that fileno (stdout) after fclose is unspecified. But in practice it is not a problem, because stdout is statically allocated and the fd of a FILE stream is stored as a field in its allocated memory. */ stdout_fd = fileno (stdout); # endif /* POSIX states that fflush (stdout) after fclose is unspecified; it is safe in glibc, but not on all other platforms. fflush (NULL) is always defined, but too draconian. */ if (0 <= stdout_fd && is_open (stdout_fd)) #endif fflush (stdout); } static void print_errno_message (int errnum) { char const *s; #if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R char errbuf[1024]; # if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P) s = __strerror_r (errnum, errbuf, sizeof errbuf); # else if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) s = errbuf; else s = 0; # endif #else s = strerror (errnum); #endif #if !_LIBC if (! s) s = _("Unknown system error"); #endif #if _LIBC __fxprintf (NULL, ": %s", s); #else fprintf (stderr, ": %s", s); #endif } static void _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3)) error_tail (int status, int errnum, const char *message, va_list args) { #if _LIBC if (_IO_fwide (stderr, 0) > 0) { size_t len = strlen (message) + 1; wchar_t *wmessage = NULL; mbstate_t st; size_t res; const char *tmp; bool use_malloc = false; while (1) { if (__libc_use_alloca (len * sizeof (wchar_t))) wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); else { if (!use_malloc) wmessage = NULL; wchar_t *p = (wchar_t *) realloc (wmessage, len * sizeof (wchar_t)); if (p == NULL) { free (wmessage); fputws_unlocked (L"out of memory\n", stderr); return; } wmessage = p; use_malloc = true; } memset (&st, '\0', sizeof (st)); tmp = message; res = mbsrtowcs (wmessage, &tmp, len, &st); if (res != len) break; if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0)) { /* This really should not happen if everything is fine. */ res = (size_t) -1; break; } len *= 2; } if (res == (size_t) -1) { /* The string cannot be converted. */ if (use_malloc) { free (wmessage); use_malloc = false; } wmessage = (wchar_t *) L"???"; } __vfwprintf (stderr, wmessage, args); if (use_malloc) free (wmessage); } else #endif vfprintf (stderr, message, args); ++error_message_count; if (errnum) print_errno_message (errnum); #if _LIBC __fxprintf (NULL, "\n"); #else putc ('\n', stderr); #endif fflush (stderr); if (status) exit (status); } /* Print the program name and error message MESSAGE, which is a printf-style format string with optional args. If ERRNUM is nonzero, print its corresponding system error message. Exit with status STATUS if it is nonzero. */ void error (int status, int errnum, const char *message, ...) { va_list args; #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s: ", program_name); #else fprintf (stderr, "%s: ", program_name); #endif } va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ int error_one_per_line; void error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) { va_list args; if (error_one_per_line) { static const char *old_file_name; static unsigned int old_line_number; if (old_line_number == line_number && (file_name == old_file_name || (old_file_name != NULL && file_name != NULL && strcmp (old_file_name, file_name) == 0))) /* Simply return and print nothing. */ return; old_file_name = file_name; old_line_number = line_number; } #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s:", program_name); #else fprintf (stderr, "%s:", program_name); #endif } #if _LIBC __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #else fprintf (stderr, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #endif va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } #ifdef _LIBC /* Make the weak alias. */ # undef error # undef error_at_line weak_alias (__error, error) weak_alias (__error_at_line, error_at_line) #endif ttfautohint-1.8.1/gnulib/src/float.c0000644000175000001440000000250513222450623017254 0ustar00wlusers00000000000000/* Auxiliary definitions for . Copyright (C) 2011-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2011. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ const union gl_long_double_union gl_LDBL_MAX = { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } }; #elif defined __i386__ const union gl_long_double_union gl_LDBL_MAX = { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } }; #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ttfautohint-1.8.1/gnulib/src/itold.c0000644000175000001440000000201113222450623017252 0ustar00wlusers00000000000000/* Replacement for 'int' to 'long double' conversion routine. Copyright (C) 2011-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2011. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include void _Qp_itoq (long double *result, int a) { /* Convert from 'int' to 'double', then from 'double' to 'long double'. */ *result = (double) a; } ttfautohint-1.8.1/gnulib/src/getopt.c0000644000175000001440000005711113222450623017454 0ustar00wlusers00000000000000/* Getopt for GNU. Copyright (C) 1987-2017 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can 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. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifndef _LIBC # include #endif #include "getopt.h" #include #include #include #include #ifdef _LIBC /* When used as part of glibc, error printing must be done differently for standards compliance. getopt is not a cancellation point, so it must not call functions that are, and it is specified by an older standard than stdio locking, so it must not refer to functions in the "user namespace" related to stdio locking. Finally, it must use glibc's internal message translation so that the messages are looked up in the proper text domain. */ # include # define fprintf __fxprintf_nocancel # define flockfile(fp) _IO_flockfile (fp) # define funlockfile(fp) _IO_funlockfile (fp) #else # include "gettext.h" # define _(msgid) gettext (msgid) /* When used standalone, flockfile and funlockfile might not be available. */ # if (!defined _POSIX_THREAD_SAFE_FUNCTIONS \ || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) # define flockfile(fp) /* nop */ # define funlockfile(fp) /* nop */ # endif /* When used standalone, do not attempt to use alloca. */ # define __libc_use_alloca(size) 0 # undef alloca # define alloca(size) (abort (), (void *)0) #endif /* This implementation of 'getopt' has three modes for handling options interspersed with non-option arguments. It can stop scanning for options at the first non-option argument encountered, as POSIX specifies. It can continue scanning for options after the first non-option argument, but permute 'argv' as it goes so that, after 'getopt' is done, all the options precede all the non-option arguments and 'optind' points to the first non-option argument. Or, it can report non-option arguments as if they were arguments to the option character '\x01'. The default behavior of 'getopt_long' is to permute the argument list. When this implementation is used standalone, the default behavior of 'getopt' is to stop at the first non-option argument, but when it is used as part of GNU libc it also permutes the argument list. In both cases, setting the environment variable POSIXLY_CORRECT to any value disables permutation. If the first character of the OPTSTRING argument to 'getopt' or 'getopt_long' is '+', both functions will stop at the first non-option argument. If it is '-', both functions will report non-option arguments as arguments to the option character '\x01'. */ #include "getopt_int.h" /* For communication from 'getopt' to the caller. When 'getopt' finds an option that takes an argument, the argument value is returned here. Also, when 'ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to 'getopt'. On entry to 'getopt', zero means this is the first call; initialize. When 'getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, 'optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Keep a global copy of all internal members of getopt_data. */ static struct _getopt_data getopt_data; /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. 'first_nonopt' and 'last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ static void exchange (char **argv, struct _getopt_data *d) { int bottom = d->__first_nonopt; int middle = d->__last_nonopt; int top = d->optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ d->__first_nonopt += (d->optind - d->__last_nonopt); d->__last_nonopt = d->optind; } /* Process the argument starting with d->__nextchar as a long option. d->optind should *not* have been advanced over this argument. If the value returned is -1, it was not actually a long option, the state is unchanged, and the argument should be processed as a set of short options (this can only happen when long_only is true). Otherwise, the option (and its argument, if any) have been consumed and the return value is the value to return from _getopt_internal_r. */ static int process_long_option (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, struct _getopt_data *d, int print_errors, const char *prefix) { char *nameend; size_t namelen; const struct option *p; const struct option *pfound = NULL; int n_options; int option_index; for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; namelen = nameend - d->__nextchar; /* First look for an exact match, counting the options as a side effect. */ for (p = longopts, n_options = 0; p->name; p++, n_options++) if (!strncmp (p->name, d->__nextchar, namelen) && namelen == strlen (p->name)) { /* Exact match found. */ pfound = p; option_index = n_options; break; } if (pfound == NULL) { /* Didn't find an exact match, so look for abbreviations. */ unsigned char *ambig_set = NULL; int ambig_malloced = 0; int ambig_fallback = 0; int indfound = -1; for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, d->__nextchar, namelen)) { if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) { /* Second or later nonexact match found. */ if (!ambig_fallback) { if (!print_errors) /* Don't waste effort tracking the ambig set if we're not going to print it anyway. */ ambig_fallback = 1; else if (!ambig_set) { if (__libc_use_alloca (n_options)) ambig_set = alloca (n_options); else if ((ambig_set = malloc (n_options)) == NULL) /* Fall back to simpler error message. */ ambig_fallback = 1; else ambig_malloced = 1; if (ambig_set) { memset (ambig_set, 0, n_options); ambig_set[indfound] = 1; } } if (ambig_set) ambig_set[option_index] = 1; } } } if (ambig_set || ambig_fallback) { if (print_errors) { if (ambig_fallback) fprintf (stderr, _("%s: option '%s%s' is ambiguous\n"), argv[0], prefix, d->__nextchar); else { flockfile (stderr); fprintf (stderr, _("%s: option '%s%s' is ambiguous; possibilities:"), argv[0], prefix, d->__nextchar); for (option_index = 0; option_index < n_options; option_index++) if (ambig_set[option_index]) fprintf (stderr, " '%s%s'", prefix, longopts[option_index].name); /* This must use 'fprintf' even though it's only printing a single character, so that it goes through __fxprintf_nocancel when compiled as part of glibc. */ fprintf (stderr, "\n"); funlockfile (stderr); } } if (ambig_malloced) free (ambig_set); d->__nextchar += strlen (d->__nextchar); d->optind++; d->optopt = 0; return '?'; } option_index = indfound; } if (pfound == NULL) { /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. */ if (!long_only || argv[d->optind][1] == '-' || strchr (optstring, *d->__nextchar) == NULL) { if (print_errors) fprintf (stderr, _("%s: unrecognized option '%s%s'\n"), argv[0], prefix, d->__nextchar); d->__nextchar = NULL; d->optind++; d->optopt = 0; return '?'; } /* Otherwise interpret it as a short option. */ return -1; } /* We have found a matching long option. Consume it. */ d->optind++; d->__nextchar = NULL; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) d->optarg = nameend + 1; else { if (print_errors) fprintf (stderr, _("%s: option '%s%s' doesn't allow an argument\n"), argv[0], prefix, pfound->name); d->optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) fprintf (stderr, _("%s: option '%s%s' requires an argument\n"), argv[0], prefix, pfound->name); d->optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Initialize internal data upon the first call to getopt. */ static const char * _getopt_initialize (int argc _GL_UNUSED, char **argv _GL_UNUSED, const char *optstring, struct _getopt_data *d, int posixly_correct) { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ if (d->optind == 0) d->optind = 1; d->__first_nonopt = d->__last_nonopt = d->optind; d->__nextchar = NULL; /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { d->__ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { d->__ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct || !!getenv ("POSIXLY_CORRECT")) d->__ordering = REQUIRE_ORDER; else d->__ordering = PERMUTE; d->__initialized = 1; return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If 'getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If 'getopt' finds another option character, it returns that character, updating 'optind' and 'nextchar' so that the next call to 'getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, 'getopt' returns -1. Then 'optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set 'opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in 'optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in 'optarg', otherwise 'optarg' is set to zero. If OPTSTRING starts with '-' or '+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with '--' instead of '-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a '=', or else the in next ARGV-element. When 'getopt' finds a long-named option, it returns 0 if that option's 'flag' field is nonzero, the value of the option's 'val' field if the 'flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of 'struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal_r (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, struct _getopt_data *d, int posixly_correct) { int print_errors = d->opterr; if (argc < 1) return -1; d->optarg = NULL; if (d->optind == 0 || !d->__initialized) optstring = _getopt_initialize (argc, argv, optstring, d, posixly_correct); else if (optstring[0] == '-' || optstring[0] == '+') optstring++; if (optstring[0] == ':') print_errors = 0; /* Test whether ARGV[optind] points to a non-option argument. */ #define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') if (d->__nextchar == NULL || *d->__nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (d->__last_nonopt > d->optind) d->__last_nonopt = d->optind; if (d->__first_nonopt > d->optind) d->__first_nonopt = d->optind; if (d->__ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange (argv, d); else if (d->__last_nonopt != d->optind) d->__first_nonopt = d->optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (d->optind < argc && NONOPTION_P) d->optind++; d->__last_nonopt = d->optind; } /* The special ARGV-element '--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (d->optind != argc && !strcmp (argv[d->optind], "--")) { d->optind++; if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange (argv, d); else if (d->__first_nonopt == d->__last_nonopt) d->__first_nonopt = d->optind; d->__last_nonopt = argc; d->optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (d->optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (d->__first_nonopt != d->__last_nonopt) d->optind = d->__first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (d->__ordering == REQUIRE_ORDER) return -1; d->optarg = argv[d->optind++]; return 1; } /* We have found another option-ARGV-element. Check whether it might be a long option. */ if (longopts) { if (argv[d->optind][1] == '-') { /* "--foo" is always a long option. The special option "--" was handled above. */ d->__nextchar = argv[d->optind] + 2; return process_long_option (argc, argv, optstring, longopts, longind, long_only, d, print_errors, "--"); } /* If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (long_only && (argv[d->optind][2] || !strchr (optstring, argv[d->optind][1]))) { int code; d->__nextchar = argv[d->optind] + 1; code = process_long_option (argc, argv, optstring, longopts, longind, long_only, d, print_errors, "-"); if (code != -1) return code; } } /* It is not a long option. Skip the initial punctuation. */ d->__nextchar = argv[d->optind] + 1; } /* Look at and handle the next short option-character. */ { char c = *d->__nextchar++; const char *temp = strchr (optstring, c); /* Increment 'optind' when we start to process its last character. */ if (*d->__nextchar == '\0') ++d->optind; if (temp == NULL || c == ':' || c == ';') { if (print_errors) fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c); d->optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';' && longopts != NULL) { /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') d->optarg = d->__nextchar; else if (d->optind == argc) { if (print_errors) fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else d->optarg = argv[d->optind]; d->__nextchar = d->optarg; d->optarg = NULL; return process_long_option (argc, argv, optstring, longopts, longind, 0 /* long_only */, d, print_errors, "-W "); } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; d->optind++; } else d->optarg = NULL; d->__nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ d->optind++; } else if (d->optind == argc) { if (print_errors) fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented 'optind' once; increment it again when taking next ARGV-elt as argument. */ d->optarg = argv[d->optind++]; d->__nextchar = NULL; } } return c; } } int _getopt_internal (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, int posixly_correct) { int result; getopt_data.optind = optind; getopt_data.opterr = opterr; result = _getopt_internal_r (argc, argv, optstring, longopts, longind, long_only, &getopt_data, posixly_correct); optind = getopt_data.optind; optarg = getopt_data.optarg; optopt = getopt_data.optopt; return result; } /* glibc gets a LSB-compliant getopt and a POSIX-complaint __posix_getopt. Standalone applications just get a POSIX-compliant getopt. POSIX and LSB both require these functions to take 'char *const *argv' even though this is incorrect (because of the permutation). */ #define GETOPT_ENTRY(NAME, POSIXLY_CORRECT) \ int \ NAME (int argc, char *const *argv, const char *optstring) \ { \ return _getopt_internal (argc, (char **)argv, optstring, \ 0, 0, 0, POSIXLY_CORRECT); \ } #ifdef _LIBC GETOPT_ENTRY(getopt, 0) GETOPT_ENTRY(__posix_getopt, 1) #else GETOPT_ENTRY(getopt, 1) #endif #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of 'getopt'. */ int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ ttfautohint-1.8.1/gnulib/src/getopt1.c0000644000175000001440000000733113222450623017534 0ustar00wlusers00000000000000/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987-2017 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can 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. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifndef _LIBC # include #endif #include "getopt.h" #include "getopt_int.h" int getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 0, 0); } int _getopt_long_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 0, d, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 1, 0); } int _getopt_long_only_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 1, d, 0); } #ifdef TEST #include #include int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static const struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case 'd': printf ("option d with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ ttfautohint-1.8.1/gnulib/src/isatty.c0000644000175000001440000000404713222450623017467 0ustar00wlusers00000000000000/* isatty() replacement. Copyright (C) 2012-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include /* This replacement is enabled on native Windows. */ #include /* Get declarations of the Win32 API functions. */ #define WIN32_LEAN_AND_MEAN #include #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif /* Get _get_osfhandle(). */ #if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" #else # include #endif static BOOL IsConsoleHandle (HANDLE h) { DWORD mode; return GetConsoleMode (h, &mode) != 0; } #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int _isatty_nothrow (int fd) { int result; TRY_MSVC_INVAL { result = _isatty (fd); } CATCH_MSVC_INVAL { result = 0; } DONE_MSVC_INVAL; return result; } #else # define _isatty_nothrow _isatty #endif /* Determine whether FD refers to a console device. Return 1 if yes. Return 0 and set errno if no. (ptsname_r relies on the errno value.) */ int isatty (int fd) { HANDLE h = (HANDLE) _get_osfhandle (fd); if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return 0; } /* _isatty (fd) tests whether GetFileType of the handle is FILE_TYPE_CHAR. But it does not set errno when it returns 0. */ if (_isatty_nothrow (fd)) { if (IsConsoleHandle (h)) return 1; } errno = ENOTTY; return 0; } ttfautohint-1.8.1/gnulib/src/malloc.c0000644000175000001440000000273313222450623017421 0ustar00wlusers00000000000000/* malloc() function that is glibc compatible. Copyright (C) 1997-1998, 2006-2007, 2009-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ /* written by Jim Meyering and Bruno Haible */ #define _GL_USE_STDLIB_ALLOC 1 #include /* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */ #ifdef malloc # define NEED_MALLOC_GNU 1 # undef malloc /* Whereas the gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ #elif GNULIB_MALLOC_GNU && !HAVE_MALLOC_GNU # define NEED_MALLOC_GNU 1 #endif #include #include /* Allocate an N-byte block of memory from the heap. If N is zero, allocate a 1-byte block. */ void * rpl_malloc (size_t n) { void *result; #if NEED_MALLOC_GNU if (n == 0) n = 1; #endif result = malloc (n); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ttfautohint-1.8.1/gnulib/src/memchr.c0000644000175000001440000001334713222450623017430 0ustar00wlusers00000000000000/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2017 Free Software Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se) and commentary by Jim Blandy (jimb@ai.mit.edu); adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), and implemented by Roland McGrath (roland@ai.mit.edu). NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. This program is free software: you can 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 any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _LIBC # include #endif #include #include #if defined _LIBC # include #else # define reg_char char #endif #include #if HAVE_BP_SYM_H || defined _LIBC # include #else # define BP_SYM(sym) sym #endif #undef __memchr #ifdef _LIBC # undef memchr #endif #ifndef weak_alias # define __memchr memchr #endif /* Search no more than N bytes of S for C. */ void * __memchr (void const *s, int c_in, size_t n) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned reg_char c; c = (unsigned char) c_in; /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; n > 0 && (size_t) char_ptr % sizeof (longword) != 0; --n, ++char_ptr) if (*char_ptr == c) return (void *) char_ptr; longword_ptr = (const longword *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 is zero. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. So, the test whether any byte in longword1 is zero is equivalent to testing whether tmp is nonzero. */ while (n >= sizeof (longword)) { longword longword1 = *longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) & (repeated_one << 7)) != 0) break; longword_ptr++; n -= sizeof (longword); } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that either n < sizeof (longword), or one of the sizeof (longword) bytes starting at char_ptr is == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ for (; n > 0; --n, ++char_ptr) { if (*char_ptr == c) return (void *) char_ptr; } return NULL; } #ifdef weak_alias weak_alias (__memchr, BP_SYM (memchr)) #endif ttfautohint-1.8.1/gnulib/src/memmem.c0000644000175000001440000000524113222450623017424 0ustar00wlusers00000000000000/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software; you can 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ /* This particular implementation was written by Eric Blake, 2008. */ #ifndef _LIBC # include #endif /* Specification of memmem. */ #include #define RETURN_TYPE void * #define AVAILABLE(h, h_l, j, n_l) ((j) <= (h_l) - (n_l)) #include "str-two-way.h" /* Return the first occurrence of NEEDLE in HAYSTACK. Return HAYSTACK if NEEDLE_LEN is 0, otherwise NULL if NEEDLE is not found in HAYSTACK. */ void * memmem (const void *haystack_start, size_t haystack_len, const void *needle_start, size_t needle_len) { /* Abstract memory is considered to be an array of 'unsigned char' values, not an array of 'char' values. See ISO C 99 section 6.2.6.1. */ const unsigned char *haystack = (const unsigned char *) haystack_start; const unsigned char *needle = (const unsigned char *) needle_start; if (needle_len == 0) /* The first occurrence of the empty string is deemed to occur at the beginning of the string. */ return (void *) haystack; /* Sanity check, otherwise the loop might search through the whole memory. */ if (__builtin_expect (haystack_len < needle_len, 0)) return NULL; /* Use optimizations in memchr when possible, to reduce the search size of haystack using a linear algorithm with a smaller coefficient. However, avoid memchr for long needles, since we can often achieve sublinear performance. */ if (needle_len < LONG_NEEDLE_THRESHOLD) { haystack = memchr (haystack, *needle, haystack_len); if (!haystack || __builtin_expect (needle_len == 1, 0)) return (void *) haystack; haystack_len -= haystack - (const unsigned char *) haystack_start; if (haystack_len < needle_len) return NULL; return two_way_short_needle (haystack, haystack_len, needle, needle_len); } else return two_way_long_needle (haystack, haystack_len, needle, needle_len); } #undef LONG_NEEDLE_THRESHOLD ttfautohint-1.8.1/gnulib/src/msvc-inval.c0000644000175000001440000000751213222450623020231 0ustar00wlusers00000000000000/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include "msvc-inval.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* Get _invalid_parameter_handler type and _set_invalid_parameter_handler declaration. */ # include # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { } # else /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include # if defined _MSC_VER static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # else /* An index to thread-local storage. */ static DWORD tls_index; static int tls_initialized /* = 0 */; /* Used as a fallback only. */ static struct gl_msvc_inval_per_thread not_per_thread; struct gl_msvc_inval_per_thread * gl_msvc_inval_current (void) { if (!tls_initialized) { tls_index = TlsAlloc (); tls_initialized = 1; } if (tls_index == TLS_OUT_OF_INDEXES) /* TlsAlloc had failed. */ return ¬_per_thread; else { struct gl_msvc_inval_per_thread *pointer = (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); if (pointer == NULL) { /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ pointer = (struct gl_msvc_inval_per_thread *) malloc (sizeof (struct gl_msvc_inval_per_thread)); if (pointer == NULL) /* Could not allocate memory. Use the global storage. */ pointer = ¬_per_thread; TlsSetValue (tls_index, pointer); } return pointer; } } static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); if (current->restart_valid) longjmp (current->restart, 1); else /* An invalid parameter notification from outside the gnulib code. Give the caller a chance to intervene. */ RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # endif # endif static int gl_msvc_inval_initialized /* = 0 */; void gl_msvc_inval_ensure_handler (void) { if (gl_msvc_inval_initialized == 0) { _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); gl_msvc_inval_initialized = 1; } } #endif ttfautohint-1.8.1/gnulib/src/msvc-nothrow.c0000644000175000001440000000251513222450623020616 0ustar00wlusers00000000000000/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include "msvc-nothrow.h" /* Get declarations of the native Windows API functions. */ #define WIN32_LEAN_AND_MEAN #include #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef _get_osfhandle #if HAVE_MSVC_INVALID_PARAMETER_HANDLER intptr_t _gl_nothrow_get_osfhandle (int fd) { intptr_t result; TRY_MSVC_INVAL { result = _get_osfhandle (fd); } CATCH_MSVC_INVAL { result = (intptr_t) INVALID_HANDLE_VALUE; } DONE_MSVC_INVAL; return result; } #endif ttfautohint-1.8.1/gnulib/src/strerror.c0000644000175000001440000000405313222450623020031 0ustar00wlusers00000000000000/* strerror.c --- POSIX compatible system error routine Copyright (C) 2007-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include #include #include #include "intprops.h" #include "strerror-override.h" #include "verify.h" /* Use the system functions, not the gnulib overrides in this file. */ #undef sprintf char * strerror (int n) #undef strerror { static char buf[STACKBUF_LEN]; size_t len; /* Cast away const, due to the historical signature of strerror; callers should not be modifying the string. */ const char *msg = strerror_override (n); if (msg) return (char *) msg; msg = strerror (n); /* Our strerror_r implementation might use the system's strerror buffer, so all other clients of strerror have to see the error copied into a buffer that we manage. This is not thread-safe, even if the system strerror is, but portable programs shouldn't be using strerror if they care about thread-safety. */ if (!msg || !*msg) { static char const fmt[] = "Unknown error %d"; verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); sprintf (buf, fmt, n); errno = EINVAL; return buf; } /* Fix STACKBUF_LEN if this ever aborts. */ len = strlen (msg); if (sizeof buf <= len) abort (); memcpy (buf, msg, len + 1); return buf; } ttfautohint-1.8.1/gnulib/src/strerror-override.c0000644000175000001440000002146613222450623021655 0ustar00wlusers00000000000000/* strerror-override.c --- POSIX compatible system error routine Copyright (C) 2010-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 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 . */ /* Written by Bruno Haible , 2010. */ #include #include "strerror-override.h" #include #if GNULIB_defined_EWINSOCK /* native Windows platforms */ # if HAVE_WINSOCK2_H # include # endif #endif /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ const char * strerror_override (int errnum) { /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ switch (errnum) { #if REPLACE_STRERROR_0 case 0: return "Success"; #endif #if GNULIB_defined_ESOCK /* native Windows platforms with older */ case EINPROGRESS: return "Operation now in progress"; case EALREADY: return "Operation already in progress"; case ENOTSOCK: return "Socket operation on non-socket"; case EDESTADDRREQ: return "Destination address required"; case EMSGSIZE: return "Message too long"; case EPROTOTYPE: return "Protocol wrong type for socket"; case ENOPROTOOPT: return "Protocol not available"; case EPROTONOSUPPORT: return "Protocol not supported"; case EOPNOTSUPP: return "Operation not supported"; case EAFNOSUPPORT: return "Address family not supported by protocol"; case EADDRINUSE: return "Address already in use"; case EADDRNOTAVAIL: return "Cannot assign requested address"; case ENETDOWN: return "Network is down"; case ENETUNREACH: return "Network is unreachable"; case ECONNRESET: return "Connection reset by peer"; case ENOBUFS: return "No buffer space available"; case EISCONN: return "Transport endpoint is already connected"; case ENOTCONN: return "Transport endpoint is not connected"; case ETIMEDOUT: return "Connection timed out"; case ECONNREFUSED: return "Connection refused"; case ELOOP: return "Too many levels of symbolic links"; case EHOSTUNREACH: return "No route to host"; case EWOULDBLOCK: return "Operation would block"; #endif #if GNULIB_defined_ESTREAMS /* native Windows platforms with older */ case ETXTBSY: return "Text file busy"; case ENODATA: return "No data available"; case ENOSR: return "Out of streams resources"; case ENOSTR: return "Device not a stream"; case ETIME: return "Timer expired"; case EOTHER: return "Other error"; #endif #if GNULIB_defined_EWINSOCK /* native Windows platforms */ case ESOCKTNOSUPPORT: return "Socket type not supported"; case EPFNOSUPPORT: return "Protocol family not supported"; case ESHUTDOWN: return "Cannot send after transport endpoint shutdown"; case ETOOMANYREFS: return "Too many references: cannot splice"; case EHOSTDOWN: return "Host is down"; case EPROCLIM: return "Too many processes"; case EUSERS: return "Too many users"; case EDQUOT: return "Disk quota exceeded"; case ESTALE: return "Stale NFS file handle"; case EREMOTE: return "Object is remote"; # if HAVE_WINSOCK2_H /* WSA_INVALID_HANDLE maps to EBADF */ /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ /* WSA_INVALID_PARAMETER maps to EINVAL */ case WSA_OPERATION_ABORTED: return "Overlapped operation aborted"; case WSA_IO_INCOMPLETE: return "Overlapped I/O event object not in signaled state"; case WSA_IO_PENDING: return "Overlapped operations will complete later"; /* WSAEINTR maps to EINTR */ /* WSAEBADF maps to EBADF */ /* WSAEACCES maps to EACCES */ /* WSAEFAULT maps to EFAULT */ /* WSAEINVAL maps to EINVAL */ /* WSAEMFILE maps to EMFILE */ /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ /* WSAEINPROGRESS maps to EINPROGRESS */ /* WSAEALREADY maps to EALREADY */ /* WSAENOTSOCK maps to ENOTSOCK */ /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ /* WSAEMSGSIZE maps to EMSGSIZE */ /* WSAEPROTOTYPE maps to EPROTOTYPE */ /* WSAENOPROTOOPT maps to ENOPROTOOPT */ /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ /* WSAEADDRINUSE maps to EADDRINUSE */ /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ /* WSAENETDOWN maps to ENETDOWN */ /* WSAENETUNREACH maps to ENETUNREACH */ /* WSAENETRESET maps to ENETRESET */ /* WSAECONNABORTED maps to ECONNABORTED */ /* WSAECONNRESET maps to ECONNRESET */ /* WSAENOBUFS maps to ENOBUFS */ /* WSAEISCONN maps to EISCONN */ /* WSAENOTCONN maps to ENOTCONN */ /* WSAESHUTDOWN is ESHUTDOWN */ /* WSAETOOMANYREFS is ETOOMANYREFS */ /* WSAETIMEDOUT maps to ETIMEDOUT */ /* WSAECONNREFUSED maps to ECONNREFUSED */ /* WSAELOOP maps to ELOOP */ /* WSAENAMETOOLONG maps to ENAMETOOLONG */ /* WSAEHOSTDOWN is EHOSTDOWN */ /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ /* WSAENOTEMPTY maps to ENOTEMPTY */ /* WSAEPROCLIM is EPROCLIM */ /* WSAEUSERS is EUSERS */ /* WSAEDQUOT is EDQUOT */ /* WSAESTALE is ESTALE */ /* WSAEREMOTE is EREMOTE */ case WSASYSNOTREADY: return "Network subsystem is unavailable"; case WSAVERNOTSUPPORTED: return "Winsock.dll version out of range"; case WSANOTINITIALISED: return "Successful WSAStartup not yet performed"; case WSAEDISCON: return "Graceful shutdown in progress"; case WSAENOMORE: case WSA_E_NO_MORE: return "No more results"; case WSAECANCELLED: case WSA_E_CANCELLED: return "Call was canceled"; case WSAEINVALIDPROCTABLE: return "Procedure call table is invalid"; case WSAEINVALIDPROVIDER: return "Service provider is invalid"; case WSAEPROVIDERFAILEDINIT: return "Service provider failed to initialize"; case WSASYSCALLFAILURE: return "System call failure"; case WSASERVICE_NOT_FOUND: return "Service not found"; case WSATYPE_NOT_FOUND: return "Class type not found"; case WSAEREFUSED: return "Database query was refused"; case WSAHOST_NOT_FOUND: return "Host not found"; case WSATRY_AGAIN: return "Nonauthoritative host not found"; case WSANO_RECOVERY: return "Nonrecoverable error"; case WSANO_DATA: return "Valid name, no data record of requested type"; /* WSA_QOS_* omitted */ # endif #endif #if GNULIB_defined_ENOMSG case ENOMSG: return "No message of desired type"; #endif #if GNULIB_defined_EIDRM case EIDRM: return "Identifier removed"; #endif #if GNULIB_defined_ENOLINK case ENOLINK: return "Link has been severed"; #endif #if GNULIB_defined_EPROTO case EPROTO: return "Protocol error"; #endif #if GNULIB_defined_EMULTIHOP case EMULTIHOP: return "Multihop attempted"; #endif #if GNULIB_defined_EBADMSG case EBADMSG: return "Bad message"; #endif #if GNULIB_defined_EOVERFLOW case EOVERFLOW: return "Value too large for defined data type"; #endif #if GNULIB_defined_ENOTSUP case ENOTSUP: return "Not supported"; #endif #if GNULIB_defined_ENETRESET case ENETRESET: return "Network dropped connection on reset"; #endif #if GNULIB_defined_ECONNABORTED case ECONNABORTED: return "Software caused connection abort"; #endif #if GNULIB_defined_ESTALE case ESTALE: return "Stale NFS file handle"; #endif #if GNULIB_defined_EDQUOT case EDQUOT: return "Disk quota exceeded"; #endif #if GNULIB_defined_ECANCELED case ECANCELED: return "Operation canceled"; #endif #if GNULIB_defined_EOWNERDEAD case EOWNERDEAD: return "Owner died"; #endif #if GNULIB_defined_ENOTRECOVERABLE case ENOTRECOVERABLE: return "State not recoverable"; #endif #if GNULIB_defined_EILSEQ case EILSEQ: return "Invalid or incomplete multibyte or wide character"; #endif default: return NULL; } } ttfautohint-1.8.1/gnulib/src/strerror_r.c0000644000175000001440000003261113222450623020353 0ustar00wlusers00000000000000/* strerror_r.c --- POSIX compatible system error routine Copyright (C) 2010-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 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 . */ /* Written by Bruno Haible , 2010. */ #include /* Enable declaration of sys_nerr and sys_errlist in on NetBSD. */ #define _NETBSD_SOURCE 1 /* Specification. */ #include #include #include #include #if !HAVE_SNPRINTF # include #endif #include "strerror-override.h" #if (__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__) && HAVE___XPG_STRERROR_R /* glibc >= 2.3.4, cygwin >= 1.7.9 */ # define USE_XPG_STRERROR_R 1 extern #ifdef __cplusplus "C" #endif int __xpg_strerror_r (int errnum, char *buf, size_t buflen); #elif HAVE_DECL_STRERROR_R && !(__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__) /* The system's strerror_r function is OK, except that its third argument is 'int', not 'size_t', or its return type is wrong. */ # include # define USE_SYSTEM_STRERROR_R 1 #else /* (__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__ ? !HAVE___XPG_STRERROR_R : !HAVE_DECL_STRERROR_R) */ /* Use the system's strerror(). Exclude glibc and cygwin because the system strerror_r has the wrong return type, and cygwin 1.7.9 strerror_r clobbers strerror. */ # undef strerror # define USE_SYSTEM_STRERROR 1 # if defined __NetBSD__ || defined __hpux || ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __sgi || (defined __sun && !defined _LP64) || defined __CYGWIN__ /* No locking needed. */ /* Get catgets internationalization functions. */ # if HAVE_CATGETS # include # endif #ifdef __cplusplus extern "C" { #endif /* Get sys_nerr, sys_errlist on HP-UX (otherwise only declared in C++ mode). Get sys_nerr, sys_errlist on IRIX (otherwise only declared with _SGIAPI). */ # if defined __hpux || defined __sgi extern int sys_nerr; extern char *sys_errlist[]; # endif /* Get sys_nerr on Solaris. */ # if defined __sun && !defined _LP64 extern int sys_nerr; # endif #ifdef __cplusplus } #endif # else # include "glthread/lock.h" /* This lock protects the buffer returned by strerror(). We assume that no other uses of strerror() exist in the program. */ gl_lock_define_initialized(static, strerror_lock) # endif #endif /* On MSVC, there is no snprintf() function, just a _snprintf(). It is of lower quality, but sufficient for the simple use here. We only have to make sure to NUL terminate the result (_snprintf does not NUL terminate, like strncpy). */ #if !HAVE_SNPRINTF static int local_snprintf (char *buf, size_t buflen, const char *format, ...) { va_list args; int result; va_start (args, format); result = _vsnprintf (buf, buflen, format, args); va_end (args); if (buflen > 0 && (result < 0 || result >= buflen)) buf[buflen - 1] = '\0'; return result; } # define snprintf local_snprintf #endif /* Copy as much of MSG into BUF as possible, without corrupting errno. Return 0 if MSG fit in BUFLEN, otherwise return ERANGE. */ static int safe_copy (char *buf, size_t buflen, const char *msg) { size_t len = strlen (msg); int ret; if (len < buflen) { /* Although POSIX allows memcpy() to corrupt errno, we don't know of any implementation where this is a real problem. */ memcpy (buf, msg, len + 1); ret = 0; } else { memcpy (buf, msg, buflen - 1); buf[buflen - 1] = '\0'; ret = ERANGE; } return ret; } int strerror_r (int errnum, char *buf, size_t buflen) #undef strerror_r { /* Filter this out now, so that rest of this replacement knows that there is room for a non-empty message and trailing NUL. */ if (buflen <= 1) { if (buflen) *buf = '\0'; return ERANGE; } *buf = '\0'; /* Check for gnulib overrides. */ { char const *msg = strerror_override (errnum); if (msg) return safe_copy (buf, buflen, msg); } { int ret; int saved_errno = errno; #if USE_XPG_STRERROR_R { ret = __xpg_strerror_r (errnum, buf, buflen); if (ret < 0) ret = errno; if (!*buf) { /* glibc 2.13 would not touch buf on err, so we have to fall back to GNU strerror_r which always returns a thread-safe untruncated string to (partially) copy into our buf. */ safe_copy (buf, buflen, strerror_r (errnum, buf, buflen)); } } #elif USE_SYSTEM_STRERROR_R if (buflen > INT_MAX) buflen = INT_MAX; # ifdef __hpux /* On HP-UX 11.31, strerror_r always fails when buflen < 80; it also fails to change buf on EINVAL. */ { char stackbuf[80]; if (buflen < sizeof stackbuf) { ret = strerror_r (errnum, stackbuf, sizeof stackbuf); if (ret == 0) ret = safe_copy (buf, buflen, stackbuf); } else ret = strerror_r (errnum, buf, buflen); } # else ret = strerror_r (errnum, buf, buflen); /* Some old implementations may return (-1, EINVAL) instead of EINVAL. But on Haiku, valid error numbers are negative. */ # if !defined __HAIKU__ if (ret < 0) ret = errno; # endif # endif # if defined _AIX || defined __HAIKU__ /* AIX and Haiku return 0 rather than ERANGE when truncating strings; try again until we are sure we got the entire string. */ if (!ret && strlen (buf) == buflen - 1) { char stackbuf[STACKBUF_LEN]; size_t len; strerror_r (errnum, stackbuf, sizeof stackbuf); len = strlen (stackbuf); /* STACKBUF_LEN should have been large enough. */ if (len + 1 == sizeof stackbuf) abort (); if (buflen <= len) ret = ERANGE; } # else /* Solaris 10 does not populate buf on ERANGE. OpenBSD 4.7 truncates early on ERANGE rather than return a partial integer. We prefer the maximal string. We set buf[0] earlier, and we know of no implementation that modifies buf to be an unterminated string, so this strlen should be portable in practice (rather than pulling in a safer strnlen). */ if (ret == ERANGE && strlen (buf) < buflen - 1) { char stackbuf[STACKBUF_LEN]; /* STACKBUF_LEN should have been large enough. */ if (strerror_r (errnum, stackbuf, sizeof stackbuf) == ERANGE) abort (); safe_copy (buf, buflen, stackbuf); } # endif #else /* USE_SYSTEM_STRERROR */ /* Try to do what strerror (errnum) does, but without clobbering the buffer used by strerror(). */ # if defined __NetBSD__ || defined __hpux || ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __CYGWIN__ /* NetBSD, HP-UX, native Windows, Cygwin */ /* NetBSD: sys_nerr, sys_errlist are declared through _NETBSD_SOURCE and above. HP-UX: sys_nerr, sys_errlist are declared explicitly above. native Windows: sys_nerr, sys_errlist are declared in . Cygwin: sys_nerr, sys_errlist are declared in . */ if (errnum >= 0 && errnum < sys_nerr) { # if HAVE_CATGETS && (defined __NetBSD__ || defined __hpux) # if defined __NetBSD__ nl_catd catd = catopen ("libc", NL_CAT_LOCALE); const char *errmsg = (catd != (nl_catd)-1 ? catgets (catd, 1, errnum, sys_errlist[errnum]) : sys_errlist[errnum]); # endif # if defined __hpux nl_catd catd = catopen ("perror", NL_CAT_LOCALE); const char *errmsg = (catd != (nl_catd)-1 ? catgets (catd, 1, 1 + errnum, sys_errlist[errnum]) : sys_errlist[errnum]); # endif # else const char *errmsg = sys_errlist[errnum]; # endif if (errmsg == NULL || *errmsg == '\0') ret = EINVAL; else ret = safe_copy (buf, buflen, errmsg); # if HAVE_CATGETS && (defined __NetBSD__ || defined __hpux) if (catd != (nl_catd)-1) catclose (catd); # endif } else ret = EINVAL; # elif defined __sgi || (defined __sun && !defined _LP64) /* IRIX, Solaris <= 9 32-bit */ /* For a valid error number, the system's strerror() function returns a pointer to a not copied string, not to a buffer. */ if (errnum >= 0 && errnum < sys_nerr) { char *errmsg = strerror (errnum); if (errmsg == NULL || *errmsg == '\0') ret = EINVAL; else ret = safe_copy (buf, buflen, errmsg); } else ret = EINVAL; # else gl_lock_lock (strerror_lock); { char *errmsg = strerror (errnum); /* For invalid error numbers, strerror() on - IRIX 6.5 returns NULL, - HP-UX 11 returns an empty string. */ if (errmsg == NULL || *errmsg == '\0') ret = EINVAL; else ret = safe_copy (buf, buflen, errmsg); } gl_lock_unlock (strerror_lock); # endif #endif #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* MSVC 14 defines names for many error codes in the range 100..140, but _sys_errlist contains strings only for the error codes < _sys_nerr = 43. */ if (ret == EINVAL) { const char *errmsg; switch (errnum) { case 100 /* EADDRINUSE */: errmsg = "Address already in use"; break; case 101 /* EADDRNOTAVAIL */: errmsg = "Cannot assign requested address"; break; case 102 /* EAFNOSUPPORT */: errmsg = "Address family not supported by protocol"; break; case 103 /* EALREADY */: errmsg = "Operation already in progress"; break; case 105 /* ECANCELED */: errmsg = "Operation canceled"; break; case 106 /* ECONNABORTED */: errmsg = "Software caused connection abort"; break; case 107 /* ECONNREFUSED */: errmsg = "Connection refused"; break; case 108 /* ECONNRESET */: errmsg = "Connection reset by peer"; break; case 109 /* EDESTADDRREQ */: errmsg = "Destination address required"; break; case 110 /* EHOSTUNREACH */: errmsg = "No route to host"; break; case 112 /* EINPROGRESS */: errmsg = "Operation now in progress"; break; case 113 /* EISCONN */: errmsg = "Transport endpoint is already connected"; break; case 114 /* ELOOP */: errmsg = "Too many levels of symbolic links"; break; case 115 /* EMSGSIZE */: errmsg = "Message too long"; break; case 116 /* ENETDOWN */: errmsg = "Network is down"; break; case 117 /* ENETRESET */: errmsg = "Network dropped connection on reset"; break; case 118 /* ENETUNREACH */: errmsg = "Network is unreachable"; break; case 119 /* ENOBUFS */: errmsg = "No buffer space available"; break; case 123 /* ENOPROTOOPT */: errmsg = "Protocol not available"; break; case 126 /* ENOTCONN */: errmsg = "Transport endpoint is not connected"; break; case 128 /* ENOTSOCK */: errmsg = "Socket operation on non-socket"; break; case 129 /* ENOTSUP */: errmsg = "Not supported"; break; case 130 /* EOPNOTSUPP */: errmsg = "Operation not supported"; break; case 132 /* EOVERFLOW */: errmsg = "Value too large for defined data type"; break; case 133 /* EOWNERDEAD */: errmsg = "Owner died"; break; case 134 /* EPROTO */: errmsg = "Protocol error"; break; case 135 /* EPROTONOSUPPORT */: errmsg = "Protocol not supported"; break; case 136 /* EPROTOTYPE */: errmsg = "Protocol wrong type for socket"; break; case 138 /* ETIMEDOUT */: errmsg = "Connection timed out"; break; case 140 /* EWOULDBLOCK */: errmsg = "Operation would block"; break; default: errmsg = NULL; break; } if (errmsg != NULL) ret = safe_copy (buf, buflen, errmsg); } #endif if (ret == EINVAL && !*buf) { #if defined __HAIKU__ /* For consistency with perror(). */ snprintf (buf, buflen, "Unknown Application Error (%d)", errnum); #else snprintf (buf, buflen, "Unknown error %d", errnum); #endif } errno = saved_errno; return ret; } } ttfautohint-1.8.1/gnulib/src/strndup.c0000644000175000001440000000202513222450623017643 0ustar00wlusers00000000000000/* A replacement function, for systems that lack strndup. Copyright (C) 1996-1998, 2001-2003, 2005-2007, 2009-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include #include #include char * strndup (char const *s, size_t n) { size_t len = strnlen (s, n); char *new = malloc (len + 1); if (new == NULL) return NULL; new[len] = '\0'; return memcpy (new, s, len); } ttfautohint-1.8.1/gnulib/src/strnlen.c0000644000175000001440000000216513222450623017636 0ustar00wlusers00000000000000/* Find the length of STRING, but scan at most MAXLEN characters. Copyright (C) 2005-2007, 2009-2017 Free Software Foundation, Inc. Written by Simon Josefsson. This program is free software; you can 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include #include /* Find the length of STRING, but scan at most MAXLEN characters. If no '\0' terminator is found in that many characters, return MAXLEN. */ size_t strnlen (const char *string, size_t maxlen) { const char *end = memchr (string, '\0', maxlen); return end ? (size_t) (end - string) : maxlen; } ttfautohint-1.8.1/gnulib/src/strtok_r.c0000644000175000001440000000411513222450623020015 0ustar00wlusers00000000000000/* Reentrant string tokenizer. Generic version. Copyright (C) 1991, 1996-1999, 2001, 2004, 2007, 2009-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can 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 . */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef _LIBC # undef strtok_r # undef __strtok_r #else # define __strtok_r strtok_r # define __rawmemchr strchr #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" */ char * __strtok_r (char *s, const char *delim, char **save_ptr) { char *token; if (s == NULL) s = *save_ptr; /* Scan leading delimiters. */ s += strspn (s, delim); if (*s == '\0') { *save_ptr = s; return NULL; } /* Find the end of the token. */ token = s; s = strpbrk (token, delim); if (s == NULL) /* This token finishes the string. */ *save_ptr = __rawmemchr (token, '\0'); else { /* Terminate the token and make *SAVE_PTR point past it. */ *s = '\0'; *save_ptr = s + 1; } return token; } #ifdef weak_alias libc_hidden_def (__strtok_r) weak_alias (__strtok_r, strtok_r) #endif ttfautohint-1.8.1/gnulib/src/strtol.c0000644000175000001440000002521313222450623017477 0ustar00wlusers00000000000000/* Convert string representation of a number into an integer value. Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2017 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. This program is free software: you can 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 any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ #ifdef _LIBC # define USE_NUMBER_GROUPING #else # include #endif #include #include #ifndef __set_errno # define __set_errno(Val) errno = (Val) #endif #include #include #include #include #ifdef USE_NUMBER_GROUPING # include "../locale/localeinfo.h" #endif /* Nonzero if we are defining 'strtoul' or 'strtoull', operating on unsigned integers. */ #ifndef UNSIGNED # define UNSIGNED 0 # define INT LONG int #else # define INT unsigned LONG int #endif /* Determine the name. */ #ifdef USE_IN_EXTENDED_LOCALE_MODEL # if UNSIGNED # ifdef USE_WIDE_CHAR # ifdef QUAD # define strtol __wcstoull_l # else # define strtol __wcstoul_l # endif # else # ifdef QUAD # define strtol __strtoull_l # else # define strtol __strtoul_l # endif # endif # else # ifdef USE_WIDE_CHAR # ifdef QUAD # define strtol __wcstoll_l # else # define strtol __wcstol_l # endif # else # ifdef QUAD # define strtol __strtoll_l # else # define strtol __strtol_l # endif # endif # endif #else # if UNSIGNED # ifdef USE_WIDE_CHAR # ifdef QUAD # define strtol wcstoull # else # define strtol wcstoul # endif # else # ifdef QUAD # define strtol strtoull # else # define strtol strtoul # endif # endif # else # ifdef USE_WIDE_CHAR # ifdef QUAD # define strtol wcstoll # else # define strtol wcstol # endif # else # ifdef QUAD # define strtol strtoll # endif # endif # endif #endif /* If QUAD is defined, we are defining 'strtoll' or 'strtoull', operating on 'long long int's. */ #ifdef QUAD # define LONG long long # define STRTOL_LONG_MIN LLONG_MIN # define STRTOL_LONG_MAX LLONG_MAX # define STRTOL_ULONG_MAX ULLONG_MAX /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if the arithmetic type T is signed. */ # define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Minimum and maximum values for integer types. These macros have undefined behavior for signed types that either have padding bits or do not use two's complement. If this is a problem for you, please let us know how to fix it for your host. */ /* The maximum and minimum values for the integer type T. */ # define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) # define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) # ifndef ULLONG_MAX # define ULLONG_MAX TYPE_MAXIMUM (unsigned long long) # endif # ifndef LLONG_MAX # define LLONG_MAX TYPE_MAXIMUM (long long int) # endif # ifndef LLONG_MIN # define LLONG_MIN TYPE_MINIMUM (long long int) # endif # if __GNUC__ == 2 && __GNUC_MINOR__ < 7 /* Work around gcc bug with using this constant. */ static const unsigned long long int maxquad = ULLONG_MAX; # undef STRTOL_ULONG_MAX # define STRTOL_ULONG_MAX maxquad # endif #else # define LONG long # define STRTOL_LONG_MIN LONG_MIN # define STRTOL_LONG_MAX LONG_MAX # define STRTOL_ULONG_MAX ULONG_MAX #endif /* We use this code also for the extended locale handling where the function gets as an additional argument the locale which has to be used. To access the values we have to redefine the _NL_CURRENT macro. */ #ifdef USE_IN_EXTENDED_LOCALE_MODEL # undef _NL_CURRENT # define _NL_CURRENT(category, item) \ (current->values[_NL_ITEM_INDEX (item)].string) # define LOCALE_PARAM , loc # define LOCALE_PARAM_PROTO , __locale_t loc #else # define LOCALE_PARAM # define LOCALE_PARAM_PROTO #endif #ifdef USE_WIDE_CHAR # include # include # define L_(Ch) L##Ch # define UCHAR_TYPE wint_t # define STRING_TYPE wchar_t # ifdef USE_IN_EXTENDED_LOCALE_MODEL # define ISSPACE(Ch) __iswspace_l ((Ch), loc) # define ISALPHA(Ch) __iswalpha_l ((Ch), loc) # define TOUPPER(Ch) __towupper_l ((Ch), loc) # else # define ISSPACE(Ch) iswspace (Ch) # define ISALPHA(Ch) iswalpha (Ch) # define TOUPPER(Ch) towupper (Ch) # endif #else # define L_(Ch) Ch # define UCHAR_TYPE unsigned char # define STRING_TYPE char # ifdef USE_IN_EXTENDED_LOCALE_MODEL # define ISSPACE(Ch) __isspace_l ((Ch), loc) # define ISALPHA(Ch) __isalpha_l ((Ch), loc) # define TOUPPER(Ch) __toupper_l ((Ch), loc) # else # define ISSPACE(Ch) isspace (Ch) # define ISALPHA(Ch) isalpha (Ch) # define TOUPPER(Ch) toupper (Ch) # endif #endif #define INTERNAL(X) INTERNAL1(X) #define INTERNAL1(X) __##X##_internal #define WEAKNAME(X) WEAKNAME1(X) #ifdef USE_NUMBER_GROUPING /* This file defines a function to check for correct grouping. */ # include "grouping.h" #endif /* Convert NPTR to an 'unsigned long int' or 'long int' in base BASE. If BASE is 0 the base is determined by the presence of a leading zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal. If BASE is < 2 or > 36, it is reset to 10. If ENDPTR is not NULL, a pointer to the character after the last one converted is stored in *ENDPTR. */ INT INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr, int base, int group LOCALE_PARAM_PROTO) { int negative; register unsigned LONG int cutoff; register unsigned int cutlim; register unsigned LONG int i; register const STRING_TYPE *s; register UCHAR_TYPE c; const STRING_TYPE *save, *end; int overflow; #ifdef USE_NUMBER_GROUPING # ifdef USE_IN_EXTENDED_LOCALE_MODEL struct locale_data *current = loc->__locales[LC_NUMERIC]; # endif /* The thousands character of the current locale. */ wchar_t thousands = L'\0'; /* The numeric grouping specification of the current locale, in the format described in . */ const char *grouping; if (group) { grouping = _NL_CURRENT (LC_NUMERIC, GROUPING); if (*grouping <= 0 || *grouping == CHAR_MAX) grouping = NULL; else { /* Figure out the thousands separator character. */ # if defined _LIBC || defined _HAVE_BTOWC thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP)); if (thousands == WEOF) thousands = L'\0'; # endif if (thousands == L'\0') grouping = NULL; } } else grouping = NULL; #endif if (base < 0 || base == 1 || base > 36) { __set_errno (EINVAL); return 0; } save = s = nptr; /* Skip white space. */ while (ISSPACE (*s)) ++s; if (*s == L_('\0')) goto noconv; /* Check for a sign. */ if (*s == L_('-')) { negative = 1; ++s; } else if (*s == L_('+')) { negative = 0; ++s; } else negative = 0; /* Recognize number prefix and if BASE is zero, figure it out ourselves. */ if (*s == L_('0')) { if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X')) { s += 2; base = 16; } else if (base == 0) base = 8; } else if (base == 0) base = 10; /* Save the pointer so we can check later if anything happened. */ save = s; #ifdef USE_NUMBER_GROUPING if (group) { /* Find the end of the digit string and check its grouping. */ end = s; for (c = *end; c != L_('\0'); c = *++end) if ((wchar_t) c != thousands && ((wchar_t) c < L_('0') || (wchar_t) c > L_('9')) && (!ISALPHA (c) || (int) (TOUPPER (c) - L_('A') + 10) >= base)) break; if (*s == thousands) end = s; else end = correctly_grouped_prefix (s, end, thousands, grouping); } else #endif end = NULL; cutoff = STRTOL_ULONG_MAX / (unsigned LONG int) base; cutlim = STRTOL_ULONG_MAX % (unsigned LONG int) base; overflow = 0; i = 0; for (c = *s; c != L_('\0'); c = *++s) { if (s == end) break; if (c >= L_('0') && c <= L_('9')) c -= L_('0'); else if (ISALPHA (c)) c = TOUPPER (c) - L_('A') + 10; else break; if ((int) c >= base) break; /* Check for overflow. */ if (i > cutoff || (i == cutoff && c > cutlim)) overflow = 1; else { i *= (unsigned LONG int) base; i += c; } } /* Check if anything actually happened. */ if (s == save) goto noconv; /* Store in ENDPTR the address of one character past the last character we converted. */ if (endptr != NULL) *endptr = (STRING_TYPE *) s; #if !UNSIGNED /* Check for a value that is within the range of 'unsigned LONG int', but outside the range of 'LONG int'. */ if (overflow == 0 && i > (negative ? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1 : (unsigned LONG int) STRTOL_LONG_MAX)) overflow = 1; #endif if (overflow) { __set_errno (ERANGE); #if UNSIGNED return STRTOL_ULONG_MAX; #else return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX; #endif } /* Return the result of the appropriate sign. */ return negative ? -i : i; noconv: /* We must handle a special case here: the base is 0 or 16 and the first two characters are '0' and 'x', but the rest are no hexadecimal digits. This is no error case. We return 0 and ENDPTR points to the 'x'. */ if (endptr != NULL) { if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X') && save[-2] == L_('0')) *endptr = (STRING_TYPE *) &save[-1]; else /* There was no number to convert. */ *endptr = (STRING_TYPE *) nptr; } return 0L; } /* External user entry point. */ INT #ifdef weak_function weak_function #endif strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr, int base LOCALE_PARAM_PROTO) { return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM); } ttfautohint-1.8.1/gnulib/src/strtoul.c0000644000175000001440000000145113222450623017662 0ustar00wlusers00000000000000/* Copyright (C) 1991, 1997, 2009-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can 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 . */ #define UNSIGNED 1 #include "strtol.c" ttfautohint-1.8.1/gnulib/src/strtoull.c0000644000175000001440000000201713222450623020035 0ustar00wlusers00000000000000/* Function to parse an 'unsigned long long int' from text. Copyright (C) 1995-1997, 1999, 2009-2017 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. This program is free software: you can 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 any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ #define QUAD 1 #include "strtoul.c" #ifdef _LIBC strong_alias (__strtoull_internal, __strtouq_internal) weak_alias (strtoull, strtouq) #endif ttfautohint-1.8.1/gnulib/src/asnprintf.c0000644000175000001440000000204713222450622020153 0ustar00wlusers00000000000000/* Formatted output to strings. Copyright (C) 1999, 2002, 2006, 2009-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include "vasnprintf.h" #include char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; char *result; va_start (args, format); result = vasnprintf (resultbuf, lengthp, format, args); va_end (args); return result; } ttfautohint-1.8.1/gnulib/src/printf-args.c0000644000175000001440000001463313222450623020410 0ustar00wlusers00000000000000/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2005-2007, 2009-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be defined. STATIC Set to 'static' to declare the function static. */ #ifndef PRINTF_FETCHARGS # include #endif /* Specification. */ #ifndef PRINTF_FETCHARGS # include "printf-args.h" #endif #ifdef STATIC STATIC #endif int PRINTF_FETCHARGS (va_list args, arguments *a) { size_t i; argument *ap; for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) switch (ap->type) { case TYPE_SCHAR: ap->a.a_schar = va_arg (args, /*signed char*/ int); break; case TYPE_UCHAR: ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); break; case TYPE_SHORT: ap->a.a_short = va_arg (args, /*short*/ int); break; case TYPE_USHORT: ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); break; case TYPE_INT: ap->a.a_int = va_arg (args, int); break; case TYPE_UINT: ap->a.a_uint = va_arg (args, unsigned int); break; case TYPE_LONGINT: ap->a.a_longint = va_arg (args, long int); break; case TYPE_ULONGINT: ap->a.a_ulongint = va_arg (args, unsigned long int); break; #if HAVE_LONG_LONG_INT case TYPE_LONGLONGINT: ap->a.a_longlongint = va_arg (args, long long int); break; case TYPE_ULONGLONGINT: ap->a.a_ulonglongint = va_arg (args, unsigned long long int); break; #endif case TYPE_DOUBLE: ap->a.a_double = va_arg (args, double); break; case TYPE_LONGDOUBLE: ap->a.a_longdouble = va_arg (args, long double); break; case TYPE_CHAR: ap->a.a_char = va_arg (args, int); break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by default argument promotions", this is not the case in mingw32, where wint_t is 'unsigned short'. */ ap->a.a_wide_char = (sizeof (wint_t) < sizeof (int) ? (wint_t) va_arg (args, int) : va_arg (args, wint_t)); break; #endif case TYPE_STRING: ap->a.a_string = va_arg (args, const char *); /* A null pointer is an invalid argument for "%s", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_string == NULL) ap->a.a_string = "(NULL)"; break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: ap->a.a_wide_string = va_arg (args, const wchar_t *); /* A null pointer is an invalid argument for "%ls", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_wide_string == NULL) { static const wchar_t wide_null_string[] = { (wchar_t)'(', (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', (wchar_t)')', (wchar_t)0 }; ap->a.a_wide_string = wide_null_string; } break; #endif case TYPE_POINTER: ap->a.a_pointer = va_arg (args, void *); break; case TYPE_COUNT_SCHAR_POINTER: ap->a.a_count_schar_pointer = va_arg (args, signed char *); break; case TYPE_COUNT_SHORT_POINTER: ap->a.a_count_short_pointer = va_arg (args, short *); break; case TYPE_COUNT_INT_POINTER: ap->a.a_count_int_pointer = va_arg (args, int *); break; case TYPE_COUNT_LONGINT_POINTER: ap->a.a_count_longint_pointer = va_arg (args, long int *); break; #if HAVE_LONG_LONG_INT case TYPE_COUNT_LONGLONGINT_POINTER: ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); break; #endif #if ENABLE_UNISTDIO /* The unistdio extensions. */ case TYPE_U8_STRING: ap->a.a_u8_string = va_arg (args, const uint8_t *); /* A null pointer is an invalid argument for "%U", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u8_string == NULL) { static const uint8_t u8_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u8_string = u8_null_string; } break; case TYPE_U16_STRING: ap->a.a_u16_string = va_arg (args, const uint16_t *); /* A null pointer is an invalid argument for "%lU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u16_string == NULL) { static const uint16_t u16_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u16_string = u16_null_string; } break; case TYPE_U32_STRING: ap->a.a_u32_string = va_arg (args, const uint32_t *); /* A null pointer is an invalid argument for "%llU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u32_string == NULL) { static const uint32_t u32_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u32_string = u32_null_string; } break; #endif default: /* Unknown type. */ return -1; } return 0; } ttfautohint-1.8.1/gnulib/src/printf-parse.c0000644000175000001440000005317213222450623020567 0ustar00wlusers00000000000000/* Formatted output to strings. Copyright (C) 1999-2000, 2002-2003, 2006-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ /* This file can be parametrized with the following macros: CHAR_T The element type of the format string. CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. DIRECTIVE Structure denoting a format directive. Depends on CHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on CHAR_T. PRINTF_PARSE Function that parses a format string. Depends on CHAR_T. STATIC Set to 'static' to declare the function static. ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ #ifndef PRINTF_PARSE # include #endif /* Specification. */ #ifndef PRINTF_PARSE # include "printf-parse.h" #endif /* Default parameters. */ #ifndef PRINTF_PARSE # define PRINTF_PARSE printf_parse # define CHAR_T char # define DIRECTIVE char_directive # define DIRECTIVES char_directives #endif /* Get size_t, NULL. */ #include /* Get intmax_t. */ #if defined IN_LIBINTL || defined IN_LIBASPRINTF # if HAVE_STDINT_H_WITH_UINTMAX # include # endif # if HAVE_INTTYPES_H_WITH_UINTMAX # include # endif #else # include #endif /* malloc(), realloc(), free(). */ #include /* memcpy(). */ #include /* errno. */ #include /* Checked size_t computations. */ #include "xsize.h" #if CHAR_T_ONLY_ASCII /* c_isascii(). */ # include "c-ctype.h" #endif #ifdef STATIC STATIC #endif int PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) { const CHAR_T *cp = format; /* pointer into format */ size_t arg_posn = 0; /* number of regular arguments consumed */ size_t d_allocated; /* allocated elements of d->dir */ size_t a_allocated; /* allocated elements of a->arg */ size_t max_width_length = 0; size_t max_precision_length = 0; d->count = 0; d_allocated = N_DIRECT_ALLOC_DIRECTIVES; d->dir = d->direct_alloc_dir; a->count = 0; a_allocated = N_DIRECT_ALLOC_ARGUMENTS; a->arg = a->direct_alloc_arg; #define REGISTER_ARG(_index_,_type_) \ { \ size_t n = (_index_); \ if (n >= a_allocated) \ { \ size_t memory_size; \ argument *memory; \ \ a_allocated = xtimes (a_allocated, 2); \ if (a_allocated <= n) \ a_allocated = xsum (n, 1); \ memory_size = xtimes (a_allocated, sizeof (argument)); \ if (size_overflow_p (memory_size)) \ /* Overflow, would lead to out of memory. */ \ goto out_of_memory; \ memory = (argument *) (a->arg != a->direct_alloc_arg \ ? realloc (a->arg, memory_size) \ : malloc (memory_size)); \ if (memory == NULL) \ /* Out of memory. */ \ goto out_of_memory; \ if (a->arg == a->direct_alloc_arg) \ memcpy (memory, a->arg, a->count * sizeof (argument)); \ a->arg = memory; \ } \ while (a->count <= n) \ a->arg[a->count++].type = TYPE_NONE; \ if (a->arg[n].type == TYPE_NONE) \ a->arg[n].type = (_type_); \ else if (a->arg[n].type != (_type_)) \ /* Ambiguous type for positional argument. */ \ goto error; \ } while (*cp != '\0') { CHAR_T c = *cp++; if (c == '%') { size_t arg_index = ARG_NONE; DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ /* Initialize the next directive. */ dp->dir_start = cp - 1; dp->flags = 0; dp->width_start = NULL; dp->width_end = NULL; dp->width_arg_index = ARG_NONE; dp->precision_start = NULL; dp->precision_end = NULL; dp->precision_arg_index = ARG_NONE; dp->arg_index = ARG_NONE; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; arg_index = n - 1; cp = np + 1; } } /* Read the flags. */ for (;;) { if (*cp == '\'') { dp->flags |= FLAG_GROUP; cp++; } else if (*cp == '-') { dp->flags |= FLAG_LEFT; cp++; } else if (*cp == '+') { dp->flags |= FLAG_SHOWSIGN; cp++; } else if (*cp == ' ') { dp->flags |= FLAG_SPACE; cp++; } else if (*cp == '#') { dp->flags |= FLAG_ALT; cp++; } else if (*cp == '0') { dp->flags |= FLAG_ZERO; cp++; } #if __GLIBC__ >= 2 && !defined __UCLIBC__ else if (*cp == 'I') { dp->flags |= FLAG_LOCALIZED; cp++; } #endif else break; } /* Parse the field width. */ if (*cp == '*') { dp->width_start = cp; cp++; dp->width_end = cp; if (max_width_length < 1) max_width_length = 1; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->width_arg_index = n - 1; cp = np + 1; } } if (dp->width_arg_index == ARG_NONE) { dp->width_arg_index = arg_posn++; if (dp->width_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->width_arg_index, TYPE_INT); } else if (*cp >= '0' && *cp <= '9') { size_t width_length; dp->width_start = cp; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->width_end = cp; width_length = dp->width_end - dp->width_start; if (max_width_length < width_length) max_width_length = width_length; } /* Parse the precision. */ if (*cp == '.') { cp++; if (*cp == '*') { dp->precision_start = cp - 1; cp++; dp->precision_end = cp; if (max_precision_length < 2) max_precision_length = 2; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->precision_arg_index = n - 1; cp = np + 1; } } if (dp->precision_arg_index == ARG_NONE) { dp->precision_arg_index = arg_posn++; if (dp->precision_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->precision_arg_index, TYPE_INT); } else { size_t precision_length; dp->precision_start = cp - 1; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->precision_end = cp; precision_length = dp->precision_end - dp->precision_start; if (max_precision_length < precision_length) max_precision_length = precision_length; } } { arg_type type; /* Parse argument type/size specifiers. */ { int flags = 0; for (;;) { if (*cp == 'h') { flags |= (1 << (flags & 1)); cp++; } else if (*cp == 'L') { flags |= 4; cp++; } else if (*cp == 'l') { flags += 8; cp++; } else if (*cp == 'j') { if (sizeof (intmax_t) > sizeof (long)) { /* intmax_t = long long */ flags += 16; } else if (sizeof (intmax_t) > sizeof (int)) { /* intmax_t = long */ flags += 8; } cp++; } else if (*cp == 'z' || *cp == 'Z') { /* 'z' is standardized in ISO C 99, but glibc uses 'Z' because the warning facility in gcc-2.95.2 understands only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ if (sizeof (size_t) > sizeof (long)) { /* size_t = long long */ flags += 16; } else if (sizeof (size_t) > sizeof (int)) { /* size_t = long */ flags += 8; } cp++; } else if (*cp == 't') { if (sizeof (ptrdiff_t) > sizeof (long)) { /* ptrdiff_t = long long */ flags += 16; } else if (sizeof (ptrdiff_t) > sizeof (int)) { /* ptrdiff_t = long */ flags += 8; } cp++; } #if defined __APPLE__ && defined __MACH__ /* On Mac OS X 10.3, PRIdMAX is defined as "qd". We cannot change it to "lld" because PRIdMAX must also be understood by the system's printf routines. */ else if (*cp == 'q') { if (64 / 8 > sizeof (long)) { /* int64_t = long long */ flags += 16; } else { /* int64_t = long */ flags += 8; } cp++; } #endif #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows, PRIdMAX is defined as "I64d". We cannot change it to "lld" because PRIdMAX must also be understood by the system's printf routines. */ else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') { if (64 / 8 > sizeof (long)) { /* __int64 = long long */ flags += 16; } else { /* __int64 = long */ flags += 8; } cp += 3; } #endif else break; } /* Read the conversion character. */ c = *cp++; switch (c) { case 'd': case 'i': #if HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_LONGLONGINT; else #endif /* If 'long long' exists and is the same as 'long', we parse "lld" into TYPE_LONGINT. */ if (flags >= 8) type = TYPE_LONGINT; else if (flags & 2) type = TYPE_SCHAR; else if (flags & 1) type = TYPE_SHORT; else type = TYPE_INT; break; case 'o': case 'u': case 'x': case 'X': #if HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_ULONGLONGINT; else #endif /* If 'unsigned long long' exists and is the same as 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ if (flags >= 8) type = TYPE_ULONGINT; else if (flags & 2) type = TYPE_UCHAR; else if (flags & 1) type = TYPE_USHORT; else type = TYPE_UINT; break; case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': if (flags >= 16 || (flags & 4)) type = TYPE_LONGDOUBLE; else type = TYPE_DOUBLE; break; case 'c': if (flags >= 8) #if HAVE_WINT_T type = TYPE_WIDE_CHAR; #else goto error; #endif else type = TYPE_CHAR; break; #if HAVE_WINT_T case 'C': type = TYPE_WIDE_CHAR; c = 'c'; break; #endif case 's': if (flags >= 8) #if HAVE_WCHAR_T type = TYPE_WIDE_STRING; #else goto error; #endif else type = TYPE_STRING; break; #if HAVE_WCHAR_T case 'S': type = TYPE_WIDE_STRING; c = 's'; break; #endif case 'p': type = TYPE_POINTER; break; case 'n': #if HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_COUNT_LONGLONGINT_POINTER; else #endif /* If 'long long' exists and is the same as 'long', we parse "lln" into TYPE_COUNT_LONGINT_POINTER. */ if (flags >= 8) type = TYPE_COUNT_LONGINT_POINTER; else if (flags & 2) type = TYPE_COUNT_SCHAR_POINTER; else if (flags & 1) type = TYPE_COUNT_SHORT_POINTER; else type = TYPE_COUNT_INT_POINTER; break; #if ENABLE_UNISTDIO /* The unistdio extensions. */ case 'U': if (flags >= 16) type = TYPE_U32_STRING; else if (flags >= 8) type = TYPE_U16_STRING; else type = TYPE_U8_STRING; break; #endif case '%': type = TYPE_NONE; break; default: /* Unknown conversion character. */ goto error; } } if (type != TYPE_NONE) { dp->arg_index = arg_index; if (dp->arg_index == ARG_NONE) { dp->arg_index = arg_posn++; if (dp->arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->arg_index, type); } dp->conversion = c; dp->dir_end = cp; } d->count++; if (d->count >= d_allocated) { size_t memory_size; DIRECTIVE *memory; d_allocated = xtimes (d_allocated, 2); memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ goto out_of_memory; memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir ? realloc (d->dir, memory_size) : malloc (memory_size)); if (memory == NULL) /* Out of memory. */ goto out_of_memory; if (d->dir == d->direct_alloc_dir) memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE)); d->dir = memory; } } #if CHAR_T_ONLY_ASCII else if (!c_isascii (c)) { /* Non-ASCII character. Not supported. */ goto error; } #endif } d->dir[d->count].dir_start = cp; d->max_width_length = max_width_length; d->max_precision_length = max_precision_length; return 0; error: if (a->arg != a->direct_alloc_arg) free (a->arg); if (d->dir != d->direct_alloc_dir) free (d->dir); errno = EINVAL; return -1; out_of_memory: if (a->arg != a->direct_alloc_arg) free (a->arg); if (d->dir != d->direct_alloc_dir) free (d->dir); errno = ENOMEM; return -1; } #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef CHAR_T_ONLY_ASCII #undef CHAR_T ttfautohint-1.8.1/gnulib/src/vasnprintf.c0000644000175000001440000066634213222450623020360 0ustar00wlusers00000000000000/* vsprintf with automatic memory allocation. Copyright (C) 1999, 2002-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ /* This file can be parametrized with the following macros: VASNPRINTF The name of the function being defined. FCHAR_T The element type of the format string. DCHAR_T The element type of the destination (result) string. FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. MUST be set if FCHAR_T and DCHAR_T are not the same type. DIRECTIVE Structure denoting a format directive. Depends on FCHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on FCHAR_T. PRINTF_PARSE Function that parses a format string. Depends on FCHAR_T. DCHAR_CPY memcpy like function for DCHAR_T[] arrays. DCHAR_SET memset like function for DCHAR_T[] arrays. DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. SNPRINTF The system's snprintf (or similar) function. This may be either snprintf or swprintf. TCHAR_T The element type of the argument and result string of the said SNPRINTF function. This may be either char or wchar_t. The code exploits that sizeof (TCHAR_T) | sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. */ /* Tell glibc's to provide a prototype for snprintf(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifndef VASNPRINTF # include #endif #ifndef IN_LIBINTL # include #endif /* Specification. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "vasnwprintf.h" # else # include "vasnprintf.h" # endif #endif #include /* localeconv() */ #include /* snprintf(), sprintf() */ #include /* abort(), malloc(), realloc(), free() */ #include /* memcpy(), strlen() */ #include /* errno */ #include /* CHAR_BIT */ #include /* DBL_MAX_EXP, LDBL_MAX_EXP */ #if HAVE_NL_LANGINFO # include #endif #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "wprintf-parse.h" # else # include "printf-parse.h" # endif #endif /* Checked size_t computations. */ #include "xsize.h" #include "verify.h" #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL # include # include "float+.h" #endif #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL # include # include "isnand-nolibm.h" #endif #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL # include # include "isnanl-nolibm.h" # include "fpucw.h" #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL # include # include "isnand-nolibm.h" # include "printf-frexp.h" #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL # include # include "isnanl-nolibm.h" # include "printf-frexpl.h" # include "fpucw.h" #endif #ifndef FALLTHROUGH # if __GNUC__ < 7 # define FALLTHROUGH ((void) 0) # else # define FALLTHROUGH __attribute__ ((__fallthrough__)) # endif #endif /* Default parameters. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # define VASNPRINTF vasnwprintf # define FCHAR_T wchar_t # define DCHAR_T wchar_t # define TCHAR_T wchar_t # define DCHAR_IS_TCHAR 1 # define DIRECTIVE wchar_t_directive # define DIRECTIVES wchar_t_directives # define PRINTF_PARSE wprintf_parse # define DCHAR_CPY wmemcpy # define DCHAR_SET wmemset # else # define VASNPRINTF vasnprintf # define FCHAR_T char # define DCHAR_T char # define TCHAR_T char # define DCHAR_IS_TCHAR 1 # define DIRECTIVE char_directive # define DIRECTIVES char_directives # define PRINTF_PARSE printf_parse # define DCHAR_CPY memcpy # define DCHAR_SET memset # endif #endif #if WIDE_CHAR_VERSION /* TCHAR_T is wchar_t. */ # define USE_SNPRINTF 1 # if HAVE_DECL__SNWPRINTF /* On Windows, the function swprintf() has a different signature than on Unix; we use the function _snwprintf() or - on mingw - snwprintf() instead. The mingw function snwprintf() has fewer bugs than the MSVCRT function _snwprintf(), so prefer that. */ # if defined __MINGW32__ # define SNPRINTF snwprintf # else # define SNPRINTF _snwprintf # define USE_MSVC__SNPRINTF 1 # endif # else /* Unix. */ # define SNPRINTF swprintf # endif #else /* TCHAR_T is char. */ /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. But don't use it on BeOS, since BeOS snprintf produces no output if the size argument is >= 0x3000000. Also don't use it on Linux libc5, since there snprintf with size = 1 writes any output without bounds, like sprintf. */ # if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) # define USE_SNPRINTF 1 # else # define USE_SNPRINTF 0 # endif # if HAVE_DECL__SNPRINTF /* Windows. The mingw function snprintf() has fewer bugs than the MSVCRT function _snprintf(), so prefer that. */ # if defined __MINGW32__ # define SNPRINTF snprintf /* Here we need to call the native snprintf, not rpl_snprintf. */ # undef snprintf # else /* MSVC versions < 14 did not have snprintf, only _snprintf. */ # define SNPRINTF _snprintf # define USE_MSVC__SNPRINTF 1 # endif # else /* Unix. */ # define SNPRINTF snprintf /* Here we need to call the native snprintf, not rpl_snprintf. */ # undef snprintf # endif #endif /* Here we need to call the native sprintf, not rpl_sprintf. */ #undef sprintf /* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" warnings in this file. Use -Dlint to suppress them. */ #if defined GCC_LINT || defined lint # define IF_LINT(Code) Code #else # define IF_LINT(Code) /* empty */ #endif /* Avoid some warnings from "gcc -Wshadow". This file doesn't use the exp() and remainder() functions. */ #undef exp #define exp expo #undef remainder #define remainder rem #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && !WIDE_CHAR_VERSION # if (HAVE_STRNLEN && !defined _AIX) # define local_strnlen strnlen # else # ifndef local_strnlen_defined # define local_strnlen_defined 1 static size_t local_strnlen (const char *string, size_t maxlen) { const char *end = memchr (string, '\0', maxlen); return end ? (size_t) (end - string) : maxlen; } # endif # endif #endif #if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T # if HAVE_WCSLEN # define local_wcslen wcslen # else /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid a dependency towards this library, here is a local substitute. Define this substitute only once, even if this file is included twice in the same compilation unit. */ # ifndef local_wcslen_defined # define local_wcslen_defined 1 static size_t local_wcslen (const wchar_t *s) { const wchar_t *ptr; for (ptr = s; *ptr != (wchar_t) 0; ptr++) ; return ptr - s; } # endif # endif #endif #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && HAVE_WCHAR_T && WIDE_CHAR_VERSION # if HAVE_WCSNLEN # define local_wcsnlen wcsnlen # else # ifndef local_wcsnlen_defined # define local_wcsnlen_defined 1 static size_t local_wcsnlen (const wchar_t *s, size_t maxlen) { const wchar_t *ptr; for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) ; return ptr - s; } # endif # endif #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL /* Determine the decimal-point character according to the current locale. */ # ifndef decimal_point_char_defined # define decimal_point_char_defined 1 static char decimal_point_char (void) { const char *point; /* Determine it in a multithread-safe way. We know nl_langinfo is multithread-safe on glibc systems and Mac OS X systems, but is not required to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. localeconv() is rarely multithread-safe. */ # if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) point = nl_langinfo (RADIXCHAR); # elif 1 char pointbuf[5]; sprintf (pointbuf, "%#.0f", 1.0); point = &pointbuf[1]; # else point = localeconv () -> decimal_point; # endif /* The decimal point is always a single byte: either '.' or ','. */ return (point[0] != '\0' ? point[0] : '.'); } # endif #endif #if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ static int is_infinite_or_zero (double x) { return isnand (x) || x + x == x; } #endif #if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ static int is_infinite_or_zerol (long double x) { return isnanl (x) || x + x == x; } #endif #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL /* Converting 'long double' to decimal without rare rounding bugs requires real bignums. We use the naming conventions of GNU gmp, but vastly simpler (and slower) algorithms. */ typedef unsigned int mp_limb_t; # define GMP_LIMB_BITS 32 verify (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS); typedef unsigned long long mp_twolimb_t; # define GMP_TWOLIMB_BITS 64 verify (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS); /* Representation of a bignum >= 0. */ typedef struct { size_t nlimbs; mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ } mpn_t; /* Compute the product of two bignums >= 0. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * multiply (mpn_t src1, mpn_t src2, mpn_t *dest) { const mp_limb_t *p1; const mp_limb_t *p2; size_t len1; size_t len2; if (src1.nlimbs <= src2.nlimbs) { len1 = src1.nlimbs; p1 = src1.limbs; len2 = src2.nlimbs; p2 = src2.limbs; } else { len1 = src2.nlimbs; p1 = src2.limbs; len2 = src1.nlimbs; p2 = src1.limbs; } /* Now 0 <= len1 <= len2. */ if (len1 == 0) { /* src1 or src2 is zero. */ dest->nlimbs = 0; dest->limbs = (mp_limb_t *) malloc (1); } else { /* Here 1 <= len1 <= len2. */ size_t dlen; mp_limb_t *dp; size_t k, i, j; dlen = len1 + len2; dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); if (dp == NULL) return NULL; for (k = len2; k > 0; ) dp[--k] = 0; for (i = 0; i < len1; i++) { mp_limb_t digit1 = p1[i]; mp_twolimb_t carry = 0; for (j = 0; j < len2; j++) { mp_limb_t digit2 = p2[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; carry += dp[i + j]; dp[i + j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } dp[i + len2] = (mp_limb_t) carry; } /* Normalise. */ while (dlen > 0 && dp[dlen - 1] == 0) dlen--; dest->nlimbs = dlen; dest->limbs = dp; } return dest->limbs; } /* Compute the quotient of a bignum a >= 0 and a bignum b > 0. a is written as a = q * b + r with 0 <= r < b. q is the quotient, r the remainder. Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, q is incremented. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * divide (mpn_t a, mpn_t b, mpn_t *q) { /* Algorithm: First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). If m=n=1, perform a single-precision division: r:=0, j:=m, while j>0 do {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r=n>1, perform a multiple-precision division: We have a/b < beta^(m-n+1). s:=intDsize-1-(highest bit in b[n-1]), 0<=s=beta/2. For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} Compute q* : q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). In case of overflow (q* >= beta) set q* := beta-1. Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] and c3 := b[n-2] * q*. {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow occurred. Furthermore 0 <= c3 < beta^2. If there was overflow and r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, the next test can be skipped.} While c3 > c2, {Here 0 <= c2 < c3 < beta^2} Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. If q* > 0: Put r := r - b * q* * beta^j. In detail: [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. hence: u:=0, for i:=0 to n-1 do u := u + q* * b[i], r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), u:=u div beta (+ 1, if carry in subtraction) r[n+j]:=r[n+j]-u. {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 < q* + 1 <= beta, the carry u does not overflow.} If a negative carry occurs, put q* := q* - 1 and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. Set q[j] := q*. Normalise [q[m-n],..,q[0]]; this yields the quotient q. Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the rest r. The room for q[j] can be allocated at the memory location of r[n+j]. Finally, round-to-even: Shift r left by 1 bit. If r > b or if r = b and q[0] is odd, q := q+1. */ const mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; const mp_limb_t *b_ptr = b.limbs; size_t b_len = b.nlimbs; mp_limb_t *roomptr; mp_limb_t *tmp_roomptr = NULL; mp_limb_t *q_ptr; size_t q_len; mp_limb_t *r_ptr; size_t r_len; /* Allocate room for a_len+2 digits. (Need a_len+1 digits for the real division and 1 more digit for the final rounding of q.) */ roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); if (roomptr == NULL) return NULL; /* Normalise a. */ while (a_len > 0 && a_ptr[a_len - 1] == 0) a_len--; /* Normalise b. */ for (;;) { if (b_len == 0) /* Division by zero. */ abort (); if (b_ptr[b_len - 1] == 0) b_len--; else break; } /* Here m = a_len >= 0 and n = b_len > 0. */ if (a_len < b_len) { /* m beta^(m-2) <= a/b < beta^m */ r_ptr = roomptr; q_ptr = roomptr + 1; { mp_limb_t den = b_ptr[0]; mp_limb_t remainder = 0; const mp_limb_t *sourceptr = a_ptr + a_len; mp_limb_t *destptr = q_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; *--destptr = num / den; remainder = num % den; } /* Normalise and store r. */ if (remainder > 0) { r_ptr[0] = remainder; r_len = 1; } else r_len = 0; /* Normalise q. */ q_len = a_len; if (q_ptr[q_len - 1] == 0) q_len--; } } else { /* n>1: multiple precision division. beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> beta^(m-n-1) <= a/b < beta^(m-n+1). */ /* Determine s. */ size_t s; { mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ /* Determine s = GMP_LIMB_BITS - integer_length (msd). Code copied from gnulib's integer_length.c. */ # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) s = __builtin_clz (msd); # else # if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT if (GMP_LIMB_BITS <= DBL_MANT_BIT) { /* Use 'double' operations. Assumes an IEEE 754 'double' implementation. */ # define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) # define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1) # define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { double value; unsigned int word[NWORDS]; } m; /* Use a single integer to floating-point conversion. */ m.value = msd; s = GMP_LIMB_BITS - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK) - DBL_EXP_BIAS); } else # undef NWORDS # endif { s = 31; if (msd >= 0x10000) { msd = msd >> 16; s -= 16; } if (msd >= 0x100) { msd = msd >> 8; s -= 8; } if (msd >= 0x10) { msd = msd >> 4; s -= 4; } if (msd >= 0x4) { msd = msd >> 2; s -= 2; } if (msd >= 0x2) { msd = msd >> 1; s -= 1; } } # endif } /* 0 <= s < GMP_LIMB_BITS. Copy b, shifting it left by s bits. */ if (s > 0) { tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); if (tmp_roomptr == NULL) { free (roomptr); return NULL; } { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = tmp_roomptr; mp_twolimb_t accu = 0; size_t count; for (count = b_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } /* accu must be zero, since that was how s was determined. */ if (accu != 0) abort (); } b_ptr = tmp_roomptr; } /* Copy a, shifting it left by s bits, yields r. Memory layout: At the beginning: r = roomptr[0..a_len], at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ r_ptr = roomptr; if (s == 0) { memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); r_ptr[a_len] = 0; } else { const mp_limb_t *sourceptr = a_ptr; mp_limb_t *destptr = r_ptr; mp_twolimb_t accu = 0; size_t count; for (count = a_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } *destptr++ = (mp_limb_t) accu; } q_ptr = roomptr + b_len; q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ { size_t j = a_len - b_len; /* m-n */ mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; /* Division loop, traversed m-n+1 times. j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ for (;;) { mp_limb_t q_star; mp_limb_t c1; if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ { /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ mp_twolimb_t num = ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) | r_ptr[j + b_len - 1]; q_star = num / b_msd; c1 = num % b_msd; } else { /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) {<= beta !}. If yes, jump directly to the subtraction loop. (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ if (r_ptr[j + b_len] > b_msd || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) /* r[j+n] >= b[n-1]+1 or r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a carry. */ goto subtract; } /* q_star = q*, c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, 0, decrease it by b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 this can happen only twice. */ if (c3 > c2) { q_star = q_star - 1; /* q* := q* - 1 */ if (c3 - c2 > b_msdd) q_star = q_star - 1; /* q* := q* - 1 */ } } if (q_star > 0) subtract: { /* Subtract r := r - b * q* * beta^j. */ mp_limb_t cr; { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_twolimb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { /* Here 0 <= carry <= q*. */ carry = carry + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ + (mp_limb_t) ~(*destptr); /* Here 0 <= carry <= beta*q* + beta-1. */ *destptr++ = ~(mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; /* <= q* */ } cr = (mp_limb_t) carry; } /* Subtract cr from r_ptr[j + b_len], then forget about r_ptr[j + b_len]. */ if (cr > r_ptr[j + b_len]) { /* Subtraction gave a carry. */ q_star = q_star - 1; /* q* := q* - 1 */ /* Add b back. */ { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_limb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { mp_limb_t source1 = *sourceptr++; mp_limb_t source2 = *destptr; *destptr++ = source1 + source2 + carry; carry = (carry ? source1 >= (mp_limb_t) ~source2 : source1 > (mp_limb_t) ~source2); } } /* Forget about the carry and about r[j+n]. */ } } /* q* is determined. Store it as q[j]. */ q_ptr[j] = q_star; if (j == 0) break; j--; } } r_len = b_len; /* Normalise q. */ if (q_ptr[q_len - 1] == 0) q_len--; # if 0 /* Not needed here, since we need r only to compare it with b/2, and b is shifted left by s bits. */ /* Shift r right by s bits. */ if (s > 0) { mp_limb_t ptr = r_ptr + r_len; mp_twolimb_t accu = 0; size_t count; for (count = r_len; count > 0; count--) { accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); } } # endif /* Normalise r. */ while (r_len > 0 && r_ptr[r_len - 1] == 0) r_len--; } /* Compare r << 1 with b. */ if (r_len > b_len) goto increment_q; { size_t i; for (i = b_len;;) { mp_limb_t r_i = (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) | (i < r_len ? r_ptr[i] << 1 : 0); mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); if (r_i > b_i) goto increment_q; if (r_i < b_i) goto keep_q; if (i == 0) break; i--; } } if (q_len > 0 && ((q_ptr[0] & 1) != 0)) /* q is odd. */ increment_q: { size_t i; for (i = 0; i < q_len; i++) if (++(q_ptr[i]) != 0) goto keep_q; q_ptr[q_len++] = 1; } keep_q: if (tmp_roomptr != NULL) free (tmp_roomptr); q->limbs = q_ptr; q->nlimbs = q_len; return roomptr; } /* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal representation. Destroys the contents of a. Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * convert_to_decimal (mpn_t a, size_t extra_zeroes) { mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes)); if (c_ptr != NULL) { char *d_ptr = c_ptr; for (; extra_zeroes > 0; extra_zeroes--) *d_ptr++ = '0'; while (a_len > 0) { /* Divide a by 10^9, in-place. */ mp_limb_t remainder = 0; mp_limb_t *ptr = a_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; *ptr = num / 1000000000; remainder = num % 1000000000; } /* Store the remainder as 9 decimal digits. */ for (count = 9; count > 0; count--) { *d_ptr++ = '0' + (remainder % 10); remainder = remainder / 10; } /* Normalize a. */ if (a_ptr[a_len - 1] == 0) a_len--; } /* Remove leading zeroes. */ while (d_ptr > c_ptr && d_ptr[-1] == '0') d_ptr--; /* But keep at least one zero. */ if (d_ptr == c_ptr) *d_ptr++ = '0'; /* Terminate the string. */ *d_ptr = '\0'; } return c_ptr; } # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_long_double (long double x, int *ep, mpn_t *mp) { mpn_t m; int exp; long double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'long double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess precision. */ if (!(y == 0.0L)) abort (); # endif /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - LDBL_MANT_BIT; return m.limbs; } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_double (double x, int *ep, mpn_t *mp) { mpn_t m; int exp; double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } if (!(y == 0.0)) abort (); /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - DBL_MANT_BIT; return m.limbs; } # endif /* Assuming x = 2^e * m is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) { int s; size_t extra_zeroes; unsigned int abs_n; unsigned int abs_s; mp_limb_t *pow5_ptr; size_t pow5_len; unsigned int s_limbs; unsigned int s_bits; mpn_t pow5; mpn_t z; void *z_memory; char *digits; if (memory == NULL) return NULL; /* x = 2^e * m, hence y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) = round (2^s * 5^n * m). */ s = e + n; extra_zeroes = 0; /* Factor out a common power of 10 if possible. */ if (s > 0 && n > 0) { extra_zeroes = (s < n ? s : n); s -= extra_zeroes; n -= extra_zeroes; } /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. Before converting to decimal, we need to compute z = round (2^s * 5^n * m). */ /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same sign. 2.322 is slightly larger than log(5)/log(2). */ abs_n = (n >= 0 ? n : -n); abs_s = (s >= 0 ? s : -s); pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 + abs_s / GMP_LIMB_BITS + 1) * sizeof (mp_limb_t)); if (pow5_ptr == NULL) { free (memory); return NULL; } /* Initialize with 1. */ pow5_ptr[0] = 1; pow5_len = 1; /* Multiply with 5^|n|. */ if (abs_n > 0) { static mp_limb_t const small_pow5[13 + 1] = { 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, 48828125, 244140625, 1220703125 }; unsigned int n13; for (n13 = 0; n13 <= abs_n; n13 += 13) { mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; size_t j; mp_twolimb_t carry = 0; for (j = 0; j < pow5_len; j++) { mp_limb_t digit2 = pow5_ptr[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; pow5_ptr[j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } if (carry > 0) pow5_ptr[pow5_len++] = (mp_limb_t) carry; } } s_limbs = abs_s / GMP_LIMB_BITS; s_bits = abs_s % GMP_LIMB_BITS; if (n >= 0 ? s >= 0 : s <= 0) { /* Multiply with 2^|s|. */ if (s_bits > 0) { mp_limb_t *ptr = pow5_ptr; mp_twolimb_t accu = 0; size_t count; for (count = pow5_len; count > 0; count--) { accu += (mp_twolimb_t) *ptr << s_bits; *ptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) { *ptr = (mp_limb_t) accu; pow5_len++; } } if (s_limbs > 0) { size_t count; for (count = pow5_len; count > 0;) { count--; pow5_ptr[s_limbs + count] = pow5_ptr[count]; } for (count = s_limbs; count > 0;) { count--; pow5_ptr[count] = 0; } pow5_len += s_limbs; } pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* Multiply m with pow5. No division needed. */ z_memory = multiply (m, pow5, &z); } else { /* Divide m by pow5 and round. */ z_memory = divide (m, pow5, &z); } } else { pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* n >= 0, s < 0. Multiply m with pow5, then divide by 2^|s|. */ mpn_t numerator; mpn_t denominator; void *tmp_memory; tmp_memory = multiply (m, pow5, &numerator); if (tmp_memory == NULL) { free (pow5_ptr); free (memory); return NULL; } /* Construct 2^|s|. */ { mp_limb_t *ptr = pow5_ptr + pow5_len; size_t i; for (i = 0; i < s_limbs; i++) ptr[i] = 0; ptr[s_limbs] = (mp_limb_t) 1 << s_bits; denominator.limbs = ptr; denominator.nlimbs = s_limbs + 1; } z_memory = divide (numerator, denominator, &z); free (tmp_memory); } else { /* n < 0, s > 0. Multiply m with 2^s, then divide by pow5. */ mpn_t numerator; mp_limb_t *num_ptr; num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) * sizeof (mp_limb_t)); if (num_ptr == NULL) { free (pow5_ptr); free (memory); return NULL; } { mp_limb_t *destptr = num_ptr; { size_t i; for (i = 0; i < s_limbs; i++) *destptr++ = 0; } if (s_bits > 0) { const mp_limb_t *sourceptr = m.limbs; mp_twolimb_t accu = 0; size_t count; for (count = m.nlimbs; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s_bits; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) *destptr++ = (mp_limb_t) accu; } else { const mp_limb_t *sourceptr = m.limbs; size_t count; for (count = m.nlimbs; count > 0; count--) *destptr++ = *sourceptr++; } numerator.limbs = num_ptr; numerator.nlimbs = destptr - num_ptr; } z_memory = divide (numerator, pow5, &z); free (num_ptr); } } free (pow5_ptr); free (memory); /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ if (z_memory == NULL) return NULL; digits = convert_to_decimal (z, extra_zeroes); free (z_memory); return digits; } # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_long_double (long double x, int n) { int e IF_LINT(= 0); mpn_t m; void *memory = decode_long_double (x, &e, &m); return scale10_round_decimal_decoded (e, m, memory, n); } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_double (double x, int n) { int e IF_LINT(= 0); mpn_t m; void *memory = decode_double (x, &e, &m); return scale10_round_decimal_decoded (e, m, memory, n); } # endif # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10l (long double x) { int exp; long double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); if (y == 0.0L) return INT_MIN; if (y < 0.5L) { while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0L / (1 << 16))) { y *= 1.0L * (1 << 16); exp -= 16; } if (y < (1.0L / (1 << 8))) { y *= 1.0L * (1 << 8); exp -= 8; } if (y < (1.0L / (1 << 4))) { y *= 1.0L * (1 << 4); exp -= 4; } if (y < (1.0L / (1 << 2))) { y *= 1.0L * (1 << 2); exp -= 2; } if (y < (1.0L / (1 << 1))) { y *= 1.0L * (1 << 1); exp -= 1; } } if (!(y >= 0.5L && y < 1.0L)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) Four terms are enough to get an approximation with error < 10^-7. */ l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10 (double x) { int exp; double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); if (y == 0.0) return INT_MIN; if (y < 0.5) { while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0 / (1 << 16))) { y *= 1.0 * (1 << 16); exp -= 16; } if (y < (1.0 / (1 << 8))) { y *= 1.0 * (1 << 8); exp -= 8; } if (y < (1.0 / (1 << 4))) { y *= 1.0 * (1 << 4); exp -= 4; } if (y < (1.0 / (1 << 2))) { y *= 1.0 * (1 << 2); exp -= 2; } if (y < (1.0 / (1 << 1))) { y *= 1.0 * (1 << 1); exp -= 1; } } if (!(y >= 0.5 && y < 1.0)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) Four terms are enough to get an approximation with error < 10^-7. */ l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif /* Tests whether a string of digits consists of exactly PRECISION zeroes and a single '1' digit. */ static int is_borderline (const char *digits, size_t precision) { for (; precision > 0; precision--, digits++) if (*digits != '0') return 0; if (*digits != '1') return 0; digits++; return *digits == '\0'; } #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF /* Use a different function name, to make it possible that the 'wchar_t' parametrization and the 'char' parametrization get compiled in the same translation unit. */ # if WIDE_CHAR_VERSION # define MAX_ROOM_NEEDED wmax_room_needed # else # define MAX_ROOM_NEEDED max_room_needed # endif /* Returns the number of TCHAR_T units needed as temporary space for the result of sprintf or SNPRINTF of a single conversion directive. */ static size_t MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion, arg_type type, int flags, size_t width, int has_precision, size_t precision, int pad_ourselves) { size_t tmp_length; switch (conversion) { case 'd': case 'i': case 'u': # if HAVE_LONG_LONG_INT if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Multiply by 2, as an estimate for FLAG_GROUP. */ tmp_length = xsum (tmp_length, tmp_length); /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'o': # if HAVE_LONG_LONG_INT if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'x': case 'X': # if HAVE_LONG_LONG_INT if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Add 2, to account for a leading sign or alternate form. */ tmp_length = xsum (tmp_length, 2); break; case 'f': case 'F': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ else tmp_length = (unsigned int) (DBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ tmp_length = xsum (tmp_length, precision); break; case 'e': case 'E': case 'g': case 'G': tmp_length = 12; /* sign, decimal point, exponent etc. */ tmp_length = xsum (tmp_length, precision); break; case 'a': case 'A': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (DBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); break; case 'c': # if HAVE_WINT_T && !WIDE_CHAR_VERSION if (type == TYPE_WIDE_CHAR) tmp_length = MB_CUR_MAX; else # endif tmp_length = 1; break; case 's': # if HAVE_WCHAR_T if (type == TYPE_WIDE_STRING) { # if WIDE_CHAR_VERSION /* ISO C says about %ls in fwprintf: "If the precision is not specified or is greater than the size of the array, the array shall contain a null wide character." So if there is a precision, we must not use wcslen. */ const wchar_t *arg = ap->arg[arg_index].a.a_wide_string; if (has_precision) tmp_length = local_wcsnlen (arg, precision); else tmp_length = local_wcslen (arg); # else /* ISO C says about %ls in fprintf: "If a precision is specified, no more than that many bytes are written (including shift sequences, if any), and the array shall contain a null wide character if, to equal the multibyte character sequence length given by the precision, the function would need to access a wide character one past the end of the array." So if there is a precision, we must not use wcslen. */ /* This case has already been handled separately in VASNPRINTF. */ abort (); # endif } else # endif { # if WIDE_CHAR_VERSION /* ISO C says about %s in fwprintf: "If the precision is not specified or is greater than the size of the converted array, the converted array shall contain a null wide character." So if there is a precision, we must not use strlen. */ /* This case has already been handled separately in VASNPRINTF. */ abort (); # else /* ISO C says about %s in fprintf: "If the precision is not specified or greater than the size of the array, the array shall contain a null character." So if there is a precision, we must not use strlen. */ const char *arg = ap->arg[arg_index].a.a_string; if (has_precision) tmp_length = local_strnlen (arg, precision); else tmp_length = strlen (arg); # endif } break; case 'p': tmp_length = (unsigned int) (sizeof (void *) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1 /* turn floor into ceil */ + 2; /* account for leading 0x */ break; default: abort (); } if (!pad_ourselves) { # if ENABLE_UNISTDIO /* Padding considers the number of characters, therefore the number of elements after padding may be > max (tmp_length, width) but is certainly <= tmp_length + width. */ tmp_length = xsum (tmp_length, width); # else /* Padding considers the number of elements, says POSIX. */ if (tmp_length < width) tmp_length = width; # endif } tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ return tmp_length; } #endif DCHAR_T * VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, const FCHAR_T *format, va_list args) { DIRECTIVES d; arguments a; if (PRINTF_PARSE (format, &d, &a) < 0) /* errno is already set. */ return NULL; #define CLEANUP() \ if (d.dir != d.direct_alloc_dir) \ free (d.dir); \ if (a.arg != a.direct_alloc_arg) \ free (a.arg); if (PRINTF_FETCHARGS (args, &a) < 0) { CLEANUP (); errno = EINVAL; return NULL; } { size_t buf_neededlength; TCHAR_T *buf; TCHAR_T *buf_malloced; const FCHAR_T *cp; size_t i; DIRECTIVE *dp; /* Output string accumulator. */ DCHAR_T *result; size_t allocated; size_t length; /* Allocate a small buffer that will hold a directive passed to sprintf or snprintf. */ buf_neededlength = xsum4 (7, d.max_width_length, d.max_precision_length, 6); #if HAVE_ALLOCA if (buf_neededlength < 4000 / sizeof (TCHAR_T)) { buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); buf_malloced = NULL; } else #endif { size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); if (size_overflow_p (buf_memsize)) goto out_of_memory_1; buf = (TCHAR_T *) malloc (buf_memsize); if (buf == NULL) goto out_of_memory_1; buf_malloced = buf; } if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ /* Ensures that allocated >= needed. Aborts through a jump to out_of_memory if needed is SIZE_MAX or otherwise too big. */ #define ENSURE_ALLOCATION(needed) \ if ((needed) > allocated) \ { \ size_t memory_size; \ DCHAR_T *memory; \ \ allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ if ((needed) > allocated) \ allocated = (needed); \ memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ if (size_overflow_p (memory_size)) \ goto out_of_memory; \ if (result == resultbuf || result == NULL) \ memory = (DCHAR_T *) malloc (memory_size); \ else \ memory = (DCHAR_T *) realloc (result, memory_size); \ if (memory == NULL) \ goto out_of_memory; \ if (result == resultbuf && length > 0) \ DCHAR_CPY (memory, result, length); \ result = memory; \ } for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) { if (cp != dp->dir_start) { size_t n = dp->dir_start - cp; size_t augmented_length = xsum (length, n); ENSURE_ALLOCATION (augmented_length); /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we need that the format string contains only ASCII characters if FCHAR_T and DCHAR_T are not the same type. */ if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) { DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); length = augmented_length; } else { do result[length++] = *cp++; while (--n > 0); } } if (i == d.count) break; /* Execute a single directive. */ if (dp->conversion == '%') { size_t augmented_length; if (!(dp->arg_index == ARG_NONE)) abort (); augmented_length = xsum (length, 1); ENSURE_ALLOCATION (augmented_length); result[length] = '%'; length = augmented_length; } else { if (!(dp->arg_index != ARG_NONE)) abort (); if (dp->conversion == 'n') { switch (a.arg[dp->arg_index].type) { case TYPE_COUNT_SCHAR_POINTER: *a.arg[dp->arg_index].a.a_count_schar_pointer = length; break; case TYPE_COUNT_SHORT_POINTER: *a.arg[dp->arg_index].a.a_count_short_pointer = length; break; case TYPE_COUNT_INT_POINTER: *a.arg[dp->arg_index].a.a_count_int_pointer = length; break; case TYPE_COUNT_LONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longint_pointer = length; break; #if HAVE_LONG_LONG_INT case TYPE_COUNT_LONGLONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; break; #endif default: abort (); } } #if ENABLE_UNISTDIO /* The unistdio extensions. */ else if (dp->conversion == 'U') { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } switch (type) { case TYPE_U8_STRING: { const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; const uint8_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u8_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT8_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-8 to locale encoding. */ converted = u8_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-8 to UTF-16/UTF-32. */ converted = U8_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U16_STRING: { const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; const uint16_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u16_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT16_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-16 to locale encoding. */ converted = u16_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-16 to UTF-8/UTF-32. */ converted = U16_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U32_STRING: { const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; const uint32_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u32_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT32_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-32 to locale encoding. */ converted = u32_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-32 to UTF-8/UTF-16. */ converted = U32_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; default: abort (); } } #endif #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T else if (dp->conversion == 's' # if WIDE_CHAR_VERSION && a.arg[dp->arg_index].type != TYPE_WIDE_STRING # else && a.arg[dp->arg_index].type == TYPE_WIDE_STRING # endif ) { /* The normal handling of the 's' directive below requires allocating a temporary buffer. The determination of its length (tmp_length), in the case when a precision is specified, below requires a conversion between a char[] string and a wchar_t[] wide string. It could be done, but we have no guarantee that the implementation of sprintf will use the exactly same algorithm. Without this guarantee, it is possible to have buffer overrun bugs. In order to avoid such bugs, we implement the entire processing of the 's' directive ourselves. */ int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } # if WIDE_CHAR_VERSION /* %s in vasnwprintf. See the specification of fwprintf. */ { const char *arg = a.arg[dp->arg_index].a.a_string; const char *arg_end; size_t characters; if (has_precision) { /* Use only as many bytes as needed to produce PRECISION wide characters, from the left. */ # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count; # if HAVE_MBRTOWC count = mbrlen (arg_end, MB_CUR_MAX, &state); # else count = mblen (arg_end, MB_CUR_MAX); # endif if (count == 0) /* Found the terminating NUL. */ break; if (count < 0) { /* Invalid or incomplete multibyte character. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of wide characters. */ # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (;;) { int count; # if HAVE_MBRTOWC count = mbrlen (arg_end, MB_CUR_MAX, &state); # else count = mblen (arg_end, MB_CUR_MAX); # endif if (count == 0) /* Found the terminating NUL. */ break; if (count < 0) { /* Invalid or incomplete multibyte character. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } if (has_precision || has_width) { /* We know the number of wide characters in advance. */ size_t remaining; # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; remaining--) { wchar_t wc; int count; # if HAVE_MBRTOWC count = mbrtowc (&wc, arg, arg_end - arg, &state); # else count = mbtowc (&wc, arg, arg_end - arg); # endif if (count <= 0) /* mbrtowc not consistent with mbrlen, or mbtowc not consistent with mblen. */ abort (); result[length++] = wc; arg += count; } if (!(arg == arg_end)) abort (); } else { # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif while (arg < arg_end) { wchar_t wc; int count; # if HAVE_MBRTOWC count = mbrtowc (&wc, arg, arg_end - arg, &state); # else count = mbtowc (&wc, arg, arg_end - arg); # endif if (count <= 0) /* mbrtowc not consistent with mbrlen, or mbtowc not consistent with mblen. */ abort (); ENSURE_ALLOCATION (xsum (length, 1)); result[length++] = wc; arg += count; } } if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } # else /* %ls in vasnprintf. See the specification of fprintf. */ { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; const wchar_t *arg_end; size_t characters; # if !DCHAR_IS_TCHAR /* This code assumes that TCHAR_T is 'char'. */ verify (sizeof (TCHAR_T) == 1); TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t tmpdst_len; # endif size_t w; if (has_precision) { /* Use only as many wide characters as needed to produce at most PRECISION bytes, from the left. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; while (precision > 0) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg_end == 0) /* Found the terminating null wide character. */ break; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg_end, &state); # else count = wctomb (cbuf, *arg_end); # endif if (count < 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } if (precision < count) break; arg_end++; characters += count; precision -= count; } } # if DCHAR_IS_TCHAR else if (has_width) # else else # endif { /* Use the entire string, and count the number of bytes. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (;;) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg_end == 0) /* Found the terminating null wide character. */ break; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg_end, &state); # else count = wctomb (cbuf, *arg_end); # endif if (count < 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end++; characters += count; } } # if DCHAR_IS_TCHAR else { /* Use the entire string. */ arg_end = arg + local_wcslen (arg); /* The number of bytes doesn't matter. */ characters = 0; } # endif # if !DCHAR_IS_TCHAR /* Convert the string into a piece of temporary memory. */ tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); if (tmpsrc == NULL) goto out_of_memory; { TCHAR_T *tmpptr = tmpsrc; size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif for (remaining = characters; remaining > 0; ) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg, &state); # else count = wctomb (cbuf, *arg); # endif if (count <= 0) /* Inconsistency. */ abort (); memcpy (tmpptr, cbuf, count); tmpptr += count; arg++; remaining -= count; } if (!(arg == arg_end)) abort (); } /* Convert from TCHAR_T[] to DCHAR_T[]. */ tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, characters, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) { int saved_errno = errno; free (tmpsrc); if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } free (tmpsrc); # endif if (has_width) { # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, characters); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = characters; # endif } else /* w doesn't matter. */ w = 0; if (w < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_TCHAR if (has_precision || has_width) { /* We know the number of bytes in advance. */ size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; ) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg, &state); # else count = wctomb (cbuf, *arg); # endif if (count <= 0) /* Inconsistency. */ abort (); memcpy (result + length, cbuf, count); length += count; arg++; remaining -= count; } if (!(arg == arg_end)) abort (); } else { # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif while (arg < arg_end) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg, &state); # else count = wctomb (cbuf, *arg); # endif if (count <= 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } ENSURE_ALLOCATION (xsum (length, count)); memcpy (result + length, cbuf, count); length += count; arg++; } } # else ENSURE_ALLOCATION (xsum (length, tmpdst_len)); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); length += tmpdst_len; # endif if (w < width && (dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } # endif } #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL else if ((dp->conversion == 'a' || dp->conversion == 'A') # if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # endif # if NEED_PRINTF_LONG_DOUBLE || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # endif ) # endif ) { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; size_t width; int has_precision; size_t precision; size_t tmp_length; size_t count; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* Allocate a temporary buffer of sufficient size. */ if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) ((LDBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) ((DBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; if (type == TYPE_LONGDOUBLE) { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; long double mantissa; if (arg > 0.0L) mantissa = printf_frexpl (arg, &exponent); else { exponent = 0; mantissa = 0.0L; } if (has_precision && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ long double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5L : tail > 0.5L) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0L; } if (tail != 0.0L) for (q = precision; q > 0; q--) tail *= 0.0625L; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0L || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0L) { mantissa *= 16.0L; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } END_LONG_DOUBLE_ROUNDING (); } # else abort (); # endif } else { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE double arg = a.arg[dp->arg_index].a.a_double; if (isnand (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; double mantissa; if (arg > 0.0) mantissa = printf_frexp (arg, &exponent); else { exponent = 0; mantissa = 0.0; } if (has_precision && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5 : tail > 0.5) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0; } if (tail != 0.0) for (q = precision; q > 0; q--) tail *= 0.0625; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0 || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0) { mantissa *= 16.0; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } } # else abort (); # endif } /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ count = p - tmp; if (count < width) { size_t pad = width - count; DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } #endif #if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL else if ((dp->conversion == 'f' || dp->conversion == 'F' || dp->conversion == 'e' || dp->conversion == 'E' || dp->conversion == 'g' || dp->conversion == 'G' || dp->conversion == 'a' || dp->conversion == 'A') && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # elif NEED_PRINTF_INFINITE_DOUBLE || (a.arg[dp->arg_index].type == TYPE_DOUBLE /* The systems (mingw) which produce wrong output for Inf, -Inf, and NaN also do so for -0.0. Therefore we treat this case here as well. */ && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) # endif # if NEED_PRINTF_LONG_DOUBLE || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # elif NEED_PRINTF_INFINITE_LONG_DOUBLE || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE /* Some systems produce wrong output for Inf, -Inf, and NaN. Some systems in this category (IRIX 5.3) also do so for -0.0. Therefore we treat this case here as well. */ && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) # endif )) { # if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) arg_type type = a.arg[dp->arg_index].type; # endif int flags = dp->flags; size_t width; size_t count; int has_precision; size_t precision; size_t tmp_length; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* POSIX specifies the default precision to be 6 for %f, %F, %e, %E, but not for %g, %G. Implementations appear to use the same default precision also for %g, %G. But for %a, %A, the default precision is 0. */ if (!has_precision) if (!(dp->conversion == 'a' || dp->conversion == 'A')) precision = 6; /* Allocate a temporary buffer of sufficient size. */ # if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); # elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); # elif NEED_PRINTF_LONG_DOUBLE tmp_length = LDBL_DIG + 1; # elif NEED_PRINTF_DOUBLE tmp_length = DBL_DIG + 1; # else tmp_length = 0; # endif if (tmp_length < precision) tmp_length = precision; # if NEED_PRINTF_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (!(isnanl (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10l (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif # if NEED_PRINTF_DOUBLE # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE if (type == TYPE_DOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { double arg = a.arg[dp->arg_index].a.a_double; if (!(isnand (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10 (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_LONG_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_long_double (arg, precision); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0L) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0L. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)precision - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ if (is_borderline (digits, precision)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_long_double (arg, (int)precision - exponent + 1); if (digits2 == NULL) { free (digits); END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } if (strlen (digits2) == precision + 1) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0L) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0L. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ if (is_borderline (digits, precision - 1)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_long_double (arg, (int)(precision - 1) - exponent + 1); if (digits2 == NULL) { free (digits); END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } if (strlen (digits2) == precision) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t ecount = exponent + 1; /* Note: count <= precision = ndigits. */ for (; ecount > 0; ecount--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t ecount = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; ecount > 0; ecount--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } free (digits); } } else abort (); # else /* arg is finite. */ if (!(arg == 0.0L)) abort (); pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else if (dp->conversion == 'e' || dp->conversion == 'E') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion; /* 'e' or 'E' */ *p++ = '+'; *p++ = '0'; *p++ = '0'; } else if (dp->conversion == 'g' || dp->conversion == 'G') { *p++ = '0'; if (flags & FLAG_ALT) { size_t ndigits = (precision > 0 ? precision - 1 : 0); *p++ = decimal_point_char (); for (; ndigits > 0; --ndigits) *p++ = '0'; } } else if (dp->conversion == 'a' || dp->conversion == 'A') { *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion - 'A' + 'P'; *p++ = '+'; *p++ = '0'; } else abort (); # endif } END_LONG_DOUBLE_ROUNDING (); } } # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE else # endif # endif # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE { double arg = a.arg[dp->arg_index].a.a_double; if (isnand (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_double (arg, precision); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)precision - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ if (is_borderline (digits, precision)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_double (arg, (int)precision - exponent + 1); if (digits2 == NULL) { free (digits); goto out_of_memory; } if (strlen (digits2) == precision + 1) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ if (is_borderline (digits, precision - 1)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_double (arg, (int)(precision - 1) - exponent + 1); if (digits2 == NULL) { free (digits); goto out_of_memory; } if (strlen (digits2) == precision) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t ecount = exponent + 1; /* Note: ecount <= precision = ndigits. */ for (; ecount > 0; ecount--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t ecount = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; ecount > 0; ecount--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } free (digits); } } else abort (); # else /* arg is finite. */ if (!(arg == 0.0)) abort (); pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else if (dp->conversion == 'e' || dp->conversion == 'E') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion; /* 'e' or 'E' */ *p++ = '+'; /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ *p++ = '0'; # endif *p++ = '0'; *p++ = '0'; } else if (dp->conversion == 'g' || dp->conversion == 'G') { *p++ = '0'; if (flags & FLAG_ALT) { size_t ndigits = (precision > 0 ? precision - 1 : 0); *p++ = decimal_point_char (); for (; ndigits > 0; --ndigits) *p++ = '0'; } } else abort (); # endif } } } # endif /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ count = p - tmp; if (count < width) { size_t pad = width - count; DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } #endif else { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int has_width; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION size_t width; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION int has_precision; size_t precision; #endif #if NEED_PRINTF_UNBOUNDED_PRECISION int prec_ourselves; #else # define prec_ourselves 0 #endif #if NEED_PRINTF_FLAG_LEFTADJUST # define pad_ourselves 1 #elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int pad_ourselves; #else # define pad_ourselves 0 #endif TCHAR_T *fbp; unsigned int prefix_count; int prefixes[2] IF_LINT (= { 0 }); int orig_errno; #if !USE_SNPRINTF size_t tmp_length; TCHAR_T tmpbuf[700]; TCHAR_T *tmp; #endif #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_width = 0; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_width = 1; #endif } #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } #endif /* Decide whether to handle the precision ourselves. */ #if NEED_PRINTF_UNBOUNDED_PRECISION switch (dp->conversion) { case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': prec_ourselves = has_precision && (precision > 0); break; default: prec_ourselves = 0; break; } #endif /* Decide whether to perform the padding ourselves. */ #if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) switch (dp->conversion) { # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need to perform the padding after this conversion. Functions with unistdio extensions perform the padding based on character count rather than element count. */ case 'c': case 's': # endif # if NEED_PRINTF_FLAG_ZERO case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': # endif pad_ourselves = 1; break; default: pad_ourselves = prec_ourselves; break; } #endif #if !USE_SNPRINTF /* Allocate a temporary buffer of sufficient size for calling sprintf. */ tmp_length = MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, flags, width, has_precision, precision, pad_ourselves); if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (TCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } #endif /* Construct the format string for calling snprintf or sprintf. */ fbp = buf; *fbp++ = '%'; #if NEED_PRINTF_FLAG_GROUPING /* The underlying implementation doesn't support the ' flag. Produce no grouping characters in this case; this is acceptable because the grouping is locale dependent. */ #else if (flags & FLAG_GROUP) *fbp++ = '\''; #endif if (flags & FLAG_LEFT) *fbp++ = '-'; if (flags & FLAG_SHOWSIGN) *fbp++ = '+'; if (flags & FLAG_SPACE) *fbp++ = ' '; if (flags & FLAG_ALT) *fbp++ = '#'; #if __GLIBC__ >= 2 && !defined __UCLIBC__ if (flags & FLAG_LOCALIZED) *fbp++ = 'I'; #endif if (!pad_ourselves) { if (flags & FLAG_ZERO) *fbp++ = '0'; if (dp->width_start != dp->width_end) { size_t n = dp->width_end - dp->width_start; /* The width specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->width_start; do *fbp++ = *mp++; while (--n > 0); } } } if (!prec_ourselves) { if (dp->precision_start != dp->precision_end) { size_t n = dp->precision_end - dp->precision_start; /* The precision specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->precision_start; do *fbp++ = *mp++; while (--n > 0); } } } switch (type) { #if HAVE_LONG_LONG_INT case TYPE_LONGLONGINT: case TYPE_ULONGLONGINT: # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ *fbp++ = 'I'; *fbp++ = '6'; *fbp++ = '4'; break; # else *fbp++ = 'l'; # endif #endif FALLTHROUGH; case TYPE_LONGINT: case TYPE_ULONGINT: #if HAVE_WINT_T case TYPE_WIDE_CHAR: #endif #if HAVE_WCHAR_T case TYPE_WIDE_STRING: #endif *fbp++ = 'l'; break; case TYPE_LONGDOUBLE: *fbp++ = 'L'; break; default: break; } #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') *fbp = 'f'; else #endif *fbp = dp->conversion; #if USE_SNPRINTF # if ! (((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) \ && !defined __UCLIBC__) \ || (defined __APPLE__ && defined __MACH__) \ || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) fbp[1] = '%'; fbp[2] = 'n'; fbp[3] = '\0'; # else /* On glibc2 systems from glibc >= 2.3 - probably also older ones - we know that snprintf's return value conforms to ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 and gl_SNPRINTF_TRUNCATION_C99 pass. Therefore we can avoid using %n in this situation. On glibc2 systems from 2004-10-18 or newer, the use of %n in format strings in writable memory may crash the program (if compiled with _FORTIFY_SOURCE=2), so we should avoid it in this situation. */ /* On Mac OS X 10.3 or newer, we know that snprintf's return value conforms to ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 and gl_SNPRINTF_TRUNCATION_C99 pass. Therefore we can avoid using %n in this situation. On Mac OS X 10.13 or newer, the use of %n in format strings in writable memory by default crashes the program, so we should avoid it in this situation. */ /* On native Windows systems (such as mingw), we can avoid using %n because: - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, snprintf does not write more than the specified number of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes '4', '5', '6' into buf, not '4', '5', '\0'.) - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf allows us to recognize the case of an insufficient buffer size: it returns -1 in this case. On native Windows systems (such as mingw) where the OS is Windows Vista, the use of %n in format strings by default crashes the program. See and So we should avoid %n in this situation. */ fbp[1] = '\0'; # endif #else fbp[1] = '\0'; #endif /* Construct the arguments for calling snprintf or sprintf. */ prefix_count = 0; if (!pad_ourselves && dp->width_arg_index != ARG_NONE) { if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; } if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) { if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; } #if USE_SNPRINTF /* The SNPRINTF result is appended after result[0..length]. The latter is an array of DCHAR_T; SNPRINTF appends an array of TCHAR_T to it. This is possible because sizeof (TCHAR_T) divides sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). */ # define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) /* Ensure that maxlen below will be >= 2. Needed on BeOS, where an snprintf() with maxlen==1 acts like sprintf(). */ ENSURE_ALLOCATION (xsum (length, (2 + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR)); /* Prepare checking whether snprintf returns the count via %n. */ *(TCHAR_T *) (result + length) = '\0'; #endif orig_errno = errno; for (;;) { int count = -1; #if USE_SNPRINTF int retcount = 0; size_t maxlen = allocated - length; /* SNPRINTF can fail if its second argument is > INT_MAX. */ if (maxlen > INT_MAX / TCHARS_PER_DCHAR) maxlen = INT_MAX / TCHARS_PER_DCHAR; maxlen = maxlen * TCHARS_PER_DCHAR; # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ arg, &count); \ break; \ case 1: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], arg, &count); \ break; \ case 2: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], prefixes[1], arg, \ &count); \ break; \ default: \ abort (); \ } #else # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ count = sprintf (tmp, buf, arg); \ break; \ case 1: \ count = sprintf (tmp, buf, prefixes[0], arg); \ break; \ case 2: \ count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ arg); \ break; \ default: \ abort (); \ } #endif errno = 0; switch (type) { case TYPE_SCHAR: { int arg = a.arg[dp->arg_index].a.a_schar; SNPRINTF_BUF (arg); } break; case TYPE_UCHAR: { unsigned int arg = a.arg[dp->arg_index].a.a_uchar; SNPRINTF_BUF (arg); } break; case TYPE_SHORT: { int arg = a.arg[dp->arg_index].a.a_short; SNPRINTF_BUF (arg); } break; case TYPE_USHORT: { unsigned int arg = a.arg[dp->arg_index].a.a_ushort; SNPRINTF_BUF (arg); } break; case TYPE_INT: { int arg = a.arg[dp->arg_index].a.a_int; SNPRINTF_BUF (arg); } break; case TYPE_UINT: { unsigned int arg = a.arg[dp->arg_index].a.a_uint; SNPRINTF_BUF (arg); } break; case TYPE_LONGINT: { long int arg = a.arg[dp->arg_index].a.a_longint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGINT: { unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; SNPRINTF_BUF (arg); } break; #if HAVE_LONG_LONG_INT case TYPE_LONGLONGINT: { long long int arg = a.arg[dp->arg_index].a.a_longlongint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGLONGINT: { unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; SNPRINTF_BUF (arg); } break; #endif case TYPE_DOUBLE: { double arg = a.arg[dp->arg_index].a.a_double; SNPRINTF_BUF (arg); } break; case TYPE_LONGDOUBLE: { long double arg = a.arg[dp->arg_index].a.a_longdouble; SNPRINTF_BUF (arg); } break; case TYPE_CHAR: { int arg = a.arg[dp->arg_index].a.a_char; SNPRINTF_BUF (arg); } break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: { wint_t arg = a.arg[dp->arg_index].a.a_wide_char; SNPRINTF_BUF (arg); } break; #endif case TYPE_STRING: { const char *arg = a.arg[dp->arg_index].a.a_string; SNPRINTF_BUF (arg); } break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; SNPRINTF_BUF (arg); } break; #endif case TYPE_POINTER: { void *arg = a.arg[dp->arg_index].a.a_pointer; SNPRINTF_BUF (arg); } break; default: abort (); } #if USE_SNPRINTF /* Portability: Not all implementations of snprintf() are ISO C 99 compliant. Determine the number of bytes that snprintf() has produced or would have produced. */ if (count >= 0) { /* Verify that snprintf() has NUL-terminated its result. */ if (count < maxlen && ((TCHAR_T *) (result + length)) [count] != '\0') abort (); /* Portability hack. */ if (retcount > count) count = retcount; } else { /* snprintf() doesn't understand the '%n' directive. */ if (fbp[1] != '\0') { /* Don't use the '%n' directive; instead, look at the snprintf() return value. */ fbp[1] = '\0'; continue; } else { /* Look at the snprintf() return value. */ if (retcount < 0) { # if !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF /* HP-UX 10.20 snprintf() is doubly deficient: It doesn't understand the '%n' directive, *and* it returns -1 (rather than the length that would have been required) when the buffer is too small. But a failure at this point can also come from other reasons than a too small buffer, such as an invalid wide string argument to the %ls directive, or possibly an invalid floating-point argument. */ size_t tmp_length = MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, flags, width, has_precision, precision, pad_ourselves); if (maxlen < tmp_length) { /* Make more room. But try to do through this reallocation only once. */ size_t bigger_need = xsum (length, xsum (tmp_length, TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR); /* And always grow proportionally. (There may be several arguments, each needing a little more room than the previous one.) */ size_t bigger_need2 = xsum (xtimes (allocated, 2), 12); if (bigger_need < bigger_need2) bigger_need = bigger_need2; ENSURE_ALLOCATION (bigger_need); continue; } # endif } else count = retcount; } } #endif /* Attempt to handle failure. */ if (count < 0) { /* SNPRINTF or sprintf failed. Save and use the errno that it has set, if any. */ int saved_errno = errno; if (saved_errno == 0) { if (dp->conversion == 'c' || dp->conversion == 's') saved_errno = EILSEQ; else saved_errno = EINVAL; } if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } #if USE_SNPRINTF /* Handle overflow of the allocated buffer. If such an overflow occurs, a C99 compliant snprintf() returns a count >= maxlen. However, a non-compliant snprintf() function returns only count = maxlen - 1. To cover both cases, test whether count >= maxlen - 1. */ if ((unsigned int) count + 1 >= maxlen) { /* If maxlen already has attained its allowed maximum, allocating more memory will not increase maxlen. Instead of looping, bail out. */ if (maxlen == INT_MAX / TCHARS_PER_DCHAR) goto overflow; else { /* Need at least (count + 1) * sizeof (TCHAR_T) bytes. (The +1 is for the trailing NUL.) But ask for (count + 2) * sizeof (TCHAR_T) bytes, so that in the next round, we likely get maxlen > (unsigned int) count + 1 and so we don't get here again. And allocate proportionally, to avoid looping eternally if snprintf() reports a too small count. */ size_t n = xmax (xsum (length, ((unsigned int) count + 2 + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); continue; } } #endif #if NEED_PRINTF_UNBOUNDED_PRECISION if (prec_ourselves) { /* Handle the precision. */ TCHAR_T *prec_ptr = # if USE_SNPRINTF (TCHAR_T *) (result + length); # else tmp; # endif size_t prefix_count; size_t move; prefix_count = 0; /* Put the additional zeroes after the sign. */ if (count >= 1 && (*prec_ptr == '-' || *prec_ptr == '+' || *prec_ptr == ' ')) prefix_count = 1; /* Put the additional zeroes after the 0x prefix if (flags & FLAG_ALT) || (dp->conversion == 'p'). */ else if (count >= 2 && prec_ptr[0] == '0' && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) prefix_count = 2; move = count - prefix_count; if (precision > move) { /* Insert zeroes. */ size_t insert = precision - move; TCHAR_T *prec_end; # if USE_SNPRINTF size_t n = xsum (length, (count + insert + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR); length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; ENSURE_ALLOCATION (n); length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; prec_ptr = (TCHAR_T *) (result + length); # endif prec_end = prec_ptr + count; prec_ptr += prefix_count; while (prec_end > prec_ptr) { prec_end--; prec_end[insert] = prec_end[0]; } prec_end += insert; do *--prec_end = '0'; while (prec_end > prec_ptr); count += insert; } } #endif #if !USE_SNPRINTF if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); #endif #if !DCHAR_IS_TCHAR /* Convert from TCHAR_T[] to DCHAR_T[]. */ if (dp->conversion == 'c' || dp->conversion == 's') { /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING TYPE_WIDE_STRING. The result string is not certainly ASCII. */ const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t tmpdst_len; /* This code assumes that TCHAR_T is 'char'. */ verify (sizeof (TCHAR_T) == 1); # if USE_SNPRINTF tmpsrc = (TCHAR_T *) (result + length); # else tmpsrc = tmp; # endif tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, count, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } ENSURE_ALLOCATION (xsum (length, tmpdst_len)); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); count = tmpdst_len; } else { /* The result string is ASCII. Simple 1:1 conversion. */ # if USE_SNPRINTF /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a no-op conversion, in-place on the array starting at (result + length). */ if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) # endif { const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t n; # if USE_SNPRINTF if (result == resultbuf) { tmpsrc = (TCHAR_T *) (result + length); /* ENSURE_ALLOCATION will not move tmpsrc (because it's part of resultbuf). */ ENSURE_ALLOCATION (xsum (length, count)); } else { /* ENSURE_ALLOCATION will move the array (because it uses realloc(). */ ENSURE_ALLOCATION (xsum (length, count)); tmpsrc = (TCHAR_T *) (result + length); } # else tmpsrc = tmp; ENSURE_ALLOCATION (xsum (length, count)); # endif tmpdst = result + length; /* Copy backwards, because of overlapping. */ tmpsrc += count; tmpdst += count; for (n = count; n > 0; n--) *--tmpdst = *--tmpsrc; } } #endif #if DCHAR_IS_TCHAR && !USE_SNPRINTF /* Make room for the result. */ if (count > allocated - length) { /* Need at least count elements. But allocate proportionally. */ size_t n = xmax (xsum (length, count), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); } #endif /* Here count <= allocated - length. */ /* Perform padding. */ #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION if (pad_ourselves && has_width) { size_t w; # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, count); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = count; # endif if (w < width) { size_t pad = width - w; /* Make room for the result. */ if (xsum (count, pad) > allocated - length) { /* Need at least count + pad elements. But allocate proportionally. */ size_t n = xmax (xsum3 (length, count, pad), xtimes (allocated, 2)); # if USE_SNPRINTF length += count; ENSURE_ALLOCATION (n); length -= count; # else ENSURE_ALLOCATION (n); # endif } /* Here count + pad <= allocated - length. */ { # if !DCHAR_IS_TCHAR || USE_SNPRINTF DCHAR_T * const rp = result + length; # else DCHAR_T * const rp = tmp; # endif DCHAR_T *p = rp + count; DCHAR_T *end = p + pad; DCHAR_T *pad_ptr; # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO if (dp->conversion == 'c' || dp->conversion == 's') /* No zero-padding for string directives. */ pad_ptr = NULL; else # endif { pad_ptr = (*rp == '-' ? rp + 1 : rp); /* No zero-padding of "inf" and "nan". */ if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) pad_ptr = NULL; } /* The generated string now extends from rp to p, with the zero padding insertion point being at pad_ptr. */ count = count + pad; /* = end - rp */ if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > rp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } } } } #endif /* Here still count <= allocated - length. */ #if !DCHAR_IS_TCHAR || USE_SNPRINTF /* The snprintf() result did fit. */ #else /* Append the sprintf() result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); #endif #if !USE_SNPRINTF if (tmp != tmpbuf) free (tmp); #endif #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') { /* Convert the %f result to upper case for %F. */ DCHAR_T *rp = result + length; size_t rc; for (rc = count; rc > 0; rc--, rp++) if (*rp >= 'a' && *rp <= 'z') *rp = *rp - 'a' + 'A'; } #endif length += count; break; } errno = orig_errno; #undef pad_ourselves #undef prec_ourselves } } } /* Add the final NUL. */ ENSURE_ALLOCATION (xsum (length, 1)); result[length] = '\0'; if (result != resultbuf && length + 1 < allocated) { /* Shrink the allocated memory if possible. */ DCHAR_T *memory; memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); if (memory != NULL) result = memory; } if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); *lengthp = length; /* Note that we can produce a big string of a length > INT_MAX. POSIX says that snprintf() fails with errno = EOVERFLOW in this case, but that's only because snprintf() returns an 'int'. This function does not have this limitation. */ return result; #if USE_SNPRINTF overflow: if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EOVERFLOW; return NULL; #endif out_of_memory: if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); out_of_memory_1: CLEANUP (); errno = ENOMEM; return NULL; } } #undef MAX_ROOM_NEEDED #undef TCHARS_PER_DCHAR #undef SNPRINTF #undef USE_SNPRINTF #undef DCHAR_SET #undef DCHAR_CPY #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef DCHAR_IS_TCHAR #undef TCHAR_T #undef DCHAR_T #undef FCHAR_T #undef VASNPRINTF ttfautohint-1.8.1/gnulib/src/asprintf.c0000644000175000001440000000210213222450622017765 0ustar00wlusers00000000000000/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #ifdef IN_LIBASPRINTF # include "vasprintf.h" #else # include #endif #include int asprintf (char **resultp, const char *format, ...) { va_list args; int result; va_start (args, format); result = vasprintf (resultp, format, args); va_end (args); return result; } ttfautohint-1.8.1/gnulib/src/vasprintf.c0000644000175000001440000000247313222450623020167 0ustar00wlusers00000000000000/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #ifdef IN_LIBASPRINTF # include "vasprintf.h" #else # include #endif #include #include #include #include "vasnprintf.h" int vasprintf (char **resultp, const char *format, va_list args) { size_t length; char *result = vasnprintf (NULL, &length, format, args); if (result == NULL) return -1; if (length > INT_MAX) { free (result); errno = EOVERFLOW; return -1; } *resultp = result; /* Return the number of resulting bytes, excluding the trailing NUL. */ return length; } ttfautohint-1.8.1/gnulib/src/alloca.in.h0000644000175000001440000000400213222450622020005 0ustar00wlusers00000000000000/* Memory allocation on the stack. Copyright (C) 1995, 1999, 2001-2004, 2006-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ /* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H means there is a real alloca function. */ #ifndef _GL_ALLOCA_H #define _GL_ALLOCA_H /* alloca (N) returns a pointer to N bytes of memory allocated on the stack, which will last until the function returns. Use of alloca should be avoided: - inside arguments of function calls - undefined behaviour, - in inline functions - the allocation may actually last until the calling function returns, - for huge N (say, N >= 65536) - you never know how large (or small) the stack is, and when the stack cannot fulfill the memory allocation request, the program just crashes. */ #ifndef alloca # ifdef __GNUC__ # define alloca __builtin_alloca # elif defined _AIX # define alloca __alloca # elif defined _MSC_VER # include # define alloca _alloca # elif defined __DECC && defined __VMS # define alloca __ALLOCA # elif defined __TANDEM && defined _TNS_E_TARGET # ifdef __cplusplus extern "C" # endif void *_alloca (unsigned short); # pragma intrinsic (_alloca) # define alloca _alloca # elif defined __MVS__ # include # else # include # ifdef __cplusplus extern "C" # endif void *alloca (size_t); # endif #endif #endif /* _GL_ALLOCA_H */ ttfautohint-1.8.1/gnulib/src/dirname.h0000644000175000001440000000300013222450622017561 0ustar00wlusers00000000000000/* Take file names apart into directory and base names. Copyright (C) 1998, 2001, 2003-2006, 2009-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef DIRNAME_H_ # define DIRNAME_H_ 1 # include # include # include "dosname.h" # ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' # endif # ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 # endif #ifdef __cplusplus extern "C" { #endif # if GNULIB_DIRNAME char *base_name (char const *file); char *dir_name (char const *file); # endif char *mdir_name (char const *file); size_t base_len (char const *file) _GL_ATTRIBUTE_PURE; size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE; char *last_component (char const *file) _GL_ATTRIBUTE_PURE; bool strip_trailing_slashes (char *file); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* not DIRNAME_H_ */ ttfautohint-1.8.1/gnulib/src/dosname.h0000644000175000001440000000373413222450623017607 0ustar00wlusers00000000000000/* File names on MS-DOS/Windows systems. Copyright (C) 2000-2001, 2004-2006, 2009-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 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 . From Paul Eggert and Jim Meyering. */ #ifndef _DOSNAME_H #define _DOSNAME_H #if (defined _WIN32 || defined __WIN32__ || \ defined __MSDOS__ || defined __CYGWIN__ || \ defined __EMX__ || defined __DJGPP__) /* This internal macro assumes ASCII, but all hosts that support drive letters use ASCII. */ # define _IS_DRIVE_LETTER(C) (((unsigned int) (C) | ('a' - 'A')) - 'a' \ <= 'z' - 'a') # define FILE_SYSTEM_PREFIX_LEN(Filename) \ (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0) # ifndef __CYGWIN__ # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 # endif # define ISSLASH(C) ((C) == '/' || (C) == '\\') #else # define FILE_SYSTEM_PREFIX_LEN(Filename) 0 # define ISSLASH(C) ((C) == '/') #endif #ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 #endif #if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE # define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)]) # else # define IS_ABSOLUTE_FILE_NAME(F) \ (ISSLASH ((F)[0]) || FILE_SYSTEM_PREFIX_LEN (F) != 0) #endif #define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F)) #endif /* DOSNAME_H_ */ ttfautohint-1.8.1/gnulib/src/errno.in.h0000644000175000001440000001646413222450623017717 0ustar00wlusers00000000000000/* A POSIX-like . Copyright (C) 2008-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _@GUARD_PREFIX@_ERRNO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_ERRNO_H@ #ifndef _@GUARD_PREFIX@_ERRNO_H #define _@GUARD_PREFIX@_ERRNO_H /* On native Windows platforms, many macros are not defined. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* These are the same values as defined by MSVC 10, for interoperability. */ # ifndef ENOMSG # define ENOMSG 122 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 111 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 121 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 134 # define GNULIB_defined_EPROTO 1 # endif # ifndef EBADMSG # define EBADMSG 104 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 132 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 129 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 117 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 106 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ECANCELED # define ECANCELED 105 # define GNULIB_defined_ECANCELED 1 # endif # ifndef EOWNERDEAD # define EOWNERDEAD 133 # define GNULIB_defined_EOWNERDEAD 1 # endif # ifndef ENOTRECOVERABLE # define ENOTRECOVERABLE 127 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EINPROGRESS # define EINPROGRESS 112 # define EALREADY 103 # define ENOTSOCK 128 # define EDESTADDRREQ 109 # define EMSGSIZE 115 # define EPROTOTYPE 136 # define ENOPROTOOPT 123 # define EPROTONOSUPPORT 135 # define EOPNOTSUPP 130 # define EAFNOSUPPORT 102 # define EADDRINUSE 100 # define EADDRNOTAVAIL 101 # define ENETDOWN 116 # define ENETUNREACH 118 # define ECONNRESET 108 # define ENOBUFS 119 # define EISCONN 113 # define ENOTCONN 126 # define ETIMEDOUT 138 # define ECONNREFUSED 107 # define ELOOP 114 # define EHOSTUNREACH 110 # define EWOULDBLOCK 140 # define GNULIB_defined_ESOCK 1 # endif # ifndef ETXTBSY # define ETXTBSY 139 # define ENODATA 120 /* not required by POSIX */ # define ENOSR 124 /* not required by POSIX */ # define ENOSTR 125 /* not required by POSIX */ # define ETIME 137 /* not required by POSIX */ # define EOTHER 131 /* not required by POSIX */ # define GNULIB_defined_ESTREAMS 1 # endif /* These are intentionally the same values as the WSA* error numbers, defined in . */ # define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ # define EPFNOSUPPORT 10046 /* not required by POSIX */ # define ESHUTDOWN 10058 /* not required by POSIX */ # define ETOOMANYREFS 10059 /* not required by POSIX */ # define EHOSTDOWN 10064 /* not required by POSIX */ # define EPROCLIM 10067 /* not required by POSIX */ # define EUSERS 10068 /* not required by POSIX */ # define EDQUOT 10069 # define ESTALE 10070 # define EREMOTE 10071 /* not required by POSIX */ # define GNULIB_defined_EWINSOCK 1 # endif /* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ # if @EMULTIHOP_HIDDEN@ # define EMULTIHOP @EMULTIHOP_VALUE@ # define GNULIB_defined_EMULTIHOP 1 # endif # if @ENOLINK_HIDDEN@ # define ENOLINK @ENOLINK_VALUE@ # define GNULIB_defined_ENOLINK 1 # endif # if @EOVERFLOW_HIDDEN@ # define EOVERFLOW @EOVERFLOW_VALUE@ # define GNULIB_defined_EOVERFLOW 1 # endif /* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. Likewise, on NonStop Kernel, EDQUOT is not defined. Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. Note: When one of these systems defines some of these macros some day, binaries will have to be recompiled so that they recognizes the new errno values from the system. */ # ifndef ENOMSG # define ENOMSG 2000 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 2001 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 2002 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 2003 # define GNULIB_defined_EPROTO 1 # endif # ifndef EMULTIHOP # define EMULTIHOP 2004 # define GNULIB_defined_EMULTIHOP 1 # endif # ifndef EBADMSG # define EBADMSG 2005 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 2006 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 2007 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 2011 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 2012 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ESTALE # define ESTALE 2009 # define GNULIB_defined_ESTALE 1 # endif # ifndef EDQUOT # define EDQUOT 2010 # define GNULIB_defined_EDQUOT 1 # endif # ifndef ECANCELED # define ECANCELED 2008 # define GNULIB_defined_ECANCELED 1 # endif /* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not defined. */ # ifndef EOWNERDEAD # if defined __sun /* Use the same values as defined for Solaris >= 8, for interoperability. */ # define EOWNERDEAD 58 # define ENOTRECOVERABLE 59 # elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* We have a conflict here: pthreads-win32 defines these values differently than MSVC 10. It's hairy to decide which one to use. */ # if defined __MINGW32__ && !defined USE_WINDOWS_THREADS /* Use the same values as defined by pthreads-win32, for interoperability. */ # define EOWNERDEAD 43 # define ENOTRECOVERABLE 44 # else /* Use the same values as defined by MSVC 10, for interoperability. */ # define EOWNERDEAD 133 # define ENOTRECOVERABLE 127 # endif # else # define EOWNERDEAD 2013 # define ENOTRECOVERABLE 2014 # endif # define GNULIB_defined_EOWNERDEAD 1 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EILSEQ # define EILSEQ 2015 # define GNULIB_defined_EILSEQ 1 # endif #endif /* _@GUARD_PREFIX@_ERRNO_H */ #endif /* _@GUARD_PREFIX@_ERRNO_H */ ttfautohint-1.8.1/gnulib/src/error.h0000644000175000001440000000553313222450623017311 0ustar00wlusers00000000000000/* Declaration for error-reporting function Copyright (C) 1995-1997, 2003, 2006, 2008-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _ERROR_H #define _ERROR_H 1 /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif /* On mingw, the flavor of printf depends on whether the extensions module * is in use; the check for determines the witness macro. */ #ifndef _GL_ATTRIBUTE_SPEC_PRINTF # if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU # define _GL_ATTRIBUTE_SPEC_PRINTF __gnu_printf__ # else # define _GL_ATTRIBUTE_SPEC_PRINTF __printf__ # endif #endif #ifdef __cplusplus extern "C" { #endif /* Print a message with 'fprintf (stderr, FORMAT, ...)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ extern void error (int __status, int __errnum, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 3, 4)); extern void error_at_line (int __status, int __errnum, const char *__fname, unsigned int __lineno, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 5, 6)); /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ extern void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ extern unsigned int error_message_count; /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ extern int error_one_per_line; #ifdef __cplusplus } #endif #endif /* error.h */ ttfautohint-1.8.1/gnulib/src/exitfail.h0000644000175000001440000000140313222450623017755 0ustar00wlusers00000000000000/* Failure exit status Copyright (C) 2002, 2009-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 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 . */ extern int volatile exit_failure; ttfautohint-1.8.1/gnulib/src/fcntl.in.h0000644000175000001440000002376613222450623017703 0ustar00wlusers00000000000000/* Like , but with non-working flags defined to 0. Copyright (C) 2006-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 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 . */ /* written by Paul Eggert */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_fcntl_h /* Special invocation convention. */ /* Needed before . May also define off_t to a 64-bit type on native Windows. */ #include /* On some systems other than glibc, is a prerequisite of . On glibc systems, we would like to avoid namespace pollution. But on glibc systems, includes inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include #endif #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_FCNTL_H /* Needed before . May also define off_t to a 64-bit type on native Windows. */ #include /* On some systems other than glibc, is a prerequisite of . On glibc systems, we would like to avoid namespace pollution. But on glibc systems, includes inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include #endif /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ #ifndef _@GUARD_PREFIX@_FCNTL_H #define _@GUARD_PREFIX@_FCNTL_H #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ # include #endif /* Native Windows platforms declare open(), creat() in . */ #if (@GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_FCNTL@ # if @REPLACE_FCNTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcntl # define fcntl rpl_fcntl # endif _GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...)); _GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); # else # if !@HAVE_FCNTL@ _GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); # endif _GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); # endif _GL_CXXALIASWARN (fcntl); #elif defined GNULIB_POSIXCHECK # undef fcntl # if HAVE_RAW_DECL_FCNTL _GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - " "use gnulib module fcntl for portability"); # endif #endif #if @GNULIB_OPEN@ # if @REPLACE_OPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open rpl_open # endif _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); # else _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); # endif /* On HP-UX 11, in C++ mode, open() is defined as an inline function with a default argument. _GL_CXXALIASWARN does not work in this case. */ # if !defined __hpux _GL_CXXALIASWARN (open); # endif #elif defined GNULIB_POSIXCHECK # undef open /* Assume open is always declared. */ _GL_WARN_ON_USE (open, "open is not always POSIX compliant - " "use gnulib module open for portability"); #endif #if @GNULIB_OPENAT@ # if @REPLACE_OPENAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef openat # define openat rpl_openat # endif _GL_FUNCDECL_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # else # if !@HAVE_OPENAT@ _GL_FUNCDECL_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # endif _GL_CXXALIASWARN (openat); #elif defined GNULIB_POSIXCHECK # undef openat # if HAVE_RAW_DECL_OPENAT _GL_WARN_ON_USE (openat, "openat is not portable - " "use gnulib module openat for portability"); # endif #endif /* Fix up the FD_* macros, only known to be missing on mingw. */ #ifndef FD_CLOEXEC # define FD_CLOEXEC 1 #endif /* Fix up the supported F_* macros. Intentionally leave other F_* macros undefined. Only known to be missing on mingw. */ #ifndef F_DUPFD_CLOEXEC # define F_DUPFD_CLOEXEC 0x40000000 /* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */ # define GNULIB_defined_F_DUPFD_CLOEXEC 1 #else # define GNULIB_defined_F_DUPFD_CLOEXEC 0 #endif #ifndef F_DUPFD # define F_DUPFD 1 #endif #ifndef F_GETFD # define F_GETFD 2 #endif /* Fix up the O_* macros. */ /* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT to values outside 'int' range, so omit these misdefinitions. But avoid namespace pollution on non-AIX systems. */ #ifdef _AIX # include # if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX) # undef O_CLOEXEC # endif # if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX) # undef O_NOFOLLOW # endif # if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX) # undef O_TTY_INIT # endif #endif #if !defined O_DIRECT && defined O_DIRECTIO /* Tru64 spells it 'O_DIRECTIO'. */ # define O_DIRECT O_DIRECTIO #endif #if !defined O_CLOEXEC && defined O_NOINHERIT /* Mingw spells it 'O_NOINHERIT'. */ # define O_CLOEXEC O_NOINHERIT #endif #ifndef O_CLOEXEC # define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */ # define GNULIB_defined_O_CLOEXEC 1 #else # define GNULIB_defined_O_CLOEXEC 0 #endif #ifndef O_DIRECT # define O_DIRECT 0 #endif #ifndef O_DIRECTORY # define O_DIRECTORY 0 #endif #ifndef O_DSYNC # define O_DSYNC 0 #endif #ifndef O_EXEC # define O_EXEC O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_IGNORE_CTTY # define O_IGNORE_CTTY 0 #endif #ifndef O_NDELAY # define O_NDELAY 0 #endif #ifndef O_NOATIME # define O_NOATIME 0 #endif #ifndef O_NONBLOCK # define O_NONBLOCK O_NDELAY #endif /* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY or to 0 as fallback. */ #if @GNULIB_NONBLOCKING@ # if O_NONBLOCK # define GNULIB_defined_O_NONBLOCK 0 # else # define GNULIB_defined_O_NONBLOCK 1 # undef O_NONBLOCK # define O_NONBLOCK 0x40000000 # endif #endif #ifndef O_NOCTTY # define O_NOCTTY 0 #endif #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 #endif #ifndef O_NOLINK # define O_NOLINK 0 #endif #ifndef O_NOLINKS # define O_NOLINKS 0 #endif #ifndef O_NOTRANS # define O_NOTRANS 0 #endif #ifndef O_RSYNC # define O_RSYNC 0 #endif #ifndef O_SEARCH # define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_SYNC # define O_SYNC 0 #endif #ifndef O_TTY_INIT # define O_TTY_INIT 0 #endif #if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) # undef O_ACCMODE # define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) #endif /* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in fcntl.h */ #if !defined O_BINARY && defined _O_BINARY /* For MSC-compatible compilers. */ # define O_BINARY _O_BINARY # define O_TEXT _O_TEXT #endif #if defined __BEOS__ || defined __HAIKU__ /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ # undef O_BINARY # undef O_TEXT #endif #ifndef O_BINARY # define O_BINARY 0 # define O_TEXT 0 #endif /* Fix up the AT_* macros. */ /* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its value exceeds INT_MAX, so its use as an int doesn't conform to the C standard, and GCC and Sun C complain in some cases. If the bug is present, undef AT_FDCWD here, so it can be redefined below. */ #if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 # undef AT_FDCWD #endif /* Use the same bit pattern as Solaris 9, but with the proper signedness. The bit pattern is important, in case this actually is Solaris with the above workaround. */ #ifndef AT_FDCWD # define AT_FDCWD (-3041965) #endif /* Use the same values as Solaris 9. This shouldn't matter, but there's no real reason to differ. */ #ifndef AT_SYMLINK_NOFOLLOW # define AT_SYMLINK_NOFOLLOW 4096 #endif #ifndef AT_REMOVEDIR # define AT_REMOVEDIR 1 #endif /* Solaris 9 lacks these two, so just pick unique values. */ #ifndef AT_SYMLINK_FOLLOW # define AT_SYMLINK_FOLLOW 2 #endif #ifndef AT_EACCESS # define AT_EACCESS 4 #endif #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif ttfautohint-1.8.1/gnulib/src/float.in.h0000644000175000001440000001677713222450623017706 0ustar00wlusers00000000000000/* A correct . Copyright (C) 2007-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _@GUARD_PREFIX@_FLOAT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_FLOAT_H@ #ifndef _@GUARD_PREFIX@_FLOAT_H #define _@GUARD_PREFIX@_FLOAT_H /* 'long double' properties. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) /* Number of mantissa units, in base FLT_RADIX. */ # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 /* Number of decimal digits that is sufficient for representing a number. */ # undef LDBL_DIG # define LDBL_DIG 18 /* x-1 where x is the smallest representable number > 1. */ # undef LDBL_EPSILON # define LDBL_EPSILON 1.0842021724855044340E-19L /* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) /* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 /* Minimum positive normalized number. */ # undef LDBL_MIN # define LDBL_MIN 3.3621031431120935063E-4932L /* Maximum representable finite number. */ # undef LDBL_MAX # define LDBL_MAX 1.1897314953572317650E+4932L /* Minimum e such that 10^e is in the range of normalized numbers. */ # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP (-4931) /* Maximum e such that 10^e is in the range of representable finite numbers. */ # undef LDBL_MAX_10_EXP # define LDBL_MAX_10_EXP 4932 #endif /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See . */ #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) /* Number of mantissa units, in base FLT_RADIX. */ # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 /* Number of decimal digits that is sufficient for representing a number. */ # undef LDBL_DIG # define LDBL_DIG 18 /* x-1 where x is the smallest representable number > 1. */ # undef LDBL_EPSILON # define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */ /* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) /* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 /* Minimum positive normalized number. */ # undef LDBL_MIN # define LDBL_MIN 3.362103143112093506262677817321752E-4932L /* = 0x1p-16382L */ /* Maximum representable finite number. */ # undef LDBL_MAX /* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }. But the largest literal that GCC allows us to write is 0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }. So, define it like this through a reference to an external variable const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }; extern const long double LDBL_MAX; Unfortunately, this is not a constant expression. */ union gl_long_double_union { struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd; long double ld; }; extern const union gl_long_double_union gl_LDBL_MAX; # define LDBL_MAX (gl_LDBL_MAX.ld) /* Minimum e such that 10^e is in the range of normalized numbers. */ # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP (-4931) /* Maximum e such that 10^e is in the range of representable finite numbers. */ # undef LDBL_MAX_10_EXP # define LDBL_MAX_10_EXP 4932 #endif /* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are wrong. On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong. */ #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP DBL_MIN_10_EXP # undef LDBL_MIN # define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ #endif #if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MAX /* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }. It is not easy to define: #define LDBL_MAX 1.79769313486231580793728971405302307166e308L is too small, whereas #define LDBL_MAX 1.79769313486231580793728971405302307167e308L is too large. Apparently a bug in GCC decimal-to-binary conversion. Also, I can't get values larger than #define LDBL63 ((long double) (1ULL << 63)) #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL) which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }. So, define it like this through a reference to an external variable const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }; extern const long double LDBL_MAX; or through a pointer cast #define LDBL_MAX \ (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }) Unfortunately, this is not a constant expression, and the latter expression does not work well when GCC is optimizing.. */ union gl_long_double_union { struct { double hi; double lo; } dd; long double ld; }; extern const union gl_long_double_union gl_LDBL_MAX; # define LDBL_MAX (gl_LDBL_MAX.ld) #endif /* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong. On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON are wrong. */ #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP DBL_MIN_10_EXP # undef LDBL_MIN # define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ # undef LDBL_EPSILON # define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */ # endif #endif #if @REPLACE_ITOLD@ /* Pull in a function that fixes the 'int' to 'long double' conversion of glibc 2.7. */ extern # ifdef __cplusplus "C" # endif void _Qp_itoq (long double *, int); static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq; #endif #endif /* _@GUARD_PREFIX@_FLOAT_H */ #endif /* _@GUARD_PREFIX@_FLOAT_H */ ttfautohint-1.8.1/gnulib/src/getopt-cdefs.in.h0000644000175000001440000000376113222450623021152 0ustar00wlusers00000000000000/* getopt-on-non-glibc compatibility macros. Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. 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 file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with gnulib; if not, see . */ #ifndef _GETOPT_CDEFS_H #define _GETOPT_CDEFS_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* getopt-core.h and getopt-ext.h are shared with GNU libc, and expect a number of the internal macros supplied to GNU libc's headers by sys/cdefs.h. Provide fallback definitions for all of them. */ #if @HAVE_SYS_CDEFS_H@ # include #endif #ifndef __BEGIN_DECLS # ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # else # define __BEGIN_DECLS /* nothing */ # endif #endif #ifndef __END_DECLS # ifdef __cplusplus # define __END_DECLS } # else # define __END_DECLS /* nothing */ # endif #endif #ifndef __GNUC_PREREQ # if defined __GNUC__ && defined __GNUC_VERSION__ # define __GNUC_PREREQ(maj, min) \ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) # else # define __GNUC_PREREQ(maj, min) 0 # endif #endif #ifndef __THROW # if defined __cplusplus && __GNUC_PREREQ (2,8) # define __THROW throw () # else # define __THROW # endif #endif #endif /* _GETOPT_CDEFS_H */ ttfautohint-1.8.1/gnulib/src/getopt-core.h0000644000175000001440000000710313222450623020403 0ustar00wlusers00000000000000/* Declarations for getopt (basic, portable features only). Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can 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. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifndef _GETOPT_CORE_H #define _GETOPT_CORE_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. Unlike most bits headers, it does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ __BEGIN_DECLS /* For communication from 'getopt' to the caller. When 'getopt' finds an option that takes an argument, the argument value is returned here. Also, when 'ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to 'getopt'. On entry to 'getopt', zero means this is the first call; initialize. When 'getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, 'optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message 'getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; /* Get definitions and prototypes for functions to process the arguments in ARGV (ARGC of them, minus the program name) for options given in OPTS. Return the option character from OPTS just read. Return -1 when there are no more options. For unrecognized options, or options missing arguments, 'optopt' is set to the option letter, and '?' is returned. The OPTS string is a list of characters which are recognized option letters, optionally followed by colons, specifying that that letter takes an argument, to be placed in 'optarg'. If a letter in OPTS is followed by two colons, its argument is optional. This behavior is specific to the GNU 'getopt'. The argument '--' causes premature termination of argument scanning, explicitly telling 'getopt' that there are no more options. If OPTS begins with '-', then non-option arguments are treated as arguments to the option '\1'. This behavior is specific to the GNU 'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in the environment, then do not permute arguments. For standards compliance, the 'argv' argument has the type char *const *, but this is inaccurate; if argument permutation is enabled, the argv array (not the strings it points to) must be writable. */ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) __THROW _GL_ARG_NONNULL ((2, 3)); __END_DECLS #endif /* _GETOPT_CORE_H */ ttfautohint-1.8.1/gnulib/src/getopt-ext.h0000644000175000001440000000572413222450623020262 0ustar00wlusers00000000000000/* Declarations for getopt (GNU extensions). Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can 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. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifndef _GETOPT_EXT_H #define _GETOPT_EXT_H 1 /* This header should not be used directly; include getopt.h instead. Unlike most bits headers, it does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ __BEGIN_DECLS /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of 'struct option' terminated by an element containing a name which is zero. The field 'has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field 'flag' is not NULL, it points to a variable that is set to the value given in the field 'val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an 'int' to a compiled-in constant, such as set a value from 'optarg', set the option's 'flag' field to zero and its 'val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero 'flag' field, 'getopt' returns the contents of the 'val' field. */ struct option { const char *name; /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the 'has_arg' field of 'struct option'. */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); __END_DECLS #endif /* _GETOPT_EXT_H */ ttfautohint-1.8.1/gnulib/src/getopt-pfx-core.h0000644000175000001440000000426213222450623021201 0ustar00wlusers00000000000000/* getopt (basic, portable features) gnulib wrapper header. Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. 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 file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with gnulib; if not, see . */ #ifndef _GETOPT_PFX_CORE_H #define _GETOPT_PFX_CORE_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. Systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #ifdef __GETOPT_PREFIX # ifndef __GETOPT_ID # define __GETOPT_CONCAT(x, y) x ## y # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) # endif # undef getopt # undef optarg # undef opterr # undef optind # undef optopt # define getopt __GETOPT_ID (getopt) # define optarg __GETOPT_ID (optarg) # define opterr __GETOPT_ID (opterr) # define optind __GETOPT_ID (optind) # define optopt __GETOPT_ID (optopt) /* The system's getopt.h may have already included getopt-core.h to declare the unprefixed identifiers. Undef _GETOPT_CORE_H so that getopt-core.h declares them with prefixes. */ # undef _GETOPT_CORE_H #endif #include #endif /* _GETOPT_PFX_CORE_H */ ttfautohint-1.8.1/gnulib/src/getopt-pfx-ext.h0000644000175000001440000000533213222450623021050 0ustar00wlusers00000000000000/* getopt (GNU extensions) gnulib wrapper header. Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. 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 file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with gnulib; if not, see . */ #ifndef _GETOPT_PFX_EXT_H #define _GETOPT_PFX_EXT_H 1 /* This header should not be used directly; include getopt.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. Systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #ifdef __GETOPT_PREFIX # ifndef __GETOPT_ID # define __GETOPT_CONCAT(x, y) x ## y # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) # endif # undef getopt_long # undef getopt_long_only # undef option # undef _getopt_internal # define getopt_long __GETOPT_ID (getopt_long) # define getopt_long_only __GETOPT_ID (getopt_long_only) # define option __GETOPT_ID (option) # define _getopt_internal __GETOPT_ID (getopt_internal) /* The system's getopt.h may have already included getopt-ext.h to declare the unprefixed identifiers. Undef _GETOPT_EXT_H so that getopt-ext.h declares them with prefixes. */ # undef _GETOPT_EXT_H #endif /* Standalone applications get correct prototypes for getopt_long and getopt_long_only; they declare "char **argv". For backward compatibility with old applications, if __GETOPT_PREFIX is not defined, we supply GNU-libc-compatible, but incorrect, prototypes using "char *const *argv". (GNU libc is stuck with the incorrect prototypes, as they are baked into older versions of LSB.) */ #ifndef __getopt_argv_const # if defined __GETOPT_PREFIX # define __getopt_argv_const /* empty */ # else # define __getopt_argv_const const # endif #endif #include #endif /* _GETOPT_PFX_EXT_H */ ttfautohint-1.8.1/gnulib/src/getopt.in.h0000644000175000001440000000406313222450623020064 0ustar00wlusers00000000000000/* Declarations for getopt. Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library, which supplies a different version of this file. 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 file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with gnulib; if not, see . */ #ifndef _@GUARD_PREFIX@_GETOPT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. We must also inform the replacement unistd.h to not recursively use ; our definitions will be present soon enough. */ #if @HAVE_GETOPT_H@ # define _GL_SYSTEM_GETOPT # @INCLUDE_NEXT@ @NEXT_GETOPT_H@ # undef _GL_SYSTEM_GETOPT #endif #define _@GUARD_PREFIX@_GETOPT_H 1 /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. When this happens, include the headers that might declare getopt so that they will not cause confusion if included after this file (if the system had , we have already included it). */ #if defined __GETOPT_PREFIX # if !@HAVE_GETOPT_H@ # define __need_system_stdlib_h # include # undef __need_system_stdlib_h # include # include # endif #endif /* The definition of _GL_ARG_NONNULL is copied here. */ #include #include #include #endif /* _@GUARD_PREFIX@_GETOPT_H */ ttfautohint-1.8.1/gnulib/src/getopt_int.h0000644000175000001440000001006313222450623020326 0ustar00wlusers00000000000000/* Internal declarations for getopt. Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can 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. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifndef _GETOPT_INT_H #define _GETOPT_INT_H 1 #include extern int _getopt_internal (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, int __posixly_correct); /* Reentrant versions which can handle parsing multiple argument vectors at the same time. */ /* Describe how to deal with options that follow non-option ARGV-elements. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what POSIX specifies should happen. PERMUTE means permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. The special argument '--' forces an end of option-scanning regardless of the value of 'ordering'. In the case of RETURN_IN_ORDER, only '--' can cause 'getopt' to return -1 with 'optind' != ARGC. */ enum __ord { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER }; /* Data type for reentrant functions. */ struct _getopt_data { /* These have exactly the same meaning as the corresponding global variables, except that they are used for the reentrant versions of getopt. */ int optind; int opterr; int optopt; char *optarg; /* Internal members. */ /* True if the internal members have been initialized. */ int __initialized; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ char *__nextchar; /* See __ord above. */ enum __ord __ordering; /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. 'first_nonopt' is the index in ARGV of the first of them; 'last_nonopt' is the index after the last of them. */ int __first_nonopt; int __last_nonopt; }; /* The initializer is necessary to set OPTIND and OPTERR to their default values and to clear the initialization flag. */ #define _GETOPT_DATA_INITIALIZER { 1, 1 } extern int _getopt_internal_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, struct _getopt_data *__data, int __posixly_correct); extern int _getopt_long_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); extern int _getopt_long_only_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); #endif /* getopt_int.h */ ttfautohint-1.8.1/gnulib/src/intprops.h0000644000175000001440000005061413222450623020036 0ustar00wlusers00000000000000/* intprops.h -- properties of integer types Copyright (C) 2001-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 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 . */ /* Written by Paul Eggert. */ #ifndef _GL_INTPROPS_H #define _GL_INTPROPS_H #include /* Return a value with the common real type of E and V and the value of V. */ #define _GL_INT_CONVERT(e, v) (0 * (e) + (v)) /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see . */ #define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v)) /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if the arithmetic type T is an integer type. bool counts as an integer. */ #define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) /* True if the real type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Return 1 if the real expression E, after promotion, has a signed or floating type. */ #define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) /* Minimum and maximum values for integer types and expressions. */ /* The width in bits of the integer type or expression T. Padding bits are not supported; this is checked at compile-time below. */ #define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) /* The maximum and minimum values for the integer type T. */ #define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) /* The maximum and minimum values for the type of the expression E, after integer promotion. E should not have side effects. */ #define _GL_INT_MINIMUM(e) \ (EXPR_SIGNED (e) \ ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_CONVERT (e, 0)) #define _GL_INT_MAXIMUM(e) \ (EXPR_SIGNED (e) \ ? _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_NEGATE_CONVERT (e, 1)) #define _GL_SIGNED_INT_MAXIMUM(e) \ (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1) /* Work around OpenVMS incompatibility with C99. */ #if !defined LLONG_MAX && defined __INT64_MAX # define LLONG_MAX __INT64_MAX # define LLONG_MIN __INT64_MIN #endif /* This include file assumes that signed types are two's complement without padding bits; the above macros have undefined behavior otherwise. If this is a problem for you, please let us know how to fix it for your host. This assumption is tested by the intprops-tests module. */ /* Does the __typeof__ keyword work? This could be done by 'configure', but for now it's easier to do it by hand. */ #if (2 <= __GNUC__ \ || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ || (0x5110 <= __SUNPRO_C && !__STDC__)) # define _GL_HAVE___TYPEOF__ 1 #else # define _GL_HAVE___TYPEOF__ 0 #endif /* Return 1 if the integer type or expression T might be signed. Return 0 if it is definitely unsigned. This macro does not evaluate its argument, and expands to an integer constant expression. */ #if _GL_HAVE___TYPEOF__ # define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) #else # define _GL_SIGNED_TYPE_OR_EXPR(t) 1 #endif /* Bound on length of the string representing an unsigned integer value representable in B bits. log10 (2.0) < 146/485. The smallest value of B where this bound is not tight is 2621. */ #define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) /* Bound on length of the string representing an integer type or expression T. Subtract 1 for the sign bit if T is signed, and then add 1 more for a minus sign if needed. Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is signed, this macro may overestimate the true bound by one byte when applied to unsigned types of size 2, 4, 16, ... bytes. */ #define INT_STRLEN_BOUND(t) \ (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + _GL_SIGNED_TYPE_OR_EXPR (t)) /* Bound on buffer size needed to represent an integer type or expression T, including the terminating null. */ #define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) /* Range overflow checks. The INT__RANGE_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. They do not rely on undefined or implementation-defined behavior. Their implementations are simple and straightforward, but they are a bit harder to use than the INT__OVERFLOW macros described below. Example usage: long int i = ...; long int j = ...; if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) printf ("multiply would overflow"); else printf ("product is %ld", i * j); Restrictions on *_RANGE_OVERFLOW macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The arithmetic arguments (including the MIN and MAX arguments) must be of the same integer type after the usual arithmetic conversions, and the type must have minimum value MIN and maximum MAX. Unsigned types should use a zero MIN of the proper type. These macros are tuned for constant MIN and MAX. For commutative operations such as A + B, they are also tuned for constant B. */ /* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (a) < (min) - (b) \ : (max) - (b) < (a)) /* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (max) + (b) < (a) \ : (a) < (min) + (b)) /* Return 1 if - A would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ ((min) < 0 \ ? (a) < - (max) \ : 0 < (a)) /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Avoid && and || as they tickle bugs in Sun C 5.11 2010/08/13 and other compilers; see . */ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? ((a) < 0 \ ? (a) < (max) / (b) \ : (b) == -1 \ ? 0 \ : (min) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (a) < (min) / (b) \ : (max) / (b) < (a))) /* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. */ #define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ ((min) < 0 && (b) == -1 && (a) < - (max)) /* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. Mathematically, % should never overflow, but on x86-like hosts INT_MIN % -1 traps, and the C standard permits this, so treat this as an overflow too. */ #define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) /* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Here, MIN and MAX are for A only, and B need not be of the same type as the other arguments. The C standard says that behavior is undefined for shifts unless 0 <= B < wordwidth, and that when A is negative then A << B has undefined behavior and A >> B has implementation-defined behavior, but do not check these other restrictions. */ #define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ ((a) < 0 \ ? (a) < (min) >> (b) \ : (max) >> (b) < (a)) /* True if __builtin_add_overflow (A, B, P) works when P is non-null. */ #if 5 <= __GNUC__ && !defined __ICC # define _GL_HAS_BUILTIN_OVERFLOW 1 #else # define _GL_HAS_BUILTIN_OVERFLOW 0 #endif /* True if __builtin_add_overflow_p (A, B, C) works. */ #define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__) /* The _GL*_OVERFLOW macros have the same restrictions as the *_RANGE_OVERFLOW macros, except that they do not assume that operands (e.g., A and B) have the same type as MIN and MAX. Instead, they assume that the result (e.g., A + B) has that type. */ #if _GL_HAS_BUILTIN_OVERFLOW_P # define _GL_ADD_OVERFLOW(a, b, min, max) \ __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) #else # define _GL_ADD_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? (b) <= (a) + (b) \ : (b) < 0 ? (a) <= (a) + (b) \ : (a) + (b) < (b)) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? 1 \ : (b) < 0 ? (a) - (b) <= (a) \ : (a) < (b)) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) #endif #define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (b) <= (a) + (b) - 1 \ : (b) < 0 && (a) + (b) <= (a)) #define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) /* Return a nonzero value if A is a mathematical multiple of B, where A is unsigned, B is negative, and MAX is the maximum value of A's type. A's type must be the same as (A % B)'s type. Normally (A % -B == 0) suffices, but things get tricky if -B would overflow. */ #define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ ? (a) \ : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ : (a) % - (b)) \ == 0) /* Check for integer overflow, and report low order bits of answer. The INT__OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. The INT__WRAPV macros also store the low-order bits of the answer. These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. Example usage, assuming A and B are long int: if (INT_MULTIPLY_OVERFLOW (a, b)) printf ("result would overflow\n"); else printf ("result is %ld (no overflow)\n", a * b); Example usage with WRAPV flavor: long int result; bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); printf ("result is %ld (%s)\n", result, overflow ? "after overflow" : "no overflow"); Restrictions on these macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The WRAPV macros are not constant expressions. They support only +, binary -, and *. The result type must be signed. These macros are tuned for their last argument being a constant. Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, A % B, and A << B would overflow, respectively. */ #define INT_ADD_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) #define INT_SUBTRACT_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) #if _GL_HAS_BUILTIN_OVERFLOW_P # define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a) #else # define INT_NEGATE_OVERFLOW(a) \ INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) #endif #define INT_MULTIPLY_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) #define INT_DIVIDE_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) #define INT_REMAINDER_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) #define INT_LEFT_SHIFT_OVERFLOW(a, b) \ INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) /* Return 1 if the expression A B would overflow, where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, assuming MIN and MAX are the minimum and maximum for the result type. Arguments should be free of side effects. */ #define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ op_result_overflow (a, b, \ _GL_INT_MINIMUM (0 * (b) + (a)), \ _GL_INT_MAXIMUM (0 * (b) + (a))) /* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. Return 1 if the result overflows. See above for restrictions. */ #define INT_ADD_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, +, __builtin_add_overflow, INT_ADD_OVERFLOW) #define INT_SUBTRACT_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, -, __builtin_sub_overflow, INT_SUBTRACT_OVERFLOW) #define INT_MULTIPLY_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, *, __builtin_mul_overflow, INT_MULTIPLY_OVERFLOW) /* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 https://llvm.org/bugs/show_bug.cgi?id=25390 For now, assume all versions of GCC-like compilers generate bogus warnings for _Generic. This matters only for older compilers that lack __builtin_add_overflow. */ #if __GNUC__ # define _GL__GENERIC_BOGUS 1 #else # define _GL__GENERIC_BOGUS 0 #endif /* Store the low-order bits of A B into *R, where OP specifies the operation. BUILTIN is the builtin operation, and OVERFLOW the overflow predicate. Return 1 if the result overflows. See above for restrictions. */ #if _GL_HAS_BUILTIN_OVERFLOW # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) builtin (a, b, r) #elif 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ (_Generic \ (*(r), \ signed char: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ signed char, SCHAR_MIN, SCHAR_MAX), \ short int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ short int, SHRT_MIN, SHRT_MAX), \ int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX), \ long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX), \ long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX))) #else # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ (sizeof *(r) == sizeof (signed char) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ signed char, SCHAR_MIN, SCHAR_MAX) \ : sizeof *(r) == sizeof (short int) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ short int, SHRT_MIN, SHRT_MAX) \ : sizeof *(r) == sizeof (int) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX) \ : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) # ifdef LLONG_MAX # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (long int) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX)) # else # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) # endif #endif /* Store the low-order bits of A B into *R, where the operation is given by OP. Use the unsigned type UT for calculation to avoid overflow problems. *R's type is T, with extrema TMIN and TMAX. T must be a signed integer type. Return 1 if the result overflows. */ #define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ (sizeof ((a) op (b)) < sizeof (t) \ ? _GL_INT_OP_CALC1 ((t) (a), (t) (b), r, op, overflow, ut, t, tmin, tmax) \ : _GL_INT_OP_CALC1 (a, b, r, op, overflow, ut, t, tmin, tmax)) #define _GL_INT_OP_CALC1(a, b, r, op, overflow, ut, t, tmin, tmax) \ ((overflow (a, b) \ || (EXPR_SIGNED ((a) op (b)) && ((a) op (b)) < (tmin)) \ || (tmax) < ((a) op (b))) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0)) /* Return the low-order bits of A B, where the operation is given by OP. Use the unsigned type UT for calculation to avoid undefined behavior on signed integer overflow, and convert the result to type T. UT is at least as wide as T and is no narrower than unsigned int, T is two's complement, and there is no padding or trap representations. Assume that converting UT to T yields the low-order bits, as is done in all known two's-complement C compilers. E.g., see: https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html According to the C standard, converting UT to T yields an implementation-defined result or signal for values outside T's range. However, code that works around this theoretical problem runs afoul of a compiler bug in Oracle Studio 12.3 x86. See: https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html As the compiler bug is real, don't try to work around the theoretical problem. */ #define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \ ((t) ((ut) (a) op (ut) (b))) #endif /* _GL_INTPROPS_H */ ttfautohint-1.8.1/gnulib/src/limits.in.h0000644000175000001440000000605113222450623020062 0ustar00wlusers00000000000000/* A GNU-like . Copyright 2016-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _@GUARD_PREFIX@_LIMITS_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_LIMITS_H@ #ifndef _@GUARD_PREFIX@_LIMITS_H #define _@GUARD_PREFIX@_LIMITS_H /* For HP-UX 11.31. */ #if defined LONG_LONG_MIN && !defined LLONG_MIN # define LLONG_MIN LONG_LONG_MIN #endif #if defined LONG_LONG_MAX && !defined LLONG_MAX # define LLONG_MAX LONG_LONG_MAX #endif #if defined ULONG_LONG_MAX && !defined ULLONG_MAX # define ULLONG_MAX ULONG_LONG_MAX #endif /* The number of usable bits in an unsigned or signed integer type with minimum value MIN and maximum value MAX, as an int expression suitable in #if. Cover all known practical hosts. This implementation exploits the fact that MAX is 1 less than a power of 2, and merely counts the number of 1 bits in MAX; "COBn" means "count the number of 1 bits in the low-order n bits"). */ #define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) #define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) #define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) #define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) #define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) #define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) #define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) /* Macros specified by ISO/IEC TS 18661-1:2014. */ #if (! defined ULLONG_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) # define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) # define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) # define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) # define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) # define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) # define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) # define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) # define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) # define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) # define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) # define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) #endif /* !ULLONG_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ #endif /* _@GUARD_PREFIX@_LIMITS_H */ #endif /* _@GUARD_PREFIX@_LIMITS_H */ ttfautohint-1.8.1/gnulib/src/memchr.valgrind0000644000175000001440000000065213222450623021007 0ustar00wlusers00000000000000# Suppress a valgrind message about use of uninitialized memory in memchr(). # POSIX states that when the character is found, memchr must not read extra # bytes in an overestimated length (for example, where memchr is used to # implement strnlen). However, we use a safe word read to provide a speedup. { memchr-value4 Memcheck:Value4 fun:rpl_memchr } { memchr-value8 Memcheck:Value8 fun:rpl_memchr } ttfautohint-1.8.1/gnulib/src/str-two-way.h0000644000175000001440000004217013222450623020373 0ustar00wlusers00000000000000/* Byte-wise substring search, using the Two-Way algorithm. Copyright (C) 2008-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Eric Blake , 2008. This program is free software; you can 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ /* Before including this file, you need to include and , and define: RESULT_TYPE A macro that expands to the return type. AVAILABLE(h, h_l, j, n_l) A macro that returns nonzero if there are at least N_L bytes left starting at H[J]. H is 'unsigned char *', H_L, J, and N_L are 'size_t'; H_L is an lvalue. For NUL-terminated searches, H_L can be modified each iteration to avoid having to compute the end of H up front. For case-insensitivity, you may optionally define: CMP_FUNC(p1, p2, l) A macro that returns 0 iff the first L characters of P1 and P2 are equal. CANON_ELEMENT(c) A macro that canonicalizes an element right after it has been fetched from one of the two strings. The argument is an 'unsigned char'; the result must be an 'unsigned char' as well. This file undefines the macros documented above, and defines LONG_NEEDLE_THRESHOLD. */ #include #include /* We use the Two-Way string matching algorithm (also known as Chrochemore-Perrin), which guarantees linear complexity with constant space. Additionally, for long needles, we also use a bad character shift table similar to the Boyer-Moore algorithm to achieve improved (potentially sub-linear) performance. See http://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260, https://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.34.6641&rep=rep1&type=pdf */ /* Point at which computing a bad-byte shift table is likely to be worthwhile. Small needles should not compute a table, since it adds (1 << CHAR_BIT) + NEEDLE_LEN computations of preparation for a speedup no greater than a factor of NEEDLE_LEN. The larger the needle, the better the potential performance gain. On the other hand, on non-POSIX systems with CHAR_BIT larger than eight, the memory required for the table is prohibitive. */ #if CHAR_BIT < 10 # define LONG_NEEDLE_THRESHOLD 32U #else # define LONG_NEEDLE_THRESHOLD SIZE_MAX #endif #ifndef MAX # define MAX(a, b) ((a < b) ? (b) : (a)) #endif #ifndef CANON_ELEMENT # define CANON_ELEMENT(c) c #endif #ifndef CMP_FUNC # define CMP_FUNC memcmp #endif /* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN. Return the index of the first byte in the right half, and set *PERIOD to the global period of the right half. The global period of a string is the smallest index (possibly its length) at which all remaining bytes in the string are repetitions of the prefix (the last repetition may be a subset of the prefix). When NEEDLE is factored into two halves, a local period is the length of the smallest word that shares a suffix with the left half and shares a prefix with the right half. All factorizations of a non-empty NEEDLE have a local period of at least 1 and no greater than NEEDLE_LEN. A critical factorization has the property that the local period equals the global period. All strings have at least one critical factorization with the left half smaller than the global period. And while some strings have more than one critical factorization, it is provable that with an ordered alphabet, at least one of the critical factorizations corresponds to a maximal suffix. Given an ordered alphabet, a critical factorization can be computed in linear time, with 2 * NEEDLE_LEN comparisons, by computing the shorter of two ordered maximal suffixes. The ordered maximal suffixes are determined by lexicographic comparison while tracking periodicity. */ static size_t critical_factorization (const unsigned char *needle, size_t needle_len, size_t *period) { /* Index of last byte of left half, or SIZE_MAX. */ size_t max_suffix, max_suffix_rev; size_t j; /* Index into NEEDLE for current candidate suffix. */ size_t k; /* Offset into current period. */ size_t p; /* Intermediate period. */ unsigned char a, b; /* Current comparison bytes. */ /* Special case NEEDLE_LEN of 1 or 2 (all callers already filtered out 0-length needles. */ if (needle_len < 3) { *period = 1; return needle_len - 1; } /* Invariants: 0 <= j < NEEDLE_LEN - 1 -1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed) min(max_suffix, max_suffix_rev) < global period of NEEDLE 1 <= p <= global period of NEEDLE p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j] 1 <= k <= p */ /* Perform lexicographic search. */ max_suffix = SIZE_MAX; j = 0; k = p = 1; while (j + k < needle_len) { a = CANON_ELEMENT (needle[j + k]); b = CANON_ELEMENT (needle[max_suffix + k]); if (a < b) { /* Suffix is smaller, period is entire prefix so far. */ j += k; k = 1; p = j - max_suffix; } else if (a == b) { /* Advance through repetition of the current period. */ if (k != p) ++k; else { j += p; k = 1; } } else /* b < a */ { /* Suffix is larger, start over from current location. */ max_suffix = j++; k = p = 1; } } *period = p; /* Perform reverse lexicographic search. */ max_suffix_rev = SIZE_MAX; j = 0; k = p = 1; while (j + k < needle_len) { a = CANON_ELEMENT (needle[j + k]); b = CANON_ELEMENT (needle[max_suffix_rev + k]); if (b < a) { /* Suffix is smaller, period is entire prefix so far. */ j += k; k = 1; p = j - max_suffix_rev; } else if (a == b) { /* Advance through repetition of the current period. */ if (k != p) ++k; else { j += p; k = 1; } } else /* a < b */ { /* Suffix is larger, start over from current location. */ max_suffix_rev = j++; k = p = 1; } } /* Choose the shorter suffix. Return the index of the first byte of the right half, rather than the last byte of the left half. For some examples, 'banana' has two critical factorizations, both exposed by the two lexicographic extreme suffixes of 'anana' and 'nana', where both suffixes have a period of 2. On the other hand, with 'aab' and 'bba', both strings have a single critical factorization of the last byte, with the suffix having a period of 1. While the maximal lexicographic suffix of 'aab' is 'b', the maximal lexicographic suffix of 'bba' is 'ba', which is not a critical factorization. Conversely, the maximal reverse lexicographic suffix of 'a' works for 'bba', but not 'ab' for 'aab'. The shorter suffix of the two will always be a critical factorization. */ if (max_suffix_rev + 1 < max_suffix + 1) return max_suffix + 1; *period = p; return max_suffix_rev + 1; } /* Return the first location of non-empty NEEDLE within HAYSTACK, or NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD. Performance is guaranteed to be linear, with an initialization cost of 2 * NEEDLE_LEN comparisons. If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. */ static RETURN_TYPE two_way_short_needle (const unsigned char *haystack, size_t haystack_len, const unsigned char *needle, size_t needle_len) { size_t i; /* Index into current byte of NEEDLE. */ size_t j; /* Index into current window of HAYSTACK. */ size_t period; /* The period of the right half of needle. */ size_t suffix; /* The index of the right half of needle. */ /* Factor the needle into two halves, such that the left half is smaller than the global period, and the right half is periodic (with a period as large as NEEDLE_LEN - suffix). */ suffix = critical_factorization (needle, needle_len, &period); /* Perform the search. Each iteration compares the right half first. */ if (CMP_FUNC (needle, needle + period, suffix) == 0) { /* Entire needle is periodic; a mismatch in the left half can only advance by the period, so use memory to avoid rescanning known occurrences of the period in the right half. */ size_t memory = 0; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Scan for matches in right half. */ i = MAX (suffix, memory); while (i < needle_len && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (memory < i + 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i + 1 < memory + 1) return (RETURN_TYPE) (haystack + j); /* No match, so remember how many repetitions of period on the right half were scanned. */ j += period; memory = needle_len - period; } else { j += i - suffix + 1; memory = 0; } } } else { /* The two halves of needle are distinct; no extra memory is required, and any mismatch results in a maximal shift. */ period = MAX (suffix, needle_len - suffix) + 1; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Scan for matches in right half. */ i = suffix; while (i < needle_len && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i == SIZE_MAX) return (RETURN_TYPE) (haystack + j); j += period; } else j += i - suffix + 1; } } return NULL; } /* Return the first location of non-empty NEEDLE within HAYSTACK, or NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This method is optimized for LONG_NEEDLE_THRESHOLD <= NEEDLE_LEN. Performance is guaranteed to be linear, with an initialization cost of 3 * NEEDLE_LEN + (1 << CHAR_BIT) operations. If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and sublinear performance O(HAYSTACK_LEN / NEEDLE_LEN) is possible. If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and sublinear performance is not possible. */ static RETURN_TYPE two_way_long_needle (const unsigned char *haystack, size_t haystack_len, const unsigned char *needle, size_t needle_len) { size_t i; /* Index into current byte of NEEDLE. */ size_t j; /* Index into current window of HAYSTACK. */ size_t period; /* The period of the right half of needle. */ size_t suffix; /* The index of the right half of needle. */ size_t shift_table[1U << CHAR_BIT]; /* See below. */ /* Factor the needle into two halves, such that the left half is smaller than the global period, and the right half is periodic (with a period as large as NEEDLE_LEN - suffix). */ suffix = critical_factorization (needle, needle_len, &period); /* Populate shift_table. For each possible byte value c, shift_table[c] is the distance from the last occurrence of c to the end of NEEDLE, or NEEDLE_LEN if c is absent from the NEEDLE. shift_table[NEEDLE[NEEDLE_LEN - 1]] contains the only 0. */ for (i = 0; i < 1U << CHAR_BIT; i++) shift_table[i] = needle_len; for (i = 0; i < needle_len; i++) shift_table[CANON_ELEMENT (needle[i])] = needle_len - i - 1; /* Perform the search. Each iteration compares the right half first. */ if (CMP_FUNC (needle, needle + period, suffix) == 0) { /* Entire needle is periodic; a mismatch in the left half can only advance by the period, so use memory to avoid rescanning known occurrences of the period in the right half. */ size_t memory = 0; size_t shift; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Check the last byte first; if it does not match, then shift to the next possible match location. */ shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; if (0 < shift) { if (memory && shift < period) { /* Since needle is periodic, but the last period has a byte out of place, there can be no match until after the mismatch. */ shift = needle_len - period; } memory = 0; j += shift; continue; } /* Scan for matches in right half. The last byte has already been matched, by virtue of the shift table. */ i = MAX (suffix, memory); while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len - 1 <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (memory < i + 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i + 1 < memory + 1) return (RETURN_TYPE) (haystack + j); /* No match, so remember how many repetitions of period on the right half were scanned. */ j += period; memory = needle_len - period; } else { j += i - suffix + 1; memory = 0; } } } else { /* The two halves of needle are distinct; no extra memory is required, and any mismatch results in a maximal shift. */ size_t shift; period = MAX (suffix, needle_len - suffix) + 1; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Check the last byte first; if it does not match, then shift to the next possible match location. */ shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; if (0 < shift) { j += shift; continue; } /* Scan for matches in right half. The last byte has already been matched, by virtue of the shift table. */ i = suffix; while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len - 1 <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i == SIZE_MAX) return (RETURN_TYPE) (haystack + j); j += period; } else j += i - suffix + 1; } } return NULL; } #undef AVAILABLE #undef CANON_ELEMENT #undef CMP_FUNC #undef MAX #undef RETURN_TYPE ttfautohint-1.8.1/gnulib/src/msvc-inval.h0000644000175000001440000002114013222450623020227 0ustar00wlusers00000000000000/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _MSVC_INVAL_H #define _MSVC_INVAL_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines macros that turn such an invalid parameter notification into a non-local exit. An error code can then be produced at the target of this exit. You can thus write code like TRY_MSVC_INVAL { } CATCH_MSVC_INVAL { } DONE_MSVC_INVAL; This entire block expands to a single statement. The handling of invalid parameters can be done in three ways: * The default way, which is reasonable for programs (not libraries): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) * The way for libraries that make "hairy" calls (like close(-1), or fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) * The way for libraries that make no "hairy" calls: AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) */ #define DEFAULT_HANDLING 0 #define HAIRY_LIBRARY_HANDLING 1 #define SANE_LIBRARY_HANDLING 2 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* A native Windows platform with the "invalid parameter handler" concept, and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING /* Default handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that just returns. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) # else /* Handling for hairy libraries. */ # include /* Gnulib can define its own status codes, as described in the page "Raising Software Exceptions" on microsoft.com . Our status codes are composed of - 0xE0000000, mandatory for all user-defined status codes, - 0x474E550, a API identifier ("GNU"), - 0, 1, 2, ..., used to distinguish different status codes from the same API. */ # define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) # if defined _MSC_VER /* A compiler that supports __try/__except, as described in the page "try-except statement" on microsoft.com . With __try/__except, we can use the multithread-safe exception handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ __try # define CATCH_MSVC_INVAL \ __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ ? EXCEPTION_EXECUTE_HANDLER \ : EXCEPTION_CONTINUE_SEARCH) # define DONE_MSVC_INVAL \ } \ while (0) # else /* Any compiler. We can only use setjmp/longjmp. */ # include # ifdef __cplusplus extern "C" { # endif struct gl_msvc_inval_per_thread { /* The restart that will resume execution at the code between CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ jmp_buf restart; /* Tells whether the contents of restart is valid. */ int restart_valid; }; /* Ensure that the invalid parameter handler in installed that passes control to the gl_msvc_inval_restart if it is valid, or raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); /* Return a pointer to the per-thread data for the current thread. */ extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ struct gl_msvc_inval_per_thread *msvc_inval_current; \ gl_msvc_inval_ensure_handler (); \ msvc_inval_current = gl_msvc_inval_current (); \ /* First, initialize gl_msvc_inval_restart. */ \ if (setjmp (msvc_inval_current->restart) == 0) \ { \ /* Then, mark it as valid. */ \ msvc_inval_current->restart_valid = 1; # define CATCH_MSVC_INVAL \ /* Execution completed. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; \ } \ else \ { \ /* Execution triggered an invalid parameter notification. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; # define DONE_MSVC_INVAL \ } \ } \ while (0) # endif # endif #else /* A platform that does not need to the invalid parameter handler, or when SANE_LIBRARY_HANDLING is desired. */ /* The braces here avoid GCC warnings like "warning: suggest explicit braces to avoid ambiguous 'else'". */ # define TRY_MSVC_INVAL \ do \ { \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) #endif #endif /* _MSVC_INVAL_H */ ttfautohint-1.8.1/gnulib/src/msvc-nothrow.h0000644000175000001440000000301113222450623020613 0ustar00wlusers00000000000000/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _MSVC_NOTHROW_H #define _MSVC_NOTHROW_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines wrappers that turn such an invalid parameter notification into an error code. */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get original declaration of _get_osfhandle. */ # include # if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Override _get_osfhandle. */ extern intptr_t _gl_nothrow_get_osfhandle (int fd); # define _get_osfhandle _gl_nothrow_get_osfhandle # endif #endif #endif /* _MSVC_NOTHROW_H */ ttfautohint-1.8.1/gnulib/src/_Noreturn.h0000644000175000001440000000046213222450622020126 0ustar00wlusers00000000000000#if !defined _Noreturn && __STDC_VERSION__ < 201112 # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ttfautohint-1.8.1/gnulib/src/arg-nonnull.h0000644000175000001440000000230113222450622020401 0ustar00wlusers00000000000000/* A C macro for declaring that specific arguments must not be NULL. Copyright (C) 2009-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 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 . */ /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools that the values passed as arguments n, ..., m must be non-NULL pointers. n = 1 stands for the first argument, n = 2 for the second argument etc. */ #ifndef _GL_ARG_NONNULL # if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) # else # define _GL_ARG_NONNULL(params) # endif #endif ttfautohint-1.8.1/gnulib/src/c++defs.h0000644000175000001440000003413013222450622017364 0ustar00wlusers00000000000000/* C++ compatible function declaration macros. Copyright (C) 2010-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _GL_CXXDEFS_H #define _GL_CXXDEFS_H /* Begin/end the GNULIB_NAMESPACE namespace. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { # define _GL_END_NAMESPACE } #else # define _GL_BEGIN_NAMESPACE # define _GL_END_NAMESPACE #endif /* The three most frequent use cases of these macros are: * For providing a substitute for a function that is missing on some platforms, but is declared and works fine on the platforms on which it exists: #if @GNULIB_FOO@ # if !@HAVE_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on all platforms, but is broken/insufficient and needs to be replaced on some platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on some platforms but is broken/insufficient and needs to be replaced on some of them and is additionally either missing or undeclared on some other platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif */ /* _GL_EXTERN_C declaration; performs the declaration with C linkage. */ #if defined __cplusplus # define _GL_EXTERN_C extern "C" #else # define _GL_EXTERN_C extern #endif /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); declares a replacement function, named rpl_func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype rpl_func parameters_and_attributes /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); declares the system function, named func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype func parameters_and_attributes /* _GL_CXXALIAS_RPL (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to rpl_func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); Wrapping rpl_func in an object with an inline conversion operator avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is actually used in the program. */ #define _GL_CXXALIAS_RPL(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::rpl_func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); except that the C function rpl_func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast(::rpl_func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to the system provided function func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); Wrapping func in an object with an inline conversion operator avoids a reference to func unless GNULIB_NAMESPACE::func is actually used in the program. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast(::func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function is picked among a set of overloaded functions, namely the one with rettype2 and parameters2. Two consecutive casts are used to silence the "cannot find a match" and "invalid conversion" errors that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE /* The outer cast must be a reinterpret_cast. The inner cast: When the function is defined as a set of overloaded functions, it works as a static_cast<>, choosing the designated variant. When the function is defined as a single variant, it works as a reinterpret_cast<>. The parenthesized cast syntax works both ways. */ # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN (func); causes a warning to be emitted when ::func is used but not when GNULIB_NAMESPACE::func is used. func must be defined without overloaded variants. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN(func) \ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) # define _GL_CXXALIASWARN_1(func,namespace) \ _GL_CXXALIASWARN_2 (func, namespace) /* To work around GCC bug , we enable the warning only when not optimizing. */ # if !__OPTIMIZE__ # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_WARN_ON_USE (func, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN_2(func,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN(func) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); causes a warning to be emitted when the given overloaded variant of ::func is used but not when GNULIB_NAMESPACE::func is used. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ GNULIB_NAMESPACE) # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) /* To work around GCC bug , we enable the warning only when not optimizing. */ # if !__OPTIMIZE__ # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif #endif /* _GL_CXXDEFS_H */ ttfautohint-1.8.1/gnulib/src/warn-on-use.h0000644000175000001440000001201013222450624020320 0ustar00wlusers00000000000000/* A C macro for emitting warnings if a function is used. Copyright (C) 2010-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 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 . */ /* _GL_WARN_ON_USE (function, "literal string") issues a declaration for FUNCTION which will then trigger a compiler warning containing the text of "literal string" anywhere that function is called, if supported by the compiler. If the compiler does not support this feature, the macro expands to an unused extern declaration. This macro is useful for marking a function as a potential portability trap, with the intent that "literal string" include instructions on the replacement function that should be used instead. However, one of the reasons that a function is a portability trap is if it has the wrong signature. Declaring FUNCTION with a different signature in C is a compilation error, so this macro must use the same type as any existing declaration so that programs that avoid the problematic FUNCTION do not fail to compile merely because they included a header that poisoned the function. But this implies that _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already have a declaration. Use of this macro implies that there must not be any other macro hiding the declaration of FUNCTION; but undefining FUNCTION first is part of the poisoning process anyway (although for symbols that are provided only via a macro, the result is a compilation error rather than a warning containing "literal string"). Also note that in C++, it is only safe to use if FUNCTION has no overloads. For an example, it is possible to poison 'getline' by: - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], [getline]) in configure.ac, which potentially defines HAVE_RAW_DECL_GETLINE - adding this code to a header that wraps the system : #undef getline #if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" "not universally present; use the gnulib module getline"); #endif It is not possible to directly poison global variables. But it is possible to write a wrapper accessor function, and poison that (less common usage, like &environ, will cause a compilation error rather than issue the nice warning, but the end result of informing the developer about their portability problem is still achieved): #if HAVE_RAW_DECL_ENVIRON static char ***rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); # undef environ # define environ (*rpl_environ ()) #endif */ #ifndef _GL_WARN_ON_USE # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function __attribute__ ((__warning__ (message))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function # else /* Unsupported. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif #endif /* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") is like _GL_WARN_ON_USE (function, "string"), except that the function is declared with the given prototype, consisting of return type, parameters, and attributes. This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does not work in this case. */ #ifndef _GL_WARN_ON_USE_CXX # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes \ __attribute__ ((__warning__ (msg))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes # else /* Unsupported. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif #endif /* _GL_WARN_EXTERN_C declaration; performs the declaration with C linkage. */ #ifndef _GL_WARN_EXTERN_C # if defined __cplusplus # define _GL_WARN_EXTERN_C extern "C" # else # define _GL_WARN_EXTERN_C extern # endif #endif ttfautohint-1.8.1/gnulib/src/stdarg.in.h0000644000175000001440000000216313222450623020045 0ustar00wlusers00000000000000/* Substitute for and wrapper around . Copyright (C) 2008-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _@GUARD_PREFIX@_STDARG_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDARG_H@ #ifndef _@GUARD_PREFIX@_STDARG_H #define _@GUARD_PREFIX@_STDARG_H #ifndef va_copy # define va_copy(a,b) ((a) = (b)) #endif #endif /* _@GUARD_PREFIX@_STDARG_H */ #endif /* _@GUARD_PREFIX@_STDARG_H */ ttfautohint-1.8.1/gnulib/src/stdbool.in.h0000644000175000001440000001175013222450623020231 0ustar00wlusers00000000000000/* Copyright (C) 2001-2003, 2006-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2001. This program is free software; you can 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _GL_STDBOOL_H #define _GL_STDBOOL_H /* ISO C 99 for platforms that lack it. */ /* Usage suggestions: Programs that use should be aware of some limitations and standards compliance issues. Standards compliance: - must be #included before 'bool', 'false', 'true' can be used. - You cannot assume that sizeof (bool) == 1. - Programs should not undefine the macros bool, true, and false, as C99 lists that as an "obsolescent feature". Limitations of this substitute, when used in a C89 environment: - must be #included before the '_Bool' type can be used. - You cannot assume that _Bool is a typedef; it might be a macro. - Bit-fields of type 'bool' are not supported. Portable code should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. - In C99, casts and automatic conversions to '_Bool' or 'bool' are performed in such a way that every nonzero value gets converted to 'true', and zero gets converted to 'false'. This doesn't work with this substitute. With this substitute, only the values 0 and 1 give the expected result when converted to _Bool' or 'bool'. - C99 allows the use of (_Bool)0.0 in constant expressions, but this substitute cannot always provide this property. Also, it is suggested that programs use 'bool' rather than '_Bool'; this isn't required, but 'bool' is more common. */ /* 7.16. Boolean type and values */ /* BeOS already #defines false 0, true 1. We use the same definitions below, but temporarily we have to #undef them. */ #if defined __BEOS__ && !defined __HAIKU__ # include /* defines bool but not _Bool */ # undef false # undef true #endif #ifdef __cplusplus # define _Bool bool # define bool bool #else # if defined __BEOS__ && !defined __HAIKU__ /* A compiler known to have 'bool'. */ /* If the compiler already has both 'bool' and '_Bool', we can assume they are the same types. */ # if !@HAVE__BOOL@ typedef bool _Bool; # endif # else # if !defined __GNUC__ /* If @HAVE__BOOL@: Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when the built-in _Bool type is used. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html https://lists.gnu.org/r/bug-coreutils/2005-10/msg00086.html Similar bugs are likely with other compilers as well; this file wouldn't be used if was working. So we override the _Bool type. If !@HAVE__BOOL@: Need to define _Bool ourselves. As 'signed char' or as an enum type? Use of a typedef, with SunPRO C, leads to a stupid "warning: _Bool is a keyword in ISO C99". Use of an enum type, with IRIX cc, leads to a stupid "warning(1185): enumerated type mixed with another type". Even the existence of an enum type, without a typedef, "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. The only benefit of the enum, debuggability, is not important with these compilers. So use 'signed char' and no enum. */ # define _Bool signed char # else /* With this compiler, trust the _Bool type if the compiler has it. */ # if !@HAVE__BOOL@ /* For the sake of symbolic names in gdb, define true and false as enum constants, not only as macros. It is tempting to write typedef enum { false = 0, true = 1 } _Bool; so that gdb prints values of type 'bool' symbolically. But then values of type '_Bool' might promote to 'int' or 'unsigned int' (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' (see ISO C 99 6.3.1.1.(2)). So add a negative value to the enum; this ensures that '_Bool' promotes to 'int'. */ typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; # endif # endif # endif # define bool _Bool #endif /* The other macros must be usable in preprocessor directives. */ #ifdef __cplusplus # define false false # define true true #else # define false 0 # define true 1 #endif #define __bool_true_false_are_defined 1 #endif /* _GL_STDBOOL_H */ ttfautohint-1.8.1/gnulib/src/stddef.in.h0000644000175000001440000000746313222450623020042 0ustar00wlusers00000000000000/* A substitute for POSIX 2008 , for platforms that have issues. Copyright (C) 2009-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ /* Written by Eric Blake. */ /* * POSIX 2008 for platforms that have issues. * */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_wchar_t || defined __need_size_t \ || defined __need_ptrdiff_t || defined __need_NULL \ || defined __need_wint_t /* Special invocation convention inside gcc header files. In particular, gcc provides a version of that blindly redefines NULL even when __need_wint_t was defined, even though wint_t is not normally provided by . Hence, we must remember if special invocation has ever been used to obtain wint_t, in which case we need to clean up NULL yet again. */ # if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) # ifdef __need_wint_t # define _GL_STDDEF_WINT_T # endif # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # endif #else /* Normal invocation convention. */ # ifndef _@GUARD_PREFIX@_STDDEF_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ /* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ # if (@REPLACE_NULL@ \ && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T)) # undef NULL # ifdef __cplusplus /* ISO C++ says that the macro NULL must expand to an integer constant expression, hence '((void *) 0)' is not allowed in C++. */ # if __GNUG__ >= 3 /* GNU C++ has a __null macro that behaves like an integer ('int' or 'long') but has the same size as a pointer. Use that, to avoid warnings. */ # define NULL __null # else # define NULL 0L # endif # else # define NULL ((void *) 0) # endif # endif # ifndef _@GUARD_PREFIX@_STDDEF_H # define _@GUARD_PREFIX@_STDDEF_H /* Some platforms lack wchar_t. */ #if !@HAVE_WCHAR_T@ # define wchar_t int #endif /* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is a hack in case the configure-time test was done with g++ even though we are currently compiling with gcc. */ #if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T) # if !GNULIB_defined_max_align_t /* On the x86, the maximum storage alignment of double, long, etc. is 4, but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8, and the C11 standard allows this. Work around this problem by using __alignof__ (which returns 8 for double) rather than _Alignof (which returns 4), and align each union member accordingly. */ # ifdef __GNUC__ # define _GL_STDDEF_ALIGNAS(type) \ __attribute__ ((__aligned__ (__alignof__ (type)))) # else # define _GL_STDDEF_ALIGNAS(type) /* */ # endif typedef union { char *__p _GL_STDDEF_ALIGNAS (char *); double __d _GL_STDDEF_ALIGNAS (double); long double __ld _GL_STDDEF_ALIGNAS (long double); long int __i _GL_STDDEF_ALIGNAS (long int); } rpl_max_align_t; # define max_align_t rpl_max_align_t # define GNULIB_defined_max_align_t 1 # endif #endif # endif /* _@GUARD_PREFIX@_STDDEF_H */ # endif /* _@GUARD_PREFIX@_STDDEF_H */ #endif /* __need_XXX */ ttfautohint-1.8.1/gnulib/src/stdint.in.h0000644000175000001440000005421713222450623020075 0ustar00wlusers00000000000000/* Copyright (C) 2001-2002, 2004-2017 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. This file is part of gnulib. This program is free software; you can 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ /* * ISO C 99 for platforms that lack it. * */ #ifndef _@GUARD_PREFIX@_STDINT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* When including a system file that in turn includes , use the system , not our substitute. This avoids problems with (for example) VMS, whose includes . */ #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* On Android (Bionic libc), includes this file before having defined 'time_t'. Therefore in this case avoid including other system header files; just include the system's . Ideally we should test __BIONIC__ here, but it is only defined after has been included; hence test __ANDROID__ instead. */ #if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #else /* Get those types that are already defined in other system include files, so that we can "#define int8_t signed char" below without worrying about a later system include file containing a "typedef signed char int8_t;" that will get messed up by our macro. Our macros should all be consistent with the system versions, except for the "fast" types and macros, which we recommend against using in public interfaces due to compiler differences. */ #if @HAVE_STDINT_H@ # if defined __sgi && ! defined __c99 /* Bypass IRIX's if in C89 mode, since it merely annoys users with "This header file is to be used only for c99 mode compilations" diagnostics. */ # define __STDINT_H__ # endif /* Some pre-C++11 implementations need this. */ # ifdef __cplusplus # ifndef __STDC_CONSTANT_MACROS # define __STDC_CONSTANT_MACROS 1 # endif # ifndef __STDC_LIMIT_MACROS # define __STDC_LIMIT_MACROS 1 # endif # endif /* Other systems may have an incomplete or buggy . Include it before , since any "#include " in would reinclude us, skipping our contents because _@GUARD_PREFIX@_STDINT_H is defined. The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #endif #if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H #define _@GUARD_PREFIX@_STDINT_H /* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ #include /* Override WINT_MIN and WINT_MAX if gnulib's or overrides wint_t. */ #if @GNULIB_OVERRIDES_WINT_T@ # undef WINT_MIN # undef WINT_MAX # define WINT_MIN 0x0U # define WINT_MAX 0xffffffffU #endif #if ! @HAVE_C99_STDINT_H@ /* defines some of the stdint.h types as well, on glibc, IRIX 6.5, and OpenBSD 3.8 (via ). AIX 5.2 isn't needed and causes troubles. Mac OS X 10.4.6 includes (which is us), but relies on the system definitions, so include after @NEXT_STDINT_H@. */ # if @HAVE_SYS_TYPES_H@ && ! defined _AIX # include # endif # if @HAVE_INTTYPES_H@ /* In OpenBSD 3.8, includes , which defines int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. also defines intptr_t and uintptr_t. */ # include # elif @HAVE_SYS_INTTYPES_H@ /* Solaris 7 has the types except the *_fast*_t types, and the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ # include # endif # if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ /* Linux libc4 >= 4.6.7 and libc5 have a that defines int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is included by . */ # include # endif # undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* Minimum and maximum values for an integer type under the usual assumption. Return an unspecified value if BITS == 0, adding a check to pacify picky compilers. */ /* These are separate macros, because if you try to merge these macros into a single one, HP-UX cc rejects the resulting expression in constant expressions. */ # define _STDINT_UNSIGNED_MIN(bits, zero) \ (zero) # define _STDINT_SIGNED_MIN(bits, zero) \ (~ _STDINT_MAX (1, bits, zero)) # define _STDINT_MAX(signed, bits, zero) \ (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) #if !GNULIB_defined_stdint_types /* 7.18.1.1. Exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef int8_t # undef uint8_t typedef signed char gl_int8_t; typedef unsigned char gl_uint8_t; # define int8_t gl_int8_t # define uint8_t gl_uint8_t # undef int16_t # undef uint16_t typedef short int gl_int16_t; typedef unsigned short int gl_uint16_t; # define int16_t gl_int16_t # define uint16_t gl_uint16_t # undef int32_t # undef uint32_t typedef int gl_int32_t; typedef unsigned int gl_uint32_t; # define int32_t gl_int32_t # define uint32_t gl_uint32_t /* If the system defines INT64_MAX, assume int64_t works. That way, if the underlying platform defines int64_t to be a 64-bit long long int, the code below won't mistakenly define it to be a 64-bit long int, which would mess up C++ name mangling. We must use #ifdef rather than #if, to avoid an error with HP-UX 10.20 cc. */ # ifdef INT64_MAX # define GL_INT64_T # else /* Do not undefine int64_t if gnulib is not being used with 64-bit types, since otherwise it breaks platforms like Tandem/NSK. */ # if LONG_MAX >> 31 >> 31 == 1 # undef int64_t typedef long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # elif defined _MSC_VER # undef int64_t typedef __int64 gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # elif @HAVE_LONG_LONG_INT@ # undef int64_t typedef long long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # endif # endif # ifdef UINT64_MAX # define GL_UINT64_T # else # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # undef uint64_t typedef unsigned long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # elif defined _MSC_VER # undef uint64_t typedef unsigned __int64 gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # elif @HAVE_UNSIGNED_LONG_LONG_INT@ # undef uint64_t typedef unsigned long long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # endif # endif /* Avoid collision with Solaris 2.5.1 etc. */ # define _UINT8_T # define _UINT32_T # define _UINT64_T /* 7.18.1.2. Minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef int_least8_t # undef uint_least8_t # undef int_least16_t # undef uint_least16_t # undef int_least32_t # undef uint_least32_t # undef int_least64_t # undef uint_least64_t # define int_least8_t int8_t # define uint_least8_t uint8_t # define int_least16_t int16_t # define uint_least16_t uint16_t # define int_least32_t int32_t # define uint_least32_t uint32_t # ifdef GL_INT64_T # define int_least64_t int64_t # endif # ifdef GL_UINT64_T # define uint_least64_t uint64_t # endif /* 7.18.1.3. Fastest minimum-width integer types */ /* Note: Other substitutes may define these types differently. It is not recommended to use these types in public header files. */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. The following code normally uses types consistent with glibc, as that lessens the chance of incompatibility with older GNU hosts. */ # undef int_fast8_t # undef uint_fast8_t # undef int_fast16_t # undef uint_fast16_t # undef int_fast32_t # undef uint_fast32_t # undef int_fast64_t # undef uint_fast64_t typedef signed char gl_int_fast8_t; typedef unsigned char gl_uint_fast8_t; # ifdef __sun /* Define types compatible with SunOS 5.10, so that code compiled under earlier SunOS versions works with code compiled under SunOS 5.10. */ typedef int gl_int_fast32_t; typedef unsigned int gl_uint_fast32_t; # else typedef long int gl_int_fast32_t; typedef unsigned long int gl_uint_fast32_t; # endif typedef gl_int_fast32_t gl_int_fast16_t; typedef gl_uint_fast32_t gl_uint_fast16_t; # define int_fast8_t gl_int_fast8_t # define uint_fast8_t gl_uint_fast8_t # define int_fast16_t gl_int_fast16_t # define uint_fast16_t gl_uint_fast16_t # define int_fast32_t gl_int_fast32_t # define uint_fast32_t gl_uint_fast32_t # ifdef GL_INT64_T # define int_fast64_t int64_t # endif # ifdef GL_UINT64_T # define uint_fast64_t uint64_t # endif /* 7.18.1.4. Integer types capable of holding object pointers */ /* kLIBC's stdint.h defines _INTPTR_T_DECLARED and needs its own definitions of intptr_t and uintptr_t (which use int and unsigned) to avoid clashes with declarations of system functions like sbrk. */ # ifndef _INTPTR_T_DECLARED # undef intptr_t # undef uintptr_t typedef long int gl_intptr_t; typedef unsigned long int gl_uintptr_t; # define intptr_t gl_intptr_t # define uintptr_t gl_uintptr_t # endif /* 7.18.1.5. Greatest-width integer types */ /* Note: These types are compiler dependent. It may be unwise to use them in public header files. */ /* If the system defines INTMAX_MAX, assume that intmax_t works, and similarly for UINTMAX_MAX and uintmax_t. This avoids problems with assuming one type where another is used by the system. */ # ifndef INTMAX_MAX # undef INTMAX_C # undef intmax_t # if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 typedef long long int gl_intmax_t; # define intmax_t gl_intmax_t # elif defined GL_INT64_T # define intmax_t int64_t # else typedef long int gl_intmax_t; # define intmax_t gl_intmax_t # endif # endif # ifndef UINTMAX_MAX # undef UINTMAX_C # undef uintmax_t # if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 typedef unsigned long long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # elif defined GL_UINT64_T # define uintmax_t uint64_t # else typedef unsigned long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # endif # endif /* Verify that intmax_t and uintmax_t have the same size. Too much code breaks if this is not the case. If this check fails, the reason is likely to be found in the autoconf macros. */ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) ? 1 : -1]; # define GNULIB_defined_stdint_types 1 # endif /* !GNULIB_defined_stdint_types */ /* 7.18.2. Limits of specified-width integer types */ /* 7.18.2.1. Limits of exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef INT8_MIN # undef INT8_MAX # undef UINT8_MAX # define INT8_MIN (~ INT8_MAX) # define INT8_MAX 127 # define UINT8_MAX 255 # undef INT16_MIN # undef INT16_MAX # undef UINT16_MAX # define INT16_MIN (~ INT16_MAX) # define INT16_MAX 32767 # define UINT16_MAX 65535 # undef INT32_MIN # undef INT32_MAX # undef UINT32_MAX # define INT32_MIN (~ INT32_MAX) # define INT32_MAX 2147483647 # define UINT32_MAX 4294967295U # if defined GL_INT64_T && ! defined INT64_MAX /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 evaluates the latter incorrectly in preprocessor expressions. */ # define INT64_MIN (- INTMAX_C (1) << 63) # define INT64_MAX INTMAX_C (9223372036854775807) # endif # if defined GL_UINT64_T && ! defined UINT64_MAX # define UINT64_MAX UINTMAX_C (18446744073709551615) # endif /* 7.18.2.2. Limits of minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef INT_LEAST8_MIN # undef INT_LEAST8_MAX # undef UINT_LEAST8_MAX # define INT_LEAST8_MIN INT8_MIN # define INT_LEAST8_MAX INT8_MAX # define UINT_LEAST8_MAX UINT8_MAX # undef INT_LEAST16_MIN # undef INT_LEAST16_MAX # undef UINT_LEAST16_MAX # define INT_LEAST16_MIN INT16_MIN # define INT_LEAST16_MAX INT16_MAX # define UINT_LEAST16_MAX UINT16_MAX # undef INT_LEAST32_MIN # undef INT_LEAST32_MAX # undef UINT_LEAST32_MAX # define INT_LEAST32_MIN INT32_MIN # define INT_LEAST32_MAX INT32_MAX # define UINT_LEAST32_MAX UINT32_MAX # undef INT_LEAST64_MIN # undef INT_LEAST64_MAX # ifdef GL_INT64_T # define INT_LEAST64_MIN INT64_MIN # define INT_LEAST64_MAX INT64_MAX # endif # undef UINT_LEAST64_MAX # ifdef GL_UINT64_T # define UINT_LEAST64_MAX UINT64_MAX # endif /* 7.18.2.3. Limits of fastest minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. */ # undef INT_FAST8_MIN # undef INT_FAST8_MAX # undef UINT_FAST8_MAX # define INT_FAST8_MIN SCHAR_MIN # define INT_FAST8_MAX SCHAR_MAX # define UINT_FAST8_MAX UCHAR_MAX # undef INT_FAST16_MIN # undef INT_FAST16_MAX # undef UINT_FAST16_MAX # define INT_FAST16_MIN INT_FAST32_MIN # define INT_FAST16_MAX INT_FAST32_MAX # define UINT_FAST16_MAX UINT_FAST32_MAX # undef INT_FAST32_MIN # undef INT_FAST32_MAX # undef UINT_FAST32_MAX # ifdef __sun # define INT_FAST32_MIN INT_MIN # define INT_FAST32_MAX INT_MAX # define UINT_FAST32_MAX UINT_MAX # else # define INT_FAST32_MIN LONG_MIN # define INT_FAST32_MAX LONG_MAX # define UINT_FAST32_MAX ULONG_MAX # endif # undef INT_FAST64_MIN # undef INT_FAST64_MAX # ifdef GL_INT64_T # define INT_FAST64_MIN INT64_MIN # define INT_FAST64_MAX INT64_MAX # endif # undef UINT_FAST64_MAX # ifdef GL_UINT64_T # define UINT_FAST64_MAX UINT64_MAX # endif /* 7.18.2.4. Limits of integer types capable of holding object pointers */ # undef INTPTR_MIN # undef INTPTR_MAX # undef UINTPTR_MAX # define INTPTR_MIN LONG_MIN # define INTPTR_MAX LONG_MAX # define UINTPTR_MAX ULONG_MAX /* 7.18.2.5. Limits of greatest-width integer types */ # ifndef INTMAX_MAX # undef INTMAX_MIN # ifdef INT64_MAX # define INTMAX_MIN INT64_MIN # define INTMAX_MAX INT64_MAX # else # define INTMAX_MIN INT32_MIN # define INTMAX_MAX INT32_MAX # endif # endif # ifndef UINTMAX_MAX # ifdef UINT64_MAX # define UINTMAX_MAX UINT64_MAX # else # define UINTMAX_MAX UINT32_MAX # endif # endif /* 7.18.3. Limits of other integer types */ /* ptrdiff_t limits */ # undef PTRDIFF_MIN # undef PTRDIFF_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l) # define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) # else # define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0) # define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) # endif # else # define PTRDIFF_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # define PTRDIFF_MAX \ _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # endif /* sig_atomic_t limits */ # undef SIG_ATOMIC_MIN # undef SIG_ATOMIC_MAX # if @HAVE_SIGNED_SIG_ATOMIC_T@ # define SIG_ATOMIC_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # else # define SIG_ATOMIC_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # endif # define SIG_ATOMIC_MAX \ _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 0@SIG_ATOMIC_T_SUFFIX@) /* size_t limit */ # undef SIZE_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define SIZE_MAX _STDINT_MAX (0, 64, 0ul) # else # define SIZE_MAX _STDINT_MAX (0, 32, 0ul) # endif # else # define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) # endif /* wchar_t limits */ /* Get WCHAR_MIN, WCHAR_MAX. This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested includes -> -> -> , and the latter includes and assumes its types are already defined. */ # if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) /* BSD/OS 4.0.1 has a bug: , and must be included before . */ # include # include # include # define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # include # undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # endif # undef WCHAR_MIN # undef WCHAR_MAX # if @HAVE_SIGNED_WCHAR_T@ # define WCHAR_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # else # define WCHAR_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # endif # define WCHAR_MAX \ _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) /* wint_t limits */ # undef WINT_MIN # undef WINT_MAX # if @HAVE_SIGNED_WINT_T@ # define WINT_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # else # define WINT_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # endif # define WINT_MAX \ _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) /* 7.18.4. Macros for integer constants */ /* 7.18.4.1. Macros for minimum-width integer constants */ /* According to ISO C 99 Technical Corrigendum 1 */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ # undef INT8_C # undef UINT8_C # define INT8_C(x) x # define UINT8_C(x) x # undef INT16_C # undef UINT16_C # define INT16_C(x) x # define UINT16_C(x) x # undef INT32_C # undef UINT32_C # define INT32_C(x) x # define UINT32_C(x) x ## U # undef INT64_C # undef UINT64_C # if LONG_MAX >> 31 >> 31 == 1 # define INT64_C(x) x##L # elif defined _MSC_VER # define INT64_C(x) x##i64 # elif @HAVE_LONG_LONG_INT@ # define INT64_C(x) x##LL # endif # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # define UINT64_C(x) x##UL # elif defined _MSC_VER # define UINT64_C(x) x##ui64 # elif @HAVE_UNSIGNED_LONG_LONG_INT@ # define UINT64_C(x) x##ULL # endif /* 7.18.4.2. Macros for greatest-width integer constants */ # ifndef INTMAX_C # if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 # define INTMAX_C(x) x##LL # elif defined GL_INT64_T # define INTMAX_C(x) INT64_C(x) # else # define INTMAX_C(x) x##L # endif # endif # ifndef UINTMAX_C # if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 # define UINTMAX_C(x) x##ULL # elif defined GL_UINT64_T # define UINTMAX_C(x) UINT64_C(x) # else # define UINTMAX_C(x) x##UL # endif # endif #endif /* !@HAVE_C99_STDINT_H@ */ /* Macros specified by ISO/IEC TS 18661-1:2014. */ #if (!defined UINTMAX_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) # ifdef INT8_MAX # define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) # endif # ifdef UINT8_MAX # define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) # endif # ifdef INT16_MAX # define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) # endif # ifdef UINT16_MAX # define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) # endif # ifdef INT32_MAX # define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) # endif # ifdef UINT32_MAX # define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) # endif # ifdef INT64_MAX # define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) # endif # ifdef UINT64_MAX # define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) # endif # define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) # define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) # define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) # define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) # define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) # define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) # define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) # define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) # define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) # define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) # define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) # define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) # define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) # define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) # define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) # define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) # define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) # define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) # define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) # define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) # define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) # define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) # define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) # ifdef WINT_MAX # define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) # endif # ifdef SIG_ATOMIC_MAX # define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) # endif #endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ #endif /* _@GUARD_PREFIX@_STDINT_H */ #endif /* !(defined __ANDROID__ && ...) */ #endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ ttfautohint-1.8.1/gnulib/src/stdio.in.h0000644000175000001440000014437113222450623017713 0ustar00wlusers00000000000000/* A GNU-like . Copyright (C) 2004, 2007-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H /* Special invocation convention: - Inside glibc header files. - On OSF/1 5.1 we have a sequence of nested includes -> -> -> -> -> -> -> . In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDIO_H #define _GL_ALREADY_INCLUDING_STDIO_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #undef _GL_ALREADY_INCLUDING_STDIO_H #ifndef _@GUARD_PREFIX@_STDIO_H #define _@GUARD_PREFIX@_STDIO_H /* Get va_list. Needed on many systems, including glibc 2.8. */ #include #include /* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 and eglibc 2.11.2. May also define off_t to a 64-bit type on native Windows. */ #include /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF, except that it indicates to GCC that the supported format string directives are the ones of the system printf(), rather than the ones standardized by ISO C99 and POSIX. */ #if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU # define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT_PRINTF (formatstring_parameter, first_argument) #else # define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_SCANF indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, except that it indicates to GCC that the supported format string directives are the ones of the system scanf(), rather than the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) /* Solaris 10 and NetBSD 7.0 declare renameat in , not in . */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \ && ! defined __GLIBC__ # include #endif /* MSVC declares 'perror' in , not in . We must include it before we #define perror rpl_perror. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include #endif /* MSVC declares 'remove' in , not in . We must include it before we #define remove rpl_remove. */ /* MSVC declares 'rename' in , not in . We must include it before we #define rename rpl_rename. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Macros for stringification. */ #define _GL_STDIO_STRINGIZE(token) #token #define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., . Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && defined __GNUC__ && defined __STDC__) # undef putc_unlocked #endif #if @GNULIB_DPRINTF@ # if @REPLACE_DPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dprintf rpl_dprintf # endif _GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...)); # else # if !@HAVE_DPRINTF@ _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...)); # endif _GL_CXXALIASWARN (dprintf); #elif defined GNULIB_POSIXCHECK # undef dprintf # if HAVE_RAW_DECL_DPRINTF _GL_WARN_ON_USE (dprintf, "dprintf is unportable - " "use gnulib module dprintf for portability"); # endif #endif #if @GNULIB_FCLOSE@ /* Close STREAM and its underlying file descriptor. */ # if @REPLACE_FCLOSE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fclose rpl_fclose # endif _GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); # endif _GL_CXXALIASWARN (fclose); #elif defined GNULIB_POSIXCHECK # undef fclose /* Assume fclose is always declared. */ _GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " "use gnulib module fclose for portable POSIX compliance"); #endif #if @GNULIB_FDOPEN@ # if @REPLACE_FDOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen rpl_fdopen # endif _GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); # else _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif _GL_CXXALIASWARN (fdopen); #elif defined GNULIB_POSIXCHECK # undef fdopen /* Assume fdopen is always declared. */ _GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " "use gnulib module fdopen for portability"); #endif #if @GNULIB_FFLUSH@ /* Flush all pending data on STREAM according to POSIX rules. Both output and seekable input streams are supported. Note! LOSS OF DATA can occur if fflush is applied on an input stream that is _not_seekable_ or on an update stream that is _not_seekable_ and in which the most recent operation was input. Seekability can be tested with lseek(fileno(fp),0,SEEK_CUR). */ # if @REPLACE_FFLUSH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fflush rpl_fflush # endif _GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); _GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); # else _GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); # endif _GL_CXXALIASWARN (fflush); #elif defined GNULIB_POSIXCHECK # undef fflush /* Assume fflush is always declared. */ _GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " "use gnulib module fflush for portable POSIX compliance"); #endif #if @GNULIB_FGETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgetc # define fgetc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); # endif _GL_CXXALIASWARN (fgetc); #endif #if @GNULIB_FGETS@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgets # define fgets rpl_fgets # endif _GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream)); # else _GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream)); # endif _GL_CXXALIASWARN (fgets); #endif #if @GNULIB_FOPEN@ # if @REPLACE_FOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fopen # define fopen rpl_fopen # endif _GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode)); # else _GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode)); # endif _GL_CXXALIASWARN (fopen); #elif defined GNULIB_POSIXCHECK # undef fopen /* Assume fopen is always declared. */ _GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " "use gnulib module fopen for portability"); #endif #if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ # if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fprintf rpl_fprintf # endif # define GNULIB_overrides_fprintf 1 # if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...)); # else _GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...)); # endif _GL_CXXALIASWARN (fprintf); #endif #if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_fprintf # undef fprintf # endif /* Assume fprintf is always declared. */ _GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " "use gnulib module fprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_FPURGE@ /* Discard all pending buffered I/O data on STREAM. STREAM must not be wide-character oriented. When discarding pending output, the file position is set back to where it was before the write calls. When discarding pending input, the file position is advanced to match the end of the previously read input. Return 0 if successful. Upon error, return -1 and set errno. */ # if @REPLACE_FPURGE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fpurge rpl_fpurge # endif _GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); # else # if !@HAVE_DECL_FPURGE@ _GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); # endif _GL_CXXALIASWARN (fpurge); #elif defined GNULIB_POSIXCHECK # undef fpurge # if HAVE_RAW_DECL_FPURGE _GL_WARN_ON_USE (fpurge, "fpurge is not always present - " "use gnulib module fpurge for portability"); # endif #endif #if @GNULIB_FPUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputc # define fputc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); # endif _GL_CXXALIASWARN (fputc); #endif #if @GNULIB_FPUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputs # define fputs rpl_fputs # endif _GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream)); # else _GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream)); # endif _GL_CXXALIASWARN (fputs); #endif #if @GNULIB_FREAD@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fread # define fread rpl_fread # endif _GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); # else _GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); # endif _GL_CXXALIASWARN (fread); #endif #if @GNULIB_FREOPEN@ # if @REPLACE_FREOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef freopen # define freopen rpl_freopen # endif _GL_FUNCDECL_RPL (freopen, FILE *, (const char *filename, const char *mode, FILE *stream) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (freopen, FILE *, (const char *filename, const char *mode, FILE *stream)); # else _GL_CXXALIAS_SYS (freopen, FILE *, (const char *filename, const char *mode, FILE *stream)); # endif _GL_CXXALIASWARN (freopen); #elif defined GNULIB_POSIXCHECK # undef freopen /* Assume freopen is always declared. */ _GL_WARN_ON_USE (freopen, "freopen on native Windows platforms is not POSIX compliant - " "use gnulib module freopen for portability"); #endif #if @GNULIB_FSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fscanf # define fscanf rpl_fscanf # endif _GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...)); # else _GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...)); # endif _GL_CXXALIASWARN (fscanf); #endif /* Set up the following warnings, based on which modules are in use. GNU Coding Standards discourage the use of fseek, since it imposes an arbitrary limitation on some 32-bit hosts. Remember that the fseek module depends on the fseeko module, so we only have three cases to consider: 1. The developer is not using either module. Issue a warning under GNULIB_POSIXCHECK for both functions, to remind them that both functions have bugs on some systems. _GL_NO_LARGE_FILES has no impact on this warning. 2. The developer is using both modules. They may be unaware of the arbitrary limitations of fseek, so issue a warning under GNULIB_POSIXCHECK. On the other hand, they may be using both modules intentionally, so the developer can define _GL_NO_LARGE_FILES in the compilation units where the use of fseek is safe, to silence the warning. 3. The developer is using the fseeko module, but not fseek. Gnulib guarantees that fseek will still work around platform bugs in that case, but we presume that the developer is aware of the pitfalls of fseek and was trying to avoid it, so issue a warning even when GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be defined to silence the warning in particular compilation units. In C++ compilations with GNULIB_NAMESPACE, in order to avoid that fseek gets defined as a macro, it is recommended that the developer uses the fseek module, even if he is not calling the fseek function. Most gnulib clients that perform stream operations should fall into category 3. */ #if @GNULIB_FSEEK@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 2, above. */ # undef fseek # endif # if @REPLACE_FSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseek # define fseek rpl_fseek # endif _GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); # else _GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); # endif _GL_CXXALIASWARN (fseek); #endif #if @GNULIB_FSEEKO@ # if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 3, above. */ # undef fseek # endif # if @REPLACE_FSEEKO@ /* Provide an fseeko function that is aware of a preceding fflush(), and which detects pipes. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseeko # define fseeko rpl_fseeko # endif _GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); # else # if ! @HAVE_DECL_FSEEKO@ _GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); # endif _GL_CXXALIASWARN (fseeko); #elif defined GNULIB_POSIXCHECK # define _GL_FSEEK_WARN /* Category 1, above. */ # undef fseek # undef fseeko # if HAVE_RAW_DECL_FSEEKO _GL_WARN_ON_USE (fseeko, "fseeko is unportable - " "use gnulib module fseeko for portability"); # endif #endif #ifdef _GL_FSEEK_WARN # undef _GL_FSEEK_WARN /* Here, either fseek is undefined (but C89 guarantees that it is declared), or it is defined as rpl_fseek (declared above). */ _GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " "on 32-bit platforms - " "use fseeko function for handling of large files"); #endif /* ftell, ftello. See the comments on fseek/fseeko. */ #if @GNULIB_FTELL@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 2, above. */ # undef ftell # endif # if @REPLACE_FTELL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftell # define ftell rpl_ftell # endif _GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); # else _GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); # endif _GL_CXXALIASWARN (ftell); #endif #if @GNULIB_FTELLO@ # if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 3, above. */ # undef ftell # endif # if @REPLACE_FTELLO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftello # define ftello rpl_ftello # endif _GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); # else # if ! @HAVE_DECL_FTELLO@ _GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); # endif _GL_CXXALIASWARN (ftello); #elif defined GNULIB_POSIXCHECK # define _GL_FTELL_WARN /* Category 1, above. */ # undef ftell # undef ftello # if HAVE_RAW_DECL_FTELLO _GL_WARN_ON_USE (ftello, "ftello is unportable - " "use gnulib module ftello for portability"); # endif #endif #ifdef _GL_FTELL_WARN # undef _GL_FTELL_WARN /* Here, either ftell is undefined (but C89 guarantees that it is declared), or it is defined as rpl_ftell (declared above). */ _GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " "on 32-bit platforms - " "use ftello function for handling of large files"); #endif #if @GNULIB_FWRITE@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fwrite # define fwrite rpl_fwrite # endif _GL_FUNCDECL_RPL (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream)); # else _GL_CXXALIAS_SYS (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream)); /* Work around bug 11959 when fortifying glibc 2.4 through 2.15 , which sometimes causes an unwanted diagnostic for fwrite calls. This affects only function declaration attributes under certain versions of gcc and clang, and is not needed for C++. */ # if (0 < __USE_FORTIFY_LEVEL \ && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ && !defined __cplusplus) # undef fwrite # undef fwrite_unlocked extern size_t __REDIRECT (rpl_fwrite, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite); extern size_t __REDIRECT (rpl_fwrite_unlocked, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite_unlocked); # define fwrite rpl_fwrite # define fwrite_unlocked rpl_fwrite_unlocked # endif # endif _GL_CXXALIASWARN (fwrite); #endif #if @GNULIB_GETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getc # define getc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (getc, int, (FILE *stream)); # endif _GL_CXXALIASWARN (getc); #endif #if @GNULIB_GETCHAR@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getchar # define getchar rpl_getchar # endif _GL_FUNCDECL_RPL (getchar, int, (void)); _GL_CXXALIAS_RPL (getchar, int, (void)); # else _GL_CXXALIAS_SYS (getchar, int, (void)); # endif _GL_CXXALIASWARN (getchar); #endif #if @GNULIB_GETDELIM@ /* Read input, up to (and including) the next occurrence of DELIMITER, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETDELIM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdelim # define getdelim rpl_getdelim # endif _GL_FUNCDECL_RPL (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream) _GL_ARG_NONNULL ((1, 2, 4))); _GL_CXXALIAS_RPL (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream)); # else # if !@HAVE_DECL_GETDELIM@ _GL_FUNCDECL_SYS (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream) _GL_ARG_NONNULL ((1, 2, 4))); # endif _GL_CXXALIAS_SYS (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream)); # endif _GL_CXXALIASWARN (getdelim); #elif defined GNULIB_POSIXCHECK # undef getdelim # if HAVE_RAW_DECL_GETDELIM _GL_WARN_ON_USE (getdelim, "getdelim is unportable - " "use gnulib module getdelim for portability"); # endif #endif #if @GNULIB_GETLINE@ /* Read a line, up to (and including) the next newline, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETLINE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getline # define getline rpl_getline # endif _GL_FUNCDECL_RPL (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream)); # else # if !@HAVE_DECL_GETLINE@ _GL_FUNCDECL_SYS (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream)); # endif # if @HAVE_DECL_GETLINE@ _GL_CXXALIASWARN (getline); # endif #elif defined GNULIB_POSIXCHECK # undef getline # if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is unportable - " "use gnulib module getline for portability"); # endif #endif /* It is very rare that the developer ever has full control of stdin, so any use of gets warrants an unconditional warning; besides, C11 removed it. */ #undef gets #if HAVE_RAW_DECL_GETS && !defined __cplusplus _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); #endif #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ struct obstack; /* Grow an obstack with formatted output. Return the number of bytes added to OBS. No trailing nul byte is added, and the object should be closed with obstack_finish before use. Upon memory allocation error, call obstack_alloc_failed_handler. Upon other error, return -1. */ # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_printf rpl_obstack_printf # endif _GL_FUNCDECL_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # endif _GL_CXXALIASWARN (obstack_printf); # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_vprintf rpl_obstack_vprintf # endif _GL_FUNCDECL_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # endif _GL_CXXALIASWARN (obstack_vprintf); #endif #if @GNULIB_PCLOSE@ # if !@HAVE_PCLOSE@ _GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); _GL_CXXALIASWARN (pclose); #elif defined GNULIB_POSIXCHECK # undef pclose # if HAVE_RAW_DECL_PCLOSE _GL_WARN_ON_USE (pclose, "pclose is unportable - " "use gnulib module pclose for more portability"); # endif #endif #if @GNULIB_PERROR@ /* Print a message to standard error, describing the value of ERRNO, (if STRING is not NULL and not empty) prefixed with STRING and ": ", and terminated with a newline. */ # if @REPLACE_PERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define perror rpl_perror # endif _GL_FUNCDECL_RPL (perror, void, (const char *string)); _GL_CXXALIAS_RPL (perror, void, (const char *string)); # else _GL_CXXALIAS_SYS (perror, void, (const char *string)); # endif _GL_CXXALIASWARN (perror); #elif defined GNULIB_POSIXCHECK # undef perror /* Assume perror is always declared. */ _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " "use gnulib module perror for portability"); #endif #if @GNULIB_POPEN@ # if @REPLACE_POPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef popen # define popen rpl_popen # endif _GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); # else # if !@HAVE_POPEN@ _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); # endif _GL_CXXALIASWARN (popen); #elif defined GNULIB_POSIXCHECK # undef popen # if HAVE_RAW_DECL_POPEN _GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " "use gnulib module popen or pipe for more portability"); # endif #endif #if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ # if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if defined __GNUC__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) /* Don't break __attribute__((format(printf,M,N))). */ # define printf __printf__ # endif # if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define printf rpl_printf # endif _GL_FUNCDECL_RPL (printf, int, (const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (printf, int, (const char *format, ...)); # endif # define GNULIB_overrides_printf 1 # else _GL_CXXALIAS_SYS (printf, int, (const char *format, ...)); # endif _GL_CXXALIASWARN (printf); #endif #if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_printf # undef printf # endif /* Assume printf is always declared. */ _GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " "use gnulib module printf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_PUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putc # define putc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); # endif _GL_CXXALIASWARN (putc); #endif #if @GNULIB_PUTCHAR@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putchar # define putchar rpl_putchar # endif _GL_FUNCDECL_RPL (putchar, int, (int c)); _GL_CXXALIAS_RPL (putchar, int, (int c)); # else _GL_CXXALIAS_SYS (putchar, int, (int c)); # endif _GL_CXXALIASWARN (putchar); #endif #if @GNULIB_PUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef puts # define puts rpl_puts # endif _GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (puts, int, (const char *string)); # else _GL_CXXALIAS_SYS (puts, int, (const char *string)); # endif _GL_CXXALIASWARN (puts); #endif #if @GNULIB_REMOVE@ # if @REPLACE_REMOVE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remove # define remove rpl_remove # endif _GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (remove, int, (const char *name)); # else _GL_CXXALIAS_SYS (remove, int, (const char *name)); # endif _GL_CXXALIASWARN (remove); #elif defined GNULIB_POSIXCHECK # undef remove /* Assume remove is always declared. */ _GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " "use gnulib module remove for more portability"); #endif #if @GNULIB_RENAME@ # if @REPLACE_RENAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rename # define rename rpl_rename # endif _GL_FUNCDECL_RPL (rename, int, (const char *old_filename, const char *new_filename) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (rename, int, (const char *old_filename, const char *new_filename)); # else _GL_CXXALIAS_SYS (rename, int, (const char *old_filename, const char *new_filename)); # endif _GL_CXXALIASWARN (rename); #elif defined GNULIB_POSIXCHECK # undef rename /* Assume rename is always declared. */ _GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " "use gnulib module rename for more portability"); #endif #if @GNULIB_RENAMEAT@ # if @REPLACE_RENAMEAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef renameat # define renameat rpl_renameat # endif _GL_FUNCDECL_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # else # if !@HAVE_RENAMEAT@ _GL_FUNCDECL_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # endif _GL_CXXALIASWARN (renameat); #elif defined GNULIB_POSIXCHECK # undef renameat # if HAVE_RAW_DECL_RENAMEAT _GL_WARN_ON_USE (renameat, "renameat is not portable - " "use gnulib module renameat for portability"); # endif #endif #if @GNULIB_SCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if defined __GNUC__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf /* Don't break __attribute__((format(scanf,M,N))). */ # define scanf __scanf__ # endif _GL_FUNCDECL_RPL_1 (__scanf__, int, (const char *format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf # define scanf rpl_scanf # endif _GL_FUNCDECL_RPL (scanf, int, (const char *format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (scanf, int, (const char *format, ...)); # endif # else _GL_CXXALIAS_SYS (scanf, int, (const char *format, ...)); # endif _GL_CXXALIASWARN (scanf); #endif #if @GNULIB_SNPRINTF@ # if @REPLACE_SNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define snprintf rpl_snprintf # endif _GL_FUNCDECL_RPL (snprintf, int, (char *str, size_t size, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (snprintf, int, (char *str, size_t size, const char *format, ...)); # else # if !@HAVE_DECL_SNPRINTF@ _GL_FUNCDECL_SYS (snprintf, int, (char *str, size_t size, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (snprintf, int, (char *str, size_t size, const char *format, ...)); # endif _GL_CXXALIASWARN (snprintf); #elif defined GNULIB_POSIXCHECK # undef snprintf # if HAVE_RAW_DECL_SNPRINTF _GL_WARN_ON_USE (snprintf, "snprintf is unportable - " "use gnulib module snprintf for portability"); # endif #endif /* Some people would argue that all sprintf uses should be warned about (for example, OpenBSD issues a link warning for it), since it can cause security holes due to buffer overruns. However, we believe that sprintf can be used safely, and is more efficient than snprintf in those safe cases; and as proof of our belief, we use sprintf in several gnulib modules. So this header intentionally avoids adding a warning to sprintf except when GNULIB_POSIXCHECK is defined. */ #if @GNULIB_SPRINTF_POSIX@ # if @REPLACE_SPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define sprintf rpl_sprintf # endif _GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...)); # else _GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...)); # endif _GL_CXXALIASWARN (sprintf); #elif defined GNULIB_POSIXCHECK # undef sprintf /* Assume sprintf is always declared. */ _GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " "use gnulib module sprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_TMPFILE@ # if @REPLACE_TMPFILE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define tmpfile rpl_tmpfile # endif _GL_FUNCDECL_RPL (tmpfile, FILE *, (void)); _GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); # else _GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); # endif _GL_CXXALIASWARN (tmpfile); #elif defined GNULIB_POSIXCHECK # undef tmpfile # if HAVE_RAW_DECL_TMPFILE _GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " "use gnulib module tmpfile for portability"); # endif #endif #if @GNULIB_VASPRINTF@ /* Write formatted output to a string dynamically allocated with malloc(). If the memory allocation succeeds, store the address of the string in *RESULT and return the number of resulting bytes, excluding the trailing NUL. Upon memory allocation error, or some other error, return -1. */ # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define asprintf rpl_asprintf # endif _GL_FUNCDECL_RPL (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (asprintf, int, (char **result, const char *format, ...)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (asprintf, int, (char **result, const char *format, ...)); # endif _GL_CXXALIASWARN (asprintf); # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vasprintf rpl_vasprintf # endif _GL_FUNCDECL_RPL (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vasprintf, int, (char **result, const char *format, va_list args)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (vasprintf, int, (char **result, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vasprintf); #endif #if @GNULIB_VDPRINTF@ # if @REPLACE_VDPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vdprintf rpl_vdprintf # endif _GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args)); # else # if !@HAVE_VDPRINTF@ _GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on Solaris, the third parameter will likely be __va_list args. */ _GL_CXXALIAS_SYS_CAST (vdprintf, int, (int fd, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vdprintf); #elif defined GNULIB_POSIXCHECK # undef vdprintf # if HAVE_RAW_DECL_VDPRINTF _GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " "use gnulib module vdprintf for portability"); # endif #endif #if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ # if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vfprintf rpl_vfprintf # endif # define GNULIB_overrides_vfprintf 1 # if @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vfprintf, int, (FILE *fp, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vfprintf); #endif #if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vfprintf # undef vfprintf # endif /* Assume vfprintf is always declared. */ _GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " "use gnulib module vfprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VFSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vfscanf # define vfscanf rpl_vfscanf # endif _GL_FUNCDECL_RPL (vfscanf, int, (FILE *stream, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vfscanf, int, (FILE *stream, const char *format, va_list args)); # else _GL_CXXALIAS_SYS (vfscanf, int, (FILE *stream, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vfscanf); #endif #if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ # if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vprintf rpl_vprintf # endif # define GNULIB_overrides_vprintf 1 # if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args)); # else /* Need to cast, because on Solaris, the second parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args)); # endif _GL_CXXALIASWARN (vprintf); #endif #if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vprintf # undef vprintf # endif /* Assume vprintf is always declared. */ _GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " "use gnulib module vprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vscanf # define vscanf rpl_vscanf # endif _GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args)); # else _GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args)); # endif _GL_CXXALIASWARN (vscanf); #endif #if @GNULIB_VSNPRINTF@ # if @REPLACE_VSNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsnprintf rpl_vsnprintf # endif _GL_FUNCDECL_RPL (vsnprintf, int, (char *str, size_t size, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (vsnprintf, int, (char *str, size_t size, const char *format, va_list args)); # else # if !@HAVE_DECL_VSNPRINTF@ _GL_FUNCDECL_SYS (vsnprintf, int, (char *str, size_t size, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (vsnprintf, int, (char *str, size_t size, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vsnprintf); #elif defined GNULIB_POSIXCHECK # undef vsnprintf # if HAVE_RAW_DECL_VSNPRINTF _GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " "use gnulib module vsnprintf for portability"); # endif #endif #if @GNULIB_VSPRINTF_POSIX@ # if @REPLACE_VSPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsprintf rpl_vsprintf # endif _GL_FUNCDECL_RPL (vsprintf, int, (char *str, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vsprintf, int, (char *str, const char *format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vsprintf, int, (char *str, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vsprintf); #elif defined GNULIB_POSIXCHECK # undef vsprintf /* Assume vsprintf is always declared. */ _GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " "use gnulib module vsprintf-posix for portable " "POSIX compliance"); #endif #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif ttfautohint-1.8.1/gnulib/src/stdlib.in.h0000644000175000001440000010501513222450623020042 0ustar00wlusers00000000000000/* A GNU-like . Copyright (C) 1995, 2001-2004, 2006-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 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 . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_stdlib_h || defined __need_malloc_and_calloc /* Special invocation conventions inside some gnulib header files, and inside some glibc header files, respectively. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDLIB_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #ifndef _@GUARD_PREFIX@_STDLIB_H #define _@GUARD_PREFIX@_STDLIB_H /* NetBSD 5.0 mis-defines NULL. */ #include /* MirBSD 10 defines WEXITSTATUS in , not in . */ #if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS # include #endif /* Solaris declares getloadavg() in . */ #if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ # include #endif /* Native Windows platforms declare mktemp() in . */ #if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) # include #endif #if @GNULIB_RANDOM_R@ /* OSF/1 5.1 declares 'struct random_data' in , which is included from if _REENTRANT is defined. Include it whenever we need 'struct random_data'. */ # if @HAVE_RANDOM_H@ # include # endif # if !@HAVE_STRUCT_RANDOM_DATA@ || @REPLACE_RANDOM_R@ || !@HAVE_RANDOM_R@ # include # endif # if !@HAVE_STRUCT_RANDOM_DATA@ /* Define 'struct random_data'. But allow multiple gnulib generated replacements to coexist. */ # if !GNULIB_defined_struct_random_data struct random_data { int32_t *fptr; /* Front pointer. */ int32_t *rptr; /* Rear pointer. */ int32_t *state; /* Array of state values. */ int rand_type; /* Type of random number generator. */ int rand_deg; /* Degree of random number generator. */ int rand_sep; /* Distance between front and rear. */ int32_t *end_ptr; /* Pointer behind state table. */ }; # define GNULIB_defined_struct_random_data 1 # endif # endif #endif #if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) /* On Mac OS X 10.3, only declares mkstemp. */ /* On Mac OS X 10.5, only declares mkstemps. */ /* On Cygwin 1.7.1, only declares getsubopt. */ /* But avoid namespace pollution on glibc systems and native Windows. */ # include #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The definition of _Noreturn is copied here. */ /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Some systems do not define EXIT_*, despite otherwise supporting C89. */ #ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 #endif /* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere with proper operation of xargs. */ #ifndef EXIT_FAILURE # define EXIT_FAILURE 1 #elif EXIT_FAILURE != 1 # undef EXIT_FAILURE # define EXIT_FAILURE 1 #endif #if @GNULIB__EXIT@ /* Terminate the current process with the given return code, without running the 'atexit' handlers. */ # if !@HAVE__EXIT@ _GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); # endif _GL_CXXALIAS_SYS (_Exit, void, (int status)); _GL_CXXALIASWARN (_Exit); #elif defined GNULIB_POSIXCHECK # undef _Exit # if HAVE_RAW_DECL__EXIT _GL_WARN_ON_USE (_Exit, "_Exit is unportable - " "use gnulib module _Exit for portability"); # endif #endif #if @GNULIB_ATOLL@ /* Parse a signed decimal integer. Returns the value of the integer. Errors are not detected. */ # if !@HAVE_ATOLL@ _GL_FUNCDECL_SYS (atoll, long long, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (atoll, long long, (const char *string)); _GL_CXXALIASWARN (atoll); #elif defined GNULIB_POSIXCHECK # undef atoll # if HAVE_RAW_DECL_ATOLL _GL_WARN_ON_USE (atoll, "atoll is unportable - " "use gnulib module atoll for portability"); # endif #endif #if @GNULIB_CALLOC_POSIX@ # if @REPLACE_CALLOC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef calloc # define calloc rpl_calloc # endif _GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size)); _GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); # else _GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); # endif _GL_CXXALIASWARN (calloc); #elif defined GNULIB_POSIXCHECK # undef calloc /* Assume calloc is always declared. */ _GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " "use gnulib module calloc-posix for portability"); #endif #if @GNULIB_CANONICALIZE_FILE_NAME@ # if @REPLACE_CANONICALIZE_FILE_NAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define canonicalize_file_name rpl_canonicalize_file_name # endif _GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); # else # if !@HAVE_CANONICALIZE_FILE_NAME@ _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); # endif _GL_CXXALIASWARN (canonicalize_file_name); #elif defined GNULIB_POSIXCHECK # undef canonicalize_file_name # if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME _GL_WARN_ON_USE (canonicalize_file_name, "canonicalize_file_name is unportable - " "use gnulib module canonicalize-lgpl for portability"); # endif #endif #if @GNULIB_GETLOADAVG@ /* Store max(NELEM,3) load average numbers in LOADAVG[]. The three numbers are the load average of the last 1 minute, the last 5 minutes, and the last 15 minutes, respectively. LOADAVG is an array of NELEM numbers. */ # if !@HAVE_DECL_GETLOADAVG@ _GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); _GL_CXXALIASWARN (getloadavg); #elif defined GNULIB_POSIXCHECK # undef getloadavg # if HAVE_RAW_DECL_GETLOADAVG _GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " "use gnulib module getloadavg for portability"); # endif #endif #if @GNULIB_GETSUBOPT@ /* Assuming *OPTIONP is a comma separated list of elements of the form "token" or "token=value", getsubopt parses the first of these elements. If the first element refers to a "token" that is member of the given NULL-terminated array of tokens: - It replaces the comma with a NUL byte, updates *OPTIONP to point past the first option and the comma, sets *VALUEP to the value of the element (or NULL if it doesn't contain an "=" sign), - It returns the index of the "token" in the given array of tokens. Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. For more details see the POSIX:2001 specification. http://www.opengroup.org/susv3xsh/getsubopt.html */ # if !@HAVE_GETSUBOPT@ _GL_FUNCDECL_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep)); _GL_CXXALIASWARN (getsubopt); #elif defined GNULIB_POSIXCHECK # undef getsubopt # if HAVE_RAW_DECL_GETSUBOPT _GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " "use gnulib module getsubopt for portability"); # endif #endif #if @GNULIB_GRANTPT@ /* Change the ownership and access permission of the slave side of the pseudo-terminal whose master side is specified by FD. */ # if !@HAVE_GRANTPT@ _GL_FUNCDECL_SYS (grantpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (grantpt, int, (int fd)); _GL_CXXALIASWARN (grantpt); #elif defined GNULIB_POSIXCHECK # undef grantpt # if HAVE_RAW_DECL_GRANTPT _GL_WARN_ON_USE (grantpt, "grantpt is not portable - " "use gnulib module grantpt for portability"); # endif #endif /* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not rely on GNU or POSIX semantics for malloc and realloc (for example, by never specifying a zero size), so it does not need malloc or realloc to be redefined. */ #if @GNULIB_MALLOC_POSIX@ # if @REPLACE_MALLOC@ # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef malloc # define malloc rpl_malloc # endif _GL_FUNCDECL_RPL (malloc, void *, (size_t size)); _GL_CXXALIAS_RPL (malloc, void *, (size_t size)); # else _GL_CXXALIAS_SYS (malloc, void *, (size_t size)); # endif _GL_CXXALIASWARN (malloc); #elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef malloc /* Assume malloc is always declared. */ _GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " "use gnulib module malloc-posix for portability"); #endif /* Convert a multibyte character to a wide character. */ #if @GNULIB_MBTOWC@ # if @REPLACE_MBTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbtowc # define mbtowc rpl_mbtowc # endif _GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); _GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); # else _GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); # endif _GL_CXXALIASWARN (mbtowc); #endif #if @GNULIB_MKDTEMP@ /* Create a unique temporary directory from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the directory name unique. Returns TEMPLATE, or a null pointer if it cannot get a unique name. The directory is created mode 700. */ # if !@HAVE_MKDTEMP@ _GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); _GL_CXXALIASWARN (mkdtemp); #elif defined GNULIB_POSIXCHECK # undef mkdtemp # if HAVE_RAW_DECL_MKDTEMP _GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " "use gnulib module mkdtemp for portability"); # endif #endif #if @GNULIB_MKOSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKOSTEMP@ _GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); _GL_CXXALIASWARN (mkostemp); #elif defined GNULIB_POSIXCHECK # undef mkostemp # if HAVE_RAW_DECL_MKOSTEMP _GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " "use gnulib module mkostemp for portability"); # endif #endif #if @GNULIB_MKOSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE before a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKOSTEMPS@ _GL_FUNCDECL_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/)); _GL_CXXALIASWARN (mkostemps); #elif defined GNULIB_POSIXCHECK # undef mkostemps # if HAVE_RAW_DECL_MKOSTEMPS _GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " "use gnulib module mkostemps for portability"); # endif #endif #if @GNULIB_MKSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if @REPLACE_MKSTEMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mkstemp rpl_mkstemp # endif _GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); # else # if ! @HAVE_MKSTEMP@ _GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); # endif _GL_CXXALIASWARN (mkstemp); #elif defined GNULIB_POSIXCHECK # undef mkstemp # if HAVE_RAW_DECL_MKSTEMP _GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " "use gnulib module mkstemp for portability"); # endif #endif #if @GNULIB_MKSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE prior to a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKSTEMPS@ _GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); _GL_CXXALIASWARN (mkstemps); #elif defined GNULIB_POSIXCHECK # undef mkstemps # if HAVE_RAW_DECL_MKSTEMPS _GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " "use gnulib module mkstemps for portability"); # endif #endif #if @GNULIB_POSIX_OPENPT@ /* Return an FD open to the master side of a pseudo-terminal. Flags should include O_RDWR, and may also include O_NOCTTY. */ # if !@HAVE_POSIX_OPENPT@ _GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); # endif _GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); _GL_CXXALIASWARN (posix_openpt); #elif defined GNULIB_POSIXCHECK # undef posix_openpt # if HAVE_RAW_DECL_POSIX_OPENPT _GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " "use gnulib module posix_openpt for portability"); # endif #endif #if @GNULIB_PTSNAME@ /* Return the pathname of the pseudo-terminal slave associated with the master FD is open on, or NULL on errors. */ # if @REPLACE_PTSNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname # define ptsname rpl_ptsname # endif _GL_FUNCDECL_RPL (ptsname, char *, (int fd)); _GL_CXXALIAS_RPL (ptsname, char *, (int fd)); # else # if !@HAVE_PTSNAME@ _GL_FUNCDECL_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIAS_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIASWARN (ptsname); #elif defined GNULIB_POSIXCHECK # undef ptsname # if HAVE_RAW_DECL_PTSNAME _GL_WARN_ON_USE (ptsname, "ptsname is not portable - " "use gnulib module ptsname for portability"); # endif #endif #if @GNULIB_PTSNAME_R@ /* Set the pathname of the pseudo-terminal slave associated with the master FD is open on and return 0, or set errno and return non-zero on errors. */ # if @REPLACE_PTSNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname_r # define ptsname_r rpl_ptsname_r # endif _GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); _GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); # else # if !@HAVE_PTSNAME_R@ _GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif _GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif _GL_CXXALIASWARN (ptsname_r); #elif defined GNULIB_POSIXCHECK # undef ptsname_r # if HAVE_RAW_DECL_PTSNAME_R _GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " "use gnulib module ptsname_r for portability"); # endif #endif #if @GNULIB_PUTENV@ # if @REPLACE_PUTENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv rpl_putenv # endif _GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (putenv, int, (char *string)); # else _GL_CXXALIAS_SYS (putenv, int, (char *string)); # endif _GL_CXXALIASWARN (putenv); #endif #if @GNULIB_QSORT_R@ /* Sort an array of NMEMB elements, starting at address BASE, each element occupying SIZE bytes, in ascending order according to the comparison function COMPARE. */ # if @REPLACE_QSORT_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef qsort_r # define qsort_r rpl_qsort_r # endif _GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg)); # else # if !@HAVE_QSORT_R@ _GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg) _GL_ARG_NONNULL ((1, 4))); # endif _GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg)); # endif _GL_CXXALIASWARN (qsort_r); #elif defined GNULIB_POSIXCHECK # undef qsort_r # if HAVE_RAW_DECL_QSORT_R _GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - " "use gnulib module qsort_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if !@HAVE_RANDOM_R@ # ifndef RAND_MAX # define RAND_MAX 2147483647 # endif # endif #endif #if @GNULIB_RANDOM@ # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (random, long, (void)); # endif _GL_CXXALIAS_SYS (random, long, (void)); _GL_CXXALIASWARN (random); #elif defined GNULIB_POSIXCHECK # undef random # if HAVE_RAW_DECL_RANDOM _GL_WARN_ON_USE (random, "random is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); # endif _GL_CXXALIAS_SYS (srandom, void, (unsigned int seed)); _GL_CXXALIASWARN (srandom); #elif defined GNULIB_POSIXCHECK # undef srandom # if HAVE_RAW_DECL_SRANDOM _GL_WARN_ON_USE (srandom, "srandom is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if !@HAVE_RANDOM@ || !@HAVE_DECL_INITSTATE@ _GL_FUNCDECL_SYS (initstate, char *, (unsigned int seed, char *buf, size_t buf_size) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (initstate, char *, (unsigned int seed, char *buf, size_t buf_size)); _GL_CXXALIASWARN (initstate); #elif defined GNULIB_POSIXCHECK # undef initstate # if HAVE_RAW_DECL_INITSTATE_R _GL_WARN_ON_USE (initstate, "initstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if !@HAVE_RANDOM@ || !@HAVE_DECL_SETSTATE@ _GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (setstate, char *, (char *arg_state)); _GL_CXXALIASWARN (setstate); #elif defined GNULIB_POSIXCHECK # undef setstate # if HAVE_RAW_DECL_SETSTATE_R _GL_WARN_ON_USE (setstate, "setstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef random_r # define random_r rpl_random_r # endif _GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); # endif _GL_CXXALIASWARN (random_r); #elif defined GNULIB_POSIXCHECK # undef random_r # if HAVE_RAW_DECL_RANDOM_R _GL_WARN_ON_USE (random_r, "random_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef srandom_r # define srandom_r rpl_srandom_r # endif _GL_FUNCDECL_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (srandom_r); #elif defined GNULIB_POSIXCHECK # undef srandom_r # if HAVE_RAW_DECL_SRANDOM_R _GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef initstate_r # define initstate_r rpl_initstate_r # endif _GL_FUNCDECL_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (initstate_r); #elif defined GNULIB_POSIXCHECK # undef initstate_r # if HAVE_RAW_DECL_INITSTATE_R _GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setstate_r # define setstate_r rpl_setstate_r # endif _GL_FUNCDECL_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (setstate_r); #elif defined GNULIB_POSIXCHECK # undef setstate_r # if HAVE_RAW_DECL_SETSTATE_R _GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_REALLOC_POSIX@ # if @REPLACE_REALLOC@ # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef realloc # define realloc rpl_realloc # endif _GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size)); _GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); # else _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); # endif _GL_CXXALIASWARN (realloc); #elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef realloc /* Assume realloc is always declared. */ _GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " "use gnulib module realloc-posix for portability"); #endif #if @GNULIB_REALLOCARRAY@ # if ! @HAVE_REALLOCARRAY@ _GL_FUNCDECL_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # endif _GL_CXXALIAS_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); _GL_CXXALIASWARN (reallocarray); #elif defined GNULIB_POSIXCHECK # undef reallocarray # if HAVE_RAW_DECL_REALLOCARRAY _GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - " "use gnulib module reallocarray for portability"); # endif #endif #if @GNULIB_REALPATH@ # if @REPLACE_REALPATH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define realpath rpl_realpath # endif _GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved)); # else # if !@HAVE_REALPATH@ _GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved)); # endif _GL_CXXALIASWARN (realpath); #elif defined GNULIB_POSIXCHECK # undef realpath # if HAVE_RAW_DECL_REALPATH _GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " "canonicalize or canonicalize-lgpl for portability"); # endif #endif #if @GNULIB_RPMATCH@ /* Test a user response to a question. Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ # if !@HAVE_RPMATCH@ _GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); _GL_CXXALIASWARN (rpmatch); #elif defined GNULIB_POSIXCHECK # undef rpmatch # if HAVE_RAW_DECL_RPMATCH _GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " "use gnulib module rpmatch for portability"); # endif #endif #if @GNULIB_SECURE_GETENV@ /* Look up NAME in the environment, returning 0 in insecure situations. */ # if !@HAVE_SECURE_GETENV@ _GL_FUNCDECL_SYS (secure_getenv, char *, (char const *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); _GL_CXXALIASWARN (secure_getenv); #elif defined GNULIB_POSIXCHECK # undef secure_getenv # if HAVE_RAW_DECL_SECURE_GETENV _GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " "use gnulib module secure_getenv for portability"); # endif #endif #if @GNULIB_SETENV@ /* Set NAME to VALUE in the environment. If REPLACE is nonzero, overwrite an existing value. */ # if @REPLACE_SETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setenv # define setenv rpl_setenv # endif _GL_FUNCDECL_RPL (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (setenv, int, (const char *name, const char *value, int replace)); # else # if !@HAVE_DECL_SETENV@ _GL_FUNCDECL_SYS (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (setenv, int, (const char *name, const char *value, int replace)); # endif # if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@) _GL_CXXALIASWARN (setenv); # endif #elif defined GNULIB_POSIXCHECK # undef setenv # if HAVE_RAW_DECL_SETENV _GL_WARN_ON_USE (setenv, "setenv is unportable - " "use gnulib module setenv for portability"); # endif #endif #if @GNULIB_STRTOD@ /* Parse a double from STRING, updating ENDP if appropriate. */ # if @REPLACE_STRTOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtod rpl_strtod # endif _GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp)); # else # if !@HAVE_STRTOD@ _GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp)); # endif _GL_CXXALIASWARN (strtod); #elif defined GNULIB_POSIXCHECK # undef strtod # if HAVE_RAW_DECL_STRTOD _GL_WARN_ON_USE (strtod, "strtod is unportable - " "use gnulib module strtod for portability"); # endif #endif #if @GNULIB_STRTOLL@ /* Parse a signed integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set to ERANGE. */ # if !@HAVE_STRTOLL@ _GL_FUNCDECL_SYS (strtoll, long long, (const char *string, char **endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoll, long long, (const char *string, char **endptr, int base)); _GL_CXXALIASWARN (strtoll); #elif defined GNULIB_POSIXCHECK # undef strtoll # if HAVE_RAW_DECL_STRTOLL _GL_WARN_ON_USE (strtoll, "strtoll is unportable - " "use gnulib module strtoll for portability"); # endif #endif #if @GNULIB_STRTOULL@ /* Parse an unsigned integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is ULLONG_MAX, and errno is set to ERANGE. */ # if !@HAVE_STRTOULL@ _GL_FUNCDECL_SYS (strtoull, unsigned long long, (const char *string, char **endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoull, unsigned long long, (const char *string, char **endptr, int base)); _GL_CXXALIASWARN (strtoull); #elif defined GNULIB_POSIXCHECK # undef strtoull # if HAVE_RAW_DECL_STRTOULL _GL_WARN_ON_USE (strtoull, "strtoull is unportable - " "use gnulib module strtoull for portability"); # endif #endif #if @GNULIB_UNLOCKPT@ /* Unlock the slave side of the pseudo-terminal whose master side is specified by FD, so that it can be opened. */ # if !@HAVE_UNLOCKPT@ _GL_FUNCDECL_SYS (unlockpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (unlockpt, int, (int fd)); _GL_CXXALIASWARN (unlockpt); #elif defined GNULIB_POSIXCHECK # undef unlockpt # if HAVE_RAW_DECL_UNLOCKPT _GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " "use gnulib module unlockpt for portability"); # endif #endif #if @GNULIB_UNSETENV@ /* Remove the variable NAME from the environment. */ # if @REPLACE_UNSETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unsetenv # define unsetenv rpl_unsetenv # endif _GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); # else # if !@HAVE_DECL_UNSETENV@ _GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); # endif # if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@) _GL_CXXALIASWARN (unsetenv); # endif #elif defined GNULIB_POSIXCHECK # undef unsetenv # if HAVE_RAW_DECL_UNSETENV _GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " "use gnulib module unsetenv for portability"); # endif #endif /* Convert a wide character to a multibyte character. */ #if @GNULIB_WCTOMB@ # if @REPLACE_WCTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctomb # define wctomb rpl_wctomb # endif _GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); _GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); # else _GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); # endif _GL_CXXALIASWARN (wctomb); #endif #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif ttfautohint-1.8.1/gnulib/src/strerror-override.h0000644000175000001440000000374413222450623021661 0ustar00wlusers00000000000000/* strerror-override.h --- POSIX compatible system error routine Copyright (C) 2010-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _GL_STRERROR_OVERRIDE_H # define _GL_STRERROR_OVERRIDE_H # include # include /* Reasonable buffer size that should never trigger ERANGE; if this proves too small, we intentionally abort(), to remind us to fix this value. */ # define STACKBUF_LEN 256 /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ # if REPLACE_STRERROR_0 \ || GNULIB_defined_ESOCK \ || GNULIB_defined_ESTREAMS \ || GNULIB_defined_EWINSOCK \ || GNULIB_defined_ENOMSG \ || GNULIB_defined_EIDRM \ || GNULIB_defined_ENOLINK \ || GNULIB_defined_EPROTO \ || GNULIB_defined_EMULTIHOP \ || GNULIB_defined_EBADMSG \ || GNULIB_defined_EOVERFLOW \ || GNULIB_defined_ENOTSUP \ || GNULIB_defined_ENETRESET \ || GNULIB_defined_ECONNABORTED \ || GNULIB_defined_ESTALE \ || GNULIB_defined_EDQUOT \ || GNULIB_defined_ECANCELED \ || GNULIB_defined_EOWNERDEAD \ || GNULIB_defined_ENOTRECOVERABLE \ || GNULIB_defined_EILSEQ extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST; # else # define strerror_override(ignored) NULL # endif #endif /* _GL_STRERROR_OVERRIDE_H */ ttfautohint-1.8.1/gnulib/src/string.in.h0000644000175000001440000012056113222450623020072 0ustar00wlusers00000000000000/* A GNU-like . Copyright (C) 1995-1996, 2001-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_STRING_H /* Special invocation convention: - On OS X/NetBSD we have a sequence of nested includes -> -> "string.h" In this situation system _chk variants due to -D_FORTIFY_SOURCE might be used after any replacements defined here. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STRING_H #define _GL_ALREADY_INCLUDING_STRING_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #undef _GL_ALREADY_INCLUDING_STRING_H #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_STRING_H /* NetBSD 5.0 mis-defines NULL. */ #include /* MirBSD defines mbslen as a macro. */ #if @GNULIB_MBSLEN@ && defined __MirBSD__ # include #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* NetBSD 5.0 declares strsignal in , not in . */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ && ! defined __GLIBC__ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Clear a block of memory. The compiler will not delete a call to this function, even if the block is dead after the call. */ #if @GNULIB_EXPLICIT_BZERO@ # if ! @HAVE_EXPLICIT_BZERO@ _GL_FUNCDECL_SYS (explicit_bzero, void, (void *__dest, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n)); _GL_CXXALIASWARN (explicit_bzero); #elif defined GNULIB_POSIXCHECK # undef explicit_bzero # if HAVE_RAW_DECL_EXPLICIT_BZERO _GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " "use gnulib module explicit_bzero for portability"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ _GL_FUNCDECL_SYS (ffsl, int, (long int i)); # endif _GL_CXXALIAS_SYS (ffsl, int, (long int i)); _GL_CXXALIASWARN (ffsl); #elif defined GNULIB_POSIXCHECK # undef ffsl # if HAVE_RAW_DECL_FFSL _GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSLL@ # if !@HAVE_FFSLL@ _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); _GL_CXXALIASWARN (ffsll); #elif defined GNULIB_POSIXCHECK # undef ffsll # if HAVE_RAW_DECL_FFSLL _GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); # endif #endif /* Return the first instance of C within N bytes of S, or NULL. */ #if @GNULIB_MEMCHR@ # if @REPLACE_MEMCHR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memchr rpl_memchr # endif _GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); # else # if ! @HAVE_MEMCHR@ _GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const void * std::memchr (const void *, int, size_t); } extern "C++" { void * std::memchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memchr, void *, (void const *__s, int __c, size_t __n), void const *, (void const *__s, int __c, size_t __n)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); _GL_CXXALIASWARN1 (memchr, void const *, (void const *__s, int __c, size_t __n)); # else _GL_CXXALIASWARN (memchr); # endif #elif defined GNULIB_POSIXCHECK # undef memchr /* Assume memchr is always declared. */ _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " "use gnulib module memchr for portability" ); #endif /* Return the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_MEMMEM@ # if @REPLACE_MEMMEM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memmem rpl_memmem # endif _GL_FUNCDECL_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # else # if ! @HAVE_DECL_MEMMEM@ _GL_FUNCDECL_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # endif _GL_CXXALIASWARN (memmem); #elif defined GNULIB_POSIXCHECK # undef memmem # if HAVE_RAW_DECL_MEMMEM _GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " "use gnulib module memmem-simple for portability, " "and module memmem for speed" ); # endif #endif /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ #if @GNULIB_MEMPCPY@ # if ! @HAVE_MEMPCPY@ _GL_FUNCDECL_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n)); _GL_CXXALIASWARN (mempcpy); #elif defined GNULIB_POSIXCHECK # undef mempcpy # if HAVE_RAW_DECL_MEMPCPY _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " "use gnulib module mempcpy for portability"); # endif #endif /* Search backwards through a block for a byte (specified as an int). */ #if @GNULIB_MEMRCHR@ # if ! @HAVE_DECL_MEMRCHR@ _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::memrchr (const void *, int, size_t); } extern "C++" { void * std::memrchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memrchr, void *, (void const *, int, size_t), void const *, (void const *, int, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); _GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); # else _GL_CXXALIASWARN (memrchr); # endif #elif defined GNULIB_POSIXCHECK # undef memrchr # if HAVE_RAW_DECL_MEMRCHR _GL_WARN_ON_USE (memrchr, "memrchr is unportable - " "use gnulib module memrchr for portability"); # endif #endif /* Find the first occurrence of C in S. More efficient than memchr(S,C,N), at the expense of undefined behavior if C does not occur within N bytes. */ #if @GNULIB_RAWMEMCHR@ # if ! @HAVE_RAWMEMCHR@ _GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::rawmemchr (const void *, int); } extern "C++" { void * std::rawmemchr (void *, int); } */ _GL_CXXALIAS_SYS_CAST2 (rawmemchr, void *, (void const *__s, int __c_in), void const *, (void const *__s, int __c_in)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); _GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); # else _GL_CXXALIASWARN (rawmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef rawmemchr # if HAVE_RAW_DECL_RAWMEMCHR _GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " "use gnulib module rawmemchr for portability"); # endif #endif /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ #if @GNULIB_STPCPY@ # if ! @HAVE_STPCPY@ _GL_FUNCDECL_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src)); _GL_CXXALIASWARN (stpcpy); #elif defined GNULIB_POSIXCHECK # undef stpcpy # if HAVE_RAW_DECL_STPCPY _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " "use gnulib module stpcpy for portability"); # endif #endif /* Copy no more than N bytes of SRC to DST, returning a pointer past the last non-NUL byte written into DST. */ #if @GNULIB_STPNCPY@ # if @REPLACE_STPNCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef stpncpy # define stpncpy rpl_stpncpy # endif _GL_FUNCDECL_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # else # if ! @HAVE_STPNCPY@ _GL_FUNCDECL_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # endif _GL_CXXALIASWARN (stpncpy); #elif defined GNULIB_POSIXCHECK # undef stpncpy # if HAVE_RAW_DECL_STPNCPY _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " "use gnulib module stpncpy for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strchr /* Assume strchr is always declared. */ _GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " "in some multibyte locales - " "use mbschr if you care about internationalization"); #endif /* Find the first occurrence of C in S or the final NUL byte. */ #if @GNULIB_STRCHRNUL@ # if @REPLACE_STRCHRNUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strchrnul rpl_strchrnul # endif _GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strchrnul, char *, (const char *str, int ch)); # else # if ! @HAVE_STRCHRNUL@ _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * std::strchrnul (const char *, int); } extern "C++" { char * std::strchrnul (char *, int); } */ _GL_CXXALIAS_SYS_CAST2 (strchrnul, char *, (char const *__s, int __c_in), char const *, (char const *__s, int __c_in)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); _GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); # else _GL_CXXALIASWARN (strchrnul); # endif #elif defined GNULIB_POSIXCHECK # undef strchrnul # if HAVE_RAW_DECL_STRCHRNUL _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " "use gnulib module strchrnul for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_STRDUP@ # if @REPLACE_STRDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup rpl_strdup # endif _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup /* strdup exists as a function and as a macro. Get rid of the macro. */ # undef strdup # endif # if !(@HAVE_DECL_STRDUP@ || defined strdup) _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); #elif defined GNULIB_POSIXCHECK # undef strdup # if HAVE_RAW_DECL_STRDUP _GL_WARN_ON_USE (strdup, "strdup is unportable - " "use gnulib module strdup for portability"); # endif #endif /* Append no more than N characters from SRC onto DEST. */ #if @GNULIB_STRNCAT@ # if @REPLACE_STRNCAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strncat # define strncat rpl_strncat # endif _GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); # else _GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); # endif _GL_CXXALIASWARN (strncat); #elif defined GNULIB_POSIXCHECK # undef strncat # if HAVE_RAW_DECL_STRNCAT _GL_WARN_ON_USE (strncat, "strncat is unportable - " "use gnulib module strncat for portability"); # endif #endif /* Return a newly allocated copy of at most N bytes of STRING. */ #if @GNULIB_STRNDUP@ # if @REPLACE_STRNDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strndup # define strndup rpl_strndup # endif _GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); # else # if ! @HAVE_DECL_STRNDUP@ _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); # endif _GL_CXXALIASWARN (strndup); #elif defined GNULIB_POSIXCHECK # undef strndup # if HAVE_RAW_DECL_STRNDUP _GL_WARN_ON_USE (strndup, "strndup is unportable - " "use gnulib module strndup for portability"); # endif #endif /* Find the length (number of bytes) of STRING, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many bytes, return MAXLEN. */ #if @GNULIB_STRNLEN@ # if @REPLACE_STRNLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strnlen # define strnlen rpl_strnlen # endif _GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); # else # if ! @HAVE_DECL_STRNLEN@ _GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); # endif _GL_CXXALIASWARN (strnlen); #elif defined GNULIB_POSIXCHECK # undef strnlen # if HAVE_RAW_DECL_STRNLEN _GL_WARN_ON_USE (strnlen, "strnlen is unportable - " "use gnulib module strnlen for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strcspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strcspn /* Assume strcspn is always declared. */ _GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " "in multibyte locales - " "use mbscspn if you care about internationalization"); #endif /* Find the first occurrence in S of any character in ACCEPT. */ #if @GNULIB_STRPBRK@ # if ! @HAVE_STRPBRK@ _GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const char * strpbrk (const char *, const char *); } extern "C++" { char * strpbrk (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strpbrk, char *, (char const *__s, char const *__accept), const char *, (char const *__s, char const *__accept)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); _GL_CXXALIASWARN1 (strpbrk, char const *, (char const *__s, char const *__accept)); # else _GL_CXXALIASWARN (strpbrk); # endif # if defined GNULIB_POSIXCHECK /* strpbrk() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strpbrk _GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " "in multibyte locales - " "use mbspbrk if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strpbrk # if HAVE_RAW_DECL_STRPBRK _GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " "use gnulib module strpbrk for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it cannot work with multibyte strings. */ # undef strspn /* Assume strspn is always declared. */ _GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " "in multibyte locales - " "use mbsspn if you care about internationalization"); #endif #if defined GNULIB_POSIXCHECK /* strrchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strrchr /* Assume strrchr is always declared. */ _GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " "in some multibyte locales - " "use mbsrchr if you care about internationalization"); #endif /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next char after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of strtok() that is multithread-safe and supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strtok_r(). */ #if @GNULIB_STRSEP@ # if ! @HAVE_STRSEP@ _GL_FUNCDECL_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim)); _GL_CXXALIASWARN (strsep); # if defined GNULIB_POSIXCHECK # undef strsep _GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " "in multibyte locales - " "use mbssep if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strsep # if HAVE_RAW_DECL_STRSEP _GL_WARN_ON_USE (strsep, "strsep is unportable - " "use gnulib module strsep for portability"); # endif #endif #if @GNULIB_STRSTR@ # if @REPLACE_STRSTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strstr rpl_strstr # endif _GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); # else /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strstr (const char *, const char *); } extern "C++" { char * strstr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strstr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strstr, const char *, (const char *haystack, const char *needle)); # else _GL_CXXALIASWARN (strstr); # endif #elif defined GNULIB_POSIXCHECK /* strstr() does not work with multibyte strings if the locale encoding is different from UTF-8: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strstr /* Assume strstr is always declared. */ _GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " "work correctly on character strings in most " "multibyte locales - " "use mbsstr if you care about internationalization, " "or use strstr if you care about speed"); #endif /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. */ #if @GNULIB_STRCASESTR@ # if @REPLACE_STRCASESTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strcasestr rpl_strcasestr # endif _GL_FUNCDECL_RPL (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strcasestr, char *, (const char *haystack, const char *needle)); # else # if ! @HAVE_STRCASESTR@ _GL_FUNCDECL_SYS (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strcasestr (const char *, const char *); } extern "C++" { char * strcasestr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strcasestr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strcasestr, const char *, (const char *haystack, const char *needle)); # else _GL_CXXALIASWARN (strcasestr); # endif #elif defined GNULIB_POSIXCHECK /* strcasestr() does not work with multibyte strings: It is a glibc extension, and glibc implements it only for unibyte locales. */ # undef strcasestr # if HAVE_RAW_DECL_STRCASESTR _GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " "strings in multibyte locales - " "use mbscasestr if you care about " "internationalization, or use c-strcasestr if you want " "a locale independent function"); # endif #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" This is a variant of strtok() that is multithread-safe. For the POSIX documentation for this function, see: http://www.opengroup.org/susv3xsh/strtok.html Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strsep(). */ #if @GNULIB_STRTOK_R@ # if @REPLACE_STRTOK_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtok_r # define strtok_r rpl_strtok_r # endif _GL_FUNCDECL_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # else # if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK # undef strtok_r # endif # if ! @HAVE_DECL_STRTOK_R@ _GL_FUNCDECL_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # endif _GL_CXXALIASWARN (strtok_r); # if defined GNULIB_POSIXCHECK _GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " "strings in multibyte locales - " "use mbstok_r if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strtok_r # if HAVE_RAW_DECL_STRTOK_R _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " "use gnulib module strtok_r for portability"); # endif #endif /* The following functions are not specified by POSIX. They are gnulib extensions. */ #if @GNULIB_MBSLEN@ /* Return the number of multibyte characters in the character string STRING. This considers multibyte characters, unlike strlen, which counts bytes. */ # ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ # undef mbslen # endif # if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbslen rpl_mbslen # endif _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); # else _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); # endif _GL_CXXALIASWARN (mbslen); #endif #if @GNULIB_MBSNLEN@ /* Return the number of multibyte characters in the character string starting at STRING and ending at STRING + LEN. */ _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1)); #endif #if @GNULIB_MBSCHR@ /* Locate the first single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbschr); #endif #if @GNULIB_MBSRCHR@ /* Locate the last single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strrchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux || defined __INTERIX # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbsrchr rpl_mbsrchr /* avoid collision with system function */ # endif _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbsrchr); #endif #if @GNULIB_MBSSTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. Unlike strstr(), this function works correctly in multibyte locales with encodings different from UTF-8. */ _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASECMP@ /* Compare the character strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function may, in multibyte locales, return 0 for strings of different lengths! Unlike strcasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSNCASECMP@ /* Compare the initial segment of the character string S1 consisting of at most N characters with the initial segment of the character string S2 consisting of at most N characters, ignoring case, returning less than, equal to or greater than zero if the initial segment of S1 is lexicographically less than, equal to or greater than the initial segment of S2. Note: This function may, in multibyte locales, return 0 for initial segments of different lengths! Unlike strncasecmp(), this function works correctly in multibyte locales. But beware that N is not a byte count but a character count! */ _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPCASECMP@ /* Compare the initial segment of the character string STRING consisting of at most mbslen (PREFIX) characters with the character string PREFIX, ignoring case. If the two match, return a pointer to the first byte after this prefix in STRING. Otherwise, return NULL. Note: This function may, in multibyte locales, return non-NULL if STRING is of smaller length than PREFIX! Unlike strncasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASESTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK, using case-insensitive comparison. Note: This function may, in multibyte locales, return success even if strlen (haystack) < strlen (needle) ! Unlike strcasestr(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCSPN@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strcspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPBRK@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the pointer to it, or NULL if none exists. Unlike strpbrk(), this function works correctly in multibyte locales. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); # else _GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); # endif _GL_CXXALIASWARN (mbspbrk); #endif #if @GNULIB_MBSSPN@ /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSSEP@ /* Search the next delimiter (multibyte character listed in the character string DELIM) starting at the character string *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next multibyte character after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of mbstok_r() that supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbstok_r(). */ _GL_EXTERN_C char * mbssep (char **stringp, const char *delim) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSTOK_R@ /* Parse the character string STRING into tokens separated by characters in the character string DELIM. If STRING is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = mbstok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbssep(). */ _GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) _GL_ARG_NONNULL ((2, 3)); #endif /* Map any int, typically from errno, into an error message. */ #if @GNULIB_STRERROR@ # if @REPLACE_STRERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror # define strerror rpl_strerror # endif _GL_FUNCDECL_RPL (strerror, char *, (int)); _GL_CXXALIAS_RPL (strerror, char *, (int)); # else _GL_CXXALIAS_SYS (strerror, char *, (int)); # endif _GL_CXXALIASWARN (strerror); #elif defined GNULIB_POSIXCHECK # undef strerror /* Assume strerror is always declared. */ _GL_WARN_ON_USE (strerror, "strerror is unportable - " "use gnulib module strerror to guarantee non-NULL result"); #endif /* Map any int, typically from errno, into an error message. Multithread-safe. Uses the POSIX declaration, not the glibc declaration. */ #if @GNULIB_STRERROR_R@ # if @REPLACE_STRERROR_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror_r # define strerror_r rpl_strerror_r # endif _GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); # else # if !@HAVE_DECL_STRERROR_R@ _GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); # endif # if @HAVE_DECL_STRERROR_R@ _GL_CXXALIASWARN (strerror_r); # endif #elif defined GNULIB_POSIXCHECK # undef strerror_r # if HAVE_RAW_DECL_STRERROR_R _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " "use gnulib module strerror_r-posix for portability"); # endif #endif #if @GNULIB_STRSIGNAL@ # if @REPLACE_STRSIGNAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strsignal rpl_strsignal # endif _GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); _GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); # else # if ! @HAVE_DECL_STRSIGNAL@ _GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is 'const char *'. */ _GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); # endif _GL_CXXALIASWARN (strsignal); #elif defined GNULIB_POSIXCHECK # undef strsignal # if HAVE_RAW_DECL_STRSIGNAL _GL_WARN_ON_USE (strsignal, "strsignal is unportable - " "use gnulib module strsignal for portability"); # endif #endif #if @GNULIB_STRVERSCMP@ # if !@HAVE_STRVERSCMP@ _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); _GL_CXXALIASWARN (strverscmp); #elif defined GNULIB_POSIXCHECK # undef strverscmp # if HAVE_RAW_DECL_STRVERSCMP _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " "use gnulib module strverscmp for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ #endif ttfautohint-1.8.1/gnulib/src/sys_types.in.h0000644000175000001440000000545013222450623020625 0ustar00wlusers00000000000000/* Provide a more complete sys/types.h. Copyright (C) 2011-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #ifndef _@GUARD_PREFIX@_SYS_TYPES_H /* The include_next requires a split double-inclusion guard. */ # define _GL_INCLUDING_SYS_TYPES_H #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ # undef _GL_INCLUDING_SYS_TYPES_H #ifndef _@GUARD_PREFIX@_SYS_TYPES_H #define _@GUARD_PREFIX@_SYS_TYPES_H /* Override off_t if Large File Support is requested on native Windows. */ #if @WINDOWS_64_BIT_OFF_T@ /* Same as int64_t in . */ # if defined _MSC_VER # define off_t __int64 # else # define off_t long long int # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_64_BIT_OFF_T 1 #endif /* Override dev_t and ino_t if distinguishable inodes support is requested on native Windows. */ #if @WINDOWS_STAT_INODES@ # if @WINDOWS_STAT_INODES@ == 2 /* Experimental, not useful in Windows 10. */ /* Define dev_t to a 64-bit type. */ # if !defined GNULIB_defined_dev_t typedef unsigned long long int rpl_dev_t; # undef dev_t # define dev_t rpl_dev_t # define GNULIB_defined_dev_t 1 # endif /* Define ino_t to a 128-bit type. */ # if !defined GNULIB_defined_ino_t /* MSVC does not have a 128-bit integer type. GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # else /* @WINDOWS_STAT_INODES@ == 1 */ /* Define ino_t to a 64-bit type. */ # if !defined GNULIB_defined_ino_t typedef unsigned long long int rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@ #endif /* MSVC 9 defines size_t in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include #endif #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ ttfautohint-1.8.1/gnulib/src/unistd.in.h0000644000175000001440000015426713222450623020104 0ustar00wlusers00000000000000/* Substitute for and wrapper around . Copyright (C) 2003-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _@GUARD_PREFIX@_UNISTD_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #ifdef _GL_INCLUDING_UNISTD_H /* Special invocation convention: - On Mac OS X 10.3.9 we have a sequence of nested includes -> -> -> In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_UNISTD_H@ #else /* Normal invocation convention. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_UNISTD_H@ # define _GL_INCLUDING_UNISTD_H # @INCLUDE_NEXT@ @NEXT_UNISTD_H@ # undef _GL_INCLUDING_UNISTD_H #endif /* Get all possible declarations of gethostname(). */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ && !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include # undef _GL_INCLUDING_WINSOCK2_H #endif #if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H #define _@GUARD_PREFIX@_UNISTD_H /* NetBSD 5.0 mis-defines NULL. Also get size_t. */ #include /* mingw doesn't define the SEEK_* or *_FILENO macros in . */ /* MSVC declares 'unlink' in , not in . We must include it before we #define unlink rpl_unlink. */ /* Cygwin 1.7.1 declares symlinkat in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ || ((@GNULIB_UNLINK@ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) \ || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ && defined __CYGWIN__)) \ && ! defined __GLIBC__ # include #endif /* Cygwin 1.7.1 declares unlinkat in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \ && ! defined __GLIBC__ # include #endif /* mingw fails to declare _exit in . */ /* mingw, MSVC, BeOS, Haiku declare environ in , not in . */ /* Solaris declares getcwd not only in but also in . */ /* OSF Tru64 Unix cannot see gnulib rpl_strtod when system is included here. */ /* But avoid namespace pollution on glibc systems. */ #if !defined __GLIBC__ && !defined __osf__ # define __need_system_stdlib_h # include # undef __need_system_stdlib_h #endif /* Native Windows platforms declare chdir, getcwd, rmdir in and/or , not in . They also declare access(), chmod(), close(), dup(), dup2(), isatty(), lseek(), read(), unlink(), write() in . */ #if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) # include /* mingw32, mingw64 */ # include /* mingw64, MSVC 9 */ #elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \ || @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) # include #endif /* AIX and OSF/1 5.1 declare getdomainname in , not in . NonStop Kernel declares gethostname in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ && !defined __GLIBC__ # include #endif /* MSVC defines off_t in . May also define off_t to a 64-bit type on native Windows. */ #if !@HAVE_UNISTD_H@ || @WINDOWS_64_BIT_OFF_T@ /* Get off_t. */ # include #endif #if (@GNULIB_READ@ || @GNULIB_WRITE@ \ || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \ || @GNULIB_PREAD@ || @GNULIB_PWRITE@ || defined GNULIB_POSIXCHECK) /* Get ssize_t. */ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Get getopt(), optarg, optind, opterr, optopt. */ #if @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT # include # include #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_UNISTD_INLINE # define _GL_UNISTD_INLINE _GL_INLINE #endif /* Hide some function declarations from . */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # else _GL_WARN_ON_USE (socket, "socket() used without including "); _GL_WARN_ON_USE (connect, "connect() used without including "); _GL_WARN_ON_USE (accept, "accept() used without including "); _GL_WARN_ON_USE (bind, "bind() used without including "); _GL_WARN_ON_USE (getpeername, "getpeername() used without including "); _GL_WARN_ON_USE (getsockname, "getsockname() used without including "); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including "); _GL_WARN_ON_USE (listen, "listen() used without including "); _GL_WARN_ON_USE (recv, "recv() used without including "); _GL_WARN_ON_USE (send, "send() used without including "); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including "); _GL_WARN_ON_USE (sendto, "sendto() used without including "); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including "); _GL_WARN_ON_USE (shutdown, "shutdown() used without including "); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including "); # endif # endif #endif /* OS/2 EMX lacks these macros. */ #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif /* Ensure *_OK macros exist. */ #ifndef F_OK # define F_OK 0 # define X_OK 1 # define W_OK 2 # define R_OK 4 #endif /* Declare overridden functions. */ #if defined GNULIB_POSIXCHECK /* The access() function is a security risk. */ _GL_WARN_ON_USE (access, "the access function is a security risk - " "use the gnulib module faccessat instead"); #endif #if @GNULIB_CHDIR@ _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); _GL_CXXALIASWARN (chdir); #elif defined GNULIB_POSIXCHECK # undef chdir # if HAVE_RAW_DECL_CHDIR _GL_WARN_ON_USE (chown, "chdir is not always in - " "use gnulib module chdir for portability"); # endif #endif #if @GNULIB_CHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_DUP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup2 rpl_dup2 # endif _GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); _GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); # else # if !@HAVE_DUP2@ _GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIASWARN (dup2); #elif defined GNULIB_POSIXCHECK # undef dup2 # if HAVE_RAW_DECL_DUP2 _GL_WARN_ON_USE (dup2, "dup2 is unportable - " "use gnulib module dup2 for portability"); # endif #endif #if @GNULIB_DUP3@ /* Copy the file descriptor OLDFD into file descriptor NEWFD, with the specified flags. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). Close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the Linux man page at . */ # if @HAVE_DUP3@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup3 rpl_dup3 # endif _GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); # else _GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); # endif _GL_CXXALIASWARN (dup3); #elif defined GNULIB_POSIXCHECK # undef dup3 # if HAVE_RAW_DECL_DUP3 _GL_WARN_ON_USE (dup3, "dup3 is unportable - " "use gnulib module dup3 for portability"); # endif #endif #if @GNULIB_ENVIRON@ # if !@HAVE_DECL_ENVIRON@ /* Set of environment variables and values. An array of strings of the form "VARIABLE=VALUE", terminated with a NULL. */ # if defined __APPLE__ && defined __MACH__ # include # if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR # define _GL_USE_CRT_EXTERNS # endif # endif # ifdef _GL_USE_CRT_EXTERNS # include # define environ (*_NSGetEnviron ()) # else # ifdef __cplusplus extern "C" { # endif extern char **environ; # ifdef __cplusplus } # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if HAVE_RAW_DECL_ENVIRON _GL_UNISTD_INLINE char *** rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is unportable - " "use gnulib module environ for portability"); # undef environ # define environ (*rpl_environ ()) # endif #endif #if @GNULIB_EUIDACCESS@ /* Like access(), except that it uses the effective user id and group id of the current process. */ # if !@HAVE_EUIDACCESS@ _GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); _GL_CXXALIASWARN (euidaccess); # if defined GNULIB_POSIXCHECK /* Like access(), this function is a security risk. */ _GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " "use the gnulib module faccessat instead"); # endif #elif defined GNULIB_POSIXCHECK # undef euidaccess # if HAVE_RAW_DECL_EUIDACCESS _GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " "use gnulib module euidaccess for portability"); # endif #endif #if @GNULIB_FACCESSAT@ # if @REPLACE_FACCESSAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef faccessat # define faccessat rpl_faccessat # endif _GL_FUNCDECL_RPL (faccessat, int, (int fd, char const *name, int mode, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (faccessat, int, (int fd, char const *name, int mode, int flag)); # else # if !@HAVE_FACCESSAT@ _GL_FUNCDECL_SYS (faccessat, int, (int fd, char const *file, int mode, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (faccessat, int, (int fd, char const *file, int mode, int flag)); # endif _GL_CXXALIASWARN (faccessat); #elif defined GNULIB_POSIXCHECK # undef faccessat # if HAVE_RAW_DECL_FACCESSAT _GL_WARN_ON_USE (faccessat, "faccessat is not portable - " "use gnulib module faccessat for portability"); # endif #endif #if @GNULIB_FCHDIR@ /* Change the process' current working directory to the directory on which the given file descriptor is open. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if ! @HAVE_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); /* Gnulib internal hooks needed to maintain the fchdir metadata. */ _GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) _GL_ARG_NONNULL ((2)); _GL_EXTERN_C void _gl_unregister_fd (int fd); _GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); _GL_EXTERN_C const char *_gl_directory_name (int fd); # else # if !@HAVE_DECL_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); # endif # endif _GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); _GL_CXXALIASWARN (fchdir); #elif defined GNULIB_POSIXCHECK # undef fchdir # if HAVE_RAW_DECL_FCHDIR _GL_WARN_ON_USE (fchdir, "fchdir is unportable - " "use gnulib module fchdir for portability"); # endif #endif #if @GNULIB_FCHOWNAT@ # if @REPLACE_FCHOWNAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fchownat # define fchownat rpl_fchownat # endif _GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # else # if !@HAVE_FCHOWNAT@ _GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # endif _GL_CXXALIASWARN (fchownat); #elif defined GNULIB_POSIXCHECK # undef fchownat # if HAVE_RAW_DECL_FCHOWNAT _GL_WARN_ON_USE (fchownat, "fchownat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FDATASYNC@ /* Synchronize changes to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification . */ # if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@ _GL_FUNCDECL_SYS (fdatasync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fdatasync, int, (int fd)); _GL_CXXALIASWARN (fdatasync); #elif defined GNULIB_POSIXCHECK # undef fdatasync # if HAVE_RAW_DECL_FDATASYNC _GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " "use gnulib module fdatasync for portability"); # endif #endif #if @GNULIB_FSYNC@ /* Synchronize changes, including metadata, to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification . */ # if !@HAVE_FSYNC@ _GL_FUNCDECL_SYS (fsync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fsync, int, (int fd)); _GL_CXXALIASWARN (fsync); #elif defined GNULIB_POSIXCHECK # undef fsync # if HAVE_RAW_DECL_FSYNC _GL_WARN_ON_USE (fsync, "fsync is unportable - " "use gnulib module fsync for portability"); # endif #endif #if @GNULIB_FTRUNCATE@ /* Change the size of the file to which FD is opened to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_FTRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftruncate # define ftruncate rpl_ftruncate # endif _GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); _GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); # else # if !@HAVE_FTRUNCATE@ _GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIASWARN (ftruncate); #elif defined GNULIB_POSIXCHECK # undef ftruncate # if HAVE_RAW_DECL_FTRUNCATE _GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " "use gnulib module ftruncate for portability"); # endif #endif #if @GNULIB_GETCWD@ /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Return BUF if successful, or NULL if the directory couldn't be determined or SIZE was too small. See the POSIX:2008 specification . Additionally, the gnulib module 'getcwd' guarantees the following GNU extension: If BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ # if @REPLACE_GETCWD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getcwd rpl_getcwd # endif _GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); _GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); # else /* Need to cast, because on mingw, the second parameter is int size. */ _GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); # endif _GL_CXXALIASWARN (getcwd); #elif defined GNULIB_POSIXCHECK # undef getcwd # if HAVE_RAW_DECL_GETCWD _GL_WARN_ON_USE (getcwd, "getcwd is unportable - " "use gnulib module getcwd for portability"); # endif #endif #if @GNULIB_GETDOMAINNAME@ /* Return the NIS domain name of the machine. WARNING! The NIS domain name is unrelated to the fully qualified host name of the machine. It is also unrelated to email addresses. WARNING! The NIS domain name is usually the empty string or "(none)" when not using NIS. Put up to LEN bytes of the NIS domain name into NAME. Null terminate it if the name is shorter than LEN. If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @REPLACE_GETDOMAINNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdomainname # define getdomainname rpl_getdomainname # endif _GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); # else # if !@HAVE_DECL_GETDOMAINNAME@ _GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (getdomainname); #elif defined GNULIB_POSIXCHECK # undef getdomainname # if HAVE_RAW_DECL_GETDOMAINNAME _GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " "use gnulib module getdomainname for portability"); # endif #endif #if @GNULIB_GETDTABLESIZE@ /* Return the maximum number of file descriptors in the current process. In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ # if @REPLACE_GETDTABLESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdtablesize # define getdtablesize rpl_getdtablesize # endif _GL_FUNCDECL_RPL (getdtablesize, int, (void)); _GL_CXXALIAS_RPL (getdtablesize, int, (void)); # else # if !@HAVE_GETDTABLESIZE@ _GL_FUNCDECL_SYS (getdtablesize, int, (void)); # endif _GL_CXXALIAS_SYS (getdtablesize, int, (void)); # endif _GL_CXXALIASWARN (getdtablesize); #elif defined GNULIB_POSIXCHECK # undef getdtablesize # if HAVE_RAW_DECL_GETDTABLESIZE _GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " "use gnulib module getdtablesize for portability"); # endif #endif #if @GNULIB_GETGROUPS@ /* Return the supplemental groups that the current process belongs to. It is unspecified whether the effective group id is in the list. If N is 0, return the group count; otherwise, N describes how many entries are available in GROUPS. Return -1 and set errno if N is not 0 and not large enough. Fails with ENOSYS on some systems. */ # if @REPLACE_GETGROUPS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getgroups # define getgroups rpl_getgroups # endif _GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); _GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); # else # if !@HAVE_GETGROUPS@ _GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIASWARN (getgroups); #elif defined GNULIB_POSIXCHECK # undef getgroups # if HAVE_RAW_DECL_GETGROUPS _GL_WARN_ON_USE (getgroups, "getgroups is unportable - " "use gnulib module getgroups for portability"); # endif #endif #if @GNULIB_GETHOSTNAME@ /* Return the standard host name of the machine. WARNING! The host name may or may not be fully qualified. Put up to LEN bytes of the host name into NAME. Null terminate it if the name is shorter than LEN. If the host name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @UNISTD_H_HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname rpl_gethostname # endif _GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); # else # if !@HAVE_GETHOSTNAME@ _GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second parameter is int len. */ _GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (gethostname); #elif @UNISTD_H_HAVE_WINSOCK2_H@ # undef gethostname # define gethostname gethostname_used_without_requesting_gnulib_module_gethostname #elif defined GNULIB_POSIXCHECK # undef gethostname # if HAVE_RAW_DECL_GETHOSTNAME _GL_WARN_ON_USE (gethostname, "gethostname is unportable - " "use gnulib module gethostname for portability"); # endif #endif #if @GNULIB_GETLOGIN@ /* Returns the user's login name, or NULL if it cannot be found. Upon error, returns NULL with errno set. See . Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if !@HAVE_DECL_GETLOGIN@ _GL_FUNCDECL_SYS (getlogin, char *, (void)); # endif _GL_CXXALIAS_SYS (getlogin, char *, (void)); _GL_CXXALIASWARN (getlogin); #elif defined GNULIB_POSIXCHECK # undef getlogin # if HAVE_RAW_DECL_GETLOGIN _GL_WARN_ON_USE (getlogin, "getlogin is unportable - " "use gnulib module getlogin for portability"); # endif #endif #if @GNULIB_GETLOGIN_R@ /* Copies the user's login name to NAME. The array pointed to by NAME has room for SIZE bytes. Returns 0 if successful. Upon error, an error number is returned, or -1 in the case that the login name cannot be found but no specific error is provided (this case is hopefully rare but is left open by the POSIX spec). See . Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if @REPLACE_GETLOGIN_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getlogin_r rpl_getlogin_r # endif _GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); # else # if !@HAVE_DECL_GETLOGIN_R@ _GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 systems, the second argument is int size. */ _GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); # endif _GL_CXXALIASWARN (getlogin_r); #elif defined GNULIB_POSIXCHECK # undef getlogin_r # if HAVE_RAW_DECL_GETLOGIN_R _GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " "use gnulib module getlogin_r for portability"); # endif #endif #if @GNULIB_GETPAGESIZE@ # if @REPLACE_GETPAGESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize rpl_getpagesize # endif _GL_FUNCDECL_RPL (getpagesize, int, (void)); _GL_CXXALIAS_RPL (getpagesize, int, (void)); # else # if !@HAVE_GETPAGESIZE@ # if !defined getpagesize /* This is for POSIX systems. */ # if !defined _gl_getpagesize && defined _SC_PAGESIZE # if ! (defined __VMS && __VMS_VER < 70000000) # define _gl_getpagesize() sysconf (_SC_PAGESIZE) # endif # endif /* This is for older VMS. */ # if !defined _gl_getpagesize && defined __VMS # ifdef __ALPHA # define _gl_getpagesize() 8192 # else # define _gl_getpagesize() 512 # endif # endif /* This is for BeOS. */ # if !defined _gl_getpagesize && @HAVE_OS_H@ # include # if defined B_PAGE_SIZE # define _gl_getpagesize() B_PAGE_SIZE # endif # endif /* This is for AmigaOS4.0. */ # if !defined _gl_getpagesize && defined __amigaos4__ # define _gl_getpagesize() 2048 # endif /* This is for older Unix systems. */ # if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@ # include # ifdef EXEC_PAGESIZE # define _gl_getpagesize() EXEC_PAGESIZE # else # ifdef NBPG # ifndef CLSIZE # define CLSIZE 1 # endif # define _gl_getpagesize() (NBPG * CLSIZE) # else # ifdef NBPC # define _gl_getpagesize() NBPC # endif # endif # endif # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize() _gl_getpagesize () # else # if !GNULIB_defined_getpagesize_function _GL_UNISTD_INLINE int getpagesize () { return _gl_getpagesize (); } # define GNULIB_defined_getpagesize_function 1 # endif # endif # endif # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ _GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); # endif # if @HAVE_DECL_GETPAGESIZE@ _GL_CXXALIASWARN (getpagesize); # endif #elif defined GNULIB_POSIXCHECK # undef getpagesize # if HAVE_RAW_DECL_GETPAGESIZE _GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " "use gnulib module getpagesize for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Return the next valid login shell on the system, or NULL when the end of the list has been reached. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (getusershell, char *, (void)); # endif _GL_CXXALIAS_SYS (getusershell, char *, (void)); _GL_CXXALIASWARN (getusershell); #elif defined GNULIB_POSIXCHECK # undef getusershell # if HAVE_RAW_DECL_GETUSERSHELL _GL_WARN_ON_USE (getusershell, "getusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Rewind to pointer that is advanced at each getusershell() call. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (setusershell, void, (void)); # endif _GL_CXXALIAS_SYS (setusershell, void, (void)); _GL_CXXALIASWARN (setusershell); #elif defined GNULIB_POSIXCHECK # undef setusershell # if HAVE_RAW_DECL_SETUSERSHELL _GL_WARN_ON_USE (setusershell, "setusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Free the pointer that is advanced at each getusershell() call and associated resources. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (endusershell, void, (void)); # endif _GL_CXXALIAS_SYS (endusershell, void, (void)); _GL_CXXALIASWARN (endusershell); #elif defined GNULIB_POSIXCHECK # undef endusershell # if HAVE_RAW_DECL_ENDUSERSHELL _GL_WARN_ON_USE (endusershell, "endusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GROUP_MEMBER@ /* Determine whether group id is in calling user's group list. */ # if !@HAVE_GROUP_MEMBER@ _GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); # endif _GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); _GL_CXXALIASWARN (group_member); #elif defined GNULIB_POSIXCHECK # undef group_member # if HAVE_RAW_DECL_GROUP_MEMBER _GL_WARN_ON_USE (group_member, "group_member is unportable - " "use gnulib module group-member for portability"); # endif #endif #if @GNULIB_ISATTY@ # if @REPLACE_ISATTY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty rpl_isatty # endif _GL_FUNCDECL_RPL (isatty, int, (int fd)); _GL_CXXALIAS_RPL (isatty, int, (int fd)); # else _GL_CXXALIAS_SYS (isatty, int, (int fd)); # endif _GL_CXXALIASWARN (isatty); #elif defined GNULIB_POSIXCHECK # undef isatty # if HAVE_RAW_DECL_ISATTY _GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " "use gnulib module isatty for portability"); # endif #endif #if @GNULIB_LCHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Do not follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_LCHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lchown # define lchown rpl_lchown # endif _GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); # else # if !@HAVE_LCHOWN@ _GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); # endif _GL_CXXALIASWARN (lchown); #elif defined GNULIB_POSIXCHECK # undef lchown # if HAVE_RAW_DECL_LCHOWN _GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " "use gnulib module lchown for portability"); # endif #endif #if @GNULIB_LINK@ /* Create a new hard link for an existing file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification . */ # if @REPLACE_LINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define link rpl_link # endif _GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); # else # if !@HAVE_LINK@ _GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); # endif _GL_CXXALIASWARN (link); #elif defined GNULIB_POSIXCHECK # undef link # if HAVE_RAW_DECL_LINK _GL_WARN_ON_USE (link, "link is unportable - " "use gnulib module link for portability"); # endif #endif #if @GNULIB_LINKAT@ /* Create a new hard link for an existing file, relative to two directories. FLAG controls whether symlinks are followed. Return 0 if successful, otherwise -1 and errno set. */ # if @REPLACE_LINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef linkat # define linkat rpl_linkat # endif _GL_FUNCDECL_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # else # if !@HAVE_LINKAT@ _GL_FUNCDECL_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # endif _GL_CXXALIASWARN (linkat); #elif defined GNULIB_POSIXCHECK # undef linkat # if HAVE_RAW_DECL_LINKAT _GL_WARN_ON_USE (linkat, "linkat is unportable - " "use gnulib module linkat for portability"); # endif #endif #if @GNULIB_LSEEK@ /* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. Return the new offset if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_LSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lseek rpl_lseek # endif _GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); _GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); # else _GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); # endif _GL_CXXALIASWARN (lseek); #elif defined GNULIB_POSIXCHECK # undef lseek # if HAVE_RAW_DECL_LSEEK _GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " "systems - use gnulib module lseek for portability"); # endif #endif #if @GNULIB_PIPE@ /* Create a pipe, defaulting to O_BINARY mode. Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. */ # if !@HAVE_PIPE@ _GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pipe, int, (int fd[2])); _GL_CXXALIASWARN (pipe); #elif defined GNULIB_POSIXCHECK # undef pipe # if HAVE_RAW_DECL_PIPE _GL_WARN_ON_USE (pipe, "pipe is unportable - " "use gnulib module pipe-posix for portability"); # endif #endif #if @GNULIB_PIPE2@ /* Create a pipe, applying the given flags when opening the read-end of the pipe and the write-end of the pipe. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. See also the Linux man page at . */ # if @HAVE_PIPE2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define pipe2 rpl_pipe2 # endif _GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); # else _GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); # endif _GL_CXXALIASWARN (pipe2); #elif defined GNULIB_POSIXCHECK # undef pipe2 # if HAVE_RAW_DECL_PIPE2 _GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " "use gnulib module pipe2 for portability"); # endif #endif #if @GNULIB_PREAD@ /* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. Return the number of bytes placed into BUF if successful, otherwise set errno and return -1. 0 indicates EOF. See the POSIX:2008 specification . */ # if @REPLACE_PREAD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pread # define pread rpl_pread # endif _GL_FUNCDECL_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PREAD@ _GL_FUNCDECL_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # endif _GL_CXXALIASWARN (pread); #elif defined GNULIB_POSIXCHECK # undef pread # if HAVE_RAW_DECL_PREAD _GL_WARN_ON_USE (pread, "pread is unportable - " "use gnulib module pread for portability"); # endif #endif #if @GNULIB_PWRITE@ /* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. Return the number of bytes written if successful, otherwise set errno and return -1. 0 indicates nothing written. See the POSIX:2008 specification . */ # if @REPLACE_PWRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pwrite # define pwrite rpl_pwrite # endif _GL_FUNCDECL_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PWRITE@ _GL_FUNCDECL_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # endif _GL_CXXALIASWARN (pwrite); #elif defined GNULIB_POSIXCHECK # undef pwrite # if HAVE_RAW_DECL_PWRITE _GL_WARN_ON_USE (pwrite, "pwrite is unportable - " "use gnulib module pwrite for portability"); # endif #endif #if @GNULIB_READ@ /* Read up to COUNT bytes from file descriptor FD into the buffer starting at BUF. See the POSIX:2008 specification . */ # if @REPLACE_READ@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read rpl_read # endif _GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); # else /* Need to cast, because on mingw, the third parameter is unsigned int count and the return type is 'int'. */ _GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count)); # endif _GL_CXXALIASWARN (read); #endif #if @GNULIB_READLINK@ /* Read the contents of the symbolic link FILE and place the first BUFSIZE bytes of it into BUF. Return the number of bytes placed into BUF if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_READLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlink rpl_readlink # endif _GL_FUNCDECL_RPL (readlink, ssize_t, (const char *file, char *buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (readlink, ssize_t, (const char *file, char *buf, size_t bufsize)); # else # if !@HAVE_READLINK@ _GL_FUNCDECL_SYS (readlink, ssize_t, (const char *file, char *buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (readlink, ssize_t, (const char *file, char *buf, size_t bufsize)); # endif _GL_CXXALIASWARN (readlink); #elif defined GNULIB_POSIXCHECK # undef readlink # if HAVE_RAW_DECL_READLINK _GL_WARN_ON_USE (readlink, "readlink is unportable - " "use gnulib module readlink for portability"); # endif #endif #if @GNULIB_READLINKAT@ # if @REPLACE_READLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlinkat rpl_readlinkat # endif _GL_FUNCDECL_RPL (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len)); # else # if !@HAVE_READLINKAT@ _GL_FUNCDECL_SYS (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len)); # endif _GL_CXXALIASWARN (readlinkat); #elif defined GNULIB_POSIXCHECK # undef readlinkat # if HAVE_RAW_DECL_READLINKAT _GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " "use gnulib module readlinkat for portability"); # endif #endif #if @GNULIB_RMDIR@ /* Remove the directory DIR. */ # if @REPLACE_RMDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define rmdir rpl_rmdir # endif _GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (rmdir, int, (char const *name)); # else _GL_CXXALIAS_SYS (rmdir, int, (char const *name)); # endif _GL_CXXALIASWARN (rmdir); #elif defined GNULIB_POSIXCHECK # undef rmdir # if HAVE_RAW_DECL_RMDIR _GL_WARN_ON_USE (rmdir, "rmdir is unportable - " "use gnulib module rmdir for portability"); # endif #endif #if @GNULIB_SETHOSTNAME@ /* Set the host name of the machine. The host name may or may not be fully qualified. Put LEN bytes of NAME into the host name. Return 0 if successful, otherwise, set errno and return -1. Platforms with no ability to set the hostname return -1 and set errno = ENOSYS. */ # if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@ _GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 and FreeBSD 6.4 the second parameter is int. On Solaris 11 2011-10, the first parameter is not const. */ _GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); _GL_CXXALIASWARN (sethostname); #elif defined GNULIB_POSIXCHECK # undef sethostname # if HAVE_RAW_DECL_SETHOSTNAME _GL_WARN_ON_USE (sethostname, "sethostname is unportable - " "use gnulib module sethostname for portability"); # endif #endif #if @GNULIB_SLEEP@ /* Pause the execution of the current thread for N seconds. Returns the number of seconds left to sleep. See the POSIX:2008 specification . */ # if @REPLACE_SLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sleep # define sleep rpl_sleep # endif _GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); _GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); # else # if !@HAVE_SLEEP@ _GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIASWARN (sleep); #elif defined GNULIB_POSIXCHECK # undef sleep # if HAVE_RAW_DECL_SLEEP _GL_WARN_ON_USE (sleep, "sleep is unportable - " "use gnulib module sleep for portability"); # endif #endif #if @GNULIB_SYMLINK@ # if @REPLACE_SYMLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlink # define symlink rpl_symlink # endif _GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); # else # if !@HAVE_SYMLINK@ _GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); # endif _GL_CXXALIASWARN (symlink); #elif defined GNULIB_POSIXCHECK # undef symlink # if HAVE_RAW_DECL_SYMLINK _GL_WARN_ON_USE (symlink, "symlink is not portable - " "use gnulib module symlink for portability"); # endif #endif #if @GNULIB_SYMLINKAT@ # if @REPLACE_SYMLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlinkat # define symlinkat rpl_symlinkat # endif _GL_FUNCDECL_RPL (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (symlinkat, int, (char const *contents, int fd, char const *file)); # else # if !@HAVE_SYMLINKAT@ _GL_FUNCDECL_SYS (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (symlinkat, int, (char const *contents, int fd, char const *file)); # endif _GL_CXXALIASWARN (symlinkat); #elif defined GNULIB_POSIXCHECK # undef symlinkat # if HAVE_RAW_DECL_SYMLINKAT _GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " "use gnulib module symlinkat for portability"); # endif #endif #if @GNULIB_TRUNCATE@ /* Change the size of the file designated by FILENAME to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_TRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncate # define truncate rpl_truncate # endif _GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length)); # else # if !@HAVE_TRUNCATE@ _GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length)); # endif _GL_CXXALIASWARN (truncate); #elif defined GNULIB_POSIXCHECK # undef truncate # if HAVE_RAW_DECL_TRUNCATE _GL_WARN_ON_USE (truncate, "truncate is unportable - " "use gnulib module truncate for portability"); # endif #endif #if @GNULIB_TTYNAME_R@ /* Store at most BUFLEN characters of the pathname of the terminal FD is open on in BUF. Return 0 on success, otherwise an error number. */ # if @REPLACE_TTYNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ttyname_r # define ttyname_r rpl_ttyname_r # endif _GL_FUNCDECL_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen)); # else # if !@HAVE_DECL_TTYNAME_R@ _GL_FUNCDECL_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen)); # endif _GL_CXXALIASWARN (ttyname_r); #elif defined GNULIB_POSIXCHECK # undef ttyname_r # if HAVE_RAW_DECL_TTYNAME_R _GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " "use gnulib module ttyname_r for portability"); # endif #endif #if @GNULIB_UNLINK@ # if @REPLACE_UNLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink rpl_unlink # endif _GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unlink, int, (char const *file)); # else _GL_CXXALIAS_SYS (unlink, int, (char const *file)); # endif _GL_CXXALIASWARN (unlink); #elif defined GNULIB_POSIXCHECK # undef unlink # if HAVE_RAW_DECL_UNLINK _GL_WARN_ON_USE (unlink, "unlink is not portable - " "use gnulib module unlink for portability"); # endif #endif #if @GNULIB_UNLINKAT@ # if @REPLACE_UNLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlinkat # define unlinkat rpl_unlinkat # endif _GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); # else # if !@HAVE_UNLINKAT@ _GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); # endif _GL_CXXALIASWARN (unlinkat); #elif defined GNULIB_POSIXCHECK # undef unlinkat # if HAVE_RAW_DECL_UNLINKAT _GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_USLEEP@ /* Pause the execution of the current thread for N microseconds. Returns 0 on completion, or -1 on range error. See the POSIX:2001 specification . */ # if @REPLACE_USLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef usleep # define usleep rpl_usleep # endif _GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); _GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); # else # if !@HAVE_USLEEP@ _GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); # endif _GL_CXXALIAS_SYS (usleep, int, (useconds_t n)); # endif _GL_CXXALIASWARN (usleep); #elif defined GNULIB_POSIXCHECK # undef usleep # if HAVE_RAW_DECL_USLEEP _GL_WARN_ON_USE (usleep, "usleep is unportable - " "use gnulib module usleep for portability"); # endif #endif #if @GNULIB_WRITE@ /* Write up to COUNT bytes starting at BUF to file descriptor FD. See the POSIX:2008 specification . */ # if @REPLACE_WRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write rpl_write # endif _GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); # else /* Need to cast, because on mingw, the third parameter is unsigned int count and the return type is 'int'. */ _GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count)); # endif _GL_CXXALIASWARN (write); #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_UNISTD_H */ #endif /* _GL_INCLUDING_UNISTD_H */ #endif /* _@GUARD_PREFIX@_UNISTD_H */ ttfautohint-1.8.1/gnulib/src/float+.h0000644000175000001440000001274613222450623017344 0ustar00wlusers00000000000000/* Supplemental information about the floating-point formats. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2007. This program is free software; you can 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _FLOATPLUS_H #define _FLOATPLUS_H #include #include /* Number of bits in the mantissa of a floating-point number, including the "hidden bit". */ #if FLT_RADIX == 2 # define FLT_MANT_BIT FLT_MANT_DIG # define DBL_MANT_BIT DBL_MANT_DIG # define LDBL_MANT_BIT LDBL_MANT_DIG #elif FLT_RADIX == 4 # define FLT_MANT_BIT (FLT_MANT_DIG * 2) # define DBL_MANT_BIT (DBL_MANT_DIG * 2) # define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) #elif FLT_RADIX == 16 # define FLT_MANT_BIT (FLT_MANT_DIG * 4) # define DBL_MANT_BIT (DBL_MANT_DIG * 4) # define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) #endif /* Bit mask that can be used to mask the exponent, as an unsigned number. */ #define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) #define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) #define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) /* Number of bits used for the exponent of a floating-point number, including the exponent's sign. */ #define FLT_EXP_BIT \ (FLT_EXP_MASK < 0x100 ? 8 : \ FLT_EXP_MASK < 0x200 ? 9 : \ FLT_EXP_MASK < 0x400 ? 10 : \ FLT_EXP_MASK < 0x800 ? 11 : \ FLT_EXP_MASK < 0x1000 ? 12 : \ FLT_EXP_MASK < 0x2000 ? 13 : \ FLT_EXP_MASK < 0x4000 ? 14 : \ FLT_EXP_MASK < 0x8000 ? 15 : \ FLT_EXP_MASK < 0x10000 ? 16 : \ FLT_EXP_MASK < 0x20000 ? 17 : \ FLT_EXP_MASK < 0x40000 ? 18 : \ FLT_EXP_MASK < 0x80000 ? 19 : \ FLT_EXP_MASK < 0x100000 ? 20 : \ FLT_EXP_MASK < 0x200000 ? 21 : \ FLT_EXP_MASK < 0x400000 ? 22 : \ FLT_EXP_MASK < 0x800000 ? 23 : \ FLT_EXP_MASK < 0x1000000 ? 24 : \ FLT_EXP_MASK < 0x2000000 ? 25 : \ FLT_EXP_MASK < 0x4000000 ? 26 : \ FLT_EXP_MASK < 0x8000000 ? 27 : \ FLT_EXP_MASK < 0x10000000 ? 28 : \ FLT_EXP_MASK < 0x20000000 ? 29 : \ FLT_EXP_MASK < 0x40000000 ? 30 : \ FLT_EXP_MASK <= 0x7fffffff ? 31 : \ 32) #define DBL_EXP_BIT \ (DBL_EXP_MASK < 0x100 ? 8 : \ DBL_EXP_MASK < 0x200 ? 9 : \ DBL_EXP_MASK < 0x400 ? 10 : \ DBL_EXP_MASK < 0x800 ? 11 : \ DBL_EXP_MASK < 0x1000 ? 12 : \ DBL_EXP_MASK < 0x2000 ? 13 : \ DBL_EXP_MASK < 0x4000 ? 14 : \ DBL_EXP_MASK < 0x8000 ? 15 : \ DBL_EXP_MASK < 0x10000 ? 16 : \ DBL_EXP_MASK < 0x20000 ? 17 : \ DBL_EXP_MASK < 0x40000 ? 18 : \ DBL_EXP_MASK < 0x80000 ? 19 : \ DBL_EXP_MASK < 0x100000 ? 20 : \ DBL_EXP_MASK < 0x200000 ? 21 : \ DBL_EXP_MASK < 0x400000 ? 22 : \ DBL_EXP_MASK < 0x800000 ? 23 : \ DBL_EXP_MASK < 0x1000000 ? 24 : \ DBL_EXP_MASK < 0x2000000 ? 25 : \ DBL_EXP_MASK < 0x4000000 ? 26 : \ DBL_EXP_MASK < 0x8000000 ? 27 : \ DBL_EXP_MASK < 0x10000000 ? 28 : \ DBL_EXP_MASK < 0x20000000 ? 29 : \ DBL_EXP_MASK < 0x40000000 ? 30 : \ DBL_EXP_MASK <= 0x7fffffff ? 31 : \ 32) #define LDBL_EXP_BIT \ (LDBL_EXP_MASK < 0x100 ? 8 : \ LDBL_EXP_MASK < 0x200 ? 9 : \ LDBL_EXP_MASK < 0x400 ? 10 : \ LDBL_EXP_MASK < 0x800 ? 11 : \ LDBL_EXP_MASK < 0x1000 ? 12 : \ LDBL_EXP_MASK < 0x2000 ? 13 : \ LDBL_EXP_MASK < 0x4000 ? 14 : \ LDBL_EXP_MASK < 0x8000 ? 15 : \ LDBL_EXP_MASK < 0x10000 ? 16 : \ LDBL_EXP_MASK < 0x20000 ? 17 : \ LDBL_EXP_MASK < 0x40000 ? 18 : \ LDBL_EXP_MASK < 0x80000 ? 19 : \ LDBL_EXP_MASK < 0x100000 ? 20 : \ LDBL_EXP_MASK < 0x200000 ? 21 : \ LDBL_EXP_MASK < 0x400000 ? 22 : \ LDBL_EXP_MASK < 0x800000 ? 23 : \ LDBL_EXP_MASK < 0x1000000 ? 24 : \ LDBL_EXP_MASK < 0x2000000 ? 25 : \ LDBL_EXP_MASK < 0x4000000 ? 26 : \ LDBL_EXP_MASK < 0x8000000 ? 27 : \ LDBL_EXP_MASK < 0x10000000 ? 28 : \ LDBL_EXP_MASK < 0x20000000 ? 29 : \ LDBL_EXP_MASK < 0x40000000 ? 30 : \ LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ 32) /* Number of bits used for a floating-point number: the mantissa (not counting the "hidden bit", since it may or may not be explicit), the exponent, and the sign. */ #define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) #define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) #define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) /* Number of bytes used for a floating-point number. This can be smaller than the 'sizeof'. For example, on i386 systems, 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but sizeof (long double) = 12 or = 16. */ #define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) #define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) #define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) /* Verify that SIZEOF_FLT <= sizeof (float) etc. */ typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1]; typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1]; typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1]; #endif /* _FLOATPLUS_H */ ttfautohint-1.8.1/gnulib/src/printf-args.h0000644000175000001440000000753413222450623020417 0ustar00wlusers00000000000000/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2006-2007, 2011-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _PRINTF_ARGS_H #define _PRINTF_ARGS_H /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be declared. STATIC Set to 'static' to declare the function static. */ /* Default parameters. */ #ifndef PRINTF_FETCHARGS # define PRINTF_FETCHARGS printf_fetchargs #endif /* Get size_t. */ #include /* Get wchar_t. */ #if HAVE_WCHAR_T # include #endif /* Get wint_t. */ #if HAVE_WINT_T # include #endif /* Get va_list. */ #include /* Argument types */ typedef enum { TYPE_NONE, TYPE_SCHAR, TYPE_UCHAR, TYPE_SHORT, TYPE_USHORT, TYPE_INT, TYPE_UINT, TYPE_LONGINT, TYPE_ULONGINT, #if HAVE_LONG_LONG_INT TYPE_LONGLONGINT, TYPE_ULONGLONGINT, #endif TYPE_DOUBLE, TYPE_LONGDOUBLE, TYPE_CHAR, #if HAVE_WINT_T TYPE_WIDE_CHAR, #endif TYPE_STRING, #if HAVE_WCHAR_T TYPE_WIDE_STRING, #endif TYPE_POINTER, TYPE_COUNT_SCHAR_POINTER, TYPE_COUNT_SHORT_POINTER, TYPE_COUNT_INT_POINTER, TYPE_COUNT_LONGINT_POINTER #if HAVE_LONG_LONG_INT , TYPE_COUNT_LONGLONGINT_POINTER #endif #if ENABLE_UNISTDIO /* The unistdio extensions. */ , TYPE_U8_STRING , TYPE_U16_STRING , TYPE_U32_STRING #endif } arg_type; /* Polymorphic argument */ typedef struct { arg_type type; union { signed char a_schar; unsigned char a_uchar; short a_short; unsigned short a_ushort; int a_int; unsigned int a_uint; long int a_longint; unsigned long int a_ulongint; #if HAVE_LONG_LONG_INT long long int a_longlongint; unsigned long long int a_ulonglongint; #endif float a_float; double a_double; long double a_longdouble; int a_char; #if HAVE_WINT_T wint_t a_wide_char; #endif const char* a_string; #if HAVE_WCHAR_T const wchar_t* a_wide_string; #endif void* a_pointer; signed char * a_count_schar_pointer; short * a_count_short_pointer; int * a_count_int_pointer; long int * a_count_longint_pointer; #if HAVE_LONG_LONG_INT long long int * a_count_longlongint_pointer; #endif #if ENABLE_UNISTDIO /* The unistdio extensions. */ const uint8_t * a_u8_string; const uint16_t * a_u16_string; const uint32_t * a_u32_string; #endif } a; } argument; /* Number of directly allocated arguments (no malloc() needed). */ #define N_DIRECT_ALLOC_ARGUMENTS 7 typedef struct { size_t count; argument *arg; argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; } arguments; /* Fetch the arguments, putting them into a. */ #ifdef STATIC STATIC #else extern #endif int PRINTF_FETCHARGS (va_list args, arguments *a); #endif /* _PRINTF_ARGS_H */ ttfautohint-1.8.1/gnulib/src/printf-parse.h0000644000175000001440000001216413222450623020570 0ustar00wlusers00000000000000/* Parse printf format string. Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _PRINTF_PARSE_H #define _PRINTF_PARSE_H /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. STATIC Set to 'static' to declare the function static. */ #if HAVE_FEATURES_H # include /* for __GLIBC__, __UCLIBC__ */ #endif #include "printf-args.h" /* Flags */ #define FLAG_GROUP 1 /* ' flag */ #define FLAG_LEFT 2 /* - flag */ #define FLAG_SHOWSIGN 4 /* + flag */ #define FLAG_SPACE 8 /* space flag */ #define FLAG_ALT 16 /* # flag */ #define FLAG_ZERO 32 #if __GLIBC__ >= 2 && !defined __UCLIBC__ # define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ #endif /* arg_index value indicating that no argument is consumed. */ #define ARG_NONE (~(size_t)0) /* xxx_directive: A parsed directive. xxx_directives: A parsed format string. */ /* Number of directly allocated directives (no malloc() needed). */ #define N_DIRECT_ALLOC_DIRECTIVES 7 /* A parsed directive. */ typedef struct { const char* dir_start; const char* dir_end; int flags; const char* width_start; const char* width_end; size_t width_arg_index; const char* precision_start; const char* precision_end; size_t precision_arg_index; char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } char_directive; /* A parsed format string. */ typedef struct { size_t count; char_directive *dir; size_t max_width_length; size_t max_precision_length; char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } char_directives; #if ENABLE_UNISTDIO /* A parsed directive. */ typedef struct { const uint8_t* dir_start; const uint8_t* dir_end; int flags; const uint8_t* width_start; const uint8_t* width_end; size_t width_arg_index; const uint8_t* precision_start; const uint8_t* precision_end; size_t precision_arg_index; uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u8_directive; /* A parsed format string. */ typedef struct { size_t count; u8_directive *dir; size_t max_width_length; size_t max_precision_length; u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u8_directives; /* A parsed directive. */ typedef struct { const uint16_t* dir_start; const uint16_t* dir_end; int flags; const uint16_t* width_start; const uint16_t* width_end; size_t width_arg_index; const uint16_t* precision_start; const uint16_t* precision_end; size_t precision_arg_index; uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u16_directive; /* A parsed format string. */ typedef struct { size_t count; u16_directive *dir; size_t max_width_length; size_t max_precision_length; u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u16_directives; /* A parsed directive. */ typedef struct { const uint32_t* dir_start; const uint32_t* dir_end; int flags; const uint32_t* width_start; const uint32_t* width_end; size_t width_arg_index; const uint32_t* precision_start; const uint32_t* precision_end; size_t precision_arg_index; uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u32_directive; /* A parsed format string. */ typedef struct { size_t count; u32_directive *dir; size_t max_width_length; size_t max_precision_length; u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u32_directives; #endif /* Parses the format string. Fills in the number N of directives, and fills in directives[0], ..., directives[N-1], and sets directives[N].dir_start to the end of the format string. Also fills in the arg_type fields of the arguments and the needed count of arguments. */ #if ENABLE_UNISTDIO extern int ulc_printf_parse (const char *format, char_directives *d, arguments *a); extern int u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); extern int u16_printf_parse (const uint16_t *format, u16_directives *d, arguments *a); extern int u32_printf_parse (const uint32_t *format, u32_directives *d, arguments *a); #else # ifdef STATIC STATIC # else extern # endif int printf_parse (const char *format, char_directives *d, arguments *a); #endif #endif /* _PRINTF_PARSE_H */ ttfautohint-1.8.1/gnulib/src/vasnprintf.h0000644000175000001440000000560113222450623020346 0ustar00wlusers00000000000000/* vsprintf with automatic memory allocation. Copyright (C) 2002-2004, 2007-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _VASNPRINTF_H #define _VASNPRINTF_H /* Get va_list. */ #include /* Get size_t. */ #include /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(). You can pass a preallocated buffer for the result in RESULTBUF and its size in *LENGTHP; otherwise you pass RESULTBUF = NULL. If successful, return the address of the string (this may be = RESULTBUF if no dynamic memory allocation was necessary) and set *LENGTHP to the number of resulting bytes, excluding the trailing NUL. Upon error, set errno and return NULL. When dynamic memory allocation occurs, the preallocated buffer is left alone (with possibly modified contents). This makes it possible to use a statically allocated or stack-allocated buffer, like this: char buf[100]; size_t len = sizeof (buf); char *output = vasnprintf (buf, &len, format, args); if (output == NULL) ... error handling ...; else { ... use the output string ...; if (output != buf) free (output); } */ #if REPLACE_VASNPRINTF # define asnprintf rpl_asnprintf # define vasnprintf rpl_vasnprintf #endif extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0)); #ifdef __cplusplus } #endif #endif /* _VASNPRINTF_H */ ttfautohint-1.8.1/gnulib/src/verify.h0000644000175000001440000002561113222450623017463 0ustar00wlusers00000000000000/* Compile-time assert-like macros. Copyright (C) 2005-2006, 2009-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 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 . */ /* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ #ifndef _GL_VERIFY_H #define _GL_VERIFY_H /* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11. This is supported by GCC 4.6.0 and later, in C mode, and its use here generates easier-to-read diagnostics when verify (R) fails. Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11. This will likely be supported by future GCC versions, in C++ mode. Use this only with GCC. If we were willing to slow 'configure' down we could also use it with other compilers, but since this affects only the quality of diagnostics, why bother? */ #if (4 < __GNUC__ + (6 <= __GNUC_MINOR__) \ && (201112L <= __STDC_VERSION__ || !defined __STRICT_ANSI__) \ && !defined __cplusplus) # define _GL_HAVE__STATIC_ASSERT 1 #endif /* The condition (99 < __GNUC__) is temporary, until we know about the first G++ release that supports static_assert. */ #if (99 < __GNUC__) && defined __cplusplus # define _GL_HAVE_STATIC_ASSERT 1 #endif /* FreeBSD 9.1 , included by and lots of other system headers, defines a conflicting _Static_assert that is no better than ours; override it. */ #ifndef _GL_HAVE_STATIC_ASSERT # include # undef _Static_assert #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. If _Static_assert works, verify (R) uses it directly. Similarly, _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct that is an operand of sizeof. The code below uses several ideas for C++ compilers, and for C compilers that do not support _Static_assert: * The first step is ((R) ? 1 : -1). Given an expression R, of integral or boolean or floating-point type, this yields an expression of integral type, whose value is later verified to be constant and nonnegative. * Next this expression W is wrapped in a type struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: W; }. If W is negative, this yields a compile-time error. No compiler can deal with a bit-field of negative size. One might think that an array size check would have the same effect, that is, that the type struct { unsigned int dummy[W]; } would work as well. However, inside a function, some compilers (such as C++ compilers and GNU C) allow local parameters and variables inside array size expressions. With these compilers, an array size check would not properly diagnose this misuse of the verify macro: void function (int n) { verify (n < 0); } * For the verify macro, the struct _gl_verify_type will need to somehow be embedded into a declaration. To be portable, this declaration must declare an object, a constant, a function, or a typedef name. If the declared entity uses the type directly, such as in struct dummy {...}; typedef struct {...} dummy; extern struct {...} *dummy; extern void dummy (struct {...} *); extern struct {...} *dummy (void); two uses of the verify macro would yield colliding declarations if the entity names are not disambiguated. A workaround is to attach the current line number to the entity name: #define _GL_CONCAT0(x, y) x##y #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) extern struct {...} * _GL_CONCAT (dummy, __LINE__); But this has the problem that two invocations of verify from within the same macro would collide, since the __LINE__ value would be the same for both invocations. (The GCC __COUNTER__ macro solves this problem, but is not portable.) A solution is to use the sizeof operator. It yields a number, getting rid of the identity of the type. Declarations like extern int dummy [sizeof (struct {...})]; extern void dummy (int [sizeof (struct {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; can be repeated. * Should the implementation use a named struct or an unnamed struct? Which of the following alternatives can be used? extern int dummy [sizeof (struct {...})]; extern int dummy [sizeof (struct _gl_verify_type {...})]; extern void dummy (int [sizeof (struct {...})]); extern void dummy (int [sizeof (struct _gl_verify_type {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; In the second and sixth case, the struct type is exported to the outer scope; two such declarations therefore collide. GCC warns about the first, third, and fourth cases. So the only remaining possibility is the fifth case: extern int (*dummy (void)) [sizeof (struct {...})]; * GCC warns about duplicate declarations of the dummy function if -Wredundant-decls is used. GCC 4.3 and later have a builtin __COUNTER__ macro that can let us generate unique identifiers for each dummy function, to suppress this warning. * This implementation exploits the fact that older versions of GCC, which do not support _Static_assert, also do not warn about the last declaration mentioned above. * GCC warns if -Wnested-externs is enabled and verify() is used within a function body; but inside a function, you can always arrange to use verify_expr() instead. * In C++, any struct definition inside sizeof is invalid. Use a template type to work around the problem. */ /* Concatenate two preprocessor tokens. */ #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) #define _GL_CONCAT0(x, y) x##y /* _GL_COUNTER is an integer, preferably one that changes each time we use it. Use __COUNTER__ if it works, falling back on __LINE__ otherwise. __LINE__ isn't perfect, but it's better than a constant. */ #if defined __COUNTER__ && __COUNTER__ != __COUNTER__ # define _GL_COUNTER __COUNTER__ #else # define _GL_COUNTER __LINE__ #endif /* Generate a symbol with the given prefix, making it unique if possible. */ #define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) /* Verify requirement R at compile-time, as an integer constant expression that returns 1. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. */ #define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) #ifdef __cplusplus # if !GNULIB_defined_struct__gl_verify_type template struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: w; }; # define GNULIB_defined_struct__gl_verify_type 1 # endif # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ _gl_verify_type<(R) ? 1 : -1> #elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { \ _Static_assert (R, DIAGNOSTIC); \ int _gl_dummy; \ } #else # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } #endif /* Verify requirement R at compile-time, as a declaration without a trailing ';'. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. Unfortunately, unlike C11, this implementation must appear as an ordinary declaration, and cannot appear inside struct { ... }. */ #ifdef _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY _Static_assert #else # define _GL_VERIFY(R, DIAGNOSTIC) \ extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] #endif /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ #ifdef _GL_STATIC_ASSERT_H # if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert # define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) # endif # if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert # define static_assert _Static_assert /* C11 requires this #define. */ # endif #endif /* @assert.h omit start@ */ /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. There are two macros, since no single macro can be used in all contexts in C. verify_true (R) is for scalar contexts, including integer constant expression contexts. verify (R) is for declaration contexts, e.g., the top level. */ /* Verify requirement R at compile-time, as an integer constant expression. Return 1. This is equivalent to verify_expr (R, 1). verify_true is obsolescent; please use verify_expr instead. */ #define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") /* Verify requirement R at compile-time. Return the value of the expression E. */ #define verify_expr(R, E) \ (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) /* Verify requirement R at compile-time, as a declaration without a trailing ';'. */ #ifdef __GNUC__ # define verify(R) _GL_VERIFY (R, "verify (" #R ")") #else /* PGI barfs if R is long. Play it safe. */ # define verify(R) _GL_VERIFY (R, "verify (...)") #endif #ifndef __has_builtin # define __has_builtin(x) 0 #endif /* Assume that R always holds. This lets the compiler optimize accordingly. R should not have side-effects; it may or may not be evaluated. Behavior is undefined if R is false. */ #if (__has_builtin (__builtin_unreachable) \ || 4 < __GNUC__ + (5 <= __GNUC_MINOR__)) # define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) #elif 1200 <= _MSC_VER # define assume(R) __assume (R) #elif ((defined GCC_LINT || defined lint) \ && (__has_builtin (__builtin_trap) \ || 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)))) /* Doing it this way helps various packages when configured with --enable-gcc-warnings, which compiles with -Dlint. It's nicer when 'assume' silences warnings even with older GCCs. */ # define assume(R) ((R) ? (void) 0 : __builtin_trap ()) #else # define assume(R) ((void) (0 && (R))) #endif /* @assert.h omit end@ */ #endif ttfautohint-1.8.1/gnulib/src/wchar.in.h0000644000175000001440000010542613222450624017674 0ustar00wlusers00000000000000/* A substitute for ISO C99 , for platforms that have issues. Copyright (C) 2007-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 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 . */ /* Written by Eric Blake. */ /* * ISO C 99 for platforms that have issues. * * * For now, this just ensures proper prerequisite inclusion order and * the declaration of wcwidth(). */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (((defined __need_mbstate_t || defined __need_wint_t) \ && !defined __MINGW32__) \ || (defined __hpux \ && ((defined _INTTYPES_INCLUDED && !defined strtoimax) \ || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \ || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \ || defined _GL_ALREADY_INCLUDING_WCHAR_H) /* Special invocation convention: - Inside glibc and uClibc header files, but not MinGW. - On HP-UX 11.00 we have a sequence of nested includes -> -> , and the latter includes , once indirectly -> -> -> and once directly. In both situations 'wint_t' is not yet defined, therefore we cannot provide the function overrides; instead include only the system's . - With MinGW 3.22, when includes , only some part of is actually processed, and that doesn't include 'mbstate_t'. - On IRIX 6.5, similarly, we have an include -> , and the latter includes . But here, we have no way to detect whether is completely included or is still being included. */ #@INCLUDE_NEXT@ @NEXT_WCHAR_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_WCHAR_H #define _GL_ALREADY_INCLUDING_WCHAR_H #if @HAVE_FEATURES_H@ # include /* for __GLIBC__ */ #endif /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . In some builds of uClibc, is nonexistent and wchar_t is defined by . But avoid namespace pollution on glibc systems. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include #endif #ifndef __GLIBC__ # include # include #endif /* Include the original if it exists. Some builds of uClibc lack it. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_WCHAR_H@ # @INCLUDE_NEXT@ @NEXT_WCHAR_H@ #endif #undef _GL_ALREADY_INCLUDING_WCHAR_H #ifndef _@GUARD_PREFIX@_WCHAR_H #define _@GUARD_PREFIX@_WCHAR_H /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Define wint_t and WEOF. (Also done in wctype.in.h.) */ #if !@HAVE_WINT_T@ && !defined wint_t # define wint_t int # ifndef WEOF # define WEOF -1 # endif #else /* mingw and MSVC define wint_t as 'unsigned short' in or . This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be "unchanged by default argument promotions". Override it. */ # if @GNULIB_OVERRIDES_WINT_T@ # if !GNULIB_defined_wint_t # if @HAVE_CRTDEFS_H@ # include # else # include # endif typedef unsigned int rpl_wint_t; # undef wint_t # define wint_t rpl_wint_t # define GNULIB_defined_wint_t 1 # endif # endif # ifndef WEOF # define WEOF ((wint_t) -1) # endif #endif /* Override mbstate_t if it is too small. On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for implementing mbrtowc for encodings like UTF-8. */ #if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ # if !GNULIB_defined_mbstate_t typedef int rpl_mbstate_t; # undef mbstate_t # define mbstate_t rpl_mbstate_t # define GNULIB_defined_mbstate_t 1 # endif #endif /* Convert a single-byte character to a wide character. */ #if @GNULIB_BTOWC@ # if @REPLACE_BTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef btowc # define btowc rpl_btowc # endif _GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (btowc, wint_t, (int c)); # else # if !@HAVE_BTOWC@ _GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (btowc, wint_t, (int c)); # endif _GL_CXXALIASWARN (btowc); #elif defined GNULIB_POSIXCHECK # undef btowc # if HAVE_RAW_DECL_BTOWC _GL_WARN_ON_USE (btowc, "btowc is unportable - " "use gnulib module btowc for portability"); # endif #endif /* Convert a wide character to a single-byte character. */ #if @GNULIB_WCTOB@ # if @REPLACE_WCTOB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctob # define wctob rpl_wctob # endif _GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); # else # if !defined wctob && !@HAVE_DECL_WCTOB@ /* wctob is provided by gnulib, or wctob exists but is not declared. */ _GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); # endif _GL_CXXALIASWARN (wctob); #elif defined GNULIB_POSIXCHECK # undef wctob # if HAVE_RAW_DECL_WCTOB _GL_WARN_ON_USE (wctob, "wctob is unportable - " "use gnulib module wctob for portability"); # endif #endif /* Test whether *PS is in the initial state. */ #if @GNULIB_MBSINIT@ # if @REPLACE_MBSINIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsinit # define mbsinit rpl_mbsinit # endif _GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps)); _GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); # else # if !@HAVE_MBSINIT@ _GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbsinit); #elif defined GNULIB_POSIXCHECK # undef mbsinit # if HAVE_RAW_DECL_MBSINIT _GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " "use gnulib module mbsinit for portability"); # endif #endif /* Convert a multibyte character to a wide character. */ #if @GNULIB_MBRTOWC@ # if @REPLACE_MBRTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrtowc # define mbrtowc rpl_mbrtowc # endif _GL_FUNCDECL_RPL (mbrtowc, size_t, (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); _GL_CXXALIAS_RPL (mbrtowc, size_t, (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); # else # if !@HAVE_MBRTOWC@ _GL_FUNCDECL_SYS (mbrtowc, size_t, (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbrtowc, size_t, (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbrtowc); #elif defined GNULIB_POSIXCHECK # undef mbrtowc # if HAVE_RAW_DECL_MBRTOWC _GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " "use gnulib module mbrtowc for portability"); # endif #endif /* Recognize a multibyte character. */ #if @GNULIB_MBRLEN@ # if @REPLACE_MBRLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrlen # define mbrlen rpl_mbrlen # endif _GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); _GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); # else # if !@HAVE_MBRLEN@ _GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbrlen); #elif defined GNULIB_POSIXCHECK # undef mbrlen # if HAVE_RAW_DECL_MBRLEN _GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " "use gnulib module mbrlen for portability"); # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSRTOWCS@ # if @REPLACE_MBSRTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsrtowcs # define mbsrtowcs rpl_mbsrtowcs # endif _GL_FUNCDECL_RPL (mbsrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)); # else # if !@HAVE_MBSRTOWCS@ _GL_FUNCDECL_SYS (mbsrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbsrtowcs); #elif defined GNULIB_POSIXCHECK # undef mbsrtowcs # if HAVE_RAW_DECL_MBSRTOWCS _GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " "use gnulib module mbsrtowcs for portability"); # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSNRTOWCS@ # if @REPLACE_MBSNRTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsnrtowcs # define mbsnrtowcs rpl_mbsnrtowcs # endif _GL_FUNCDECL_RPL (mbsnrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsnrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps)); # else # if !@HAVE_MBSNRTOWCS@ _GL_FUNCDECL_SYS (mbsnrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsnrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbsnrtowcs); #elif defined GNULIB_POSIXCHECK # undef mbsnrtowcs # if HAVE_RAW_DECL_MBSNRTOWCS _GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " "use gnulib module mbsnrtowcs for portability"); # endif #endif /* Convert a wide character to a multibyte character. */ #if @GNULIB_WCRTOMB@ # if @REPLACE_WCRTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcrtomb # define wcrtomb rpl_wcrtomb # endif _GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); _GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); # else # if !@HAVE_WCRTOMB@ _GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); # endif _GL_CXXALIASWARN (wcrtomb); #elif defined GNULIB_POSIXCHECK # undef wcrtomb # if HAVE_RAW_DECL_WCRTOMB _GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " "use gnulib module wcrtomb for portability"); # endif #endif /* Convert a wide string to a string. */ #if @GNULIB_WCSRTOMBS@ # if @REPLACE_WCSRTOMBS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsrtombs # define wcsrtombs rpl_wcsrtombs # endif _GL_FUNCDECL_RPL (wcsrtombs, size_t, (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsrtombs, size_t, (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)); # else # if !@HAVE_WCSRTOMBS@ _GL_FUNCDECL_SYS (wcsrtombs, size_t, (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsrtombs, size_t, (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)); # endif _GL_CXXALIASWARN (wcsrtombs); #elif defined GNULIB_POSIXCHECK # undef wcsrtombs # if HAVE_RAW_DECL_WCSRTOMBS _GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " "use gnulib module wcsrtombs for portability"); # endif #endif /* Convert a wide string to a string. */ #if @GNULIB_WCSNRTOMBS@ # if @REPLACE_WCSNRTOMBS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsnrtombs # define wcsnrtombs rpl_wcsnrtombs # endif _GL_FUNCDECL_RPL (wcsnrtombs, size_t, (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsnrtombs, size_t, (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps)); # else # if !@HAVE_WCSNRTOMBS@ _GL_FUNCDECL_SYS (wcsnrtombs, size_t, (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsnrtombs, size_t, (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps)); # endif _GL_CXXALIASWARN (wcsnrtombs); #elif defined GNULIB_POSIXCHECK # undef wcsnrtombs # if HAVE_RAW_DECL_WCSNRTOMBS _GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " "use gnulib module wcsnrtombs for portability"); # endif #endif /* Return the number of screen columns needed for WC. */ #if @GNULIB_WCWIDTH@ # if @REPLACE_WCWIDTH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcwidth # define wcwidth rpl_wcwidth # endif _GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); # else # if !@HAVE_DECL_WCWIDTH@ /* wcwidth exists but is not declared. */ _GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); # endif _GL_CXXALIASWARN (wcwidth); #elif defined GNULIB_POSIXCHECK # undef wcwidth # if HAVE_RAW_DECL_WCWIDTH _GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " "use gnulib module wcwidth for portability"); # endif #endif /* Search N wide characters of S for C. */ #if @GNULIB_WMEMCHR@ # if !@HAVE_WMEMCHR@ _GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (wmemchr, wchar_t *, (const wchar_t *, wchar_t, size_t), const wchar_t *, (const wchar_t *, wchar_t, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); _GL_CXXALIASWARN1 (wmemchr, const wchar_t *, (const wchar_t *s, wchar_t c, size_t n)); # else _GL_CXXALIASWARN (wmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef wmemchr # if HAVE_RAW_DECL_WMEMCHR _GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " "use gnulib module wmemchr for portability"); # endif #endif /* Compare N wide characters of S1 and S2. */ #if @GNULIB_WMEMCMP@ # if !@HAVE_WMEMCMP@ _GL_FUNCDECL_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wmemcmp); #elif defined GNULIB_POSIXCHECK # undef wmemcmp # if HAVE_RAW_DECL_WMEMCMP _GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " "use gnulib module wmemcmp for portability"); # endif #endif /* Copy N wide characters of SRC to DEST. */ #if @GNULIB_WMEMCPY@ # if !@HAVE_WMEMCPY@ _GL_FUNCDECL_SYS (wmemcpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemcpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); _GL_CXXALIASWARN (wmemcpy); #elif defined GNULIB_POSIXCHECK # undef wmemcpy # if HAVE_RAW_DECL_WMEMCPY _GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " "use gnulib module wmemcpy for portability"); # endif #endif /* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for overlapping memory areas. */ #if @GNULIB_WMEMMOVE@ # if !@HAVE_WMEMMOVE@ _GL_FUNCDECL_SYS (wmemmove, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemmove, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); _GL_CXXALIASWARN (wmemmove); #elif defined GNULIB_POSIXCHECK # undef wmemmove # if HAVE_RAW_DECL_WMEMMOVE _GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " "use gnulib module wmemmove for portability"); # endif #endif /* Set N wide characters of S to C. */ #if @GNULIB_WMEMSET@ # if !@HAVE_WMEMSET@ _GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); # endif _GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); _GL_CXXALIASWARN (wmemset); #elif defined GNULIB_POSIXCHECK # undef wmemset # if HAVE_RAW_DECL_WMEMSET _GL_WARN_ON_USE (wmemset, "wmemset is unportable - " "use gnulib module wmemset for portability"); # endif #endif /* Return the number of wide characters in S. */ #if @GNULIB_WCSLEN@ # if !@HAVE_WCSLEN@ _GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); _GL_CXXALIASWARN (wcslen); #elif defined GNULIB_POSIXCHECK # undef wcslen # if HAVE_RAW_DECL_WCSLEN _GL_WARN_ON_USE (wcslen, "wcslen is unportable - " "use gnulib module wcslen for portability"); # endif #endif /* Return the number of wide characters in S, but at most MAXLEN. */ #if @GNULIB_WCSNLEN@ # if !@HAVE_WCSNLEN@ _GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); _GL_CXXALIASWARN (wcsnlen); #elif defined GNULIB_POSIXCHECK # undef wcsnlen # if HAVE_RAW_DECL_WCSNLEN _GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " "use gnulib module wcsnlen for portability"); # endif #endif /* Copy SRC to DEST. */ #if @GNULIB_WCSCPY@ # if !@HAVE_WCSCPY@ _GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); # endif _GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); _GL_CXXALIASWARN (wcscpy); #elif defined GNULIB_POSIXCHECK # undef wcscpy # if HAVE_RAW_DECL_WCSCPY _GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " "use gnulib module wcscpy for portability"); # endif #endif /* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ #if @GNULIB_WCPCPY@ # if !@HAVE_WCPCPY@ _GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); # endif _GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); _GL_CXXALIASWARN (wcpcpy); #elif defined GNULIB_POSIXCHECK # undef wcpcpy # if HAVE_RAW_DECL_WCPCPY _GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " "use gnulib module wcpcpy for portability"); # endif #endif /* Copy no more than N wide characters of SRC to DEST. */ #if @GNULIB_WCSNCPY@ # if !@HAVE_WCSNCPY@ _GL_FUNCDECL_SYS (wcsncpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); _GL_CXXALIASWARN (wcsncpy); #elif defined GNULIB_POSIXCHECK # undef wcsncpy # if HAVE_RAW_DECL_WCSNCPY _GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " "use gnulib module wcsncpy for portability"); # endif #endif /* Copy no more than N characters of SRC to DEST, returning the address of the last character written into DEST. */ #if @GNULIB_WCPNCPY@ # if !@HAVE_WCPNCPY@ _GL_FUNCDECL_SYS (wcpncpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wcpncpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); _GL_CXXALIASWARN (wcpncpy); #elif defined GNULIB_POSIXCHECK # undef wcpncpy # if HAVE_RAW_DECL_WCPNCPY _GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " "use gnulib module wcpncpy for portability"); # endif #endif /* Append SRC onto DEST. */ #if @GNULIB_WCSCAT@ # if !@HAVE_WCSCAT@ _GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); # endif _GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); _GL_CXXALIASWARN (wcscat); #elif defined GNULIB_POSIXCHECK # undef wcscat # if HAVE_RAW_DECL_WCSCAT _GL_WARN_ON_USE (wcscat, "wcscat is unportable - " "use gnulib module wcscat for portability"); # endif #endif /* Append no more than N wide characters of SRC onto DEST. */ #if @GNULIB_WCSNCAT@ # if !@HAVE_WCSNCAT@ _GL_FUNCDECL_SYS (wcsncat, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncat, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); _GL_CXXALIASWARN (wcsncat); #elif defined GNULIB_POSIXCHECK # undef wcsncat # if HAVE_RAW_DECL_WCSNCAT _GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " "use gnulib module wcsncat for portability"); # endif #endif /* Compare S1 and S2. */ #if @GNULIB_WCSCMP@ # if !@HAVE_WCSCMP@ _GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); _GL_CXXALIASWARN (wcscmp); #elif defined GNULIB_POSIXCHECK # undef wcscmp # if HAVE_RAW_DECL_WCSCMP _GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " "use gnulib module wcscmp for portability"); # endif #endif /* Compare no more than N wide characters of S1 and S2. */ #if @GNULIB_WCSNCMP@ # if !@HAVE_WCSNCMP@ _GL_FUNCDECL_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wcsncmp); #elif defined GNULIB_POSIXCHECK # undef wcsncmp # if HAVE_RAW_DECL_WCSNCMP _GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " "use gnulib module wcsncmp for portability"); # endif #endif /* Compare S1 and S2, ignoring case. */ #if @GNULIB_WCSCASECMP@ # if !@HAVE_WCSCASECMP@ _GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); _GL_CXXALIASWARN (wcscasecmp); #elif defined GNULIB_POSIXCHECK # undef wcscasecmp # if HAVE_RAW_DECL_WCSCASECMP _GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " "use gnulib module wcscasecmp for portability"); # endif #endif /* Compare no more than N chars of S1 and S2, ignoring case. */ #if @GNULIB_WCSNCASECMP@ # if !@HAVE_WCSNCASECMP@ _GL_FUNCDECL_SYS (wcsncasecmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsncasecmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wcsncasecmp); #elif defined GNULIB_POSIXCHECK # undef wcsncasecmp # if HAVE_RAW_DECL_WCSNCASECMP _GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " "use gnulib module wcsncasecmp for portability"); # endif #endif /* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE category of the current locale. */ #if @GNULIB_WCSCOLL@ # if !@HAVE_WCSCOLL@ _GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); # endif _GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); _GL_CXXALIASWARN (wcscoll); #elif defined GNULIB_POSIXCHECK # undef wcscoll # if HAVE_RAW_DECL_WCSCOLL _GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " "use gnulib module wcscoll for portability"); # endif #endif /* Transform S2 into array pointed to by S1 such that if wcscmp is applied to two transformed strings the result is the as applying 'wcscoll' to the original strings. */ #if @GNULIB_WCSXFRM@ # if !@HAVE_WCSXFRM@ _GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); # endif _GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wcsxfrm); #elif defined GNULIB_POSIXCHECK # undef wcsxfrm # if HAVE_RAW_DECL_WCSXFRM _GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " "use gnulib module wcsxfrm for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_WCSDUP@ # if !@HAVE_WCSDUP@ _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s)); # endif _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); _GL_CXXALIASWARN (wcsdup); #elif defined GNULIB_POSIXCHECK # undef wcsdup # if HAVE_RAW_DECL_WCSDUP _GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " "use gnulib module wcsdup for portability"); # endif #endif /* Find the first occurrence of WC in WCS. */ #if @GNULIB_WCSCHR@ # if !@HAVE_WCSCHR@ _GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcschr (const wchar_t *, wchar_t); wchar_t * std::wcschr (wchar_t *, wchar_t); } */ _GL_CXXALIAS_SYS_CAST2 (wcschr, wchar_t *, (const wchar_t *, wchar_t), const wchar_t *, (const wchar_t *, wchar_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); # else _GL_CXXALIASWARN (wcschr); # endif #elif defined GNULIB_POSIXCHECK # undef wcschr # if HAVE_RAW_DECL_WCSCHR _GL_WARN_ON_USE (wcschr, "wcschr is unportable - " "use gnulib module wcschr for portability"); # endif #endif /* Find the last occurrence of WC in WCS. */ #if @GNULIB_WCSRCHR@ # if !@HAVE_WCSRCHR@ _GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); wchar_t * std::wcsrchr (wchar_t *, wchar_t); } */ _GL_CXXALIAS_SYS_CAST2 (wcsrchr, wchar_t *, (const wchar_t *, wchar_t), const wchar_t *, (const wchar_t *, wchar_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); # else _GL_CXXALIASWARN (wcsrchr); # endif #elif defined GNULIB_POSIXCHECK # undef wcsrchr # if HAVE_RAW_DECL_WCSRCHR _GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " "use gnulib module wcsrchr for portability"); # endif #endif /* Return the length of the initial segmet of WCS which consists entirely of wide characters not in REJECT. */ #if @GNULIB_WCSCSPN@ # if !@HAVE_WCSCSPN@ _GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); _GL_CXXALIASWARN (wcscspn); #elif defined GNULIB_POSIXCHECK # undef wcscspn # if HAVE_RAW_DECL_WCSCSPN _GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " "use gnulib module wcscspn for portability"); # endif #endif /* Return the length of the initial segmet of WCS which consists entirely of wide characters in ACCEPT. */ #if @GNULIB_WCSSPN@ # if !@HAVE_WCSSPN@ _GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); _GL_CXXALIASWARN (wcsspn); #elif defined GNULIB_POSIXCHECK # undef wcsspn # if HAVE_RAW_DECL_WCSSPN _GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " "use gnulib module wcsspn for portability"); # endif #endif /* Find the first occurrence in WCS of any character in ACCEPT. */ #if @GNULIB_WCSPBRK@ # if !@HAVE_WCSPBRK@ _GL_FUNCDECL_SYS (wcspbrk, wchar_t *, (const wchar_t *wcs, const wchar_t *accept) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); } */ _GL_CXXALIAS_SYS_CAST2 (wcspbrk, wchar_t *, (const wchar_t *, const wchar_t *), const wchar_t *, (const wchar_t *, const wchar_t *)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcspbrk, wchar_t *, (wchar_t *wcs, const wchar_t *accept)); _GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, (const wchar_t *wcs, const wchar_t *accept)); # else _GL_CXXALIASWARN (wcspbrk); # endif #elif defined GNULIB_POSIXCHECK # undef wcspbrk # if HAVE_RAW_DECL_WCSPBRK _GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " "use gnulib module wcspbrk for portability"); # endif #endif /* Find the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_WCSSTR@ # if !@HAVE_WCSSTR@ _GL_FUNCDECL_SYS (wcsstr, wchar_t *, (const wchar_t *haystack, const wchar_t *needle) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); wchar_t * std::wcsstr (wchar_t *, const wchar_t *); } */ _GL_CXXALIAS_SYS_CAST2 (wcsstr, wchar_t *, (const wchar_t *, const wchar_t *), const wchar_t *, (const wchar_t *, const wchar_t *)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsstr, wchar_t *, (wchar_t *haystack, const wchar_t *needle)); _GL_CXXALIASWARN1 (wcsstr, const wchar_t *, (const wchar_t *haystack, const wchar_t *needle)); # else _GL_CXXALIASWARN (wcsstr); # endif #elif defined GNULIB_POSIXCHECK # undef wcsstr # if HAVE_RAW_DECL_WCSSTR _GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " "use gnulib module wcsstr for portability"); # endif #endif /* Divide WCS into tokens separated by characters in DELIM. */ #if @GNULIB_WCSTOK@ # if !@HAVE_WCSTOK@ _GL_FUNCDECL_SYS (wcstok, wchar_t *, (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); # endif _GL_CXXALIAS_SYS (wcstok, wchar_t *, (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); _GL_CXXALIASWARN (wcstok); #elif defined GNULIB_POSIXCHECK # undef wcstok # if HAVE_RAW_DECL_WCSTOK _GL_WARN_ON_USE (wcstok, "wcstok is unportable - " "use gnulib module wcstok for portability"); # endif #endif /* Determine number of column positions required for first N wide characters (or fewer if S ends before this) in S. */ #if @GNULIB_WCSWIDTH@ # if @REPLACE_WCSWIDTH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcswidth # define wcswidth rpl_wcswidth # endif _GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); # else # if !@HAVE_WCSWIDTH@ _GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); # endif _GL_CXXALIASWARN (wcswidth); #elif defined GNULIB_POSIXCHECK # undef wcswidth # if HAVE_RAW_DECL_WCSWIDTH _GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " "use gnulib module wcswidth for portability"); # endif #endif /* Convert *TP to a date and time wide string. See . */ #if @GNULIB_WCSFTIME@ # if @REPLACE_WCSFTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsftime # define wcsftime rpl_wcsftime # endif _GL_FUNCDECL_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, const wchar_t *__fmt, const struct tm *__tp) _GL_ARG_NONNULL ((1, 3, 4))); _GL_CXXALIAS_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, const wchar_t *__fmt, const struct tm *__tp)); # else # if !@HAVE_WCSFTIME@ _GL_FUNCDECL_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, const wchar_t *__fmt, const struct tm *__tp) _GL_ARG_NONNULL ((1, 3, 4))); # endif _GL_CXXALIAS_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, const wchar_t *__fmt, const struct tm *__tp)); # endif _GL_CXXALIASWARN (wcsftime); #elif defined GNULIB_POSIXCHECK # undef wcsftime # if HAVE_RAW_DECL_WCSFTIME _GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - " "use gnulib module wcsftime for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif ttfautohint-1.8.1/gnulib/src/xalloc.h0000644000175000001440000001724413222450624017445 0ustar00wlusers00000000000000/* xalloc.h -- malloc with out-of-memory checking Copyright (C) 1990-2000, 2003-2004, 2006-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef XALLOC_H_ #define XALLOC_H_ #include #include #include "xalloc-oversized.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef XALLOC_INLINE # define XALLOC_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif #if __GNUC__ >= 3 # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) #else # define _GL_ATTRIBUTE_MALLOC #endif #if ! defined __clang__ && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) # define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) #else # define _GL_ATTRIBUTE_ALLOC_SIZE(args) #endif /* This function is always triggered when memory is exhausted. It must be defined by the application, either explicitly or by using gnulib's xalloc-die module. This is the function to call when one wants the program to die because of a memory allocation failure. */ extern _Noreturn void xalloc_die (void); void *xmalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); void *xzalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); void *xcalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)); void *xrealloc (void *p, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2)); void *x2realloc (void *p, size_t *pn); void *xmemdup (void const *p, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2)); char *xstrdup (char const *str) _GL_ATTRIBUTE_MALLOC; /* In the following macros, T must be an elementary or structure/union or typedef'ed type, or a pointer to such a type. To apply one of the following macros to a function pointer or array type, you need to typedef it first and use the typedef name. */ /* Allocate an object of type T dynamically, with error checking. */ /* extern t *XMALLOC (typename t); */ #define XMALLOC(t) ((t *) xmalloc (sizeof (t))) /* Allocate memory for N elements of type T, with error checking. */ /* extern t *XNMALLOC (size_t n, typename t); */ #define XNMALLOC(n, t) \ ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t)))) /* Allocate an object of type T dynamically, with error checking, and zero it. */ /* extern t *XZALLOC (typename t); */ #define XZALLOC(t) ((t *) xzalloc (sizeof (t))) /* Allocate memory for N elements of type T, with error checking, and zero it. */ /* extern t *XCALLOC (size_t n, typename t); */ #define XCALLOC(n, t) \ ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t)))) /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. */ XALLOC_INLINE void *xnmalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)); XALLOC_INLINE void * xnmalloc (size_t n, size_t s) { if (xalloc_oversized (n, s)) xalloc_die (); return xmalloc (n * s); } /* Change the size of an allocated block of memory P to an array of N objects each of S bytes, with error checking. S must be nonzero. */ XALLOC_INLINE void *xnrealloc (void *p, size_t n, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); XALLOC_INLINE void * xnrealloc (void *p, size_t n, size_t s) { if (xalloc_oversized (n, s)) xalloc_die (); return xrealloc (p, n * s); } /* If P is null, allocate a block of at least *PN such objects; otherwise, reallocate P so that it contains more than *PN objects each of S bytes. S must be nonzero. Set *PN to the new number of objects, and return the pointer to the new block. *PN is never set to zero, and the returned pointer is never null. Repeated reallocations are guaranteed to make progress, either by allocating an initial block with a nonzero size, or by allocating a larger block. In the following implementation, nonzero sizes are increased by a factor of approximately 1.5 so that repeated reallocations have O(N) overall cost rather than O(N**2) cost, but the specification for this function does not guarantee that rate. Here is an example of use: int *p = NULL; size_t used = 0; size_t allocated = 0; void append_int (int value) { if (used == allocated) p = x2nrealloc (p, &allocated, sizeof *p); p[used++] = value; } This causes x2nrealloc to allocate a block of some nonzero size the first time it is called. To have finer-grained control over the initial size, set *PN to a nonzero value before calling this function with P == NULL. For example: int *p = NULL; size_t used = 0; size_t allocated = 0; size_t allocated1 = 1000; void append_int (int value) { if (used == allocated) { p = x2nrealloc (p, &allocated1, sizeof *p); allocated = allocated1; } p[used++] = value; } */ XALLOC_INLINE void * x2nrealloc (void *p, size_t *pn, size_t s) { size_t n = *pn; if (! p) { if (! n) { /* The approximate size to use for initial small allocation requests, when the invoking code specifies an old size of zero. This is the largest "small" request for the GNU C library malloc. */ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; n = DEFAULT_MXFAST / s; n += !n; } if (xalloc_oversized (n, s)) xalloc_die (); } else { /* Set N = floor (1.5 * N) + 1 so that progress is made even if N == 0. Check for overflow, so that N * S stays in both ptrdiff_t and size_t range. The check may be slightly conservative, but an exact check isn't worth the trouble. */ if ((PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX) / 3 * 2 / s <= n) xalloc_die (); n += n / 2 + 1; } *pn = n; return xrealloc (p, n * s); } /* Return a pointer to a new buffer of N bytes. This is like xmalloc, except it returns char *. */ XALLOC_INLINE char *xcharalloc (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); XALLOC_INLINE char * xcharalloc (size_t n) { return XNMALLOC (n, char); } #ifdef __cplusplus } /* C++ does not allow conversions from void * to other pointer types without a cast. Use templates to work around the problem when possible. */ template inline T * xrealloc (T *p, size_t s) { return (T *) xrealloc ((void *) p, s); } template inline T * xnrealloc (T *p, size_t n, size_t s) { return (T *) xnrealloc ((void *) p, n, s); } template inline T * x2realloc (T *p, size_t *pn) { return (T *) x2realloc ((void *) p, pn); } template inline T * x2nrealloc (T *p, size_t *pn, size_t s) { return (T *) x2nrealloc ((void *) p, pn, s); } template inline T * xmemdup (T const *p, size_t s) { return (T *) xmemdup ((void const *) p, s); } #endif _GL_INLINE_HEADER_END #endif /* !XALLOC_H_ */ ttfautohint-1.8.1/gnulib/src/xalloc-oversized.h0000644000175000001440000000442513222450624021452 0ustar00wlusers00000000000000/* xalloc-oversized.h -- memory allocation size checking Copyright (C) 1990-2000, 2003-2004, 2006-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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef XALLOC_OVERSIZED_H_ #define XALLOC_OVERSIZED_H_ #include #include /* True if N * S would overflow in a size_t calculation, or would generate a value larger than PTRDIFF_MAX. This expands to a constant expression if N and S are both constants. By gnulib convention, SIZE_MAX represents overflow in size calculations, so the conservative size_t-based dividend to use here is SIZE_MAX - 1. */ #define __xalloc_oversized(n, s) \ ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) < (n)) #if PTRDIFF_MAX < SIZE_MAX typedef ptrdiff_t __xalloc_count_type; #else typedef size_t __xalloc_count_type; #endif /* Return 1 if an array of N objects, each of size S, cannot exist reliably due to size or ptrdiff_t arithmetic overflow. S must be positive and N must be nonnegative. This is a macro, not a function, so that it works correctly even when SIZE_MAX < N. */ #if 7 <= __GNUC__ # define xalloc_oversized(n, s) \ __builtin_mul_overflow_p (n, s, (__xalloc_count_type) 1) #elif 5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__ # define xalloc_oversized(n, s) \ (__builtin_constant_p (n) && __builtin_constant_p (s) \ ? __xalloc_oversized (n, s) \ : ({ __xalloc_count_type __xalloc_count; \ __builtin_mul_overflow (n, s, &__xalloc_count); })) /* Other compilers use integer division; this may be slower but is more portable. */ #else # define xalloc_oversized(n, s) __xalloc_oversized (n, s) #endif #endif /* !XALLOC_OVERSIZED_H_ */ ttfautohint-1.8.1/gnulib/depcomp0000755000175000001440000005602013222247025016572 0ustar00wlusers00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2017-09-16.17; # 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: ttfautohint-1.8.1/gnulib/git-version-gen0000755000175000001440000001760513222450622020165 0ustar00wlusers00000000000000#!/bin/sh # Print a version string. scriptversion=2017-09-13.06; # UTC # Copyright (C) 2007-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 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 . # This script is derived from GIT-VERSION-GEN from GIT: https://git-scm.com/. # It may be run two ways: # - from a git repository in which the "git describe" command below # produces useful output (thus requiring at least one signed tag) # - from a non-git-repo directory containing a .tarball-version file, which # presumes this script is invoked like "./git-version-gen .tarball-version". # In order to use intra-version strings in your project, you will need two # separate generated version string files: # # .tarball-version - present only in a distribution tarball, and not in # a checked-out repository. Created with contents that were learned at # the last time autoconf was run, and used by git-version-gen. Must not # be present in either $(srcdir) or $(builddir) for git-version-gen to # give accurate answers during normal development with a checked out tree, # but must be present in a tarball when there is no version control system. # Therefore, it cannot be used in any dependencies. GNUmakefile has # hooks to force a reconfigure at distribution time to get the value # correct, without penalizing normal development with extra reconfigures. # # .version - present in a checked-out repository and in a distribution # tarball. Usable in dependencies, particularly for files that don't # want to depend on config.h but do want to track version changes. # Delete this file prior to any autoconf run where you want to rebuild # files to pick up a version string change; and leave it stale to # minimize rebuild time after unrelated changes to configure sources. # # As with any generated file in a VC'd directory, you should add # /.version to .gitignore, so that you don't accidentally commit it. # .tarball-version is never generated in a VC'd directory, so needn't # be listed there. # # Use the following line in your configure.ac, so that $(VERSION) will # automatically be up-to-date each time configure is run (and note that # since configure.ac no longer includes a version string, Makefile rules # should not depend on configure.ac for version updates). # # AC_INIT([GNU project], # m4_esyscmd([build-aux/git-version-gen .tarball-version]), # [bug-project@example]) # # Then use the following lines in your Makefile.am, so that .version # will be present for dependencies, and so that .version and # .tarball-version will exist in distribution tarballs. # # EXTRA_DIST = $(top_srcdir)/.version # BUILT_SOURCES = $(top_srcdir)/.version # $(top_srcdir)/.version: # echo $(VERSION) > $@-t && mv $@-t $@ # dist-hook: # echo $(VERSION) > $(distdir)/.tarball-version me=$0 version="git-version-gen $scriptversion Copyright 2011 Free Software Foundation, Inc. There is NO warranty. You may redistribute this software under the terms of the GNU General Public License. For more information about these matters, see the files named COPYING." usage="\ Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT] Print a version string. Options: --prefix PREFIX prefix of git tags (default 'v') --fallback VERSION fallback version to use if \"git --version\" fails --help display this help and exit --version output version information and exit Running without arguments will suffice in most cases." prefix=v fallback= while test $# -gt 0; do case $1 in --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; --prefix) shift; prefix=${1?};; --fallback) shift; fallback=${1?};; -*) echo "$0: Unknown option '$1'." >&2 echo "$0: Try '--help' for more information." >&2 exit 1;; *) if test "x$tarball_version_file" = x; then tarball_version_file="$1" elif test "x$tag_sed_script" = x; then tag_sed_script="$1" else echo "$0: extra non-option argument '$1'." >&2 exit 1 fi;; esac shift done if test "x$tarball_version_file" = x; then echo "$usage" exit 1 fi tag_sed_script="${tag_sed_script:-s/x/x/}" nl=' ' # Avoid meddling by environment variable of the same name. v= v_from_git= # First see if there is a tarball-only version file. # then try "git describe", then default. if test -f $tarball_version_file then v=`cat $tarball_version_file` || v= case $v in *$nl*) v= ;; # reject multi-line output [0-9]*) ;; *) v= ;; esac test "x$v" = x \ && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2 fi if test "x$v" != x then : # use $v # Otherwise, if there is at least one git commit involving the working # directory, and "git describe" output looks sensible, use that to # derive a version string. elif test "`git log -1 --pretty=format:x . 2>&1`" = x \ && v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \ || git describe --abbrev=4 HEAD 2>/dev/null` \ && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \ && case $v in $prefix[0-9]*) ;; *) (exit 1) ;; esac then # Is this a new git that lists number of commits since the last # tag or the previous older version that did not? # Newer: v6.10-77-g0f8faeb # Older: v6.10-g0f8faeb vprefix=`expr "X$v" : 'X\(.*\)-g[^-]*$'` || vprefix=$v case $vprefix in *-*) : git describe is probably okay three part flavor ;; *) : git describe is older two part flavor # Recreate the number of commits and rewrite such that the # result is the same as if we were using the newer version # of git describe. vtag=`echo "$v" | sed 's/-.*//'` commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \ || { commit_list=failed; echo "$0: WARNING: git rev-list failed" 1>&2; } numcommits=`echo "$commit_list" | wc -l` v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`; test "$commit_list" = failed && v=UNKNOWN ;; esac # Change the penultimate "-" to ".", for version-comparing tools. # Remove the "g" to save a byte. v=`echo "$v" | sed 's/-\([^-]*\)-g\([^-]*\)$/.\1-\2/'`; v_from_git=1 elif test "x$fallback" = x || git --version >/dev/null 2>&1; then v=UNKNOWN else v=$fallback fi v=`echo "$v" |sed "s/^$prefix//"` # Test whether to append the "-dirty" suffix only if the version # string we're using came from git. I.e., skip the test if it's "UNKNOWN" # or if it came from .tarball-version. if test "x$v_from_git" != x; then # Don't declare a version "dirty" merely because a timestamp has changed. git update-index --refresh > /dev/null 2>&1 dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty= case "$dirty" in '') ;; *) # Append the suffix only if there isn't one already. case $v in *-dirty) ;; *) v="$v-dirty" ;; esac ;; esac fi # Omit the trailing newline, so that m4_esyscmd can use the result directly. printf %s "$v" # 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: "UTC0" # time-stamp-end: "; # UTC" # End: ttfautohint-1.8.1/m4/0000755000175000001440000000000013222454025014252 5ustar00wlusers00000000000000ttfautohint-1.8.1/m4/autotroll.m40000644000175000001440000006043613222447066016561 0ustar00wlusers00000000000000# Build Qt apps with the autotools (Autoconf/Automake). # M4 macros. # # This file is part of AutoTroll. # # Copyright (C) 2006 Benoit Sigoure # modified 2012-2017 by Werner Lemberg # # AutoTroll is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # # In addition, as a special exception, the copyright holders of # AutoTroll give you unlimited permission to copy, distribute and # modify the configure scripts that are the output of Autoconf when # processing the macros of AutoTroll. You need not follow the terms # of the GNU General Public License when using or distributing such # scripts, even though portions of the text of AutoTroll appear in # them. The GNU General Public License (GPL) does govern all other # use of the material that constitutes AutoTroll. # # This special exception to the GPL applies to versions of AutoTroll # released by the copyright holders of AutoTroll. Note that people # who make modified versions of AutoTroll are not obligated to grant # this special exception for their modified versions; it is their # choice whether to do so. The GNU General Public License gives # permission to release a modified version without this exception; # this exception also makes it possible to release a modified version # which carries forward this exception. # ------------- # # DOCUMENTATION # # ------------- # # Disclaimer: Tested with Qt 4.2 and 4.8 only. Feedback welcome. # Simply invoke AT_WITH_QT in your configure.ac. AT_WITH_QT can take # arguments which are documented in depth below. The default # arguments are equivalent to the default .pro file generated by # qmake. # # Invoking AT_WITH_QT will do the following: # # - Add option `--with-qt[=ARG]' to your configure script. Possible # values for ARG are `yes' (which is the default) and `no' to # enable and disable Qt support, respectively, or a path to the # directory which contains the Qt binaries in case you have a # non-stardard location. # - Add option `--without-qt', which is equivalent to `--with-qt=no'. # - If Qt support is enabled, define C preprocessor macro HAVE_QT. # - Find the programs `qmake', `moc', `uic', and `rcc' and save them # in the make variables $(QMAKE), $(MOC), $(UIC), and $(RCC). # - Save the path to Qt binaries in $(QT_PATH). # - Find the flags necessary to compile and link Qt, that is: # * $(QT_DEFINES): -D's defined by qmake. # * $(QT_CFLAGS): CFLAGS as defined by qmake (C?!) # * $(QT_CXXFLAGS): CXXFLAGS as defined by qmake. # * $(QT_INCPATH): -I's defined by qmake. # * $(QT_CPPFLAGS): Same as $(QT_DEFINES) + $(QT_INCPATH). # * $(QT_LFLAGS): LFLAGS defined by qmake. # * $(QT_LDFLAGS): Same thing as $(QT_LFLAGS). # * $(QT_LIBS): LIBS defined by qmake. # - Provide @QT_STATIC_PLUGINS@, which holds some additional C++ # declarations necessary for linking with static Qt plugins (for # dynamic Qt builds it contains a dummy typedef declaration # instead). Use this substitution in a `foo.cpp.in' C++ template # file or something similar, which must be registered in # configure.ac's call to AC_CONFIG_FILES so that a proper `foo.cpp' # file gets created. Then compile and link `foo.cpp' with your # program in the usual automake way. NOTE: It is not possible to # automatically detect whether a Qt release earlier than version 5 # is built as a static library! For this reason, # @QT_STATIC_PLUGINS@ always contains the dummy typedef declaration # if not using Qt5. # # You *MUST* invoke $(MOC) and/or $(UIC) by yourself where necessary. # AutoTroll provides you with Makerules to ease this; here is a sample # Makefile.am to use with AutoTroll which builds the code given in # chapter 7 of the Qt Tutorial # (http://doc.trolltech.com/4.2/tutorial-t7.html). # # ------------------------------------------------------------------------- # include $(top_srcdir)/build-aux/autotroll.mk # # ACLOCAL_AMFLAGS = -I build-aux # # bin_PROGRAMS = lcdrange # lcdrange_SOURCES = $(BUILT_SOURCES) lcdrange.cpp lcdrange.h main.cpp # lcdrange_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS) # lcdrange_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) # lcdrange_LDFLAGS = $(QT_LDFLAGS) $(LDFLAGS) # lcdrange_LDADD = $(QT_LIBS) $(LDADD) # # BUILT_SOURCES = lcdrange.moc.cpp # ------------------------------------------------------------------------- # # Note that your MOC, UIC, and RCC files *MUST* be listed explicitly # in BUILT_SOURCES. If you name them properly (e.g. `.moc.cc', # `.qrc.cc', `.ui.cc' -- of course you can use `.cpp' or `.cxx' or # `.C' rather than `.cc') AutoTroll will build them automagically for # you, using implicit rules defined in `autotroll.mk'. m4_define([_AUTOTROLL_SERIAL], [m4_translit([ # serial 13 ], [# ], [])]) m4_ifdef([AX_INSTEAD_IF], [], [AC_DEFUN([AX_INSTEAD_IF], [m4_ifval([$1], [AC_MSG_WARN([$2]) [$1]], [AC_MSG_ERROR([$2])])])]) # AX_PATH_TOOLS(VARIABLE, PROGS-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND], [PATH]) # ------------------------------------------------------------------------- AC_DEFUN([AX_PATH_TOOLS], [for ax_tool in $2; do AC_PATH_TOOL([$1], [$ax_tool], [], [$4]) test -n "$$1" && break done m4_ifval([$3], [test -n "$$1" || $1="$3"]) ]) m4_pattern_forbid([^AT_]) m4_pattern_forbid([^_AT_]) # AT_WITH_QT([QT_modules], [QT_config], [QT_misc], [RUN-IF-FAILED], [RUN-IF-OK]) # ------------------------------------------------------------------------------ # Enable Qt support and add an option --with-qt to the configure # script. # # The QT_modules argument is optional and defines extra modules to # enable or disable (it's equivalent to the QT variable in .pro # files). Modules can be specified as follows: # # AT_WITH_QT => No argument -> No QT value. # Qmake sets it to "core gui" by # default. # AT_WITH_QT([xml]) => QT += xml # AT_WITH_QT([+xml]) => QT += xml # AT_WITH_QT([-gui]) => QT -= gui # AT_WITH_QT([xml -gui +sql svg]) => QT += xml sql svg # QT -= gui # # The QT_config argument is also optional and follows the same # convention as QT_modules. Instead of changing the QT variable, it # changes the CONFIG variable, which is used to tweak configuration # and compiler options. # # The last argument, QT_misc (also optional) will be copied as-is the # .pro file used to guess how to compile Qt apps. You may use it to # further tweak the build process of Qt apps if tweaking the QT or # CONFIG variables isn't enough for you (for example, to control # which static plugins get used). # # RUN-IF-FAILED is arbitrary code to execute if Qt cannot be found or # if any problem happens. If this argument is omitted, then # AC_MSG_ERROR will be called. RUN-IF-OK is arbitrary code to execute # if Qt was successfully found. AC_DEFUN([AT_WITH_QT], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_CANONICAL_BUILD]) AC_REQUIRE([AC_PROG_CXX]) echo "$as_me: this is autotroll.m4[]_AUTOTROLL_SERIAL" \ >& AS_MESSAGE_LOG_FD # This is a hack to get decent flow control with `break'. for _qt_ignored in once; do AC_ARG_WITH([qt], AS_HELP_STRING([--with-qt@<:@=ARG@:>@], [Qt support. ARG can be `yes' (the default), `no', or a path to Qt binaries; if `yes' or empty, use PATH and some default directories to find Qt binaries])) if test x"$with_qt" = x"no"; then break else AC_DEFINE([HAVE_QT],[1], [Define if the Qt framework is available.]) fi if test x"$with_qt" = x"yes"; then QT_PATH= else QT_PATH=$with_qt fi # Find Qt. AC_ARG_VAR([QT_PATH], [path to Qt binaries]) # Find qmake. AC_ARG_VAR([QMAKE], [Qt Makefile generator command]) AX_PATH_TOOLS([QMAKE], [qmake qmake-qt5 qmake-qt4 qmake-qt3], [missing], [$QT_PATH:$PATH]) if test x"$QMAKE" = xmissing; then AX_INSTEAD_IF([$4], [Cannot find qmake. Try --with-qt=PATH.]) break fi # Find moc (Meta Object Compiler). AC_ARG_VAR([MOC], [Qt Meta Object Compiler command]) AX_PATH_TOOLS([MOC], [moc moc-qt5 moc-qt4 moc-qt3], [missing], [$QT_PATH:$PATH]) if test x"$MOC" = xmissing; then AX_INSTEAD_IF([$4], [Cannot find moc (Meta Object Compiler). Try --with-qt=PATH.]) break fi # Find uic (User Interface Compiler). AC_ARG_VAR([UIC], [Qt User Interface Compiler command]) AX_PATH_TOOLS([UIC], [uic uic-qt5 uic-qt4 uic-qt3 uic3], [missing], [$QT_PATH:$PATH]) if test x"$UIC" = xmissing; then AX_INSTEAD_IF([$4], [Cannot find uic (User Interface Compiler). Try --with-qt=PATH.]) break fi # Find rcc (Qt Resource Compiler). AC_ARG_VAR([RCC], [Qt Resource Compiler command]) AX_PATH_TOOLS([RCC], [rcc rcc-qt5], [missing], [$QT_PATH:$PATH]) if test x"$RCC" = xmissing; then AC_MSG_WARN( [Cannot find rcc (Qt Resource Compiler). Try --with-qt=PATH.]) fi AC_MSG_CHECKING([whether host operating system is Darwin]) at_darwin=no at_qmake_args= case $host_os in dnl ( darwin*) at_darwin=yes at_qmake_args='-spec macx-g++' ;; esac AC_MSG_RESULT([$at_darwin]) # If we don't know the path to Qt, guess it from the path to # qmake. if test x"$QT_PATH" = x; then QT_PATH=`dirname "$QMAKE"` fi if test x"$QT_PATH" = x; then AX_INSTEAD_IF([$4], [Cannot find your Qt installation. Try --with-qt=PATH.]) break fi AC_SUBST([QT_PATH]) # Get ready to build a test-app with Qt. if mkdir conftest.dir \ && cd conftest.dir; then : else AX_INSTEAD_IF([$4], [Cannot mkdir conftest.dir or cd to that directory.]) break fi cat >conftest.h <<_ASEOF #include class Foo: public QObject { Q_OBJECT; public: Foo(); ~Foo() {} public Q_SLOTS: void setValue(int value); Q_SIGNALS: void valueChanged(int newValue); private: int value_; }; _ASEOF cat >conftest.cpp <<_ASEOF #include "conftest.h" Foo::Foo() : value_ (42) { connect(this, SIGNAL(valueChanged(int)), this, SLOT(setValue(int))); } void Foo::setValue(int value) { value_ = value; } int main() { Foo f; } _ASEOF if $QMAKE -project; then : else AX_INSTEAD_IF([$4], [Calling $QMAKE -project failed.]) break fi # Find the .pro file generated by qmake. pro_file=conftest.dir.pro test -f $pro_file || pro_file=`echo *.pro` if test -f "$pro_file"; then : else AX_INSTEAD_IF([$4], [Can't find the .pro file generated by Qmake.]) break fi dnl This is for Qt5; for Qt4 it does nothing special. _AT_TWEAK_PRO_FILE([QT], [+widgets]) dnl Tweak the value of QT in the .pro file if we have a first dnl argument. m4_ifval([$1], [_AT_TWEAK_PRO_FILE([QT], [$1])]) dnl Tweak the value of CONFIG in the .pro file if we have a dnl second argument. m4_ifval([$2], [_AT_TWEAK_PRO_FILE([CONFIG], [$2])]) m4_ifval([$3], [ # Add the extra-settings the user wants to set in the .pro # file. echo "$3" >>"$pro_file" ]) echo "$as_me:$LINENO: Invoking $QMAKE on $pro_file" \ >& AS_MESSAGE_LOG_FD sed 's/^/| /' "$pro_file" >& AS_MESSAGE_LOG_FD if $QMAKE $at_qmake_args; then : else AX_INSTEAD_IF([$4], [Calling $QMAKE $at_qmake_args failed.]) break fi # QMake has a very annoying misfeature: Sometimes it generates # Makefiles where all the references to the files from the Qt # installation are relative. We can't use them as-is because if # we take, say, a -I../../usr/include/Qt from that Makefile, the # flag is invalid as soon as we use it in another (sub) # directory. So what this perl pass does is that it rewrites all # relative paths to absolute paths. Another problem when # building on Cygwin is that QMake mixes paths with backslashes # and forward slashes and paths must be handled with extra care # because of the stupid Windows drive letters. echo "$as_me:$LINENO: fixing the Makefiles:" Makefile* \ >& AS_MESSAGE_LOG_FD cat >fixmk.pl <<\EOF [ use strict; use Cwd qw(cwd abs_path); # This variable is useful on Cygwin for the following reason: Say # that you are in `/' (that is, in fact you are in C:/cygwin, or # something like that). If you `cd ..' then obviously you remain in # `/' (that is in C:/cygwin). QMake generates paths that are # relative to C:/ (or another drive letter, whatever) so the trick to # get the `..' resolved properly is to prepend the absolute path of # the current working directory in a Windows-style. C:/cygwin/../ # will properly become C:/. my $d = ""; my $r2a = 0; my $b2f = 0; my $cygwin = 0; if ($^O eq "cygwin") { $cygwin = 1; $d = cwd(); $d = `cygpath --mixed '$d'`; chomp($d); $d .= "/"; } sub rel2abs($) { my $p = $d . shift; # print "r2a p=$p"; -e $p || return $p; if ($cygwin) { $p = `cygpath --mixed '$p'`; chomp($p); } else { # Do not use abs_path on Cygwin: it incorrectly resolves the paths # that are relative to C:/ rather than `/'. $p = abs_path($p); } # print " -> $p\n"; ++$r2a; return $p; } # Only useful on Cygwin. sub back2forward($) { my $p = shift; # print "b2f p=$p"; -e $p || return $p; $p = `cygpath --mixed '$p'`; chomp($p); # print " -> $p\n"; ++$b2f; return $p; } foreach my $mk (@ARGV) { next if $mk =~ /~$/; open(MK, $mk) or die("open $mk: $!"); # print "mk=$mk\n"; my $file = join("", ); close(MK) or die("close $mk: $!"); rename $mk, $mk . "~" or die("rename $mk: $!"); $file =~ s{(?:\.\.[\\/])+(?:[^"'\s:]+)}{rel2abs($&)}gse; $file =~ s{(?:[a-zA-Z]:[\\/])?(?:[^"\s]+\\[^"\s:]+)+} {back2forward($&)}gse if $cygwin; open(MK, ">", $mk) or die("open >$mk: $!"); print MK $file; close(MK) or die("close >$mk: $!"); print "$mk: updated $r2a relative paths and $b2f backslash-style paths\n"; $r2a = 0; $b2f = 0; } ] EOF perl >& AS_MESSAGE_LOG_FD -w fixmk.pl Makefile* \ || AC_MSG_WARN([failed to fix the Makefiles generated by $QMAKE]) rm -f fixmk.pl # Try to compile a simple Qt app. AC_CACHE_CHECK([whether we can build a simple Qt application], [at_cv_qt_build], [at_cv_qt_build=ko : ${MAKE=make} if $MAKE >& AS_MESSAGE_LOG_FD 2>&1; then at_cv_qt_build='ok, looks like Qt 4 or Qt 5' else echo "$as_me:$LINENO: Build failed, trying to #include instead" \ >& AS_MESSAGE_LOG_FD sed 's///' conftest.h > tmp.h \ && mv tmp.h conftest.h if $MAKE >& AS_MESSAGE_LOG_FD 2>&1; then at_cv_qt_build='ok, looks like Qt 3' else # Sometimes (such as on Debian) build will fail because Qt # hasn't been installed in debug mode and qmake tries (by # default) to build apps in debug mode => Try again in # release mode. echo "$as_me:$LINENO: Build failed, trying to enforce release mode" \ >& AS_MESSAGE_LOG_FD _AT_TWEAK_PRO_FILE([CONFIG], [+release]) sed 's///' conftest.h > tmp.h \ && mv tmp.h conftest.h if $MAKE >& AS_MESSAGE_LOG_FD 2>&1; then at_cv_qt_build='ok, looks like Qt 4 or Qt 5, release mode forced' else echo "$as_me:$LINENO: Build failed, trying to #include instead" \ >& AS_MESSAGE_LOG_FD sed 's///' conftest.h > tmp.h \ && mv tmp.h conftest.h if $MAKE >& AS_MESSAGE_LOG_FD 2>&1; then at_cv_qt_build='ok, looks like Qt 3, release mode forced' else at_cv_qt_build=ko echo "$as_me:$LINENO: failed program was:" \ >& AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.h >& AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: failed program was:" \ >& AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.cpp >& AS_MESSAGE_LOG_FD fi # if make with Qt3-style #include and release mode forced. fi # if make with Qt4/5-style #include and release mode forced. fi # if make with Qt3-style #include. fi # if make with Qt4/5-style #include. ])dnl end: AC_CACHE_CHECK(at_cv_qt_build) if test x"$at_cv_qt_build" = xko; then AX_INSTEAD_IF([$4], [Cannot build a test Qt program]) cd .. break fi QT_VERSION_MAJOR=`echo "$at_cv_qt_build" | sed 's/[[^0-9]]*//g'` AC_SUBST([QT_VERSION_MAJOR]) # This sed filter is applied after an expression of the form # /^FOO.*=/!d; it starts by removing the beginning of the line, # removing references to SUBLIBS, removing unnecessary # whitespaces at the beginning, and prefixes all variable uses by # QT_. qt_sed_filter='s///; s/$(SUBLIBS)//g; s/^ *//; s/\$(\(@<:@A-Z_@:>@@<:@A-Z_@:>@*\))/$(QT_\1)/g' # Find the Makefile (qmake happens to generate a fake Makefile # which invokes a Makefile.Debug or Makefile.Release). If we # have both, we'll pick the Makefile.Release. The reason is that # this release uses -Os and debug -g. We can override -Os by # passing another -O but we usually don't override -g. if test -f Makefile.Release; then at_mfile='Makefile.Release' else at_mfile='Makefile' fi if test -f $at_mfile; then : else AX_INSTEAD_IF([$4], [Cannot find the Makefile generated by qmake.]) cd .. break fi # Find the DEFINES of Qt (should have been named CPPFLAGS). AC_CACHE_CHECK([for the DEFINES to use with Qt], [at_cv_env_QT_DEFINES], [at_cv_env_QT_DEFINES=`sed "/^DEFINES@<:@^A-Z=@:>@*=/!d; $qt_sed_filter" $at_mfile`]) AC_SUBST([QT_DEFINES], [$at_cv_env_QT_DEFINES]) # Find the CFLAGS of Qt. (We can use Qt in C?!) AC_CACHE_CHECK([for the CFLAGS to use with Qt], [at_cv_env_QT_CFLAGS], [at_cv_env_QT_CFLAGS=`sed "/^CFLAGS@<:@^A-Z=@:>@*=/!d; $qt_sed_filter" $at_mfile`]) AC_SUBST([QT_CFLAGS], [$at_cv_env_QT_CFLAGS]) # Find the CXXFLAGS of Qt. AC_CACHE_CHECK([for the CXXFLAGS to use with Qt], [at_cv_env_QT_CXXFLAGS], [at_cv_env_QT_CXXFLAGS=`sed "/^CXXFLAGS@<:@^A-Z=@:>@*=/!d; $qt_sed_filter" $at_mfile`]) AC_SUBST([QT_CXXFLAGS], [$at_cv_env_QT_CXXFLAGS]) # Find the INCPATH of Qt. AC_CACHE_CHECK([for the INCPATH to use with Qt], [at_cv_env_QT_INCPATH], [at_cv_env_QT_INCPATH=`sed "/^INCPATH@<:@^A-Z=@:>@*=/!d; $qt_sed_filter" $at_mfile`]) AC_SUBST([QT_INCPATH], [$at_cv_env_QT_INCPATH]) AC_SUBST([QT_CPPFLAGS], ["$at_cv_env_QT_DEFINES $at_cv_env_QT_INCPATH"]) # Find the LFLAGS of Qt (should have been named LDFLAGS). AC_CACHE_CHECK([for the LDFLAGS to use with Qt], [at_cv_env_QT_LDFLAGS], [at_cv_env_QT_LDFLAGS=`sed "/^LFLAGS@<:@^A-Z=@:>@*=/!d; $qt_sed_filter" $at_mfile`]) AC_SUBST([QT_LFLAGS], [$at_cv_env_QT_LDFLAGS]) AC_SUBST([QT_LDFLAGS], [$at_cv_env_QT_LDFLAGS]) # Find the LIBS of Qt. AC_CACHE_CHECK([for the LIBS to use with Qt], [at_cv_env_QT_LIBS], [at_cv_env_QT_LIBS=`sed "/^LIBS@<:@^A-Z@:>@*=/!d; $qt_sed_filter" $at_mfile` if test x$at_darwin = xyes; then # Fix QT_LIBS: as of today Libtool (GNU Libtool 1.5.23a) # doesn't handle -F properly. The "bug" has been fixed on 22 # October 2006 by Peter O'Gorman but we provide backward # compatibility here. at_cv_env_QT_LIBS=`echo "$at_cv_env_QT_LIBS" \ | sed 's/^-F/-Wl,-F/; s/ -F/ -Wl,-F/g'` fi]) AC_SUBST([QT_LIBS], [$at_cv_env_QT_LIBS]) # We can't use AC_CACHE_CHECK for data that contains newlines. AC_MSG_CHECKING([for necessary static plugin code]) # find static plugin data generated by qmake if test -f conftest.dir_plugin_import.cpp; then QT_STATIC_PLUGINS=`cat conftest.dir_plugin_import.cpp` else QT_STATIC_PLUGINS="\ // We have Qt earlier than version 5 or a dynamic build. // Provide dummy typedef to avoid empty source code. typedef int _qt_not_a_static_build;" fi AC_SUBST([QT_STATIC_PLUGINS]) AM_SUBST_NOTMAKE([QT_STATIC_PLUGINS]) AC_MSG_RESULT([$QT_STATIC_PLUGINS]) cd .. && rm -rf conftest.dir # Run the user code $5 done # end hack (useless FOR to be able to use break) ]) # AT_REQUIRE_QT_VERSION(QT_version, [RUN-IF-FAILED], [RUN-IF-OK]) # --------------------------------------------------------------- # Check (using qmake) that Qt's version "matches" QT_version. Must be # run *AFTER* AT_WITH_QT. Requires autoconf 2.60. # # This macro is ignored if Qt support has been disabled (using # `--with-qt=no' or `--without-qt'). # # RUN-IF-FAILED is arbitrary code to execute if Qt cannot be found or # if any problem happens. If this argument is omitted, then # AC_MSG_ERROR will be called. RUN-IF-OK is arbitrary code to execute # if Qt was successfully found. # # This macro provides the Qt version in $(QT_VERSION). AC_DEFUN([AT_REQUIRE_QT_VERSION], [AC_PREREQ([2.60]) # This is a hack to get decent flow control with `break'. for _qt_ignored in once; do if test x"$with_qt" = x"no"; then break fi if test x"$QMAKE" = x; then AX_INSTEAD_IF([$2], [\$QMAKE is empty. Did you invoke AT@&t@_WITH_QT before AT@&t@_REQUIRE_QT_VERSION?]) break fi AC_CACHE_CHECK([for Qt's version], [at_cv_QT_VERSION], [echo "$as_me:$LINENO: Running $QMAKE --version:" \ >& AS_MESSAGE_LOG_FD $QMAKE --version >& AS_MESSAGE_LOG_FD 2>&1 qmake_version_sed=['/^.*\([0-9]\+\.[0-9]\+\.[0-9]\+\).*$/!d;s//\1/'] at_cv_QT_VERSION=`$QMAKE --version 2>&1 \ | sed "$qmake_version_sed"`]) if test x"$at_cv_QT_VERSION" = x; then AX_INSTEAD_IF([$2], [Cannot detect Qt's version.]) break fi AC_SUBST([QT_VERSION], [$at_cv_QT_VERSION]) AS_VERSION_COMPARE([$QT_VERSION], [$1], [AX_INSTEAD_IF([$2], [This package requires Qt $1 or above.]) break]) # Run the user code $3 done # end hack (useless FOR to be able to use break) ]) # _AT_TWEAK_PRO_FILE(QT_VAR, VALUE) # --------------------------------- # @internal. Tweak the variable QT_VAR in the .pro file. VALUE is an # IFS-separated list of values, and each value is rewritten as # follows: # # +value => QT_VAR += value # -value => QT_VAR -= value # value => QT_VAR += value AC_DEFUN([_AT_TWEAK_PRO_FILE], [ # Tweak the value of $1 in the .pro file for $2. qt_conf='' for at_mod in $2; do at_mod=`echo "$at_mod" | sed 's/^-//; tough s/^+//; beef :ough s/^/$1 -= /;n :eef s/^/$1 += /'` qt_conf="\ $qt_conf $at_mod" done echo "$qt_conf" | sed 1d >>"$pro_file" ]) ttfautohint-1.8.1/m4/ltlize_lang.m40000644000175000001440000000223212643432074017025 0ustar00wlusers00000000000000# Copyright 2011 Nicolai Stange # # This program is free software: you can 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 . AC_DEFUN([LT_LTLIZE_LANG], [AC_REQUIRE([LT_OUTPUT])] [AC_LANG_DEFINE([LTLIZED $1], [lt_[]_AC_LANG_DISPATCH([_AC_LANG_ABBREV], [$1])], [LT_[]_AC_LANG_DISPATCH([_AC_LANG_PREFIX], [$1])], [_AC_LANG_DISPATCH([_AC_CC], [$1])], [$1], [_AC_LANG_DISPATCH([AC_LANG], [$1])])] [m4_append([AC_LANG(LTLIZED $1)], [ac_link="$ac_compile; ./libtool --mode=link `echo $ac_link | sed 's/\$ac_ext/\$ac_objext/'`"])] [m4_ifdef([AC_LANG_COMPILER($1)], [m4_copy([AC_LANG_COMPILER($1)], [AC_LANG_COMPILER(LTLIZED $1)])])] )dnl ttfautohint-1.8.1/m4/pkg.m40000644000175000001440000001623112643432074015306 0ustar00wlusers00000000000000# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception 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. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- 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 ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # 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]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- 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 ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- 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 ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # 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 ])# PKG_CHECK_MODULES # PKG_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable pkgconfigdir as the location where a module # should install pkg-config .pc files. By default the directory is # $libdir/pkgconfig, but the default can be changed by passing # DIRECTORY. The user can override through the --with-pkgconfigdir # 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 # PKG_NOARCH_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable noarch_pkgconfigdir as the location where a # module should install arch-independent pkg-config .pc files. By # default the directory is $datadir/pkgconfig, but the default can be # changed by passing DIRECTORY. The user can override through the # --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 ttfautohint-1.8.1/Makefile.am0000644000175000001440000000110512643432074015771 0ustar00wlusers00000000000000## Makefile.am # due to a limitation of `autoreconf', # all -I directives currently must be set on a single line ACLOCAL_AMFLAGS = -I gnulib/m4 -I m4 SUBDIRS = gnulib/src \ lib \ frontend \ doc EXTRA_DIST = bootstrap \ bootstrap.conf \ FTL.TXT \ gnulib/m4/gnulib-cache.m4 \ GPLv2.TXT \ README \ TODO \ .version BUILT_SOURCES = .version .version: echo $(VERSION) > $@-t && mv $@-t $@ dist-hook: echo $(VERSION) > $(distdir)/VERSION ## end of Makefile.am ttfautohint-1.8.1/configure0000755000175000001440000367567513222450645015702 0ustar00wlusers00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for ttfautohint 1.8.1. # # 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 \$(( 1 + 1 )) = 2 || 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" 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: freetype-devel@nongnu.org about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" as_awk_strverscmp=' # Use only awk features that work with 7th edition Unix awk (1978). # My, what an old awk you have, Mr. Solaris! END { while (length(v1) && length(v2)) { # Set d1 to be the next thing to compare from v1, and likewise for d2. # Normally this is a single character, but if v1 and v2 contain digits, # compare them as integers and fractions as strverscmp does. if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) { # Split v1 and v2 into their leading digit string components d1 and d2, # and advance v1 and v2 past the leading digit strings. for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1) d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1) if (d1 ~ /^0/) { if (d2 ~ /^0/) { # Compare two fractions. while (d1 ~ /^0/ && d2 ~ /^0/) { d1 = substr(d1, 2); len1-- d2 = substr(d2, 2); len2-- } if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) { # The two components differ in length, and the common prefix # contains only leading zeros. Consider the longer to be less. d1 = -len1 d2 = -len2 } else { # Otherwise, compare as strings. d1 = "x" d1 d2 = "x" d2 } } else { # A fraction is less than an integer. exit 1 } } else { if (d2 ~ /^0/) { # An integer is greater than a fraction. exit 2 } else { # Compare two integers. d1 += 0 d2 += 0 } } } else { # The normal case, without worrying about digits. d1 = substr(v1, 1, 1); v1 = substr(v1, 2) d2 = substr(v2, 1, 1); v2 = substr(v2, 2) } if (d1 < d2) exit 1 if (d1 > d2) exit 2 } # Beware Solaris /usr/xgp4/bin/awk (at least through Solaris 10), # which mishandles some comparisons of empty strings to integers. if (length(v2)) exit 1 if (length(v1)) exit 2 } ' 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='ttfautohint' PACKAGE_TARNAME='ttfautohint' PACKAGE_VERSION='1.8.1' PACKAGE_STRING='ttfautohint 1.8.1' PACKAGE_BUGREPORT='freetype-devel@nongnu.org' PACKAGE_URL='' ac_unique_file="lib/ttfautohint.pc.in" # 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" gl_use_threads_default= gl_header_list= gl_func_list= gl_getopt_required=POSIX ac_subst_vars='gltests_LTLIBOBJS gltests_LIBOBJS gl_LTLIBOBJS gl_LIBOBJS am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS WITH_DOC_FALSE WITH_DOC_TRUE KPSEWHICH LATEX PANDOC INKSCAPE IMPORT HELP2MAN FREETYPE_LIBS FREETYPE_CPPFLAGS ft_config LIBM CXXCPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL DLLTOOL OBJDUMP NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED LIBTOOL USE_QT_FALSE USE_QT_TRUE QT_VERSION QT_STATIC_PLUGINS QT_LIBS QT_LDFLAGS QT_LFLAGS QT_CPPFLAGS QT_INCPATH QT_CXXFLAGS QT_CFLAGS QT_DEFINES QT_VERSION_MAJOR RCC UIC MOC QMAKE QT_PATH HARFBUZZ_LIBS HARFBUZZ_CFLAGS gltests_WITNESS HAVE_CRTDEFS_H HAVE_WINT_T NEXT_AS_FIRST_DIRECTIVE_WCHAR_H NEXT_WCHAR_H REPLACE_WCSFTIME REPLACE_WCSWIDTH REPLACE_WCWIDTH REPLACE_WCSNRTOMBS REPLACE_WCSRTOMBS REPLACE_WCRTOMB REPLACE_MBSNRTOWCS REPLACE_MBSRTOWCS REPLACE_MBRLEN REPLACE_MBRTOWC REPLACE_MBSINIT REPLACE_WCTOB REPLACE_BTOWC REPLACE_MBSTATE_T HAVE_DECL_WCWIDTH HAVE_DECL_WCTOB HAVE_WCSFTIME HAVE_WCSWIDTH HAVE_WCSTOK HAVE_WCSSTR HAVE_WCSPBRK HAVE_WCSSPN HAVE_WCSCSPN HAVE_WCSRCHR HAVE_WCSCHR HAVE_WCSDUP HAVE_WCSXFRM HAVE_WCSCOLL HAVE_WCSNCASECMP HAVE_WCSCASECMP HAVE_WCSNCMP HAVE_WCSCMP HAVE_WCSNCAT HAVE_WCSCAT HAVE_WCPNCPY HAVE_WCSNCPY HAVE_WCPCPY HAVE_WCSCPY HAVE_WCSNLEN HAVE_WCSLEN HAVE_WMEMSET HAVE_WMEMMOVE HAVE_WMEMCPY HAVE_WMEMCMP HAVE_WMEMCHR HAVE_WCSNRTOMBS HAVE_WCSRTOMBS HAVE_WCRTOMB HAVE_MBSNRTOWCS HAVE_MBSRTOWCS HAVE_MBRLEN HAVE_MBRTOWC HAVE_MBSINIT HAVE_BTOWC GNULIB_WCSFTIME GNULIB_WCSWIDTH GNULIB_WCSTOK GNULIB_WCSSTR GNULIB_WCSPBRK GNULIB_WCSSPN GNULIB_WCSCSPN GNULIB_WCSRCHR GNULIB_WCSCHR GNULIB_WCSDUP GNULIB_WCSXFRM GNULIB_WCSCOLL GNULIB_WCSNCASECMP GNULIB_WCSCASECMP GNULIB_WCSNCMP GNULIB_WCSCMP GNULIB_WCSNCAT GNULIB_WCSCAT GNULIB_WCPNCPY GNULIB_WCSNCPY GNULIB_WCPCPY GNULIB_WCSCPY GNULIB_WCSNLEN GNULIB_WCSLEN GNULIB_WMEMSET GNULIB_WMEMMOVE GNULIB_WMEMCPY GNULIB_WMEMCMP GNULIB_WMEMCHR GNULIB_WCWIDTH GNULIB_WCSNRTOMBS GNULIB_WCSRTOMBS GNULIB_WCRTOMB GNULIB_MBSNRTOWCS GNULIB_MBSRTOWCS GNULIB_MBRLEN GNULIB_MBRTOWC GNULIB_MBSINIT GNULIB_WCTOB GNULIB_BTOWC HAVE_FEATURES_H HAVE_UNISTD_H NEXT_AS_FIRST_DIRECTIVE_UNISTD_H NEXT_UNISTD_H WINDOWS_STAT_INODES WINDOWS_64_BIT_OFF_T NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H NEXT_SYS_TYPES_H NEXT_AS_FIRST_DIRECTIVE_STRING_H NEXT_STRING_H HAVE_WINSOCK2_H NEXT_AS_FIRST_DIRECTIVE_STDLIB_H NEXT_STDLIB_H NEXT_AS_FIRST_DIRECTIVE_STDIO_H NEXT_STDIO_H REPLACE_VSPRINTF REPLACE_VSNPRINTF REPLACE_VPRINTF REPLACE_VFPRINTF REPLACE_VDPRINTF REPLACE_VASPRINTF REPLACE_TMPFILE REPLACE_STDIO_WRITE_FUNCS REPLACE_STDIO_READ_FUNCS REPLACE_SPRINTF REPLACE_SNPRINTF REPLACE_RENAMEAT REPLACE_RENAME REPLACE_REMOVE REPLACE_PRINTF REPLACE_POPEN REPLACE_PERROR REPLACE_OBSTACK_PRINTF REPLACE_GETLINE REPLACE_GETDELIM REPLACE_FTELLO REPLACE_FTELL REPLACE_FSEEKO REPLACE_FSEEK REPLACE_FREOPEN REPLACE_FPURGE REPLACE_FPRINTF REPLACE_FOPEN REPLACE_FFLUSH REPLACE_FDOPEN REPLACE_FCLOSE REPLACE_DPRINTF HAVE_VDPRINTF HAVE_VASPRINTF HAVE_RENAMEAT HAVE_POPEN HAVE_PCLOSE HAVE_FTELLO HAVE_FSEEKO HAVE_DPRINTF HAVE_DECL_VSNPRINTF HAVE_DECL_SNPRINTF HAVE_DECL_OBSTACK_PRINTF HAVE_DECL_GETLINE HAVE_DECL_GETDELIM HAVE_DECL_FTELLO HAVE_DECL_FSEEKO HAVE_DECL_FPURGE GNULIB_VSPRINTF_POSIX GNULIB_VSNPRINTF GNULIB_VPRINTF_POSIX GNULIB_VPRINTF GNULIB_VFPRINTF_POSIX GNULIB_VFPRINTF GNULIB_VDPRINTF GNULIB_VSCANF GNULIB_VFSCANF GNULIB_VASPRINTF GNULIB_TMPFILE GNULIB_STDIO_H_SIGPIPE GNULIB_STDIO_H_NONBLOCKING GNULIB_SPRINTF_POSIX GNULIB_SNPRINTF GNULIB_SCANF GNULIB_RENAMEAT GNULIB_RENAME GNULIB_REMOVE GNULIB_PUTS GNULIB_PUTCHAR GNULIB_PUTC GNULIB_PRINTF_POSIX GNULIB_PRINTF GNULIB_POPEN GNULIB_PERROR GNULIB_PCLOSE GNULIB_OBSTACK_PRINTF_POSIX GNULIB_OBSTACK_PRINTF GNULIB_GETLINE GNULIB_GETDELIM GNULIB_GETCHAR GNULIB_GETC GNULIB_FWRITE GNULIB_FTELLO GNULIB_FTELL GNULIB_FSEEKO GNULIB_FSEEK GNULIB_FSCANF GNULIB_FREOPEN GNULIB_FREAD GNULIB_FPUTS GNULIB_FPUTC GNULIB_FPURGE GNULIB_FPRINTF_POSIX GNULIB_FPRINTF GNULIB_FOPEN GNULIB_FGETS GNULIB_FGETC GNULIB_FFLUSH GNULIB_FDOPEN GNULIB_FCLOSE GNULIB_DPRINTF GL_GENERATE_STDINT_H_FALSE GL_GENERATE_STDINT_H_TRUE STDINT_H HAVE_SYS_INTTYPES_H HAVE_SYS_BITYPES_H HAVE_C99_STDINT_H WINT_T_SUFFIX WCHAR_T_SUFFIX SIG_ATOMIC_T_SUFFIX SIZE_T_SUFFIX PTRDIFF_T_SUFFIX HAVE_SIGNED_WINT_T HAVE_SIGNED_WCHAR_T HAVE_SIGNED_SIG_ATOMIC_T BITSIZEOF_WINT_T BITSIZEOF_WCHAR_T BITSIZEOF_SIG_ATOMIC_T BITSIZEOF_SIZE_T BITSIZEOF_PTRDIFF_T HAVE_STDINT_H NEXT_AS_FIRST_DIRECTIVE_STDINT_H NEXT_STDINT_H HAVE_SYS_TYPES_H HAVE_INTTYPES_H HAVE_WCHAR_H HAVE_UNSIGNED_LONG_LONG_INT HAVE_LONG_LONG_INT GNULIB_OVERRIDES_WINT_T NEXT_AS_FIRST_DIRECTIVE_STDDEF_H NEXT_STDDEF_H GL_GENERATE_STDDEF_H_FALSE GL_GENERATE_STDDEF_H_TRUE STDDEF_H HAVE_WCHAR_T HAVE_MAX_ALIGN_T REPLACE_NULL HAVE__BOOL GL_GENERATE_STDBOOL_H_FALSE GL_GENERATE_STDBOOL_H_TRUE STDBOOL_H GL_GENERATE_STDARG_H_FALSE GL_GENERATE_STDARG_H_TRUE STDARG_H NEXT_AS_FIRST_DIRECTIVE_STDARG_H NEXT_STDARG_H APPLE_UNIVERSAL_BUILD HAVE_MSVC_INVALID_PARAMETER_HANDLER UNDEFINE_STRTOK_R REPLACE_STRSIGNAL REPLACE_STRERROR_R REPLACE_STRERROR REPLACE_STRTOK_R REPLACE_STRCASESTR REPLACE_STRSTR REPLACE_STRNLEN REPLACE_STRNDUP REPLACE_STRNCAT REPLACE_STRDUP REPLACE_STRCHRNUL REPLACE_STPNCPY REPLACE_MEMMEM REPLACE_MEMCHR HAVE_STRVERSCMP HAVE_DECL_STRSIGNAL HAVE_DECL_STRERROR_R HAVE_DECL_STRTOK_R HAVE_STRCASESTR HAVE_STRSEP HAVE_STRPBRK HAVE_DECL_STRNLEN HAVE_DECL_STRNDUP HAVE_DECL_STRDUP HAVE_STRCHRNUL HAVE_STPNCPY HAVE_STPCPY HAVE_RAWMEMCHR HAVE_DECL_MEMRCHR HAVE_MEMPCPY HAVE_DECL_MEMMEM HAVE_MEMCHR HAVE_FFSLL HAVE_FFSL HAVE_EXPLICIT_BZERO HAVE_MBSLEN GNULIB_STRVERSCMP GNULIB_STRSIGNAL GNULIB_STRERROR_R GNULIB_STRERROR GNULIB_MBSTOK_R GNULIB_MBSSEP GNULIB_MBSSPN GNULIB_MBSPBRK GNULIB_MBSCSPN GNULIB_MBSCASESTR GNULIB_MBSPCASECMP GNULIB_MBSNCASECMP GNULIB_MBSCASECMP GNULIB_MBSSTR GNULIB_MBSRCHR GNULIB_MBSCHR GNULIB_MBSNLEN GNULIB_MBSLEN GNULIB_STRTOK_R GNULIB_STRCASESTR GNULIB_STRSTR GNULIB_STRSEP GNULIB_STRPBRK GNULIB_STRNLEN GNULIB_STRNDUP GNULIB_STRNCAT GNULIB_STRDUP GNULIB_STRCHRNUL GNULIB_STPNCPY GNULIB_STPCPY GNULIB_RAWMEMCHR GNULIB_MEMRCHR GNULIB_MEMPCPY GNULIB_MEMMEM GNULIB_MEMCHR GNULIB_FFSLL GNULIB_FFSL GNULIB_EXPLICIT_BZERO REPLACE_WCTOMB REPLACE_UNSETENV REPLACE_STRTOD REPLACE_SETENV REPLACE_REALPATH REPLACE_REALLOC REPLACE_RANDOM_R REPLACE_QSORT_R REPLACE_PUTENV REPLACE_PTSNAME_R REPLACE_PTSNAME REPLACE_MKSTEMP REPLACE_MBTOWC REPLACE_MALLOC REPLACE_CANONICALIZE_FILE_NAME REPLACE_CALLOC HAVE_DECL_UNSETENV HAVE_UNLOCKPT HAVE_SYS_LOADAVG_H HAVE_STRUCT_RANDOM_DATA HAVE_STRTOULL HAVE_STRTOLL HAVE_STRTOD HAVE_DECL_SETSTATE HAVE_DECL_SETENV HAVE_SETENV HAVE_SECURE_GETENV HAVE_RPMATCH HAVE_REALPATH HAVE_REALLOCARRAY HAVE_RANDOM_R HAVE_RANDOM_H HAVE_RANDOM HAVE_QSORT_R HAVE_PTSNAME_R HAVE_PTSNAME HAVE_POSIX_OPENPT HAVE_MKSTEMPS HAVE_MKSTEMP HAVE_MKOSTEMPS HAVE_MKOSTEMP HAVE_MKDTEMP HAVE_DECL_INITSTATE HAVE_GRANTPT HAVE_GETSUBOPT HAVE_DECL_GETLOADAVG HAVE_CANONICALIZE_FILE_NAME HAVE_ATOLL HAVE__EXIT GNULIB_WCTOMB GNULIB_UNSETENV GNULIB_UNLOCKPT GNULIB_SYSTEM_POSIX GNULIB_STRTOULL GNULIB_STRTOLL GNULIB_STRTOD GNULIB_SETENV GNULIB_SECURE_GETENV GNULIB_RPMATCH GNULIB_REALPATH GNULIB_REALLOC_POSIX GNULIB_REALLOCARRAY GNULIB_RANDOM_R GNULIB_RANDOM GNULIB_QSORT_R GNULIB_PUTENV GNULIB_PTSNAME_R GNULIB_PTSNAME GNULIB_POSIX_OPENPT GNULIB_MKSTEMPS GNULIB_MKSTEMP GNULIB_MKOSTEMPS GNULIB_MKOSTEMP GNULIB_MKDTEMP GNULIB_MBTOWC GNULIB_MALLOC_POSIX GNULIB_GRANTPT GNULIB_GETSUBOPT GNULIB_GETLOADAVG GNULIB_CANONICALIZE_FILE_NAME GNULIB_CALLOC_POSIX GNULIB_ATOLL GNULIB__EXIT LTLIBMULTITHREAD LIBMULTITHREAD LTLIBTHREAD LIBTHREAD LIBPTH_PREFIX LTLIBPTH LIBPTH GL_GENERATE_LIMITS_H_FALSE GL_GENERATE_LIMITS_H_TRUE LIMITS_H NEXT_AS_FIRST_DIRECTIVE_LIMITS_H NEXT_LIMITS_H HOST_CPU_C_ABI HOST_CPU LTLIBINTL LIBINTL GNULIB_GL_UNISTD_H_GETOPT GETOPT_CDEFS_H GETOPT_H HAVE_SYS_CDEFS_H HAVE_GETOPT_H NEXT_AS_FIRST_DIRECTIVE_GETOPT_H NEXT_GETOPT_H UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS UNISTD_H_HAVE_WINSOCK2_H REPLACE_WRITE REPLACE_USLEEP REPLACE_UNLINKAT REPLACE_UNLINK REPLACE_TTYNAME_R REPLACE_TRUNCATE REPLACE_SYMLINKAT REPLACE_SYMLINK REPLACE_SLEEP REPLACE_RMDIR REPLACE_READLINKAT REPLACE_READLINK REPLACE_READ REPLACE_PWRITE REPLACE_PREAD REPLACE_LSEEK REPLACE_LINKAT REPLACE_LINK REPLACE_LCHOWN REPLACE_ISATTY REPLACE_GETPAGESIZE REPLACE_GETGROUPS REPLACE_GETLOGIN_R REPLACE_GETDTABLESIZE REPLACE_GETDOMAINNAME REPLACE_GETCWD REPLACE_FTRUNCATE REPLACE_FCHOWNAT REPLACE_FACCESSAT REPLACE_DUP2 REPLACE_DUP REPLACE_CLOSE REPLACE_CHOWN HAVE_SYS_PARAM_H HAVE_OS_H HAVE_DECL_TTYNAME_R HAVE_DECL_SETHOSTNAME HAVE_DECL_GETUSERSHELL HAVE_DECL_GETPAGESIZE HAVE_DECL_GETLOGIN_R HAVE_DECL_GETLOGIN HAVE_DECL_GETDOMAINNAME HAVE_DECL_FDATASYNC HAVE_DECL_FCHDIR HAVE_DECL_ENVIRON HAVE_USLEEP HAVE_UNLINKAT HAVE_TRUNCATE HAVE_SYMLINKAT HAVE_SYMLINK HAVE_SLEEP HAVE_SETHOSTNAME HAVE_READLINKAT HAVE_READLINK HAVE_PWRITE HAVE_PREAD HAVE_PIPE2 HAVE_PIPE HAVE_LINKAT HAVE_LINK HAVE_LCHOWN HAVE_GROUP_MEMBER HAVE_GETPAGESIZE HAVE_GETLOGIN HAVE_GETHOSTNAME HAVE_GETGROUPS HAVE_GETDTABLESIZE HAVE_FTRUNCATE HAVE_FSYNC HAVE_FDATASYNC HAVE_FCHOWNAT HAVE_FCHDIR HAVE_FACCESSAT HAVE_EUIDACCESS HAVE_DUP3 HAVE_DUP2 HAVE_CHOWN GNULIB_WRITE GNULIB_USLEEP GNULIB_UNLINKAT GNULIB_UNLINK GNULIB_UNISTD_H_SIGPIPE GNULIB_UNISTD_H_NONBLOCKING GNULIB_TTYNAME_R GNULIB_TRUNCATE GNULIB_SYMLINKAT GNULIB_SYMLINK GNULIB_SLEEP GNULIB_SETHOSTNAME GNULIB_RMDIR GNULIB_READLINKAT GNULIB_READLINK GNULIB_READ GNULIB_PWRITE GNULIB_PREAD GNULIB_PIPE2 GNULIB_PIPE GNULIB_LSEEK GNULIB_LINKAT GNULIB_LINK GNULIB_LCHOWN GNULIB_ISATTY GNULIB_GROUP_MEMBER GNULIB_GETUSERSHELL GNULIB_GETPAGESIZE GNULIB_GETLOGIN_R GNULIB_GETLOGIN GNULIB_GETHOSTNAME GNULIB_GETGROUPS GNULIB_GETDTABLESIZE GNULIB_GETDOMAINNAME GNULIB_GETCWD GNULIB_FTRUNCATE GNULIB_FSYNC GNULIB_FDATASYNC GNULIB_FCHOWNAT GNULIB_FCHDIR GNULIB_FACCESSAT GNULIB_EUIDACCESS GNULIB_ENVIRON GNULIB_DUP3 GNULIB_DUP2 GNULIB_DUP GNULIB_CLOSE GNULIB_CHOWN GNULIB_CHDIR REPLACE_ITOLD GL_GENERATE_FLOAT_H_FALSE GL_GENERATE_FLOAT_H_TRUE FLOAT_H NEXT_AS_FIRST_DIRECTIVE_FLOAT_H NEXT_FLOAT_H NEXT_AS_FIRST_DIRECTIVE_FCNTL_H NEXT_FCNTL_H REPLACE_OPENAT REPLACE_OPEN REPLACE_FCNTL HAVE_OPENAT HAVE_FCNTL GNULIB_OPENAT GNULIB_OPEN GNULIB_NONBLOCKING GNULIB_FCNTL EOVERFLOW_VALUE EOVERFLOW_HIDDEN ENOLINK_VALUE ENOLINK_HIDDEN EMULTIHOP_VALUE EMULTIHOP_HIDDEN GL_GENERATE_ERRNO_H_FALSE GL_GENERATE_ERRNO_H_TRUE ERRNO_H NEXT_AS_FIRST_DIRECTIVE_ERRNO_H NEXT_ERRNO_H PRAGMA_COLUMNS PRAGMA_SYSTEM_HEADER INCLUDE_NEXT_AS_FIRST_DIRECTIVE INCLUDE_NEXT GL_GENERATE_ALLOCA_H_FALSE GL_GENERATE_ALLOCA_H_TRUE ALLOCA_H ALLOCA GL_COND_LIBTOOL_FALSE GL_COND_LIBTOOL_TRUE FLEX BISON PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG host_os host_vendor host_cpu host build_os build_vendor build_cpu build RANLIB ARFLAGS ac_ct_AR AR am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX LN_S EGREP GREP CPP 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 ttfautohint_revision ttfautohint_minor ttfautohint_major 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 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_dependency_tracking enable_threads with_gnu_ld enable_rpath with_libpth_prefix with_qt enable_shared enable_static with_pic enable_fast_install with_aix_soname with_sysroot enable_libtool_lock with_doc with_freetype_config ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR HARFBUZZ_CFLAGS HARFBUZZ_LIBS QT_PATH QMAKE MOC UIC RCC LT_SYS_LIBRARY_PATH CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe 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 ttfautohint 1.8.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/ttfautohint] --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 ttfautohint 1.8.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-threads={posix|solaris|pth|windows} specify multithreading API --disable-threads build without multithread safety --disable-rpath do not hardcode runtime library paths --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) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-libpth-prefix[=DIR] search for libpth in DIR/include and DIR/lib --without-libpth-prefix don't search for libpth in includedir and libdir --with-qt[=ARG] Qt support. ARG can be `yes' (the default), `no', or a path to Qt binaries; if `yes' or empty, use PATH and some default directories to find Qt binaries --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-doc install documentation [default=yes] --with-freetype-config=PROG use FreeType configuration program PROG Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags 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 HARFBUZZ_CFLAGS C compiler flags for HARFBUZZ, overriding pkg-config HARFBUZZ_LIBS linker flags for HARFBUZZ, overriding pkg-config QT_PATH path to Qt binaries QMAKE Qt Makefile generator command MOC Qt Meta Object Compiler command UIC Qt User Interface Compiler command RCC Qt Resource Compiler command LT_SYS_LIBRARY_PATH User-defined run-time library search path. CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _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 ttfautohint configure 1.8.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_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 freetype-devel@nongnu.org ## ## ---------------------------------------- ##" ) | 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_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_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_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_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 # 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_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_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _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_decl # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_lt_c_try_run LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_lt_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_lt_c_try_run 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 ttfautohint $as_me 1.8.1, 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 gl_header_list="$gl_header_list unistd.h" gl_func_list="$gl_func_list symlink" gl_getopt_required=GNU gl_header_list="$gl_header_list getopt.h" gl_header_list="$gl_header_list sys/cdefs.h" gl_func_list="$gl_func_list getprogname" gl_func_list="$gl_func_list getexecname" gl_header_list="$gl_header_list limits.h" gl_header_list="$gl_header_list sys/mman.h" gl_func_list="$gl_func_list mprotect" gl_func_list="$gl_func_list _set_invalid_parameter_handler" gl_header_list="$gl_header_list wchar.h" gl_header_list="$gl_header_list stdint.h" gl_func_list="$gl_func_list strerror_r" gl_func_list="$gl_func_list __xpg_strerror_r" gl_header_list="$gl_header_list sys/socket.h" gl_func_list="$gl_func_list catgets" gl_func_list="$gl_func_list snprintf" gl_func_list="$gl_func_list strndup" gl_func_list="$gl_func_list vasnprintf" gl_header_list="$gl_header_list features.h" gl_header_list="$gl_header_list crtdefs.h" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in gnulib "$srcdir"/gnulib; 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 gnulib \"$srcdir\"/gnulib" "$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. am__api_version='1.15' # 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='ttfautohint' VERSION='1.8.1' 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 plaintar pax cpio none' # The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 $as_echo_n "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test $am_uid -le $am_max_uid; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } _am_tools=none fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 $as_echo_n "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test $am_gid -le $am_max_gid; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } _am_tools=none fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 $as_echo_n "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_ustar-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x ustar -w "$$tardir"' am__tar_='pax -L -x ustar -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H ustar -L' am__tar_='find "$tardir" -print | cpio -o -H ustar -L' am__untar='cpio -i -H ustar -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_ustar}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if ${am_cv_prog_tar_ustar+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_prog_tar_ustar=$_am_tool fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 $as_echo "$am_cv_prog_tar_ustar" >&6; } # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' ttfautohint_major=1 ttfautohint_minor=8 ttfautohint_revision=1 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 if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; 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}clang" $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 "clang", so it can be a program name with args. set dummy clang; 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="clang" $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 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 -version; 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 enable C11 features" >&5 $as_echo_n "checking for $CC option to enable C11 features... " >&6; } if ${ac_cv_prog_cc_c11+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); v1.i = 2; v1.w.k = 5; _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); ; return 0; } _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL ac_prog_cc_stdc_options= case "x$ac_cv_prog_cc_c11" 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; } ;; *) ac_prog_cc_stdc_options=" $ac_cv_prog_cc_c11" CC=$CC$ac_prog_cc_stdc_options { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 $as_echo "$ac_cv_prog_cc_c11" >&6; } ;; esac if test "x$ac_cv_prog_cc_c11" != xno; then : ac_prog_cc_stdc=c11 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 $as_echo_n "checking for $CC option to enable C99 features... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc1x -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL ac_prog_cc_stdc_options= case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) ac_prog_cc_stdc_options=" $ac_cv_prog_cc_c99" CC=$CC$ac_prog_cc_stdc_options { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : ac_prog_cc_stdc=c99 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 $as_echo_n "checking for $CC option to enable C89 features... " >&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 ac_prog_cc_stdc_options= 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; } ;; *) ac_prog_cc_stdc_options=" $ac_cv_prog_cc_c89" CC=$CC$ac_prog_cc_stdc_options { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : ac_prog_cc_stdc=c89 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 else ac_prog_cc_stdc=no ac_cv_prog_cc_stdc=no fi fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$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 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 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 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 ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h $as_echo "#define _OPENBSD_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 $as_echo_n "checking whether _XOPEN_SOURCE should be defined... " >&6; } if ${ac_cv_should_define__xopen_source+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_should_define__xopen_source=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_should_define__xopen_source=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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 $as_echo "$ac_cv_should_define__xopen_source" >&6; } test $ac_cv_should_define__xopen_source = yes && $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h { $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 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 $as_echo_n "checking for $CXX option to enable C++11 features... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if ${ac_cv_prog_cxx_cxx11+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include #include namespace cxx11test { typedef std::shared_ptr sptr; typedef std::weak_ptr wptr; typedef std::tuple tp; typedef std::array int_array; constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; } #include #include #include #include #include #include #include #include #include #include #include #include #include namespace test { typedef std::vector string_vec; typedef std::pair map_value; typedef std::map map_type; typedef std::set set_type; template class printer { public: printer(std::ostringstream& os): os(os) {} void operator() (T elem) { os << elem << std::endl; } private: std::ostringstream& os; }; } int main () { { // Test auto and decltype std::deque d; d.push_front(43); d.push_front(484); d.push_front(3); d.push_front(844); int total = 0; for (auto i = d.begin(); i != d.end(); ++i) { total += *i; } auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for and lambda cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (int &x : array) { x += 23; } std::for_each(array.begin(), array.end(), [](int v1){ std::cout << v1; }); } { using cxx11test::sptr; using cxx11test::wptr; sptr sp(new std::string("ASCII string")); wptr wp(sp); sptr sp2(wp); } { cxx11test::tp tuple("test", 54, 45.53434); double d = std::get<2>(tuple); std::string s; int i; std::tie(s,i,d) = tuple; } { static std::regex filename_regex("^_?([a-z0-9_.]+-)+[a-z0-9]+$"); std::string testmatch("Test if this string matches"); bool match = std::regex_search(testmatch, filename_regex); } { cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; cxx11test::int_array::size_type size = array.size(); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets std::vector> v1; } { // Unicode literals char const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-8 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } try { // Basic string. std::string teststr("ASCII text"); teststr += " string"; // Simple vector. test::string_vec testvec; testvec.push_back(teststr); testvec.push_back("foo"); testvec.push_back("bar"); if (testvec.size() != 3) { throw std::runtime_error("vector size is not 1"); } // Dump vector into stringstream and obtain string. std::ostringstream os; for (test::string_vec::const_iterator i = testvec.begin(); i != testvec.end(); ++i) { if (i + 1 != testvec.end()) { os << teststr << '\n'; } } // Check algorithms work. std::for_each(testvec.begin(), testvec.end(), test::printer(os)); std::string os_out = os.str(); // Test pair and map. test::map_type testmap; testmap.insert(std::make_pair(std::string("key"), std::make_pair(53,false))); // Test set. int values[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; test::set_type testset(values, values + sizeof(values)/sizeof(values[0])); std::list testlist(testset.begin(), testset.end()); std::copy(testset.begin(), testset.end(), std::back_inserter(testlist)); } catch (const std::exception& e) { std::cerr << "Caught exception: " << e.what() << std::endl; // Test fstream std::ofstream of("test.txt"); of << "Test ASCII text\n" << std::flush; of << "N= " << std::hex << std::setw(8) << std::left << 534 << std::endl; of.close(); } std::exit(0); ; return 0; } _ACEOF for ac_arg in '' -std=gnu++11 -std=c++11 -std=gnu++0x -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi # AC_CACHE_VAL ac_prog_cxx_stdcxx_options= case "x$ac_cv_prog_cxx_cxx11" 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; } ;; *) ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_cxx11" CXX=$CXX$ac_prog_cxx_stdcxx_options { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 $as_echo "$ac_cv_prog_cxx_cxx11" >&6; } ;; esac ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "x$ac_cv_prog_cxx_cxx11" != xno; then : ac_prog_cxx_stdcxx=cxx11 ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_cv_prog_cxx_cxx98=$ac_cv_prog_cxx_cxx11 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 $as_echo_n "checking for $CXX option to enable C++98 features... " >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if ${ac_cv_prog_cxx_cxx98+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include #include #include #include #include #include #include #include namespace test { typedef std::vector string_vec; typedef std::pair map_value; typedef std::map map_type; typedef std::set set_type; template class printer { public: printer(std::ostringstream& os): os(os) {} void operator() (T elem) { os << elem << std::endl; } private: std::ostringstream& os; }; } int main () { try { // Basic string. std::string teststr("ASCII text"); teststr += " string"; // Simple vector. test::string_vec testvec; testvec.push_back(teststr); testvec.push_back("foo"); testvec.push_back("bar"); if (testvec.size() != 3) { throw std::runtime_error("vector size is not 1"); } // Dump vector into stringstream and obtain string. std::ostringstream os; for (test::string_vec::const_iterator i = testvec.begin(); i != testvec.end(); ++i) { if (i + 1 != testvec.end()) { os << teststr << '\n'; } } // Check algorithms work. std::for_each(testvec.begin(), testvec.end(), test::printer(os)); std::string os_out = os.str(); // Test pair and map. test::map_type testmap; testmap.insert(std::make_pair(std::string("key"), std::make_pair(53,false))); // Test set. int values[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; test::set_type testset(values, values + sizeof(values)/sizeof(values[0])); std::list testlist(testset.begin(), testset.end()); std::copy(testset.begin(), testset.end(), std::back_inserter(testlist)); } catch (const std::exception& e) { std::cerr << "Caught exception: " << e.what() << std::endl; // Test fstream std::ofstream of("test.txt"); of << "Test ASCII text\n" << std::flush; of << "N= " << std::hex << std::setw(8) << std::left << 534 << std::endl; of.close(); } std::exit(0); ; return 0; } _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi # AC_CACHE_VAL ac_prog_cxx_stdcxx_options= case "x$ac_cv_prog_cxx_cxx98" 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; } ;; *) ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_cxx98" CXX=$CXX$ac_prog_cxx_stdcxx_options { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 $as_echo "$ac_cv_prog_cxx_cxx98" >&6; } ;; esac ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "x$ac_cv_prog_cxx_cxx98" != xno; then : ac_prog_cxx_stdcxx=cxx98 ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 else ac_prog_cxx_stdcxx=no ac_cv_prog_cxx_stdcxx=no fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5 $as_echo_n "checking for Minix Amsterdam compiler... " >&6; } if ${gl_cv_c_amsterdam_compiler+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ACK__ Amsterdam #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Amsterdam" >/dev/null 2>&1; then : gl_cv_c_amsterdam_compiler=yes else gl_cv_c_amsterdam_compiler=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5 $as_echo "$gl_cv_c_amsterdam_compiler" >&6; } if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" 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 lib "link -lib" 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} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} 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 am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext 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: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # 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__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac 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="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 -z "$ARFLAGS"; then ARFLAGS='cr' fi if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else 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 fi fi # 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 # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; gl_use_threads=$enableval else if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else case "$host_os" in osf*) gl_use_threads=no ;; cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac fi fi if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # For using : case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks . cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in . case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac fi # Pre-early section. # Code from module absolute-header: # Code from module alloca-opt: # Code from module builtin-expect: # Code from module dirname: # Code from module dirname-lgpl: # Code from module dosname: # Code from module double-slash-root: # Code from module errno: # Code from module error: # Code from module exitfail: # Code from module extensions: # Code from module extern-inline: # Code from module fcntl-h: # Code from module float: # Code from module getopt-gnu: # Code from module getopt-posix: # Code from module getprogname: # Code from module gettext-h: # Code from module git-version-gen: # Code from module havelib: # Code from module host-cpu-c-abi: # Code from module include_next: # Code from module intprops: # Code from module isatty: # Code from module limits-h: # Code from module lock: # Code from module malloc-posix: # Code from module memchr: # Code from module memmem-simple: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module multiarch: # Code from module nocrash: # Code from module progname: # Code from module size_max: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module ssize_t: # Code from module std-gnu11: # Code from module stdarg: # Code from module stdbool: # Code from module stddef: # Code from module stdint: # Code from module stdio: # Code from module stdlib: # Code from module strerror: # Code from module strerror-override: # Code from module strerror_r-posix: # Code from module string: # Code from module strndup: # Code from module strnlen: # Code from module strtok_r: # Code from module strtoull: # Code from module sys_types: # Code from module threadlib: # Code from module unistd: # Code from module vasnprintf: # Code from module vasprintf: # Code from module verify: # Code from module wchar: # Code from module xalloc: # Code from module xalloc-die: # Code from module xalloc-oversized: # Code from module xsize: # Code from module xstrndup: 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.24 { $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 # AM_PROG_AR is new in automake 1.11.2; # however, MinGW doesn't have it yet (May 2012) if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" 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 lib "link -lib" 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} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} 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 am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext 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: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # 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__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac # 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_path_BISON+:} false; then : $as_echo_n "(cached) " >&6 else case $BISON in [\\/]* | ?:[\\/]*) ac_cv_path_BISON="$BISON" # 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_BISON="$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 BISON=$ac_cv_path_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 # Extract the first word of "flex", so it can be a program name with args. set dummy flex; 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_FLEX+:} false; then : $as_echo_n "(cached) " >&6 else case $FLEX in [\\/]* | ?:[\\/]*) ac_cv_path_FLEX="$FLEX" # 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_FLEX="$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 FLEX=$ac_cv_path_FLEX if test -n "$FLEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLEX" >&5 $as_echo "$FLEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ 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 whether // is distinct from /" >&5 $as_echo_n "checking whether // is distinct from /... " >&6; } if ${gl_cv_double_slash_root+:} false; then : $as_echo_n "(cached) " >&6 else if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # . case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 $as_echo "$gl_cv_double_slash_root" >&6; } if test "$gl_cv_double_slash_root" = yes; then $as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5 $as_echo_n "checking whether the preprocessor supports include_next... " >&6; } if ${gl_cv_have_include_next+:} false; then : $as_echo_n "(cached) " >&6 else rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 cat < conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_have_include_next=yes else CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_have_include_next=buggy else gl_cv_have_include_next=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5 $as_echo "$gl_cv_have_include_next" >&6; } PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system header files limit the line length" >&5 $as_echo_n "checking whether system header files limit the line length... " >&6; } if ${gl_cv_pragma_columns+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __TANDEM choke me #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "choke me" >/dev/null 2>&1; then : gl_cv_pragma_columns=yes else gl_cv_pragma_columns=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pragma_columns" >&5 $as_echo "$gl_cv_pragma_columns" >&6; } if test $gl_cv_pragma_columns = yes; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5 $as_echo_n "checking for complete errno.h... " >&6; } if ${gl_cv_header_errno_h_complete+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "booboo" >/dev/null 2>&1; then : gl_cv_header_errno_h_complete=no else gl_cv_header_errno_h_complete=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5 $as_echo "$gl_cv_header_errno_h_complete" >&6; } if test $gl_cv_header_errno_h_complete = yes; then ERRNO_H='' else if test $gl_cv_have_include_next = yes; then gl_cv_next_errno_h='<'errno.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_errno_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'errno.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_errno_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_errno_h gl_cv_next_errno_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5 $as_echo "$gl_cv_next_errno_h" >&6; } fi NEXT_ERRNO_H=$gl_cv_next_errno_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'errno.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_errno_h fi NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive ERRNO_H='errno.h' fi if test -n "$ERRNO_H"; then GL_GENERATE_ERRNO_H_TRUE= GL_GENERATE_ERRNO_H_FALSE='#' else GL_GENERATE_ERRNO_H_TRUE='#' GL_GENERATE_ERRNO_H_FALSE= fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5 $as_echo_n "checking for EMULTIHOP value... " >&6; } if ${gl_cv_header_errno_h_EMULTIHOP+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EMULTIHOP=yes else gl_cv_header_errno_h_EMULTIHOP=no fi rm -f conftest* if test $gl_cv_header_errno_h_EMULTIHOP = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EMULTIHOP=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5 $as_echo "$gl_cv_header_errno_h_EMULTIHOP" >&6; } case $gl_cv_header_errno_h_EMULTIHOP in yes | no) EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE= ;; *) EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP" ;; esac fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5 $as_echo_n "checking for ENOLINK value... " >&6; } if ${gl_cv_header_errno_h_ENOLINK+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_ENOLINK=yes else gl_cv_header_errno_h_ENOLINK=no fi rm -f conftest* if test $gl_cv_header_errno_h_ENOLINK = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_ENOLINK=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_ENOLINK = hidden; then if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5 $as_echo "$gl_cv_header_errno_h_ENOLINK" >&6; } case $gl_cv_header_errno_h_ENOLINK in yes | no) ENOLINK_HIDDEN=0; ENOLINK_VALUE= ;; *) ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK" ;; esac fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5 $as_echo_n "checking for EOVERFLOW value... " >&6; } if ${gl_cv_header_errno_h_EOVERFLOW+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EOVERFLOW=yes else gl_cv_header_errno_h_EOVERFLOW=no fi rm -f conftest* if test $gl_cv_header_errno_h_EOVERFLOW = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EOVERFLOW=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5 $as_echo "$gl_cv_header_errno_h_EOVERFLOW" >&6; } case $gl_cv_header_errno_h_EOVERFLOW in yes | no) EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE= ;; *) EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW" ;; esac fi ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" if test "x$ac_cv_have_decl_strerror_r" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRERROR_R $ac_have_decl _ACEOF for ac_func in strerror_r do : ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" if test "x$ac_cv_func_strerror_r" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRERROR_R 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 $as_echo_n "checking whether strerror_r returns char *... " >&6; } if ${ac_cv_func_strerror_r_char_p+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_func_strerror_r_char_p=no if test $ac_cv_have_decl_strerror_r = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); char *p = strerror_r (0, buf, sizeof buf); return !p || x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_strerror_r_char_p=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else # strerror_r is not declared. Choose between # systems that have relatively inaccessible declarations for the # function. BeOS and DEC UNIX 4.0 fall in this category, but the # former has a strerror_r that returns char*, while the latter # has a strerror_r that returns `int'. # This test should segfault on the DEC system. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default extern char *strerror_r (); int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); return ! isalpha (x); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_strerror_r_char_p=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 $as_echo "$ac_cv_func_strerror_r_char_p" >&6; } if test $ac_cv_func_strerror_r_char_p = yes; then $as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h fi XGETTEXT_EXTRA_OPTIONS= GNULIB_FCNTL=0; GNULIB_NONBLOCKING=0; GNULIB_OPEN=0; GNULIB_OPENAT=0; HAVE_FCNTL=1; HAVE_OPENAT=1; REPLACE_FCNTL=0; REPLACE_OPEN=0; REPLACE_OPENAT=0; for ac_header in $gl_header_list 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 for ac_func in $gl_func_list 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 : : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5 $as_echo_n "checking for working fcntl.h... " >&6; } if ${gl_cv_header_working_fcntl_h+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess 'no' on native Windows. mingw*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_UNISTD_H # include #else /* on Windows with MSVC */ # include # include # defined sleep(n) _sleep ((n) * 1000) #endif #include #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; int main () { int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_header_working_fcntl_h=yes else case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac 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: $gl_cv_header_working_fcntl_h" >&5 $as_echo "$gl_cv_header_working_fcntl_h" >&6; } case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac cat >>confdefs.h <<_ACEOF #define HAVE_WORKING_O_NOATIME $ac_val _ACEOF case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac cat >>confdefs.h <<_ACEOF #define HAVE_WORKING_O_NOFOLLOW $ac_val _ACEOF ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi GNULIB_CHDIR=0; GNULIB_CHOWN=0; GNULIB_CLOSE=0; GNULIB_DUP=0; GNULIB_DUP2=0; GNULIB_DUP3=0; GNULIB_ENVIRON=0; GNULIB_EUIDACCESS=0; GNULIB_FACCESSAT=0; GNULIB_FCHDIR=0; GNULIB_FCHOWNAT=0; GNULIB_FDATASYNC=0; GNULIB_FSYNC=0; GNULIB_FTRUNCATE=0; GNULIB_GETCWD=0; GNULIB_GETDOMAINNAME=0; GNULIB_GETDTABLESIZE=0; GNULIB_GETGROUPS=0; GNULIB_GETHOSTNAME=0; GNULIB_GETLOGIN=0; GNULIB_GETLOGIN_R=0; GNULIB_GETPAGESIZE=0; GNULIB_GETUSERSHELL=0; GNULIB_GROUP_MEMBER=0; GNULIB_ISATTY=0; GNULIB_LCHOWN=0; GNULIB_LINK=0; GNULIB_LINKAT=0; GNULIB_LSEEK=0; GNULIB_PIPE=0; GNULIB_PIPE2=0; GNULIB_PREAD=0; GNULIB_PWRITE=0; GNULIB_READ=0; GNULIB_READLINK=0; GNULIB_READLINKAT=0; GNULIB_RMDIR=0; GNULIB_SETHOSTNAME=0; GNULIB_SLEEP=0; GNULIB_SYMLINK=0; GNULIB_SYMLINKAT=0; GNULIB_TRUNCATE=0; GNULIB_TTYNAME_R=0; GNULIB_UNISTD_H_NONBLOCKING=0; GNULIB_UNISTD_H_SIGPIPE=0; GNULIB_UNLINK=0; GNULIB_UNLINKAT=0; GNULIB_USLEEP=0; GNULIB_WRITE=0; HAVE_CHOWN=1; HAVE_DUP2=1; HAVE_DUP3=1; HAVE_EUIDACCESS=1; HAVE_FACCESSAT=1; HAVE_FCHDIR=1; HAVE_FCHOWNAT=1; HAVE_FDATASYNC=1; HAVE_FSYNC=1; HAVE_FTRUNCATE=1; HAVE_GETDTABLESIZE=1; HAVE_GETGROUPS=1; HAVE_GETHOSTNAME=1; HAVE_GETLOGIN=1; HAVE_GETPAGESIZE=1; HAVE_GROUP_MEMBER=1; HAVE_LCHOWN=1; HAVE_LINK=1; HAVE_LINKAT=1; HAVE_PIPE=1; HAVE_PIPE2=1; HAVE_PREAD=1; HAVE_PWRITE=1; HAVE_READLINK=1; HAVE_READLINKAT=1; HAVE_SETHOSTNAME=1; HAVE_SLEEP=1; HAVE_SYMLINK=1; HAVE_SYMLINKAT=1; HAVE_TRUNCATE=1; HAVE_UNLINKAT=1; HAVE_USLEEP=1; HAVE_DECL_ENVIRON=1; HAVE_DECL_FCHDIR=1; HAVE_DECL_FDATASYNC=1; HAVE_DECL_GETDOMAINNAME=1; HAVE_DECL_GETLOGIN=1; HAVE_DECL_GETLOGIN_R=1; HAVE_DECL_GETPAGESIZE=1; HAVE_DECL_GETUSERSHELL=1; HAVE_DECL_SETHOSTNAME=1; HAVE_DECL_TTYNAME_R=1; HAVE_OS_H=0; HAVE_SYS_PARAM_H=0; REPLACE_CHOWN=0; REPLACE_CLOSE=0; REPLACE_DUP=0; REPLACE_DUP2=0; REPLACE_FACCESSAT=0; REPLACE_FCHOWNAT=0; REPLACE_FTRUNCATE=0; REPLACE_GETCWD=0; REPLACE_GETDOMAINNAME=0; REPLACE_GETDTABLESIZE=0; REPLACE_GETLOGIN_R=0; REPLACE_GETGROUPS=0; REPLACE_GETPAGESIZE=0; REPLACE_ISATTY=0; REPLACE_LCHOWN=0; REPLACE_LINK=0; REPLACE_LINKAT=0; REPLACE_LSEEK=0; REPLACE_PREAD=0; REPLACE_PWRITE=0; REPLACE_READ=0; REPLACE_READLINK=0; REPLACE_READLINKAT=0; REPLACE_RMDIR=0; REPLACE_SLEEP=0; REPLACE_SYMLINK=0; REPLACE_SYMLINKAT=0; REPLACE_TRUNCATE=0; REPLACE_TTYNAME_R=0; REPLACE_UNLINK=0; REPLACE_UNLINKAT=0; REPLACE_USLEEP=0; REPLACE_WRITE=0; UNISTD_H_HAVE_WINSOCK2_H=0; UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; : if test $gl_cv_have_include_next = yes; then gl_cv_next_getopt_h='<'getopt.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_getopt_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_getopt_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'getopt.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_getopt_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_getopt_h gl_cv_next_getopt_h='"'$gl_header'"' else gl_cv_next_getopt_h='<'getopt.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_getopt_h" >&5 $as_echo "$gl_cv_next_getopt_h" >&6; } fi NEXT_GETOPT_H=$gl_cv_next_getopt_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'getopt.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_getopt_h fi NEXT_AS_FIRST_DIRECTIVE_GETOPT_H=$gl_next_as_first_directive if test $ac_cv_header_getopt_h = yes; then HAVE_GETOPT_H=1 else HAVE_GETOPT_H=0 fi gl_replace_getopt= if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then for ac_header in getopt.h do : ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" if test "x$ac_cv_header_getopt_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETOPT_H 1 _ACEOF else gl_replace_getopt=yes fi done fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then for ac_func in getopt_long_only do : ac_fn_c_check_func "$LINENO" "getopt_long_only" "ac_cv_func_getopt_long_only" if test "x$ac_cv_func_getopt_long_only" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETOPT_LONG_ONLY 1 _ACEOF else gl_replace_getopt=yes fi done fi if test -z "$gl_replace_getopt"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getopt is POSIX compatible" >&5 $as_echo_n "checking whether getopt is POSIX compatible... " >&6; } if ${gl_cv_func_getopt_posix+:} false; then : $as_echo_n "(cached) " >&6 else if test $cross_compiling = no; then if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_posix=maybe else gl_cv_func_getopt_posix=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $gl_cv_func_getopt_posix = maybe; then if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; c = getopt (7, argv, "+abp:q:"); if (!(c == -1)) return 4; if (!(strcmp (argv[0], "program") == 0)) return 5; if (!(strcmp (argv[1], "donald") == 0)) return 6; if (!(strcmp (argv[2], "-p") == 0)) return 7; if (!(strcmp (argv[3], "billy") == 0)) return 8; if (!(strcmp (argv[4], "duck") == 0)) return 9; if (!(strcmp (argv[5], "-a") == 0)) return 10; if (!(strcmp (argv[6], "bar") == 0)) return 11; if (!(optind == 1)) return 12; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_posix=maybe else gl_cv_func_getopt_posix=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 if test $gl_cv_func_getopt_posix = maybe; then if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; if (getopt (2, argv, "ab:") != 'a') return 13; if (getopt (2, argv, "ab:") != '?') return 14; if (optopt != 'b') return 15; if (optind != 2) return 16; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_posix=yes else gl_cv_func_getopt_posix=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 else case "$host_os" in darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_posix" >&5 $as_echo "$gl_cv_func_getopt_posix" >&6; } case "$gl_cv_func_getopt_posix" in *no) gl_replace_getopt=yes ;; esac fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt function" >&5 $as_echo_n "checking for working GNU getopt function... " >&6; } if ${gl_cv_func_getopt_gnu+:} false; then : $as_echo_n "(cached) " >&6 else # Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the # optstring is necessary for programs like m4 that have POSIX-mandated # semantics for supporting options interspersed with files. # Also, since getopt_long is a GNU extension, we require optind=0. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include #include #include #include #include #include /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include #include static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include #include /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif int main () { int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 16; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 32; else if (getopt (3, argv, "+:a:b") != ':') result |= 32; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 64; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_gnu=yes else gl_cv_func_getopt_gnu=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi case $gl_had_POSIXLY_CORRECT in exported) ;; yes) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}; POSIXLY_CORRECT=1 ;; *) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_gnu" >&5 $as_echo "$gl_cv_func_getopt_gnu" >&6; } if test "$gl_cv_func_getopt_gnu" != yes; then gl_replace_getopt=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt_long function" >&5 $as_echo_n "checking for working GNU getopt_long function... " >&6; } if ${gl_cv_func_getopt_long_gnu+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; *) gl_cv_func_getopt_long_gnu="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { static const struct option long_options[] = { { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; /* This code fails on OpenBSD 5.0. */ { static char program[] = "program"; static char xtremel[] = "--xtremel"; char *argv[] = { program, xtremel, NULL }; int option_index; optind = 1; opterr = 0; if (getopt_long (2, argv, "", long_options, &option_index) != 1003) return 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_long_gnu=yes else gl_cv_func_getopt_long_gnu=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: $gl_cv_func_getopt_long_gnu" >&5 $as_echo "$gl_cv_func_getopt_long_gnu" >&6; } case "$gl_cv_func_getopt_long_gnu" in *yes) ;; *) gl_replace_getopt=yes ;; esac fi fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER MicrosoftCompiler #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "MicrosoftCompiler" >/dev/null 2>&1; then : gl_asmext='asm' gl_c_asm_opt='-c -Fa' else gl_asmext='s' gl_c_asm_opt='-S' fi rm -f conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: checking host CPU and C ABI" >&5 $as_echo_n "checking host CPU and C ABI... " >&6; } if ${gl_cv_host_cpu_c_abi+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_cpu" in i[4567]86 ) gl_cv_host_cpu_c_abi=i386 ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=x86_64-x32 else gl_cv_host_cpu_c_abi=x86_64 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else gl_cv_host_cpu_c_abi=i386 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) gl_cv_host_cpu_c_abi=alpha ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __aarch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=arm64-ilp32 else gl_cv_host_cpu_c_abi=arm64 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else # Don't distinguish little-endian and big-endian arm, since they # don't require different machine code for simple operations and # since the user can distinguish them through the preprocessor # defines __ARMEL__ vs. __ARMEB__. # But distinguish arm which passes floating-point arguments and # return values in integer registers (r0, r1, ...) - this is # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which # passes them in float registers (s0, s1, ...) and double registers # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer # sets the preprocessor defines __ARM_PCS (for the first case) and # __ARM_PCS_VFP (for the second case), but older GCC does not. echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c # Look for a reference to the register d0 in the .s file. { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null 2>&1 if LC_ALL=C grep -E 'd0,' conftest.$gl_asmext >/dev/null; then gl_cv_host_cpu_c_abi=armhf else gl_cv_host_cpu_c_abi=arm fi rm -f conftest* fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=hppa64 else gl_cv_host_cpu_c_abi=hppa fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _ILP32 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=ia64-ilp32 else gl_cv_host_cpu_c_abi=ia64 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=mips64 else # In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIN32. # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIO32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if (_MIPS_SIM == _ABIN32) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=mipsn32 else gl_cv_host_cpu_c_abi=mips fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # On powerpc64, there are two ABIs on Linux: The AIX compatible # one and the ELFv2 one. The latter defines _CALL_ELF=2. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _CALL_ELF && _CALL_ELF == 2 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=powerpc64-elfv2 else gl_cv_host_cpu_c_abi=powerpc64 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else gl_cv_host_cpu_c_abi=powerpc fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; rs6000 ) gl_cv_host_cpu_c_abi=powerpc ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=s390x else gl_cv_host_cpu_c_abi=s390 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=sparc64 else gl_cv_host_cpu_c_abi=sparc fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; *) gl_cv_host_cpu_c_abi="$host_cpu" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi" >&5 $as_echo "$gl_cv_host_cpu_c_abi" >&6; } HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" # This was # AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) # earlier, but KAI C++ 3.2d doesn't like this. sed -e 's/-/_/g' >> confdefs.h <' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_limits_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_limits_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'limits.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_limits_h gl_cv_next_limits_h='"'$gl_header'"' else gl_cv_next_limits_h='<'limits.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_limits_h" >&5 $as_echo "$gl_cv_next_limits_h" >&6; } fi NEXT_LIMITS_H=$gl_cv_next_limits_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'limits.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_limits_h fi NEXT_AS_FIRST_DIRECTIVE_LIMITS_H=$gl_next_as_first_directive { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether limits.h has ULLONG_WIDTH etc." >&5 $as_echo_n "checking whether limits.h has ULLONG_WIDTH etc.... " >&6; } if ${gl_cv_header_limits_width+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include int ullw = ULLONG_WIDTH; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_limits_width=yes else gl_cv_header_limits_width=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_width" >&5 $as_echo "$gl_cv_header_limits_width" >&6; } if test "$gl_cv_header_limits_width" = yes; then LIMITS_H= else LIMITS_H=limits.h fi if test -n "$LIMITS_H"; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # 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 if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 $as_echo_n "checking for ld... " >&6; } elif test "$GCC" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test -n "$LD"; then # Let the user override the test with a path. : else if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) acl_output=`($CC -print-prog-name=ld) 2>&5` ;; esac case $acl_output in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` done # Got the pathname. No search in PATH is needed. acl_cv_path_LD="$acl_output" ac_prog= ;; "") # If it fails, then pretend we aren't using GCC. ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac fi if test -n "$ac_prog"; then # Search for $ac_prog in $PATH. acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_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 `"$acl_cv_path_LD" -v 2>&1 conftest.$ac_ext /* end confdefs.h. */ #if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # The compiler produces 64-bit code. Add option '-b64' so that the # linker groks 64-bit object files. case "$acl_cv_path_LD " in *" -b64 "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; sparc64-*-netbsd*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else # The compiler produces 32-bit code. Add option '-m elf32_sparc' # so that the linker groks 32-bit object files. case "$acl_cv_path_LD " in *" -m elf32_sparc "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; esac fi LD="$acl_cv_path_LD" fi 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; } as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 fi { $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 ${acl_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 "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 $as_echo_n "checking for the common suffixes of directories in the library search path... " >&6; } if ${acl_cv_libdirstems+:} false; then : $as_echo_n "(cached) " >&6 else acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 $as_echo_n "checking for 64-bit host... " >&6; } if ${gl_cv_solaris_64bit+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _LP64 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_solaris_64bit=yes else gl_cv_solaris_64bit=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 $as_echo "$gl_cv_solaris_64bit" >&6; } if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) case "$gl_cv_host_cpu_c_abi" in i386 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | s390 | sparc) ;; *) # x86_64 | arm64 | hppa64 | ia64 | mips64 | powerpc64* | s390x | sparc64 | ... searchpath=`(if test -f /usr/bin/gcc \ && LC_ALL=C /usr/bin/gcc -print-search-dirs >/dev/null 2>/dev/null; then \ LC_ALL=C /usr/bin/gcc -print-search-dirs; \ else \ LC_ALL=C $CC -print-search-dirs; \ fi) 2>/dev/null \ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 $as_echo "$acl_cv_libdirstems" >&6; } # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2. acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'` gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 $as_echo_n "checking whether imported symbols can be declared weak... " >&6; } if ${gl_cv_have_weak+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main () { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1; then : gl_cv_have_weak="guessing yes" else gl_cv_have_weak="guessing no" fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_have_weak=yes else gl_cv_have_weak=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 case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 $as_echo "$gl_cv_have_weak" >&6; } if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks . It's added above, in gl_THREADLIB_EARLY_BODY. ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes; then : gl_have_pthread_h=yes else gl_have_pthread_h=no fi if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads gl_have_pthread= # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include pthread_mutex_t m; pthread_mutexattr_t ma; int main () { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_have_pthread=yes LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$save_LIBS test -n "$gl_have_pthread" && break done # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 $as_echo_n "checking for pthread_kill in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_kill+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_kill (); int main () { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_kill=yes else ac_cv_lib_pthread_pthread_kill=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_pthread_pthread_kill" >&5 $as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.1-9 | solaris2.1-9.* | hpux*) $as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac fi elif test -z "$gl_have_pthread"; then # Some library is needed. Try libpthread and libc_r. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 $as_echo_n "checking for pthread_kill in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_kill+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_kill (); int main () { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_kill=yes else ac_cv_lib_pthread_pthread_kill=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_pthread_pthread_kill" >&5 $as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : gl_have_pthread=yes LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread fi if test -z "$gl_have_pthread"; then # For FreeBSD 4. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 $as_echo_n "checking for pthread_kill in -lc_r... " >&6; } if ${ac_cv_lib_c_r_pthread_kill+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_kill (); int main () { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_r_pthread_kill=yes else ac_cv_lib_c_r_pthread_kill=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_c_r_pthread_kill" >&5 $as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; } if test "x$ac_cv_lib_c_r_pthread_kill" = xyes; then : gl_have_pthread=yes LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r fi fi fi if test -n "$gl_have_pthread"; then gl_threads_api=posix $as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then $as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= fi fi fi fi fi if test -z "$gl_have_pthread"; then if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then gl_have_solaristhread= gl_save_LIBS="$LIBS" LIBS="$LIBS -lthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { thr_self(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_have_solaristhread=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_save_LIBS" if test -n "$gl_have_solaristhread"; then gl_threads_api=solaris LIBTHREAD=-lthread LTLIBTHREAD=-lthread LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" $as_echo "#define USE_SOLARIS_THREADS 1" >>confdefs.h if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then $as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= fi fi fi fi if test "$gl_use_threads" = pth; then gl_save_CPPFLAGS="$CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5 $as_echo_n "checking how to link with libpth... " >&6; } if ${ac_cv_libpth_libs+:} false; then : $as_echo_n "(cached) " >&6 else use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libpth-prefix was given. if test "${with_libpth_prefix+set}" = set; then : withval=$with_libpth_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBPTH= LTLIBPTH= INCPTH= LIBPTH_PREFIX= HAVE_LIBPTH= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='pth ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBPTH="${LIBPTH}${LIBPTH:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" else LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_a" else LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'pth'; then LIBPTH_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'pth'; then LIBPTH_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCPTH="${INCPTH}${INCPTH:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBPTH="${LIBPTH}${LIBPTH:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBPTH="${LIBPTH}${LIBPTH:+ }$dep" LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$dep" ;; esac done fi else LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-R$found_dir" done fi ac_cv_libpth_libs="$LIBPTH" ac_cv_libpth_ltlibs="$LTLIBPTH" ac_cv_libpth_cppflags="$INCPTH" ac_cv_libpth_prefix="$LIBPTH_PREFIX" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5 $as_echo "$ac_cv_libpth_libs" >&6; } LIBPTH="$ac_cv_libpth_libs" LTLIBPTH="$ac_cv_libpth_ltlibs" INCPTH="$ac_cv_libpth_cppflags" LIBPTH_PREFIX="$ac_cv_libpth_prefix" for element in $INCPTH; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done HAVE_LIBPTH=yes gl_have_pth= gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBPTH" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pth_self(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_have_pth=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_save_LIBS" if test -n "$gl_have_pth"; then gl_threads_api=pth LIBTHREAD="$LIBPTH" LTLIBTHREAD="$LTLIBPTH" LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" $as_echo "#define USE_PTH_THREADS 1" >>confdefs.h if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then $as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= fi fi else CPPFLAGS="$gl_save_CPPFLAGS" fi fi if test -z "$gl_have_pthread"; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=windows $as_echo "#define USE_WINDOWS_THREADS 1" >>confdefs.h fi ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 $as_echo_n "checking for multithread API to use... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 $as_echo "$gl_threads_api" >&6; } GNULIB__EXIT=0; GNULIB_ATOLL=0; GNULIB_CALLOC_POSIX=0; GNULIB_CANONICALIZE_FILE_NAME=0; GNULIB_GETLOADAVG=0; GNULIB_GETSUBOPT=0; GNULIB_GRANTPT=0; GNULIB_MALLOC_POSIX=0; GNULIB_MBTOWC=0; GNULIB_MKDTEMP=0; GNULIB_MKOSTEMP=0; GNULIB_MKOSTEMPS=0; GNULIB_MKSTEMP=0; GNULIB_MKSTEMPS=0; GNULIB_POSIX_OPENPT=0; GNULIB_PTSNAME=0; GNULIB_PTSNAME_R=0; GNULIB_PUTENV=0; GNULIB_QSORT_R=0; GNULIB_RANDOM=0; GNULIB_RANDOM_R=0; GNULIB_REALLOCARRAY=0; GNULIB_REALLOC_POSIX=0; GNULIB_REALPATH=0; GNULIB_RPMATCH=0; GNULIB_SECURE_GETENV=0; GNULIB_SETENV=0; GNULIB_STRTOD=0; GNULIB_STRTOLL=0; GNULIB_STRTOULL=0; GNULIB_SYSTEM_POSIX=0; GNULIB_UNLOCKPT=0; GNULIB_UNSETENV=0; GNULIB_WCTOMB=0; HAVE__EXIT=1; HAVE_ATOLL=1; HAVE_CANONICALIZE_FILE_NAME=1; HAVE_DECL_GETLOADAVG=1; HAVE_GETSUBOPT=1; HAVE_GRANTPT=1; HAVE_DECL_INITSTATE=1; HAVE_MKDTEMP=1; HAVE_MKOSTEMP=1; HAVE_MKOSTEMPS=1; HAVE_MKSTEMP=1; HAVE_MKSTEMPS=1; HAVE_POSIX_OPENPT=1; HAVE_PTSNAME=1; HAVE_PTSNAME_R=1; HAVE_QSORT_R=1; HAVE_RANDOM=1; HAVE_RANDOM_H=1; HAVE_RANDOM_R=1; HAVE_REALLOCARRAY=1; HAVE_REALPATH=1; HAVE_RPMATCH=1; HAVE_SECURE_GETENV=1; HAVE_SETENV=1; HAVE_DECL_SETENV=1; HAVE_DECL_SETSTATE=1; HAVE_STRTOD=1; HAVE_STRTOLL=1; HAVE_STRTOULL=1; HAVE_STRUCT_RANDOM_DATA=1; HAVE_SYS_LOADAVG_H=0; HAVE_UNLOCKPT=1; HAVE_DECL_UNSETENV=1; REPLACE_CALLOC=0; REPLACE_CANONICALIZE_FILE_NAME=0; REPLACE_MALLOC=0; REPLACE_MBTOWC=0; REPLACE_MKSTEMP=0; REPLACE_PTSNAME=0; REPLACE_PTSNAME_R=0; REPLACE_PUTENV=0; REPLACE_QSORT_R=0; REPLACE_RANDOM_R=0; REPLACE_REALLOC=0; REPLACE_REALPATH=0; REPLACE_SETENV=0; REPLACE_STRTOD=0; REPLACE_UNSETENV=0; REPLACE_WCTOMB=0; { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc are POSIX compliant" >&5 $as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; } if ${gl_cv_func_malloc_posix+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_malloc_posix=yes else gl_cv_func_malloc_posix=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5 $as_echo "$gl_cv_func_malloc_posix" >&6; } GNULIB_EXPLICIT_BZERO=0; GNULIB_FFSL=0; GNULIB_FFSLL=0; GNULIB_MEMCHR=0; GNULIB_MEMMEM=0; GNULIB_MEMPCPY=0; GNULIB_MEMRCHR=0; GNULIB_RAWMEMCHR=0; GNULIB_STPCPY=0; GNULIB_STPNCPY=0; GNULIB_STRCHRNUL=0; GNULIB_STRDUP=0; GNULIB_STRNCAT=0; GNULIB_STRNDUP=0; GNULIB_STRNLEN=0; GNULIB_STRPBRK=0; GNULIB_STRSEP=0; GNULIB_STRSTR=0; GNULIB_STRCASESTR=0; GNULIB_STRTOK_R=0; GNULIB_MBSLEN=0; GNULIB_MBSNLEN=0; GNULIB_MBSCHR=0; GNULIB_MBSRCHR=0; GNULIB_MBSSTR=0; GNULIB_MBSCASECMP=0; GNULIB_MBSNCASECMP=0; GNULIB_MBSPCASECMP=0; GNULIB_MBSCASESTR=0; GNULIB_MBSCSPN=0; GNULIB_MBSPBRK=0; GNULIB_MBSSPN=0; GNULIB_MBSSEP=0; GNULIB_MBSTOK_R=0; GNULIB_STRERROR=0; GNULIB_STRERROR_R=0; GNULIB_STRSIGNAL=0; GNULIB_STRVERSCMP=0; HAVE_MBSLEN=0; HAVE_EXPLICIT_BZERO=1; HAVE_FFSL=1; HAVE_FFSLL=1; HAVE_MEMCHR=1; HAVE_DECL_MEMMEM=1; HAVE_MEMPCPY=1; HAVE_DECL_MEMRCHR=1; HAVE_RAWMEMCHR=1; HAVE_STPCPY=1; HAVE_STPNCPY=1; HAVE_STRCHRNUL=1; HAVE_DECL_STRDUP=1; HAVE_DECL_STRNDUP=1; HAVE_DECL_STRNLEN=1; HAVE_STRPBRK=1; HAVE_STRSEP=1; HAVE_STRCASESTR=1; HAVE_DECL_STRTOK_R=1; HAVE_DECL_STRERROR_R=1; HAVE_DECL_STRSIGNAL=1; HAVE_STRVERSCMP=1; REPLACE_MEMCHR=0; REPLACE_MEMMEM=0; REPLACE_STPNCPY=0; REPLACE_STRCHRNUL=0; REPLACE_STRDUP=0; REPLACE_STRNCAT=0; REPLACE_STRNDUP=0; REPLACE_STRNLEN=0; REPLACE_STRSTR=0; REPLACE_STRCASESTR=0; REPLACE_STRTOK_R=0; REPLACE_STRERROR=0; REPLACE_STRERROR_R=0; REPLACE_STRSIGNAL=0; UNDEFINE_STRTOK_R=0; # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" if test "x$ac_cv_func_mmap" = xyes; then : gl_have_mmap=yes else gl_have_mmap=no fi # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5 $as_echo_n "checking for MAP_ANONYMOUS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef MAP_ANONYMOUS I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1; then : gl_have_mmap_anonymous=yes fi rm -f conftest* if test $gl_have_mmap_anonymous != yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef MAP_ANON I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1; then : $as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h gl_have_mmap_anonymous=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5 $as_echo "$gl_have_mmap_anonymous" >&6; } if test $gl_have_mmap_anonymous = yes; then $as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h fi fi : : if test $HAVE_MEMCHR = 1; then # Detect platform-specific bugs in some versions of glibc: # memchr should not dereference anything with length 0 # https://bugzilla.redhat.com/show_bug.cgi?id=499689 # memchr should not dereference overestimated length after a match # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 # https://sourceware.org/bugzilla/show_bug.cgi?id=10162 # Assume that memchr works on platforms that lack mprotect. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5 $as_echo_n "checking whether memchr works... " >&6; } if ${gl_cv_func_memchr_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_memchr_works="guessing yes" ;; # Be pessimistic for now. *) gl_cv_func_memchr_works="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_SYS_MMAN_H # include # include # include # include # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif int main () { int result = 0; char *fence = NULL; #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) fence = two_pages + pagesize; } #endif if (fence) { if (memchr (fence, 0, 0)) result |= 1; strcpy (fence - 9, "12345678"); if (memchr (fence - 9, 0, 79) != fence - 1) result |= 2; if (memchr (fence - 1, 0, 3) != fence - 1) result |= 4; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_memchr_works=yes else gl_cv_func_memchr_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: $gl_cv_func_memchr_works" >&5 $as_echo "$gl_cv_func_memchr_works" >&6; } case "$gl_cv_func_memchr_works" in *yes) ;; *) REPLACE_MEMCHR=1 ;; esac fi ac_fn_c_check_decl "$LINENO" "memmem" "ac_cv_have_decl_memmem" "$ac_includes_default" if test "x$ac_cv_have_decl_memmem" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_MEMMEM $ac_have_decl _ACEOF : if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 $as_echo "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi gl_cv_c_multiarch=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __cplusplus typedef bool Bool; #else typedef _Bool Bool; #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ Bool q = true; Bool *pq = &q; bool *qq = &q; int main () { bool e = &s; *pq |= q; *pq |= ! q; *qq |= q; *qq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq + !qq); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes else ac_cv_header_stdbool_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_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi REPLACE_NULL=0; HAVE_MAX_ALIGN_T=1; HAVE_WCHAR_T=1; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 $as_echo_n "checking for wchar_t... " >&6; } if ${gt_cv_c_wchar_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include wchar_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wchar_t=yes else gt_cv_c_wchar_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 $as_echo "$gt_cv_c_wchar_t" >&6; } if test $gt_cv_c_wchar_t = yes; then $as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 $as_echo_n "checking for wint_t... " >&6; } if ${gt_cv_c_wint_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include wint_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wint_t=yes else gt_cv_c_wint_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 $as_echo "$gt_cv_c_wint_t" >&6; } if test $gt_cv_c_wint_t = yes; then $as_echo "#define HAVE_WINT_T 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wint_t is too small" >&5 $as_echo_n "checking whether wint_t is too small... " >&6; } if ${gl_cv_type_wint_t_too_small+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include #endif #include int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_type_wint_t_too_small=no else gl_cv_type_wint_t_too_small=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_too_small" >&5 $as_echo "$gl_cv_type_wint_t_too_small" >&6; } if test $gl_cv_type_wint_t_too_small = yes; then GNULIB_OVERRIDES_WINT_T=1 else GNULIB_OVERRIDES_WINT_T=0 fi else GNULIB_OVERRIDES_WINT_T=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 $as_echo_n "checking for unsigned long long int... " >&6; } if ${ac_cv_type_unsigned_long_long_int+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_type_unsigned_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For now, do not test the preprocessor; as of 2007 there are too many implementations with broken preprocessors. Perhaps this can be revisited in 2012. In the meantime, code should not expect #if to work with literals wider than 32 bits. */ /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63; int main () { /* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else ac_cv_type_unsigned_long_long_int=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 $as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } if test $ac_cv_type_unsigned_long_long_int = yes; then $as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 $as_echo_n "checking for long long int... " >&6; } if ${ac_cv_type_long_long_int+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_type_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int if test $ac_cv_type_long_long_int = yes; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef LLONG_MAX # define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) # define LLONG_MAX (HALF - 1 + HALF) #endif int main () { long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_type_long_long_int=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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 $as_echo "$ac_cv_type_long_long_int" >&6; } if test $ac_cv_type_long_long_int = yes; then $as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h fi if test $ac_cv_type_long_long_int = yes; then HAVE_LONG_LONG_INT=1 else HAVE_LONG_LONG_INT=0 fi if test $ac_cv_type_unsigned_long_long_int = yes; then HAVE_UNSIGNED_LONG_LONG_INT=1 else HAVE_UNSIGNED_LONG_LONG_INT=0 fi : if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi : if test $gl_cv_have_include_next = yes; then gl_cv_next_stdint_h='<'stdint.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_stdint_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdint.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdint_h gl_cv_next_stdint_h='"'$gl_header'"' else gl_cv_next_stdint_h='<'stdint.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5 $as_echo "$gl_cv_next_stdint_h" >&6; } fi NEXT_STDINT_H=$gl_cv_next_stdint_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdint.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdint_h fi NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi if test $ac_cv_header_stdint_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5 $as_echo_n "checking whether stdint.h conforms to C99... " >&6; } if ${gl_cv_header_working_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_working_stdint_h=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in " #endif /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ #if 201112 <= __STDC_VERSION__ int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0 / ia64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #include #include #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; int main () { const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_header_working_stdint_h=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5 $as_echo "$gl_cv_header_working_stdint_h" >&6; } fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 STDINT_H=stdint.h case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h predates C++11" >&5 $as_echo_n "checking whether stdint.h predates C++11... " >&6; } if ${gl_cv_header_stdint_predates_cxx11_h+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_stdint_predates_cxx11_h=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_stdint_predates_cxx11_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_predates_cxx11_h" >&5 $as_echo "$gl_cv_header_stdint_predates_cxx11_h" >&6; } if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then $as_echo "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h $as_echo "#define __STDC_LIMIT_MACROS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h has UINTMAX_WIDTH etc." >&5 $as_echo_n "checking whether stdint.h has UINTMAX_WIDTH etc.... " >&6; } if ${gl_cv_header_stdint_width+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_stdint_width=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif int iw = UINTMAX_WIDTH; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_stdint_width=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_width" >&5 $as_echo "$gl_cv_header_stdint_width" >&6; } if test "$gl_cv_header_stdint_width" = yes; then STDINT_H= fi ;; *) for ac_header in sys/inttypes.h sys/bitypes.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 if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 $as_echo_n "checking for bit size of $gltype... " >&6; } if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #include "; then : else result=unknown fi eval gl_cv_bitsizeof_${gltype}=\$result fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` cat >>confdefs.h <<_ACEOF #define BITSIZEOF_${GLTYPE} $result _ACEOF eval BITSIZEOF_${GLTYPE}=\$result done fi for gltype in sig_atomic_t wchar_t wint_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 $as_echo_n "checking for bit size of $gltype... " >&6; } if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #include "; then : else result=unknown fi eval gl_cv_bitsizeof_${gltype}=\$result fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` cat >>confdefs.h <<_ACEOF #define BITSIZEOF_${GLTYPE} $result _ACEOF eval BITSIZEOF_${GLTYPE}=\$result done for gltype in sig_atomic_t wchar_t wint_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5 $as_echo_n "checking whether $gltype is signed... " >&6; } if eval \${gl_cv_type_${gltype}_signed+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif int verify[2 * (($gltype) -1 < ($gltype) 0) - 1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : result=yes else result=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext eval gl_cv_type_${gltype}_signed=\$result fi eval ac_res=\$gl_cv_type_${gltype}_signed { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_SIGNED_${GLTYPE} 1 _ACEOF eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 $as_echo_n "checking for $gltype integer literal suffix... " >&6; } if eval \${gl_cv_type_${gltype}_suffix+:} false; then : $as_echo_n "(cached) " >&6 else eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif extern $gltype foo; extern $gltype1 foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done fi eval ac_res=\$gl_cv_type_${gltype}_suffix { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result cat >>confdefs.h <<_ACEOF #define ${GLTYPE}_SUFFIX $result _ACEOF done fi for gltype in sig_atomic_t wchar_t wint_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 $as_echo_n "checking for $gltype integer literal suffix... " >&6; } if eval \${gl_cv_type_${gltype}_suffix+:} false; then : $as_echo_n "(cached) " >&6 else eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif extern $gltype foo; extern $gltype1 foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done fi eval ac_res=\$gl_cv_type_${gltype}_suffix { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result cat >>confdefs.h <<_ACEOF #define ${GLTYPE}_SUFFIX $result _ACEOF done if test $GNULIB_OVERRIDES_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ;; esac LIMITS_H=limits.h if test -n "$LIMITS_H"; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi if test -n "$STDINT_H"; then GL_GENERATE_STDINT_H_TRUE= GL_GENERATE_STDINT_H_FALSE='#' else GL_GENERATE_STDINT_H_TRUE='#' GL_GENERATE_STDINT_H_FALSE= fi GNULIB_DPRINTF=0; GNULIB_FCLOSE=0; GNULIB_FDOPEN=0; GNULIB_FFLUSH=0; GNULIB_FGETC=0; GNULIB_FGETS=0; GNULIB_FOPEN=0; GNULIB_FPRINTF=0; GNULIB_FPRINTF_POSIX=0; GNULIB_FPURGE=0; GNULIB_FPUTC=0; GNULIB_FPUTS=0; GNULIB_FREAD=0; GNULIB_FREOPEN=0; GNULIB_FSCANF=0; GNULIB_FSEEK=0; GNULIB_FSEEKO=0; GNULIB_FTELL=0; GNULIB_FTELLO=0; GNULIB_FWRITE=0; GNULIB_GETC=0; GNULIB_GETCHAR=0; GNULIB_GETDELIM=0; GNULIB_GETLINE=0; GNULIB_OBSTACK_PRINTF=0; GNULIB_OBSTACK_PRINTF_POSIX=0; GNULIB_PCLOSE=0; GNULIB_PERROR=0; GNULIB_POPEN=0; GNULIB_PRINTF=0; GNULIB_PRINTF_POSIX=0; GNULIB_PUTC=0; GNULIB_PUTCHAR=0; GNULIB_PUTS=0; GNULIB_REMOVE=0; GNULIB_RENAME=0; GNULIB_RENAMEAT=0; GNULIB_SCANF=0; GNULIB_SNPRINTF=0; GNULIB_SPRINTF_POSIX=0; GNULIB_STDIO_H_NONBLOCKING=0; GNULIB_STDIO_H_SIGPIPE=0; GNULIB_TMPFILE=0; GNULIB_VASPRINTF=0; GNULIB_VFSCANF=0; GNULIB_VSCANF=0; GNULIB_VDPRINTF=0; GNULIB_VFPRINTF=0; GNULIB_VFPRINTF_POSIX=0; GNULIB_VPRINTF=0; GNULIB_VPRINTF_POSIX=0; GNULIB_VSNPRINTF=0; GNULIB_VSPRINTF_POSIX=0; HAVE_DECL_FPURGE=1; HAVE_DECL_FSEEKO=1; HAVE_DECL_FTELLO=1; HAVE_DECL_GETDELIM=1; HAVE_DECL_GETLINE=1; HAVE_DECL_OBSTACK_PRINTF=1; HAVE_DECL_SNPRINTF=1; HAVE_DECL_VSNPRINTF=1; HAVE_DPRINTF=1; HAVE_FSEEKO=1; HAVE_FTELLO=1; HAVE_PCLOSE=1; HAVE_POPEN=1; HAVE_RENAMEAT=1; HAVE_VASPRINTF=1; HAVE_VDPRINTF=1; REPLACE_DPRINTF=0; REPLACE_FCLOSE=0; REPLACE_FDOPEN=0; REPLACE_FFLUSH=0; REPLACE_FOPEN=0; REPLACE_FPRINTF=0; REPLACE_FPURGE=0; REPLACE_FREOPEN=0; REPLACE_FSEEK=0; REPLACE_FSEEKO=0; REPLACE_FTELL=0; REPLACE_FTELLO=0; REPLACE_GETDELIM=0; REPLACE_GETLINE=0; REPLACE_OBSTACK_PRINTF=0; REPLACE_PERROR=0; REPLACE_POPEN=0; REPLACE_PRINTF=0; REPLACE_REMOVE=0; REPLACE_RENAME=0; REPLACE_RENAMEAT=0; REPLACE_SNPRINTF=0; REPLACE_SPRINTF=0; REPLACE_STDIO_READ_FUNCS=0; REPLACE_STDIO_WRITE_FUNCS=0; REPLACE_TMPFILE=0; REPLACE_VASPRINTF=0; REPLACE_VDPRINTF=0; REPLACE_VFPRINTF=0; REPLACE_VPRINTF=0; REPLACE_VSNPRINTF=0; REPLACE_VSPRINTF=0; REPLACE_STRERROR_0=0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5 $as_echo_n "checking whether strerror(0) succeeds... " >&6; } if ${gl_cv_func_strerror_0_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_strerror_0_works="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strerror_0_works=yes else gl_cv_func_strerror_0_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: $gl_cv_func_strerror_0_works" >&5 $as_echo "$gl_cv_func_strerror_0_works" >&6; } case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 $as_echo "#define REPLACE_STRERROR_0 1" >>confdefs.h ;; esac : if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strerror_r with POSIX signature" >&5 $as_echo_n "checking for strerror_r with POSIX signature... " >&6; } if ${gl_cv_func_strerror_r_posix_signature+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int strerror_r (int, char *, size_t); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_strerror_r_posix_signature=yes else gl_cv_func_strerror_r_posix_signature=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_posix_signature" >&5 $as_echo "$gl_cv_func_strerror_r_posix_signature" >&6; } if test $gl_cv_func_strerror_r_posix_signature = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r works" >&5 $as_echo_n "checking whether strerror_r works... " >&6; } if ${gl_cv_func_strerror_r_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess no on AIX. aix*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on HP-UX. hpux*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on BSD variants. *bsd*) gl_cv_func_strerror_r_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_strerror_r_works="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { int result = 0; char buf[79]; if (strerror_r (EACCES, buf, 0) < 0) result |= 1; errno = 0; if (strerror_r (EACCES, buf, sizeof buf) != 0) result |= 2; strcpy (buf, "Unknown"); if (strerror_r (0, buf, sizeof buf) != 0) result |= 4; if (errno) result |= 8; if (strstr (buf, "nknown") || strstr (buf, "ndefined")) result |= 0x10; errno = 0; *buf = 0; if (strerror_r (-3, buf, sizeof buf) < 0) result |= 0x20; if (errno) result |= 0x40; if (!*buf) result |= 0x80; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strerror_r_works=yes else gl_cv_func_strerror_r_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: $gl_cv_func_strerror_r_works" >&5 $as_echo "$gl_cv_func_strerror_r_works" >&6; } else : if test $ac_cv_func___xpg_strerror_r = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __xpg_strerror_r works" >&5 $as_echo_n "checking whether __xpg_strerror_r works... " >&6; } if ${gl_cv_func_strerror_r_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_func_strerror_r_works="guessing no" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif int __xpg_strerror_r(int, char *, size_t); int main () { int result = 0; char buf[256] = "^"; char copy[256]; char *str = strerror (-1); strcpy (copy, str); if (__xpg_strerror_r (-2, buf, 1) == 0) result |= 1; if (*buf) result |= 2; __xpg_strerror_r (-2, buf, 256); if (strcmp (str, copy)) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strerror_r_works=yes else gl_cv_func_strerror_r_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: $gl_cv_func_strerror_r_works" >&5 $as_echo "$gl_cv_func_strerror_r_works" >&6; } fi fi fi fi ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" if test "x$ac_cv_have_decl_strerror_r" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRERROR_R $ac_have_decl _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 $as_echo_n "checking for C/C++ restrict keyword... " >&6; } if ${ac_cv_c_restrict+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. for ac_kw in __restrict __restrict__ _Restrict restrict; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } int main () { int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_restrict=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_restrict" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 $as_echo "$ac_cv_c_restrict" >&6; } case $ac_cv_c_restrict in restrict) ;; no) $as_echo "#define restrict /**/" >>confdefs.h ;; *) cat >>confdefs.h <<_ACEOF #define restrict $ac_cv_c_restrict _ACEOF ;; esac if test $gl_cv_have_include_next = yes; then gl_cv_next_string_h='<'string.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_string_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'string.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_string_h gl_cv_next_string_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5 $as_echo "$gl_cv_next_string_h" >&6; } fi NEXT_STRING_H=$gl_cv_next_string_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'string.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_string_h fi NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive for gl_func in ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strsignal strverscmp; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done ac_fn_c_check_decl "$LINENO" "strndup" "ac_cv_have_decl_strndup" "$ac_includes_default" if test "x$ac_cv_have_decl_strndup" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRNDUP $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default" if test "x$ac_cv_have_decl_strnlen" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRNLEN $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "strtok_r" "ac_cv_have_decl_strtok_r" "$ac_includes_default" if test "x$ac_cv_have_decl_strtok_r" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRTOK_R $ac_have_decl _ACEOF WINDOWS_64_BIT_OFF_T=0 $as_echo "#define _USE_STD_STAT 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_types_h='<'sys/types.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_sys_types_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/types.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_types_h gl_cv_next_sys_types_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5 $as_echo "$gl_cv_next_sys_types_h" >&6; } fi NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/types.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_types_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive WINDOWS_STAT_INODES=0 : if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 $as_echo_n "checking for inttypes.h... " >&6; } if ${gl_cv_header_inttypes_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_inttypes_h=yes else gl_cv_header_inttypes_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5 $as_echo "$gl_cv_header_inttypes_h" >&6; } if test $gl_cv_header_inttypes_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H_WITH_UINTMAX 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5 $as_echo_n "checking for stdint.h... " >&6; } if ${gl_cv_header_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_stdint_h=yes else gl_cv_header_stdint_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5 $as_echo "$gl_cv_header_stdint_h" >&6; } if test $gl_cv_header_stdint_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H_WITH_UINTMAX 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 $as_echo_n "checking for intmax_t... " >&6; } if ${gt_cv_c_intmax_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_STDINT_H_WITH_UINTMAX #include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include #endif int main () { intmax_t x = -1; return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_intmax_t=yes else gt_cv_c_intmax_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5 $as_echo "$gt_cv_c_intmax_t" >&6; } if test $gt_cv_c_intmax_t = yes; then $as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h else test $ac_cv_type_long_long_int = yes \ && ac_type='long long' \ || ac_type='long' cat >>confdefs.h <<_ACEOF #define intmax_t $ac_type _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5 $as_echo_n "checking where to find the exponent in a 'double'... " >&6; } if ${gl_cv_cc_double_expbit0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined arm || defined __arm || defined __arm__ mixed_endianness #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "mixed_endianness" >/dev/null 2>&1; then : gl_cv_cc_double_expbit0="unknown" else : if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi : case $ac_cv_c_bigendian in #( yes) gl_cv_cc_double_expbit0="word 0 bit 20";; #( no) gl_cv_cc_double_expbit0="word 1 bit 20" ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) gl_cv_cc_double_expbit0="unknown" ;; esac fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (double x) { memory_double m; size_t i; /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ memset (&m, 0, sizeof (memory_double)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25); add_to_ored_words (0.5); add_to_ored_words (1.0); add_to_ored_words (2.0); add_to_ored_words (4.0); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_cc_double_expbit0=`cat conftest.out` else gl_cv_cc_double_expbit0="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_expbit0" >&5 $as_echo "$gl_cv_cc_double_expbit0" >&6; } case "$gl_cv_cc_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` cat >>confdefs.h <<_ACEOF #define DBL_EXPBIT0_WORD $word _ACEOF cat >>confdefs.h <<_ACEOF #define DBL_EXPBIT0_BIT $bit _ACEOF ;; esac : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf returns a byte count as in C99" >&5 $as_echo_n "checking whether snprintf returns a byte count as in C99... " >&6; } if ${gl_cv_func_snprintf_retval_c99+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_retval_c99="guessing no";; openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_retval_c99="guessing no";; netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on MSVC, no on mingw. mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1; then : gl_cv_func_snprintf_retval_c99="guessing yes" else gl_cv_func_snprintf_retval_c99="guessing no" fi rm -f conftest* ;; # If we don't know, assume the worst. *) gl_cv_func_snprintf_retval_c99="guessing no";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) return 1; if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) return 2; if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) return 3; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_snprintf_retval_c99=yes else gl_cv_func_snprintf_retval_c99=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: $gl_cv_func_snprintf_retval_c99" >&5 $as_echo "$gl_cv_func_snprintf_retval_c99" >&6; } for ac_func in snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb 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 ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include " if test "x$ac_cv_have_decl__snprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL__SNPRINTF $ac_have_decl _ACEOF case "$gl_cv_func_snprintf_retval_c99" in *yes) $as_echo "#define HAVE_SNPRINTF_RETVAL_C99 1" >>confdefs.h ;; esac GNULIB_BTOWC=0; GNULIB_WCTOB=0; GNULIB_MBSINIT=0; GNULIB_MBRTOWC=0; GNULIB_MBRLEN=0; GNULIB_MBSRTOWCS=0; GNULIB_MBSNRTOWCS=0; GNULIB_WCRTOMB=0; GNULIB_WCSRTOMBS=0; GNULIB_WCSNRTOMBS=0; GNULIB_WCWIDTH=0; GNULIB_WMEMCHR=0; GNULIB_WMEMCMP=0; GNULIB_WMEMCPY=0; GNULIB_WMEMMOVE=0; GNULIB_WMEMSET=0; GNULIB_WCSLEN=0; GNULIB_WCSNLEN=0; GNULIB_WCSCPY=0; GNULIB_WCPCPY=0; GNULIB_WCSNCPY=0; GNULIB_WCPNCPY=0; GNULIB_WCSCAT=0; GNULIB_WCSNCAT=0; GNULIB_WCSCMP=0; GNULIB_WCSNCMP=0; GNULIB_WCSCASECMP=0; GNULIB_WCSNCASECMP=0; GNULIB_WCSCOLL=0; GNULIB_WCSXFRM=0; GNULIB_WCSDUP=0; GNULIB_WCSCHR=0; GNULIB_WCSRCHR=0; GNULIB_WCSCSPN=0; GNULIB_WCSSPN=0; GNULIB_WCSPBRK=0; GNULIB_WCSSTR=0; GNULIB_WCSTOK=0; GNULIB_WCSWIDTH=0; GNULIB_WCSFTIME=0; HAVE_BTOWC=1; HAVE_MBSINIT=1; HAVE_MBRTOWC=1; HAVE_MBRLEN=1; HAVE_MBSRTOWCS=1; HAVE_MBSNRTOWCS=1; HAVE_WCRTOMB=1; HAVE_WCSRTOMBS=1; HAVE_WCSNRTOMBS=1; HAVE_WMEMCHR=1; HAVE_WMEMCMP=1; HAVE_WMEMCPY=1; HAVE_WMEMMOVE=1; HAVE_WMEMSET=1; HAVE_WCSLEN=1; HAVE_WCSNLEN=1; HAVE_WCSCPY=1; HAVE_WCPCPY=1; HAVE_WCSNCPY=1; HAVE_WCPNCPY=1; HAVE_WCSCAT=1; HAVE_WCSNCAT=1; HAVE_WCSCMP=1; HAVE_WCSNCMP=1; HAVE_WCSCASECMP=1; HAVE_WCSNCASECMP=1; HAVE_WCSCOLL=1; HAVE_WCSXFRM=1; HAVE_WCSDUP=1; HAVE_WCSCHR=1; HAVE_WCSRCHR=1; HAVE_WCSCSPN=1; HAVE_WCSSPN=1; HAVE_WCSPBRK=1; HAVE_WCSSTR=1; HAVE_WCSTOK=1; HAVE_WCSWIDTH=1; HAVE_WCSFTIME=1; HAVE_DECL_WCTOB=1; HAVE_DECL_WCWIDTH=1; REPLACE_MBSTATE_T=0; REPLACE_BTOWC=0; REPLACE_WCTOB=0; REPLACE_MBSINIT=0; REPLACE_MBRTOWC=0; REPLACE_MBRLEN=0; REPLACE_MBSRTOWCS=0; REPLACE_MBSNRTOWCS=0; REPLACE_WCRTOMB=0; REPLACE_WCSRTOMBS=0; REPLACE_WCSNRTOMBS=0; REPLACE_WCWIDTH=0; REPLACE_WCSWIDTH=0; REPLACE_WCSFTIME=0; { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether uses 'inline' correctly" >&5 $as_echo_n "checking whether uses 'inline' correctly... " >&6; } if ${gl_cv_header_wchar_h_correct_inline+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_wchar_h_correct_inline=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define wcstod renamed_wcstod /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include extern int zero (void); int main () { return zero(); } _ACEOF save_ac_compile="$ac_compile" ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` 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 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define wcstod renamed_wcstod /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int zero (void) { return 0; } _ACEOF ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` 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 $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then : else gl_cv_header_wchar_h_correct_inline=no fi fi fi ac_compile="$save_ac_compile" rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5 $as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; } if test $gl_cv_header_wchar_h_correct_inline = no; then as_fn_error $? " cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in C99 mode. You have four options: - Add the flag -fgnu89-inline to CC and reconfigure, or - Fix your include files, using parts of , or - Use a gcc version older than 4.3, or - Don't use the flags -std=c99 or -std=gnu99. Configuration aborted." "$LINENO" 5 fi : if test $ac_cv_header_crtdefs_h = yes; then HAVE_CRTDEFS_H=1 else HAVE_CRTDEFS_H=0 fi if true; then GL_COND_LIBTOOL_TRUE= GL_COND_LIBTOOL_FALSE='#' else GL_COND_LIBTOOL_TRUE='#' GL_COND_LIBTOOL_FALSE= fi gl_cond_libtool=true gl_m4_base='gnulib/m4' gl_source_base='gnulib/src' if test $ac_cv_func_alloca_works = no; then : fi # Define an additional variable used in the Makefile substitution. if test $ac_cv_working_alloca_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5 $as_echo_n "checking for alloca as a compiler built-in... " >&6; } if ${gl_cv_rpl_alloca+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __GNUC__ || defined _AIX || defined _MSC_VER Need own alloca #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Need own alloca" >/dev/null 2>&1; then : gl_cv_rpl_alloca=yes else gl_cv_rpl_alloca=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5 $as_echo "$gl_cv_rpl_alloca" >&6; } if test $gl_cv_rpl_alloca = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h ALLOCA_H=alloca.h else ALLOCA_H= fi else ALLOCA_H=alloca.h fi if test -n "$ALLOCA_H"; then GL_GENERATE_ALLOCA_H_TRUE= GL_GENERATE_ALLOCA_H_FALSE='#' else GL_GENERATE_ALLOCA_H_TRUE='#' GL_GENERATE_ALLOCA_H_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_expect" >&5 $as_echo_n "checking for __builtin_expect... " >&6; } if ${gl_cv___builtin_expect+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv___builtin_expect=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv___builtin_expect="in " else gl_cv___builtin_expect=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv___builtin_expect" >&5 $as_echo "$gl_cv___builtin_expect" >&6; } if test "$gl_cv___builtin_expect" = yes; then $as_echo "#define HAVE___BUILTIN_EXPECT 1" >>confdefs.h elif test "$gl_cv___builtin_expect" = "in "; then $as_echo "#define HAVE___BUILTIN_EXPECT 2" >>confdefs.h fi cat >>confdefs.h <<_ACEOF #define GNULIB_DIRNAME 1 _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 $as_echo_n "checking whether // is distinct from /... " >&6; } if ${gl_cv_double_slash_root+:} false; then : $as_echo_n "(cached) " >&6 else if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # . case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 $as_echo "$gl_cv_double_slash_root" >&6; } if test "$gl_cv_double_slash_root" = yes; then $as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 $as_echo_n "checking for error_at_line... " >&6; } if ${ac_cv_lib_error_at_line+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_error_at_line=yes else ac_cv_lib_error_at_line=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_lib_error_at_line" >&5 $as_echo "$ac_cv_lib_error_at_line" >&6; } if test $ac_cv_lib_error_at_line = no; then gl_LIBOBJS="$gl_LIBOBJS error.$ac_objext" : fi XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format" XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format" if test $gl_cv_have_include_next = yes; then gl_cv_next_fcntl_h='<'fcntl.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_fcntl_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'fcntl.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_fcntl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_fcntl_h gl_cv_next_fcntl_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5 $as_echo "$gl_cv_next_fcntl_h" >&6; } fi NEXT_FCNTL_H=$gl_cv_next_fcntl_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'fcntl.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_fcntl_h fi NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive for gl_func in fcntl openat; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done FLOAT_H= REPLACE_FLOAT_LDBL=0 case "$host_os" in aix* | beos* | openbsd* | mirbsd* | irix*) FLOAT_H=float.h ;; freebsd* | dragonfly*) case "$host_cpu" in i[34567]86 ) FLOAT_H=float.h ;; x86_64 ) # On x86_64 systems, the C compiler may still be generating # 32-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __x86_64__ || defined __amd64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else FLOAT_H=float.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; esac ;; linux*) case "$host_cpu" in powerpc*) FLOAT_H=float.h ;; esac ;; esac case "$host_os" in aix* | freebsd* | dragonfly* | linux*) if test -n "$FLOAT_H"; then REPLACE_FLOAT_LDBL=1 fi ;; esac REPLACE_ITOLD=0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether conversion from 'int' to 'long double' works" >&5 $as_echo_n "checking whether conversion from 'int' to 'long double' works... " >&6; } if ${gl_cv_func_itold_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host" in sparc*-*-linux*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_itold_works="guessing no" else gl_cv_func_itold_works="guessing yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; # Guess yes on native Windows. mingw*) gl_cv_func_itold_works="guessing yes" ;; *) gl_cv_func_itold_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i = -1; volatile long double ld; int main () { ld += i * 1.0L; if (ld > 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_itold_works=yes else gl_cv_func_itold_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: $gl_cv_func_itold_works" >&5 $as_echo "$gl_cv_func_itold_works" >&6; } case "$gl_cv_func_itold_works" in *no) REPLACE_ITOLD=1 FLOAT_H=float.h ;; esac if test -n "$FLOAT_H"; then if test $gl_cv_have_include_next = yes; then gl_cv_next_float_h='<'float.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_float_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'float.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_float_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_float_h gl_cv_next_float_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_float_h" >&5 $as_echo "$gl_cv_next_float_h" >&6; } fi NEXT_FLOAT_H=$gl_cv_next_float_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'float.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_float_h fi NEXT_AS_FIRST_DIRECTIVE_FLOAT_H=$gl_next_as_first_directive fi if test -n "$FLOAT_H"; then GL_GENERATE_FLOAT_H_TRUE= GL_GENERATE_FLOAT_H_FALSE='#' else GL_GENERATE_FLOAT_H_TRUE='#' GL_GENERATE_FLOAT_H_FALSE= fi if test $REPLACE_FLOAT_LDBL = 1; then gl_LIBOBJS="$gl_LIBOBJS float.$ac_objext" fi if test $REPLACE_ITOLD = 1; then gl_LIBOBJS="$gl_LIBOBJS itold.$ac_objext" fi REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then REPLACE_GETOPT=1 fi if test $REPLACE_GETOPT = 1; then : if test $ac_cv_header_sys_cdefs_h = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi $as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h GETOPT_H=getopt.h GETOPT_CDEFS_H=getopt-cdefs.h fi if test $REPLACE_GETOPT = 1; then gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext" GNULIB_GL_UNISTD_H_GETOPT=1 fi : ac_found=0 ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include " if test "x$ac_cv_have_decl_program_invocation_name" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : ac_found=1 fi ac_fn_c_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include " if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : ac_found=1 fi ac_fn_c_check_decl "$LINENO" "__argv" "ac_cv_have_decl___argv" "#include " if test "x$ac_cv_have_decl___argv" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL___ARGV $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : ac_found=1 fi # Incur the cost of this test only if none of the above worked. if test $ac_found = 0; then # On OpenBSD 5.1, using the global __progname variable appears to be # the only way to implement getprogname. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __progname is defined in default libraries" >&5 $as_echo_n "checking whether __progname is defined in default libraries... " >&6; } if ${gl_cv_var___progname+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_var___progname= cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern char *__progname; int main () { return *__progname; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_var___progname=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_var___progname" >&5 $as_echo "$gl_cv_var___progname" >&6; } if test "$gl_cv_var___progname" = yes; then $as_echo "#define HAVE_VAR___PROGNAME 1" >>confdefs.h fi fi case $host_os in mingw*) REPLACE_ISATTY=1 ;; esac if test $REPLACE_ISATTY = 1; then gl_LIBOBJS="$gl_LIBOBJS isatty.$ac_objext" : fi GNULIB_ISATTY=1 $as_echo "#define GNULIB_TEST_ISATTY 1" >>confdefs.h if test "$gl_threads_api" = posix; then # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. has_rwlock=false ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include " if test "x$ac_cv_type_pthread_rwlock_t" = xyes; then : has_rwlock=true $as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h fi if $has_rwlock; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5 $as_echo_n "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; } if ${gl_cv_pthread_rwlock_rdlock_prefer_writer+:} false; then : $as_echo_n "(cached) " >&6 else save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" if test "$cross_compiling" = yes; then : gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (exit (10 + (n))) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static pthread_rwlock_t lock; static pthread_t reader1; static pthread_t writer; static pthread_t reader2; static pthread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static pthread_mutex_t baton; static void * timer_func (void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9: The second reader thread requests the lock. */ err = pthread_rwlock_tryrdlock (&lock); if (err == 0) FAILURE (); else if (err != EBUSY) UNEXPECTED (9); /* Step 10: Launch a timer, to test whether the next call blocks. */ if (pthread_create (&timer, NULL, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = pthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (pthread_create (&reader2, NULL, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (pthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = pthread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (pthread_rwlock_init (&lock, NULL)) UNEXPECTED (1); if (pthread_mutex_init (&baton, NULL)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (pthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (pthread_create (&writer, NULL, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { sleep (1); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_pthread_rwlock_rdlock_prefer_writer=yes else gl_cv_pthread_rwlock_rdlock_prefer_writer=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5 $as_echo "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; } case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in *yes) $as_echo "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h ;; esac fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : $as_echo "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi : cat >>confdefs.h <<_ACEOF #define GNULIB_LOCK 1 _ACEOF if test $gl_cv_func_malloc_posix = yes; then $as_echo "#define HAVE_MALLOC_POSIX 1" >>confdefs.h else REPLACE_MALLOC=1 fi if test $REPLACE_MALLOC = 1; then gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" fi GNULIB_MALLOC_POSIX=1 $as_echo "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then gl_LIBOBJS="$gl_LIBOBJS memchr.$ac_objext" for ac_header in bp-sym.h do : ac_fn_c_check_header_mongrel "$LINENO" "bp-sym.h" "ac_cv_header_bp_sym_h" "$ac_includes_default" if test "x$ac_cv_header_bp_sym_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BP_SYM_H 1 _ACEOF fi done fi GNULIB_MEMCHR=1 $as_echo "#define GNULIB_TEST_MEMCHR 1" >>confdefs.h for ac_func in memmem do : ac_fn_c_check_func "$LINENO" "memmem" "ac_cv_func_memmem" if test "x$ac_cv_func_memmem" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MEMMEM 1 _ACEOF fi done if test $ac_cv_func_memmem = yes; then HAVE_MEMMEM=1 else HAVE_MEMMEM=0 fi : if test $ac_cv_have_decl_memmem = no; then HAVE_DECL_MEMMEM=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memmem works" >&5 $as_echo_n "checking whether memmem works... " >&6; } if ${gl_cv_func_memmem_works_always+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNU_LIBRARY__ #include #if ((__GLIBC__ == 2 && ((__GLIBC_MINOR > 0 && __GLIBC_MINOR__ < 9) \ || __GLIBC_MINOR__ > 12)) \ || (__GLIBC__ > 2)) \ || defined __UCLIBC__ Lucky user #endif #elif defined __CYGWIN__ #include #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) Lucky user #endif #else Lucky user #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1; then : gl_cv_func_memmem_works_always="guessing yes" else gl_cv_func_memmem_works_always="guessing no" fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* for memmem */ #define P "_EF_BF_BD" #define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P #define NEEDLE P P P P P int main () { int result = 0; if (memmem (HAYSTACK, strlen (HAYSTACK), NEEDLE, strlen (NEEDLE))) result |= 1; /* Check for empty needle behavior. */ { const char *haystack = "AAA"; if (memmem (haystack, 3, NULL, 0) != haystack) result |= 2; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_memmem_works_always=yes else gl_cv_func_memmem_works_always=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: $gl_cv_func_memmem_works_always" >&5 $as_echo "$gl_cv_func_memmem_works_always" >&6; } case "$gl_cv_func_memmem_works_always" in *yes) ;; *) REPLACE_MEMMEM=1 ;; esac fi : if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then gl_LIBOBJS="$gl_LIBOBJS memmem.$ac_objext" fi GNULIB_MEMMEM=1 $as_echo "#define GNULIB_TEST_MEMMEM 1" >>confdefs.h if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then gl_LIBOBJS="$gl_LIBOBJS msvc-inval.$ac_objext" fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then gl_LIBOBJS="$gl_LIBOBJS msvc-nothrow.$ac_objext" fi cat >>confdefs.h <<_ACEOF #define GNULIB_MSVC_NOTHROW 1 _ACEOF ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include " if test "x$ac_cv_have_decl_program_invocation_name" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include " if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl _ACEOF for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5 $as_echo_n "checking for SIZE_MAX... " >&6; } if ${gl_cv_size_max+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_size_max= cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_STDINT_H #include #endif #ifdef SIZE_MAX Found it #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Found it" >/dev/null 2>&1; then : gl_cv_size_max=yes fi rm -f conftest* if test -z "$gl_cv_size_max"; then if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1" "#include #include "; then : else size_t_bits_minus_1= fi if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include "; then : else fits_in_uint= fi if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then if test $fits_in_uint = 1; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern size_t foo; extern unsigned long foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : fits_in_uint=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" else gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" fi else gl_cv_size_max='((size_t)~(size_t)0)' fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5 $as_echo "$gl_cv_size_max" >&6; } if test "$gl_cv_size_max" != yes; then cat >>confdefs.h <<_ACEOF #define SIZE_MAX $gl_cv_size_max _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 $as_echo_n "checking for ssize_t... " >&6; } if ${gt_cv_ssize_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_ssize_t=yes else gt_cv_ssize_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_ssize_t" >&5 $as_echo "$gt_cv_ssize_t" >&6; } if test $gt_cv_ssize_t = no; then $as_echo "#define ssize_t int" >>confdefs.h fi STDARG_H='' NEXT_STDARG_H='' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5 $as_echo_n "checking for va_copy... " >&6; } if ${gl_cv_func_va_copy+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef va_copy void (*func) (va_list, va_list) = va_copy; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_va_copy=yes else gl_cv_func_va_copy=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_va_copy" >&5 $as_echo "$gl_cv_func_va_copy" >&6; } if test $gl_cv_func_va_copy = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _AIX && !defined __GNUC__ AIX vaccine #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "vaccine" >/dev/null 2>&1; then : gl_aixcc=yes else gl_aixcc=no fi rm -f conftest* if test $gl_aixcc = yes; then STDARG_H=stdarg.h if test $gl_cv_have_include_next = yes; then gl_cv_next_stdarg_h='<'stdarg.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stdarg_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdarg.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdarg_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdarg_h gl_cv_next_stdarg_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdarg_h" >&5 $as_echo "$gl_cv_next_stdarg_h" >&6; } fi NEXT_STDARG_H=$gl_cv_next_stdarg_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdarg.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdarg_h fi NEXT_AS_FIRST_DIRECTIVE_STDARG_H=$gl_next_as_first_directive if test "$gl_cv_next_stdarg_h" = '""'; then gl_cv_next_stdarg_h='"///usr/include/stdarg.h"' NEXT_STDARG_H="$gl_cv_next_stdarg_h" fi else saved_as_echo_n="$as_echo_n" as_echo_n=':' if ${gl_cv_func___va_copy+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef __va_copy error, bail out #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func___va_copy=yes else gl_cv_func___va_copy=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi as_echo_n="$saved_as_echo_n" if test $gl_cv_func___va_copy = yes; then $as_echo "#define va_copy __va_copy" >>confdefs.h else $as_echo "#define va_copy gl_va_copy" >>confdefs.h fi fi fi if test -n "$STDARG_H"; then GL_GENERATE_STDARG_H_TRUE= GL_GENERATE_STDARG_H_FALSE='#' else GL_GENERATE_STDARG_H_TRUE='#' GL_GENERATE_STDARG_H_FALSE= fi # Define two additional variables used in the Makefile substitution. if test "$ac_cv_header_stdbool_h" = yes; then STDBOOL_H='' else STDBOOL_H='stdbool.h' fi if test -n "$STDBOOL_H"; then GL_GENERATE_STDBOOL_H_TRUE= GL_GENERATE_STDBOOL_H_FALSE='#' else GL_GENERATE_STDBOOL_H_TRUE='#' GL_GENERATE_STDBOOL_H_FALSE= fi if test "$ac_cv_type__Bool" = yes; then HAVE__BOOL=1 else HAVE__BOOL=0 fi STDDEF_H= ac_fn_c_check_type "$LINENO" "max_align_t" "ac_cv_type_max_align_t" "#include " if test "x$ac_cv_type_max_align_t" = xyes; then : else HAVE_MAX_ALIGN_T=0; STDDEF_H=stddef.h fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 $as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; } if ${gl_cv_decl_null_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int test[2 * (sizeof NULL == sizeof (void *)) -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_decl_null_works=yes else gl_cv_decl_null_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 $as_echo "$gl_cv_decl_null_works" >&6; } if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 STDDEF_H=stddef.h fi if test -n "$STDDEF_H"; then GL_GENERATE_STDDEF_H_TRUE= GL_GENERATE_STDDEF_H_FALSE='#' else GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE= fi if test -n "$STDDEF_H"; then if test $gl_cv_have_include_next = yes; then gl_cv_next_stddef_h='<'stddef.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stddef_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stddef.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stddef_h gl_cv_next_stddef_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 $as_echo "$gl_cv_next_stddef_h" >&6; } fi NEXT_STDDEF_H=$gl_cv_next_stddef_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stddef.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stddef_h fi NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive fi $as_echo "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_stdio_h='<'stdio.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stdio_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdio.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdio_h gl_cv_next_stdio_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5 $as_echo "$gl_cv_next_stdio_h" >&6; } fi NEXT_STDIO_H=$gl_cv_next_stdio_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdio.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdio_h fi NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive { $as_echo "$as_me:${as_lineno-$LINENO}: checking which flavor of printf attribute matches inttypes macros" >&5 $as_echo_n "checking which flavor of printf attribute matches inttypes macros... " >&6; } if ${gl_cv_func_printf_attribute_flavor+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define __STDC_FORMAT_MACROS 1 #include #include /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_printf_attribute_flavor=system else gl_cv_func_printf_attribute_flavor=gnu fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_attribute_flavor" >&5 $as_echo "$gl_cv_func_printf_attribute_flavor" >&6; } if test "$gl_cv_func_printf_attribute_flavor" = gnu; then $as_echo "#define GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU 1" >>confdefs.h fi GNULIB_FSCANF=1 cat >>confdefs.h <<_ACEOF #define GNULIB_FSCANF 1 _ACEOF GNULIB_SCANF=1 cat >>confdefs.h <<_ACEOF #define GNULIB_SCANF 1 _ACEOF GNULIB_FGETC=1 GNULIB_GETC=1 GNULIB_GETCHAR=1 GNULIB_FGETS=1 GNULIB_FREAD=1 GNULIB_FPRINTF=1 GNULIB_PRINTF=1 GNULIB_VFPRINTF=1 GNULIB_VPRINTF=1 GNULIB_FPUTC=1 GNULIB_PUTC=1 GNULIB_PUTCHAR=1 GNULIB_FPUTS=1 GNULIB_PUTS=1 GNULIB_FWRITE=1 for gl_func in dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if test $gl_cv_have_include_next = yes; then gl_cv_next_stdlib_h='<'stdlib.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stdlib_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdlib.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdlib_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdlib_h gl_cv_next_stdlib_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5 $as_echo "$gl_cv_next_stdlib_h" >&6; } fi NEXT_STDLIB_H=$gl_cv_next_stdlib_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdlib.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdlib_h fi NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive for gl_func in _Exit atoll canonicalize_file_name getloadavg getsubopt grantpt initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray realpath rpmatch secure_getenv setenv setstate setstate_r srandom srandom_r strtod strtoll strtoull unlockpt unsetenv; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_SYS_LOADAVG_H # include #endif #if HAVE_RANDOM_H # include #endif int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5 $as_echo_n "checking for working strerror function... " >&6; } if ${gl_cv_func_working_strerror+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_working_strerror="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { if (!*strerror (-2)) return 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_working_strerror=yes else gl_cv_func_working_strerror=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: $gl_cv_func_working_strerror" >&5 $as_echo "$gl_cv_func_working_strerror" >&6; } case "$gl_cv_func_working_strerror" in *yes) ;; *) REPLACE_STRERROR=1 ;; esac case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR=1 ;; esac else REPLACE_STRERROR=1 fi if test $REPLACE_STRERROR = 1; then gl_LIBOBJS="$gl_LIBOBJS strerror.$ac_objext" fi cat >>confdefs.h <<_ACEOF #define GNULIB_STRERROR 1 _ACEOF GNULIB_STRERROR=1 $as_echo "#define GNULIB_TEST_STRERROR 1" >>confdefs.h if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then gl_LIBOBJS="$gl_LIBOBJS strerror-override.$ac_objext" : if test $ac_cv_header_sys_socket_h != yes; then for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINSOCK2_H 1 _ACEOF fi done fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi fi : if test $ac_cv_have_decl_strerror_r = no; then HAVE_DECL_STRERROR_R=0 fi if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then if test $gl_cv_func_strerror_r_posix_signature = yes; then case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR_R=1 ;; esac else REPLACE_STRERROR_R=1 fi else REPLACE_STRERROR_R=1 fi fi if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1; then gl_LIBOBJS="$gl_LIBOBJS strerror_r.$ac_objext" : : : fi GNULIB_STRERROR_R=1 $as_echo "#define GNULIB_TEST_STRERROR_R 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define GNULIB_STRERROR_R_POSIX 1 _ACEOF : : if test $ac_cv_have_decl_strndup = no; then HAVE_DECL_STRNDUP=0 fi if test $ac_cv_func_strndup = yes; then HAVE_STRNDUP=1 # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strndup" >&5 $as_echo_n "checking for working strndup... " >&6; } if ${gl_cv_func_strndup_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case $host_os in aix | aix[3-6]*) gl_cv_func_strndup_works="guessing no";; *) gl_cv_func_strndup_works="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if !HAVE_DECL_STRNDUP extern #ifdef __cplusplus "C" #endif char *strndup (const char *, size_t); #endif int result; char *s; s = strndup ("some longer string", 15); free (s); s = strndup ("shorter string", 13); result = s[13] != '\0'; free (s); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strndup_works=yes else gl_cv_func_strndup_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: $gl_cv_func_strndup_works" >&5 $as_echo "$gl_cv_func_strndup_works" >&6; } case $gl_cv_func_strndup_works in *no) REPLACE_STRNDUP=1 ;; esac else HAVE_STRNDUP=0 fi if test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1; then gl_LIBOBJS="$gl_LIBOBJS strndup.$ac_objext" fi GNULIB_STRNDUP=1 $as_echo "#define GNULIB_TEST_STRNDUP 1" >>confdefs.h : if test $ac_cv_have_decl_strnlen = no; then HAVE_DECL_STRNLEN=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strnlen" >&5 $as_echo_n "checking for working strnlen... " >&6; } if ${ac_cv_func_strnlen_working+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : # Guess no on AIX systems, yes otherwise. case "$host_os" in aix*) ac_cv_func_strnlen_working=no;; *) ac_cv_func_strnlen_working=yes;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { #define S "foobar" #define S_LEN (sizeof S - 1) /* At least one implementation is buggy: that of AIX 4.3 would give strnlen (S, 1) == 3. */ int i; for (i = 0; i < S_LEN + 1; ++i) { int expected = i <= S_LEN ? i : S_LEN; if (strnlen (S, i) != expected) return 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_strnlen_working=yes else ac_cv_func_strnlen_working=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_strnlen_working" >&5 $as_echo "$ac_cv_func_strnlen_working" >&6; } test $ac_cv_func_strnlen_working = no && : if test $ac_cv_func_strnlen_working = no; then REPLACE_STRNLEN=1 fi fi if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then gl_LIBOBJS="$gl_LIBOBJS strnlen.$ac_objext" : fi GNULIB_STRNLEN=1 $as_echo "#define GNULIB_TEST_STRNLEN 1" >>confdefs.h for ac_func in strtok_r do : ac_fn_c_check_func "$LINENO" "strtok_r" "ac_cv_func_strtok_r" if test "x$ac_cv_func_strtok_r" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRTOK_R 1 _ACEOF fi done if test $ac_cv_func_strtok_r = yes; then HAVE_STRTOK_R=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strtok_r works" >&5 $as_echo_n "checking whether strtok_r works... " >&6; } if ${gl_cv_func_strtok_r_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_func_strtok_r_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strtok_r_works="guessing yes" ;; *) gl_cv_func_strtok_r_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __OPTIMIZE__ # define __OPTIMIZE__ 1 #endif #undef __OPTIMIZE_SIZE__ #undef __NO_INLINE__ #include #include int main () { static const char dummy[] = "\177\01a"; char delimiters[] = "xxxxxxxx"; char *save_ptr = (char *) dummy; strtok_r (delimiters, "x", &save_ptr); strtok_r (NULL, "x", &save_ptr); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strtok_r_works=yes else gl_cv_func_strtok_r_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: $gl_cv_func_strtok_r_works" >&5 $as_echo "$gl_cv_func_strtok_r_works" >&6; } case "$gl_cv_func_strtok_r_works" in *no) UNDEFINE_STRTOK_R=1 ;; esac else HAVE_STRTOK_R=0 fi : if test $ac_cv_have_decl_strtok_r = no; then HAVE_DECL_STRTOK_R=0 fi if test $HAVE_STRTOK_R = 0 || test $REPLACE_STRTOK_R = 1; then gl_LIBOBJS="$gl_LIBOBJS strtok_r.$ac_objext" : fi GNULIB_STRTOK_R=1 $as_echo "#define GNULIB_TEST_STRTOK_R 1" >>confdefs.h if test "$ac_cv_type_unsigned_long_long_int" = yes; then for ac_func in strtoull do : ac_fn_c_check_func "$LINENO" "strtoull" "ac_cv_func_strtoull" if test "x$ac_cv_func_strtoull" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRTOULL 1 _ACEOF fi done if test $ac_cv_func_strtoull = no; then HAVE_STRTOULL=0 fi fi if test $HAVE_STRTOULL = 0; then gl_LIBOBJS="$gl_LIBOBJS strtoull.$ac_objext" : fi GNULIB_STRTOULL=1 $as_echo "#define GNULIB_TEST_STRTOULL 1" >>confdefs.h : if test $gl_cv_have_include_next = yes; then gl_cv_next_unistd_h='<'unistd.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_unistd_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_unistd_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'unistd.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_unistd_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_unistd_h gl_cv_next_unistd_h='"'$gl_header'"' else gl_cv_next_unistd_h='<'unistd.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5 $as_echo "$gl_cv_next_unistd_h" >&6; } fi NEXT_UNISTD_H=$gl_cv_next_unistd_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'unistd.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_unistd_h fi NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi for gl_func in chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups gethostname getlogin getlogin_r getpagesize getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sethostname sleep symlink symlinkat truncate ttyname_r unlink unlinkat usleep; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_UNISTD_H # include #endif /* Some systems declare various items in the wrong headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include # endif #endif int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done : if test $ac_cv_func_vasnprintf = no; then : gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" if test $ac_cv_func_vasnprintf = yes; then $as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes; then : else $as_echo "#define ptrdiff_t long" >>confdefs.h fi fi for ac_func in vasprintf do : ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf" if test "x$ac_cv_func_vasprintf" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VASPRINTF 1 _ACEOF fi done if test $ac_cv_func_vasprintf = no; then gl_LIBOBJS="$gl_LIBOBJS vasprintf.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS asprintf.$ac_objext" if test $ac_cv_func_vasprintf = yes; then REPLACE_VASPRINTF=1 else HAVE_VASPRINTF=0 fi fi GNULIB_VASPRINTF=1 $as_echo "#define GNULIB_TEST_VASPRINTF 1" >>confdefs.h XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=asprintf:2:c-format" XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=vasprintf:2:c-format" : if test $gl_cv_have_include_next = yes; then gl_cv_next_wchar_h='<'wchar.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_wchar_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_wchar_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'wchar.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_wchar_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_wchar_h gl_cv_next_wchar_h='"'$gl_header'"' else gl_cv_next_wchar_h='<'wchar.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5 $as_echo "$gl_cv_next_wchar_h" >&6; } fi NEXT_WCHAR_H=$gl_cv_next_wchar_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'wchar.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_wchar_h fi NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi for gl_func in btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime ; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include #endif #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done : for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF fi done : # End of code from modules gltests_libdeps= gltests_ltlibdeps= gl_source_base='tests' gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS gl_module_indicator_condition=$gltests_WITNESS pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HARFBUZZ" >&5 $as_echo_n "checking for HARFBUZZ... " >&6; } if test -n "$HARFBUZZ_CFLAGS"; then pkg_cv_HARFBUZZ_CFLAGS="$HARFBUZZ_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"harfbuzz >= 1.3.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "harfbuzz >= 1.3.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_HARFBUZZ_CFLAGS=`$PKG_CONFIG --cflags "harfbuzz >= 1.3.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$HARFBUZZ_LIBS"; then pkg_cv_HARFBUZZ_LIBS="$HARFBUZZ_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"harfbuzz >= 1.3.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "harfbuzz >= 1.3.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_HARFBUZZ_LIBS=`$PKG_CONFIG --libs "harfbuzz >= 1.3.0" 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 HARFBUZZ_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "harfbuzz >= 1.3.0" 2>&1` else HARFBUZZ_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "harfbuzz >= 1.3.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$HARFBUZZ_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (harfbuzz >= 1.3.0) were not met: $HARFBUZZ_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 HARFBUZZ_CFLAGS and HARFBUZZ_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 HARFBUZZ_CFLAGS and HARFBUZZ_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 HARFBUZZ_CFLAGS=$pkg_cv_HARFBUZZ_CFLAGS HARFBUZZ_LIBS=$pkg_cv_HARFBUZZ_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi echo "$as_me: this is autotroll.m4 serial 13" \ >& 5 # This is a hack to get decent flow control with `break'. for _qt_ignored in once; do # Check whether --with-qt was given. if test "${with_qt+set}" = set; then : withval=$with_qt; fi if test x"$with_qt" = x"no"; then break else $as_echo "#define HAVE_QT 1" >>confdefs.h fi if test x"$with_qt" = x"yes"; then QT_PATH= else QT_PATH=$with_qt fi # Find Qt. # Find qmake. for ax_tool in qmake qmake-qt5 qmake-qt4 qmake-qt3; do if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}$ax_tool", so it can be a program name with args. set dummy ${ac_tool_prefix}$ax_tool; 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_QMAKE+:} false; then : $as_echo_n "(cached) " >&6 else case $QMAKE in [\\/]* | ?:[\\/]*) ac_cv_path_QMAKE="$QMAKE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$QT_PATH:$PATH" for as_dir in $as_dummy 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_QMAKE="$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 QMAKE=$ac_cv_path_QMAKE if test -n "$QMAKE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QMAKE" >&5 $as_echo "$QMAKE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_QMAKE"; then ac_pt_QMAKE=$QMAKE # Extract the first word of "$ax_tool", so it can be a program name with args. set dummy $ax_tool; 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_QMAKE+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_QMAKE in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_QMAKE="$ac_pt_QMAKE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$QT_PATH:$PATH" for as_dir in $as_dummy 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_QMAKE="$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_QMAKE=$ac_cv_path_ac_pt_QMAKE if test -n "$ac_pt_QMAKE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_QMAKE" >&5 $as_echo "$ac_pt_QMAKE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_QMAKE" = x; then QMAKE="" 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 QMAKE=$ac_pt_QMAKE fi else QMAKE="$ac_cv_path_QMAKE" fi test -n "$QMAKE" && break done test -n "$QMAKE" || QMAKE="missing" if test x"$QMAKE" = xmissing; then as_fn_error $? "Cannot find qmake. Try --with-qt=PATH." "$LINENO" 5 break fi # Find moc (Meta Object Compiler). for ax_tool in moc moc-qt5 moc-qt4 moc-qt3; do if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}$ax_tool", so it can be a program name with args. set dummy ${ac_tool_prefix}$ax_tool; 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_MOC+:} false; then : $as_echo_n "(cached) " >&6 else case $MOC in [\\/]* | ?:[\\/]*) ac_cv_path_MOC="$MOC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$QT_PATH:$PATH" for as_dir in $as_dummy 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_MOC="$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 MOC=$ac_cv_path_MOC if test -n "$MOC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOC" >&5 $as_echo "$MOC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_MOC"; then ac_pt_MOC=$MOC # Extract the first word of "$ax_tool", so it can be a program name with args. set dummy $ax_tool; 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_MOC+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_MOC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_MOC="$ac_pt_MOC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$QT_PATH:$PATH" for as_dir in $as_dummy 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_MOC="$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_MOC=$ac_cv_path_ac_pt_MOC if test -n "$ac_pt_MOC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_MOC" >&5 $as_echo "$ac_pt_MOC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_MOC" = x; then MOC="" 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 MOC=$ac_pt_MOC fi else MOC="$ac_cv_path_MOC" fi test -n "$MOC" && break done test -n "$MOC" || MOC="missing" if test x"$MOC" = xmissing; then as_fn_error $? "Cannot find moc (Meta Object Compiler). Try --with-qt=PATH." "$LINENO" 5 break fi # Find uic (User Interface Compiler). for ax_tool in uic uic-qt5 uic-qt4 uic-qt3 uic3; do if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}$ax_tool", so it can be a program name with args. set dummy ${ac_tool_prefix}$ax_tool; 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_UIC+:} false; then : $as_echo_n "(cached) " >&6 else case $UIC in [\\/]* | ?:[\\/]*) ac_cv_path_UIC="$UIC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$QT_PATH:$PATH" for as_dir in $as_dummy 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_UIC="$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 UIC=$ac_cv_path_UIC if test -n "$UIC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UIC" >&5 $as_echo "$UIC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_UIC"; then ac_pt_UIC=$UIC # Extract the first word of "$ax_tool", so it can be a program name with args. set dummy $ax_tool; 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_UIC+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_UIC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_UIC="$ac_pt_UIC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$QT_PATH:$PATH" for as_dir in $as_dummy 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_UIC="$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_UIC=$ac_cv_path_ac_pt_UIC if test -n "$ac_pt_UIC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_UIC" >&5 $as_echo "$ac_pt_UIC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_UIC" = x; then UIC="" 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 UIC=$ac_pt_UIC fi else UIC="$ac_cv_path_UIC" fi test -n "$UIC" && break done test -n "$UIC" || UIC="missing" if test x"$UIC" = xmissing; then as_fn_error $? "Cannot find uic (User Interface Compiler). Try --with-qt=PATH." "$LINENO" 5 break fi # Find rcc (Qt Resource Compiler). for ax_tool in rcc rcc-qt5; do if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}$ax_tool", so it can be a program name with args. set dummy ${ac_tool_prefix}$ax_tool; 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_RCC+:} false; then : $as_echo_n "(cached) " >&6 else case $RCC in [\\/]* | ?:[\\/]*) ac_cv_path_RCC="$RCC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$QT_PATH:$PATH" for as_dir in $as_dummy 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_RCC="$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 RCC=$ac_cv_path_RCC if test -n "$RCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RCC" >&5 $as_echo "$RCC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_RCC"; then ac_pt_RCC=$RCC # Extract the first word of "$ax_tool", so it can be a program name with args. set dummy $ax_tool; 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_RCC+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_RCC in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_RCC="$ac_pt_RCC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$QT_PATH:$PATH" for as_dir in $as_dummy 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_RCC="$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_RCC=$ac_cv_path_ac_pt_RCC if test -n "$ac_pt_RCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_RCC" >&5 $as_echo "$ac_pt_RCC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_RCC" = x; then RCC="" 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 RCC=$ac_pt_RCC fi else RCC="$ac_cv_path_RCC" fi test -n "$RCC" && break done test -n "$RCC" || RCC="missing" if test x"$RCC" = xmissing; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find rcc (Qt Resource Compiler). Try --with-qt=PATH." >&5 $as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler). Try --with-qt=PATH." >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host operating system is Darwin" >&5 $as_echo_n "checking whether host operating system is Darwin... " >&6; } at_darwin=no at_qmake_args= case $host_os in darwin*) at_darwin=yes at_qmake_args='-spec macx-g++' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_darwin" >&5 $as_echo "$at_darwin" >&6; } # If we don't know the path to Qt, guess it from the path to # qmake. if test x"$QT_PATH" = x; then QT_PATH=`dirname "$QMAKE"` fi if test x"$QT_PATH" = x; then as_fn_error $? "Cannot find your Qt installation. Try --with-qt=PATH." "$LINENO" 5 break fi # Get ready to build a test-app with Qt. if mkdir conftest.dir \ && cd conftest.dir; then : else as_fn_error $? "Cannot mkdir conftest.dir or cd to that directory." "$LINENO" 5 break fi cat >conftest.h <<_ASEOF #include class Foo: public QObject { Q_OBJECT; public: Foo(); ~Foo() {} public Q_SLOTS: void setValue(int value); Q_SIGNALS: void valueChanged(int newValue); private: int value_; }; _ASEOF cat >conftest.cpp <<_ASEOF #include "conftest.h" Foo::Foo() : value_ (42) { connect(this, SIGNAL(valueChanged(int)), this, SLOT(setValue(int))); } void Foo::setValue(int value) { value_ = value; } int main() { Foo f; } _ASEOF if $QMAKE -project; then : else as_fn_error $? "Calling $QMAKE -project failed." "$LINENO" 5 break fi # Find the .pro file generated by qmake. pro_file=conftest.dir.pro test -f $pro_file || pro_file=`echo *.pro` if test -f "$pro_file"; then : else as_fn_error $? "Can't find the .pro file generated by Qmake." "$LINENO" 5 break fi # Tweak the value of QT in the .pro file for +widgets. qt_conf='' for at_mod in +widgets; do at_mod=`echo "$at_mod" | sed 's/^-//; tough s/^+//; beef :ough s/^/QT -= /;n :eef s/^/QT += /'` qt_conf="\ $qt_conf $at_mod" done echo "$qt_conf" | sed 1d >>"$pro_file" # Add the extra-settings the user wants to set in the .pro # file. echo "QTPLUGIN.imageformats = -" >>"$pro_file" echo "$as_me:$LINENO: Invoking $QMAKE on $pro_file" \ >& 5 sed 's/^/| /' "$pro_file" >& 5 if $QMAKE $at_qmake_args; then : else as_fn_error $? "Calling $QMAKE $at_qmake_args failed." "$LINENO" 5 break fi # QMake has a very annoying misfeature: Sometimes it generates # Makefiles where all the references to the files from the Qt # installation are relative. We can't use them as-is because if # we take, say, a -I../../usr/include/Qt from that Makefile, the # flag is invalid as soon as we use it in another (sub) # directory. So what this perl pass does is that it rewrites all # relative paths to absolute paths. Another problem when # building on Cygwin is that QMake mixes paths with backslashes # and forward slashes and paths must be handled with extra care # because of the stupid Windows drive letters. echo "$as_me:$LINENO: fixing the Makefiles:" Makefile* \ >& 5 cat >fixmk.pl <<\EOF use strict; use Cwd qw(cwd abs_path); # This variable is useful on Cygwin for the following reason: Say # that you are in `/' (that is, in fact you are in C:/cygwin, or # something like that). If you `cd ..' then obviously you remain in # `/' (that is in C:/cygwin). QMake generates paths that are # relative to C:/ (or another drive letter, whatever) so the trick to # get the `..' resolved properly is to prepend the absolute path of # the current working directory in a Windows-style. C:/cygwin/../ # will properly become C:/. my $d = ""; my $r2a = 0; my $b2f = 0; my $cygwin = 0; if ($^O eq "cygwin") { $cygwin = 1; $d = cwd(); $d = `cygpath --mixed '$d'`; chomp($d); $d .= "/"; } sub rel2abs($) { my $p = $d . shift; # print "r2a p=$p"; -e $p || return $p; if ($cygwin) { $p = `cygpath --mixed '$p'`; chomp($p); } else { # Do not use abs_path on Cygwin: it incorrectly resolves the paths # that are relative to C:/ rather than `/'. $p = abs_path($p); } # print " -> $p\n"; ++$r2a; return $p; } # Only useful on Cygwin. sub back2forward($) { my $p = shift; # print "b2f p=$p"; -e $p || return $p; $p = `cygpath --mixed '$p'`; chomp($p); # print " -> $p\n"; ++$b2f; return $p; } foreach my $mk (@ARGV) { next if $mk =~ /~$/; open(MK, $mk) or die("open $mk: $!"); # print "mk=$mk\n"; my $file = join("", ); close(MK) or die("close $mk: $!"); rename $mk, $mk . "~" or die("rename $mk: $!"); $file =~ s{(?:\.\.[\\/])+(?:[^"'\s:]+)}{rel2abs($&)}gse; $file =~ s{(?:[a-zA-Z]:[\\/])?(?:[^"\s]+\\[^"\s:]+)+} {back2forward($&)}gse if $cygwin; open(MK, ">", $mk) or die("open >$mk: $!"); print MK $file; close(MK) or die("close >$mk: $!"); print "$mk: updated $r2a relative paths and $b2f backslash-style paths\n"; $r2a = 0; $b2f = 0; } EOF perl >& 5 -w fixmk.pl Makefile* \ || { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: failed to fix the Makefiles generated by $QMAKE" >&5 $as_echo "$as_me: WARNING: failed to fix the Makefiles generated by $QMAKE" >&2;} rm -f fixmk.pl # Try to compile a simple Qt app. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can build a simple Qt application" >&5 $as_echo_n "checking whether we can build a simple Qt application... " >&6; } if ${at_cv_qt_build+:} false; then : $as_echo_n "(cached) " >&6 else at_cv_qt_build=ko : ${MAKE=make} if $MAKE >& 5 2>&1; then at_cv_qt_build='ok, looks like Qt 4 or Qt 5' else echo "$as_me:$LINENO: Build failed, trying to #include instead" \ >& 5 sed 's///' conftest.h > tmp.h \ && mv tmp.h conftest.h if $MAKE >& 5 2>&1; then at_cv_qt_build='ok, looks like Qt 3' else # Sometimes (such as on Debian) build will fail because Qt # hasn't been installed in debug mode and qmake tries (by # default) to build apps in debug mode => Try again in # release mode. echo "$as_me:$LINENO: Build failed, trying to enforce release mode" \ >& 5 # Tweak the value of CONFIG in the .pro file for +release. qt_conf='' for at_mod in +release; do at_mod=`echo "$at_mod" | sed 's/^-//; tough s/^+//; beef :ough s/^/CONFIG -= /;n :eef s/^/CONFIG += /'` qt_conf="\ $qt_conf $at_mod" done echo "$qt_conf" | sed 1d >>"$pro_file" sed 's///' conftest.h > tmp.h \ && mv tmp.h conftest.h if $MAKE >& 5 2>&1; then at_cv_qt_build='ok, looks like Qt 4 or Qt 5, release mode forced' else echo "$as_me:$LINENO: Build failed, trying to #include instead" \ >& 5 sed 's///' conftest.h > tmp.h \ && mv tmp.h conftest.h if $MAKE >& 5 2>&1; then at_cv_qt_build='ok, looks like Qt 3, release mode forced' else at_cv_qt_build=ko echo "$as_me:$LINENO: failed program was:" \ >& 5 sed 's/^/| /' conftest.h >& 5 echo "$as_me:$LINENO: failed program was:" \ >& 5 sed 's/^/| /' conftest.cpp >& 5 fi # if make with Qt3-style #include and release mode forced. fi # if make with Qt4/5-style #include and release mode forced. fi # if make with Qt3-style #include. fi # if make with Qt4/5-style #include. fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_qt_build" >&5 $as_echo "$at_cv_qt_build" >&6; } if test x"$at_cv_qt_build" = xko; then as_fn_error $? "Cannot build a test Qt program" "$LINENO" 5 cd .. break fi QT_VERSION_MAJOR=`echo "$at_cv_qt_build" | sed 's/[^0-9]*//g'` # This sed filter is applied after an expression of the form # /^FOO.*=/!d; it starts by removing the beginning of the line, # removing references to SUBLIBS, removing unnecessary # whitespaces at the beginning, and prefixes all variable uses by # QT_. qt_sed_filter='s///; s/$(SUBLIBS)//g; s/^ *//; s/\$(\([A-Z_][A-Z_]*\))/$(QT_\1)/g' # Find the Makefile (qmake happens to generate a fake Makefile # which invokes a Makefile.Debug or Makefile.Release). If we # have both, we'll pick the Makefile.Release. The reason is that # this release uses -Os and debug -g. We can override -Os by # passing another -O but we usually don't override -g. if test -f Makefile.Release; then at_mfile='Makefile.Release' else at_mfile='Makefile' fi if test -f $at_mfile; then : else as_fn_error $? "Cannot find the Makefile generated by qmake." "$LINENO" 5 cd .. break fi # Find the DEFINES of Qt (should have been named CPPFLAGS). { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the DEFINES to use with Qt" >&5 $as_echo_n "checking for the DEFINES to use with Qt... " >&6; } if ${at_cv_env_QT_DEFINES+:} false; then : $as_echo_n "(cached) " >&6 else at_cv_env_QT_DEFINES=`sed "/^DEFINES[^A-Z=]*=/!d; $qt_sed_filter" $at_mfile` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_DEFINES" >&5 $as_echo "$at_cv_env_QT_DEFINES" >&6; } QT_DEFINES=$at_cv_env_QT_DEFINES # Find the CFLAGS of Qt. (We can use Qt in C?!) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the CFLAGS to use with Qt" >&5 $as_echo_n "checking for the CFLAGS to use with Qt... " >&6; } if ${at_cv_env_QT_CFLAGS+:} false; then : $as_echo_n "(cached) " >&6 else at_cv_env_QT_CFLAGS=`sed "/^CFLAGS[^A-Z=]*=/!d; $qt_sed_filter" $at_mfile` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_CFLAGS" >&5 $as_echo "$at_cv_env_QT_CFLAGS" >&6; } QT_CFLAGS=$at_cv_env_QT_CFLAGS # Find the CXXFLAGS of Qt. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the CXXFLAGS to use with Qt" >&5 $as_echo_n "checking for the CXXFLAGS to use with Qt... " >&6; } if ${at_cv_env_QT_CXXFLAGS+:} false; then : $as_echo_n "(cached) " >&6 else at_cv_env_QT_CXXFLAGS=`sed "/^CXXFLAGS[^A-Z=]*=/!d; $qt_sed_filter" $at_mfile` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_CXXFLAGS" >&5 $as_echo "$at_cv_env_QT_CXXFLAGS" >&6; } QT_CXXFLAGS=$at_cv_env_QT_CXXFLAGS # Find the INCPATH of Qt. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the INCPATH to use with Qt" >&5 $as_echo_n "checking for the INCPATH to use with Qt... " >&6; } if ${at_cv_env_QT_INCPATH+:} false; then : $as_echo_n "(cached) " >&6 else at_cv_env_QT_INCPATH=`sed "/^INCPATH[^A-Z=]*=/!d; $qt_sed_filter" $at_mfile` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_INCPATH" >&5 $as_echo "$at_cv_env_QT_INCPATH" >&6; } QT_INCPATH=$at_cv_env_QT_INCPATH QT_CPPFLAGS="$at_cv_env_QT_DEFINES $at_cv_env_QT_INCPATH" # Find the LFLAGS of Qt (should have been named LDFLAGS). { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the LDFLAGS to use with Qt" >&5 $as_echo_n "checking for the LDFLAGS to use with Qt... " >&6; } if ${at_cv_env_QT_LDFLAGS+:} false; then : $as_echo_n "(cached) " >&6 else at_cv_env_QT_LDFLAGS=`sed "/^LFLAGS[^A-Z=]*=/!d; $qt_sed_filter" $at_mfile` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_LDFLAGS" >&5 $as_echo "$at_cv_env_QT_LDFLAGS" >&6; } QT_LFLAGS=$at_cv_env_QT_LDFLAGS QT_LDFLAGS=$at_cv_env_QT_LDFLAGS # Find the LIBS of Qt. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the LIBS to use with Qt" >&5 $as_echo_n "checking for the LIBS to use with Qt... " >&6; } if ${at_cv_env_QT_LIBS+:} false; then : $as_echo_n "(cached) " >&6 else at_cv_env_QT_LIBS=`sed "/^LIBS[^A-Z]*=/!d; $qt_sed_filter" $at_mfile` if test x$at_darwin = xyes; then # Fix QT_LIBS: as of today Libtool (GNU Libtool 1.5.23a) # doesn't handle -F properly. The "bug" has been fixed on 22 # October 2006 by Peter O'Gorman but we provide backward # compatibility here. at_cv_env_QT_LIBS=`echo "$at_cv_env_QT_LIBS" \ | sed 's/^-F/-Wl,-F/; s/ -F/ -Wl,-F/g'` fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_LIBS" >&5 $as_echo "$at_cv_env_QT_LIBS" >&6; } QT_LIBS=$at_cv_env_QT_LIBS # We can't use AC_CACHE_CHECK for data that contains newlines. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for necessary static plugin code" >&5 $as_echo_n "checking for necessary static plugin code... " >&6; } # find static plugin data generated by qmake if test -f conftest.dir_plugin_import.cpp; then QT_STATIC_PLUGINS=`cat conftest.dir_plugin_import.cpp` else QT_STATIC_PLUGINS="\ // We have Qt earlier than version 5 or a dynamic build. // Provide dummy typedef to avoid empty source code. typedef int _qt_not_a_static_build;" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QT_STATIC_PLUGINS" >&5 $as_echo "$QT_STATIC_PLUGINS" >&6; } cd .. && rm -rf conftest.dir # Run the user code done # end hack (useless FOR to be able to use break) # This is a hack to get decent flow control with `break'. for _qt_ignored in once; do if test x"$with_qt" = x"no"; then break fi if test x"$QMAKE" = x; then as_fn_error $? "\$QMAKE is empty. Did you invoke AT_WITH_QT before AT_REQUIRE_QT_VERSION?" "$LINENO" 5 break fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt's version" >&5 $as_echo_n "checking for Qt's version... " >&6; } if ${at_cv_QT_VERSION+:} false; then : $as_echo_n "(cached) " >&6 else echo "$as_me:$LINENO: Running $QMAKE --version:" \ >& 5 $QMAKE --version >& 5 2>&1 qmake_version_sed='/^.*\([0-9]\+\.[0-9]\+\.[0-9]\+\).*$/!d;s//\1/' at_cv_QT_VERSION=`$QMAKE --version 2>&1 \ | sed "$qmake_version_sed"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_QT_VERSION" >&5 $as_echo "$at_cv_QT_VERSION" >&6; } if test x"$at_cv_QT_VERSION" = x; then as_fn_error $? "Cannot detect Qt's version." "$LINENO" 5 break fi QT_VERSION=$at_cv_QT_VERSION as_arg_v1=$QT_VERSION as_arg_v2=4.6 awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null case $? in #( 1) : as_fn_error $? "This package requires Qt 4.6 or above." "$LINENO" 5 break ;; #( 0) : ;; #( 2) : ;; #( *) : ;; esac # Run the user code done # end hack (useless FOR to be able to use break) if test x"$with_qt" != x"no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for QLocale::quoteString" >&5 $as_echo_n "checking for QLocale::quoteString... " >&6; } as_arg_v1=$QT_VERSION as_arg_v2=4.8 awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null case $? in #( 1) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; #( 0) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; #( 2) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_QT_QUOTESTRING 1" >>confdefs.h ;; #( *) : ;; esac fi if test x"$with_qt" != x"no"; then USE_QT_TRUE= USE_QT_FALSE='#' else USE_QT_TRUE='#' USE_QT_FALSE= fi 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 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*) 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 } for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else pic_mode=default fi # 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 ;; 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*) 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 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*) 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' ;; 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 if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test 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. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC func_cc_basename $compiler cc_basename=$func_cc_basename_result 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_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test 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 # 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 archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test 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. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct_CXX=no hardcode_direct_absolute_CXX=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 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test 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_CXX='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test aix,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. no_undefined_flag_CXX='-bernotok' # 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__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -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_CXX='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' $wl-bernotok' allow_undefined_flag_CXX=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes archive_expsym_cmds_CXX='$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. archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$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_CXX="$archive_expsym_cmds_CXX"'~$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_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds_CXX='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, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='$wl--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds_CXX='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 -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX=$_lt_dar_allow_undefined case $cc_basename in ifort*|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_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" if test yes != "$lt_cv_apple_cc_single_mod"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi else ld_shlibs_CXX=no fi ;; os2*) hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_minus_L_CXX=yes allow_undefined_flag_CXX=unsupported shrext_cmds=.dll archive_cmds_CXX='$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_CXX='$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_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes_CXX=yes ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='$wl-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "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 archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='$wl-E' whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then no_undefined_flag_CXX=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $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. archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $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 hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='$wl-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We 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_CXX='$wl-z,text' allow_undefined_flag_CXX='$wl-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no GCC_CXX=$GXX LD_CXX=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test 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 "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX=$prev$p else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX=$prev$p else postdeps_CXX="${postdeps_CXX} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$predep_objects_CXX"; then predep_objects_CXX=$p else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX=$p else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi lt_prog_compiler_pic_CXX='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_CXX='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## 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_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_CXX" && 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; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to 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_CXX='$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_CXX='`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*) export_symbols_cmds_CXX=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test 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' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$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_CXX='-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_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # 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' ;; 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_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test yes = "$hardcode_automatic_CXX"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct_CXX" && # 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, CXX)" && test no != "$hardcode_minus_L_CXX"; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test relink = "$hardcode_action_CXX" || test yes = "$inherit_rpath_CXX"; 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 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_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: : ${CONFIG_LT=./config.lt} { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_LT" >&5 $as_echo "$as_me: creating $CONFIG_LT" >&6;} as_write_fail=0 cat >"$CONFIG_LT" <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate a libtool stub with the current configuration. SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>"$CONFIG_LT" <<\_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_LT" script. ## ## --------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x "$CONFIG_LT" cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 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="\ ttfautohint config.lt 1.8.1 configured by $0, generated by GNU Autoconf 2.69. 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=: ;; -*) as_fn_error $? "unrecognized option: $1 Try '$0 --help' for more information." "$LINENO" 5 ;; *) as_fn_error $? "unrecognized argument: $1 Try '$0 --help' for more information." "$LINENO" 5 ;; esac shift done if $lt_cl_silent; then exec 6>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' 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"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_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"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_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 \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## 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 \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## 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' _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ofile" >&5 $as_echo "$as_me: creating $ofile" >&6;} # 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 # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # 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='CXX ' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm 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 # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF 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" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF as_fn_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 5>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec 5>>config.log $lt_cl_success || as_fn_exit 1 # We use libtool's convenient check for the math library. LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _mwvalidcheckl in -lmw" >&5 $as_echo_n "checking for _mwvalidcheckl in -lmw... " >&6; } if ${ac_cv_lib_mw__mwvalidcheckl+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char _mwvalidcheckl (); int main () { return _mwvalidcheckl (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mw__mwvalidcheckl=yes else ac_cv_lib_mw__mwvalidcheckl=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mw__mwvalidcheckl" >&5 $as_echo "$ac_cv_lib_mw__mwvalidcheckl" >&6; } if test "x$ac_cv_lib_mw__mwvalidcheckl" = xyes; then : LIBM=-lmw fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 $as_echo_n "checking for cos in -lm... " >&6; } if ${ac_cv_lib_m_cos+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cos (); int main () { return cos (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_cos=yes else ac_cv_lib_m_cos=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 $as_echo "$ac_cv_lib_m_cos" >&6; } if test "x$ac_cv_lib_m_cos" = xyes; then : LIBM="$LIBM -lm" fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 $as_echo_n "checking for cos in -lm... " >&6; } if ${ac_cv_lib_m_cos+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cos (); int main () { return cos (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_cos=yes else ac_cv_lib_m_cos=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 $as_echo "$ac_cv_lib_m_cos" >&6; } if test "x$ac_cv_lib_m_cos" = xyes; then : LIBM=-lm fi ;; esac # Check whether --with-doc was given. if test "${with_doc+set}" = set; then : withval=$with_doc; else with_doc=yes fi # Check whether --with-freetype-config was given. if test "${with_freetype_config+set}" = set; then : withval=$with_freetype_config; freetype_config=$withval else freetype_config=yes fi if test "$freetype_config" = "yes"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}freetype-config", so it can be a program name with args. set dummy ${ac_tool_prefix}freetype-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_ft_config+:} false; then : $as_echo_n "(cached) " >&6 else case $ft_config in [\\/]* | ?:[\\/]*) ac_cv_path_ft_config="$ft_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_ft_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 ft_config=$ac_cv_path_ft_config if test -n "$ft_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ft_config" >&5 $as_echo "$ft_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_ft_config"; then ac_pt_ft_config=$ft_config # Extract the first word of "freetype-config", so it can be a program name with args. set dummy freetype-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_ft_config+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_ft_config in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_ft_config="$ac_pt_ft_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_ft_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_ft_config=$ac_cv_path_ac_pt_ft_config if test -n "$ac_pt_ft_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ft_config" >&5 $as_echo "$ac_pt_ft_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_ft_config" = x; then ft_config="no" 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 ft_config=$ac_pt_ft_config fi else ft_config="$ac_cv_path_ft_config" fi if test "$ft_config" = "no"; then as_fn_error $? "FreeType library is missing; see http://www.freetype.org/" "$LINENO" 5 fi else ft_config="$freetype_config" fi FREETYPE_CPPFLAGS="`$ft_config --cflags`" FREETYPE_LIBS="`$ft_config --libtool`" # many platforms no longer install .la files for system libraries if test ! -f "$FREETYPE_LIBS"; then FREETYPE_LIBS="`$ft_config --libs`" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether FreeType header files are version 2.4.5 or higher" >&5 $as_echo_n "checking whether FreeType header files are version 2.4.5 or higher... " >&6; } old_CPPFLAGS="$CPPFLAGS" CPPFLAGS=$FREETYPE_CPPFLAGS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include FT_FREETYPE_H #if (FREETYPE_MAJOR*1000 + FREETYPE_MINOR)*1000 + FREETYPE_PATCH < 2004005 #error Freetype version too low. #endif _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } CPPFLAGS="$old_CPPFLAGS" else as_fn_error $? "Need FreeType version 2.4.5 or higher" "$LINENO" 5 fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether FreeType library is version 2.4.5 or higher" >&5 $as_echo_n "checking whether FreeType library is version 2.4.5 or higher... " >&6; } old_CPPFLAGS="$CPPFLAGS" CPPFLAGS=$FREETYPE_CPPFLAGS old_LIBS="$LIBS" LIBS=$FREETYPE_LIBS 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_link="$ac_compile; ./libtool --mode=link `echo $ac_link | sed 's/\$ac_ext/\$ac_objext/'`" if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: skipped due to cross-compilation" >&5 $as_echo "skipped due to cross-compilation" >&6; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include FT_FREETYPE_H int main() { FT_Error error; FT_Library library; FT_Int major, minor, patch; error = FT_Init_FreeType(&library); if (error) { printf("(test program reports error code %d)... ", error); exit(EXIT_FAILURE); } FT_Library_Version(library, &major, &minor, &patch); printf("(found %d.%d.%d)... ", major, minor, patch); if (((major*1000 + minor)*1000 + patch) >= 2004005) exit(EXIT_SUCCESS); exit(EXIT_FAILURE); } _ACEOF if ac_fn_lt_c_try_run "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } CPPFLAGS="$old_CPPFLAGS" LIBS="$old_LIBS" else as_fn_error $? "Need FreeType version 2.4.5 or higher" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext 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 $cross_compiling = no; then HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"} else HELP2MAN=: fi # The documentation is part of the distributed bundle. In the following, # tests for the documentation building tools are made fatal in case those # files are missing (which can happen during bootstrap). image_file=$srcdir/doc/img/ttfautohintGUI.png html_file=$srcdir/doc/ttfautohint.html pdf_file=$srcdir/doc/ttfautohint.pdf # We use the Noto font family within the PDF documentation file, since it # has the best Unicode coverage of all freely available fonts. However, due # to some bugs in the currently released version and lacking support for # some scripts, it is necessary to access fonts from the `noto-fonts-alpha' # git repository, which can be found at # # https://github.com/googlei18n/noto-fonts-alpha/ # # Interestingly, at least one font we need (`NotoSansGujarati-Regular.ttf') # is not yet present in the `noto-fonts-alpha' repository, so we have to # access the older # # https://github.com/googlei18n/noto-fonts/ # # also. # # To be more precise, we don't directly access the git repositories; # instead, we simply test the presence of two typical font files (using the # `kpsewhich' program as provided by TeXLive and other TeX distributions); # the user should set the TTFONTS environment variable to add the # corresponding directories to the TrueType font search path. noto_font_file=NotoSansGujarati-Regular.ttf noto_font_alpha_file=NotoSansArabic-Regular.ttf if test x"$with_doc" != x"no"; then # snapshot image creation if test x"$DISPLAY" == x; then if test -f "$image_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Need X11 to create snapshot image of ttfautohintGUI" >&5 $as_echo "$as_me: WARNING: Need X11 to create snapshot image of ttfautohintGUI" >&2;} with_doc=no else as_fn_error $? "Need X11 to create snapshot image of ttfautohintGUI" "$LINENO" 5 fi else # Extract the first word of "import", so it can be a program name with args. set dummy import; 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_IMPORT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$IMPORT"; then ac_cv_prog_IMPORT="$IMPORT" # 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_IMPORT="import" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_IMPORT" && ac_cv_prog_IMPORT="no" fi fi IMPORT=$ac_cv_prog_IMPORT if test -n "$IMPORT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IMPORT" >&5 $as_echo "$IMPORT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$IMPORT" == x"no"; then if test -f "$image_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Need ImageMagick to create snapshot image of ttfautohintGUI" >&5 $as_echo "$as_me: WARNING: Need ImageMagick to create snapshot image of ttfautohintGUI" >&2;} with_doc=no else as_fn_error $? "Need ImageMagick to create snapshot image of ttfautohintGUI" "$LINENO" 5 fi fi fi # conversion of SVG to PDF # Extract the first word of "inkscape", so it can be a program name with args. set dummy inkscape; 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_INKSCAPE+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$INKSCAPE"; then ac_cv_prog_INKSCAPE="$INKSCAPE" # 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_INKSCAPE="inkscape" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_INKSCAPE" && ac_cv_prog_INKSCAPE="no" fi fi INKSCAPE=$ac_cv_prog_INKSCAPE if test -n "$INKSCAPE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INKSCAPE" >&5 $as_echo "$INKSCAPE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$INKSCAPE" == x"no"; then if test -f "$pdf_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Need inkscape to convert SVG image files to PDF" >&5 $as_echo "$as_me: WARNING: Need inkscape to convert SVG image files to PDF" >&2;} with_doc=no else as_fn_error $? "Need inkscape to convert SVG image files to PDF" "$LINENO" 5 fi fi # documentation creation # Extract the first word of "pandoc", so it can be a program name with args. set dummy pandoc; 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_PANDOC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PANDOC"; then ac_cv_prog_PANDOC="$PANDOC" # 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_PANDOC="pandoc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PANDOC" && ac_cv_prog_PANDOC="no" fi fi PANDOC=$ac_cv_prog_PANDOC if test -n "$PANDOC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PANDOC" >&5 $as_echo "$PANDOC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$PANDOC" == x"no"; then if test -f "$html_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Need pandoc to create PDF and HTML documentation files" >&5 $as_echo "$as_me: WARNING: Need pandoc to create PDF and HTML documentation files" >&2;} with_doc=no else as_fn_error $? "Need pandoc to create PDF and HTML documentation files" "$LINENO" 5 fi fi # PDF documentation # To support Devanagari and other Indic scripts properly, # we currently can use XeTeX only. for ac_prog in xelatex 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_LATEX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LATEX"; then ac_cv_prog_LATEX="$LATEX" # 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_LATEX="$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 LATEX=$ac_cv_prog_LATEX if test -n "$LATEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LATEX" >&5 $as_echo "$LATEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LATEX" && break done test -n "$LATEX" || LATEX="no" if test x"$PDFLATEX" == x"no"; then if test -f "$pdf_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Need xelatex to create documentation in PDF format" >&5 $as_echo "$as_me: WARNING: Need xelatex to create documentation in PDF format" >&2;} with_doc=no else as_fn_error $? "Need xelatex to create documentation in PDF format" "$LINENO" 5 fi else for ac_prog in kpsewhich 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_KPSEWHICH+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$KPSEWHICH"; then ac_cv_prog_KPSEWHICH="$KPSEWHICH" # 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_KPSEWHICH="$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 KPSEWHICH=$ac_cv_prog_KPSEWHICH if test -n "$KPSEWHICH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KPSEWHICH" >&5 $as_echo "$KPSEWHICH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$KPSEWHICH" && break done test -n "$KPSEWHICH" || KPSEWHICH="no" if test x"$KPSEWHICH" == x"no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can't find \`kpsewhich' to check presence of Noto font files automatically." >&5 $as_echo "$as_me: WARNING: Can't find \`kpsewhich' to check presence of Noto font files automatically." >&2;} if test -f "$pdf_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Adjust the \`TTFONTS' environment variable so that the fonts are found." >&5 $as_echo "$as_me: WARNING: Adjust the \`TTFONTS' environment variable so that the fonts are found." >&2;} with_doc=no else as_fn_error $? "Adjust the \`TTFONTS' environment variable so that the fonts are found." "$LINENO" 5 fi else $KPSEWHICH $noto_font_file &> /dev/null if test $? -ne 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can't find \`$noto_font_file'." >&5 $as_echo "$as_me: WARNING: Can't find \`$noto_font_file'." >&2;} if test -f "$pdf_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Adjust the \`TTFONTS' environment variable so that the Noto fonts are found." >&5 $as_echo "$as_me: WARNING: Adjust the \`TTFONTS' environment variable so that the Noto fonts are found." >&2;} with_doc=no else as_fn_error $? "Adjust the \`TTFONTS' environment variable so that the Noto fonts are found." "$LINENO" 5 fi fi $KPSEWHICH $noto_font_alpha_file &> /dev/null if test $? -ne 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can't find \`$noto_font_alpha_file'." >&5 $as_echo "$as_me: WARNING: Can't find \`$noto_font_alpha_file'." >&2;} if test -f "$pdf_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Adjust the \`TTFONTS' environment variable so that the Noto alpha fonts are found." >&5 $as_echo "$as_me: WARNING: Adjust the \`TTFONTS' environment variable so that the Noto alpha fonts are found." >&2;} with_doc=no else as_fn_error $? "Adjust the \`TTFONTS' environment variable so that the Noto alpha fonts are found." "$LINENO" 5 fi fi fi fi fi if test x"$with_doc" != x"no"; then WITH_DOC_TRUE= WITH_DOC_FALSE='#' else WITH_DOC_TRUE='#' WITH_DOC_FALSE= fi # pandoc (currently version 1.15.2.1) doesn't have the equivalent to # a compiler's `-I' command line option to make it search image files # in specified directories; for this reason, we create symlinks. ac_config_commands="$ac_config_commands doc/img/create-links" ac_config_headers="$ac_config_headers config.h" ac_config_files="$ac_config_files Makefile gnulib/src/Makefile lib/Makefile frontend/Makefile frontend/static-plugins.cpp doc/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' 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 "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_ALLOCA_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_ERRNO_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_FLOAT_H_TRUE}" && test -z "${GL_GENERATE_FLOAT_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_FLOAT_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDARG_H_TRUE}" && test -z "${GL_GENERATE_STDARG_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDARG_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDBOOL_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDINT_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi gl_libobjs= gl_ltlibobjs= if test -n "$gl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" done fi gl_LIBOBJS=$gl_libobjs gl_LTLIBOBJS=$gl_ltlibobjs gltests_libobjs= gltests_ltlibobjs= if test -n "$gltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" done fi gltests_LIBOBJS=$gltests_libobjs gltests_LTLIBOBJS=$gltests_ltlibobjs if test -z "${USE_QT_TRUE}" && test -z "${USE_QT_FALSE}"; then as_fn_error $? "conditional \"USE_QT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_DOC_TRUE}" && test -z "${WITH_DOC_FALSE}"; then as_fn_error $? "conditional \"WITH_DOC\" 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 ttfautohint $as_me 1.8.1, 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="\\ ttfautohint config.status 1.8.1 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' 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"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_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"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_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 \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## 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 \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## 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' ac_aux_dir='$ac_aux_dir' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "doc/img/create-links") CONFIG_COMMANDS="$CONFIG_COMMANDS doc/img/create-links" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "gnulib/src/Makefile") CONFIG_FILES="$CONFIG_FILES gnulib/src/Makefile" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "frontend/Makefile") CONFIG_FILES="$CONFIG_FILES frontend/Makefile" ;; "frontend/static-plugins.cpp") CONFIG_FILES="$CONFIG_FILES frontend/static-plugins.cpp" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_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 # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # 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='CXX ' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm 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 # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF 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" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; "doc/img/create-links":C) abs_top_srcdir=`(cd "$srcdir"; pwd)` abs_top_builddir=`pwd` if test "$abs_top_srcdir" != "$abs_top_builddir"; then cd doc \ && $LN_S "$abs_top_srcdir"/doc/img/* img fi ;; 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 # end of configure.ac ttfautohint-1.8.1/configure.ac0000644000175000001440000002362213214147313016225 0ustar00wlusers00000000000000# configure.ac # Copyright (C) 2011-2017 by Werner Lemberg. # # This file is part of the ttfautohint library, and may only be used, # modified, and distributed under the terms given in `COPYING'. By # continuing to use, modify, or distribute this file you indicate that you # have read `COPYING' and understand and accept it fully. # # The file `COPYING' mentioned in the previous paragraph is distributed # with the ttfautohint library. AC_INIT([ttfautohint], m4_esyscmd([gnulib/git-version-gen VERSION]), [freetype-devel@nongnu.org]) AC_CONFIG_AUX_DIR([gnulib]) AC_CONFIG_SRCDIR([lib/ttfautohint.pc.in]) AM_INIT_AUTOMAKE([-Wall -Werror tar-ustar] m4_bmatch(m4_defn([AC_PACKAGE_VERSION]), [-], [gnu], [gnits])) AC_CONFIG_MACRO_DIRS([gnulib/m4 m4]) AM_SILENT_RULES([yes]) dnl Derive version triplet (major, minor, revision) from package version dnl string. dnl If `AC_PACKAGE_VERSION' contains the suffix `-dirty', we remove it. If dnl it then still contains a dash, we have to remove the last dot and dnl everything appended to it (this was added by the `git-version-gen' dnl script to reflect git commits after the last tagged commit, which we dnl ignore). dnl No quotes around first argument of `m4_bpatsubst'. dnl No quotes around `m4_bpatsubst'. m4_define([ttfa_version], m4_bpatsubst(AC_PACKAGE_VERSION, [-dirty$])) m4_define([ttfa_version], m4_bpatsubst(ttfa_version, [\.[^.]+-.+$])) dnl No quotes around first argument of `m4_split'. dnl No quotes around `m4_split'. m4_define([ttfa_triplet], m4_split(ttfa_version, [\.])) dnl No quotes around second argument of `m4_argn'. dnl No quotes around `m4_argn'. m4_define([ttfa_major], m4_argn([1], ttfa_triplet)) m4_define([ttfa_minor], m4_argn([2], ttfa_triplet)) m4_define([ttfa_revision], m4_argn([3], ttfa_triplet)) dnl No quotes around first two arguments of `m4_if'. m4_if(ttfa_revision, , [m4_define([ttfa_revision], [0])], []) m4_if(ttfa_version, AC_PACKAGE_VERSION, [], [AC_MSG_WARN([Revision number of version tuplet set to ttfa_revision.])]) ttfautohint_major=ttfa_major ttfautohint_minor=ttfa_minor ttfautohint_revision=ttfa_revision AC_SUBST([ttfautohint_major]) AC_SUBST([ttfautohint_minor]) AC_SUBST([ttfautohint_revision]) AC_USE_SYSTEM_EXTENSIONS AC_PROG_LN_S AC_PROG_CPP AC_PROG_CC AC_PROG_CXX AC_C_INLINE gl_EARLY PKG_PROG_PKG_CONFIG([0.24]) # AM_PROG_AR is new in automake 1.11.2; # however, MinGW doesn't have it yet (May 2012) m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) AC_PATH_PROG([BISON], [bison]) AC_PATH_PROG([FLEX], [flex]) gl_INIT PKG_CHECK_MODULES([HARFBUZZ], [harfbuzz >= 1.3.0]) AT_WITH_QT([], [], [QTPLUGIN.imageformats = -]) AT_REQUIRE_QT_VERSION([4.6]) if test x"$with_qt" != x"no"; then AC_MSG_CHECKING([for QLocale::quoteString]) AS_VERSION_COMPARE([$QT_VERSION], [4.8], [AC_MSG_RESULT(no)], [AC_MSG_RESULT(no)], [AC_MSG_RESULT(yes) AC_DEFINE([HAVE_QT_QUOTESTRING], [1], [Define if Qt function QLocale::quoteString is available.])]) fi AM_CONDITIONAL([USE_QT], [test x"$with_qt" != x"no"]) LT_INIT LT_LTLIZE_LANG([C]) # We use libtool's convenient check for the math library. LT_LIB_M AC_SUBST([LIBM]) AC_ARG_WITH([doc], [AS_HELP_STRING([--with-doc], [install documentation @<:@default=yes@:>@])], [], [with_doc=yes]) AC_ARG_WITH([freetype-config], [AS_HELP_STRING([--with-freetype-config=PROG], [use FreeType configuration program PROG])], [freetype_config=$withval], [freetype_config=yes]) if test "$freetype_config" = "yes"; then AC_PATH_TOOL(ft_config, freetype-config, no) if test "$ft_config" = "no"; then AC_MSG_ERROR([FreeType library is missing; see http://www.freetype.org/]) fi else ft_config="$freetype_config" fi FREETYPE_CPPFLAGS="`$ft_config --cflags`" FREETYPE_LIBS="`$ft_config --libtool`" # many platforms no longer install .la files for system libraries if test ! -f "$FREETYPE_LIBS"; then FREETYPE_LIBS="`$ft_config --libs`" fi AC_SUBST([FREETYPE_CPPFLAGS]) AC_SUBST([FREETYPE_LIBS]) AC_MSG_CHECKING([whether FreeType header files are version 2.4.5 or higher]) old_CPPFLAGS="$CPPFLAGS" CPPFLAGS=$FREETYPE_CPPFLAGS AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ #include #include FT_FREETYPE_H #if (FREETYPE_MAJOR*1000 + FREETYPE_MINOR)*1000 + FREETYPE_PATCH < 2004005 #error Freetype version too low. #endif ]])], [AC_MSG_RESULT(yes) CPPFLAGS="$old_CPPFLAGS"], [AC_MSG_ERROR([Need FreeType version 2.4.5 or higher])]) AC_MSG_CHECKING([whether FreeType library is version 2.4.5 or higher]) old_CPPFLAGS="$CPPFLAGS" CPPFLAGS=$FREETYPE_CPPFLAGS old_LIBS="$LIBS" LIBS=$FREETYPE_LIBS AC_LANG_PUSH([LTLIZED C]) AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include FT_FREETYPE_H int main() { FT_Error error; FT_Library library; FT_Int major, minor, patch; error = FT_Init_FreeType(&library); if (error) { printf("(test program reports error code %d)... ", error); exit(EXIT_FAILURE); } FT_Library_Version(library, &major, &minor, &patch); printf("(found %d.%d.%d)... ", major, minor, patch); if (((major*1000 + minor)*1000 + patch) >= 2004005) exit(EXIT_SUCCESS); exit(EXIT_FAILURE); } ]])], [AC_MSG_RESULT(yes) CPPFLAGS="$old_CPPFLAGS" LIBS="$old_LIBS"], [AC_MSG_ERROR([Need FreeType version 2.4.5 or higher])], [AC_MSG_RESULT([skipped due to cross-compilation])]) AC_LANG_POP if test $cross_compiling = no; then AM_MISSING_PROG(HELP2MAN, help2man) else HELP2MAN=: fi # The documentation is part of the distributed bundle. In the following, # tests for the documentation building tools are made fatal in case those # files are missing (which can happen during bootstrap). AC_DEFUN([TA_DOC], [if test -f "$1"; then AC_MSG_WARN([$2]) with_doc=no else AC_MSG_ERROR([$2]) fi]) image_file=$srcdir/doc/img/ttfautohintGUI.png html_file=$srcdir/doc/ttfautohint.html pdf_file=$srcdir/doc/ttfautohint.pdf # We use the Noto font family within the PDF documentation file, since it # has the best Unicode coverage of all freely available fonts. However, due # to some bugs in the currently released version and lacking support for # some scripts, it is necessary to access fonts from the `noto-fonts-alpha' # git repository, which can be found at # # https://github.com/googlei18n/noto-fonts-alpha/ # # Interestingly, at least one font we need (`NotoSansGujarati-Regular.ttf') # is not yet present in the `noto-fonts-alpha' repository, so we have to # access the older # # https://github.com/googlei18n/noto-fonts/ # # also. # # To be more precise, we don't directly access the git repositories; # instead, we simply test the presence of two typical font files (using the # `kpsewhich' program as provided by TeXLive and other TeX distributions); # the user should set the TTFONTS environment variable to add the # corresponding directories to the TrueType font search path. noto_font_file=NotoSansGujarati-Regular.ttf noto_font_alpha_file=NotoSansArabic-Regular.ttf if test x"$with_doc" != x"no"; then # snapshot image creation if test x"$DISPLAY" == x; then TA_DOC([$image_file], [Need X11 to create snapshot image of ttfautohintGUI]) else AC_CHECK_PROG([IMPORT], [import], [import], [no]) if test x"$IMPORT" == x"no"; then TA_DOC([$image_file], [Need ImageMagick to create snapshot image of ttfautohintGUI]) fi fi # conversion of SVG to PDF AC_CHECK_PROG([INKSCAPE], [inkscape], [inkscape], [no]) if test x"$INKSCAPE" == x"no"; then TA_DOC([$pdf_file], [Need inkscape to convert SVG image files to PDF]) fi # documentation creation AC_CHECK_PROG([PANDOC], [pandoc], [pandoc], [no]) if test x"$PANDOC" == x"no"; then TA_DOC([$html_file], [Need pandoc to create PDF and HTML documentation files]) fi # PDF documentation # To support Devanagari and other Indic scripts properly, # we currently can use XeTeX only. AC_CHECK_PROGS([LATEX], [xelatex], [no]) if test x"$PDFLATEX" == x"no"; then TA_DOC([$pdf_file], [Need xelatex to create documentation in PDF format]) else AC_CHECK_PROGS([KPSEWHICH], [kpsewhich], [no]) if test x"$KPSEWHICH" == x"no"; then AC_MSG_WARN([Can't find \`kpsewhich' to check presence of Noto font files automatically.]) TA_DOC([$pdf_file], [Adjust the \`TTFONTS' environment variable so that the fonts are found.]) else $KPSEWHICH $noto_font_file &> /dev/null if test $? -ne 0; then AC_MSG_WARN([Can't find \`$noto_font_file'.]) TA_DOC([$pdf_file], [Adjust the \`TTFONTS' environment variable so that the Noto fonts are found.]) fi $KPSEWHICH $noto_font_alpha_file &> /dev/null if test $? -ne 0; then AC_MSG_WARN([Can't find \`$noto_font_alpha_file'.]) TA_DOC([$pdf_file], [Adjust the \`TTFONTS' environment variable so that the Noto alpha fonts are found.]) fi fi fi fi AM_CONDITIONAL([WITH_DOC], [test x"$with_doc" != x"no"]) # pandoc (currently version 1.15.2.1) doesn't have the equivalent to # a compiler's `-I' command line option to make it search image files # in specified directories; for this reason, we create symlinks. AC_CONFIG_COMMANDS([doc/img/create-links], [abs_top_srcdir=`(cd "$srcdir"; pwd)` abs_top_builddir=`pwd` if test "$abs_top_srcdir" != "$abs_top_builddir"; then cd doc \ && $LN_S "$abs_top_srcdir"/doc/img/* img fi]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile gnulib/src/Makefile lib/Makefile frontend/Makefile frontend/static-plugins.cpp doc/Makefile]) AC_OUTPUT # end of configure.ac ttfautohint-1.8.1/aclocal.m40000644000175000001440000020073313222450644015602 0ustar00wlusers00000000000000# generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 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'.])]) # po.m4 serial 24 (gettext-0.19) 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-2003. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.19]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; 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 INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" < 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-2014 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"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2014 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-2014 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-2014 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-2014 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-2014 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-2014 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-2014 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-2014 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-2014 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-2014 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-2014 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-2014 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-2014 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/autotroll.m4]) m4_include([m4/ltlize_lang.m4]) m4_include([m4/pkg.m4]) m4_include([gnulib/m4/00gnulib.m4]) m4_include([gnulib/m4/absolute-header.m4]) m4_include([gnulib/m4/alloca.m4]) m4_include([gnulib/m4/asm-underscore.m4]) m4_include([gnulib/m4/builtin-expect.m4]) m4_include([gnulib/m4/dirname.m4]) m4_include([gnulib/m4/double-slash-root.m4]) m4_include([gnulib/m4/errno_h.m4]) m4_include([gnulib/m4/error.m4]) m4_include([gnulib/m4/exponentd.m4]) m4_include([gnulib/m4/extensions.m4]) m4_include([gnulib/m4/extern-inline.m4]) m4_include([gnulib/m4/fcntl-o.m4]) m4_include([gnulib/m4/fcntl_h.m4]) m4_include([gnulib/m4/float_h.m4]) m4_include([gnulib/m4/getopt.m4]) m4_include([gnulib/m4/getprogname.m4]) m4_include([gnulib/m4/gnulib-common.m4]) m4_include([gnulib/m4/gnulib-comp.m4]) m4_include([gnulib/m4/host-cpu-c-abi.m4]) m4_include([gnulib/m4/include_next.m4]) m4_include([gnulib/m4/intmax_t.m4]) m4_include([gnulib/m4/inttypes_h.m4]) m4_include([gnulib/m4/isatty.m4]) m4_include([gnulib/m4/lib-ld.m4]) m4_include([gnulib/m4/lib-link.m4]) m4_include([gnulib/m4/lib-prefix.m4]) m4_include([gnulib/m4/libtool.m4]) m4_include([gnulib/m4/limits-h.m4]) m4_include([gnulib/m4/lock.m4]) m4_include([gnulib/m4/longlong.m4]) m4_include([gnulib/m4/ltoptions.m4]) m4_include([gnulib/m4/ltsugar.m4]) m4_include([gnulib/m4/ltversion.m4]) m4_include([gnulib/m4/lt~obsolete.m4]) m4_include([gnulib/m4/malloc.m4]) m4_include([gnulib/m4/memchr.m4]) m4_include([gnulib/m4/memmem.m4]) m4_include([gnulib/m4/mmap-anon.m4]) m4_include([gnulib/m4/msvc-inval.m4]) m4_include([gnulib/m4/msvc-nothrow.m4]) m4_include([gnulib/m4/multiarch.m4]) m4_include([gnulib/m4/nocrash.m4]) m4_include([gnulib/m4/off_t.m4]) m4_include([gnulib/m4/onceonly.m4]) m4_include([gnulib/m4/printf.m4]) m4_include([gnulib/m4/pthread_rwlock_rdlock.m4]) m4_include([gnulib/m4/size_max.m4]) m4_include([gnulib/m4/ssize_t.m4]) m4_include([gnulib/m4/std-gnu11.m4]) m4_include([gnulib/m4/stdarg.m4]) m4_include([gnulib/m4/stdbool.m4]) m4_include([gnulib/m4/stddef_h.m4]) m4_include([gnulib/m4/stdint.m4]) m4_include([gnulib/m4/stdint_h.m4]) m4_include([gnulib/m4/stdio_h.m4]) m4_include([gnulib/m4/stdlib_h.m4]) m4_include([gnulib/m4/strerror.m4]) m4_include([gnulib/m4/strerror_r.m4]) m4_include([gnulib/m4/string_h.m4]) m4_include([gnulib/m4/strndup.m4]) m4_include([gnulib/m4/strnlen.m4]) m4_include([gnulib/m4/strtok_r.m4]) m4_include([gnulib/m4/strtoull.m4]) m4_include([gnulib/m4/sys_socket_h.m4]) m4_include([gnulib/m4/sys_types_h.m4]) m4_include([gnulib/m4/threadlib.m4]) m4_include([gnulib/m4/unistd_h.m4]) m4_include([gnulib/m4/vasnprintf.m4]) m4_include([gnulib/m4/vasprintf.m4]) m4_include([gnulib/m4/warn-on-use.m4]) m4_include([gnulib/m4/wchar_h.m4]) m4_include([gnulib/m4/wchar_t.m4]) m4_include([gnulib/m4/wint_t.m4]) m4_include([gnulib/m4/xalloc.m4]) m4_include([gnulib/m4/xsize.m4]) m4_include([gnulib/m4/xstrndup.m4]) ttfautohint-1.8.1/Makefile.in0000644000175000001440000014537713222450647016026 0ustar00wlusers00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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/autotroll.m4 \ $(top_srcdir)/m4/ltlize_lang.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/gnulib/m4/00gnulib.m4 \ $(top_srcdir)/gnulib/m4/absolute-header.m4 \ $(top_srcdir)/gnulib/m4/alloca.m4 \ $(top_srcdir)/gnulib/m4/asm-underscore.m4 \ $(top_srcdir)/gnulib/m4/builtin-expect.m4 \ $(top_srcdir)/gnulib/m4/dirname.m4 \ $(top_srcdir)/gnulib/m4/double-slash-root.m4 \ $(top_srcdir)/gnulib/m4/errno_h.m4 \ $(top_srcdir)/gnulib/m4/error.m4 \ $(top_srcdir)/gnulib/m4/exponentd.m4 \ $(top_srcdir)/gnulib/m4/extensions.m4 \ $(top_srcdir)/gnulib/m4/extern-inline.m4 \ $(top_srcdir)/gnulib/m4/fcntl-o.m4 \ $(top_srcdir)/gnulib/m4/fcntl_h.m4 \ $(top_srcdir)/gnulib/m4/float_h.m4 \ $(top_srcdir)/gnulib/m4/getopt.m4 \ $(top_srcdir)/gnulib/m4/getprogname.m4 \ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \ $(top_srcdir)/gnulib/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/gnulib/m4/include_next.m4 \ $(top_srcdir)/gnulib/m4/intmax_t.m4 \ $(top_srcdir)/gnulib/m4/inttypes_h.m4 \ $(top_srcdir)/gnulib/m4/isatty.m4 \ $(top_srcdir)/gnulib/m4/lib-ld.m4 \ $(top_srcdir)/gnulib/m4/lib-link.m4 \ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \ $(top_srcdir)/gnulib/m4/libtool.m4 \ $(top_srcdir)/gnulib/m4/limits-h.m4 \ $(top_srcdir)/gnulib/m4/lock.m4 \ $(top_srcdir)/gnulib/m4/longlong.m4 \ $(top_srcdir)/gnulib/m4/ltoptions.m4 \ $(top_srcdir)/gnulib/m4/ltsugar.m4 \ $(top_srcdir)/gnulib/m4/ltversion.m4 \ $(top_srcdir)/gnulib/m4/lt~obsolete.m4 \ $(top_srcdir)/gnulib/m4/malloc.m4 \ $(top_srcdir)/gnulib/m4/memchr.m4 \ $(top_srcdir)/gnulib/m4/memmem.m4 \ $(top_srcdir)/gnulib/m4/mmap-anon.m4 \ $(top_srcdir)/gnulib/m4/msvc-inval.m4 \ $(top_srcdir)/gnulib/m4/msvc-nothrow.m4 \ $(top_srcdir)/gnulib/m4/multiarch.m4 \ $(top_srcdir)/gnulib/m4/nocrash.m4 \ $(top_srcdir)/gnulib/m4/off_t.m4 \ $(top_srcdir)/gnulib/m4/onceonly.m4 \ $(top_srcdir)/gnulib/m4/printf.m4 \ $(top_srcdir)/gnulib/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/gnulib/m4/size_max.m4 \ $(top_srcdir)/gnulib/m4/ssize_t.m4 \ $(top_srcdir)/gnulib/m4/std-gnu11.m4 \ $(top_srcdir)/gnulib/m4/stdarg.m4 \ $(top_srcdir)/gnulib/m4/stdbool.m4 \ $(top_srcdir)/gnulib/m4/stddef_h.m4 \ $(top_srcdir)/gnulib/m4/stdint.m4 \ $(top_srcdir)/gnulib/m4/stdint_h.m4 \ $(top_srcdir)/gnulib/m4/stdio_h.m4 \ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \ $(top_srcdir)/gnulib/m4/strerror.m4 \ $(top_srcdir)/gnulib/m4/strerror_r.m4 \ $(top_srcdir)/gnulib/m4/string_h.m4 \ $(top_srcdir)/gnulib/m4/strndup.m4 \ $(top_srcdir)/gnulib/m4/strnlen.m4 \ $(top_srcdir)/gnulib/m4/strtok_r.m4 \ $(top_srcdir)/gnulib/m4/strtoull.m4 \ $(top_srcdir)/gnulib/m4/sys_socket_h.m4 \ $(top_srcdir)/gnulib/m4/sys_types_h.m4 \ $(top_srcdir)/gnulib/m4/threadlib.m4 \ $(top_srcdir)/gnulib/m4/unistd_h.m4 \ $(top_srcdir)/gnulib/m4/vasnprintf.m4 \ $(top_srcdir)/gnulib/m4/vasprintf.m4 \ $(top_srcdir)/gnulib/m4/warn-on-use.m4 \ $(top_srcdir)/gnulib/m4/wchar_h.m4 \ $(top_srcdir)/gnulib/m4/wchar_t.m4 \ $(top_srcdir)/gnulib/m4/wint_t.m4 \ $(top_srcdir)/gnulib/m4/xalloc.m4 \ $(top_srcdir)/gnulib/m4/xsize.m4 \ $(top_srcdir)/gnulib/m4/xstrndup.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 = 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 \ 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 \ $(top_srcdir)/gnulib/ar-lib $(top_srcdir)/gnulib/config.guess \ $(top_srcdir)/gnulib/config.rpath \ $(top_srcdir)/gnulib/config.sub \ $(top_srcdir)/gnulib/install-sh $(top_srcdir)/gnulib/ltmain.sh \ $(top_srcdir)/gnulib/missing AUTHORS COPYING ChangeLog INSTALL \ NEWS README THANKS TODO gnulib/ar-lib gnulib/config.guess \ gnulib/config.rpath gnulib/config.sub gnulib/install-sh \ gnulib/ltmain.sh gnulib/missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz 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@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLEX = @FLEX@ FLOAT_H = @FLOAT_H@ FREETYPE_CPPFLAGS = @FREETYPE_CPPFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@ HARFBUZZ_LIBS = @HARFBUZZ_LIBS@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ IMPORT = @IMPORT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KPSEWHICH = @KPSEWHICH@ LATEX = @LATEX@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MOC = @MOC@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ 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@ PANDOC = @PANDOC@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ QMAKE = @QMAKE@ QT_CFLAGS = @QT_CFLAGS@ QT_CPPFLAGS = @QT_CPPFLAGS@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DEFINES = @QT_DEFINES@ QT_INCPATH = @QT_INCPATH@ QT_LDFLAGS = @QT_LDFLAGS@ QT_LFLAGS = @QT_LFLAGS@ QT_LIBS = @QT_LIBS@ QT_PATH = @QT_PATH@ QT_VERSION = @QT_VERSION@ QT_VERSION_MAJOR = @QT_VERSION_MAJOR@ RANLIB = @RANLIB@ RCC = @RCC@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UIC = @UIC@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ ft_config = @ft_config@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ttfautohint_major = @ttfautohint_major@ ttfautohint_minor = @ttfautohint_minor@ ttfautohint_revision = @ttfautohint_revision@ # due to a limitation of `autoreconf', # all -I directives currently must be set on a single line ACLOCAL_AMFLAGS = -I gnulib/m4 -I m4 SUBDIRS = gnulib/src \ lib \ frontend \ doc EXTRA_DIST = bootstrap \ bootstrap.conf \ FTL.TXT \ gnulib/m4/gnulib-cache.m4 \ GPLv2.TXT \ README \ TODO \ .version BUILT_SOURCES = .version all: $(BUILT_SOURCES) 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) --gnits'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnits \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits 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 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # 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) @case `sed 15q $(srcdir)/NEWS` in \ *"$(VERSION)"*) : ;; \ *) \ echo "NEWS not updated; not releasing" 1>&2; \ exit 1;; \ esac $(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) | GZIP=$(GZIP_ENV) gzip -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) | GZIP=$(GZIP_ENV) gzip -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*) \ GZIP=$(GZIP_ENV) gzip -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*) \ GZIP=$(GZIP_ENV) gzip -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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) 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-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool 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-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 .version: echo $(VERSION) > $@-t && mv $@-t $@ dist-hook: echo $(VERSION) > $(distdir)/VERSION # 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: ttfautohint-1.8.1/config.h.in0000644000175000001440000012155413222450646015772 0ustar00wlusers00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* CPU and C ABI indicator */ #ifndef __i386__ #undef __i386__ #endif #ifndef __x86_64_x32__ #undef __x86_64_x32__ #endif #ifndef __x86_64__ #undef __x86_64__ #endif #ifndef __alpha__ #undef __alpha__ #endif #ifndef __arm__ #undef __arm__ #endif #ifndef __armhf__ #undef __armhf__ #endif #ifndef __arm64_ilp32__ #undef __arm64_ilp32__ #endif #ifndef __arm64__ #undef __arm64__ #endif #ifndef __hppa__ #undef __hppa__ #endif #ifndef __hppa64__ #undef __hppa64__ #endif #ifndef __ia64_ilp32__ #undef __ia64_ilp32__ #endif #ifndef __ia64__ #undef __ia64__ #endif #ifndef __m68k__ #undef __m68k__ #endif #ifndef __mips__ #undef __mips__ #endif #ifndef __mipsn32__ #undef __mipsn32__ #endif #ifndef __mips64__ #undef __mips64__ #endif #ifndef __powerpc__ #undef __powerpc__ #endif #ifndef __powerpc64__ #undef __powerpc64__ #endif #ifndef __powerpc64_elfv2__ #undef __powerpc64_elfv2__ #endif #ifndef __s390__ #undef __s390__ #endif #ifndef __s390x__ #undef __s390x__ #endif #ifndef __sh__ #undef __sh__ #endif #ifndef __sparc__ #undef __sparc__ #endif #ifndef __sparc64__ #undef __sparc64__ #endif /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to the number of bits in type 'ptrdiff_t'. */ #undef BITSIZEOF_PTRDIFF_T /* Define to the number of bits in type 'sig_atomic_t'. */ #undef BITSIZEOF_SIG_ATOMIC_T /* Define to the number of bits in type 'size_t'. */ #undef BITSIZEOF_SIZE_T /* Define to the number of bits in type 'wchar_t'. */ #undef BITSIZEOF_WCHAR_T /* Define to the number of bits in type 'wint_t'. */ #undef BITSIZEOF_WINT_T /* 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 /* Define as the bit index in the word where to find bit 0 of the exponent of 'double'. */ #undef DBL_EXPBIT0_BIT /* Define as the word index where to find the exponent of 'double'. */ #undef DBL_EXPBIT0_WORD /* Define to 1 if // is a file system root distinct from /. */ #undef DOUBLE_SLASH_IS_DISTINCT_ROOT /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module dirname shall be considered present. */ #undef GNULIB_DIRNAME /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module fscanf shall be considered present. */ #undef GNULIB_FSCANF /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module lock shall be considered present. */ #undef GNULIB_LOCK /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module msvc-nothrow shall be considered present. */ #undef GNULIB_MSVC_NOTHROW /* Define to 1 if printf and friends should be labeled with attribute "__gnu_printf__" instead of "__printf__" */ #undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module scanf shall be considered present. */ #undef GNULIB_SCANF /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module strerror shall be considered present. */ #undef GNULIB_STRERROR /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module strerror_r-posix shall be considered present. */ #undef GNULIB_STRERROR_R_POSIX /* Define to 1 when the gnulib module isatty should be tested. */ #undef GNULIB_TEST_ISATTY /* Define to 1 when the gnulib module malloc-posix should be tested. */ #undef GNULIB_TEST_MALLOC_POSIX /* Define to 1 when the gnulib module memchr should be tested. */ #undef GNULIB_TEST_MEMCHR /* Define to 1 when the gnulib module memmem should be tested. */ #undef GNULIB_TEST_MEMMEM /* Define to 1 when the gnulib module strerror should be tested. */ #undef GNULIB_TEST_STRERROR /* Define to 1 when the gnulib module strerror_r should be tested. */ #undef GNULIB_TEST_STRERROR_R /* Define to 1 when the gnulib module strndup should be tested. */ #undef GNULIB_TEST_STRNDUP /* Define to 1 when the gnulib module strnlen should be tested. */ #undef GNULIB_TEST_STRNLEN /* Define to 1 when the gnulib module strtok_r should be tested. */ #undef GNULIB_TEST_STRTOK_R /* Define to 1 when the gnulib module strtoull should be tested. */ #undef GNULIB_TEST_STRTOULL /* Define to 1 when the gnulib module vasprintf should be tested. */ #undef GNULIB_TEST_VASPRINTF /* Define to 1 if you have 'alloca' after including , a header that may be supplied by this distribution. */ #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 header file. */ #undef HAVE_BP_SYM_H /* Define to 1 if you have the 'catgets' function. */ #undef HAVE_CATGETS /* Define to 1 if you have the header file. */ #undef HAVE_CRTDEFS_H /* Define to 1 if you have the declaration of `memmem', and to 0 if you don't. */ #undef HAVE_DECL_MEMMEM /* Define to 1 if you have the declaration of `program_invocation_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_NAME /* Define to 1 if you have the declaration of `program_invocation_short_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* Define to 1 if you have the declaration of `strerror_r', and to 0 if you don't. */ #undef HAVE_DECL_STRERROR_R /* Define to 1 if you have the declaration of `strndup', and to 0 if you don't. */ #undef HAVE_DECL_STRNDUP /* Define to 1 if you have the declaration of `strnlen', and to 0 if you don't. */ #undef HAVE_DECL_STRNLEN /* Define to 1 if you have the declaration of `strtok_r', and to 0 if you don't. */ #undef HAVE_DECL_STRTOK_R /* Define to 1 if you have the declaration of `_snprintf', and to 0 if you don't. */ #undef HAVE_DECL__SNPRINTF /* Define to 1 if you have the declaration of `__argv', and to 0 if you don't. */ #undef HAVE_DECL___ARGV /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_FEATURES_H /* Define to 1 if you have the 'getexecname' function. */ #undef HAVE_GETEXECNAME /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getopt_long_only' function. */ #undef HAVE_GETOPT_LONG_ONLY /* Define to 1 if you have the 'getprogname' function. */ #undef HAVE_GETPROGNAME /* Define if you have the 'intmax_t' type in or . */ #undef HAVE_INTMAX_T /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_INTTYPES_H_WITH_UINTMAX /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if the system has the type 'long long int'. */ #undef HAVE_LONG_LONG_INT /* Define if the 'malloc' function is POSIX compliant. */ #undef HAVE_MALLOC_POSIX /* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including config.h and . */ #undef HAVE_MAP_ANONYMOUS /* Define to 1 if you have the `mbrtowc' function. */ #undef HAVE_MBRTOWC /* Define to 1 if you have the `memmem' function. */ #undef HAVE_MEMMEM /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the 'mprotect' function. */ #undef HAVE_MPROTECT /* Define to 1 on MSVC platforms that have the "invalid parameter handler" concept. */ #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Define if the defines PTHREAD_MUTEX_RECURSIVE. */ #undef HAVE_PTHREAD_MUTEX_RECURSIVE /* Define if the POSIX multithreading library has read/write locks. */ #undef HAVE_PTHREAD_RWLOCK /* Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader. */ #undef HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER /* Define if the Qt framework is available. */ #undef HAVE_QT /* Define if Qt function QLocale::quoteString is available. */ #undef HAVE_QT_QUOTESTRING /* Define to 1 if atoll is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ATOLL /* Define to 1 if btowc is declared even after undefining macros. */ #undef HAVE_RAW_DECL_BTOWC /* Define to 1 if canonicalize_file_name is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CANONICALIZE_FILE_NAME /* Define to 1 if chdir is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CHDIR /* Define to 1 if chown is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CHOWN /* Define to 1 if dprintf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DPRINTF /* Define to 1 if dup is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DUP /* Define to 1 if dup2 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DUP2 /* Define to 1 if dup3 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DUP3 /* Define to 1 if endusershell is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ENDUSERSHELL /* Define to 1 if environ is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ENVIRON /* Define to 1 if euidaccess is declared even after undefining macros. */ #undef HAVE_RAW_DECL_EUIDACCESS /* Define to 1 if faccessat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FACCESSAT /* Define to 1 if fchdir is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FCHDIR /* Define to 1 if fchownat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FCHOWNAT /* Define to 1 if fcntl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FCNTL /* Define to 1 if fdatasync is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FDATASYNC /* Define to 1 if ffsl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FFSL /* Define to 1 if ffsll is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FFSLL /* Define to 1 if fpurge is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FPURGE /* Define to 1 if fseeko is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FSEEKO /* Define to 1 if fsync is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FSYNC /* Define to 1 if ftello is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FTELLO /* Define to 1 if ftruncate is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FTRUNCATE /* Define to 1 if getcwd is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETCWD /* Define to 1 if getdelim is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETDELIM /* Define to 1 if getdomainname is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETDOMAINNAME /* Define to 1 if getdtablesize is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETDTABLESIZE /* Define to 1 if getgroups is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETGROUPS /* Define to 1 if gethostname is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETHOSTNAME /* Define to 1 if getline is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETLINE /* Define to 1 if getloadavg is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETLOADAVG /* Define to 1 if getlogin is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETLOGIN /* Define to 1 if getlogin_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETLOGIN_R /* Define to 1 if getpagesize is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETPAGESIZE /* Define to 1 if gets is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETS /* Define to 1 if getsubopt is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETSUBOPT /* Define to 1 if getusershell is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETUSERSHELL /* Define to 1 if grantpt is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GRANTPT /* Define to 1 if group_member is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GROUP_MEMBER /* Define to 1 if initstate is declared even after undefining macros. */ #undef HAVE_RAW_DECL_INITSTATE /* Define to 1 if initstate_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_INITSTATE_R /* Define to 1 if isatty is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ISATTY /* Define to 1 if lchown is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LCHOWN /* Define to 1 if link is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LINK /* Define to 1 if linkat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LINKAT /* Define to 1 if lseek is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LSEEK /* Define to 1 if mbrlen is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MBRLEN /* Define to 1 if mbrtowc is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MBRTOWC /* Define to 1 if mbsinit is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MBSINIT /* Define to 1 if mbsnrtowcs is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MBSNRTOWCS /* Define to 1 if mbsrtowcs is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MBSRTOWCS /* Define to 1 if memmem is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MEMMEM /* Define to 1 if mempcpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MEMPCPY /* Define to 1 if memrchr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MEMRCHR /* Define to 1 if mkdtemp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKDTEMP /* Define to 1 if mkostemp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKOSTEMP /* Define to 1 if mkostemps is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKOSTEMPS /* Define to 1 if mkstemp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKSTEMP /* Define to 1 if mkstemps is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKSTEMPS /* Define to 1 if openat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_OPENAT /* Define to 1 if pclose is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PCLOSE /* Define to 1 if pipe is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PIPE /* Define to 1 if pipe2 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PIPE2 /* Define to 1 if popen is declared even after undefining macros. */ #undef HAVE_RAW_DECL_POPEN /* Define to 1 if posix_openpt is declared even after undefining macros. */ #undef HAVE_RAW_DECL_POSIX_OPENPT /* Define to 1 if pread is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PREAD /* Define to 1 if ptsname is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PTSNAME /* Define to 1 if ptsname_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PTSNAME_R /* Define to 1 if pwrite is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PWRITE /* Define to 1 if qsort_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_QSORT_R /* Define to 1 if random is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RANDOM /* Define to 1 if random_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RANDOM_R /* Define to 1 if rawmemchr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RAWMEMCHR /* Define to 1 if readlink is declared even after undefining macros. */ #undef HAVE_RAW_DECL_READLINK /* Define to 1 if readlinkat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_READLINKAT /* Define to 1 if reallocarray is declared even after undefining macros. */ #undef HAVE_RAW_DECL_REALLOCARRAY /* Define to 1 if realpath is declared even after undefining macros. */ #undef HAVE_RAW_DECL_REALPATH /* Define to 1 if renameat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RENAMEAT /* Define to 1 if rmdir is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RMDIR /* Define to 1 if rpmatch is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RPMATCH /* Define to 1 if secure_getenv is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SECURE_GETENV /* Define to 1 if setenv is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETENV /* Define to 1 if sethostname is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETHOSTNAME /* Define to 1 if setstate is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETSTATE /* Define to 1 if setstate_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETSTATE_R /* Define to 1 if setusershell is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETUSERSHELL /* Define to 1 if sleep is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SLEEP /* Define to 1 if snprintf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SNPRINTF /* Define to 1 if srandom is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SRANDOM /* Define to 1 if srandom_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SRANDOM_R /* Define to 1 if stpcpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STPCPY /* Define to 1 if stpncpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STPNCPY /* Define to 1 if strcasestr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRCASESTR /* Define to 1 if strchrnul is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRCHRNUL /* Define to 1 if strdup is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRDUP /* Define to 1 if strerror_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRERROR_R /* Define to 1 if strncat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRNCAT /* Define to 1 if strndup is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRNDUP /* Define to 1 if strnlen is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRNLEN /* Define to 1 if strpbrk is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRPBRK /* Define to 1 if strsep is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRSEP /* Define to 1 if strsignal is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRSIGNAL /* Define to 1 if strtod is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRTOD /* Define to 1 if strtok_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRTOK_R /* Define to 1 if strtoll is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRTOLL /* Define to 1 if strtoull is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRTOULL /* Define to 1 if strverscmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRVERSCMP /* Define to 1 if symlink is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SYMLINK /* Define to 1 if symlinkat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SYMLINKAT /* Define to 1 if tmpfile is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TMPFILE /* Define to 1 if truncate is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TRUNCATE /* Define to 1 if ttyname_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TTYNAME_R /* Define to 1 if unlink is declared even after undefining macros. */ #undef HAVE_RAW_DECL_UNLINK /* Define to 1 if unlinkat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_UNLINKAT /* Define to 1 if unlockpt is declared even after undefining macros. */ #undef HAVE_RAW_DECL_UNLOCKPT /* Define to 1 if unsetenv is declared even after undefining macros. */ #undef HAVE_RAW_DECL_UNSETENV /* Define to 1 if usleep is declared even after undefining macros. */ #undef HAVE_RAW_DECL_USLEEP /* Define to 1 if vdprintf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_VDPRINTF /* Define to 1 if vsnprintf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_VSNPRINTF /* Define to 1 if wcpcpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCPCPY /* Define to 1 if wcpncpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCPNCPY /* Define to 1 if wcrtomb is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCRTOMB /* Define to 1 if wcscasecmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCASECMP /* Define to 1 if wcscat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCAT /* Define to 1 if wcschr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCHR /* Define to 1 if wcscmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCMP /* Define to 1 if wcscoll is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCOLL /* Define to 1 if wcscpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCPY /* Define to 1 if wcscspn is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCSPN /* Define to 1 if wcsdup is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSDUP /* Define to 1 if wcsftime is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSFTIME /* Define to 1 if wcslen is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSLEN /* Define to 1 if wcsncasecmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSNCASECMP /* Define to 1 if wcsncat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSNCAT /* Define to 1 if wcsncmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSNCMP /* Define to 1 if wcsncpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSNCPY /* Define to 1 if wcsnlen is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSNLEN /* Define to 1 if wcsnrtombs is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSNRTOMBS /* Define to 1 if wcspbrk is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSPBRK /* Define to 1 if wcsrchr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSRCHR /* Define to 1 if wcsrtombs is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSRTOMBS /* Define to 1 if wcsspn is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSSPN /* Define to 1 if wcsstr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSSTR /* Define to 1 if wcstok is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSTOK /* Define to 1 if wcswidth is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSWIDTH /* Define to 1 if wcsxfrm is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSXFRM /* Define to 1 if wctob is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCTOB /* Define to 1 if wcwidth is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCWIDTH /* Define to 1 if wmemchr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WMEMCHR /* Define to 1 if wmemcmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WMEMCMP /* Define to 1 if wmemcpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WMEMCPY /* Define to 1 if wmemmove is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WMEMMOVE /* Define to 1 if wmemset is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WMEMSET /* Define to 1 if _Exit is declared even after undefining macros. */ #undef HAVE_RAW_DECL__EXIT /* Define to 1 if 'sig_atomic_t' is a signed integer type. */ #undef HAVE_SIGNED_SIG_ATOMIC_T /* Define to 1 if 'wchar_t' is a signed integer type. */ #undef HAVE_SIGNED_WCHAR_T /* Define to 1 if 'wint_t' is a signed integer type. */ #undef HAVE_SIGNED_WINT_T /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define if the return value of the snprintf function is the number of of bytes (excluding the terminating NUL) that would have been produced if the buffer had been large enough. */ #undef HAVE_SNPRINTF_RETVAL_C99 /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_STDINT_H_WITH_UINTMAX /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the 'strerror_r' function. */ #undef HAVE_STRERROR_R /* 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 'strndup' function. */ #undef HAVE_STRNDUP /* Define to 1 if you have the `strnlen' function. */ #undef HAVE_STRNLEN /* Define to 1 if you have the `strtok_r' function. */ #undef HAVE_STRTOK_R /* Define to 1 if you have the `strtoull' function. */ #undef HAVE_STRTOULL /* Define to 1 if you have the 'symlink' function. */ #undef HAVE_SYMLINK /* Define to 1 if you have the header file. */ #undef HAVE_SYS_BITYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_CDEFS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MMAN_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if the system has the type 'unsigned long long int'. */ #undef HAVE_UNSIGNED_LONG_LONG_INT /* Define if you have a global __progname variable */ #undef HAVE_VAR___PROGNAME /* Define to 1 if you have the 'vasnprintf' function. */ #undef HAVE_VASNPRINTF /* Define to 1 if you have the `vasprintf' function. */ #undef HAVE_VASPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_WCHAR_H /* Define if you have the 'wchar_t' type. */ #undef HAVE_WCHAR_T /* Define to 1 if you have the `wcrtomb' function. */ #undef HAVE_WCRTOMB /* Define to 1 if you have the `wcslen' function. */ #undef HAVE_WCSLEN /* Define to 1 if you have the `wcsnlen' function. */ #undef HAVE_WCSNLEN /* Define to 1 if you have the header file. */ #undef HAVE_WINSOCK2_H /* Define if you have the 'wint_t' type. */ #undef HAVE_WINT_T /* Define to 1 if O_NOATIME works. */ #undef HAVE_WORKING_O_NOATIME /* Define to 1 if O_NOFOLLOW works. */ #undef HAVE_WORKING_O_NOFOLLOW /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to 1 if you have the '_set_invalid_parameter_handler' function. */ #undef HAVE__SET_INVALID_PARAMETER_HANDLER /* Define to 1 if the compiler supports __builtin_expect, and to 2 if does. */ #undef HAVE___BUILTIN_EXPECT #ifndef HAVE___BUILTIN_EXPECT # define __builtin_expect(e, c) (e) #elif HAVE___BUILTIN_EXPECT == 2 # include #endif /* Define to 1 if you have the '__xpg_strerror_r' function. */ #undef HAVE___XPG_STRERROR_R /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */ #undef MAP_ANONYMOUS /* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO #endif /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define if the pthread_in_use() detection is hard. */ #undef PTHREAD_IN_USE_DETECTION_HARD /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'ptrdiff_t'. */ #undef PTRDIFF_T_SUFFIX /* Define to 1 if strerror(0) does not return a message implying success. */ #undef REPLACE_STRERROR_0 /* Define if vasnprintf exists but is overridden by gnulib. */ #undef REPLACE_VASNPRINTF /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'sig_atomic_t'. */ #undef SIG_ATOMIC_T_SUFFIX /* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #ifndef SIZE_MAX # undef SIZE_MAX #endif /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'size_t'. */ #undef SIZE_T_SUFFIX /* 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 strerror_r returns char *. */ #undef STRERROR_R_CHAR_P /* Define if the POSIX multithreading library can be used. */ #undef USE_POSIX_THREADS /* Define if references to the POSIX multithreading library should be made weak. */ #undef USE_POSIX_THREADS_WEAK /* Define if the GNU Pth multithreading library can be used. */ #undef USE_PTH_THREADS /* Define if references to the GNU Pth multithreading library should be made weak. */ #undef USE_PTH_THREADS_WEAK /* Define if the old Solaris multithreading library can be used. */ #undef USE_SOLARIS_THREADS /* Define if references to the old Solaris multithreading library should be made weak. */ #undef USE_SOLARIS_THREADS_WEAK /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable NetBSD extensions on NetBSD. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD extensions on NetBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions if necessary. HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Define if the native Windows multithreading API can be used. */ #undef USE_WINDOWS_THREADS /* Version number of package */ #undef VERSION /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wchar_t'. */ #undef WCHAR_T_SUFFIX /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wint_t'. */ #undef WINT_T_SUFFIX /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 1 to make NetBSD features available. MINIX 3 needs this. */ #undef _NETBSD_SOURCE /* The _Noreturn keyword of C11. */ #if ! (defined _Noreturn \ || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for 'stat' and other things to work. */ #undef _POSIX_SOURCE /* For standard stat data types on VMS. */ #undef _USE_STD_STAT /* Define to rpl_ if the getopt replacement functions and variables should be used. */ #undef __GETOPT_PREFIX /* Define to 1 if the system predates C++11. */ #undef __STDC_CONSTANT_MACROS /* Define to 1 if the system predates C++11. */ #undef __STDC_LIMIT_MACROS /* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see . Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like . For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions. This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see . Assume DragonFly and FreeBSD will be similar. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined __header_inline \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see and . */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif /* A replacement for va_copy, if needed. */ #define gl_va_copy(a,b) ((a) = (b)) /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to long or long long if and don't define. */ #undef intmax_t /* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif /* Define to `int' if does not define. */ #undef mode_t /* Define to `int' if does not define. */ #undef pid_t /* Define as the type of the result of subtracting two pointers, if the system doesn't define it. */ #undef ptrdiff_t /* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict /* Work around a bug in Sun C++: it does not support _Restrict or __restrict__, even though the corresponding Sun C compiler ends up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. Perhaps some future version of Sun C++ will work with restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ #if defined __SUNPRO_CC && !defined __RESTRICT # define _Restrict # define __restrict__ #endif /* Define to `unsigned int' if does not define. */ #undef size_t /* Define as a signed type of the same size as size_t. */ #undef ssize_t /* Define as a marker that can be attached to declarations that might not be used. This helps to reduce warnings, such as from GCC -Wunused-parameter. */ #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED __attribute__ ((__unused__)) #else # define _GL_UNUSED #endif /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name is a misnomer outside of parameter lists. */ #define _UNUSED_PARAMETER_ _GL_UNUSED /* gcc supports the "unused" attribute on possibly unused labels, and g++ has since version 4.5. Note to support C++ as well as C, _GL_UNUSED_LABEL should be used with a trailing ; */ #if !defined __cplusplus || __GNUC__ > 4 \ || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) # define _GL_UNUSED_LABEL _GL_UNUSED #else # define _GL_UNUSED_LABEL #endif /* The __pure__ attribute was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The __const__ attribute was added in gcc 2.95. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST /* empty */ #endif /* Define as a macro for copying va_list variables. */ #undef va_copy ttfautohint-1.8.1/AUTHORS0000644000175000001440000000007412643432074015011 0ustar00wlusers00000000000000Authors of ttfautohint. Werner Lemberg EOF ttfautohint-1.8.1/COPYING0000644000175000001440000000550712643432074015002 0ustar00wlusers00000000000000The ttfautohint library is copyrighted work and cannot be used legally without a software license. Since it is largely based on FreeType, the same license conditions are used. In order to make this project usable to a vast majority of developers, the ttfautohint library is distributed under two mutually exclusive open-source licenses. This means that *you* must choose *one* of the two licenses described below, then obey all its terms and conditions when using the ttfautohint library in any of your projects or products. - The FreeType License, found in the file `FTL.TXT', which is similar to the original BSD license *with* an advertising clause that forces you to explicitly cite the ttfautohint library in your product's documentation. All details are in the license file. This license is suited to products which don't use the GNU General Public License. Note that this license is compatible to the GNU General Public License version 3, but not version 2. - The GNU General Public License version 2, found in `GPLv2.TXT' (any later version can be used also), for programs which already use the GPL. In addition, as a special exception to both the FreeType (FTL) and GNU General Public License (GPL), the copyright holder of ttfautohint gives you unlimited permission to copy, distribute and modify the bytecode that gets embedded in the fonts processed by ttfautohint. You need not follow the terms of the FTL or GPL when using or distributing such bytecode, even though portions of the text of ttfautohint appear in them. The FTL or GPL (depending on your choice) does govern all other use of the material that constitutes ttfautohint. This special exception to the FTL and GPL applies to versions of ttfautohint released by the copyright holder of ttfautohint. Note that people who make modified versions of ttfautohint are not obligated to grant this special exception for their modified versions; it is their choice whether to do so. Both the FTL and the GPL give permission to release a modified version without this exception; this exception also makes it possible to release a modified version which carries forward this exception. ----------------------------------------------------------------------------- The following files are distributed with the source bundle of the ttfautohint library to configure and build the library with GNU tools, but which aren't part of it due to different licenses. GPL only: bootstrap bootstrap.conf m4/autotroll.m4 m4/ltlize_lang.m4 m4/pkg.m4 X11 license: lib/llrb.h two-clause BSD license: lib/sds.c lib/sds.h All files of the following directories are distributed with the source bundle of the ttfautohint library to configure and build the library with GNU tools, but which aren't part of it due to a different license. GPL only: gnulib EOF ttfautohint-1.8.1/ChangeLog0000644000175000001440000000055112643432074015513 0ustar00wlusers00000000000000This package doesn't provide a detailed ChangeLog. Instead, please check out the git repository of `ttfautohint' and use a program like `gitk' to inspect the various commits directly. Alternatively, you might directly go to the URL below to view the commits with your web browser. The URL of the git repository is http://repo.or.cz/w/ttfautohint.git EOF ttfautohint-1.8.1/INSTALL0000644000175000001440000003661413222247025014775 0ustar00wlusers00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in '/usr/bin'. So, if you need '/usr/ucb' in your 'PATH', put it _after_ '/usr/bin'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the '--build=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with '--host=TYPE'. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash 'configure' Invocation ====================== 'configure' recognizes the following options to control how it operates. '--help' '-h' Print a summary of all of the options to 'configure', and exit. '--help=short' '--help=recursive' Print a summary of the options unique to this package's 'configure', and exit. The 'short' variant lists options used only in the top level, while the 'recursive' variant lists options also present in any nested packages. '--version' '-V' Print the version of Autoconf used to generate the 'configure' script, and exit. '--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. '--config-cache' '-C' Alias for '--cache-file=config.cache'. '--quiet' '--silent' '-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). '--srcdir=DIR' Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. '--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. '--no-create' '-n' Run the configure checks, but stop before creating any output files. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. ttfautohint-1.8.1/NEWS0000644000175000001440000004205013222450316014431 0ustar00wlusers00000000000000Version 1.8.1 (2018-Jan-01) --------------------------- * Bug fix: The `configure` script couldn't recognize Qt 5.10.x. Version 1.8 (2017-Dec-31) ------------------------- * A third, 'natural' stem width mode has been added: No adjustments to stem widths, discrete blue zone positioning. This is what FreeType uses for its 'light' (auto-)hinting mode. * A new option `-a` has been implemented to select the stem width mode for the three rendering targets (grayscale, GDI ClearType, DW ClearType). This supersedes option `-g`, which is now deprecated. * Stem widths for the hinting process can now be manually set using the new `width` keyword in a control instructions file. This is especially useful for extra-bold fonts, where the algorithmically derived values are often too large, causing the filling of 'eyes' in 'e' or 'a' glyphs at small sizes. * libttfautohint gets now installed as a DLL or static library (or both, depending on the parameters of the `configure` script), together with its header files. * Two functions have been added to the library: `TTF_autohint_version` and `TTF_autohint_version_string`, which do the obvious. * Two options to `TTF_autohint` have been added: `alloc-func` and `free-func`. These are necessary on some platforms if ttfautohint is compiled as a shared library, and the application uses a different runtime library. This can happen, for example, on the MS Windows platform if your program is written in Python and communicates via the 'ctypes' interface with the ttfautohint DLL. * `TTF_autohint` options `{gray,gdi-cleartype,dw-cleartype}-strong-stem-width` are now superseded by `{gray,gdi-cleartype,dw-cleartype}`-stem-width-mode` to handle the new natural stem width mode also. * Bug fix: Later control instructions now correctly overwrite earlier entries as documented. Version 1.7 (2017-Aug-26) ------------------------- * Support for Adlam, Avestan, Bamum, Buhid, Unified Canadian Syllabics, Carian, Chakma, Coptic, Cypriot, Deseret, Glagolitic, Gothic, Kayah Li, Lisu, N'Ko, Ol Chiki, Old Turkic, Osage, Osmanya, Saurashtra, Shavian, Sundanese, Tai Viet, Tifinagh, and Vai scripts. Note that the used blue zone characters might not be optimal. Please report any problems so that I can fix issues! * Option `--fallback-stem-width` now works for non-symbol fonts also, as documented. * TrueType bytecode generated by ttfautohint now correctly supports most recent MS interpreter versions. * A bug with bytecode for composite glyphs with composite subglyphs is now fixed. Version 1.6 (2016-Nov-27) ------------------------- * A new option `--reference` (and `--reference-index` to select a font within a TTC) makes ttfautohint use the blue zones from another font. This helps synchronize the ascenders and descenders of font families. * Support for Armenian, Cherokee, Ethiopic, Georgian, Gujarati, Gurmukhi, Kannada, Malayalam, Sinhala, and Tamil scripts. * New option `--ttfa-info` to display a font's `TTFA` table (if present). * Glyphs covered by the fallback script are now hinted by default. Previously, they were scaled only. The default fallback script `none` now implies hinting without script-specific blue zones (but still aligning stems to the grid if possible). * The new option `--fallback-scaling` changes the behaviour of the fallback script from hinting to scaling (as implemented in previous versions). * ttfautohint (but not ttfautohintGUI) now honours the SOURCE_DATE_EPOCH environment variable for reproducible builds. This corresponds to the new library option `epoch`. * Bug fix: Allow dehinting of fonts that contain a `.ttfautohint` glyph. Version 1.5 (2016-Jan-24) ------------------------- * Support for Khmer, Myanmar, and Bengali scripts. * Improved Devanagari hinting. * ttfautohintGUI can now be compiled with Qt5. * Bug fix: Too many delta control instructions for a single glyph caused a bytecode stack overflow, making the MS rasterizer ignore all hinting instructions for this glyph. * Bug fix: Don't create multiple `TTFA` tables in font. * Bug fix: Under certain circumstances, glyph indices used in Indic features were incorrectly assigned to the default script. Version 1.4.1 (2015-Oct-17) --------------------------- * A bug in handling control instruction files could cause severe glyph shape distortions of accent-like glyphs. All users should update. Version 1.4 (2015-Oct-04) ------------------------- * Support for Thai and Lao scripts. * Support for the Arabic script. * Better support for scripts that contain superscript-like and subscript-like glyphs, e.g., the International Phonetic Alphabet (IPA). * Accents and other `non-base' glyphs are now hinted without snapping to blue zones. * A new control instruction syntax form was added to adjust the mapping between glyphs and styles. Right now, its usage is quite limited; a forthcoming version will give much more flexibility. * The `touch` keyword in a control instructions file was buggy: If used for a point\ `P` at a ppem value\ `s`, it sometimes led to unwanted movements of\ `P` for ppem values unequal to\ `s`, thus causing outline distortions. Version 1.3 (2015-Jan-06) ------------------------- * Keywords in control instruction files can be more verbose to increase readability. You can now use `left`, `right`, `nodir`, `point`, `touch`, `xshift`, and `yshift` for `l`, `r`, `n`, `p`, `t, `x`, and `y`, respectively. * A new control instruction keyword `touch` was added to apply delta instructions before the final IUP bytecode commands, also `touching' the affected points (to use the TrueType instructions terminology). Such deltas *do* work even with ClearType if applied to the non-ClearType direction. * Support for the Telugu script. * The amount of information about ttfautohint and its parameters that gets added to the `name` table by default has been reduced. A new option `--detailed-info` restores the previous behaviour. * ttfautohintGUI crashed if not used with a control instruction file. * ttfautohintGUI now correctly switches to a horizontal two-column layout if the standard one-column layout would exceed the screen height. * A new option `--family-suffix` makes it possible to append a suffix to a font's family name in the `name` table. This can be useful during the development process: It helps the operating system to simultaneously display several instances of a font that are processed with different ttfautohint parameters. * The new library option `info-post-callback` helps in processing data from the `name` table. Version 1.2 (2014-Oct-06) ------------------------- * It is now possible to control the hinting process at a very low level using a 'control instructions' file. Right now, two modes are supported: - Adding segments and changing segment directions. - Applying delta exceptions. Note that this doesn't really work in ClearType. Please see the documentation for a description and a small tutorial. In the command-line front-end, use option `--control-file` to load such a file. * Support for input file watching in ttfautohintGUI: If the 'Watch Input File' box is checked, the program automatically regenerates the output file as soon as the input font or control instructions file gets modified. The idea is to dock ttfautohintGUI to your favourite font and text editor instead of adding a cheap text editor to ttfautohintGUI itself. * With the new option `--fallback-stem-width` it is now possible to set a default stem width for all scripts that lack proper standard characters in the font. * Add alias `--adjust-subglyphs` for option `--pre-hinting` to better describe its functionality. The short form `-p` stays unchanged. * New option `--ttfa-table` to add an SFNT table `TTFA` to the output font, containing an ASCII dump of all used ttfautohint parameters (including control instructions). Right now, this is mainly for archiving purposes. Forthcoming versions of ttfautohint will be able to re-use this data if a font gets re-processed. * A harmless buglet was fixed that made the `glyf` table too large by one byte under some circumstances. * A bug fix taken from FreeType, correcting a crash for unusual outlines. * Better handling of TTC files. * New library options `error-callback` and `error-callback-data` for improved diagnostics. [No change in the front-ends except better error messages.] * Many other, minor fixes and improvements. Version 1.1 (2014-May-05) ------------------------- * Support for the Devanagari script. * Bug fixes in the computation of strong stem widths. GDI hinting now gives much more consistent results. * Better recognition of script coverage: ttfautohint now properly scans composite glyphs to cover components also. * Improved glyph shape analysis: Non-flat local extrema are now recognized more reliably, and stem detection works better. Version 1.00 (2014-Mar-20) -------------------------- * Much less memory consumption while handling fonts with complicated glyphs. * Option `-s` was partially broken. Version 1.00rc1 (2014-Feb-07) ----------------------------- * OpenType feature support. ttfautohint now uses the HarfBuzz library to analyze data from the `GSUB` table. This allows the hinting of glyphs that don't have an entry in a font's `cmap` table, for example superscripts or small caps. Related to this, the new option `--default-script` controls the default (fallback) script used for OpenType features. * More than a single standard character is used. For example, the 'latin' script uses characters 'o', 'O', and digit '0'. This improves the hinting of fonts (and features) that have only a partial coverage of a script's character repertoire. * Much better GDI ClearType hinting in the range 30-80ppem (approx.), avoiding overly flat tops and bottoms of round glyphs. * Better handling of non-square pixels (this is, horizontal and vertical resolutions differ) in the created TrueType bytecode. Version 0.97 (2013-Nov-09) -------------------------- * Improved script support. Besides Cyrillic and Greek, which are now handled separately from Latin, ttfautohint can handle Hebrew. * Option `-f` now takes a parameter to specify the fallback script. The corresponding long option name has been renamed from `--latin-fallback` to `--fallback-script`. * Work around a bug in display environments that use FreeType 2.5.0 and earlier for rendering: Sometimes, the 'strong' stem width routine was used for DW ClearType (this is, subpixel hinting in FreeType is enabled) even if 'smooth' was selected while generating the font with ttfautohint. Version 0.96 (2013-Aug-06) -------------------------- * Option `--components` has been replaced with `--composites`: By default, the components of a composite glyph are now hinted separately, since tests has shown that this gives good results in most cases. If this option is set, however, the composite glyph itself gets hinted (and the hints of the components are ignored). An unfortunate side effect is that ttfautohint's option `-c` (which stays as a shorthand for `--composites`) now does exactly the opposite as in previous releases. * Older versions of Monotype's 'iType' bytecode interpreter have a serious bug: The DIV instruction rounds the result, while the correct operation is truncation. This caused 'exploding characters' with fonts hinted by ttfautohint. Since many printers contain this rasterizer without any possibility to update to a non-buggy version, ttfautohint now contains work-arounds to circumvent the problem. * Better support for glyphs where some points have almost the same position (for example glyph 'Oslash' in font 'Roboto-Thin'). * Better support for glyphs that use explicit 'on' points around round extrema. Version 0.95 (2013-Mar-07) -------------------------- * New option `--dehint` to strip off all hints without generating new hints. This option is intended for testing purposes. * Minor fixes to the created bytecode for compatibility. * Minor GUI improvements. Version 0.94 (2012-Nov-29) -------------------------- * New option `--windows-compatibility` that adds two artificial blue zones at vertical positions given by 'usWinAscent' and 'usWinDescent'. This helps ttfautohint's hinting algorithm reduce the possibility of clipping if those two values are very tight. * Implement option `--x-height-snapping-exceptions`, making ttfautohint avoid x-height snapping for selected PPEM values. Useful in combination with `--windows-compatibility`. * Minor fixes to the created bytecode for compatibility and robustness. Version 0.93 (2012-Oct-09) -------------------------- * New option `--components` to treat components of composite glyphs separately. This greatly reduces the bytecode size. I'm waiting for reports whether this option works for most fonts; in case this is true I'm inverting the option, making it the default (and the old behaviour optional). * Full support of TTCs, this is, all subfonts get auto-hinted now. * The upper limit of the `--increase-x-height` option has been removed. * Drag-and-drop support in the GUI. * The command-line version of ttfautohint now acts like a (Unix) filter, this is, it accepts stdin and stdout as input and output, respectively. * Less memory consumption. Version 0.92 (2012-Aug-07) -------------------------- * A serious bug in the created bytecode has been fixed, causing incorrect rounding. Version 0.91 (2012-Jul-12) -------------------------- * A new, 'strong' routine to handle stem widths and positions has been added, to be selected with the `--strong-stem-width` command line option. If it is active, stem widths and positions are snapped to the grid as much as possible. This algorithm is useful for GDI ClearType support. * A new command line option `--debug` (not available for ttfautohintGUI) to print very detailed debugging information. Version 0.9 (2012-Jun-06) ------------------------- * The created bytecode has been reduced in size, making it approx. 20% smaller. * New option `--symbol` to use standard stem height and width values instead of using character 'o' (which may be missing). Use this option for symbol fonts or math glyphs. * More documentation (in text, HTML, and PDF format). It's still incomplete, though. * Option `--ignore-permissions` has been renamed to `--ignore-restrictions`. The short form is still `-i`. * Defaults for various parameters have been set to more sensible values: - hinting-range-max: 50 (was 1000) - hinting-limit: 200 (was 1000) * Option `--increase-x-height` now has a mandatory argument (in the range 6-20 or value\ 0 to disable it, default value is 14). Version 0.8 (2012-Mar-21) ------------------------- * Implement option `-x` to increase the x height of the font for small PPEM values by rounding up far more often then rounding down. * Add option '`-G n`' to switch off hinting completely above value\ `n`. * ttfautohint now appends version information and the used parameters to the 'Version' field(s) in the 'name' table. This can be suppressed with option `-n`. Version 0.7 (2012-Feb-05) ------------------------- * A GUI has been added, using the Qt framework. The binary is called 'ttfautohintGUI'. Version 0.6.1 (2012-Jan-02) --------------------------- * The improved handling of composite glyphs in 0.6 was buggy under certain circumstances, making ttfautohint crash and FontValidator complain. * Dropout handling has been activated. Version 0.6 (2011-Dec-25) ------------------------- * Improved handling of composite glyphs. * Implement option `-p` to pre-hint glyphs with original hints before conversion takes place. * Don't add a `DSIG` table if there is none in the input font. * Human-readable error messages instead of hexadecimal error codes. * Better tests (both at runtime and compile time) to reject too old FreeType versions. Version 0.5 (2011-Nov-06) ------------------------- * Rendering on iOS is now expected to give good results. * No bad rendering at very large PPEM values. Version 0.4 (2011-Oct-27) ------------------------- * The bytecode has been changed to 'create' twilight points. This should avoid rendering artifacts on some platforms. Version 0.3 (2011-Sep-09) ------------------------- * Fix font generation; sometimes the `glyf` table was one byte too short, making the font invalid. Version 0.2 (2011-Jul-19) ------------------------- * Fix bytecode bugs that prevented correct rendering on some platforms. Version 0.1 (2011-Jun-30) ------------------------- * First release. ttfautohint-1.8.1/README0000644000175000001440000000267113222450325014617 0ustar00wlusers00000000000000ttfautohint 1.8.1 ----------------- by Werner Lemberg This project provides a library that takes a TrueType font as the input, removes its bytecode instructions (if any), and returns a new font where all glyphs are bytecode hinted using the information given by FreeType's auto-hinting module. The idea is to provide the excellent quality of the auto-hinter on platforms that don't use FreeType. The library has a single API function, `TTF_autohint'; see `lib/ttfautohint.h' for a detailed description. Note that the library itself won't get installed currently. A command-line interface to the library is the `ttfautohint' program; after compilation and installation, say ttfautohint --help for usage information, or say man ttfautohint to read its manual page. A GUI to the library is `ttfautohintGUI'; it uses the Qt4 framework. The compilation of this application can be disabled with the `--without-qt' option of the `configure' script. ----------------------------------------------------------------------------- Copyright (C) 2011-2017 by Werner Lemberg. This file is part of the ttfautohint library, and may only be used, modified, and distributed under the terms given in `COPYING'. By continuing to use, modify, or distribute this file you indicate that you have read `COPYING' and understand and accept it fully. The file `COPYING' mentioned in the previous paragraph is distributed with the ttfautohint library. EOF ttfautohint-1.8.1/THANKS0000644000175000001440000000332713153174711014656 0ustar00wlusers00000000000000The ttfautohint library has been written by Werner Lemberg . It is largely based on the FreeType autohinting module, written by David Turner . Special thanks to Dave Crossland for proposing the original idea, and to Raph Levien and the Google Web Fonts team for providing financial support to initiate the project. Thanks also to Extensis, FontLab, Google (again) and all the other people who contributed to the campaign at Pledgie for continuing the financial support. The following people have provided help in developing and testing the library and front-ends: Dave Arnold Vernon Adams Frederik Berlaen Frank E. Blokland James Cloos Girish Dalvi Erwin Denissen Ralf S. Engelschall Greg Hitchcock Hirwen Harendal Khaled Hosny Wei Huang Denis Jacquerye Daniel Johnson Christoph Koeberlin David Lemon Karsten Lücke Pablo Moleri Thomas Phinney Thomas Rutter Alexandre Saumier Demers Marc Schönefeld Eben Sorkin Adam Twardoch Jasper de Waard Zack Weinberg Benjamin Yang EOF ttfautohint-1.8.1/TODO0000644000175000001440000000714213217413303014424 0ustar00wlusers00000000000000 important improvements ---------------------- add features to the GUI -> direct control over `actions' -> preview similar to ftgrid -> autocompletion of file names with tab key control `gasp' table; Adam Twardoch suggest the following: 1. Calculate "gaspstem", i.e. the most common thickness of horizontal stems (y direction distances) for lowercase Latin letters. 2. If gaspstem <= 0.03 * upm, apply gasp symmetric smoothing across the entire range (rangeMaxPPEM 0xFFFF, value 15) 3. Else, calculate gaspthreshold as follows: ceil(1.33 * upm / gaspstem) - 1 4. Apply no symmetric smoothing up to the gaspthreshold ppem (rangeMaxPPEM gaspthreshold, value 7), and apply symmetric smoothing above. In addition, ttfautohint should provide a commandline parameter that allows the user to override the automatic logic. If that parameter = 0, then gasp value 15 should be applied across the entire range. If the parameter > 0, then up to that parameter value the gasp value 7 should be applied, and gasp value 15 should be applied above. create a separate blue zone class for `i' and `j': . if the values differ more than a given threshold, handle them separately . otherwise, unify them with `f' and friends. user-defined blue zones? -> old-style digits control the width of blue zones add control over character ranges that define a script; in particular, add support for the PUA control the minimum stem width try to `embolden' fonts at small sizes to avoid drop-outs; cf. Infinality patches make switching between smooth and strong hinting dependent on user-defined ranges improve `adjust-subglyphs' by making the used PPEM value configurable allow hinting of single glyphs, using a config file that holds the global settings better handling of `incomplete' fonts (this is, fonts that lack the minimum set of glyphs necessary to determine the blue zones) add second-pass analysis to improve positioning of composite glyphs introduce a new control instructions command to apply a given delta to a whole contour minor improvements ------------------ add a glossary to the documentation reject fonts that are `hopeless' (for example, `Lipstick') correctly set `lowestRecPPEM' field in `head' control dropout mode apply hinting in x direction also? -> warper: shifting with and without scaling -> `standard' autofit hinting add a config and/or command file for batch handling warn against overwrite of output file in command-line mode? reduce output size of option -p: 1. compare outline rendered at EM value with unhinted outline 2. adjust subglyphs only if result of item 1 differs more than given threshold (default 0.5%?) better control of -i output allow processing of multiple files by using globs as in the Midnight Commander? allow composite fonts already processed by ttfautohint to be processed again (due to option `hint-composites' this isn't urgent) make ttfautohint remember options: 1. collect md5 checksums in a `~/.ttfautohint_history' file so that fonts can be re-processed easily, using the same parameters 2. if fonts already processed by ttfautohint can be re-processed (which isn't possible yet), parse the `version' string for parameters implement (sort of) the opposite of -x, this is, decrease the x height later enhancements ------------------ add CJK autohinting module instead of emitting bytecode, write the hints as a VTT or FontLab script Windows/Mac installer various ------- testing with Windows and Apple font checkers man page for ttfautohint library add help2man script so that parallel builds always work EOF ttfautohint-1.8.1/bootstrap0000755000175000001440000007544313204313374015713 0ustar00wlusers00000000000000#! /bin/sh # Print a version string. scriptversion=2017-09-19.08; # UTC # Bootstrap this package from checked-out sources. # Copyright (C) 2003-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 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 . # Originally written by Paul Eggert. The canonical version of this # script is maintained as build-aux/bootstrap in gnulib, however, to # be useful to your project, you should place a copy of it under # version control in the top-level directory of your project. The # intent is that all customization can be done with a bootstrap.conf # file also maintained in your version control; gnulib comes with a # template build-aux/bootstrap.conf to get you started. # Please report bugs or propose patches to bug-gnulib@gnu.org. nl=' ' # Ensure file names are sorted consistently across platforms. LC_ALL=C export LC_ALL # Ensure that CDPATH is not set. Otherwise, the output from cd # would cause trouble in at least one use below. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH local_gl_dir=gl # Honor $PERL, but work even if there is none. PERL="${PERL-perl}" me=$0 usage() { cat <&2 } # warn_ WORD1... warn_ () { # If IFS does not start with ' ', set it and emit the warning in a subshell. case $IFS in ' '*) warnf_ '%s\n' "$*";; *) (IFS=' '; warn_ "$@");; esac } # die WORD1... die() { warn_ "$@"; exit 1; } # Configuration. # Name of the Makefile.am gnulib_mk=gnulib.mk # List of gnulib modules needed. gnulib_modules= # Any gnulib files needed that are not in modules. gnulib_files= : ${AUTOPOINT=autopoint} : ${AUTORECONF=autoreconf} # A function to be called right after gnulib-tool is run. # Override it via your own definition in bootstrap.conf. bootstrap_post_import_hook() { :; } # A function to be called after everything else in this script. # Override it via your own definition in bootstrap.conf. bootstrap_epilogue() { :; } # The command to download all .po files for a specified domain into # a specified directory. Fill in the first %s is the domain name, and # the second with the destination directory. Use rsync's -L and -r # options because the latest/%s directory and the .po files within are # all symlinks. po_download_command_format=\ "rsync --delete --exclude '*.s1' -Lrtvz \ 'translationproject.org::tp/latest/%s/' '%s'" # Fallback for downloading .po files (if rsync fails). po_download_command_format2=\ "wget --mirror -nd -q -np -A.po -P '%s' \ https://translationproject.org/latest/%s/" # Prefer a non-empty tarname (4th argument of AC_INIT if given), else # fall back to the package name (1st argument with munging) extract_package_name=' /^AC_INIT(\[*/{ s/// /^[^,]*,[^,]*,[^,]*,[ []*\([^][ ,)]\)/{ s//\1/ s/[],)].*// p q } s/[],)].*// s/^GNU // y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ s/[^abcdefghijklmnopqrstuvwxyz0123456789_]/-/g p } ' package=$(sed -n "$extract_package_name" configure.ac) \ || die 'cannot find package name in configure.ac' gnulib_name=lib$package build_aux=build-aux source_base=lib m4_base=m4 doc_base=doc tests_base=tests gnulib_extra_files='' # Additional gnulib-tool options to use. Use "\newline" to break lines. gnulib_tool_option_extras= # Other locale categories that need message catalogs. EXTRA_LOCALE_CATEGORIES= # Additional xgettext options to use. Use "\\\newline" to break lines. XGETTEXT_OPTIONS='\\\ --flag=_:1:pass-c-format\\\ --flag=N_:1:pass-c-format\\\ --flag=error:3:c-format --flag=error_at_line:5:c-format\\\ ' # Package bug report address and copyright holder for gettext files COPYRIGHT_HOLDER='Free Software Foundation, Inc.' MSGID_BUGS_ADDRESS=bug-$package@gnu.org # Files we don't want to import. excluded_files= # File that should exist in the top directory of a checked out hierarchy, # but not in a distribution tarball. checkout_only_file=README-hacking # Whether to use copies instead of symlinks. copy=false # Set this to '.cvsignore .gitignore' in bootstrap.conf if you want # those files to be generated in directories like lib/, m4/, and po/. # Or set it to 'auto' to make this script select which to use based # on which version control system (if any) is used in the source directory. vc_ignore=auto # Set this to true in bootstrap.conf to enable --bootstrap-sync by # default. bootstrap_sync=false # Use git to update gnulib sources use_git=true check_exists() { if test "$1" = "--verbose"; then ($2 --version /dev/null 2>&1 if test $? -ge 126; then # If not found, run with diagnostics as one may be # presented with env variables to set to find the right version ($2 --version /dev/null 2>&1 fi test $? -lt 126 } # find_tool ENVVAR NAMES... # ------------------------- # Search for a required program. Use the value of ENVVAR, if set, # otherwise find the first of the NAMES that can be run. # If found, set ENVVAR to the program name, die otherwise. # # FIXME: code duplication, see also gnu-web-doc-update. find_tool () { find_tool_envvar=$1 shift find_tool_names=$@ eval "find_tool_res=\$$find_tool_envvar" if test x"$find_tool_res" = x; then for i; do if check_exists $i; then find_tool_res=$i break fi done fi if test x"$find_tool_res" = x; then warn_ "one of these is required: $find_tool_names;" die "alternatively set $find_tool_envvar to a compatible tool" fi eval "$find_tool_envvar=\$find_tool_res" eval "export $find_tool_envvar" } # Override the default configuration, if necessary. # Make sure that bootstrap.conf is sourced from the current directory # if we were invoked as "sh bootstrap". case "$0" in */*) test -r "$0.conf" && . "$0.conf" ;; *) test -r "$0.conf" && . ./"$0.conf" ;; esac # Extra files from gnulib, which override files from other sources. test -z "${gnulib_extra_files}" && \ gnulib_extra_files=" build-aux/install-sh build-aux/mdate-sh build-aux/texinfo.tex build-aux/depcomp build-aux/config.guess build-aux/config.sub doc/INSTALL " if test "$vc_ignore" = auto; then vc_ignore= test -d .git && vc_ignore=.gitignore test -d CVS && vc_ignore="$vc_ignore .cvsignore" fi # Translate configuration into internal form. # Parse options. for option do case $option in --help) usage exit;; --gnulib-srcdir=*) GNULIB_SRCDIR=${option#--gnulib-srcdir=};; --skip-po) SKIP_PO=t;; --force) checkout_only_file=;; --copy) copy=true;; --bootstrap-sync) bootstrap_sync=true;; --no-bootstrap-sync) bootstrap_sync=false;; --no-git) use_git=false;; *) die "$option: unknown option";; esac done $use_git || test -d "$GNULIB_SRCDIR" \ || die "Error: --no-git requires --gnulib-srcdir" if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then die "Bootstrapping from a non-checked-out distribution is risky." fi # Strip blank and comment lines to leave significant entries. gitignore_entries() { sed '/^#/d; /^$/d' "$@" } # If $STR is not already on a line by itself in $FILE, insert it at the start. # Entries are inserted at the start of the ignore list to ensure existing # entries starting with ! are not overridden. Such entries support # whitelisting exceptions after a more generic blacklist pattern. insert_if_absent() { file=$1 str=$2 test -f $file || touch $file test -r $file || die "Error: failed to read ignore file: $file" duplicate_entries=$(gitignore_entries $file | sort | uniq -d) if [ "$duplicate_entries" ] ; then die "Error: Duplicate entries in $file: " $duplicate_entries fi linesold=$(gitignore_entries $file | wc -l) linesnew=$( { echo "$str"; cat $file; } | gitignore_entries | sort -u | wc -l) if [ $linesold != $linesnew ] ; then { echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \ || die "insert_if_absent $file $str: failed" fi } # Adjust $PATTERN for $VC_IGNORE_FILE and insert it with # insert_if_absent. insert_vc_ignore() { vc_ignore_file="$1" pattern="$2" case $vc_ignore_file in *.gitignore) # A .gitignore entry that does not start with '/' applies # recursively to subdirectories, so prepend '/' to every # .gitignore entry. pattern=$(echo "$pattern" | sed s,^,/,);; esac insert_if_absent "$vc_ignore_file" "$pattern" } # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. found_aux_dir=no grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \ >/dev/null && found_aux_dir=yes grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \ >/dev/null && found_aux_dir=yes test $found_aux_dir = yes \ || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it" # If $build_aux doesn't exist, create it now, otherwise some bits # below will malfunction. If creating it, also mark it as ignored. if test ! -d $build_aux; then mkdir $build_aux for dot_ig in x $vc_ignore; do test $dot_ig = x && continue insert_vc_ignore $dot_ig $build_aux done fi # 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. sort_ver() { # sort -V is not generally available ver1="$1" ver2="$2" # split on '.' and compare each component i=1 while : ; do p1=$(echo "$ver1" | cut -d. -f$i) p2=$(echo "$ver2" | cut -d. -f$i) if [ ! "$p1" ]; then echo "$1 $2" break elif [ ! "$p2" ]; then echo "$2 $1" break elif [ ! "$p1" = "$p2" ]; then if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison echo "$2 $1" elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison echo "$1 $2" else # numeric, then lexicographic comparison lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1) if [ "$lp" = "$p2" ]; then echo "$1 $2" else echo "$2 $1" fi fi break fi i=$(($i+1)) done } get_version_sed=' # Move version to start of line. s/.*[v ]\([0-9]\)/\1/ # Skip lines that do not start with version. /^[0-9]/!d # Remove characters after the version. s/[^.a-z0-9-].*// # The first component must be digits only. s/^\([0-9]*\)[a-z-].*/\1/ #the following essentially does s/5.005/5.5/ s/\.0*\([1-9]\)/.\1/g p q' get_version() { app=$1 $app --version >/dev/null 2>&1 || { $app --version; return 1; } $app --version 2>&1 | sed -n "$get_version_sed" } check_versions() { ret=0 while read app req_ver; do # We only need libtoolize from the libtool package. if test "$app" = libtool; then app=libtoolize fi # Exempt git if --no-git is in effect. if test "$app" = git; then $use_git || continue fi # Honor $APP variables ($TAR, $AUTOCONF, etc.) appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_') test "$appvar" = TAR && appvar=AMTAR case $appvar in GZIP) ;; # Do not use $GZIP: it contains gzip options. PERL::*) ;; # Keep perl modules as-is *) eval "app=\${$appvar-$app}" ;; esac # Handle the still-experimental Automake-NG programs specially. # They remain named as the mainstream Automake programs ("automake", # and "aclocal") to avoid gratuitous incompatibilities with # pre-existing usages (by, say, autoreconf, or custom autogen.sh # scripts), but correctly identify themselves (as being part of # "GNU automake-ng") when asked their version. case $app in automake-ng|aclocal-ng) app=${app%-ng} ($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || { warn_ "Error: '$app' not found or not from Automake-NG" ret=1 continue } ;; # Another check is for perl modules. These can be written as # e.g. perl::XML::XPath in case of XML::XPath module, etc. perl::*) # Extract module name app="${app#perl::}" if ! $PERL -m"$app" -e 'exit 0' >/dev/null 2>&1; then warn_ "Error: perl module '$app' not found" ret=1 fi continue ;; esac if [ "$req_ver" = "-" ]; then # Merely require app to exist; not all prereq apps are well-behaved # so we have to rely on $? rather than get_version. if ! check_exists --verbose $app; then warn_ "Error: '$app' not found" ret=1 fi else # Require app to produce a new enough version string. inst_ver=$(get_version $app) if [ ! "$inst_ver" ]; then warn_ "Error: '$app' not found" ret=1 else latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2) if [ ! "$latest_ver" = "$inst_ver" ]; then warnf_ '%s\n' \ "Error: '$app' version == $inst_ver is too old" \ " '$app' version >= $req_ver is required" ret=1 fi fi fi done return $ret } print_versions() { echo "Program Min_version" echo "----------------------" printf %s "$buildreq" echo "----------------------" # can't depend on column -t } # Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6. # Also find the compatible sha1 utility on the BSDs if test x"$SKIP_PO" = x; then find_tool SHA1SUM sha1sum gsha1sum shasum sha1 fi use_libtool=0 # We'd like to use grep -E, to see if any of LT_INIT, # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, # but that's not portable enough (e.g., for Solaris). grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ && use_libtool=1 grep '^[ ]*LT_INIT' configure.ac >/dev/null \ && use_libtool=1 if test $use_libtool = 1; then find_tool LIBTOOLIZE glibtoolize libtoolize fi # gnulib-tool requires at least automake and autoconf. # If either is not listed, add it (with minimum version) as a prerequisite. case $buildreq in *automake*) ;; *) buildreq="automake 1.9 $buildreq" ;; esac case $buildreq in *autoconf*) ;; *) buildreq="autoconf 2.59 $buildreq" ;; esac # When we can deduce that gnulib-tool will require patch, # and when patch is not already listed as a prerequisite, add it, too. if test -d "$local_gl_dir" \ && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then case $buildreq in *patch*) ;; *) buildreq="patch - $buildreq" ;; esac fi if ! printf "$buildreq" | check_versions; then echo >&2 if test -f README-prereq; then die "See README-prereq for how to get the prerequisite programs" else die "Please install the prerequisite programs" fi fi # Warn the user if autom4te appears to be broken; this causes known # issues with at least gettext 0.18.3. probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -) if test "x$probe" != xhi; then warn_ "WARNING: your autom4te wrapper eats stdin;" warn_ "if bootstrap fails, consider upgrading your autotools" fi echo "$0: Bootstrapping from checked-out $package sources..." # See if we can use gnulib's git-merge-changelog merge driver. if $use_git && test -d .git && check_exists git; then if git config merge.merge-changelog.driver >/dev/null ; then : elif check_exists git-merge-changelog; then echo "$0: initializing git-merge-changelog driver" git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' else echo "$0: consider installing git-merge-changelog from gnulib" fi fi cleanup_gnulib() { status=$? rm -fr "$gnulib_path" exit $status } git_modules_config () { test -f .gitmodules && git config --file .gitmodules "$@" } if $use_git; then gnulib_path=$(git_modules_config submodule.gnulib.path) test -z "$gnulib_path" && gnulib_path=gnulib fi # Get gnulib files. Populate $GNULIB_SRCDIR, possibly updating a # submodule, for use in the rest of the script. case ${GNULIB_SRCDIR--} in -) # Note that $use_git is necessarily true in this case. if git_modules_config submodule.gnulib.url >/dev/null; then echo "$0: getting gnulib files..." git submodule init -- "$gnulib_path" || exit $? git submodule update -- "$gnulib_path" || exit $? elif [ ! -d "$gnulib_path" ]; then echo "$0: getting gnulib files..." trap cleanup_gnulib 1 2 13 15 shallow= git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' git clone $shallow git://git.sv.gnu.org/gnulib "$gnulib_path" || cleanup_gnulib trap - 1 2 13 15 fi GNULIB_SRCDIR=$gnulib_path ;; *) # Use GNULIB_SRCDIR directly or as a reference. if $use_git && test -d "$GNULIB_SRCDIR"/.git && \ git_modules_config submodule.gnulib.url >/dev/null; then echo "$0: getting gnulib files..." if git submodule -h|grep -- --reference > /dev/null; then # Prefer the one-liner available in git 1.6.4 or newer. git submodule update --init --reference "$GNULIB_SRCDIR" \ "$gnulib_path" || exit $? else # This fallback allows at least git 1.5.5. if test -f "$gnulib_path"/gnulib-tool; then # Since file already exists, assume submodule init already complete. git submodule update -- "$gnulib_path" || exit $? else # Older git can't clone into an empty directory. rmdir "$gnulib_path" 2>/dev/null git clone --reference "$GNULIB_SRCDIR" \ "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \ && git submodule init -- "$gnulib_path" \ && git submodule update -- "$gnulib_path" \ || exit $? fi fi GNULIB_SRCDIR=$gnulib_path fi ;; esac # $GNULIB_SRCDIR now points to the version of gnulib to use, and # we no longer need to use git or $gnulib_path below here. if $bootstrap_sync; then cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || { echo "$0: updating bootstrap and restarting..." case $(sh -c 'echo "$1"' -- a) in a) ignored=--;; *) ignored=ignored;; esac exec sh -c \ 'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ $ignored "$GNULIB_SRCDIR/build-aux/bootstrap" \ "$0" "$@" --no-bootstrap-sync } fi gnulib_tool=$GNULIB_SRCDIR/gnulib-tool <$gnulib_tool || exit $? # Get translations. download_po_files() { subdir=$1 domain=$2 echo "$me: getting translations into $subdir for $domain..." cmd=$(printf "$po_download_command_format" "$domain" "$subdir") eval "$cmd" && return # Fallback to HTTPS. cmd=$(printf "$po_download_command_format2" "$subdir" "$domain") eval "$cmd" } # Mirror .po files to $po_dir/.reference and copy only the new # or modified ones into $po_dir. Also update $po_dir/LINGUAS. # Note po files that exist locally only are left in $po_dir but will # not be included in LINGUAS and hence will not be distributed. update_po_files() { # Directory containing primary .po files. # Overwrite them only when we're sure a .po file is new. po_dir=$1 domain=$2 # Mirror *.po files into this dir. # Usually contains *.s1 checksum files. ref_po_dir="$po_dir/.reference" test -d $ref_po_dir || mkdir $ref_po_dir || return download_po_files $ref_po_dir $domain \ && ls "$ref_po_dir"/*.po 2>/dev/null | sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g') test "$langs" = '*' && langs=x for po in $langs; do case $po in x) continue;; esac new_po="$ref_po_dir/$po.po" cksum_file="$ref_po_dir/$po.s1" if ! test -f "$cksum_file" || ! test -f "$po_dir/$po.po" || ! $SHA1SUM -c "$cksum_file" < "$new_po" > /dev/null 2>&1; then echo "$me: updated $po_dir/$po.po..." cp "$new_po" "$po_dir/$po.po" \ && $SHA1SUM < "$new_po" > "$cksum_file" || return fi done } case $SKIP_PO in '') if test -d po; then update_po_files po $package || exit fi if test -d runtime-po; then update_po_files runtime-po $package-runtime || exit fi;; esac symlink_to_dir() { src=$1/$2 dst=${3-$2} test -f "$src" && { # If the destination directory doesn't exist, create it. # This is required at least for "lib/uniwidth/cjk.h". dst_dir=$(dirname "$dst") if ! test -d "$dst_dir"; then mkdir -p "$dst_dir" # If we've just created a directory like lib/uniwidth, # tell version control system(s) it's ignorable. # FIXME: for now, this does only one level parent=$(dirname "$dst_dir") for dot_ig in x $vc_ignore; do test $dot_ig = x && continue ig=$parent/$dot_ig insert_vc_ignore $ig "${dst_dir##*/}" done fi if $copy; then { test ! -h "$dst" || { echo "$me: rm -f $dst" && rm -f "$dst" } } && test -f "$dst" && cmp -s "$src" "$dst" || { echo "$me: cp -fp $src $dst" && cp -fp "$src" "$dst" } else # Leave any existing symlink alone, if it already points to the source, # so that broken build tools that care about symlink times # aren't confused into doing unnecessary builds. Conversely, if the # existing symlink's timestamp is older than the source, make it afresh, # so that broken tools aren't confused into skipping needed builds. See # . test -h "$dst" && src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 && dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 && test "$src_i" = "$dst_i" && both_ls=$(ls -dt "$src" "$dst") && test "X$both_ls" = "X$dst$nl$src" || { dot_dots= case $src in /*) ;; *) case /$dst/ in *//* | */../* | */./* | /*/*/*/*/*/) die "invalid symlink calculation: $src -> $dst";; /*/*/*/*/) dot_dots=../../../;; /*/*/*/) dot_dots=../../;; /*/*/) dot_dots=../;; esac;; esac echo "$me: ln -fs $dot_dots$src $dst" && ln -fs "$dot_dots$src" "$dst" } fi } } version_controlled_file() { parent=$1 file=$2 if test -d .git; then git rm -n "$file" > /dev/null 2>&1 elif test -d .svn; then svn log -r HEAD "$file" > /dev/null 2>&1 elif test -d CVS; then grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null | grep '^/[^/]*/[0-9]' > /dev/null else warn_ "no version control for $file?" false fi } # NOTE: we have to be careful to run both autopoint and libtoolize # before gnulib-tool, since gnulib-tool is likely to provide newer # versions of files "installed" by these two programs. # Then, *after* gnulib-tool (see below), we have to be careful to # run autoreconf in such a way that it does not run either of these # two just-pre-run programs. # Import from gettext. with_gettext=yes grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ with_gettext=no if test $with_gettext = yes || test $use_libtool = 1; then tempbase=.bootstrap$$ trap "rm -f $tempbase.0 $tempbase.1" 1 2 13 15 > $tempbase.0 > $tempbase.1 && find . ! -type d -print | sort > $tempbase.0 || exit if test $with_gettext = yes; then # Released autopoint has the tendency to install macros that have been # obsoleted in current gnulib, so run this before gnulib-tool. echo "$0: $AUTOPOINT --force" $AUTOPOINT --force || exit fi # Autoreconf runs aclocal before libtoolize, which causes spurious # warnings if the initial aclocal is confused by the libtoolized # (or worse out-of-date) macro directory. # libtoolize 1.9b added the --install option; but we support back # to libtoolize 1.5.22, where the install action was default. if test $use_libtool = 1; then install= case $($LIBTOOLIZE --help) in *--install*) install=--install ;; esac echo "running: $LIBTOOLIZE $install --copy" $LIBTOOLIZE $install --copy fi find . ! -type d -print | sort >$tempbase.1 old_IFS=$IFS IFS=$nl for file in $(comm -13 $tempbase.0 $tempbase.1); do IFS=$old_IFS parent=${file%/*} version_controlled_file "$parent" "$file" || { for dot_ig in x $vc_ignore; do test $dot_ig = x && continue ig=$parent/$dot_ig insert_vc_ignore "$ig" "${file##*/}" done } done IFS=$old_IFS rm -f $tempbase.0 $tempbase.1 trap - 1 2 13 15 fi # Import from gnulib. gnulib_tool_options="\ --import\ --no-changelog\ --aux-dir $build_aux\ --doc-base $doc_base\ --lib $gnulib_name\ --m4-base $m4_base/\ --source-base $source_base/\ --tests-base $tests_base\ --local-dir $local_gl_dir\ $gnulib_tool_option_extras\ " if test $use_libtool = 1; then case "$gnulib_tool_options " in *' --libtool '*) ;; *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; esac fi echo "$0: $gnulib_tool $gnulib_tool_options --import ..." $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ || die "gnulib-tool failed" for file in $gnulib_files; do symlink_to_dir "$GNULIB_SRCDIR" $file \ || die "failed to symlink $file" done bootstrap_post_import_hook \ || die "bootstrap_post_import_hook failed" # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some # gnulib-populated directories. Such .m4 files would cause aclocal to fail. # The following requires GNU find 4.2.3 or newer. Considering the usual # portability constraints of this script, that may seem a very demanding # requirement, but it should be ok. Ignore any failure, which is fine, # since this is only a convenience to help developers avoid the relatively # unusual case in which a symlinked-to .m4 file is git-removed from gnulib # between successive runs of this script. find "$m4_base" "$source_base" \ -depth \( -name '*.m4' -o -name '*.[ch]' \) \ -type l -xtype l -delete > /dev/null 2>&1 # Invoke autoreconf with --force --install to ensure upgrades of tools # such as ylwrap. AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS" # Some systems (RHEL 5) are using ancient autotools, for which the # --no-recursive option had not been invented. Detect that lack and # omit the option when it's not supported. FIXME in 2017: remove this # hack when RHEL 5 autotools are updated, or when they become irrelevant. case $($AUTORECONF --help) in *--no-recursive*) AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive";; esac # Tell autoreconf not to invoke autopoint or libtoolize; they were run above. echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS" AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \ || die "autoreconf failed" # Get some extra files from gnulib, overriding existing files. for file in $gnulib_extra_files; do case $file in */INSTALL) dst=INSTALL;; build-aux/*) dst=$build_aux/${file#build-aux/};; *) dst=$file;; esac symlink_to_dir "$GNULIB_SRCDIR" $file $dst \ || die "failed to symlink $file" done if test $with_gettext = yes; then # Create gettext configuration. echo "$0: Creating po/Makevars from po/Makevars.template ..." rm -f po/Makevars sed ' /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'| /^XGETTEXT_OPTIONS *=/{ s/$/ \\/ a\ '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} } ' po/Makevars.template >po/Makevars \ || die 'cannot generate po/Makevars' # If the 'gettext' module is in use, grab the latest Makefile.in.in. # If only the 'gettext-h' module is in use, assume autopoint already # put the correct version of this file into place. case $gnulib_modules in *gettext-h*) ;; *gettext*) cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \ || die "cannot create po/Makefile.in.in" ;; esac if test -d runtime-po; then # Similarly for runtime-po/Makevars, but not quite the same. rm -f runtime-po/Makevars sed ' /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ /^subdir *=.*/s/=.*/= runtime-po/ /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ /^XGETTEXT_OPTIONS *=/{ s/$/ \\/ a\ '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} } ' po/Makevars.template >runtime-po/Makevars \ || die 'cannot generate runtime-po/Makevars' # Copy identical files from po to runtime-po. (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) fi fi bootstrap_epilogue echo "$0: done. Now you can run './configure'." # 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: "UTC0" # time-stamp-end: "; # UTC" # End: ttfautohint-1.8.1/bootstrap.conf0000644000175000001440000000472113153452073016626 0ustar00wlusers00000000000000# Bootstrap configuration. # Copyright (C) 2006-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 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 . # gnulib structure in ttfautohint bundle m4_base=gnulib/m4 source_base=gnulib/src build_aux=gnulib gnulib_name=libgnu checkout_only_file=INSTALL.git # gnulib modules used by this package. gnulib_modules=" dirname fcntl-h getopt-gnu git-version-gen isatty memmem-simple progname stdarg stdbool stdint std-gnu11 strerror_r-posix strndup strtok_r strtoull vasprintf " # Additional xgettext options to use. Use "\\\newline" to break lines. XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\ --from-code=UTF-8\\\ --flag=asprintf:2:c-format --flag=vasprintf:2:c-format\\\ --flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format\\\ --flag=wrapf:1:c-format\\\ ' # If "AM_GNU_GETTEXT(external" or "AM_GNU_GETTEXT([external]" # appears in configure.ac, exclude some unnecessary files. # Without grep's -E option (not portable enough, pre-configure), # the following test is ugly. Also, this depends on the existence # of configure.ac, not the obsolescent-named configure.in. But if # you're using this infrastructure, you should care about such things. gettext_external=0 grep '^[ ]*AM_GNU_GETTEXT(external\>' configure.ac > /dev/null && gettext_external=1 grep '^[ ]*AM_GNU_GETTEXT(\[external\]' configure.ac > /dev/null && gettext_external=1 if test $gettext_external = 1; then # Gettext supplies these files, but we don't need them since # we don't have an intl subdirectory. excluded_files=' m4/glibc2.m4 m4/intdiv0.m4 m4/lcmessage.m4 m4/lock.m4 m4/printf-posix.m4 m4/size_max.m4 m4/uintmax_t.m4 m4/ulonglong.m4 m4/visibility.m4 m4/xsize.m4 ' fi # Build prerequisites buildreq="\ autoconf 2.65 automake 1.13 bison 2.5 flex - git 1.5.5 libtool 2.2.2 tar - " ttfautohint-1.8.1/FTL.TXT0000644000175000001440000001512512643432074014772 0ustar00wlusers00000000000000 The FreeType Project LICENSE ---------------------------- 2006-Jan-27 Copyright 1996-2002, 2006 by David Turner, Robert Wilhelm, and Werner Lemberg Introduction ============ The FreeType Project is distributed in several archive packages; some of them may contain, in addition to the FreeType font engine, various tools and contributions which rely on, or relate to, the FreeType Project. This license applies to all files found in such packages, and which do not fall under their own explicit license. The license affects thus the FreeType font engine, the test programs, documentation and makefiles, at the very least. This license was inspired by the BSD, Artistic, and IJG (Independent JPEG Group) licenses, which all encourage inclusion and use of free software in commercial and freeware products alike. As a consequence, its main points are that: o We don't promise that this software works. However, we will be interested in any kind of bug reports. (`as is' distribution) o You can use this software for whatever you want, in parts or full form, without having to pay us. (`royalty-free' usage) o You may not pretend that you wrote this software. If you use it, or only parts of it, in a program, you must acknowledge somewhere in your documentation that you have used the FreeType code. (`credits') We specifically permit and encourage the inclusion of this software, with or without modifications, in commercial products. We disclaim all warranties covering The FreeType Project and assume no liability related to The FreeType Project. Finally, many people asked us for a preferred form for a credit/disclaimer to use in compliance with this license. We thus encourage you to use the following text: """ Portions of this software are copyright © The FreeType Project (www.freetype.org). All rights reserved. """ Please replace with the value from the FreeType version you actually use. Legal Terms =========== 0. Definitions -------------- Throughout this license, the terms `package', `FreeType Project', and `FreeType archive' refer to the set of files originally distributed by the authors (David Turner, Robert Wilhelm, and Werner Lemberg) as the `FreeType Project', be they named as alpha, beta or final release. `You' refers to the licensee, or person using the project, where `using' is a generic term including compiling the project's source code as well as linking it to form a `program' or `executable'. This program is referred to as `a program using the FreeType engine'. This license applies to all files distributed in the original FreeType Project, including all source code, binaries and documentation, unless otherwise stated in the file in its original, unmodified form as distributed in the original archive. If you are unsure whether or not a particular file is covered by this license, you must contact us to verify this. The FreeType Project is copyright (C) 1996-2000 by David Turner, Robert Wilhelm, and Werner Lemberg. All rights reserved except as specified below. 1. No Warranty -------------- THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO USE, OF THE FREETYPE PROJECT. 2. Redistribution ----------------- This license grants a worldwide, royalty-free, perpetual and irrevocable right and license to use, execute, perform, compile, display, copy, create derivative works of, distribute and sublicense the FreeType Project (in both source and object code forms) and derivative works thereof for any purpose; and to authorize others to exercise some or all of the rights granted herein, subject to the following conditions: o Redistribution of source code must retain this license file (`FTL.TXT') unaltered; any additions, deletions or changes to the original files must be clearly indicated in accompanying documentation. The copyright notices of the unaltered, original files must be preserved in all copies of source files. o Redistribution in binary form must provide a disclaimer that states that the software is based in part of the work of the FreeType Team, in the distribution documentation. We also encourage you to put an URL to the FreeType web page in your documentation, though this isn't mandatory. These conditions apply to any software derived from or based on the FreeType Project, not just the unmodified files. If you use our work, you must acknowledge us. However, no fee need be paid to us. 3. Advertising -------------- Neither the FreeType authors and contributors nor you shall use the name of the other for commercial, advertising, or promotional purposes without specific prior written permission. We suggest, but do not require, that you use one or more of the following phrases to refer to this software in your documentation or advertising materials: `FreeType Project', `FreeType Engine', `FreeType library', or `FreeType Distribution'. As you have not signed this license, you are not required to accept it. However, as the FreeType Project is copyrighted material, only this license, or another one contracted with the authors, grants you the right to use, distribute, and modify it. Therefore, by using, distributing, or modifying the FreeType Project, you indicate that you understand and accept all the terms of this license. 4. Contacts ----------- There are two mailing lists related to FreeType: o freetype@nongnu.org Discusses general use and applications of FreeType, as well as future and wanted additions to the library and distribution. If you are looking for support, start in this list if you haven't found anything to help you in the documentation. o freetype-devel@nongnu.org Discusses bugs, as well as engine internals, design issues, specific licenses, porting, etc. Our home page can be found at http://www.freetype.org --- end of FTL.TXT --- ttfautohint-1.8.1/GPLv2.TXT0000644000175000001440000004311212643432074015234 0ustar00wlusers00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, 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 Library 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 St, 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 Library General Public License instead of this License. ttfautohint-1.8.1/.version0000644000175000001440000000000613222451056015415 0ustar00wlusers000000000000001.8.1 ttfautohint-1.8.1/lib/0000755000175000001440000000000013222454026014501 5ustar00wlusers00000000000000ttfautohint-1.8.1/lib/Makefile.am0000644000175000001440000001100413222261510016523 0ustar00wlusers00000000000000## Makefile.am # Copyright (C) 2011-2017 by Werner Lemberg. # # This file is part of the ttfautohint library, and may only be used, # modified, and distributed under the terms given in `COPYING'. By # continuing to use, modify, or distribute this file you indicate that you # have read `COPYING' and understand and accept it fully. # # The file `COPYING' mentioned in the previous paragraph is distributed # with the ttfautohint library. ABI_CURRENT = 1 ABI_REVISION = 0 ABI_AGE = 0 AM_CPPFLAGS = -I$(top_builddir)/gnulib/src \ -I$(top_srcdir)/gnulib/src \ $(FREETYPE_CPPFLAGS) \ $(HARFBUZZ_CFLAGS) noinst_LTLIBRARIES = \ libsds.la \ libnumberset.la lib_LTLIBRARIES = libttfautohint.la include_HEADERS = \ ttfautohint-errors.h \ ttfautohint-scripts.h \ ttfautohint-coverages.h nodist_include_HEADERS = \ ttfautohint.h libttfautohint_la_LDFLAGS = \ -no-undefined \ -version-info $(ABI_CURRENT):$(ABI_REVISION):$(ABI_AGE) \ -export-symbols-regex "TTF_autohint" libsds_la_SOURCES = \ sds-wrapper.c sds.h libnumberset_la_SOURCES = \ numberset.c numberset.h # We have to bypass automake's default handling of flex (.l) and bison (.y) # files, since such files are always treated as traditional lex and yacc # files, not allowing for flex and bison extensions. For this reason, we # call our source files `tacontrol.flex' and `tacontrol.bison' and write # explicit dependency rules. libttfautohint_la_SOURCES = \ llrb.h \ ta.h \ tablue.c tablue.h \ tabytecode.c tabytecode.h \ tacontrol.c tacontrol.h \ tacontrol-flex.c tacontrol-flex.h \ tacontrol-bison.c tacontrol-bison.h \ tacvt.c \ tadsig.c \ tadummy.c tadummy.h \ tadump.c \ taerror.c \ tafeature.c \ tafile.c \ tafont.c \ tafpgm.c \ tagasp.c \ tagloadr.c tagloadr.h \ taglobal.c taglobal.h \ taglyf.c \ tagpos.c \ tahints.c tahints.h \ tahmtx.c \ talatin.c talatin.h \ taloader.c taloader.h \ taloca.c \ tamaxp.c \ taname.c \ tapost.c \ taprep.c \ taranges.c taranges.h \ tascript.c \ tasfnt.c \ tashaper.c tashaper.h \ tasort.c tasort.h \ tastyles.h \ tatables.c tatables.h \ tatime.c \ tattc.c \ tattf.c \ tattfa.c \ tatypes.h \ taversion.c \ tawrtsys.h \ ttfautohint.c libttfautohint_la_LIBADD = \ $(noinst_LTLIBRARIES) \ $(top_builddir)/gnulib/src/libgnu.la \ $(LIBM) \ $(FREETYPE_LIBS) \ $(HARFBUZZ_LIBS) BUILT_SOURCES = \ tablue.c tablue.h \ tacontrol-flex.c tacontrol-flex.h \ tacontrol-bison.c tacontrol-bison.h \ ttfautohint.h EXTRA_DIST = \ afblue.pl \ sds.c \ tablue.cin tablue.hin \ tablue.dat \ tacontrol.flex tacontrol.bison \ ttfautohint.pc.in \ numberset-test.c \ ttfautohint.h.in pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = ttfautohint.pc CLEANFILES = $(pkgconfig_DATA) ttfautohint.pc: ttfautohint.pc.in $(top_builddir)/config.status $(AM_V_GEN)$(SED) \ -e 's@%prefix%@$(prefix)@g' \ -e 's@%exec_prefix%@$(exec_prefix)@g' \ -e 's@%includedir%@$(includedir)@g' \ -e 's@%libdir%@$(libdir)@g' \ -e 's@%version%@$(ABI_CURRENT).$(ABI_REVISION).$(ABI_AGE)@g' \ "$<" \ > "$@" \ || (rm "$@"; false) tablue.c: tablue.dat tablue.cin $(AM_V_GEN)rm -f $@-t $@ \ && perl $(srcdir)/afblue.pl $(srcdir)/tablue.dat \ < $(srcdir)/tablue.cin \ > $@-t \ && mv $@-t $@ tablue.h: tablue.dat tablue.hin $(AM_V_GEN)rm -f $@-t $@ \ && perl $(srcdir)/afblue.pl $(srcdir)/tablue.dat \ < $(srcdir)/tablue.hin \ > $@-t \ && mv $@-t $@ ttfautohint.h: ttfautohint.h.in $(AM_V_GEN)$(SED) \ -e 's@%TTFAUTOHINT_MAJOR%@$(ttfautohint_major)@g' \ -e 's@%TTFAUTOHINT_MINOR%@$(ttfautohint_minor)@g' \ -e 's@%TTFAUTOHINT_REVISION%@$(ttfautohint_revision)@g' \ -e 's@%TTFAUTOHINT_VERSION%@$(VERSION)@g' \ "$<" \ > "$@" \ || (rm "$@"; false) TA_V_FLEX = $(TA_V_FLEX_@AM_V@) TA_V_FLEX_ = $(TA_V_FLEX_@AM_DEFAULT_V@) TA_V_FLEX_0 = @echo " FLEX " $@; # we use `touch' to make the created .h file newer than the created .c file tacontrol-flex.c tacontrol-flex.h: tacontrol.flex $(TA_V_FLEX)$(FLEX) $(srcdir)/tacontrol.flex \ && touch tacontrol-flex.h tacontrol-flex.h: tacontrol-flex.c TA_V_BISON = $(TA_V_BISON_@AM_V@) TA_V_BISON_ = $(TA_V_BISON_@AM_DEFAULT_V@) TA_V_BISON_0 = @echo " BISON " $@; tacontrol-bison.c tacontrol-bison.h: tacontrol.bison $(TA_V_BISON)$(BISON) $(srcdir)/tacontrol.bison \ && touch tacontrol-bison.h tacontrol-bison.h: tacontrol-bison.c ## end of Makefile.am ttfautohint-1.8.1/lib/ttfautohint-errors.h0000644000175000001440000001112013210003645020522 0ustar00wlusers00000000000000/* ttfautohint-errors.h */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #ifndef TTFAUTOHINT_ERRORS_H_ #define TTFAUTOHINT_ERRORS_H_ /* We duplicate FreeType's error handling macros for simplicity; */ /* however, we don't use module-specific error codes. */ #undef TA_ERR_XCAT #undef TA_ERR_CAT #define TA_ERR_XCAT(x, y) x ## y #define TA_ERR_CAT(x, y) TA_ERR_XCAT(x, y) #undef TA_ERR_PREFIX #define TA_ERR_PREFIX TA_Err_ #ifndef TA_ERRORDEF # define TA_ERRORDEF(e, v, s) e = v, # define TA_ERROR_START_LIST enum { # define TA_ERROR_END_LIST TA_ERR_CAT(TA_ERR_PREFIX, Max) }; #endif #define TA_ERRORDEF_(e, v, s) \ TA_ERRORDEF(TA_ERR_CAT(TA_ERR_PREFIX, e), v, s) #define TA_NOERRORDEF_ TA_ERRORDEF_ /* The error codes. */ #ifdef TA_ERROR_START_LIST TA_ERROR_START_LIST #endif TA_NOERRORDEF_(Ok, 0x00, "no error") TA_ERRORDEF_(Invalid_FreeType_Version, 0x0E, "invalid FreeType version (need 2.4.5 or higher)") TA_ERRORDEF_(Missing_Legal_Permission, 0x0F, "legal permission bit in `OS/2' font table is set") TA_ERRORDEF_(Invalid_Stream_Write, 0x5F, "invalid stream write") TA_ERRORDEF_(Hinter_Overflow, 0xF0, "hinter overflow") TA_ERRORDEF_(Missing_Glyph, 0xF1, "missing standard character glyph") TA_ERRORDEF_(Missing_Unicode_CMap, 0xF2, "missing Unicode character map") TA_ERRORDEF_(Missing_Symbol_CMap, 0xF3, "missing symbol character map") TA_ERRORDEF_(Canceled, 0xF4, "execution canceled") TA_ERRORDEF_(Already_Processed, 0xF5, "font already processed by ttfautohint") TA_ERRORDEF_(Invalid_Font_Type, 0xF6, "not a font with TrueType outlines in SFNT format") TA_ERRORDEF_(Unknown_Argument, 0xF7, "unknown argument") TA_ERRORDEF_(XHeightSnapping_Invalid_Character, 0x101, "invalid character") TA_ERRORDEF_(XHeightSnapping_Overflow, 0x102, "numerical overflow") TA_ERRORDEF_(XHeightSnapping_Invalid_Range, 0x103, "invalid range") TA_ERRORDEF_(XHeightSnapping_Overlapping_Ranges, 0x104, "overlapping ranges") TA_ERRORDEF_(XHeightSnapping_Not_Ascending, 0x105, "not ascending ranges or values") TA_ERRORDEF_(XHeightSnapping_Allocation_Error, 0x106, "allocation error") TA_ERRORDEF_(Control_Syntax_Error, 0x201, "syntax error") TA_ERRORDEF_(Control_Invalid_Font_Index, 0x202, "invalid font index") TA_ERRORDEF_(Control_Invalid_Glyph_Index, 0x203, "invalid glyph index") TA_ERRORDEF_(Control_Invalid_Glyph_Name, 0x204, "invalid glyph name") TA_ERRORDEF_(Control_Invalid_Character, 0x205, "invalid character") TA_ERRORDEF_(Control_Invalid_Style, 0x206, "invalid style") TA_ERRORDEF_(Control_Invalid_Script, 0x207, "invalid script") TA_ERRORDEF_(Control_Invalid_Feature, 0x208, "invalid feature") TA_ERRORDEF_(Control_Invalid_Shift, 0x209, "invalid shift") TA_ERRORDEF_(Control_Invalid_Offset, 0x20A, "invalid offset") TA_ERRORDEF_(Control_Invalid_Range, 0x20B, "invalid range") TA_ERRORDEF_(Control_Invalid_Glyph, 0x20C, "invalid glyph") TA_ERRORDEF_(Control_Overflow, 0x20D, "overflow") TA_ERRORDEF_(Control_Overlapping_Ranges, 0x20E, "overlapping ranges") TA_ERRORDEF_(Control_Ranges_Not_Ascending, 0x20F, "ranges not ascending") TA_ERRORDEF_(Control_Allocation_Error, 0x210, "allocation error") TA_ERRORDEF_(Control_Flex_Error, 0x211, "internal flex error") TA_ERRORDEF_(Control_Too_Much_Widths, 0x212, "too much stem width values") /* error codes in the range 0x300-0x3FF are related to the reference font; */ /* subtract 0x300 to get the normal FreeType meaning */ #ifdef TA_ERROR_END_LIST TA_ERROR_END_LIST #endif #undef TA_ERROR_START_LIST #undef TA_ERROR_END_LIST #undef TA_ERRORDEF #undef TA_ERRORDEF_ #undef TA_NOERRORDEF_ #endif /* TTFAUTOHINT_ERRORS_H_ */ /* end of ttfautohint-errors.h */ ttfautohint-1.8.1/lib/ttfautohint-scripts.h0000644000175000001440000002147413153174711020723 0ustar00wlusers00000000000000/* ttfautohint-scripts.h */ /* * Copyright (C) 2013-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afscript.h' (2013-Aug-05) from FreeType */ /* The following part can be included multiple times. */ /* Define `SCRIPT' as needed. */ /* * Add new scripts here. The first and second arguments are the * script name in lowercase and uppercase, respectively, followed * by a description string. Then comes the corresponding HarfBuzz * script name tag, followed by the default characters (to derive * the standard width of stems). * * Note that fallback scripts only have a default style, thus we * use `HB_SCRIPT_INVALID' as the HarfBuzz script name tag for * them. */ SCRIPT(adlm, ADLM, "Adlam", HB_SCRIPT_ADLAM, HINTING_BOTTOM_TO_TOP, "\xF0\x9E\xA4\x8C \xF0\x9E\xA4\xAE") /* 𞤌 𞤮 */ SCRIPT(arab, ARAB, "Arabic", HB_SCRIPT_ARABIC, HINTING_BOTTOM_TO_TOP, "\xD9\x84 \xD8\xAD \xD9\x80") /* Ù„ Ø­ Ù€ */ SCRIPT(armn, ARMN, "Armenian", HB_SCRIPT_ARMENIAN, HINTING_BOTTOM_TO_TOP, "\xD5\xBD \xD5\x8D") /* Õ½ Õ */ SCRIPT(avst, AVST, "Avestan", HB_SCRIPT_AVESTAN, HINTING_BOTTOM_TO_TOP, "\xF0\x90\xAC\x9A") /* 𬚠*/ SCRIPT(bamu, BAMU, "Bamum", HB_SCRIPT_BAMUM, HINTING_BOTTOM_TO_TOP, "\xEA\x9B\x81 \xEA\x9B\xAF") /* ê› ê›¯ */ /* there are no simple forms for letters; we thus use two digit shapes */ SCRIPT(beng, BENG, "Bengali", HB_SCRIPT_BENGALI, HINTING_TOP_TO_BOTTOM, "\xE0\xA7\xA6 \xE0\xA7\xAA") /* ০ ৪*/ SCRIPT(buhd, BUHD, "Buhid", HB_SCRIPT_BUHID, HINTING_BOTTOM_TO_TOP, "\xE1\x9D\x8B \xE1\x9D\x8F") /* á‹ á */ SCRIPT(cakm, CAKM, "Chakma", HB_SCRIPT_CHAKMA, HINTING_BOTTOM_TO_TOP, "\xF0\x91\x84\xA4 \xF0\x91\x84\x89 \xF0\x91\x84\x9B") /* 𑄤 𑄉 ð‘„› */ SCRIPT(cans, CANS, "Canadian Syllabics", HB_SCRIPT_CANADIAN_SYLLABICS, HINTING_BOTTOM_TO_TOP, "\xE1\x91\x8C \xE1\x93\x9A") /* ᑌ ᓚ */ SCRIPT(cari, CARI, "Carian", HB_SCRIPT_CARIAN, HINTING_BOTTOM_TO_TOP, "\xF0\x90\x8A\xAB \xF0\x90\x8B\x89") /* ðŠ« ð‹‰ */ SCRIPT(cher, CHER, "Cherokee", HB_SCRIPT_CHEROKEE, HINTING_BOTTOM_TO_TOP, "\xE1\x8E\xA4 \xE1\x8F\x85 \xEA\xAE\x95") /* Ꭴ á… ê®• */ SCRIPT(copt, COPT, "Coptic", HB_SCRIPT_COPTIC, HINTING_BOTTOM_TO_TOP, "\xE2\xB2\x9E \xE2\xB2\x9F") /* Ⲟ ⲟ */ SCRIPT(cprt, CPRT, "Cypriot", HB_SCRIPT_CYPRIOT, HINTING_BOTTOM_TO_TOP, "\xF0\x90\xA0\x85 \xF0\x90\xA0\xA3") /* ð … ð £ */ SCRIPT(cyrl, CYRL, "Cyrillic", HB_SCRIPT_CYRILLIC, HINTING_BOTTOM_TO_TOP, "\xD0\xBE \xD0\x9E") /* о О */ SCRIPT(deva, DEVA, "Devanagari", HB_SCRIPT_DEVANAGARI, HINTING_TOP_TO_BOTTOM, "\xE0\xA4\xA0 \xE0\xA4\xB5 \xE0\xA4\x9F") /* ठ व ट */ SCRIPT(dsrt, DSRT, "Deseret", HB_SCRIPT_DESERET, HINTING_BOTTOM_TO_TOP, "\xF0\x90\x90\x84 \xF0\x90\x90\xAC") /* ð„ ð¬ */ SCRIPT(ethi, ETHI, "Ethiopic", HB_SCRIPT_ETHIOPIC, HINTING_BOTTOM_TO_TOP, "\xE1\x8B\x90") /* á‹ */ SCRIPT(geor, GEOR, "Georgian (Mkhedruli)", HB_SCRIPT_GEORGIAN, HINTING_BOTTOM_TO_TOP, "\xE1\x83\x98 \xE1\x83\x94 \xE1\x83\x90") /* ი ე რ*/ SCRIPT(geok, GEOK, "Georgian (Khutsuri)", HB_SCRIPT_INVALID, HINTING_BOTTOM_TO_TOP, "\xE1\x82\xB6 \xE1\x82\xB1 \xE2\xB4\x99") /* á‚¶ Ⴑ â´™ */ SCRIPT(glag, GLAG, "Glagolitic", HB_SCRIPT_GLAGOLITIC, HINTING_BOTTOM_TO_TOP, "\xE2\xB0\x95 \xE2\xB1\x85") /* â°• â±… */ SCRIPT(goth, GOTH, "Gothic", HB_SCRIPT_GOTHIC, HINTING_TOP_TO_BOTTOM, "\xF0\x90\x8C\xB4 \xF0\x90\x8C\xBE \xF0\x90\x8D\x83") /* ðŒ´ ðŒ¾ ðƒ */ SCRIPT(grek, GREK, "Greek", HB_SCRIPT_GREEK, HINTING_BOTTOM_TO_TOP, "\xCE\xBF \xCE\x9F") /* ο Ο */ SCRIPT(gujr, GUJR, "Gujarati", HB_SCRIPT_GUJARATI, HINTING_BOTTOM_TO_TOP, "\xE0\xAA\x9F \xE0\xAB\xA6") /* ટ ૦ */ SCRIPT(guru, GURU, "Gurmukhi", HB_SCRIPT_GURMUKHI, HINTING_TOP_TO_BOTTOM, "\xE0\xA8\xA0 \xE0\xA8\xB0 \xE0\xA9\xA6") /* ਠ ਰ ੦*/ SCRIPT(hebr, HEBR, "Hebrew", HB_SCRIPT_HEBREW, HINTING_BOTTOM_TO_TOP, "\xD7\x9D") /* × */ SCRIPT(kali, KALI, "Kayah Li", HB_SCRIPT_KAYAH_LI, HINTING_BOTTOM_TO_TOP, "\xEA\xA4\x8D \xEA\xA4\x80") /* ê¤ ê¤€ */ /* only digit zero has a simple shape in the Khmer script */ SCRIPT(khmr, KHMR, "Khmer", HB_SCRIPT_KHMER, HINTING_BOTTOM_TO_TOP, "\xE1\x9F\xA0") /* ០ */ SCRIPT(khms, KHMS, "Khmer Symbols", HB_SCRIPT_INVALID, HINTING_BOTTOM_TO_TOP, "\xE1\xA7\xA1 \xE1\xA7\xAA") /* á§¡ ᧪ */ SCRIPT(knda, KNDA, "Kannada", HB_SCRIPT_KANNADA, HINTING_BOTTOM_TO_TOP, "\xE0\xB3\xA6 \xE0\xB2\xAC") /* ೦ ಬ */ /* only digit zero has a simple shape in the Lao script */ SCRIPT(lao, LAO, "Lao", HB_SCRIPT_LAO, HINTING_BOTTOM_TO_TOP, "\xE0\xBB\x90") /* à» */ SCRIPT(latn, LATN, "Latin", HB_SCRIPT_LATIN, HINTING_BOTTOM_TO_TOP, "o O 0") SCRIPT(latb, LATB, "Latin Subscript Fallback", HB_SCRIPT_INVALID, HINTING_BOTTOM_TO_TOP, "\xE2\x82\x92 \xE2\x82\x80") /* â‚’ â‚€ */ SCRIPT(latp, LATP, "Latin Superscript Fallback", HB_SCRIPT_INVALID, HINTING_BOTTOM_TO_TOP, "\xE1\xB5\x92 \xE1\xB4\xBC \xE2\x81\xB0") /* áµ’ á´¼ â° */ SCRIPT(lisu, LISU, "Lisu", HB_SCRIPT_LISU, HINTING_BOTTOM_TO_TOP, "\xEA\x93\xB3") /* ꓳ */ SCRIPT(mlym, MLYM, "Malayalam", HB_SCRIPT_MALAYALAM, HINTING_BOTTOM_TO_TOP, "\xE0\xB4\xA0 \xE0\xB4\xB1") /* à´  à´± */ SCRIPT(mymr, MYMR, "Myanmar", HB_SCRIPT_MYANMAR, HINTING_BOTTOM_TO_TOP, "\xE1\x80\x9D \xE1\x80\x84 \xE1\x80\x82") /* ဠင ဂ */ SCRIPT(nkoo, NKOO, "N'Ko", HB_SCRIPT_NKO, HINTING_BOTTOM_TO_TOP, "\xDF\x8B \xDF\x80") /* ß‹ ߀ */ SCRIPT(olck, OLCK, "Ol Chiki", HB_SCRIPT_OL_CHIKI, HINTING_BOTTOM_TO_TOP, "\xE1\xB1\x9B") /* á±› */ SCRIPT(orkh, ORKH, "Old Turkic", HB_SCRIPT_OLD_TURKIC, HINTING_BOTTOM_TO_TOP, "\xF0\x90\xB0\x97") /* ð°— */ SCRIPT(osge, OSGE, "Osage", HB_SCRIPT_OSAGE, HINTING_BOTTOM_TO_TOP, "\xF0\x90\x93\x82 \xF0\x90\x93\xAA") /* 𓂠𓪠*/ SCRIPT(osma, OSMA, "Osmanya", HB_SCRIPT_OSMANYA, HINTING_BOTTOM_TO_TOP, "\xF0\x90\x92\x86 \xF0\x90\x92\xA0") /* ð’† ð’  */ SCRIPT(saur, SAUR, "Saurashtra", HB_SCRIPT_SAURASHTRA, HINTING_BOTTOM_TO_TOP, "\xEA\xA2\x9D \xEA\xA3\x90") /* ê¢ ê£ */ SCRIPT(shaw, SHAW, "Shavian", HB_SCRIPT_SHAVIAN, HINTING_BOTTOM_TO_TOP, "\xF0\x90\x91\xB4") /* ð‘´ */ SCRIPT(sinh, SINH, "Sinhala", HB_SCRIPT_SINHALA, HINTING_BOTTOM_TO_TOP, "\xE0\xB6\xA7") /* à¶§ */ /* only digit zero has a simple (round) shape in the Sundanese script */ SCRIPT(sund, SUND, "Sundanese", HB_SCRIPT_SUNDANESE, HINTING_BOTTOM_TO_TOP, "\xE1\xAE\xB0") /* á®° */ /* only digit zero has a simple (round) shape in the Tamil script */ SCRIPT(taml, TAML, "Tamil", HB_SCRIPT_TAMIL, HINTING_BOTTOM_TO_TOP, "\xE0\xAF\xA6") /* ௦ */ SCRIPT(tavt, TAVT, "Tai Viet", HB_SCRIPT_TAI_VIET, HINTING_BOTTOM_TO_TOP, "\xEA\xAA\x92 \xEA\xAA\xAB") /* ꪒ ꪫ */ /* there are no simple forms for letters; we thus use two digit shapes */ SCRIPT(telu, TELU, "Telugu", HB_SCRIPT_TELUGU, HINTING_BOTTOM_TO_TOP, "\xE0\xB1\xA6 \xE0\xB1\xA7") /* ౦ à±§ */ SCRIPT(tfng, TFNG, "Tifinagh", HB_SCRIPT_TIFINAGH, HINTING_BOTTOM_TO_TOP, "\xE2\xB5\x94") /* âµ” */ SCRIPT(thai, THAI, "Thai", HB_SCRIPT_THAI, HINTING_BOTTOM_TO_TOP, "\xE0\xB8\xB2 \xE0\xB9\x85 \xE0\xB9\x90") /* า ๅ ๠*/ SCRIPT(vaii, VAII, "Vai", HB_SCRIPT_VAI, HINTING_BOTTOM_TO_TOP, "\xEA\x98\x93 \xEA\x96\x9C \xEA\x96\xB4") /* ꘓ ê–œ ê–´ */ SCRIPT(none, NONE, "no script", HB_SCRIPT_INVALID, HINTING_BOTTOM_TO_TOP, "") /* end of ttfautohint-scripts.h */ ttfautohint-1.8.1/lib/ttfautohint-coverages.h0000644000175000001440000000601113153174711021200 0ustar00wlusers00000000000000/* ttfautohint-coverages.h */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afcover.h' (2014-01-09) from FreeType */ /* This header file can be included multiple times. */ /* Define `COVERAGE' as needed. */ /* * Add new coverages here. The first and second arguments are the coverage * name in lowercase and uppercase, respectively, followed by a description * string. The last five arguments are a four-character identifier and its * four characters defining the corresponding OpenType feature. */ #if 0 /* XXX: It's not possible to define blue zone characters in advance. */ COVERAGE(alternative_fractions, ALTERNATIVE_FRACTIONS, "alternative fractions", afrc, 'a', 'f', 'r', 'c') #endif COVERAGE(petite_capitals_from_capitals, PETITE_CAPITALS_FROM_CAPITALS, "petite capitals from capitals", c2cp, 'c', '2', 'c', 'p') COVERAGE(small_capitals_from_capitals, SMALL_CAPITALS_FROM_CAPITALS, "small capitals from capitals", c2sc, 'c', '2', 's', 'c') #if 0 /* XXX: Only digits are in this coverage, however, both normal style */ /* and oldstyle representation forms are possible. */ COVERAGE(denominators, DENOMINATORS, "denominators", dnom, 'd', 'n', 'o', 'm') #endif #if 0 /* XXX: It's not possible to define blue zone characters in advance. */ COVERAGE(fractions, FRACTIONS, "fractions", frac, 'f', 'r', 'a', 'c') #endif #if 0 /* XXX: Only digits are in this coverage, however, both normal style */ /* and oldstyle representation forms are possible. */ COVERAGE(numerators, NUMERATORS, "numerators", numr, 'n', 'u', 'm', 'r') #endif COVERAGE(ordinals, ORDINALS, "ordinals", ordn, 'o', 'r', 'd', 'n') COVERAGE(petite_capitals, PETITE_CAPITALS, "petite capitals", pcap, 'p', 'c', 'a', 'p') COVERAGE(ruby, RUBY, "ruby", ruby, 'r', 'u', 'b', 'y') COVERAGE(scientific_inferiors, SCIENTIFIC_INFERIORS, "scientific inferiors", sinf, 's', 'i', 'n', 'f') COVERAGE(small_capitals, SMALL_CAPITALS, "small capitals", smcp, 's', 'm', 'c', 'p') COVERAGE(subscript, SUBSCRIPT, "subscript", subs, 's', 'u', 'b', 's') COVERAGE(superscript, SUPERSCRIPT, "superscript", sups, 's', 'u', 'p', 's') COVERAGE(titling, TITLING, "titling", titl, 't', 'i', 't', 'l') #if 0 /* to be always excluded */ COVERAGE(nalt, 'n', 'a', 'l', 't'); /* Alternate Annotation Forms (?) */ COVERAGE(ornm, 'o', 'r', 'n', 'm'); /* Ornaments (?) */ #endif /* end of ttfautohint-coverages.h */ ttfautohint-1.8.1/lib/Makefile.in0000644000175000001440000016127113222450650016555 0ustar00wlusers00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Copyright (C) 2011-2017 by Werner Lemberg. # # This file is part of the ttfautohint library, and may only be used, # modified, and distributed under the terms given in `COPYING'. By # continuing to use, modify, or distribute this file you indicate that you # have read `COPYING' and understand and accept it fully. # # The file `COPYING' mentioned in the previous paragraph is distributed # with the ttfautohint library. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autotroll.m4 \ $(top_srcdir)/m4/ltlize_lang.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/gnulib/m4/00gnulib.m4 \ $(top_srcdir)/gnulib/m4/absolute-header.m4 \ $(top_srcdir)/gnulib/m4/alloca.m4 \ $(top_srcdir)/gnulib/m4/asm-underscore.m4 \ $(top_srcdir)/gnulib/m4/builtin-expect.m4 \ $(top_srcdir)/gnulib/m4/dirname.m4 \ $(top_srcdir)/gnulib/m4/double-slash-root.m4 \ $(top_srcdir)/gnulib/m4/errno_h.m4 \ $(top_srcdir)/gnulib/m4/error.m4 \ $(top_srcdir)/gnulib/m4/exponentd.m4 \ $(top_srcdir)/gnulib/m4/extensions.m4 \ $(top_srcdir)/gnulib/m4/extern-inline.m4 \ $(top_srcdir)/gnulib/m4/fcntl-o.m4 \ $(top_srcdir)/gnulib/m4/fcntl_h.m4 \ $(top_srcdir)/gnulib/m4/float_h.m4 \ $(top_srcdir)/gnulib/m4/getopt.m4 \ $(top_srcdir)/gnulib/m4/getprogname.m4 \ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \ $(top_srcdir)/gnulib/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/gnulib/m4/include_next.m4 \ $(top_srcdir)/gnulib/m4/intmax_t.m4 \ $(top_srcdir)/gnulib/m4/inttypes_h.m4 \ $(top_srcdir)/gnulib/m4/isatty.m4 \ $(top_srcdir)/gnulib/m4/lib-ld.m4 \ $(top_srcdir)/gnulib/m4/lib-link.m4 \ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \ $(top_srcdir)/gnulib/m4/libtool.m4 \ $(top_srcdir)/gnulib/m4/limits-h.m4 \ $(top_srcdir)/gnulib/m4/lock.m4 \ $(top_srcdir)/gnulib/m4/longlong.m4 \ $(top_srcdir)/gnulib/m4/ltoptions.m4 \ $(top_srcdir)/gnulib/m4/ltsugar.m4 \ $(top_srcdir)/gnulib/m4/ltversion.m4 \ $(top_srcdir)/gnulib/m4/lt~obsolete.m4 \ $(top_srcdir)/gnulib/m4/malloc.m4 \ $(top_srcdir)/gnulib/m4/memchr.m4 \ $(top_srcdir)/gnulib/m4/memmem.m4 \ $(top_srcdir)/gnulib/m4/mmap-anon.m4 \ $(top_srcdir)/gnulib/m4/msvc-inval.m4 \ $(top_srcdir)/gnulib/m4/msvc-nothrow.m4 \ $(top_srcdir)/gnulib/m4/multiarch.m4 \ $(top_srcdir)/gnulib/m4/nocrash.m4 \ $(top_srcdir)/gnulib/m4/off_t.m4 \ $(top_srcdir)/gnulib/m4/onceonly.m4 \ $(top_srcdir)/gnulib/m4/printf.m4 \ $(top_srcdir)/gnulib/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/gnulib/m4/size_max.m4 \ $(top_srcdir)/gnulib/m4/ssize_t.m4 \ $(top_srcdir)/gnulib/m4/std-gnu11.m4 \ $(top_srcdir)/gnulib/m4/stdarg.m4 \ $(top_srcdir)/gnulib/m4/stdbool.m4 \ $(top_srcdir)/gnulib/m4/stddef_h.m4 \ $(top_srcdir)/gnulib/m4/stdint.m4 \ $(top_srcdir)/gnulib/m4/stdint_h.m4 \ $(top_srcdir)/gnulib/m4/stdio_h.m4 \ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \ $(top_srcdir)/gnulib/m4/strerror.m4 \ $(top_srcdir)/gnulib/m4/strerror_r.m4 \ $(top_srcdir)/gnulib/m4/string_h.m4 \ $(top_srcdir)/gnulib/m4/strndup.m4 \ $(top_srcdir)/gnulib/m4/strnlen.m4 \ $(top_srcdir)/gnulib/m4/strtok_r.m4 \ $(top_srcdir)/gnulib/m4/strtoull.m4 \ $(top_srcdir)/gnulib/m4/sys_socket_h.m4 \ $(top_srcdir)/gnulib/m4/sys_types_h.m4 \ $(top_srcdir)/gnulib/m4/threadlib.m4 \ $(top_srcdir)/gnulib/m4/unistd_h.m4 \ $(top_srcdir)/gnulib/m4/vasnprintf.m4 \ $(top_srcdir)/gnulib/m4/vasprintf.m4 \ $(top_srcdir)/gnulib/m4/warn-on-use.m4 \ $(top_srcdir)/gnulib/m4/wchar_h.m4 \ $(top_srcdir)/gnulib/m4/wchar_t.m4 \ $(top_srcdir)/gnulib/m4/wint_t.m4 \ $(top_srcdir)/gnulib/m4/xalloc.m4 \ $(top_srcdir)/gnulib/m4/xsize.m4 \ $(top_srcdir)/gnulib/m4/xstrndup.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) libnumberset_la_LIBADD = am_libnumberset_la_OBJECTS = numberset.lo libnumberset_la_OBJECTS = $(am_libnumberset_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libsds_la_LIBADD = am_libsds_la_OBJECTS = sds-wrapper.lo libsds_la_OBJECTS = $(am_libsds_la_OBJECTS) am__DEPENDENCIES_1 = libttfautohint_la_DEPENDENCIES = $(noinst_LTLIBRARIES) \ $(top_builddir)/gnulib/src/libgnu.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libttfautohint_la_OBJECTS = tablue.lo tabytecode.lo tacontrol.lo \ tacontrol-flex.lo tacontrol-bison.lo tacvt.lo tadsig.lo \ tadummy.lo tadump.lo taerror.lo tafeature.lo tafile.lo \ tafont.lo tafpgm.lo tagasp.lo tagloadr.lo taglobal.lo \ taglyf.lo tagpos.lo tahints.lo tahmtx.lo talatin.lo \ taloader.lo taloca.lo tamaxp.lo taname.lo tapost.lo taprep.lo \ taranges.lo tascript.lo tasfnt.lo tashaper.lo tasort.lo \ tatables.lo tatime.lo tattc.lo tattf.lo tattfa.lo taversion.lo \ ttfautohint.lo libttfautohint_la_OBJECTS = $(am_libttfautohint_la_OBJECTS) libttfautohint_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libttfautohint_la_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/gnulib/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 = SOURCES = $(libnumberset_la_SOURCES) $(libsds_la_SOURCES) \ $(libttfautohint_la_SOURCES) DIST_SOURCES = $(libnumberset_la_SOURCES) $(libsds_la_SOURCES) \ $(libttfautohint_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(pkgconfig_DATA) HEADERS = $(include_HEADERS) $(nodist_include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/gnulib/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLEX = @FLEX@ FLOAT_H = @FLOAT_H@ FREETYPE_CPPFLAGS = @FREETYPE_CPPFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@ HARFBUZZ_LIBS = @HARFBUZZ_LIBS@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ IMPORT = @IMPORT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KPSEWHICH = @KPSEWHICH@ LATEX = @LATEX@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MOC = @MOC@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ 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@ PANDOC = @PANDOC@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ QMAKE = @QMAKE@ QT_CFLAGS = @QT_CFLAGS@ QT_CPPFLAGS = @QT_CPPFLAGS@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DEFINES = @QT_DEFINES@ QT_INCPATH = @QT_INCPATH@ QT_LDFLAGS = @QT_LDFLAGS@ QT_LFLAGS = @QT_LFLAGS@ QT_LIBS = @QT_LIBS@ QT_PATH = @QT_PATH@ QT_VERSION = @QT_VERSION@ QT_VERSION_MAJOR = @QT_VERSION_MAJOR@ RANLIB = @RANLIB@ RCC = @RCC@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UIC = @UIC@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ ft_config = @ft_config@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ttfautohint_major = @ttfautohint_major@ ttfautohint_minor = @ttfautohint_minor@ ttfautohint_revision = @ttfautohint_revision@ ABI_CURRENT = 1 ABI_REVISION = 0 ABI_AGE = 0 AM_CPPFLAGS = -I$(top_builddir)/gnulib/src \ -I$(top_srcdir)/gnulib/src \ $(FREETYPE_CPPFLAGS) \ $(HARFBUZZ_CFLAGS) noinst_LTLIBRARIES = \ libsds.la \ libnumberset.la lib_LTLIBRARIES = libttfautohint.la include_HEADERS = \ ttfautohint-errors.h \ ttfautohint-scripts.h \ ttfautohint-coverages.h nodist_include_HEADERS = \ ttfautohint.h libttfautohint_la_LDFLAGS = \ -no-undefined \ -version-info $(ABI_CURRENT):$(ABI_REVISION):$(ABI_AGE) \ -export-symbols-regex "TTF_autohint" libsds_la_SOURCES = \ sds-wrapper.c sds.h libnumberset_la_SOURCES = \ numberset.c numberset.h # We have to bypass automake's default handling of flex (.l) and bison (.y) # files, since such files are always treated as traditional lex and yacc # files, not allowing for flex and bison extensions. For this reason, we # call our source files `tacontrol.flex' and `tacontrol.bison' and write # explicit dependency rules. libttfautohint_la_SOURCES = \ llrb.h \ ta.h \ tablue.c tablue.h \ tabytecode.c tabytecode.h \ tacontrol.c tacontrol.h \ tacontrol-flex.c tacontrol-flex.h \ tacontrol-bison.c tacontrol-bison.h \ tacvt.c \ tadsig.c \ tadummy.c tadummy.h \ tadump.c \ taerror.c \ tafeature.c \ tafile.c \ tafont.c \ tafpgm.c \ tagasp.c \ tagloadr.c tagloadr.h \ taglobal.c taglobal.h \ taglyf.c \ tagpos.c \ tahints.c tahints.h \ tahmtx.c \ talatin.c talatin.h \ taloader.c taloader.h \ taloca.c \ tamaxp.c \ taname.c \ tapost.c \ taprep.c \ taranges.c taranges.h \ tascript.c \ tasfnt.c \ tashaper.c tashaper.h \ tasort.c tasort.h \ tastyles.h \ tatables.c tatables.h \ tatime.c \ tattc.c \ tattf.c \ tattfa.c \ tatypes.h \ taversion.c \ tawrtsys.h \ ttfautohint.c libttfautohint_la_LIBADD = \ $(noinst_LTLIBRARIES) \ $(top_builddir)/gnulib/src/libgnu.la \ $(LIBM) \ $(FREETYPE_LIBS) \ $(HARFBUZZ_LIBS) BUILT_SOURCES = \ tablue.c tablue.h \ tacontrol-flex.c tacontrol-flex.h \ tacontrol-bison.c tacontrol-bison.h \ ttfautohint.h EXTRA_DIST = \ afblue.pl \ sds.c \ tablue.cin tablue.hin \ tablue.dat \ tacontrol.flex tacontrol.bison \ ttfautohint.pc.in \ numberset-test.c \ ttfautohint.h.in pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = ttfautohint.pc CLEANFILES = $(pkgconfig_DATA) TA_V_FLEX = $(TA_V_FLEX_@AM_V@) TA_V_FLEX_ = $(TA_V_FLEX_@AM_DEFAULT_V@) TA_V_FLEX_0 = @echo " FLEX " $@; TA_V_BISON = $(TA_V_BISON_@AM_V@) TA_V_BISON_ = $(TA_V_BISON_@AM_DEFAULT_V@) TA_V_BISON_0 = @echo " BISON " $@; all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits lib/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-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libnumberset.la: $(libnumberset_la_OBJECTS) $(libnumberset_la_DEPENDENCIES) $(EXTRA_libnumberset_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libnumberset_la_OBJECTS) $(libnumberset_la_LIBADD) $(LIBS) libsds.la: $(libsds_la_OBJECTS) $(libsds_la_DEPENDENCIES) $(EXTRA_libsds_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libsds_la_OBJECTS) $(libsds_la_LIBADD) $(LIBS) libttfautohint.la: $(libttfautohint_la_OBJECTS) $(libttfautohint_la_DEPENDENCIES) $(EXTRA_libttfautohint_la_DEPENDENCIES) $(AM_V_CCLD)$(libttfautohint_la_LINK) -rpath $(libdir) $(libttfautohint_la_OBJECTS) $(libttfautohint_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numberset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sds-wrapper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tablue.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tabytecode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tacontrol-bison.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tacontrol-flex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tacontrol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tacvt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tadsig.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tadummy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tadump.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taerror.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tafeature.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tafile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tafont.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tafpgm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tagasp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tagloadr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taglobal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taglyf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tagpos.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tahints.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tahmtx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/talatin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taloader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taloca.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tamaxp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taname.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tapost.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taprep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taranges.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tascript.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tasfnt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tashaper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tasort.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tatables.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tatime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tattc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tattf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tattfa.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taversion.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ttfautohint.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -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 $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) install-nodist_includeHEADERS: $(nodist_include_HEADERS) @$(NORMAL_INSTALL) @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-nodist_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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: -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." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-nodist_includeHEADERS \ install-pkgconfigDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \ uninstall-nodist_includeHEADERS uninstall-pkgconfigDATA .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man \ install-nodist_includeHEADERS install-pdf install-pdf-am \ install-pkgconfigDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-includeHEADERS \ uninstall-libLTLIBRARIES uninstall-nodist_includeHEADERS \ uninstall-pkgconfigDATA .PRECIOUS: Makefile ttfautohint.pc: ttfautohint.pc.in $(top_builddir)/config.status $(AM_V_GEN)$(SED) \ -e 's@%prefix%@$(prefix)@g' \ -e 's@%exec_prefix%@$(exec_prefix)@g' \ -e 's@%includedir%@$(includedir)@g' \ -e 's@%libdir%@$(libdir)@g' \ -e 's@%version%@$(ABI_CURRENT).$(ABI_REVISION).$(ABI_AGE)@g' \ "$<" \ > "$@" \ || (rm "$@"; false) tablue.c: tablue.dat tablue.cin $(AM_V_GEN)rm -f $@-t $@ \ && perl $(srcdir)/afblue.pl $(srcdir)/tablue.dat \ < $(srcdir)/tablue.cin \ > $@-t \ && mv $@-t $@ tablue.h: tablue.dat tablue.hin $(AM_V_GEN)rm -f $@-t $@ \ && perl $(srcdir)/afblue.pl $(srcdir)/tablue.dat \ < $(srcdir)/tablue.hin \ > $@-t \ && mv $@-t $@ ttfautohint.h: ttfautohint.h.in $(AM_V_GEN)$(SED) \ -e 's@%TTFAUTOHINT_MAJOR%@$(ttfautohint_major)@g' \ -e 's@%TTFAUTOHINT_MINOR%@$(ttfautohint_minor)@g' \ -e 's@%TTFAUTOHINT_REVISION%@$(ttfautohint_revision)@g' \ -e 's@%TTFAUTOHINT_VERSION%@$(VERSION)@g' \ "$<" \ > "$@" \ || (rm "$@"; false) # we use `touch' to make the created .h file newer than the created .c file tacontrol-flex.c tacontrol-flex.h: tacontrol.flex $(TA_V_FLEX)$(FLEX) $(srcdir)/tacontrol.flex \ && touch tacontrol-flex.h tacontrol-flex.h: tacontrol-flex.c tacontrol-bison.c tacontrol-bison.h: tacontrol.bison $(TA_V_BISON)$(BISON) $(srcdir)/tacontrol.bison \ && touch tacontrol-bison.h tacontrol-bison.h: tacontrol-bison.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: ttfautohint-1.8.1/lib/numberset.c0000644000175000001440000003355113207366755016676 0ustar00wlusers00000000000000/* numberset.c */ /* * Copyright (C) 2012-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include #include #include #include #include #include #include #include number_range* number_set_new(int start, int end, int min, int max) { number_range* nr; int tmp; if (min < 0) min = 0; if (max < 0) max = INT_MAX; if (min > max) { tmp = min; min = max; max = tmp; } if (start > end) { tmp = start; start = end; end = tmp; } if (start < min || end > max) return NUMBERSET_INVALID_RANGE; nr = (number_range*)malloc(sizeof (number_range)); if (!nr) return NUMBERSET_ALLOCATION_ERROR; nr->start = start; nr->end = end; nr->base = 0; nr->wrap = 0; nr->next = NULL; return nr; } int wrap_range_check_wraps(size_t num_wraps, int* wraps) { size_t i; /* `wraps' must have at least two elements */ if (!wraps || num_wraps < 2) return 1; /* first `wraps' element must be larger than or equal to -1 */ if (wraps[0] < -1) return 1; /* check that all elements of `wraps' are strictly ascending */ for (i = 1; i < num_wraps; i++) if (wraps[i] <= wraps[i - 1]) return 1; return 0; } number_range* wrap_range_new(int start, int end, size_t num_wraps, int* wraps) { number_range* nr; size_t i; int s, e; if (num_wraps < 2) return NUMBERSET_INVALID_WRAP_RANGE; if (start > end) { s = end; e = start; } else { s = start; e = end; } /* search fitting interval in `wraps' */ for (i = 1; i < num_wraps; i++) { if (s > wraps[i - 1] && e <= wraps[i]) break; } if (i == num_wraps) return NUMBERSET_INVALID_WRAP_RANGE; nr = (number_range*)malloc(sizeof (number_range)); if (!nr) return NUMBERSET_ALLOCATION_ERROR; nr->start = start; nr->end = end; nr->base = wraps[i - 1] + 1; nr->wrap = wraps[i]; nr->next = NULL; return nr; } number_range* number_set_prepend(number_range* list, number_range* element) { if (!element) return list; if (!list) return element; /* `list' and `element' must both be normal integer ranges */ if (list->base != list->wrap || element->base != element->wrap) return NUMBERSET_INVALID_RANGE; if (element->start <= list->end) { if (element->end < list->start) return NUMBERSET_NOT_ASCENDING; else return NUMBERSET_OVERLAPPING_RANGES; } if (element->start == list->end + 1) { /* merge adjacent ranges */ list->end = element->end; free(element); return list; } element->next = list; return element; } number_range* number_set_prepend_unsorted(number_range* list, number_range* element) { if (!element) return list; if (!list) return element; /* `list' and `element' must both be normal integer ranges */ if (list->base != list->wrap || element->base != element->wrap) return NUMBERSET_INVALID_RANGE; element->next = list; return element; } number_range* wrap_range_prepend(number_range* list, number_range* element) { if (!element) return list; if (!list) return element; /* `list' and `element' must both be wrap-around ranges */ if (list->base == list->wrap || element->base == element->wrap) return NUMBERSET_INVALID_RANGE; /* we explicitly assume that the [base;wrap] intervals */ /* of `list' and `element' either don't overlap ... */ if (element->base < list->base) return NUMBERSET_NOT_ASCENDING; if (element->base > list->base) goto prepend; /* ... or are exactly the same; */ /* in this case, we can't append if the list's range really wraps around */ if (list->start > list->end) return NUMBERSET_OVERLAPPING_RANGES; if (element->start <= list->end) { if (element->end < list->start) return NUMBERSET_NOT_ASCENDING; else return NUMBERSET_OVERLAPPING_RANGES; } if (element->start > element->end) { number_range* nr = list->next; /* we must search backwards to check */ /* whether the wrapped part of the range overlaps */ /* with an already existing range */ /* (in the same [base;wrap] interval) */ while (nr) { if (element->base != nr->base) break; if (element->end > nr->start) return NUMBERSET_OVERLAPPING_RANGES; nr = nr->next; } } prepend: element->next = list; return element; } number_range* number_set_insert(number_range* list, number_range* element) { number_range* nr = list; number_range* prev; if (!element) return list; if (!list) return element; /* `list' and `element' must both be normal integer ranges */ if (list->base != list->wrap || element->base != element->wrap) return NUMBERSET_INVALID_RANGE; prev = NULL; while (nr) { if (element->start <= nr->end && element->end >= nr->start) return NUMBERSET_OVERLAPPING_RANGES; /* merge adjacent ranges */ if (element->end + 1 == nr->start) { nr->start = element->start; free(element); if (nr->next && nr->next->end + 1 == nr->start) { element = nr->next; element->end = nr->end; free(nr); return element; } return list; } /* insert element */ if (element->start > nr->end) { /* merge adjacent ranges */ if (nr->end + 1 == element->start) { nr->end = element->end; free(element); return list; } if (prev) prev->next = element; element->next = nr; return prev ? list : element; } prev = nr; nr = nr->next; } /* prepend element */ prev->next = element; element->next = NULL; return list; } number_range* wrap_range_insert(number_range* list, number_range* element) { number_range* nr = list; number_range* prev; if (!element) return list; if (!list) return element; /* `list' and `element' must both be wrap-around ranges */ if (list->base == list->wrap || element->base == element->wrap) return NUMBERSET_INVALID_RANGE; prev = NULL; while (nr) { /* we explicitly assume that the [base;wrap] intervals */ /* of `list' and `element' either don't overlap ... */ if (element->base < nr->base) goto next; if (element->base > nr->base) goto insert; /* ... or are exactly the same */ if (nr->start > nr->end) { /* range really wraps around */ if (element->start > element->end) return NUMBERSET_OVERLAPPING_RANGES; if (element->start <= nr->end || element->end >= nr->start) return NUMBERSET_OVERLAPPING_RANGES; } else { /* normal range */ if (element->start <= nr->end && element->end >= nr->start) return NUMBERSET_OVERLAPPING_RANGES; /* insert element */ if (element->start > nr->end) { insert: if (prev) prev->next = element; element->next = nr; return prev ? list : element; } } next: prev = nr; nr = nr->next; } /* prepend element */ prev->next = element; element->next = NULL; return list; } number_range* number_set_reverse(number_range* list) { number_range* cur; cur = list; list = NULL; while (cur) { number_range* tmp; tmp = cur; cur = cur->next; tmp->next = list; list = tmp; } return list; } const char* number_set_parse(const char* s, number_range** number_set, int min, int max) { number_range* cur = NULL; number_range* new_range; const char* last_pos = s; int last_start = -1; int last_end = -1; int t; number_range* error_code = NULL; if (!s) return NULL; if (min < 0) min = 0; if (max < 0) max = INT_MAX; if (min > max) { t = min; min = max; max = t; } for (;;) { int digit; int n = -1; int m = -1; while (isspace(*s)) s++; if (*s == ',') { s++; continue; } else if (*s == '-') { last_pos = s; n = min; } else if (isdigit(*s)) { last_pos = s; n = 0; do { digit = *s - '0'; if (n > INT_MAX / 10 || (n == INT_MAX / 10 && digit > 5)) { error_code = NUMBERSET_OVERFLOW; break; } n = n * 10 + digit; s++; } while (isdigit(*s)); if (error_code) break; while (isspace(*s)) s++; } else if (*s == '\0') break; /* end of data */ else { error_code = NUMBERSET_INVALID_CHARACTER; break; } if (*s == '-') { s++; while (isspace(*s)) s++; if (isdigit(*s)) { m = 0; do { digit = *s - '0'; if (m > INT_MAX / 10 || (m == INT_MAX / 10 && digit > 5)) { error_code = NUMBERSET_OVERFLOW; break; } m = m * 10 + digit; s++; } while (isdigit(*s)); if (error_code) break; } } else m = n; if (m == -1) m = max; if (m < n) { t = n; n = m; m = t; } if (n < min || m > max) { error_code = NUMBERSET_INVALID_RANGE; break; } if (last_end >= n) { if (last_start >= m) error_code = NUMBERSET_NOT_ASCENDING; else error_code = NUMBERSET_OVERLAPPING_RANGES; break; } if (cur && last_end + 1 == n) { /* merge adjacent ranges */ cur->end = m; } else { if (number_set) { new_range = (number_range*)malloc(sizeof (number_range)); if (!new_range) { error_code = NUMBERSET_ALLOCATION_ERROR; break; } /* prepend new range to list */ new_range->start = n; new_range->end = m; new_range->base = 0; new_range->wrap = 0; new_range->next = cur; cur = new_range; } } last_start = n; last_end = m; } /* end of loop */ if (error_code) { number_set_free(cur); s = last_pos; if (number_set) *number_set = error_code; } else { /* success */ if (number_set) *number_set = number_set_reverse(cur); } return s; } void number_set_free(number_range* number_set) { number_range* nr = number_set; while (nr) { number_range* tmp; tmp = nr; nr = nr->next; free(tmp); } } char* number_set_show(number_range* number_set, int min, int max) { sds s; size_t len; char* res; number_range* nr = number_set; const char* comma; if (nr && nr->base == nr->wrap) { if (min < 0) min = 0; if (max < 0) max = INT_MAX; if (min > max) { int t; t = min; min = max; max = t; } } else { /* `min' and `max' are meaningless for wrap-around ranges */ min = INT_MIN; max = INT_MAX; } s = sdsempty(); while (nr) { if (nr->start > max) goto Exit; if (nr->end < min) goto Again; comma = *s ? ", " : ""; if (nr->start == nr->end) s = sdscatprintf(s, "%s%i", comma, nr->start); else if (nr->start <= min && nr->end >= max) s = sdscatprintf(s, "-"); else if (nr->start <= min) s = sdscatprintf(s, "-%i", nr->end); else if (nr->end >= max) s = sdscatprintf(s, "%s%i-", comma, nr->start); else s = sdscatprintf(s, "%s%i-%i", comma, nr->start, nr->end); Again: nr = nr->next; } Exit: if (!s) return NULL; /* we return an empty string for an empty number set */ /* (this is, number_set == NULL or unsuitable `min' and `max' values) */ len = sdslen(s) + 1; res = (char*)malloc(len); if (res) memcpy(res, s, len); sdsfree(s); return res; } int number_set_is_element(number_range* number_set, int number) { number_range* nr = number_set; while (nr) { if (nr->start > nr->end) { if (number < nr->base) return 0; if (number <= nr->end) return 1; if ( number < nr->start) return 0; if (number <= nr->wrap) return 1; } else { if (number < nr->start) return 0; if (number <= nr->end) return 1; } nr = nr->next; } return 0; } int number_set_get_first(number_set_iter* iter_p) { if (!iter_p || !iter_p->range) return -1; iter_p->val = iter_p->range->start; return iter_p->val; } int number_set_get_next(number_set_iter* iter_p) { if (!iter_p || !iter_p->range) return -1; iter_p->val++; if (iter_p->range->start > iter_p->range->end) { /* range really wraps around */ if (iter_p->val > iter_p->range->wrap) iter_p->val = iter_p->range->base; else if (iter_p->val < iter_p->range->start && iter_p->val > iter_p->range->end) { iter_p->range = iter_p->range->next; if (iter_p->range) iter_p->val = iter_p->range->start; else return -1; } } else { if (iter_p->val > iter_p->range->end) { iter_p->range = iter_p->range->next; if (iter_p->range) iter_p->val = iter_p->range->start; else return -1; } } return iter_p->val; } /* end of numberset.c */ ttfautohint-1.8.1/lib/numberset.h0000644000175000001440000002656213207366640016700 0ustar00wlusers00000000000000/* numberset.h */ /* * Copyright (C) 2012-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #ifndef NUMBERSET_H_ #define NUMBERSET_H_ #ifdef __cplusplus extern "C" { #endif /* * A structure defining a range or wrap-around range of non-negative * integers, to be used as a linked list. It gets allocated by a successful * call to `number_set_parse', `number_set_new', and `wrap_range_new'. Use * `number_set_free' to deallocate it. * * If `base' and `wrap' are not equal, we have a `wrap-around range'. These * two values define a frame which encloses `start' and `end'; `start' can * be larger than `end' to indicate wrapping at `wrap', starting again with * value `base'. Example: * * start=17, end=14, * base=13, wrap=18 --> 17, 18, 13, 14 * * Normal integer ranges can be merged. For example, the ranges 3-6 and 7-8 * can be merged into 3-8, and functions like `number_set_prepend' do this * automatically. * * Wrap-around ranges will not be merged; this is by design to reflect the * intended usage of this library (namely to represent groups of * horizontally aligned points on a closed glyph outline contour). * Additionally, for a given [base;wrap] interval there can only be a single * wrap-around range that actually does wrapping; it gets sorted after the * other non-wrapping ranges for the same [base;wrap] interval. */ typedef struct number_range_ { /* all values are >= 0 */ int start; int end; int base; int wrap; struct number_range_* next; } number_range; /* * Create and initialize a `number_range' object, holding a normal integer * range. In case of an allocation error, return * NUMBERSET_ALLOCATION_ERROR. * * A negative value for `min' is replaced with zero, and a negative value * for `max' with the largest representable integer, INT_MAX. * * If either `start' or `end' exceeds the range [min;max], return * NUMBERSET_INVALID_RANGE. */ number_range* number_set_new(int start, int end, int min, int max); /* * Create and initialize a wrap-around range. In case of an allocation * error, return NUMBERSET_ALLOCATION_ERROR. * * `wraps' specifies an array of at least two `wrap points', in strictly * ascending order, with `num_wraps' elements. For creating a valid * wrap-around range, there must exist a pair of adjacent elements in the * `wraps' array that enclose `start' and `end'. To be more precise, if * `wA=wraps[n]' and `wB=wraps[n+1]' denote the two adjacent elements of * `wraps', both `start' and `end' must be in the range ]wA;wB]. If this * constraint is not met, return NUMBERSET_INVALID_RANGE. * * A corollary of the definitions of `wraps' and `number_range' is that the * elements of `wraps' must be all different and non-negative except the * first element, which can be -1. * * For convenience, normal integer ranges and wrap-around ranges use the * same data structure (`number_range'). However, calls to `number_set_new' * and `wrap_range_new' can't be mixed: Either use the former function for * all calls, or you use the latter; you will get an NUMBERSET_INVALID_RANGE * error otherwise. * * Here are some examples that demonstrate the resulting elements of * wrap-around ranges for a given `wraps' array and various `start' and * `end' values. * * wraps = {-1, 4, 9} * * range elements * ------------------------------------------------- * 4-0 4, 0 * 6-8 6, 7, 8 * 8-6 8, 9, 5, 6 * 3-6 invalid, crossing wrap point 4 * 10-11 invalid, outside of wrap points array * * Note that you get undefined results if the elements of `wraps' change * between calls to this function. */ number_range* wrap_range_new(int start, int end, size_t num_wraps, int* wraps); /* * Return 0 if the setup of `wraps', as described above, is valid, * and 1 otherwise. */ int wrap_range_check_wraps(size_t num_wraps, int* wraps); /* * Prepend a single `number_range' object `element' to `list' of * `number_range' objects, which might be NULL. `list' is expected to be * stored in reversed order; consequently, the range in `element' must be * larger than the first element of `list', otherwise an error is returned. * If possible, the ranges of `element' and the first element of `list' are * merged, in which case `element' gets deallocated. * * If `element' is NULL, return `list'. */ number_range* number_set_prepend(number_range* list, number_range* element); /* * Prepend a single `number_range' object `element' to `list' of * `number_range' objects, which might be NULL. `list' is expected to be * stored in reversed order. By design, there is no range merging. * * If `element' is NULL, return `list'. */ number_range* number_set_prepend_unsorted(number_range* list, number_range* element); /* * Prepend a single wrap-around `number_range' object `element' to `list' of * (wrap-around) `number_range' objects, which might be NULL. `list' is * expected to be stored in reversed order; consequently, the range in * `element' must be larger than the first element of `list', otherwise an * error is returned. * * If `element' is NULL, return `list'. */ number_range* wrap_range_prepend(number_range* list, number_range* element); /* * Insert a single `number_range' object `element' into `list' of * `number_range' objects, which might be NULL. `list' is expected to be * stored in reversed order. If possible, the ranges of `element' and * `list' are merged, in which case `element' gets deallocated. * * Don't use this function for unsorted lists (i.e., lists created with * `number_set_prepend_unsorted'); you will get undefined behaviour * otherwise. * * If `element' is NULL, return `list'. */ number_range* number_set_insert(number_range* list, number_range* element); /* * Insert a single wrap-around `number_range' object `element' into `list' * of (wrap-around) `number_range' objects, which might be NULL. `list' is * expected to be stored in reversed order. * * If `element' is NULL, return `list'. */ number_range* wrap_range_insert(number_range* list, number_range* element); /* * Reverse a list of `number_range' objects. */ number_range* number_set_reverse(number_range* list); /* * Parse a description in string `s' for a set of non-negative integers * within the limits given by the input parameters `min' and `max', and * which consists of the following ranges, separated by commas (`n' and `m' * are non-negative integers): * * -n min <= x <= n * n x = n; this is a shorthand for `n-n' * n-m n <= x <= m (or m <= x <= n if m < n) * m- m <= x <= max * - min <= x <= max * * Superfluous commas are ignored, as is whitespace around numbers, dashes, * and commas. The ranges must be ordered, without overlaps. As a * consequence, `-n' and `m-' can occur at most once and must be then the * first and last range, respectively; similarly, `-' cannot be paired with * any other range. * * In the following examples, `min' is 4 and `max' is 12: * * - -> 4, 5, 6, 7, 8, 9, 10, 11, 12 * -3, 5- -> invalid first range * 4, 6-8, 10- -> 4, 6, 7, 8, 10, 11, 12 * 4-8, 6-10 -> invalid overlapping ranges * * In case of success (this is, the number set description in `s' is valid) * the return value is a pointer to the final zero byte in string `s'. In * case of an error, the return value is a pointer to the beginning position * of the offending range in string `s'. * * If s is NULL, the function exits immediately with NULL as the return * value. * * If the user provides a non-NULL `number_set' value, `number_set_parse' * stores a linked list of ordered number ranges in `*number_set', allocated * with `malloc'. If there is no range at all (for example, an empty string * or whitespace and commas only) no data gets allocated, and `*number_set' * is set to NULL. In case of error, `*number_set' returns an error code; * you should use the following macros to compare with. * * NUMBERSET_INVALID_CHARACTER invalid character in description string * NUMBERSET_OVERFLOW numerical overflow * NUMBERSET_INVALID_RANGE invalid range, exceeding `min' or `max' * NUMBERSET_OVERLAPPING_RANGES overlapping ranges * NUMBERSET_NOT_ASCENDING not ascending ranges or values * NUMBERSET_ALLOCATION_ERROR allocation error * * Note that a negative value for `min' is replaced with zero, and a * negative value for `max' with the largest representable integer, INT_MAX. * * `number_set_parse' is not suited to create wrap-around ranges; this only * works with `wrap_range_new'. */ #define NUMBERSET_INVALID_CHARACTER (number_range*)-1 #define NUMBERSET_OVERFLOW (number_range*)-2 #define NUMBERSET_INVALID_RANGE (number_range*)-3 #define NUMBERSET_OVERLAPPING_RANGES (number_range*)-4 #define NUMBERSET_NOT_ASCENDING (number_range*)-5 #define NUMBERSET_ALLOCATION_ERROR (number_range*)-6 /* * `wrap_range_new' can return an additional error code in case no valid * interval could be found. */ #define NUMBERSET_INVALID_WRAP_RANGE (number_range*)-7 const char* number_set_parse(const char* s, number_range** number_set, int min, int max); /* * Free the allocated data in `number_set'. */ void number_set_free(number_range* number_set); /* * Return a string representation of `number_set', viewed through a * `window', so to say, spanned up by the parameters `min' and `max'. After * use, the string should be deallocated with a call to `free'. In case of * an allocation error, the return value is NULL. * * Note that a negative value for `min' is replaced with zero, and a * negative value for `max' with the largest representable integer, INT_MAX. * * If `number_set' represents wrap-around ranges, `min' and `max' are * ignored. */ char* number_set_show(number_range* number_set, int min, int max); /* * Return value 1 if `number' is element of `number_set', zero otherwise. */ int number_set_is_element(number_range* number_set, int number); /* * A structure used to iterate over a number set. */ typedef struct number_set_iter_ { number_range* range; int val; } number_set_iter; /* * Get first element of a number set. `iter_p' must be initialized with the * `number_range' structure to iterate over. After the call, `iter_p' is * ready to be used in a call to `number_set_get_next'. * * If there is no valid first element, return -1. */ int number_set_get_first(number_set_iter* iter_p); /* * Get next element of a number set, using `iter_p' from a previous call to * `number_set_get_first' or `number_set_get_next'. If there is no next * valid element, return -1. */ int number_set_get_next(number_set_iter* iter_p); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* NUMBERSET_H_ */ /* end of numberset.h */ ttfautohint-1.8.1/lib/sds-wrapper.c0000644000175000001440000000125713153174711017124 0ustar00wlusers00000000000000/* sds-wrapper.c */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* Load `config.h' before library source code. */ #include "config.h" /* for va_copy, via gnulib -- */ /* we don't enforce a fully C99-compliant compiler */ #include #include "sds.c" /* end of sds-wrapper.c */ ttfautohint-1.8.1/lib/sds.h0000644000175000001440000001104613153174711015450 0ustar00wlusers00000000000000/* SDS (Simple Dynamic Strings), A C dynamic strings library. * * Copyright (c) 2006-2014, Salvatore Sanfilippo * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Redis nor the names of its contributors may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef SDS_H #define SDS_H #ifndef __GNUC__ # undef __attribute__ # define __attribute__(x) /* nothing */ #endif #define SDS_MAX_PREALLOC (1024*1024) #include #include #include #ifdef __cplusplus extern "C" { #endif typedef char *sds; /* This is a dummy structure to compute `len' and `free' offsets, not to be * used by applications. The original structure, `sdshdr' (defined in * `sds.c') uses a flexible array member for `buf', making it invalid for * C++. Assuming that both C and C++ code gets compiled by the same compiler * suite, the replacement below should give the same offsets so that `sdslen' * and `sdavail' can stay as inline definitions. */ struct sdshdr_h_ { size_t len; size_t free; char buf[1000]; }; #ifdef _MSC_VER # define INLINE __forceinline #else # define INLINE inline #endif static INLINE size_t sdslen(const sds s) { struct sdshdr_h_ *sh = (struct sdshdr_h_*) (s-(int)offsetof(struct sdshdr_h_, buf)); if (s == NULL) return 0; return sh->len; } static INLINE size_t sdsavail(const sds s) { struct sdshdr_h_ *sh = (struct sdshdr_h_*) (s-(int)offsetof(struct sdshdr_h_, buf)); if (s == NULL) return 0; return sh->free; } sds sdsnewlen(const void *init, size_t initlen); sds sdsnew(const char *init); sds sdsempty(void); size_t sdslen(const sds s); sds sdsdup(const sds s); void sdsfree(sds s); size_t sdsavail(const sds s); sds sdsgrowzero(sds s, size_t len); sds sdscatlen(sds s, const void *t, size_t len); sds sdscat(sds s, const char *t); sds sdscatsds(sds s, const sds t); sds sdscpylen(sds s, const char *t, size_t len); sds sdscpy(sds s, const char *t); sds sdscatvprintf(sds s, const char *fmt, va_list ap); sds sdscatprintf(sds s, const char *fmt, ...) __attribute__((format(printf, 2, 3))); void sdstrim(sds s, const char *cset); void sdsrange(sds s, int start, int end); void sdsupdatelen(sds s); void sdsclear(sds s); int sdscmp(const sds s1, const sds s2); sds *sdssplitlen(const char *s, int len, const char *sep, int seplen, int *count) __attribute__((warn_unused_result)); void sdsfreesplitres(sds *tokens, int count); void sdstolower(sds s); void sdstoupper(sds s); sds sdsfromlonglong(long long value); sds sdscatrepr(sds s, const char *p, size_t len); sds *sdssplitargs(const char *line, int *argc) __attribute__((warn_unused_result)); sds sdsmapchars(sds s, const char *from, const char *to, size_t setlen); sds sdsjoin(char **argv, int argc, char *sep, size_t seplen); sds sdsjoinsds(sds *argv, int argc, const char *sep, size_t seplen); /* Low level functions exposed to the user API */ sds sdsMakeRoomFor(sds s, size_t addlen) __attribute__((warn_unused_result)); void sdsIncrLen(sds s, int incr); sds sdsRemoveFreeSpace(sds s) __attribute__((warn_unused_result)); size_t sdsAllocSize(sds s); #ifdef __cplusplus } /* extern "C" */ #endif #endif ttfautohint-1.8.1/lib/llrb.h0000644000175000001440000002716012643432074015620 0ustar00wlusers00000000000000/* ========================================================================== * llrb.h - Iterative Left-leaning Red-Black Tree. * -------------------------------------------------------------------------- * Copyright (c) 2011, 2013 William Ahern * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to permit * persons to whom the Software is furnished to do so, subject to the * following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * USE OR OTHER DEALINGS IN THE SOFTWARE. * -------------------------------------------------------------------------- * CREDITS: * o Algorithm courtesy of Robert Sedgewick, "Left-leaning Red-Black * Trees" (September 2008); and Robert Sedgewick and Kevin Wayne, * Algorithms (4th ed. 2011). * * Sedgewick touts the simplicity of the recursive implementation, * but at least for the 2-3 tree variant the iterative approach is * almost line-for-line identical. The magic of C pointers helps; * it'd be uglier with Java. * * A couple of missing NULL checks were added to Sedgewick's deletion * example, and insert was optimized to short-circuit rotations when * walking up the tree. * * o Code implemented in the fashion of Niels Provos' excellent *BSD * sys/tree.h pre-processor library. * * Regarding relative performance, I've refrained from sharing my own * benchmarks. Differences in run-time speed were too correlated to * compiler options and other external factors. * * Provos' delete implementation doesn't need to start at the root of * the tree. However, RB_REMOVE must be passed the actual node to be * removed. LLRB_REMOVE merely requires a key, much like * RB_FIND/LLRB_FIND. * ========================================================================== */ #ifndef LLRB_H #define LLRB_H #define LLRB_VENDOR "william@25thandClement.com" #define LLRB_VERSION 0x20130925 #ifndef LLRB_STATIC #ifdef __GNUC__ #define LLRB_STATIC __attribute__((__unused__)) static #else #define LLRB_STATIC static #endif #endif #define LLRB_HEAD(name, type) \ struct name { struct type *rbh_root; } #define LLRB_INITIALIZER(root) { 0 } #define LLRB_INIT(root) do { (root)->rbh_root = 0; } while (0) #define LLRB_BLACK 0 #define LLRB_RED 1 #define LLRB_ENTRY(type) \ struct { struct type *rbe_left, *rbe_right, *rbe_parent; _Bool rbe_color; } #define LLRB_LEFT(elm, field) (elm)->field.rbe_left #define LLRB_RIGHT(elm, field) (elm)->field.rbe_right #define LLRB_PARENT(elm, field) (elm)->field.rbe_parent #define LLRB_EDGE(head, elm, field) (((elm) == LLRB_ROOT(head))? &LLRB_ROOT(head) : ((elm) == LLRB_LEFT(LLRB_PARENT((elm), field), field))? &LLRB_LEFT(LLRB_PARENT((elm), field), field) : &LLRB_RIGHT(LLRB_PARENT((elm), field), field)) #define LLRB_COLOR(elm, field) (elm)->field.rbe_color #define LLRB_ROOT(head) (head)->rbh_root #define LLRB_EMPTY(head) ((head)->rbh_root == 0) #define LLRB_ISRED(elm, field) ((elm) && LLRB_COLOR((elm), field) == LLRB_RED) #define LLRB_PROTOTYPE(name, type, field, cmp) \ LLRB_PROTOTYPE_INTERNAL(name, type, field, cmp,) #define LLRB_PROTOTYPE_STATIC(name, type, field, cmp) \ LLRB_PROTOTYPE_INTERNAL(name, type, field, cmp, LLRB_STATIC) #define LLRB_PROTOTYPE_INTERNAL(name, type, field, cmp, attr) \ attr struct type *name##_LLRB_INSERT(struct name *, struct type *); \ attr struct type *name##_LLRB_DELETE(struct name *, struct type *); \ attr struct type *name##_LLRB_FIND(struct name *, struct type *); \ attr struct type *name##_LLRB_MIN(struct type *); \ attr struct type *name##_LLRB_MAX(struct type *); \ attr struct type *name##_LLRB_NEXT(struct type *); #define LLRB_GENERATE(name, type, field, cmp) \ LLRB_GENERATE_INTERNAL(name, type, field, cmp,) #define LLRB_GENERATE_STATIC(name, type, field, cmp) \ LLRB_GENERATE_INTERNAL(name, type, field, cmp, LLRB_STATIC) #define LLRB_GENERATE_INTERNAL(name, type, field, cmp, attr) \ static inline void name##_LLRB_ROTL(struct type **pivot) { \ struct type *a = *pivot; \ struct type *b = LLRB_RIGHT(a, field); \ if ((LLRB_RIGHT(a, field) = LLRB_LEFT(b, field))) \ LLRB_PARENT(LLRB_RIGHT(a, field), field) = a; \ LLRB_LEFT(b, field) = a; \ LLRB_COLOR(b, field) = LLRB_COLOR(a, field); \ LLRB_COLOR(a, field) = LLRB_RED; \ LLRB_PARENT(b, field) = LLRB_PARENT(a, field); \ LLRB_PARENT(a, field) = b; \ *pivot = b; \ } \ static inline void name##_LLRB_ROTR(struct type **pivot) { \ struct type *b = *pivot; \ struct type *a = LLRB_LEFT(b, field); \ if ((LLRB_LEFT(b, field) = LLRB_RIGHT(a, field))) \ LLRB_PARENT(LLRB_LEFT(b, field), field) = b; \ LLRB_RIGHT(a, field) = b; \ LLRB_COLOR(a, field) = LLRB_COLOR(b, field); \ LLRB_COLOR(b, field) = LLRB_RED; \ LLRB_PARENT(a, field) = LLRB_PARENT(b, field); \ LLRB_PARENT(b, field) = a; \ *pivot = a; \ } \ static inline void name##_LLRB_FLIP(struct type *root) { \ LLRB_COLOR(root, field) = !LLRB_COLOR(root, field); \ LLRB_COLOR(LLRB_LEFT(root, field), field) = !LLRB_COLOR(LLRB_LEFT(root, field), field); \ LLRB_COLOR(LLRB_RIGHT(root, field), field) = !LLRB_COLOR(LLRB_RIGHT(root, field), field); \ } \ static inline void name##_LLRB_FIXUP(struct type **root) { \ if (LLRB_ISRED(LLRB_RIGHT(*root, field), field) && !LLRB_ISRED(LLRB_LEFT(*root, field), field)) \ name##_LLRB_ROTL(root); \ if (LLRB_ISRED(LLRB_LEFT(*root, field), field) && LLRB_ISRED(LLRB_LEFT(LLRB_LEFT(*root, field), field), field)) \ name##_LLRB_ROTR(root); \ if (LLRB_ISRED(LLRB_LEFT(*root, field), field) && LLRB_ISRED(LLRB_RIGHT(*root, field), field)) \ name##_LLRB_FLIP(*root); \ } \ attr struct type *name##_LLRB_INSERT(struct name *head, struct type *elm) { \ struct type **root = &LLRB_ROOT(head); \ struct type *parent = 0; \ while (*root) { \ int comp = (cmp)((elm), (*root)); \ parent = *root; \ if (comp < 0) \ root = &LLRB_LEFT(*root, field); \ else if (comp > 0) \ root = &LLRB_RIGHT(*root, field); \ else \ return *root; \ } \ LLRB_LEFT((elm), field) = 0; \ LLRB_RIGHT((elm), field) = 0; \ LLRB_COLOR((elm), field) = LLRB_RED; \ LLRB_PARENT((elm), field) = parent; \ *root = (elm); \ while (parent && (LLRB_ISRED(LLRB_LEFT(parent, field), field) || LLRB_ISRED(LLRB_RIGHT(parent, field), field))) { \ root = LLRB_EDGE(head, parent, field); \ parent = LLRB_PARENT(parent, field); \ name##_LLRB_FIXUP(root); \ } \ LLRB_COLOR(LLRB_ROOT(head), field) = LLRB_BLACK; \ return 0; \ } \ static inline void name##_LLRB_MOVL(struct type **pivot) { \ name##_LLRB_FLIP(*pivot); \ if (LLRB_ISRED(LLRB_LEFT(LLRB_RIGHT(*pivot, field), field), field)) { \ name##_LLRB_ROTR(&LLRB_RIGHT(*pivot, field)); \ name##_LLRB_ROTL(pivot); \ name##_LLRB_FLIP(*pivot); \ } \ } \ static inline void name##_LLRB_MOVR(struct type **pivot) { \ name##_LLRB_FLIP(*pivot); \ if (LLRB_ISRED(LLRB_LEFT(LLRB_LEFT(*pivot, field), field), field)) { \ name##_LLRB_ROTR(pivot); \ name##_LLRB_FLIP(*pivot); \ } \ } \ static inline struct type *name##_DELETEMIN(struct name *head, struct type **root) { \ struct type **pivot = root, *deleted, *parent; \ while (LLRB_LEFT(*pivot, field)) { \ if (!LLRB_ISRED(LLRB_LEFT(*pivot, field), field) && !LLRB_ISRED(LLRB_LEFT(LLRB_LEFT(*pivot, field), field), field)) \ name##_LLRB_MOVL(pivot); \ pivot = &LLRB_LEFT(*pivot, field); \ } \ deleted = *pivot; \ parent = LLRB_PARENT(*pivot, field); \ *pivot = 0; \ while (root != pivot) { \ pivot = LLRB_EDGE(head, parent, field); \ parent = LLRB_PARENT(parent, field); \ name##_LLRB_FIXUP(pivot); \ } \ return deleted; \ } \ attr struct type *name##_LLRB_DELETE(struct name *head, struct type *elm) { \ struct type **root = &LLRB_ROOT(head), *parent = 0, *deleted = 0; \ int comp; \ while (*root) { \ parent = LLRB_PARENT(*root, field); \ comp = (cmp)(elm, *root); \ if (comp < 0) { \ if (LLRB_LEFT(*root, field) && !LLRB_ISRED(LLRB_LEFT(*root, field), field) && !LLRB_ISRED(LLRB_LEFT(LLRB_LEFT(*root, field), field), field)) \ name##_LLRB_MOVL(root); \ root = &LLRB_LEFT(*root, field); \ } else { \ if (LLRB_ISRED(LLRB_LEFT(*root, field), field)) { \ name##_LLRB_ROTR(root); \ comp = (cmp)(elm, *root); \ } \ if (!comp && !LLRB_RIGHT(*root, field)) { \ deleted = *root; \ *root = 0; \ break; \ } \ if (LLRB_RIGHT(*root, field) && !LLRB_ISRED(LLRB_RIGHT(*root, field), field) && !LLRB_ISRED(LLRB_LEFT(LLRB_RIGHT(*root, field), field), field)) { \ name##_LLRB_MOVR(root); \ comp = (cmp)(elm, *root); \ } \ if (!comp) { \ struct type *orphan = name##_DELETEMIN(head, &LLRB_RIGHT(*root, field)); \ LLRB_COLOR(orphan, field) = LLRB_COLOR(*root, field); \ LLRB_PARENT(orphan, field) = LLRB_PARENT(*root, field); \ if ((LLRB_RIGHT(orphan, field) = LLRB_RIGHT(*root, field))) \ LLRB_PARENT(LLRB_RIGHT(orphan, field), field) = orphan; \ if ((LLRB_LEFT(orphan, field) = LLRB_LEFT(*root, field))) \ LLRB_PARENT(LLRB_LEFT(orphan, field), field) = orphan; \ deleted = *root; \ *root = orphan; \ parent = *root; \ break; \ } else \ root = &LLRB_RIGHT(*root, field); \ } \ } \ while (parent) { \ root = LLRB_EDGE(head, parent, field); \ parent = LLRB_PARENT(parent, field); \ name##_LLRB_FIXUP(root); \ } \ if (LLRB_ROOT(head)) \ LLRB_COLOR(LLRB_ROOT(head), field) = LLRB_BLACK; \ return deleted; \ } \ attr struct type *name##_LLRB_FIND(struct name *head, struct type *key) { \ struct type *elm = LLRB_ROOT(head); \ while (elm) { \ int comp = (cmp)(key, elm); \ if (comp < 0) \ elm = LLRB_LEFT(elm, field); \ else if (comp > 0) \ elm = LLRB_RIGHT(elm, field); \ else \ return elm; \ } \ return 0; \ } \ attr struct type *name##_LLRB_MIN(struct type *elm) { \ while (elm && LLRB_LEFT(elm, field)) \ elm = LLRB_LEFT(elm, field); \ return elm; \ } \ attr struct type *name##_LLRB_MAX(struct type *elm) { \ while (elm && LLRB_RIGHT(elm, field)) \ elm = LLRB_RIGHT(elm, field); \ return elm; \ } \ attr struct type *name##_LLRB_NEXT(struct type *elm) { \ if (LLRB_RIGHT(elm, field)) { \ return name##_LLRB_MIN(LLRB_RIGHT(elm, field)); \ } else if (LLRB_PARENT(elm, field)) { \ if (elm == LLRB_LEFT(LLRB_PARENT(elm, field), field)) \ return LLRB_PARENT(elm, field); \ while (LLRB_PARENT(elm, field) && elm == LLRB_RIGHT(LLRB_PARENT(elm, field), field)) \ elm = LLRB_PARENT(elm, field); \ return LLRB_PARENT(elm, field); \ } else return 0; \ } #define LLRB_INSERT(name, head, elm) name##_LLRB_INSERT((head), (elm)) #define LLRB_DELETE(name, head, elm) name##_LLRB_DELETE((head), (elm)) #define LLRB_REMOVE(name, head, elm) name##_LLRB_DELETE((head), (elm)) #define LLRB_FIND(name, head, elm) name##_LLRB_FIND((head), (elm)) #define LLRB_MIN(name, head) name##_LLRB_MIN(LLRB_ROOT((head))) #define LLRB_MAX(name, head) name##_LLRB_MAX(LLRB_ROOT((head))) #define LLRB_NEXT(name, head, elm) name##_LLRB_NEXT((elm)) #define LLRB_FOREACH(elm, name, head) \ for ((elm) = LLRB_MIN(name, head); (elm); (elm) = name##_LLRB_NEXT((elm))) #endif /* LLRB_H */ ttfautohint-1.8.1/lib/ta.h0000644000175000001440000002621513217560376015276 0ustar00wlusers00000000000000/* ta.h */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #ifndef TA_H_ #define TA_H_ #include #include #include FT_FREETYPE_H #include FT_TRUETYPE_TABLES_H #include FT_TRUETYPE_TAGS_H #include #include #include #include "taloader.h" #include "taglobal.h" #include "tadummy.h" #include "talatin.h" #define TTFAUTOHINT_GLYPH ".ttfautohint" #define TTFAUTOHINT_GLYPH_FIRST_BYTE "\x0C" /* first byte is string length */ #define TTFAUTOHINT_GLYPH_LEN 13 /* these macros convert 16bit and 32bit numbers into single bytes */ /* using the byte order needed within SFNT files */ #define HIGH(x) (FT_Byte)(((x) & 0xFF00) >> 8) #define LOW(x) ((x) & 0x00FF) #define BYTE1(x) (FT_Byte)(((FT_ULong)(x) & 0xFF000000UL) >> 24); #define BYTE2(x) (FT_Byte)(((FT_ULong)(x) & 0x00FF0000UL) >> 16); #define BYTE3(x) (FT_Byte)(((FT_ULong)(x) & 0x0000FF00UL) >> 8); #define BYTE4(x) ((FT_ULong)(x) & 0x000000FFUL); /* utility macros to get data from a pointer (with auto-increment) */ #define NEXT_USHORT(buffer) \ ((FT_UShort)(buffer += 2, (FT_UShort)buffer[-2] << 8 \ | (FT_UShort)buffer[-1])) #define NEXT_ULONG(buffer) \ ((FT_ULong)(buffer += 4, (FT_ULong)buffer[-4] << 24 \ | (FT_ULong)buffer[-3] << 16 \ | (FT_ULong)buffer[-2] << 8 \ | (FT_ULong)buffer[-1])) /* an SFNT tag for our information table */ #define TTAG_TTFA FT_MAKE_TAG('T', 'T', 'F', 'A') /* the length of a dummy `DSIG' table */ #define DSIG_LEN 8 /* the length of our `gasp' table */ #define GASP_LEN 8 /* an empty slot in the table info array */ #define MISSING ~0U /* the offset to the loca table format in the `head' table */ #define LOCA_FORMAT_OFFSET 51 /* various offsets within the `maxp' table */ #define MAXP_NUM_GLYPHS 4 #define MAXP_MAX_COMPOSITE_POINTS 10 #define MAXP_MAX_COMPOSITE_CONTOURS 12 #define MAXP_MAX_ZONES_OFFSET 14 #define MAXP_MAX_TWILIGHT_POINTS_OFFSET 16 #define MAXP_MAX_STORAGE_OFFSET 18 #define MAXP_MAX_FUNCTION_DEFS_OFFSET 20 #define MAXP_MAX_INSTRUCTION_DEFS_OFFSET 22 #define MAXP_MAX_STACK_ELEMENTS_OFFSET 24 #define MAXP_MAX_INSTRUCTIONS_OFFSET 26 #define MAXP_MAX_COMPONENTS_OFFSET 28 #define MAXP_LEN 32 /* the offset of the type flags field in the `OS/2' table */ #define OS2_FSTYPE_OFFSET 8 /* flags in composite glyph records */ #define ARGS_ARE_WORDS 0x0001 #define ARGS_ARE_XY_VALUES 0x0002 #define WE_HAVE_A_SCALE 0x0008 #define MORE_COMPONENTS 0x0020 #define WE_HAVE_AN_XY_SCALE 0x0040 #define WE_HAVE_A_2X2 0x0080 #define WE_HAVE_INSTR 0x0100 /* flags in simple glyph records */ #define ON_CURVE 0x01 #define X_SHORT_VECTOR 0x02 #define Y_SHORT_VECTOR 0x04 #define REPEAT 0x08 #define SAME_X 0x10 #define SAME_Y 0x20 /* a single glyph */ typedef struct GLYPH_ { FT_ULong len1; /* number of bytes before instruction related data */ FT_ULong len2; /* number of bytes after instruction related data; */ /* if zero, this indicates a composite glyph */ FT_Byte* buf; /* extracted glyph data (without instruction related data) */ FT_ULong flags_offset; /* offset to last flag in a composite glyph */ FT_Byte ins_extra_len; /* number of extra instructions */ FT_Byte* ins_extra_buf; /* extra instructions data */ FT_ULong ins_len; /* number of new instructions */ FT_Byte* ins_buf; /* new instruction data */ FT_Short num_contours; /* >= 0 for simple glyphs */ FT_UShort num_points; /* number of points in a simple glyph */ FT_UShort num_components; FT_UShort* components; /* the subglyph indices of a composite glyph */ FT_UShort num_pointsums; FT_UShort* pointsums; /* the pointsums of all composite elements */ /* (after walking recursively over all subglyphs) */ FT_UShort num_composite_contours; /* after recursion */ } GLYPH; /* a representation of the data in the `glyf' table */ typedef struct glyf_Data_ { FT_UShort num_glyphs; GLYPH* glyphs; /* this field gives the `master' globals for a `glyf' table; */ /* see function `TA_sfnt_handle_coverage' */ TA_FaceGlobals master_globals; /* for coverage bookkeeping */ FT_Bool adjusted; /* if a `glyf' table gets used in more than one subfont, */ /* so do `cvt', `fpgm', and `prep' tables: */ /* these four tables are always handled in parallel */ FT_ULong cvt_idx; FT_ULong fpgm_idx; FT_ULong prep_idx; /* styles present in a font get a running number; */ /* unavailable styles get value 0xFFFF */ FT_UInt style_ids[TA_STYLE_MAX]; FT_UInt num_used_styles; /* we have separate CVT data for each style */ FT_UInt cvt_offsets[TA_STYLE_MAX]; FT_UInt cvt_horz_width_sizes[TA_STYLE_MAX]; FT_UInt cvt_vert_width_sizes[TA_STYLE_MAX]; FT_UInt cvt_blue_zone_sizes[TA_STYLE_MAX]; FT_UInt cvt_blue_adjustment_offsets[TA_STYLE_MAX]; } glyf_Data; /* an SFNT table */ typedef struct SFNT_Table_ { FT_ULong tag; FT_ULong len; FT_Byte* buf; /* the table data */ FT_ULong offset; /* from beginning of file */ FT_ULong checksum; void* data; /* used e.g. for `glyf' table data */ FT_Bool processed; } SFNT_Table; /* we use indices into the SFNT table array to */ /* represent table info records of the TTF header */ typedef FT_ULong SFNT_Table_Info; /* this structure is used to model a TTF or a subfont within a TTC */ typedef struct SFNT_ { FT_Face face; SFNT_Table_Info* table_infos; FT_ULong num_table_infos; /* various SFNT table indices */ FT_ULong glyf_idx; FT_ULong loca_idx; FT_ULong head_idx; FT_ULong hmtx_idx; FT_ULong maxp_idx; FT_ULong name_idx; FT_ULong post_idx; FT_ULong OS2_idx; FT_ULong GPOS_idx; /* values necessary to update the `maxp' table */ FT_UShort max_composite_points; FT_UShort max_composite_contours; FT_UShort max_storage; FT_UShort max_stack_elements; FT_UShort max_twilight_points; FT_UShort max_instructions; FT_UShort max_components; } SFNT; typedef struct Control_ Control; /* our font object; the `FONT' typedef is in `taloader.h' */ struct FONT_ { FT_Library lib; FT_Byte* in_buf; size_t in_len; FT_Byte* out_buf; size_t out_len; char* control_buf; size_t control_len; FT_Byte* reference_buf; size_t reference_len; FT_Face reference; FT_Long reference_index; const char* reference_name; SFNT* sfnts; FT_Long num_sfnts; SFNT_Table* tables; FT_ULong num_tables; FT_Bool have_DSIG; /* we have a single `gasp' table for all subfonts */ FT_ULong gasp_idx; /* the control instructions */ Control* control; /* two generic pointers into the control instructions tree */ void* control_data_head; void* control_data_cur; /* two fields for handling one-point segment directions */ /* of the current glyph */ void* control_segment_dirs_head; void* control_segment_dirs_cur; TA_LoaderRec loader[1]; /* the interface to the autohinter */ /* configuration options */ TA_Progress_Func progress; void* progress_data; TA_Info_Func info; TA_Info_Post_Func info_post; void* info_data; TA_Alloc_Func allocate; TA_Free_Func deallocate; FT_UInt hinting_range_min; FT_UInt hinting_range_max; FT_UInt hinting_limit; FT_UInt increase_x_height; number_range* x_height_snapping_exceptions; FT_UInt fallback_stem_width; FT_Int gray_stem_width_mode; FT_Int gdi_cleartype_stem_width_mode; FT_Int dw_cleartype_stem_width_mode; FT_Bool windows_compatibility; FT_Bool adjust_subglyphs; FT_Bool hint_composites; FT_Bool ignore_restrictions; TA_Style fallback_style; FT_Bool fallback_scaling; TA_Script default_script; FT_Bool symbol; FT_Bool dehint; FT_Bool debug; FT_Bool TTFA_info; unsigned long long epoch; }; #include "tatables.h" #include "tabytecode.h" #include "tacontrol.h" /* in file `tascript.c' */ extern const char* script_names[]; extern size_t script_names_size; const char* TA_get_error_message(FT_Error error); char* TA_font_dump_parameters(FONT* font, FT_Bool format); void TA_get_current_time(FONT* font, FT_ULong* high, FT_ULong* low); FT_Byte* TA_build_push(FT_Byte* bufp, FT_UInt* args, FT_UInt num_args, FT_Bool need_words, FT_Bool optimize); FT_Error TA_font_init(FONT* font); void TA_font_unload(FONT* font, const char* in_buf, char** out_bufp, const char* control_buf, const char* reference_buf); FT_Error TA_font_file_read(FILE* file, FT_Byte** buffer, size_t* length); FT_Error TA_font_file_write(FONT* font, FILE* out_file); FT_Error TA_control_file_read(FONT* font, FILE* control_file); FT_Error TA_sfnt_build_glyph_instructions(SFNT* sfnt, FONT* font, FT_Long idx); FT_Error TA_sfnt_split_into_SFNT_tables(SFNT* sfnt, FONT* font); FT_Error TA_sfnt_build_cvt_table(SFNT* sfnt, FONT* font); FT_Error TA_table_build_TTFA(FT_Byte** TTFA, FT_ULong* TTFA_len, FONT* font); FT_Error TA_table_build_DSIG(FT_Byte** DSIG); FT_Error TA_sfnt_build_fpgm_table(SFNT* sfnt, FONT* font); FT_Error TA_sfnt_build_gasp_table(SFNT* sfnt, FONT* font); FT_Error TA_sfnt_split_glyf_table(SFNT* sfnt, FONT* font); FT_Error TA_sfnt_build_glyf_table(SFNT* sfnt, FONT* font); FT_Error TA_sfnt_create_glyf_data(SFNT* sfnt, FONT* font); FT_Error TA_sfnt_handle_coverage(SFNT* sfnt, FONT* font); void TA_sfnt_adjust_coverage(SFNT* sfnt, FONT* font); #if 0 void TA_sfnt_copy_master_coverage(SFNT* sfnt, FONT* font); #endif FT_Error TA_sfnt_update_GPOS_table(SFNT* sfnt, FONT* font); FT_Error TA_sfnt_update_hmtx_table(SFNT* sfnt, FONT* font); FT_Error TA_sfnt_build_loca_table(SFNT* sfnt, FONT* font); FT_Error TA_sfnt_update_maxp_table(SFNT* sfnt, FONT* font); FT_Error TA_sfnt_update_post_table(SFNT* sfnt, FONT* font); FT_Error TA_sfnt_update_name_table(SFNT* sfnt, FONT* font); FT_Error TA_sfnt_build_prep_table(SFNT* sfnt, FONT* font); FT_Error TA_sfnt_build_TTF_header(SFNT* sfnt, FONT* font, FT_Byte** header_buf, FT_ULong* header_len, FT_Int do_complete); FT_Error TA_font_build_TTF(FONT* font); FT_Error TA_font_build_TTC(FONT* font); #endif /* TA_H_ */ /* end of ta.h */ ttfautohint-1.8.1/lib/tablue.c0000644000175000001440000017560413222451061016132 0ustar00wlusers00000000000000/* This file has been generated by the Perl script `afblue.pl', */ /* using data from file `./tablue.dat'. */ /* tablue.c */ /* * Copyright (C) 2013-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afblue.c' (2013-Aug-28) from FreeType */ #include "tatypes.h" const char ta_blue_strings[] = { '\xF0', '\x9E', '\xA4', '\x8C', ' ', '\xF0', '\x9E', '\xA4', '\x85', ' ', '\xF0', '\x9E', '\xA4', '\x88', ' ', '\xF0', '\x9E', '\xA4', '\x8F', ' ', '\xF0', '\x9E', '\xA4', '\x94', ' ', '\xF0', '\x9E', '\xA4', '\x9A', /* 𞤌 𞤅 𞤈 𞤠𞤔 𞤚 */ '\0', '\xF0', '\x9E', '\xA4', '\x82', ' ', '\xF0', '\x9E', '\xA4', '\x96', /* 𞤂 𞤖 */ '\0', '\xF0', '\x9E', '\xA4', '\xAC', ' ', '\xF0', '\x9E', '\xA4', '\xAE', ' ', '\xF0', '\x9E', '\xA4', '\xBB', ' ', '\xF0', '\x9E', '\xA4', '\xBC', ' ', '\xF0', '\x9E', '\xA4', '\xBE', /* 𞤬 𞤮 𞤻 𞤼 𞤾 */ '\0', '\xF0', '\x9E', '\xA4', '\xA4', ' ', '\xF0', '\x9E', '\xA4', '\xA8', ' ', '\xF0', '\x9E', '\xA4', '\xA9', ' ', '\xF0', '\x9E', '\xA4', '\xAD', ' ', '\xF0', '\x9E', '\xA4', '\xB4', ' ', '\xF0', '\x9E', '\xA4', '\xB8', ' ', '\xF0', '\x9E', '\xA4', '\xBA', ' ', '\xF0', '\x9E', '\xA5', '\x80', /* 𞤤 𞤨 𞤩 𞤭 𞤴 𞤸 𞤺 𞥀 */ '\0', '\xD8', '\xA7', ' ', '\xD8', '\xA5', ' ', '\xD9', '\x84', ' ', '\xD9', '\x83', ' ', '\xD8', '\xB7', ' ', '\xD8', '\xB8', /* ا Ø¥ Ù„ Ùƒ Ø· ظ */ '\0', '\xD8', '\xAA', ' ', '\xD8', '\xAB', ' ', '\xD8', '\xB7', ' ', '\xD8', '\xB8', ' ', '\xD9', '\x83', /* ت Ø« Ø· ظ Ùƒ */ '\0', '\xD9', '\x80', /* Ù€ */ '\0', '\xD4', '\xB1', ' ', '\xD5', '\x84', ' ', '\xD5', '\x92', ' ', '\xD5', '\x8D', ' ', '\xD4', '\xB2', ' ', '\xD4', '\xB3', ' ', '\xD4', '\xB4', ' ', '\xD5', '\x95', /* Ô± Õ„ Õ’ Õ Ô² Ô³ Ô´ Õ• */ '\0', '\xD5', '\x92', ' ', '\xD5', '\x88', ' ', '\xD4', '\xB4', ' ', '\xD5', '\x83', ' ', '\xD5', '\x87', ' ', '\xD5', '\x8D', ' ', '\xD5', '\x8F', ' ', '\xD5', '\x95', /* Õ’ Õˆ Ô´ Õƒ Õ‡ Õ Õ Õ• */ '\0', '\xD5', '\xA5', ' ', '\xD5', '\xA7', ' ', '\xD5', '\xAB', ' ', '\xD5', '\xB4', ' ', '\xD5', '\xBE', ' ', '\xD6', '\x86', ' ', '\xD5', '\xB3', /* Õ¥ Õ§ Õ« Õ´ Õ¾ Ö† Õ³ */ '\0', '\xD5', '\xA1', ' ', '\xD5', '\xB5', ' ', '\xD6', '\x82', ' ', '\xD5', '\xBD', ' ', '\xD5', '\xA3', ' ', '\xD5', '\xB7', ' ', '\xD6', '\x80', ' ', '\xD6', '\x85', /* Õ¡ Õµ Ö‚ Õ½ Õ£ Õ· Ö€ Ö… */ '\0', '\xD5', '\xB0', ' ', '\xD5', '\xB8', ' ', '\xD5', '\xB3', ' ', '\xD5', '\xA1', ' ', '\xD5', '\xA5', ' ', '\xD5', '\xAE', ' ', '\xD5', '\xBD', ' ', '\xD6', '\x85', /* Õ° Õ¸ Õ³ Õ¡ Õ¥ Õ® Õ½ Ö… */ '\0', '\xD5', '\xA2', ' ', '\xD5', '\xA8', ' ', '\xD5', '\xAB', ' ', '\xD5', '\xAC', ' ', '\xD5', '\xB2', ' ', '\xD5', '\xBA', ' ', '\xD6', '\x83', ' ', '\xD6', '\x81', /* Õ¢ Õ¨ Õ« Õ¬ Õ² Õº Öƒ Ö */ '\0', '\xF0', '\x90', '\xAC', '\x80', ' ', '\xF0', '\x90', '\xAC', '\x81', ' ', '\xF0', '\x90', '\xAC', '\x90', ' ', '\xF0', '\x90', '\xAC', '\x9B', /* 𬀠ð¬ ð¬ 𬛠*/ '\0', '\xF0', '\x90', '\xAC', '\x80', ' ', '\xF0', '\x90', '\xAC', '\x81', /* 𬀠ð¬ */ '\0', '\xEA', '\x9A', '\xA7', ' ', '\xEA', '\x9A', '\xA8', ' ', '\xEA', '\x9B', '\x9B', ' ', '\xEA', '\x9B', '\x89', ' ', '\xEA', '\x9B', '\x81', ' ', '\xEA', '\x9B', '\x88', ' ', '\xEA', '\x9B', '\xAB', ' ', '\xEA', '\x9B', '\xAF', /* êš§ ꚨ ê›› ꛉ ê› ê›ˆ ꛫ ꛯ */ '\0', '\xEA', '\x9A', '\xAD', ' ', '\xEA', '\x9A', '\xB3', ' ', '\xEA', '\x9A', '\xB6', ' ', '\xEA', '\x9B', '\xAC', ' ', '\xEA', '\x9A', '\xA2', ' ', '\xEA', '\x9A', '\xBD', ' ', '\xEA', '\x9B', '\xAF', ' ', '\xEA', '\x9B', '\xB2', /* êš­ êš³ êš¶ ꛬ ꚢ êš½ ꛯ ꛲ */ '\0', '\xE0', '\xA6', '\x85', ' ', '\xE0', '\xA6', '\xA1', ' ', '\xE0', '\xA6', '\xA4', ' ', '\xE0', '\xA6', '\xA8', ' ', '\xE0', '\xA6', '\xAC', ' ', '\xE0', '\xA6', '\xAD', ' ', '\xE0', '\xA6', '\xB2', ' ', '\xE0', '\xA6', '\x95', /* অ ড ত ন ব ভ ল ক */ '\0', '\xE0', '\xA6', '\x87', ' ', '\xE0', '\xA6', '\x9F', ' ', '\xE0', '\xA6', '\xA0', ' ', '\xE0', '\xA6', '\xBF', ' ', '\xE0', '\xA7', '\x80', ' ', '\xE0', '\xA7', '\x88', ' ', '\xE0', '\xA7', '\x97', /* ই ট ঠ ি à§€ ৈ à§— */ '\0', '\xE0', '\xA6', '\x93', ' ', '\xE0', '\xA6', '\x8F', ' ', '\xE0', '\xA6', '\xA1', ' ', '\xE0', '\xA6', '\xA4', ' ', '\xE0', '\xA6', '\xA8', ' ', '\xE0', '\xA6', '\xAC', ' ', '\xE0', '\xA6', '\xB2', ' ', '\xE0', '\xA6', '\x95', /* ও ঠড ত ন ব ল ক */ '\0', '\xE1', '\x9D', '\x90', ' ', '\xE1', '\x9D', '\x88', /* á ሠ*/ '\0', '\xE1', '\x9D', '\x85', ' ', '\xE1', '\x9D', '\x8A', ' ', '\xE1', '\x9D', '\x8E', /* á… áŠ áŽ */ '\0', '\xE1', '\x9D', '\x82', ' ', '\xE1', '\x9D', '\x83', ' ', '\xE1', '\x9D', '\x89', ' ', '\xE1', '\x9D', '\x8C', /* Ⴀრበጠ*/ '\0', '\xE1', '\x9D', '\x80', ' ', '\xE1', '\x9D', '\x83', ' ', '\xE1', '\x9D', '\x86', ' ', '\xE1', '\x9D', '\x89', ' ', '\xE1', '\x9D', '\x8B', ' ', '\xE1', '\x9D', '\x8F', ' ', '\xE1', '\x9D', '\x91', /* ဠრᆠበዠá á‘ */ '\0', '\xE1', '\x97', '\x9C', ' ', '\xE1', '\x96', '\xB4', ' ', '\xE1', '\x90', '\x81', ' ', '\xE1', '\x92', '\xA3', ' ', '\xE1', '\x91', '\xAB', ' ', '\xE1', '\x91', '\x8E', ' ', '\xE1', '\x94', '\x91', ' ', '\xE1', '\x97', '\xB0', /* á—œ á–´ á á’£ á‘« ᑎ ᔑ á—° */ '\0', '\xE1', '\x97', '\xB6', ' ', '\xE1', '\x96', '\xB5', ' ', '\xE1', '\x92', '\xA7', ' ', '\xE1', '\x90', '\x83', ' ', '\xE1', '\x91', '\x8C', ' ', '\xE1', '\x92', '\x8D', ' ', '\xE1', '\x94', '\x91', ' ', '\xE1', '\x97', '\xA2', /* á—¶ á–µ á’§ რᑌ ᒠᔑ á—¢ */ '\0', '\xE1', '\x93', '\x93', ' ', '\xE1', '\x93', '\x95', ' ', '\xE1', '\x93', '\x80', ' ', '\xE1', '\x93', '\x82', ' ', '\xE1', '\x93', '\x84', ' ', '\xE1', '\x95', '\x84', ' ', '\xE1', '\x95', '\x86', ' ', '\xE1', '\x98', '\xA3', /* á““ á“• á“€ á“‚ á“„ á•„ ᕆ ᘣ */ '\0', '\xE1', '\x95', '\x83', ' ', '\xE1', '\x93', '\x82', ' ', '\xE1', '\x93', '\x80', ' ', '\xE1', '\x95', '\x82', ' ', '\xE1', '\x93', '\x97', ' ', '\xE1', '\x93', '\x9A', ' ', '\xE1', '\x95', '\x86', ' ', '\xE1', '\x98', '\xA3', /* ᕃ á“‚ á“€ á•‚ á“— ᓚ ᕆ ᘣ */ '\0', '\xE1', '\x90', '\xAA', ' ', '\xE1', '\x99', '\x86', ' ', '\xE1', '\xA3', '\x98', ' ', '\xE1', '\x90', '\xA2', ' ', '\xE1', '\x92', '\xBE', ' ', '\xE1', '\xA3', '\x97', ' ', '\xE1', '\x94', '\x86', /* ᪠ᙆ ᣘ ᢠᒾ ᣗ ᔆ */ '\0', '\xE1', '\x99', '\x86', ' ', '\xE1', '\x97', '\xAE', ' ', '\xE1', '\x92', '\xBB', ' ', '\xE1', '\x90', '\x9E', ' ', '\xE1', '\x94', '\x86', ' ', '\xE1', '\x92', '\xA1', ' ', '\xE1', '\x92', '\xA2', ' ', '\xE1', '\x93', '\x91', /* ᙆ á—® á’» ហᔆ á’¡ á’¢ á“‘ */ '\0', '\xF0', '\x90', '\x8A', '\xA7', ' ', '\xF0', '\x90', '\x8A', '\xAB', ' ', '\xF0', '\x90', '\x8A', '\xAC', ' ', '\xF0', '\x90', '\x8A', '\xAD', ' ', '\xF0', '\x90', '\x8A', '\xB1', ' ', '\xF0', '\x90', '\x8A', '\xBA', ' ', '\xF0', '\x90', '\x8A', '\xBC', ' ', '\xF0', '\x90', '\x8A', '\xBF', /* ðŠ§ ðŠ« ðŠ¬ ðŠ­ ðŠ± ðŠº ðŠ¼ ðŠ¿ */ '\0', '\xF0', '\x90', '\x8A', '\xA3', ' ', '\xF0', '\x90', '\x8A', '\xA7', ' ', '\xF0', '\x90', '\x8A', '\xB7', ' ', '\xF0', '\x90', '\x8B', '\x80', ' ', '\xF0', '\x90', '\x8A', '\xAB', ' ', '\xF0', '\x90', '\x8A', '\xB8', ' ', '\xF0', '\x90', '\x8B', '\x89', /* ðŠ£ ðŠ§ ðŠ· ð‹€ ðŠ« ðŠ¸ ð‹‰ */ '\0', '\xF0', '\x91', '\x84', '\x83', ' ', '\xF0', '\x91', '\x84', '\x85', ' ', '\xF0', '\x91', '\x84', '\x89', ' ', '\xF0', '\x91', '\x84', '\x99', ' ', '\xF0', '\x91', '\x84', '\x97', /* 𑄃 ð‘„… 𑄉 ð‘„™ ð‘„— */ '\0', '\xF0', '\x91', '\x84', '\x85', ' ', '\xF0', '\x91', '\x84', '\x9B', ' ', '\xF0', '\x91', '\x84', '\x9D', ' ', '\xF0', '\x91', '\x84', '\x97', ' ', '\xF0', '\x91', '\x84', '\x93', /* ð‘„… ð‘„› ð‘„ ð‘„— ð‘„“ */ '\0', '\xF0', '\x91', '\x84', '\x96', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', ' ', '\xF0', '\x91', '\x84', '\x98', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', ' ', '\xF0', '\x91', '\x84', '\x99', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', ' ', '\xF0', '\x91', '\x84', '\xA4', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', ' ', '\xF0', '\x91', '\x84', '\xA5', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', /* 𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢 */ '\0', '\xE1', '\x8F', '\x86', ' ', '\xE1', '\x8E', '\xBB', ' ', '\xE1', '\x8E', '\xAC', ' ', '\xE1', '\x8F', '\x83', ' ', '\xE1', '\x8E', '\xA4', ' ', '\xE1', '\x8F', '\xA3', ' ', '\xE1', '\x8E', '\xA6', ' ', '\xE1', '\x8F', '\x95', /* ᆠᎻ Ꭼ რᎤ ᣠᎦ á• */ '\0', '\xEA', '\xAE', '\x92', ' ', '\xEA', '\xAE', '\xA4', ' ', '\xEA', '\xAE', '\xB6', ' ', '\xEA', '\xAD', '\xB4', ' ', '\xEA', '\xAD', '\xBE', ' ', '\xEA', '\xAE', '\x97', ' ', '\xEA', '\xAE', '\x9D', ' ', '\xEA', '\xAE', '\xBF', /* ê®’ ꮤ ê®¶ ê­´ ê­¾ ê®— ê® ê®¿ */ '\0', '\xEA', '\xAE', '\x96', ' ', '\xEA', '\xAD', '\xBC', ' ', '\xEA', '\xAE', '\x93', ' ', '\xEA', '\xAE', '\xA0', ' ', '\xEA', '\xAE', '\xB3', ' ', '\xEA', '\xAD', '\xB6', ' ', '\xEA', '\xAE', '\xA5', ' ', '\xEA', '\xAE', '\xBB', /* ê®– ê­¼ ꮓ ê®  ꮳ ê­¶ ꮥ ê®» */ '\0', '\xE1', '\x8F', '\xB8', ' ', '\xEA', '\xAE', '\x90', ' ', '\xEA', '\xAD', '\xB9', ' ', '\xEA', '\xAD', '\xBB', /* á¸ ê® ê­¹ ê­» */ '\0', '\xE2', '\xB2', '\x8C', ' ', '\xE2', '\xB2', '\x8E', ' ', '\xE2', '\xB2', '\xA0', ' ', '\xE2', '\xB3', '\x9E', ' ', '\xE2', '\xB2', '\x9E', ' ', '\xE2', '\xB2', '\x90', ' ', '\xE2', '\xB2', '\xA4', ' ', '\xE2', '\xB3', '\x8A', /* Ⲍ Ⲏ â²  Ⳟ Ⲟ ⲠⲤ Ⳋ */ '\0', '\xE2', '\xB3', '\x90', ' ', '\xE2', '\xB3', '\x98', ' ', '\xE2', '\xB3', '\x9E', ' ', '\xE2', '\xB2', '\x8E', ' ', '\xE2', '\xB2', '\x9E', ' ', '\xE2', '\xB2', '\x90', ' ', '\xE2', '\xB3', '\x9C', ' ', '\xE2', '\xB2', '\xB0', /* ⳠⳘ Ⳟ Ⲏ Ⲟ ⲠⳜ â²° */ '\0', '\xE2', '\xB2', '\x8D', ' ', '\xE2', '\xB2', '\x8F', ' ', '\xE2', '\xB2', '\xA1', ' ', '\xE2', '\xB3', '\x9F', ' ', '\xE2', '\xB2', '\x9F', ' ', '\xE2', '\xB2', '\x91', ' ', '\xE2', '\xB2', '\xA5', ' ', '\xE2', '\xB3', '\x8B', /* ⲠⲠⲡ ⳟ ⲟ ⲑ â²¥ ⳋ */ '\0', '\xE2', '\xB3', '\x91', ' ', '\xE2', '\xB3', '\x99', ' ', '\xE2', '\xB3', '\x9F', ' ', '\xE2', '\xB2', '\x8F', ' ', '\xE2', '\xB2', '\x9F', ' ', '\xE2', '\xB2', '\x91', ' ', '\xE2', '\xB3', '\x9D', ' ', '\xE2', '\xB3', '\x92', /* ⳑ â³™ ⳟ Ⲡⲟ ⲑ â³ â³’ */ '\0', '\xF0', '\x90', '\xA0', '\x8D', ' ', '\xF0', '\x90', '\xA0', '\x99', ' ', '\xF0', '\x90', '\xA0', '\xB3', ' ', '\xF0', '\x90', '\xA0', '\xB1', ' ', '\xF0', '\x90', '\xA0', '\x85', ' ', '\xF0', '\x90', '\xA0', '\x93', ' ', '\xF0', '\x90', '\xA0', '\xA3', ' ', '\xF0', '\x90', '\xA0', '\xA6', /* ð  ð ™ ð ³ ð ± ð … ð “ ð £ ð ¦ */ '\0', '\xF0', '\x90', '\xA0', '\x83', ' ', '\xF0', '\x90', '\xA0', '\x8A', ' ', '\xF0', '\x90', '\xA0', '\x9B', ' ', '\xF0', '\x90', '\xA0', '\xA3', ' ', '\xF0', '\x90', '\xA0', '\xB3', ' ', '\xF0', '\x90', '\xA0', '\xB5', ' ', '\xF0', '\x90', '\xA0', '\x90', /* ð ƒ ð Š ð › ð £ ð ³ ð µ ð  */ '\0', '\xF0', '\x90', '\xA0', '\x88', ' ', '\xF0', '\x90', '\xA0', '\x8F', ' ', '\xF0', '\x90', '\xA0', '\x96', /* ð ˆ ð  ð – */ '\0', '\xD0', '\x91', ' ', '\xD0', '\x92', ' ', '\xD0', '\x95', ' ', '\xD0', '\x9F', ' ', '\xD0', '\x97', ' ', '\xD0', '\x9E', ' ', '\xD0', '\xA1', ' ', '\xD0', '\xAD', /* Б Ð’ Е П З О С Э */ '\0', '\xD0', '\x91', ' ', '\xD0', '\x92', ' ', '\xD0', '\x95', ' ', '\xD0', '\xA8', ' ', '\xD0', '\x97', ' ', '\xD0', '\x9E', ' ', '\xD0', '\xA1', ' ', '\xD0', '\xAD', /* Б Ð’ Е Ш З О С Э */ '\0', '\xD1', '\x85', ' ', '\xD0', '\xBF', ' ', '\xD0', '\xBD', ' ', '\xD1', '\x88', ' ', '\xD0', '\xB5', ' ', '\xD0', '\xB7', ' ', '\xD0', '\xBE', ' ', '\xD1', '\x81', /* Ñ… п н ш е з о Ñ */ '\0', '\xD1', '\x80', ' ', '\xD1', '\x83', ' ', '\xD1', '\x84', /* Ñ€ у Ñ„ */ '\0', '\xF0', '\x90', '\x90', '\x82', ' ', '\xF0', '\x90', '\x90', '\x84', ' ', '\xF0', '\x90', '\x90', '\x8B', ' ', '\xF0', '\x90', '\x90', '\x97', ' ', '\xF0', '\x90', '\x90', '\x91', /* ð‚ ð„ ð‹ ð— ð‘ */ '\0', '\xF0', '\x90', '\x90', '\x80', ' ', '\xF0', '\x90', '\x90', '\x82', ' ', '\xF0', '\x90', '\x90', '\x84', ' ', '\xF0', '\x90', '\x90', '\x97', ' ', '\xF0', '\x90', '\x90', '\x9B', /* ð€ ð‚ ð„ ð— ð› */ '\0', '\xF0', '\x90', '\x90', '\xAA', ' ', '\xF0', '\x90', '\x90', '\xAC', ' ', '\xF0', '\x90', '\x90', '\xB3', ' ', '\xF0', '\x90', '\x90', '\xBF', ' ', '\xF0', '\x90', '\x90', '\xB9', /* ðª ð¬ ð³ ð¿ ð¹ */ '\0', '\xF0', '\x90', '\x90', '\xA8', ' ', '\xF0', '\x90', '\x90', '\xAA', ' ', '\xF0', '\x90', '\x90', '\xAC', ' ', '\xF0', '\x90', '\x90', '\xBF', ' ', '\xF0', '\x90', '\x91', '\x83', /* ð¨ ðª ð¬ ð¿ 𑃠*/ '\0', '\xE0', '\xA4', '\x95', ' ', '\xE0', '\xA4', '\xA8', ' ', '\xE0', '\xA4', '\xAE', ' ', '\xE0', '\xA4', '\x89', ' ', '\xE0', '\xA4', '\x9B', ' ', '\xE0', '\xA4', '\x9F', ' ', '\xE0', '\xA4', '\xA0', ' ', '\xE0', '\xA4', '\xA1', /* क न म उ छ ट ठ ड */ '\0', '\xE0', '\xA4', '\x88', ' ', '\xE0', '\xA4', '\x90', ' ', '\xE0', '\xA4', '\x93', ' ', '\xE0', '\xA4', '\x94', ' ', '\xE0', '\xA4', '\xBF', ' ', '\xE0', '\xA5', '\x80', ' ', '\xE0', '\xA5', '\x8B', ' ', '\xE0', '\xA5', '\x8C', /* ई ठओ औ ि ी ो ौ */ '\0', '\xE0', '\xA4', '\x95', ' ', '\xE0', '\xA4', '\xAE', ' ', '\xE0', '\xA4', '\x85', ' ', '\xE0', '\xA4', '\x86', ' ', '\xE0', '\xA4', '\xA5', ' ', '\xE0', '\xA4', '\xA7', ' ', '\xE0', '\xA4', '\xAD', ' ', '\xE0', '\xA4', '\xB6', /* क म अ आ थ ध भ श */ '\0', '\xE0', '\xA5', '\x81', ' ', '\xE0', '\xA5', '\x83', /* ॠृ */ '\0', '\xE1', '\x88', '\x80', ' ', '\xE1', '\x88', '\x83', ' ', '\xE1', '\x8B', '\x98', ' ', '\xE1', '\x8D', '\x90', ' ', '\xE1', '\x88', '\x9B', ' ', '\xE1', '\x89', '\xA0', ' ', '\xE1', '\x8B', '\x8B', ' ', '\xE1', '\x8B', '\x90', /* ሀ ሃ ዘ á ማ በ á‹‹ á‹ */ '\0', '\xE1', '\x88', '\x88', ' ', '\xE1', '\x88', '\x90', ' ', '\xE1', '\x89', '\xA0', ' ', '\xE1', '\x8B', '\x98', ' ', '\xE1', '\x88', '\x80', ' ', '\xE1', '\x88', '\xAA', ' ', '\xE1', '\x8B', '\x90', ' ', '\xE1', '\x8C', '\xA8', /* ለ ሠበ ዘ ሀ ሪ ዠጨ */ '\0', '\xE1', '\x83', '\x92', ' ', '\xE1', '\x83', '\x93', ' ', '\xE1', '\x83', '\x94', ' ', '\xE1', '\x83', '\x95', ' ', '\xE1', '\x83', '\x97', ' ', '\xE1', '\x83', '\x98', ' ', '\xE1', '\x83', '\x9D', ' ', '\xE1', '\x83', '\xA6', /* გ დ ე ვ თ ი რღ */ '\0', '\xE1', '\x83', '\x90', ' ', '\xE1', '\x83', '\x96', ' ', '\xE1', '\x83', '\x9B', ' ', '\xE1', '\x83', '\xA1', ' ', '\xE1', '\x83', '\xA8', ' ', '\xE1', '\x83', '\xAB', ' ', '\xE1', '\x83', '\xAE', ' ', '\xE1', '\x83', '\x9E', /* რზ მ ს შ ძ ხ პ */ '\0', '\xE1', '\x83', '\xA1', ' ', '\xE1', '\x83', '\xAE', ' ', '\xE1', '\x83', '\xA5', ' ', '\xE1', '\x83', '\x96', ' ', '\xE1', '\x83', '\x9B', ' ', '\xE1', '\x83', '\xA8', ' ', '\xE1', '\x83', '\xA9', ' ', '\xE1', '\x83', '\xAC', /* ს ხ ქ ზ მ შ ჩ წ */ '\0', '\xE1', '\x83', '\x94', ' ', '\xE1', '\x83', '\x95', ' ', '\xE1', '\x83', '\x9F', ' ', '\xE1', '\x83', '\xA2', ' ', '\xE1', '\x83', '\xA3', ' ', '\xE1', '\x83', '\xA4', ' ', '\xE1', '\x83', '\xA5', ' ', '\xE1', '\x83', '\xA7', /* ე ვ ჟ ტ უ ფ ქ ყ */ '\0', '\xE1', '\x82', '\xB1', ' ', '\xE1', '\x82', '\xA7', ' ', '\xE1', '\x82', '\xB9', ' ', '\xE1', '\x82', '\xBC', ' ', '\xE1', '\x82', '\xA4', ' ', '\xE1', '\x82', '\xA5', ' ', '\xE1', '\x82', '\xB3', ' ', '\xE1', '\x82', '\xBA', /* Ⴑ á‚§ Ⴙ Ⴜ Ⴄ á‚¥ Ⴓ Ⴚ */ '\0', '\xE1', '\x82', '\xA4', ' ', '\xE1', '\x82', '\xA5', ' ', '\xE1', '\x82', '\xA7', ' ', '\xE1', '\x82', '\xA8', ' ', '\xE1', '\x82', '\xA6', ' ', '\xE1', '\x82', '\xB1', ' ', '\xE1', '\x82', '\xAA', ' ', '\xE1', '\x82', '\xAB', /* Ⴄ á‚¥ á‚§ Ⴈ Ⴆ Ⴑ Ⴊ á‚« */ '\0', '\xE2', '\xB4', '\x81', ' ', '\xE2', '\xB4', '\x97', ' ', '\xE2', '\xB4', '\x82', ' ', '\xE2', '\xB4', '\x84', ' ', '\xE2', '\xB4', '\x85', ' ', '\xE2', '\xB4', '\x87', ' ', '\xE2', '\xB4', '\x94', ' ', '\xE2', '\xB4', '\x96', /* â´ â´— â´‚ â´„ â´… â´‡ â´” â´– */ '\0', '\xE2', '\xB4', '\x88', ' ', '\xE2', '\xB4', '\x8C', ' ', '\xE2', '\xB4', '\x96', ' ', '\xE2', '\xB4', '\x8E', ' ', '\xE2', '\xB4', '\x83', ' ', '\xE2', '\xB4', '\x86', ' ', '\xE2', '\xB4', '\x8B', ' ', '\xE2', '\xB4', '\xA2', /* â´ˆ â´Œ â´– â´Ž â´ƒ â´† â´‹ â´¢ */ '\0', '\xE2', '\xB4', '\x90', ' ', '\xE2', '\xB4', '\x91', ' ', '\xE2', '\xB4', '\x93', ' ', '\xE2', '\xB4', '\x95', ' ', '\xE2', '\xB4', '\x99', ' ', '\xE2', '\xB4', '\x9B', ' ', '\xE2', '\xB4', '\xA1', ' ', '\xE2', '\xB4', '\xA3', /* â´ â´‘ â´“ â´• â´™ â´› â´¡ â´£ */ '\0', '\xE2', '\xB4', '\x84', ' ', '\xE2', '\xB4', '\x85', ' ', '\xE2', '\xB4', '\x94', ' ', '\xE2', '\xB4', '\x95', ' ', '\xE2', '\xB4', '\x81', ' ', '\xE2', '\xB4', '\x82', ' ', '\xE2', '\xB4', '\x98', ' ', '\xE2', '\xB4', '\x9D', /* â´„ â´… â´” â´• â´ â´‚ â´˜ â´ */ '\0', '\xE2', '\xB0', '\x85', ' ', '\xE2', '\xB0', '\x94', ' ', '\xE2', '\xB0', '\xAA', ' ', '\xE2', '\xB0', '\x84', ' ', '\xE2', '\xB0', '\x82', ' ', '\xE2', '\xB0', '\x8A', ' ', '\xE2', '\xB0', '\xAB', ' ', '\xE2', '\xB0', '\x8B', /* â°… â°” â°ª â°„ â°‚ â°Š â°« â°‹ */ '\0', '\xE2', '\xB0', '\x85', ' ', '\xE2', '\xB0', '\x84', ' ', '\xE2', '\xB0', '\x82', ' ', '\xE2', '\xB0', '\xAA', ' ', '\xE2', '\xB0', '\x9E', ' ', '\xE2', '\xB0', '\xA1', ' ', '\xE2', '\xB0', '\x8A', ' ', '\xE2', '\xB0', '\x94', /* â°… â°„ â°‚ â°ª â°ž â°¡ â°Š â°” */ '\0', '\xE2', '\xB0', '\xB5', ' ', '\xE2', '\xB1', '\x84', ' ', '\xE2', '\xB1', '\x9A', ' ', '\xE2', '\xB0', '\xB4', ' ', '\xE2', '\xB0', '\xB2', ' ', '\xE2', '\xB0', '\xBA', ' ', '\xE2', '\xB1', '\x9B', ' ', '\xE2', '\xB0', '\xBB', /* â°µ ⱄ ⱚ â°´ â°² â°º â±› â°» */ '\0', '\xE2', '\xB0', '\xB5', ' ', '\xE2', '\xB0', '\xB4', ' ', '\xE2', '\xB0', '\xB2', ' ', '\xE2', '\xB1', '\x9A', ' ', '\xE2', '\xB1', '\x8E', ' ', '\xE2', '\xB1', '\x91', ' ', '\xE2', '\xB0', '\xBA', ' ', '\xE2', '\xB1', '\x84', /* â°µ â°´ â°² ⱚ ⱎ ⱑ â°º ⱄ */ '\0', '\xF0', '\x90', '\x8C', '\xB2', ' ', '\xF0', '\x90', '\x8C', '\xB6', ' ', '\xF0', '\x90', '\x8D', '\x80', ' ', '\xF0', '\x90', '\x8D', '\x84', ' ', '\xF0', '\x90', '\x8C', '\xB4', ' ', '\xF0', '\x90', '\x8D', '\x83', ' ', '\xF0', '\x90', '\x8D', '\x88', ' ', '\xF0', '\x90', '\x8C', '\xBE', /* ðŒ² ðŒ¶ ð€ ð„ ðŒ´ ðƒ ðˆ ðŒ¾ */ '\0', '\xF0', '\x90', '\x8C', '\xB6', ' ', '\xF0', '\x90', '\x8C', '\xB4', ' ', '\xF0', '\x90', '\x8D', '\x83', ' ', '\xF0', '\x90', '\x8D', '\x88', /* ðŒ¶ ðŒ´ ðƒ ðˆ */ '\0', '\xCE', '\x93', ' ', '\xCE', '\x92', ' ', '\xCE', '\x95', ' ', '\xCE', '\x96', ' ', '\xCE', '\x98', ' ', '\xCE', '\x9F', ' ', '\xCE', '\xA9', /* Γ Î’ Ε Ζ Θ Ο Ω */ '\0', '\xCE', '\x92', ' ', '\xCE', '\x94', ' ', '\xCE', '\x96', ' ', '\xCE', '\x9E', ' ', '\xCE', '\x98', ' ', '\xCE', '\x9F', /* Î’ Δ Ζ Ξ Θ Ο */ '\0', '\xCE', '\xB2', ' ', '\xCE', '\xB8', ' ', '\xCE', '\xB4', ' ', '\xCE', '\xB6', ' ', '\xCE', '\xBB', ' ', '\xCE', '\xBE', /* β θ δ ζ λ ξ */ '\0', '\xCE', '\xB1', ' ', '\xCE', '\xB5', ' ', '\xCE', '\xB9', ' ', '\xCE', '\xBF', ' ', '\xCF', '\x80', ' ', '\xCF', '\x83', ' ', '\xCF', '\x84', ' ', '\xCF', '\x89', /* α ε ι ο Ï€ σ Ï„ ω */ '\0', '\xCE', '\xB2', ' ', '\xCE', '\xB3', ' ', '\xCE', '\xB7', ' ', '\xCE', '\xBC', ' ', '\xCF', '\x81', ' ', '\xCF', '\x86', ' ', '\xCF', '\x87', ' ', '\xCF', '\x88', /* β γ η μ Ï Ï† χ ψ */ '\0', '\xE0', '\xAA', '\xA4', ' ', '\xE0', '\xAA', '\xA8', ' ', '\xE0', '\xAA', '\x8B', ' ', '\xE0', '\xAA', '\x8C', ' ', '\xE0', '\xAA', '\x9B', ' ', '\xE0', '\xAA', '\x9F', ' ', '\xE0', '\xAA', '\xB0', ' ', '\xE0', '\xAB', '\xA6', /* ત ન ઋ ઌ છ ટ ર ૦ */ '\0', '\xE0', '\xAA', '\x96', ' ', '\xE0', '\xAA', '\x97', ' ', '\xE0', '\xAA', '\x98', ' ', '\xE0', '\xAA', '\x9E', ' ', '\xE0', '\xAA', '\x87', ' ', '\xE0', '\xAA', '\x88', ' ', '\xE0', '\xAA', '\xA0', ' ', '\xE0', '\xAA', '\x9C', /* ખ ગ ઘ ઞ ઇ ઈ ઠ જ */ '\0', '\xE0', '\xAA', '\x88', ' ', '\xE0', '\xAA', '\x8A', ' ', '\xE0', '\xAA', '\xBF', ' ', '\xE0', '\xAB', '\x80', ' ', '\xE0', '\xAA', '\xB2', '\xE0', '\xAB', '\x80', ' ', '\xE0', '\xAA', '\xB6', '\xE0', '\xAB', '\x8D', '\xE0', '\xAA', '\x9A', '\xE0', '\xAA', '\xBF', ' ', '\xE0', '\xAA', '\x9C', '\xE0', '\xAA', '\xBF', ' ', '\xE0', '\xAA', '\xB8', '\xE0', '\xAB', '\x80', /* ઈ ઊ િ à«€ લી શà«àªšàª¿ જિ સી */ '\0', '\xE0', '\xAB', '\x81', ' ', '\xE0', '\xAB', '\x83', ' ', '\xE0', '\xAB', '\x84', ' ', '\xE0', '\xAA', '\x96', '\xE0', '\xAB', '\x81', ' ', '\xE0', '\xAA', '\x9B', '\xE0', '\xAB', '\x83', ' ', '\xE0', '\xAA', '\x9B', '\xE0', '\xAB', '\x84', /* ૠૃ à«„ ખૠછૃ છૄ */ '\0', '\xE0', '\xAB', '\xA6', ' ', '\xE0', '\xAB', '\xA7', ' ', '\xE0', '\xAB', '\xA8', ' ', '\xE0', '\xAB', '\xA9', ' ', '\xE0', '\xAB', '\xAD', /* ૦ à«§ ૨ à«© à«­ */ '\0', '\xE0', '\xA8', '\x95', ' ', '\xE0', '\xA8', '\x97', ' ', '\xE0', '\xA8', '\x99', ' ', '\xE0', '\xA8', '\x9A', ' ', '\xE0', '\xA8', '\x9C', ' ', '\xE0', '\xA8', '\xA4', ' ', '\xE0', '\xA8', '\xA7', ' ', '\xE0', '\xA8', '\xB8', /* ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ */ '\0', '\xE0', '\xA8', '\x95', ' ', '\xE0', '\xA8', '\x97', ' ', '\xE0', '\xA8', '\x99', ' ', '\xE0', '\xA8', '\x9A', ' ', '\xE0', '\xA8', '\x9C', ' ', '\xE0', '\xA8', '\xA4', ' ', '\xE0', '\xA8', '\xA7', ' ', '\xE0', '\xA8', '\xB8', /* ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ */ '\0', '\xE0', '\xA8', '\x87', ' ', '\xE0', '\xA8', '\x88', ' ', '\xE0', '\xA8', '\x89', ' ', '\xE0', '\xA8', '\x8F', ' ', '\xE0', '\xA8', '\x93', ' ', '\xE0', '\xA9', '\xB3', ' ', '\xE0', '\xA8', '\xBF', ' ', '\xE0', '\xA9', '\x80', /* ਇ ਈ ਉ ਠਓ ੳ ਿ à©€ */ '\0', '\xE0', '\xA8', '\x85', ' ', '\xE0', '\xA8', '\x8F', ' ', '\xE0', '\xA8', '\x93', ' ', '\xE0', '\xA8', '\x97', ' ', '\xE0', '\xA8', '\x9C', ' ', '\xE0', '\xA8', '\xA0', ' ', '\xE0', '\xA8', '\xB0', ' ', '\xE0', '\xA8', '\xB8', /* ਅ ਠਓ ਗ ਜ ਠ ਰ ਸ */ '\0', '\xE0', '\xA9', '\xA6', ' ', '\xE0', '\xA9', '\xA7', ' ', '\xE0', '\xA9', '\xA8', ' ', '\xE0', '\xA9', '\xA9', ' ', '\xE0', '\xA9', '\xAD', /* ੦ à©§ ੨ à©© à©­ */ '\0', '\xD7', '\x91', ' ', '\xD7', '\x93', ' ', '\xD7', '\x94', ' ', '\xD7', '\x97', ' ', '\xD7', '\x9A', ' ', '\xD7', '\x9B', ' ', '\xD7', '\x9D', ' ', '\xD7', '\xA1', /* ב ד ×” ×— ך ×› × ×¡ */ '\0', '\xD7', '\x91', ' ', '\xD7', '\x98', ' ', '\xD7', '\x9B', ' ', '\xD7', '\x9D', ' ', '\xD7', '\xA1', ' ', '\xD7', '\xA6', /* ב ט ×› × ×¡ צ */ '\0', '\xD7', '\xA7', ' ', '\xD7', '\x9A', ' ', '\xD7', '\x9F', ' ', '\xD7', '\xA3', ' ', '\xD7', '\xA5', /* ×§ ך ן ×£ ×¥ */ '\0', '\xE0', '\xB2', '\x87', ' ', '\xE0', '\xB2', '\x8A', ' ', '\xE0', '\xB2', '\x90', ' ', '\xE0', '\xB2', '\xA3', ' ', '\xE0', '\xB2', '\xB8', '\xE0', '\xB2', '\xBE', ' ', '\xE0', '\xB2', '\xA8', '\xE0', '\xB2', '\xBE', ' ', '\xE0', '\xB2', '\xA6', '\xE0', '\xB2', '\xBE', ' ', '\xE0', '\xB2', '\xB0', '\xE0', '\xB2', '\xBE', /* ಇ ಊ ಠಣ ಸಾ ನಾ ದಾ ರಾ */ '\0', '\xE0', '\xB2', '\x85', ' ', '\xE0', '\xB2', '\x89', ' ', '\xE0', '\xB2', '\x8E', ' ', '\xE0', '\xB2', '\xB2', ' ', '\xE0', '\xB3', '\xA6', ' ', '\xE0', '\xB3', '\xA8', ' ', '\xE0', '\xB3', '\xAC', ' ', '\xE0', '\xB3', '\xAD', /* ಅ ಉ ಎ ಲ ೦ ೨ ೬ à³­ */ '\0', '\xEA', '\xA4', '\x85', ' ', '\xEA', '\xA4', '\x8F', ' ', '\xEA', '\xA4', '\x81', ' ', '\xEA', '\xA4', '\x8B', ' ', '\xEA', '\xA4', '\x80', ' ', '\xEA', '\xA4', '\x8D', /* ꤅ ê¤ ê¤ ê¤‹ ꤀ ê¤ */ '\0', '\xEA', '\xA4', '\x88', ' ', '\xEA', '\xA4', '\x98', ' ', '\xEA', '\xA4', '\x80', ' ', '\xEA', '\xA4', '\x8D', ' ', '\xEA', '\xA4', '\xA2', /* ꤈ ꤘ ꤀ ê¤ ê¤¢ */ '\0', '\xEA', '\xA4', '\x96', ' ', '\xEA', '\xA4', '\xA1', /* ꤖ ꤡ */ '\0', '\xEA', '\xA4', '\x91', ' ', '\xEA', '\xA4', '\x9C', ' ', '\xEA', '\xA4', '\x9E', /* ꤑ ꤜ ꤞ */ '\0', '\xEA', '\xA4', '\x91', '\xEA', '\xA4', '\xAC', ' ', '\xEA', '\xA4', '\x9C', '\xEA', '\xA4', '\xAD', ' ', '\xEA', '\xA4', '\x94', '\xEA', '\xA4', '\xAC', /* ꤑ꤬ ꤜ꤭ ꤔ꤬ */ '\0', '\xE1', '\x9E', '\x81', ' ', '\xE1', '\x9E', '\x91', ' ', '\xE1', '\x9E', '\x93', ' ', '\xE1', '\x9E', '\xA7', ' ', '\xE1', '\x9E', '\xA9', ' ', '\xE1', '\x9E', '\xB6', /* áž áž‘ áž“ áž§ áž© áž¶ */ '\0', '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x80', ' ', '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x81', ' ', '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x82', ' ', '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x90', /* ក្ក ក្ហក្គ ក្ហ*/ '\0', '\xE1', '\x9E', '\x81', ' ', '\xE1', '\x9E', '\x83', ' ', '\xE1', '\x9E', '\x85', ' ', '\xE1', '\x9E', '\x8B', ' ', '\xE1', '\x9E', '\x94', ' ', '\xE1', '\x9E', '\x98', ' ', '\xE1', '\x9E', '\x99', ' ', '\xE1', '\x9E', '\xB2', /* ហឃ áž… áž‹ áž” ម áž™ áž² */ '\0', '\xE1', '\x9E', '\x8F', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x9A', ' ', '\xE1', '\x9E', '\x9A', '\xE1', '\x9F', '\x80', ' ', '\xE1', '\x9E', '\xB2', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x99', ' ', '\xE1', '\x9E', '\xA2', '\xE1', '\x9E', '\xBF', /* ážáŸ’ážš រៀ ឲ្យ អឿ */ '\0', '\xE1', '\x9E', '\x93', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x8F', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x9A', '\xE1', '\x9F', '\x83', ' ', '\xE1', '\x9E', '\x84', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x81', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x99', ' ', '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x94', '\xE1', '\x9F', '\x80', ' ', '\xE1', '\x9E', '\x85', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x9A', '\xE1', '\x9F', '\x80', ' ', '\xE1', '\x9E', '\x93', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x8F', '\xE1', '\x9E', '\xBF', ' ', '\xE1', '\x9E', '\x9B', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x94', '\xE1', '\x9E', '\xBF', /* ន្ážáŸ’រៃ ង្ážáŸ’áž™ ក្បៀ ច្រៀ ន្ážáž¿ ល្បឿ */ '\0', '\xE1', '\xA7', '\xA0', ' ', '\xE1', '\xA7', '\xA1', /* á§  á§¡ */ '\0', '\xE1', '\xA7', '\xB6', ' ', '\xE1', '\xA7', '\xB9', /* á§¶ á§¹ */ '\0', '\xE0', '\xBA', '\xB2', ' ', '\xE0', '\xBA', '\x94', ' ', '\xE0', '\xBA', '\xAD', ' ', '\xE0', '\xBA', '\xA1', ' ', '\xE0', '\xBA', '\xA5', ' ', '\xE0', '\xBA', '\xA7', ' ', '\xE0', '\xBA', '\xA3', ' ', '\xE0', '\xBA', '\x87', /* າ ດ ອ ມ ລ ວ ຣ ງ */ '\0', '\xE0', '\xBA', '\xB2', ' ', '\xE0', '\xBA', '\xAD', ' ', '\xE0', '\xBA', '\x9A', ' ', '\xE0', '\xBA', '\x8D', ' ', '\xE0', '\xBA', '\xA3', ' ', '\xE0', '\xBA', '\xAE', ' ', '\xE0', '\xBA', '\xA7', ' ', '\xE0', '\xBA', '\xA2', /* າ ອ ບ ຠຣ ຮ ວ ຢ */ '\0', '\xE0', '\xBA', '\x9B', ' ', '\xE0', '\xBA', '\xA2', ' ', '\xE0', '\xBA', '\x9F', ' ', '\xE0', '\xBA', '\x9D', /* ປ ຢ ຟ ຠ*/ '\0', '\xE0', '\xBB', '\x82', ' ', '\xE0', '\xBB', '\x84', ' ', '\xE0', '\xBB', '\x83', /* ໂ ໄ ໃ */ '\0', '\xE0', '\xBA', '\x87', ' ', '\xE0', '\xBA', '\x8A', ' ', '\xE0', '\xBA', '\x96', ' ', '\xE0', '\xBA', '\xBD', ' ', '\xE0', '\xBB', '\x86', ' ', '\xE0', '\xBA', '\xAF', /* ງ ຊ ຖ ຽ ໆ ຯ */ '\0', 'T', ' ', 'H', ' ', 'E', ' ', 'Z', ' ', 'O', ' ', 'C', ' ', 'Q', ' ', 'S', /* T H E Z O C Q S */ '\0', 'H', ' ', 'E', ' ', 'Z', ' ', 'L', ' ', 'O', ' ', 'C', ' ', 'U', ' ', 'S', /* H E Z L O C U S */ '\0', 'f', ' ', 'i', ' ', 'j', ' ', 'k', ' ', 'd', ' ', 'b', ' ', 'h', /* f i j k d b h */ '\0', 'u', ' ', 'v', ' ', 'x', ' ', 'z', ' ', 'o', ' ', 'e', ' ', 's', ' ', 'c', /* u v x z o e s c */ '\0', 'n', ' ', 'r', ' ', 'x', ' ', 'z', ' ', 'o', ' ', 'e', ' ', 's', ' ', 'c', /* n r x z o e s c */ '\0', 'p', ' ', 'q', ' ', 'g', ' ', 'j', ' ', 'y', /* p q g j y */ '\0', '\xE2', '\x82', '\x80', ' ', '\xE2', '\x82', '\x83', ' ', '\xE2', '\x82', '\x85', ' ', '\xE2', '\x82', '\x87', ' ', '\xE2', '\x82', '\x88', /* â‚€ ₃ â‚… ₇ ₈ */ '\0', '\xE2', '\x82', '\x80', ' ', '\xE2', '\x82', '\x81', ' ', '\xE2', '\x82', '\x82', ' ', '\xE2', '\x82', '\x83', ' ', '\xE2', '\x82', '\x88', /* â‚€ â‚ â‚‚ ₃ ₈ */ '\0', '\xE1', '\xB5', '\xA2', ' ', '\xE2', '\xB1', '\xBC', ' ', '\xE2', '\x82', '\x95', ' ', '\xE2', '\x82', '\x96', ' ', '\xE2', '\x82', '\x97', /* áµ¢ â±¼ â‚• â‚– â‚— */ '\0', '\xE2', '\x82', '\x90', ' ', '\xE2', '\x82', '\x91', ' ', '\xE2', '\x82', '\x92', ' ', '\xE2', '\x82', '\x93', ' ', '\xE2', '\x82', '\x99', ' ', '\xE2', '\x82', '\x9B', ' ', '\xE1', '\xB5', '\xA5', ' ', '\xE1', '\xB5', '\xA4', ' ', '\xE1', '\xB5', '\xA3', /* â‚ â‚‘ â‚’ â‚“ â‚™ â‚› áµ¥ ᵤ áµ£ */ '\0', '\xE1', '\xB5', '\xA6', ' ', '\xE1', '\xB5', '\xA7', ' ', '\xE1', '\xB5', '\xA8', ' ', '\xE1', '\xB5', '\xA9', ' ', '\xE2', '\x82', '\x9A', /* ᵦ áµ§ ᵨ ᵩ ₚ */ '\0', '\xE2', '\x81', '\xB0', ' ', '\xC2', '\xB3', ' ', '\xE2', '\x81', '\xB5', ' ', '\xE2', '\x81', '\xB7', ' ', '\xE1', '\xB5', '\x80', ' ', '\xE1', '\xB4', '\xB4', ' ', '\xE1', '\xB4', '\xB1', ' ', '\xE1', '\xB4', '\xBC', /* Ⱐ³ âµ â· áµ€ á´´ á´± á´¼ */ '\0', '\xE2', '\x81', '\xB0', ' ', '\xC2', '\xB9', ' ', '\xC2', '\xB2', ' ', '\xC2', '\xB3', ' ', '\xE1', '\xB4', '\xB1', ' ', '\xE1', '\xB4', '\xB8', ' ', '\xE1', '\xB4', '\xBC', ' ', '\xE1', '\xB5', '\x81', /* Ⱐ¹ ² ³ á´± á´¸ á´¼ áµ */ '\0', '\xE1', '\xB5', '\x87', ' ', '\xE1', '\xB5', '\x88', ' ', '\xE1', '\xB5', '\x8F', ' ', '\xCA', '\xB0', ' ', '\xCA', '\xB2', ' ', '\xE1', '\xB6', '\xA0', ' ', '\xE2', '\x81', '\xB1', /* ᵇ ᵈ ᵠʰ ʲ á¶  â± */ '\0', '\xE1', '\xB5', '\x89', ' ', '\xE1', '\xB5', '\x92', ' ', '\xCA', '\xB3', ' ', '\xCB', '\xA2', ' ', '\xCB', '\xA3', ' ', '\xE1', '\xB6', '\x9C', ' ', '\xE1', '\xB6', '\xBB', /* ᵉ áµ’ ʳ Ë¢ Ë£ á¶œ á¶» */ '\0', '\xE1', '\xB5', '\x96', ' ', '\xCA', '\xB8', ' ', '\xE1', '\xB5', '\x8D', /* áµ– ʸ áµ */ '\0', '\xEA', '\x93', '\xA1', ' ', '\xEA', '\x93', '\xA7', ' ', '\xEA', '\x93', '\xB1', ' ', '\xEA', '\x93', '\xB6', ' ', '\xEA', '\x93', '\xA9', ' ', '\xEA', '\x93', '\x9A', ' ', '\xEA', '\x93', '\xB5', ' ', '\xEA', '\x93', '\xB3', /* ê“¡ ê“§ ꓱ ê“¶ ê“© ꓚ ꓵ ꓳ */ '\0', '\xEA', '\x93', '\x95', ' ', '\xEA', '\x93', '\x9C', ' ', '\xEA', '\x93', '\x9E', ' ', '\xEA', '\x93', '\xA1', ' ', '\xEA', '\x93', '\x9B', ' ', '\xEA', '\x93', '\xA2', ' ', '\xEA', '\x93', '\xB3', ' ', '\xEA', '\x93', '\xB4', /* ê“• ꓜ ꓞ ê“¡ ê“› ê“¢ ꓳ ê“´ */ '\0', '\xE0', '\xB4', '\x92', ' ', '\xE0', '\xB4', '\x9F', ' ', '\xE0', '\xB4', '\xA0', ' ', '\xE0', '\xB4', '\xB1', ' ', '\xE0', '\xB4', '\x9A', ' ', '\xE0', '\xB4', '\xAA', ' ', '\xE0', '\xB4', '\x9A', '\xE0', '\xB5', '\x8D', '\xE0', '\xB4', '\x9A', ' ', '\xE0', '\xB4', '\xAA', '\xE0', '\xB5', '\x8D', '\xE0', '\xB4', '\xAA', /* à´’ à´Ÿ à´  à´± à´š à´ª à´šàµà´š à´ªàµà´ª */ '\0', '\xE0', '\xB4', '\x9F', ' ', '\xE0', '\xB4', '\xA0', ' ', '\xE0', '\xB4', '\xA7', ' ', '\xE0', '\xB4', '\xB6', ' ', '\xE0', '\xB4', '\x98', ' ', '\xE0', '\xB4', '\x9A', ' ', '\xE0', '\xB4', '\xA5', ' ', '\xE0', '\xB4', '\xB2', /* à´Ÿ à´  à´§ à´¶ à´˜ à´š à´¥ à´² */ '\0', '\xE1', '\x80', '\x81', ' ', '\xE1', '\x80', '\x82', ' ', '\xE1', '\x80', '\x84', ' ', '\xE1', '\x80', '\x92', ' ', '\xE1', '\x80', '\x9D', ' ', '\xE1', '\x81', '\xA5', ' ', '\xE1', '\x81', '\x8A', ' ', '\xE1', '\x81', '\x8B', /* ဠဂ င ဒ ဠᥠአዠ*/ '\0', '\xE1', '\x80', '\x84', ' ', '\xE1', '\x80', '\x8E', ' ', '\xE1', '\x80', '\x92', ' ', '\xE1', '\x80', '\x95', ' ', '\xE1', '\x80', '\x97', ' ', '\xE1', '\x80', '\x9D', ' ', '\xE1', '\x81', '\x8A', ' ', '\xE1', '\x81', '\x8B', /* င ဎ ဒ ပ ဗ ဠአዠ*/ '\0', '\xE1', '\x80', '\xA9', ' ', '\xE1', '\x80', '\xBC', ' ', '\xE1', '\x81', '\x8D', ' ', '\xE1', '\x81', '\x8F', ' ', '\xE1', '\x81', '\x86', ' ', '\xE1', '\x80', '\xAB', ' ', '\xE1', '\x80', '\xAD', /* ဩ ြ á á ᆠါ ိ */ '\0', '\xE1', '\x80', '\x89', ' ', '\xE1', '\x80', '\x8A', ' ', '\xE1', '\x80', '\xA5', ' ', '\xE1', '\x80', '\xA9', ' ', '\xE1', '\x80', '\xA8', ' ', '\xE1', '\x81', '\x82', ' ', '\xE1', '\x81', '\x85', ' ', '\xE1', '\x81', '\x89', /* ဉ ည ဥ ဩ ဨ á‚ á… á‰ */ '\0', '\xDF', '\x90', ' ', '\xDF', '\x89', ' ', '\xDF', '\x92', ' ', '\xDF', '\x9F', ' ', '\xDF', '\x96', ' ', '\xDF', '\x9C', ' ', '\xDF', '\xA0', ' ', '\xDF', '\xA5', /* ß ß‰ ß’ ߟ ß– ßœ ß  ߥ */ '\0', '\xDF', '\x80', ' ', '\xDF', '\x98', ' ', '\xDF', '\xA1', ' ', '\xDF', '\xA0', ' ', '\xDF', '\xA5', /* ߀ ߘ ß¡ ß  ߥ */ '\0', '\xDF', '\x8F', ' ', '\xDF', '\x9B', ' ', '\xDF', '\x8B', /* ß ß› ß‹ */ '\0', '\xDF', '\x8E', ' ', '\xDF', '\x8F', ' ', '\xDF', '\x9B', ' ', '\xDF', '\x8B', /* ߎ ß ß› ß‹ */ '\0', '\xE1', '\xB1', '\x9B', ' ', '\xE1', '\xB1', '\x9C', ' ', '\xE1', '\xB1', '\x9D', ' ', '\xE1', '\xB1', '\xA1', ' ', '\xE1', '\xB1', '\xA2', ' ', '\xE1', '\xB1', '\xA5', /* á±› ᱜ ᱠᱡ á±¢ á±¥ */ '\0', '\xF0', '\x90', '\xB0', '\x97', ' ', '\xF0', '\x90', '\xB0', '\x98', ' ', '\xF0', '\x90', '\xB0', '\xA7', /* ð°— ð°˜ ð°§ */ '\0', '\xF0', '\x90', '\xB0', '\x89', ' ', '\xF0', '\x90', '\xB0', '\x97', ' ', '\xF0', '\x90', '\xB0', '\xA6', ' ', '\xF0', '\x90', '\xB0', '\xA7', /* ð°‰ ð°— ð°¦ ð°§ */ '\0', '\xF0', '\x90', '\x92', '\xBE', ' ', '\xF0', '\x90', '\x93', '\x8D', ' ', '\xF0', '\x90', '\x93', '\x92', ' ', '\xF0', '\x90', '\x93', '\x93', ' ', '\xF0', '\x90', '\x92', '\xBB', ' ', '\xF0', '\x90', '\x93', '\x82', ' ', '\xF0', '\x90', '\x92', '\xB5', ' ', '\xF0', '\x90', '\x93', '\x86', /* ð’¾ ð“ 𓒠𓓠𒻠𓂠𒵠𓆠*/ '\0', '\xF0', '\x90', '\x92', '\xB0', ' ', '\xF0', '\x90', '\x93', '\x8D', ' ', '\xF0', '\x90', '\x93', '\x82', ' ', '\xF0', '\x90', '\x92', '\xBF', ' ', '\xF0', '\x90', '\x93', '\x8E', ' ', '\xF0', '\x90', '\x92', '\xB9', /* ð’° ð“ 𓂠𒿠𓎠𒹠*/ '\0', '\xF0', '\x90', '\x92', '\xBC', ' ', '\xF0', '\x90', '\x92', '\xBD', ' ', '\xF0', '\x90', '\x92', '\xBE', /* ð’¼ ð’½ ð’¾ */ '\0', '\xF0', '\x90', '\x93', '\xB5', ' ', '\xF0', '\x90', '\x93', '\xB6', ' ', '\xF0', '\x90', '\x93', '\xBA', ' ', '\xF0', '\x90', '\x93', '\xBB', ' ', '\xF0', '\x90', '\x93', '\x9D', ' ', '\xF0', '\x90', '\x93', '\xA3', ' ', '\xF0', '\x90', '\x93', '\xAA', ' ', '\xF0', '\x90', '\x93', '\xAE', /* 𓵠𓶠𓺠𓻠ð“ 𓣠𓪠𓮠*/ '\0', '\xF0', '\x90', '\x93', '\x98', ' ', '\xF0', '\x90', '\x93', '\x9A', ' ', '\xF0', '\x90', '\x93', '\xA3', ' ', '\xF0', '\x90', '\x93', '\xB5', ' ', '\xF0', '\x90', '\x93', '\xA1', ' ', '\xF0', '\x90', '\x93', '\xA7', ' ', '\xF0', '\x90', '\x93', '\xAA', ' ', '\xF0', '\x90', '\x93', '\xB6', /* 𓘠𓚠𓣠𓵠𓡠𓧠𓪠𓶠*/ '\0', '\xF0', '\x90', '\x93', '\xA4', ' ', '\xF0', '\x90', '\x93', '\xA6', ' ', '\xF0', '\x90', '\x93', '\xB8', ' ', '\xF0', '\x90', '\x93', '\xB9', ' ', '\xF0', '\x90', '\x93', '\x9B', /* 𓤠𓦠𓸠𓹠𓛠*/ '\0', '\xF0', '\x90', '\x93', '\xA4', ' ', '\xF0', '\x90', '\x93', '\xA5', ' ', '\xF0', '\x90', '\x93', '\xA6', /* 𓤠𓥠𓦠*/ '\0', '\xF0', '\x90', '\x92', '\x86', ' ', '\xF0', '\x90', '\x92', '\x89', ' ', '\xF0', '\x90', '\x92', '\x90', ' ', '\xF0', '\x90', '\x92', '\x92', ' ', '\xF0', '\x90', '\x92', '\x98', ' ', '\xF0', '\x90', '\x92', '\x9B', ' ', '\xF0', '\x90', '\x92', '\xA0', ' ', '\xF0', '\x90', '\x92', '\xA3', /* ð’† ð’‰ ð’ ð’’ ð’˜ ð’› ð’  ð’£ */ '\0', '\xF0', '\x90', '\x92', '\x80', ' ', '\xF0', '\x90', '\x92', '\x82', ' ', '\xF0', '\x90', '\x92', '\x86', ' ', '\xF0', '\x90', '\x92', '\x88', ' ', '\xF0', '\x90', '\x92', '\x8A', ' ', '\xF0', '\x90', '\x92', '\x92', ' ', '\xF0', '\x90', '\x92', '\xA0', ' ', '\xF0', '\x90', '\x92', '\xA9', /* ð’€ ð’‚ ð’† ð’ˆ ð’Š ð’’ ð’  ð’© */ '\0', '\xEA', '\xA2', '\x9C', ' ', '\xEA', '\xA2', '\x9E', ' ', '\xEA', '\xA2', '\xB3', ' ', '\xEA', '\xA2', '\x82', ' ', '\xEA', '\xA2', '\x96', ' ', '\xEA', '\xA2', '\x92', ' ', '\xEA', '\xA2', '\x9D', ' ', '\xEA', '\xA2', '\x9B', /* ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ê¢ ê¢› */ '\0', '\xEA', '\xA2', '\x82', ' ', '\xEA', '\xA2', '\xA8', ' ', '\xEA', '\xA2', '\xBA', ' ', '\xEA', '\xA2', '\xA4', ' ', '\xEA', '\xA2', '\x8E', /* ꢂ ꢨ ꢺ ꢤ ꢎ */ '\0', '\xF0', '\x90', '\x91', '\x95', ' ', '\xF0', '\x90', '\x91', '\x99', /* ð‘• ð‘™ */ '\0', '\xF0', '\x90', '\x91', '\x94', ' ', '\xF0', '\x90', '\x91', '\x96', ' ', '\xF0', '\x90', '\x91', '\x97', ' ', '\xF0', '\x90', '\x91', '\xB9', ' ', '\xF0', '\x90', '\x91', '\xBB', /* 𑔠𑖠𑗠𑹠𑻠*/ '\0', '\xF0', '\x90', '\x91', '\x9F', ' ', '\xF0', '\x90', '\x91', '\xA3', /* 𑟠𑣠*/ '\0', '\xF0', '\x90', '\x91', '\xB1', ' ', '\xF0', '\x90', '\x91', '\xB2', ' ', '\xF0', '\x90', '\x91', '\xB3', ' ', '\xF0', '\x90', '\x91', '\xB4', ' ', '\xF0', '\x90', '\x91', '\xB8', ' ', '\xF0', '\x90', '\x91', '\xBA', ' ', '\xF0', '\x90', '\x91', '\xBC', /* 𑱠𑲠𑳠𑴠𑸠𑺠𑼠*/ '\0', '\xF0', '\x90', '\x91', '\xB4', ' ', '\xF0', '\x90', '\x91', '\xBB', ' ', '\xF0', '\x90', '\x91', '\xB9', /* 𑴠𑻠𑹠*/ '\0', '\xE0', '\xB6', '\x89', ' ', '\xE0', '\xB6', '\x9A', ' ', '\xE0', '\xB6', '\x9D', ' ', '\xE0', '\xB6', '\xB3', ' ', '\xE0', '\xB6', '\xB4', ' ', '\xE0', '\xB6', '\xBA', ' ', '\xE0', '\xB6', '\xBD', ' ', '\xE0', '\xB7', '\x86', /* ඉ à¶š à¶ à¶³ à¶´ ය à¶½ à·† */ '\0', '\xE0', '\xB6', '\x91', ' ', '\xE0', '\xB6', '\x94', ' ', '\xE0', '\xB6', '\x9D', ' ', '\xE0', '\xB6', '\xA2', ' ', '\xE0', '\xB6', '\xA7', ' ', '\xE0', '\xB6', '\xAE', ' ', '\xE0', '\xB6', '\xB0', ' ', '\xE0', '\xB6', '\xBB', /* à¶‘ à¶” à¶ à¶¢ à¶§ à¶® à¶° à¶» */ '\0', '\xE0', '\xB6', '\xAF', ' ', '\xE0', '\xB6', '\xB3', ' ', '\xE0', '\xB6', '\x8B', ' ', '\xE0', '\xB6', '\xBD', ' ', '\xE0', '\xB6', '\xAD', '\xE0', '\xB7', '\x96', ' ', '\xE0', '\xB6', '\xAD', '\xE0', '\xB7', '\x94', ' ', '\xE0', '\xB6', '\xB6', '\xE0', '\xB7', '\x94', ' ', '\xE0', '\xB6', '\xAF', '\xE0', '\xB7', '\x94', /* ද à¶³ à¶‹ à¶½ à¶­à·– à¶­à·” à¶¶à·” දු */ '\0', '\xE1', '\xAE', '\x8B', ' ', '\xE1', '\xAE', '\x9E', ' ', '\xE1', '\xAE', '\xAE', ' ', '\xE1', '\xAE', '\xBD', ' ', '\xE1', '\xAE', '\xB0', ' ', '\xE1', '\xAE', '\x88', /* ᮋ ᮞ á®® ᮽ á®° ᮈ */ '\0', '\xE1', '\xAE', '\x84', ' ', '\xE1', '\xAE', '\x94', ' ', '\xE1', '\xAE', '\x95', ' ', '\xE1', '\xAE', '\x97', ' ', '\xE1', '\xAE', '\xB0', ' ', '\xE1', '\xAE', '\x86', ' ', '\xE1', '\xAE', '\x88', ' ', '\xE1', '\xAE', '\x89', /* ᮄ á®” ᮕ á®— á®° ᮆ ᮈ ᮉ */ '\0', '\xE1', '\xAE', '\xBC', ' ', '\xE1', '\xB3', '\x84', /* ᮼ ᳄ */ '\0', '\xEA', '\xAA', '\x86', ' ', '\xEA', '\xAA', '\x94', ' ', '\xEA', '\xAA', '\x92', ' ', '\xEA', '\xAA', '\x96', ' ', '\xEA', '\xAA', '\xAB', /* ꪆ ꪔ ꪒ ꪖ ꪫ */ '\0', '\xEA', '\xAA', '\x89', ' ', '\xEA', '\xAA', '\xAB', ' ', '\xEA', '\xAA', '\xAE', /* ꪉ ꪫ ꪮ */ '\0', '\xE0', '\xAE', '\x89', ' ', '\xE0', '\xAE', '\x92', ' ', '\xE0', '\xAE', '\x93', ' ', '\xE0', '\xAE', '\xB1', ' ', '\xE0', '\xAE', '\x88', ' ', '\xE0', '\xAE', '\x95', ' ', '\xE0', '\xAE', '\x99', ' ', '\xE0', '\xAE', '\x9A', /* உ à®’ ஓ à®± ஈ க à®™ ச */ '\0', '\xE0', '\xAE', '\x95', ' ', '\xE0', '\xAE', '\x9A', ' ', '\xE0', '\xAE', '\xB2', ' ', '\xE0', '\xAE', '\xB6', ' ', '\xE0', '\xAE', '\x89', ' ', '\xE0', '\xAE', '\x99', ' ', '\xE0', '\xAE', '\x9F', ' ', '\xE0', '\xAE', '\xAA', /* க ச ல à®¶ உ à®™ ட ப */ '\0', '\xE0', '\xB0', '\x87', ' ', '\xE0', '\xB0', '\x8C', ' ', '\xE0', '\xB0', '\x99', ' ', '\xE0', '\xB0', '\x9E', ' ', '\xE0', '\xB0', '\xA3', ' ', '\xE0', '\xB0', '\xB1', ' ', '\xE0', '\xB1', '\xAF', /* à°‡ à°Œ à°™ à°ž à°£ à°± ౯ */ '\0', '\xE0', '\xB0', '\x85', ' ', '\xE0', '\xB0', '\x95', ' ', '\xE0', '\xB0', '\x9A', ' ', '\xE0', '\xB0', '\xB0', ' ', '\xE0', '\xB0', '\xBD', ' ', '\xE0', '\xB1', '\xA8', ' ', '\xE0', '\xB1', '\xAC', /* à°… à°• à°š à°° à°½ ౨ ౬ */ '\0', '\xE0', '\xB8', '\x9A', ' ', '\xE0', '\xB9', '\x80', ' ', '\xE0', '\xB9', '\x81', ' ', '\xE0', '\xB8', '\xAD', ' ', '\xE0', '\xB8', '\x81', ' ', '\xE0', '\xB8', '\xB2', /* บ เ ๠อ ภา */ '\0', '\xE0', '\xB8', '\x9A', ' ', '\xE0', '\xB8', '\x9B', ' ', '\xE0', '\xB8', '\xA9', ' ', '\xE0', '\xB8', '\xAF', ' ', '\xE0', '\xB8', '\xAD', ' ', '\xE0', '\xB8', '\xA2', ' ', '\xE0', '\xB8', '\xAE', /* บ ป ษ ฯ อ ย ฮ */ '\0', '\xE0', '\xB8', '\x9B', ' ', '\xE0', '\xB8', '\x9D', ' ', '\xE0', '\xB8', '\x9F', /* ป ภฟ */ '\0', '\xE0', '\xB9', '\x82', ' ', '\xE0', '\xB9', '\x83', ' ', '\xE0', '\xB9', '\x84', /* โ ใ ไ */ '\0', '\xE0', '\xB8', '\x8E', ' ', '\xE0', '\xB8', '\x8F', ' ', '\xE0', '\xB8', '\xA4', ' ', '\xE0', '\xB8', '\xA6', /* ฎ ภฤ ฦ */ '\0', '\xE0', '\xB8', '\x8D', ' ', '\xE0', '\xB8', '\x90', /* ภภ*/ '\0', '\xE0', '\xB9', '\x90', ' ', '\xE0', '\xB9', '\x91', ' ', '\xE0', '\xB9', '\x93', /* ๠๑ ๓ */ '\0', '\xE2', '\xB5', '\x94', ' ', '\xE2', '\xB5', '\x99', ' ', '\xE2', '\xB5', '\x9B', ' ', '\xE2', '\xB5', '\x9E', ' ', '\xE2', '\xB4', '\xB5', ' ', '\xE2', '\xB4', '\xBC', ' ', '\xE2', '\xB4', '\xB9', ' ', '\xE2', '\xB5', '\x8E', /* âµ” âµ™ âµ› ⵞ â´µ â´¼ â´¹ ⵎ */ '\0', '\xEA', '\x97', '\x8D', ' ', '\xEA', '\x98', '\x96', ' ', '\xEA', '\x98', '\x99', ' ', '\xEA', '\x98', '\x9C', ' ', '\xEA', '\x96', '\x9C', ' ', '\xEA', '\x96', '\x9D', ' ', '\xEA', '\x94', '\x85', ' ', '\xEA', '\x95', '\xA2', /* ê— ê˜– ꘙ ꘜ ê–œ ê– ê”… ê•¢ */ '\0', '\xEA', '\x97', '\x8D', ' ', '\xEA', '\x98', '\x96', ' ', '\xEA', '\x98', '\x99', ' ', '\xEA', '\x97', '\x9E', ' ', '\xEA', '\x94', '\x85', ' ', '\xEA', '\x95', '\xA2', ' ', '\xEA', '\x96', '\x9C', ' ', '\xEA', '\x94', '\x86', /* ê— ê˜– ꘙ ê—ž ê”… ê•¢ ê–œ ꔆ */ '\0', }; /* stringsets are specific to styles */ const TA_Blue_StringRec ta_blue_stringsets[] = { { TA_BLUE_STRING_ADLAM_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_ADLAM_CAPITAL_BOTTOM, 0 }, { TA_BLUE_STRING_ADLAM_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_ADLAM_SMALL_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_ARABIC_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_ARABIC_BOTTOM, 0 }, { TA_BLUE_STRING_ARABIC_JOIN, TA_BLUE_PROPERTY_LATIN_NEUTRAL }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_ARMENIAN_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM, 0 }, { TA_BLUE_STRING_ARMENIAN_SMALL_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_ARMENIAN_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_ARMENIAN_SMALL_BOTTOM, 0 }, { TA_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_AVESTAN_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_AVESTAN_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_BAMUM_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_BAMUM_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_BENGALI_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_BENGALI_HEAD, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_BENGALI_BASE, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_NEUTRAL | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_BENGALI_BASE, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_BUHID_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_BUHID_LARGE, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_BUHID_SMALL, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_BUHID_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_CHAKMA_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_CHAKMA_BOTTOM, 0 }, { TA_BLUE_STRING_CHAKMA_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_CANADIAN_SYLLABICS_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 }, { TA_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 }, { TA_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_CARIAN_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_CARIAN_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_CHEROKEE_CAPITAL, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_CHEROKEE_CAPITAL, 0 }, { TA_BLUE_STRING_CHEROKEE_SMALL_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_CHEROKEE_SMALL, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_CHEROKEE_SMALL, 0 }, { TA_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_COPTIC_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_COPTIC_CAPITAL_BOTTOM, 0 }, { TA_BLUE_STRING_COPTIC_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_COPTIC_SMALL_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_CYPRIOT_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_CYPRIOT_BOTTOM, 0 }, { TA_BLUE_STRING_CYPRIOT_SMALL, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_CYPRIOT_SMALL, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_CYRILLIC_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0 }, { TA_BLUE_STRING_CYRILLIC_SMALL, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_CYRILLIC_SMALL, 0 }, { TA_BLUE_STRING_CYRILLIC_SMALL_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_DEVANAGARI_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_DEVANAGARI_HEAD, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_DEVANAGARI_BASE, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_NEUTRAL | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_DEVANAGARI_BASE, 0 }, { TA_BLUE_STRING_DEVANAGARI_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_DESERET_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_DESERET_CAPITAL_BOTTOM, 0 }, { TA_BLUE_STRING_DESERET_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_DESERET_SMALL_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_ETHIOPIC_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_ETHIOPIC_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM, 0 }, { TA_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0 }, { TA_BLUE_STRING_GEORGIAN_NUSKHURI_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM, 0 }, { TA_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM, 0 }, { TA_BLUE_STRING_GLAGOLITIC_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_GOTHIC_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_GOTHIC_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_GREEK_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_GREEK_CAPITAL_BOTTOM, 0 }, { TA_BLUE_STRING_GREEK_SMALL_BETA_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_GREEK_SMALL, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_GREEK_SMALL, 0 }, { TA_BLUE_STRING_GREEK_SMALL_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_GUJARATI_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_GUJARATI_BOTTOM, 0 }, { TA_BLUE_STRING_GUJARATI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_GUJARATI_DESCENDER, 0 }, { TA_BLUE_STRING_GUJARATI_DIGIT_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_GURMUKHI_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_GURMUKHI_HEAD, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_GURMUKHI_BASE, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_NEUTRAL | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_GURMUKHI_BOTTOM, 0 }, { TA_BLUE_STRING_GURMUKHI_DIGIT_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_HEBREW_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_LONG }, { TA_BLUE_STRING_HEBREW_BOTTOM, 0 }, { TA_BLUE_STRING_HEBREW_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_KAYAH_LI_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_KAYAH_LI_BOTTOM, 0 }, { TA_BLUE_STRING_KAYAH_LI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_KAYAH_LI_DESCENDER, 0 }, { TA_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_KANNADA_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_KANNADA_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_KHMER_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_KHMER_SUBSCRIPT_TOP, TA_BLUE_PROPERTY_LATIN_SUB_TOP }, { TA_BLUE_STRING_KHMER_BOTTOM, 0 }, { TA_BLUE_STRING_KHMER_DESCENDER, 0 }, { TA_BLUE_STRING_KHMER_LARGE_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_LAO_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_LAO_BOTTOM, 0 }, { TA_BLUE_STRING_LAO_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_LAO_LARGE_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_LAO_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_LATIN_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_LATIN_CAPITAL_BOTTOM, 0 }, { TA_BLUE_STRING_LATIN_SMALL_F_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_LATIN_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_LATIN_SMALL_BOTTOM, 0 }, { TA_BLUE_STRING_LATIN_SMALL_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM, 0 }, { TA_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_LATIN_SUBS_SMALL, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_LATIN_SUBS_SMALL, 0 }, { TA_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM, 0 }, { TA_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_LATIN_SUPS_SMALL, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_LATIN_SUPS_SMALL, 0 }, { TA_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_LISU_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_LISU_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_MALAYALAM_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_MALAYALAM_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_MYANMAR_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_MYANMAR_BOTTOM, 0 }, { TA_BLUE_STRING_MYANMAR_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_MYANMAR_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_NKO_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_NKO_BOTTOM, 0 }, { TA_BLUE_STRING_NKO_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_NKO_SMALL_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_OL_CHIKI, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_OL_CHIKI, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_OLD_TURKIC_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_OLD_TURKIC_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_OSAGE_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_OSAGE_CAPITAL_BOTTOM, 0 }, { TA_BLUE_STRING_OSAGE_CAPITAL_DESCENDER, 0 }, { TA_BLUE_STRING_OSAGE_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_OSAGE_SMALL_BOTTOM, 0 }, { TA_BLUE_STRING_OSAGE_SMALL_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_OSAGE_SMALL_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_OSMANYA_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_OSMANYA_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_SAURASHTRA_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_SAURASHTRA_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_SHAVIAN_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_SHAVIAN_BOTTOM, 0 }, { TA_BLUE_STRING_SHAVIAN_DESCENDER, 0 }, { TA_BLUE_STRING_SHAVIAN_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_SHAVIAN_SMALL_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_SINHALA_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_SINHALA_BOTTOM, 0 }, { TA_BLUE_STRING_SINHALA_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_SUNDANESE_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_SUNDANESE_BOTTOM, 0 }, { TA_BLUE_STRING_SUNDANESE_DESCENDER, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_TAMIL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_TAMIL_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_TAI_VIET_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_TAI_VIET_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_TELUGU_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_TELUGU_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_THAI_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT }, { TA_BLUE_STRING_THAI_BOTTOM, 0 }, { TA_BLUE_STRING_THAI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_THAI_LARGE_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_THAI_DESCENDER, 0 }, { TA_BLUE_STRING_THAI_LARGE_DESCENDER, 0 }, { TA_BLUE_STRING_THAI_DIGIT_TOP, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_TIFINAGH, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_TIFINAGH, 0 }, { TA_BLUE_STRING_MAX, 0 }, { TA_BLUE_STRING_VAI_TOP, TA_BLUE_PROPERTY_LATIN_TOP }, { TA_BLUE_STRING_VAI_BOTTOM, 0 }, { TA_BLUE_STRING_MAX, 0 }, }; /* end of tablue.c */ ttfautohint-1.8.1/lib/tablue.h0000644000175000001440000003102413222451061016122 0ustar00wlusers00000000000000/* This file has been generated by the Perl script `afblue.pl', */ /* using data from file `./tablue.dat'. */ /* tablue.h */ /* * Copyright (C) 2013-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afblue.h' (2013-Sep-11) from FreeType */ #ifndef TABLUE_H_ #define TABLUE_H_ /* an auxiliary macro to decode a UTF-8 character -- since we only use */ /* hard-coded, self-converted data, no error checking is performed */ #define GET_UTF8_CHAR(ch, p) \ do \ { \ ch = (unsigned char)*p++; \ if (ch >= 0x80) \ { \ FT_UInt len_; \ \ \ if (ch < 0xE0) \ { \ len_ = 1; \ ch &= 0x1F; \ } \ else if (ch < 0xF0) \ { \ len_ = 2; \ ch &= 0x0F; \ } \ else \ { \ len_ = 3;\ ch &= 0x07; \ } \ \ for (; len_ > 0; len_--) \ ch = (ch << 6) | (*p++ & 0x3F); \ } \ } while (0) /**************************************************************** * * BLUE STRINGS * ****************************************************************/ /* At the bottommost level, we define strings for finding blue zones. */ #define TA_BLUE_STRING_MAX_LEN 27 /* The TA_Blue_String enumeration values are offsets into the */ /* `ta_blue_strings' array. */ typedef enum TA_Blue_String_ { TA_BLUE_STRING_ADLAM_CAPITAL_TOP = 0, TA_BLUE_STRING_ADLAM_CAPITAL_BOTTOM = 30, TA_BLUE_STRING_ADLAM_SMALL_TOP = 40, TA_BLUE_STRING_ADLAM_SMALL_BOTTOM = 65, TA_BLUE_STRING_ARABIC_TOP = 105, TA_BLUE_STRING_ARABIC_BOTTOM = 123, TA_BLUE_STRING_ARABIC_JOIN = 138, TA_BLUE_STRING_ARMENIAN_CAPITAL_TOP = 141, TA_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM = 165, TA_BLUE_STRING_ARMENIAN_SMALL_ASCENDER = 189, TA_BLUE_STRING_ARMENIAN_SMALL_TOP = 210, TA_BLUE_STRING_ARMENIAN_SMALL_BOTTOM = 234, TA_BLUE_STRING_ARMENIAN_SMALL_DESCENDER = 258, TA_BLUE_STRING_AVESTAN_TOP = 282, TA_BLUE_STRING_AVESTAN_BOTTOM = 302, TA_BLUE_STRING_BAMUM_TOP = 312, TA_BLUE_STRING_BAMUM_BOTTOM = 344, TA_BLUE_STRING_BENGALI_BASE = 376, TA_BLUE_STRING_BENGALI_TOP = 408, TA_BLUE_STRING_BENGALI_HEAD = 436, TA_BLUE_STRING_BUHID_TOP = 468, TA_BLUE_STRING_BUHID_LARGE = 476, TA_BLUE_STRING_BUHID_SMALL = 488, TA_BLUE_STRING_BUHID_BOTTOM = 504, TA_BLUE_STRING_CANADIAN_SYLLABICS_TOP = 532, TA_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM = 564, TA_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP = 596, TA_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM = 628, TA_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP = 660, TA_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM = 688, TA_BLUE_STRING_CARIAN_TOP = 720, TA_BLUE_STRING_CARIAN_BOTTOM = 760, TA_BLUE_STRING_CHAKMA_TOP = 795, TA_BLUE_STRING_CHAKMA_BOTTOM = 820, TA_BLUE_STRING_CHAKMA_DESCENDER = 845, TA_BLUE_STRING_CHEROKEE_CAPITAL = 910, TA_BLUE_STRING_CHEROKEE_SMALL_ASCENDER = 942, TA_BLUE_STRING_CHEROKEE_SMALL = 974, TA_BLUE_STRING_CHEROKEE_SMALL_DESCENDER = 1006, TA_BLUE_STRING_COPTIC_CAPITAL_TOP = 1022, TA_BLUE_STRING_COPTIC_CAPITAL_BOTTOM = 1054, TA_BLUE_STRING_COPTIC_SMALL_TOP = 1086, TA_BLUE_STRING_COPTIC_SMALL_BOTTOM = 1118, TA_BLUE_STRING_CYPRIOT_TOP = 1150, TA_BLUE_STRING_CYPRIOT_BOTTOM = 1190, TA_BLUE_STRING_CYPRIOT_SMALL = 1225, TA_BLUE_STRING_CYRILLIC_CAPITAL_TOP = 1240, TA_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM = 1264, TA_BLUE_STRING_CYRILLIC_SMALL = 1288, TA_BLUE_STRING_CYRILLIC_SMALL_DESCENDER = 1312, TA_BLUE_STRING_DESERET_CAPITAL_TOP = 1321, TA_BLUE_STRING_DESERET_CAPITAL_BOTTOM = 1346, TA_BLUE_STRING_DESERET_SMALL_TOP = 1371, TA_BLUE_STRING_DESERET_SMALL_BOTTOM = 1396, TA_BLUE_STRING_DEVANAGARI_BASE = 1421, TA_BLUE_STRING_DEVANAGARI_TOP = 1453, TA_BLUE_STRING_DEVANAGARI_HEAD = 1485, TA_BLUE_STRING_DEVANAGARI_BOTTOM = 1517, TA_BLUE_STRING_ETHIOPIC_TOP = 1525, TA_BLUE_STRING_ETHIOPIC_BOTTOM = 1557, TA_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP = 1589, TA_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM = 1621, TA_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER = 1653, TA_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER = 1685, TA_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP = 1717, TA_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM = 1749, TA_BLUE_STRING_GEORGIAN_NUSKHURI_TOP = 1781, TA_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM = 1813, TA_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER = 1845, TA_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER = 1877, TA_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP = 1909, TA_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM = 1941, TA_BLUE_STRING_GLAGOLITIC_SMALL_TOP = 1973, TA_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM = 2005, TA_BLUE_STRING_GOTHIC_TOP = 2037, TA_BLUE_STRING_GOTHIC_BOTTOM = 2077, TA_BLUE_STRING_GREEK_CAPITAL_TOP = 2097, TA_BLUE_STRING_GREEK_CAPITAL_BOTTOM = 2118, TA_BLUE_STRING_GREEK_SMALL_BETA_TOP = 2136, TA_BLUE_STRING_GREEK_SMALL = 2154, TA_BLUE_STRING_GREEK_SMALL_DESCENDER = 2178, TA_BLUE_STRING_GUJARATI_TOP = 2202, TA_BLUE_STRING_GUJARATI_BOTTOM = 2234, TA_BLUE_STRING_GUJARATI_ASCENDER = 2266, TA_BLUE_STRING_GUJARATI_DESCENDER = 2316, TA_BLUE_STRING_GUJARATI_DIGIT_TOP = 2349, TA_BLUE_STRING_GURMUKHI_BASE = 2369, TA_BLUE_STRING_GURMUKHI_HEAD = 2401, TA_BLUE_STRING_GURMUKHI_TOP = 2433, TA_BLUE_STRING_GURMUKHI_BOTTOM = 2465, TA_BLUE_STRING_GURMUKHI_DIGIT_TOP = 2497, TA_BLUE_STRING_HEBREW_TOP = 2517, TA_BLUE_STRING_HEBREW_BOTTOM = 2541, TA_BLUE_STRING_HEBREW_DESCENDER = 2559, TA_BLUE_STRING_KANNADA_TOP = 2574, TA_BLUE_STRING_KANNADA_BOTTOM = 2618, TA_BLUE_STRING_KAYAH_LI_TOP = 2650, TA_BLUE_STRING_KAYAH_LI_BOTTOM = 2674, TA_BLUE_STRING_KAYAH_LI_ASCENDER = 2694, TA_BLUE_STRING_KAYAH_LI_DESCENDER = 2702, TA_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER = 2714, TA_BLUE_STRING_KHMER_TOP = 2735, TA_BLUE_STRING_KHMER_SUBSCRIPT_TOP = 2759, TA_BLUE_STRING_KHMER_BOTTOM = 2799, TA_BLUE_STRING_KHMER_DESCENDER = 2831, TA_BLUE_STRING_KHMER_LARGE_DESCENDER = 2865, TA_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP = 2952, TA_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM = 2960, TA_BLUE_STRING_LAO_TOP = 2968, TA_BLUE_STRING_LAO_BOTTOM = 3000, TA_BLUE_STRING_LAO_ASCENDER = 3032, TA_BLUE_STRING_LAO_LARGE_ASCENDER = 3048, TA_BLUE_STRING_LAO_DESCENDER = 3060, TA_BLUE_STRING_LATIN_CAPITAL_TOP = 3084, TA_BLUE_STRING_LATIN_CAPITAL_BOTTOM = 3100, TA_BLUE_STRING_LATIN_SMALL_F_TOP = 3116, TA_BLUE_STRING_LATIN_SMALL_TOP = 3130, TA_BLUE_STRING_LATIN_SMALL_BOTTOM = 3146, TA_BLUE_STRING_LATIN_SMALL_DESCENDER = 3162, TA_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP = 3172, TA_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM = 3192, TA_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP = 3212, TA_BLUE_STRING_LATIN_SUBS_SMALL = 3232, TA_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER = 3268, TA_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP = 3288, TA_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM = 3319, TA_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP = 3348, TA_BLUE_STRING_LATIN_SUPS_SMALL = 3374, TA_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER = 3399, TA_BLUE_STRING_LISU_TOP = 3410, TA_BLUE_STRING_LISU_BOTTOM = 3442, TA_BLUE_STRING_MALAYALAM_TOP = 3474, TA_BLUE_STRING_MALAYALAM_BOTTOM = 3518, TA_BLUE_STRING_MYANMAR_TOP = 3550, TA_BLUE_STRING_MYANMAR_BOTTOM = 3582, TA_BLUE_STRING_MYANMAR_ASCENDER = 3614, TA_BLUE_STRING_MYANMAR_DESCENDER = 3642, TA_BLUE_STRING_NKO_TOP = 3674, TA_BLUE_STRING_NKO_BOTTOM = 3698, TA_BLUE_STRING_NKO_SMALL_TOP = 3713, TA_BLUE_STRING_NKO_SMALL_BOTTOM = 3722, TA_BLUE_STRING_OL_CHIKI = 3734, TA_BLUE_STRING_OLD_TURKIC_TOP = 3758, TA_BLUE_STRING_OLD_TURKIC_BOTTOM = 3773, TA_BLUE_STRING_OSAGE_CAPITAL_TOP = 3793, TA_BLUE_STRING_OSAGE_CAPITAL_BOTTOM = 3833, TA_BLUE_STRING_OSAGE_CAPITAL_DESCENDER = 3863, TA_BLUE_STRING_OSAGE_SMALL_TOP = 3878, TA_BLUE_STRING_OSAGE_SMALL_BOTTOM = 3918, TA_BLUE_STRING_OSAGE_SMALL_ASCENDER = 3958, TA_BLUE_STRING_OSAGE_SMALL_DESCENDER = 3983, TA_BLUE_STRING_OSMANYA_TOP = 3998, TA_BLUE_STRING_OSMANYA_BOTTOM = 4038, TA_BLUE_STRING_SAURASHTRA_TOP = 4078, TA_BLUE_STRING_SAURASHTRA_BOTTOM = 4110, TA_BLUE_STRING_SHAVIAN_TOP = 4130, TA_BLUE_STRING_SHAVIAN_BOTTOM = 4140, TA_BLUE_STRING_SHAVIAN_DESCENDER = 4165, TA_BLUE_STRING_SHAVIAN_SMALL_TOP = 4175, TA_BLUE_STRING_SHAVIAN_SMALL_BOTTOM = 4210, TA_BLUE_STRING_SINHALA_TOP = 4225, TA_BLUE_STRING_SINHALA_BOTTOM = 4257, TA_BLUE_STRING_SINHALA_DESCENDER = 4289, TA_BLUE_STRING_SUNDANESE_TOP = 4333, TA_BLUE_STRING_SUNDANESE_BOTTOM = 4357, TA_BLUE_STRING_SUNDANESE_DESCENDER = 4389, TA_BLUE_STRING_TAI_VIET_TOP = 4397, TA_BLUE_STRING_TAI_VIET_BOTTOM = 4417, TA_BLUE_STRING_TAMIL_TOP = 4429, TA_BLUE_STRING_TAMIL_BOTTOM = 4461, TA_BLUE_STRING_TELUGU_TOP = 4493, TA_BLUE_STRING_TELUGU_BOTTOM = 4521, TA_BLUE_STRING_THAI_TOP = 4549, TA_BLUE_STRING_THAI_BOTTOM = 4573, TA_BLUE_STRING_THAI_ASCENDER = 4601, TA_BLUE_STRING_THAI_LARGE_ASCENDER = 4613, TA_BLUE_STRING_THAI_DESCENDER = 4625, TA_BLUE_STRING_THAI_LARGE_DESCENDER = 4641, TA_BLUE_STRING_THAI_DIGIT_TOP = 4649, TA_BLUE_STRING_TIFINAGH = 4661, TA_BLUE_STRING_VAI_TOP = 4693, TA_BLUE_STRING_VAI_BOTTOM = 4725, TA_BLUE_STRING_MAX /* do not remove */ } TA_Blue_String; extern const char ta_blue_strings[]; /**************************************************************** * * BLUE STRINGSETS * ****************************************************************/ /* The next level is to group blue strings into style-specific sets. */ /* Properties are specific to a writing system. We assume that a given */ /* blue string can't be used in more than a single writing system, which */ /* is a safe bet. */ #define TA_BLUE_PROPERTY_LATIN_TOP (1U << 0) /* must have value 1 */ #define TA_BLUE_PROPERTY_LATIN_SUB_TOP (1U << 1) #define TA_BLUE_PROPERTY_LATIN_NEUTRAL (1U << 2) #define TA_BLUE_PROPERTY_LATIN_X_HEIGHT (1U << 3) #define TA_BLUE_PROPERTY_LATIN_LONG (1U << 4) #define TA_BLUE_STRINGSET_MAX_LEN 8 /* The TA_Blue_Stringset enumeration values are offsets into the */ /* `ta_blue_stringsets' array. */ typedef enum TA_Blue_Stringset_ { TA_BLUE_STRINGSET_ADLM = 0, TA_BLUE_STRINGSET_ARAB = 5, TA_BLUE_STRINGSET_ARMN = 9, TA_BLUE_STRINGSET_AVST = 16, TA_BLUE_STRINGSET_BAMU = 19, TA_BLUE_STRINGSET_BENG = 22, TA_BLUE_STRINGSET_BUHD = 27, TA_BLUE_STRINGSET_CAKM = 32, TA_BLUE_STRINGSET_CANS = 36, TA_BLUE_STRINGSET_CARI = 43, TA_BLUE_STRINGSET_CHER = 46, TA_BLUE_STRINGSET_COPT = 53, TA_BLUE_STRINGSET_CPRT = 58, TA_BLUE_STRINGSET_CYRL = 63, TA_BLUE_STRINGSET_DEVA = 69, TA_BLUE_STRINGSET_DSRT = 75, TA_BLUE_STRINGSET_ETHI = 80, TA_BLUE_STRINGSET_GEOR = 83, TA_BLUE_STRINGSET_GEOK = 88, TA_BLUE_STRINGSET_GLAG = 95, TA_BLUE_STRINGSET_GOTH = 100, TA_BLUE_STRINGSET_GREK = 103, TA_BLUE_STRINGSET_GUJR = 110, TA_BLUE_STRINGSET_GURU = 116, TA_BLUE_STRINGSET_HEBR = 122, TA_BLUE_STRINGSET_KALI = 126, TA_BLUE_STRINGSET_KNDA = 132, TA_BLUE_STRINGSET_KHMR = 135, TA_BLUE_STRINGSET_KHMS = 141, TA_BLUE_STRINGSET_LAO = 144, TA_BLUE_STRINGSET_LATN = 150, TA_BLUE_STRINGSET_LATB = 157, TA_BLUE_STRINGSET_LATP = 164, TA_BLUE_STRINGSET_LISU = 171, TA_BLUE_STRINGSET_MLYM = 174, TA_BLUE_STRINGSET_MYMR = 177, TA_BLUE_STRINGSET_NKOO = 182, TA_BLUE_STRINGSET_NONE = 187, TA_BLUE_STRINGSET_OLCK = 188, TA_BLUE_STRINGSET_ORKH = 191, TA_BLUE_STRINGSET_OSGE = 194, TA_BLUE_STRINGSET_OSMA = 202, TA_BLUE_STRINGSET_SAUR = 205, TA_BLUE_STRINGSET_SHAW = 208, TA_BLUE_STRINGSET_SINH = 214, TA_BLUE_STRINGSET_SUND = 218, TA_BLUE_STRINGSET_TAML = 222, TA_BLUE_STRINGSET_TAVT = 225, TA_BLUE_STRINGSET_TELU = 228, TA_BLUE_STRINGSET_THAI = 231, TA_BLUE_STRINGSET_TFNG = 239, TA_BLUE_STRINGSET_VAII = 242, TA_BLUE_STRINGSET_MAX /* do not remove */ } TA_Blue_Stringset; typedef struct TA_Blue_StringRec_ { TA_Blue_String string; FT_UShort properties; } TA_Blue_StringRec; extern const TA_Blue_StringRec ta_blue_stringsets[]; #endif /* TABLUE_H_ */ /* end of tablue.h */ ttfautohint-1.8.1/lib/tabytecode.c0000644000175000001440000023143013210453502016766 0ustar00wlusers00000000000000/* tabytecode.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" #include /* for llrb.h */ #include "llrb.h" /* a red-black tree implementation */ #include "tahints.h" #define DEBUGGING #ifdef TA_DEBUG int _ta_debug = 0; int _ta_debug_global = 0; int _ta_debug_disable_horz_hints; int _ta_debug_disable_vert_hints; int _ta_debug_disable_blue_hints; void* _ta_debug_hints; #endif /* node structures for point hints */ typedef struct Node1 Node1; struct Node1 { LLRB_ENTRY(Node1) entry1; FT_UShort point; }; typedef struct Node2 Node2; struct Node2 { LLRB_ENTRY(Node2) entry2; FT_UShort edge; FT_UShort point; }; typedef struct Node3 Node3; struct Node3 { LLRB_ENTRY(Node3) entry3; FT_UShort before_edge; FT_UShort after_edge; FT_UShort point; }; /* comparison functions for our red-black trees */ static int node1cmp(Node1* e1, Node1* e2) { /* sort by points */ return e1->point - e2->point; } static int node2cmp(Node2* e1, Node2* e2) { FT_Int delta; /* sort by edges ... */ delta = (FT_Int)e1->edge - (FT_Int)e2->edge; if (delta) return delta; /* ... then by points */ return (FT_Int)e1->point - (FT_Int)e2->point; } static int node3cmp(Node3* e1, Node3* e2) { FT_Int delta; /* sort by `before' edges ... */ delta = (FT_Int)e1->before_edge - (FT_Int)e2->before_edge; if (delta) return delta; /* ... then by `after' edges ... */ delta = (FT_Int)e1->after_edge - (FT_Int)e2->after_edge; if (delta) return delta; /* ... then by points */ return (FT_Int)e1->point - (FT_Int)e2->point; } /* the red-black tree function bodies */ typedef struct ip_before_points ip_before_points; typedef struct ip_after_points ip_after_points; typedef struct ip_on_points ip_on_points; typedef struct ip_between_points ip_between_points; LLRB_HEAD(ip_before_points, Node1); LLRB_HEAD(ip_after_points, Node1); LLRB_HEAD(ip_on_points, Node2); LLRB_HEAD(ip_between_points, Node3); /* no trailing semicolon in the next four lines */ LLRB_GENERATE_STATIC(ip_before_points, Node1, entry1, node1cmp) LLRB_GENERATE_STATIC(ip_after_points, Node1, entry1, node1cmp) LLRB_GENERATE_STATIC(ip_on_points, Node2, entry2, node2cmp) LLRB_GENERATE_STATIC(ip_between_points, Node3, entry3, node3cmp) typedef struct Hints_Record_ { FT_UInt size; FT_UInt num_actions; FT_Byte* buf; FT_UInt buf_len; } Hints_Record; typedef struct Recorder_ { SFNT* sfnt; FONT* font; GLYPH* glyph; /* the current glyph */ Hints_Record hints_record; /* some segments can `wrap around' */ /* a contour's start point like 24-25-26-0-1-2 */ /* (there can be at most one such segment per contour); */ /* later on we append additional records */ /* to split them into 24-26 and 0-2 */ FT_UShort* wrap_around_segments; FT_UShort num_wrap_around_segments; FT_Bool wrap_around_segments_initialized; FT_UShort num_stack_elements; /* the necessary stack depth so far */ /* data necessary for strong point interpolation */ ip_before_points ip_before_points_head; ip_after_points ip_after_points_head; ip_on_points ip_on_points_head; ip_between_points ip_between_points_head; /* we omit one-point segments not part of an edge, */ /* thus we have to adjust indices into the `segments' array */ FT_UShort* segment_map; FT_Bool segment_map_initialized; } Recorder; /* this is the bytecode of the `.ttfautohint' glyph */ FT_Byte ttfautohint_glyph_bytecode[7] = { /* increment `cvtl_is_subglyph' counter */ PUSHB_3, cvtl_is_subglyph, 100, cvtl_is_subglyph, RCVT, ADD, WCVTP, }; /* if we have y delta exceptions before IUP_y, this code gets inserted */ static FT_Byte ins_extra_delta_exceptions[4] = { /* tell bci_{scale,scale_composite,hint}_glyph to not call IUP_y */ PUSHB_2, cvtl_do_iup_y, 0, WCVTP, }; /* if we have a non-base glyph, this code gets inserted */ static FT_Byte ins_extra_ignore_std_width[4] = { /* tell bci_{smooth,strong}_stem_width to ignore std_width */ PUSHB_2, cvtl_ignore_std_width, 100, WCVTP, }; /* * convert array `args' into a sequence of NPUSHB, NPUSHW, PUSHB_X, and * PUSHW_X instructions to be stored in `bufp' (the latter two instructions * only if `optimize' is not set); if `need_words' is set, NPUSHW and * PUSHW_X gets used */ FT_Byte* TA_build_push(FT_Byte* bufp, FT_UInt* args, FT_UInt num_args, FT_Bool need_words, FT_Bool optimize) { FT_UInt* arg = args; FT_UInt i, j, nargs; if (need_words) { for (i = 0; i < num_args; i += 255) { nargs = (num_args - i > 255) ? 255 : num_args - i; if (optimize && nargs <= 8) BCI(PUSHW_1 - 1 + nargs); else { BCI(NPUSHW); BCI(nargs); } for (j = 0; j < nargs; j++) { BCI(HIGH(*arg)); BCI(LOW(*arg)); arg++; } } } else { for (i = 0; i < num_args; i += 255) { nargs = (num_args - i > 255) ? 255 : num_args - i; if (optimize && nargs <= 8) BCI(PUSHB_1 - 1 + nargs); else { BCI(NPUSHB); BCI(nargs); } for (j = 0; j < nargs; j++) { BCI(*arg); arg++; } } } return bufp; } /* * We optimize two common cases, replacing * * NPUSHB A ... NPUSHB B [... NPUSHB C] ... CALL * * with * * NPUSHB (A+B[+C]) ... CALL * * if possible */ static FT_Byte* TA_optimize_push(FT_Byte* buf, FT_Byte** pos) { FT_Byte sizes[3]; FT_Byte new_size1; FT_Byte new_size2; FT_UInt sum; FT_UInt i; FT_UInt pos_idx; FT_Byte* p; FT_Byte* bufp; /* XXX improve handling of NPUSHW */ if (*(pos[0]) == NPUSHW || *(pos[1]) == NPUSHW || *(pos[2]) == NPUSHW) return buf; /* the point hints records block can be missing */ if (pos[0] == pos[1]) { pos[1] = pos[2]; pos[2] = NULL; } /* only needed for the algorithm loops below */ pos[3] = NULL; /* there are at least two NPUSHB instructions */ /* (one of them directly at the start) */ sizes[0] = *(pos[0] + 1); sizes[1] = *(pos[1] + 1); sizes[2] = pos[2] ? *(pos[2] + 1) : 0; sum = sizes[0] + sizes[1] + sizes[2]; if (sum > 2 * 0xFF) return buf; /* nothing to do since we need three NPUSHB */ else if (!sizes[2] && (sum > 0xFF)) return buf; /* nothing to do since we need two NPUSHB */ if (sum > 0xFF) { /* reduce three NPUSHB to two */ new_size1 = 0xFF; new_size2 = (FT_Byte)(sum - 0xFF); } else { /* reduce two or three NPUSHB to one */ new_size1 = (FT_Byte)sum; new_size2 = 0; } /* pack data */ p = buf; bufp = buf; pos_idx = 0; if (new_size1 <= 8) BCI(PUSHB_1 - 1 + new_size1); else { BCI(NPUSHB); BCI(new_size1); } for (i = 0; i < new_size1; i++) { if (p == pos[pos_idx]) { pos_idx++; p += 2; /* skip old NPUSHB */ } *(bufp++) = *(p++); } if (new_size2) { if (new_size2 <= 8) BCI(PUSHB_1 - 1 + new_size2); else { BCI(NPUSHB); BCI(new_size2); } for (i = 0; i < new_size2; i++) { if (p == pos[pos_idx]) { pos_idx++; p += 2; } *(bufp++) = *(p++); } } BCI(CALL); return bufp; } /* We add a subglyph for each composite glyph. */ /* Since subglyphs must contain at least one point, */ /* we have to adjust all point indices accordingly. */ /* Using the `pointsums' array of the `GLYPH' structure */ /* it is straightforward to do that: */ /* Assuming that point with index x is in the interval */ /* pointsums[n] <= x < pointsums[n + 1], */ /* the new point index is x + n. */ static FT_UInt TA_adjust_point_index(Recorder* recorder, FT_UInt idx) { FONT* font = recorder->font; GLYPH* glyph = recorder->glyph; FT_UShort i; if (!glyph->num_components || !font->hint_composites) return idx; /* not a composite glyph */ for (i = 0; i < glyph->num_pointsums; i++) if (idx < glyph->pointsums[i]) break; return idx + i; } /* We omit one-point segments not part of an edge, */ /* thus we have to adjust indices into the `segments' array. */ /* If `segment' is NULL, the number of all segments */ /* without non-edge one-point segments is returned. */ static FT_UShort TA_get_segment_index(TA_Segment segment, Recorder* recorder) { FONT* font = recorder->font; TA_GlyphHints hints = &font->loader->hints; TA_AxisHints axis = &hints->axis[TA_DIMENSION_VERT]; return segment ? recorder->segment_map[segment - axis->segments] : recorder->segment_map[axis->num_segments]; } /* we store the segments in the storage area; */ /* each segment record consists of the first and last point */ static FT_Byte* TA_sfnt_build_glyph_segments(SFNT* sfnt, Recorder* recorder, FT_Byte* bufp, FT_Bool optimize) { FONT* font = recorder->font; TA_GlyphHints hints = &font->loader->hints; TA_AxisHints axis = &hints->axis[TA_DIMENSION_VERT]; TA_Point points = hints->points; TA_Segment segments = axis->segments; TA_Segment seg; TA_Segment seg_limit; SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; FT_UInt style_id = data->style_ids [font->loader->metrics->style_class->style]; FT_Outline outline = font->loader->gloader->base.outline; FT_UInt* args; FT_UInt* arg; FT_UInt num_args; FT_UShort num_segments; FT_Bool need_words = 0; FT_Int n; FT_UInt base; FT_UShort num_packed_segments; FT_UShort num_storage; FT_UShort num_stack_elements; FT_UShort num_twilight_points; seg_limit = segments + axis->num_segments; num_segments = TA_get_segment_index(NULL, recorder); /* to pack the data in the bytecode more tightly, */ /* we store up to the first nine segments in nibbles if possible, */ /* using delta values */ base = 0; num_packed_segments = 0; for (seg = segments; seg < seg_limit; seg++) { FT_UInt first = (FT_UInt)(seg->first - points); FT_UInt last = (FT_UInt)(seg->last - points); if (TA_get_segment_index(seg, recorder) == 0xFFFF) continue; first = TA_adjust_point_index(recorder, first); last = TA_adjust_point_index(recorder, last); if (first - base >= 16) break; if (first > last || last - first >= 16) break; if (num_packed_segments == 9) break; num_packed_segments++; base = last; } /* also handle wrap-around segments */ num_segments += recorder->num_wrap_around_segments; /* wrap-around segments are pushed with four arguments; */ /* a segment stored in nibbles needs only one byte instead of two */ num_args = num_packed_segments + 2 * (num_segments - num_packed_segments) + 2 * recorder->num_wrap_around_segments + 3; /* collect all arguments temporarily in an array (in reverse order) */ /* so that we can easily split into chunks of 255 args */ /* as needed by NPUSHB and NPUSHW, respectively */ args = (FT_UInt*)malloc(num_args * sizeof (FT_UInt)); if (!args) return NULL; arg = args + num_args - 1; if (num_segments > 0xFF) need_words = 1; /* the number of packed segments is indicated by the function number */ if (recorder->glyph->num_components && font->hint_composites) *(arg--) = bci_create_segments_composite_0 + num_packed_segments; else *(arg--) = bci_create_segments_0 + num_packed_segments; *(arg--) = CVT_SCALING_VALUE_OFFSET(style_id); *(arg--) = num_segments; base = 0; n = 0; for (seg = segments; seg < seg_limit; seg++) { FT_UInt first = (FT_UInt)(seg->first - points); FT_UInt last = (FT_UInt)(seg->last - points); FT_UInt low_nibble; FT_UInt high_nibble; if (TA_get_segment_index(seg, recorder) == 0xFFFF) continue; if (n >= num_packed_segments) break; first = TA_adjust_point_index(recorder, first); last = TA_adjust_point_index(recorder, last); low_nibble = first - base; high_nibble = last - first; *(arg--) = 16 * high_nibble + low_nibble; base = last; n++; } for (; seg < seg_limit; seg++) { FT_UInt first = (FT_UInt)(seg->first - points); FT_UInt last = (FT_UInt)(seg->last - points); if (TA_get_segment_index(seg, recorder) == 0xFFFF) continue; *(arg--) = TA_adjust_point_index(recorder, first); *(arg--) = TA_adjust_point_index(recorder, last); /* we push the last and first contour point */ /* as a third and fourth argument in wrap-around segments */ if (first > last) { for (n = 0; n < outline.n_contours; n++) { FT_UInt end = (FT_UInt)outline.contours[n]; if (first <= end) { *(arg--) = TA_adjust_point_index(recorder, end); if (end > 0xFF) need_words = 1; if (n == 0) *(arg--) = TA_adjust_point_index(recorder, 0); else *(arg--) = TA_adjust_point_index(recorder, (FT_UInt)outline.contours[n - 1] + 1); break; } } } if (last > 0xFF) need_words = 1; } /* emit the second part of wrap-around segments as separate segments */ /* so that edges can easily link to them */ for (seg = segments; seg < seg_limit; seg++) { FT_UInt first = (FT_UInt)(seg->first - points); FT_UInt last = (FT_UInt)(seg->last - points); if (TA_get_segment_index(seg, recorder) == 0xFFFF) continue; if (first > last) { for (n = 0; n < outline.n_contours; n++) { if (first <= (FT_UInt)outline.contours[n]) { if (n == 0) *(arg--) = TA_adjust_point_index(recorder, 0); else *(arg--) = TA_adjust_point_index(recorder, (FT_UInt)outline.contours[n - 1] + 1); break; } } *(arg--) = TA_adjust_point_index(recorder, last); } } /* with most fonts it is very rare */ /* that any of the pushed arguments is larger than 0xFF, */ /* thus we refrain from further optimizing this case */ bufp = TA_build_push(bufp, args, num_args, need_words, optimize); BCI(CALL); /* see storage area layout description in `tabytecode.h' */ num_storage = sal_segment_offset + num_segments * 3; if (num_storage > sfnt->max_storage) sfnt->max_storage = num_storage; num_twilight_points = num_segments * 2; if (num_twilight_points > sfnt->max_twilight_points) sfnt->max_twilight_points = num_twilight_points; /* both this function and `TA_emit_hints_record' */ /* push data onto the stack */ num_stack_elements = (FT_UShort)(ADDITIONAL_STACK_ELEMENTS + recorder->num_stack_elements + num_args); if (num_stack_elements > sfnt->max_stack_elements) sfnt->max_stack_elements = num_stack_elements; free(args); return bufp; } static void build_delta_exception(const Ctrl* ctrl, FT_UInt** delta_args, unsigned int* num_delta_args) { int offset; int ppem; int x_shift; int y_shift; ppem = ctrl->ppem - CONTROL_DELTA_PPEM_MIN; if (ppem < 16) offset = 0; else if (ppem < 32) offset = 1; else offset = 2; ppem -= offset << 4; /* * Using * * delta_shift = 3 , * * the possible shift values in the instructions are indexed as follows: * * 0 -1px * 1 -7/8px * ... * 7 -1/8px * 8 1/8px * ... * 14 7/8px * 15 1px * * (note that there is no index for a zero shift). */ if (ctrl->x_shift < 0) x_shift = ctrl->x_shift + 8; else x_shift = ctrl->x_shift + 7; if (ctrl->y_shift < 0) y_shift = ctrl->y_shift + 8; else y_shift = ctrl->y_shift + 7; /* add point index and exception specification to appropriate stack */ if (ctrl->x_shift) { *(delta_args[offset] + num_delta_args[offset]++) = (FT_UInt)((ppem << 4) + x_shift); *(delta_args[offset] + num_delta_args[offset]++) = (FT_UInt)ctrl->point_idx; } if (ctrl->y_shift) { offset += 3; *(delta_args[offset] + num_delta_args[offset]++) = (FT_UInt)((ppem << 4) + y_shift); *(delta_args[offset] + num_delta_args[offset]++) = (FT_UInt)ctrl->point_idx; } } static FT_Byte* TA_sfnt_build_delta_exceptions(SFNT* sfnt, FONT* font, FT_Long idx, FT_Byte* bufp) { SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; GLYPH* glyph = &data->glyphs[idx]; FT_Face face = font->loader->face; unsigned int num_points; int i; FT_UShort num_before_IUP_stack_elements = 0; FT_UShort num_after_IUP_stack_elements = 0; /* DELTAP[1-3] stacks for both x and y directions */ FT_UInt* delta_before_IUP_args[6] = {NULL, NULL, NULL, NULL, NULL, NULL}; FT_UInt* delta_after_IUP_args[6] = {NULL, NULL, NULL, NULL, NULL, NULL}; unsigned int num_delta_before_IUP_args[6] = {0, 0, 0, 0, 0, 0}; unsigned int num_delta_after_IUP_args[6] = {0, 0, 0, 0, 0, 0}; FT_UInt* args = NULL; FT_Bool need_before_IUP_words = 0; FT_Bool need_after_IUP_words = 0; FT_Bool need_before_IUP_word_counts = 0; FT_Bool need_after_IUP_word_counts = 0; FT_Bool allocated_before_IUP = 0; FT_Bool allocated_after_IUP = 0; num_points = (unsigned int)font->loader->gloader->base.outline.n_points; /* loop over all fitting control instructions */ for (;;) { const Ctrl* ctrl = TA_control_get_ctrl(font); if (!ctrl) break; /* check type */ if (!(ctrl->type == Control_Delta_before_IUP || ctrl->type == Control_Delta_after_IUP)) break; /* too large values of font and glyph indices in `ctrl' */ /* are handled by later calls of this function */ if (face->face_index < ctrl->font_idx || idx < ctrl->glyph_idx) break; if (ctrl->type == Control_Delta_before_IUP && !allocated_before_IUP) { for (i = 0; i < 6; i++) { /* see the comment on allocating `ins_buf' in function */ /* `TA_sfnt_build_glyph_instructions' for more on the array sizes; */ /* we have to increase by 2 to push the number of argument pairs */ /* and the function for a LOOPCALL instruction */ delta_before_IUP_args[i] = (FT_UInt*)malloc((16 * 2 * num_points + 2) * sizeof (FT_UInt)); if (!delta_before_IUP_args[i]) { bufp = NULL; goto Done; } } allocated_before_IUP = 1; } if (ctrl->type == Control_Delta_after_IUP && !allocated_after_IUP) { for (i = 0; i < 6; i++) { /* we have to increase by 1 for the number of argument pairs */ /* as needed by the DELTA instructions */ delta_after_IUP_args[i] = (FT_UInt*)malloc((16 * 2 * num_points + 1) * sizeof (FT_UInt)); if (!delta_after_IUP_args[i]) { bufp = NULL; goto Done; } } allocated_after_IUP = 1; } /* since we walk sequentially over all glyphs (with points), */ /* and the control instruction entries have the same order, */ /* we don't need to test for equality of font and glyph indices: */ /* at this very point in the code we certainly have a hit */ if (ctrl->type == Control_Delta_before_IUP) { build_delta_exception(ctrl, delta_before_IUP_args, num_delta_before_IUP_args); if (ctrl->point_idx > 255) need_before_IUP_words = 1; } else { build_delta_exception(ctrl, delta_after_IUP_args, num_delta_after_IUP_args); if (ctrl->point_idx > 255) need_after_IUP_words = 1; } TA_control_get_next(font); } /* nothing to do if no control instructions */ if (!(allocated_before_IUP || allocated_after_IUP)) return bufp; /* add number of argument pairs and function number to the stacks */ for (i = 0; i < 6; i++) { if (num_delta_before_IUP_args[i]) { unsigned int n = num_delta_before_IUP_args[i] >> 1; if (n > 255) need_before_IUP_word_counts = 1; *(delta_before_IUP_args[i] + num_delta_before_IUP_args[i]) = n; num_delta_before_IUP_args[i]++; *(delta_before_IUP_args[i] + num_delta_before_IUP_args[i]) = bci_deltap1 + (i % 3); num_delta_before_IUP_args[i]++; } } /* add number of argument pairs to the stacks */ for (i = 0; i < 6; i++) { if (num_delta_after_IUP_args[i]) { unsigned int n = num_delta_after_IUP_args[i] >> 1; if (n > 255) need_after_IUP_word_counts = 1; *(delta_after_IUP_args[i] + num_delta_after_IUP_args[i]) = n; num_delta_after_IUP_args[i]++; } } /* merge `before IUP' delta stacks into a single one */ if (need_before_IUP_words || (!need_before_IUP_words && !need_before_IUP_word_counts)) { FT_UInt num_args = 0; for (i = 0; i < 6; i++) { FT_UInt* args_new; FT_UInt num_args_new; if (!num_delta_before_IUP_args[i]) continue; num_args_new = num_args + num_delta_before_IUP_args[i]; args_new = (FT_UInt*)realloc(args, num_args_new * sizeof (FT_UInt)); if (!args_new) { bufp = NULL; goto Done; } memcpy(args_new + num_args, delta_before_IUP_args[i], num_delta_before_IUP_args[i] * sizeof (FT_UInt)); args = args_new; num_args = num_args_new; } num_before_IUP_stack_elements = (FT_UShort)num_args; bufp = TA_build_push(bufp, args, num_args, need_before_IUP_words, 1); } else { num_before_IUP_stack_elements = 0; /* stack elements are bytes, but counts need words */ for (i = 0; i < 6; i++) { FT_UInt num_delta_arg; if (!num_delta_before_IUP_args[i]) continue; num_delta_arg = num_delta_before_IUP_args[i] - 2; bufp = TA_build_push(bufp, delta_before_IUP_args[i], num_delta_arg, need_before_IUP_words, 1); num_before_IUP_stack_elements += num_delta_arg + 2; num_delta_arg >>= 1; BCI(PUSHW_1); BCI(HIGH(num_delta_arg)); BCI(LOW(num_delta_arg)); /* the function number */ BCI(PUSHB_1); BCI(delta_before_IUP_args[i][num_delta_before_IUP_args[i] - 1]); } } /* emit y DELTA opcodes (via `bci_deltap[1-3]' functions) */ if (num_delta_before_IUP_args[5]) BCI(LOOPCALL); if (num_delta_before_IUP_args[4]) BCI(LOOPCALL); if (num_delta_before_IUP_args[3]) BCI(LOOPCALL); if (num_delta_before_IUP_args[2] || num_delta_before_IUP_args[1] || num_delta_before_IUP_args[0]) BCI(SVTCA_x); /* emit x DELTA opcodes */ if (num_delta_before_IUP_args[2]) BCI(LOOPCALL); if (num_delta_before_IUP_args[1]) BCI(LOOPCALL); if (num_delta_before_IUP_args[0]) BCI(LOOPCALL); if (num_delta_before_IUP_args[2] || num_delta_before_IUP_args[1] || num_delta_before_IUP_args[0]) BCI(SVTCA_y); if (num_delta_before_IUP_args[5] || num_delta_before_IUP_args[4] || num_delta_before_IUP_args[3]) BCI(IUP_y); /* merge `after IUP' delta stacks into a single one */ if (need_after_IUP_words || (!need_after_IUP_words && !need_after_IUP_word_counts)) { FT_UInt num_args = 0; for (i = 0; i < 6; i++) { FT_UInt* args_new; FT_UInt num_args_new; if (!num_delta_after_IUP_args[i]) continue; num_args_new = num_args + num_delta_after_IUP_args[i]; args_new = (FT_UInt*)realloc(args, num_args_new * sizeof (FT_UInt)); if (!args_new) { bufp = NULL; goto Done; } memcpy(args_new + num_args, delta_after_IUP_args[i], num_delta_after_IUP_args[i] * sizeof (FT_UInt)); args = args_new; num_args = num_args_new; } num_after_IUP_stack_elements = (FT_UShort)num_args; bufp = TA_build_push(bufp, args, num_args, need_after_IUP_words, 1); } else { num_after_IUP_stack_elements = 0; /* stack elements are bytes, but counts need words */ for (i = 0; i < 6; i++) { FT_UInt num_delta_arg; if (!num_delta_after_IUP_args[i]) continue; num_delta_arg = num_delta_after_IUP_args[i] - 1; bufp = TA_build_push(bufp, delta_after_IUP_args[i], num_delta_arg, need_after_IUP_words, 1); num_after_IUP_stack_elements += num_delta_arg + 1; num_delta_arg >>= 1; BCI(PUSHW_1); BCI(HIGH(num_delta_arg)); BCI(LOW(num_delta_arg)); } } /* emit y DELTA opcodes */ if (num_delta_after_IUP_args[5]) BCI(DELTAP3); if (num_delta_after_IUP_args[4]) BCI(DELTAP2); if (num_delta_after_IUP_args[3]) BCI(DELTAP1); if (num_delta_after_IUP_args[2] || num_delta_after_IUP_args[1] || num_delta_after_IUP_args[0]) BCI(SVTCA_x); /* emit x DELTA opcodes */ if (num_delta_after_IUP_args[2]) BCI(DELTAP3); if (num_delta_after_IUP_args[1]) BCI(DELTAP2); if (num_delta_after_IUP_args[0]) BCI(DELTAP1); /* we need to insert a few extra bytecode instructions */ /* if we have y delta exceptions before IUP */ if (num_delta_before_IUP_args[5] || num_delta_before_IUP_args[4] || num_delta_before_IUP_args[3]) { FT_Byte* ins_extra_buf_new; FT_Byte ins_extra_len_new; ins_extra_len_new = glyph->ins_extra_len + sizeof (ins_extra_delta_exceptions); ins_extra_buf_new = (FT_Byte*)realloc(glyph->ins_extra_buf, ins_extra_len_new); if (!ins_extra_buf_new) { bufp = NULL; goto Done; } /* set `cvtl_do_iup_y' to zero at the beginning of the bytecode */ /* by activating `ins_extra_delta_exceptions' */ memcpy(ins_extra_buf_new + glyph->ins_extra_len, ins_extra_delta_exceptions, sizeof (ins_extra_delta_exceptions)); glyph->ins_extra_buf = ins_extra_buf_new; glyph->ins_extra_len = ins_extra_len_new; /* reset `cvtl_do_iup_y' for next glyph */ BCI(PUSHB_2); BCI(cvtl_do_iup_y); BCI(100); BCI(WCVTP); } Done: for (i = 0; i < 6; i++) { free(delta_before_IUP_args[i]); free(delta_after_IUP_args[i]); } free(args); if (num_before_IUP_stack_elements > sfnt->max_stack_elements) sfnt->max_stack_elements = num_before_IUP_stack_elements; if (num_after_IUP_stack_elements > sfnt->max_stack_elements) sfnt->max_stack_elements = num_after_IUP_stack_elements; return bufp; } static FT_Byte* TA_sfnt_build_glyph_scaler(SFNT* sfnt, Recorder* recorder, FT_Byte* bufp) { FONT* font = recorder->font; FT_GlyphSlot glyph = sfnt->face->glyph; FT_Vector* points = glyph->outline.points; FT_UInt num_contours = (FT_UInt)glyph->outline.n_contours; FT_UInt* args; FT_UInt* arg; FT_UInt num_args; FT_Bool need_words = 0; FT_UInt p, q; FT_UInt start, end; FT_UShort num_storage; FT_UShort num_stack_elements; num_args = 2 * num_contours + 2; /* collect all arguments temporarily in an array (in reverse order) */ /* so that we can easily split into chunks of 255 args */ /* as needed by NPUSHB and NPUSHW, respectively */ args = (FT_UInt*)malloc(num_args * sizeof (FT_UInt)); if (!args) return NULL; arg = args + num_args - 1; if (num_args > 0xFF) need_words = 1; if (recorder->glyph->num_components && font->hint_composites) *(arg--) = bci_scale_composite_glyph; else *(arg--) = bci_scale_glyph; *(arg--) = num_contours; start = 0; end = 0; for (p = 0; p < num_contours; p++) { FT_UInt max = start; FT_UInt min = start; end = (FT_UInt)glyph->outline.contours[p]; for (q = start; q <= end; q++) { if (points[q].y < points[min].y) min = q; if (points[q].y > points[max].y) max = q; } if (min > max) { *(arg--) = TA_adjust_point_index(recorder, max); *(arg--) = TA_adjust_point_index(recorder, min); } else { *(arg--) = TA_adjust_point_index(recorder, min); *(arg--) = TA_adjust_point_index(recorder, max); } start = end + 1; } if (end > 0xFF) need_words = 1; /* with most fonts it is very rare */ /* that any of the pushed arguments is larger than 0xFF, */ /* thus we refrain from further optimizing this case */ bufp = TA_build_push(bufp, args, num_args, need_words, 1); BCI(CALL); num_storage = sal_segment_offset; if (num_storage > sfnt->max_storage) sfnt->max_storage = num_storage; num_stack_elements = (FT_UShort)(ADDITIONAL_STACK_ELEMENTS + num_args); if (num_stack_elements > sfnt->max_stack_elements) sfnt->max_stack_elements = num_stack_elements; free(args); return bufp; } static FT_Byte* TA_font_build_subglyph_shifter(FONT* font, FT_Byte* bufp) { FT_Face face = font->loader->face; FT_GlyphSlot glyph = face->glyph; TA_GlyphLoader gloader = font->loader->gloader; TA_SubGlyph subglyphs = gloader->current.subglyphs; TA_SubGlyph subglyph_limit = subglyphs + gloader->current.num_subglyphs; TA_SubGlyph subglyph; FT_Int curr_contour = 0; for (subglyph = subglyphs; subglyph < subglyph_limit; subglyph++) { FT_Error error; FT_UShort flags = subglyph->flags; FT_Pos y_offset = subglyph->arg2; FT_Int num_contours; /* load subglyph to get the number of contours */ error = FT_Load_Glyph(face, (FT_UInt)subglyph->index, FT_LOAD_NO_SCALE); if (error) return NULL; num_contours = glyph->outline.n_contours; /* nothing to do if there is a point-to-point alignment */ if (!(flags & FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES)) goto End; /* nothing to do if y offset is zero */ if (!y_offset) goto End; /* nothing to do if there are no contours */ if (!num_contours) goto End; /* note that calling `FT_Load_Glyph' without FT_LOAD_NO_RECURSE */ /* ensures that composite subglyphs are represented as simple glyphs */ if (num_contours > 0xFF || curr_contour > 0xFF) { BCI(PUSHW_2); BCI(HIGH(curr_contour)); BCI(LOW(curr_contour)); BCI(HIGH(num_contours)); BCI(LOW(num_contours)); } else { BCI(PUSHB_2); BCI(curr_contour); BCI(num_contours); } /* there are high chances that this value needs PUSHW, */ /* thus we handle it separately */ if (y_offset > 0xFF || y_offset < 0) { BCI(PUSHW_1); BCI(HIGH(y_offset)); BCI(LOW(y_offset)); } else { BCI(PUSHB_1); BCI(y_offset); } BCI(PUSHB_1); BCI(bci_shift_subglyph); BCI(CALL); End: curr_contour += num_contours; } return bufp; } /* * The four `ta_ip_*' actions in the `TA_hints_recorder' callback store its * data in four arrays (which are simple but waste a lot of memory). The * function below converts them into bytecode. * * For `ta_ip_before' and `ta_ip_after', the collected points are emitted * together with the edge they correspond to. * * For both `ta_ip_on' and `ta_ip_between', an outer loop is constructed to * loop over the edge or edge pairs, respectively, and each edge or edge * pair contains an inner loop to emit the correponding points. */ static void TA_build_point_hints(Recorder* recorder, TA_GlyphHints hints) { TA_AxisHints axis = &hints->axis[TA_DIMENSION_VERT]; TA_Edge edges = axis->edges; FT_Byte* p = recorder->hints_record.buf; FT_UShort i; FT_UShort j; FT_UShort prev_edge; FT_UShort prev_before_edge; FT_UShort prev_after_edge; Node1* before_node; Node1* after_node; Node2* on_node; Node3* between_node; /* we store everything as 16bit numbers; */ /* the function numbers (`ta_ip_before', etc.) */ /* reflect the order in the TA_Action enumeration */ /* ip_before_points */ i = 0; for (before_node = LLRB_MIN(ip_before_points, &recorder->ip_before_points_head); before_node; before_node = LLRB_NEXT(ip_before_points, &recorder->ip_before_points_head, before_node)) { /* count points */ i++; } if (i) { TA_Edge edge; FT_UShort edge_first_idx; recorder->hints_record.num_actions++; edge = edges; edge_first_idx = TA_get_segment_index(edge->first, recorder); *(p++) = 0; *(p++) = (FT_Byte)ta_ip_before + ACTION_OFFSET; *(p++) = HIGH(edge_first_idx); *(p++) = LOW(edge_first_idx); *(p++) = HIGH(i); *(p++) = LOW(i); for (before_node = LLRB_MIN(ip_before_points, &recorder->ip_before_points_head); before_node; before_node = LLRB_NEXT(ip_before_points, &recorder->ip_before_points_head, before_node)) { FT_UInt point; point = TA_adjust_point_index(recorder, before_node->point); *(p++) = HIGH(point); *(p++) = LOW(point); } } /* ip_after_points */ i = 0; for (after_node = LLRB_MIN(ip_after_points, &recorder->ip_after_points_head); after_node; after_node = LLRB_NEXT(ip_after_points, &recorder->ip_after_points_head, after_node)) { /* count points */ i++; } if (i) { TA_Edge edge; FT_UShort edge_first_idx; recorder->hints_record.num_actions++; edge = edges + axis->num_edges - 1; edge_first_idx = TA_get_segment_index(edge->first, recorder); *(p++) = 0; *(p++) = (FT_Byte)ta_ip_after + ACTION_OFFSET; *(p++) = HIGH(edge_first_idx); *(p++) = LOW(edge_first_idx); *(p++) = HIGH(i); *(p++) = LOW(i); for (after_node = LLRB_MIN(ip_after_points, &recorder->ip_after_points_head); after_node; after_node = LLRB_NEXT(ip_after_points, &recorder->ip_after_points_head, after_node)) { FT_UInt point; point = TA_adjust_point_index(recorder, after_node->point); *(p++) = HIGH(point); *(p++) = LOW(point); } } /* ip_on_point_array */ prev_edge = 0xFFFF; i = 0; for (on_node = LLRB_MIN(ip_on_points, &recorder->ip_on_points_head); on_node; on_node = LLRB_NEXT(ip_on_points, &recorder->ip_on_points_head, on_node)) { /* count edges */ if (on_node->edge != prev_edge) { i++; prev_edge = on_node->edge; } } if (i) { recorder->hints_record.num_actions++; *(p++) = 0; *(p++) = (FT_Byte)ta_ip_on + ACTION_OFFSET; *(p++) = HIGH(i); *(p++) = LOW(i); for (on_node = LLRB_MIN(ip_on_points, &recorder->ip_on_points_head); on_node; on_node = LLRB_NEXT(ip_on_points, &recorder->ip_on_points_head, on_node)) { Node2* edge_node; TA_Edge edge; FT_UShort edge_first_idx; edge = edges + on_node->edge; edge_first_idx = TA_get_segment_index(edge->first, recorder); *(p++) = HIGH(edge_first_idx); *(p++) = LOW(edge_first_idx); /* save current position */ edge_node = on_node; j = 0; for (; on_node; on_node = LLRB_NEXT(ip_on_points, &recorder->ip_on_points_head, on_node)) { /* count points on current edge */ if (on_node->edge != edge_node->edge) break; j++; } *(p++) = HIGH(j); *(p++) = LOW(j); /* restore current position */ on_node = edge_node; for (; on_node; on_node = LLRB_NEXT(ip_on_points, &recorder->ip_on_points_head, on_node)) { FT_UInt point; if (on_node->edge != edge_node->edge) break; point = TA_adjust_point_index(recorder, on_node->point); *(p++) = HIGH(point); *(p++) = LOW(point); /* keep track of previous node */ edge_node = on_node; } /* reset loop iterator by one element, then continue */ on_node = edge_node; } } /* ip_between_point_array */ prev_before_edge = 0xFFFF; prev_after_edge = 0xFFFF; i = 0; for (between_node = LLRB_MIN(ip_between_points, &recorder->ip_between_points_head); between_node; between_node = LLRB_NEXT(ip_between_points, &recorder->ip_between_points_head, between_node)) { /* count `(before,after)' edge pairs */ if (between_node->before_edge != prev_before_edge || between_node->after_edge != prev_after_edge) { i++; prev_before_edge = between_node->before_edge; prev_after_edge = between_node->after_edge; } } if (i) { recorder->hints_record.num_actions++; *(p++) = 0; *(p++) = (FT_Byte)ta_ip_between + ACTION_OFFSET; *(p++) = HIGH(i); *(p++) = LOW(i); for (between_node = LLRB_MIN(ip_between_points, &recorder->ip_between_points_head); between_node; between_node = LLRB_NEXT(ip_between_points, &recorder->ip_between_points_head, between_node)) { Node3* edge_pair_node; TA_Edge before; TA_Edge after; FT_UShort before_first_idx; FT_UShort after_first_idx; before = edges + between_node->before_edge; after = edges + between_node->after_edge; before_first_idx = TA_get_segment_index(before->first, recorder); after_first_idx = TA_get_segment_index(after->first, recorder); *(p++) = HIGH(after_first_idx); *(p++) = LOW(after_first_idx); *(p++) = HIGH(before_first_idx); *(p++) = LOW(before_first_idx); /* save current position */ edge_pair_node = between_node; j = 0; for (; between_node; between_node = LLRB_NEXT(ip_between_points, &recorder->ip_between_points_head, between_node)) { /* count points associated with current edge pair */ if (between_node->before_edge != edge_pair_node->before_edge || between_node->after_edge != edge_pair_node->after_edge) break; j++; } *(p++) = HIGH(j); *(p++) = LOW(j); /* restore current position */ between_node = edge_pair_node; for (; between_node; between_node = LLRB_NEXT(ip_between_points, &recorder->ip_between_points_head, between_node)) { FT_UInt point; if (between_node->before_edge != edge_pair_node->before_edge || between_node->after_edge != edge_pair_node->after_edge) break; point = TA_adjust_point_index(recorder, between_node->point); *(p++) = HIGH(point); *(p++) = LOW(point); /* keep track of previous node */ edge_pair_node = between_node; } /* reset loop iterator by one element, then continue */ between_node = edge_pair_node; } } recorder->hints_record.buf = p; } static FT_Bool TA_hints_record_is_different(Hints_Record* hints_records, FT_UInt num_hints_records, FT_Byte* start, FT_Byte* end) { Hints_Record last_hints_record; if (!hints_records) return 1; /* we only need to compare with the last hints record */ last_hints_record = hints_records[num_hints_records - 1]; if ((FT_UInt)(end - start) != last_hints_record.buf_len) return 1; if (memcmp(start, last_hints_record.buf, last_hints_record.buf_len)) return 1; return 0; } static FT_Error TA_add_hints_record(Hints_Record** hints_records, FT_UInt* num_hints_records, FT_Byte* start, Hints_Record hints_record) { Hints_Record* hints_records_new; FT_UInt buf_len; /* at this point, `hints_record.buf' still points into `ins_buf' */ FT_Byte* end = hints_record.buf; buf_len = (FT_UInt)(end - start); /* now fill the structure completely */ hints_record.buf_len = buf_len; hints_record.buf = (FT_Byte*)malloc(buf_len); if (!hints_record.buf) return FT_Err_Out_Of_Memory; memcpy(hints_record.buf, start, buf_len); (*num_hints_records)++; hints_records_new = (Hints_Record*)realloc(*hints_records, *num_hints_records * sizeof (Hints_Record)); if (!hints_records_new) { free(hints_record.buf); (*num_hints_records)--; return FT_Err_Out_Of_Memory; } else *hints_records = hints_records_new; (*hints_records)[*num_hints_records - 1] = hints_record; return FT_Err_Ok; } static FT_Byte* TA_emit_hints_record(Recorder* recorder, Hints_Record* hints_record, FT_Byte* bufp, FT_Bool optimize) { FT_Byte* p; FT_Byte* endp; FT_Bool need_words = 0; FT_UInt i, j; FT_UInt num_arguments; FT_UInt num_args; /* check whether any argument is larger than 0xFF */ endp = hints_record->buf + hints_record->buf_len; for (p = hints_record->buf; p < endp; p += 2) if (*p) { need_words = 1; break; } /* with most fonts it is very rare */ /* that any of the pushed arguments is larger than 0xFF, */ /* thus we refrain from further optimizing this case */ num_arguments = hints_record->buf_len / 2; p = endp - 2; if (need_words) { for (i = 0; i < num_arguments; i += 255) { num_args = (num_arguments - i > 255) ? 255 : (num_arguments - i); if (optimize && num_args <= 8) BCI(PUSHW_1 - 1 + num_args); else { BCI(NPUSHW); BCI(num_args); } for (j = 0; j < num_args; j++) { BCI(*p); BCI(*(p + 1)); p -= 2; } } } else { /* we only need the lower bytes */ p++; for (i = 0; i < num_arguments; i += 255) { num_args = (num_arguments - i > 255) ? 255 : (num_arguments - i); if (optimize && num_args <= 8) BCI(PUSHB_1 - 1 + num_args); else { BCI(NPUSHB); BCI(num_args); } for (j = 0; j < num_args; j++) { BCI(*p); p -= 2; } } } /* collect stack depth data */ if (num_arguments > recorder->num_stack_elements) recorder->num_stack_elements = (FT_UShort)num_arguments; return bufp; } static FT_Byte* TA_emit_hints_records(Recorder* recorder, Hints_Record* hints_records, FT_UInt num_hints_records, FT_Byte* bufp, FT_Bool optimize) { FT_UInt i; Hints_Record* hints_record; hints_record = hints_records; /* emit hints records in `if' clauses, */ /* with the ppem size as the condition */ for (i = 0; i < num_hints_records - 1; i++) { BCI(MPPEM); if (hints_record->size > 0xFF) { BCI(PUSHW_1); BCI(HIGH((hints_record + 1)->size)); BCI(LOW((hints_record + 1)->size)); } else { BCI(PUSHB_1); BCI((hints_record + 1)->size); } BCI(LT); BCI(IF); bufp = TA_emit_hints_record(recorder, hints_record, bufp, optimize); BCI(ELSE); hints_record++; } bufp = TA_emit_hints_record(recorder, hints_record, bufp, optimize); for (i = 0; i < num_hints_records - 1; i++) BCI(EIF); return bufp; } static void TA_free_hints_records(Hints_Record* hints_records, FT_UInt num_hints_records) { FT_UInt i; for (i = 0; i < num_hints_records; i++) free(hints_records[i].buf); free(hints_records); } static FT_Byte* TA_hints_recorder_handle_segments(FT_Byte* bufp, Recorder* recorder, TA_Edge edge, FT_UShort* wraps) { TA_Segment seg; FT_UShort seg_idx; FT_UShort num_segs = 0; FT_UShort* wrap; FT_UShort num_segments; seg_idx = TA_get_segment_index(edge->first, recorder); num_segments = TA_get_segment_index(NULL, recorder); /* we store everything as 16bit numbers */ *(bufp++) = HIGH(seg_idx); *(bufp++) = LOW(seg_idx); /* wrap-around segments are stored as two segments */ if (edge->first->first > edge->first->last) num_segs++; seg = edge->first->edge_next; while (seg != edge->first) { num_segs++; if (seg->first > seg->last) num_segs++; seg = seg->edge_next; } *(bufp++) = HIGH(num_segs); *(bufp++) = LOW(num_segs); if (edge->first->first > edge->first->last) { /* emit second part of wrap-around segment; */ /* the bytecode positions such segments after `normal' ones */ wrap = wraps; for (;;) { if (seg_idx == *wrap) break; wrap++; } *(bufp++) = HIGH(num_segments + (wrap - wraps)); *(bufp++) = LOW(num_segments + (wrap - wraps)); } seg = edge->first->edge_next; while (seg != edge->first) { seg_idx = TA_get_segment_index(seg, recorder); *(bufp++) = HIGH(seg_idx); *(bufp++) = LOW(seg_idx); if (seg->first > seg->last) { wrap = wraps; for (;;) { if (seg_idx == *wrap) break; wrap++; } *(bufp++) = HIGH(num_segments + (wrap - wraps)); *(bufp++) = LOW(num_segments + (wrap - wraps)); } seg = seg->edge_next; } return bufp; } static void TA_hints_recorder(TA_Action action, TA_GlyphHints hints, TA_Dimension dim, void* arg1, TA_Edge arg2, TA_Edge arg3, TA_Edge lower_bound, TA_Edge upper_bound) { TA_AxisHints axis = &hints->axis[dim]; TA_Edge edges = axis->edges; TA_Point points = hints->points; TA_Segment segments = axis->segments; TA_Segment seg_limit = segments + axis->num_segments; TA_Segment seg; Recorder* recorder = (Recorder*)hints->user; SFNT* sfnt = recorder->sfnt; FONT* font = recorder->font; FT_UShort* wraps = recorder->wrap_around_segments; FT_Byte* p = recorder->hints_record.buf; TA_StyleClass style_class = font->loader->metrics->style_class; TA_ScriptClass script_class = ta_script_classes[style_class->script]; FT_UInt style = style_class->style; FT_Bool top_to_bottom_hinting = script_class->top_to_bottom_hinting; if (dim == TA_DIMENSION_HORZ) return; if (!recorder->segment_map_initialized) { FT_UShort* segment_map = recorder->segment_map; FT_UShort idx; idx = 0; for (seg = segments; seg < seg_limit; seg++) { if (seg->edge) *segment_map = idx++; else *segment_map = 0xFFFF; segment_map++; } *segment_map = idx; recorder->segment_map_initialized = 1; } if (!recorder->wrap_around_segments_initialized) { FT_UShort* wrap_around_segment; wrap_around_segment = recorder->wrap_around_segments; for (seg = segments; seg < seg_limit; seg++) if (seg->first > seg->last) *(wrap_around_segment++) = TA_get_segment_index(seg, recorder); recorder->wrap_around_segments_initialized = 1; } /* we collect point hints for later processing */ switch (action) { case ta_ip_before: { Node1* before_node; TA_Point point = (TA_Point)arg1; before_node = (Node1*)malloc(sizeof (Node1)); if (!before_node) return; before_node->point = (FT_UShort)(point - points); LLRB_INSERT(ip_before_points, &recorder->ip_before_points_head, before_node); } return; case ta_ip_after: { Node1* after_node; TA_Point point = (TA_Point)arg1; after_node = (Node1*)malloc(sizeof (Node1)); if (!after_node) return; after_node->point = (FT_UShort)(point - points); LLRB_INSERT(ip_after_points, &recorder->ip_after_points_head, after_node); } return; case ta_ip_on: { Node2* on_node; TA_Point point = (TA_Point)arg1; TA_Edge edge = arg2; on_node = (Node2*)malloc(sizeof (Node2)); if (!on_node) return; on_node->edge = (FT_UShort)(edge - edges); on_node->point = (FT_UShort)(point - points); LLRB_INSERT(ip_on_points, &recorder->ip_on_points_head, on_node); } return; case ta_ip_between: { Node3* between_node; TA_Point point = (TA_Point)arg1; TA_Edge before = arg2; TA_Edge after = arg3; between_node = (Node3*)malloc(sizeof (Node3)); if (!between_node) return; between_node->before_edge = (FT_UShort)(before - edges); between_node->after_edge = (FT_UShort)(after - edges); between_node->point = (FT_UShort)(point - points); LLRB_INSERT(ip_between_points, &recorder->ip_between_points_head, between_node); } return; case ta_bound: /* we ignore the BOUND action since we signal this information */ /* with the proper function number */ return; default: break; } /* some enum values correspond to 4, 7, 8, or 12 bytecode functions; */ /* if the value is n, the function numbers are n, ..., n+11, */ /* to be differentiated with flags */ switch (action) { case ta_link: { TA_Edge base_edge = (TA_Edge)arg1; TA_Edge stem_edge = arg2; FT_UShort base_first_idx; FT_UShort stem_first_idx; base_first_idx = TA_get_segment_index(base_edge->first, recorder); stem_first_idx = TA_get_segment_index(stem_edge->first, recorder); *(p++) = 0; *(p++) = (FT_Byte)action + ACTION_OFFSET + ((stem_edge->flags & TA_EDGE_SERIF) != 0) + 2 * ((base_edge->flags & TA_EDGE_ROUND) != 0); *(p++) = HIGH(base_first_idx); *(p++) = LOW(base_first_idx); *(p++) = HIGH(stem_first_idx); *(p++) = LOW(stem_first_idx); p = TA_hints_recorder_handle_segments(p, recorder, stem_edge, wraps); } break; case ta_anchor: { TA_Edge edge = (TA_Edge)arg1; TA_Edge edge2 = arg2; FT_UShort edge_first_idx; FT_UShort edge2_first_idx; edge_first_idx = TA_get_segment_index(edge->first, recorder); edge2_first_idx = TA_get_segment_index(edge2->first, recorder); *(p++) = 0; *(p++) = (FT_Byte)action + ACTION_OFFSET + ((edge2->flags & TA_EDGE_SERIF) != 0) + 2 * ((edge->flags & TA_EDGE_ROUND) != 0); *(p++) = HIGH(edge_first_idx); *(p++) = LOW(edge_first_idx); *(p++) = HIGH(edge2_first_idx); *(p++) = LOW(edge2_first_idx); p = TA_hints_recorder_handle_segments(p, recorder, edge, wraps); } break; case ta_adjust: { TA_Edge edge = (TA_Edge)arg1; TA_Edge edge2 = arg2; TA_Edge edge_minus_one = lower_bound; FT_UShort edge_first_idx; FT_UShort edge2_first_idx; edge_first_idx = TA_get_segment_index(edge->first, recorder); edge2_first_idx = TA_get_segment_index(edge2->first, recorder); *(p++) = 0; *(p++) = (FT_Byte)action + ACTION_OFFSET + ((edge2->flags & TA_EDGE_SERIF) != 0) + 2 * ((edge->flags & TA_EDGE_ROUND) != 0) + 4 * (edge_minus_one != NULL) /* `bound' */ + 4 * (edge_minus_one != NULL && top_to_bottom_hinting); /* `down' */ *(p++) = HIGH(edge_first_idx); *(p++) = LOW(edge_first_idx); *(p++) = HIGH(edge2_first_idx); *(p++) = LOW(edge2_first_idx); if (edge_minus_one) { FT_UShort edge_minus_one_first_idx; edge_minus_one_first_idx = TA_get_segment_index( edge_minus_one->first, recorder); *(p++) = HIGH(edge_minus_one_first_idx); *(p++) = LOW(edge_minus_one_first_idx); } p = TA_hints_recorder_handle_segments(p, recorder, edge, wraps); } break; case ta_blue_anchor: { TA_Edge edge = (TA_Edge)arg1; TA_Edge blue = arg2; FT_UShort blue_first_idx; FT_UShort edge_first_idx; blue_first_idx = TA_get_segment_index(blue->first, recorder); edge_first_idx = TA_get_segment_index(edge->first, recorder); *(p++) = 0; *(p++) = (FT_Byte)action + ACTION_OFFSET; *(p++) = HIGH(blue_first_idx); *(p++) = LOW(blue_first_idx); if (edge->best_blue_is_shoot) { *(p++) = HIGH(CVT_BLUE_SHOOTS_OFFSET(style) + edge->best_blue_idx); *(p++) = LOW(CVT_BLUE_SHOOTS_OFFSET(style) + edge->best_blue_idx); } else { *(p++) = HIGH(CVT_BLUE_REFS_OFFSET(style) + edge->best_blue_idx); *(p++) = LOW(CVT_BLUE_REFS_OFFSET(style) + edge->best_blue_idx); } *(p++) = HIGH(edge_first_idx); *(p++) = LOW(edge_first_idx); p = TA_hints_recorder_handle_segments(p, recorder, edge, wraps); } break; case ta_stem: { TA_Edge edge = (TA_Edge)arg1; TA_Edge edge2 = arg2; TA_Edge edge_minus_one = lower_bound; FT_UShort edge_first_idx; FT_UShort edge2_first_idx; edge_first_idx = TA_get_segment_index(edge->first, recorder); edge2_first_idx = TA_get_segment_index(edge2->first, recorder); *(p++) = 0; *(p++) = (FT_Byte)action + ACTION_OFFSET + ((edge2->flags & TA_EDGE_SERIF) != 0) + 2 * ((edge->flags & TA_EDGE_ROUND) != 0) + 4 * (edge_minus_one != NULL) /* `bound' */ + 4 * (edge_minus_one != NULL && top_to_bottom_hinting); /* `down' */ *(p++) = HIGH(edge_first_idx); *(p++) = LOW(edge_first_idx); *(p++) = HIGH(edge2_first_idx); *(p++) = LOW(edge2_first_idx); if (edge_minus_one) { FT_UShort edge_minus_one_first_idx; edge_minus_one_first_idx = TA_get_segment_index( edge_minus_one->first, recorder); *(p++) = HIGH(edge_minus_one_first_idx); *(p++) = LOW(edge_minus_one_first_idx); } p = TA_hints_recorder_handle_segments(p, recorder, edge, wraps); p = TA_hints_recorder_handle_segments(p, recorder, edge2, wraps); } break; case ta_blue: { TA_Edge edge = (TA_Edge)arg1; FT_UShort edge_first_idx; edge_first_idx = TA_get_segment_index(edge->first, recorder); *(p++) = 0; *(p++) = (FT_Byte)action + ACTION_OFFSET; if (edge->best_blue_is_shoot) { *(p++) = HIGH(CVT_BLUE_SHOOTS_OFFSET(style) + edge->best_blue_idx); *(p++) = LOW(CVT_BLUE_SHOOTS_OFFSET(style) + edge->best_blue_idx); } else { *(p++) = HIGH(CVT_BLUE_REFS_OFFSET(style) + edge->best_blue_idx); *(p++) = LOW(CVT_BLUE_REFS_OFFSET(style) + edge->best_blue_idx); } *(p++) = HIGH(edge_first_idx); *(p++) = LOW(edge_first_idx); p = TA_hints_recorder_handle_segments(p, recorder, edge, wraps); } break; case ta_serif: { TA_Edge serif = (TA_Edge)arg1; TA_Edge base = serif->serif; FT_UShort serif_first_idx; FT_UShort base_first_idx; serif_first_idx = TA_get_segment_index(serif->first, recorder); base_first_idx = TA_get_segment_index(base->first, recorder); *(p++) = 0; *(p++) = (FT_Byte)action + ACTION_OFFSET + (lower_bound != NULL) + 2 * (upper_bound != NULL) + 3 * ((lower_bound != NULL || upper_bound != NULL) && top_to_bottom_hinting); /* `down' */ *(p++) = HIGH(serif_first_idx); *(p++) = LOW(serif_first_idx); *(p++) = HIGH(base_first_idx); *(p++) = LOW(base_first_idx); if (lower_bound) { FT_UShort lower_bound_first_idx; lower_bound_first_idx = TA_get_segment_index(lower_bound->first, recorder); *(p++) = HIGH(lower_bound_first_idx); *(p++) = LOW(lower_bound_first_idx); } if (upper_bound) { FT_UShort upper_bound_first_idx; upper_bound_first_idx = TA_get_segment_index(upper_bound->first, recorder); *(p++) = HIGH(upper_bound_first_idx); *(p++) = LOW(upper_bound_first_idx); } p = TA_hints_recorder_handle_segments(p, recorder, serif, wraps); } break; case ta_serif_anchor: case ta_serif_link2: { TA_Edge edge = (TA_Edge)arg1; FT_UShort edge_first_idx; edge_first_idx = TA_get_segment_index(edge->first, recorder); *(p++) = 0; *(p++) = (FT_Byte)action + ACTION_OFFSET + (lower_bound != NULL) + 2 * (upper_bound != NULL) + 3 * ((lower_bound != NULL || upper_bound != NULL) && top_to_bottom_hinting); /* `down' */ *(p++) = HIGH(edge_first_idx); *(p++) = LOW(edge_first_idx); if (lower_bound) { FT_UShort lower_bound_first_idx; lower_bound_first_idx = TA_get_segment_index(lower_bound->first, recorder); *(p++) = HIGH(lower_bound_first_idx); *(p++) = LOW(lower_bound_first_idx); } if (upper_bound) { FT_UShort upper_bound_first_idx; upper_bound_first_idx = TA_get_segment_index(upper_bound->first, recorder); *(p++) = HIGH(upper_bound_first_idx); *(p++) = LOW(upper_bound_first_idx); } p = TA_hints_recorder_handle_segments(p, recorder, edge, wraps); } break; case ta_serif_link1: { TA_Edge edge = (TA_Edge)arg1; TA_Edge before = arg2; TA_Edge after = arg3; FT_UShort before_first_idx; FT_UShort edge_first_idx; FT_UShort after_first_idx; before_first_idx = TA_get_segment_index(before->first, recorder); edge_first_idx = TA_get_segment_index(edge->first, recorder); after_first_idx = TA_get_segment_index(after->first, recorder); *(p++) = 0; *(p++) = (FT_Byte)action + ACTION_OFFSET + (lower_bound != NULL) + 2 * (upper_bound != NULL) + 3 * ((lower_bound != NULL || upper_bound != NULL) && top_to_bottom_hinting); /* `down' */ *(p++) = HIGH(before_first_idx); *(p++) = LOW(before_first_idx); *(p++) = HIGH(edge_first_idx); *(p++) = LOW(edge_first_idx); *(p++) = HIGH(after_first_idx); *(p++) = LOW(after_first_idx); if (lower_bound) { FT_UShort lower_bound_first_idx; lower_bound_first_idx = TA_get_segment_index(lower_bound->first, recorder); *(p++) = HIGH(lower_bound_first_idx); *(p++) = LOW(lower_bound_first_idx); } if (upper_bound) { FT_UShort upper_bound_first_idx; upper_bound_first_idx = TA_get_segment_index(upper_bound->first, recorder); *(p++) = HIGH(upper_bound_first_idx); *(p++) = LOW(upper_bound_first_idx); } p = TA_hints_recorder_handle_segments(p, recorder, edge, wraps); } break; default: /* there are more cases in the enumeration */ /* which are handled with flags */ break; } recorder->hints_record.num_actions++; recorder->hints_record.buf = p; } static FT_Error TA_init_recorder(Recorder* recorder, SFNT* sfnt, FONT* font, GLYPH* glyph, TA_GlyphHints hints) { TA_AxisHints axis = &hints->axis[TA_DIMENSION_VERT]; TA_Segment segments = axis->segments; TA_Segment seg_limit = segments + axis->num_segments; TA_Segment seg; recorder->sfnt = sfnt; recorder->font = font; recorder->glyph = glyph; LLRB_INIT(&recorder->ip_before_points_head); LLRB_INIT(&recorder->ip_after_points_head); LLRB_INIT(&recorder->ip_on_points_head); LLRB_INIT(&recorder->ip_between_points_head); recorder->num_stack_elements = 0; /* no need to clean up allocated arrays in case of error; */ /* this is handled later by `TA_free_recorder' */ /* we use segment_map[axis->num_segments] */ /* as the total number of mapped segments, so allocate one more element */ recorder->segment_map = (FT_UShort*)malloc((size_t)(axis->num_segments + 1) * sizeof (FT_UShort)); if (!recorder->segment_map) return FT_Err_Out_Of_Memory; /* `segment_map' gets initialized later on, */ /* after the first call of `ta_loader_load_glyph' */ recorder->segment_map_initialized = 0; recorder->num_wrap_around_segments = 0; for (seg = segments; seg < seg_limit; seg++) if (seg->first > seg->last) recorder->num_wrap_around_segments++; recorder->wrap_around_segments = (FT_UShort*)malloc(recorder->num_wrap_around_segments * sizeof (FT_UShort)); if (!recorder->wrap_around_segments) return FT_Err_Out_Of_Memory; /* `wrap_around_segments' gets initialized later on; */ /* it needs function `TA_get_segment_index' which uses data */ /* that hasn't been initialized yet either */ recorder->wrap_around_segments_initialized = 0; return FT_Err_Ok; } static void TA_reset_recorder(Recorder* recorder, FT_Byte* bufp) { recorder->hints_record.buf = bufp; recorder->hints_record.num_actions = 0; } static void TA_rewind_recorder(Recorder* recorder, FT_Byte* bufp, FT_UInt size) { Node1* before_node; Node1* after_node; Node2* on_node; Node3* between_node; Node1* next_before_node; Node1* next_after_node; Node2* next_on_node; Node3* next_between_node; TA_reset_recorder(recorder, bufp); recorder->hints_record.size = size; /* deallocate our red-black trees */ for (before_node = LLRB_MIN(ip_before_points, &recorder->ip_before_points_head); before_node; before_node = next_before_node) { next_before_node = LLRB_NEXT(ip_before_points, &recorder->ip_before_points_head, before_node); LLRB_REMOVE(ip_before_points, &recorder->ip_before_points_head, before_node); free(before_node); } for (after_node = LLRB_MIN(ip_after_points, &recorder->ip_after_points_head); after_node; after_node = next_after_node) { next_after_node = LLRB_NEXT(ip_after_points, &recorder->ip_after_points_head, after_node); LLRB_REMOVE(ip_after_points, &recorder->ip_after_points_head, after_node); free(after_node); } for (on_node = LLRB_MIN(ip_on_points, &recorder->ip_on_points_head); on_node; on_node = next_on_node) { next_on_node = LLRB_NEXT(ip_on_points, &recorder->ip_on_points_head, on_node); LLRB_REMOVE(ip_on_points, &recorder->ip_on_points_head, on_node); free(on_node); } for (between_node = LLRB_MIN(ip_between_points, &recorder->ip_between_points_head); between_node; between_node = next_between_node) { next_between_node = LLRB_NEXT(ip_between_points, &recorder->ip_between_points_head, between_node); LLRB_REMOVE(ip_between_points, &recorder->ip_between_points_head, between_node); free(between_node); } } static void TA_free_recorder(Recorder* recorder) { free(recorder->segment_map); free(recorder->wrap_around_segments); TA_rewind_recorder(recorder, NULL, 0); } FT_Error TA_sfnt_build_glyph_instructions(SFNT* sfnt, FONT* font, FT_Long idx) { FT_Face face = sfnt->face; FT_Error error; FT_Byte* ins_buf; FT_UInt ins_len; FT_Byte* bufp; FT_Byte* p; SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; /* `idx' is never negative */ GLYPH* glyph = &data->glyphs[idx]; TA_FaceGlobals globals = (TA_FaceGlobals)sfnt->face->autohint.data; FT_UShort* gstyles = globals->glyph_styles; FT_Bool use_gstyle_data = 1; TA_GlyphHints hints; FT_UInt num_action_hints_records = 0; FT_UInt num_point_hints_records = 0; Hints_Record* action_hints_records = NULL; Hints_Record* point_hints_records = NULL; Recorder recorder; FT_UShort num_stack_elements; FT_Bool optimize = 0; FT_Int32 load_flags; FT_UInt size; /* we store only three positions, but it simplifies the algorithm in */ /* `TA_optimize_push' if we have one additional element */ FT_Byte* pos[4]; #ifdef TA_DEBUG int _ta_debug_save; #endif /* XXX: right now, we abuse this flag to control */ /* the global behaviour of the auto-hinter */ load_flags = 1 << 29; /* vertical hinting only */ if (!font->adjust_subglyphs) { if (font->hint_composites) load_flags |= FT_LOAD_NO_SCALE; else load_flags |= FT_LOAD_NO_RECURSE; } /* computing the segments is resolution independent, */ /* thus the pixel size in this call is arbitrary -- */ /* however, we avoid unnecessary debugging output */ /* if we use the lowest value of the hinting range */ error = FT_Set_Pixel_Sizes(face, font->hinting_range_min, font->hinting_range_min); if (error) return error; /* this data is needed for `ta_glyph_hints_reload' (in file `tahints.c') */ /* to modify `out' directions of points at the user's request */ /* (which will eventually become single-point segments) */ error = TA_control_segment_dir_collect(font, face->face_index, idx); if (error) return error; #ifdef TA_DEBUG /* temporarily disable some debugging output */ /* to avoid getting the information twice */ _ta_debug_save = _ta_debug; _ta_debug = 0; #endif ta_loader_register_hints_recorder(font->loader, NULL, NULL); error = ta_loader_load_glyph(font, face, (FT_UInt)idx, load_flags); #ifdef TA_DEBUG _ta_debug = _ta_debug_save; #endif if (error) return error; /* do nothing if we have an empty glyph */ if (!(font->loader->gloader->current.num_subglyphs || face->glyph->outline.n_contours)) return FT_Err_Ok; hints = &font->loader->hints; /* * We allocate a buffer which is certainly large enough * to hold all of the created bytecode instructions; * later on it gets reallocated to its real size. * * The value `1000' is a very rough guess, not tested well. * * For delta exceptions, we have three DELTA commands, * covering 3*16 ppem values. * Since a point index can be larger than 255, * we assume two bytes everywhere for the necessary PUSH calls. * This value must be doubled for the other arguments of DELTA. * Additionally, we have both x and y deltas, * which need to be handled separately in the bytecode. * In summary, this is approx. 3*16 * 2*2 * 2 = 400 bytes per point, * adding some bytes for the necessary overhead. */ ins_len = (FT_UInt)(hints->num_points * (1000 + ((font->control_data_head != NULL) ? 400 : 0))); ins_buf = (FT_Byte*)malloc(ins_len); if (!ins_buf) return FT_Err_Out_Of_Memory; /* handle composite glyph */ if (font->loader->gloader->current.num_subglyphs) { bufp = TA_font_build_subglyph_shifter(font, ins_buf); if (!bufp) { error = FT_Err_Out_Of_Memory; goto Err; } use_gstyle_data = 0; goto Done1; } if (font->fallback_scaling) { if (font->loader->metrics->style_class == &ta_none_dflt_style_class) { /* the scaling value of `none_dflt' */ /* (this is, hinting without script-specific blue zones) */ /* is always 1, which corresponds to a no-op */ bufp = ins_buf; } else { /* since `TA_init_recorder' hasn't been called yet, */ /* we manually initialize the `sfnt', `font', and `glyph' fields */ recorder.sfnt = sfnt; recorder.font = font; recorder.glyph = glyph; bufp = TA_sfnt_build_glyph_scaler(sfnt, &recorder, ins_buf); if (!bufp) { error = FT_Err_Out_Of_Memory; goto Err; } } use_gstyle_data = 0; goto Done1; } error = TA_init_recorder(&recorder, sfnt, font, glyph, hints); if (error) goto Err; /* loop over a large range of pixel sizes */ /* to find hints records which get pushed onto the bytecode stack */ #ifdef DEBUGGING if (font->debug) { int num_chars, i; char buf[256]; (void)FT_Get_Glyph_Name(face, (FT_UInt)idx, buf, 256); num_chars = fprintf(stderr, "glyph %ld", idx); if (*buf) num_chars += fprintf(stderr, " (%s)", buf); fprintf(stderr, "\n"); for (i = 0; i < num_chars; i++) putc('=', stderr); fprintf(stderr, "\n\n"); } #endif /* we temporarily use `ins_buf' to record the current glyph hints */ ta_loader_register_hints_recorder(font->loader, TA_hints_recorder, (void*)&recorder); /* * It is important that we start the loop with the smallest PPEM value * used for hinting, since the number of segments that form an edge can * become smaller for larger PPEM values. For efficiency, we skip * non-edge one-point segments, and `TA_get_segment_index' would return * wrong indices otherwise. */ for (size = font->hinting_range_min; size <= font->hinting_range_max; size++) { #ifdef DEBUGGING int have_dumps = 0; #endif TA_rewind_recorder(&recorder, ins_buf, size); error = FT_Set_Pixel_Sizes(face, size, size); if (error) goto Err; #ifdef DEBUGGING if (font->debug) { int num_chars, i; num_chars = fprintf(stderr, "size %d\n", size); for (i = 0; i < num_chars - 1; i++) putc('-', stderr); fprintf(stderr, "\n\n"); } #endif /* calling `ta_loader_load_glyph' uses the */ /* `TA_hints_recorder' function as a callback, */ /* modifying `hints_record' */ error = ta_loader_load_glyph(font, face, (FT_UInt)idx, load_flags); if (error) goto Err; if (TA_hints_record_is_different(action_hints_records, num_action_hints_records, ins_buf, recorder.hints_record.buf)) { #ifdef DEBUGGING if (font->debug) { have_dumps = 1; ta_glyph_hints_dump_edges((TA_GlyphHints)_ta_debug_hints); ta_glyph_hints_dump_segments((TA_GlyphHints)_ta_debug_hints); ta_glyph_hints_dump_points((TA_GlyphHints)_ta_debug_hints); fprintf(stderr, "action hints record:\n"); if (ins_buf == recorder.hints_record.buf) fprintf(stderr, " (none)"); else { fprintf(stderr, " "); for (p = ins_buf; p < recorder.hints_record.buf; p += 2) fprintf(stderr, " %2d", *p * 256 + *(p + 1)); } fprintf(stderr, "\n"); } #endif error = TA_add_hints_record(&action_hints_records, &num_action_hints_records, ins_buf, recorder.hints_record); if (error) goto Err; } /* now handle point records */ TA_reset_recorder(&recorder, ins_buf); /* use the point hints data collected in `TA_hints_recorder' */ TA_build_point_hints(&recorder, hints); if (TA_hints_record_is_different(point_hints_records, num_point_hints_records, ins_buf, recorder.hints_record.buf)) { #ifdef DEBUGGING if (font->debug) { if (!have_dumps) { int num_chars, i; num_chars = fprintf(stderr, "size %d\n", size); for (i = 0; i < num_chars - 1; i++) putc('-', stderr); fprintf(stderr, "\n\n"); ta_glyph_hints_dump_edges((TA_GlyphHints)_ta_debug_hints); ta_glyph_hints_dump_segments((TA_GlyphHints)_ta_debug_hints); ta_glyph_hints_dump_points((TA_GlyphHints)_ta_debug_hints); } fprintf(stderr, "point hints record:\n"); if (ins_buf == recorder.hints_record.buf) fprintf(stderr, " (none)"); else { fprintf(stderr, " "); for (p = ins_buf; p < recorder.hints_record.buf; p += 2) fprintf(stderr, " %2d", *p * 256 + *(p + 1)); } fprintf(stderr, "\n\n"); } #endif error = TA_add_hints_record(&point_hints_records, &num_point_hints_records, ins_buf, recorder.hints_record); if (error) goto Err; } } if (num_action_hints_records == 1 && !action_hints_records[0].num_actions) { /* since we only have a single empty record we just scale the glyph */ bufp = TA_sfnt_build_glyph_scaler(sfnt, &recorder, ins_buf); if (!bufp) { error = FT_Err_Out_Of_Memory; goto Err; } use_gstyle_data = 0; goto Done; } /* if there is only a single record, */ /* we do a global optimization later on */ if (num_action_hints_records > 1) optimize = 1; /* store the hints records and handle stack depth */ pos[0] = ins_buf; bufp = TA_emit_hints_records(&recorder, point_hints_records, num_point_hints_records, ins_buf, optimize); num_stack_elements = recorder.num_stack_elements; recorder.num_stack_elements = 0; pos[1] = bufp; bufp = TA_emit_hints_records(&recorder, action_hints_records, num_action_hints_records, bufp, optimize); recorder.num_stack_elements += num_stack_elements; pos[2] = bufp; bufp = TA_sfnt_build_glyph_segments(sfnt, &recorder, bufp, optimize); if (!bufp) { error = FT_Err_Out_Of_Memory; goto Err; } if (num_action_hints_records == 1) bufp = TA_optimize_push(ins_buf, pos); Done: TA_free_hints_records(action_hints_records, num_action_hints_records); TA_free_hints_records(point_hints_records, num_point_hints_records); TA_free_recorder(&recorder); Done1: /* handle delta exceptions */ if (font->control_data_head) { bufp = TA_sfnt_build_delta_exceptions(sfnt, font, idx, bufp); if (!bufp) { error = FT_Err_Out_Of_Memory; goto Err; } } /* we need to insert a few extra bytecode instructions */ /* for non-base glyphs */ if (use_gstyle_data && (gstyles[idx] & TA_NONBASE)) { FT_Byte* ins_extra_buf_new; FT_Byte ins_extra_len_new; ins_extra_len_new = glyph->ins_extra_len + sizeof (ins_extra_ignore_std_width); ins_extra_buf_new = (FT_Byte*)realloc(glyph->ins_extra_buf, ins_extra_len_new); if (!ins_extra_buf_new) { bufp = NULL; goto Done; } /* set `cvtl_ignore_std_width' to 100 at the beginning of the bytecode */ /* by activating `ins_extra_ignore_std_width' */ memcpy(ins_extra_buf_new + glyph->ins_extra_len, ins_extra_ignore_std_width, sizeof (ins_extra_ignore_std_width)); glyph->ins_extra_buf = ins_extra_buf_new; glyph->ins_extra_len = ins_extra_len_new; /* reset `cvtl_ignore_std_width' for next glyph */ BCI(PUSHB_2); BCI(cvtl_ignore_std_width); BCI(0); BCI(WCVTP); } ins_len = (FT_UInt)(bufp - ins_buf); if (ins_len > sfnt->max_instructions) sfnt->max_instructions = (FT_UShort)ins_len; glyph->ins_buf = (FT_Byte*)realloc(ins_buf, ins_len); glyph->ins_len = ins_len; return FT_Err_Ok; Err: TA_free_hints_records(action_hints_records, num_action_hints_records); TA_free_hints_records(point_hints_records, num_point_hints_records); TA_free_recorder(&recorder); free(ins_buf); return error; } /* end of tabytecode.c */ ttfautohint-1.8.1/lib/tabytecode.h0000644000175000001440000007031113220777433017007 0ustar00wlusers00000000000000/* tabytecode.h */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #ifndef TABYTECODE_H_ #define TABYTECODE_H_ /* symbolic names for bytecode instruction codes */ #define SVTCA_y 0x00 /* set freedom and projection vectors to y axis */ #define SVTCA_x 0x01 /* set freedom and projection vectors to x axis */ #define SPVTCA_y 0x02 /* set projection vector to y axis */ #define SPVTCA_x 0x03 /* set projection vector to x axis */ #define SFVTCA_y 0x04 /* set freedom vector to y axis */ #define SFVTCA_x 0x05 /* set freedom vector to x axis */ #define SPVTL_para 0x06 /* set projection vector parallel to line */ #define SPVTL_perp 0x07 /* set projection vector perpendicular to line */ #define SFVTL_para 0x08 /* set freedom vector parallel to line */ #define SFVTL_perp 0x09 /* set freedom vector perpendicular to line */ #define SPVFS 0x0A /* set projection vector from stack */ #define SFVFS 0x0B /* set freedom vector from stack */ #define GPV 0x0C /* get projection vector */ #define GFV 0x0D /* get freedom vector */ #define SFVTPV 0x0E /* set freedom vector to projection vector */ #define ISECT 0x0F /* move point to intersection of lines */ #define SRP0 0x10 /* set reference point 0 */ #define SRP1 0x11 /* set reference point 1 */ #define SRP2 0x12 /* set reference point 2 */ #define SZP0 0x13 /* set zone pointer 0 */ #define SZP1 0x14 /* set zone pointer 1 */ #define SZP2 0x15 /* set zone pointer 2 */ #define SZPS 0x16 /* set zone pointers */ #define SLOOP 0x17 /* set loop counter */ #define RTG 0x18 /* round to grid */ #define RTHG 0x19 /* round to half grid */ #define SMD 0x1A /* set `minimum_distance' */ #define ELSE 0x1B /* begin of `else' clause */ #define JMPR 0x1C /* jump relative */ #define SCVTCI 0x1D /* set `control_value_cut_in' */ #define SSWCI 0x1E /* set `single_width_cut_in' */ #define SSW 0x1F /* set `single_width_value' */ #define DUP 0x20 /* duplicate top stack element */ #define POP 0x21 /* pop top stack element */ #define CLEAR 0x22 /* clear entire stack */ #define SWAP 0x23 /* swap top two elements of stack */ #define DEPTH 0x24 /* get depth of stack */ #define CINDEX 0x25 /* copy indexed element to top of stack */ #define MINDEX 0x26 /* move indexed element to top of stack */ #define ALIGNPTS 0x27 /* align points */ #define INS_28 0x28 /* undefined */ #define UTP 0x29 /* untouch point */ #define LOOPCALL 0x2A /* loop and call function */ #define CALL 0x2B /* call function */ #define FDEF 0x2C /* define function */ #define ENDF 0x2D /* end of function */ #define MDAP_noround 0x2E /* move direct absolute point without rounding */ #define MDAP_round 0x2F /* move direct absolute point with rounding */ #define IUP_y 0x30 /* interpolate untouched points along y axis */ #define IUP_x 0x31 /* interpolate untouched points along x axis */ #define SHP_rp2 0x32 /* shift point using rp2 */ #define SHP_rp1 0x33 /* shift point using rp1 */ #define SHC_rp2 0x34 /* shift contour using rp2 */ #define SHC_rp1 0x35 /* shift contour using rp1 */ #define SHZ_rp2 0x36 /* shift zone using rp2 */ #define SHZ_rp1 0x37 /* shift zone using rp1 */ #define SHPIX 0x38 /* shift point by pixel amount */ #define IP 0x39 /* interpolate point */ #define MSIRP_norp0 0x3A /* move stack indirect relative point, don't set rp0 */ #define MSIRP_rp0 0x3B /* move stack indirect relative point, set rp0 */ #define ALIGNRP 0x3C /* align relative point */ #define RTDG 0x3D /* round to double grid */ #define MIAP_noround 0x3E /* move indirect absolute point without rounding */ #define MIAP_round 0x3F /* move indirect absolute point with rounding */ #define NPUSHB 0x40 /* push `n' bytes */ #define NPUSHW 0x41 /* push `n' words */ #define WS 0x42 /* write to storage area */ #define RS 0x43 /* read from storage area */ #define WCVTP 0x44 /* write to CVT in pixel units */ #define RCVT 0x45 /* read from CVT */ #define GC_cur 0x46 /* get (projected) coordinate, current position */ #define GC_orig 0x47 /* get (projected) coordinate, original position */ #define SCFS 0x48 /* set coordinate from stack */ #define MD_cur 0x49 /* measure distance, current positions */ #define MD_orig 0x4A /* measure distance, original positions */ #define MPPEM 0x4B /* measure PPEM */ #define MPS 0x4C /* measure point size */ #define FLIPON 0x4D /* set `auto_flip' to TRUE */ #define FLIPOFF 0x4E /* set `auto_flip' to FALSE */ #define DEBUG 0x4F /* ignored */ #define LT 0x50 /* lower than */ #define LTEQ 0x51 /* lower than or equal */ #define GT 0x52 /* greater than */ #define GTEQ 0x53 /* greater than or equal */ #define EQ 0x54 /* equal */ #define NEQ 0x55 /* not equal */ #define ODD 0x56 /* TRUE if odd */ #define EVEN 0x57 /* TRUE if even */ #define IF 0x58 /* start of `if' clause */ #define EIF 0x59 /* end of `if' or `else' clause */ #define AND 0x5A /* logical AND */ #define OR 0x5B /* logical OR */ #define NOT 0x5C /* logical NOT */ #define DELTAP1 0x5D /* delta point exception 1 */ #define SDB 0x5E /* set `delta_base' */ #define SDS 0x5F /* set `delta_shift' */ #define ADD 0x60 /* addition */ #define SUB 0x61 /* subtraction */ #define DIV 0x62 /* division */ #define MUL 0x63 /* multiplication */ #define ABS 0x64 /* absolute value */ #define NEG 0x65 /* negation */ #define FLOOR 0x66 /* floor operation */ #define CEILING 0x67 /* ceiling operation */ #define ROUND_gray 0x68 /* round value with gray compensation */ #define ROUND_black 0x69 /* round value with black compensation */ #define ROUND_white 0x6A /* round value with white compensation */ #define ROUND_3 0x6B /* undefined */ #define NROUND_gray 0x6C /* apply gray compensation */ #define NROUND_black 0x6D /* apply black compensation */ #define NROUND_white 0x6E /* apply white compensation */ #define NROUND_3 0x6F /* undefined */ #define WCVTF 0x70 /* write to CVT in font units */ #define DELTAP2 0x71 /* delta point exception 2 */ #define DELTAP3 0x72 /* delta point exception 3 */ #define DELTAC1 0x73 /* delta cvt exception 1 */ #define DELTAC2 0x74 /* delta cvt exception 2 */ #define DELTAC3 0x75 /* delta cvt exception 3 */ #define SROUND 0x76 /* super round */ #define S45Round 0x77 /* super round at 45 degrees */ #define JROT 0x78 /* jump relative on TRUE */ #define JROF 0x79 /* jump relative on FALSE */ #define ROFF 0x7A /* turn off rounding */ #define INS_7B 0x7B /* undefined */ #define RUTG 0x7C /* round up to grid */ #define RDTG 0x7D /* round down to grid */ #define SANGW 0x7E /* ignored, obsolete */ #define AA 0x7F /* ignored, obsolete */ #define FLIPPT 0x80 /* flip point on-curve to off-curve and vice versa */ #define FLIPRGON 0x81 /* flip range of points to be on-curve */ #define FlIPRGOFF 0x82 /* flip range of points to be off-curve */ #define INS_83 0x83 /* undefined */ #define INS_84 0x84 /* undefined */ #define SCANCTRL 0x85 /* scan conversion control */ #define SDPVTL_para 0x86 /* set dual projection vector parallel to line */ #define SDPVTL_perp 0x87 /* set dual projection vector perpendicular to line */ #define GETINFO 0x88 /* get information about font scaler and current glyph */ #define IDEF 0x89 /* define instruction */ #define ROLL 0x8A /* roll top three stack elements */ #define MAX 0x8B /* maximum */ #define MIN 0x8C /* minimum */ #define SCANTYPE 0x8D /* set scan conversion rules */ #define INSTCTRL 0x8E /* set instruction control state */ #define INS_8F 0x8F /* undefined */ #define INS_90 0x90 /* undefined */ #define INS_91 0x91 #define INS_92 0x92 #define INS_93 0x93 #define INS_94 0x94 #define INS_95 0x95 #define INS_96 0x96 #define INS_97 0x97 #define INS_98 0x98 #define INS_99 0x99 #define INS_9A 0x9A #define INS_9B 0x9B #define INS_9C 0x9C #define INS_9D 0x9D #define INS_9E 0x9E #define INS_9F 0x9F #define INS_A0 0xA0 /* undefined */ #define INS_A1 0xA1 #define INS_A2 0xA2 #define INS_A3 0xA3 #define INS_A4 0xA4 #define INS_A5 0xA5 #define INS_A6 0xA6 #define INS_A7 0xA7 #define INS_A8 0xA8 #define INS_9A 0x9A #define INS_AA 0xAA #define INS_AB 0xAB #define INS_AC 0xAC #define INS_AD 0xAD #define INS_AE 0xAE #define INS_AF 0xAF #define PUSHB_1 0xB0 /* push 1 byte */ #define PUSHB_2 0xB1 /* push 2 bytes */ #define PUSHB_3 0xB2 /* push 3 bytes */ #define PUSHB_4 0xB3 /* push 4 bytes */ #define PUSHB_5 0xB4 /* push 5 bytes */ #define PUSHB_6 0xB5 /* push 6 bytes */ #define PUSHB_7 0xB6 /* push 7 bytes */ #define PUSHB_8 0xB7 /* push 8 bytes */ #define PUSHW_1 0xB8 /* push 1 word */ #define PUSHW_2 0xB9 /* push 2 words */ #define PUSHW_3 0xBA /* push 3 words */ #define PUSHW_4 0xBB /* push 4 words */ #define PUSHW_5 0xBC /* push 5 words */ #define PUSHW_6 0xBD /* push 6 words */ #define PUSHW_7 0xBE /* push 7 words */ #define PUSHW_8 0xBF /* push 8 words */ #define MDRP_norp0_nokeep_noround_gray 0xC0 /* move direct relative point */ #define MDRP_norp0_nokeep_noround_black 0xC1 #define MDRP_norp0_nokeep_noround_white 0xC2 #define MDRP_norp0_nokeep_noround_3 0xC3 /* undefined */ #define MDRP_norp0_nokeep_round_gray 0xC4 #define MDRP_norp0_nokeep_round_black 0xC5 #define MDRP_norp0_nokeep_round_white 0xC6 #define MDRP_norp0_nokeep_round_3 0xC7 #define MDRP_norp0_keep_noround_gray 0xC8 #define MDRP_norp0_keep_noround_black 0xC9 #define MDRP_norp0_keep_noround_white 0xCA #define MDRP_norp0_keep_noround_3 0xCB #define MDRP_norp0_keep_round_gray 0xCC #define MDRP_norp0_keep_round_black 0xCD #define MDRP_norp0_keep_round_white 0xCE #define MDRP_norp0_keep_round_3 0xCF #define MDRP_rp0_nokeep_noround_gray 0xD0 #define MDRP_rp0_nokeep_noround_black 0xD1 #define MDRP_rp0_nokeep_noround_white 0xD2 #define MDRP_rp0_nokeep_noround_3 0xD3 #define MDRP_rp0_nokeep_round_gray 0xD4 #define MDRP_rp0_nokeep_round_black 0xD5 #define MDRP_rp0_nokeep_round_white 0xD6 #define MDRP_rp0_nokeep_round_3 0xD7 #define MDRP_rp0_keep_noround_gray 0xD8 #define MDRP_rp0_keep_noround_black 0xD9 #define MDRP_rp0_keep_noround_white 0xDA #define MDRP_rp0_keep_noround_3 0xDB #define MDRP_rp0_keep_round_gray 0xDC #define MDRP_rp0_keep_round_black 0xDD #define MDRP_rp0_keep_round_white 0xDE #define MDRP_rp0_keep_round_3 0xDF #define MIRP_norp0_nokeep_noround_gray 0xE0 /* move indirect relative point */ #define MIRP_norp0_nokeep_noround_black 0xE1 #define MIRP_norp0_nokeep_noround_white 0xE2 #define MIRP_norp0_nokeep_noround_3 0xE3 /* undefined */ #define MIRP_norp0_nokeep_round_gray 0xE4 #define MIRP_norp0_nokeep_round_black 0xE5 #define MIRP_norp0_nokeep_round_white 0xE6 #define MIRP_norp0_nokeep_round_3 0xE7 #define MIRP_norp0_keep_noround_gray 0xE8 #define MIRP_norp0_keep_noround_black 0xE9 #define MIRP_norp0_keep_noround_white 0xEA #define MIRP_norp0_keep_noround_3 0xEB #define MIRP_norp0_keep_round_gray 0xEC #define MIRP_norp0_keep_round_black 0xED #define MIRP_norp0_keep_round_white 0xEE #define MIRP_norp0_keep_round_3 0xEF #define MIRP_rp0_nokeep_noround_gray 0xF0 #define MIRP_rp0_nokeep_noround_black 0xF1 #define MIRP_rp0_nokeep_noround_white 0xF2 #define MIRP_rp0_nokeep_noround_3 0xF3 #define MIRP_rp0_nokeep_round_gray 0xF4 #define MIRP_rp0_nokeep_round_black 0xF5 #define MIRP_rp0_nokeep_round_white 0xF6 #define MIRP_rp0_nokeep_round_3 0xF7 #define MIRP_rp0_keep_noround_gray 0xF8 #define MIRP_rp0_keep_noround_black 0xF9 #define MIRP_rp0_keep_noround_white 0xFA #define MIRP_rp0_keep_noround_3 0xFB #define MIRP_rp0_keep_round_gray 0xFC #define MIRP_rp0_keep_round_black 0xFD #define MIRP_rp0_keep_round_white 0xFE #define MIRP_rp0_keep_round_3 0xFF /* a simple macro to emit bytecode instructions */ #define BCI(code) *(bufp++) = (FT_Byte)(code) /* we increase the stack depth by this amount */ #define ADDITIONAL_STACK_ELEMENTS 20 /* symbolic names for storage area locations */ #define sal_i 0 #define sal_j sal_i + 1 #define sal_k sal_j + 1 #define sal_limit sal_k + 1 #define sal_temp1 sal_limit + 1 #define sal_temp2 sal_temp1 + 1 #define sal_temp3 sal_temp2 + 1 #define sal_best sal_temp3 + 1 #define sal_ref sal_best + 1 #define sal_func sal_ref + 1 #define sal_anchor sal_func + 1 #define sal_stem_width_function sal_anchor + 1 #define sal_base_delta sal_stem_width_function + 1 #define sal_vwidth_data_offset sal_base_delta + 1 #define sal_scale sal_vwidth_data_offset + 1 #define sal_point_min sal_scale + 1 #define sal_point_max sal_point_min + 1 #define sal_base sal_point_max + 1 #define sal_num_packed_segments sal_base + 1 #define sal_num_stem_widths sal_num_packed_segments + 1 #define sal_stem_width_offset sal_num_stem_widths + 1 #define sal_have_cached_width sal_stem_width_offset + 1 #define sal_cached_width_offset sal_have_cached_width + 1 #define sal_top_to_bottom_hinting sal_cached_width_offset + 1 #define sal_segment_offset sal_top_to_bottom_hinting + 1 /* must be last */ /* * After the above registers we have the following layout in the storage * area. * * sal[sal_segment_offset]: * `2 * num_segments' registers to hold the start and end points of a * glyph's segments. * sal[sal_segment_offset + 2*num_segments]: * quantized stem width 1 (before stem width computing) * quantized stem width 1 (after stem width computing) * quantized stem width 2 (before stem width computing) * quantized stem width 2 (after stem width computing) * ... */ /* bytecode function numbers */ /* 0 */ #define bci_align_x_height 0 #define bci_round bci_align_x_height + 1 #define bci_natural_stem_width bci_round + 1 #define bci_quantize_stem_width bci_natural_stem_width + 1 #define bci_smooth_stem_width bci_quantize_stem_width + 1 #define bci_get_best_width bci_smooth_stem_width + 1 #define bci_strong_stem_width bci_get_best_width + 1 #define bci_loop_do bci_strong_stem_width + 1 #define bci_loop bci_loop_do + 1 #define bci_cvt_rescale bci_loop + 1 #define bci_cvt_rescale_range bci_cvt_rescale + 1 #define bci_vwidth_data_store bci_cvt_rescale_range + 1 #define bci_smooth_blue_round bci_vwidth_data_store + 1 #define bci_strong_blue_round bci_smooth_blue_round + 1 #define bci_blue_round_range bci_strong_blue_round + 1 #define bci_decrement_component_counter bci_blue_round_range + 1 #define bci_get_point_extrema bci_decrement_component_counter + 1 #define bci_nibbles bci_get_point_extrema + 1 #define bci_number_set_is_element bci_nibbles + 1 #define bci_number_set_is_element2 bci_number_set_is_element + 1 /* 20 */ #define bci_create_segment bci_number_set_is_element2 + 1 #define bci_create_segments bci_create_segment + 1 /* 22 */ /* the next ten entries must stay in this order */ #define bci_create_segments_0 bci_create_segments + 1 #define bci_create_segments_1 bci_create_segments_0 + 1 #define bci_create_segments_2 bci_create_segments_1 + 1 #define bci_create_segments_3 bci_create_segments_2 + 1 #define bci_create_segments_4 bci_create_segments_3 + 1 #define bci_create_segments_5 bci_create_segments_4 + 1 #define bci_create_segments_6 bci_create_segments_5 + 1 #define bci_create_segments_7 bci_create_segments_6 + 1 #define bci_create_segments_8 bci_create_segments_7 + 1 #define bci_create_segments_9 bci_create_segments_8 + 1 #define bci_create_segments_composite bci_create_segments_9 + 1 /* 33 */ /* the next ten entries must stay in this order */ #define bci_create_segments_composite_0 bci_create_segments_composite + 1 #define bci_create_segments_composite_1 bci_create_segments_composite_0 + 1 #define bci_create_segments_composite_2 bci_create_segments_composite_1 + 1 #define bci_create_segments_composite_3 bci_create_segments_composite_2 + 1 #define bci_create_segments_composite_4 bci_create_segments_composite_3 + 1 #define bci_create_segments_composite_5 bci_create_segments_composite_4 + 1 #define bci_create_segments_composite_6 bci_create_segments_composite_5 + 1 #define bci_create_segments_composite_7 bci_create_segments_composite_6 + 1 #define bci_create_segments_composite_8 bci_create_segments_composite_7 + 1 #define bci_create_segments_composite_9 bci_create_segments_composite_8 + 1 /* 43 */ /* the next three entries must stay in this order */ #define bci_deltap1 bci_create_segments_composite_9 + 1 #define bci_deltap2 bci_deltap1 + 1 #define bci_deltap3 bci_deltap2 + 1 /* 46 */ #define bci_align_point bci_deltap3 + 1 #define bci_align_segment bci_align_point + 1 #define bci_align_segments bci_align_segment + 1 /* 49 */ #define bci_scale_contour bci_align_segments + 1 #define bci_scale_glyph bci_scale_contour + 1 #define bci_scale_composite_glyph bci_scale_glyph + 1 #define bci_shift_contour bci_scale_composite_glyph + 1 #define bci_shift_subglyph bci_shift_contour + 1 /* 54 */ #define bci_ip_outer_align_point bci_shift_subglyph + 1 #define bci_ip_on_align_points bci_ip_outer_align_point + 1 #define bci_ip_between_align_point bci_ip_on_align_points + 1 #define bci_ip_between_align_points bci_ip_between_align_point + 1 /* 58 */ #define bci_adjust_common bci_ip_between_align_points + 1 #define bci_stem_common bci_adjust_common + 1 #define bci_serif_common bci_stem_common + 1 #define bci_serif_anchor_common bci_serif_common + 1 #define bci_serif_link1_common bci_serif_anchor_common + 1 #define bci_serif_link2_common bci_serif_link1_common + 1 /* 64 */ #define bci_lower_bound bci_serif_link2_common + 1 #define bci_upper_bound bci_lower_bound + 1 #define bci_upper_lower_bound bci_upper_bound + 1 /* 67 */ #define bci_adjust_bound bci_upper_lower_bound + 1 #define bci_stem_bound bci_adjust_bound + 1 #define bci_link bci_stem_bound + 1 #define bci_anchor bci_link + 1 #define bci_adjust bci_anchor + 1 #define bci_stem bci_adjust + 1 /* the order of the `bci_action_*' entries must correspond */ /* to the order of the TA_Action enumeration entries (in `tahints.h') */ /* 73 */ #define bci_action_ip_before bci_stem + 1 #define bci_action_ip_after bci_action_ip_before + 1 #define bci_action_ip_on bci_action_ip_after + 1 #define bci_action_ip_between bci_action_ip_on + 1 /* 77 */ #define bci_action_blue bci_action_ip_between + 1 #define bci_action_blue_anchor bci_action_blue + 1 /* 79 */ #define bci_action_anchor bci_action_blue_anchor + 1 #define bci_action_anchor_serif bci_action_anchor + 1 #define bci_action_anchor_round bci_action_anchor_serif + 1 #define bci_action_anchor_round_serif bci_action_anchor_round + 1 /* 83 */ #define bci_action_adjust bci_action_anchor_round_serif + 1 #define bci_action_adjust_serif bci_action_adjust + 1 #define bci_action_adjust_round bci_action_adjust_serif + 1 #define bci_action_adjust_round_serif bci_action_adjust_round + 1 #define bci_action_adjust_bound bci_action_adjust_round_serif + 1 #define bci_action_adjust_bound_serif bci_action_adjust_bound + 1 #define bci_action_adjust_bound_round bci_action_adjust_bound_serif + 1 #define bci_action_adjust_bound_round_serif bci_action_adjust_bound_round + 1 #define bci_action_adjust_down_bound bci_action_adjust_bound_round_serif + 1 #define bci_action_adjust_down_bound_serif bci_action_adjust_down_bound + 1 #define bci_action_adjust_down_bound_round bci_action_adjust_down_bound_serif + 1 #define bci_action_adjust_down_bound_round_serif bci_action_adjust_down_bound_round + 1 /* 95 */ #define bci_action_link bci_action_adjust_down_bound_round_serif + 1 #define bci_action_link_serif bci_action_link + 1 #define bci_action_link_round bci_action_link_serif + 1 #define bci_action_link_round_serif bci_action_link_round + 1 /* 99 */ #define bci_action_stem bci_action_link_round_serif + 1 #define bci_action_stem_serif bci_action_stem + 1 #define bci_action_stem_round bci_action_stem_serif + 1 #define bci_action_stem_round_serif bci_action_stem_round + 1 #define bci_action_stem_bound bci_action_stem_round_serif + 1 #define bci_action_stem_bound_serif bci_action_stem_bound + 1 #define bci_action_stem_bound_round bci_action_stem_bound_serif + 1 #define bci_action_stem_bound_round_serif bci_action_stem_bound_round + 1 #define bci_action_stem_down_bound bci_action_stem_bound_round_serif + 1 #define bci_action_stem_down_bound_serif bci_action_stem_down_bound + 1 #define bci_action_stem_down_bound_round bci_action_stem_down_bound_serif + 1 #define bci_action_stem_down_bound_round_serif bci_action_stem_down_bound_round + 1 /* 111 */ #define bci_action_serif bci_action_stem_down_bound_round_serif + 1 #define bci_action_serif_lower_bound bci_action_serif + 1 #define bci_action_serif_upper_bound bci_action_serif_lower_bound + 1 #define bci_action_serif_upper_lower_bound bci_action_serif_upper_bound + 1 #define bci_action_serif_down_lower_bound bci_action_serif_upper_lower_bound + 1 #define bci_action_serif_down_upper_bound bci_action_serif_down_lower_bound + 1 #define bci_action_serif_down_upper_lower_bound bci_action_serif_down_upper_bound + 1 /* 118 */ #define bci_action_serif_anchor bci_action_serif_down_upper_lower_bound + 1 #define bci_action_serif_anchor_lower_bound bci_action_serif_anchor + 1 #define bci_action_serif_anchor_upper_bound bci_action_serif_anchor_lower_bound + 1 #define bci_action_serif_anchor_upper_lower_bound bci_action_serif_anchor_upper_bound + 1 #define bci_action_serif_anchor_down_lower_bound bci_action_serif_anchor_upper_lower_bound + 1 #define bci_action_serif_anchor_down_upper_bound bci_action_serif_anchor_down_lower_bound + 1 #define bci_action_serif_anchor_down_upper_lower_bound bci_action_serif_anchor_down_upper_bound + 1 /* 125 */ #define bci_action_serif_link1 bci_action_serif_anchor_down_upper_lower_bound + 1 #define bci_action_serif_link1_lower_bound bci_action_serif_link1 + 1 #define bci_action_serif_link1_upper_bound bci_action_serif_link1_lower_bound + 1 #define bci_action_serif_link1_upper_lower_bound bci_action_serif_link1_upper_bound + 1 #define bci_action_serif_link1_down_lower_bound bci_action_serif_link1_upper_lower_bound + 1 #define bci_action_serif_link1_down_upper_bound bci_action_serif_link1_down_lower_bound + 1 #define bci_action_serif_link1_down_upper_lower_bound bci_action_serif_link1_down_upper_bound + 1 /* 132 */ #define bci_action_serif_link2 bci_action_serif_link1_down_upper_lower_bound + 1 #define bci_action_serif_link2_lower_bound bci_action_serif_link2 + 1 #define bci_action_serif_link2_upper_bound bci_action_serif_link2_lower_bound + 1 #define bci_action_serif_link2_upper_lower_bound bci_action_serif_link2_upper_bound + 1 #define bci_action_serif_link2_down_lower_bound bci_action_serif_link2_upper_lower_bound + 1 #define bci_action_serif_link2_down_upper_bound bci_action_serif_link2_down_lower_bound + 1 #define bci_action_serif_link2_down_upper_lower_bound bci_action_serif_link2_down_upper_bound + 1 /* 139 */ #define bci_hint_glyph bci_action_serif_link2_down_upper_lower_bound + 1 /* 140 */ #define bci_freetype_enable_deltas bci_hint_glyph + 1 #define NUM_FDEFS bci_freetype_enable_deltas + 1 /* must be last */ /* the first action handler */ #define ACTION_OFFSET bci_action_ip_before /* symbolic names for run-time CVT locations */ /* (assigned in `prep' or `fpgm') */ #define cvtl_temp 0 /* used for creating twilight points */ #define cvtl_funits_to_pixels cvtl_temp + 1 #define cvtl_is_subglyph cvtl_funits_to_pixels + 1 #define cvtl_stem_width_mode cvtl_is_subglyph + 1 #define cvtl_is_element cvtl_stem_width_mode + 1 #define cvtl_do_iup_y cvtl_is_element + 1 #define cvtl_ignore_std_width cvtl_do_iup_y + 1 #define cvtl_max_runtime cvtl_ignore_std_width + 1 /* must be last */ /* symbolic names for build-time CVT locations */ /* (assigned in `cvt') */ /* note that each style has its own set of CVT data, */ /* to be accessed using the offsets in the `cvt_offsets' array */ /* first style index is 0 */ /* the following macros access the variables `font' and `sfnt' */ #define CVT_DATA ((glyf_Data*)(font->tables[sfnt->glyf_idx].data)) /* * we have the following layout in the CVT table: * * . values initialized at runtime (`cvtl_max_runtime' elements) * . scaling values for each style ID (`num_used_styles' elements) (*) * . offset to the vertical stem widths array for each style ID (*+) * (`num_used_styles' elements) * . size of the vertical stem widths array for each style ID (*+) * (`num_used_styles' elements) * * style ID 0: * . horizontal standard width (1 element) * . horizontal stem widths (`cvt_horz_width_sizes[id_to_idx(0)]' * elements) * . vertical standard width (1 element) * . vertical stem widths (`cvt_vert_width_sizes[id_to_idx(0)]' * elements) * . flat blue zones (`cvt_blue_zone_sizes[id_to_idx(0)]' elements) * . round blue zones (`cvt_blue_zone_sizes[id_to_idx(0)]' elements) * style ID 1: * ... * * (*) see function `bci_create_segments' how these three arrays get * accessed * * (+) the values are stored as multiples of 64 to avoid rounding issues * with non-square pixels (CVT values might be scaled forth and back by * the bytecode interpreter while storing and reading if the aspect * ratio between the horizontal and vertical resolution isn't equal * to 1) * * note that the `id_to_idx' function is hypothetical since the code works * exactly the opposite way: the `cvt_*' arrays are indexed by the style * index, and the `style_ids' array maps style indices to style IDs */ /* scaling value index of style ID id */ #define CVT_SCALING_VALUE_OFFSET(id) \ (cvtl_max_runtime + (id)) /* vwidth offset data of style ID id */ #define CVT_VWIDTH_OFFSET_DATA(id) \ (CVT_SCALING_VALUE_OFFSET(id) \ + CVT_DATA->num_used_styles) /* vwidth size data of style ID id */ #define CVT_VWIDTH_SIZE_DATA(id) \ (CVT_VWIDTH_OFFSET_DATA(id) \ + CVT_DATA->num_used_styles) /* horizontal standard width indices of style i */ #define CVT_HORZ_STANDARD_WIDTH_OFFSET(i) \ (cvtl_max_runtime \ + 3 * CVT_DATA->num_used_styles \ + CVT_DATA->cvt_offsets[i]) /* start and size of horizontal stem widths array of style i */ #define CVT_HORZ_WIDTHS_OFFSET(i) \ (CVT_HORZ_STANDARD_WIDTH_OFFSET(i) + 1) #define CVT_HORZ_WIDTHS_SIZE(i) \ (CVT_DATA->cvt_horz_width_sizes[i]) /* vertical standard width indices of style i */ #define CVT_VERT_STANDARD_WIDTH_OFFSET(i) \ (CVT_HORZ_WIDTHS_OFFSET(i) + CVT_HORZ_WIDTHS_SIZE(i)) /* start and size of vertical stem widths array of style i */ #define CVT_VERT_WIDTHS_OFFSET(i) \ (CVT_VERT_STANDARD_WIDTH_OFFSET(i) + 1) #define CVT_VERT_WIDTHS_SIZE(i) \ (CVT_DATA->cvt_vert_width_sizes[i]) /* number of blue zones (including artificial ones) of style i */ #define CVT_BLUES_SIZE(i) \ (CVT_DATA->cvt_blue_zone_sizes[i]) /* start of blue zone arrays for flat and round edges of style i */ #define CVT_BLUE_REFS_OFFSET(i) \ (CVT_VERT_WIDTHS_OFFSET(i) + CVT_VERT_WIDTHS_SIZE(i)) #define CVT_BLUE_SHOOTS_OFFSET(i) \ (CVT_BLUE_REFS_OFFSET(i) + CVT_BLUES_SIZE(i)) /* x height blue zone (shoot) index of style i (valid if < 0xFFFF) */ #define CVT_X_HEIGHT_BLUE_OFFSET(i) \ (CVT_BLUE_SHOOTS_OFFSET(i) \ + CVT_DATA->cvt_blue_adjustment_offsets[i]) extern FT_Byte ttfautohint_glyph_bytecode[7]; #endif /* TABYTECODE_H_ */ /* end of tabytecode.h */ ttfautohint-1.8.1/lib/tacontrol.c0000644000175000001440000005535313211545410016661 0ustar00wlusers00000000000000/* tacontrol.c */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" #include "tashaper.h" #include #include #include #include #include #include #include /* for llrb.h */ #include "llrb.h" /* a red-black tree implementation */ #include "tacontrol-bison.h" Control* TA_control_new(Control_Type type, long font_idx, long glyph_idx, number_range* point_set, double x_shift, double y_shift, number_range* ppem_set, int line_number) { Control* control; control = (Control*)malloc(sizeof (Control)); if (!control) return NULL; control->type = type; control->font_idx = font_idx; control->glyph_idx = glyph_idx; control->points = number_set_reverse(point_set); switch (control->type) { case Control_Delta_before_IUP: case Control_Delta_after_IUP: /* we round shift values to multiples of 1/(2^CONTROL_DELTA_SHIFT) */ control->x_shift = (int)(x_shift * CONTROL_DELTA_FACTOR + (x_shift > 0 ? 0.5 : -0.5)); control->y_shift = (int)(y_shift * CONTROL_DELTA_FACTOR + (y_shift > 0 ? 0.5 : -0.5)); break; case Control_Single_Point_Segment_Left: case Control_Single_Point_Segment_Right: /* offsets */ control->x_shift = (int)x_shift; control->y_shift = (int)y_shift; break; case Control_Single_Point_Segment_None: control->x_shift = 0; control->y_shift = 0; break; case Control_Script_Feature_Glyphs: /* the `glyph_idx' field holds the style; */ /* the `points' field holds the glyph index set */ break; case Control_Script_Feature_Widths: /* the `glyph_idx' field holds the style */ /* (or a feature for all scripts); */ /* the `points' field holds the width set; */ break; } control->ppems = number_set_reverse(ppem_set); control->next = NULL; control->line_number = line_number; return control; } Control* TA_control_prepend(Control* list, Control* element) { if (!element) return list; element->next = list; return element; } Control* TA_control_reverse(Control* list) { Control* cur; cur = list; list = NULL; while (cur) { Control* tmp; tmp = cur; cur = cur->next; tmp->next = list; list = tmp; } return list; } void TA_control_free(Control* control) { while (control) { Control* tmp; number_set_free(control->points); number_set_free(control->ppems); tmp = control; control = control->next; free(tmp); } } static sds control_show_line(FONT* font, Control* control) { char glyph_name_buf[64]; char* points_buf = NULL; char* ppems_buf = NULL; sds s; FT_Face face; s = sdsempty(); if (!control) goto Exit; if (control->font_idx >= font->num_sfnts) goto Exit; face = font->sfnts[control->font_idx].face; glyph_name_buf[0] = '\0'; if (!(control->type == Control_Script_Feature_Glyphs || control->type == Control_Script_Feature_Widths) && FT_HAS_GLYPH_NAMES(face)) FT_Get_Glyph_Name(face, (FT_UInt)control->glyph_idx, glyph_name_buf, 64); points_buf = number_set_show(control->points, -1, -1); if (!points_buf) goto Exit; ppems_buf = number_set_show(control->ppems, -1, -1); if (!ppems_buf) goto Exit; switch (control->type) { case Control_Delta_before_IUP: case Control_Delta_after_IUP: /* display glyph index if we don't have a glyph name */ if (*glyph_name_buf) s = sdscatprintf(s, "%ld %s %s %s xshift %.20g yshift %.20g @ %s", control->font_idx, glyph_name_buf, control->type == Control_Delta_before_IUP ? "touch" : "point", points_buf, (double)control->x_shift / CONTROL_DELTA_FACTOR, (double)control->y_shift / CONTROL_DELTA_FACTOR, ppems_buf); else s = sdscatprintf(s, "%ld %ld point %s xshift %.20g yshift %.20g @ %s", control->font_idx, control->glyph_idx, points_buf, (double)control->x_shift / CONTROL_DELTA_FACTOR, (double)control->y_shift / CONTROL_DELTA_FACTOR, ppems_buf); break; case Control_Single_Point_Segment_Left: case Control_Single_Point_Segment_Right: /* display glyph index if we don't have a glyph name */ if (*glyph_name_buf) s = sdscatprintf(s, "%ld %s %s %s", control->font_idx, glyph_name_buf, control->type == Control_Single_Point_Segment_Left ? "left" : "right", points_buf); else s = sdscatprintf(s, "%ld %ld %s %s", control->font_idx, control->glyph_idx, control->type == Control_Single_Point_Segment_Left ? "left" : "right", points_buf); if (control->x_shift || control->y_shift) s = sdscatprintf(s, " (%d,%d)", control->x_shift, control->y_shift); break; case Control_Single_Point_Segment_None: /* display glyph index if we don't have a glyph name */ if (*glyph_name_buf) s = sdscatprintf(s, "%ld %s nodir %s", control->font_idx, glyph_name_buf, points_buf); else s = sdscatprintf(s, "%ld %ld nodir %s", control->font_idx, control->glyph_idx, points_buf); break; case Control_Script_Feature_Glyphs: { TA_StyleClass style_class = ta_style_classes[control->glyph_idx]; char feature_name[5]; feature_name[4] = '\0'; hb_tag_to_string(feature_tags[style_class->coverage], feature_name); s = sdscatprintf(s, "%ld %s %s @ %s", control->font_idx, script_names[style_class->script], feature_name, points_buf); } break; case Control_Script_Feature_Widths: { char feature_name[5]; const char* script_name; feature_name[4] = '\0'; if (control->glyph_idx > 0) { TA_StyleClass style_class = ta_style_classes[control->glyph_idx]; script_name = script_names[style_class->script]; hb_tag_to_string(feature_tags[style_class->coverage], feature_name); } else { script_name = "*"; hb_tag_to_string(feature_tags[-control->glyph_idx], feature_name); } s = sdscatprintf(s, "%ld %s %s width %s", control->font_idx, script_name, feature_name, points_buf); } } Exit: free(points_buf); free(ppems_buf); return s; } char* TA_control_show(FONT* font) { sds s; size_t len; char* res; Control* control = font->control; s = sdsempty(); while (control) { sds d; /* append current line to buffer, followed by a newline character */ d = control_show_line(font, control); if (!d) { sdsfree(s); return NULL; } s = sdscatsds(s, d); sdsfree(d); s = sdscat(s, "\n"); control = control->next; } if (!s) return NULL; /* we return an empty string if there is no data */ len = sdslen(s) + 1; res = (char*)malloc(len); if (res) memcpy(res, s, len); sdsfree(s); return res; } /* Parse control instructions in `font->control_buf'. */ TA_Error TA_control_parse_buffer(FONT* font, char** error_string_p, unsigned int* errlinenum_p, char** errline_p, char** errpos_p) { int bison_error; Control_Context context; /* nothing to do if no data */ if (!font->control_buf) { font->control = NULL; return TA_Err_Ok; } TA_control_scanner_init(&context, font); if (context.error) goto Fail; /* this is `yyparse' in disguise */ bison_error = TA_control_parse(&context); TA_control_scanner_done(&context); if (bison_error) { if (bison_error == 2) context.error = TA_Err_Control_Allocation_Error; Fail: font->control = NULL; if (context.error == TA_Err_Control_Allocation_Error || context.error == TA_Err_Control_Flex_Error) { *errlinenum_p = 0; *errline_p = NULL; *errpos_p = NULL; if (*context.errmsg) *error_string_p = strdup(context.errmsg); else *error_string_p = strdup(TA_get_error_message(context.error)); } else { int i, ret; char auxbuf[128]; char* buf_end; char* p_start; char* p_end; /* construct data for `errline_p' */ buf_end = font->control_buf + font->control_len; p_start = font->control_buf; if (context.errline_num > 1) { i = 1; while (p_start < buf_end) { if (*p_start++ == '\n') { i++; if (i == context.errline_num) break; } } } p_end = p_start; while (p_end < buf_end) { if (*p_end == '\n') break; p_end++; } *errline_p = strndup(p_start, (size_t)(p_end - p_start)); /* construct data for `error_string_p' */ if (context.error == TA_Err_Control_Invalid_Font_Index) sprintf(auxbuf, " (valid range is [%ld;%ld])", 0L, font->num_sfnts); else if (context.error == TA_Err_Control_Invalid_Glyph_Index) sprintf(auxbuf, " (valid range is [%ld;%ld])", 0L, font->sfnts[context.font_idx].face->num_glyphs); else if (context.error == TA_Err_Control_Invalid_Shift) sprintf(auxbuf, " (valid interval is [%g;%g])", CONTROL_DELTA_SHIFT_MIN, CONTROL_DELTA_SHIFT_MAX); else if (context.error == TA_Err_Control_Invalid_Offset) sprintf(auxbuf, " (valid interval is [%d;%d])", SHRT_MIN, SHRT_MAX); else if (context.error == TA_Err_Control_Invalid_Range) sprintf(auxbuf, " (values must be within [%d;%d])", context.number_set_min, context.number_set_max); else auxbuf[0] = '\0'; ret = asprintf(error_string_p, "%s%s", *context.errmsg ? context.errmsg : TA_get_error_message(context.error), auxbuf); if (ret == -1) *error_string_p = NULL; if (errline_p) *errpos_p = *errline_p + context.errline_pos_left - 1; else *errpos_p = NULL; *errlinenum_p = (unsigned int)context.errline_num; } } else font->control = context.result; return context.error; } /* apply coverage data from the control instructions file */ void TA_control_apply_coverage(SFNT* sfnt, FONT* font) { Control* control = font->control; TA_FaceGlobals globals = (TA_FaceGlobals)sfnt->face->autohint.data; FT_UShort* gstyles = globals->glyph_styles; while (control) { number_set_iter glyph_idx_iter; int glyph_idx; int style; if (control->type != Control_Script_Feature_Glyphs) goto Skip; if (control->font_idx != sfnt->face->face_index) goto Skip; /* `control->glyph_idx' holds the style; */ /* `control->points' holds the glyph index set */ style = (int)control->glyph_idx; glyph_idx_iter.range = control->points; glyph_idx = number_set_get_first(&glyph_idx_iter); while (glyph_idx >= 0) { /* assign new style but retain digit property */ gstyles[glyph_idx] &= TA_DIGIT; gstyles[glyph_idx] |= style; glyph_idx = number_set_get_next(&glyph_idx_iter); } Skip: control = control->next; } } /* handle stem width data from the control instructions file; */ void TA_control_set_stem_widths(TA_LatinMetrics metrics, FONT* font) { Control* control = font->control; FT_Face face = font->loader->face; TA_WidthRec* widths = metrics->axis[TA_DIMENSION_VERT].widths; while (control) { TA_StyleClass style_class = metrics->root.style_class; number_set_iter width_iter; int width; int i; if (control->type != Control_Script_Feature_Widths) goto Skip; if (control->font_idx != face->face_index) goto Skip; /* `control->glyph_idx' holds either a style */ /* or a feature for all scripts */ if (!(control->glyph_idx == style_class->style || -control->glyph_idx == style_class->coverage)) goto Skip; /* `control->points' holds the width set */ width_iter.range = control->points; width = number_set_get_first(&width_iter); i = 0; while (width >= 0) { widths[i++].org = width; width = number_set_get_next(&width_iter); } metrics->axis[TA_DIMENSION_VERT].width_count = i; Skip: control = control->next; } } /* node structure for control instruction data */ typedef struct Node Node; struct Node { LLRB_ENTRY(Node) entry; Ctrl ctrl; }; /* comparison function for our red-black tree */ static int nodecmp(Node* e1, Node* e2) { long diff; /* sort by font index ... */ diff = e1->ctrl.font_idx - e2->ctrl.font_idx; if (diff) goto Exit; /* ... then by glyph index ... */ diff = e1->ctrl.glyph_idx - e2->ctrl.glyph_idx; if (diff) goto Exit; /* ... then by ppem ... */ diff = e1->ctrl.ppem - e2->ctrl.ppem; if (diff) goto Exit; /* ... then by point index */ diff = e1->ctrl.point_idx - e2->ctrl.point_idx; Exit: /* https://graphics.stanford.edu/~seander/bithacks.html#CopyIntegerSign */ return (diff > 0) - (diff < 0); } /* the red-black tree function body */ typedef struct control_data control_data; LLRB_HEAD(control_data, Node); /* no trailing semicolon in the next line */ LLRB_GENERATE_STATIC(control_data, Node, entry, nodecmp) void TA_control_free_tree(FONT* font) { control_data* control_data_head = (control_data*)font->control_data_head; Control* control_segment_dirs_head = (Control*)font->control_segment_dirs_head; Node* node; Node* next_node; if (!control_data_head) return; for (node = LLRB_MIN(control_data, control_data_head); node; node = next_node) { next_node = LLRB_NEXT(control_data, control_data_head, node); LLRB_REMOVE(control_data, control_data_head, node); free(node); } free(control_data_head); TA_control_free(control_segment_dirs_head); } TA_Error TA_control_build_tree(FONT* font) { Control* control = font->control; control_data* control_data_head; int emit_newline = 0; font->control_segment_dirs_head = NULL; font->control_segment_dirs_cur = NULL; /* nothing to do if no data */ if (!control) { font->control_data_head = NULL; font->control_data_cur = NULL; return TA_Err_Ok; } control_data_head = (control_data*)malloc(sizeof (control_data)); if (!control_data_head) return FT_Err_Out_Of_Memory; LLRB_INIT(control_data_head); while (control) { Control_Type type = control->type; long font_idx = control->font_idx; long glyph_idx = control->glyph_idx; int x_shift = control->x_shift; int y_shift = control->y_shift; int line_number = control->line_number; number_set_iter ppems_iter; int ppem; /* we don't store style information in the tree */ if (type == Control_Script_Feature_Glyphs) { control = control->next; continue; } ppems_iter.range = control->ppems; ppem = number_set_get_first(&ppems_iter); /* ppem is always zero for one-point segments */ if (type == Control_Single_Point_Segment_Left || type == Control_Single_Point_Segment_Right || type == Control_Single_Point_Segment_None) goto Points_Loop; while (ppem >= 0) { number_set_iter points_iter; int point_idx; Points_Loop: points_iter.range = control->points; point_idx = number_set_get_first(&points_iter); while (point_idx >= 0) { Node* node; Node* val; node = (Node*)malloc(sizeof (Node)); if (!node) return FT_Err_Out_Of_Memory; node->ctrl.type = type; node->ctrl.font_idx = font_idx; node->ctrl.glyph_idx = glyph_idx; node->ctrl.ppem = ppem; node->ctrl.point_idx = point_idx; node->ctrl.x_shift = x_shift; node->ctrl.y_shift = y_shift; node->ctrl.line_number = line_number; val = LLRB_INSERT(control_data, control_data_head, node); if (val && font->debug) { /* entry is already present; we overwrite it */ Control d; number_range ppems; number_range points; sds s; /* construct Control entry for debugging output */ ppems.start = ppem; ppems.end = ppem; ppems.next = NULL; points.start = point_idx; points.end = point_idx; points.next = NULL; d.type = type; d.font_idx = font_idx; d.glyph_idx = glyph_idx; d.points = &points; d.x_shift = x_shift; d.y_shift = y_shift; d.ppems = &ppems; d.next = NULL; s = control_show_line(font, &d); if (s) { fprintf(stderr, "Control instruction `%s' (line %d)" " overwrites data from line %d.\n", s, line_number, val->ctrl.line_number); sdsfree(s); } emit_newline = 1; } if (val) { val->ctrl.type = type; val->ctrl.font_idx = font_idx; val->ctrl.glyph_idx = glyph_idx; val->ctrl.ppem = ppem; val->ctrl.point_idx = point_idx; val->ctrl.x_shift = x_shift; val->ctrl.y_shift = y_shift; val->ctrl.line_number = line_number; free(node); } point_idx = number_set_get_next(&points_iter); } ppem = number_set_get_next(&ppems_iter); } control = control->next; } if (font->debug && emit_newline) fprintf(stderr, "\n"); font->control_data_head = control_data_head; font->control_data_cur = LLRB_MIN(control_data, control_data_head); return TA_Err_Ok; } /* the next functions are intended to restrict the use of LLRB stuff */ /* related to control instructions to this file, */ /* providing a means to access the data sequentially */ void TA_control_get_next(FONT* font) { Node* node = (Node*)font->control_data_cur; if (!node) return; node = LLRB_NEXT(control_data, /* unused */, node); font->control_data_cur = node; } const Ctrl* TA_control_get_ctrl(FONT* font) { Node* node = (Node*)font->control_data_cur; return node ? &node->ctrl : NULL; } TA_Error TA_control_segment_dir_collect(FONT* font, long font_idx, long glyph_idx) { Control* control_segment_dirs_head = (Control*)font->control_segment_dirs_head; /* nothing to do if no data */ if (!font->control_data_head) return TA_Err_Ok; if (control_segment_dirs_head) { TA_control_free(control_segment_dirs_head); control_segment_dirs_head = NULL; } /* * The PPEM value for one-point segments is always zero; such control * instructions are thus sorted before other control instructions for the * same glyph index -- this fits nicely with the call to * `TA_control_get_next' in the loop of `TA_sfnt_build_delta_exceptions', * assuring proper sequential access to the red-black tree. */ for (;;) { const Ctrl* ctrl = TA_control_get_ctrl(font); Control* elem; if (!ctrl) break; /* check type */ if (!(ctrl->type == Control_Single_Point_Segment_Left || ctrl->type == Control_Single_Point_Segment_Right || ctrl->type == Control_Single_Point_Segment_None)) break; /* too large values of font and glyph indices in `ctrl' */ /* are handled by later calls of this function */ if (font_idx < ctrl->font_idx || glyph_idx < ctrl->glyph_idx) break; /* we simply use the `Control' structure again, */ /* abusing the `glyph_idx' field for the point index */ elem = TA_control_new(ctrl->type, 0, ctrl->point_idx, NULL, ctrl->x_shift, ctrl->y_shift, NULL, ctrl->line_number); if (!elem) { TA_control_free(control_segment_dirs_head); return TA_Err_Control_Allocation_Error; } control_segment_dirs_head = TA_control_prepend(control_segment_dirs_head, elem); TA_control_get_next(font); } font->control_segment_dirs_head = TA_control_reverse(control_segment_dirs_head); font->control_segment_dirs_cur = font->control_segment_dirs_head; return TA_Err_Ok; } int TA_control_segment_dir_get_next(FONT* font, int* point_idx, TA_Direction* dir, int* left_offset, int* right_offset) { Control* control_segment_dirs_head = (Control*)font->control_segment_dirs_head; Control* control_segment_dirs_cur = (Control*)font->control_segment_dirs_cur; /* nothing to do if no data */ if (!control_segment_dirs_head) return 0; if (!control_segment_dirs_cur) { font->control_segment_dirs_cur = control_segment_dirs_head; return 0; } /* the `glyph_idx' field gets abused for `point_idx' */ *point_idx = (int)control_segment_dirs_cur->glyph_idx; *dir = control_segment_dirs_cur->type == Control_Single_Point_Segment_Left ? TA_DIR_LEFT : control_segment_dirs_cur->type == Control_Single_Point_Segment_Right ? TA_DIR_RIGHT : TA_DIR_NONE; *left_offset = control_segment_dirs_cur->x_shift; *right_offset = control_segment_dirs_cur->y_shift; font->control_segment_dirs_cur = control_segment_dirs_cur->next; return control_segment_dirs_cur != NULL; } /* end of tacontrol.c */ ttfautohint-1.8.1/lib/tacontrol.h0000644000175000001440000002152013210003650016645 0ustar00wlusers00000000000000/* tacontrol.h */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #ifndef TACONTROL_H_ #define TACONTROL_H_ #ifdef __cplusplus extern "C" { #endif #include /* for flex error handling */ /* see the section `Managing exceptions' in chapter 6 */ /* (`The TrueType Instruction Set') of the OpenType reference */ /* how `delta_shift' works */ #define CONTROL_DELTA_SHIFT 3 /* 1/8px */ #define CONTROL_DELTA_FACTOR (1 << CONTROL_DELTA_SHIFT) #define CONTROL_DELTA_SHIFT_MAX ((1.0 / CONTROL_DELTA_FACTOR) * 8) #define CONTROL_DELTA_SHIFT_MIN -CONTROL_DELTA_SHIFT_MAX /* * For the generated TrueType bytecode, we use * * delta_base = 6 , * * which gives us the following ppem ranges for the three delta * instructions: * * DELTAP1 6-21ppem * DELTAP2 22-37ppem * DELTAP3 38-53ppem . */ #define CONTROL_DELTA_PPEM_MIN 6 #define CONTROL_DELTA_PPEM_MAX 53 /* * The control type. */ typedef enum Control_Type_ { Control_Delta_before_IUP, Control_Delta_after_IUP, Control_Single_Point_Segment_Left, Control_Single_Point_Segment_Right, Control_Single_Point_Segment_None, Control_Script_Feature_Glyphs, Control_Script_Feature_Widths } Control_Type; /* * A structure to hold control instructions. A linked list of it gets * allocated by a successful call to `TA_control_parse_buffer'. Use * `TA_control_free' to deallocate the list. * * `x_shift' and `y_shift' are in the range [-8;8] for delta exceptions * and in the range [SHRT_MIN;SHRT_MAX] for one-point segment offsets. * * The `Control' typedef is in `ta.h'. */ struct Control_ { Control_Type type; long font_idx; long glyph_idx; number_range* points; int x_shift; int y_shift; number_range* ppems; int line_number; struct Control_* next; }; /* * A structure to hold a single control instruction. */ typedef struct Ctrl_ { Control_Type type; long font_idx; long glyph_idx; int ppem; int point_idx; int x_shift; int y_shift; int line_number; } Ctrl; /* * This structure is used for communication with `TA_control_parse'. */ typedef struct Control_Context_ { /* The error code returned by the parser or lexer. */ TA_Error error; /* If no error, this holds the parsing result. */ Control* result; /* * The parser's or lexer's error message in case of error; might be the * empty string. */ char errmsg[256]; /* * In case of error, `errline_num' gives the line number of the offending * line in `font->control_buf', starting with value 1; `errline_pos_left' * and `errline_pos_right' hold the left and right position of the * offending token in this line, also starting with value 1. For * allocation errors or internal parser or lexer errors those values are * meaningless, though. */ int errline_num; int errline_pos_left; int errline_pos_right; /* * The current font index, useful for `TA_Err_Control_Invalid_Font_Index'. */ long font_idx; /* * The current glyph index, useful for * `TA_Err_Control_Invalid_Glyph_Index'. */ long glyph_idx; /* * If the returned error is `TA_Err_Control_Invalid_Range', these two * values set up the allowed range. */ int number_set_min; int number_set_max; /* * Some sets restrict the number of elements. */ int number_set_num_elems; /* private flex data */ void* scanner; int eof; jmp_buf jump_buffer; /* private bison data */ FONT* font; } Control_Context; /* * Create and initialize a `Control' object. In case of an allocation error, * the return value is NULL. `point_set' and `ppem_set' are expected to be * in reverse list order; `TA_control_new' then reverts them to normal order. */ Control* TA_control_new(Control_Type type, long font_idx, long glyph_idx, number_range* point_set, double x_shift, double y_shift, number_range* ppem_set, int line_number); /* * Prepend `element' to `list' of `Control' objects. If `element' is NULL, * return `list. */ Control* TA_control_prepend(Control* list, Control* element); /* * Reverse a list of `Control' objects. */ Control* TA_control_reverse(Control* list); /* * Initialize the scanner data within a `Control_Context' object. * `font->control_buf' is the control instructions buffer to be parsed, * `font->control_len' its length. * * This function is defined in `tacontrol.flex'. */ void TA_control_scanner_init(Control_Context* context, FONT* font); /* * Free the scanner data within a `Control_Context' object. * * This function is defined in `tacontrol.flex'. */ void TA_control_scanner_done(Control_Context* context); /* * Parse buffer with ttfautohint control instructions, stored in * `font->control_buf' with length `font->control_len'. * * The format of entries in such a control instructions buffer is given in * `ttfautohint.h' (option `control-file'); the following describes more * technical details, using the constants defined above. * * x shift and y shift values represent floating point numbers that get * rounded to multiples of 1/(2^CONTROL_DELTA_SHIFT) pixels. * * Values for x and y shifts must be in the range * [CONTROL_DELTA_SHIFT_MIN;CONTROL_DELTA_SHIFT_MAX]. Values for ppems must * be in the range [CONTROL_DELTA_PPEM_MIN;CONTROL_DELTA_PPEM_MAX]. * * The returned error codes are 0 (TA_Err_Ok) or in the range 0x200-0x2FF; * see `ttfautohint-errors.h' for all possible values. * * `TA_control_parse_buffer' stores the parsed result in `font->control', to * be freed with `TA_control_free' after use. If there is no control * instructions data (for example, an empty string or whitespace only) * nothing gets allocated, and `font->control' is set to NULL. * * In case of error, `error_string_p' holds an error message, `errlinenum_p' * gives the line number in the control instructions buffer where the error * occurred, `errline_p' the corresponding line, and `errpos_p' the position * in this line. After use, `error_string_p' and `errline_p' must be * deallocated by the user. Note that `errline_p' and `errpos_p' can be * NULL even in case of an error. If there is no error, those four values * are undefined. */ TA_Error TA_control_parse_buffer(FONT* font, char** error_string_p, unsigned int* errlinenum_p, char** errline_p, char** errpos_p); /* * Apply coverage data from the control instructions file. */ void TA_control_apply_coverage(SFNT* sfnt, FONT* font); /* * Handle stem width data from the control instructions file. */ void TA_control_set_stem_widths(TA_LatinMetrics metrics, FONT* font); /* * Free the allocated data in `control'. */ void TA_control_free(Control* control); /* * Return a string representation of `font->control'. After use, the string * should be deallocated with a call to `free'. In case of an allocation * error, the return value is NULL. */ char* TA_control_show(FONT* font); /* * Build a tree providing sequential access to the control instructions data * in `font->control'. This also sets `font->control_data_cur' to the first * element (or NULL if there isn't one). */ TA_Error TA_control_build_tree(FONT* font); /* * Free the control instructions data tree. */ void TA_control_free_tree(FONT* font); /* * Get next control instruction and store it in `font->control_data_cur'. */ void TA_control_get_next(FONT* font); /* * Access control instruction. Return NULL if there is no more data. */ const Ctrl* TA_control_get_ctrl(FONT* font); /* * Collect one-point segment data for a given glyph index and store them in * `font->control_segment_dirs'. */ TA_Error TA_control_segment_dir_collect(FONT* font, long font_idx, long glyph_idx); /* * Access next one-point segment data. Returns 1 on success or 0 if no more * data. In the latter case, it resets the internal iterator so that * calling this function another time starts at the beginning again. */ int TA_control_segment_dir_get_next(FONT* font, int* point_idx, TA_Direction* dir, int* left_offset, int* right_offset); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* TACONTROL_H_ */ /* end of control.h */ ttfautohint-1.8.1/lib/tacontrol-flex.c0000644000175000001440000020013213222451061017600 0ustar00wlusers00000000000000#line 2 "tacontrol-flex.c" #line 43 "./tacontrol.flex" #include "config.h" #line 8 "tacontrol-flex.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 1 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* TODO: this is always defined, so inline it */ #define yyconst const /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* An opaque pointer. */ #ifndef YY_TYPEDEF_YY_SCANNER_T #define YY_TYPEDEF_YY_SCANNER_T typedef void* yyscan_t; #endif /* For convenience, these vars (plus the bison vars far below) are macros in the reentrant scanner. */ #define yyin yyg->yyin_r #define yyout yyg->yyout_r #define yyextra yyg->yyextra_r #define yyleng yyg->yyleng_r #define yytext yyg->yytext_r #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) #define yy_flex_debug yyg->yy_flex_debug_r /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN yyg->yy_start = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START ((yyg->yy_start - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart(yyin ,yyscanner ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires * access to the local variable yy_act. Since yyless() is a macro, it would break * existing scanners that call yyless() from OUTSIDE yylex. * One obvious solution it to make yy_act a global. I tried that, and saw * a 5% performance hit in a non-yylineno scanner, because yy_act is * normally declared as a register variable-- so it is not worth it. */ #define YY_LESS_LINENO(n) \ do { \ int yyl;\ for ( yyl = n; yyl < yyleng; ++yyl )\ if ( yytext[yyl] == '\n' )\ --yylineno;\ }while(0) #define YY_LINENO_REWIND_TO(dst) \ do {\ const char *p;\ for ( p = yy_cp-1; p >= (dst); --p)\ if ( *p == '\n' )\ --yylineno;\ }while(0) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = yyg->yy_hold_char; \ YY_RESTORE_YY_MORE_OFFSET \ yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] void yyrestart (FILE *input_file ,yyscan_t yyscanner ); void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); void yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); void yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); void yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); void yypop_buffer_state (yyscan_t yyscanner ); static void yyensure_buffer_stack (yyscan_t yyscanner ); static void yy_load_buffer_state (yyscan_t yyscanner ); static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner) YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner ); void *yyalloc (yy_size_t ,yyscan_t yyscanner ); void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); void yyfree (void * ,yyscan_t yyscanner ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define yywrap(yyscanner) (/*CONSTCOND*/1) #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; typedef int yy_state_type; #define yytext_ptr yytext_r static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); static int yy_get_next_buffer (yyscan_t yyscanner ); #if defined(__GNUC__) && __GNUC__ >= 3 __attribute__((__noreturn__)) #endif static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ yyg->yytext_ptr = yy_bp; \ yyleng = (size_t) (yy_cp - yy_bp); \ yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; #define YY_NUM_RULES 19 #define YY_END_OF_BUFFER 20 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[72] = { 0, 0, 0, 20, 18, 1, 2, 4, 8, 5, 17, 5, 6, 2, 17, 18, 13, 15, 9, 14, 10, 16, 11, 12, 1, 2, 4, 17, 7, 7, 6, 0, 0, 6, 3, 17, 17, 17, 17, 17, 17, 17, 17, 7, 6, 0, 17, 17, 17, 17, 17, 17, 17, 17, 13, 17, 17, 17, 17, 17, 17, 17, 15, 9, 14, 10, 16, 17, 17, 11, 12, 0 } ; static yyconst YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 4, 1, 1, 1, 1, 5, 5, 5, 6, 5, 6, 7, 1, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 1, 11, 1, 1, 1, 1, 5, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 13, 13, 1, 15, 1, 1, 13, 1, 12, 12, 16, 17, 18, 19, 20, 21, 22, 13, 13, 23, 13, 24, 25, 26, 13, 27, 28, 29, 30, 13, 31, 32, 33, 13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst YY_CHAR yy_meta[34] = { 0, 1, 1, 2, 1, 1, 1, 3, 4, 4, 4, 1, 4, 3, 3, 1, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 } ; static yyconst flex_uint16_t yy_base[75] = { 0, 0, 0, 118, 119, 115, 31, 0, 119, 119, 27, 36, 31, 44, 0, 113, 97, 89, 88, 90, 86, 88, 81, 80, 105, 45, 0, 0, 43, 49, 53, 57, 0, 62, 91, 86, 87, 81, 82, 71, 83, 78, 77, 65, 0, 94, 67, 73, 70, 72, 76, 62, 68, 67, 0, 61, 58, 57, 64, 63, 64, 63, 0, 0, 0, 0, 0, 48, 25, 0, 0, 119, 75, 77, 45 } ; static yyconst flex_int16_t yy_def[75] = { 0, 71, 1, 71, 71, 71, 71, 72, 71, 71, 73, 71, 71, 71, 73, 71, 73, 73, 73, 73, 73, 73, 73, 73, 71, 71, 72, 73, 73, 71, 71, 71, 74, 71, 71, 73, 73, 73, 73, 73, 73, 73, 73, 71, 74, 71, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 0, 71, 71, 71 } ; static yyconst flex_uint16_t yy_nxt[153] = { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14, 14, 14, 15, 14, 14, 14, 14, 14, 14, 14, 16, 17, 14, 18, 19, 14, 20, 14, 21, 22, 23, 25, 28, 28, 28, 29, 33, 33, 33, 25, 29, 30, 30, 31, 25, 25, 44, 32, 28, 28, 28, 70, 25, 25, 43, 43, 43, 29, 30, 30, 31, 29, 31, 31, 31, 32, 29, 33, 33, 33, 43, 43, 43, 26, 69, 26, 26, 27, 27, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 34, 53, 52, 51, 50, 49, 48, 47, 46, 45, 24, 42, 41, 40, 39, 38, 37, 36, 35, 34, 24, 71, 3, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71 } ; static yyconst flex_int16_t yy_chk[153] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 10, 10, 10, 12, 12, 12, 12, 6, 11, 11, 11, 11, 13, 25, 74, 11, 28, 28, 28, 68, 13, 25, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 11, 33, 33, 33, 33, 43, 43, 43, 72, 67, 72, 72, 73, 73, 61, 60, 59, 58, 57, 56, 55, 53, 52, 51, 50, 49, 48, 47, 46, 45, 42, 41, 40, 39, 38, 37, 36, 35, 34, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 5, 3, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71 } ; /* Table of booleans, true if rule could match eol. */ static yyconst flex_int32_t yy_rule_can_match_eol[20] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "./tacontrol.flex" /* tacontrol.flex */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* * lexical analyzer for parsing ttfautohint control instructions * * Lexing errors are indicated by setting `context->error' to an appropriate * value; fatal lexer errors return token `INTERNAL_FLEX_ERROR'. */ /* you should use flex version >= 2.5.39 to avoid various buglets */ /* that don't have work-arounds */ #define YY_NO_INPUT 1 #line 48 "./tacontrol.flex" #include #include #include "ta.h" #include "tacontrol-bison.h" /* option `yylineno' resets `yycolumn' to 0 after a newline */ /* (since version 2.5.30, March 2003) before the next token gets read; */ /* note we want both line number and column start with value 1 */ #define YY_USER_ACTION \ yylloc->first_line = yylineno + 1; \ yylloc->last_line = yylineno + 1; \ yylloc->first_column = yycolumn; \ yylloc->last_column = yycolumn + (int)yyleng - 1; \ yycolumn += yyleng; #define YY_EXTRA_TYPE Control_Context* #define YY_FATAL_ERROR(msg) TA_control_scanner_fatal_error(msg, yyscanner) /* by default, `yylex' simply calls `exit' (via YY_FATAL_ERROR) */ /* in case of a (more or less) fatal error -- */ /* this is bad for a library, thus we use `longjmp' to catch this, */ /* together with a proper handler for YY_FATAL_ERROR */ #define YY_USER_INIT \ do \ { \ if (setjmp(yyextra->jump_buffer) != 0) \ { \ /* error and error message in `context' already stored by */ \ /* `TA_control_scanner_fatal_error' */ \ return INTERNAL_FLEX_ERROR; \ } \ } while (0) /* this macro works around flex bug to suppress a compilation warning, */ /* cf. https://sourceforge.net/p/flex/bugs/115 */ #define YY_EXIT_FAILURE ((void)yyscanner, 2) #define NAME_ASSIGN \ do \ { \ yylval->name = strdup(yytext); \ if (!yylval->name) \ yyextra->error = TA_Err_Control_Allocation_Error; \ } while (0) void TA_control_scanner_fatal_error(const char* msg, yyscan_t yyscanner); #line 589 "tacontrol-flex.c" #define INITIAL 0 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif /* Holds the entire state of the reentrant scanner. */ struct yyguts_t { /* User-defined. Not touched by flex. */ YY_EXTRA_TYPE yyextra_r; /* The rest are the same as the globals declared in the non-reentrant scanner. */ FILE *yyin_r, *yyout_r; size_t yy_buffer_stack_top; /**< index of top of stack. */ size_t yy_buffer_stack_max; /**< capacity of stack. */ YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ char yy_hold_char; yy_size_t yy_n_chars; yy_size_t yyleng_r; char *yy_c_buf_p; int yy_init; int yy_start; int yy_did_buffer_switch_on_eof; int yy_start_stack_ptr; int yy_start_stack_depth; int *yy_start_stack; yy_state_type yy_last_accepting_state; char* yy_last_accepting_cpos; int yylineno_r; int yy_flex_debug_r; char *yytext_r; int yy_more_flag; int yy_more_len; YYSTYPE * yylval_r; YYLTYPE * yylloc_r; }; /* end struct yyguts_t */ static int yy_init_globals (yyscan_t yyscanner ); /* This must go here because YYSTYPE and YYLTYPE are included * from bison output in section 1.*/ # define yylval yyg->yylval_r # define yylloc yyg->yylloc_r int yylex_init (yyscan_t* scanner); int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy (yyscan_t yyscanner ); int yyget_debug (yyscan_t yyscanner ); void yyset_debug (int debug_flag ,yyscan_t yyscanner ); YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner ); void yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); FILE *yyget_in (yyscan_t yyscanner ); void yyset_in (FILE * _in_str ,yyscan_t yyscanner ); FILE *yyget_out (yyscan_t yyscanner ); void yyset_out (FILE * _out_str ,yyscan_t yyscanner ); yy_size_t yyget_leng (yyscan_t yyscanner ); char *yyget_text (yyscan_t yyscanner ); int yyget_lineno (yyscan_t yyscanner ); void yyset_lineno (int _line_number ,yyscan_t yyscanner ); int yyget_column (yyscan_t yyscanner ); void yyset_column (int _column_no ,yyscan_t yyscanner ); YYSTYPE * yyget_lval (yyscan_t yyscanner ); void yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); YYLTYPE *yyget_lloc (yyscan_t yyscanner ); void yyset_lloc (YYLTYPE * yylloc_param ,yyscan_t yyscanner ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap (yyscan_t yyscanner ); #else extern int yywrap (yyscan_t yyscanner ); #endif #endif #ifndef YY_NO_UNPUT #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (yyscan_t yyscanner ); #else static int input (yyscan_t yyscanner ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex \ (YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner); #define YY_DECL int yylex \ (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK /*LINTED*/break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { yy_state_type yy_current_state; char *yy_cp, *yy_bp; int yy_act; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yylval = yylval_param; yylloc = yylloc_param; if ( !yyg->yy_init ) { yyg->yy_init = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! yyg->yy_start ) yyg->yy_start = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (yyscanner); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); } yy_load_buffer_state(yyscanner ); } { #line 105 "./tacontrol.flex" #line 876 "tacontrol-flex.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { yy_cp = yyg->yy_c_buf_p; /* Support of yytext. */ *yy_cp = yyg->yy_hold_char; /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = yyg->yy_start; yy_match: do { YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 72 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 71 ); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) { yy_size_t yyl; for ( yyl = 0; yyl < yyleng; ++yyl ) if ( yytext[yyl] == '\n' ) do{ yylineno++; yycolumn=0; }while(0) ; } do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = yyg->yy_hold_char; yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; goto yy_find_action; case 1: YY_RULE_SETUP #line 109 "./tacontrol.flex" { /* skip whitespace */ } YY_BREAK case 2: /* rule 2 can match eol */ YY_RULE_SETUP #line 116 "./tacontrol.flex" { /* end of entry */ return EOE; } YY_BREAK case YY_STATE_EOF(INITIAL): #line 121 "./tacontrol.flex" { /* we want an EOE token at end of file, too */ if (!yyextra->eof) { yyextra->eof = 1; return EOE; } else yyterminate(); } YY_BREAK case 3: /* rule 3 can match eol */ YY_RULE_SETUP #line 134 "./tacontrol.flex" { /* skip escaped newline */ } YY_BREAK case 4: YY_RULE_SETUP #line 139 "./tacontrol.flex" { /* skip line comment */ } YY_BREAK case 5: YY_RULE_SETUP #line 145 "./tacontrol.flex" { /* values `0' and `-' need special treatment for number ranges */ return yytext[0]; } YY_BREAK case 6: YY_RULE_SETUP #line 153 "./tacontrol.flex" { /* we don't support localized formats like a thousands separator */ errno = 0; yylval->integer = strtol(yytext, NULL, 0); if (errno == ERANGE) { /* overflow or underflow */ yyextra->error = TA_Err_Control_Overflow; } return INTEGER; } YY_BREAK case 7: YY_RULE_SETUP #line 167 "./tacontrol.flex" { /* we don't support exponents, */ /* and we don't support localized formats like using `,' instead of `.' */ errno = 0; yylval->real = strtod(yytext, NULL); if (yylval->real != 0 && errno == ERANGE) { /* overflow */ yyextra->error = TA_Err_Control_Overflow; } return REAL; } YY_BREAK case 8: YY_RULE_SETUP #line 182 "./tacontrol.flex" { /* delimiters, wildcard */ return yytext[0]; } YY_BREAK case 9: YY_RULE_SETUP #line 189 "./tacontrol.flex" { NAME_ASSIGN; return POINT; } YY_BREAK case 10: YY_RULE_SETUP #line 196 "./tacontrol.flex" { NAME_ASSIGN; return TOUCH; } YY_BREAK case 11: YY_RULE_SETUP #line 203 "./tacontrol.flex" { NAME_ASSIGN; return XSHIFT; } YY_BREAK case 12: YY_RULE_SETUP #line 210 "./tacontrol.flex" { NAME_ASSIGN; return YSHIFT; } YY_BREAK case 13: YY_RULE_SETUP #line 217 "./tacontrol.flex" { NAME_ASSIGN; return LEFT; } YY_BREAK case 14: YY_RULE_SETUP #line 224 "./tacontrol.flex" { NAME_ASSIGN; return RIGHT; } YY_BREAK case 15: YY_RULE_SETUP #line 231 "./tacontrol.flex" { NAME_ASSIGN; return NODIR; } YY_BREAK case 16: YY_RULE_SETUP #line 238 "./tacontrol.flex" { NAME_ASSIGN; return WIDTH; } YY_BREAK case 17: YY_RULE_SETUP #line 244 "./tacontrol.flex" { NAME_ASSIGN; return NAME; } YY_BREAK case 18: YY_RULE_SETUP #line 251 "./tacontrol.flex" { /* invalid input */ yylval->character = yytext[0]; return INVALID_CHARACTER; } YY_BREAK case 19: YY_RULE_SETUP #line 258 "./tacontrol.flex" ECHO; YY_BREAK #line 1118 "tacontrol-flex.c" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = yyg->yy_hold_char; YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) { /* This was really a NUL. */ yy_state_type yy_next_state; yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( yyscanner ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++yyg->yy_c_buf_p; yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; goto yy_find_action; } } else switch ( yy_get_next_buffer( yyscanner ) ) { case EOB_ACT_END_OF_FILE: { yyg->yy_did_buffer_switch_on_eof = 0; if ( yywrap(yyscanner ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! yyg->yy_did_buffer_switch_on_eof ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( yyscanner ); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: yyg->yy_c_buf_p = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; yy_current_state = yy_get_previous_state( yyscanner ); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of user's declarations */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *source = yyg->yytext_ptr; yy_size_t number_to_move, i; int ret_val; if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (yy_size_t) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int yy_c_buf_p_offset = (int) (yyg->yy_c_buf_p - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), yyg->yy_n_chars, num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } if ( yyg->yy_n_chars == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart(yyin ,yyscanner); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } yyg->yy_n_chars += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (yyscan_t yyscanner) { yy_state_type yy_current_state; char *yy_cp; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yy_current_state = yyg->yy_start; for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) { YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 72 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) { int yy_is_jam; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ char *yy_cp = yyg->yy_c_buf_p; YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 72 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 71); (void)yyg; return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_UNPUT #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (yyscan_t yyscanner) #else static int input (yyscan_t yyscanner) #endif { int c; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; *yyg->yy_c_buf_p = yyg->yy_hold_char; if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) /* This was really a NUL. */ *yyg->yy_c_buf_p = '\0'; else { /* need more input */ yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr; ++yyg->yy_c_buf_p; switch ( yy_get_next_buffer( yyscanner ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart(yyin ,yyscanner); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap(yyscanner ) ) return 0; if ( ! yyg->yy_did_buffer_switch_on_eof ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(yyscanner); #else return input(yyscanner); #endif } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + offset; break; } } } c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ yyg->yy_hold_char = *++yyg->yy_c_buf_p; if ( c == '\n' ) do{ yylineno++; yycolumn=0; }while(0) ; return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * @param yyscanner The scanner object. * @note This function does not reset the start condition to @c INITIAL . */ void yyrestart (FILE * input_file , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (yyscanner); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); } yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); yy_load_buffer_state(yyscanner ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * @param yyscanner The scanner object. */ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (yyscanner); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state(yyscanner ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ yyg->yy_did_buffer_switch_on_eof = 1; } static void yy_load_buffer_state (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; yyg->yy_hold_char = *yyg->yy_c_buf_p; } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * @param yyscanner The scanner object. * @return the allocated buffer state. */ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = (yy_size_t)size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ,yyscanner ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer(b,file ,yyscanner); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * @param yyscanner The scanner object. */ void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yyfree((void *) b->yy_ch_buf ,yyscanner ); yyfree((void *) b ,yyscanner ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) { int oerrno = errno; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yy_flush_buffer(b ,yyscanner); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * @param yyscanner The scanner object. */ void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state(yyscanner ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * @param yyscanner The scanner object. */ void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (new_buffer == NULL) return; yyensure_buffer_stack(yyscanner); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) yyg->yy_buffer_stack_top++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state(yyscanner ); yyg->yy_did_buffer_switch_on_eof = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * @param yyscanner The scanner object. */ void yypop_buffer_state (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner); YY_CURRENT_BUFFER_LVALUE = NULL; if (yyg->yy_buffer_stack_top > 0) --yyg->yy_buffer_stack_top; if (YY_CURRENT_BUFFER) { yy_load_buffer_state(yyscanner ); yyg->yy_did_buffer_switch_on_eof = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void yyensure_buffer_stack (yyscan_t yyscanner) { yy_size_t num_to_alloc; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (!yyg->yy_buffer_stack) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) , yyscanner); if ( ! yyg->yy_buffer_stack ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); yyg->yy_buffer_stack_max = num_to_alloc; yyg->yy_buffer_stack_top = 0; return; } if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ /* Increase the buffer to prepare for a possible push. */ yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = yyg->yy_buffer_stack_max + grow_size; yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc (yyg->yy_buffer_stack, num_to_alloc * sizeof(struct yy_buffer_state*) , yyscanner); if ( ! yyg->yy_buffer_stack ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); yyg->yy_buffer_stack_max = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer(b ,yyscanner ); return b; } /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * @param yyscanner The scanner object. * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr , yyscan_t yyscanner) { return yy_scan_bytes(yystr,strlen(yystr) ,yyscanner); } /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner) { YY_BUFFER_STATE b; char *buf; yy_size_t n; yy_size_t i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) yyalloc(n ,yyscanner ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer(buf,n ,yyscanner); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; (void)yyg; (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = yyg->yy_hold_char; \ yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ yyg->yy_hold_char = *yyg->yy_c_buf_p; \ *yyg->yy_c_buf_p = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the user-defined data for this scanner. * @param yyscanner The scanner object. */ YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyextra; } /** Get the current line number. * @param yyscanner The scanner object. */ int yyget_lineno (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (! YY_CURRENT_BUFFER) return 0; return yylineno; } /** Get the current column number. * @param yyscanner The scanner object. */ int yyget_column (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (! YY_CURRENT_BUFFER) return 0; return yycolumn; } /** Get the input stream. * @param yyscanner The scanner object. */ FILE *yyget_in (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyin; } /** Get the output stream. * @param yyscanner The scanner object. */ FILE *yyget_out (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyout; } /** Get the length of the current token. * @param yyscanner The scanner object. */ yy_size_t yyget_leng (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyleng; } /** Get the current token. * @param yyscanner The scanner object. */ char *yyget_text (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yytext; } /** Set the user-defined data. This data is never touched by the scanner. * @param user_defined The data to be associated with this scanner. * @param yyscanner The scanner object. */ void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyextra = user_defined ; } /** Set the current line number. * @param _line_number line number * @param yyscanner The scanner object. */ void yyset_lineno (int _line_number , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* lineno is only valid if an input buffer exists. */ if (! YY_CURRENT_BUFFER ) YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); yylineno = _line_number; } /** Set the current column. * @param _column_no column number * @param yyscanner The scanner object. */ void yyset_column (int _column_no , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* column is only valid if an input buffer exists. */ if (! YY_CURRENT_BUFFER ) YY_FATAL_ERROR( "yyset_column called with no buffer" ); yycolumn = _column_no; } /** Set the input stream. This does not discard the current * input buffer. * @param _in_str A readable stream. * @param yyscanner The scanner object. * @see yy_switch_to_buffer */ void yyset_in (FILE * _in_str , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyin = _in_str ; } void yyset_out (FILE * _out_str , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyout = _out_str ; } int yyget_debug (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yy_flex_debug; } void yyset_debug (int _bdebug , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yy_flex_debug = _bdebug ; } /* Accessor methods for yylval and yylloc */ YYSTYPE * yyget_lval (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yylval; } void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yylval = yylval_param; } YYLTYPE *yyget_lloc (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yylloc; } void yyset_lloc (YYLTYPE * yylloc_param , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yylloc = yylloc_param; } /* User-visible API */ /* yylex_init is special because it creates the scanner itself, so it is * the ONLY reentrant function that doesn't take the scanner as the last argument. * That's why we explicitly handle the declaration, instead of using our macros. */ int yylex_init(yyscan_t* ptr_yy_globals) { if (ptr_yy_globals == NULL){ errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); if (*ptr_yy_globals == NULL){ errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); return yy_init_globals ( *ptr_yy_globals ); } /* yylex_init_extra has the same functionality as yylex_init, but follows the * convention of taking the scanner as the last argument. Note however, that * this is a *pointer* to a scanner, as it will be allocated by this call (and * is the reason, too, why this function also must handle its own declaration). * The user defined value in the first argument will be available to yyalloc in * the yyextra field. */ int yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals ) { struct yyguts_t dummy_yyguts; yyset_extra (yy_user_defined, &dummy_yyguts); if (ptr_yy_globals == NULL){ errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); if (*ptr_yy_globals == NULL){ errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); yyset_extra (yy_user_defined, *ptr_yy_globals); return yy_init_globals ( *ptr_yy_globals ); } static int yy_init_globals (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ yyg->yy_buffer_stack = 0; yyg->yy_buffer_stack_top = 0; yyg->yy_buffer_stack_max = 0; yyg->yy_c_buf_p = (char *) 0; yyg->yy_init = 0; yyg->yy_start = 0; yyg->yy_start_stack_ptr = 0; yyg->yy_start_stack_depth = 0; yyg->yy_start_stack = NULL; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = (FILE *) 0; yyout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(yyscanner); } /* Destroy the stack itself. */ yyfree(yyg->yy_buffer_stack ,yyscanner); yyg->yy_buffer_stack = NULL; /* Destroy the start condition stack. */ yyfree(yyg->yy_start_stack ,yyscanner ); yyg->yy_start_stack = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * yylex() is called, initialization will occur. */ yy_init_globals( yyscanner); /* Destroy the main struct (reentrant only). */ yyfree ( yyscanner , yyscanner ); yyscanner = NULL; return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; (void)yyg; int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) { int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif #define YYTABLES_NAME "yytables" #line 258 "./tacontrol.flex" /* the following two routines set `context->error' */ void* yyalloc(yy_size_t size,yyscan_t yyscanner) { YY_EXTRA_TYPE context; void* p = malloc(size); if (!p && yyscanner) { context = yyget_extra(yyscanner); context->error = TA_Err_Control_Allocation_Error; } return p; } void* yyrealloc(void* ptr,yy_size_t size,yyscan_t yyscanner) { YY_EXTRA_TYPE context; void* p = realloc(ptr, size); if (!p && yyscanner) { context = yyget_extra(yyscanner); context->error = TA_Err_Control_Allocation_Error; } return p; } /* we reimplement this routine also to avoid a compiler warning, */ /* cf. https://sourceforge.net/p/flex/bugs/115 */ void yyfree(void* ptr,yyscan_t yyscanner) { (void)yyscanner; free(ptr); } void TA_control_scanner_fatal_error(const char* msg, yyscan_t yyscanner) { YY_EXTRA_TYPE context = yyget_extra(yyscanner); /* allocation routines set a different error value */ if (!context->error) context->error = TA_Err_Control_Flex_Error; strncpy(context->errmsg, msg, sizeof (context->errmsg)); longjmp(context->jump_buffer, 1); /* the next line, which we never reach, suppresses a warning about */ /* `yy_fatal_error' defined but not used */ yy_fatal_error(msg, yyscanner); } void TA_control_scanner_init(Control_Context* context, FONT* font) { int flex_error; yyscan_t scanner; YY_BUFFER_STATE b; /* this function sets `errno' in case of error */ flex_error = yylex_init(&scanner); if (flex_error && errno == ENOMEM) { context->error = FT_Err_Out_Of_Memory; context->errmsg[0] = '\0'; return; } /* initialize some context fields */ context->font = font; context->error = TA_Err_Ok; context->result = NULL; context->scanner = scanner; context->eof = 0; yyset_extra(context,scanner); /* by default, `yy_scan_bytes' simply calls `exit' */ /* (via YY_FATAL_ERROR) in case of a (more or less) fatal error -- */ /* this is bad for a library, thus we use `longjmp' to catch this, */ /* together with a proper handler for YY_FATAL_ERROR */ if (setjmp(context->jump_buffer) != 0) { /* error and error message in `context' already stored by */ /* `TA_control_scanner_fatal_error' */ return; } b = yy_scan_bytes(font->control_buf,font->control_len,scanner); /* flex bug: these two fields are not initialized, */ /* causing zillions of valgrind errors; see */ /* https://sourceforge.net/p/flex/bugs/180 */ b->yy_bs_lineno = 0; b->yy_bs_column = 0; } void TA_control_scanner_done(Control_Context* context) { yylex_destroy(context->scanner); } #if 0 const char* input = "# Test\n" "\n" "# 0 a p 1-3 x 0.3 y -0.2 @ 20-30; \\\n" "0 exclam p 2-4 x 0.7 y -0.4 @ 6,7,9,10,11; \\\n" "0 a p 2 x 0.5 @ 23-25"; int main(void) { TA_Error error; int retval = 1; FONT font; Control_Context context; YYSTYPE yylval_param; YYLTYPE yylloc_param; /* we only need the control instructions buffer */ font.control_buf = (char*)input; font.control_len = strlen(input); TA_control_scanner_init(&context, &font); if (context.error) goto Exit; yyset_debug(1,context.scanner); while (yylex(&yylval_param,&yylloc_param,context.scanner)) { if (context.error) goto Exit; } retval = 0; Exit: TA_control_scanner_done(&context); return retval; } #endif /* end of tacontrol.flex */ ttfautohint-1.8.1/lib/tacontrol-flex.h0000644000175000001440000002100013222451061017600 0ustar00wlusers00000000000000#ifndef yyHEADER_H #define yyHEADER_H 1 #define yyIN_HEADER 1 #line 6 "tacontrol-flex.h" #line 43 "./tacontrol.flex" #include "config.h" #line 12 "tacontrol-flex.h" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 1 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* TODO: this is always defined, so inline it */ #define yyconst const /* An opaque pointer. */ #ifndef YY_TYPEDEF_YY_SCANNER_T #define YY_TYPEDEF_YY_SCANNER_T typedef void* yyscan_t; #endif /* For convenience, these vars (plus the bison vars far below) are macros in the reentrant scanner. */ #define yyin yyg->yyin_r #define yyout yyg->yyout_r #define yyextra yyg->yyextra_r #define yyleng yyg->yyleng_r #define yytext yyg->yytext_r #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) #define yy_flex_debug yyg->yy_flex_debug_r /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ void yyrestart (FILE *input_file ,yyscan_t yyscanner ); void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); void yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); void yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); void yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); void yypop_buffer_state (yyscan_t yyscanner ); YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner ); void *yyalloc (yy_size_t ,yyscan_t yyscanner ); void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); void yyfree (void * ,yyscan_t yyscanner ); /* Begin user sect3 */ #define yywrap(yyscanner) (/*CONSTCOND*/1) #define YY_SKIP_YYWRAP #define yytext_ptr yytext_r #ifdef YY_HEADER_EXPORT_START_CONDITIONS #define INITIAL 0 #endif #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif int yylex_init (yyscan_t* scanner); int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy (yyscan_t yyscanner ); int yyget_debug (yyscan_t yyscanner ); void yyset_debug (int debug_flag ,yyscan_t yyscanner ); YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner ); void yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); FILE *yyget_in (yyscan_t yyscanner ); void yyset_in (FILE * _in_str ,yyscan_t yyscanner ); FILE *yyget_out (yyscan_t yyscanner ); void yyset_out (FILE * _out_str ,yyscan_t yyscanner ); yy_size_t yyget_leng (yyscan_t yyscanner ); char *yyget_text (yyscan_t yyscanner ); int yyget_lineno (yyscan_t yyscanner ); void yyset_lineno (int _line_number ,yyscan_t yyscanner ); int yyget_column (yyscan_t yyscanner ); void yyset_column (int _column_no ,yyscan_t yyscanner ); YYSTYPE * yyget_lval (yyscan_t yyscanner ); void yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); YYLTYPE *yyget_lloc (yyscan_t yyscanner ); void yyset_lloc (YYLTYPE * yylloc_param ,yyscan_t yyscanner ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap (yyscan_t yyscanner ); #else extern int yywrap (yyscan_t yyscanner ); #endif #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex \ (YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner); #define YY_DECL int yylex \ (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner) #endif /* !YY_DECL */ /* yy_get_previous_state - get the state just before the EOB char was reached */ #undef YY_NEW_FILE #undef YY_FLUSH_BUFFER #undef yy_set_bol #undef yy_new_buffer #undef yy_set_interactive #undef YY_DO_BEFORE_ACTION #ifdef YY_DECL_IS_OURS #undef YY_DECL_IS_OURS #undef YY_DECL #endif #line 258 "./tacontrol.flex" #line 348 "tacontrol-flex.h" #undef yyIN_HEADER #endif /* yyHEADER_H */ ttfautohint-1.8.1/lib/tacontrol-bison.c0000644000175000001440000045011613222451061017765 0ustar00wlusers00000000000000/* A Bison parser, made by GNU Bison 3.0.4. */ /* Skeleton implementation for Bison GLR parsers in C Copyright (C) 2002-2015 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 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, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C GLR parser skeleton written by Paul Hilfinger. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.0.4" /* Skeleton name. */ #define YYSKELETON_NAME "glr.c" /* Pure parsers. */ #define YYPURE 1 /* Substitute the variable and function names. */ #define yyparse TA_control_parse #define yylex TA_control_lex #define yyerror TA_control_error #define yydebug TA_control_debug /* First part of user declarations. */ #line 60 "tacontrol-bison.c" /* glr.c:240 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # endif #include "tacontrol-bison.h" /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 1 #endif /* Default (constant) value used for initialization for null right-hand sides. Unlike the standard yacc.c template, here we set the default value of $$ to a zeroed-out value. Since the default value is undefined, this behavior is technically correct. */ static YYSTYPE yyval_default; static YYLTYPE yyloc_default # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL = { 1, 1, 1, 1 } # endif ; /* Copy the second part of user declarations. */ #line 64 "./tacontrol.bison" /* glr.c:263 */ #include #include "tacontrol-flex.h" void TA_control_error(YYLTYPE *locp, Control_Context* context, char const* msg); void store_error_data(const YYLTYPE *locp, Control_Context* context, TA_Error error); /* calls to `yylex' in the generated bison code use `scanner' directly */ #define scanner context->scanner #line 111 "tacontrol-bison.c" /* glr.c:263 */ #include #include #include #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif #ifndef YYFREE # define YYFREE free #endif #ifndef YYMALLOC # define YYMALLOC malloc #endif #ifndef YYREALLOC # define YYREALLOC realloc #endif #define YYSIZEMAX ((size_t) -1) #ifdef __cplusplus typedef bool yybool; #else typedef unsigned char yybool; #endif #define yytrue 1 #define yyfalse 0 #ifndef YYSETJMP # include # define YYJMP_BUF jmp_buf # define YYSETJMP(Env) setjmp (Env) /* Pacify clang. */ # define YYLONGJMP(Env, Val) (longjmp (Env, Val), YYASSERT (0)) #endif #ifndef YY_ATTRIBUTE # if (defined __GNUC__ \ && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C # define YY_ATTRIBUTE(Spec) __attribute__(Spec) # else # define YY_ATTRIBUTE(Spec) /* empty */ # endif #endif #ifndef YY_ATTRIBUTE_PURE # define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) #endif #ifndef YY_ATTRIBUTE_UNUSED # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) #endif #if !defined _Noreturn \ && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) # if defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn YY_ATTRIBUTE ((__noreturn__)) # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #ifndef YYASSERT # define YYASSERT(Condition) ((void) ((Condition) || (abort (), 0))) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 136 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 25 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 40 /* YYNRULES -- Number of rules. */ #define YYNRULES 78 /* YYNRULES -- Number of states. */ #define YYNSTATES 114 /* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */ #define YYMAXRHS 10 /* YYMAXLEFT -- Maximum number of symbols to the left of a handle accessed by $0, $-1, etc., in any rule. */ #define YYMAXLEFT 0 /* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 271 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const unsigned char yytranslate[] = { 0, 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, 17, 19, 20, 23, 18, 24, 2, 2, 22, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; #if YYDEBUG /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { 0, 170, 170, 176, 177, 182, 184, 200, 216, 232, 248, 264, 284, 288, 301, 314, 343, 358, 359, 360, 361, 362, 363, 364, 365, 366, 370, 396, 401, 409, 435, 440, 448, 475, 477, 510, 577, 578, 587, 588, 596, 608, 621, 620, 630, 632, 646, 648, 650, 655, 657, 668, 670, 675, 677, 679, 681, 683, 701, 722, 738, 758, 778, 780, 801, 818, 823, 844, 843, 856, 858, 873, 887, 892, 910, 909, 920, 925, 942 }; #endif #if YYDEBUG || YYERROR_VERBOSE || 1 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "EOE", "\"integer number\"", "\"internal flex error\"", "\"invalid character\"", "\"left\"", "\"glyph name\"", "\"no direction\"", "\"point\"", "\"real number\"", "\"right\"", "\"touch\"", "\"width\"", "\"x shift\"", "\"y shift\"", "'('", "','", "')'", "'*'", "'@'", "'0'", "'+'", "'-'", "$accept", "start", "input", "entry", "font_idx", "glyph_idx", "glyph_name", "glyph_name_", "point_touch", "point_touch_", "left_right", "left_right_", "no_dir", "wildcard_script_feature", "script_feature", "x_shift", "y_shift", "shift", "offset", "ppem_set", "$@1", "integer", "signed_integer", "real", "number_set", "unlimited", "right_limited", "left_limited", "range_elems", "range_elem", "range", "glyph_idx_set", "$@2", "glyph_idx_range_elems", "glyph_idx_range_elem", "glyph_idx_range", "width_set", "$@3", "width_elems", "width_elem", YY_NULLPTR }; #endif #define YYPACT_NINF -62 #define YYTABLE_NINF -3 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const signed char yypact[] = { -62, 14, 7, -62, -62, -62, -62, -62, 57, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, 110, 86, 120, -62, -1, -3, -62, -62, -62, -62, -62, -62, -62, 12, -62, 12, -62, 12, -62, -62, 18, -62, 19, 16, 1, 26, -62, 15, -62, 25, -62, -62, 6, 43, 16, -62, 99, -62, -62, 16, 4, 3, 16, 16, -62, 8, -62, -62, 29, -62, 24, -62, 36, -62, -62, -62, -62, 13, 33, -62, -62, -62, -62, 4, 28, 34, 42, -62, -62, 16, 16, 45, -62, 16, 99, 99, -62, -62, -62, -62, -62, -62, 65, 16, 16, 8, -62, -62, -62, 12, -62, 59, -62, 78, -62 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const unsigned char yydefact[] = { 3, 0, 12, 1, 5, 45, 44, 4, 0, 13, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 16, 0, 33, 14, 34, 30, 32, 27, 31, 28, 0, 26, 0, 29, 0, 35, 74, 0, 67, 0, 59, 64, 36, 53, 54, 55, 56, 62, 65, 0, 0, 0, 11, 0, 10, 60, 61, 0, 38, 0, 0, 7, 0, 9, 78, 75, 76, 71, 15, 68, 69, 72, 66, 50, 0, 0, 37, 46, 49, 40, 0, 0, 64, 57, 58, 63, 0, 0, 0, 41, 0, 0, 0, 51, 47, 52, 48, 39, 42, 0, 0, 0, 0, 77, 73, 70, 0, 6, 0, 43, 0, 8 }; /* YYPGOTO[NTERM-NUM]. */ static const signed char yypgoto[] = { -62, -62, -62, -62, -62, -5, 31, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, 0, -21, -62, -62, -2, -59, -62, -32, -62, -62, 22, 44, -61, -62, -62, -62, -62, -9, -62, -62, -62, -62, 2 }; /* YYDEFGOTO[NTERM-NUM]. */ static const signed char yydefgoto[] = { -1, 1, 2, 7, 8, 69, 70, 22, 32, 33, 34, 35, 36, 23, 24, 60, 83, 78, 90, 101, 108, 43, 80, 81, 44, 45, 46, 47, 48, 49, 50, 41, 55, 71, 72, 73, 39, 53, 67, 68 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const signed char yytable[] = { 9, 87, 51, 20, 52, 91, 25, -2, 5, 63, 4, 5, 5, 38, 3, 75, 5, 5, 40, 82, 5, 54, 56, 64, 95, 58, 6, 76, 77, 6, 6, 88, 89, 61, 6, 6, 42, 5, 6, 21, 57, 59, 87, 62, 97, 91, 65, 92, 93, 100, 26, 66, 37, 25, 94, 6, 74, 79, 102, 84, 103, 5, 79, 104, 10, 11, 12, 13, 109, 14, 15, 16, 17, 18, 96, 98, 111, 19, 112, 6, 79, 113, 99, 110, 86, 107, 96, 98, 106, 0, 66, 25, 25, 27, 105, 28, 29, 0, 30, 31, 74, 84, 79, 5, 0, 85, 10, 11, 12, 13, 0, 14, 15, 16, 17, 18, 0, 10, 11, 12, 13, 6, 14, 15, 16, 17, 18, 10, 11, 12, 13, 0, 14, 15, 16, 17, 18 }; static const signed char yycheck[] = { 2, 62, 34, 8, 36, 64, 8, 0, 4, 3, 3, 4, 4, 14, 0, 11, 4, 4, 21, 16, 4, 3, 3, 17, 11, 24, 22, 23, 24, 22, 22, 23, 24, 18, 22, 22, 24, 4, 22, 8, 42, 15, 103, 18, 11, 104, 3, 18, 24, 21, 19, 53, 21, 55, 18, 22, 58, 59, 24, 61, 18, 4, 64, 18, 7, 8, 9, 10, 3, 12, 13, 14, 15, 16, 76, 77, 108, 20, 19, 22, 82, 3, 82, 104, 62, 94, 88, 89, 93, -1, 92, 93, 94, 7, 92, 9, 10, -1, 12, 13, 102, 103, 104, 4, -1, 61, 7, 8, 9, 10, -1, 12, 13, 14, 15, 16, -1, 7, 8, 9, 10, 22, 12, 13, 14, 15, 16, 7, 8, 9, 10, -1, 12, 13, 14, 15, 16 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const unsigned char yystos[] = { 0, 26, 27, 0, 3, 4, 22, 28, 29, 46, 7, 8, 9, 10, 12, 13, 14, 15, 16, 20, 30, 31, 32, 38, 39, 46, 31, 7, 9, 10, 12, 13, 33, 34, 35, 36, 37, 31, 14, 61, 21, 56, 24, 46, 49, 50, 51, 52, 53, 54, 55, 49, 49, 62, 3, 57, 3, 46, 24, 15, 40, 18, 18, 3, 17, 3, 46, 63, 64, 30, 31, 58, 59, 60, 46, 11, 23, 24, 42, 46, 47, 48, 16, 41, 46, 53, 52, 54, 23, 24, 43, 47, 18, 24, 18, 11, 46, 11, 46, 42, 21, 44, 24, 18, 18, 64, 30, 59, 45, 3, 43, 49, 19, 3 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const unsigned char yyr1[] = { 0, 25, 26, 27, 27, 28, 28, 28, 28, 28, 28, 28, 29, 29, 30, 30, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 34, 34, 35, 36, 36, 37, 38, 38, 39, 40, 40, 41, 41, 42, 43, 45, 44, 46, 46, 47, 47, 47, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 50, 51, 52, 53, 53, 54, 54, 55, 57, 56, 58, 58, 59, 59, 60, 62, 61, 63, 63, 64 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const unsigned char yyr2[] = { 0, 2, 1, 0, 2, 1, 8, 5, 10, 5, 4, 4, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 2, 0, 2, 1, 1, 0, 3, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 3, 3, 1, 2, 2, 1, 3, 1, 1, 3, 0, 3, 1, 3, 1, 1, 3, 0, 3, 1, 3, 1 }; /* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */ static const unsigned char yydprec[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */ static const unsigned char yymerger[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* YYIMMEDIATE[RULE-NUM] -- True iff rule #RULE-NUM is not to be deferred, as in the case of predicates. */ static const yybool yyimmediate[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of list of conflicting reductions corresponding to action entry for state STATE-NUM in yytable. 0 means no conflicts. The list in yyconfl is terminated by a rule number of 0. */ static const unsigned char yyconflp[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 9, 0, 11, 13, 0, 0, 0 }; /* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by 0, pointed into by YYCONFLP. */ static const short int yyconfl[] = { 0, 12, 0, 12, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15, 0 }; /* Error token number */ #define YYTERROR 1 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (N) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (0) #endif # define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc) #undef yynerrs #define yynerrs (yystackp->yyerrcnt) #undef yychar #define yychar (yystackp->yyrawchar) #undef yylval #define yylval (yystackp->yyval) #undef yylloc #define yylloc (yystackp->yyloc) #define TA_control_nerrs yynerrs #define TA_control_char yychar #define TA_control_lval yylval #define TA_control_lloc yylloc static const int YYEOF = 0; static const int YYEMPTY = -2; typedef enum { yyok, yyaccept, yyabort, yyerr } YYRESULTTAG; #define YYCHK(YYE) \ do { \ YYRESULTTAG yychk_flag = YYE; \ if (yychk_flag != yyok) \ return yychk_flag; \ } while (0) #if YYDEBUG # ifndef YYFPRINTF # define YYFPRINTF fprintf # endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL /* Print *YYLOCP on YYO. Private, do not rely on its existence. */ YY_ATTRIBUTE_UNUSED static unsigned yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) { unsigned res = 0; int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; if (0 <= yylocp->first_line) { res += YYFPRINTF (yyo, "%d", yylocp->first_line); if (0 <= yylocp->first_column) res += YYFPRINTF (yyo, ".%d", yylocp->first_column); } if (0 <= yylocp->last_line) { if (yylocp->first_line < yylocp->last_line) { res += YYFPRINTF (yyo, "-%d", yylocp->last_line); if (0 <= end_col) res += YYFPRINTF (yyo, ".%d", end_col); } else if (0 <= end_col && yylocp->first_column < end_col) res += YYFPRINTF (yyo, "-%d", end_col); } return res; } # define YY_LOCATION_PRINT(File, Loc) \ yy_location_print_ (File, &(Loc)) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) /*----------------------------------------. | Print this symbol's value on YYOUTPUT. | `----------------------------------------*/ static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, Control_Context* context) { FILE *yyo = yyoutput; YYUSE (yyo); YYUSE (yylocationp); YYUSE (context); if (!yyvaluep) return; switch (yytype) { case 4: /* "integer number" */ #line 138 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%ld'", ((*yyvaluep).integer)); } #line 655 "tacontrol-bison.c" /* glr.c:463 */ break; case 6: /* "invalid character" */ #line 157 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%c'", ((*yyvaluep).character)); } #line 661 "tacontrol-bison.c" /* glr.c:463 */ break; case 7: /* "left" */ #line 139 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%s'", ((*yyvaluep).name)); } #line 667 "tacontrol-bison.c" /* glr.c:463 */ break; case 8: /* "glyph name" */ #line 139 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%s'", ((*yyvaluep).name)); } #line 673 "tacontrol-bison.c" /* glr.c:463 */ break; case 9: /* "no direction" */ #line 139 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%s'", ((*yyvaluep).name)); } #line 679 "tacontrol-bison.c" /* glr.c:463 */ break; case 10: /* "point" */ #line 139 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%s'", ((*yyvaluep).name)); } #line 685 "tacontrol-bison.c" /* glr.c:463 */ break; case 11: /* "real number" */ #line 140 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%g'", ((*yyvaluep).real)); } #line 691 "tacontrol-bison.c" /* glr.c:463 */ break; case 12: /* "right" */ #line 139 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%s'", ((*yyvaluep).name)); } #line 697 "tacontrol-bison.c" /* glr.c:463 */ break; case 13: /* "touch" */ #line 139 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%s'", ((*yyvaluep).name)); } #line 703 "tacontrol-bison.c" /* glr.c:463 */ break; case 14: /* "width" */ #line 139 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%s'", ((*yyvaluep).name)); } #line 709 "tacontrol-bison.c" /* glr.c:463 */ break; case 15: /* "x shift" */ #line 139 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%s'", ((*yyvaluep).name)); } #line 715 "tacontrol-bison.c" /* glr.c:463 */ break; case 16: /* "y shift" */ #line 139 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%s'", ((*yyvaluep).name)); } #line 721 "tacontrol-bison.c" /* glr.c:463 */ break; case 29: /* font_idx */ #line 138 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%ld'", ((*yyvaluep).integer)); } #line 727 "tacontrol-bison.c" /* glr.c:463 */ break; case 30: /* glyph_idx */ #line 138 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%ld'", ((*yyvaluep).integer)); } #line 733 "tacontrol-bison.c" /* glr.c:463 */ break; case 31: /* glyph_name */ #line 139 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%s'", ((*yyvaluep).name)); } #line 739 "tacontrol-bison.c" /* glr.c:463 */ break; case 32: /* glyph_name_ */ #line 139 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%s'", ((*yyvaluep).name)); } #line 745 "tacontrol-bison.c" /* glr.c:463 */ break; case 38: /* wildcard_script_feature */ #line 138 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%ld'", ((*yyvaluep).integer)); } #line 751 "tacontrol-bison.c" /* glr.c:463 */ break; case 39: /* script_feature */ #line 138 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%ld'", ((*yyvaluep).integer)); } #line 757 "tacontrol-bison.c" /* glr.c:463 */ break; case 40: /* x_shift */ #line 140 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%g'", ((*yyvaluep).real)); } #line 763 "tacontrol-bison.c" /* glr.c:463 */ break; case 41: /* y_shift */ #line 140 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%g'", ((*yyvaluep).real)); } #line 769 "tacontrol-bison.c" /* glr.c:463 */ break; case 42: /* shift */ #line 140 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%g'", ((*yyvaluep).real)); } #line 775 "tacontrol-bison.c" /* glr.c:463 */ break; case 43: /* offset */ #line 138 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%ld'", ((*yyvaluep).integer)); } #line 781 "tacontrol-bison.c" /* glr.c:463 */ break; case 44: /* ppem_set */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 802 "tacontrol-bison.c" /* glr.c:463 */ break; case 46: /* integer */ #line 138 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%ld'", ((*yyvaluep).integer)); } #line 808 "tacontrol-bison.c" /* glr.c:463 */ break; case 47: /* signed_integer */ #line 138 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%ld'", ((*yyvaluep).integer)); } #line 814 "tacontrol-bison.c" /* glr.c:463 */ break; case 48: /* real */ #line 140 "./tacontrol.bison" /* glr.c:463 */ { fprintf(yyoutput, "`%g'", ((*yyvaluep).real)); } #line 820 "tacontrol-bison.c" /* glr.c:463 */ break; case 49: /* number_set */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 841 "tacontrol-bison.c" /* glr.c:463 */ break; case 50: /* unlimited */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 862 "tacontrol-bison.c" /* glr.c:463 */ break; case 51: /* right_limited */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 883 "tacontrol-bison.c" /* glr.c:463 */ break; case 52: /* left_limited */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 904 "tacontrol-bison.c" /* glr.c:463 */ break; case 53: /* range_elems */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 925 "tacontrol-bison.c" /* glr.c:463 */ break; case 54: /* range_elem */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 946 "tacontrol-bison.c" /* glr.c:463 */ break; case 55: /* range */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 967 "tacontrol-bison.c" /* glr.c:463 */ break; case 56: /* glyph_idx_set */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 988 "tacontrol-bison.c" /* glr.c:463 */ break; case 58: /* glyph_idx_range_elems */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 1009 "tacontrol-bison.c" /* glr.c:463 */ break; case 59: /* glyph_idx_range_elem */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 1030 "tacontrol-bison.c" /* glr.c:463 */ break; case 60: /* glyph_idx_range */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 1051 "tacontrol-bison.c" /* glr.c:463 */ break; case 61: /* width_set */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 1072 "tacontrol-bison.c" /* glr.c:463 */ break; case 63: /* width_elems */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 1093 "tacontrol-bison.c" /* glr.c:463 */ break; case 64: /* width_elem */ #line 141 "./tacontrol.bison" /* glr.c:463 */ { char* s; number_range* nr; nr = number_set_reverse(((*yyvaluep).range)); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } #line 1114 "tacontrol-bison.c" /* glr.c:463 */ break; default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, Control_Context* context) { YYFPRINTF (yyoutput, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); YY_LOCATION_PRINT (yyoutput, *yylocationp); YYFPRINTF (yyoutput, ": "); yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, context); YYFPRINTF (yyoutput, ")"); } # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, Type, Value, Location, context); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; struct yyGLRStack; static void yypstack (struct yyGLRStack* yystackp, size_t yyk) YY_ATTRIBUTE_UNUSED; static void yypdumpstack (struct yyGLRStack* yystackp) YY_ATTRIBUTE_UNUSED; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif /* Minimum number of free items on the stack allowed after an allocation. This is to allow allocation and initialization to be completed by functions that call yyexpandGLRStack before the stack is expanded, thus insuring that all necessary pointers get properly redirected to new data. */ #define YYHEADROOM 2 #ifndef YYSTACKEXPANDABLE # define YYSTACKEXPANDABLE 1 #endif #if YYSTACKEXPANDABLE # define YY_RESERVE_GLRSTACK(Yystack) \ do { \ if (Yystack->yyspaceLeft < YYHEADROOM) \ yyexpandGLRStack (Yystack); \ } while (0) #else # define YY_RESERVE_GLRSTACK(Yystack) \ do { \ if (Yystack->yyspaceLeft < YYHEADROOM) \ yyMemoryExhausted (Yystack); \ } while (0) #endif #if YYERROR_VERBOSE # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * yystpcpy (char *yydest, const char *yysrc) { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static size_t yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { size_t yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return strlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif #endif /* !YYERROR_VERBOSE */ /** State numbers, as in LALR(1) machine */ typedef int yyStateNum; /** Rule numbers, as in LALR(1) machine */ typedef int yyRuleNum; /** Grammar symbol */ typedef int yySymbol; /** Item references, as in LALR(1) machine */ typedef short int yyItemNum; typedef struct yyGLRState yyGLRState; typedef struct yyGLRStateSet yyGLRStateSet; typedef struct yySemanticOption yySemanticOption; typedef union yyGLRStackItem yyGLRStackItem; typedef struct yyGLRStack yyGLRStack; struct yyGLRState { /** Type tag: always true. */ yybool yyisState; /** Type tag for yysemantics. If true, yysval applies, otherwise * yyfirstVal applies. */ yybool yyresolved; /** Number of corresponding LALR(1) machine state. */ yyStateNum yylrState; /** Preceding state in this stack */ yyGLRState* yypred; /** Source position of the last token produced by my symbol */ size_t yyposn; union { /** First in a chain of alternative reductions producing the * non-terminal corresponding to this state, threaded through * yynext. */ yySemanticOption* yyfirstVal; /** Semantic value for this state. */ YYSTYPE yysval; } yysemantics; /** Source location for this state. */ YYLTYPE yyloc; }; struct yyGLRStateSet { yyGLRState** yystates; /** During nondeterministic operation, yylookaheadNeeds tracks which * stacks have actually needed the current lookahead. During deterministic * operation, yylookaheadNeeds[0] is not maintained since it would merely * duplicate yychar != YYEMPTY. */ yybool* yylookaheadNeeds; size_t yysize, yycapacity; }; struct yySemanticOption { /** Type tag: always false. */ yybool yyisState; /** Rule number for this reduction */ yyRuleNum yyrule; /** The last RHS state in the list of states to be reduced. */ yyGLRState* yystate; /** The lookahead for this reduction. */ int yyrawchar; YYSTYPE yyval; YYLTYPE yyloc; /** Next sibling in chain of options. To facilitate merging, * options are chained in decreasing order by address. */ yySemanticOption* yynext; }; /** Type of the items in the GLR stack. The yyisState field * indicates which item of the union is valid. */ union yyGLRStackItem { yyGLRState yystate; yySemanticOption yyoption; }; struct yyGLRStack { int yyerrState; /* To compute the location of the error token. */ yyGLRStackItem yyerror_range[3]; int yyerrcnt; int yyrawchar; YYSTYPE yyval; YYLTYPE yyloc; YYJMP_BUF yyexception_buffer; yyGLRStackItem* yyitems; yyGLRStackItem* yynextFree; size_t yyspaceLeft; yyGLRState* yysplitPoint; yyGLRState* yylastDeleted; yyGLRStateSet yytops; }; #if YYSTACKEXPANDABLE static void yyexpandGLRStack (yyGLRStack* yystackp); #endif static _Noreturn void yyFail (yyGLRStack* yystackp, YYLTYPE *yylocp, Control_Context* context, const char* yymsg) { if (yymsg != YY_NULLPTR) yyerror (yylocp, context, yymsg); YYLONGJMP (yystackp->yyexception_buffer, 1); } static _Noreturn void yyMemoryExhausted (yyGLRStack* yystackp) { YYLONGJMP (yystackp->yyexception_buffer, 2); } #if YYDEBUG || YYERROR_VERBOSE /** A printable representation of TOKEN. */ static inline const char* yytokenName (yySymbol yytoken) { if (yytoken == YYEMPTY) return ""; return yytname[yytoken]; } #endif /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred * containing the pointer to the next state in the chain. */ static void yyfillin (yyGLRStackItem *, int, int) YY_ATTRIBUTE_UNUSED; static void yyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1) { int i; yyGLRState *s = yyvsp[yylow0].yystate.yypred; for (i = yylow0-1; i >= yylow1; i -= 1) { #if YYDEBUG yyvsp[i].yystate.yylrState = s->yylrState; #endif yyvsp[i].yystate.yyresolved = s->yyresolved; if (s->yyresolved) yyvsp[i].yystate.yysemantics.yysval = s->yysemantics.yysval; else /* The effect of using yysval or yyloc (in an immediate rule) is * undefined. */ yyvsp[i].yystate.yysemantics.yyfirstVal = YY_NULLPTR; yyvsp[i].yystate.yyloc = s->yyloc; s = yyvsp[i].yystate.yypred = s->yypred; } } /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in * YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1. * For convenience, always return YYLOW1. */ static inline int yyfill (yyGLRStackItem *, int *, int, yybool) YY_ATTRIBUTE_UNUSED; static inline int yyfill (yyGLRStackItem *yyvsp, int *yylow, int yylow1, yybool yynormal) { if (!yynormal && yylow1 < *yylow) { yyfillin (yyvsp, *yylow, yylow1); *yylow = yylow1; } return yylow1; } /** Perform user action for rule number YYN, with RHS length YYRHSLEN, * and top stack item YYVSP. YYLVALP points to place to put semantic * value ($$), and yylocp points to place for location information * (@$). Returns yyok for normal return, yyaccept for YYACCEPT, * yyerr for YYERROR, yyabort for YYABORT. */ static YYRESULTTAG yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp, yyGLRStack* yystackp, YYSTYPE* yyvalp, YYLTYPE *yylocp, Control_Context* context) { yybool yynormal YY_ATTRIBUTE_UNUSED = (yystackp->yysplitPoint == YY_NULLPTR); int yylow; YYUSE (yyvalp); YYUSE (yylocp); YYUSE (context); YYUSE (yyrhslen); # undef yyerrok # define yyerrok (yystackp->yyerrState = 0) # undef YYACCEPT # define YYACCEPT return yyaccept # undef YYABORT # define YYABORT return yyabort # undef YYERROR # define YYERROR return yyerrok, yyerr # undef YYRECOVERING # define YYRECOVERING() (yystackp->yyerrState != 0) # undef yyclearin # define yyclearin (yychar = YYEMPTY) # undef YYFILL # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal) # undef YYBACKUP # define YYBACKUP(Token, Value) \ return yyerror (yylocp, context, YY_("syntax error: cannot back up")), \ yyerrok, yyerr yylow = 1; if (yyrhslen == 0) *yyvalp = yyval_default; else *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval; YYLLOC_DEFAULT ((*yylocp), (yyvsp - yyrhslen), yyrhslen); yystackp->yyerror_range[1].yystate.yyloc = *yylocp; switch (yyn) { case 2: #line 171 "./tacontrol.bison" /* glr.c:816 */ { context->result = TA_control_reverse((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.control)); } #line 1495 "tacontrol-bison.c" /* glr.c:816 */ break; case 3: #line 176 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).control) = NULL; } #line 1501 "tacontrol-bison.c" /* glr.c:816 */ break; case 4: #line 178 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).control) = TA_control_prepend((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.control), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.control)); } #line 1507 "tacontrol-bison.c" /* glr.c:816 */ break; case 5: #line 183 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).control) = NULL; } #line 1513 "tacontrol-bison.c" /* glr.c:816 */ break; case 6: #line 185 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).control) = TA_control_new((((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval.type), (((yyGLRStackItem const *)yyvsp)[YYFILL (-7)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.range), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.real), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.real), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.range), (*yylocp).first_line); if (!((*yyvalp).control)) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 1533 "tacontrol-bison.c" /* glr.c:816 */ break; case 7: #line 201 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).control) = TA_control_new((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.type), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.range), 0, 0, NULL, (*yylocp).first_line); if (!((*yyvalp).control)) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 1553 "tacontrol-bison.c" /* glr.c:816 */ break; case 8: #line 217 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).control) = TA_control_new((((yyGLRStackItem const *)yyvsp)[YYFILL (-7)].yystate.yysemantics.yysval.type), (((yyGLRStackItem const *)yyvsp)[YYFILL (-9)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (-8)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval.range), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.integer), NULL, (*yylocp).first_line); if (!((*yyvalp).control)) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 1573 "tacontrol-bison.c" /* glr.c:816 */ break; case 9: #line 233 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).control) = TA_control_new((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.type), (((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.range), 0, 0, NULL, (*yylocp).first_line); if (!((*yyvalp).control)) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 1593 "tacontrol-bison.c" /* glr.c:816 */ break; case 10: #line 249 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).control) = TA_control_new(Control_Script_Feature_Glyphs, (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.range), 0, 0, NULL, (*yylocp).first_line); if (!((*yyvalp).control)) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 1613 "tacontrol-bison.c" /* glr.c:816 */ break; case 11: #line 265 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).control) = TA_control_new(Control_Script_Feature_Widths, (((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.range), 0, 0, NULL, (*yylocp).first_line); if (!((*yyvalp).control)) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 1633 "tacontrol-bison.c" /* glr.c:816 */ break; case 12: #line 284 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).integer) = 0; context->font_idx = ((*yyvalp).integer); } #line 1642 "tacontrol-bison.c" /* glr.c:816 */ break; case 13: #line 289 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).integer) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer); if (((*yyvalp).integer) >= context->font->num_sfnts) { store_error_data(&(*yylocp), context, TA_Err_Control_Invalid_Font_Index); YYABORT; } context->font_idx = ((*yyvalp).integer); } #line 1656 "tacontrol-bison.c" /* glr.c:816 */ break; case 14: #line 302 "./tacontrol.bison" /* glr.c:816 */ { FT_Face face = context->font->sfnts[context->font_idx].face; ((*yyvalp).integer) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer); if (((*yyvalp).integer) >= face->num_glyphs) { store_error_data(&(*yylocp), context, TA_Err_Control_Invalid_Glyph_Index); YYABORT; } context->glyph_idx = ((*yyvalp).integer); } #line 1673 "tacontrol-bison.c" /* glr.c:816 */ break; case 15: #line 315 "./tacontrol.bison" /* glr.c:816 */ { FT_Face face = context->font->sfnts[context->font_idx].face; /* explicitly compare with `.notdef' */ /* since `FT_Get_Name_Index' returns glyph index 0 */ /* for both this glyph name and invalid ones */ if (!strcmp((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.name), ".notdef")) ((*yyvalp).integer) = 0; else { ((*yyvalp).integer) = (long)FT_Get_Name_Index(face, (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.name)); if (((*yyvalp).integer) == 0) ((*yyvalp).integer) = -1; } free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.name)); if (((*yyvalp).integer) < 0) { store_error_data(&(*yylocp), context, TA_Err_Control_Invalid_Glyph_Name); YYABORT; } context->glyph_idx = ((*yyvalp).integer); } #line 1703 "tacontrol-bison.c" /* glr.c:816 */ break; case 16: #line 344 "./tacontrol.bison" /* glr.c:816 */ { /* `$glyph_name_' was allocated in the lexer */ if (context->error) { /* lexing error */ store_error_data(&(*yylocp), context, context->error); YYABORT; } ((*yyvalp).name) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.name); } #line 1719 "tacontrol-bison.c" /* glr.c:816 */ break; case 26: #line 371 "./tacontrol.bison" /* glr.c:816 */ { FT_Error error; FT_Face face = context->font->sfnts[context->font_idx].face; int num_points; error = FT_Load_Glyph(face, (FT_UInt)context->glyph_idx, FT_LOAD_NO_SCALE); if (error) { store_error_data(&(*yylocp), context, TA_Err_Control_Invalid_Glyph); YYABORT; } num_points = face->glyph->outline.n_points; context->number_set_min = 0; context->number_set_max = num_points - 1; ((*yyvalp).type) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.type); } #line 1746 "tacontrol-bison.c" /* glr.c:816 */ break; case 27: #line 397 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).type) = Control_Delta_after_IUP; free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.name)); } #line 1755 "tacontrol-bison.c" /* glr.c:816 */ break; case 28: #line 402 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).type) = Control_Delta_before_IUP; free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.name)); } #line 1764 "tacontrol-bison.c" /* glr.c:816 */ break; case 29: #line 410 "./tacontrol.bison" /* glr.c:816 */ { FT_Error error; FT_Face face = context->font->sfnts[context->font_idx].face; int num_points; error = FT_Load_Glyph(face, (FT_UInt)context->glyph_idx, FT_LOAD_NO_SCALE); if (error) { store_error_data(&(*yylocp), context, TA_Err_Control_Invalid_Glyph); YYABORT; } num_points = face->glyph->outline.n_points; context->number_set_min = 0; context->number_set_max = num_points - 1; ((*yyvalp).type) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.type); } #line 1791 "tacontrol-bison.c" /* glr.c:816 */ break; case 30: #line 436 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).type) = Control_Single_Point_Segment_Left; free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.name)); } #line 1800 "tacontrol-bison.c" /* glr.c:816 */ break; case 31: #line 441 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).type) = Control_Single_Point_Segment_Right; free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.name)); } #line 1809 "tacontrol-bison.c" /* glr.c:816 */ break; case 32: #line 449 "./tacontrol.bison" /* glr.c:816 */ { FT_Error error; FT_Face face = context->font->sfnts[context->font_idx].face; int num_points; error = FT_Load_Glyph(face, (FT_UInt)context->glyph_idx, FT_LOAD_NO_SCALE); if (error) { store_error_data(&(*yylocp), context, TA_Err_Control_Invalid_Glyph); YYABORT; } num_points = face->glyph->outline.n_points; context->number_set_min = 0; context->number_set_max = num_points - 1; ((*yyvalp).type) = Control_Single_Point_Segment_None; free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.name)); } #line 1837 "tacontrol-bison.c" /* glr.c:816 */ break; case 33: #line 476 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).integer) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer); } #line 1843 "tacontrol-bison.c" /* glr.c:816 */ break; case 34: #line 478 "./tacontrol.bison" /* glr.c:816 */ { size_t i; size_t feature_idx = 0; char feature_name[5]; feature_name[4] = '\0'; for (i = 0; i < feature_tags_size; i++) { hb_tag_to_string(feature_tags[i], feature_name); if (!strcmp((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.name), feature_name)) { feature_idx = i; break; } } free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.name)); if (i == feature_tags_size) { store_error_data(&(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), context, TA_Err_Control_Invalid_Feature); YYABORT; } /* simply use negative values for features applied to all scripts */ ((*yyvalp).integer) = -(long)feature_idx; } #line 1878 "tacontrol-bison.c" /* glr.c:816 */ break; case 35: #line 511 "./tacontrol.bison" /* glr.c:816 */ { long ss; size_t i, j; size_t script_idx = 0; size_t feature_idx = 0; char feature_name[5]; for (i = 0; i < script_names_size; i++) { if (!strcmp((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.name), script_names[i])) { script_idx = i; break; } } feature_name[4] = '\0'; for (j = 0; j < feature_tags_size; j++) { hb_tag_to_string(feature_tags[j], feature_name); if (!strcmp((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.name), feature_name)) { feature_idx = j; break; } } free((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.name)); free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.name)); if (i == script_names_size) { store_error_data(&(((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yyloc), context, TA_Err_Control_Invalid_Script); YYABORT; } if (j == feature_tags_size) { store_error_data(&(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), context, TA_Err_Control_Invalid_Feature); YYABORT; } for (ss = 0; ta_style_classes[ss]; ss++) { TA_StyleClass style_class = ta_style_classes[ss]; if (script_idx == style_class->script && feature_idx == style_class->coverage) { ((*yyvalp).integer) = ss; break; } } if (!ta_style_classes[ss]) { store_error_data(&(*yylocp), context, TA_Err_Control_Invalid_Style); YYABORT; } } #line 1945 "tacontrol-bison.c" /* glr.c:816 */ break; case 36: #line 577 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).real) = 0; } #line 1951 "tacontrol-bison.c" /* glr.c:816 */ break; case 37: #line 579 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).real) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.real); free((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.name)); } #line 1960 "tacontrol-bison.c" /* glr.c:816 */ break; case 38: #line 587 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).real) = 0; } #line 1966 "tacontrol-bison.c" /* glr.c:816 */ break; case 39: #line 589 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).real) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.real); free((((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.name)); } #line 1975 "tacontrol-bison.c" /* glr.c:816 */ break; case 40: #line 597 "./tacontrol.bison" /* glr.c:816 */ { if ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.real) < CONTROL_DELTA_SHIFT_MIN || (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.real) > CONTROL_DELTA_SHIFT_MAX) { store_error_data(&(*yylocp), context, TA_Err_Control_Invalid_Shift); YYABORT; } ((*yyvalp).real) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.real); } #line 1988 "tacontrol-bison.c" /* glr.c:816 */ break; case 41: #line 609 "./tacontrol.bison" /* glr.c:816 */ { if ((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer) < SHRT_MIN || (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer) > SHRT_MAX) { store_error_data(&(*yylocp), context, TA_Err_Control_Invalid_Offset); YYABORT; } ((*yyvalp).integer) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer); } #line 2001 "tacontrol-bison.c" /* glr.c:816 */ break; case 42: #line 621 "./tacontrol.bison" /* glr.c:816 */ { context->number_set_min = CONTROL_DELTA_PPEM_MIN; context->number_set_max = CONTROL_DELTA_PPEM_MAX; } #line 2010 "tacontrol-bison.c" /* glr.c:816 */ break; case 43: #line 626 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range); } #line 2016 "tacontrol-bison.c" /* glr.c:816 */ break; case 44: #line 631 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).integer) = 0; } #line 2022 "tacontrol-bison.c" /* glr.c:816 */ break; case 45: #line 633 "./tacontrol.bison" /* glr.c:816 */ { if (context->error) { /* lexing error */ store_error_data(&(*yylocp), context, context->error); YYABORT; } ((*yyvalp).integer) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer); } #line 2037 "tacontrol-bison.c" /* glr.c:816 */ break; case 46: #line 647 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).integer) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer); } #line 2043 "tacontrol-bison.c" /* glr.c:816 */ break; case 47: #line 649 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).integer) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer); } #line 2049 "tacontrol-bison.c" /* glr.c:816 */ break; case 48: #line 651 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).integer) = -(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer); } #line 2055 "tacontrol-bison.c" /* glr.c:816 */ break; case 49: #line 656 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).real) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer); } #line 2061 "tacontrol-bison.c" /* glr.c:816 */ break; case 50: #line 658 "./tacontrol.bison" /* glr.c:816 */ { if (context->error) { /* lexing error */ store_error_data(&(*yylocp), context, context->error); YYABORT; } ((*yyvalp).real) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.real); } #line 2076 "tacontrol-bison.c" /* glr.c:816 */ break; case 51: #line 669 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).real) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.real); } #line 2082 "tacontrol-bison.c" /* glr.c:816 */ break; case 52: #line 671 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).real) = -(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.real); } #line 2088 "tacontrol-bison.c" /* glr.c:816 */ break; case 53: #line 676 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range); } #line 2094 "tacontrol-bison.c" /* glr.c:816 */ break; case 54: #line 678 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range); } #line 2100 "tacontrol-bison.c" /* glr.c:816 */ break; case 55: #line 680 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range); } #line 2106 "tacontrol-bison.c" /* glr.c:816 */ break; case 56: #line 682 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range); } #line 2112 "tacontrol-bison.c" /* glr.c:816 */ break; case 57: #line 684 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = number_set_prepend((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.range), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range)); if (((*yyvalp).range) == NUMBERSET_NOT_ASCENDING) { number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.range)); number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range)); store_error_data(&(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), context, TA_Err_Control_Ranges_Not_Ascending); YYABORT; } if (((*yyvalp).range) == NUMBERSET_OVERLAPPING_RANGES) { number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.range)); number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range)); store_error_data(&(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), context, TA_Err_Control_Overlapping_Ranges); YYABORT; } } #line 2134 "tacontrol-bison.c" /* glr.c:816 */ break; case 58: #line 702 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = number_set_prepend((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.range), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range)); if (((*yyvalp).range) == NUMBERSET_NOT_ASCENDING) { number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.range)); number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range)); store_error_data(&(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), context, TA_Err_Control_Ranges_Not_Ascending); YYABORT; } if (((*yyvalp).range) == NUMBERSET_OVERLAPPING_RANGES) { number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.range)); number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range)); store_error_data(&(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), context, TA_Err_Control_Overlapping_Ranges); YYABORT; } } #line 2156 "tacontrol-bison.c" /* glr.c:816 */ break; case 59: #line 723 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = number_set_new(context->number_set_min, context->number_set_max, context->number_set_min, context->number_set_max); /* range of `$unlimited' is always valid */ if (((*yyvalp).range) == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 2173 "tacontrol-bison.c" /* glr.c:816 */ break; case 60: #line 739 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = number_set_new(context->number_set_min, (int)(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer), context->number_set_min, context->number_set_max); if (((*yyvalp).range) == NUMBERSET_INVALID_RANGE) { store_error_data(&(*yylocp), context, TA_Err_Control_Invalid_Range); YYABORT; } if (((*yyvalp).range) == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 2194 "tacontrol-bison.c" /* glr.c:816 */ break; case 61: #line 759 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = number_set_new((int)(((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval.integer), context->number_set_max, context->number_set_min, context->number_set_max); if (((*yyvalp).range) == NUMBERSET_INVALID_RANGE) { store_error_data(&(*yylocp), context, TA_Err_Control_Invalid_Range); YYABORT; } if (((*yyvalp).range) == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 2215 "tacontrol-bison.c" /* glr.c:816 */ break; case 62: #line 779 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range); } #line 2221 "tacontrol-bison.c" /* glr.c:816 */ break; case 63: #line 781 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = number_set_prepend((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.range), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range)); if (((*yyvalp).range) == NUMBERSET_NOT_ASCENDING) { number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.range)); number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range)); store_error_data(&(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), context, TA_Err_Control_Ranges_Not_Ascending); YYABORT; } if (((*yyvalp).range) == NUMBERSET_OVERLAPPING_RANGES) { number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.range)); number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range)); store_error_data(&(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), context, TA_Err_Control_Overlapping_Ranges); YYABORT; } } #line 2243 "tacontrol-bison.c" /* glr.c:816 */ break; case 64: #line 802 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = number_set_new((int)(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer), (int)(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer), context->number_set_min, context->number_set_max); if (((*yyvalp).range) == NUMBERSET_INVALID_RANGE) { store_error_data(&(*yylocp), context, TA_Err_Control_Invalid_Range); YYABORT; } if (((*yyvalp).range) == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 2264 "tacontrol-bison.c" /* glr.c:816 */ break; case 65: #line 819 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range); } #line 2270 "tacontrol-bison.c" /* glr.c:816 */ break; case 66: #line 824 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = number_set_new((int)(((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.integer), (int)(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer), context->number_set_min, context->number_set_max); if (((*yyvalp).range) == NUMBERSET_INVALID_RANGE) { store_error_data(&(*yylocp), context, TA_Err_Control_Invalid_Range); YYABORT; } if (((*yyvalp).range) == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 2291 "tacontrol-bison.c" /* glr.c:816 */ break; case 67: #line 844 "./tacontrol.bison" /* glr.c:816 */ { FT_Face face = context->font->sfnts[context->font_idx].face; context->number_set_min = 0; context->number_set_max = (int)(face->num_glyphs - 1); } #line 2303 "tacontrol-bison.c" /* glr.c:816 */ break; case 68: #line 852 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range); } #line 2309 "tacontrol-bison.c" /* glr.c:816 */ break; case 69: #line 857 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range); } #line 2315 "tacontrol-bison.c" /* glr.c:816 */ break; case 70: #line 859 "./tacontrol.bison" /* glr.c:816 */ { /* for glyph_idx_set, ascending order is not enforced */ ((*yyvalp).range) = number_set_insert((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.range), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range)); if (((*yyvalp).range) == NUMBERSET_OVERLAPPING_RANGES) { number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.range)); number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range)); store_error_data(&(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), context, TA_Err_Control_Overlapping_Ranges); YYABORT; } } #line 2331 "tacontrol-bison.c" /* glr.c:816 */ break; case 71: #line 874 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = number_set_new((int)(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer), (int)(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer), context->number_set_min, context->number_set_max); /* glyph_idx is always valid */ /* since its value was already tested for validity */ if (((*yyvalp).range) == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 2349 "tacontrol-bison.c" /* glr.c:816 */ break; case 72: #line 888 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range); } #line 2355 "tacontrol-bison.c" /* glr.c:816 */ break; case 73: #line 893 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = number_set_new((int)(((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.integer), (int)(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer), context->number_set_min, context->number_set_max); /* glyph range is always valid */ /* since both `glyph_idx' values were already tested for validity */ if (((*yyvalp).range) == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 2373 "tacontrol-bison.c" /* glr.c:816 */ break; case 74: #line 910 "./tacontrol.bison" /* glr.c:816 */ { context->number_set_min = 1; context->number_set_max = 65535; context->number_set_num_elems = 0; } #line 2383 "tacontrol-bison.c" /* glr.c:816 */ break; case 75: #line 916 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range); } #line 2389 "tacontrol-bison.c" /* glr.c:816 */ break; case 76: #line 921 "./tacontrol.bison" /* glr.c:816 */ { context->number_set_num_elems++; ((*yyvalp).range) = (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range); } #line 2398 "tacontrol-bison.c" /* glr.c:816 */ break; case 77: #line 926 "./tacontrol.bison" /* glr.c:816 */ { context->number_set_num_elems++; if (context->number_set_num_elems > TA_LATIN_MAX_WIDTHS) { number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.range)); number_set_free((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range)); store_error_data(&(((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yyloc), context, TA_Err_Control_Too_Much_Widths); YYABORT; } /* for width_set, the order of entries is preserved */ ((*yyvalp).range) = number_set_prepend_unsorted((((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval.range), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.range)); } #line 2416 "tacontrol-bison.c" /* glr.c:816 */ break; case 78: #line 943 "./tacontrol.bison" /* glr.c:816 */ { ((*yyvalp).range) = number_set_new((((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer), (((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval.integer), context->number_set_min, context->number_set_max); if (((*yyvalp).range) == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&(*yylocp), context, TA_Err_Control_Allocation_Error); YYABORT; } } #line 2432 "tacontrol-bison.c" /* glr.c:816 */ break; #line 2436 "tacontrol-bison.c" /* glr.c:816 */ default: break; } return yyok; # undef yyerrok # undef YYABORT # undef YYACCEPT # undef YYERROR # undef YYBACKUP # undef yyclearin # undef YYRECOVERING } static void yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1) { YYUSE (yy0); YYUSE (yy1); switch (yyn) { default: break; } } /* Bison grammar-table manipulation. */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, Control_Context* context) { YYUSE (yyvaluep); YYUSE (yylocationp); YYUSE (context); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN switch (yytype) { case 27: /* input */ #line 135 "./tacontrol.bison" /* glr.c:846 */ { TA_control_free(((*yyvaluep).control)); } #line 2486 "tacontrol-bison.c" /* glr.c:846 */ break; case 28: /* entry */ #line 135 "./tacontrol.bison" /* glr.c:846 */ { TA_control_free(((*yyvaluep).control)); } #line 2492 "tacontrol-bison.c" /* glr.c:846 */ break; case 44: /* ppem_set */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2498 "tacontrol-bison.c" /* glr.c:846 */ break; case 49: /* number_set */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2504 "tacontrol-bison.c" /* glr.c:846 */ break; case 50: /* unlimited */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2510 "tacontrol-bison.c" /* glr.c:846 */ break; case 51: /* right_limited */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2516 "tacontrol-bison.c" /* glr.c:846 */ break; case 52: /* left_limited */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2522 "tacontrol-bison.c" /* glr.c:846 */ break; case 53: /* range_elems */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2528 "tacontrol-bison.c" /* glr.c:846 */ break; case 54: /* range_elem */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2534 "tacontrol-bison.c" /* glr.c:846 */ break; case 55: /* range */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2540 "tacontrol-bison.c" /* glr.c:846 */ break; case 56: /* glyph_idx_set */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2546 "tacontrol-bison.c" /* glr.c:846 */ break; case 58: /* glyph_idx_range_elems */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2552 "tacontrol-bison.c" /* glr.c:846 */ break; case 59: /* glyph_idx_range_elem */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2558 "tacontrol-bison.c" /* glr.c:846 */ break; case 60: /* glyph_idx_range */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2564 "tacontrol-bison.c" /* glr.c:846 */ break; case 61: /* width_set */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2570 "tacontrol-bison.c" /* glr.c:846 */ break; case 63: /* width_elems */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2576 "tacontrol-bison.c" /* glr.c:846 */ break; case 64: /* width_elem */ #line 136 "./tacontrol.bison" /* glr.c:846 */ { number_set_free(((*yyvaluep).range)); } #line 2582 "tacontrol-bison.c" /* glr.c:846 */ break; default: break; } YY_IGNORE_MAYBE_UNINITIALIZED_END } /** Number of symbols composing the right hand side of rule #RULE. */ static inline int yyrhsLength (yyRuleNum yyrule) { return yyr2[yyrule]; } static void yydestroyGLRState (char const *yymsg, yyGLRState *yys, Control_Context* context) { if (yys->yyresolved) yydestruct (yymsg, yystos[yys->yylrState], &yys->yysemantics.yysval, &yys->yyloc, context); else { #if YYDEBUG if (yydebug) { if (yys->yysemantics.yyfirstVal) YYFPRINTF (stderr, "%s unresolved", yymsg); else YYFPRINTF (stderr, "%s incomplete", yymsg); YY_SYMBOL_PRINT ("", yystos[yys->yylrState], YY_NULLPTR, &yys->yyloc); } #endif if (yys->yysemantics.yyfirstVal) { yySemanticOption *yyoption = yys->yysemantics.yyfirstVal; yyGLRState *yyrh; int yyn; for (yyrh = yyoption->yystate, yyn = yyrhsLength (yyoption->yyrule); yyn > 0; yyrh = yyrh->yypred, yyn -= 1) yydestroyGLRState (yymsg, yyrh, context); } } } /** Left-hand-side symbol for rule #YYRULE. */ static inline yySymbol yylhsNonterm (yyRuleNum yyrule) { return yyr1[yyrule]; } #define yypact_value_is_default(Yystate) \ (!!((Yystate) == (-62))) /** True iff LR state YYSTATE has only a default reduction (regardless * of token). */ static inline yybool yyisDefaultedState (yyStateNum yystate) { return yypact_value_is_default (yypact[yystate]); } /** The default reduction for YYSTATE, assuming it has one. */ static inline yyRuleNum yydefaultAction (yyStateNum yystate) { return yydefact[yystate]; } #define yytable_value_is_error(Yytable_value) \ 0 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN. * Result R means * R < 0: Reduce on rule -R. * R = 0: Error. * R > 0: Shift to state R. * Set *YYCONFLICTS to a pointer into yyconfl to a 0-terminated list * of conflicting reductions. */ static inline void yygetLRActions (yyStateNum yystate, int yytoken, int* yyaction, const short int** yyconflicts) { int yyindex = yypact[yystate] + yytoken; if (yypact_value_is_default (yypact[yystate]) || yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken) { *yyaction = -yydefact[yystate]; *yyconflicts = yyconfl; } else if (! yytable_value_is_error (yytable[yyindex])) { *yyaction = yytable[yyindex]; *yyconflicts = yyconfl + yyconflp[yyindex]; } else { *yyaction = 0; *yyconflicts = yyconfl + yyconflp[yyindex]; } } /** Compute post-reduction state. * \param yystate the current state * \param yysym the nonterminal to push on the stack */ static inline yyStateNum yyLRgotoState (yyStateNum yystate, yySymbol yysym) { int yyr = yypgoto[yysym - YYNTOKENS] + yystate; if (0 <= yyr && yyr <= YYLAST && yycheck[yyr] == yystate) return yytable[yyr]; else return yydefgoto[yysym - YYNTOKENS]; } static inline yybool yyisShiftAction (int yyaction) { return 0 < yyaction; } static inline yybool yyisErrorAction (int yyaction) { return yyaction == 0; } /* GLRStates */ /** Return a fresh GLRStackItem in YYSTACKP. The item is an LR state * if YYISSTATE, and otherwise a semantic option. Callers should call * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient * headroom. */ static inline yyGLRStackItem* yynewGLRStackItem (yyGLRStack* yystackp, yybool yyisState) { yyGLRStackItem* yynewItem = yystackp->yynextFree; yystackp->yyspaceLeft -= 1; yystackp->yynextFree += 1; yynewItem->yystate.yyisState = yyisState; return yynewItem; } /** Add a new semantic action that will execute the action for rule * YYRULE on the semantic values in YYRHS to the list of * alternative actions for YYSTATE. Assumes that YYRHS comes from * stack #YYK of *YYSTACKP. */ static void yyaddDeferredAction (yyGLRStack* yystackp, size_t yyk, yyGLRState* yystate, yyGLRState* yyrhs, yyRuleNum yyrule) { yySemanticOption* yynewOption = &yynewGLRStackItem (yystackp, yyfalse)->yyoption; YYASSERT (!yynewOption->yyisState); yynewOption->yystate = yyrhs; yynewOption->yyrule = yyrule; if (yystackp->yytops.yylookaheadNeeds[yyk]) { yynewOption->yyrawchar = yychar; yynewOption->yyval = yylval; yynewOption->yyloc = yylloc; } else yynewOption->yyrawchar = YYEMPTY; yynewOption->yynext = yystate->yysemantics.yyfirstVal; yystate->yysemantics.yyfirstVal = yynewOption; YY_RESERVE_GLRSTACK (yystackp); } /* GLRStacks */ /** Initialize YYSET to a singleton set containing an empty stack. */ static yybool yyinitStateSet (yyGLRStateSet* yyset) { yyset->yysize = 1; yyset->yycapacity = 16; yyset->yystates = (yyGLRState**) YYMALLOC (16 * sizeof yyset->yystates[0]); if (! yyset->yystates) return yyfalse; yyset->yystates[0] = YY_NULLPTR; yyset->yylookaheadNeeds = (yybool*) YYMALLOC (16 * sizeof yyset->yylookaheadNeeds[0]); if (! yyset->yylookaheadNeeds) { YYFREE (yyset->yystates); return yyfalse; } return yytrue; } static void yyfreeStateSet (yyGLRStateSet* yyset) { YYFREE (yyset->yystates); YYFREE (yyset->yylookaheadNeeds); } /** Initialize *YYSTACKP to a single empty stack, with total maximum * capacity for all stacks of YYSIZE. */ static yybool yyinitGLRStack (yyGLRStack* yystackp, size_t yysize) { yystackp->yyerrState = 0; yynerrs = 0; yystackp->yyspaceLeft = yysize; yystackp->yyitems = (yyGLRStackItem*) YYMALLOC (yysize * sizeof yystackp->yynextFree[0]); if (!yystackp->yyitems) return yyfalse; yystackp->yynextFree = yystackp->yyitems; yystackp->yysplitPoint = YY_NULLPTR; yystackp->yylastDeleted = YY_NULLPTR; return yyinitStateSet (&yystackp->yytops); } #if YYSTACKEXPANDABLE # define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \ &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE /** If *YYSTACKP is expandable, extend it. WARNING: Pointers into the stack from outside should be considered invalid after this call. We always expand when there are 1 or fewer items left AFTER an allocation, so that we can avoid having external pointers exist across an allocation. */ static void yyexpandGLRStack (yyGLRStack* yystackp) { yyGLRStackItem* yynewItems; yyGLRStackItem* yyp0, *yyp1; size_t yynewSize; size_t yyn; size_t yysize = yystackp->yynextFree - yystackp->yyitems; if (YYMAXDEPTH - YYHEADROOM < yysize) yyMemoryExhausted (yystackp); yynewSize = 2*yysize; if (YYMAXDEPTH < yynewSize) yynewSize = YYMAXDEPTH; yynewItems = (yyGLRStackItem*) YYMALLOC (yynewSize * sizeof yynewItems[0]); if (! yynewItems) yyMemoryExhausted (yystackp); for (yyp0 = yystackp->yyitems, yyp1 = yynewItems, yyn = yysize; 0 < yyn; yyn -= 1, yyp0 += 1, yyp1 += 1) { *yyp1 = *yyp0; if (*(yybool *) yyp0) { yyGLRState* yys0 = &yyp0->yystate; yyGLRState* yys1 = &yyp1->yystate; if (yys0->yypred != YY_NULLPTR) yys1->yypred = YYRELOC (yyp0, yyp1, yys0->yypred, yystate); if (! yys0->yyresolved && yys0->yysemantics.yyfirstVal != YY_NULLPTR) yys1->yysemantics.yyfirstVal = YYRELOC (yyp0, yyp1, yys0->yysemantics.yyfirstVal, yyoption); } else { yySemanticOption* yyv0 = &yyp0->yyoption; yySemanticOption* yyv1 = &yyp1->yyoption; if (yyv0->yystate != YY_NULLPTR) yyv1->yystate = YYRELOC (yyp0, yyp1, yyv0->yystate, yystate); if (yyv0->yynext != YY_NULLPTR) yyv1->yynext = YYRELOC (yyp0, yyp1, yyv0->yynext, yyoption); } } if (yystackp->yysplitPoint != YY_NULLPTR) yystackp->yysplitPoint = YYRELOC (yystackp->yyitems, yynewItems, yystackp->yysplitPoint, yystate); for (yyn = 0; yyn < yystackp->yytops.yysize; yyn += 1) if (yystackp->yytops.yystates[yyn] != YY_NULLPTR) yystackp->yytops.yystates[yyn] = YYRELOC (yystackp->yyitems, yynewItems, yystackp->yytops.yystates[yyn], yystate); YYFREE (yystackp->yyitems); yystackp->yyitems = yynewItems; yystackp->yynextFree = yynewItems + yysize; yystackp->yyspaceLeft = yynewSize - yysize; } #endif static void yyfreeGLRStack (yyGLRStack* yystackp) { YYFREE (yystackp->yyitems); yyfreeStateSet (&yystackp->yytops); } /** Assuming that YYS is a GLRState somewhere on *YYSTACKP, update the * splitpoint of *YYSTACKP, if needed, so that it is at least as deep as * YYS. */ static inline void yyupdateSplit (yyGLRStack* yystackp, yyGLRState* yys) { if (yystackp->yysplitPoint != YY_NULLPTR && yystackp->yysplitPoint > yys) yystackp->yysplitPoint = yys; } /** Invalidate stack #YYK in *YYSTACKP. */ static inline void yymarkStackDeleted (yyGLRStack* yystackp, size_t yyk) { if (yystackp->yytops.yystates[yyk] != YY_NULLPTR) yystackp->yylastDeleted = yystackp->yytops.yystates[yyk]; yystackp->yytops.yystates[yyk] = YY_NULLPTR; } /** Undelete the last stack in *YYSTACKP that was marked as deleted. Can only be done once after a deletion, and only when all other stacks have been deleted. */ static void yyundeleteLastStack (yyGLRStack* yystackp) { if (yystackp->yylastDeleted == YY_NULLPTR || yystackp->yytops.yysize != 0) return; yystackp->yytops.yystates[0] = yystackp->yylastDeleted; yystackp->yytops.yysize = 1; YYDPRINTF ((stderr, "Restoring last deleted stack as stack #0.\n")); yystackp->yylastDeleted = YY_NULLPTR; } static inline void yyremoveDeletes (yyGLRStack* yystackp) { size_t yyi, yyj; yyi = yyj = 0; while (yyj < yystackp->yytops.yysize) { if (yystackp->yytops.yystates[yyi] == YY_NULLPTR) { if (yyi == yyj) { YYDPRINTF ((stderr, "Removing dead stacks.\n")); } yystackp->yytops.yysize -= 1; } else { yystackp->yytops.yystates[yyj] = yystackp->yytops.yystates[yyi]; /* In the current implementation, it's unnecessary to copy yystackp->yytops.yylookaheadNeeds[yyi] since, after yyremoveDeletes returns, the parser immediately either enters deterministic operation or shifts a token. However, it doesn't hurt, and the code might evolve to need it. */ yystackp->yytops.yylookaheadNeeds[yyj] = yystackp->yytops.yylookaheadNeeds[yyi]; if (yyj != yyi) { YYDPRINTF ((stderr, "Rename stack %lu -> %lu.\n", (unsigned long int) yyi, (unsigned long int) yyj)); } yyj += 1; } yyi += 1; } } /** Shift to a new state on stack #YYK of *YYSTACKP, corresponding to LR * state YYLRSTATE, at input position YYPOSN, with (resolved) semantic * value *YYVALP and source location *YYLOCP. */ static inline void yyglrShift (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState, size_t yyposn, YYSTYPE* yyvalp, YYLTYPE* yylocp) { yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate; yynewState->yylrState = yylrState; yynewState->yyposn = yyposn; yynewState->yyresolved = yytrue; yynewState->yypred = yystackp->yytops.yystates[yyk]; yynewState->yysemantics.yysval = *yyvalp; yynewState->yyloc = *yylocp; yystackp->yytops.yystates[yyk] = yynewState; YY_RESERVE_GLRSTACK (yystackp); } /** Shift stack #YYK of *YYSTACKP, to a new state corresponding to LR * state YYLRSTATE, at input position YYPOSN, with the (unresolved) * semantic value of YYRHS under the action for YYRULE. */ static inline void yyglrShiftDefer (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState, size_t yyposn, yyGLRState* yyrhs, yyRuleNum yyrule) { yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate; YYASSERT (yynewState->yyisState); yynewState->yylrState = yylrState; yynewState->yyposn = yyposn; yynewState->yyresolved = yyfalse; yynewState->yypred = yystackp->yytops.yystates[yyk]; yynewState->yysemantics.yyfirstVal = YY_NULLPTR; yystackp->yytops.yystates[yyk] = yynewState; /* Invokes YY_RESERVE_GLRSTACK. */ yyaddDeferredAction (yystackp, yyk, yynewState, yyrhs, yyrule); } #if !YYDEBUG # define YY_REDUCE_PRINT(Args) #else # define YY_REDUCE_PRINT(Args) \ do { \ if (yydebug) \ yy_reduce_print Args; \ } while (0) /*----------------------------------------------------------------------. | Report that stack #YYK of *YYSTACKP is going to be reduced by YYRULE. | `----------------------------------------------------------------------*/ static inline void yy_reduce_print (int yynormal, yyGLRStackItem* yyvsp, size_t yyk, yyRuleNum yyrule, Control_Context* context) { int yynrhs = yyrhsLength (yyrule); int yylow = 1; int yyi; YYFPRINTF (stderr, "Reducing stack %lu by rule %d (line %lu):\n", (unsigned long int) yyk, yyrule - 1, (unsigned long int) yyrline[yyrule]); if (! yynormal) yyfillin (yyvsp, 1, -yynrhs); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[yyvsp[yyi - yynrhs + 1].yystate.yylrState], &yyvsp[yyi - yynrhs + 1].yystate.yysemantics.yysval , &(((yyGLRStackItem const *)yyvsp)[YYFILL ((yyi + 1) - (yynrhs))].yystate.yyloc) , context); if (!yyvsp[yyi - yynrhs + 1].yystate.yyresolved) YYFPRINTF (stderr, " (unresolved)"); YYFPRINTF (stderr, "\n"); } } #endif /** Pop the symbols consumed by reduction #YYRULE from the top of stack * #YYK of *YYSTACKP, and perform the appropriate semantic action on their * semantic values. Assumes that all ambiguities in semantic values * have been previously resolved. Set *YYVALP to the resulting value, * and *YYLOCP to the computed location (if any). Return value is as * for userAction. */ static inline YYRESULTTAG yydoAction (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule, YYSTYPE* yyvalp, YYLTYPE *yylocp, Control_Context* context) { int yynrhs = yyrhsLength (yyrule); if (yystackp->yysplitPoint == YY_NULLPTR) { /* Standard special case: single stack. */ yyGLRStackItem* yyrhs = (yyGLRStackItem*) yystackp->yytops.yystates[yyk]; YYASSERT (yyk == 0); yystackp->yynextFree -= yynrhs; yystackp->yyspaceLeft += yynrhs; yystackp->yytops.yystates[0] = & yystackp->yynextFree[-1].yystate; YY_REDUCE_PRINT ((1, yyrhs, yyk, yyrule, context)); return yyuserAction (yyrule, yynrhs, yyrhs, yystackp, yyvalp, yylocp, context); } else { int yyi; yyGLRState* yys; yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1]; yys = yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred = yystackp->yytops.yystates[yyk]; if (yynrhs == 0) /* Set default location. */ yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yys->yyloc; for (yyi = 0; yyi < yynrhs; yyi += 1) { yys = yys->yypred; YYASSERT (yys); } yyupdateSplit (yystackp, yys); yystackp->yytops.yystates[yyk] = yys; YY_REDUCE_PRINT ((0, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1, yyk, yyrule, context)); return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1, yystackp, yyvalp, yylocp, context); } } /** Pop items off stack #YYK of *YYSTACKP according to grammar rule YYRULE, * and push back on the resulting nonterminal symbol. Perform the * semantic action associated with YYRULE and store its value with the * newly pushed state, if YYFORCEEVAL or if *YYSTACKP is currently * unambiguous. Otherwise, store the deferred semantic action with * the new state. If the new state would have an identical input * position, LR state, and predecessor to an existing state on the stack, * it is identified with that existing state, eliminating stack #YYK from * *YYSTACKP. In this case, the semantic value is * added to the options for the existing state's semantic value. */ static inline YYRESULTTAG yyglrReduce (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule, yybool yyforceEval, Control_Context* context) { size_t yyposn = yystackp->yytops.yystates[yyk]->yyposn; if (yyforceEval || yystackp->yysplitPoint == YY_NULLPTR) { YYSTYPE yysval; YYLTYPE yyloc; YYRESULTTAG yyflag = yydoAction (yystackp, yyk, yyrule, &yysval, &yyloc, context); if (yyflag == yyerr && yystackp->yysplitPoint != YY_NULLPTR) { YYDPRINTF ((stderr, "Parse on stack %lu rejected by rule #%d.\n", (unsigned long int) yyk, yyrule - 1)); } if (yyflag != yyok) return yyflag; YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyrule], &yysval, &yyloc); yyglrShift (yystackp, yyk, yyLRgotoState (yystackp->yytops.yystates[yyk]->yylrState, yylhsNonterm (yyrule)), yyposn, &yysval, &yyloc); } else { size_t yyi; int yyn; yyGLRState* yys, *yys0 = yystackp->yytops.yystates[yyk]; yyStateNum yynewLRState; for (yys = yystackp->yytops.yystates[yyk], yyn = yyrhsLength (yyrule); 0 < yyn; yyn -= 1) { yys = yys->yypred; YYASSERT (yys); } yyupdateSplit (yystackp, yys); yynewLRState = yyLRgotoState (yys->yylrState, yylhsNonterm (yyrule)); YYDPRINTF ((stderr, "Reduced stack %lu by rule #%d; action deferred. " "Now in state %d.\n", (unsigned long int) yyk, yyrule - 1, yynewLRState)); for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1) if (yyi != yyk && yystackp->yytops.yystates[yyi] != YY_NULLPTR) { yyGLRState *yysplit = yystackp->yysplitPoint; yyGLRState *yyp = yystackp->yytops.yystates[yyi]; while (yyp != yys && yyp != yysplit && yyp->yyposn >= yyposn) { if (yyp->yylrState == yynewLRState && yyp->yypred == yys) { yyaddDeferredAction (yystackp, yyk, yyp, yys0, yyrule); yymarkStackDeleted (yystackp, yyk); YYDPRINTF ((stderr, "Merging stack %lu into stack %lu.\n", (unsigned long int) yyk, (unsigned long int) yyi)); return yyok; } yyp = yyp->yypred; } } yystackp->yytops.yystates[yyk] = yys; yyglrShiftDefer (yystackp, yyk, yynewLRState, yyposn, yys0, yyrule); } return yyok; } static size_t yysplitStack (yyGLRStack* yystackp, size_t yyk) { if (yystackp->yysplitPoint == YY_NULLPTR) { YYASSERT (yyk == 0); yystackp->yysplitPoint = yystackp->yytops.yystates[yyk]; } if (yystackp->yytops.yysize >= yystackp->yytops.yycapacity) { yyGLRState** yynewStates; yybool* yynewLookaheadNeeds; yynewStates = YY_NULLPTR; if (yystackp->yytops.yycapacity > (YYSIZEMAX / (2 * sizeof yynewStates[0]))) yyMemoryExhausted (yystackp); yystackp->yytops.yycapacity *= 2; yynewStates = (yyGLRState**) YYREALLOC (yystackp->yytops.yystates, (yystackp->yytops.yycapacity * sizeof yynewStates[0])); if (yynewStates == YY_NULLPTR) yyMemoryExhausted (yystackp); yystackp->yytops.yystates = yynewStates; yynewLookaheadNeeds = (yybool*) YYREALLOC (yystackp->yytops.yylookaheadNeeds, (yystackp->yytops.yycapacity * sizeof yynewLookaheadNeeds[0])); if (yynewLookaheadNeeds == YY_NULLPTR) yyMemoryExhausted (yystackp); yystackp->yytops.yylookaheadNeeds = yynewLookaheadNeeds; } yystackp->yytops.yystates[yystackp->yytops.yysize] = yystackp->yytops.yystates[yyk]; yystackp->yytops.yylookaheadNeeds[yystackp->yytops.yysize] = yystackp->yytops.yylookaheadNeeds[yyk]; yystackp->yytops.yysize += 1; return yystackp->yytops.yysize-1; } /** True iff YYY0 and YYY1 represent identical options at the top level. * That is, they represent the same rule applied to RHS symbols * that produce the same terminal symbols. */ static yybool yyidenticalOptions (yySemanticOption* yyy0, yySemanticOption* yyy1) { if (yyy0->yyrule == yyy1->yyrule) { yyGLRState *yys0, *yys1; int yyn; for (yys0 = yyy0->yystate, yys1 = yyy1->yystate, yyn = yyrhsLength (yyy0->yyrule); yyn > 0; yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1) if (yys0->yyposn != yys1->yyposn) return yyfalse; return yytrue; } else return yyfalse; } /** Assuming identicalOptions (YYY0,YYY1), destructively merge the * alternative semantic values for the RHS-symbols of YYY1 and YYY0. */ static void yymergeOptionSets (yySemanticOption* yyy0, yySemanticOption* yyy1) { yyGLRState *yys0, *yys1; int yyn; for (yys0 = yyy0->yystate, yys1 = yyy1->yystate, yyn = yyrhsLength (yyy0->yyrule); yyn > 0; yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1) { if (yys0 == yys1) break; else if (yys0->yyresolved) { yys1->yyresolved = yytrue; yys1->yysemantics.yysval = yys0->yysemantics.yysval; } else if (yys1->yyresolved) { yys0->yyresolved = yytrue; yys0->yysemantics.yysval = yys1->yysemantics.yysval; } else { yySemanticOption** yyz0p = &yys0->yysemantics.yyfirstVal; yySemanticOption* yyz1 = yys1->yysemantics.yyfirstVal; while (yytrue) { if (yyz1 == *yyz0p || yyz1 == YY_NULLPTR) break; else if (*yyz0p == YY_NULLPTR) { *yyz0p = yyz1; break; } else if (*yyz0p < yyz1) { yySemanticOption* yyz = *yyz0p; *yyz0p = yyz1; yyz1 = yyz1->yynext; (*yyz0p)->yynext = yyz; } yyz0p = &(*yyz0p)->yynext; } yys1->yysemantics.yyfirstVal = yys0->yysemantics.yyfirstVal; } } } /** Y0 and Y1 represent two possible actions to take in a given * parsing state; return 0 if no combination is possible, * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */ static int yypreference (yySemanticOption* y0, yySemanticOption* y1) { yyRuleNum r0 = y0->yyrule, r1 = y1->yyrule; int p0 = yydprec[r0], p1 = yydprec[r1]; if (p0 == p1) { if (yymerger[r0] == 0 || yymerger[r0] != yymerger[r1]) return 0; else return 1; } if (p0 == 0 || p1 == 0) return 0; if (p0 < p1) return 3; if (p1 < p0) return 2; return 0; } static YYRESULTTAG yyresolveValue (yyGLRState* yys, yyGLRStack* yystackp, Control_Context* context); /** Resolve the previous YYN states starting at and including state YYS * on *YYSTACKP. If result != yyok, some states may have been left * unresolved possibly with empty semantic option chains. Regardless * of whether result = yyok, each state has been left with consistent * data so that yydestroyGLRState can be invoked if necessary. */ static YYRESULTTAG yyresolveStates (yyGLRState* yys, int yyn, yyGLRStack* yystackp, Control_Context* context) { if (0 < yyn) { YYASSERT (yys->yypred); YYCHK (yyresolveStates (yys->yypred, yyn-1, yystackp, context)); if (! yys->yyresolved) YYCHK (yyresolveValue (yys, yystackp, context)); } return yyok; } /** Resolve the states for the RHS of YYOPT on *YYSTACKP, perform its * user action, and return the semantic value and location in *YYVALP * and *YYLOCP. Regardless of whether result = yyok, all RHS states * have been destroyed (assuming the user action destroys all RHS * semantic values if invoked). */ static YYRESULTTAG yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystackp, YYSTYPE* yyvalp, YYLTYPE *yylocp, Control_Context* context) { yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1]; int yynrhs = yyrhsLength (yyopt->yyrule); YYRESULTTAG yyflag = yyresolveStates (yyopt->yystate, yynrhs, yystackp, context); if (yyflag != yyok) { yyGLRState *yys; for (yys = yyopt->yystate; yynrhs > 0; yys = yys->yypred, yynrhs -= 1) yydestroyGLRState ("Cleanup: popping", yys, context); return yyflag; } yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred = yyopt->yystate; if (yynrhs == 0) /* Set default location. */ yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yyopt->yystate->yyloc; { int yychar_current = yychar; YYSTYPE yylval_current = yylval; YYLTYPE yylloc_current = yylloc; yychar = yyopt->yyrawchar; yylval = yyopt->yyval; yylloc = yyopt->yyloc; yyflag = yyuserAction (yyopt->yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1, yystackp, yyvalp, yylocp, context); yychar = yychar_current; yylval = yylval_current; yylloc = yylloc_current; } return yyflag; } #if YYDEBUG static void yyreportTree (yySemanticOption* yyx, int yyindent) { int yynrhs = yyrhsLength (yyx->yyrule); int yyi; yyGLRState* yys; yyGLRState* yystates[1 + YYMAXRHS]; yyGLRState yyleftmost_state; for (yyi = yynrhs, yys = yyx->yystate; 0 < yyi; yyi -= 1, yys = yys->yypred) yystates[yyi] = yys; if (yys == YY_NULLPTR) { yyleftmost_state.yyposn = 0; yystates[0] = &yyleftmost_state; } else yystates[0] = yys; if (yyx->yystate->yyposn < yys->yyposn + 1) YYFPRINTF (stderr, "%*s%s -> \n", yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)), yyx->yyrule - 1); else YYFPRINTF (stderr, "%*s%s -> \n", yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)), yyx->yyrule - 1, (unsigned long int) (yys->yyposn + 1), (unsigned long int) yyx->yystate->yyposn); for (yyi = 1; yyi <= yynrhs; yyi += 1) { if (yystates[yyi]->yyresolved) { if (yystates[yyi-1]->yyposn+1 > yystates[yyi]->yyposn) YYFPRINTF (stderr, "%*s%s \n", yyindent+2, "", yytokenName (yystos[yystates[yyi]->yylrState])); else YYFPRINTF (stderr, "%*s%s \n", yyindent+2, "", yytokenName (yystos[yystates[yyi]->yylrState]), (unsigned long int) (yystates[yyi-1]->yyposn + 1), (unsigned long int) yystates[yyi]->yyposn); } else yyreportTree (yystates[yyi]->yysemantics.yyfirstVal, yyindent+2); } } #endif static YYRESULTTAG yyreportAmbiguity (yySemanticOption* yyx0, yySemanticOption* yyx1, YYLTYPE *yylocp, Control_Context* context) { YYUSE (yyx0); YYUSE (yyx1); #if YYDEBUG YYFPRINTF (stderr, "Ambiguity detected.\n"); YYFPRINTF (stderr, "Option 1,\n"); yyreportTree (yyx0, 2); YYFPRINTF (stderr, "\nOption 2,\n"); yyreportTree (yyx1, 2); YYFPRINTF (stderr, "\n"); #endif yyerror (yylocp, context, YY_("syntax is ambiguous")); return yyabort; } /** Resolve the locations for each of the YYN1 states in *YYSTACKP, * ending at YYS1. Has no effect on previously resolved states. * The first semantic option of a state is always chosen. */ static void yyresolveLocations (yyGLRState* yys1, int yyn1, yyGLRStack *yystackp, Control_Context* context) { if (0 < yyn1) { yyresolveLocations (yys1->yypred, yyn1 - 1, yystackp, context); if (!yys1->yyresolved) { yyGLRStackItem yyrhsloc[1 + YYMAXRHS]; int yynrhs; yySemanticOption *yyoption = yys1->yysemantics.yyfirstVal; YYASSERT (yyoption != YY_NULLPTR); yynrhs = yyrhsLength (yyoption->yyrule); if (yynrhs > 0) { yyGLRState *yys; int yyn; yyresolveLocations (yyoption->yystate, yynrhs, yystackp, context); for (yys = yyoption->yystate, yyn = yynrhs; yyn > 0; yys = yys->yypred, yyn -= 1) yyrhsloc[yyn].yystate.yyloc = yys->yyloc; } else { /* Both yyresolveAction and yyresolveLocations traverse the GSS in reverse rightmost order. It is only necessary to invoke yyresolveLocations on a subforest for which yyresolveAction would have been invoked next had an ambiguity not been detected. Thus the location of the previous state (but not necessarily the previous state itself) is guaranteed to be resolved already. */ yyGLRState *yyprevious = yyoption->yystate; yyrhsloc[0].yystate.yyloc = yyprevious->yyloc; } { int yychar_current = yychar; YYSTYPE yylval_current = yylval; YYLTYPE yylloc_current = yylloc; yychar = yyoption->yyrawchar; yylval = yyoption->yyval; yylloc = yyoption->yyloc; YYLLOC_DEFAULT ((yys1->yyloc), yyrhsloc, yynrhs); yychar = yychar_current; yylval = yylval_current; yylloc = yylloc_current; } } } } /** Resolve the ambiguity represented in state YYS in *YYSTACKP, * perform the indicated actions, and set the semantic value of YYS. * If result != yyok, the chain of semantic options in YYS has been * cleared instead or it has been left unmodified except that * redundant options may have been removed. Regardless of whether * result = yyok, YYS has been left with consistent data so that * yydestroyGLRState can be invoked if necessary. */ static YYRESULTTAG yyresolveValue (yyGLRState* yys, yyGLRStack* yystackp, Control_Context* context) { yySemanticOption* yyoptionList = yys->yysemantics.yyfirstVal; yySemanticOption* yybest = yyoptionList; yySemanticOption** yypp; yybool yymerge = yyfalse; YYSTYPE yysval; YYRESULTTAG yyflag; YYLTYPE *yylocp = &yys->yyloc; for (yypp = &yyoptionList->yynext; *yypp != YY_NULLPTR; ) { yySemanticOption* yyp = *yypp; if (yyidenticalOptions (yybest, yyp)) { yymergeOptionSets (yybest, yyp); *yypp = yyp->yynext; } else { switch (yypreference (yybest, yyp)) { case 0: yyresolveLocations (yys, 1, yystackp, context); return yyreportAmbiguity (yybest, yyp, yylocp, context); break; case 1: yymerge = yytrue; break; case 2: break; case 3: yybest = yyp; yymerge = yyfalse; break; default: /* This cannot happen so it is not worth a YYASSERT (yyfalse), but some compilers complain if the default case is omitted. */ break; } yypp = &yyp->yynext; } } if (yymerge) { yySemanticOption* yyp; int yyprec = yydprec[yybest->yyrule]; yyflag = yyresolveAction (yybest, yystackp, &yysval, yylocp, context); if (yyflag == yyok) for (yyp = yybest->yynext; yyp != YY_NULLPTR; yyp = yyp->yynext) { if (yyprec == yydprec[yyp->yyrule]) { YYSTYPE yysval_other; YYLTYPE yydummy; yyflag = yyresolveAction (yyp, yystackp, &yysval_other, &yydummy, context); if (yyflag != yyok) { yydestruct ("Cleanup: discarding incompletely merged value for", yystos[yys->yylrState], &yysval, yylocp, context); break; } yyuserMerge (yymerger[yyp->yyrule], &yysval, &yysval_other); } } } else yyflag = yyresolveAction (yybest, yystackp, &yysval, yylocp, context); if (yyflag == yyok) { yys->yyresolved = yytrue; yys->yysemantics.yysval = yysval; } else yys->yysemantics.yyfirstVal = YY_NULLPTR; return yyflag; } static YYRESULTTAG yyresolveStack (yyGLRStack* yystackp, Control_Context* context) { if (yystackp->yysplitPoint != YY_NULLPTR) { yyGLRState* yys; int yyn; for (yyn = 0, yys = yystackp->yytops.yystates[0]; yys != yystackp->yysplitPoint; yys = yys->yypred, yyn += 1) continue; YYCHK (yyresolveStates (yystackp->yytops.yystates[0], yyn, yystackp , context)); } return yyok; } static void yycompressStack (yyGLRStack* yystackp) { yyGLRState* yyp, *yyq, *yyr; if (yystackp->yytops.yysize != 1 || yystackp->yysplitPoint == YY_NULLPTR) return; for (yyp = yystackp->yytops.yystates[0], yyq = yyp->yypred, yyr = YY_NULLPTR; yyp != yystackp->yysplitPoint; yyr = yyp, yyp = yyq, yyq = yyp->yypred) yyp->yypred = yyr; yystackp->yyspaceLeft += yystackp->yynextFree - yystackp->yyitems; yystackp->yynextFree = ((yyGLRStackItem*) yystackp->yysplitPoint) + 1; yystackp->yyspaceLeft -= yystackp->yynextFree - yystackp->yyitems; yystackp->yysplitPoint = YY_NULLPTR; yystackp->yylastDeleted = YY_NULLPTR; while (yyr != YY_NULLPTR) { yystackp->yynextFree->yystate = *yyr; yyr = yyr->yypred; yystackp->yynextFree->yystate.yypred = &yystackp->yynextFree[-1].yystate; yystackp->yytops.yystates[0] = &yystackp->yynextFree->yystate; yystackp->yynextFree += 1; yystackp->yyspaceLeft -= 1; } } static YYRESULTTAG yyprocessOneStack (yyGLRStack* yystackp, size_t yyk, size_t yyposn, YYLTYPE *yylocp, Control_Context* context) { while (yystackp->yytops.yystates[yyk] != YY_NULLPTR) { yyStateNum yystate = yystackp->yytops.yystates[yyk]->yylrState; YYDPRINTF ((stderr, "Stack %lu Entering state %d\n", (unsigned long int) yyk, yystate)); YYASSERT (yystate != YYFINAL); if (yyisDefaultedState (yystate)) { YYRESULTTAG yyflag; yyRuleNum yyrule = yydefaultAction (yystate); if (yyrule == 0) { YYDPRINTF ((stderr, "Stack %lu dies.\n", (unsigned long int) yyk)); yymarkStackDeleted (yystackp, yyk); return yyok; } yyflag = yyglrReduce (yystackp, yyk, yyrule, yyimmediate[yyrule], context); if (yyflag == yyerr) { YYDPRINTF ((stderr, "Stack %lu dies " "(predicate failure or explicit user error).\n", (unsigned long int) yyk)); yymarkStackDeleted (yystackp, yyk); return yyok; } if (yyflag != yyok) return yyflag; } else { yySymbol yytoken; int yyaction; const short int* yyconflicts; yystackp->yytops.yylookaheadNeeds[yyk] = yytrue; if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = yylex (&yylval, &yylloc, scanner); } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts); while (*yyconflicts != 0) { YYRESULTTAG yyflag; size_t yynewStack = yysplitStack (yystackp, yyk); YYDPRINTF ((stderr, "Splitting off stack %lu from %lu.\n", (unsigned long int) yynewStack, (unsigned long int) yyk)); yyflag = yyglrReduce (yystackp, yynewStack, *yyconflicts, yyimmediate[*yyconflicts], context); if (yyflag == yyok) YYCHK (yyprocessOneStack (yystackp, yynewStack, yyposn, yylocp, context)); else if (yyflag == yyerr) { YYDPRINTF ((stderr, "Stack %lu dies.\n", (unsigned long int) yynewStack)); yymarkStackDeleted (yystackp, yynewStack); } else return yyflag; yyconflicts += 1; } if (yyisShiftAction (yyaction)) break; else if (yyisErrorAction (yyaction)) { YYDPRINTF ((stderr, "Stack %lu dies.\n", (unsigned long int) yyk)); yymarkStackDeleted (yystackp, yyk); break; } else { YYRESULTTAG yyflag = yyglrReduce (yystackp, yyk, -yyaction, yyimmediate[-yyaction], context); if (yyflag == yyerr) { YYDPRINTF ((stderr, "Stack %lu dies " "(predicate failure or explicit user error).\n", (unsigned long int) yyk)); yymarkStackDeleted (yystackp, yyk); break; } else if (yyflag != yyok) return yyflag; } } } return yyok; } static void yyreportSyntaxError (yyGLRStack* yystackp, Control_Context* context) { if (yystackp->yyerrState != 0) return; #if ! YYERROR_VERBOSE yyerror (&yylloc, context, YY_("syntax error")); #else { yySymbol yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); size_t yysize0 = yytnamerr (YY_NULLPTR, yytokenName (yytoken)); size_t yysize = yysize0; yybool yysize_overflow = yyfalse; char* yymsg = YY_NULLPTR; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTR; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int yycount = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[yystackp->yytops.yystates[0]->yylrState]; yyarg[yycount++] = yytokenName (yytoken); if (!yypact_value_is_default (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error (yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytokenName (yyx); { size_t yysz = yysize + yytnamerr (YY_NULLPTR, yytokenName (yyx)); yysize_overflow |= yysz < yysize; yysize = yysz; } } } } switch (yycount) { #define YYCASE_(N, S) \ case N: \ yyformat = S; \ break YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); #undef YYCASE_ } { size_t yysz = yysize + strlen (yyformat); yysize_overflow |= yysz < yysize; yysize = yysz; } if (!yysize_overflow) yymsg = (char *) YYMALLOC (yysize); if (yymsg) { char *yyp = yymsg; int yyi = 0; while ((*yyp = *yyformat)) { if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyformat += 2; } else { yyp++; yyformat++; } } yyerror (&yylloc, context, yymsg); YYFREE (yymsg); } else { yyerror (&yylloc, context, YY_("syntax error")); yyMemoryExhausted (yystackp); } } #endif /* YYERROR_VERBOSE */ yynerrs += 1; } /* Recover from a syntax error on *YYSTACKP, assuming that *YYSTACKP->YYTOKENP, yylval, and yylloc are the syntactic category, semantic value, and location of the lookahead. */ static void yyrecoverSyntaxError (yyGLRStack* yystackp, Control_Context* context) { size_t yyk; int yyj; if (yystackp->yyerrState == 3) /* We just shifted the error token and (perhaps) took some reductions. Skip tokens until we can proceed. */ while (yytrue) { yySymbol yytoken; if (yychar == YYEOF) yyFail (yystackp, &yylloc, context, YY_NULLPTR); if (yychar != YYEMPTY) { /* We throw away the lookahead, but the error range of the shifted error token must take it into account. */ yyGLRState *yys = yystackp->yytops.yystates[0]; yyGLRStackItem yyerror_range[3]; yyerror_range[1].yystate.yyloc = yys->yyloc; yyerror_range[2].yystate.yyloc = yylloc; YYLLOC_DEFAULT ((yys->yyloc), yyerror_range, 2); yytoken = YYTRANSLATE (yychar); yydestruct ("Error: discarding", yytoken, &yylval, &yylloc, context); } YYDPRINTF ((stderr, "Reading a token: ")); yychar = yylex (&yylval, &yylloc, scanner); if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } yyj = yypact[yystackp->yytops.yystates[0]->yylrState]; if (yypact_value_is_default (yyj)) return; yyj += yytoken; if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != yytoken) { if (yydefact[yystackp->yytops.yystates[0]->yylrState] != 0) return; } else if (! yytable_value_is_error (yytable[yyj])) return; } /* Reduce to one stack. */ for (yyk = 0; yyk < yystackp->yytops.yysize; yyk += 1) if (yystackp->yytops.yystates[yyk] != YY_NULLPTR) break; if (yyk >= yystackp->yytops.yysize) yyFail (yystackp, &yylloc, context, YY_NULLPTR); for (yyk += 1; yyk < yystackp->yytops.yysize; yyk += 1) yymarkStackDeleted (yystackp, yyk); yyremoveDeletes (yystackp); yycompressStack (yystackp); /* Now pop stack until we find a state that shifts the error token. */ yystackp->yyerrState = 3; while (yystackp->yytops.yystates[0] != YY_NULLPTR) { yyGLRState *yys = yystackp->yytops.yystates[0]; yyj = yypact[yys->yylrState]; if (! yypact_value_is_default (yyj)) { yyj += YYTERROR; if (0 <= yyj && yyj <= YYLAST && yycheck[yyj] == YYTERROR && yyisShiftAction (yytable[yyj])) { /* Shift the error token. */ /* First adjust its location.*/ YYLTYPE yyerrloc; yystackp->yyerror_range[2].yystate.yyloc = yylloc; YYLLOC_DEFAULT (yyerrloc, (yystackp->yyerror_range), 2); YY_SYMBOL_PRINT ("Shifting", yystos[yytable[yyj]], &yylval, &yyerrloc); yyglrShift (yystackp, 0, yytable[yyj], yys->yyposn, &yylval, &yyerrloc); yys = yystackp->yytops.yystates[0]; break; } } yystackp->yyerror_range[1].yystate.yyloc = yys->yyloc; if (yys->yypred != YY_NULLPTR) yydestroyGLRState ("Error: popping", yys, context); yystackp->yytops.yystates[0] = yys->yypred; yystackp->yynextFree -= 1; yystackp->yyspaceLeft += 1; } if (yystackp->yytops.yystates[0] == YY_NULLPTR) yyFail (yystackp, &yylloc, context, YY_NULLPTR); } #define YYCHK1(YYE) \ do { \ switch (YYE) { \ case yyok: \ break; \ case yyabort: \ goto yyabortlab; \ case yyaccept: \ goto yyacceptlab; \ case yyerr: \ goto yyuser_error; \ default: \ goto yybuglab; \ } \ } while (0) /*----------. | yyparse. | `----------*/ int yyparse (Control_Context* context) { int yyresult; yyGLRStack yystack; yyGLRStack* const yystackp = &yystack; size_t yyposn; YYDPRINTF ((stderr, "Starting parse\n")); yychar = YYEMPTY; yylval = yyval_default; yylloc = yyloc_default; if (! yyinitGLRStack (yystackp, YYINITDEPTH)) goto yyexhaustedlab; switch (YYSETJMP (yystack.yyexception_buffer)) { case 0: break; case 1: goto yyabortlab; case 2: goto yyexhaustedlab; default: goto yybuglab; } yyglrShift (&yystack, 0, 0, 0, &yylval, &yylloc); yyposn = 0; while (yytrue) { /* For efficiency, we have two loops, the first of which is specialized to deterministic operation (single stack, no potential ambiguity). */ /* Standard mode */ while (yytrue) { yyRuleNum yyrule; int yyaction; const short int* yyconflicts; yyStateNum yystate = yystack.yytops.yystates[0]->yylrState; YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) goto yyacceptlab; if (yyisDefaultedState (yystate)) { yyrule = yydefaultAction (yystate); if (yyrule == 0) { yystack.yyerror_range[1].yystate.yyloc = yylloc; yyreportSyntaxError (&yystack, context); goto yyuser_error; } YYCHK1 (yyglrReduce (&yystack, 0, yyrule, yytrue, context)); } else { yySymbol yytoken; if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = yylex (&yylval, &yylloc, scanner); } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts); if (*yyconflicts != 0) break; if (yyisShiftAction (yyaction)) { YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); yychar = YYEMPTY; yyposn += 1; yyglrShift (&yystack, 0, yyaction, yyposn, &yylval, &yylloc); if (0 < yystack.yyerrState) yystack.yyerrState -= 1; } else if (yyisErrorAction (yyaction)) { yystack.yyerror_range[1].yystate.yyloc = yylloc; yyreportSyntaxError (&yystack, context); goto yyuser_error; } else YYCHK1 (yyglrReduce (&yystack, 0, -yyaction, yytrue, context)); } } while (yytrue) { yySymbol yytoken_to_shift; size_t yys; for (yys = 0; yys < yystack.yytops.yysize; yys += 1) yystackp->yytops.yylookaheadNeeds[yys] = yychar != YYEMPTY; /* yyprocessOneStack returns one of three things: - An error flag. If the caller is yyprocessOneStack, it immediately returns as well. When the caller is finally yyparse, it jumps to an error label via YYCHK1. - yyok, but yyprocessOneStack has invoked yymarkStackDeleted (&yystack, yys), which sets the top state of yys to NULL. Thus, yyparse's following invocation of yyremoveDeletes will remove the stack. - yyok, when ready to shift a token. Except in the first case, yyparse will invoke yyremoveDeletes and then shift the next token onto all remaining stacks. This synchronization of the shift (that is, after all preceding reductions on all stacks) helps prevent double destructor calls on yylval in the event of memory exhaustion. */ for (yys = 0; yys < yystack.yytops.yysize; yys += 1) YYCHK1 (yyprocessOneStack (&yystack, yys, yyposn, &yylloc, context)); yyremoveDeletes (&yystack); if (yystack.yytops.yysize == 0) { yyundeleteLastStack (&yystack); if (yystack.yytops.yysize == 0) yyFail (&yystack, &yylloc, context, YY_("syntax error")); YYCHK1 (yyresolveStack (&yystack, context)); YYDPRINTF ((stderr, "Returning to deterministic operation.\n")); yystack.yyerror_range[1].yystate.yyloc = yylloc; yyreportSyntaxError (&yystack, context); goto yyuser_error; } /* If any yyglrShift call fails, it will fail after shifting. Thus, a copy of yylval will already be on stack 0 in the event of a failure in the following loop. Thus, yychar is set to YYEMPTY before the loop to make sure the user destructor for yylval isn't called twice. */ yytoken_to_shift = YYTRANSLATE (yychar); yychar = YYEMPTY; yyposn += 1; for (yys = 0; yys < yystack.yytops.yysize; yys += 1) { int yyaction; const short int* yyconflicts; yyStateNum yystate = yystack.yytops.yystates[yys]->yylrState; yygetLRActions (yystate, yytoken_to_shift, &yyaction, &yyconflicts); /* Note that yyconflicts were handled by yyprocessOneStack. */ YYDPRINTF ((stderr, "On stack %lu, ", (unsigned long int) yys)); YY_SYMBOL_PRINT ("shifting", yytoken_to_shift, &yylval, &yylloc); yyglrShift (&yystack, yys, yyaction, yyposn, &yylval, &yylloc); YYDPRINTF ((stderr, "Stack %lu now in state #%d\n", (unsigned long int) yys, yystack.yytops.yystates[yys]->yylrState)); } if (yystack.yytops.yysize == 1) { YYCHK1 (yyresolveStack (&yystack, context)); YYDPRINTF ((stderr, "Returning to deterministic operation.\n")); yycompressStack (&yystack); break; } } continue; yyuser_error: yyrecoverSyntaxError (&yystack, context); yyposn = yystack.yytops.yystates[0]->yyposn; } yyacceptlab: yyresult = 0; goto yyreturn; yybuglab: YYASSERT (yyfalse); goto yyabortlab; yyabortlab: yyresult = 1; goto yyreturn; yyexhaustedlab: yyerror (&yylloc, context, YY_("memory exhausted")); yyresult = 2; goto yyreturn; yyreturn: if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", YYTRANSLATE (yychar), &yylval, &yylloc, context); /* If the stack is well-formed, pop the stack until it is empty, destroying its entries as we go. But free the stack regardless of whether it is well-formed. */ if (yystack.yyitems) { yyGLRState** yystates = yystack.yytops.yystates; if (yystates) { size_t yysize = yystack.yytops.yysize; size_t yyk; for (yyk = 0; yyk < yysize; yyk += 1) if (yystates[yyk]) { while (yystates[yyk]) { yyGLRState *yys = yystates[yyk]; yystack.yyerror_range[1].yystate.yyloc = yys->yyloc; if (yys->yypred != YY_NULLPTR) yydestroyGLRState ("Cleanup: popping", yys, context); yystates[yyk] = yys->yypred; yystack.yynextFree -= 1; yystack.yyspaceLeft += 1; } break; } } yyfreeGLRStack (&yystack); } return yyresult; } /* DEBUGGING ONLY */ #if YYDEBUG static void yy_yypstack (yyGLRState* yys) { if (yys->yypred) { yy_yypstack (yys->yypred); YYFPRINTF (stderr, " -> "); } YYFPRINTF (stderr, "%d@%lu", yys->yylrState, (unsigned long int) yys->yyposn); } static void yypstates (yyGLRState* yyst) { if (yyst == YY_NULLPTR) YYFPRINTF (stderr, ""); else yy_yypstack (yyst); YYFPRINTF (stderr, "\n"); } static void yypstack (yyGLRStack* yystackp, size_t yyk) { yypstates (yystackp->yytops.yystates[yyk]); } #define YYINDEX(YYX) \ ((YYX) == YY_NULLPTR ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems) static void yypdumpstack (yyGLRStack* yystackp) { yyGLRStackItem* yyp; size_t yyi; for (yyp = yystackp->yyitems; yyp < yystackp->yynextFree; yyp += 1) { YYFPRINTF (stderr, "%3lu. ", (unsigned long int) (yyp - yystackp->yyitems)); if (*(yybool *) yyp) { YYASSERT (yyp->yystate.yyisState); YYASSERT (yyp->yyoption.yyisState); YYFPRINTF (stderr, "Res: %d, LR State: %d, posn: %lu, pred: %ld", yyp->yystate.yyresolved, yyp->yystate.yylrState, (unsigned long int) yyp->yystate.yyposn, (long int) YYINDEX (yyp->yystate.yypred)); if (! yyp->yystate.yyresolved) YYFPRINTF (stderr, ", firstVal: %ld", (long int) YYINDEX (yyp->yystate .yysemantics.yyfirstVal)); } else { YYASSERT (!yyp->yystate.yyisState); YYASSERT (!yyp->yyoption.yyisState); YYFPRINTF (stderr, "Option. rule: %d, state: %ld, next: %ld", yyp->yyoption.yyrule - 1, (long int) YYINDEX (yyp->yyoption.yystate), (long int) YYINDEX (yyp->yyoption.yynext)); } YYFPRINTF (stderr, "\n"); } YYFPRINTF (stderr, "Tops:"); for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1) YYFPRINTF (stderr, "%lu: %ld; ", (unsigned long int) yyi, (long int) YYINDEX (yystackp->yytops.yystates[yyi])); YYFPRINTF (stderr, "\n"); } #endif #undef yylval #undef yychar #undef yynerrs #undef yylloc /* Substitute the variable and function names. */ #define yyparse TA_control_parse #define yylex TA_control_lex #define yyerror TA_control_error #define yylval TA_control_lval #define yychar TA_control_char #define yydebug TA_control_debug #define yynerrs TA_control_nerrs #define yylloc TA_control_lloc #line 957 "./tacontrol.bison" /* glr.c:2584 */ void TA_control_error(YYLTYPE *locp, Control_Context* context, char const* msg) { /* if `error' is already set, we have a fatal flex error */ if (!context->error) { context->error = TA_Err_Control_Syntax_Error; strncpy(context->errmsg, msg, sizeof (context->errmsg)); } context->errline_num = locp->first_line; context->errline_pos_left = locp->first_column; context->errline_pos_right = locp->last_column; } void store_error_data(const YYLTYPE *locp, Control_Context* context, TA_Error error) { context->error = error; context->errline_num = locp->first_line; context->errline_pos_left = locp->first_column; context->errline_pos_right = locp->last_column; context->errmsg[0] = '\0'; } #if 0 /* * compile this test program with * * make libnumberset.la * * flex -d tacontrol.flex \ * && bison -t tacontrol.bison \ * && gcc -g3 -O0 \ * -Wall -W \ * -I.. \ * -I. \ * -I/usr/local/include/freetype2 \ * -I/usr/local/include/harfbuzz \ * -L.libs \ * -o tacontrol-bison \ * tacontrol-bison.c \ * tacontrol-flex.c \ * tacontrol.c \ * -lfreetype \ * -lnumberset */ const char* input = "# Test\n" "\n" "# 0 a p 1-3 x 0.3 y -0.2 @ 20-30; \\\n" "0 exclam p 2-4 x 0.7 y -0.4 @ 6,7,9,10,11; \\\n" "a p / 12 x 0.5 @ 23-25"; #undef scanner int main(int argc, char** argv) { TA_Error error; int bison_error; int retval = 1; Control_Context context; FONT font; SFNT sfnts[1]; FT_Library library; FT_Face face; const char* filename; if (argc != 2) { fprintf(stderr, "need an outline font as an argument\n"); goto Exit0; } filename = argv[1]; error = FT_Init_FreeType(&library); if (error) { fprintf(stderr, "error while initializing FreeType library (0x%X)\n", error); goto Exit0; } error = FT_New_Face(library, filename, 0, &face); if (error) { fprintf(stderr, "error while loading font `%s' (0x%X)\n", filename, error); goto Exit1; } /* we construct a minumum `Font' object */ sfnts[0].face = face; font.num_sfnts = 1; font.sfnts = sfnts; font.control_buf = (char*)input; font.control_len = strlen(input); TA_control_debug = 1; TA_control_scanner_init(&context, &font); if (context.error) goto Exit2; bison_error = TA_control_parse(&context); if (bison_error) goto Exit3; retval = 0; Exit3: TA_control_scanner_done(&context); TA_control_free(context.result); Exit2: FT_Done_Face(face); Exit1: FT_Done_FreeType(library); Exit0: return retval; } #endif /* end of tacontrol.bison */ ttfautohint-1.8.1/lib/tacontrol-bison.h0000644000175000001440000000605313222451061017767 0ustar00wlusers00000000000000/* A Bison parser, made by GNU Bison 3.0.4. */ /* Skeleton interface for Bison GLR parsers in C Copyright (C) 2002-2015 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 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, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ #ifndef YY_TA_CONTROL_TACONTROL_BISON_H_INCLUDED # define YY_TA_CONTROL_TACONTROL_BISON_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int TA_control_debug; #endif /* "%code requires" blocks. */ #line 46 "./tacontrol.bison" /* glr.c:197 */ #include "ta.h" #include "tashaper.h" /* we don't change the name prefix of flex functions */ #define TA_control_lex yylex #line 52 "tacontrol-bison.h" /* glr.c:197 */ /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { EOE = 258, INTEGER = 259, INTERNAL_FLEX_ERROR = 260, INVALID_CHARACTER = 261, LEFT = 262, NAME = 263, NODIR = 264, POINT = 265, REAL = 266, RIGHT = 267, TOUCH = 268, WIDTH = 269, XSHIFT = 270, YSHIFT = 271 }; #endif /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { #line 54 "./tacontrol.bison" /* glr.c:197 */ char character; Control_Type type; long integer; char* name; number_range* range; double real; Control* control; #line 91 "tacontrol-bison.h" /* glr.c:197 */ }; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif /* Location type. */ #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED typedef struct YYLTYPE YYLTYPE; struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; }; # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif int TA_control_parse (Control_Context* context); #endif /* !YY_TA_CONTROL_TACONTROL_BISON_H_INCLUDED */ ttfautohint-1.8.1/lib/tacvt.c0000644000175000001440000002063713153174711016001 0ustar00wlusers00000000000000/* tacvt.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" static FT_Error TA_sfnt_compute_global_hints(SFNT* sfnt, FONT* font, TA_Style style_idx) { FT_Error error; FT_Face face = sfnt->face; FT_Int32 load_flags; TA_FaceGlobals globals = (TA_FaceGlobals)sfnt->face->autohint.data; error = FT_Select_Charmap(face, FT_ENCODING_UNICODE); if (error) { if (font->symbol) { error = FT_Select_Charmap(face, FT_ENCODING_MS_SYMBOL); if (error) return TA_Err_Missing_Symbol_CMap; } else return TA_Err_Missing_Unicode_CMap; } if (!globals->sample_glyphs[style_idx]) return TA_Err_Missing_Glyph; /* trigger computation of the current coverage's metrics */ load_flags = 1 << 29; /* vertical hinting only */ return ta_loader_load_glyph(font, face, globals->sample_glyphs[style_idx], load_flags); } static FT_Error TA_table_build_cvt(FT_Byte** cvt, FT_ULong* cvt_len, SFNT* sfnt, FONT* font) { SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; TA_LatinAxis haxis; TA_LatinAxis vaxis; FT_UInt hwidth_count; FT_UInt vwidth_count; FT_UInt blue_count; FT_UInt i, j; FT_UInt buf_len; FT_UInt len; FT_Byte* buf; FT_Byte* bufp; FT_UInt cvt_offset; FT_Error error; /* loop over all styles and collect the relevant CVT data */ /* to compute the necessary array sizes and meta-information */ hwidth_count = 0; vwidth_count = 0; blue_count = 0; data->num_used_styles = 0; for (i = 0; i < TA_STYLE_MAX; i++) { error = TA_sfnt_compute_global_hints(sfnt, font, (TA_Style)i); if (error == TA_Err_Missing_Glyph) { data->style_ids[i] = 0xFFFFU; continue; } else if (error) return error; /* XXX: generalize this to handle other metrics also */ haxis = &((TA_LatinMetrics)font->loader->hints.metrics)->axis[0]; vaxis = &((TA_LatinMetrics)font->loader->hints.metrics)->axis[1]; if (!vaxis->blue_count) { TA_FaceGlobals globals = (TA_FaceGlobals)sfnt->face->autohint.data; FT_UShort* gstyles = globals->glyph_styles; FT_Int nn; data->style_ids[i] = 0xFFFFU; globals->sample_glyphs[i] = 0; /* remove all references to this style; we have no blue zone data */ for (nn = 0; nn < globals->glyph_count; nn++) { if ((gstyles[nn] & TA_STYLE_MASK) == i) { gstyles[nn] &= ~TA_STYLE_MASK; gstyles[nn] |= globals->font->fallback_style; } } continue; } data->style_ids[i] = data->num_used_styles++; hwidth_count += haxis->width_count; vwidth_count += vaxis->width_count; blue_count += vaxis->blue_count; /* if windows compatibility mode is active */ /* we add two artificial blue zones at the end of the array */ /* that are not part of `vaxis->blue_count' */ if (font->windows_compatibility) blue_count += 2; } /* exit if the font doesn't contain a single supported style, */ /* and we don't have a symbol font */ if (!data->num_used_styles && !font->symbol) return TA_Err_Missing_Glyph; buf_len = cvtl_max_runtime /* runtime values 1 */ + data->num_used_styles /* runtime values 2 (for scaling) */ + 2 * data->num_used_styles /* runtime values 3 (blue data) */ + 2 * data->num_used_styles /* vert. and horiz. std. widths */ + hwidth_count + vwidth_count + 2 * blue_count; /* round and flat blue zones */ buf_len <<= 1; /* we have 16bit values */ /* buffer length must be a multiple of four */ len = (buf_len + 3) & ~3U; buf = (FT_Byte*)malloc(len); if (!buf) return FT_Err_Out_Of_Memory; /* pad end of buffer with zeros */ buf[len - 1] = 0x00; buf[len - 2] = 0x00; buf[len - 3] = 0x00; bufp = buf; /* * some CVT values are initialized (and modified) at runtime: * * (1) the `cvtl_xxx' values (see `tabytecode.h') * (2) a scaling value for each style * (3) offset and size of the vertical widths array * (needed by `bci_{smooth,strong}_stem_width') for each style */ for (i = 0; i < (cvtl_max_runtime + data->num_used_styles + 2 * data->num_used_styles) * 2; i++) *(bufp++) = 0; cvt_offset = (FT_UInt)(bufp - buf); /* loop again over all styles and copy CVT data */ for (i = 0; i < TA_STYLE_MAX; i++) { FT_UInt default_width = 50 * sfnt->face->units_per_EM / 2048; /* collect offsets */ data->cvt_offsets[i] = ((FT_UInt)(bufp - buf) - cvt_offset) >> 1; error = TA_sfnt_compute_global_hints(sfnt, font, (TA_Style)i); if (error == TA_Err_Missing_Glyph) continue; else if (error) return error; haxis = &((TA_LatinMetrics)font->loader->hints.metrics)->axis[0]; vaxis = &((TA_LatinMetrics)font->loader->hints.metrics)->axis[1]; if (!vaxis->blue_count) continue; hwidth_count = haxis->width_count; vwidth_count = vaxis->width_count; blue_count = vaxis->blue_count; if (font->windows_compatibility) blue_count += 2; /* with artificial blue zones */ /* horizontal standard width */ if (hwidth_count > 0) { *(bufp++) = HIGH(haxis->widths[0].org); *(bufp++) = LOW(haxis->widths[0].org); } else { *(bufp++) = HIGH(default_width); *(bufp++) = LOW(default_width); } for (j = 0; j < hwidth_count; j++) { if (haxis->widths[j].org > 0xFFFF) goto Err; *(bufp++) = HIGH(haxis->widths[j].org); *(bufp++) = LOW(haxis->widths[j].org); } /* vertical standard width */ if (vwidth_count > 0) { *(bufp++) = HIGH(vaxis->widths[0].org); *(bufp++) = LOW(vaxis->widths[0].org); } else { *(bufp++) = HIGH(default_width); *(bufp++) = LOW(default_width); } for (j = 0; j < vwidth_count; j++) { if (vaxis->widths[j].org > 0xFFFF) goto Err; *(bufp++) = HIGH(vaxis->widths[j].org); *(bufp++) = LOW(vaxis->widths[j].org); } data->cvt_blue_adjustment_offsets[i] = 0xFFFFU; for (j = 0; j < blue_count; j++) { if (vaxis->blues[j].ref.org > 0xFFFF) goto Err; *(bufp++) = HIGH(vaxis->blues[j].ref.org); *(bufp++) = LOW(vaxis->blues[j].ref.org); } for (j = 0; j < blue_count; j++) { if (vaxis->blues[j].shoot.org > 0xFFFF) goto Err; *(bufp++) = HIGH(vaxis->blues[j].shoot.org); *(bufp++) = LOW(vaxis->blues[j].shoot.org); if (vaxis->blues[j].flags & TA_LATIN_BLUE_ADJUSTMENT) data->cvt_blue_adjustment_offsets[i] = j; } data->cvt_horz_width_sizes[i] = hwidth_count; data->cvt_vert_width_sizes[i] = vwidth_count; data->cvt_blue_zone_sizes[i] = blue_count; } *cvt = buf; *cvt_len = buf_len; return FT_Err_Ok; Err: free(buf); return TA_Err_Hinter_Overflow; } FT_Error TA_sfnt_build_cvt_table(SFNT* sfnt, FONT* font) { FT_Error error; SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; FT_Byte* cvt_buf; FT_ULong cvt_len; error = TA_sfnt_add_table_info(sfnt); if (error) goto Exit; /* `glyf', `cvt', `fpgm', and `prep' are always used in parallel */ if (glyf_table->processed) { sfnt->table_infos[sfnt->num_table_infos - 1] = data->cvt_idx; goto Exit; } error = TA_table_build_cvt(&cvt_buf, &cvt_len, sfnt, font); if (error) goto Exit; /* in case of success, `cvt_buf' gets linked */ /* and is eventually freed in `TA_font_unload' */ error = TA_font_add_table(font, &sfnt->table_infos[sfnt->num_table_infos - 1], TTAG_cvt, cvt_len, cvt_buf); if (error) free(cvt_buf); else data->cvt_idx = sfnt->table_infos[sfnt->num_table_infos - 1]; Exit: return error; } /* end of tacvt.c */ ttfautohint-1.8.1/lib/tadsig.c0000644000175000001440000000164313153174711016127 0ustar00wlusers00000000000000/* tadsig.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" /* we build a dummy `DSIG' table only */ FT_Error TA_table_build_DSIG(FT_Byte** DSIG) { FT_Byte* buf; buf = (FT_Byte*)malloc(DSIG_LEN); if (!buf) return FT_Err_Out_Of_Memory; /* version */ buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x01; /* zero signatures */ buf[4] = 0x00; buf[5] = 0x00; /* permission flags */ buf[6] = 0x00; buf[7] = 0x00; *DSIG = buf; return TA_Err_Ok; } /* end of tadsig.c */ ttfautohint-1.8.1/lib/tadummy.c0000644000175000001440000000341413153174711016332 0ustar00wlusers00000000000000/* tadummy.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afdummy.c' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #include "tadummy.h" #include "tahints.h" static FT_Error ta_dummy_hints_init(TA_GlyphHints hints, TA_StyleMetrics metrics) { ta_glyph_hints_rescale(hints, metrics); hints->x_scale = metrics->scaler.x_scale; hints->y_scale = metrics->scaler.y_scale; hints->x_delta = metrics->scaler.x_delta; hints->y_delta = metrics->scaler.y_delta; return FT_Err_Ok; } static FT_Error ta_dummy_hints_apply(FT_UInt glyph_index, TA_GlyphHints hints, FT_Outline* outline) { FT_Error error; FT_UNUSED(glyph_index); error = ta_glyph_hints_reload(hints, outline); if (!error) ta_glyph_hints_save(hints, outline); return error; } const TA_WritingSystemClassRec ta_dummy_writing_system_class = { TA_WRITING_SYSTEM_DUMMY, sizeof (TA_StyleMetricsRec), (TA_WritingSystem_InitMetricsFunc)NULL, /* style_metrics_init */ (TA_WritingSystem_ScaleMetricsFunc)NULL, /* style_metrics_scale */ (TA_WritingSystem_DoneMetricsFunc)NULL, /* style_metrics_done */ (TA_WritingSystem_InitHintsFunc)ta_dummy_hints_init, /* style_hints_init */ (TA_WritingSystem_ApplyHintsFunc)ta_dummy_hints_apply /* style_hints_apply */ }; /* end of tadummy.c */ ttfautohint-1.8.1/lib/tadummy.h0000644000175000001440000000150113153174711016332 0ustar00wlusers00000000000000/* tadummy.h */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afdummy.h' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #ifndef TADUMMY_H_ #define TADUMMY_H_ #include "tatypes.h" /* a dummy writing system used when no hinting should be performed */ extern const TA_WritingSystemClassRec ta_dummy_writing_system_class; #endif /* TADUMMY_H_ */ /* end of tadummy.h */ ttfautohint-1.8.1/lib/tadump.c0000644000175000001440000001161513217520247016146 0ustar00wlusers00000000000000/* tadump.c */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" #include #define DUMPVAL(str, arg) \ do \ { \ s = sdscatprintf(s, \ "%*s = %ld\n", \ width, (str), (FT_Long)(arg)); \ } while (0) #define DUMPSTR(str, arg) \ do \ { \ s = sdscatprintf(s, \ "%*s = %s%s", \ width, (str), (arg), eol); \ } while (0) #define DUMPSTRX(arg) \ do \ { \ s = sdscatprintf(s, \ "%s%*s %s%s", \ prev_eol, width, "", (arg), eol); \ } while (0) /* if `format' is set, we present the data in a more friendly format */ char* TA_font_dump_parameters(FONT* font, FT_Bool format) { sds s; size_t len; char* res; char* ns = NULL; char* ds = NULL; int width = 0; const char* eol = "\n"; const char* prev_eol = ""; s = sdsempty(); if (format) { s = sdscat(s, "TTF_autohint parameters\n" "=======================\n"); width = 33; } s = sdscat(s, "\n"); DUMPSTR("ttfautohint version", VERSION); s = sdscat(s, "\n"); if (font->dehint) { if (format) DUMPVAL("dehint", font->dehint); goto Exit; } DUMPVAL("adjust-subglyphs", font->adjust_subglyphs); DUMPSTR("default-script", script_names[font->default_script]); DUMPSTR("dw-cleartype-stem-width-mode", (font->dw_cleartype_stem_width_mode == TA_STEM_WIDTH_MODE_NATURAL) ? "natural" : (font->dw_cleartype_stem_width_mode == TA_STEM_WIDTH_MODE_QUANTIZED) ? "quantized" : "strong"); DUMPVAL("fallback-scaling", font->fallback_scaling); DUMPSTR("fallback-script", script_names[ta_style_classes[font->fallback_style]->script]); DUMPVAL("fallback-stem-width", font->fallback_stem_width); DUMPSTR("gdi-cleartype-stem-width-mode", (font->gdi_cleartype_stem_width_mode == TA_STEM_WIDTH_MODE_NATURAL) ? "natural" : (font->gdi_cleartype_stem_width_mode == TA_STEM_WIDTH_MODE_QUANTIZED) ? "quantized" : "strong"); DUMPSTR("gray-stem-width-mode", (font->gray_stem_width_mode == TA_STEM_WIDTH_MODE_NATURAL) ? "natural" : (font->gray_stem_width_mode == TA_STEM_WIDTH_MODE_QUANTIZED) ? "quantized" : "strong"); DUMPVAL("hinting-limit", font->hinting_limit); DUMPVAL("hinting-range-max", font->hinting_range_max); DUMPVAL("hinting-range-min", font->hinting_range_min); DUMPVAL("hint-composites", font->hint_composites); DUMPVAL("ignore-restrictions", font->ignore_restrictions); DUMPVAL("increase-x-height", font->increase_x_height); if (font->reference_name) DUMPSTR("reference", font->reference_name); else if (font->reference_buf) DUMPSTR("reference", ""); else DUMPSTR("reference", ""); DUMPVAL("reference-index", font->reference_index); DUMPVAL("symbol", font->symbol); DUMPVAL("TTFA-info", font->TTFA_info); DUMPVAL("windows-compatibility", font->windows_compatibility); ns = number_set_show(font->x_height_snapping_exceptions, TA_PROP_INCREASE_X_HEIGHT_MIN, 0x7FFF); if (!ns) { sdsfree(s); s = NULL; goto Exit; } DUMPSTR("x-height-snapping-exceptions", ns); ds = TA_control_show(font); if (!ds) { sdsfree(s); s = NULL; goto Exit; } if (*ds) { char* token; char* saveptr; token = strtok_r(ds, "\n", &saveptr); if (format) DUMPSTR("control-instructions", token); else { DUMPSTR("control-instructions", "\\"); eol = ""; /* show control instructions line by line */ DUMPSTRX(token); prev_eol = "; \\\n"; } for (;;) { token = strtok_r(NULL, "\n", &saveptr); if (!token) break; DUMPSTRX(token); } } else DUMPSTR("control-instructions", ""); if (!format) s = sdscat(s, "\n"); s = sdscat(s, "\n"); Exit: free(ns); free(ds); if (!s) return NULL; len = sdslen(s) + 1; res = (char*)malloc(len); if (res) memcpy(res, s, len); sdsfree(s); return res; } /* end of tadump.c */ ttfautohint-1.8.1/lib/taerror.c0000644000175000001440000000235513153174711016333 0ustar00wlusers00000000000000/* taerror.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" /* error message strings; */ /* we concatenate FreeType and ttfautohint messages into one structure */ typedef const struct TA_error_ { int err_code; const char* err_msg; } TA_error; static TA_error TA_Errors[] = #undef __FTERRORS_H__ #define FT_ERRORDEF(e, v, s) { e, s }, #define FT_ERROR_START_LIST { #define FT_ERROR_END_LIST /* empty */ #include FT_ERRORS_H #undef TTFAUTOHINT_ERRORS_H_ #define TA_ERRORDEF(e, v, s) { e, s }, #define TA_ERROR_START_LIST /* empty */ #define TA_ERROR_END_LIST { 0, NULL } }; #include const char* TA_get_error_message(FT_Error error) { TA_error* e = TA_Errors; while (e->err_code || e->err_msg) { if (e->err_code == error) return e->err_msg; e++; } return NULL; } /* end of taerror.c */ ttfautohint-1.8.1/lib/tafeature.c0000644000175000001440000000152313153174711016631 0ustar00wlusers00000000000000/* tafeature.c */ /* * Copyright (C) 2015-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "tashaper.h" #undef COVERAGE #define COVERAGE(name, NAME, description, \ tag, tag1, tag2, tag3, tag4) \ HB_TAG(tag1, tag2, tag3, tag4), const hb_tag_t feature_tags[] = { #include HB_TAG('d', 'f', 'l', 't') }; size_t feature_tags_size = sizeof (feature_tags) / sizeof (feature_tags[0]); /* end of tafeature.c */ ttfautohint-1.8.1/lib/tafile.c0000644000175000001440000000462513153174711016123 0ustar00wlusers00000000000000/* tafile.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" #define BUF_SIZE 0x10000 FT_Error TA_font_file_read(FILE* file, FT_Byte** buffer, size_t* length) { FT_Byte buf[BUF_SIZE]; size_t len = 0; size_t read_bytes; *buffer = (FT_Byte*)malloc(BUF_SIZE); if (!*buffer) return FT_Err_Out_Of_Memory; while ((read_bytes = fread(buf, 1, BUF_SIZE, file)) > 0) { FT_Byte* buf_new; buf_new = (FT_Byte*)realloc(*buffer, len + read_bytes); if (!buf_new) return FT_Err_Out_Of_Memory; else *buffer = buf_new; memcpy(*buffer + len, buf, read_bytes); len += read_bytes; } if (ferror(file)) return FT_Err_Invalid_Stream_Read; /* a valid TTF can never be that small */ if (len < 100) return TA_Err_Invalid_Font_Type; *length = len; return TA_Err_Ok; } FT_Error TA_font_file_write(FONT* font, FILE* out_file) { if (fwrite(font->out_buf, 1, font->out_len, out_file) != font->out_len) return TA_Err_Invalid_Stream_Write; return TA_Err_Ok; } FT_Error TA_control_file_read(FONT* font, FILE* control_file) { char* buf[BUF_SIZE]; size_t control_len = 0; size_t read_bytes; font->control_buf = (char*)malloc(BUF_SIZE); if (!font->control_buf) return FT_Err_Out_Of_Memory; while ((read_bytes = fread(buf, 1, BUF_SIZE, control_file)) > 0) { char* control_buf_new; /* we store the data as a C string, allocating one more byte */ control_buf_new = (char*)realloc(font->control_buf, control_len + read_bytes + 1); if (!control_buf_new) return FT_Err_Out_Of_Memory; else font->control_buf = control_buf_new; memcpy(font->control_buf + control_len, buf, read_bytes); control_len += read_bytes; } if (ferror(control_file)) return FT_Err_Invalid_Stream_Read; font->control_len = control_len; font->control_buf[control_len] = '\0'; return TA_Err_Ok; } /* end of tafile.c */ ttfautohint-1.8.1/lib/tafont.c0000644000175000001440000000661113214325767016156 0ustar00wlusers00000000000000/* tafont.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" FT_Error TA_font_init(FONT* font) { FT_Error error; FT_Face f; FT_Int major, minor, patch; error = FT_Init_FreeType(&font->lib); if (error) return error; /* assure correct FreeType version to avoid using the wrong DLL */ FT_Library_Version(font->lib, &major, &minor, &patch); if (((major*1000 + minor)*1000 + patch) < 2004005) return TA_Err_Invalid_FreeType_Version; /* get number of faces (i.e. subfonts) */ error = FT_New_Memory_Face(font->lib, font->in_buf, (FT_Long)font->in_len, -1, &f); if (error) return error; font->num_sfnts = f->num_faces; FT_Done_Face(f); /* it is a TTC if we have more than a single subfont */ font->sfnts = (SFNT*)calloc(1, (size_t)font->num_sfnts * sizeof (SFNT)); if (!font->sfnts) return FT_Err_Out_Of_Memory; if (font->reference_buf) { error = FT_New_Memory_Face(font->lib, font->reference_buf, (FT_Long)font->reference_len, font->reference_index, &font->reference); if (error) return error + 0x300; } return TA_Err_Ok; } void TA_font_unload(FONT* font, const char* in_buf, char** out_bufp, const char* control_buf, const char* reference_buf) { /* in case of error it is expected that unallocated pointers */ /* are NULL (and counters are zero) */ if (!font) return; ta_loader_done(font); if (font->tables) { FT_ULong i; for (i = 0; i < font->num_tables; i++) { free(font->tables[i].buf); if (font->tables[i].data) { if (font->tables[i].tag == TTAG_glyf) { glyf_Data* data = (glyf_Data*)font->tables[i].data; FT_UShort j; for (j = 0; j < data->num_glyphs; j++) { free(data->glyphs[j].buf); free(data->glyphs[j].ins_buf); free(data->glyphs[j].ins_extra_buf); free(data->glyphs[j].components); free(data->glyphs[j].pointsums); } free(data->glyphs); free(data); } } } free(font->tables); } if (font->sfnts) { FT_Long i; for (i = 0; i < font->num_sfnts; i++) { FT_Done_Face(font->sfnts[i].face); free(font->sfnts[i].table_infos); } free(font->sfnts); } FT_Done_Face(font->reference); number_set_free(font->x_height_snapping_exceptions); FT_Done_FreeType(font->lib); /* in case the user provided file handles, */ /* free the allocated buffers for the file contents */ if (!in_buf) free(font->in_buf); if (!out_bufp) font->deallocate(font->out_buf); if (!control_buf) free(font->control_buf); if (!reference_buf) free(font->reference_buf); free(font); } /* end of tafont.c */ ttfautohint-1.8.1/lib/tafpgm.c0000644000175000001440000040745513217515640016146 0ustar00wlusers00000000000000/* tafpgm.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" /* we need the following macro */ /* so that `func_name' doesn't get replaced with its #defined value */ /* (as defined in `tabytecode.h') */ #define FPGM(func_name) fpgm_ ## func_name /* * Due to a bug in FreeType up to and including version 2.4.7, * it is not possible to use MD_orig with twilight points. * We circumvent this by using GC_orig. */ #define MD_orig_fixed \ GC_orig, \ SWAP, \ GC_orig, \ SWAP, \ SUB #define MD_orig_ZP2_0 \ MD_orig_fixed #if 0 #define MD_orig_ZP2_1 \ PUSHB_1, \ 0, \ SZP2, \ MD_orig_fixed, \ PUSHB_1, \ 1, \ SZP2 #endif /* * Older versions of Monotype's `iType' bytecode interpreter have a serious * bug: The DIV instruction rounds the result, while the correct operation * is truncation. (Note, however, that MUL always rounds the result.) * Since many printers contain this rasterizer without any possibility to * update to a non-buggy version, we have to work around the problem. * * DIV and MUL work on 26.6 numbers which means that the numerator gets * multiplied by 64 before the division, and the product gets divided by 64 * after the multiplication, respectively. For example, to divide 2 by 3, * you have to write * * PUSHB_1, * 2, * 3*64, * DIV * * The correct formula to divide two values in 26.6 format with truncation * is * * a*64 / b , * * while older `iType' versions incorrectly apply rounding by using * * (a*64 + b/2) / b . * * Doing our 2/3 division, we have a=2 and b=3*64, so we get * * (2*64 + (3*64)/2) / (3*64) = 1 * * instead of the correct result 0. * * The solution to the rounding issue is to use a 26.6 value as an * intermediate result so that we can truncate to the nearest integer (in * 26.6 format) with the FLOOR operator before converting back to a plain * integer (in 32.0 format). * * For the common divisions by 2 and 2^10 we define macros. */ #define DIV_POS_BY_2 \ PUSHB_1, \ 2, \ DIV, /* multiply by 64, then divide by 2 */ \ FLOOR, \ PUSHB_1, \ 1, \ MUL /* multiply by 1, then divide by 64 */ #define DIV_BY_2 \ PUSHB_1, \ 2, \ DIV, \ DUP, \ PUSHB_1, \ 0, \ LT, \ IF, \ PUSHB_1, \ 64, \ ADD, /* add 1 if value is negative */ \ EIF, \ FLOOR, \ PUSHB_1, \ 1, \ MUL #define DIV_BY_1024 \ PUSHW_1, \ 0x04, /* 2^10 */ \ 0x00, \ DIV, \ DUP, \ PUSHB_1, \ 0, \ LT, \ IF, \ PUSHB_1, \ 64, \ ADD, \ EIF, \ FLOOR, \ PUSHB_1, \ 1, \ MUL /* a convenience shorthand for scaling; see `bci_cvt_rescale' for details */ #define DO_SCALE \ DUP, /* s: a a */ \ PUSHB_1, \ sal_scale, \ RS, \ MUL, /* delta * 2^10 */ \ DIV_BY_1024, /* delta */ \ ADD /* a + delta */ /* in the comments below, the top of the stack (`s:') */ /* is the rightmost element; the stack is shown */ /* after the instruction on the same line has been executed */ /* * bci_align_x_height * * Optimize the alignment of the top of small letters to the pixel grid. * * This function gets used in the `prep' table. * * in: blue_idx (CVT index for the style's top of small letters blue zone) * * sal: sal_i (CVT index of the style's scaling value; * gets incremented by 1 after execution) */ static const unsigned char FPGM(bci_align_x_height_a) [] = { PUSHB_1, bci_align_x_height, FDEF, /* only get CVT value for non-zero index */ DUP, PUSHB_1, 0, NEQ, IF, RCVT, EIF, DUP, DUP, /* s: blue blue blue */ }; /* if (font->increase_x_height) */ /* { */ static const unsigned char FPGM(bci_align_x_height_b1a) [] = { /* apply much `stronger' rounding up of x height for */ /* 6 <= PPEM <= increase_x_height */ MPPEM, PUSHW_1, }; /* %d, x height increase limit */ static const unsigned char FPGM(bci_align_x_height_b1b) [] = { LTEQ, MPPEM, PUSHB_1, 6, GTEQ, AND, IF, PUSHB_1, 52, /* threshold = 52 */ ELSE, PUSHB_1, 40, /* threshold = 40 */ EIF, ADD, FLOOR, /* fitted = FLOOR(blue + threshold) */ }; /* } */ /* if (!font->increase_x_height) */ /* { */ static const unsigned char FPGM(bci_align_x_height_b2) [] = { PUSHB_1, 40, ADD, FLOOR, /* fitted = FLOOR(blue + 40) */ }; /* } */ static const unsigned char FPGM(bci_align_x_height_c) [] = { DUP, /* s: blue blue fitted fitted */ ROLL, NEQ, IF, /* s: blue fitted */ PUSHB_1, 2, CINDEX, SUB, /* s: blue (fitted-blue) */ PUSHW_2, 0x08, /* 0x800 */ 0x00, 0x08, /* 0x800 */ 0x00, MUL, /* 0x10000 */ MUL, /* (fitted-blue) in 16.16 format */ SWAP, DIV, /* factor = ((fitted-blue) / blue) in 16.16 format */ ELSE, POP, POP, PUSHB_1, 0, /* factor = 0 */ EIF, PUSHB_1, sal_i, RS, /* s: factor idx */ SWAP, WCVTP, PUSHB_3, sal_i, 1, sal_i, RS, ADD, /* sal_i = sal_i + 1 */ WS, ENDF, }; /* * bci_round * * Round a 26.6 number. Contrary to the ROUND bytecode instruction, no * engine specific corrections are applied. * * in: val * * out: ROUND(val) */ static const unsigned char FPGM(bci_round) [] = { PUSHB_1, bci_round, FDEF, PUSHB_1, 32, ADD, FLOOR, ENDF, }; /* * bci_quantize_stem_width * * Take a stem width and compare it against a set of already stored stem * widths. If the difference to one of the values is less than 4, replace * the argument with the stored one. Otherwise add the argument to the * array of stem widths, without changing the argument. * * We do this to catch rounding errors. * * in: val * * out: quantized(val) * * sal: sal_num_stem_widths * sal_stem_width_offset * sal_k * sal_limit * sal_have_cached_width * sal_cached_width_offset */ static const unsigned char FPGM(bci_quantize_stem_width) [] = { PUSHB_1, bci_quantize_stem_width, FDEF, DUP, ABS, /* s: val |val| */ PUSHB_4, sal_limit, sal_stem_width_offset, sal_have_cached_width, 0, WS, /* sal_have_cached_width = 0 */ RS, PUSHB_1, sal_num_stem_widths, RS, DUP, ADD, ADD, /* sal_limit = sal_stem_width_offset + 2 * sal_num_stem_widths */ WS, PUSHB_2, sal_k, sal_stem_width_offset, RS, WS, /* sal_k = sal_stem_width_offset */ /* start_loop: */ PUSHB_2, 37, /* not_in_array jump offset */ sal_limit, RS, PUSHB_1, sal_k, RS, EQ, /* sal_limit == sal_k ? */ JROT,/* goto not_in_array */ DUP, PUSHB_1, 12, /* found_stem jump offset */ SWAP, PUSHB_1, sal_k, RS, RS, /* cur_stem_width = sal[sal_k] */ SUB, ABS, PUSHB_1, 4, LT, /* |val - cur_stem_width| < 4 ? */ JROT, /* goto found_stem */ PUSHB_3, sal_k, 2, sal_k, RS, ADD, /* sal_k = sal_k + 2, skipping associated cache value */ WS, PUSHB_1, 33, /* start_loop jump offset */ NEG, JMPR, /* goto start_loop */ /* found_stem: */ POP, /* discard val */ PUSHB_1, sal_k, RS, RS, /* val = sal[sal_k] */ PUSHB_3, 14, /* exit jump offset */ sal_have_cached_width, 1, WS, /* sal_have_cached_width = 1 */ JMPR, /* goto exit */ /* not_in_array: */ DUP, PUSHB_1, sal_k, RS, SWAP, WS, /* sal[sal_k] = val */ PUSHB_3, sal_num_stem_widths, 1, sal_num_stem_widths, RS, ADD, WS, /* sal_num_stem_widths = sal_num_stem_widths + 1 */ /* exit: */ SWAP, /* s: |new_val| val */ PUSHB_1, 0, LT, /* val < 0 */ IF, NEG, /* new_val = -new_val */ EIF, /* for input width array index `n' we have (or soon will have) */ /* a cached output width at array index `n + 1' */ PUSHB_3, sal_cached_width_offset, 1, sal_k, RS, ADD, WS, /* sal_cached_width_offset = sal_k + 1 */ ENDF, }; /* * bci_natural_stem_width * * This dummy function only pops arguments as necessary. * * in: width * stem_is_serif * base_is_round * * out: width */ static const unsigned char FPGM(bci_natural_stem_width) [] = { PUSHB_1, bci_natural_stem_width, FDEF, SWAP, POP, SWAP, POP, ENDF, }; /* * bci_smooth_stem_width * * This is the equivalent to the following code from function * `ta_latin_compute_stem_width': * * dist = |width| * * if (stem_is_serif * && dist < 3*64) * || std_width < 40: * return width * else if base_is_round: * if dist < 80: * dist = 64 * else if dist < 56: * dist = 56 * * delta = |dist - std_width| * * if delta < 40: * dist = std_width * if dist < 48: * dist = 48 * goto End * * if dist < 3*64: * delta = dist * dist = FLOOR(dist) * delta = delta - dist * * if delta < 10: * dist = dist + delta * else if delta < 32: * dist = dist + 10 * else if delta < 54: * dist = dist + 54 * else: * dist = dist + delta * else: * bdelta = 0 * * if width * base_delta > 0: * if ppem < 10: * bdelta = base_delta * else if ppem < 30: * bdelta = (base_delta * (30 - ppem)) / 20 * * bdelta = |bdelta| * * dist = ROUND(dist - bdelta) * * End: * if width < 0: * dist = -dist * return dist * * If `cvtl_ignore_std_width' is set, we simply set `std_width' * equal to `dist'. * * If `sal_have_cached_width' is set (by `bci_quantize_stem_width'), the * cached value given by `sal_cached_width_offset' is directly taken, not * computing the width again. Otherwise, the computed width gets stored * at the given offset. * * in: width * stem_is_serif * base_is_round * * out: new_width * * sal: sal_vwidth_data_offset * sal_base_delta * sal_have_cached_width * sal_cached_width_offset * * CVT: std_width * cvtl_ignore_std_width * * uses: bci_round * bci_quantize_stem_width */ static const unsigned char FPGM(bci_smooth_stem_width) [] = { PUSHB_1, bci_smooth_stem_width, FDEF, PUSHB_1, bci_quantize_stem_width, CALL, PUSHB_1, sal_have_cached_width, RS, IF, SWAP, POP, SWAP, POP, PUSHB_1, sal_cached_width_offset, RS, RS, /* cached_width = sal[sal_cached_width_offset] */ SWAP, PUSHB_1, 0, LT, /* width < 0 */ IF, NEG, /* cached_width = -cached_width */ EIF, ELSE, DUP, ABS, /* s: base_is_round stem_is_serif width dist */ DUP, PUSHB_1, 3*64, LT, /* dist < 3*64 */ PUSHB_1, 4, MINDEX, /* s: base_is_round width dist (dist<3*64) stem_is_serif */ AND, /* stem_is_serif && dist < 3*64 */ PUSHB_3, 40, 1, sal_vwidth_data_offset, RS, RCVT, /* first indirection */ MUL, /* divide by 64 */ RCVT, /* second indirection */ PUSHB_1, cvtl_ignore_std_width, RCVT, IF, POP, /* s: ... dist (stem_is_serif && dist < 3*64) 40 */ PUSHB_1, 3, CINDEX, /* standard_width = dist */ EIF, GT, /* standard_width < 40 */ OR, /* (stem_is_serif && dist < 3*64) || standard_width < 40 */ IF, /* s: base_is_round width dist */ POP, SWAP, POP, /* s: width */ ELSE, ROLL, /* s: width dist base_is_round */ IF, /* s: width dist */ DUP, PUSHB_1, 80, LT, /* dist < 80 */ IF, /* s: width dist */ POP, PUSHB_1, 64, /* dist = 64 */ EIF, ELSE, DUP, PUSHB_1, 56, LT, /* dist < 56 */ IF, /* s: width dist */ POP, PUSHB_1, 56, /* dist = 56 */ EIF, EIF, DUP, /* s: width dist dist */ PUSHB_2, 1, sal_vwidth_data_offset, RS, RCVT, /* first indirection */ MUL, /* divide by 64 */ RCVT, /* second indirection */ SUB, ABS, /* s: width dist delta */ PUSHB_1, 40, LT, /* delta < 40 */ IF, /* s: width dist */ POP, PUSHB_2, 1, sal_vwidth_data_offset, RS, RCVT, /* first indirection */ MUL, /* divide by 64 */ RCVT, /* second indirection; dist = std_width */ DUP, PUSHB_1, 48, LT, /* dist < 48 */ IF, POP, PUSHB_1, 48, /* dist = 48 */ EIF, ELSE, DUP, /* s: width dist dist */ PUSHB_1, 3*64, LT, /* dist < 3*64 */ IF, DUP, /* s: width delta dist */ FLOOR, /* dist = FLOOR(dist) */ DUP, /* s: width delta dist dist */ ROLL, ROLL, /* s: width dist delta dist */ SUB, /* delta = delta - dist */ DUP, /* s: width dist delta delta */ PUSHB_1, 10, LT, /* delta < 10 */ IF, /* s: width dist delta */ ADD, /* dist = dist + delta */ ELSE, DUP, PUSHB_1, 32, LT, /* delta < 32 */ IF, POP, PUSHB_1, 10, ADD, /* dist = dist + 10 */ ELSE, DUP, PUSHB_1, 54, LT, /* delta < 54 */ IF, POP, PUSHB_1, 54, ADD, /* dist = dist + 54 */ ELSE, ADD, /* dist = dist + delta */ EIF, EIF, EIF, ELSE, PUSHB_1, 2, CINDEX, /* s: width dist width */ PUSHB_1, sal_base_delta, RS, MUL, /* s: width dist width*base_delta */ PUSHB_1, 0, GT, /* width * base_delta > 0 */ IF, PUSHB_1, 0, /* s: width dist bdelta */ MPPEM, PUSHB_1, 10, LT, /* ppem < 10 */ IF, POP, PUSHB_1, sal_base_delta, RS, /* bdelta = base_delta */ ELSE, MPPEM, PUSHB_1, 30, LT, /* ppem < 30 */ IF, POP, PUSHB_1, 30, MPPEM, SUB, /* 30 - ppem */ PUSHW_1, 0x10, /* 64 * 64 */ 0x00, MUL, /* (30 - ppem) in 26.6 format */ PUSHB_1, sal_base_delta, RS, MUL, /* base_delta * (30 - ppem) */ PUSHW_1, 0x05, /* 20 * 64 */ 0x00, DIV, /* bdelta = (base_delta * (30 - ppem)) / 20 */ EIF, EIF, ABS, /* bdelta = |bdelta| */ SUB, /* dist = dist - bdelta */ EIF, PUSHB_1, bci_round, CALL, /* dist = round(dist) */ EIF, EIF, SWAP, /* s: dist width */ PUSHB_1, 0, LT, /* width < 0 */ IF, NEG, /* dist = -dist */ EIF, EIF, DUP, ABS, PUSHB_1, sal_cached_width_offset, RS, SWAP, WS, /* sal[sal_cached_width_offset] = |dist| */ EIF, ENDF, }; /* * bci_get_best_width * * An auxiliary function for `bci_strong_stem_width'. * * in: n (initialized with CVT index for first vertical width) * dist * * out: n+1 * dist * * sal: sal_best * sal_ref * * CVT: widths[] */ static const unsigned char FPGM(bci_get_best_width) [] = { PUSHB_1, bci_get_best_width, FDEF, DUP, RCVT, /* s: dist n w */ DUP, PUSHB_1, 4, CINDEX, /* s: dist n w w dist */ SUB, ABS, /* s: dist n w d */ DUP, PUSHB_1, sal_best, RS, /* s: dist n w d d best */ LT, /* d < best */ IF, PUSHB_1, sal_best, SWAP, WS, /* best = d */ PUSHB_1, sal_ref, SWAP, WS, /* reference = w */ ELSE, POP, POP, EIF, PUSHB_1, 1, ADD, /* n = n + 1 */ ENDF, }; /* * bci_strong_stem_width * * This is the equivalent to the following code (function * `ta_latin_snap_width' and some lines from * `ta_latin_compute_stem_width'): * * best = 64 + 32 + 2 * dist = |width| * reference = dist * * for n in 0 .. num_widths: * w = widths[n] * d = |dist - w| * * if d < best: * best = d * reference = w * * if dist >= reference: * if dist < ROUND(reference) + 48: * dist = reference * else: * if dist > ROUND(reference) - 48: * dist = reference * * if dist >= 64: * dist = ROUND(dist) * else: * dist = 64 * * if width < 0: * dist = -dist * return dist * * If `cvtl_ignore_std_width' is set, we leave `reference = width'. * * in: width * stem_is_serif (unused) * base_is_round (unused) * * out: new_width * * sal: sal_best * sal_ref * sal_vwidth_data_offset * * CVT: widths[] * cvtl_ignore_std_width * * uses: bci_get_best_width * bci_round * bci_quantize_stem_width */ static const unsigned char FPGM(bci_strong_stem_width_a) [] = { PUSHB_1, bci_strong_stem_width, FDEF, SWAP, POP, SWAP, POP, PUSHB_1, bci_quantize_stem_width, CALL, DUP, ABS, /* s: width dist */ PUSHB_2, sal_best, 64 + 32 + 2, WS, /* sal_best = 98 */ DUP, PUSHB_1, sal_ref, SWAP, WS, /* sal_ref = width */ PUSHB_1, cvtl_ignore_std_width, RCVT, IF, ELSE, /* s: width dist */ PUSHB_2, 1, sal_vwidth_data_offset, RS, RCVT, MUL, /* divide by 64; first index of vertical widths */ /* s: width dist vw_idx */ PUSHB_2, 1, sal_vwidth_data_offset, RS, PUSHB_1, }; /* %c, number of used styles */ static const unsigned char FPGM(bci_strong_stem_width_b) [] = { ADD, RCVT, /* number of vertical widths */ MUL, /* divide by 64 */ /* s: width dist vw_idx loop_count */ PUSHB_1, bci_get_best_width, LOOPCALL, /* clean up stack */ POP, /* s: width dist */ DUP, PUSHB_1, sal_ref, RS, /* s: width dist dist reference */ DUP, ROLL, DUP, ROLL, PUSHB_1, bci_round, CALL, /* s: width dist reference dist dist ROUND(reference) */ PUSHB_2, 48, 5, CINDEX, /* s: width dist reference dist dist ROUND(reference) 48 reference */ PUSHB_1, 4, MINDEX, /* s: width dist reference dist ROUND(reference) 48 reference dist */ LTEQ, /* reference <= dist */ IF, /* s: width dist reference dist ROUND(reference) 48 */ ADD, LT, /* dist < ROUND(reference) + 48 */ ELSE, SUB, GT, /* dist > ROUND(reference) - 48 */ EIF, IF, SWAP, /* s: width reference=new_dist dist */ EIF, POP, EIF, /* !cvtl_ignore_std_width */ DUP, /* s: width dist dist */ PUSHB_1, 64, GTEQ, /* dist >= 64 */ IF, PUSHB_1, bci_round, CALL, /* dist = ROUND(dist) */ ELSE, POP, PUSHB_1, 64, /* dist = 64 */ EIF, SWAP, /* s: dist width */ PUSHB_1, 0, LT, /* width < 0 */ IF, NEG, /* dist = -dist */ EIF, ENDF, }; /* * bci_do_loop * * An auxiliary function for `bci_loop'. * * sal: sal_i (gets incremented by 2 after execution) * sal_func * * uses: func[sal_func] */ static const unsigned char FPGM(bci_loop_do) [] = { PUSHB_1, bci_loop_do, FDEF, PUSHB_1, sal_func, RS, CALL, PUSHB_3, sal_i, 2, sal_i, RS, ADD, /* sal_i = sal_i + 2 */ WS, ENDF, }; /* * bci_loop * * Take a range `start'..`end' and a function number and apply the * associated function to the range elements `start', `start+2', * `start+4', ... * * in: func_num * end * start * * sal: sal_i (counter initialized with `start') * sal_func (`func_num') * * uses: bci_loop_do */ static const unsigned char FPGM(bci_loop) [] = { PUSHB_1, bci_loop, FDEF, PUSHB_1, sal_func, SWAP, WS, /* sal_func = func_num */ SWAP, DUP, PUSHB_1, sal_i, SWAP, WS, /* sal_i = start */ SUB, DIV_POS_BY_2, PUSHB_1, 1, ADD, /* number of loops ((end - start) / 2 + 1) */ PUSHB_1, bci_loop_do, LOOPCALL, ENDF, }; /* * bci_cvt_rescale * * Rescale CVT value by `sal_scale' (in 16.16 format). * * The scaling factor `sal_scale' isn't stored as `b/c' but as `(b-c)/c'; * consequently, the calculation `a * b/c' is done as `a + delta' with * `delta = a * (b-c)/c'. This avoids overflow. * * in: cvt_idx * * out: cvt_idx+1 * * sal: sal_scale */ static const unsigned char FPGM(bci_cvt_rescale) [] = { PUSHB_1, bci_cvt_rescale, FDEF, DUP, DUP, RCVT, DO_SCALE, WCVTP, PUSHB_1, 1, ADD, ENDF, }; /* * bci_cvt_rescale_range * * Rescale a range of CVT values with `bci_cvt_rescale', using a custom * scaling value. * * This function gets used in the `prep' table. * * in: num_cvt * cvt_start_idx * * sal: sal_i (CVT index of the style's scaling value; * gets incremented by 1 after execution) * sal_scale * * uses: bci_cvt_rescale */ static const unsigned char FPGM(bci_cvt_rescale_range) [] = { PUSHB_1, bci_cvt_rescale_range, FDEF, /* store scaling value in `sal_scale' */ PUSHB_3, bci_cvt_rescale, sal_scale, sal_i, RS, RCVT, WS, /* s: cvt_start_idx num_cvt bci_cvt_rescale */ LOOPCALL, /* clean up stack */ POP, PUSHB_3, sal_i, 1, sal_i, RS, ADD, /* sal_i = sal_i + 1 */ WS, ENDF, }; /* * bci_vwidth_data_store * * Store a vertical width array value. * * This function gets used in the `prep' table. * * in: value * * sal: sal_i (CVT index of the style's vwidth data; * gets incremented by 1 after execution) */ static const unsigned char FPGM(bci_vwidth_data_store) [] = { PUSHB_1, bci_vwidth_data_store, FDEF, PUSHB_1, sal_i, RS, SWAP, WCVTP, PUSHB_3, sal_i, 1, sal_i, RS, ADD, /* sal_i = sal_i + 1 */ WS, ENDF, }; /* * bci_smooth_blue_round * * Round a blue ref value and adjust its corresponding shoot value. * * This is the equivalent to the following code (function * `ta_latin_metrics_scale_dim'): * * delta = dist * if dist < 0: * delta = -delta * * if delta < 32: * delta = 0 * else if delta < 48: * delta = 32 * else: * delta = 64 * * if dist < 0: * delta = -delta * * in: ref_idx * * sal: sal_i (number of blue zones) * * out: ref_idx+1 * * uses: bci_round */ static const unsigned char FPGM(bci_smooth_blue_round) [] = { PUSHB_1, bci_smooth_blue_round, FDEF, DUP, DUP, RCVT, /* s: ref_idx ref_idx ref */ DUP, PUSHB_1, bci_round, CALL, SWAP, /* s: ref_idx ref_idx round(ref) ref */ PUSHB_1, sal_i, RS, PUSHB_1, 4, CINDEX, ADD, /* s: ref_idx ref_idx round(ref) ref shoot_idx */ DUP, RCVT, /* s: ref_idx ref_idx round(ref) ref shoot_idx shoot */ ROLL, /* s: ref_idx ref_idx round(ref) shoot_idx shoot ref */ SWAP, SUB, /* s: ref_idx ref_idx round(ref) shoot_idx dist */ DUP, ABS, /* s: ref_idx ref_idx round(ref) shoot_idx dist delta */ DUP, PUSHB_1, 32, LT, /* delta < 32 */ IF, POP, PUSHB_1, 0, /* delta = 0 */ ELSE, PUSHB_1, 48, LT, /* delta < 48 */ IF, PUSHB_1, 32, /* delta = 32 */ ELSE, PUSHB_1, 64, /* delta = 64 */ EIF, EIF, SWAP, /* s: ref_idx ref_idx round(ref) shoot_idx delta dist */ PUSHB_1, 0, LT, /* dist < 0 */ IF, NEG, /* delta = -delta */ EIF, PUSHB_1, 3, CINDEX, SWAP, SUB, /* s: ref_idx ref_idx round(ref) shoot_idx (round(ref) - delta) */ WCVTP, WCVTP, PUSHB_1, 1, ADD, /* s: (ref_idx + 1) */ ENDF, }; /* * bci_strong_blue_round * * Round a blue ref value and adjust its corresponding shoot value. * * This is the equivalent to the following code: * * delta = dist * if dist < 0: * delta = -delta * * if delta < 36: * delta = 0 * else: * delta = 64 * * if dist < 0: * delta = -delta * * It doesn't have corresponding code in talatin.c; however, some tests * have shown that the `smooth' code works just fine for this case also. * * in: ref_idx * * sal: sal_i (number of blue zones) * * out: ref_idx+1 * * uses: bci_round */ static const unsigned char FPGM(bci_strong_blue_round) [] = { PUSHB_1, bci_strong_blue_round, FDEF, DUP, DUP, RCVT, /* s: ref_idx ref_idx ref */ DUP, PUSHB_1, bci_round, CALL, SWAP, /* s: ref_idx ref_idx round(ref) ref */ PUSHB_1, sal_i, RS, PUSHB_1, 4, CINDEX, ADD, /* s: ref_idx ref_idx round(ref) ref shoot_idx */ DUP, RCVT, /* s: ref_idx ref_idx round(ref) ref shoot_idx shoot */ ROLL, /* s: ref_idx ref_idx round(ref) shoot_idx shoot ref */ SWAP, SUB, /* s: ref_idx ref_idx round(ref) shoot_idx dist */ DUP, ABS, /* s: ref_idx ref_idx round(ref) shoot_idx dist delta */ PUSHB_1, 36, LT, /* delta < 36 */ IF, PUSHB_1, 0, /* delta = 0 (set overshoot to zero if < 0.56 pixel units) */ ELSE, PUSHB_1, 64, /* delta = 64 (one pixel unit) */ EIF, SWAP, /* s: ref_idx ref_idx round(ref) shoot_idx delta dist */ PUSHB_1, 0, LT, /* dist < 0 */ IF, NEG, /* delta = -delta */ EIF, PUSHB_1, 3, CINDEX, SWAP, SUB, /* s: ref_idx ref_idx round(ref) shoot_idx (round(ref) - delta) */ WCVTP, WCVTP, PUSHB_1, 1, ADD, /* s: (ref_idx + 1) */ ENDF, }; /* * bci_blue_round_range * * Round a range of blue zones (both reference and shoot values). * * This function gets used in the `prep' table. * * in: num_blue_zones * blue_ref_idx * * sal: sal_i (holds a copy of `num_blue_zones' for blue rounding function) * * uses: bci_smooth_blue_round * bci_strong_blue_round */ static const unsigned char FPGM(bci_blue_round_range) [] = { PUSHB_1, bci_blue_round_range, FDEF, DUP, PUSHB_1, sal_i, SWAP, WS, /* select blue rounding function based on flag in CVT; */ /* for value >0 we use strong mode, else smooth mode */ PUSHB_4, bci_strong_blue_round, bci_smooth_blue_round, 0, cvtl_stem_width_mode, RCVT, LT, IF, POP, ELSE, SWAP, POP, EIF, LOOPCALL, /* clean up stack */ POP, ENDF, }; /* * bci_decrement_component_counter * * An auxiliary function for composite glyphs. * * CVT: cvtl_is_subglyph */ static const unsigned char FPGM(bci_decrement_component_counter) [] = { PUSHB_1, bci_decrement_component_counter, FDEF, /* decrement `cvtl_is_subglyph' counter */ PUSHB_2, cvtl_is_subglyph, cvtl_is_subglyph, RCVT, PUSHB_1, 100, SUB, WCVTP, ENDF, }; /* * bci_get_point_extrema * * An auxiliary function for `bci_create_segment'. * * in: point-1 * * out: point * * sal: sal_point_min * sal_point_max */ static const unsigned char FPGM(bci_get_point_extrema) [] = { PUSHB_1, bci_get_point_extrema, FDEF, PUSHB_1, 1, ADD, /* s: point */ DUP, DUP, /* check whether `point' is a new minimum */ PUSHB_1, sal_point_min, RS, /* s: point point point point_min */ MD_orig, /* if distance is negative, we have a new minimum */ PUSHB_1, 0, LT, IF, /* s: point point */ DUP, PUSHB_1, sal_point_min, SWAP, WS, EIF, /* check whether `point' is a new maximum */ PUSHB_1, sal_point_max, RS, /* s: point point point_max */ MD_orig, /* if distance is positive, we have a new maximum */ PUSHB_1, 0, GT, IF, /* s: point */ DUP, PUSHB_1, sal_point_max, SWAP, WS, EIF, /* s: point */ ENDF, }; /* * bci_nibbles * * Pop a byte with two delta arguments in its nibbles and push the * expanded arguments separately as two bytes. * * in: 16 * (end - start) + (start - base) * * out: start * end * * sal: sal_base (set to `end' at return) */ static const unsigned char FPGM(bci_nibbles) [] = { PUSHB_1, bci_nibbles, FDEF, DUP, PUSHB_1, /* cf. DIV_POS_BY_2 macro */ 16, DIV, FLOOR, PUSHB_1, 1, MUL, /* s: in hnibble */ DUP, PUSHW_1, 0x04, /* 16*64 */ 0x00, MUL, /* s: in hnibble (hnibble * 16) */ ROLL, SWAP, SUB, /* s: hnibble lnibble */ PUSHB_1, sal_base, RS, ADD, /* s: hnibble start */ DUP, ROLL, ADD, /* s: start end */ DUP, PUSHB_1, sal_base, SWAP, WS, /* sal_base = end */ SWAP, ENDF, }; /* * bci_number_set_is_element * * Pop values from stack until it is empty. If one of them is equal to * the current PPEM value, set `cvtl_is_element' to 100 (and to 0 * otherwise). * * in: ppem_value_1 * ppem_value_2 * ... * * CVT: cvtl_is_element */ static const unsigned char FPGM(bci_number_set_is_element) [] = { PUSHB_1, bci_number_set_is_element, FDEF, /* start_loop: */ MPPEM, EQ, IF, PUSHB_2, cvtl_is_element, 100, WCVTP, EIF, DEPTH, PUSHB_1, 13, NEG, SWAP, JROT, /* goto start_loop if stack depth != 0 */ ENDF, }; /* * bci_number_set_is_element2 * * Pop value ranges from stack until it is empty. If one of them contains * the current PPEM value, set `cvtl_is_element' to 100 (and to 0 * otherwise). * * in: ppem_range_1_start * ppem_range_1_end * ppem_range_2_start * ppem_range_2_end * ... * * CVT: cvtl_is_element */ static const unsigned char FPGM(bci_number_set_is_element2) [] = { PUSHB_1, bci_number_set_is_element2, FDEF, /* start_loop: */ MPPEM, LTEQ, IF, MPPEM, GTEQ, IF, PUSHB_2, cvtl_is_element, 100, WCVTP, EIF, ELSE, POP, EIF, DEPTH, PUSHB_1, 19, NEG, SWAP, JROT, /* goto start_loop if stack depth != 0 */ ENDF, }; /* * bci_create_segment * * Store start and end point of a segment in the storage area, * then construct a point in the twilight zone to represent it. * * This function is used by `bci_create_segments'. * * in: start * end * [last (if wrap-around segment)] * [first (if wrap-around segment)] * * sal: sal_i (start of current segment) * sal_j (current twilight point) * sal_point_min * sal_point_max * sal_base * sal_num_packed_segments * sal_scale * * CVT: cvtl_temp * * uses: bci_get_point_extrema * bci_nibbles * * If `sal_num_packed_segments' is > 0, the start/end pair is stored as * delta values in nibbles (without a wrap-around segment). */ static const unsigned char FPGM(bci_create_segment) [] = { PUSHB_1, bci_create_segment, FDEF, PUSHB_2, 0, sal_num_packed_segments, RS, NEQ, IF, PUSHB_2, sal_num_packed_segments, sal_num_packed_segments, RS, PUSHB_1, 1, SUB, WS, /* sal_num_packed_segments = sal_num_packed_segments - 1 */ PUSHB_1, bci_nibbles, CALL, EIF, PUSHB_1, sal_i, RS, PUSHB_1, 2, CINDEX, WS, /* sal[sal_i] = start */ /* initialize inner loop(s) */ PUSHB_2, sal_point_min, 2, CINDEX, WS, /* sal_point_min = start */ PUSHB_2, sal_point_max, 2, CINDEX, WS, /* sal_point_max = start */ PUSHB_1, 1, SZPS, /* set zp0, zp1, and zp2 to normal zone 1 */ SWAP, DUP, PUSHB_1, 3, CINDEX, /* s: start end end start */ LT, /* start > end */ IF, /* we have a wrap-around segment with two more arguments */ /* to give the last and first point of the contour, respectively; */ /* our job is to store a segment `start'-`last', */ /* and to get extrema for the two segments */ /* `start'-`last' and `first'-`end' */ /* s: first last start end */ PUSHB_2, 1, sal_i, RS, ADD, PUSHB_1, 4, CINDEX, WS, /* sal[sal_i + 1] = last */ ROLL, ROLL, /* s: first end last start */ DUP, ROLL, SWAP, /* s: first end start last start */ SUB, /* s: first end start loop_count */ PUSHB_1, bci_get_point_extrema, LOOPCALL, /* clean up stack */ POP, SWAP, /* s: end first */ PUSHB_1, 1, SUB, DUP, ROLL, /* s: (first - 1) (first - 1) end */ SWAP, SUB, /* s: (first - 1) loop_count */ PUSHB_1, bci_get_point_extrema, LOOPCALL, /* clean up stack */ POP, ELSE, /* s: start end */ PUSHB_2, 1, sal_i, RS, ADD, PUSHB_1, 2, CINDEX, WS, /* sal[sal_i + 1] = end */ PUSHB_1, 2, CINDEX, SUB, /* s: start loop_count */ PUSHB_1, bci_get_point_extrema, LOOPCALL, /* clean up stack */ POP, EIF, /* the twilight point representing a segment */ /* is in the middle between the minimum and maximum */ PUSHB_1, sal_point_min, RS, GC_orig, PUSHB_1, sal_point_max, RS, GC_orig, ADD, DIV_BY_2, /* s: middle_pos */ DO_SCALE, /* middle_pos = middle_pos * scale */ /* write it to temporary CVT location */ PUSHB_2, cvtl_temp, 0, SZP0, /* set zp0 to twilight zone 0 */ SWAP, WCVTP, /* create twilight point with index `sal_j' */ PUSHB_1, sal_j, RS, PUSHB_1, cvtl_temp, MIAP_noround, PUSHB_3, sal_j, 1, sal_j, RS, ADD, /* twilight_point = twilight_point + 1 */ WS, ENDF, }; /* * bci_create_segments * * This is the top-level entry function. * * It pops point ranges from the stack to define segments, computes * twilight points to represent segments, and finally calls * `bci_hint_glyph' to handle the rest. * * The second argument (`data_offset') addresses three CVT arrays in * parallel: * * CVT(data_offset): * the current style's scaling value (stored in `sal_scale') * * data_offset + num_used_styles: * offset to the current style's vwidth index array (this value gets * stored in `sal_vwidth_data_offset') * * data_offset + 2*num_used_styles: * offset to the current style's vwidth size * * This addressing scheme ensures that (a) we only need a single argument, * and (b) this argument supports up to (256-cvtl_max_runtime) styles, * which should be sufficient for a long time. * * in: num_packed_segments * data_offset * num_segments (N) * segment_start_0 * segment_end_0 * [contour_last 0 (if wrap-around segment)] * [contour_first 0 (if wrap-around segment)] * segment_start_1 * segment_end_1 * [contour_last 0 (if wrap-around segment)] * [contour_first 0 (if wrap-around segment)] * ... * segment_start_(N-1) * segment_end_(N-1) * [contour_last (N-1) (if wrap-around segment)] * [contour_first (N-1) (if wrap-around segment)] * ... stuff for bci_hint_glyph ... * * sal: sal_i (start of current segment) * sal_j (current twilight point) * sal_num_packed_segments * sal_base (the base for delta values in nibbles) * sal_vwidth_data_offset * sal_scale * * CVT: cvtl_is_subglyph * * uses: bci_create_segment * bci_loop * bci_hint_glyph * * If `num_packed_segments' is set to p, the first p start/end pairs are * stored as delta values in nibbles, with the `start' delta in the lower * nibble (and there are no wrap-around segments). For example, if the * first three pairs are 1/3, 5/8, and 12/13, the topmost three bytes on the * stack are 0x21, 0x32, and 0x14. * */ static const unsigned char FPGM(bci_create_segments_a) [] = { PUSHB_1, bci_create_segments, FDEF, /* all our measurements are taken along the y axis */ SVTCA_y, /* only do something if we are not a subglyph */ PUSHB_2, 0, cvtl_is_subglyph, RCVT, EQ, IF, PUSHB_1, sal_num_packed_segments, SWAP, WS, DUP, RCVT, PUSHB_1, sal_scale, /* sal_scale = CVT(data_offset) */ SWAP, WS, PUSHB_1, sal_vwidth_data_offset, SWAP, PUSHB_1, }; /* %c, number of used styles */ static const unsigned char FPGM(bci_create_segments_b) [] = { ADD, WS, /* sal_vwidth_data_offset = data_offset + num_used_styles */ DUP, PUSHB_1, sal_stem_width_offset, SWAP, WS, /* sal_stem_width_offset = num_segments (more to come) */ DUP, ADD, PUSHB_1, 1, SUB, /* delta = (2*num_segments - 1) */ PUSHB_8, sal_segment_offset, sal_segment_offset, sal_j, 0, sal_base, 0, sal_num_stem_widths, 0, WS, /* sal_num_stem_widths = 0 */ WS, /* sal_base = 0 */ WS, /* sal_j = 0 (point offset) */ ROLL, ADD, /* s: ... sal_segment_offset (sal_segment_offset + delta) */ DUP, PUSHB_1, sal_stem_width_offset, RS, ADD, PUSHB_1, sal_stem_width_offset, SWAP, WS, /* sal_stem_width_offset += sal_segment_offset + delta */ PUSHB_2, bci_create_segment, bci_loop, CALL, PUSHB_1, bci_hint_glyph, CALL, }; /* used if we have delta exceptions */ static const unsigned char FPGM(bci_create_segments_c) [] = { PUSHB_1, 1, SZPS, }; static const unsigned char FPGM(bci_create_segments_d) [] = { ELSE, CLEAR, EIF, ENDF, }; /* * bci_create_segments_X * * Top-level routines for calling `bci_create_segments'. */ static const unsigned char FPGM(bci_create_segments_0) [] = { PUSHB_1, bci_create_segments_0, FDEF, PUSHB_2, 0, bci_create_segments, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_1) [] = { PUSHB_1, bci_create_segments_1, FDEF, PUSHB_2, 1, bci_create_segments, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_2) [] = { PUSHB_1, bci_create_segments_2, FDEF, PUSHB_2, 2, bci_create_segments, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_3) [] = { PUSHB_1, bci_create_segments_3, FDEF, PUSHB_2, 3, bci_create_segments, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_4) [] = { PUSHB_1, bci_create_segments_4, FDEF, PUSHB_2, 4, bci_create_segments, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_5) [] = { PUSHB_1, bci_create_segments_5, FDEF, PUSHB_2, 5, bci_create_segments, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_6) [] = { PUSHB_1, bci_create_segments_6, FDEF, PUSHB_2, 6, bci_create_segments, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_7) [] = { PUSHB_1, bci_create_segments_7, FDEF, PUSHB_2, 7, bci_create_segments, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_8) [] = { PUSHB_1, bci_create_segments_8, FDEF, PUSHB_2, 8, bci_create_segments, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_9) [] = { PUSHB_1, bci_create_segments_9, FDEF, PUSHB_2, 9, bci_create_segments, CALL, ENDF, }; /* * bci_deltapX * * Wrapper functions around DELTAP[123] that touch the affected points * before applying the delta. This is necessary for ClearType. * * While DELTAP[123] implicitly do a loop, we have to process the * arguments sequentially by calling `bci_deltaX' with LOOPCALL. * * in: point * arg */ static const unsigned char FPGM(bci_deltap1) [] = { PUSHB_1, bci_deltap1, FDEF, SWAP, DUP, /* s: point arg arg */ PUSHB_1, /* cf. DIV_POS_BY_2 macro */ 16, DIV, FLOOR, PUSHB_1, 1, MUL, /* s: point arg hnibble(arg) */ PUSHB_1, CONTROL_DELTA_PPEM_MIN, ADD, /* s: point arg ppem(arg) */ MPPEM, EQ, IF, SWAP, DUP, MDAP_noround, /* touch `point' */ PUSHB_1, 1, DELTAP1, /* process one `(point,arg)' pair */ ELSE, POP, POP, EIF, ENDF, }; static const unsigned char FPGM(bci_deltap2) [] = { PUSHB_1, bci_deltap2, FDEF, SWAP, DUP, /* s: point arg arg */ PUSHB_1, /* cf. DIV_POS_BY_2 macro */ 16, DIV, FLOOR, PUSHB_1, 1, MUL, /* s: point arg hnibble(arg) */ PUSHB_1, CONTROL_DELTA_PPEM_MIN + 16, ADD, /* s: point arg ppem(arg) */ MPPEM, EQ, IF, SWAP, DUP, MDAP_noround, /* touch `point' */ PUSHB_1, 1, DELTAP2, /* process one `(point,arg)' pair */ ELSE, POP, POP, EIF, ENDF, }; static const unsigned char FPGM(bci_deltap3) [] = { PUSHB_1, bci_deltap3, FDEF, SWAP, DUP, /* s: point arg arg */ PUSHB_1, /* cf. DIV_POS_BY_2 macro */ 16, DIV, FLOOR, PUSHB_1, 1, MUL, /* s: point arg hnibble(arg) */ PUSHB_1, CONTROL_DELTA_PPEM_MIN + 32, ADD, /* s: point arg ppem(arg) */ MPPEM, EQ, IF, SWAP, DUP, MDAP_noround, /* touch `point' */ PUSHB_1, 1, DELTAP3, /* process one `(point,arg)' pair */ ELSE, POP, POP, EIF, ENDF, }; /* * bci_create_segments_composite * * The same as `bci_create_segments'. * It also decrements the composite component counter. * * sal: sal_num_packed_segments * sal_segment_offset * sal_vwidth_data_offset * * CVT: cvtl_is_subglyph * * uses: bci_decrement_component_counter * bci_create_segment * bci_loop * bci_hint_glyph */ static const unsigned char FPGM(bci_create_segments_composite_a) [] = { PUSHB_1, bci_create_segments_composite, FDEF, /* all our measurements are taken along the y axis */ SVTCA_y, PUSHB_1, bci_decrement_component_counter, CALL, /* only do something if we are not a subglyph */ PUSHB_2, 0, cvtl_is_subglyph, RCVT, EQ, IF, PUSHB_1, sal_num_packed_segments, SWAP, WS, DUP, RCVT, PUSHB_1, sal_scale, /* sal_scale = CVT(data_offset) */ SWAP, WS, PUSHB_1, sal_vwidth_data_offset, SWAP, PUSHB_1, }; /* %c, number of used styles */ static const unsigned char FPGM(bci_create_segments_composite_b) [] = { ADD, WS, /* sal_vwidth_data_offset = data_offset + num_used_styles */ DUP, ADD, PUSHB_1, 1, SUB, /* delta = (2*num_segments - 1) */ PUSHB_6, sal_segment_offset, sal_segment_offset, sal_j, 0, sal_base, 0, WS, /* sal_base = 0 */ WS, /* sal_j = 0 (point offset) */ ROLL, ADD, /* s: ... sal_segment_offset (sal_segment_offset + delta) */ PUSHB_2, bci_create_segment, bci_loop, CALL, PUSHB_1, bci_hint_glyph, CALL, }; /* used if we have delta exceptions */ static const unsigned char FPGM(bci_create_segments_composite_c) [] = { PUSHB_1, 1, SZPS, }; static const unsigned char FPGM(bci_create_segments_composite_d) [] = { ELSE, CLEAR, EIF, ENDF, }; /* * bci_create_segments_composite_X * * Top-level routines for calling `bci_create_segments_composite'. */ static const unsigned char FPGM(bci_create_segments_composite_0) [] = { PUSHB_1, bci_create_segments_composite_0, FDEF, PUSHB_2, 0, bci_create_segments_composite, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_composite_1) [] = { PUSHB_1, bci_create_segments_composite_1, FDEF, PUSHB_2, 1, bci_create_segments_composite, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_composite_2) [] = { PUSHB_1, bci_create_segments_composite_2, FDEF, PUSHB_2, 2, bci_create_segments_composite, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_composite_3) [] = { PUSHB_1, bci_create_segments_composite_3, FDEF, PUSHB_2, 3, bci_create_segments_composite, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_composite_4) [] = { PUSHB_1, bci_create_segments_composite_4, FDEF, PUSHB_2, 4, bci_create_segments_composite, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_composite_5) [] = { PUSHB_1, bci_create_segments_composite_5, FDEF, PUSHB_2, 5, bci_create_segments_composite, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_composite_6) [] = { PUSHB_1, bci_create_segments_composite_6, FDEF, PUSHB_2, 6, bci_create_segments_composite, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_composite_7) [] = { PUSHB_1, bci_create_segments_composite_7, FDEF, PUSHB_2, 7, bci_create_segments_composite, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_composite_8) [] = { PUSHB_1, bci_create_segments_composite_8, FDEF, PUSHB_2, 8, bci_create_segments_composite, CALL, ENDF, }; static const unsigned char FPGM(bci_create_segments_composite_9) [] = { PUSHB_1, bci_create_segments_composite_9, FDEF, PUSHB_2, 9, bci_create_segments_composite, CALL, ENDF, }; /* * bci_align_point * * An auxiliary function for `bci_align_segment'. * * in: point * * out: point+1 */ static const unsigned char FPGM(bci_align_point) [] = { PUSHB_1, bci_align_point, FDEF, DUP, ALIGNRP, /* align point with rp0 */ PUSHB_1, 1, ADD, ENDF, }; /* * bci_align_segment * * Align all points in a segment to the twilight point in rp0. * zp0 and zp1 must be set to 0 (twilight) and 1 (normal), respectively. * * in: segment_index * * sal: sal_segment_offset * * uses: bci_align_point */ static const unsigned char FPGM(bci_align_segment) [] = { PUSHB_1, bci_align_segment, FDEF, /* we need the values of `sal_segment_offset + 2*segment_index' */ /* and `sal_segment_offset + 2*segment_index + 1' */ DUP, ADD, PUSHB_1, sal_segment_offset, ADD, DUP, RS, SWAP, PUSHB_1, 1, ADD, RS, /* s: first last */ PUSHB_1, 2, CINDEX, /* s: first last first */ SUB, PUSHB_1, 1, ADD, /* s: first loop_count */ PUSHB_1, bci_align_point, LOOPCALL, /* clean up stack */ POP, ENDF, }; /* * bci_align_segments * * Align segments to the twilight point in rp0. * zp0 and zp1 must be set to 0 (twilight) and 1 (normal), respectively. * * in: first_segment * loop_counter (N) * segment_1 * segment_2 * ... * segment_N * * uses: bci_align_segment */ static const unsigned char FPGM(bci_align_segments) [] = { PUSHB_1, bci_align_segments, FDEF, PUSHB_1, bci_align_segment, CALL, PUSHB_1, bci_align_segment, LOOPCALL, ENDF, }; /* * bci_scale_contour * * Scale a contour using two points giving the maximum and minimum * coordinates. * * It expects that no point on the contour is touched. * * in: min_point * max_point * * sal: sal_scale */ static const unsigned char FPGM(bci_scale_contour) [] = { PUSHB_1, bci_scale_contour, FDEF, DUP, DUP, GC_orig, DUP, DO_SCALE, /* min_pos_new = min_pos * scale */ SWAP, SUB, SHPIX, /* don't scale a single-point contour twice */ SWAP, DUP, ROLL, NEQ, IF, DUP, GC_orig, DUP, DO_SCALE, /* max_pos_new = max_pos * scale */ SWAP, SUB, SHPIX, ELSE, POP, EIF, ENDF, }; /* * bci_scale_glyph * * Scale a glyph using a list of points (two points per contour, giving * the maximum and mininum coordinates). * * It expects that no point in the glyph is touched. * * Note that the point numbers are sorted in ascending order; * `min_point_X' and `max_point_X' thus refer to the two extrema of a * contour without specifying which one is the minimum and maximum. * * in: num_contours (N) * min_point_1 * max_point_1 * min_point_2 * max_point_2 * ... * min_point_N * max_point_N * * CVT: cvtl_is_subglyph * cvtl_do_iup_y * * sal: sal_scale * * uses: bci_scale_contour */ static const unsigned char FPGM(bci_scale_glyph_a) [] = { PUSHB_1, bci_scale_glyph, FDEF, /* all our measurements are taken along the y axis */ SVTCA_y, /* only do something if we are not a subglyph */ PUSHB_2, 0, cvtl_is_subglyph, RCVT, EQ, IF, /* use fallback scaling value */ PUSHB_2, sal_scale, }; /* %c, fallback scaling index */ static const unsigned char FPGM(bci_scale_glyph_b) [] = { RCVT, WS, PUSHB_1, 1, SZPS, /* set zp0, zp1, and zp2 to normal zone 1 */ PUSHB_1, bci_scale_contour, LOOPCALL, PUSHB_2, cvtl_do_iup_y, 1, SZP2, /* set zp2 to normal zone 1 */ RCVT, IF, IUP_y, EIF, ELSE, CLEAR, EIF, ENDF, }; /* * bci_scale_composite_glyph * * The same as `bci_scale_glyph'. * It also decrements the composite component counter. * * CVT: cvtl_is_subglyph * cvtl_do_iup_y * * sal: sal_scale * * uses: bci_decrement_component_counter * bci_scale_contour */ static const unsigned char FPGM(bci_scale_composite_glyph_a) [] = { PUSHB_1, bci_scale_composite_glyph, FDEF, /* all our measurements are taken along the y axis */ SVTCA_y, PUSHB_1, bci_decrement_component_counter, CALL, /* only do something if we are not a subglyph */ PUSHB_2, 0, cvtl_is_subglyph, RCVT, EQ, IF, /* use fallback scaling value */ PUSHB_2, sal_scale, }; /* %c, fallback scaling index */ static const unsigned char FPGM(bci_scale_composite_glyph_b) [] = { RCVT, WS, PUSHB_1, 1, SZPS, /* set zp0, zp1, and zp2 to normal zone 1 */ PUSHB_1, bci_scale_contour, LOOPCALL, PUSHB_2, cvtl_do_iup_y, 1, SZP2, /* set zp2 to normal zone 1 */ RCVT, IF, IUP_y, EIF, ELSE, CLEAR, EIF, ENDF, }; /* * bci_shift_contour * * Shift a contour by a given amount. * * It expects that rp1 (pointed to by zp0) is set up properly; zp2 must * point to the normal zone 1. * * in: contour * * out: contour+1 */ static const unsigned char FPGM(bci_shift_contour) [] = { PUSHB_1, bci_shift_contour, FDEF, DUP, SHC_rp1, /* shift `contour' by (rp1_pos - rp1_orig_pos) */ PUSHB_1, 1, ADD, ENDF, }; /* * bci_shift_subglyph * * Shift a subglyph. To be more specific, it corrects the already applied * subglyph offset (if any) from the `glyf' table which needs to be scaled * also. * * If this function is called, a point `x' in the subglyph has been scaled * already (during the hinting of the subglyph itself), and `offset' has * been applied also: * * x -> x * scale + offset (1) * * However, the offset should be applied first, then the scaling: * * x -> (x + offset) * scale (2) * * Our job is now to transform (1) to (2); a simple calculation shows that * we have to shift all points of the subglyph by * * offset * scale - offset = offset * (scale - 1) * * Note that `sal_scale' is equal to the above `scale - 1'. * * in: offset (in FUnits) * num_contours * first_contour * * CVT: cvtl_funits_to_pixels * * sal: sal_scale * * uses: bci_round * bci_shift_contour */ static const unsigned char FPGM(bci_shift_subglyph_a) [] = { PUSHB_1, bci_shift_subglyph, FDEF, /* all our measurements are taken along the y axis */ SVTCA_y, /* use fallback scaling value */ PUSHB_2, sal_scale, }; /* %c, fallback scaling index */ static const unsigned char FPGM(bci_shift_subglyph_b) [] = { RCVT, WS, PUSHB_1, cvtl_funits_to_pixels, RCVT, /* scaling factor FUnits -> pixels */ MUL, DIV_BY_1024, /* the autohinter always rounds offsets */ PUSHB_1, bci_round, CALL, /* offset = round(offset) */ PUSHB_1, sal_scale, RS, MUL, DIV_BY_1024, /* delta = offset * (scale - 1) */ /* and round again */ PUSHB_1, bci_round, CALL, /* offset = round(offset) */ PUSHB_1, 0, SZPS, /* set zp0, zp1, and zp2 to twilight zone 0 */ /* we create twilight point 0 as a reference point, */ /* setting the original position to zero (using `cvtl_temp') */ PUSHB_5, 0, 0, cvtl_temp, cvtl_temp, 0, WCVTP, MIAP_noround, /* rp0 and rp1 now point to twilight point 0 */ SWAP, /* s: first_contour num_contours 0 delta */ SHPIX, /* rp1_pos - rp1_orig_pos = delta */ PUSHB_2, bci_shift_contour, 1, SZP2, /* set zp2 to normal zone 1 */ LOOPCALL, /* clean up stack */ POP, }; /* used if we have delta exceptions */ static const unsigned char FPGM(bci_shift_subglyph_c) [] = { PUSHB_1, 1, SZPS, }; static const unsigned char FPGM(bci_shift_subglyph_d) [] = { ENDF, }; /* * bci_ip_outer_align_point * * Auxiliary function for `bci_action_ip_before' and * `bci_action_ip_after'. * * It expects rp0 to contain the edge for alignment, zp0 set to twilight * zone, and both zp1 and zp2 set to normal zone. * * in: point * * sal: sal_i (edge_orig_pos) * sal_scale */ static const unsigned char FPGM(bci_ip_outer_align_point) [] = { PUSHB_1, bci_ip_outer_align_point, FDEF, DUP, ALIGNRP, /* align `point' with `edge' */ DUP, GC_orig, DO_SCALE, /* point_orig_pos = point_orig_pos * scale */ PUSHB_1, sal_i, RS, SUB, /* s: point (point_orig_pos - edge_orig_pos) */ SHPIX, ENDF, }; /* * bci_ip_on_align_points * * Auxiliary function for `bci_action_ip_on'. * * in: edge (in twilight zone) * loop_counter (N) * point_1 * point_2 * ... * point_N */ static const unsigned char FPGM(bci_ip_on_align_points) [] = { PUSHB_1, bci_ip_on_align_points, FDEF, MDAP_noround, /* set rp0 and rp1 to `edge' */ SLOOP, ALIGNRP, ENDF, }; /* * bci_ip_between_align_point * * Auxiliary function for `bci_ip_between_align_points'. * * It expects rp0 to contain the edge for alignment, zp0 set to twilight * zone, and both zp1 and zp2 set to normal zone. * * in: point * * sal: sal_i (edge_orig_pos) * sal_j (stretch_factor) * sal_scale */ static const unsigned char FPGM(bci_ip_between_align_point) [] = { PUSHB_1, bci_ip_between_align_point, FDEF, DUP, ALIGNRP, /* align `point' with `edge' */ DUP, GC_orig, DO_SCALE, /* point_orig_pos = point_orig_pos * scale */ PUSHB_1, sal_i, RS, SUB, /* s: point (point_orig_pos - edge_orig_pos) */ PUSHB_1, sal_j, RS, MUL, /* s: point delta */ SHPIX, ENDF, }; /* * bci_ip_between_align_points * * Auxiliary function for `bci_action_ip_between'. * * in: after_edge (in twilight zone) * before_edge (in twilight zone) * loop_counter (N) * point_1 * point_2 * ... * point_N * * sal: sal_i (before_orig_pos) * sal_j (stretch_factor) * * uses: bci_ip_between_align_point */ static const unsigned char FPGM(bci_ip_between_align_points) [] = { PUSHB_1, bci_ip_between_align_points, FDEF, PUSHB_2, 2, 0, SZPS, /* set zp0, zp1, and zp2 to twilight zone 0 */ CINDEX, DUP, /* s: ... before after before before */ MDAP_noround, /* set rp0 and rp1 to `before' */ DUP, GC_orig, /* s: ... before after before before_orig_pos */ PUSHB_1, sal_i, SWAP, WS, /* sal_i = before_orig_pos */ PUSHB_1, 2, CINDEX, /* s: ... before after before after */ MD_cur, /* a = after_pos - before_pos */ ROLL, ROLL, MD_orig_ZP2_0, /* b = after_orig_pos - before_orig_pos */ DUP, IF, /* b != 0 ? */ DIV, /* s: a/b */ ELSE, POP, /* avoid division by zero */ EIF, PUSHB_1, sal_j, SWAP, WS, /* sal_j = stretch_factor */ PUSHB_3, bci_ip_between_align_point, 1, 1, SZP2, /* set zp2 to normal zone 1 */ SZP1, /* set zp1 to normal zone 1 */ LOOPCALL, ENDF, }; /* * bci_action_ip_before * * Handle `ip_before' data to align points located before the first edge. * * in: first_edge (in twilight zone) * loop_counter (N) * point_1 * point_2 * ... * point_N * * sal: sal_i (first_edge_orig_pos) * * uses: bci_ip_outer_align_point */ static const unsigned char FPGM(bci_action_ip_before) [] = { PUSHB_1, bci_action_ip_before, FDEF, PUSHB_1, 0, SZP2, /* set zp2 to twilight zone 0 */ DUP, GC_orig, PUSHB_1, sal_i, SWAP, WS, /* sal_i = first_edge_orig_pos */ PUSHB_3, 0, 1, 1, SZP2, /* set zp2 to normal zone 1 */ SZP1, /* set zp1 to normal zone 1 */ SZP0, /* set zp0 to twilight zone 0 */ MDAP_noround, /* set rp0 and rp1 to `first_edge' */ PUSHB_1, bci_ip_outer_align_point, LOOPCALL, ENDF, }; /* * bci_action_ip_after * * Handle `ip_after' data to align points located after the last edge. * * in: last_edge (in twilight zone) * loop_counter (N) * point_1 * point_2 * ... * point_N * * sal: sal_i (last_edge_orig_pos) * * uses: bci_ip_outer_align_point */ static const unsigned char FPGM(bci_action_ip_after) [] = { PUSHB_1, bci_action_ip_after, FDEF, PUSHB_1, 0, SZP2, /* set zp2 to twilight zone 0 */ DUP, GC_orig, PUSHB_1, sal_i, SWAP, WS, /* sal_i = last_edge_orig_pos */ PUSHB_3, 0, 1, 1, SZP2, /* set zp2 to normal zone 1 */ SZP1, /* set zp1 to normal zone 1 */ SZP0, /* set zp0 to twilight zone 0 */ MDAP_noround, /* set rp0 and rp1 to `last_edge' */ PUSHB_1, bci_ip_outer_align_point, LOOPCALL, ENDF, }; /* * bci_action_ip_on * * Handle `ip_on' data to align points located on an edge coordinate (but * not part of an edge). * * in: loop_counter (M) * edge_1 (in twilight zone) * loop_counter (N_1) * point_1 * point_2 * ... * point_N_1 * edge_2 (in twilight zone) * loop_counter (N_2) * point_1 * point_2 * ... * point_N_2 * ... * edge_M (in twilight zone) * loop_counter (N_M) * point_1 * point_2 * ... * point_N_M * * uses: bci_ip_on_align_points */ static const unsigned char FPGM(bci_action_ip_on) [] = { PUSHB_1, bci_action_ip_on, FDEF, PUSHB_2, 0, 1, SZP1, /* set zp1 to normal zone 1 */ SZP0, /* set zp0 to twilight zone 0 */ PUSHB_1, bci_ip_on_align_points, LOOPCALL, ENDF, }; /* * bci_action_ip_between * * Handle `ip_between' data to align points located between two edges. * * in: loop_counter (M) * before_edge_1 (in twilight zone) * after_edge_1 (in twilight zone) * loop_counter (N_1) * point_1 * point_2 * ... * point_N_1 * before_edge_2 (in twilight zone) * after_edge_2 (in twilight zone) * loop_counter (N_2) * point_1 * point_2 * ... * point_N_2 * ... * before_edge_M (in twilight zone) * after_edge_M (in twilight zone) * loop_counter (N_M) * point_1 * point_2 * ... * point_N_M * * uses: bci_ip_between_align_points */ static const unsigned char FPGM(bci_action_ip_between) [] = { PUSHB_1, bci_action_ip_between, FDEF, PUSHB_1, bci_ip_between_align_points, LOOPCALL, ENDF, }; /* * bci_adjust_common * * Common code for bci_action_adjust routines. * * in: top_to_bottom_hinting * edge2_is_serif * edge_is_round * edge * edge2 * * out: edge (adjusted) * * sal: sal_top_to_bottom_hinting * sal_base_delta * * uses: func[sal_stem_width_function] */ static const unsigned char FPGM(bci_adjust_common) [] = { PUSHB_1, bci_adjust_common, FDEF, PUSHB_1, 0, SZPS, /* set zp0, zp1, and zp2 to twilight zone 0 */ PUSHB_1, sal_top_to_bottom_hinting, SWAP, WS, PUSHB_1, 4, CINDEX, /* s: [...] edge2 edge is_round is_serif edge2 */ PUSHB_1, 4, CINDEX, /* s: [...] edge2 edge is_round is_serif edge2 edge */ MD_orig_ZP2_0, /* s: [...] edge2 edge is_round is_serif org_len */ PUSHB_2, sal_base_delta, /* no base_delta needed here */ 0, WS, PUSHB_1, sal_stem_width_function, RS, CALL, NEG, /* s: [...] edge2 edge -cur_len */ ROLL, /* s: [...] edge -cur_len edge2 */ MDAP_noround, /* set rp0 and rp1 to `edge2' */ SWAP, DUP, DUP, /* s: [...] -cur_len edge edge edge */ ALIGNRP, /* align `edge' with `edge2' */ ROLL, SHPIX, /* shift `edge' by -cur_len */ ENDF, }; /* * bci_adjust_bound * * Handle the ADJUST + BOUND actions to align an edge of a stem if the * other edge of the stem has already been moved, then moving it again if * necessary to stay bound. * * in: top_to_bottom_hinting * edge2_is_serif * edge_is_round * edge_point (in twilight zone) * edge2_point (in twilight zone) * edge[-1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * sal: sal_top_to_bottom_hinting * * uses: bci_adjust_common * bci_align_segments */ static const unsigned char FPGM(bci_adjust_bound) [] = { PUSHB_1, bci_adjust_bound, FDEF, PUSHB_1, bci_adjust_common, CALL, SWAP, /* s: edge edge[-1] */ DUP, MDAP_noround, /* set rp0 and rp1 to `edge[-1]' */ GC_cur, PUSHB_1, 2, CINDEX, GC_cur, /* s: edge edge[-1]_pos edge_pos */ PUSHB_1, sal_top_to_bottom_hinting, RS, IF, LT, /* edge_pos > edge[-1]_pos */ ELSE, GT, /* edge_pos < edge[-1]_pos */ EIF, IF, DUP, ALIGNRP, /* align `edge' to `edge[-1]' */ EIF, MDAP_noround, /* set rp0 and rp1 to `edge' */ PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, ENDF, }; /* * bci_action_adjust_bound * bci_action_adjust_bound_serif * bci_action_adjust_bound_round * bci_action_adjust_bound_round_serif * bci_action_adjust_down_bound * bci_action_adjust_down_bound_serif * bci_action_adjust_down_bound_round * bci_action_adjust_down_bound_round_serif * * Higher-level routines for calling `bci_adjust_bound'. */ static const unsigned char FPGM(bci_action_adjust_bound) [] = { PUSHB_1, bci_action_adjust_bound, FDEF, PUSHB_4, 0, 0, 0, bci_adjust_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_adjust_bound_serif) [] = { PUSHB_1, bci_action_adjust_bound_serif, FDEF, PUSHB_4, 0, 1, 0, bci_adjust_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_adjust_bound_round) [] = { PUSHB_1, bci_action_adjust_bound_round, FDEF, PUSHB_4, 1, 0, 0, bci_adjust_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_adjust_bound_round_serif) [] = { PUSHB_1, bci_action_adjust_bound_round_serif, FDEF, PUSHB_4, 1, 1, 0, bci_adjust_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_adjust_down_bound) [] = { PUSHB_1, bci_action_adjust_down_bound, FDEF, PUSHB_4, 0, 0, 1, bci_adjust_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_adjust_down_bound_serif) [] = { PUSHB_1, bci_action_adjust_down_bound_serif, FDEF, PUSHB_4, 0, 1, 1, bci_adjust_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_adjust_down_bound_round) [] = { PUSHB_1, bci_action_adjust_down_bound_round, FDEF, PUSHB_4, 1, 0, 1, bci_adjust_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_adjust_down_bound_round_serif) [] = { PUSHB_1, bci_action_adjust_down_bound_round_serif, FDEF, PUSHB_4, 1, 1, 1, bci_adjust_bound, CALL, ENDF, }; /* * bci_adjust * * Handle the ADJUST action to align an edge of a stem if the other edge * of the stem has already been moved. * * in: edge2_is_serif * edge_is_round * edge_point (in twilight zone) * edge2_point (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_adjust_common * bci_align_segments */ static const unsigned char FPGM(bci_adjust) [] = { PUSHB_1, bci_adjust, FDEF, PUSHB_2, 0, bci_adjust_common, CALL, MDAP_noround, /* set rp0 and rp1 to `edge' */ PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, ENDF, }; /* * bci_action_adjust * bci_action_adjust_serif * bci_action_adjust_round * bci_action_adjust_round_serif * * Higher-level routines for calling `bci_adjust'. */ static const unsigned char FPGM(bci_action_adjust) [] = { PUSHB_1, bci_action_adjust, FDEF, PUSHB_3, 0, 0, bci_adjust, CALL, ENDF, }; static const unsigned char FPGM(bci_action_adjust_serif) [] = { PUSHB_1, bci_action_adjust_serif, FDEF, PUSHB_3, 0, 1, bci_adjust, CALL, ENDF, }; static const unsigned char FPGM(bci_action_adjust_round) [] = { PUSHB_1, bci_action_adjust_round, FDEF, PUSHB_3, 1, 0, bci_adjust, CALL, ENDF, }; static const unsigned char FPGM(bci_action_adjust_round_serif) [] = { PUSHB_1, bci_action_adjust_round_serif, FDEF, PUSHB_3, 1, 1, bci_adjust, CALL, ENDF, }; /* * bci_stem_common * * Common code for bci_action_stem routines. * * in: top_to_bottom_hinting * edge2_is_serif * edge_is_round * edge * edge2 * * out: edge * cur_len * edge2 * * sal: sal_anchor * sal_temp1 * sal_temp2 * sal_temp3 * sal_top_to_bottom_hinting * sal_base_delta * * uses: func[sal_stem_width_function] * bci_round */ #undef sal_u_off #define sal_u_off sal_temp1 #undef sal_d_off #define sal_d_off sal_temp2 #undef sal_org_len #define sal_org_len sal_temp3 #undef sal_edge2 #define sal_edge2 sal_temp3 static const unsigned char FPGM(bci_stem_common) [] = { PUSHB_1, bci_stem_common, FDEF, PUSHB_1, 0, SZPS, /* set zp0, zp1, and zp2 to twilight zone 0 */ PUSHB_1, sal_top_to_bottom_hinting, SWAP, WS, PUSHB_1, 4, CINDEX, PUSHB_1, 4, CINDEX, DUP, /* s: [...] edge2 edge is_round is_serif edge2 edge edge */ MDAP_noround, /* set rp0 and rp1 to `edge_point' (for ALIGNRP below) */ MD_orig_ZP2_0, /* s: [...] edge2 edge is_round is_serif org_len */ DUP, PUSHB_1, sal_org_len, SWAP, WS, PUSHB_2, sal_base_delta, /* no base_delta needed here */ 0, WS, PUSHB_1, sal_stem_width_function, RS, CALL, /* s: [...] edge2 edge cur_len */ DUP, PUSHB_1, 96, LT, /* cur_len < 96 */ IF, DUP, PUSHB_1, 64, LTEQ, /* cur_len <= 64 */ IF, PUSHB_4, sal_u_off, 32, sal_d_off, 32, ELSE, PUSHB_4, sal_u_off, 38, sal_d_off, 26, EIF, WS, WS, SWAP, /* s: [...] edge2 cur_len edge */ DUP, PUSHB_1, sal_anchor, RS, DUP, /* s: [...] edge2 cur_len edge edge anchor anchor */ ROLL, SWAP, MD_orig_ZP2_0, SWAP, GC_cur, ADD, /* s: [...] edge2 cur_len edge org_pos */ PUSHB_1, sal_org_len, RS, DIV_BY_2, ADD, /* s: [...] edge2 cur_len edge org_center */ DUP, PUSHB_1, bci_round, CALL, /* s: [...] edge2 cur_len edge org_center cur_pos1 */ DUP, ROLL, ROLL, SUB, /* s: ... cur_len edge cur_pos1 (org_center - cur_pos1) */ DUP, PUSHB_1, sal_u_off, RS, ADD, ABS, /* s: ... cur_len edge cur_pos1 (org_center - cur_pos1) delta1 */ SWAP, PUSHB_1, sal_d_off, RS, SUB, ABS, /* s: [...] edge2 cur_len edge cur_pos1 delta1 delta2 */ LT, /* delta1 < delta2 */ IF, PUSHB_1, sal_u_off, RS, SUB, /* cur_pos1 = cur_pos1 - u_off */ ELSE, PUSHB_1, sal_d_off, RS, ADD, /* cur_pos1 = cur_pos1 + d_off */ EIF, /* s: [...] edge2 cur_len edge cur_pos1 */ PUSHB_1, 3, CINDEX, DIV_BY_2, SUB, /* arg = cur_pos1 - cur_len/2 */ SWAP, /* s: [...] edge2 cur_len arg edge */ DUP, DUP, PUSHB_1, 4, MINDEX, SWAP, /* s: [...] edge2 cur_len edge edge arg edge */ GC_cur, SUB, SHPIX, /* edge = cur_pos1 - cur_len/2 */ ELSE, SWAP, /* s: [...] edge2 cur_len edge */ PUSHB_1, sal_anchor, RS, GC_cur, /* s: [...] edge2 cur_len edge anchor_pos */ PUSHB_1, 2, CINDEX, PUSHB_1, sal_anchor, RS, MD_orig_ZP2_0, ADD, /* s: [...] edge2 cur_len edge org_pos */ DUP, PUSHB_1, sal_org_len, RS, DIV_BY_2, ADD, /* s: [...] edge2 cur_len edge org_pos org_center */ SWAP, DUP, PUSHB_1, bci_round, CALL, /* cur_pos1 = ROUND(org_pos) */ SWAP, PUSHB_1, sal_org_len, RS, ADD, PUSHB_1, bci_round, CALL, PUSHB_1, 5, CINDEX, SUB, /* s: [...] edge2 cur_len edge org_center cur_pos1 cur_pos2 */ PUSHB_1, 5, CINDEX, DIV_BY_2, PUSHB_1, 4, MINDEX, SUB, /* s: ... cur_len edge cur_pos1 cur_pos2 (cur_len/2 - org_center) */ DUP, PUSHB_1, 4, CINDEX, ADD, ABS, /* delta1 = |cur_pos1 + cur_len / 2 - org_center| */ SWAP, PUSHB_1, 3, CINDEX, ADD, ABS, /* s: ... edge2 cur_len edge cur_pos1 cur_pos2 delta1 delta2 */ LT, /* delta1 < delta2 */ IF, POP, /* arg = cur_pos1 */ ELSE, SWAP, POP, /* arg = cur_pos2 */ EIF, /* s: [...] edge2 cur_len edge arg */ SWAP, DUP, DUP, PUSHB_1, 4, MINDEX, SWAP, /* s: [...] edge2 cur_len edge edge arg edge */ GC_cur, SUB, SHPIX, /* edge = arg */ EIF, /* s: [...] edge2 cur_len edge */ ENDF, }; /* * bci_stem_bound * * Handle the STEM action to align two edges of a stem, then moving one * edge again if necessary to stay bound. * * The code after computing `cur_len' to shift `edge' and `edge2' * is equivalent to the snippet below (part of `ta_latin_hint_edges'): * * if cur_len < 96: * if cur_len < = 64: * u_off = 32 * d_off = 32 * else: * u_off = 38 * d_off = 26 * * org_pos = anchor + (edge_orig - anchor_orig) * org_center = org_pos + org_len / 2 * * cur_pos1 = ROUND(org_center) * delta1 = |org_center - (cur_pos1 - u_off)| * delta2 = |org_center - (cur_pos1 + d_off)| * if (delta1 < delta2): * cur_pos1 = cur_pos1 - u_off * else: * cur_pos1 = cur_pos1 + d_off * * edge = cur_pos1 - cur_len / 2 * * else: * org_pos = anchor + (edge_orig - anchor_orig) * org_center = org_pos + org_len / 2 * * cur_pos1 = ROUND(org_pos) * delta1 = |cur_pos1 + cur_len / 2 - org_center| * cur_pos2 = ROUND(org_pos + org_len) - cur_len * delta2 = |cur_pos2 + cur_len / 2 - org_center| * * if (delta1 < delta2): * edge = cur_pos1 * else: * edge = cur_pos2 * * edge2 = edge + cur_len * * in: top_to_bottom_hinting * edge2_is_serif * edge_is_round * edge_point (in twilight zone) * edge2_point (in twilight zone) * edge[-1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * ... stuff for bci_align_segments (edge2)... * * sal: sal_anchor * sal_temp1 * sal_temp2 * sal_temp3 * sal_top_to_bottom_hinting * * uses: bci_stem_common * bci_align_segments */ static const unsigned char FPGM(bci_stem_bound) [] = { PUSHB_1, bci_stem_bound, FDEF, PUSHB_1, bci_stem_common, CALL, ROLL, /* s: edge[-1] cur_len edge edge2 */ DUP, DUP, ALIGNRP, /* align `edge2' with rp0 (still `edge') */ PUSHB_1, sal_edge2, SWAP, WS, /* s: edge[-1] cur_len edge edge2 */ ROLL, SHPIX, /* edge2 = edge + cur_len */ SWAP, /* s: edge edge[-1] */ DUP, MDAP_noround, /* set rp0 and rp1 to `edge[-1]' */ GC_cur, PUSHB_1, 2, CINDEX, GC_cur, /* s: edge edge[-1]_pos edge_pos */ PUSHB_1, sal_top_to_bottom_hinting, RS, IF, LT, /* edge_pos > edge[-1]_pos */ ELSE, GT, /* edge_pos < edge[-1]_pos */ EIF, IF, DUP, ALIGNRP, /* align `edge' to `edge[-1]' */ EIF, MDAP_noround, /* set rp0 and rp1 to `edge' */ PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, PUSHB_1, sal_edge2, RS, MDAP_noround, /* set rp0 and rp1 to `edge2' */ PUSHB_1, bci_align_segments, CALL, ENDF, }; /* * bci_action_stem_bound * bci_action_stem_bound_serif * bci_action_stem_bound_round * bci_action_stem_bound_round_serif * bci_action_stem_down_bound * bci_action_stem_down_bound_serif * bci_action_stem_down_bound_round * bci_action_stem_down_bound_round_serif * * Higher-level routines for calling `bci_stem_bound'. */ static const unsigned char FPGM(bci_action_stem_bound) [] = { PUSHB_1, bci_action_stem_bound, FDEF, PUSHB_4, 0, 0, 0, bci_stem_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_stem_bound_serif) [] = { PUSHB_1, bci_action_stem_bound_serif, FDEF, PUSHB_4, 0, 1, 0, bci_stem_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_stem_bound_round) [] = { PUSHB_1, bci_action_stem_bound_round, FDEF, PUSHB_4, 1, 0, 0, bci_stem_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_stem_bound_round_serif) [] = { PUSHB_1, bci_action_stem_bound_round_serif, FDEF, PUSHB_4, 1, 1, 0, bci_stem_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_stem_down_bound) [] = { PUSHB_1, bci_action_stem_down_bound, FDEF, PUSHB_4, 0, 0, 1, bci_stem_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_stem_down_bound_serif) [] = { PUSHB_1, bci_action_stem_down_bound_serif, FDEF, PUSHB_4, 0, 1, 1, bci_stem_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_stem_down_bound_round) [] = { PUSHB_1, bci_action_stem_down_bound_round, FDEF, PUSHB_4, 1, 0, 1, bci_stem_bound, CALL, ENDF, }; static const unsigned char FPGM(bci_action_stem_down_bound_round_serif) [] = { PUSHB_1, bci_action_stem_down_bound_round_serif, FDEF, PUSHB_4, 1, 1, 1, bci_stem_bound, CALL, ENDF, }; /* * bci_stem * * Handle the STEM action to align two edges of a stem. * * See `bci_stem_bound' for more details. * * in: edge2_is_serif * edge_is_round * edge_point (in twilight zone) * edge2_point (in twilight zone) * ... stuff for bci_align_segments (edge) ... * ... stuff for bci_align_segments (edge2)... * * sal: sal_anchor * sal_temp1 * sal_temp2 * sal_temp3 * * uses: bci_stem_common * bci_align_segments */ static const unsigned char FPGM(bci_stem) [] = { PUSHB_1, bci_stem, FDEF, PUSHB_2, 0, bci_stem_common, CALL, POP, SWAP, /* s: cur_len edge2 */ DUP, DUP, ALIGNRP, /* align `edge2' with rp0 (still `edge') */ PUSHB_1, sal_edge2, SWAP, WS, /* s: cur_len edge2 */ SWAP, SHPIX, /* edge2 = edge + cur_len */ PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, PUSHB_1, sal_edge2, RS, MDAP_noround, /* set rp0 and rp1 to `edge2' */ PUSHB_1, bci_align_segments, CALL, ENDF, }; /* * bci_action_stem * bci_action_stem_serif * bci_action_stem_round * bci_action_stem_round_serif * * Higher-level routines for calling `bci_stem'. */ static const unsigned char FPGM(bci_action_stem) [] = { PUSHB_1, bci_action_stem, FDEF, PUSHB_3, 0, 0, bci_stem, CALL, ENDF, }; static const unsigned char FPGM(bci_action_stem_serif) [] = { PUSHB_1, bci_action_stem_serif, FDEF, PUSHB_3, 0, 1, bci_stem, CALL, ENDF, }; static const unsigned char FPGM(bci_action_stem_round) [] = { PUSHB_1, bci_action_stem_round, FDEF, PUSHB_3, 1, 0, bci_stem, CALL, ENDF, }; static const unsigned char FPGM(bci_action_stem_round_serif) [] = { PUSHB_1, bci_action_stem_round_serif, FDEF, PUSHB_3, 1, 1, bci_stem, CALL, ENDF, }; /* * bci_link * * Handle the LINK action to link an edge to another one. * * in: stem_is_serif * base_is_round * base_point (in twilight zone) * stem_point (in twilight zone) * ... stuff for bci_align_segments (base) ... * * sal: sal_base_delta * * uses: func[sal_stem_width_function] * bci_align_segments */ static const unsigned char FPGM(bci_link) [] = { PUSHB_1, bci_link, FDEF, PUSHB_1, 0, SZPS, /* set zp0, zp1, and zp2 to twilight zone 0 */ PUSHB_1, 4, CINDEX, PUSHB_1, 4, MINDEX, DUP, /* s: stem is_round is_serif stem base base */ DUP, DUP, GC_cur, SWAP, GC_orig, SUB, /* base_delta = base_point_pos - base_point_orig_pos */ PUSHB_1, sal_base_delta, SWAP, WS, /* sal_base_delta = base_delta */ MDAP_noround, /* set rp0 and rp1 to `base_point' (for ALIGNRP below) */ MD_orig_ZP2_0, /* s: stem is_round is_serif dist_orig */ PUSHB_1, sal_stem_width_function, RS, CALL, /* s: stem new_dist */ SWAP, DUP, ALIGNRP, /* align `stem_point' with `base_point' */ DUP, MDAP_noround, /* set rp0 and rp1 to `stem_point' */ SWAP, SHPIX, /* stem_point = base_point + new_dist */ PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, ENDF, }; /* * bci_action_link * bci_action_link_serif * bci_action_link_round * bci_action_link_round_serif * * Higher-level routines for calling `bci_link'. */ static const unsigned char FPGM(bci_action_link) [] = { PUSHB_1, bci_action_link, FDEF, PUSHB_3, 0, 0, bci_link, CALL, ENDF, }; static const unsigned char FPGM(bci_action_link_serif) [] = { PUSHB_1, bci_action_link_serif, FDEF, PUSHB_3, 0, 1, bci_link, CALL, ENDF, }; static const unsigned char FPGM(bci_action_link_round) [] = { PUSHB_1, bci_action_link_round, FDEF, PUSHB_3, 1, 0, bci_link, CALL, ENDF, }; static const unsigned char FPGM(bci_action_link_round_serif) [] = { PUSHB_1, bci_action_link_round_serif, FDEF, PUSHB_3, 1, 1, bci_link, CALL, ENDF, }; /* * bci_anchor * * Handle the ANCHOR action to align two edges * and to set the edge anchor. * * The code after computing `cur_len' to shift `edge' and `edge2' * is equivalent to the snippet below (part of `ta_latin_hint_edges'): * * if cur_len < 96: * if cur_len < = 64: * u_off = 32 * d_off = 32 * else: * u_off = 38 * d_off = 26 * * org_center = edge_orig + org_len / 2 * cur_pos1 = ROUND(org_center) * * error1 = |org_center - (cur_pos1 - u_off)| * error2 = |org_center - (cur_pos1 + d_off)| * if (error1 < error2): * cur_pos1 = cur_pos1 - u_off * else: * cur_pos1 = cur_pos1 + d_off * * edge = cur_pos1 - cur_len / 2 * edge2 = edge + cur_len * * else: * edge = ROUND(edge_orig) * * in: edge2_is_serif * edge_is_round * edge_point (in twilight zone) * edge2_point (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * sal: sal_anchor * sal_temp1 * sal_temp2 * sal_temp3 * sal_base_delta * * uses: func[sal_stem_width_function] * bci_round * bci_align_segments */ #undef sal_u_off #define sal_u_off sal_temp1 #undef sal_d_off #define sal_d_off sal_temp2 #undef sal_org_len #define sal_org_len sal_temp3 static const unsigned char FPGM(bci_anchor) [] = { PUSHB_1, bci_anchor, FDEF, /* store anchor point number in `sal_anchor' */ PUSHB_2, sal_anchor, 4, CINDEX, WS, /* sal_anchor = edge_point */ PUSHB_1, 0, SZPS, /* set zp0, zp1, and zp2 to twilight zone 0 */ PUSHB_1, 4, CINDEX, PUSHB_1, 4, CINDEX, DUP, /* s: edge2 edge is_round is_serif edge2 edge edge */ MDAP_noround, /* set rp0 and rp1 to `edge_point' (for ALIGNRP below) */ MD_orig_ZP2_0, /* s: edge2 edge is_round is_serif org_len */ DUP, PUSHB_1, sal_org_len, SWAP, WS, PUSHB_2, sal_base_delta, /* no base_delta needed here */ 0, WS, PUSHB_1, sal_stem_width_function, RS, CALL, /* s: edge2 edge cur_len */ DUP, PUSHB_1, 96, LT, /* cur_len < 96 */ IF, DUP, PUSHB_1, 64, LTEQ, /* cur_len <= 64 */ IF, PUSHB_4, sal_u_off, 32, sal_d_off, 32, ELSE, PUSHB_4, sal_u_off, 38, sal_d_off, 26, EIF, WS, WS, SWAP, /* s: edge2 cur_len edge */ DUP, /* s: edge2 cur_len edge edge */ GC_orig, PUSHB_1, sal_org_len, RS, DIV_BY_2, ADD, /* s: edge2 cur_len edge org_center */ DUP, PUSHB_1, bci_round, CALL, /* s: edge2 cur_len edge org_center cur_pos1 */ DUP, ROLL, ROLL, SUB, /* s: edge2 cur_len edge cur_pos1 (org_center - cur_pos1) */ DUP, PUSHB_1, sal_u_off, RS, ADD, ABS, /* s: edge2 cur_len edge cur_pos1 (org_center - cur_pos1) error1 */ SWAP, PUSHB_1, sal_d_off, RS, SUB, ABS, /* s: edge2 cur_len edge cur_pos1 error1 error2 */ LT, /* error1 < error2 */ IF, PUSHB_1, sal_u_off, RS, SUB, /* cur_pos1 = cur_pos1 - u_off */ ELSE, PUSHB_1, sal_d_off, RS, ADD, /* cur_pos1 = cur_pos1 + d_off */ EIF, /* s: edge2 cur_len edge cur_pos1 */ PUSHB_1, 3, CINDEX, DIV_BY_2, SUB, /* s: edge2 cur_len edge (cur_pos1 - cur_len/2) */ PUSHB_1, 2, CINDEX, /* s: edge2 cur_len edge (cur_pos1 - cur_len/2) edge */ GC_cur, SUB, SHPIX, /* edge = cur_pos1 - cur_len/2 */ SWAP, /* s: cur_len edge2 */ DUP, ALIGNRP, /* align `edge2' with rp0 (still `edge') */ SWAP, SHPIX, /* edge2 = edge1 + cur_len */ ELSE, POP, /* s: edge2 edge */ DUP, DUP, GC_cur, SWAP, GC_orig, PUSHB_1, bci_round, CALL, /* s: edge2 edge edge_pos round(edge_orig_pos) */ SWAP, SUB, SHPIX, /* edge = round(edge_orig) */ /* clean up stack */ POP, EIF, PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, ENDF, }; /* * bci_action_anchor * bci_action_anchor_serif * bci_action_anchor_round * bci_action_anchor_round_serif * * Higher-level routines for calling `bci_anchor'. */ static const unsigned char FPGM(bci_action_anchor) [] = { PUSHB_1, bci_action_anchor, FDEF, PUSHB_3, 0, 0, bci_anchor, CALL, ENDF, }; static const unsigned char FPGM(bci_action_anchor_serif) [] = { PUSHB_1, bci_action_anchor_serif, FDEF, PUSHB_3, 0, 1, bci_anchor, CALL, ENDF, }; static const unsigned char FPGM(bci_action_anchor_round) [] = { PUSHB_1, bci_action_anchor_round, FDEF, PUSHB_3, 1, 0, bci_anchor, CALL, ENDF, }; static const unsigned char FPGM(bci_action_anchor_round_serif) [] = { PUSHB_1, bci_action_anchor_round_serif, FDEF, PUSHB_3, 1, 1, bci_anchor, CALL, ENDF, }; /* * bci_action_blue_anchor * * Handle the BLUE_ANCHOR action to align an edge with a blue zone * and to set the edge anchor. * * in: anchor_point (in twilight zone) * blue_cvt_idx * edge_point (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * sal: sal_anchor * * uses: bci_action_blue */ static const unsigned char FPGM(bci_action_blue_anchor) [] = { PUSHB_1, bci_action_blue_anchor, FDEF, /* store anchor point number in `sal_anchor' */ PUSHB_1, sal_anchor, SWAP, WS, PUSHB_1, bci_action_blue, CALL, ENDF, }; /* * bci_action_blue * * Handle the BLUE action to align an edge with a blue zone. * * in: blue_cvt_idx * edge_point (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_align_segments */ static const unsigned char FPGM(bci_action_blue) [] = { PUSHB_1, bci_action_blue, FDEF, PUSHB_1, 0, SZPS, /* set zp0, zp1, and zp2 to twilight zone 0 */ /* move `edge_point' to `blue_cvt_idx' position; */ /* note that we can't use MIAP since this would modify */ /* the twilight point's original coordinates also */ RCVT, SWAP, DUP, MDAP_noround, /* set rp0 and rp1 to `edge' */ DUP, GC_cur, /* s: new_pos edge edge_pos */ ROLL, SWAP, SUB, /* s: edge (new_pos - edge_pos) */ SHPIX, PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, ENDF, }; /* * bci_serif_common * * Common code for bci_action_serif routines. * * in: top_to_bottom_hinting * serif * base * * sal: sal_top_to_bottom_hinting * */ static const unsigned char FPGM(bci_serif_common) [] = { PUSHB_1, bci_serif_common, FDEF, PUSHB_1, 0, SZPS, /* set zp0, zp1, and zp2 to twilight zone 0 */ PUSHB_1, sal_top_to_bottom_hinting, SWAP, WS, DUP, DUP, DUP, PUSHB_1, 5, MINDEX, /* s: [...] serif serif serif serif base */ DUP, MDAP_noround, /* set rp0 and rp1 to `base_point' */ MD_orig_ZP2_0, SWAP, ALIGNRP, /* align `serif_point' with `base_point' */ SHPIX, /* serif = base + (serif_orig_pos - base_orig_pos) */ ENDF, }; /* * bci_lower_bound * * Move an edge if necessary to stay within a lower bound. * * in: edge * bound * * sal: sal_top_to_bottom_hinting * * uses: bci_align_segments */ static const unsigned char FPGM(bci_lower_bound) [] = { PUSHB_1, bci_lower_bound, FDEF, SWAP, /* s: edge bound */ DUP, MDAP_noround, /* set rp0 and rp1 to `bound' */ GC_cur, PUSHB_1, 2, CINDEX, GC_cur, /* s: edge bound_pos edge_pos */ PUSHB_1, sal_top_to_bottom_hinting, RS, IF, LT, /* edge_pos > bound_pos */ ELSE, GT, /* edge_pos < bound_pos */ EIF, IF, DUP, ALIGNRP, /* align `edge' to `bound' */ EIF, MDAP_noround, /* set rp0 and rp1 to `edge_point' */ PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, ENDF, }; /* * bci_upper_bound * * Move an edge if necessary to stay within an upper bound. * * in: edge * bound * * sal: sal_top_to_bottom_hinting * * uses: bci_align_segments */ static const unsigned char FPGM(bci_upper_bound) [] = { PUSHB_1, bci_upper_bound, FDEF, SWAP, /* s: edge bound */ DUP, MDAP_noround, /* set rp0 and rp1 to `bound' */ GC_cur, PUSHB_1, 2, CINDEX, GC_cur, /* s: edge bound_pos edge_pos */ PUSHB_1, sal_top_to_bottom_hinting, RS, IF, GT, /* edge_pos < bound_pos */ ELSE, LT, /* edge_pos > bound_pos */ EIF, IF, DUP, ALIGNRP, /* align `edge' to `bound' */ EIF, MDAP_noround, /* set rp0 and rp1 to `edge_point' */ PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, ENDF, }; /* * bci_upper_lower_bound * * Move an edge if necessary to stay within a lower and lower bound. * * in: edge * lower * upper * * sal: sal_top_to_bottom_hinting * * uses: bci_align_segments */ static const unsigned char FPGM(bci_upper_lower_bound) [] = { PUSHB_1, bci_upper_lower_bound, FDEF, SWAP, /* s: upper serif lower */ DUP, MDAP_noround, /* set rp0 and rp1 to `lower' */ GC_cur, PUSHB_1, 2, CINDEX, GC_cur, /* s: upper serif lower_pos serif_pos */ PUSHB_1, sal_top_to_bottom_hinting, RS, IF, LT, /* serif_pos > lower_pos */ ELSE, GT, /* serif_pos < lower_pos */ EIF, IF, DUP, ALIGNRP, /* align `serif' to `lower' */ EIF, SWAP, /* s: serif upper */ DUP, MDAP_noround, /* set rp0 and rp1 to `upper' */ GC_cur, PUSHB_1, 2, CINDEX, GC_cur, /* s: serif upper_pos serif_pos */ PUSHB_1, sal_top_to_bottom_hinting, RS, IF, GT, /* serif_pos < upper_pos */ ELSE, LT, /* serif_pos > upper_pos */ EIF, IF, DUP, ALIGNRP, /* align `serif' to `upper' */ EIF, MDAP_noround, /* set rp0 and rp1 to `serif_point' */ PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, ENDF, }; /* * bci_action_serif * * Handle the SERIF action to align a serif with its base. * * in: serif_point (in twilight zone) * base_point (in twilight zone) * ... stuff for bci_align_segments (serif) ... * * uses: bci_serif_common * bci_align_segments */ static const unsigned char FPGM(bci_action_serif) [] = { PUSHB_1, bci_action_serif, FDEF, PUSHB_2, 0, bci_serif_common, CALL, MDAP_noround, /* set rp0 and rp1 to `serif_point' */ PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, ENDF, }; /* * bci_action_serif_lower_bound * * Handle the SERIF action to align a serif with its base, then moving it * again if necessary to stay within a lower bound. * * in: serif_point (in twilight zone) * base_point (in twilight zone) * edge[-1] (in twilight zone) * ... stuff for bci_align_segments (serif) ... * * uses: bci_serif_common * bci_lower_bound */ static const unsigned char FPGM(bci_action_serif_lower_bound) [] = { PUSHB_1, bci_action_serif_lower_bound, FDEF, PUSHB_2, 0, bci_serif_common, CALL, PUSHB_1, bci_lower_bound, CALL, ENDF, }; /* * bci_action_serif_upper_bound * * Handle the SERIF action to align a serif with its base, then moving it * again if necessary to stay within an upper bound. * * in: serif_point (in twilight zone) * base_point (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (serif) ... * * uses: bci_serif_common * bci_upper_bound */ static const unsigned char FPGM(bci_action_serif_upper_bound) [] = { PUSHB_1, bci_action_serif_upper_bound, FDEF, PUSHB_2, 0, bci_serif_common, CALL, PUSHB_1, bci_upper_bound, CALL, ENDF, }; /* * bci_action_serif_upper_lower_bound * * Handle the SERIF action to align a serif with its base, then moving it * again if necessary to stay within a lower and upper bound. * * in: serif_point (in twilight zone) * base_point (in twilight zone) * edge[-1] (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (serif) ... * * uses: bci_serif_common * bci_upper_lower_bound */ static const unsigned char FPGM(bci_action_serif_upper_lower_bound) [] = { PUSHB_1, bci_action_serif_upper_lower_bound, FDEF, PUSHB_1, 0, SZPS, /* set zp0, zp1, and zp2 to twilight zone 0 */ PUSHB_2, 0, bci_serif_common, CALL, PUSHB_1, bci_upper_lower_bound, CALL, ENDF, }; /* * bci_action_serif_down_lower_bound * * Handle the SERIF action to align a serif with its base, then moving it * again if necessary to stay within a lower bound. We hint top to * bottom. * * in: serif_point (in twilight zone) * base_point (in twilight zone) * edge[-1] (in twilight zone) * ... stuff for bci_align_segments (serif) ... * * uses: bci_serif_common * bci_lower_bound */ static const unsigned char FPGM(bci_action_serif_down_lower_bound) [] = { PUSHB_1, bci_action_serif_down_lower_bound, FDEF, PUSHB_2, 1, bci_serif_common, CALL, PUSHB_1, bci_lower_bound, CALL, ENDF, }; /* * bci_action_serif_down_upper_bound * * Handle the SERIF action to align a serif with its base, then moving it * again if necessary to stay within an upper bound. We hint top to * bottom. * * in: serif_point (in twilight zone) * base_point (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (serif) ... * * uses: bci_serif_common * bci_upper_bound */ static const unsigned char FPGM(bci_action_serif_down_upper_bound) [] = { PUSHB_1, bci_action_serif_down_upper_bound, FDEF, PUSHB_2, 1, bci_serif_common, CALL, PUSHB_1, bci_upper_bound, CALL, ENDF, }; /* * bci_action_serif_down_upper_lower_bound * * Handle the SERIF action to align a serif with its base, then moving it * again if necessary to stay within a lower and upper bound. We hint top * to bottom. * * in: serif_point (in twilight zone) * base_point (in twilight zone) * edge[-1] (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (serif) ... * * uses: bci_serif_common * bci_upper_lower_bound */ static const unsigned char FPGM(bci_action_serif_down_upper_lower_bound) [] = { PUSHB_1, bci_action_serif_down_upper_lower_bound, FDEF, PUSHB_1, 0, SZPS, /* set zp0, zp1, and zp2 to twilight zone 0 */ PUSHB_2, 1, bci_serif_common, CALL, PUSHB_1, bci_upper_lower_bound, CALL, ENDF, }; /* * bci_serif_anchor_common * * Common code for bci_action_serif_anchor routines. * * in: top_to_bottom_hinting * edge * * out: edge (adjusted) * * sal: sal_anchor * sal_top_to_bottom_hinting * * uses: bci_round */ static const unsigned char FPGM(bci_serif_anchor_common) [] = { PUSHB_1, bci_serif_anchor_common, FDEF, PUSHB_1, 0, SZPS, /* set zp0, zp1, and zp2 to twilight zone 0 */ PUSHB_1, sal_top_to_bottom_hinting, SWAP, WS, DUP, PUSHB_1, sal_anchor, SWAP, WS, /* sal_anchor = edge_point */ DUP, DUP, DUP, GC_cur, SWAP, GC_orig, PUSHB_1, bci_round, CALL, /* s: [...] edge edge edge_pos round(edge_orig_pos) */ SWAP, SUB, SHPIX, /* edge = round(edge_orig) */ ENDF, }; /* * bci_action_serif_anchor * * Handle the SERIF_ANCHOR action to align a serif and to set the edge * anchor. * * in: edge_point (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_anchor_common * bci_align_segments */ static const unsigned char FPGM(bci_action_serif_anchor) [] = { PUSHB_1, bci_action_serif_anchor, FDEF, PUSHB_2, 0, bci_serif_anchor_common, CALL, MDAP_noround, /* set rp0 and rp1 to `edge' */ PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, ENDF, }; /* * bci_action_serif_anchor_lower_bound * * Handle the SERIF_ANCHOR action to align a serif and to set the edge * anchor, then moving it again if necessary to stay within a lower * bound. * * in: edge_point (in twilight zone) * edge[-1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_anchor_common * bci_lower_bound */ static const unsigned char FPGM(bci_action_serif_anchor_lower_bound) [] = { PUSHB_1, bci_action_serif_anchor_lower_bound, FDEF, PUSHB_2, 0, bci_serif_anchor_common, CALL, PUSHB_1, bci_lower_bound, CALL, ENDF, }; /* * bci_action_serif_anchor_upper_bound * * Handle the SERIF_ANCHOR action to align a serif and to set the edge * anchor, then moving it again if necessary to stay within an upper * bound. * * in: edge_point (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_anchor_common * bci_upper_bound */ static const unsigned char FPGM(bci_action_serif_anchor_upper_bound) [] = { PUSHB_1, bci_action_serif_anchor_upper_bound, FDEF, PUSHB_2, 0, bci_serif_anchor_common, CALL, PUSHB_1, bci_upper_bound, CALL, ENDF, }; /* * bci_action_serif_anchor_upper_lower_bound * * Handle the SERIF_ANCHOR action to align a serif and to set the edge * anchor, then moving it again if necessary to stay within a lower and * upper bound. * * in: edge_point (in twilight zone) * edge[-1] (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_anchor_common * bci_upper_lower_bound */ static const unsigned char FPGM(bci_action_serif_anchor_upper_lower_bound) [] = { PUSHB_1, bci_action_serif_anchor_upper_lower_bound, FDEF, PUSHB_2, 0, bci_serif_anchor_common, CALL, PUSHB_1, bci_upper_lower_bound, CALL, ENDF, }; /* * bci_action_serif_anchor_down_lower_bound * * Handle the SERIF_ANCHOR action to align a serif and to set the edge * anchor, then moving it again if necessary to stay within a lower * bound. We hint top to bottom. * * in: edge_point (in twilight zone) * edge[-1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_anchor_common * bci_lower_bound */ static const unsigned char FPGM(bci_action_serif_anchor_down_lower_bound) [] = { PUSHB_1, bci_action_serif_anchor_down_lower_bound, FDEF, PUSHB_2, 1, bci_serif_anchor_common, CALL, PUSHB_1, bci_lower_bound, CALL, ENDF, }; /* * bci_action_serif_anchor_down_upper_bound * * Handle the SERIF_ANCHOR action to align a serif and to set the edge * anchor, then moving it again if necessary to stay within an upper * bound. We hint top to bottom. * * in: edge_point (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_anchor_common * bci_upper_bound */ static const unsigned char FPGM(bci_action_serif_anchor_down_upper_bound) [] = { PUSHB_1, bci_action_serif_anchor_down_upper_bound, FDEF, PUSHB_2, 1, bci_serif_anchor_common, CALL, PUSHB_1, bci_upper_bound, CALL, ENDF, }; /* * bci_action_serif_anchor_down_upper_lower_bound * * Handle the SERIF_ANCHOR action to align a serif and to set the edge * anchor, then moving it again if necessary to stay within a lower and * upper bound. We hint top to bottom. * * in: edge_point (in twilight zone) * edge[-1] (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_anchor_common * bci_upper_lower_bound */ static const unsigned char FPGM(bci_action_serif_anchor_down_upper_lower_bound) [] = { PUSHB_1, bci_action_serif_anchor_down_upper_lower_bound, FDEF, PUSHB_2, 1, bci_serif_anchor_common, CALL, PUSHB_1, bci_upper_lower_bound, CALL, ENDF, }; /* * bci_serif_link1_common * * Common code for bci_action_serif_link1 routines. * * in: top_to_bottom_hinting * before * edge * after * * out: edge (adjusted) * * sal: sal_top_to_bottom_hinting * */ static const unsigned char FPGM(bci_serif_link1_common) [] = { PUSHB_1, bci_serif_link1_common, FDEF, PUSHB_1, 0, SZPS, /* set zp0, zp1, and zp2 to twilight zone 0 */ PUSHB_1, sal_top_to_bottom_hinting, SWAP, WS, PUSHB_1, 3, CINDEX, /* s: [...] after edge before after */ PUSHB_1, 2, CINDEX, /* s: [...] after edge before after before */ MD_orig_ZP2_0, PUSHB_1, 0, EQ, /* after_orig_pos == before_orig_pos */ IF, /* s: [...] after edge before */ MDAP_noround, /* set rp0 and rp1 to `before' */ DUP, ALIGNRP, /* align `edge' with `before' */ SWAP, POP, ELSE, /* we have to execute `a*b/c', with b/c very near to 1: */ /* to avoid overflow while retaining precision, */ /* we transform this to `a + a * (b-c)/c' */ PUSHB_1, 2, CINDEX, /* s: [...] after edge before edge */ PUSHB_1, 2, CINDEX, /* s: [...] after edge before edge before */ MD_orig_ZP2_0, /* a = edge_orig_pos - before_orig_pos */ DUP, PUSHB_1, 5, CINDEX, /* s: [...] after edge before a a after */ PUSHB_1, 4, CINDEX, /* s: [...] after edge before a a after before */ MD_orig_ZP2_0, /* c = after_orig_pos - before_orig_pos */ PUSHB_1, 6, CINDEX, /* s: [...] after edge before a a c after */ PUSHB_1, 5, CINDEX, /* s: [...] after edge before a a c after before */ MD_cur, /* b = after_pos - before_pos */ PUSHB_1, 2, CINDEX, /* s: [...] after edge before a a c b c */ SUB, /* b-c */ PUSHW_2, 0x08, /* 0x800 */ 0x00, 0x08, /* 0x800 */ 0x00, MUL, /* 0x10000 */ MUL, /* (b-c) in 16.16 format */ SWAP, DUP, IF, /* c != 0 ? */ DIV, /* s: [...] after edge before a a (b-c)/c */ ELSE, POP, /* avoid division by zero */ EIF, MUL, /* a * (b-c)/c * 2^10 */ DIV_BY_1024, /* a * (b-c)/c */ ADD, /* a*b/c */ SWAP, MDAP_noround, /* set rp0 and rp1 to `before' */ SWAP, /* s: [...] after a*b/c edge */ DUP, DUP, ALIGNRP, /* align `edge' with `before' */ ROLL, SHPIX, /* shift `edge' by `a*b/c' */ SWAP, /* s: [...] edge after */ POP, EIF, ENDF, }; /* * bci_action_serif_link1 * * Handle the SERIF_LINK1 action to align a serif, depending on edges * before and after. * * in: before_point (in twilight zone) * edge_point (in twilight zone) * after_point (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link1_common * bci_align_segments */ static const unsigned char FPGM(bci_action_serif_link1) [] = { PUSHB_1, bci_action_serif_link1, FDEF, PUSHB_2, 0, bci_serif_link1_common, CALL, MDAP_noround, /* set rp0 and rp1 to `edge' */ PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, ENDF, }; /* * bci_action_serif_link1_lower_bound * * Handle the SERIF_LINK1 action to align a serif, depending on edges * before and after. Additionally, move the serif again if necessary to * stay within a lower bound. * * in: before_point (in twilight zone) * edge_point (in twilight zone) * after_point (in twilight zone) * edge[-1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link1_common * bci_lower_bound */ static const unsigned char FPGM(bci_action_serif_link1_lower_bound) [] = { PUSHB_1, bci_action_serif_link1_lower_bound, FDEF, PUSHB_2, 0, bci_serif_link1_common, CALL, PUSHB_1, bci_lower_bound, CALL, ENDF, }; /* * bci_action_serif_link1_upper_bound * * Handle the SERIF_LINK1 action to align a serif, depending on edges * before and after. Additionally, move the serif again if necessary to * stay within an upper bound. * * in: before_point (in twilight zone) * edge_point (in twilight zone) * after_point (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link1_common * bci_upper_bound */ static const unsigned char FPGM(bci_action_serif_link1_upper_bound) [] = { PUSHB_1, bci_action_serif_link1_upper_bound, FDEF, PUSHB_2, 0, bci_serif_link1_common, CALL, PUSHB_1, bci_upper_bound, CALL, ENDF, }; /* * bci_action_serif_link1_upper_lower_bound * * Handle the SERIF_LINK1 action to align a serif, depending on edges * before and after. Additionally, move the serif again if necessary to * stay within a lower and upper bound. * * in: before_point (in twilight zone) * edge_point (in twilight zone) * after_point (in twilight zone) * edge[-1] (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link1_common * bci_upper_lower_bound */ static const unsigned char FPGM(bci_action_serif_link1_upper_lower_bound) [] = { PUSHB_1, bci_action_serif_link1_upper_lower_bound, FDEF, PUSHB_2, 0, bci_serif_link1_common, CALL, PUSHB_1, bci_upper_lower_bound, CALL, ENDF, }; /* * bci_action_serif_link1_down_lower_bound * * Handle the SERIF_LINK1 action to align a serif, depending on edges * before and after. Additionally, move the serif again if necessary to * stay within a lower bound. We hint top to bottom. * * in: before_point (in twilight zone) * edge_point (in twilight zone) * after_point (in twilight zone) * edge[-1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link1_common * bci_lower_bound */ static const unsigned char FPGM(bci_action_serif_link1_down_lower_bound) [] = { PUSHB_1, bci_action_serif_link1_down_lower_bound, FDEF, PUSHB_2, 1, bci_serif_link1_common, CALL, PUSHB_1, bci_lower_bound, CALL, ENDF, }; /* * bci_action_serif_link1_down_upper_bound * * Handle the SERIF_LINK1 action to align a serif, depending on edges * before and after. Additionally, move the serif again if necessary to * stay within an upper bound. We hint top to bottom. * * in: before_point (in twilight zone) * edge_point (in twilight zone) * after_point (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link1_common * bci_upper_bound */ static const unsigned char FPGM(bci_action_serif_link1_down_upper_bound) [] = { PUSHB_1, bci_action_serif_link1_down_upper_bound, FDEF, PUSHB_2, 1, bci_serif_link1_common, CALL, PUSHB_1, bci_upper_bound, CALL, ENDF, }; /* * bci_action_serif_link1_down_upper_lower_bound * * Handle the SERIF_LINK1 action to align a serif, depending on edges * before and after. Additionally, move the serif again if necessary to * stay within a lower and upper bound. We hint top to bottom. * * in: before_point (in twilight zone) * edge_point (in twilight zone) * after_point (in twilight zone) * edge[-1] (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link1_common * bci_upper_lower_bound */ static const unsigned char FPGM(bci_action_serif_link1_down_upper_lower_bound) [] = { PUSHB_1, bci_action_serif_link1_down_upper_lower_bound, FDEF, PUSHB_2, 1, bci_serif_link1_common, CALL, PUSHB_1, bci_upper_lower_bound, CALL, ENDF, }; /* * bci_serif_link2_common * * Common code for bci_action_serif_link2 routines. * * in: top_to_bottom_hinting * edge * * out: edge (adjusted) * * sal: sal_anchor * sal_top_to_bottom_hinting * */ static const unsigned char FPGM(bci_serif_link2_common) [] = { PUSHB_1, bci_serif_link2_common, FDEF, PUSHB_1, 0, SZPS, /* set zp0, zp1, and zp2 to twilight zone 0 */ PUSHB_1, sal_top_to_bottom_hinting, SWAP, WS, DUP, /* s: [...] edge edge */ PUSHB_1, sal_anchor, RS, DUP, /* s: [...] edge edge anchor anchor */ MDAP_noround, /* set rp0 and rp1 to `sal_anchor' */ MD_orig_ZP2_0, DUP, ADD, PUSHB_1, 32, ADD, FLOOR, DIV_BY_2, /* delta = (edge_orig_pos - anchor_orig_pos + 16) & ~31 */ SWAP, DUP, DUP, ALIGNRP, /* align `edge' with `sal_anchor' */ ROLL, SHPIX, /* shift `edge' by `delta' */ ENDF, }; /* * bci_action_serif_link2 * * Handle the SERIF_LINK2 action to align a serif relative to the anchor. * * in: edge_point (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link2_common * bci_align_segments */ static const unsigned char FPGM(bci_action_serif_link2) [] = { PUSHB_1, bci_action_serif_link2, FDEF, PUSHB_2, 0, bci_serif_link2_common, CALL, MDAP_noround, /* set rp0 and rp1 to `edge' */ PUSHB_2, bci_align_segments, 1, SZP1, /* set zp1 to normal zone 1 */ CALL, ENDF, }; /* * bci_action_serif_link2_lower_bound * * Handle the SERIF_LINK2 action to align a serif relative to the anchor. * Additionally, move the serif again if necessary to stay within a lower * bound. * * in: edge_point (in twilight zone) * edge[-1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link2_common * bci_lower_bound */ static const unsigned char FPGM(bci_action_serif_link2_lower_bound) [] = { PUSHB_1, bci_action_serif_link2_lower_bound, FDEF, PUSHB_2, 0, bci_serif_link2_common, CALL, PUSHB_1, bci_lower_bound, CALL, ENDF, }; /* * bci_action_serif_link2_upper_bound * * Handle the SERIF_LINK2 action to align a serif relative to the anchor. * Additionally, move the serif again if necessary to stay within an upper * bound. * * in: edge_point (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link2_common * bci_upper_bound */ static const unsigned char FPGM(bci_action_serif_link2_upper_bound) [] = { PUSHB_1, bci_action_serif_link2_upper_bound, FDEF, PUSHB_2, 0, bci_serif_link2_common, CALL, PUSHB_1, bci_upper_bound, CALL, ENDF, }; /* * bci_action_serif_link2_upper_lower_bound * * Handle the SERIF_LINK2 action to align a serif relative to the anchor. * Additionally, move the serif again if necessary to stay within a lower * and upper bound. * * in: edge_point (in twilight zone) * edge[-1] (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link2_common * bci_upper_lower_bound */ static const unsigned char FPGM(bci_action_serif_link2_upper_lower_bound) [] = { PUSHB_1, bci_action_serif_link2_upper_lower_bound, FDEF, PUSHB_2, 0, bci_serif_link2_common, CALL, PUSHB_1, bci_upper_lower_bound, CALL, ENDF, }; /* * bci_action_serif_link2_down_lower_bound * * Handle the SERIF_LINK2 action to align a serif relative to the anchor. * Additionally, move the serif again if necessary to stay within a lower * bound. We hint top to bottom. * * in: edge_point (in twilight zone) * edge[-1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link2_common * bci_lower_bound */ static const unsigned char FPGM(bci_action_serif_link2_down_lower_bound) [] = { PUSHB_1, bci_action_serif_link2_down_lower_bound, FDEF, PUSHB_2, 1, bci_serif_link2_common, CALL, PUSHB_1, bci_lower_bound, CALL, ENDF, }; /* * bci_action_serif_link2_down_upper_bound * * Handle the SERIF_LINK2 action to align a serif relative to the anchor. * Additionally, move the serif again if necessary to stay within an upper * bound. We hint top to bottom. * * in: edge_point (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link2_common * bci_upper_bound */ static const unsigned char FPGM(bci_action_serif_link2_down_upper_bound) [] = { PUSHB_1, bci_action_serif_link2_down_upper_bound, FDEF, PUSHB_2, 1, bci_serif_link2_common, CALL, PUSHB_1, bci_upper_bound, CALL, ENDF, }; /* * bci_action_serif_link2_down_upper_lower_bound * * Handle the SERIF_LINK2 action to align a serif relative to the anchor. * Additionally, move the serif again if necessary to stay within a lower * and upper bound. We hint top to bottom. * * in: edge_point (in twilight zone) * edge[-1] (in twilight zone) * edge[1] (in twilight zone) * ... stuff for bci_align_segments (edge) ... * * uses: bci_serif_link2_common * bci_upper_lower_bound */ static const unsigned char FPGM(bci_action_serif_link2_down_upper_lower_bound) [] = { PUSHB_1, bci_action_serif_link2_down_upper_lower_bound, FDEF, PUSHB_2, 1, bci_serif_link2_common, CALL, PUSHB_1, bci_upper_lower_bound, CALL, ENDF, }; /* * bci_hint_glyph * * This is the top-level glyph hinting function which parses the arguments * on the stack and calls subroutines. * * in: action_0_func_idx * ... data ... * action_1_func_idx * ... data ... * ... * * CVT: cvtl_is_subglyph * cvtl_stem_width_mode * cvtl_do_iup_y * * sal: sal_stem_width_function * * uses: bci_action_ip_before * bci_action_ip_after * bci_action_ip_on * bci_action_ip_between * * bci_action_adjust_bound * bci_action_adjust_bound_serif * bci_action_adjust_bound_round * bci_action_adjust_bound_round_serif * * bci_action_stem_bound * bci_action_stem_bound_serif * bci_action_stem_bound_round * bci_action_stem_bound_round_serif * * bci_action_link * bci_action_link_serif * bci_action_link_round * bci_action_link_round_serif * * bci_action_anchor * bci_action_anchor_serif * bci_action_anchor_round * bci_action_anchor_round_serif * * bci_action_blue_anchor * * bci_action_adjust * bci_action_adjust_serif * bci_action_adjust_round * bci_action_adjust_round_serif * * bci_action_stem * bci_action_stem_serif * bci_action_stem_round * bci_action_stem_round_serif * * bci_action_blue * * bci_action_serif * bci_action_serif_lower_bound * bci_action_serif_upper_bound * bci_action_serif_upper_lower_bound * * bci_action_serif_anchor * bci_action_serif_anchor_lower_bound * bci_action_serif_anchor_upper_bound * bci_action_serif_anchor_upper_lower_bound * * bci_action_serif_link1 * bci_action_serif_link1_lower_bound * bci_action_serif_link1_upper_bound * bci_action_serif_link1_upper_lower_bound * * bci_action_serif_link2 * bci_action_serif_link2_lower_bound * bci_action_serif_link2_upper_bound * bci_action_serif_link2_upper_lower_bound */ static const unsigned char FPGM(bci_hint_glyph) [] = { PUSHB_1, bci_hint_glyph, FDEF, /* * set up stem width function based on flag in CVT: * * < 0: bci_natural_stem_width * == 0: bci_smooth_stem_width * > 0: bci_strong_stem_width */ PUSHB_3, sal_stem_width_function, 0, cvtl_stem_width_mode, RCVT, LT, IF, PUSHB_1, bci_strong_stem_width, ELSE, PUSHB_3, bci_smooth_stem_width, bci_natural_stem_width, cvtl_stem_width_mode, RCVT, IF, SWAP, POP, ELSE, POP, EIF, EIF, WS, /* start_loop: */ /* loop until all data on stack is used */ CALL, PUSHB_1, 8, NEG, PUSHB_1, 3, DEPTH, LT, JROT, /* goto start_loop */ PUSHB_2, cvtl_do_iup_y, 1, SZP2, /* set zp2 to normal zone 1 */ RCVT, IF, IUP_y, EIF, ENDF, }; #define COPY_FPGM(func_name) \ do \ { \ memcpy(bufp, fpgm_ ## func_name, \ sizeof (fpgm_ ## func_name)); \ bufp += sizeof (fpgm_ ## func_name); \ } while (0) static FT_Error TA_table_build_fpgm(FT_Byte** fpgm, FT_ULong* fpgm_len, SFNT* sfnt, FONT* font) { SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; unsigned char num_used_styles = (unsigned char)data->num_used_styles; unsigned char fallback_style = CVT_SCALING_VALUE_OFFSET(0) + (unsigned char)data->style_ids[font->fallback_style]; FT_UInt buf_len; FT_UInt len; FT_Byte* buf; FT_Byte* bufp; /* for compatibility with dumb bytecode interpreters or analyzers, */ /* FDEFs are stored in ascending index order, without holes -- */ /* note that some FDEFs are not always needed */ /* (depending on options of `TTFautohint'), */ /* but implementing dynamic FDEF indices would be a lot of work */ buf_len = sizeof (FPGM(bci_align_x_height_a)) + (font->increase_x_height ? (sizeof (FPGM(bci_align_x_height_b1a)) + 2 + sizeof (FPGM(bci_align_x_height_b1b))) : sizeof (FPGM(bci_align_x_height_b2))) + sizeof (FPGM(bci_align_x_height_c)) + sizeof (FPGM(bci_round)) + sizeof (FPGM(bci_natural_stem_width)) + sizeof (FPGM(bci_quantize_stem_width)) + sizeof (FPGM(bci_smooth_stem_width)) + sizeof (FPGM(bci_get_best_width)) + sizeof (FPGM(bci_strong_stem_width_a)) + 1 + sizeof (FPGM(bci_strong_stem_width_b)) + sizeof (FPGM(bci_loop_do)) + sizeof (FPGM(bci_loop)) + sizeof (FPGM(bci_cvt_rescale)) + sizeof (FPGM(bci_cvt_rescale_range)) + sizeof (FPGM(bci_vwidth_data_store)) + sizeof (FPGM(bci_smooth_blue_round)) + sizeof (FPGM(bci_strong_blue_round)) + sizeof (FPGM(bci_blue_round_range)) + sizeof (FPGM(bci_decrement_component_counter)) + sizeof (FPGM(bci_get_point_extrema)) + sizeof (FPGM(bci_nibbles)) + sizeof (FPGM(bci_number_set_is_element)) + sizeof (FPGM(bci_number_set_is_element2)) + sizeof (FPGM(bci_create_segment)) + sizeof (FPGM(bci_create_segments_a)) + 1 + sizeof (FPGM(bci_create_segments_b)) + (font->control_data_head != 0 ? sizeof (FPGM(bci_create_segments_c)) : 0) + sizeof (FPGM(bci_create_segments_d)) + sizeof (FPGM(bci_create_segments_0)) + sizeof (FPGM(bci_create_segments_1)) + sizeof (FPGM(bci_create_segments_2)) + sizeof (FPGM(bci_create_segments_3)) + sizeof (FPGM(bci_create_segments_4)) + sizeof (FPGM(bci_create_segments_5)) + sizeof (FPGM(bci_create_segments_6)) + sizeof (FPGM(bci_create_segments_7)) + sizeof (FPGM(bci_create_segments_8)) + sizeof (FPGM(bci_create_segments_9)) + sizeof (FPGM(bci_deltap1)) + sizeof (FPGM(bci_deltap2)) + sizeof (FPGM(bci_deltap3)) + sizeof (FPGM(bci_create_segments_composite_a)) + 1 + sizeof (FPGM(bci_create_segments_composite_b)) + (font->control_data_head != 0 ? sizeof (FPGM(bci_create_segments_composite_c)) : 0) + sizeof (FPGM(bci_create_segments_composite_d)) + sizeof (FPGM(bci_create_segments_composite_0)) + sizeof (FPGM(bci_create_segments_composite_1)) + sizeof (FPGM(bci_create_segments_composite_2)) + sizeof (FPGM(bci_create_segments_composite_3)) + sizeof (FPGM(bci_create_segments_composite_4)) + sizeof (FPGM(bci_create_segments_composite_5)) + sizeof (FPGM(bci_create_segments_composite_6)) + sizeof (FPGM(bci_create_segments_composite_7)) + sizeof (FPGM(bci_create_segments_composite_8)) + sizeof (FPGM(bci_create_segments_composite_9)) + sizeof (FPGM(bci_align_point)) + sizeof (FPGM(bci_align_segment)) + sizeof (FPGM(bci_align_segments)) + sizeof (FPGM(bci_scale_contour)) + sizeof (FPGM(bci_scale_glyph_a)) + 1 + sizeof (FPGM(bci_scale_glyph_b)) + sizeof (FPGM(bci_scale_composite_glyph_a)) + 1 + sizeof (FPGM(bci_scale_composite_glyph_b)) + sizeof (FPGM(bci_shift_contour)) + sizeof (FPGM(bci_shift_subglyph_a)) + 1 + sizeof (FPGM(bci_shift_subglyph_b)) + (font->control_data_head != 0 ? sizeof (FPGM(bci_shift_subglyph_c)) : 0) + sizeof (FPGM(bci_shift_subglyph_d)) + sizeof (FPGM(bci_ip_outer_align_point)) + sizeof (FPGM(bci_ip_on_align_points)) + sizeof (FPGM(bci_ip_between_align_point)) + sizeof (FPGM(bci_ip_between_align_points)) + sizeof (FPGM(bci_adjust_common)) + sizeof (FPGM(bci_stem_common)) + sizeof (FPGM(bci_serif_common)) + sizeof (FPGM(bci_serif_anchor_common)) + sizeof (FPGM(bci_serif_link1_common)) + sizeof (FPGM(bci_serif_link2_common)) + sizeof (FPGM(bci_lower_bound)) + sizeof (FPGM(bci_upper_bound)) + sizeof (FPGM(bci_upper_lower_bound)) + sizeof (FPGM(bci_adjust_bound)) + sizeof (FPGM(bci_stem_bound)) + sizeof (FPGM(bci_link)) + sizeof (FPGM(bci_anchor)) + sizeof (FPGM(bci_adjust)) + sizeof (FPGM(bci_stem)) + sizeof (FPGM(bci_action_ip_before)) + sizeof (FPGM(bci_action_ip_after)) + sizeof (FPGM(bci_action_ip_on)) + sizeof (FPGM(bci_action_ip_between)) + sizeof (FPGM(bci_action_blue)) + sizeof (FPGM(bci_action_blue_anchor)) + sizeof (FPGM(bci_action_anchor)) + sizeof (FPGM(bci_action_anchor_serif)) + sizeof (FPGM(bci_action_anchor_round)) + sizeof (FPGM(bci_action_anchor_round_serif)) + sizeof (FPGM(bci_action_adjust)) + sizeof (FPGM(bci_action_adjust_serif)) + sizeof (FPGM(bci_action_adjust_round)) + sizeof (FPGM(bci_action_adjust_round_serif)) + sizeof (FPGM(bci_action_adjust_bound)) + sizeof (FPGM(bci_action_adjust_bound_serif)) + sizeof (FPGM(bci_action_adjust_bound_round)) + sizeof (FPGM(bci_action_adjust_bound_round_serif)) + sizeof (FPGM(bci_action_adjust_down_bound)) + sizeof (FPGM(bci_action_adjust_down_bound_serif)) + sizeof (FPGM(bci_action_adjust_down_bound_round)) + sizeof (FPGM(bci_action_adjust_down_bound_round_serif)) + sizeof (FPGM(bci_action_link)) + sizeof (FPGM(bci_action_link_serif)) + sizeof (FPGM(bci_action_link_round)) + sizeof (FPGM(bci_action_link_round_serif)) + sizeof (FPGM(bci_action_stem)) + sizeof (FPGM(bci_action_stem_serif)) + sizeof (FPGM(bci_action_stem_round)) + sizeof (FPGM(bci_action_stem_round_serif)) + sizeof (FPGM(bci_action_stem_bound)) + sizeof (FPGM(bci_action_stem_bound_serif)) + sizeof (FPGM(bci_action_stem_bound_round)) + sizeof (FPGM(bci_action_stem_bound_round_serif)) + sizeof (FPGM(bci_action_stem_down_bound)) + sizeof (FPGM(bci_action_stem_down_bound_serif)) + sizeof (FPGM(bci_action_stem_down_bound_round)) + sizeof (FPGM(bci_action_stem_down_bound_round_serif)) + sizeof (FPGM(bci_action_serif)) + sizeof (FPGM(bci_action_serif_lower_bound)) + sizeof (FPGM(bci_action_serif_upper_bound)) + sizeof (FPGM(bci_action_serif_upper_lower_bound)) + sizeof (FPGM(bci_action_serif_down_lower_bound)) + sizeof (FPGM(bci_action_serif_down_upper_bound)) + sizeof (FPGM(bci_action_serif_down_upper_lower_bound)) + sizeof (FPGM(bci_action_serif_anchor)) + sizeof (FPGM(bci_action_serif_anchor_lower_bound)) + sizeof (FPGM(bci_action_serif_anchor_upper_bound)) + sizeof (FPGM(bci_action_serif_anchor_upper_lower_bound)) + sizeof (FPGM(bci_action_serif_anchor_down_lower_bound)) + sizeof (FPGM(bci_action_serif_anchor_down_upper_bound)) + sizeof (FPGM(bci_action_serif_anchor_down_upper_lower_bound)) + sizeof (FPGM(bci_action_serif_link1)) + sizeof (FPGM(bci_action_serif_link1_lower_bound)) + sizeof (FPGM(bci_action_serif_link1_upper_bound)) + sizeof (FPGM(bci_action_serif_link1_upper_lower_bound)) + sizeof (FPGM(bci_action_serif_link1_down_lower_bound)) + sizeof (FPGM(bci_action_serif_link1_down_upper_bound)) + sizeof (FPGM(bci_action_serif_link1_down_upper_lower_bound)) + sizeof (FPGM(bci_action_serif_link2)) + sizeof (FPGM(bci_action_serif_link2_lower_bound)) + sizeof (FPGM(bci_action_serif_link2_upper_bound)) + sizeof (FPGM(bci_action_serif_link2_upper_lower_bound)) + sizeof (FPGM(bci_action_serif_link2_down_lower_bound)) + sizeof (FPGM(bci_action_serif_link2_down_upper_bound)) + sizeof (FPGM(bci_action_serif_link2_down_upper_lower_bound)) + sizeof (FPGM(bci_hint_glyph)); /* buffer length must be a multiple of four */ len = (buf_len + 3) & ~3U; buf = (FT_Byte*)malloc(len); if (!buf) return FT_Err_Out_Of_Memory; /* pad end of buffer with zeros */ buf[len - 1] = 0x00; buf[len - 2] = 0x00; buf[len - 3] = 0x00; /* copy font program into buffer and fill in the missing variables */ bufp = buf; COPY_FPGM(bci_align_x_height_a); if (font->increase_x_height) { COPY_FPGM(bci_align_x_height_b1a); *(bufp++) = HIGH(font->increase_x_height); *(bufp++) = LOW(font->increase_x_height); COPY_FPGM(bci_align_x_height_b1b); } else COPY_FPGM(bci_align_x_height_b2); COPY_FPGM(bci_align_x_height_c); COPY_FPGM(bci_round); COPY_FPGM(bci_natural_stem_width); COPY_FPGM(bci_quantize_stem_width); COPY_FPGM(bci_smooth_stem_width); COPY_FPGM(bci_get_best_width); COPY_FPGM(bci_strong_stem_width_a); *(bufp++) = num_used_styles; COPY_FPGM(bci_strong_stem_width_b); COPY_FPGM(bci_loop_do); COPY_FPGM(bci_loop); COPY_FPGM(bci_cvt_rescale); COPY_FPGM(bci_cvt_rescale_range); COPY_FPGM(bci_vwidth_data_store); COPY_FPGM(bci_smooth_blue_round); COPY_FPGM(bci_strong_blue_round); COPY_FPGM(bci_blue_round_range); COPY_FPGM(bci_decrement_component_counter); COPY_FPGM(bci_get_point_extrema); COPY_FPGM(bci_nibbles); COPY_FPGM(bci_number_set_is_element); COPY_FPGM(bci_number_set_is_element2); COPY_FPGM(bci_create_segment); COPY_FPGM(bci_create_segments_a); *(bufp++) = num_used_styles; COPY_FPGM(bci_create_segments_b); if (font->control_data_head) COPY_FPGM(bci_create_segments_c); COPY_FPGM(bci_create_segments_d); COPY_FPGM(bci_create_segments_0); COPY_FPGM(bci_create_segments_1); COPY_FPGM(bci_create_segments_2); COPY_FPGM(bci_create_segments_3); COPY_FPGM(bci_create_segments_4); COPY_FPGM(bci_create_segments_5); COPY_FPGM(bci_create_segments_6); COPY_FPGM(bci_create_segments_7); COPY_FPGM(bci_create_segments_8); COPY_FPGM(bci_create_segments_9); COPY_FPGM(bci_deltap1); COPY_FPGM(bci_deltap2); COPY_FPGM(bci_deltap3); COPY_FPGM(bci_create_segments_composite_a); *(bufp++) = num_used_styles; COPY_FPGM(bci_create_segments_composite_b); if (font->control_data_head) COPY_FPGM(bci_create_segments_composite_c); COPY_FPGM(bci_create_segments_composite_d); COPY_FPGM(bci_create_segments_composite_0); COPY_FPGM(bci_create_segments_composite_1); COPY_FPGM(bci_create_segments_composite_2); COPY_FPGM(bci_create_segments_composite_3); COPY_FPGM(bci_create_segments_composite_4); COPY_FPGM(bci_create_segments_composite_5); COPY_FPGM(bci_create_segments_composite_6); COPY_FPGM(bci_create_segments_composite_7); COPY_FPGM(bci_create_segments_composite_8); COPY_FPGM(bci_create_segments_composite_9); COPY_FPGM(bci_align_point); COPY_FPGM(bci_align_segment); COPY_FPGM(bci_align_segments); COPY_FPGM(bci_scale_contour); COPY_FPGM(bci_scale_glyph_a); *(bufp++) = fallback_style; COPY_FPGM(bci_scale_glyph_b); COPY_FPGM(bci_scale_composite_glyph_a); *(bufp++) = fallback_style; COPY_FPGM(bci_scale_composite_glyph_b); COPY_FPGM(bci_shift_contour); COPY_FPGM(bci_shift_subglyph_a); *(bufp++) = fallback_style; COPY_FPGM(bci_shift_subglyph_b); if (font->control_data_head) COPY_FPGM(bci_shift_subglyph_c); COPY_FPGM(bci_shift_subglyph_d); COPY_FPGM(bci_ip_outer_align_point); COPY_FPGM(bci_ip_on_align_points); COPY_FPGM(bci_ip_between_align_point); COPY_FPGM(bci_ip_between_align_points); COPY_FPGM(bci_adjust_common); COPY_FPGM(bci_stem_common); COPY_FPGM(bci_serif_common); COPY_FPGM(bci_serif_anchor_common); COPY_FPGM(bci_serif_link1_common); COPY_FPGM(bci_serif_link2_common); COPY_FPGM(bci_lower_bound); COPY_FPGM(bci_upper_bound); COPY_FPGM(bci_upper_lower_bound); COPY_FPGM(bci_adjust_bound); COPY_FPGM(bci_stem_bound); COPY_FPGM(bci_link); COPY_FPGM(bci_anchor); COPY_FPGM(bci_adjust); COPY_FPGM(bci_stem); COPY_FPGM(bci_action_ip_before); COPY_FPGM(bci_action_ip_after); COPY_FPGM(bci_action_ip_on); COPY_FPGM(bci_action_ip_between); COPY_FPGM(bci_action_blue); COPY_FPGM(bci_action_blue_anchor); COPY_FPGM(bci_action_anchor); COPY_FPGM(bci_action_anchor_serif); COPY_FPGM(bci_action_anchor_round); COPY_FPGM(bci_action_anchor_round_serif); COPY_FPGM(bci_action_adjust); COPY_FPGM(bci_action_adjust_serif); COPY_FPGM(bci_action_adjust_round); COPY_FPGM(bci_action_adjust_round_serif); COPY_FPGM(bci_action_adjust_bound); COPY_FPGM(bci_action_adjust_bound_serif); COPY_FPGM(bci_action_adjust_bound_round); COPY_FPGM(bci_action_adjust_bound_round_serif); COPY_FPGM(bci_action_adjust_down_bound); COPY_FPGM(bci_action_adjust_down_bound_serif); COPY_FPGM(bci_action_adjust_down_bound_round); COPY_FPGM(bci_action_adjust_down_bound_round_serif); COPY_FPGM(bci_action_link); COPY_FPGM(bci_action_link_serif); COPY_FPGM(bci_action_link_round); COPY_FPGM(bci_action_link_round_serif); COPY_FPGM(bci_action_stem); COPY_FPGM(bci_action_stem_serif); COPY_FPGM(bci_action_stem_round); COPY_FPGM(bci_action_stem_round_serif); COPY_FPGM(bci_action_stem_bound); COPY_FPGM(bci_action_stem_bound_serif); COPY_FPGM(bci_action_stem_bound_round); COPY_FPGM(bci_action_stem_bound_round_serif); COPY_FPGM(bci_action_stem_down_bound); COPY_FPGM(bci_action_stem_down_bound_serif); COPY_FPGM(bci_action_stem_down_bound_round); COPY_FPGM(bci_action_stem_down_bound_round_serif); COPY_FPGM(bci_action_serif); COPY_FPGM(bci_action_serif_lower_bound); COPY_FPGM(bci_action_serif_upper_bound); COPY_FPGM(bci_action_serif_upper_lower_bound); COPY_FPGM(bci_action_serif_down_lower_bound); COPY_FPGM(bci_action_serif_down_upper_bound); COPY_FPGM(bci_action_serif_down_upper_lower_bound); COPY_FPGM(bci_action_serif_anchor); COPY_FPGM(bci_action_serif_anchor_lower_bound); COPY_FPGM(bci_action_serif_anchor_upper_bound); COPY_FPGM(bci_action_serif_anchor_upper_lower_bound); COPY_FPGM(bci_action_serif_anchor_down_lower_bound); COPY_FPGM(bci_action_serif_anchor_down_upper_bound); COPY_FPGM(bci_action_serif_anchor_down_upper_lower_bound); COPY_FPGM(bci_action_serif_link1); COPY_FPGM(bci_action_serif_link1_lower_bound); COPY_FPGM(bci_action_serif_link1_upper_bound); COPY_FPGM(bci_action_serif_link1_upper_lower_bound); COPY_FPGM(bci_action_serif_link1_down_lower_bound); COPY_FPGM(bci_action_serif_link1_down_upper_bound); COPY_FPGM(bci_action_serif_link1_down_upper_lower_bound); COPY_FPGM(bci_action_serif_link2); COPY_FPGM(bci_action_serif_link2_lower_bound); COPY_FPGM(bci_action_serif_link2_upper_bound); COPY_FPGM(bci_action_serif_link2_upper_lower_bound); COPY_FPGM(bci_action_serif_link2_down_lower_bound); COPY_FPGM(bci_action_serif_link2_down_upper_bound); COPY_FPGM(bci_action_serif_link2_down_upper_lower_bound); COPY_FPGM(bci_hint_glyph); *fpgm = buf; *fpgm_len = buf_len; return FT_Err_Ok; } FT_Error TA_sfnt_build_fpgm_table(SFNT* sfnt, FONT* font) { FT_Error error; SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; FT_Byte* fpgm_buf; FT_ULong fpgm_len; error = TA_sfnt_add_table_info(sfnt); if (error) goto Exit; /* `glyf', `cvt', `fpgm', and `prep' are always used in parallel */ if (glyf_table->processed) { sfnt->table_infos[sfnt->num_table_infos - 1] = data->fpgm_idx; goto Exit; } error = TA_table_build_fpgm(&fpgm_buf, &fpgm_len, sfnt, font); if (error) goto Exit; if (fpgm_len > sfnt->max_instructions) sfnt->max_instructions = (FT_UShort)fpgm_len; /* in case of success, `fpgm_buf' gets linked */ /* and is eventually freed in `TA_font_unload' */ error = TA_font_add_table(font, &sfnt->table_infos[sfnt->num_table_infos - 1], TTAG_fpgm, fpgm_len, fpgm_buf); if (error) free(fpgm_buf); else data->fpgm_idx = sfnt->table_infos[sfnt->num_table_infos - 1]; Exit: return error; } /* end of tafpgm.c */ ttfautohint-1.8.1/lib/tagasp.c0000644000175000001440000000343513153174711016134 0ustar00wlusers00000000000000/* tagasp.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" static FT_Error TA_table_build_gasp(FT_Byte** gasp) { FT_Byte* buf; buf = (FT_Byte*)malloc(GASP_LEN); if (!buf) return FT_Err_Out_Of_Memory; /* version */ buf[0] = 0x00; buf[1] = 0x01; /* one range */ buf[2] = 0x00; buf[3] = 0x01; /* entry valid for all sizes */ buf[4] = 0xFF; buf[5] = 0xFF; buf[6] = 0x00; buf[7] = 0x0F; /* always use grayscale rendering with grid-fitting, */ /* symmetric grid-fitting and symmetric smoothing */ *gasp = buf; return TA_Err_Ok; } FT_Error TA_sfnt_build_gasp_table(SFNT* sfnt, FONT* font) { FT_Error error; FT_Byte* gasp_buf; error = TA_sfnt_add_table_info(sfnt); if (error) goto Exit; if (font->gasp_idx != MISSING) { sfnt->table_infos[sfnt->num_table_infos - 1] = font->gasp_idx; goto Exit; } error = TA_table_build_gasp(&gasp_buf); if (error) goto Exit; /* in case of success, `gasp_buf' gets linked */ /* and is eventually freed in `TA_font_unload' */ error = TA_font_add_table(font, &sfnt->table_infos[sfnt->num_table_infos - 1], TTAG_gasp, GASP_LEN, gasp_buf); if (error) free(gasp_buf); else font->gasp_idx = sfnt->table_infos[sfnt->num_table_infos - 1]; Exit: return error; } /* end of tagasp.c */ ttfautohint-1.8.1/lib/tagloadr.c0000644000175000001440000002535213153174711016454 0ustar00wlusers00000000000000/* tagloadr.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `ftgloadr.c' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #include #include #include "tatypes.h" #include "tagloadr.h" /*************************************************************************/ /* */ /* The glyph loader is a simple object which is used to load a set of */ /* glyphs easily. It is critical for the correct loading of composites. */ /* */ /* Ideally, one can see it as a stack of abstract `glyph' objects. */ /* */ /* loader.base Is really the bottom of the stack. It describes a */ /* single glyph image made of the juxtaposition of */ /* several glyphs (those `in the stack'). */ /* */ /* loader.current Describes the top of the stack, on which a new */ /* glyph can be loaded. */ /* */ /* Rewind Clears the stack. */ /* Prepare Set up `loader.current' for addition of a new glyph */ /* image. */ /* Add Add the `current' glyph image to the `base' one, */ /* and prepare for another one. */ /* */ /*************************************************************************/ /* create a new glyph loader */ FT_Error TA_GlyphLoader_New(TA_GlyphLoader *aloader) { TA_GlyphLoader loader; loader = (TA_GlyphLoader)calloc(1, sizeof (TA_GlyphLoaderRec)); if (!loader) return FT_Err_Out_Of_Memory; *aloader = loader; return FT_Err_Ok; } /* rewind the glyph loader - reset counters to 0 */ void TA_GlyphLoader_Rewind(TA_GlyphLoader loader) { TA_GlyphLoad base = &loader->base; TA_GlyphLoad current = &loader->current; base->outline.n_points = 0; base->outline.n_contours = 0; base->num_subglyphs = 0; *current = *base; } /* reset the glyph loader, frees all allocated tables */ /* and starts from zero */ void TA_GlyphLoader_Reset(TA_GlyphLoader loader) { free(loader->base.outline.points); free(loader->base.outline.tags); free(loader->base.outline.contours); free(loader->base.extra_points); free(loader->base.subglyphs); loader->base.outline.points = NULL; loader->base.outline.tags = NULL; loader->base.outline.contours = NULL; loader->base.extra_points = NULL; loader->base.subglyphs = NULL; loader->base.extra_points2 = NULL; loader->max_points = 0; loader->max_contours = 0; loader->max_subglyphs = 0; TA_GlyphLoader_Rewind(loader); } /* delete a glyph loader */ void TA_GlyphLoader_Done(TA_GlyphLoader loader) { if (loader) { TA_GlyphLoader_Reset(loader); free(loader); } } /* re-adjust the `current' outline fields */ static void TA_GlyphLoader_Adjust_Points(TA_GlyphLoader loader) { FT_Outline* base = &loader->base.outline; FT_Outline* current = &loader->current.outline; current->points = base->points + base->n_points; current->tags = base->tags + base->n_points; current->contours = base->contours + base->n_contours; /* handle extra points table - if any */ if (loader->use_extra) { loader->current.extra_points = loader->base.extra_points + base->n_points; loader->current.extra_points2 = loader->base.extra_points2 + base->n_points; } } FT_Error TA_GlyphLoader_CreateExtra(TA_GlyphLoader loader) { loader->base.extra_points = (FT_Vector*)calloc(1, 2 * loader->max_points * sizeof (FT_Vector)); if (!loader->base.extra_points) return FT_Err_Out_Of_Memory; loader->use_extra = 1; loader->base.extra_points2 = loader->base.extra_points + loader->max_points; TA_GlyphLoader_Adjust_Points(loader); return FT_Err_Ok; } /* re-adjust the `current' subglyphs field */ static void TA_GlyphLoader_Adjust_Subglyphs(TA_GlyphLoader loader) { TA_GlyphLoad base = &loader->base; TA_GlyphLoad current = &loader->current; current->subglyphs = base->subglyphs + base->num_subglyphs; } /* ensure that we can add `n_points' and `n_contours' to our glyph -- */ /* this function reallocates its outline tables if necessary, */ /* but it DOESN'T change the number of points within the loader */ FT_Error TA_GlyphLoader_CheckPoints(TA_GlyphLoader loader, FT_UInt n_points, FT_UInt n_contours) { FT_Outline* base = &loader->base.outline; FT_Outline* current = &loader->current.outline; FT_Bool adjust = 0; FT_UInt new_max, old_max; /* check points & tags */ new_max = (FT_UInt)base->n_points + (FT_UInt)current->n_points + n_points; old_max = loader->max_points; if (new_max > old_max) { FT_Vector* points_new; char* tags_new; new_max = TA_PAD_CEIL(new_max, 8); if (new_max > FT_OUTLINE_POINTS_MAX) return FT_Err_Array_Too_Large; points_new = (FT_Vector*)realloc(base->points, new_max * sizeof (FT_Vector)); if (!points_new) return FT_Err_Out_Of_Memory; base->points = points_new; tags_new = (char*)realloc(base->tags, new_max * sizeof (char)); if (!tags_new) return FT_Err_Out_Of_Memory; base->tags = tags_new; if (loader->use_extra) { FT_Vector* extra_points_new; extra_points_new = (FT_Vector*)realloc(loader->base.extra_points, new_max * 2 * sizeof (FT_Vector)); if (!extra_points_new) return FT_Err_Out_Of_Memory; loader->base.extra_points = extra_points_new; memmove(loader->base.extra_points + new_max, loader->base.extra_points + old_max, old_max * sizeof (FT_Vector)); loader->base.extra_points2 = loader->base.extra_points + new_max; } adjust = 1; loader->max_points = new_max; } /* check contours */ old_max = loader->max_contours; new_max = (FT_UInt)base->n_contours + (FT_UInt)current->n_contours + n_contours; if (new_max > old_max) { short* contours_new; new_max = TA_PAD_CEIL(new_max, 4); if (new_max > FT_OUTLINE_CONTOURS_MAX) return FT_Err_Array_Too_Large; contours_new = (short*)realloc(base->contours, new_max * sizeof (short)); if (!contours_new) return FT_Err_Out_Of_Memory; base->contours = contours_new; adjust = 1; loader->max_contours = new_max; } if (adjust) TA_GlyphLoader_Adjust_Points(loader); return FT_Err_Ok; } /* ensure that we can add `n_subglyphs' to our glyph -- */ /* this function reallocates its subglyphs table if necessary, */ /* but it DOES NOT change the number of subglyphs within the loader */ FT_Error TA_GlyphLoader_CheckSubGlyphs(TA_GlyphLoader loader, FT_UInt n_subs) { FT_UInt new_max, old_max; TA_GlyphLoad base = &loader->base; TA_GlyphLoad current = &loader->current; new_max = base->num_subglyphs + current->num_subglyphs + n_subs; old_max = loader->max_subglyphs; if (new_max > old_max) { TA_SubGlyph subglyphs_new; new_max = TA_PAD_CEIL(new_max, 2); subglyphs_new = (TA_SubGlyph)realloc(base->subglyphs, new_max * sizeof (TA_SubGlyphRec)); if (!subglyphs_new) return FT_Err_Out_Of_Memory; base->subglyphs = subglyphs_new; loader->max_subglyphs = new_max; TA_GlyphLoader_Adjust_Subglyphs(loader); } return FT_Err_Ok; } /* prepare loader for the addition of a new glyph on top of the base one */ void TA_GlyphLoader_Prepare(TA_GlyphLoader loader) { TA_GlyphLoad current = &loader->current; current->outline.n_points = 0; current->outline.n_contours = 0; current->num_subglyphs = 0; TA_GlyphLoader_Adjust_Points (loader); TA_GlyphLoader_Adjust_Subglyphs(loader); } /* add current glyph to the base image -- and prepare for another */ void TA_GlyphLoader_Add(TA_GlyphLoader loader) { TA_GlyphLoad base; TA_GlyphLoad current; FT_Int n_curr_contours; FT_Int n_base_points; FT_Int n; if (!loader) return; base = &loader->base; current = &loader->current; n_curr_contours = current->outline.n_contours; n_base_points = base->outline.n_points; base->outline.n_points = (short)(base->outline.n_points + current->outline.n_points); base->outline.n_contours = (short)(base->outline.n_contours + current->outline.n_contours); base->num_subglyphs += current->num_subglyphs; /* adjust contours count in newest outline */ for (n = 0; n < n_curr_contours; n++) current->outline.contours[n] = (short)(current->outline.contours[n] + n_base_points); /* prepare for another new glyph image */ TA_GlyphLoader_Prepare(loader); } FT_Error TA_GlyphLoader_CopyPoints(TA_GlyphLoader target, TA_GlyphLoader source) { FT_Error error; FT_UInt num_points = (FT_UInt)source->base.outline.n_points; FT_UInt num_contours = (FT_UInt)source->base.outline.n_contours; error = TA_GlyphLoader_CheckPoints(target, num_points, num_contours); if (!error) { FT_Outline* out = &target->base.outline; FT_Outline* in = &source->base.outline; memcpy(out->points, in->points, num_points * sizeof (FT_Vector)); memcpy(out->contours, in->contours, num_contours * sizeof (short)); memcpy(out->tags, in->tags, num_points * sizeof (char)); /* do we need to copy the extra points? */ if (target->use_extra && source->use_extra) { memcpy(target->base.extra_points, source->base.extra_points, num_points * sizeof (FT_Vector)); memcpy(target->base.extra_points2, source->base.extra_points2, num_points * sizeof (FT_Vector)); } out->n_points = (short)num_points; out->n_contours = (short)num_contours; TA_GlyphLoader_Adjust_Points(target); } return error; } /* end of tagloadr.c */ ttfautohint-1.8.1/lib/tagloadr.h0000644000175000001440000000677413153174711016470 0ustar00wlusers00000000000000/* tagloadr.h */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `ftgloadr.h' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #ifndef TAGLOADR_H_ #define TAGLOADR_H_ #include #include FT_FREETYPE_H #ifdef __cplusplus extern "C" { #endif typedef struct TA_SubGlyphRec_ { FT_Int index; FT_UShort flags; FT_Int arg1; FT_Int arg2; FT_Matrix transform; } TA_SubGlyphRec, *TA_SubGlyph; typedef struct TA_GlyphLoadRec_ { FT_Outline outline; /* outline */ FT_Vector* extra_points; /* extra points table */ FT_Vector* extra_points2; /* second extra points table */ FT_UInt num_subglyphs; /* number of subglyphs */ TA_SubGlyph subglyphs; /* subglyphs */ } TA_GlyphLoadRec, *TA_GlyphLoad; typedef struct TA_GlyphLoaderRec_ { FT_UInt max_points; FT_UInt max_contours; FT_UInt max_subglyphs; FT_Bool use_extra; TA_GlyphLoadRec base; TA_GlyphLoadRec current; } TA_GlyphLoaderRec, *TA_GlyphLoader; /* create new empty glyph loader */ FT_Error TA_GlyphLoader_New(TA_GlyphLoader *aloader); /* add an extra points table to a glyph loader */ FT_Error TA_GlyphLoader_CreateExtra(TA_GlyphLoader loader); /* destroy a glyph loader */ void TA_GlyphLoader_Done(TA_GlyphLoader loader); /* reset a glyph loader (frees everything int it) */ void TA_GlyphLoader_Reset(TA_GlyphLoader loader); /* rewind a glyph loader */ void TA_GlyphLoader_Rewind(TA_GlyphLoader loader); /* check that there is enough space to add */ /* `n_points' and `n_contours' to the glyph loader */ FT_Error TA_GlyphLoader_CheckPoints(TA_GlyphLoader loader, FT_UInt n_points, FT_UInt n_contours); #define TA_GLYPHLOADER_CHECK_P(_loader, _count) \ ((_count) == 0 \ || ((FT_UInt)(_loader)->base.outline.n_points \ + (FT_UInt)(_loader)->current.outline.n_points \ + (FT_UInt)(_count)) <= (_loader)->max_points) #define TA_GLYPHLOADER_CHECK_C(_loader, _count) \ ((_count) == 0 \ || ((FT_UInt)(_loader)->base.outline.n_contours \ + (FT_UInt)(_loader)->current.outline.n_contours \ + (FT_UInt)(_count)) <= (_loader)->max_contours) #define TA_GLYPHLOADER_CHECK_POINTS(_loader, _points, _contours) \ ((TA_GLYPHLOADER_CHECK_P(_loader, _points) \ && TA_GLYPHLOADER_CHECK_C(_loader, _contours)) \ ? 0 \ : TA_GlyphLoader_CheckPoints((_loader), \ (FT_UInt)(_points), \ (FT_UInt)(_contours))) /* check that there is enough space to add */ /* `n_subs' sub-glyphs to a glyph loader */ FT_Error TA_GlyphLoader_CheckSubGlyphs(TA_GlyphLoader loader, FT_UInt n_subs); /* prepare a glyph loader, i.e. empty the current glyph */ void TA_GlyphLoader_Prepare(TA_GlyphLoader loader); /* add the current glyph to the base glyph */ void TA_GlyphLoader_Add(TA_GlyphLoader loader); /* copy points from one glyph loader to another */ FT_Error TA_GlyphLoader_CopyPoints(TA_GlyphLoader target, TA_GlyphLoader source); #ifdef __cplusplus } #endif #endif /* TAGLOADR_H_ */ /* end of tagloadr.h */ ttfautohint-1.8.1/lib/taglobal.c0000644000175000001440000003653613153174711016452 0ustar00wlusers00000000000000/* taglobal.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afglobal.c' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #include #include "taglobal.h" #include "taranges.h" #undef SCRIPT #define SCRIPT(s, S, d, h, H, ss) \ const TA_ScriptClassRec ta_ ## s ## _script_class = \ { \ TA_SCRIPT_ ## S, \ ta_ ## s ## _uniranges, \ ta_ ## s ## _nonbase_uniranges, \ TA_ ## H, \ ss \ }; #include #undef STYLE #define STYLE(s, S, d, ws, sc, ss, c) \ const TA_StyleClassRec ta_ ## s ## _style_class = \ { \ TA_STYLE_ ## S, \ ws, \ sc, \ ss, \ c \ }; #include "tastyles.h" /* get writing system specific header files */ #undef WRITING_SYSTEM #define WRITING_SYSTEM(ws, WS) /* empty */ #include "tawrtsys.h" #undef WRITING_SYSTEM #define WRITING_SYSTEM(ws, WS) \ &ta_ ## ws ## _writing_system_class, TA_WritingSystemClass const ta_writing_system_classes[] = { #include "tawrtsys.h" NULL /* do not remove */ }; #undef SCRIPT #define SCRIPT(s, S, d, h, H, ss) \ &ta_ ## s ## _script_class, TA_ScriptClass const ta_script_classes[] = { #include NULL /* do not remove */ }; #undef STYLE #define STYLE(s, S, d, ws, sc, ss, c) \ &ta_ ## s ## _style_class, TA_StyleClass const ta_style_classes[] = { #include "tastyles.h" NULL /* do not remove */ }; #ifdef TA_DEBUG #undef STYLE #define STYLE(s, S, d, ws, sc, ss, c) #s, const char* ta_style_names[] = { #include }; #endif /* TA_DEBUG */ /* Recursively assign a style to all components of a composite glyph. */ static FT_Error ta_face_globals_scan_composite(FT_Face face, FT_Long gindex, FT_UShort gstyle, FT_UShort* gstyles, FT_Int nesting_level) { FT_Error error; FT_UInt i; FT_GlyphSlot glyph; FT_Int* subglyph_indices = NULL; FT_UInt used_subglyphs; FT_Int p_index; FT_UInt p_flags; FT_Int p_arg1; FT_Int p_arg2; FT_Matrix p_transform; /* limit recursion arbitrarily */ if (nesting_level > 100) return FT_Err_Invalid_Table; error = FT_Load_Glyph(face, (FT_UInt)gindex, FT_LOAD_NO_RECURSE); if (error) return error; glyph = face->glyph; /* in FreeType < 2.5.4, FT_Get_SubGlyph_Info always returns an error */ /* due to a bug even if the call was successful; */ /* for this reason we do the argument checking by ourselves */ /* and ignore the returned error code of FT_Get_SubGlyph_Info */ if (!glyph->subglyphs || glyph->format != FT_GLYPH_FORMAT_COMPOSITE) return FT_Err_Ok; /* since a call to FT_Load_Glyph changes `glyph', */ /* we have to first store the subglyph indices, then do the recursion */ subglyph_indices = (FT_Int*)malloc(sizeof (FT_Int) * glyph->num_subglyphs); if (!subglyph_indices) return FT_Err_Out_Of_Memory; used_subglyphs = 0; for (i = 0; i < glyph->num_subglyphs; i++) { (void)FT_Get_SubGlyph_Info(glyph, i, &p_index, &p_flags, &p_arg1, &p_arg2, &p_transform); if (p_index >= face->num_glyphs || (gstyles[p_index] & TA_STYLE_MASK) != TA_STYLE_UNASSIGNED) continue; /* only take subglyphs that are not shifted vertically; */ /* otherwise blue zones don't fit */ if (p_flags & ARGS_ARE_XY_VALUES && p_arg2 == 0) { gstyles[p_index] = gstyle; subglyph_indices[used_subglyphs++] = p_index; } } /* recurse */ for (i = 0; i < used_subglyphs; i++) { error = ta_face_globals_scan_composite(face, subglyph_indices[i], gstyle, gstyles, nesting_level + 1); if (error) break; } free(subglyph_indices); return error; } /* Compute the style index of each glyph within a given face. */ static FT_Error ta_face_globals_compute_style_coverage(TA_FaceGlobals globals) { FT_Error error; FT_Face face = globals->face; FT_CharMap old_charmap = face->charmap; FT_UShort* gstyles = globals->glyph_styles; FT_UInt ss; FT_UInt i; FT_UInt dflt = ~0U; /* a non-valid value */ /* the value TA_STYLE_UNASSIGNED means `uncovered glyph' */ for (i = 0; i < (unsigned int)globals->glyph_count; i++) gstyles[i] = TA_STYLE_UNASSIGNED; error = FT_Select_Charmap(face, FT_ENCODING_UNICODE); if (error) { /* ignore this error; we simply use the fallback style */ /* XXX: Shouldn't we rather disable hinting? */ error = FT_Err_Ok; goto Exit; } /* scan each style in a Unicode charmap */ for (ss = 0; ta_style_classes[ss]; ss++) { TA_StyleClass style_class = ta_style_classes[ss]; FT_UInt* sample_glyph = &globals->sample_glyphs[ss]; TA_ScriptClass script_class = ta_script_classes[style_class->script]; TA_Script_UniRange range; if (!script_class->script_uni_ranges->first) continue; /* scan all Unicode points in the range and */ /* set the corresponding glyph style index */ if (style_class->coverage == TA_COVERAGE_DEFAULT) { if ((FT_UInt)style_class->script == globals->font->default_script) dflt = ss; for (range = script_class->script_uni_ranges; range->first != 0; range++) { FT_ULong charcode = range->first; FT_UInt gindex; gindex = FT_Get_Char_Index(face, charcode); if (gindex != 0 && gindex < (FT_ULong)globals->glyph_count && (gstyles[gindex] & TA_STYLE_MASK) == TA_STYLE_UNASSIGNED) { gstyles[gindex] = (FT_UShort)ss; if (!*sample_glyph) *sample_glyph = gindex; } for (;;) { charcode = FT_Get_Next_Char(face, charcode, &gindex); if (gindex == 0 || charcode > range->last) break; if (gindex < (FT_ULong)globals->glyph_count && (gstyles[gindex] & TA_STYLE_MASK) == TA_STYLE_UNASSIGNED) { gstyles[gindex] = (FT_UShort)ss; if (!*sample_glyph) *sample_glyph = gindex; } } } /* do the same for the script's non-base characters */ for (range = script_class->script_uni_nonbase_ranges; range->first != 0; range++) { FT_ULong charcode = range->first; FT_UInt gindex; gindex = FT_Get_Char_Index(face, charcode); if (gindex != 0 && gindex < (FT_ULong)globals->glyph_count && (gstyles[gindex] & TA_STYLE_MASK) == (FT_UShort)ss) { gstyles[gindex] |= TA_NONBASE; if (!*sample_glyph) *sample_glyph = gindex; } for (;;) { charcode = FT_Get_Next_Char(face, charcode, &gindex); if (gindex == 0 || charcode > range->last) break; if (gindex < (FT_ULong)globals->glyph_count && (gstyles[gindex] & TA_STYLE_MASK) == (FT_UShort)ss) { gstyles[gindex] |= TA_NONBASE; if (!*sample_glyph) *sample_glyph = gindex; } } } } else { /* get glyphs not directly addressable by cmap */ ta_shaper_get_coverage(globals, style_class, gstyles, sample_glyph, 0); } } /* handle the remaining default OpenType features ... */ for (ss = 0; ta_style_classes[ss]; ss++) { TA_StyleClass style_class = ta_style_classes[ss]; FT_UInt* sample_glyph = &globals->sample_glyphs[ss]; if (style_class->coverage == TA_COVERAGE_DEFAULT) ta_shaper_get_coverage(globals, style_class, gstyles, sample_glyph, 0); } /* ... and finally the default OpenType features of the default script */ ta_shaper_get_coverage(globals, ta_style_classes[dflt], gstyles, &globals->sample_glyphs[dflt], 1); /* mark ASCII digits */ for (i = 0x30; i <= 0x39; i++) { FT_UInt gindex = FT_Get_Char_Index(face, i); if (gindex != 0 && gindex < (FT_ULong)globals->glyph_count) gstyles[gindex] |= TA_DIGIT; } /* now walk over all glyphs and check for composites: */ /* since subglyphs are hinted separately if option `hint-composites' */ /* isn't set, we have to tag them with style indices, too */ { FT_Long nn; /* no need for updating `sample_glyphs'; */ /* the composite itself is certainly a valid sample glyph */ for (nn = 0; nn < globals->glyph_count; nn++) { if ((gstyles[nn] & TA_STYLE_MASK) == TA_STYLE_UNASSIGNED) continue; error = ta_face_globals_scan_composite(globals->face, nn, gstyles[nn], gstyles, 0); if (error) return error; } } Exit: /* by default, all uncovered glyphs are set to the fallback style */ /* XXX: Shouldn't we disable hinting or do something similar? */ if (globals->font->fallback_style != (TA_Style)TA_STYLE_UNASSIGNED) { FT_Long nn; for (nn = 0; nn < globals->glyph_count; nn++) { if ((gstyles[nn] & TA_STYLE_MASK) == TA_STYLE_UNASSIGNED) { gstyles[nn] &= ~TA_STYLE_MASK; gstyles[nn] |= globals->font->fallback_style; } } } #ifdef TA_DEBUG if (face->num_faces > 1) TA_LOG_GLOBAL(("\n" "style coverage (subfont %d, glyf table index %d)\n" "================================================\n" "\n", face->face_index, globals->font->sfnts[face->face_index].glyf_idx)); else TA_LOG_GLOBAL(("\n" "style coverage\n" "==============\n" "\n")); for (ss = 0; ta_style_classes[ss]; ss++) { TA_StyleClass style_class = ta_style_classes[ss]; FT_UInt count = 0; FT_Long idx; TA_LOG_GLOBAL(("%s:\n", ta_style_names[style_class->style])); for (idx = 0; idx < globals->glyph_count; idx++) { if ((gstyles[idx] & TA_STYLE_MASK) == style_class->style) { if (!(count % 10)) TA_LOG_GLOBAL((" ")); TA_LOG_GLOBAL((" %d", idx)); count++; if (!(count % 10)) TA_LOG_GLOBAL(("\n")); } } if (!count) TA_LOG_GLOBAL((" (none)\n")); if (count % 10) TA_LOG_GLOBAL(("\n")); } #endif /* TA_DEBUG */ FT_Set_Charmap(face, old_charmap); return error; } FT_Error ta_face_globals_new(FT_Face face, TA_FaceGlobals *aglobals, FONT* font) { FT_Error error; TA_FaceGlobals globals; /* we allocate an TA_FaceGlobals structure together */ /* with the glyph_styles array */ globals = (TA_FaceGlobals)calloc( 1, sizeof (TA_FaceGlobalsRec) + (FT_ULong)face->num_glyphs * sizeof (FT_UShort)); if (!globals) { error = FT_Err_Out_Of_Memory; goto Err; } globals->face = face; globals->glyph_count = face->num_glyphs; /* right after the globals structure come the glyph styles */ globals->glyph_styles = (FT_UShort*)(globals + 1); globals->font = font; globals->hb_font = hb_ft_font_create(face, NULL); globals->hb_buf = hb_buffer_create(); error = ta_face_globals_compute_style_coverage(globals); if (error) { ta_face_globals_free(globals); globals = NULL; } else globals->increase_x_height = TA_PROP_INCREASE_X_HEIGHT_MAX; Err: *aglobals = globals; return error; } void ta_face_globals_free(TA_FaceGlobals globals) { if (globals) { FT_UInt nn; for (nn = 0; nn < TA_STYLE_MAX; nn++) { if (globals->metrics[nn]) { TA_StyleClass style_class = ta_style_classes[nn]; TA_WritingSystemClass writing_system_class = ta_writing_system_classes[style_class->writing_system]; if (writing_system_class->style_metrics_done) writing_system_class->style_metrics_done(globals->metrics[nn]); free(globals->metrics[nn]); } } hb_font_destroy(globals->hb_font); hb_buffer_destroy(globals->hb_buf); /* no need to free `globals->glyph_styles'; */ /* it is part of the `globals' array */ free(globals); } } FT_Error ta_face_globals_get_metrics(TA_FaceGlobals globals, FT_UInt gindex, FT_UInt options, TA_StyleMetrics *ametrics) { TA_StyleMetrics metrics = NULL; TA_Style style = (TA_Style)options; TA_WritingSystemClass writing_system_class; TA_StyleClass style_class; FT_Error error = FT_Err_Ok; if (gindex >= (FT_ULong)globals->glyph_count) { error = FT_Err_Invalid_Argument; goto Exit; } /* if we have a forced style (via `options'), use it, */ /* otherwise look into `glyph_styles' array */ if (style == TA_STYLE_NONE_DFLT || style + 1 >= TA_STYLE_MAX) style = (TA_Style)(globals->glyph_styles[gindex] & TA_STYLE_UNASSIGNED); style_class = ta_style_classes[style]; writing_system_class = ta_writing_system_classes[style_class->writing_system]; metrics = globals->metrics[style]; if (!metrics) { /* create the global metrics object if necessary */ metrics = (TA_StyleMetrics) calloc(1, writing_system_class->style_metrics_size); if (!metrics) { error = FT_Err_Out_Of_Memory; goto Exit; } metrics->style_class = style_class; metrics->globals = globals; if (writing_system_class->style_metrics_init) { error = writing_system_class->style_metrics_init( metrics, globals->face, globals->font->reference); if (error) { if (writing_system_class->style_metrics_done) writing_system_class->style_metrics_done(metrics); free(metrics); metrics = NULL; goto Exit; } } globals->metrics[style] = metrics; } Exit: *ametrics = metrics; return error; } FT_Bool ta_face_globals_is_digit(TA_FaceGlobals globals, FT_UInt gindex) { if (gindex < (FT_ULong)globals->glyph_count) return (FT_Bool)(globals->glyph_styles[gindex] & TA_DIGIT); return (FT_Bool)0; } /* end of taglobal.c */ ttfautohint-1.8.1/lib/taglobal.h0000644000175000001440000000614413153174711016447 0ustar00wlusers00000000000000/* taglobal.h */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afglobal.h' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #ifndef TAGLOBAL_H_ #define TAGLOBAL_H_ #include "ta.h" #include "tatypes.h" #include "tashaper.h" extern TA_WritingSystemClass const ta_writing_system_classes[]; #undef SCRIPT #define SCRIPT(s, S, d, h, H, ss) \ extern const TA_ScriptClassRec ta_ ## s ## _script_class; #include "ttfautohint-scripts.h" extern TA_ScriptClass const ta_script_classes[]; #undef STYLE #define STYLE(s, S, d, ws, sc, ss, c) \ extern const TA_StyleClassRec ta_ ## s ## _style_class; #include "tastyles.h" extern TA_StyleClass const ta_style_classes[]; #ifdef TA_DEBUG extern const char* ta_style_names[]; #endif /* Default values and flags for both autofitter globals */ /* (originally found in AF_ModuleRec, we use FONT instead) */ /* and face globals (in TA_FaceGlobalsRec). */ /* index of fallback style in `ta_style_classes' */ #define TA_STYLE_FALLBACK TA_STYLE_NONE_DFLT /* default script for OpenType */ #define TA_SCRIPT_DEFAULT TA_SCRIPT_LATN /* a bit mask for TA_DIGIT and TA_NONBASE */ #define TA_STYLE_MASK 0x3FFF /* an uncovered glyph */ #define TA_STYLE_UNASSIGNED TA_STYLE_MASK /* if this flag is set, we have an ASCII digit */ #define TA_DIGIT 0x8000U /* if this flag is set, we have a non-base character */ #define TA_NONBASE 0x4000U /* `increase-x-height' property */ #define TA_PROP_INCREASE_X_HEIGHT_MIN 6 #define TA_PROP_INCREASE_X_HEIGHT_MAX 0 /* note that glyph_styles[] maps each glyph to an index into the */ /* `ta_style_classes' array. */ typedef struct TA_FaceGlobalsRec_ { FT_Face face; FT_Long glyph_count; /* same as face->num_glyphs */ FT_UShort* glyph_styles; hb_font_t* hb_font; hb_buffer_t* hb_buf; /* for feature comparison */ /* per-face auto-hinter properties */ FT_UInt increase_x_height; TA_StyleMetrics metrics[TA_STYLE_MAX]; FT_UInt sample_glyphs[TA_STYLE_MAX]; /* per-style sample glyph indices */ FONT* font; /* to access global properties */ } TA_FaceGlobalsRec; /* this models the global hints data for a given face, */ /* decomposed into style-specific items */ FT_Error ta_face_globals_new(FT_Face face, TA_FaceGlobals *aglobals, FONT* font); FT_Error ta_face_globals_get_metrics(TA_FaceGlobals globals, FT_UInt gindex, FT_UInt options, TA_StyleMetrics *ametrics); void ta_face_globals_free(TA_FaceGlobals globals); FT_Bool ta_face_globals_is_digit(TA_FaceGlobals globals, FT_UInt gindex); #endif /* TAGLOBAL_H_ */ /* end of taglobal.h */ ttfautohint-1.8.1/lib/taglyf.c0000644000175000001440000010244313153174711016142 0ustar00wlusers00000000000000/* taglyf.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" static FT_Error TA_sfnt_build_glyf_hints(SFNT* sfnt, FONT* font) { SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; FT_Long idx; FT_Error error; FT_UShort loop_count; /* this loop doesn't include the artificial `.ttfautohint' glyph */ loop_count = data->num_glyphs; if (sfnt->max_components && font->hint_composites) loop_count--; for (idx = 0; idx < loop_count; idx++) { error = TA_sfnt_build_glyph_instructions(sfnt, font, idx); if (error) return error; if (font->progress) { FT_Int ret; ret = font->progress(idx, loop_count, sfnt - font->sfnts, font->num_sfnts, font->progress_data); if (ret) return TA_Err_Canceled; } } return FT_Err_Ok; } static FT_Error TA_glyph_get_components(GLYPH* glyph, FT_Byte* buf, FT_ULong len) { FT_UShort flags; FT_UShort component; FT_UShort* components_new; FT_Byte* p; FT_Byte* endp; p = buf; endp = buf + len; /* skip header */ p += 10; /* walk over component records */ do { if (p + 4 > endp) return FT_Err_Invalid_Table; flags = NEXT_USHORT(p); /* add component to list */ component = NEXT_USHORT(p); glyph->num_components++; components_new = (FT_UShort*)realloc(glyph->components, glyph->num_components * sizeof (FT_UShort)); if (!components_new) { glyph->num_components--; return FT_Err_Out_Of_Memory; } else glyph->components = components_new; glyph->components[glyph->num_components - 1] = component; /* skip scaling and offset arguments */ if (flags & ARGS_ARE_WORDS) p += 4; else p += 2; if (flags & WE_HAVE_A_SCALE) p += 2; else if (flags & WE_HAVE_AN_XY_SCALE) p += 4; else if (flags & WE_HAVE_A_2X2) p += 8; } while (flags & MORE_COMPONENTS); return TA_Err_Ok; } static FT_Error TA_glyph_parse_composite(GLYPH* glyphs, FT_UShort idx, FT_Byte* buf, FT_ULong len, FT_UShort num_glyphs, FT_Bool hint_composites) { GLYPH* glyph = &glyphs[idx]; FT_ULong flags_offset; /* after the loop, this is the offset */ /* to the last element in the flags array */ FT_UShort flags; FT_Byte* p; FT_Byte* q; FT_UShort* curr_component; FT_UShort curr_num_points; /* we allocate too large a buffer */ /* (including space for the new component */ /* and possible argument size changes for shifted point indices) */ /* and reallocate it later to its real size */ glyph->buf = (FT_Byte*)malloc(len + 8 + glyph->num_components * 2); if (!glyph->buf) return FT_Err_Out_Of_Memory; p = buf; q = glyph->buf; /* copy header */ memcpy(q, p, 10); p += 10; q += 10; /* if the composite glyph contains one or more contours, */ /* we prepend a composite glyph component to call some bytecode */ /* which eventually becomes the last glyph in the `glyf' table; */ /* for convenience, however, it is not added to the `components' array */ /* (doing so simplifies the conversion of point indices later on) */ if (glyph->num_composite_contours && hint_composites) { FT_Short x_min; FT_Short x_max; FT_Short y_min; FT_Short y_max; FT_Short x_offset; FT_Short y_offset; /* the composite glyph's bounding box */ x_min = (FT_Short)((buf[2] << 8) + buf[3]); y_min = (FT_Short)((buf[4] << 8) + buf[5]); x_max = (FT_Short)((buf[6] << 8) + buf[7]); y_max = (FT_Short)((buf[8] << 8) + buf[9]); /* use ARGS_ARE_WORDS only if necessary; */ /* note that the offset value of the component doesn't matter */ /* as long as it stays within the bounding box */ if (x_min <= 0 && x_max >= 0) x_offset = 0; else if (x_max < 0) x_offset = x_max; else x_offset = x_min; if (y_min <= 0 && y_max >= 0) y_offset = 0; else if (y_max < 0) y_offset = y_max; else y_offset = y_min; if (x_offset >= -128 && x_offset <= 127 && y_offset >= -128 && y_offset <= 127) { *(q++) = 0x00; *(q++) = ARGS_ARE_XY_VALUES | MORE_COMPONENTS; *(q++) = HIGH(num_glyphs - 1); *(q++) = LOW(num_glyphs - 1); *(q++) = (FT_Byte)x_offset; *(q++) = (FT_Byte)y_offset; } else { *(q++) = 0x00; *(q++) = ARGS_ARE_WORDS | ARGS_ARE_XY_VALUES | MORE_COMPONENTS; *(q++) = HIGH(num_glyphs - 1); *(q++) = LOW(num_glyphs - 1); *(q++) = HIGH(x_offset); *(q++) = LOW(x_offset); *(q++) = HIGH(y_offset); *(q++) = LOW(y_offset); } } curr_component = glyph->components; curr_num_points = 0; /* walk over component records */ do { flags_offset = (FT_ULong)(q - glyph->buf); *(q++) = *p; *(q++) = *(p + 1); flags = NEXT_USHORT(p); /* copy component */ *(q++) = *(p++); *(q++) = *(p++); if (flags & ARGS_ARE_XY_VALUES) { /* copy offsets */ *(q++) = *(p++); *(q++) = *(p++); if (flags & ARGS_ARE_WORDS) { *(q++) = *(p++); *(q++) = *(p++); } } else { /* handle point numbers */ FT_UShort arg1; FT_UShort arg2; FT_UShort idx2; FT_UShort i; FT_UShort j; if (flags & ARGS_ARE_WORDS) { arg1 = *(p++) >> 8; arg1 += *(p++); arg2 = *(p++) >> 8; arg2 += *(p++); } else { arg1 = *(p++); arg2 = *(p++); } curr_num_points += glyphs[*curr_component++].num_points; /* compute the point index of arg2 after adding the subglyph */ idx2 = curr_num_points + arg2; /* adjust point indices */ /* (see `TA_adjust_point_index' in `tabytecode.c' for more) */ for (i = 0; i < glyph->num_pointsums; i++) if (arg1 < glyph->pointsums[i]) break; arg1 += i; for (j = 0; j < glyph->num_pointsums; j++) if (idx2 < glyph->pointsums[j]) break; arg2 += j - i; if (arg1 <= 0xFF && arg2 <= 0xFF) { glyph->buf[flags_offset + 1] &= ~ARGS_ARE_WORDS; *(q++) = (FT_Byte)arg1; *(q++) = (FT_Byte)arg2; } else { glyph->buf[flags_offset + 1] |= ARGS_ARE_WORDS; *(q++) = HIGH(arg1); *(q++) = LOW(arg1); *(q++) = HIGH(arg2); *(q++) = LOW(arg2); } } /* copy scaling arguments */ if (flags & (WE_HAVE_A_SCALE | WE_HAVE_AN_XY_SCALE | WE_HAVE_A_2X2)) { *(q++) = *(p++); *(q++) = *(p++); } if (flags & (WE_HAVE_AN_XY_SCALE | WE_HAVE_A_2X2)) { *(q++) = *(p++); *(q++) = *(p++); } if (flags & WE_HAVE_A_2X2) { *(q++) = *(p++); *(q++) = *(p++); *(q++) = *(p++); *(q++) = *(p++); } } while (flags & MORE_COMPONENTS); glyph->len1 = (FT_ULong)(q - glyph->buf); /* glyph->len2 = 0; */ glyph->flags_offset = flags_offset; glyph->buf = (FT_Byte*)realloc(glyph->buf, glyph->len1); /* we discard instructions (if any) */ glyph->buf[glyph->flags_offset] &= ~(WE_HAVE_INSTR >> 8); return TA_Err_Ok; } static FT_Error TA_glyph_parse_simple(GLYPH* glyph, FT_Byte* buf, FT_ULong len, FT_Bool dehint) { FT_ULong ins_offset; FT_Byte* flags_start; FT_UShort num_ins; FT_ULong flags_size; /* size of the flags array */ FT_ULong xy_size; /* size of x and y coordinate arrays together */ FT_Byte* p; FT_Byte* endp; FT_UShort i; p = buf; endp = buf + len; ins_offset = 10 + (FT_ULong)glyph->num_contours * 2; p += ins_offset; if (p + 2 > endp) return FT_Err_Invalid_Table; /* get number of instructions */ num_ins = NEXT_USHORT(p); /* assure that we don't process a font */ /* which already contains a `.ttfautohint' glyph */ /* (a font with a `post' table version 3.0 doesn't contain glyph names, */ /* so we have to check it this way) */ if (glyph->num_points == 1 && num_ins >= sizeof (ttfautohint_glyph_bytecode) && !dehint) { if (!strncmp((char*)p, (char*)ttfautohint_glyph_bytecode, sizeof (ttfautohint_glyph_bytecode))) return TA_Err_Already_Processed; } p += num_ins; if (p > endp) return FT_Err_Invalid_Table; flags_start = p; xy_size = 0; i = 0; while (i < glyph->num_points) { FT_Byte flags; FT_Byte x_short; FT_Byte y_short; FT_Byte have_x; FT_Byte have_y; FT_UInt count; if (p + 1 > endp) return FT_Err_Invalid_Table; flags = *(p++); x_short = (flags & X_SHORT_VECTOR) ? 1 : 2; y_short = (flags & Y_SHORT_VECTOR) ? 1 : 2; have_x = ((flags & SAME_X) && !(flags & X_SHORT_VECTOR)) ? 0 : 1; have_y = ((flags & SAME_Y) && !(flags & Y_SHORT_VECTOR)) ? 0 : 1; count = 1; if (flags & REPEAT) { if (p + 1 > endp) return FT_Err_Invalid_Table; count += *(p++); if (i + count > glyph->num_points) return FT_Err_Invalid_Table; } xy_size += count * x_short * have_x; xy_size += count * y_short * have_y; i += count; } if (p + xy_size > endp) return FT_Err_Invalid_Table; flags_size = (FT_ULong)(p - flags_start); /* store the data before and after the bytecode instructions */ /* in the same array */ glyph->len1 = ins_offset; glyph->len2 = flags_size + xy_size; glyph->buf = (FT_Byte*)malloc(glyph->len1 + glyph->len2); if (!glyph->buf) return FT_Err_Out_Of_Memory; /* now copy everything but the instructions */ memcpy(glyph->buf, buf, glyph->len1); memcpy(glyph->buf + glyph->len1, flags_start, glyph->len2); return TA_Err_Ok; } static FT_Error TA_iterate_composite_glyph(glyf_Data* data, FT_UShort* components, FT_UShort num_components, FT_UShort** pointsums, FT_UShort* num_pointsums, FT_UShort* num_composite_contours, FT_UShort* num_composite_points) { FT_UShort* pointsums_new; FT_UShort i; /* save current state */ if (*num_pointsums == 0xFFFF) return FT_Err_Invalid_Table; (*num_pointsums)++; pointsums_new = (FT_UShort*)realloc(*pointsums, *num_pointsums * sizeof (FT_UShort)); if (!pointsums_new) { (*num_pointsums)--; return FT_Err_Out_Of_Memory; } else *pointsums = pointsums_new; (*pointsums)[*num_pointsums - 1] = *num_composite_points; for (i = 0; i < num_components; i++) { GLYPH* glyph; FT_UShort component = components[i]; FT_Error error; if (component >= data->num_glyphs) return FT_Err_Invalid_Table; glyph = &data->glyphs[component]; if (glyph->num_components) { error = TA_iterate_composite_glyph(data, glyph->components, glyph->num_components, pointsums, num_pointsums, num_composite_contours, num_composite_points); if (error) return error; } else { /* no need for checking overflow of the number of contours */ /* since the number of points is always larger or equal */ if (*num_composite_points > 0xFFFF - glyph->num_points) return FT_Err_Invalid_Table; *num_composite_contours += glyph->num_contours; *num_composite_points += glyph->num_points; } } return TA_Err_Ok; } static FT_Error TA_sfnt_compute_composite_pointsums(SFNT* sfnt, FONT* font) { SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; FT_UShort i; for (i = 0; i < data->num_glyphs; i++) { GLYPH* glyph = &data->glyphs[i]; if (glyph->num_components) { FT_Error error; FT_UShort num_composite_contours = 0; FT_UShort num_composite_points = 0; error = TA_iterate_composite_glyph(data, glyph->components, glyph->num_components, &glyph->pointsums, &glyph->num_pointsums, &num_composite_contours, &num_composite_points); if (error) return error; glyph->num_composite_contours = num_composite_contours; /* we set the number of points (after expanding all subglyphs) */ /* for composite glyphs also */ glyph->num_points = num_composite_points; if (font->hint_composites) { /* update maximum values, */ /* including the subglyphs not in `components' array */ /* (each of them has a single point in a single contour) */ if (num_composite_points + glyph->num_pointsums > sfnt->max_composite_points) sfnt->max_composite_points = num_composite_points + glyph->num_pointsums; if (num_composite_contours + glyph->num_pointsums > sfnt->max_composite_contours) sfnt->max_composite_contours = num_composite_contours + glyph->num_pointsums; } } } return TA_Err_Ok; } FT_Error TA_sfnt_split_glyf_table(SFNT* sfnt, FONT* font) { SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; SFNT_Table* loca_table = &font->tables[sfnt->loca_idx]; SFNT_Table* head_table = &font->tables[sfnt->head_idx]; glyf_Data* data; FT_Byte loca_format; FT_ULong offset; FT_ULong offset_next; FT_Byte* p; FT_UShort i; FT_UShort loop_count; FT_Error error; /* in case of success, all allocated arrays are */ /* linked and eventually freed in `TA_font_unload' */ /* nothing to do if table has already been split */ if (glyf_table->data) return TA_Err_Ok; data = (glyf_Data*)calloc(1, sizeof (glyf_Data)); if (!data) return FT_Err_Out_Of_Memory; glyf_table->data = data; loca_format = head_table->buf[LOCA_FORMAT_OFFSET]; data->num_glyphs = (FT_UShort)(loca_format ? loca_table->len / 4 : loca_table->len / 2); loop_count = data->num_glyphs - 1; /* allocate one more glyph slot if we have composite glyphs */ if (!sfnt->max_components || !font->hint_composites) data->num_glyphs -= 1; data->glyphs = (GLYPH*)calloc(1, data->num_glyphs * sizeof (GLYPH)); if (!data->glyphs) return FT_Err_Out_Of_Memory; data->master_globals = NULL; data->cvt_idx = MISSING; data->fpgm_idx = MISSING; data->prep_idx = MISSING; /* first loop over `loca' and `glyf' data */ p = loca_table->buf; if (loca_format) offset_next = NEXT_ULONG(p); else { offset_next = NEXT_USHORT(p); offset_next <<= 1; } for (i = 0; i < loop_count; i++) { GLYPH* glyph = &data->glyphs[i]; FT_ULong len; offset = offset_next; if (loca_format) offset_next = NEXT_ULONG(p); else { offset_next = NEXT_USHORT(p); offset_next <<= 1; } if (offset_next < offset || offset_next > glyf_table->len) return FT_Err_Invalid_Table; len = offset_next - offset; if (!len) continue; /* empty glyph */ else { FT_Byte* buf; /* check header size */ if (len < 10) return FT_Err_Invalid_Table; /* we need the number of contours and points for */ /* `TA_sfnt_compute_composite_pointsums' */ buf = glyf_table->buf + offset; glyph->num_contours = (FT_Short)((buf[0] << 8) + buf[1]); if (glyph->num_contours < 0) { error = TA_glyph_get_components(glyph, buf, len); if (error) return error; } else { FT_ULong off; /* use the last contour's end point to compute number of points */ off = 10 + ((FT_ULong)glyph->num_contours - 1) * 2; if (off >= len - 1) return FT_Err_Invalid_Table; glyph->num_points = (FT_UShort)((buf[off] << 8) + buf[off + 1] + 1); } } } if (sfnt->max_components && font->hint_composites) { error = TA_sfnt_compute_composite_pointsums(sfnt, font); if (error) return error; } /* second loop over `loca' and `glyf' data */ p = loca_table->buf; if (loca_format) offset_next = NEXT_ULONG(p); else { offset_next = NEXT_USHORT(p); offset_next <<= 1; } for (i = 0; i < loop_count; i++) { GLYPH* glyph = &data->glyphs[i]; FT_ULong len; offset = offset_next; if (loca_format) offset_next = NEXT_ULONG(p); else { offset_next = NEXT_USHORT(p); offset_next <<= 1; } len = offset_next - offset; if (!len) continue; /* empty glyph */ else { FT_Byte* buf; buf = glyf_table->buf + offset; /* We must parse the rest of the glyph record to get the exact */ /* record length. Since the `loca' table rounds record lengths */ /* up to multiples of 4 (or 2 for older fonts), and we must round */ /* up again after stripping off the instructions, it would be */ /* possible otherwise to have more than 4 bytes of padding which */ /* is more or less invalid. */ if (glyph->num_contours < 0) error = TA_glyph_parse_composite(data->glyphs, i, buf, len, data->num_glyphs, font->hint_composites); else error = TA_glyph_parse_simple(glyph, buf, len, font->dehint); if (error) return error; } } if (sfnt->max_components && font->hint_composites) { /* construct and append our special glyph used as a composite element */ GLYPH* glyph = &data->glyphs[data->num_glyphs - 1]; FT_Byte* buf; glyph->len1 = 12; glyph->len2 = 1; glyph->buf = (FT_Byte*)malloc(glyph->len1 + glyph->len2); if (!glyph->buf) return FT_Err_Out_Of_Memory; buf = glyph->buf; buf[0] = 0x00; /* one contour */ buf[1] = 0x01; buf[2] = 0x00; /* no dimensions */ buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; /* one contour end point */ buf[11] = 0x00; buf[12] = ON_CURVE | SAME_X | SAME_Y; /* the flags for a point at 0,0 */ /* add bytecode also; */ /* this works because the loop in `TA_sfnt_build_glyf_hints' */ /* doesn't include the newly appended glyph */ glyph->ins_len = sizeof (ttfautohint_glyph_bytecode); glyph->ins_buf = (FT_Byte*)malloc(glyph->ins_len); if (!glyph->ins_buf) return FT_Err_Out_Of_Memory; memcpy(glyph->ins_buf, ttfautohint_glyph_bytecode, glyph->ins_len); sfnt->max_components += 1; } return TA_Err_Ok; } FT_Error TA_sfnt_build_glyf_table(SFNT* sfnt, FONT* font) { FT_Error error; SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; GLYPH* glyph; FT_ULong len; FT_Byte* buf_new; FT_Byte* p; FT_UShort i; if (glyf_table->processed) return TA_Err_Ok; if (!font->dehint) { error = TA_sfnt_build_glyf_hints(sfnt, font); if (error) return error; } /* get table size */ len = 0; glyph = data->glyphs; for (i = 0; i < data->num_glyphs; i++, glyph++) { /* glyph records should have offsets which are multiples of 4 */ len = (len + 3) & ~3U; len += glyph->len1 + glyph->len2 + glyph->ins_extra_len + glyph->ins_len; /* add two bytes for the instructionLength field */ if (glyph->len2 || glyph->ins_len) len += 2; } /* to make the short format of the `loca' table always work, */ /* assure an even length of the `glyf' table */ glyf_table->len = (len + 1) & ~1U; buf_new = (FT_Byte*)realloc(glyf_table->buf, (len + 3) & ~3U); if (!buf_new) return FT_Err_Out_Of_Memory; else glyf_table->buf = buf_new; p = glyf_table->buf; glyph = data->glyphs; for (i = 0; i < data->num_glyphs; i++, glyph++) { len = glyph->len1 + glyph->len2 + glyph->ins_extra_len + glyph->ins_len; if (glyph->len2 || glyph->ins_len) len += 2; if (len) { /* copy glyph data and insert new instructions */ memcpy(p, glyph->buf, glyph->len1); if (glyph->len2) { /* simple glyph */ p += glyph->len1; *(p++) = HIGH(glyph->ins_extra_len + glyph->ins_len); *(p++) = LOW(glyph->ins_extra_len + glyph->ins_len); if (glyph->ins_extra_len) { memcpy(p, glyph->ins_extra_buf, glyph->ins_extra_len); p += glyph->ins_extra_len; } if (glyph->ins_len) { memcpy(p, glyph->ins_buf, glyph->ins_len); p += glyph->ins_len; } memcpy(p, glyph->buf + glyph->len1, glyph->len2); p += glyph->len2; } else { /* composite glyph */ if (glyph->ins_len) { *(p + glyph->flags_offset) |= (WE_HAVE_INSTR >> 8); p += glyph->len1; *(p++) = HIGH(glyph->ins_extra_len + glyph->ins_len); *(p++) = LOW(glyph->ins_extra_len + glyph->ins_len); if (glyph->ins_extra_len) { memcpy(p, glyph->ins_extra_buf, glyph->ins_extra_len); p += glyph->ins_extra_len; } memcpy(p, glyph->ins_buf, glyph->ins_len); p += glyph->ins_len; } else p += glyph->len1; } /* pad with zero bytes to have an offset which is a multiple of 4; */ /* this works even for the last glyph record since the `glyf' */ /* table length is a multiple of 4 also */ switch (len % 4) { case 1: *(p++) = 0; case 2: *(p++) = 0; case 3: *(p++) = 0; default: break; } } } glyf_table->checksum = TA_table_compute_checksum(glyf_table->buf, glyf_table->len); glyf_table->processed = 1; return TA_Err_Ok; } static FT_Error TA_create_glyph_data(FT_Outline* outline, GLYPH* glyph) { FT_Error error = TA_Err_Ok; FT_Pos xmin, ymin; FT_Pos xmax, ymax; FT_Byte header[10]; FT_Byte* flags = NULL; FT_Byte* flagsp; FT_Byte oldf, f; FT_Byte* x = NULL; FT_Byte* xp; FT_Byte* y = NULL; FT_Byte* yp; FT_Pos lastx, lasty; FT_Short i; FT_Byte* p; if (!outline->n_contours) return TA_Err_Ok; /* empty glyph */ /* in case of success, all non-local allocated arrays are */ /* linked and eventually freed in `TA_font_unload' */ glyph->buf = NULL; /* we use `calloc' since we rely on the array */ /* being initialized to zero; */ /* additionally, we need one more byte for a test after the loop */ flags = (FT_Byte*)calloc(1, (size_t)outline->n_points + 1); if (!flags) { error = FT_Err_Out_Of_Memory; goto Exit; } /* we have either one-byte or two-byte elements */ x = (FT_Byte*)malloc(2 * (size_t)outline->n_points); if (!x) { error = FT_Err_Out_Of_Memory; goto Exit; } y = (FT_Byte*)malloc(2 * (size_t)outline->n_points); if (!y) { error = FT_Err_Out_Of_Memory; goto Exit; } flagsp = flags; xp = x; yp = y; xmin = xmax = (outline->points[0].x + 32) >> 6; ymin = ymax = (outline->points[0].y + 32) >> 6; lastx = 0; lasty = 0; oldf = 0x80; /* start with an impossible value */ /* convert the FreeType representation of the glyph's outline */ /* into the representation format of the `glyf' table */ for (i = 0; i < outline->n_points; i++) { FT_Pos xcur = (outline->points[i].x + 32) >> 6; FT_Pos ycur = (outline->points[i].y + 32) >> 6; FT_Pos xdelta = xcur - lastx; FT_Pos ydelta = ycur - lasty; /* we are only interested in bit 0 of the `tags' array */ f = outline->tags[i] & ON_CURVE; /* x value */ if (xdelta == 0) f |= SAME_X; else { if (xdelta < 256 && xdelta > -256) { f |= X_SHORT_VECTOR; if (xdelta < 0) xdelta = -xdelta; else f |= SAME_X; *(xp++) = (FT_Byte)xdelta; } else { *(xp++) = HIGH(xdelta); *(xp++) = LOW(xdelta); } } /* y value */ if (ydelta == 0) f |= SAME_Y; else { if (ydelta < 256 && ydelta > -256) { f |= Y_SHORT_VECTOR; if (ydelta < 0) ydelta = -ydelta; else f |= SAME_Y; *(yp++) = (FT_Byte)ydelta; } else { *(yp++) = HIGH(ydelta); *(yp++) = LOW(ydelta); } } if (f == oldf) { /* set repeat flag */ *(flagsp - 1) |= REPEAT; if (*flagsp == 255) { /* we can only handle 256 repetitions at once, */ /* so use a new counter */ flagsp++; *(flagsp++) = f; } else *flagsp += 1; /* increase repetition counter */ } else { if (*flagsp) flagsp++; /* skip repetition counter */ *(flagsp++) = f; oldf = f; } if (xcur > xmax) xmax = xcur; if (ycur > ymax) ymax = ycur; if (xcur < xmin) xmin = xcur; if (ycur < ymin) ymin = ycur; lastx = xcur; lasty = ycur; } /* if the last byte was a repetition counter, */ /* we must increase by one to get the correct array size */ if (*flagsp) flagsp++; header[0] = HIGH(outline->n_contours); header[1] = LOW(outline->n_contours); header[2] = HIGH(xmin); header[3] = LOW(xmin); header[4] = HIGH(ymin); header[5] = LOW(ymin); header[6] = HIGH(xmax); header[7] = LOW(xmax); header[8] = HIGH(ymax); header[9] = LOW(ymax); /* concatenate all arrays and fill needed GLYPH structure elements */ glyph->len1 = (FT_ULong)(10 + 2 * outline->n_contours); glyph->len2 = (FT_ULong)((flagsp - flags) + (xp - x) + (yp - y)); glyph->buf = (FT_Byte*)malloc(glyph->len1 + glyph->len2); if (!glyph->buf) { error = FT_Err_Out_Of_Memory; goto Exit; } p = glyph->buf; memcpy(p, header, 10); p += 10; glyph->ins_extra_len = 0; glyph->ins_extra_buf = NULL; glyph->ins_len = 0; glyph->ins_buf = NULL; for (i = 0; i < outline->n_contours; i++) { *(p++) = HIGH(outline->contours[i]); *(p++) = LOW(outline->contours[i]); } memcpy(p, flags, (size_t)(flagsp - flags)); p += flagsp - flags; memcpy(p, x, (size_t)(xp - x)); p += xp - x; memcpy(p, y, (size_t)(yp - y)); Exit: free(flags); free(x); free(y); return error; } /* We hint each glyph at EM size and construct a new `glyf' table. */ /* Some fonts need this; in particular, */ /* there are CJK fonts which use hints to scale and position subglyphs. */ /* As a consequence, there are no longer composite glyphs. */ FT_Error TA_sfnt_create_glyf_data(SFNT* sfnt, FONT* font) { SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; FT_Face face = sfnt->face; FT_Error error; glyf_Data* data; FT_UShort i; /* in case of success, all allocated arrays are */ /* linked and eventually freed in `TA_font_unload' */ /* nothing to do if table has already been created */ if (glyf_table->data) return TA_Err_Ok; data = (glyf_Data*)calloc(1, sizeof (glyf_Data)); if (!data) return FT_Err_Out_Of_Memory; glyf_table->data = data; data->num_glyphs = (FT_UShort)face->num_glyphs; data->glyphs = (GLYPH*)calloc(1, data->num_glyphs * sizeof (GLYPH)); if (!data->glyphs) return FT_Err_Out_Of_Memory; /* XXX: Make size configurable */ /* we use the EM size */ /* so that the resulting coordinates can be used without transformation */ error = FT_Set_Char_Size(face, face->units_per_EM * 64, 0, 72, 0); if (error) return error; /* loop over all glyphs in font face */ for (i = 0; i < data->num_glyphs; i++) { GLYPH* glyph = &data->glyphs[i]; error = FT_Load_Glyph(face, i, FT_LOAD_NO_BITMAP | FT_LOAD_NO_AUTOHINT); if (error) return error; error = TA_create_glyph_data(&face->glyph->outline, glyph); if (error) return error; } return TA_Err_Ok; } /* * While the auto-hinter is glyph oriented (this is, using `glyf' data), it * relies on the `cmap' table and OpenType features to get style coverage * data. In TTCs, subfonts normally share the same `glyf' table but use * different `cmap's and OpenType features (in `GSUB' and `GPOS' tables). * To handle this gracefully, ttfautohint collects (and merges) the coverage * information in the `glyf_Data' structure. */ FT_Error TA_sfnt_handle_coverage(SFNT* sfnt, FONT* font) { FT_Error error; SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; FT_Face face = sfnt->face; TA_FaceGlobals curr_globals; TA_Style saved_fallback_style = font->fallback_style; /* using TA_STYLE_UNASSIGNED as the fallback style ensures */ /* that uncovered glyphs stay as-is */ /* (we handle the fallback style later on) */ font->fallback_style = (TA_Style)TA_STYLE_UNASSIGNED; /* trigger computation of coverage */ error = ta_loader_init(font); if (error) goto Exit; error = ta_loader_reset(font, face); if (error) goto Exit; ta_loader_done(font); font->fallback_style = saved_fallback_style; curr_globals = (TA_FaceGlobals)face->autohint.data; if (!data->master_globals) { /* initialize */ data->master_globals = curr_globals; goto Exit; } /* we have the same `glyf' table for another subfont; */ /* merge the current coverage info into the `master' coverage info */ { TA_FaceGlobals master_globals = data->master_globals; FT_Long count = master_globals->glyph_count; FT_UShort* master = master_globals->glyph_styles; FT_UShort* curr = curr_globals->glyph_styles; FT_UShort* limit = master + count; /* we simply copy the data, */ /* assuming that a given glyph always has the same properties -- */ /* as soon as we make the style selection more fine-grained, */ /* it is possible that this assumption doesn't hold: */ /* for example, glyph `A' can be used for both Cyrillic and Latin */ while (master < limit) { if ((*curr & TA_STYLE_MASK) != TA_STYLE_UNASSIGNED) *master = *curr; master++; curr++; } } Exit: return error; } void TA_sfnt_adjust_coverage(SFNT* sfnt, FONT* font) { SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; TA_FaceGlobals master_globals = data->master_globals; /* use fallback style for uncovered glyphs */ if (!data->adjusted) { FT_Long nn; FT_UShort* gstyles = master_globals->glyph_styles; #ifdef TA_DEBUG FT_UInt count; if (sfnt->face->num_faces > 1) TA_LOG_GLOBAL(("\n" "using fallback style `%s' for unassigned glyphs" " (glyf table index %d):\n", ta_style_names[master_globals->font->fallback_style], sfnt->glyf_idx)); else TA_LOG_GLOBAL(("\n" "using fallback style `%s' for unassigned glyphs:\n", ta_style_names[master_globals->font->fallback_style])); count = 0; for (nn = 0; nn < master_globals->glyph_count; nn++) { if ((gstyles[nn] & TA_STYLE_MASK) == TA_STYLE_UNASSIGNED) { if (!(count % 10)) TA_LOG_GLOBAL((" ")); TA_LOG_GLOBAL((" %d", nn)); count++; if (!(count % 10)) TA_LOG_GLOBAL(("\n")); } } if (!count) TA_LOG_GLOBAL((" (none)\n")); if (count % 10) TA_LOG_GLOBAL(("\n")); #endif /* TA_DEBUG */ for (nn = 0; nn < master_globals->glyph_count; nn++) { if ((gstyles[nn] & TA_STYLE_MASK) == TA_STYLE_UNASSIGNED) { gstyles[nn] &= ~TA_STYLE_MASK; gstyles[nn] |= master_globals->font->fallback_style; } } data->adjusted = 1; } } #if 0 void TA_sfnt_copy_master_coverage(SFNT* sfnt, FONT* font) { SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; FT_Face face = sfnt->face; TA_FaceGlobals master_globals = data->master_globals; TA_FaceGlobals curr_globals = (TA_FaceGlobals)face->autohint.data; if (master_globals != curr_globals) { FT_Long count = master_globals->glyph_count; FT_UShort* master = master_globals->glyph_styles; FT_UShort* curr = curr_globals->glyph_styles; memcpy(curr, master, count * sizeof (FT_UShort)); } } #endif /* 0 */ /* end of taglyf.c */ ttfautohint-1.8.1/lib/tagpos.c0000644000175000001440000003517513153174711016160 0ustar00wlusers00000000000000/* tagpos.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" /* the code below contains many redundancies; */ /* it has been written for clarity */ #define VALUE(val, p) val = NEXT_USHORT(p) #define OFFSET(val, base, p) val = base + NEXT_USHORT(p) /* this simple `Coverage_table' structure wastes memory... */ typedef struct Coverage_table_ { FT_UShort num_glyph_idxs; FT_UShort* glyph_idxs; } Coverage_table; static FT_Error TA_read_coverage_table(FT_Byte* p, Coverage_table* cov, SFNT* sfnt, FONT* font) { SFNT_Table* GPOS_table = &font->tables[sfnt->GPOS_idx]; FT_UShort* glyph_idxs; FT_UShort CoverageFormat; FT_UShort i; cov->num_glyph_idxs = 0; cov->glyph_idxs = NULL; VALUE(CoverageFormat, p); if (CoverageFormat == 1) { FT_UShort GlyphCount; VALUE(GlyphCount, p); /* rough sanity checks */ if (GlyphCount * 2 > GPOS_table->len) return FT_Err_Invalid_Table; if (p - GPOS_table->buf > (ptrdiff_t)(GPOS_table->len - GlyphCount * 2)) return FT_Err_Invalid_Table; glyph_idxs = (FT_UShort*)malloc(GlyphCount * sizeof (FT_UShort)); if (!glyph_idxs) return FT_Err_Out_Of_Memory; /* loop over p */ for (i = 0; i < GlyphCount; i++) { FT_UShort idx; VALUE(idx, p); glyph_idxs[i] = idx; } cov->num_glyph_idxs = GlyphCount; } else if (CoverageFormat == 2) { FT_UShort RangeCount; FT_UShort start; FT_UShort end; FT_UShort count; FT_Byte* p_start; VALUE(RangeCount, p); /* rough sanity checks */ if (RangeCount * 6 > GPOS_table->len) return FT_Err_Invalid_Table; if (p - GPOS_table->buf > (ptrdiff_t)(GPOS_table->len - RangeCount * 6)) return FT_Err_Invalid_Table; p_start = p; count = 0; /* loop over p */ for (i = 0; i < RangeCount; i++) { /* collect number of glyphs */ VALUE(start, p); VALUE(end, p); if (end < start) return FT_Err_Invalid_Table; p += 2; /* skip StartCoverageIndex */ count += end - start + 1; } glyph_idxs = (FT_UShort*)malloc(count * sizeof (FT_UShort)); if (!glyph_idxs) return FT_Err_Out_Of_Memory; p = p_start; count = 0; /* loop again over p */ for (i = 0; i < RangeCount; i++) { FT_UShort j; VALUE(start, p); VALUE(end, p); p += 2; /* skip StartCoverageIndex */ for (j = start; j <= end; j++) glyph_idxs[count++] = j; } cov->num_glyph_idxs = count; } else return FT_Err_Invalid_Table; cov->glyph_idxs = glyph_idxs; return TA_Err_Ok; } /* We add a subglyph for each composite glyph. */ /* Since subglyphs must contain at least one point, */ /* we have to adjust all AnchorPoints in GPOS AnchorTables accordingly. */ /* Using the `pointsums' array of the `GLYPH' structure */ /* it is straightforward to do that: */ /* Assuming that anchor point x is in the interval */ /* pointsums[n] <= x < pointsums[n + 1], */ /* the new point index is x + n. */ static FT_Error TA_update_anchor(FT_Byte* p, FT_UShort glyph_idx, SFNT* sfnt, FONT* font) { SFNT_Table* GPOS_table = &font->tables[sfnt->GPOS_idx]; SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; GLYPH* glyph = &data->glyphs[glyph_idx]; FT_UShort AnchorFormat; /* nothing to do for simple glyphs */ if (!glyph->num_components) return TA_Err_Ok; VALUE(AnchorFormat, p); if (AnchorFormat == 2) { FT_UShort AnchorPoint; FT_UShort i; p += 4; /* skip XCoordinate and YCoordinate */ VALUE(AnchorPoint, p); /* sanity check */ if (p > GPOS_table->buf + GPOS_table->len) return FT_Err_Invalid_Table; /* search point offset */ for (i = 0; i < glyph->num_pointsums; i++) if (AnchorPoint < glyph->pointsums[i]) break; *(p - 2) = HIGH(AnchorPoint + i); *(p - 1) = LOW(AnchorPoint + i); } return TA_Err_Ok; } static FT_Error TA_handle_cursive_lookup(FT_Byte* Lookup, FT_Byte* p, SFNT* sfnt, FONT* font) { FT_UShort SubTableCount; Coverage_table cov; FT_Error error; p += 2; /* skip LookupFlag */ VALUE(SubTableCount, p); /* loop over p */ for (; SubTableCount > 0; SubTableCount--) { FT_Byte* CursivePosFormat1; FT_Byte* Coverage; FT_UShort EntryExitCount; FT_Byte* q; FT_UShort i; OFFSET(CursivePosFormat1, Lookup, p); q = CursivePosFormat1; q += 2; /* skip PosFormat */ OFFSET(Coverage, CursivePosFormat1, q); VALUE(EntryExitCount, q); error = TA_read_coverage_table(Coverage, &cov, sfnt, font); if (error) return error; /* sanity check */ if (cov.num_glyph_idxs != EntryExitCount) { error = FT_Err_Invalid_Table; goto Fail; } /* loop over q */ for (i = 0; i < EntryExitCount; i++) { FT_UShort glyph_idx = cov.glyph_idxs[i]; FT_Byte* EntryAnchor; FT_Byte* ExitAnchor; OFFSET(EntryAnchor, CursivePosFormat1, q); error = TA_update_anchor(EntryAnchor, glyph_idx, sfnt, font); if (error) goto Fail; OFFSET(ExitAnchor, CursivePosFormat1, q); error = TA_update_anchor(ExitAnchor, glyph_idx, sfnt, font); if (error) goto Fail; } free(cov.glyph_idxs); cov.glyph_idxs = NULL; } return TA_Err_Ok; Fail: free(cov.glyph_idxs); return error; } static FT_Error TA_handle_markbase_lookup(FT_Byte* Lookup, FT_Byte* p, SFNT* sfnt, FONT* font) { FT_UShort SubTableCount; Coverage_table cov; FT_Error error; p += 2; /* skip LookupFlag */ VALUE(SubTableCount, p); /* loop over p */ for (; SubTableCount > 0; SubTableCount--) { FT_Byte* MarkBasePosFormat1; FT_Byte* MarkCoverage; FT_Byte* BaseCoverage; FT_UShort ClassCount; FT_UShort MarkCount; FT_Byte* MarkArray; FT_UShort BaseCount; FT_Byte* BaseArray; FT_Byte* q; FT_UShort i; OFFSET(MarkBasePosFormat1, Lookup, p); q = MarkBasePosFormat1; q += 2; /* skip PosFormat */ OFFSET(MarkCoverage, MarkBasePosFormat1, q); OFFSET(BaseCoverage, MarkBasePosFormat1, q); VALUE(ClassCount, q); OFFSET(MarkArray, MarkBasePosFormat1, q); OFFSET(BaseArray, MarkBasePosFormat1, q); error = TA_read_coverage_table(MarkCoverage, &cov, sfnt, font); if (error) return error; q = MarkArray; VALUE(MarkCount, q); /* sanity check */ if (cov.num_glyph_idxs != MarkCount) { error = FT_Err_Invalid_Table; goto Fail; } /* loop over q */ for (i = 0; i < MarkCount; i++) { FT_UShort glyph_idx = cov.glyph_idxs[i]; FT_Byte* MarkAnchor; q += 2; /* skip Class */ OFFSET(MarkAnchor, MarkArray, q); error = TA_update_anchor(MarkAnchor, glyph_idx, sfnt, font); if (error) return error; } free(cov.glyph_idxs); error = TA_read_coverage_table(BaseCoverage, &cov, sfnt, font); if (error) return error; q = BaseArray; VALUE(BaseCount, q); /* sanity check */ if (cov.num_glyph_idxs != BaseCount) { error = FT_Err_Invalid_Table; goto Fail; } /* loop over q */ for (i = 0; i < BaseCount; i++) { FT_UShort glyph_idx = cov.glyph_idxs[i]; FT_UShort cc = ClassCount; for (; cc > 0; cc--) { FT_Byte* BaseAnchor; OFFSET(BaseAnchor, BaseArray, q); error = TA_update_anchor(BaseAnchor, glyph_idx, sfnt, font); if (error) return error; } } free(cov.glyph_idxs); cov.glyph_idxs = NULL; } return TA_Err_Ok; Fail: free(cov.glyph_idxs); return error; } static FT_Error TA_handle_marklig_lookup(FT_Byte* Lookup, FT_Byte* p, SFNT* sfnt, FONT* font) { FT_UShort SubTableCount; Coverage_table cov; FT_Error error; p += 2; /* skip LookupFlag */ VALUE(SubTableCount, p); /* loop over p */ for (; SubTableCount > 0; SubTableCount--) { FT_Byte* MarkLigPosFormat1; FT_Byte* MarkCoverage; FT_Byte* LigatureCoverage; FT_UShort ClassCount; FT_UShort MarkCount; FT_Byte* MarkArray; FT_UShort LigatureCount; FT_Byte* LigatureArray; FT_Byte* q; FT_UShort i; OFFSET(MarkLigPosFormat1, Lookup, p); q = MarkLigPosFormat1; q += 2; /* skip PosFormat */ OFFSET(MarkCoverage, MarkLigPosFormat1, q); OFFSET(LigatureCoverage, MarkLigPosFormat1, q); VALUE(ClassCount, q); OFFSET(MarkArray, MarkLigPosFormat1, q); OFFSET(LigatureArray, MarkLigPosFormat1, q); error = TA_read_coverage_table(MarkCoverage, &cov, sfnt, font); if (error) return error; q = MarkArray; VALUE(MarkCount, q); /* sanity check */ if (cov.num_glyph_idxs != MarkCount) { error = FT_Err_Invalid_Table; goto Fail; } /* loop over q */ for (i = 0; i < MarkCount; i++) { FT_UShort glyph_idx = cov.glyph_idxs[i]; FT_Byte* MarkAnchor; q += 2; /* skip Class */ OFFSET(MarkAnchor, MarkArray, q); error = TA_update_anchor(MarkAnchor, glyph_idx, sfnt, font); if (error) return error; } free(cov.glyph_idxs); error = TA_read_coverage_table(LigatureCoverage, &cov, sfnt, font); if (error) return error; q = LigatureArray; VALUE(LigatureCount, q); /* sanity check */ if (cov.num_glyph_idxs != LigatureCount) { error = FT_Err_Invalid_Table; goto Fail; } /* loop over q */ for (i = 0; i < LigatureCount; i++) { FT_UShort glyph_idx = cov.glyph_idxs[i]; FT_Byte* LigatureAttach; FT_UShort ComponentCount; FT_Byte* r; OFFSET(LigatureAttach, LigatureArray, q); r = LigatureAttach; VALUE(ComponentCount, r); /* loop over r */ for (; ComponentCount > 0; ComponentCount--) { FT_UShort cc = ClassCount; for (; cc > 0; cc--) { FT_Byte* LigatureAnchor; OFFSET(LigatureAnchor, LigatureAttach, r); error = TA_update_anchor(LigatureAnchor, glyph_idx, sfnt, font); if (error) return error; } } } free(cov.glyph_idxs); cov.glyph_idxs = NULL; } return TA_Err_Ok; Fail: free(cov.glyph_idxs); return error; } static FT_Error TA_handle_markmark_lookup(FT_Byte* Lookup, FT_Byte* p, SFNT* sfnt, FONT* font) { FT_UShort SubTableCount; Coverage_table cov; FT_Error error; p += 2; /* skip LookupFlag */ VALUE(SubTableCount, p); /* loop over p */ for (; SubTableCount > 0; SubTableCount--) { FT_Byte* MarkMarkPosFormat1; FT_Byte* Mark1Coverage; FT_Byte* Mark2Coverage; FT_UShort ClassCount; FT_UShort Mark1Count; FT_Byte* Mark1Array; FT_UShort Mark2Count; FT_Byte* Mark2Array; FT_Byte* q; FT_UShort i; OFFSET(MarkMarkPosFormat1, Lookup, p); q = MarkMarkPosFormat1; q += 2; /* skip PosFormat */ OFFSET(Mark1Coverage, MarkMarkPosFormat1, q); OFFSET(Mark2Coverage, MarkMarkPosFormat1, q); VALUE(ClassCount, q); OFFSET(Mark1Array, MarkMarkPosFormat1, q); OFFSET(Mark2Array, MarkMarkPosFormat1, q); error = TA_read_coverage_table(Mark1Coverage, &cov, sfnt, font); if (error) return error; q = Mark1Array; VALUE(Mark1Count, q); /* sanity check */ if (cov.num_glyph_idxs != Mark1Count) { error = FT_Err_Invalid_Table; goto Fail; } /* loop over q */ for (i = 0; i < Mark1Count; i++) { FT_UShort glyph_idx = cov.glyph_idxs[i]; FT_Byte* Mark1Anchor; q += 2; /* skip Class */ OFFSET(Mark1Anchor, Mark1Array, q); error = TA_update_anchor(Mark1Anchor, glyph_idx, sfnt, font); if (error) return error; } free(cov.glyph_idxs); error = TA_read_coverage_table(Mark2Coverage, &cov, sfnt, font); if (error) return error; q = Mark2Array; VALUE(Mark2Count, q); /* sanity check */ if (cov.num_glyph_idxs != Mark2Count) { error = FT_Err_Invalid_Table; goto Fail; } /* loop over q */ for (i = 0; i < Mark2Count; i++) { FT_UShort glyph_idx = cov.glyph_idxs[i]; FT_UShort cc = ClassCount; for (; cc > 0; cc--) { FT_Byte* Mark2Anchor; OFFSET(Mark2Anchor, Mark2Array, q); error = TA_update_anchor(Mark2Anchor, glyph_idx, sfnt, font); if (error) return error; } } free(cov.glyph_idxs); cov.glyph_idxs = NULL; } return TA_Err_Ok; Fail: free(cov.glyph_idxs); return error; } #define Cursive 3 #define MarkBase 4 #define MarkLig 5 #define MarkMark 6 FT_Error TA_sfnt_update_GPOS_table(SFNT* sfnt, FONT* font) { SFNT_Table* GPOS_table; FT_Byte* buf; FT_Byte* LookupList; FT_UShort LookupCount; FT_Byte* p; if (sfnt->GPOS_idx == MISSING) return TA_Err_Ok; GPOS_table = &font->tables[sfnt->GPOS_idx]; buf = GPOS_table->buf; p = buf; if (GPOS_table->processed) return TA_Err_Ok; p += 8; /* skip Version, ScriptList, and FeatureList */ OFFSET(LookupList, buf, p); p = LookupList; VALUE(LookupCount, p); /* loop over p */ for (; LookupCount > 0; LookupCount--) { FT_Byte* Lookup; FT_UShort LookupType; FT_Byte* q; FT_Error error = TA_Err_Ok; OFFSET(Lookup, LookupList, p); q = Lookup; VALUE(LookupType, q); if (LookupType == Cursive) error = TA_handle_cursive_lookup(Lookup, q, sfnt, font); else if (LookupType == MarkBase) error = TA_handle_markbase_lookup(Lookup, q, sfnt, font); else if (LookupType == MarkLig) error = TA_handle_marklig_lookup(Lookup, q, sfnt, font); else if (LookupType == MarkMark) error = TA_handle_markmark_lookup(Lookup, q, sfnt, font); if (error) return error; } GPOS_table->checksum = TA_table_compute_checksum(GPOS_table->buf, GPOS_table->len); GPOS_table->processed = 1; return TA_Err_Ok; } /* end of tagpos.c */ ttfautohint-1.8.1/lib/tahints.c0000644000175000001440000011332613205544757016341 0ustar00wlusers00000000000000/* tahints.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afhints.c' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #include "ta.h" #include #include #include "tahints.h" /* get new segment for given axis */ FT_Error ta_axis_hints_new_segment(TA_AxisHints axis, TA_Segment* asegment) { FT_Error error = FT_Err_Ok; TA_Segment segment = NULL; if (axis->num_segments < TA_SEGMENTS_EMBEDDED) { if (!axis->segments) { axis->segments = axis->embedded.segments; axis->max_segments = TA_SEGMENTS_EMBEDDED; } } else if (axis->num_segments >= axis->max_segments) { TA_Segment segments_new; FT_Int old_max = axis->max_segments; FT_Int new_max = old_max; FT_Int big_max = (FT_Int)(FT_INT_MAX / sizeof (*segment)); if (old_max >= big_max) { error = FT_Err_Out_Of_Memory; goto Exit; } new_max += (new_max >> 2) + 4; if (new_max < old_max || new_max > big_max) new_max = big_max; if (axis->segments == axis->embedded.segments) { axis->segments = (TA_Segment)malloc( (size_t)new_max * sizeof (TA_SegmentRec)); if (!axis->segments) return FT_Err_Out_Of_Memory; memcpy(axis->segments, axis->embedded.segments, sizeof (axis->embedded.segments)); } else { segments_new = (TA_Segment)realloc( axis->segments, (size_t)new_max * sizeof (TA_SegmentRec)); if (!segments_new) return FT_Err_Out_Of_Memory; axis->segments = segments_new; } axis->max_segments = new_max; } segment = axis->segments + axis->num_segments++; Exit: *asegment = segment; return error; } /* get new edge for given axis, direction, and position, */ /* without initializing the edge itself */ FT_Error ta_axis_hints_new_edge(TA_AxisHints axis, FT_Int fpos, TA_Direction dir, FT_Bool top_to_bottom_hinting, TA_Edge* anedge) { FT_Error error = FT_Err_Ok; TA_Edge edge = NULL; TA_Edge edges; if (axis->num_edges < TA_EDGES_EMBEDDED) { if (!axis->edges) { axis->edges = axis->embedded.edges; axis->max_edges = TA_EDGES_EMBEDDED; } } else if (axis->num_edges >= axis->max_edges) { TA_Edge edges_new; FT_Int old_max = axis->max_edges; FT_Int new_max = old_max; FT_Int big_max = (FT_Int)(FT_INT_MAX / sizeof (*edge)); if (old_max >= big_max) { error = FT_Err_Out_Of_Memory; goto Exit; } new_max += (new_max >> 2) + 4; if (new_max < old_max || new_max > big_max) new_max = big_max; if (axis->edges == axis->embedded.edges) { axis->edges = (TA_Edge)malloc((size_t)new_max * sizeof (TA_EdgeRec)); if (!axis->edges) return FT_Err_Out_Of_Memory; memcpy(axis->edges, axis->embedded.edges, sizeof (axis->embedded.edges)); } else { edges_new = (TA_Edge)realloc(axis->edges, (size_t)new_max * sizeof (TA_EdgeRec)); if (!edges_new) return FT_Err_Out_Of_Memory; axis->edges = edges_new; } axis->max_edges = new_max; } edges = axis->edges; edge = edges + axis->num_edges; while (edge > edges) { if (top_to_bottom_hinting ? (edge[-1].fpos > fpos) : (edge[-1].fpos < fpos)) break; /* we want the edge with same position and minor direction */ /* to appear before those in the major one in the list */ if (edge[-1].fpos == fpos && dir == axis->major_dir) break; edge[0] = edge[-1]; edge--; } axis->num_edges++; Exit: *anedge = edge; return error; } #ifdef TA_DEBUG #include #include #include void _ta_message(const char* format, ...) { va_list ap; va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); } static const char* ta_dir_str(TA_Direction dir) { const char* result; switch (dir) { case TA_DIR_UP: result = "up"; break; case TA_DIR_DOWN: result = "down"; break; case TA_DIR_LEFT: result = "left"; break; case TA_DIR_RIGHT: result = "right"; break; default: result = "none"; } return result; } #define TA_INDEX_NUM(ptr, base) \ (int)((ptr) ? ((ptr) - (base)) \ : -1) static char* ta_print_idx(char* p, int idx) { if (idx == -1) { p[0] = '-'; p[1] = '-'; p[2] = '\0'; } else sprintf(p, "%d", idx); return p; } static int ta_get_segment_index(TA_GlyphHints hints, int point_idx, int dimension) { TA_AxisHints axis = &hints->axis[dimension]; TA_Point point = hints->points + point_idx; TA_Segment segments = axis->segments; TA_Segment limit = segments + axis->num_segments; TA_Segment segment; for (segment = segments; segment < limit; segment++) { if (segment->first <= segment->last) { if (point >= segment->first && point <= segment->last) break; } else { TA_Point p = segment->first; for (;;) { if (point == p) goto Exit; if (p == segment->last) break; p = p->next; } } } Exit: if (segment == limit) return -1; return (int)(segment - segments); } static int ta_get_edge_index(TA_GlyphHints hints, int segment_idx, int dimension) { TA_AxisHints axis = &hints->axis[dimension]; TA_Edge edges = axis->edges; TA_Segment segment = axis->segments + segment_idx; return segment_idx == -1 ? -1 : TA_INDEX_NUM(segment->edge, edges); } void ta_glyph_hints_dump_points(TA_GlyphHints hints) { TA_Point points = hints->points; TA_Point limit = points + hints->num_points; TA_Point* contour = hints->contours; TA_Point* climit = contour + hints->num_contours; TA_Point point; TA_LOG(("Table of points:\n")); if (hints->num_points) { TA_LOG((" index hedge hseg flags" /* " XXXXX XXXXX XXXXX XXXX" */ " xorg yorg xscale yscale xfit yfit")); /* " XXXXX XXXXX XXXX.XX XXXX.XX XXXX.XX XXXX.XX" */ } else TA_LOG((" (none)\n")); for (point = points; point < limit; point++) { int point_idx = TA_INDEX_NUM(point, points); int segment_idx_1 = ta_get_segment_index(hints, point_idx, 1); char buf1[16], buf2[16]; /* insert extra newline at the beginning of a contour */ if (contour < climit && *contour == point) { TA_LOG(("\n")); contour++; } /* we don't show vertical edges since they are never used */ TA_LOG((" %5d %5s %5s %4s" " %5d %5d %7.2f %7.2f %7.2f %7.2f\n", point_idx, ta_print_idx(buf1, ta_get_edge_index(hints, segment_idx_1, 1)), ta_print_idx(buf2, segment_idx_1), (point->flags & TA_FLAG_WEAK_INTERPOLATION) ? "weak" : " -- ", point->fx, point->fy, point->ox / 64.0, point->oy / 64.0, point->x / 64.0, point->y / 64.0)); } TA_LOG(("\n")); } static const char* ta_edge_flags_to_string(FT_Byte flags) { static char temp[32]; int pos = 0; if (flags & TA_EDGE_ROUND) { memcpy(temp + pos, "round", 5); pos += 5; } if (flags & TA_EDGE_SERIF) { if (pos > 0) temp[pos++] = ' '; memcpy(temp + pos, "serif", 5); pos += 5; } if (pos == 0) return "normal"; temp[pos] = '\0'; return temp; } /* dump the array of linked segments */ void ta_glyph_hints_dump_segments(TA_GlyphHints hints) { FT_Int dimension; for (dimension = TA_DEBUG_STARTDIM; dimension >= TA_DEBUG_ENDDIM; dimension--) { TA_AxisHints axis = &hints->axis[dimension]; TA_Point points = hints->points; TA_Edge edges = axis->edges; TA_Segment segments = axis->segments; TA_Segment limit = segments + axis->num_segments; TA_Segment seg; char buf1[16], buf2[16], buf3[16]; TA_LOG(("Table of %s segments:\n", dimension == TA_DIMENSION_HORZ ? "vertical" : "horizontal")); if (axis->num_segments) { TA_LOG((" index pos delta dir from to " /* " XXXXX XXXXX XXXXX XXXXX XXXX XXXX" */ " link serif edge" /* " XXXX XXXXX XXXX" */ " height extra flags\n")); /* " XXXXXX XXXXX XXXXXXXXXXX" */ } else TA_LOG((" (none)\n")); for (seg = segments; seg < limit; seg++) TA_LOG((" %5d %5d %5d %5s %4d %4d" " %4s %5s %4s" " %6d %5d %11s\n", TA_INDEX_NUM(seg, segments), seg->pos, seg->delta, ta_dir_str((TA_Direction)seg->dir), TA_INDEX_NUM(seg->first, points), TA_INDEX_NUM(seg->last, points), ta_print_idx(buf1, TA_INDEX_NUM(seg->link, segments)), ta_print_idx(buf2, TA_INDEX_NUM(seg->serif, segments)), ta_print_idx(buf3, TA_INDEX_NUM(seg->edge, edges)), seg->height, seg->height - (seg->max_coord - seg->min_coord), ta_edge_flags_to_string(seg->flags))); TA_LOG(("\n")); } } /* dump the array of linked edges */ void ta_glyph_hints_dump_edges(TA_GlyphHints hints) { FT_Int dimension; for (dimension = TA_DEBUG_STARTDIM; dimension >= TA_DEBUG_ENDDIM; dimension--) { TA_AxisHints axis = &hints->axis[dimension]; TA_Edge edges = axis->edges; TA_Edge limit = edges + axis->num_edges; TA_Edge edge; char buf1[16], buf2[16]; /* note that TA_DIMENSION_HORZ corresponds to _vertical_ edges */ /* since they have a constant X coordinate */ if (dimension == TA_DIMENSION_HORZ) TA_LOG(("Table of %s edges (1px=%.2fu, 10u=%.2fpx):\n", "vertical", 65536.0 * 64.0 / hints->x_scale, 10.0 * hints->x_scale / 65536.0 / 64.0)); else TA_LOG(("Table of %s edges (1px=%.2fu, 10u=%.2fpx):\n", "horizontal", 65536.0 * 64.0 / hints->y_scale, 10.0 * hints->y_scale / 65536.0 / 64.0)); if (axis->num_edges) { TA_LOG((" index pos dir link serif" /* " XXXXX XXXX.XX XXXXX XXXX XXXXX" */ " blue opos pos flags\n")); /* " X XXXX.XX XXXX.XX XXXXXXXXXXX" */ } else TA_LOG((" (none)\n")); for (edge = edges; edge < limit; edge++) TA_LOG((" %5d %7.2f %5s %4s %5s" " %c %7.2f %7.2f %11s\n", TA_INDEX_NUM(edge, edges), (int)edge->opos / 64.0, ta_dir_str((TA_Direction)edge->dir), ta_print_idx(buf1, TA_INDEX_NUM(edge->link, edges)), ta_print_idx(buf2, TA_INDEX_NUM(edge->serif, edges)), edge->blue_edge ? 'y' : 'n', edge->opos / 64.0, edge->pos / 64.0, ta_edge_flags_to_string(edge->flags))); TA_LOG(("\n")); } } #endif /* TA_DEBUG */ /* compute the direction value of a given vector */ TA_Direction ta_direction_compute(FT_Pos dx, FT_Pos dy) { FT_Pos ll, ss; /* long and short arm lengths */ TA_Direction dir; /* candidate direction */ if (dy >= dx) { if (dy >= -dx) { dir = TA_DIR_UP; ll = dy; ss = dx; } else { dir = TA_DIR_LEFT; ll = -dx; ss = dy; } } else /* dy < dx */ { if (dy >= -dx) { dir = TA_DIR_RIGHT; ll = dx; ss = dy; } else { dir = TA_DIR_DOWN; ll = -dy; ss = dx; } } /* return no direction if arm lengths do not differ enough */ /* (value 14 is heuristic, corresponding to approx. 4.1 degrees); */ /* the long arm is never negative */ if (ll <= 14 * TA_ABS(ss)) dir = TA_DIR_NONE; return dir; } void ta_glyph_hints_init(TA_GlyphHints hints) { /* no need to initialize the embedded items */ memset(hints, 0, sizeof (*hints) - sizeof (hints->embedded)); } void ta_glyph_hints_done(TA_GlyphHints hints) { int dim; if (!hints) return; /* we don't need to free the segment and edge buffers */ /* since they are really within the hints->points array */ for (dim = 0; dim < TA_DIMENSION_MAX; dim++) { TA_AxisHints axis = &hints->axis[dim]; axis->num_segments = 0; axis->max_segments = 0; if (axis->segments != axis->embedded.segments) { free(axis->segments); axis->segments = NULL; } axis->num_edges = 0; axis->max_edges = 0; if (axis->edges != axis->embedded.edges) { free(axis->edges); axis->edges = NULL; } } if (hints->contours != hints->embedded.contours) { free(hints->contours); hints->contours = NULL; } hints->max_contours = 0; hints->num_contours = 0; if (hints->points != hints->embedded.points) { free(hints->points); hints->points = NULL; } hints->max_points = 0; hints->num_points = 0; } /* reset metrics */ void ta_glyph_hints_rescale(TA_GlyphHints hints, TA_StyleMetrics metrics) { hints->metrics = metrics; hints->scaler_flags = metrics->scaler.flags; } /* from FreeType's ftcalc.c */ static FT_Int ta_corner_is_flat(FT_Pos in_x, FT_Pos in_y, FT_Pos out_x, FT_Pos out_y) { FT_Pos ax = in_x; FT_Pos ay = in_y; FT_Pos d_in, d_out, d_corner; if (ax < 0) ax = -ax; if (ay < 0) ay = -ay; d_in = ax + ay; ax = out_x; if (ax < 0) ax = -ax; ay = out_y; if (ay < 0) ay = -ay; d_out = ax + ay; ax = out_x + in_x; if (ax < 0) ax = -ax; ay = out_y + in_y; if (ay < 0) ay = -ay; d_corner = ax + ay; return (d_in + d_out - d_corner) < (d_corner >> 4); } /* recompute all TA_Point in TA_GlyphHints */ /* from the definitions in a source outline */ FT_Error ta_glyph_hints_reload(TA_GlyphHints hints, FT_Outline* outline) { FT_Error error = FT_Err_Ok; TA_Point points; FT_UInt old_max, new_max; FT_Fixed x_scale = hints->x_scale; FT_Fixed y_scale = hints->y_scale; FT_Pos x_delta = hints->x_delta; FT_Pos y_delta = hints->y_delta; hints->num_points = 0; hints->num_contours = 0; hints->axis[0].num_segments = 0; hints->axis[0].num_edges = 0; hints->axis[1].num_segments = 0; hints->axis[1].num_edges = 0; /* first of all, reallocate the contours array if necessary */ new_max = (FT_UInt)outline->n_contours; old_max = (FT_UInt)hints->max_contours; if (new_max <= TA_CONTOURS_EMBEDDED) { if (!hints->contours) { hints->contours = hints->embedded.contours; hints->max_contours = TA_CONTOURS_EMBEDDED; } } else if (new_max > old_max) { TA_Point* contours_new; if (hints->contours == hints->embedded.contours) hints->contours = NULL; new_max = (new_max + 3) & ~3U; /* round up to a multiple of 4 */ contours_new = (TA_Point*)realloc(hints->contours, new_max * sizeof (TA_Point)); if (!contours_new) return FT_Err_Out_Of_Memory; hints->contours = contours_new; hints->max_contours = (FT_Int)new_max; } /* reallocate the points arrays if necessary -- we reserve */ /* two additional point positions, used to hint metrics appropriately */ new_max = (FT_UInt)(outline->n_points + 2); old_max = (FT_UInt)hints->max_points; if (new_max <= TA_POINTS_EMBEDDED) { if (!hints->points) { hints->points = hints->embedded.points; hints->max_points = TA_POINTS_EMBEDDED; } } else if (new_max > old_max) { TA_Point points_new; if (hints->points == hints->embedded.points) hints->points = NULL; new_max = (new_max + 2 + 7) & ~7U; /* round up to a multiple of 8 */ points_new = (TA_Point)realloc(hints->points, new_max * sizeof (TA_PointRec)); if (!points_new) return FT_Err_Out_Of_Memory; hints->points = points_new; hints->max_points = (FT_Int)new_max; } hints->num_points = outline->n_points; hints->num_contours = outline->n_contours; /* we can't rely on the value of `FT_Outline.flags' to know the fill */ /* direction used for a glyph, given that some fonts are broken */ /* (e.g. the Arphic ones); we thus recompute it each time we need to */ hints->axis[TA_DIMENSION_HORZ].major_dir = TA_DIR_UP; hints->axis[TA_DIMENSION_VERT].major_dir = TA_DIR_LEFT; if (FT_Outline_Get_Orientation(outline) == FT_ORIENTATION_POSTSCRIPT) { hints->axis[TA_DIMENSION_HORZ].major_dir = TA_DIR_DOWN; hints->axis[TA_DIMENSION_VERT].major_dir = TA_DIR_RIGHT; } hints->x_scale = x_scale; hints->y_scale = y_scale; hints->x_delta = x_delta; hints->y_delta = y_delta; hints->xmin_delta = 0; hints->xmax_delta = 0; points = hints->points; if (hints->num_points == 0) goto Exit; { TA_Point point; TA_Point point_limit = points + hints->num_points; /* compute coordinates & Bezier flags, next and prev */ { FT_Vector* vec = outline->points; char* tag = outline->tags; TA_Point end = points + outline->contours[0]; TA_Point prev = end; FT_Int contour_index = 0; for (point = points; point < point_limit; point++, vec++, tag++) { point->in_dir = (FT_Char)TA_DIR_NONE; point->out_dir = (FT_Char)TA_DIR_NONE; point->fx = (FT_Short)vec->x; point->fy = (FT_Short)vec->y; point->ox = point->x = FT_MulFix(vec->x, x_scale) + x_delta; point->oy = point->y = FT_MulFix(vec->y, y_scale) + y_delta; switch (FT_CURVE_TAG(*tag)) { case FT_CURVE_TAG_CONIC: point->flags = TA_FLAG_CONIC; break; case FT_CURVE_TAG_CUBIC: point->flags = TA_FLAG_CUBIC; break; default: point->flags = TA_FLAG_NONE; } point->prev = prev; prev->next = point; prev = point; if (point == end) { if (++contour_index < outline->n_contours) { end = points + outline->contours[contour_index]; prev = end; } } } } /* set up the contours array */ { TA_Point* contour = hints->contours; TA_Point* contour_limit = contour + hints->num_contours; short* end = outline->contours; short idx = 0; for (; contour < contour_limit; contour++, end++) { contour[0] = points + idx; idx = (short)(end[0] + 1); } } { /* * Compute directions of `in' and `out' vectors. * * Note that distances between points that are very near to each * other are accumulated. In other words, the auto-hinter * prepends the small vectors between near points to the first * non-near vector. All intermediate points are tagged as * weak; the directions are adjusted also to be equal to the * accumulated one. */ /* value 20 in `near_limit' is heuristic */ FT_UInt units_per_em = hints->metrics->scaler.face->units_per_EM; FT_Int near_limit = 20 * units_per_em / 2048; FT_Int near_limit2 = 2 * near_limit - 1; TA_Point* contour; TA_Point* contour_limit = hints->contours + hints->num_contours; for (contour = hints->contours; contour < contour_limit; contour++) { TA_Point first = *contour; TA_Point next, prev, curr; FT_Pos out_x, out_y; /* since the first point of a contour could be part of a */ /* series of near points, go backwards to find the first */ /* non-near point and adjust `first' */ point = first; prev = first->prev; while (prev != first) { out_x = point->fx - prev->fx; out_y = point->fy - prev->fy; /* * We use Taxicab metrics to measure the vector length. * * Note that the accumulated distances so far could have the * opposite direction of the distance measured here. For this * reason we use `near_limit2' for the comparison to get a * non-near point even in the worst case. */ if (TA_ABS(out_x) + TA_ABS(out_y) >= near_limit2) break; point = prev; prev = prev->prev; } /* adjust first point */ first = point; /* now loop over all points of the contour to get */ /* `in' and `out' vector directions */ curr = first; /* * We abuse the `u' and `v' fields to store index deltas to the * next and previous non-near point, respectively. * * To avoid problems with not having non-near points, we point to * `first' by default as the next non-near point. */ curr->u = (FT_Pos)(first - curr); first->v = -curr->u; out_x = 0; out_y = 0; next = first; do { TA_Direction out_dir; point = next; next = point->next; out_x += next->fx - point->fx; out_y += next->fy - point->fy; if (TA_ABS(out_x) + TA_ABS(out_y) < near_limit) { next->flags |= TA_FLAG_WEAK_INTERPOLATION; continue; } curr->u = (FT_Pos)(next - curr); next->v = -curr->u; out_dir = ta_direction_compute(out_x, out_y); /* adjust directions for all points inbetween; */ /* the loop also updates position of `curr' */ curr->out_dir = (FT_Char)out_dir; for (curr = curr->next; curr != next; curr = curr->next) { curr->in_dir = (FT_Char)out_dir; curr->out_dir = (FT_Char)out_dir; } next->in_dir = (FT_Char)out_dir; curr->u = (FT_Pos)(first - curr); first->v = -curr->u; out_x = 0; out_y = 0; } while (next != first); } /* * The next step is to `simplify' an outline's topology so that we * can identify local extrema more reliably: A series of * non-horizontal or non-vertical vectors pointing into the same * quadrant are handled as a single, long vector. From a * topological point of the view, the intermediate points are of no * interest and thus tagged as weak. */ for (point = points; point < point_limit; point++) { if (point->flags & TA_FLAG_WEAK_INTERPOLATION) continue; if (point->in_dir == TA_DIR_NONE && point->out_dir == TA_DIR_NONE) { /* check whether both vectors point into the same quadrant */ FT_Pos in_x, in_y; FT_Pos out_x, out_y; TA_Point next_u = point + point->u; TA_Point prev_v = point + point->v; in_x = point->fx - prev_v->fx; in_y = point->fy - prev_v->fy; out_x = next_u->fx - point->fx; out_y = next_u->fy - point->fy; if ((in_x ^ out_x) >= 0 && (in_y ^ out_y) >= 0) { /* yes, so tag current point as weak */ /* and update index deltas */ point->flags |= TA_FLAG_WEAK_INTERPOLATION; prev_v->u = (FT_Pos)(next_u - prev_v); next_u->v = -prev_v->u; } } } /* * Finally, check for remaining weak points. Everything else not * collected in edges so far is then implicitly classified as strong * points. */ for (point = points; point < point_limit; point++) { if (point->flags & TA_FLAG_WEAK_INTERPOLATION) continue; if (point->flags & TA_FLAG_CONTROL) { /* control points are always weak */ Is_Weak_Point: point->flags |= TA_FLAG_WEAK_INTERPOLATION; } else if (point->out_dir == point->in_dir) { if (point->out_dir != TA_DIR_NONE) { /* current point lies on a horizontal or */ /* vertical segment (but doesn't start or end it) */ goto Is_Weak_Point; } { TA_Point next_u = point + point->u; TA_Point prev_v = point + point->v; if (ta_corner_is_flat(point->fx - prev_v->fx, point->fy - prev_v->fy, next_u->fx - point->fx, next_u->fy - point->fy)) { /* either the `in' or the `out' vector is much more */ /* dominant than the other one, so tag current point */ /* as weak and update index deltas */ prev_v->u = (FT_Pos)(next_u - prev_v); next_u->v = -prev_v->u; goto Is_Weak_Point; } } } else if (point->in_dir == -point->out_dir) { /* current point forms a spike */ goto Is_Weak_Point; } } } } /* change some directions at the user's request */ /* to make ttfautohint insert one-point segments */ /* or remove points from segments */ { FONT* font; FT_Int idx; TA_Direction dir; int left_offset; int right_offset; /* `globals' is not set up while initializing metrics, */ /* so exit early in this case */ if (!hints->metrics->globals) goto Exit; font = hints->metrics->globals->font; /* start conditions are set with `TA_control_segment_dir_collect' */ while (TA_control_segment_dir_get_next(font, &idx, &dir, &left_offset, &right_offset)) { TA_Point point = &points[idx]; point->out_dir = dir; if (dir == TA_DIR_NONE) point->flags |= TA_FLAG_WEAK_INTERPOLATION; else point->flags &= ~TA_FLAG_WEAK_INTERPOLATION; point->left_offset = (FT_Short)left_offset; point->right_offset = (FT_Short)right_offset; } } Exit: return error; } /* store the hinted outline in an FT_Outline structure */ void ta_glyph_hints_save(TA_GlyphHints hints, FT_Outline* outline) { TA_Point point = hints->points; TA_Point limit = point + hints->num_points; FT_Vector* vec = outline->points; char* tag = outline->tags; for (; point < limit; point++, vec++, tag++) { vec->x = point->x; vec->y = point->y; if (point->flags & TA_FLAG_CONIC) tag[0] = FT_CURVE_TAG_CONIC; else if (point->flags & TA_FLAG_CUBIC) tag[0] = FT_CURVE_TAG_CUBIC; else tag[0] = FT_CURVE_TAG_ON; } } /**************************************************************** * * EDGE POINT GRID-FITTING * ****************************************************************/ /* align all points of an edge to the same coordinate value, */ /* either horizontally or vertically */ void ta_glyph_hints_align_edge_points(TA_GlyphHints hints, TA_Dimension dim) { TA_AxisHints axis = &hints->axis[dim]; TA_Segment segments = axis->segments; TA_Segment segment_limit = segments + axis->num_segments; TA_Segment seg; if (dim == TA_DIMENSION_HORZ) { for (seg = segments; seg < segment_limit; seg++) { TA_Edge edge = seg->edge; TA_Point point, first, last; if (!edge) continue; first = seg->first; last = seg->last; point = first; for (;;) { point->x = edge->pos; point->flags |= TA_FLAG_TOUCH_X; if (point == last) break; point = point->next; } } } else { for (seg = segments; seg < segment_limit; seg++) { TA_Edge edge = seg->edge; TA_Point point, first, last; if (!edge) continue; first = seg->first; last = seg->last; point = first; for (;;) { point->y = edge->pos; point->flags |= TA_FLAG_TOUCH_Y; if (point == last) break; point = point->next; } } } } /**************************************************************** * * STRONG POINT INTERPOLATION * ****************************************************************/ /* hint the strong points -- */ /* this is equivalent to the TrueType `IP' hinting instruction */ void ta_glyph_hints_align_strong_points(TA_GlyphHints hints, TA_Dimension dim) { TA_Point points = hints->points; TA_Point point_limit = points + hints->num_points; TA_AxisHints axis = &hints->axis[dim]; TA_Edge edges = axis->edges; TA_Edge edge_limit = edges + axis->num_edges; FT_UShort touch_flag; if (dim == TA_DIMENSION_HORZ) touch_flag = TA_FLAG_TOUCH_X; else touch_flag = TA_FLAG_TOUCH_Y; if (edges < edge_limit) { TA_Point point; TA_Edge edge; for (point = points; point < point_limit; point++) { FT_Pos u, ou, fu; /* point position */ FT_Pos delta; if (point->flags & touch_flag) continue; /* if this point is candidate to weak interpolation, we */ /* interpolate it after all strong points have been processed */ if ((point->flags & TA_FLAG_WEAK_INTERPOLATION)) continue; if (dim == TA_DIMENSION_VERT) { u = point->fy; ou = point->oy; } else { u = point->fx; ou = point->ox; } fu = u; /* is the point before the first edge? */ edge = edges; delta = edge->fpos - u; if (delta >= 0) { u = edge->pos - (edge->opos - ou); if (hints->recorder) hints->recorder(ta_ip_before, hints, dim, point, NULL, NULL, NULL, NULL); goto Store_Point; } /* is the point after the last edge? */ edge = edge_limit - 1; delta = u - edge->fpos; if (delta >= 0) { u = edge->pos + (ou - edge->opos); if (hints->recorder) hints->recorder(ta_ip_after, hints, dim, point, NULL, NULL, NULL, NULL); goto Store_Point; } { FT_PtrDist min, max, mid; FT_Pos fpos; /* find enclosing edges */ min = 0; max = edge_limit - edges; /* for a small number of edges, a linear search is better */ if (max <= 8) { FT_PtrDist nn; for (nn = 0; nn < max; nn++) if (edges[nn].fpos >= u) break; if (edges[nn].fpos == u) { u = edges[nn].pos; if (hints->recorder) hints->recorder(ta_ip_on, hints, dim, point, &edges[nn], NULL, NULL, NULL); goto Store_Point; } min = nn; } else while (min < max) { mid = (max + min) >> 1; edge = edges + mid; fpos = edge->fpos; if (u < fpos) max = mid; else if (u > fpos) min = mid + 1; else { /* we are on the edge */ u = edge->pos; if (hints->recorder) hints->recorder(ta_ip_on, hints, dim, point, edge, NULL, NULL, NULL); goto Store_Point; } } /* point is not on an edge */ { TA_Edge before = edges + min - 1; TA_Edge after = edges + min + 0; /* assert(before && after && before != after) */ if (before->scale == 0) before->scale = FT_DivFix(after->pos - before->pos, after->fpos - before->fpos); u = before->pos + FT_MulFix(fu - before->fpos, before->scale); if (hints->recorder) hints->recorder(ta_ip_between, hints, dim, point, before, after, NULL, NULL); } } Store_Point: /* save the point position */ if (dim == TA_DIMENSION_HORZ) point->x = u; else point->y = u; point->flags |= touch_flag; } } } /**************************************************************** * * WEAK POINT INTERPOLATION * ****************************************************************/ /* shift the original coordinates of all points between `p1' and */ /* `p2' to get hinted coordinates, using the same difference as */ /* given by `ref' */ static void ta_iup_shift(TA_Point p1, TA_Point p2, TA_Point ref) { TA_Point p; FT_Pos delta = ref->u - ref->v; if (delta == 0) return; for (p = p1; p < ref; p++) p->u = p->v + delta; for (p = ref + 1; p <= p2; p++) p->u = p->v + delta; } /* interpolate the original coordinates of all points between `p1' and */ /* `p2' to get hinted coordinates, using `ref1' and `ref2' as the */ /* reference points; the `u' and `v' members are the current and */ /* original coordinate values, respectively. */ /* details can be found in the TrueType bytecode specification */ static void ta_iup_interp(TA_Point p1, TA_Point p2, TA_Point ref1, TA_Point ref2) { TA_Point p; FT_Pos u, v1, v2, u1, u2, d1, d2; if (p1 > p2) return; if (ref1->v > ref2->v) { p = ref1; ref1 = ref2; ref2 = p; } v1 = ref1->v; v2 = ref2->v; u1 = ref1->u; u2 = ref2->u; d1 = u1 - v1; d2 = u2 - v2; if (u1 == u2 || v1 == v2) { for (p = p1; p <= p2; p++) { u = p->v; if (u <= v1) u += d1; else if (u >= v2) u += d2; else u = u1; p->u = u; } } else { FT_Fixed scale = FT_DivFix(u2 - u1, v2 - v1); for (p = p1; p <= p2; p++) { u = p->v; if (u <= v1) u += d1; else if (u >= v2) u += d2; else u = u1 + FT_MulFix(u - v1, scale); p->u = u; } } } /* hint the weak points -- */ /* this is equivalent to the TrueType `IUP' hinting instruction */ void ta_glyph_hints_align_weak_points(TA_GlyphHints hints, TA_Dimension dim) { TA_Point points = hints->points; TA_Point point_limit = points + hints->num_points; TA_Point* contour = hints->contours; TA_Point* contour_limit = contour + hints->num_contours; FT_UShort touch_flag; TA_Point point; TA_Point end_point; TA_Point first_point; /* pass 1: move segment points to edge positions */ if (dim == TA_DIMENSION_HORZ) { touch_flag = TA_FLAG_TOUCH_X; for (point = points; point < point_limit; point++) { point->u = point->x; point->v = point->ox; } } else { touch_flag = TA_FLAG_TOUCH_Y; for (point = points; point < point_limit; point++) { point->u = point->y; point->v = point->oy; } } for (; contour < contour_limit; contour++) { TA_Point first_touched, last_touched; point = *contour; end_point = point->prev; first_point = point; /* find first touched point */ for (;;) { if (point > end_point) /* no touched point in contour */ goto NextContour; if (point->flags & touch_flag) break; point++; } first_touched = point; for (;;) { /* skip any touched neighbours */ while (point < end_point && (point[1].flags & touch_flag) != 0) point++; last_touched = point; /* find the next touched point, if any */ point++; for (;;) { if (point > end_point) goto EndContour; if ((point->flags & touch_flag) != 0) break; point++; } /* interpolate between last_touched and point */ ta_iup_interp(last_touched + 1, point - 1, last_touched, point); } EndContour: /* special case: only one point was touched */ if (last_touched == first_touched) ta_iup_shift(first_point, end_point, first_touched); else /* interpolate the last part */ { if (last_touched < end_point) ta_iup_interp(last_touched + 1, end_point, last_touched, first_touched); if (first_touched > points) ta_iup_interp(first_point, first_touched - 1, last_touched, first_touched); } NextContour: ; } /* now save the interpolated values back to x/y */ if (dim == TA_DIMENSION_HORZ) { for (point = points; point < point_limit; point++) point->x = point->u; } else { for (point = points; point < point_limit; point++) point->y = point->u; } } #ifdef TA_CONFIG_OPTION_USE_WARPER /* apply (small) warp scale and warp delta for given dimension */ static void ta_glyph_hints_scale_dim(TA_GlyphHints hints, TA_Dimension dim, FT_Fixed scale, FT_Pos delta) { TA_Point points = hints->points; TA_Point points_limit = points + hints->num_points; TA_Point point; if (dim == TA_DIMENSION_HORZ) { for (point = points; point < points_limit; point++) point->x = FT_MulFix(point->fx, scale) + delta; } else { for (point = points; point < points_limit; point++) point->y = FT_MulFix(point->fy, scale) + delta; } } #endif /* TA_CONFIG_OPTION_USE_WARPER */ /* end of tahints.c */ ttfautohint-1.8.1/lib/tahints.h0000644000175000001440000004021113153174711016325 0ustar00wlusers00000000000000/* tahints.h */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afhints.h' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #ifndef TAHINTS_H_ #define TAHINTS_H_ #include "tatypes.h" #ifdef __cplusplus extern "C" { #endif #define xxTA_SORT_SEGMENTS /* the definition of outline glyph hints; these are shared */ /* by all writing system analysis routines (until now) */ typedef enum TA_Dimension_ { TA_DIMENSION_HORZ = 0, /* x coordinates, i.e. vert. segments & edges */ TA_DIMENSION_VERT = 1, /* y coordinates, i.e. horz. segments & edges */ TA_DIMENSION_MAX /* do not remove */ } TA_Dimension; /* hint directions -- the values are computed so that two vectors */ /* are in opposite directions iff `dir1 + dir2 == 0' */ typedef enum TA_Direction_ { TA_DIR_NONE = 4, TA_DIR_RIGHT = 1, TA_DIR_LEFT= -1, TA_DIR_UP = 2, TA_DIR_DOWN = -2 } TA_Direction; /* * The following explanations are mostly taken from the article * * Real-Time Grid Fitting of Typographic Outlines * * by David Turner and Werner Lemberg * * http://www.tug.org/TUGboat/Articles/tb24-3/lemberg.pdf * * with appropriate updates. * * * Segments * * `ta_{cjk,latin,...}_hints_compute_segments' are the functions to * find segments in an outline. * * A segment is a series of at least two consecutive points that are * approximately aligned along a coordinate axis. The analysis to do * so is specific to a writing system. * * * Edges * * `ta_{cjk,latin,...}_hints_compute_edges' are the functions to find * edges. * * As soon as segments are defined, the auto-hinter groups them into * edges. An edge corresponds to a single position on the main * dimension that collects one or more segments (allowing for a small * threshold). * * As an example, the `latin' writing system first tries to grid-fit * edges, then to align segments on the edges unless it detects that * they form a serif. * * * A H * | | * | | * | | * | | * C | | F * +------<-----+ +-----<------+ * | B G | * | | * | | * +--------------->------------------+ * D E * * * Stems * * Stems are detected by `ta_{cjk,latin,...}_hint_edges'. * * Segments need to be `linked' to other ones in order to detect stems. * A stem is made of two segments that face each other in opposite * directions and that are sufficiently close to each other. Using * vocabulary from the TrueType specification, stem segments form a * `black distance'. * * In the above ASCII drawing, the horizontal segments are BC, DE, and * FG; the vertical segments are AB, CD, EF, and GH. * * Each segment has at most one `best' candidate to form a black * distance, or no candidate at all. Notice that two distinct segments * can have the same candidate, which frequently means a serif. * * A stem is recognized by the following condition: * * best segment_1 = segment_2 && best segment_2 = segment_1 * * The best candidate is stored in field `link' in structure * `TA_Segment'. * * In the above ASCII drawing, the best candidate for both AB and CD is * GH, while the best candidate for GH is AB. Similarly, the best * candidate for EF and GH is AB, while the best candidate for AB is * GH. * * The detection and handling of stems is dependent on the writing * system. * * * Serifs * * Serifs are detected by `ta_{cjk,latin,...}_hint_edges'. * * In comparison to a stem, a serif (as handled by the auto-hinter * module that takes care of the `latin' writing system) has * * best segment_1 = segment_2 && best segment_2 != segment_1 * * where segment_1 corresponds to the serif segment (CD and EF in the * above ASCII drawing). * * The best candidate is stored in field `serif' in structure * `TA_Segment' (and `link' is set to NULL). * * * Touched points * * A point is called `touched' if it has been processed somehow by the * auto-hinter. It basically means that it shouldn't be moved again * (or moved only under certain constraints to preserve the already * applied processing). * * * Flat and round segments * * Segments are `round' or `flat', depending on the series of points * that define them. A segment is round if the next and previous point * of an extremum (which can be either a single point or sequence of * points) are both conic or cubic control points. Otherwise, a * segment with an extremum is flat. * * * Strong Points * * Experience has shown that points not part of an edge need to be * interpolated linearly between their two closest edges, even if these * are not part of the contour of those particular points. Typical * candidates for this are * * - angle points (i.e., points where the `in' and `out' direction * differ greatly) * * - inflection points (i.e., where the `in' and `out' angles are the * same, but the curvature changes sign) [currently, such points * aren't handled specially in the auto-hinter] * * `ta_glyph_hints_align_strong_points' is the function that takes * care of such situations; it is equivalent to the TrueType `IP' * hinting instruction. * * * Weak Points * * Other points in the outline must be interpolated using the * coordinates of their previous and next unfitted contour neighbours. * These are called `weak points' and are touched by the function * `ta_glyph_hints_align_weak_points', equivalent to the TrueType `IUP' * hinting instruction. Typical candidates are control points and * points on the contour without a major direction. * * The major effect is to reduce possible distortion caused by * alignment of edges and strong points, thus weak points are processed * after strong points. */ /* point hint flags */ #define TA_FLAG_NONE 0 /* point type flags */ #define TA_FLAG_CONIC (1U << 0) #define TA_FLAG_CUBIC (1U << 1) #define TA_FLAG_CONTROL (TA_FLAG_CONIC | TA_FLAG_CUBIC) /* point touch flags */ #define TA_FLAG_TOUCH_X (1U << 2) #define TA_FLAG_TOUCH_Y (1U << 3) /* candidates for weak interpolation have this flag set */ #define TA_FLAG_WEAK_INTERPOLATION (1U << 4) /* edge hint flags */ #define TA_EDGE_NORMAL 0 #define TA_EDGE_ROUND (1U << 0) #define TA_EDGE_SERIF (1U << 1) #define TA_EDGE_DONE (1U << 2) #define TA_EDGE_NEUTRAL (1U << 3) typedef struct TA_PointRec_* TA_Point; typedef struct TA_SegmentRec_* TA_Segment; typedef struct TA_EdgeRec_* TA_Edge; typedef struct TA_PointRec_ { FT_UShort flags; /* point flags used by hinter */ FT_Char in_dir; /* direction of inwards vector */ FT_Char out_dir; /* direction of outwards vector */ FT_Pos ox, oy; /* original, scaled position */ FT_Short fx, fy; /* original, unscaled position (in font units) */ FT_Pos x, y; /* current position */ FT_Pos u, v; /* current (x,y) or (y,x) depending on context */ FT_Short left_offset; /* left offset in one-point segments */ FT_Short right_offset; /* right offset in one-point segments */ TA_Point next; /* next point in contour */ TA_Point prev; /* previous point in contour */ } TA_PointRec; typedef struct TA_SegmentRec_ { FT_Byte flags; /* edge/segment flags for this segment */ FT_Char dir; /* segment direction */ FT_Short pos; /* position of segment */ FT_Short delta; /* deviation from segment position */ FT_Short min_coord; /* minimum coordinate of segment */ FT_Short max_coord; /* maximum coordinate of segment */ FT_Short height; /* the hinted segment height */ TA_Edge edge; /* the segment's parent edge */ TA_Segment edge_next; /* link to next segment in parent edge */ TA_Segment link; /* (stem) link segment */ TA_Segment serif; /* primary segment for serifs */ FT_Pos score; /* used during stem matching */ FT_Pos len; /* used during stem matching */ TA_Point first; /* first point in edge segment */ TA_Point last; /* last point in edge segment */ } TA_SegmentRec; typedef struct TA_EdgeRec_ { FT_Short fpos; /* original, unscaled position (in font units) */ FT_Pos opos; /* original, scaled position */ FT_Pos pos; /* current position */ FT_Byte flags; /* edge flags */ FT_Char dir; /* edge direction */ FT_Fixed scale; /* used to speed up interpolation between edges */ TA_Width blue_edge; /* non-NULL if this is a blue edge */ FT_UInt best_blue_idx; /* for the hinting recorder callback */ FT_Bool best_blue_is_shoot; /* for the hinting recorder callback */ TA_Edge link; /* link edge */ TA_Edge serif; /* primary edge for serifs */ FT_Int score; /* used during stem matching */ TA_Segment first; /* first segment in edge */ TA_Segment last; /* last segment in edge */ } TA_EdgeRec; #define TA_SEGMENTS_EMBEDDED 18 /* number of embedded segments */ #define TA_EDGES_EMBEDDED 12 /* number of embedded edges */ typedef struct TA_AxisHintsRec_ { FT_Int num_segments; /* number of used segments */ FT_Int max_segments; /* number of allocated segments */ TA_Segment segments; /* segments array */ #ifdef TA_SORT_SEGMENTS FT_Int mid_segments; #endif FT_Int num_edges; /* number of used edges */ FT_Int max_edges; /* number of allocated edges */ TA_Edge edges; /* edges array */ TA_Direction major_dir; /* either vertical or horizontal */ /* two arrays to avoid allocation penalty */ struct { TA_SegmentRec segments[TA_SEGMENTS_EMBEDDED]; TA_EdgeRec edges[TA_EDGES_EMBEDDED]; } embedded; } TA_AxisHintsRec, *TA_AxisHints; typedef enum TA_Action_ { /* point actions */ ta_ip_before, ta_ip_after, ta_ip_on, ta_ip_between, /* edge actions */ ta_blue, ta_blue_anchor, ta_anchor, ta_anchor_serif, ta_anchor_round, ta_anchor_round_serif, ta_adjust, ta_adjust_serif, ta_adjust_round, ta_adjust_round_serif, ta_adjust_bound, ta_adjust_bound_serif, ta_adjust_bound_round, ta_adjust_bound_round_serif, ta_adjust_down_bound, ta_adjust_down_bound_serif, ta_adjust_down_bound_round, ta_adjust_down_bound_round_serif, ta_link, ta_link_serif, ta_link_round, ta_link_round_serif, ta_stem, ta_stem_serif, ta_stem_round, ta_stem_round_serif, ta_stem_bound, ta_stem_bound_serif, ta_stem_bound_round, ta_stem_bound_round_serif, ta_stem_down_bound, ta_stem_down_bound_serif, ta_stem_down_bound_round, ta_stem_down_bound_round_serif, ta_serif, ta_serif_lower_bound, ta_serif_upper_bound, ta_serif_upper_lower_bound, ta_serif_down_lower_bound, ta_serif_down_upper_bound, ta_serif_down_upper_lower_bound, ta_serif_anchor, ta_serif_anchor_lower_bound, ta_serif_anchor_upper_bound, ta_serif_anchor_upper_lower_bound, ta_serif_anchor_down_lower_bound, ta_serif_anchor_down_upper_bound, ta_serif_anchor_down_upper_lower_bound, ta_serif_link1, ta_serif_link1_lower_bound, ta_serif_link1_upper_bound, ta_serif_link1_upper_lower_bound, ta_serif_link1_down_lower_bound, ta_serif_link1_down_upper_bound, ta_serif_link1_down_upper_lower_bound, ta_serif_link2, ta_serif_link2_lower_bound, ta_serif_link2_upper_bound, ta_serif_link2_upper_lower_bound, ta_serif_link2_down_lower_bound, ta_serif_link2_down_upper_bound, ta_serif_link2_down_upper_lower_bound, ta_bound } TA_Action; typedef void (*TA_Hints_Recorder)(TA_Action action, TA_GlyphHints hints, TA_Dimension dim, void* arg1, /* TA_Point or TA_Edge */ TA_Edge arg2, TA_Edge arg3, TA_Edge lower_bound, TA_Edge upper_bound); #define TA_POINTS_EMBEDDED 96 /* number of embedded points */ #define TA_CONTOURS_EMBEDDED 8 /* number of embedded contours */ typedef struct TA_GlyphHintsRec_ { FT_Fixed x_scale; FT_Pos x_delta; FT_Fixed y_scale; FT_Pos y_delta; FT_Int max_points; /* number of allocated points */ FT_Int num_points; /* number of used points */ TA_Point points; /* points array */ FT_Int max_contours; /* number of allocated contours */ FT_Int num_contours; /* number of used contours */ TA_Point* contours; /* contours array */ TA_AxisHintsRec axis[TA_DIMENSION_MAX]; FT_UInt32 scaler_flags; /* copy of scaler flags */ FT_UInt32 other_flags; /* free for style-specific implementations */ TA_StyleMetrics metrics; FT_Pos xmin_delta; /* used for warping */ FT_Pos xmax_delta; TA_Hints_Recorder recorder; void* user; /* two arrays to avoid allocation penalty; */ /* the `embedded' structure must be the last element! */ struct { TA_Point contours[TA_CONTOURS_EMBEDDED]; TA_PointRec points[TA_POINTS_EMBEDDED]; } embedded; } TA_GlyphHintsRec; #define TA_HINTS_TEST_SCALER(h, f) \ ((h)->scaler_flags & (f)) #define TA_HINTS_TEST_OTHER(h, f) \ ((h)->other_flags & (f)) #ifdef TA_DEBUG #define TA_HINTS_DO_HORIZONTAL(h) \ (!_ta_debug_disable_horz_hints \ && !TA_HINTS_TEST_SCALER(h, TA_SCALER_FLAG_NO_HORIZONTAL)) #define TA_HINTS_DO_VERTICAL(h) \ (!_ta_debug_disable_vert_hints \ && !TA_HINTS_TEST_SCALER(h, TA_SCALER_FLAG_NO_VERTICAL)) #define TA_HINTS_DO_BLUES(h) \ (!_ta_debug_disable_blue_hints) #else /* !TA_DEBUG */ #define TA_HINTS_DO_HORIZONTAL(h) \ !TA_HINTS_TEST_SCALER(h, TA_SCALER_FLAG_NO_HORIZONTAL) #define TA_HINTS_DO_VERTICAL(h) \ !TA_HINTS_TEST_SCALER(h, TA_SCALER_FLAG_NO_VERTICAL) #define TA_HINTS_DO_BLUES(h) \ 1 #endif /* !TA_DEBUG */ #define TA_HINTS_DO_ADVANCE(h) \ !TA_HINTS_TEST_SCALER(h, TA_SCALER_FLAG_NO_ADVANCE) #define TA_HINTS_DO_WARP(h) \ !TA_HINTS_TEST_SCALER(h, TA_SCALER_FLAG_NO_WARPER) TA_Direction ta_direction_compute(FT_Pos dx, FT_Pos dy); FT_Error ta_axis_hints_new_segment(TA_AxisHints axis, TA_Segment* asegment); FT_Error ta_axis_hints_new_edge(TA_AxisHints axis, FT_Int fpos, TA_Direction dir, FT_Bool top_to_bottom_hinting, TA_Edge* edge); #ifdef TA_DEBUG void ta_glyph_hints_dump_points(TA_GlyphHints hints); void ta_glyph_hints_dump_segments(TA_GlyphHints hints); void ta_glyph_hints_dump_edges(TA_GlyphHints hints); #endif void ta_glyph_hints_init(TA_GlyphHints hints); void ta_glyph_hints_rescale(TA_GlyphHints hints, TA_StyleMetrics metrics); FT_Error ta_glyph_hints_reload(TA_GlyphHints hints, FT_Outline* outline); void ta_glyph_hints_save(TA_GlyphHints hints, FT_Outline* outline); void ta_glyph_hints_align_edge_points(TA_GlyphHints hints, TA_Dimension dim); void ta_glyph_hints_align_strong_points(TA_GlyphHints hints, TA_Dimension dim); void ta_glyph_hints_align_weak_points(TA_GlyphHints hints, TA_Dimension dim); #ifdef TA_CONFIG_OPTION_USE_WARPER void ta_glyph_hints_scale_dim(TA_GlyphHints hints, TA_Dimension dim, FT_Fixed scale, FT_Pos delta); #endif void ta_glyph_hints_done(TA_GlyphHints hints); #define TA_SEGMENT_LEN(seg) \ ((seg)->max_coord - (seg)->min_coord) #define TA_SEGMENT_DIST(seg1, seg2) \ (((seg1)->pos > (seg2)->pos) ? (seg1)->pos - (seg2)->pos \ : (seg2)->pos - (seg1)->pos) #ifdef __cplusplus } /* extern "C" */ #endif #endif /* TAHINTS_H_ */ /* end of tahints.h */ ttfautohint-1.8.1/lib/tahmtx.c0000644000175000001440000000322013153174711016152 0ustar00wlusers00000000000000/* tahmtx.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" FT_Error TA_sfnt_update_hmtx_table(SFNT* sfnt, FONT* font) { SFNT_Table* hmtx_table; FT_Byte* buf_new; FT_ULong buf_len; FT_ULong i; if (sfnt->hmtx_idx == MISSING) return TA_Err_Ok; hmtx_table = &font->tables[sfnt->hmtx_idx]; if (hmtx_table->processed) return TA_Err_Ok; /* the metrics of the added composite element doesn't matter; */ /* for this reason, we simply append two zero bytes, */ /* indicating a zero value in the `leftSideBearing' array */ /* (this works because we don't increase the `numberOfHMetrics' field) */ hmtx_table->len += 2; /* make the allocated buffer length a multiple of 4 */ buf_len = (hmtx_table->len + 3) & ~3U; buf_new = (FT_Byte*)realloc(hmtx_table->buf, buf_len); if (!buf_new) { hmtx_table->len -= 2; return FT_Err_Out_Of_Memory; } /* pad end of buffer with zeros */ for (i = hmtx_table->len - 2; i < buf_len; i++) buf_new[i] = 0x00; hmtx_table->buf = buf_new; hmtx_table->checksum = TA_table_compute_checksum(hmtx_table->buf, hmtx_table->len); hmtx_table->processed = 1; return TA_Err_Ok; } /* end of tahmtx.c */ ttfautohint-1.8.1/lib/talatin.c0000644000175000001440000031310613211547444016312 0ustar00wlusers00000000000000/* talatin.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `aflatin.c' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #include #include #include FT_ADVANCES_H #include FT_TRUETYPE_TABLES_H #include "taglobal.h" #include "talatin.h" #include "tasort.h" #ifdef TA_CONFIG_OPTION_USE_WARPER #include "tawarp.h" #endif #include /* needed for computation of round vs. flat segments */ #define FLAT_THRESHOLD(x) (x / 14) /* find segments and links, compute all stem widths, and initialize */ /* standard width and height for the glyph with given charcode */ void ta_latin_metrics_init_widths(TA_LatinMetrics metrics, FT_Face face, FT_Bool use_cmap) { /* scan the array of segments in each direction */ TA_GlyphHintsRec hints[1]; TA_LOG_GLOBAL(("\n" "latin standard widths computation (style `%s')\n" "=====================================================\n" "\n", ta_style_names[metrics->root.style_class->style])); ta_glyph_hints_init(hints); metrics->axis[TA_DIMENSION_HORZ].width_count = 0; metrics->axis[TA_DIMENSION_VERT].width_count = 0; { FT_Error error; FT_ULong glyph_index; int dim, dim_max; TA_LatinMetricsRec dummy[1]; TA_Scaler scaler = &dummy->root.scaler; TA_StyleClass style_class = metrics->root.style_class; TA_ScriptClass script_class = ta_script_classes[style_class->script]; FONT* font = metrics->root.globals->font; void* shaper_buf; const char* p; #ifdef TA_DEBUG FT_ULong ch = 0; #endif /* if the user provides horizontal stem widths, */ /* apply the algorithm only along the horizontal axis */ TA_control_set_stem_widths(metrics, font); if (metrics->axis[TA_DIMENSION_VERT].width_count) { TA_LatinAxis axis = &metrics->axis[TA_DIMENSION_VERT]; dim_max = TA_DIMENSION_VERT; axis->standard_width = axis->widths[0].org; axis->edge_distance_threshold = axis->standard_width / 5; axis->extra_light = 0; #ifdef TA_DEBUG { FT_UInt i; TA_LOG_GLOBAL(("horizontal widths (user provided):\n" )); TA_LOG_GLOBAL((" %d (standard)", axis->standard_width)); for (i = 1; i < axis->width_count; i++) TA_LOG_GLOBAL((" %d", axis->widths[i].org)); TA_LOG_GLOBAL(("\n")); } #endif } else dim_max = TA_DIMENSION_MAX; if (!use_cmap) goto Exit; p = script_class->standard_charstring; shaper_buf = ta_shaper_buf_create(face); /* * We check a list of standard characters to catch features like * `c2sc' (small caps from caps) that don't contain lowercase letters * by definition, or other features that mainly operate on numerals. * The first match wins. */ glyph_index = 0; while (*p) { unsigned int num_idx; #ifdef TA_DEBUG const char* p_old; #endif while (*p == ' ') p++; #ifdef TA_DEBUG p_old = p; GET_UTF8_CHAR(ch, p_old); #endif /* reject input that maps to more than a single glyph */ p = ta_shaper_get_cluster(p, &metrics->root, shaper_buf, &num_idx); if (num_idx > 1) continue; /* otherwise exit loop if we have a result */ glyph_index = ta_shaper_get_elem(&metrics->root, shaper_buf, 0, NULL, NULL); if (glyph_index) break; } ta_shaper_buf_destroy(face, shaper_buf); if (!glyph_index) { TA_LOG_GLOBAL(("no standard character\n")); goto Exit; } TA_LOG_GLOBAL(("standard character: U+%04lX (glyph index %d)\n", ch, glyph_index)); error = FT_Load_Glyph(face, glyph_index, FT_LOAD_NO_SCALE); if (error || face->glyph->outline.n_points <= 0) goto Exit; memset(dummy, 0, sizeof (TA_LatinMetricsRec)); dummy->units_per_em = metrics->units_per_em; scaler->x_scale = 0x10000L; scaler->y_scale = 0x10000L; scaler->x_delta = 0; scaler->y_delta = 0; scaler->face = face; scaler->render_mode = FT_RENDER_MODE_NORMAL; scaler->flags = 0; ta_glyph_hints_rescale(hints, (TA_StyleMetrics)dummy); error = ta_glyph_hints_reload(hints, &face->glyph->outline); if (error) goto Exit; for (dim = 0; dim < dim_max; dim++) { TA_LatinAxis axis = &metrics->axis[dim]; TA_AxisHints axhints = &hints->axis[dim]; TA_Segment seg, limit, link; FT_UInt num_widths = 0; error = ta_latin_hints_compute_segments(hints, (TA_Dimension)dim); if (error) goto Exit; /* * We assume that the glyphs selected for the stem width * computation are `featureless' enough so that the linking * algorithm works fine without adjustments of its scoring * function. */ ta_latin_hints_link_segments(hints, 0, NULL, (TA_Dimension)dim); seg = axhints->segments; limit = seg + axhints->num_segments; for (; seg < limit; seg++) { link = seg->link; /* we only consider stem segments there! */ if (link && link->link == seg && link > seg) { FT_Pos dist; dist = seg->pos - link->pos; if (dist < 0) dist = -dist; if (num_widths < TA_LATIN_MAX_WIDTHS) axis->widths[num_widths++].org = dist; } } /* this also replaces multiple almost identical stem widths */ /* with a single one (the value 100 is heuristic) */ ta_sort_and_quantize_widths(&num_widths, axis->widths, dummy->units_per_em / 100); axis->width_count = num_widths; } Exit: for (dim = 0; dim < dim_max; dim++) { TA_LatinAxis axis = &metrics->axis[dim]; FT_Pos stdw; if (!axis->width_count) { /* if we have no standard characters, */ /* use `fallback-stem-width', if available, */ /* or a default width (value 50 is heuristic) */ if (dim == TA_DIMENSION_VERT && font->fallback_stem_width) { stdw = (FT_Pos)font->fallback_stem_width; TA_LOG_GLOBAL(("using horizontal fallback stem width\n")); } else { stdw = TA_LATIN_CONSTANT(metrics, 50); TA_LOG_GLOBAL(("using a default %s stem width\n", dim == TA_DIMENSION_VERT ? "horizontal" : "vertical")); } axis->width_count++; axis->widths[0].org = stdw; } stdw = axis->widths[0].org; /* let's try 20% of the smallest width */ axis->edge_distance_threshold = stdw / 5; axis->standard_width = stdw; axis->extra_light = 0; #ifdef TA_DEBUG { FT_UInt i; TA_LOG_GLOBAL(("%s widths:\n", dim == TA_DIMENSION_VERT ? "horizontal" : "vertical")); TA_LOG_GLOBAL((" %d (standard)", axis->standard_width)); for (i = 1; i < axis->width_count; i++) TA_LOG_GLOBAL((" %d", axis->widths[i].org)); TA_LOG_GLOBAL(("\n")); } #endif } } TA_LOG_GLOBAL(("\n")); ta_glyph_hints_done(hints); } static void ta_latin_sort_blue(FT_UInt count, TA_LatinBlue* table) { FT_UInt i; FT_UInt j; TA_LatinBlue swap; /* we sort from bottom to top */ for (i = 1; i < count; i++) { for (j = i; j > 0; j--) { FT_Pos a, b; if (table[j - 1]->flags & (TA_LATIN_BLUE_TOP | TA_LATIN_BLUE_SUB_TOP)) a = table[j - 1]->ref.org; else a = table[j - 1]->shoot.org; if (table[j]->flags & (TA_LATIN_BLUE_TOP | TA_LATIN_BLUE_SUB_TOP)) b = table[j]->ref.org; else b = table[j]->shoot.org; if (b >= a) break; swap = table[j]; table[j] = table[j - 1]; table[j - 1] = swap; } } } /* find all blue zones; flat segments give the reference points, */ /* round segments the overshoot positions */ static void ta_latin_metrics_init_blues(TA_LatinMetrics metrics, FT_Face face) { FT_Pos flats[TA_BLUE_STRING_MAX_LEN]; FT_Pos rounds[TA_BLUE_STRING_MAX_LEN]; FT_UInt num_flats; FT_UInt num_rounds; TA_LatinBlue blue; FT_Error error; TA_LatinAxis axis = &metrics->axis[TA_DIMENSION_VERT]; FT_Outline outline; TA_StyleClass sc = metrics->root.style_class; TA_Blue_Stringset bss = sc->blue_stringset; const TA_Blue_StringRec* bs = &ta_blue_stringsets[bss]; FT_Pos flat_threshold = FLAT_THRESHOLD(metrics->units_per_em); void* shaper_buf; /* we walk over the blue character strings as specified in the */ /* style's entry in the `ta_blue_stringset' array */ TA_LOG_GLOBAL(("latin blue zones computation\n" "============================\n" "\n")); shaper_buf = ta_shaper_buf_create(face); for (; bs->string != TA_BLUE_STRING_MAX; bs++) { const char* p = &ta_blue_strings[bs->string]; FT_Pos* blue_ref; FT_Pos* blue_shoot; FT_Pos ascender; FT_Pos descender; #ifdef TA_DEBUG { FT_Bool have_flag = 0; TA_LOG_GLOBAL(("blue zone %d", axis->blue_count)); if (bs->properties) { TA_LOG_GLOBAL((" (")); if (TA_LATIN_IS_TOP_BLUE(bs)) { TA_LOG_GLOBAL(("top")); have_flag = 1; } else if (TA_LATIN_IS_SUB_TOP_BLUE(bs)) { TA_LOG_GLOBAL(("sub top")); have_flag = 1; } if (TA_LATIN_IS_NEUTRAL_BLUE(bs)) { if (have_flag) TA_LOG_GLOBAL((", ")); TA_LOG_GLOBAL(("neutral")); have_flag = 1; } if (TA_LATIN_IS_X_HEIGHT_BLUE(bs)) { if (have_flag) TA_LOG_GLOBAL((", ")); TA_LOG_GLOBAL(("small top")); have_flag = 1; } if (TA_LATIN_IS_LONG_BLUE(bs)) { if (have_flag) TA_LOG_GLOBAL((", ")); TA_LOG_GLOBAL(("long")); } TA_LOG_GLOBAL((")")); } TA_LOG_GLOBAL((":\n")); } #endif /* TA_DEBUG */ num_flats = 0; num_rounds = 0; ascender = 0; descender = 0; while (*p) { FT_ULong glyph_index; FT_Long y_offset; FT_Int best_point, best_contour_first, best_contour_last; FT_Vector* points; FT_Pos best_y_extremum; /* same as points.y */ FT_Bool best_round = 0; unsigned int i, num_idx; #ifdef TA_DEBUG const char* p_old; FT_ULong ch; #endif while (*p == ' ') p++; #ifdef TA_DEBUG p_old = p; GET_UTF8_CHAR(ch, p_old); #endif p = ta_shaper_get_cluster(p, &metrics->root, shaper_buf, &num_idx); if (!num_idx) { TA_LOG_GLOBAL((" U+%04lX unavailable\n", ch)); continue; } if (TA_LATIN_IS_TOP_BLUE(bs)) best_y_extremum = FT_INT_MIN; else best_y_extremum = FT_INT_MAX; /* iterate over all glyph elements of the character cluster */ /* and get the data of the `biggest' one */ for (i = 0; i < num_idx; i++) { FT_Pos best_y; FT_Bool round = 0; /* load the character in the face -- skip unknown or empty ones */ glyph_index = ta_shaper_get_elem(&metrics->root, shaper_buf, i, NULL, &y_offset); if (glyph_index == 0) { TA_LOG_GLOBAL((" U+%04lX unavailable\n", ch)); continue; } error = FT_Load_Glyph(face, glyph_index, FT_LOAD_NO_SCALE); outline = face->glyph->outline; /* reject glyphs that don't produce any rendering */ if (error || outline.n_points <= 2) { #ifdef TA_DEBUG if (num_idx == 1) TA_LOG_GLOBAL((" U+%04lX contains no (usable) outlines\n", ch)); else TA_LOG_GLOBAL((" component %d of cluster starting with U+%04lX" " contains no (usable) outlines\n", i, ch)); #endif continue; } /* now compute min or max point indices and coordinates */ points = outline.points; best_point = -1; best_y = 0; /* make compiler happy */ best_contour_first = 0; /* ditto */ best_contour_last = 0; /* ditto */ { FT_Int nn; FT_Int first = 0; FT_Int last = -1; for (nn = 0; nn < outline.n_contours; first = last + 1, nn++) { FT_Int old_best_point = best_point; FT_Int pp; last = outline.contours[nn]; /* avoid single-point contours since they are never */ /* rasterized; in some fonts, they correspond to mark */ /* attachment points that are way outside of the glyph's */ /* real outline */ if (last <= first) continue; if (TA_LATIN_IS_TOP_BLUE(bs) || TA_LATIN_IS_SUB_TOP_BLUE(bs)) { for (pp = first; pp <= last; pp++) { if (best_point < 0 || points[pp].y > best_y) { best_point = pp; best_y = points[pp].y; ascender = TA_MAX(ascender, best_y + y_offset); } else descender = TA_MIN(descender, points[pp].y + y_offset); } } else { for (pp = first; pp <= last; pp++) { if (best_point < 0 || points[pp].y < best_y) { best_point = pp; best_y = points[pp].y; descender = TA_MIN(descender, best_y + y_offset); } else ascender = TA_MAX(ascender, points[pp].y + y_offset); } } if (best_point != old_best_point) { best_contour_first = first; best_contour_last = last; } } } /* now check whether the point belongs to a straight or round */ /* segment; we first need to find in which contour the extremum */ /* lies, then inspect its previous and next points */ if (best_point >= 0) { FT_Pos best_x = points[best_point].x; FT_Int prev, next; FT_Int best_segment_first, best_segment_last; FT_Int best_on_point_first, best_on_point_last; FT_Pos dist; best_segment_first = best_point; best_segment_last = best_point; if (FT_CURVE_TAG(outline.tags[best_point]) == FT_CURVE_TAG_ON) { best_on_point_first = best_point; best_on_point_last = best_point; } else { best_on_point_first = -1; best_on_point_last = -1; } /* look for the previous and next points on the contour */ /* that are not on the same Y coordinate, then threshold */ /* the `closeness'... */ prev = best_point; next = prev; do { if (prev > best_contour_first) prev--; else prev = best_contour_last; dist = TA_ABS(points[prev].y - best_y); /* accept a small distance or a small angle (both values are */ /* heuristic; value 20 corresponds to approx. 2.9 degrees) */ if (dist > 5) if (TA_ABS(points[prev].x - best_x) <= 20 * dist) break; best_segment_first = prev; if (FT_CURVE_TAG(outline.tags[prev]) == FT_CURVE_TAG_ON) { best_on_point_first = prev; if (best_on_point_last < 0) best_on_point_last = prev; } } while (prev != best_point); do { if (next < best_contour_last) next++; else next = best_contour_first; dist = TA_ABS(points[next].y - best_y); if (dist > 5) if (TA_ABS(points[next].x - best_x) <= 20 * dist) break; best_segment_last = next; if (FT_CURVE_TAG(outline.tags[next]) == FT_CURVE_TAG_ON) { best_on_point_last = next; if (best_on_point_first < 0) best_on_point_first = next; } } while (next != best_point); if (TA_LATIN_IS_LONG_BLUE(bs)) { /* If this flag is set, we have an additional constraint to */ /* get the blue zone distance: Find a segment of the topmost */ /* (or bottommost) contour that is longer than a heuristic */ /* threshold. This ensures that small bumps in the outline */ /* are ignored (for example, the `vertical serifs' found in */ /* many Hebrew glyph designs). */ /* If this segment is long enough, we are done. Otherwise, */ /* search the segment next to the extremum that is long */ /* enough, has the same direction, and a not too large */ /* vertical distance from the extremum. Note that the */ /* algorithm doesn't check whether the found segment is */ /* actually the one (vertically) nearest to the extremum. */ /* heuristic threshold value */ FT_Pos length_threshold = metrics->units_per_em / 25; dist = TA_ABS(points[best_segment_last].x - points[best_segment_first].x); if (dist < length_threshold && best_segment_last - best_segment_first + 2 <= best_contour_last - best_contour_first) { /* heuristic threshold value */ FT_Pos height_threshold = metrics->units_per_em / 4; FT_Int first; FT_Int last; FT_Bool hit; /* we intentionally declare these two variables */ /* outside of the loop since various compilers emit */ /* incorrect warning messages otherwise, talking about */ /* `possibly uninitialized variables' */ FT_Int p_first = 0; /* make compiler happy */ FT_Int p_last = 0; FT_Bool left2right; /* compute direction */ prev = best_point; do { if (prev > best_contour_first) prev--; else prev = best_contour_last; if (points[prev].x != best_x) break; } while (prev != best_point); /* skip glyph for the degenerate case */ if (prev == best_point) continue; left2right = FT_BOOL(points[prev].x < points[best_point].x); first = best_segment_last; last = first; hit = 0; do { FT_Bool l2r; FT_Pos d; if (!hit) { /* no hit; adjust first point */ first = last; /* also adjust first and last on point */ if (FT_CURVE_TAG(outline.tags[first]) == FT_CURVE_TAG_ON) { p_first = first; p_last = first; } else { p_first = -1; p_last = -1; } hit = 1; } if (last < best_contour_last) last++; else last = best_contour_first; if (TA_ABS(best_y - points[first].y) > height_threshold) { /* vertical distance too large */ hit = 0; continue; } /* same test as above */ dist = TA_ABS(points[last].y - points[first].y); if (dist > 5) if (TA_ABS(points[last].x - points[first].x) <= 20 * dist) { hit = 0; continue; } if (FT_CURVE_TAG(outline.tags[last]) == FT_CURVE_TAG_ON) { p_last = last; if (p_first < 0) p_first = last; } l2r = FT_BOOL(points[first].x < points[last].x); d = TA_ABS(points[last].x - points[first].x); if (l2r == left2right && d >= length_threshold) { /* all constraints are met; update segment after */ /* finding its end */ do { if (last < best_contour_last) last++; else last = best_contour_first; d = TA_ABS(points[last].y - points[first].y); if (d > 5) if (TA_ABS(points[next].x - points[first].x) <= 20 * dist) { if (last > best_contour_first) last--; else last = best_contour_last; break; } p_last = last; if (FT_CURVE_TAG(outline.tags[last]) == FT_CURVE_TAG_ON) { p_last = last; if (p_first < 0) p_first = last; } } while (last != best_segment_first); best_y = points[first].y; best_segment_first = first; best_segment_last = last; best_on_point_first = p_first; best_on_point_last = p_last; break; } } while (last != best_segment_first); } } /* * for computing blue zones, we add the y offset as returned * by the currently used OpenType feature -- * for example, superscript glyphs might be identical * to subscript glyphs with a vertical shift */ best_y += y_offset; #ifdef TA_DEBUG if (num_idx == 1) TA_LOG_GLOBAL((" U+%04lX: best_y = %5ld", ch, best_y)); else TA_LOG_GLOBAL((" component %d of cluster starting with U+%04lX:" " best_y = %5ld", i, ch, best_y)); #endif /* * now set the `round' flag depending on the segment's kind: * * - if the horizontal distance between the first and last * `on' point is larger than a heuristic threshold * we have a flat segment * - if either the first or the last point of the segment is * an `off' point, the segment is round, otherwise it is * flat */ if (best_on_point_first >= 0 && best_on_point_last >= 0 && (TA_ABS(points[best_on_point_last].x - points[best_on_point_first].x)) > flat_threshold) round = 0; else round = FT_BOOL(FT_CURVE_TAG(outline.tags[best_segment_first]) != FT_CURVE_TAG_ON || FT_CURVE_TAG(outline.tags[best_segment_last]) != FT_CURVE_TAG_ON); if (round && TA_LATIN_IS_NEUTRAL_BLUE(bs)) { /* only use flat segments for a neutral blue zone */ TA_LOG_GLOBAL((" (round, skipped)\n")); continue; } TA_LOG_GLOBAL((" (%s)\n", round ? "round" : "flat")); } if (TA_LATIN_IS_TOP_BLUE(bs)) { if (best_y > best_y_extremum) { best_y_extremum = best_y; best_round = round; } } else { if (best_y < best_y_extremum) { best_y_extremum = best_y; best_round = round; } } } /* end for loop */ if (!(best_y_extremum == FT_INT_MIN || best_y_extremum == FT_INT_MAX)) { if (best_round) rounds[num_rounds++] = best_y_extremum; else flats[num_flats++] = best_y_extremum; } } /* end while loop */ if (num_flats == 0 && num_rounds == 0) { /* we couldn't find a single glyph to compute this blue zone, */ /* we will simply ignore it then */ TA_LOG_GLOBAL((" empty\n")); continue; } /* we have computed the contents of the `rounds' and `flats' tables, */ /* now determine the reference and overshoot position of the blue -- */ /* we simply take the median value after a simple sort */ ta_sort_pos(num_rounds, rounds); ta_sort_pos(num_flats, flats); blue = &axis->blues[axis->blue_count]; blue_ref = &blue->ref.org; blue_shoot = &blue->shoot.org; axis->blue_count++; if (num_flats == 0) { *blue_ref = *blue_shoot = rounds[num_rounds / 2]; } else if (num_rounds == 0) { *blue_ref = *blue_shoot = flats[num_flats / 2]; } else { *blue_ref = flats[num_flats / 2]; *blue_shoot = rounds[num_rounds / 2]; } /* there are sometimes problems if the overshoot position of top */ /* zones is under its reference position, or the opposite for bottom */ /* zones; we must thus check everything there and correct the errors */ if (*blue_shoot != *blue_ref) { FT_Pos ref = *blue_ref; FT_Pos shoot = *blue_shoot; FT_Bool over_ref = FT_BOOL(shoot > ref); if ((TA_LATIN_IS_TOP_BLUE(bs) || TA_LATIN_IS_SUB_TOP_BLUE(bs)) ^ over_ref) { *blue_ref = *blue_shoot = (shoot + ref) / 2; TA_LOG_GLOBAL((" [overshoot smaller than reference," " taking mean value]\n")); } } blue->ascender = ascender; blue->descender = descender; blue->flags = 0; if (TA_LATIN_IS_TOP_BLUE(bs)) blue->flags |= TA_LATIN_BLUE_TOP; if (TA_LATIN_IS_SUB_TOP_BLUE(bs)) blue->flags |= TA_LATIN_BLUE_SUB_TOP; if (TA_LATIN_IS_NEUTRAL_BLUE(bs)) blue->flags |= TA_LATIN_BLUE_NEUTRAL; /* the following flag is used later to adjust the y and x scales */ /* in order to optimize the pixel grid alignment */ /* of the top of small letters */ if (TA_LATIN_IS_X_HEIGHT_BLUE(bs)) blue->flags |= TA_LATIN_BLUE_ADJUSTMENT; TA_LOG_GLOBAL((" -> reference = %ld\n" " overshoot = %ld\n", *blue_ref, *blue_shoot)); } /* end for loop */ ta_shaper_buf_destroy(face, shaper_buf); /* if windows compatibility mode is activated, */ /* add two artificial blue zones for usWinAscent and usWinDescent */ /* just in case the above algorithm has missed them -- */ /* Windows cuts off everything outside of those two values */ if (metrics->root.globals->font->windows_compatibility) { TT_OS2* os2; os2 = (TT_OS2*)FT_Get_Sfnt_Table(face, ft_sfnt_os2); if (os2) { blue = &axis->blues[axis->blue_count]; blue->flags = TA_LATIN_BLUE_TOP | TA_LATIN_BLUE_ACTIVE; blue->ref.org = blue->shoot.org = os2->usWinAscent; TA_LOG_GLOBAL(("artificial blue zone for usWinAscent:\n" " -> reference = %ld\n" " overshoot = %ld\n", blue->ref.org, blue->shoot.org)); blue = &axis->blues[axis->blue_count + 1]; blue->flags = TA_LATIN_BLUE_ACTIVE; blue->ref.org = blue->shoot.org = -os2->usWinDescent; TA_LOG_GLOBAL(("artificial blue zone for usWinDescent:\n" " -> reference = %ld\n" " overshoot = %ld\n", blue->ref.org, blue->shoot.org)); } else { blue = &axis->blues[axis->blue_count]; blue->flags = blue->ref.org = blue->shoot.org = 0; blue = &axis->blues[axis->blue_count + 1]; blue->flags = blue->ref.org = blue->shoot.org = 0; } } /* we finally check whether blue zones are ordered; */ /* `ref' and `shoot' values of two blue zones must not overlap */ if (axis->blue_count) { FT_UInt i; TA_LatinBlue blue_sorted[TA_BLUE_STRINGSET_MAX_LEN + 2]; for (i = 0; i < axis->blue_count; i++) blue_sorted[i] = &axis->blues[i]; /* sort bottoms of blue zones... */ ta_latin_sort_blue(axis->blue_count, blue_sorted); /* ...and adjust top values if necessary */ for (i = 0; i < axis->blue_count - 1; i++) { FT_Pos* a; FT_Pos* b; #ifdef TA_DEBUG FT_Bool a_is_top = 0; #endif if (blue_sorted[i]->flags & (TA_LATIN_BLUE_TOP | TA_LATIN_BLUE_SUB_TOP)) { a = &blue_sorted[i]->shoot.org; #ifdef TA_DEBUG a_is_top = 1; #endif } else a = &blue_sorted[i]->ref.org; if (blue_sorted[i + 1]->flags & (TA_LATIN_BLUE_TOP | TA_LATIN_BLUE_SUB_TOP)) b = &blue_sorted[i + 1]->shoot.org; else b = &blue_sorted[i + 1]->ref.org; if (*a > *b) { *a = *b; TA_LOG_GLOBAL(("blue zone overlap:" " adjusting %s %d to %ld\n", a_is_top ? "overshoot" : "reference", blue_sorted[i] - axis->blues, *a)); } } } TA_LOG_GLOBAL(("\n")); return; } /* check whether all ASCII digits have the same advance width */ void ta_latin_metrics_check_digits(TA_LatinMetrics metrics, FT_Face face) { FT_Bool started = 0, same_width = 1; FT_Fixed advance = 0, old_advance = 0; void* shaper_buf; /* in all supported charmaps, digits have character codes 0x30-0x39 */ const char digits[] = "0 1 2 3 4 5 6 7 8 9"; const char* p; p = digits; shaper_buf = ta_shaper_buf_create(face); while (*p) { FT_ULong glyph_index; unsigned int num_idx; /* reject input that maps to more than a single glyph */ p = ta_shaper_get_cluster(p, &metrics->root, shaper_buf, &num_idx); if (num_idx > 1) continue; glyph_index = ta_shaper_get_elem(&metrics->root, shaper_buf, 0, &advance, NULL); if (!glyph_index) continue; if (started) { if (advance != old_advance) { same_width = 0; break; } } else { old_advance = advance; started = 1; } } ta_shaper_buf_destroy(face, shaper_buf); metrics->root.digits_have_same_width = same_width; } /* initialize global metrics */ FT_Error ta_latin_metrics_init(TA_LatinMetrics metrics, FT_Face face, FT_Face reference) { FT_CharMap oldmap = face->charmap; metrics->units_per_em = face->units_per_EM; if (!FT_Select_Charmap(face, FT_ENCODING_UNICODE)) { ta_latin_metrics_init_widths(metrics, face, 1); ta_latin_metrics_init_blues(metrics, reference ? reference : face); ta_latin_metrics_check_digits(metrics, face); } else { /* we only have a symbol font encoding */ ta_latin_metrics_init_widths(metrics, face, 0); } FT_Set_Charmap(face, oldmap); return FT_Err_Ok; } /* adjust scaling value, then scale and shift widths */ /* and blue zones (if applicable) for given dimension */ static void ta_latin_metrics_scale_dim(TA_LatinMetrics metrics, TA_Scaler scaler, TA_Dimension dim) { FT_Fixed scale; FT_Pos delta; TA_LatinAxis axis; FT_UInt ppem; FT_UInt nn; ppem = metrics->root.scaler.face->size->metrics.x_ppem; if (dim == TA_DIMENSION_HORZ) { scale = scaler->x_scale; delta = scaler->x_delta; } else { scale = scaler->y_scale; delta = scaler->y_delta; } axis = &metrics->axis[dim]; if (axis->org_scale == scale && axis->org_delta == delta) return; axis->org_scale = scale; axis->org_delta = delta; /* correct Y scale to optimize the alignment of the top of */ /* small letters to the pixel grid */ /* (if we do x-height snapping for this ppem value) */ if (!number_set_is_element( metrics->root.globals->font->x_height_snapping_exceptions, (int)ppem)) { TA_LatinAxis Axis = &metrics->axis[TA_DIMENSION_VERT]; TA_LatinBlue blue = NULL; for (nn = 0; nn < Axis->blue_count; nn++) { if (Axis->blues[nn].flags & TA_LATIN_BLUE_ADJUSTMENT) { blue = &Axis->blues[nn]; break; } } if (blue) { FT_Pos scaled; FT_Pos threshold; FT_Pos fitted; FT_UInt limit; scaled = FT_MulFix(blue->shoot.org, scale); limit = metrics->root.globals->increase_x_height; threshold = 40; /* if the `increase-x-height' property is active, */ /* we round up much more often */ if (limit && ppem <= limit && ppem >= TA_PROP_INCREASE_X_HEIGHT_MIN) threshold = 52; fitted = (scaled + threshold) & ~63; if (scaled != fitted) { if (dim == TA_DIMENSION_VERT) { FT_Pos max_height; FT_Pos dist; FT_Fixed new_scale; new_scale = FT_MulDiv(scale, fitted, scaled); /* the scaling should not change the result by more than two pixels */ max_height = metrics->units_per_em; for (nn = 0; nn < Axis->blue_count; nn++) { max_height = TA_MAX(max_height, Axis->blues[nn].ascender); max_height = TA_MAX(max_height, -Axis->blues[nn].descender); } dist = TA_ABS(FT_MulFix(max_height, new_scale - scale)); dist &= ~127; if (dist == 0) { TA_LOG_GLOBAL(( "ta_latin_metrics_scale_dim:" " x height alignment (style `%s'):\n" " " " vertical scaling changed from %.5f to %.5f (by %d%%)\n" "\n", ta_style_names[metrics->root.style_class->style], scale / 65536.0, new_scale / 65536.0, (fitted - scaled) * 100 / scaled)); scale = new_scale; } #ifdef TA_DEBUG else { TA_LOG_GLOBAL(( "ta_latin_metrics_scale_dim:" " x height alignment (style `%s'):\n" " " " excessive vertical scaling abandoned\n" "\n", ta_style_names[metrics->root.style_class->style])); } #endif } } } } axis->scale = scale; axis->delta = delta; if (dim == TA_DIMENSION_HORZ) { metrics->root.scaler.x_scale = scale; metrics->root.scaler.x_delta = delta; } else { metrics->root.scaler.y_scale = scale; metrics->root.scaler.y_delta = delta; } TA_LOG_GLOBAL(("%s widths (style `%s')\n", dim == TA_DIMENSION_HORZ ? "horizontal" : "vertical", ta_style_names[metrics->root.style_class->style])); /* scale the widths */ for (nn = 0; nn < axis->width_count; nn++) { TA_Width width = axis->widths + nn; width->cur = FT_MulFix(width->org, scale); width->fit = width->cur; TA_LOG_GLOBAL((" %d scaled to %.2f\n", width->org, width->cur / 64.0)); } TA_LOG_GLOBAL(("\n")); /* an extra-light axis corresponds to a standard width that is */ /* smaller than 5/8 pixels */ axis->extra_light = (FT_Bool)(FT_MulFix(axis->standard_width, scale) < 32 + 8); #ifdef TA_DEBUG if (axis->extra_light) TA_LOG_GLOBAL(("`%s' style is extra light (at current resolution)\n" "\n", ta_style_names[metrics->root.style_class->style])); #endif if (dim == TA_DIMENSION_VERT) { #ifdef TA_DEBUG if (axis->blue_count) TA_LOG_GLOBAL(("blue zones (style `%s')\n", ta_style_names[metrics->root.style_class->style])); #endif /* scale the blue zones */ for (nn = 0; nn < axis->blue_count; nn++) { TA_LatinBlue blue = &axis->blues[nn]; FT_Pos dist; blue->ref.cur = FT_MulFix(blue->ref.org, scale) + delta; blue->ref.fit = blue->ref.cur; blue->shoot.cur = FT_MulFix(blue->shoot.org, scale) + delta; blue->shoot.fit = blue->shoot.cur; blue->flags &= ~TA_LATIN_BLUE_ACTIVE; /* a blue zone is only active if it is less than 3/4 pixels tall */ dist = FT_MulFix(blue->ref.org - blue->shoot.org, scale); if (dist <= 48 && dist >= -48) { #if 0 FT_Pos delta1; #endif FT_Pos delta2; /* use discrete values for blue zone widths */ #if 0 /* generic, original code */ delta1 = blue->shoot.org - blue->ref.org; delta2 = delta1; if (delta1 < 0) delta2 = -delta2; delta2 = FT_MulFix(delta2, scale); if (delta2 < 32) delta2 = 0; else if (delta2 < 64) delta2 = 32 + (((delta2 - 32) + 16) & ~31); else delta2 = TA_PIX_ROUND(delta2); if (delta1 < 0) delta2 = -delta2; blue->ref.fit = TA_PIX_ROUND(blue->ref.cur); blue->shoot.fit = blue->ref.fit + delta2; #else /* simplified version due to abs(dist) <= 48 */ delta2 = dist; if (dist < 0) delta2 = -delta2; if (delta2 < 32) delta2 = 0; else if (delta2 < 48) delta2 = 32; else delta2 = 64; if (dist < 0) delta2 = -delta2; blue->ref.fit = TA_PIX_ROUND(blue->ref.cur); blue->shoot.fit = blue->ref.fit - delta2; #endif blue->flags |= TA_LATIN_BLUE_ACTIVE; } } /* use sub-top blue zone only if it doesn't overlap with */ /* another (non-sup-top) blue zone; otherwise, the */ /* effect would be similar to a neutral blue zone, which */ /* is not desired here */ for (nn = 0; nn < axis->blue_count; nn++) { TA_LatinBlue blue = &axis->blues[nn]; FT_UInt i; if (!(blue->flags & TA_LATIN_BLUE_SUB_TOP)) continue; if (!(blue->flags & TA_LATIN_BLUE_ACTIVE)) continue; for (i = 0; i < axis->blue_count; i++) { TA_LatinBlue b = &axis->blues[i]; if (b->flags & TA_LATIN_BLUE_SUB_TOP) continue; if (!(b->flags & TA_LATIN_BLUE_ACTIVE)) continue; if (b->ref.fit <= blue->shoot.fit && b->shoot.fit >= blue->ref.fit) { blue->flags &= ~TA_LATIN_BLUE_ACTIVE; break; } } } #ifdef TA_DEBUG for (nn = 0; nn < axis->blue_count; nn++) { TA_LatinBlue blue = &axis->blues[nn]; TA_LOG_GLOBAL((" reference %d: %d scaled to %.2f%s\n" " overshoot %d: %d scaled to %.2f%s\n", nn, blue->ref.org, blue->ref.fit / 64.0, blue->flags & TA_LATIN_BLUE_ACTIVE ? "" : " (inactive)", nn, blue->shoot.org, blue->shoot.fit / 64.0, blue->flags & TA_LATIN_BLUE_ACTIVE ? "" : " (inactive)")); } #endif /* the last two artificial blue zones are to be scaled */ /* with uncorrected scaling values */ if (metrics->root.globals->font->windows_compatibility) { TA_LatinAxis a = &metrics->axis[TA_DIMENSION_VERT]; TA_LatinBlue b; b = &a->blues[a->blue_count]; b->ref.cur = b->ref.fit = b->shoot.cur = b->shoot.fit = FT_MulFix(b->ref.org, a->org_scale) + delta; TA_LOG_GLOBAL((" reference %d: %d scaled to %.2f (artificial)\n" " overshoot %d: %d scaled to %.2f (artificial)\n", a->blue_count, b->ref.org, b->ref.fit / 64.0, a->blue_count, b->shoot.org, b->shoot.fit / 64.0)); b = &a->blues[a->blue_count + 1]; b->ref.cur = b->ref.fit = b->shoot.cur = b->shoot.fit = FT_MulFix(b->ref.org, a->org_scale) + delta; TA_LOG_GLOBAL((" reference %d: %d scaled to %.2f (artificial)\n" " overshoot %d: %d scaled to %.2f (artificial)\n", a->blue_count + 1, b->ref.org, b->ref.fit / 64.0, a->blue_count + 1, b->shoot.org, b->shoot.fit / 64.0)); } TA_LOG_GLOBAL(("\n")); } } /* scale global values in both directions */ void ta_latin_metrics_scale(TA_LatinMetrics metrics, TA_Scaler scaler) { metrics->root.scaler.render_mode = scaler->render_mode; metrics->root.scaler.face = scaler->face; metrics->root.scaler.flags = scaler->flags; ta_latin_metrics_scale_dim(metrics, scaler, TA_DIMENSION_HORZ); ta_latin_metrics_scale_dim(metrics, scaler, TA_DIMENSION_VERT); } /* walk over all contours and compute its segments */ FT_Error ta_latin_hints_compute_segments(TA_GlyphHints hints, TA_Dimension dim) { TA_LatinMetrics metrics = (TA_LatinMetrics)hints->metrics; TA_AxisHints axis = &hints->axis[dim]; FT_Error error = FT_Err_Ok; TA_Segment segment = NULL; TA_SegmentRec seg0; TA_Point* contour = hints->contours; TA_Point* contour_limit = contour + hints->num_contours; TA_Direction major_dir, segment_dir; FT_Pos flat_threshold = FLAT_THRESHOLD(metrics->units_per_em); memset(&seg0, 0, sizeof (TA_SegmentRec)); seg0.score = 32000; seg0.flags = TA_EDGE_NORMAL; major_dir = (TA_Direction)TA_ABS(axis->major_dir); segment_dir = major_dir; axis->num_segments = 0; /* set up (u,v) in each point */ if (dim == TA_DIMENSION_HORZ) { TA_Point point = hints->points; TA_Point limit = point + hints->num_points; for (; point < limit; point++) { point->u = point->fx; point->v = point->fy; } } else { TA_Point point = hints->points; TA_Point limit = point + hints->num_points; for (; point < limit; point++) { point->u = point->fy; point->v = point->fx; } } /* do each contour separately */ for (; contour < contour_limit; contour++) { TA_Point point = contour[0]; TA_Point last = point->prev; int on_edge = 0; /* we call values measured along a segment (point->v) */ /* `coordinates', and values orthogonal to it (point->u) */ /* `positions' */ FT_Pos min_pos = 32000; FT_Pos max_pos = -32000; FT_Pos min_coord = 32000; FT_Pos max_coord = -32000; FT_UShort min_flags = TA_FLAG_NONE; FT_UShort max_flags = TA_FLAG_NONE; FT_Pos min_on_coord = 32000; FT_Pos max_on_coord = -32000; FT_Bool passed; TA_Segment prev_segment = NULL; FT_Pos prev_min_pos = min_pos; FT_Pos prev_max_pos = max_pos; FT_Pos prev_min_coord = min_coord; FT_Pos prev_max_coord = max_coord; FT_UShort prev_min_flags = min_flags; FT_UShort prev_max_flags = max_flags; FT_Pos prev_min_on_coord = min_on_coord; FT_Pos prev_max_on_coord = max_on_coord; if (TA_ABS(last->out_dir) == major_dir && TA_ABS(point->out_dir) == major_dir) { /* we are already on an edge, try to locate its start */ last = point; for (;;) { point = point->prev; if (TA_ABS(point->out_dir) != major_dir) { point = point->next; break; } if (point == last) break; } } last = point; passed = 0; for (;;) { FT_Pos u, v; if (on_edge) { /* get minimum and maximum position */ u = point->u; if (u < min_pos) min_pos = u; if (u > max_pos) max_pos = u; /* get minimum and maximum coordinate together with flags */ v = point->v; if (v < min_coord) { min_coord = v; min_flags = point->flags; } if (v > max_coord) { max_coord = v; max_flags = point->flags; } /* get minimum and maximum coordinate of `on' points */ if (!(point->flags & TA_FLAG_CONTROL)) { v = point->v; if (v < min_on_coord) min_on_coord = v; if (v > max_on_coord) max_on_coord = v; } if (point->out_dir != segment_dir || point == last) { /* check whether the new segment's start point is identical to */ /* the previous segment's end point; for example, this might */ /* happen for spikes */ if (!prev_segment || segment->first != prev_segment->last) { /* points are different: we are just leaving an edge, thus */ /* record a new segment */ segment->last = point; segment->pos = (FT_Short)((min_pos + max_pos) >> 1); segment->delta = (FT_Short)((max_pos - min_pos) >> 1); /* a segment is round if either its first or last point */ /* is a control point, and the length of the on points */ /* inbetween doesn't exceed a heuristic limit */ if ((min_flags | max_flags) & TA_FLAG_CONTROL && (max_on_coord - min_on_coord) < flat_threshold) segment->flags |= TA_EDGE_ROUND; segment->min_coord = (FT_Short)min_coord; segment->max_coord = (FT_Short)max_coord; segment->height = segment->max_coord - segment->min_coord; prev_segment = segment; prev_min_pos = min_pos; prev_max_pos = max_pos; prev_min_coord = min_coord; prev_max_coord = max_coord; prev_min_flags = min_flags; prev_max_flags = max_flags; prev_min_on_coord = min_on_coord; prev_max_on_coord = max_on_coord; } else { /* points are the same: we don't create a new segment but */ /* merge the current segment with the previous one */ if (prev_segment->last->in_dir == point->in_dir) { /* we have identical directions (this can happen for */ /* degenerate outlines that move zig-zag along the main */ /* axis without changing the coordinate value of the other */ /* axis, and where the segments have just been merged): */ /* unify segments */ /* update constraints */ if (prev_min_pos < min_pos) min_pos = prev_min_pos; if (prev_max_pos > max_pos) max_pos = prev_max_pos; if (prev_min_coord < min_coord) { min_coord = prev_min_coord; min_flags = prev_min_flags; } if (prev_max_coord > max_coord) { max_coord = prev_max_coord; max_flags = prev_max_flags; } if (prev_min_on_coord < min_on_coord) min_on_coord = prev_min_on_coord; if (prev_max_on_coord > max_on_coord) max_on_coord = prev_max_on_coord; prev_segment->last = point; prev_segment->pos = (FT_Short)((min_pos + max_pos) >> 1); if ((min_flags | max_flags) & TA_FLAG_CONTROL && (max_on_coord - min_on_coord) < flat_threshold) prev_segment->flags |= TA_EDGE_ROUND; else prev_segment->flags &= ~TA_EDGE_ROUND; prev_segment->min_coord = (FT_Short)min_coord; prev_segment->max_coord = (FT_Short)max_coord; prev_segment->height = prev_segment->max_coord - prev_segment->min_coord; } else { /* we have different directions; use the properties of the */ /* longer segment and discard the other one */ if (TA_ABS(prev_max_coord - prev_min_coord) > TA_ABS(max_coord - min_coord)) { /* discard current segment */ if (min_pos < prev_min_pos) prev_min_pos = min_pos; if (max_pos > prev_max_pos) prev_max_pos = max_pos; prev_segment->last = point; prev_segment->pos = (FT_Short)((prev_min_pos + prev_max_pos) >> 1); } else { /* discard previous segment */ if (prev_min_pos < min_pos) min_pos = prev_min_pos; if (prev_max_pos > max_pos) max_pos = prev_max_pos; segment->last = point; segment->pos = (FT_Short)((min_pos + max_pos) >> 1); if ((min_flags | max_flags) & TA_FLAG_CONTROL && (max_on_coord - min_on_coord) < flat_threshold) segment->flags |= TA_EDGE_ROUND; segment->min_coord = (FT_Short)min_coord; segment->max_coord = (FT_Short)max_coord; segment->height = segment->max_coord - segment->min_coord; *prev_segment = *segment; prev_min_pos = min_pos; prev_max_pos = max_pos; prev_min_coord = min_coord; prev_max_coord = max_coord; prev_min_flags = min_flags; prev_max_flags = max_flags; prev_min_on_coord = min_on_coord; prev_max_on_coord = max_on_coord; } } axis->num_segments--; } on_edge = 0; segment = NULL; /* fall through */ } } /* now exit if we are at the start/end point */ if (point == last) { if (passed) break; passed = 1; } /* if we are not on an edge, check whether the major direction */ /* coincides with the current point's `out' direction, or */ /* whether we have a single-point contour */ if (!on_edge && (TA_ABS(point->out_dir) == major_dir || point == point->prev)) { /* this is the start of a new segment! */ segment_dir = (TA_Direction)point->out_dir; error = ta_axis_hints_new_segment(axis, &segment); if (error) goto Exit; /* clear all segment fields */ segment[0] = seg0; segment->dir = (FT_Char)segment_dir; segment->first = point; segment->last = point; /* `ta_axis_hints_new_segment' reallocates memory, */ /* thus we have to refresh the `prev_segment' pointer */ if (prev_segment) prev_segment = segment - 1; min_pos = max_pos = point->u; min_coord = max_coord = point->v; min_flags = max_flags = point->flags; if (point->flags & TA_FLAG_CONTROL) { min_on_coord = 32000; max_on_coord = -32000; } else min_on_coord = max_on_coord = point->v; on_edge = 1; if (point->out_dir != point->next->in_dir || point == point->prev) { /* * We have a one-point segment. This is either * * . a one-point contour (with `in' and `out' direction * set to TA_DIR_NONE by default), or * * . an artificial one-point segment (with a forced * `out' direction). */ segment->pos = (FT_Short)min_pos; if (point->flags & TA_FLAG_CONTROL) segment->flags |= TA_EDGE_ROUND; /* artificially extend the horizontal size if requested */ segment->min_coord = (FT_Short)point->v + point->left_offset; segment->max_coord = (FT_Short)point->v + point->right_offset; segment->height = 0; on_edge = 0; segment = NULL; } } point = point->next; } } /* contours */ /* now slightly increase the height of segments if this makes sense -- */ /* this is used to better detect and ignore serifs */ { TA_Segment segments = axis->segments; TA_Segment segments_end = segments + axis->num_segments; for (segment = segments; segment < segments_end; segment++) { TA_Point first = segment->first; TA_Point last = segment->last; FT_Pos first_v = first->v; FT_Pos last_v = last->v; if (first_v < last_v) { TA_Point p; p = first->prev; if (p->v < first_v) segment->height = (FT_Short)(segment->height + ((first_v - p->v) >> 1)); p = last->next; if (p->v > last_v) segment->height = (FT_Short)(segment->height + ((p->v - last_v) >> 1)); } else { TA_Point p; p = first->prev; if (p->v > first_v) segment->height = (FT_Short)(segment->height + ((p->v - first_v) >> 1)); p = last->next; if (p->v < last_v) segment->height = (FT_Short)(segment->height + ((last_v - p->v) >> 1)); } } } Exit: return error; } /* link segments to form stems and serifs; if `width_count' and */ /* `widths' are non-zero, use them to fine-tune the scoring function */ void ta_latin_hints_link_segments(TA_GlyphHints hints, FT_UInt width_count, TA_WidthRec* widths, TA_Dimension dim) { TA_AxisHints axis = &hints->axis[dim]; TA_Segment segments = axis->segments; TA_Segment segment_limit = segments + axis->num_segments; FT_Pos len_threshold, len_score, dist_score, max_width; TA_Segment seg1, seg2; if (width_count) max_width = widths[width_count - 1].org; else max_width = 0; /* a heuristic value to set up a minimum value for overlapping */ len_threshold = TA_LATIN_CONSTANT(hints->metrics, 8); if (len_threshold == 0) len_threshold = 1; /* a heuristic value to weight lengths */ len_score = TA_LATIN_CONSTANT(hints->metrics, 6000); /* a heuristic value to weight distances (no call to */ /* TA_LATIN_CONSTANT needed, since we work on multiples */ /* of the stem width) */ dist_score = 3000; /* now compare each segment to the others */ for (seg1 = segments; seg1 < segment_limit; seg1++) { if (seg1->dir != axis->major_dir) continue; /* search for stems having opposite directions, */ /* with seg1 to the `left' of seg2 */ for (seg2 = segments; seg2 < segment_limit; seg2++) { FT_Pos pos1 = seg1->pos; FT_Pos pos2 = seg2->pos; if (seg1->dir + seg2->dir == 0 && pos2 > pos1) { /* compute distance between the two segments */ FT_Pos min = seg1->min_coord; FT_Pos max = seg1->max_coord; FT_Pos len; if (min < seg2->min_coord) min = seg2->min_coord; if (max > seg2->max_coord) max = seg2->max_coord; /* compute maximum coordinate difference of the two segments */ /* (this is, how much they overlap) */ len = max - min; /* for one-point segments, `len' is zero if there is an overlap */ /* (and negative otherwise); we have to correct this */ if (len == 0 && (seg1->min_coord == seg1->max_coord || seg2->min_coord == seg2->max_coord)) len = len_threshold; if (len >= len_threshold) { /* * The score is the sum of two demerits indicating the * `badness' of a fit, measured along the segments' main axis * and orthogonal to it, respectively. * * o The less overlapping along the main axis, the worse it * is, causing a larger demerit. * * o The nearer the orthogonal distance to a stem width, the * better it is, causing a smaller demerit. For simplicity, * however, we only increase the demerit for values that * exceed the largest stem width. */ FT_Pos dist = pos2 - pos1; FT_Pos dist_demerit, score; if (max_width) { /* distance demerits are based on multiples of `max_width'; */ /* we scale by 1024 for getting more precision */ FT_Pos delta = (dist << 10) / max_width - (1 << 10); if (delta > 10000) dist_demerit = 32000; else if (delta > 0) dist_demerit = delta * delta / dist_score; else dist_demerit = 0; } else dist_demerit = dist; /* default if no widths available */ score = dist_demerit + len_score / len; /* and we search for the smallest score */ if (score < seg1->score) { seg1->score = score; seg1->link = seg2; } if (score < seg2->score) { seg2->score = score; seg2->link = seg1; } } } } } /* now compute the `serif' segments, cf. explanations in `tahints.h' */ for (seg1 = segments; seg1 < segment_limit; seg1++) { seg2 = seg1->link; if (seg2) { if (seg2->link != seg1) { seg1->link = 0; seg1->serif = seg2->link; } } } } /* link segments to edges, using feature analysis for selection */ FT_Error ta_latin_hints_compute_edges(TA_GlyphHints hints, TA_Dimension dim) { TA_AxisHints axis = &hints->axis[dim]; FT_Error error = FT_Err_Ok; TA_LatinAxis laxis = &((TA_LatinMetrics)hints->metrics)->axis[dim]; TA_StyleClass style_class = hints->metrics->style_class; TA_ScriptClass script_class = ta_script_classes[style_class->script]; FT_Bool top_to_bottom_hinting = 0; TA_Segment segments = axis->segments; TA_Segment segment_limit = segments + axis->num_segments; TA_Segment seg; #if 0 TA_Direction up_dir; #endif FT_Fixed scale; FT_Pos edge_distance_threshold; FT_Pos segment_length_threshold; FT_Pos segment_width_threshold; axis->num_edges = 0; scale = (dim == TA_DIMENSION_HORZ) ? hints->x_scale : hints->y_scale; #if 0 up_dir = (dim == TA_DIMENSION_HORZ) ? TA_DIR_UP : TA_DIR_RIGHT; #endif if (dim == TA_DIMENSION_VERT) top_to_bottom_hinting = script_class->top_to_bottom_hinting; /* we ignore all segments that are less than 1 pixel in length */ /* to avoid many problems with serif fonts */ /* (the corresponding threshold is computed in font units) */ if (dim == TA_DIMENSION_HORZ) segment_length_threshold = FT_DivFix(64, hints->y_scale); else segment_length_threshold = 0; /* * Similarly, we ignore segments that have a width delta * larger than 0.5px (i.e., a width larger than 1px). */ segment_width_threshold = FT_DivFix(32, scale); /********************************************************************/ /* */ /* We begin by generating a sorted table of edges for the current */ /* direction. To do so, we simply scan each segment and try to find */ /* an edge in our table that corresponds to its position. */ /* */ /* If no edge is found, we create and insert a new edge in the */ /* sorted table. Otherwise, we simply add the segment to the edge's */ /* list which gets processed in the second step to compute the */ /* edge's properties. */ /* */ /* Note that the table of edges is sorted along the segment/edge */ /* position. */ /* */ /********************************************************************/ /* assure that edge distance threshold is at most 0.25px */ edge_distance_threshold = FT_MulFix(laxis->edge_distance_threshold, scale); if (edge_distance_threshold > 64 / 4) edge_distance_threshold = 64 / 4; edge_distance_threshold = FT_DivFix(edge_distance_threshold, scale); for (seg = segments; seg < segment_limit; seg++) { TA_Edge found = NULL; FT_Int ee; /* ignore too short segments, too wide ones, and, in this loop, */ /* one-point segments without a direction */ if (seg->height < segment_length_threshold || seg->delta > segment_width_threshold || seg->dir == TA_DIR_NONE) continue; /* a special case for serif edges: */ /* if they are smaller than 1.5 pixels we ignore them */ if (seg->serif && 2 * seg->height < 3 * segment_length_threshold) continue; /* look for an edge corresponding to the segment */ for (ee = 0; ee < axis->num_edges; ee++) { TA_Edge edge = axis->edges + ee; FT_Pos dist; dist = seg->pos - edge->fpos; if (dist < 0) dist = -dist; if (dist < edge_distance_threshold && edge->dir == seg->dir) { found = edge; break; } } if (!found) { TA_Edge edge; /* insert a new edge in the list and sort according to the position */ error = ta_axis_hints_new_edge(axis, seg->pos, (TA_Direction)seg->dir, top_to_bottom_hinting, &edge); if (error) goto Exit; /* add the segment to the new edge's list */ memset(edge, 0, sizeof (TA_EdgeRec)); edge->first = seg; edge->last = seg; edge->dir = seg->dir; edge->fpos = seg->pos; edge->opos = FT_MulFix(seg->pos, scale); edge->pos = edge->opos; seg->edge_next = seg; } else { /* if an edge was found, simply add the segment to the edge's list */ seg->edge_next = found->first; found->last->edge_next = seg; found->last = seg; } } /* we loop again over all segments to catch one-point segments */ /* without a direction: if possible, link them to existing edges */ for (seg = segments; seg < segment_limit; seg++) { TA_Edge found = NULL; FT_Int ee; if (seg->dir != TA_DIR_NONE) continue; /* look for an edge corresponding to the segment */ for (ee = 0; ee < axis->num_edges; ee++) { TA_Edge edge = axis->edges + ee; FT_Pos dist; dist = seg->pos - edge->fpos; if (dist < 0) dist = -dist; if (dist < edge_distance_threshold) { found = edge; break; } } /* one-point segments without a match are ignored */ if (found) { seg->edge_next = found->first; found->last->edge_next = seg; found->last = seg; } } /*****************************************************************/ /* */ /* Good, we now compute each edge's properties according to */ /* the segments found on its position. Basically, these are */ /* */ /* - the edge's main direction */ /* - stem edge, serif edge or both (which defaults to stem then) */ /* - rounded edge, straight or both (which defaults to straight) */ /* - link for edge */ /* */ /*****************************************************************/ /* first of all, set the `edge' field in each segment -- this is */ /* required in order to compute edge links */ /* note that removing this loop and setting the `edge' field of each */ /* segment directly in the code above slows down execution speed for */ /* some reasons on platforms like the Sun */ { TA_Edge edges = axis->edges; TA_Edge edge_limit = edges + axis->num_edges; TA_Edge edge; for (edge = edges; edge < edge_limit; edge++) { seg = edge->first; if (seg) do { seg->edge = edge; seg = seg->edge_next; } while (seg != edge->first); } /* now compute each edge properties */ for (edge = edges; edge < edge_limit; edge++) { FT_Int is_round = 0; /* does it contain round segments? */ FT_Int is_straight = 0; /* does it contain straight segments? */ #if 0 FT_Pos ups = 0; /* number of upwards segments */ FT_Pos downs = 0; /* number of downwards segments */ #endif seg = edge->first; do { FT_Bool is_serif; /* check for roundness of segment */ if (seg->flags & TA_EDGE_ROUND) is_round++; else is_straight++; #if 0 /* check for segment direction */ if (seg->dir == up_dir) ups += seg->max_coord - seg->min_coord; else downs += seg->max_coord - seg->min_coord; #endif /* check for links -- */ /* if seg->serif is set, then seg->link must be ignored */ is_serif = (FT_Bool)(seg->serif && seg->serif->edge && seg->serif->edge != edge); if ((seg->link && seg->link->edge) || is_serif) { TA_Edge edge2; TA_Segment seg2; edge2 = edge->link; seg2 = seg->link; if (is_serif) { seg2 = seg->serif; edge2 = edge->serif; } if (edge2) { FT_Pos edge_delta; FT_Pos seg_delta; edge_delta = edge->fpos - edge2->fpos; if (edge_delta < 0) edge_delta = -edge_delta; seg_delta = seg->pos - seg2->pos; if (seg_delta < 0) seg_delta = -seg_delta; if (seg_delta < edge_delta) edge2 = seg2->edge; } else edge2 = seg2->edge; if (is_serif) { edge->serif = edge2; edge2->flags |= TA_EDGE_SERIF; } else edge->link = edge2; } seg = seg->edge_next; } while (seg != edge->first); /* set the round/straight flags */ edge->flags = TA_EDGE_NORMAL; if (is_round > 0 && is_round >= is_straight) edge->flags |= TA_EDGE_ROUND; #if 0 /* set the edge's main direction */ edge->dir = TA_DIR_NONE; if (ups > downs) edge->dir = (FT_Char)up_dir; else if (ups < downs) edge->dir = (FT_Char)-up_dir; else if (ups == downs) edge->dir = 0; /* both up and down! */ #endif /* get rid of serifs if link is set */ /* XXX: this gets rid of many unpleasant artefacts! */ /* example: the `c' in cour.pfa at size 13 */ if (edge->serif && edge->link) edge->serif = NULL; } } Exit: return error; } /* detect segments and edges for given dimension */ FT_Error ta_latin_hints_detect_features(TA_GlyphHints hints, FT_UInt width_count, TA_WidthRec* widths, TA_Dimension dim) { FT_Error error; error = ta_latin_hints_compute_segments(hints, dim); if (!error) { ta_latin_hints_link_segments(hints, width_count, widths, dim); error = ta_latin_hints_compute_edges(hints, dim); } return error; } /* compute all edges which lie within blue zones */ static void ta_latin_hints_compute_blue_edges(TA_GlyphHints hints, TA_LatinMetrics metrics) { TA_AxisHints axis = &hints->axis[TA_DIMENSION_VERT]; TA_Edge edge = axis->edges; TA_Edge edge_limit = edge + axis->num_edges; TA_LatinAxis latin = &metrics->axis[TA_DIMENSION_VERT]; FT_Fixed scale = latin->scale; /* compute which blue zones are active, */ /* i.e. have their scaled size < 3/4 pixels */ /* for each horizontal edge search the blue zone which is closest */ for (; edge < edge_limit; edge++) { FT_UInt bb; TA_Width best_blue = NULL; FT_Bool best_blue_is_neutral = 0; FT_Pos best_dist; /* initial threshold */ FT_UInt best_blue_idx = 0; FT_Bool best_blue_is_shoot = 0; /* compute the initial threshold as a fraction of the EM size */ /* (the value 40 is heuristic) */ best_dist = FT_MulFix(metrics->units_per_em / 40, scale); /* assure a minimum distance of 0.5px */ if (best_dist > 64 / 2) best_dist = 64 / 2; /* this loop also handles the two extra blue zones */ /* for usWinAscent and usWinDescent */ /* if option `windows-compatibility' is set */ for (bb = 0; bb < latin->blue_count + (metrics->root.globals->font->windows_compatibility ? 2 : 0); bb++) { TA_LatinBlue blue = latin->blues + bb; FT_Bool is_top_blue, is_neutral_blue, is_major_dir; /* skip inactive blue zones (i.e., those that are too large) */ if (!(blue->flags & TA_LATIN_BLUE_ACTIVE)) continue; /* if it is a top zone, check for right edges (against the major */ /* direction); if it is a bottom zone, check for left edges (in */ /* the major direction) */ is_top_blue = (FT_Byte)((blue->flags & (TA_LATIN_BLUE_TOP | TA_LATIN_BLUE_SUB_TOP)) != 0); is_neutral_blue = (FT_Byte)((blue->flags & TA_LATIN_BLUE_NEUTRAL) != 0); is_major_dir = FT_BOOL(edge->dir == axis->major_dir); /* neutral blue zones are handled for both directions */ if (is_top_blue ^ is_major_dir || is_neutral_blue) { FT_Pos dist; /* first of all, compare it to the reference position */ dist = edge->fpos - blue->ref.org; if (dist < 0) dist = -dist; dist = FT_MulFix(dist, scale); if (dist < best_dist) { best_dist = dist; best_blue = &blue->ref; best_blue_is_neutral = is_neutral_blue; best_blue_idx = bb; best_blue_is_shoot = 0; } /* now compare it to the overshoot position and check whether */ /* the edge is rounded, and whether the edge is over the */ /* reference position of a top zone, or under the reference */ /* position of a bottom zone (provided we don't have a */ /* neutral blue zone) */ if (edge->flags & TA_EDGE_ROUND && dist != 0 && !is_neutral_blue) { FT_Bool is_under_ref = FT_BOOL(edge->fpos < blue->ref.org); if (is_top_blue ^ is_under_ref) { dist = edge->fpos - blue->shoot.org; if (dist < 0) dist = -dist; dist = FT_MulFix(dist, scale); if (dist < best_dist) { best_dist = dist; best_blue = &blue->shoot; best_blue_is_neutral = is_neutral_blue; best_blue_idx = bb; best_blue_is_shoot = 1; } } } } } if (best_blue) { edge->blue_edge = best_blue; edge->best_blue_idx = best_blue_idx; edge->best_blue_is_shoot = best_blue_is_shoot; if (best_blue_is_neutral) edge->flags |= TA_EDGE_NEUTRAL; } } } /* initalize hinting engine */ static FT_Error ta_latin_hints_init(TA_GlyphHints hints, TA_LatinMetrics metrics) { FT_Render_Mode mode; FT_UInt32 scaler_flags, other_flags; FT_Face face = metrics->root.scaler.face; ta_glyph_hints_rescale(hints, (TA_StyleMetrics)metrics); /* correct x_scale and y_scale if needed, since they may have */ /* been modified by `ta_latin_metrics_scale_dim' above */ hints->x_scale = metrics->axis[TA_DIMENSION_HORZ].scale; hints->x_delta = metrics->axis[TA_DIMENSION_HORZ].delta; hints->y_scale = metrics->axis[TA_DIMENSION_VERT].scale; hints->y_delta = metrics->axis[TA_DIMENSION_VERT].delta; /* compute flags depending on render mode, etc. */ mode = metrics->root.scaler.render_mode; #if 0 /* #ifdef TA_CONFIG_OPTION_USE_WARPER */ if (mode == FT_RENDER_MODE_LCD || mode == FT_RENDER_MODE_LCD_V) metrics->root.scaler.render_mode = mode = FT_RENDER_MODE_NORMAL; #endif scaler_flags = hints->scaler_flags; other_flags = 0; /* we snap the width of vertical stems for the monochrome */ /* and horizontal LCD rendering targets only */ if (mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD) other_flags |= TA_LATIN_HINTS_HORZ_SNAP; /* we snap the width of horizontal stems for the monochrome */ /* and vertical LCD rendering targets only */ if (mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD_V) other_flags |= TA_LATIN_HINTS_VERT_SNAP; /* we adjust stems to full pixels unless in `light' or `lcd' mode */ if (mode != FT_RENDER_MODE_LIGHT && mode != FT_RENDER_MODE_LCD) other_flags |= TA_LATIN_HINTS_STEM_ADJUST; if (mode == FT_RENDER_MODE_MONO) other_flags |= TA_LATIN_HINTS_MONO; /* in `light' or `lcd' mode we disable horizontal hinting completely; */ /* we also do it if the face is italic -- */ /* however, if warping is enabled (which only works in `light' hinting */ /* mode), advance widths get adjusted, too */ if (mode == FT_RENDER_MODE_LIGHT || mode == FT_RENDER_MODE_LCD || (face->style_flags & FT_STYLE_FLAG_ITALIC) != 0) scaler_flags |= TA_SCALER_FLAG_NO_HORIZONTAL; #ifdef TA_CONFIG_OPTION_USE_WARPER /* get (global) warper flag */ if (!metrics->root.globals->module->warping) scaler_flags |= TA_SCALER_FLAG_NO_WARPER; #endif hints->scaler_flags = scaler_flags; hints->other_flags = other_flags; return FT_Err_Ok; } /* snap a given width in scaled coordinates to */ /* one of the current standard widths */ static FT_Pos ta_latin_snap_width(TA_Width widths, FT_UInt count, FT_Pos width) { FT_UInt n; FT_Pos best = 64 + 32 + 2; FT_Pos reference = width; FT_Pos scaled; for (n = 0; n < count; n++) { FT_Pos w; FT_Pos dist; w = widths[n].cur; dist = width - w; if (dist < 0) dist = -dist; if (dist < best) { best = dist; reference = w; } } scaled = TA_PIX_ROUND(reference); if (width >= reference) { if (width < scaled + 48) width = reference; } else { if (width > scaled - 48) width = reference; } return width; } /* compute the snapped width of a given stem, ignoring very thin ones */ /* there is a lot of voodoo in this function; changing the hard-coded */ /* parameters influences the whole hinting process */ static FT_Pos ta_latin_compute_stem_width(TA_GlyphHints hints, TA_Dimension dim, FT_Pos width, FT_Pos base_delta, FT_Byte base_flags, FT_Byte stem_flags) { TA_LatinMetrics metrics = (TA_LatinMetrics) hints->metrics; TA_LatinAxis axis = &metrics->axis[dim]; FT_Pos dist = width; FT_Int sign = 0; FT_Int vertical = (dim == TA_DIMENSION_VERT); if (!TA_LATIN_HINTS_DO_STEM_ADJUST(hints) || axis->extra_light) return width; if (dist < 0) { dist = -width; sign = 1; } if ((vertical && !TA_LATIN_HINTS_DO_VERT_SNAP(hints)) || (!vertical && !TA_LATIN_HINTS_DO_HORZ_SNAP(hints))) { /* smooth hinting process: very lightly quantize the stem width */ /* leave the widths of serifs alone */ if ((stem_flags & TA_EDGE_SERIF) && vertical && (dist < 3 * 64)) goto Done_Width; else if (base_flags & TA_EDGE_ROUND) { if (dist < 80) dist = 64; } else if (dist < 56) dist = 56; if (axis->width_count > 0) { FT_Pos delta; /* compare to standard width */ delta = dist - axis->widths[0].cur; if (delta < 0) delta = -delta; if (delta < 40) { dist = axis->widths[0].cur; if (dist < 48) dist = 48; goto Done_Width; } if (dist < 3 * 64) { delta = dist & 63; dist &= -64; if (delta < 10) dist += delta; else if (delta < 32) dist += 10; else if (delta < 54) dist += 54; else dist += delta; } else { /* A stem's end position depends on two values: the start */ /* position and the stem length. The former gets usually */ /* rounded to the grid, while the latter gets rounded also if it */ /* exceeds a certain length (see below in this function). This */ /* `double rounding' can lead to a great difference to the */ /* original, unhinted position; this normally doesn't matter for */ /* large PPEM values, but for small sizes it can easily make */ /* outlines collide. For this reason, we adjust the stem length */ /* by a small amount depending on the PPEM value in case the */ /* former and latter rounding both point into the same */ /* direction. */ FT_Pos bdelta = 0; if (((width > 0) && (base_delta > 0)) || ((width < 0) && (base_delta < 0))) { FT_UInt ppem = metrics->root.scaler.face->size->metrics.x_ppem; if (ppem < 10) bdelta = base_delta; else if (ppem < 30) bdelta = (base_delta * (FT_Pos)(30 - ppem)) / 20; if (bdelta < 0) bdelta = -bdelta; } dist = (dist - bdelta + 32) & ~63; } } } else { /* strong hinting process: snap the stem width to integer pixels */ FT_Pos org_dist = dist; dist = ta_latin_snap_width(axis->widths, axis->width_count, dist); if (vertical) { /* in the case of vertical hinting, */ /* always round the stem heights to integer pixels */ if (dist >= 64) dist = (dist + 16) & ~63; else dist = 64; } else { if (TA_LATIN_HINTS_DO_MONO(hints)) { /* monochrome horizontal hinting: */ /* snap widths to integer pixels with a different threshold */ if (dist < 64) dist = 64; else dist = (dist + 32) & ~63; } else { /* for horizontal anti-aliased hinting, we adopt a more subtle */ /* approach: we strengthen small stems, round stems whose size */ /* is between 1 and 2 pixels to an integer, otherwise nothing */ if (dist < 48) dist = (dist + 64) >> 1; else if (dist < 128) { /* we only round to an integer width if the corresponding */ /* distortion is less than 1/4 pixel -- otherwise, this */ /* makes everything worse since the diagonals, which are */ /* not hinted, appear a lot bolder or thinner than the */ /* vertical stems */ FT_Pos delta; dist = (dist + 22) & ~63; delta = dist - org_dist; if (delta < 0) delta = -delta; if (delta >= 16) { dist = org_dist; if (dist < 48) dist = (dist + 64) >> 1; } } else /* round otherwise to prevent color fringes in LCD mode */ dist = (dist + 32) & ~63; } } } Done_Width: if (sign) dist = -dist; return dist; } /* align one stem edge relative to the previous stem edge */ static void ta_latin_align_linked_edge(TA_GlyphHints hints, TA_Dimension dim, TA_Edge base_edge, TA_Edge stem_edge) { FT_Pos dist, base_delta; FT_Pos fitted_width; dist = stem_edge->opos - base_edge->opos; base_delta = base_edge->pos - base_edge->opos; fitted_width = ta_latin_compute_stem_width(hints, dim, dist, base_delta, base_edge->flags, stem_edge->flags); stem_edge->pos = base_edge->pos + fitted_width; TA_LOG((" LINK: edge %d (opos=%.2f) linked to %.2f," " dist was %.2f, now %.2f\n", stem_edge - hints->axis[dim].edges, stem_edge->opos / 64.0, stem_edge->pos / 64.0, dist / 64.0, fitted_width / 64.0)); if (hints->recorder) hints->recorder(ta_link, hints, dim, base_edge, stem_edge, NULL, NULL, NULL); } /* shift the coordinates of the `serif' edge by the same amount */ /* as the corresponding `base' edge has been moved already */ static void ta_latin_align_serif_edge(TA_GlyphHints hints, TA_Edge base, TA_Edge serif) { FT_UNUSED(hints); serif->pos = base->pos + (serif->opos - base->opos); } /* the main grid-fitting routine */ static void ta_latin_hint_edges(TA_GlyphHints hints, TA_Dimension dim) { TA_AxisHints axis = &hints->axis[dim]; TA_Edge edges = axis->edges; TA_Edge edge_limit = edges + axis->num_edges; FT_PtrDist n_edges; TA_Edge edge; TA_Edge anchor = NULL; FT_Int has_serifs = 0; TA_StyleClass style_class = hints->metrics->style_class; TA_ScriptClass script_class = ta_script_classes[style_class->script]; FT_Bool top_to_bottom_hinting = 0; #ifdef TA_DEBUG FT_UInt num_actions = 0; #endif TA_LOG(("latin %s edge hinting (style `%s')\n", dim == TA_DIMENSION_VERT ? "horizontal" : "vertical", ta_style_names[hints->metrics->style_class->style])); if (dim == TA_DIMENSION_VERT) top_to_bottom_hinting = script_class->top_to_bottom_hinting; /* we begin by aligning all stems relative to the blue zone if needed -- */ /* that's only for horizontal edges */ if (dim == TA_DIMENSION_VERT && TA_HINTS_DO_BLUES(hints)) { for (edge = edges; edge < edge_limit; edge++) { TA_Width blue; TA_Edge edge1, edge2; /* these edges form the stem to check */ if (edge->flags & TA_EDGE_DONE) continue; edge1 = NULL; edge2 = edge->link; /* * If a stem contains both a neutral and a non-neutral blue zone, * skip the neutral one. Otherwise, outlines with different * directions might be incorrectly aligned at the same vertical * position. * * If we have two neutral blue zones, skip one of them. */ if (edge->blue_edge && edge2 && edge2->blue_edge) { FT_Byte neutral = edge->flags & TA_EDGE_NEUTRAL; FT_Byte neutral2 = edge2->flags & TA_EDGE_NEUTRAL; if (neutral2) { edge2->blue_edge = NULL; edge2->flags &= ~TA_EDGE_NEUTRAL; } else if (neutral) { edge->blue_edge = NULL; edge->flags &= ~TA_EDGE_NEUTRAL; } } blue = edge->blue_edge; if (blue) edge1 = edge; /* flip edges if the other edge is aligned to a blue zone */ else if (edge2 && edge2->blue_edge) { blue = edge2->blue_edge; edge1 = edge2; edge2 = edge; } if (!edge1) continue; #ifdef TA_DEBUG if (!anchor) TA_LOG((" BLUE_ANCHOR: edge %d (opos=%.2f) snapped to %.2f," " was %.2f (anchor=edge %d)\n", edge1 - edges, edge1->opos / 64.0, blue->fit / 64.0, edge1->pos / 64.0, edge - edges)); else TA_LOG((" BLUE: edge %d (opos=%.2f) snapped to %.2f, was %.2f\n", edge1 - edges, edge1->opos / 64.0, blue->fit / 64.0, edge1->pos / 64.0)); num_actions++; #endif edge1->pos = blue->fit; edge1->flags |= TA_EDGE_DONE; if (hints->recorder) { if (!anchor) hints->recorder(ta_blue_anchor, hints, dim, edge1, edge, NULL, NULL, NULL); else hints->recorder(ta_blue, hints, dim, edge1, NULL, NULL, NULL, NULL); } if (edge2 && !edge2->blue_edge) { ta_latin_align_linked_edge(hints, dim, edge1, edge2); edge2->flags |= TA_EDGE_DONE; #ifdef TA_DEBUG num_actions++; #endif } if (!anchor) anchor = edge; } } /* now we align all other stem edges, */ /* trying to maintain the relative order of stems in the glyph */ for (edge = edges; edge < edge_limit; edge++) { TA_Edge edge2; if (edge->flags & TA_EDGE_DONE) continue; /* skip all non-stem edges */ edge2 = edge->link; if (!edge2) { has_serifs++; continue; } /* now align the stem */ /* this should not happen, but it's better to be safe */ if (edge2->blue_edge) { TA_LOG((" ASSERTION FAILED for edge %d\n", edge2 - edges)); ta_latin_align_linked_edge(hints, dim, edge2, edge); edge->flags |= TA_EDGE_DONE; #ifdef TA_DEBUG num_actions++; #endif continue; } if (!anchor) { /* if we reach this if clause, no stem has been aligned yet */ FT_Pos org_len, org_center, cur_len; FT_Pos cur_pos1, error1, error2, u_off, d_off; org_len = edge2->opos - edge->opos; cur_len = ta_latin_compute_stem_width(hints, dim, org_len, 0, edge->flags, edge2->flags); /* some voodoo to specially round edges for small stem widths; */ /* the idea is to align the center of a stem, */ /* then shifting the stem edges to suitable positions */ if (cur_len <= 64) { /* width <= 1px */ u_off = 32; d_off = 32; } else { /* 1px < width < 1.5px */ u_off = 38; d_off = 26; } if (cur_len < 96) { org_center = edge->opos + (org_len >> 1); cur_pos1 = TA_PIX_ROUND(org_center); error1 = org_center - (cur_pos1 - u_off); if (error1 < 0) error1 = -error1; error2 = org_center - (cur_pos1 + d_off); if (error2 < 0) error2 = -error2; if (error1 < error2) cur_pos1 -= u_off; else cur_pos1 += d_off; edge->pos = cur_pos1 - cur_len / 2; edge2->pos = edge->pos + cur_len; } else edge->pos = TA_PIX_ROUND(edge->opos); anchor = edge; edge->flags |= TA_EDGE_DONE; TA_LOG((" ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f)" " snapped to %.2f and %.2f\n", edge - edges, edge->opos / 64.0, edge2 - edges, edge2->opos / 64.0, edge->pos / 64.0, edge2->pos / 64.0)); if (hints->recorder) hints->recorder(ta_anchor, hints, dim, edge, edge2, NULL, NULL, NULL); ta_latin_align_linked_edge(hints, dim, edge, edge2); #ifdef TA_DEBUG num_actions += 2; #endif } else { FT_Pos org_pos, org_len, org_center, cur_len; FT_Pos cur_pos1, cur_pos2, delta1, delta2; org_pos = anchor->pos + (edge->opos - anchor->opos); org_len = edge2->opos - edge->opos; org_center = org_pos + (org_len >> 1); cur_len = ta_latin_compute_stem_width(hints, dim, org_len, 0, edge->flags, edge2->flags); if (edge2->flags & TA_EDGE_DONE) { TA_LOG((" ADJUST: edge %d (pos=%.2f) moved to %.2f\n", edge - edges, edge->pos / 64.0, (edge2->pos - cur_len) / 64.0)); edge->pos = edge2->pos - cur_len; if (hints->recorder) { TA_Edge bound = NULL; if (edge > edges) bound = &edge[-1]; hints->recorder(ta_adjust, hints, dim, edge, edge2, NULL, bound, NULL); } } else if (cur_len < 96) { FT_Pos u_off, d_off; cur_pos1 = TA_PIX_ROUND(org_center); if (cur_len <= 64) { u_off = 32; d_off = 32; } else { u_off = 38; d_off = 26; } delta1 = org_center - (cur_pos1 - u_off); if (delta1 < 0) delta1 = -delta1; delta2 = org_center - (cur_pos1 + d_off); if (delta2 < 0) delta2 = -delta2; if (delta1 < delta2) cur_pos1 -= u_off; else cur_pos1 += d_off; edge->pos = cur_pos1 - cur_len / 2; edge2->pos = cur_pos1 + cur_len / 2; TA_LOG((" STEM: edge %d (opos=%.2f) linked to %d (opos=%.2f)" " snapped to %.2f and %.2f\n", edge - edges, edge->opos / 64.0, edge2 - edges, edge2->opos / 64.0, edge->pos / 64.0, edge2->pos / 64.0)); if (hints->recorder) { TA_Edge bound = NULL; if (edge > edges) bound = &edge[-1]; hints->recorder(ta_stem, hints, dim, edge, edge2, NULL, bound, NULL); } } else { org_pos = anchor->pos + (edge->opos - anchor->opos); org_len = edge2->opos - edge->opos; org_center = org_pos + (org_len >> 1); cur_len = ta_latin_compute_stem_width(hints, dim, org_len, 0, edge->flags, edge2->flags); cur_pos1 = TA_PIX_ROUND(org_pos); delta1 = cur_pos1 + (cur_len >> 1) - org_center; if (delta1 < 0) delta1 = -delta1; cur_pos2 = TA_PIX_ROUND(org_pos + org_len) - cur_len; delta2 = cur_pos2 + (cur_len >> 1) - org_center; if (delta2 < 0) delta2 = -delta2; edge->pos = (delta1 < delta2) ? cur_pos1 : cur_pos2; edge2->pos = edge->pos + cur_len; TA_LOG((" STEM: edge %d (opos=%.2f) linked to %d (opos=%.2f)" " snapped to %.2f and %.2f\n", edge - edges, edge->opos / 64.0, edge2 - edges, edge2->opos / 64.0, edge->pos / 64.0, edge2->pos / 64.0)); if (hints->recorder) { TA_Edge bound = NULL; if (edge > edges) bound = &edge[-1]; hints->recorder(ta_stem, hints, dim, edge, edge2, NULL, bound, NULL); } } #ifdef TA_DEBUG num_actions++; #endif edge->flags |= TA_EDGE_DONE; edge2->flags |= TA_EDGE_DONE; if (edge > edges && (top_to_bottom_hinting ? (edge->pos > edge[-1].pos) : (edge->pos < edge[-1].pos))) { /* don't move if stem would (almost) disappear otherwise; */ /* the ad-hoc value 16 corresponds to 1/4px */ if (edge->link && TA_ABS(edge->link->pos - edge[-1].pos) > 16) { #ifdef TA_DEBUG TA_LOG((" BOUND: edge %d (pos=%.2f) moved to %.2f\n", edge - edges, edge->pos / 64.0, edge[-1].pos / 64.0)); num_actions++; #endif edge->pos = edge[-1].pos; if (hints->recorder) hints->recorder(ta_bound, hints, dim, edge, &edge[-1], NULL, NULL, NULL); } } } } /* make sure that lowercase m's maintain their symmetry */ /* In general, lowercase m's have six vertical edges if they are sans */ /* serif, or twelve if they are with serifs. This implementation is */ /* based on that assumption, and seems to work very well with most */ /* faces. However, if for a certain face this assumption is not */ /* true, the m is just rendered like before. In addition, any stem */ /* correction will only be applied to symmetrical glyphs (even if the */ /* glyph is not an m), so the potential for unwanted distortion is */ /* relatively low. */ /* we don't handle horizontal edges since we can't easily assure that */ /* the third (lowest) stem aligns with the base line; it might end up */ /* one pixel higher or lower */ n_edges = edge_limit - edges; if (dim == TA_DIMENSION_HORZ && (n_edges == 6 || n_edges == 12)) { TA_Edge edge1, edge2, edge3; FT_Pos dist1, dist2, span, delta; if (n_edges == 6) { edge1 = edges; edge2 = edges + 2; edge3 = edges + 4; } else { edge1 = edges + 1; edge2 = edges + 5; edge3 = edges + 9; } dist1 = edge2->opos - edge1->opos; dist2 = edge3->opos - edge2->opos; span = dist1 - dist2; if (span < 0) span = -span; if (span < 8) { delta = edge3->pos - (2 * edge2->pos - edge1->pos); edge3->pos -= delta; if (edge3->link) edge3->link->pos -= delta; /* move the serifs along with the stem */ if (n_edges == 12) { (edges + 8)->pos -= delta; (edges + 11)->pos -= delta; } edge3->flags |= TA_EDGE_DONE; if (edge3->link) edge3->link->flags |= TA_EDGE_DONE; } } if (has_serifs || !anchor) { /* now hint the remaining edges (serifs and single) */ /* in order to complete our processing */ for (edge = edges; edge < edge_limit; edge++) { TA_Edge lower_bound = NULL; TA_Edge upper_bound = NULL; FT_Pos delta; if (edge->flags & TA_EDGE_DONE) continue; delta = 1000; if (edge->serif) { delta = edge->serif->opos - edge->opos; if (delta < 0) delta = -delta; } if (edge > edges) lower_bound = &edge[-1]; if (edge + 1 < edge_limit && edge[1].flags & TA_EDGE_DONE) upper_bound = &edge[1]; if (delta < 64 + 16) { ta_latin_align_serif_edge(hints, edge->serif, edge); TA_LOG((" SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f)" " aligned to %.2f\n", edge - edges, edge->opos / 64.0, edge->serif - edges, edge->serif->opos / 64.0, edge->pos / 64.0)); if (hints->recorder) hints->recorder(ta_serif, hints, dim, edge, NULL, NULL, lower_bound, upper_bound); } else if (!anchor) { edge->pos = TA_PIX_ROUND(edge->opos); anchor = edge; TA_LOG((" SERIF_ANCHOR: edge %d (opos=%.2f) snapped to %.2f\n", edge - edges, edge->opos / 64.0, edge->pos / 64.0)); if (hints->recorder) hints->recorder(ta_serif_anchor, hints, dim, edge, NULL, NULL, lower_bound, upper_bound); } else { TA_Edge before, after; for (before = edge - 1; before >= edges; before--) if (before->flags & TA_EDGE_DONE) break; for (after = edge + 1; after < edge_limit; after++) if (after->flags & TA_EDGE_DONE) break; if (before >= edges && before < edge && after < edge_limit && after > edge) { if (after->opos == before->opos) edge->pos = before->pos; else edge->pos = before->pos + FT_MulDiv(edge->opos - before->opos, after->pos - before->pos, after->opos - before->opos); TA_LOG((" SERIF_LINK1: edge %d (opos=%.2f) snapped to %.2f" " from %d (opos=%.2f)\n", edge - edges, edge->opos / 64.0, edge->pos / 64.0, before - edges, before->opos / 64.0)); if (hints->recorder) hints->recorder(ta_serif_link1, hints, dim, edge, before, after, lower_bound, upper_bound); } else { edge->pos = anchor->pos + ((edge->opos - anchor->opos + 16) & ~31); TA_LOG((" SERIF_LINK2: edge %d (opos=%.2f) snapped to %.2f\n", edge - edges, edge->opos / 64.0, edge->pos / 64.0)); if (hints->recorder) hints->recorder(ta_serif_link2, hints, dim, edge, NULL, NULL, lower_bound, upper_bound); } } #ifdef TA_DEBUG num_actions++; #endif edge->flags |= TA_EDGE_DONE; if (edge > edges && (top_to_bottom_hinting ? (edge->pos > edge[-1].pos) : (edge->pos < edge[-1].pos))) { /* don't move if stem would (almost) disappear otherwise; */ /* the ad-hoc value 16 corresponds to 1/4px */ if (edge->link && TA_ABS(edge->link->pos - edge[-1].pos) > 16) { #ifdef TA_DEBUG TA_LOG((" BOUND: edge %d (pos=%.2f) moved to %.2f\n", edge - edges, edge->pos / 64.0, edge[-1].pos / 64.0)); num_actions++; #endif edge->pos = edge[-1].pos; if (hints->recorder) hints->recorder(ta_bound, hints, dim, edge, &edge[-1], NULL, NULL, NULL); } } if (edge + 1 < edge_limit && edge[1].flags & TA_EDGE_DONE && (top_to_bottom_hinting ? (edge->pos < edge[1].pos) : (edge->pos > edge[1].pos))) { /* don't move if stem would (almost) disappear otherwise; */ /* the ad-hoc value 16 corresponds to 1/4px */ if (edge->link && TA_ABS(edge->link->pos - edge[-1].pos) > 16) { #ifdef TA_DEBUG TA_LOG((" BOUND: edge %d (pos=%.2f) moved to %.2f\n", edge - edges, edge->pos / 64.0, edge[1].pos / 64.0)); num_actions++; #endif edge->pos = edge[1].pos; if (hints->recorder) hints->recorder(ta_bound, hints, dim, edge, &edge[1], NULL, NULL, NULL); } } } } #ifdef TA_DEBUG if (!num_actions) TA_LOG((" (none)\n")); TA_LOG(("\n")); #endif } /* apply the complete hinting algorithm to a latin glyph */ static FT_Error ta_latin_hints_apply(FT_UInt glyph_index, TA_GlyphHints hints, FT_Outline* outline, TA_LatinMetrics metrics) { FT_Error error; int dim; TA_LatinAxis axis; error = ta_glyph_hints_reload(hints, outline); if (error) goto Exit; /* analyze glyph outline */ if (TA_HINTS_DO_HORIZONTAL(hints)) { axis = &metrics->axis[TA_DIMENSION_HORZ]; error = ta_latin_hints_detect_features(hints, axis->width_count, axis->widths, TA_DIMENSION_HORZ); if (error) goto Exit; } if (TA_HINTS_DO_VERTICAL(hints)) { axis = &metrics->axis[TA_DIMENSION_VERT]; error = ta_latin_hints_detect_features(hints, axis->width_count, axis->widths, TA_DIMENSION_VERT); if (error) goto Exit; /* apply blue zones to base characters only */ if (!(metrics->root.globals->glyph_styles[glyph_index] & TA_NONBASE)) ta_latin_hints_compute_blue_edges(hints, metrics); } /* grid-fit the outline */ for (dim = 0; dim < TA_DIMENSION_MAX; dim++) { #ifdef TA_CONFIG_OPTION_USE_WARPER if (dim == TA_DIMENSION_HORZ && metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL && TA_HINTS_DO_WARP(hints)) { TA_WarperRec warper; FT_Fixed scale; FT_Pos delta; ta_warper_compute(&warper, hints, (TA_Dimension)dim, &scale, &delta); ta_glyph_hints_scale_dim(hints, (TA_Dimension)dim, scale, delta); continue; } #endif /* TA_CONFIG_OPTION_USE_WARPER */ if ((dim == TA_DIMENSION_HORZ && TA_HINTS_DO_HORIZONTAL(hints)) || (dim == TA_DIMENSION_VERT && TA_HINTS_DO_VERTICAL(hints))) { ta_latin_hint_edges(hints, (TA_Dimension)dim); ta_glyph_hints_align_edge_points(hints, (TA_Dimension)dim); ta_glyph_hints_align_strong_points(hints, (TA_Dimension)dim); ta_glyph_hints_align_weak_points(hints, (TA_Dimension)dim); } } ta_glyph_hints_save(hints, outline); Exit: return error; } const TA_WritingSystemClassRec ta_latin_writing_system_class = { TA_WRITING_SYSTEM_LATIN, sizeof (TA_LatinMetricsRec), (TA_WritingSystem_InitMetricsFunc)ta_latin_metrics_init, /* style_metrics_init */ (TA_WritingSystem_ScaleMetricsFunc)ta_latin_metrics_scale, /* style_metrics_scale */ (TA_WritingSystem_DoneMetricsFunc)NULL, /* style_metrics_done */ (TA_WritingSystem_InitHintsFunc)ta_latin_hints_init, /* style_hints_init */ (TA_WritingSystem_ApplyHintsFunc)ta_latin_hints_apply /* style_hints_apply */ }; /* end of talatin.c */ ttfautohint-1.8.1/lib/talatin.h0000644000175000001440000001174713205544757016334 0ustar00wlusers00000000000000/* talatin.h */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `aflatin.h' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #ifndef TALATIN_H_ #define TALATIN_H_ #include "tatypes.h" #include "tahints.h" /* the `latin' writing system */ extern const TA_WritingSystemClassRec ta_latin_writing_system_class; /* constants are given with units_per_em == 2048 in mind */ #define TA_LATIN_CONSTANT(metrics, c) \ (((c) * (FT_Long)((TA_LatinMetrics)(metrics))->units_per_em) / 2048) /* Latin (global) metrics management */ #define TA_LATIN_IS_TOP_BLUE(b) \ ((b)->properties & TA_BLUE_PROPERTY_LATIN_TOP) #define TA_LATIN_IS_SUB_TOP_BLUE(b) \ ((b)->properties & TA_BLUE_PROPERTY_LATIN_SUB_TOP) #define TA_LATIN_IS_NEUTRAL_BLUE(b) \ ((b)->properties & TA_BLUE_PROPERTY_LATIN_NEUTRAL) #define TA_LATIN_IS_X_HEIGHT_BLUE(b) \ ((b)->properties & TA_BLUE_PROPERTY_LATIN_X_HEIGHT) #define TA_LATIN_IS_LONG_BLUE(b) \ ((b)->properties &TA_BLUE_PROPERTY_LATIN_LONG) #define TA_LATIN_MAX_WIDTHS 16 #define TA_LATIN_BLUE_ACTIVE (1U << 0) /* set if zone height is <= 3/4px */ #define TA_LATIN_BLUE_TOP (1U << 1) /* set if we have a top blue zone */ #define TA_LATIN_BLUE_SUB_TOP (1U << 2) /* set if we have a */ /* subscript top blue zone */ #define TA_LATIN_BLUE_NEUTRAL (1U << 3) /* set if we have neutral blue zone */ #define TA_LATIN_BLUE_ADJUSTMENT (1U << 4) /* used for scale adjustment */ /* optimization */ typedef struct TA_LatinBlueRec_ { TA_WidthRec ref; TA_WidthRec shoot; FT_Pos ascender; FT_Pos descender; FT_UInt flags; } TA_LatinBlueRec, *TA_LatinBlue; typedef struct TA_LatinAxisRec_ { FT_Fixed scale; FT_Pos delta; FT_UInt width_count; /* number of used widths */ TA_WidthRec widths[TA_LATIN_MAX_WIDTHS]; /* widths array */ FT_Pos edge_distance_threshold; /* used for creating edges */ FT_Pos standard_width; /* the default stem thickness */ FT_Bool extra_light; /* is standard width very light? */ /* ignored for horizontal metrics */ FT_UInt blue_count; /* does not contain artificial blue zones */ /* we add two artificial blue zones for usWinAscent and usWinDescent */ TA_LatinBlueRec blues[TA_BLUE_STRINGSET_MAX + 2]; FT_Fixed org_scale; FT_Pos org_delta; } TA_LatinAxisRec, *TA_LatinAxis; typedef struct TA_LatinMetricsRec_ { TA_StyleMetricsRec root; FT_UInt units_per_em; TA_LatinAxisRec axis[TA_DIMENSION_MAX]; } TA_LatinMetricsRec, *TA_LatinMetrics; FT_Error ta_latin_metrics_init(TA_LatinMetrics metrics, FT_Face face, FT_Face reference); void ta_latin_metrics_scale(TA_LatinMetrics metrics, TA_Scaler scaler); void ta_latin_metrics_init_widths(TA_LatinMetrics metrics, FT_Face face, FT_Bool use_cmap); void ta_latin_metrics_check_digits(TA_LatinMetrics metrics, FT_Face face); #define TA_LATIN_HINTS_HORZ_SNAP (1U << 0) /* enable stem width snapping */ #define TA_LATIN_HINTS_VERT_SNAP (1U << 1) /* enable stem height snapping */ #define TA_LATIN_HINTS_STEM_ADJUST (1U << 2) /* enable stem width/height */ /* adjustment */ #define TA_LATIN_HINTS_MONO (1U << 3) /* indicate monochrome rendering */ #define TA_LATIN_HINTS_DO_HORZ_SNAP(h) \ TA_HINTS_TEST_OTHER(h, TA_LATIN_HINTS_HORZ_SNAP) #define TA_LATIN_HINTS_DO_VERT_SNAP(h) \ TA_HINTS_TEST_OTHER(h, TA_LATIN_HINTS_VERT_SNAP) #define TA_LATIN_HINTS_DO_STEM_ADJUST(h) \ TA_HINTS_TEST_OTHER(h, TA_LATIN_HINTS_STEM_ADJUST) #define TA_LATIN_HINTS_DO_MONO(h) \ TA_HINTS_TEST_OTHER(h, TA_LATIN_HINTS_MONO) /* the next functions shouldn't normally be exported; */ /* however, other writing systems might like to use these functions as-is */ FT_Error ta_latin_hints_compute_segments(TA_GlyphHints hints, TA_Dimension dim); void ta_latin_hints_link_segments(TA_GlyphHints hints, FT_UInt width_count, TA_WidthRec* widths, TA_Dimension dim); FT_Error ta_latin_hints_compute_edges(TA_GlyphHints hints, TA_Dimension dim); FT_Error ta_latin_hints_detect_features(TA_GlyphHints hints, FT_UInt width_count, TA_WidthRec* widths, TA_Dimension dim); #endif /* TALATIN_H_ */ /* end of talatin.h */ ttfautohint-1.8.1/lib/taloader.c0000644000175000001440000004162713153174711016455 0ustar00wlusers00000000000000/* taloader.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afloader.c' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #include #include #include FT_GLYPH_H #include "ta.h" #include "tahints.h" #include "taglobal.h" /* from file `ftobjs.h' (2011-Mar-28) from FreeType */ typedef struct FT_Slot_InternalRec_ { TA_GlyphLoader loader; FT_UInt flags; FT_Bool glyph_transformed; FT_Matrix glyph_matrix; FT_Vector glyph_delta; void* glyph_hints; } FT_GlyphSlot_InternalRec; /* initialize glyph loader */ FT_Error ta_loader_init(FONT* font) { TA_Loader loader = font->loader; memset(loader, 0, sizeof (TA_LoaderRec)); ta_glyph_hints_init(&loader->hints); #ifdef TA_DEBUG _ta_debug_hints = &loader->hints; #endif return TA_GlyphLoader_New(&loader->gloader); } /* reset glyph loader and compute globals if necessary */ FT_Error ta_loader_reset(FONT* font, FT_Face face) { FT_Error error = FT_Err_Ok; TA_Loader loader = font->loader; loader->face = face; loader->globals = (TA_FaceGlobals)face->autohint.data; TA_GlyphLoader_Rewind(loader->gloader); if (!loader->globals) { error = ta_face_globals_new(face, &loader->globals, font); if (!error) { face->autohint.data = (FT_Pointer)loader->globals; face->autohint.finalizer = (FT_Generic_Finalizer)ta_face_globals_free; } } return error; } /* finalize glyph loader */ void ta_loader_done(FONT* font) { TA_Loader loader = font->loader; ta_glyph_hints_done(&loader->hints); loader->face = NULL; loader->globals = NULL; #ifdef TA_DEBUG _ta_debug_hints = NULL; #endif TA_GlyphLoader_Done(loader->gloader); loader->gloader = NULL; } /* load a single glyph component; this routine calls itself recursively, */ /* if necessary, and does the main work of `ta_loader_load_glyph' */ static FT_Error ta_loader_load_g(TA_Loader loader, TA_Scaler scaler, FT_UInt glyph_index, FT_Int32 load_flags, FT_UInt depth) { FT_Error error; FT_Face face = loader->face; TA_GlyphLoader gloader = loader->gloader; TA_StyleMetrics metrics = loader->metrics; TA_GlyphHints hints = &loader->hints; FT_GlyphSlot slot = face->glyph; #if 0 FT_Slot_Internal slot_internal = slot->internal; #endif FT_Int32 flags; flags = load_flags | FT_LOAD_LINEAR_DESIGN; error = FT_Load_Glyph(face, glyph_index, flags); if (error) goto Exit; #if 0 loader->transformed = slot_internal->glyph_transformed; if (loader->transformed) { FT_Matrix inverse; loader->trans_matrix = slot_internal->glyph_matrix; loader->trans_delta = slot_internal->glyph_delta; inverse = loader->trans_matrix; if (!FT_Matrix_Invert(&inverse)) FT_Vector_Transform(&loader->trans_delta, &inverse); } #endif switch (slot->format) { case FT_GLYPH_FORMAT_OUTLINE: /* translate the loaded glyph when an internal transform is needed */ if (loader->transformed) FT_Outline_Translate(&slot->outline, loader->trans_delta.x, loader->trans_delta.y); /* copy the outline points in the loader's current extra points */ /* which are used to keep original glyph coordinates */ error = TA_GLYPHLOADER_CHECK_POINTS(gloader, slot->outline.n_points + 4, slot->outline.n_contours); if (error) goto Exit; memcpy(gloader->current.outline.points, slot->outline.points, (size_t)slot->outline.n_points * sizeof (FT_Vector)); memcpy(gloader->current.outline.contours, slot->outline.contours, (size_t)slot->outline.n_contours * sizeof (short)); memcpy(gloader->current.outline.tags, slot->outline.tags, (size_t)slot->outline.n_points * sizeof (char)); gloader->current.outline.n_points = slot->outline.n_points; gloader->current.outline.n_contours = slot->outline.n_contours; /* compute original horizontal phantom points */ /* (and ignore vertical ones) */ loader->pp1.x = hints->x_delta; loader->pp1.y = hints->y_delta; loader->pp2.x = FT_MulFix(slot->metrics.horiAdvance, hints->x_scale) + hints->x_delta; loader->pp2.y = hints->y_delta; /* be sure to check for spacing glyphs */ if (slot->outline.n_points == 0) goto Hint_Metrics; /* now load the slot image into the auto-outline */ /* and run the automatic hinting process */ { TA_StyleClass style_class = metrics->style_class; TA_WritingSystemClass writing_system_class = ta_writing_system_classes[style_class->writing_system]; if (writing_system_class->style_hints_apply) writing_system_class->style_hints_apply(glyph_index, hints, &gloader->current.outline, metrics); } /* we now need to adjust the metrics according to the change in */ /* width/positioning that occurred during the hinting process */ if (scaler->render_mode != FT_RENDER_MODE_LIGHT) { FT_Pos old_rsb, old_lsb, new_lsb; FT_Pos pp1x_uh, pp2x_uh; TA_AxisHints axis = &hints->axis[TA_DIMENSION_HORZ]; TA_Edge edge1 = axis->edges; /* leftmost edge */ TA_Edge edge2 = edge1 + axis->num_edges - 1; /* rightmost edge */ if (axis->num_edges > 1 && TA_HINTS_DO_ADVANCE(hints)) { old_rsb = loader->pp2.x - edge2->opos; /* loader->pp1.x is always zero at this point of time */ old_lsb = edge1->opos /* - loader->pp1.x */; new_lsb = edge1->pos; /* remember unhinted values to later account */ /* for rounding errors */ pp1x_uh = new_lsb - old_lsb; pp2x_uh = edge2->pos + old_rsb; /* prefer too much space over too little space */ /* for very small sizes */ if (old_lsb < 24) pp1x_uh -= 8; if (old_rsb < 24) pp2x_uh += 8; loader->pp1.x = TA_PIX_ROUND(pp1x_uh); loader->pp2.x = TA_PIX_ROUND(pp2x_uh); if (loader->pp1.x >= new_lsb && old_lsb > 0) loader->pp1.x -= 64; if (loader->pp2.x <= edge2->pos && old_rsb > 0) loader->pp2.x += 64; slot->lsb_delta = loader->pp1.x - pp1x_uh; slot->rsb_delta = loader->pp2.x - pp2x_uh; } else { FT_Pos pp1x = loader->pp1.x; FT_Pos pp2x = loader->pp2.x; loader->pp1.x = TA_PIX_ROUND(pp1x + hints->xmin_delta); loader->pp2.x = TA_PIX_ROUND(pp2x + hints->xmax_delta); slot->lsb_delta = loader->pp1.x - pp1x; slot->rsb_delta = loader->pp2.x - pp2x; } } /* `light' mode uses integer advance widths */ /* but sets `lsb_delta' and `rsb_delta' */ else { FT_Pos pp1x = loader->pp1.x; FT_Pos pp2x = loader->pp2.x; loader->pp1.x = TA_PIX_ROUND(pp1x); loader->pp2.x = TA_PIX_ROUND(pp2x); slot->lsb_delta = loader->pp1.x - pp1x; slot->rsb_delta = loader->pp2.x - pp2x; } /* good, we simply add the glyph to our loader's base */ TA_GlyphLoader_Add(gloader); break; case FT_GLYPH_FORMAT_COMPOSITE: { FT_UInt nn, num_subglyphs = slot->num_subglyphs; FT_UInt num_base_subgs, start_point; TA_SubGlyph subglyph; start_point = (FT_UInt)gloader->base.outline.n_points; /* first of all, copy the subglyph descriptors in the glyph loader */ error = TA_GlyphLoader_CheckSubGlyphs(gloader, num_subglyphs); if (error) goto Exit; memcpy(gloader->current.subglyphs, slot->subglyphs, num_subglyphs * sizeof (TA_SubGlyphRec)); gloader->current.num_subglyphs = num_subglyphs; /* stop processing if list of composites is requested */ if ( load_flags & FT_LOAD_NO_RECURSE ) goto Exit; num_base_subgs = gloader->base.num_subglyphs; /* now read each subglyph independently */ for (nn = 0; nn < num_subglyphs; nn++) { FT_Vector pp1, pp2; FT_Pos x, y; FT_UInt num_points, num_new_points, num_base_points; /* gloader.current.subglyphs can change during glyph loading due */ /* to re-allocation -- we must recompute the current subglyph on */ /* each iteration */ subglyph = gloader->base.subglyphs + num_base_subgs + nn; pp1 = loader->pp1; pp2 = loader->pp2; num_base_points = (FT_UInt)gloader->base.outline.n_points; error = ta_loader_load_g(loader, scaler, (FT_UInt)subglyph->index, load_flags, depth + 1); if (error) goto Exit; /* recompute subglyph pointer */ subglyph = gloader->base.subglyphs + num_base_subgs + nn; if (!(subglyph->flags & FT_SUBGLYPH_FLAG_USE_MY_METRICS)) { loader->pp1 = pp1; loader->pp2 = pp2; } num_points = (FT_UInt)gloader->base.outline.n_points; num_new_points = num_points - num_base_points; /* now perform the transformation required for this subglyph */ if (subglyph->flags & (FT_SUBGLYPH_FLAG_SCALE | FT_SUBGLYPH_FLAG_XY_SCALE | FT_SUBGLYPH_FLAG_2X2)) { FT_Vector* cur = gloader->base.outline.points + num_base_points; FT_Vector* limit = cur + num_new_points; for (; cur < limit; cur++) FT_Vector_Transform(cur, &subglyph->transform); } /* apply offset */ if (!(subglyph->flags & FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES)) { FT_UInt k = (FT_UInt)subglyph->arg1; FT_UInt l = (FT_UInt)subglyph->arg2; FT_Vector* p1; FT_Vector* p2; if (start_point + k >= num_base_points || l >= num_new_points) { error = FT_Err_Invalid_Composite; goto Exit; } l += num_base_points; /* for now, only use the current point coordinates; */ /* we eventually may consider another approach */ p1 = gloader->base.outline.points + start_point + k; p2 = gloader->base.outline.points + start_point + l; x = p1->x - p2->x; y = p1->y - p2->y; } else { x = FT_MulFix(subglyph->arg1, hints->x_scale) + hints->x_delta; y = FT_MulFix(subglyph->arg2, hints->y_scale) + hints->y_delta; x = TA_PIX_ROUND(x); y = TA_PIX_ROUND(y); } { FT_Outline dummy = gloader->base.outline; dummy.points += num_base_points; dummy.n_points = (short)num_new_points; FT_Outline_Translate(&dummy, x, y); } } } break; default: /* we don't support other formats (yet?) */ error = FT_Err_Unimplemented_Feature; } Hint_Metrics: if (depth == 0) { FT_BBox bbox; FT_Vector vvector; vvector.x = slot->metrics.vertBearingX - slot->metrics.horiBearingX; vvector.y = slot->metrics.vertBearingY - slot->metrics.horiBearingY; vvector.x = FT_MulFix(vvector.x, metrics->scaler.x_scale); vvector.y = FT_MulFix(vvector.y, metrics->scaler.y_scale); /* transform the hinted outline if needed */ if (loader->transformed) { FT_Outline_Transform(&gloader->base.outline, &loader->trans_matrix); FT_Vector_Transform(&vvector, &loader->trans_matrix); } #if 1 /* we must translate our final outline by -pp1.x */ /* and compute the new metrics */ if (loader->pp1.x) FT_Outline_Translate(&gloader->base.outline, -loader->pp1.x, 0); #endif FT_Outline_Get_CBox(&gloader->base.outline, &bbox); bbox.xMin = TA_PIX_FLOOR(bbox.xMin); bbox.yMin = TA_PIX_FLOOR(bbox.yMin); bbox.xMax = TA_PIX_CEIL(bbox.xMax); bbox.yMax = TA_PIX_CEIL(bbox.yMax); slot->metrics.width = bbox.xMax - bbox.xMin; slot->metrics.height = bbox.yMax - bbox.yMin; slot->metrics.horiBearingX = bbox.xMin; slot->metrics.horiBearingY = bbox.yMax; slot->metrics.vertBearingX = TA_PIX_FLOOR(bbox.xMin + vvector.x); slot->metrics.vertBearingY = TA_PIX_FLOOR(bbox.yMax + vvector.y); /* for mono-width fonts (like Andale, Courier, etc.) we need */ /* to keep the original rounded advance width; ditto for */ /* digits if all have the same advance width */ if (scaler->render_mode != FT_RENDER_MODE_LIGHT && (FT_IS_FIXED_WIDTH(slot->face) || (ta_face_globals_is_digit(loader->globals, glyph_index) && metrics->digits_have_same_width))) { slot->metrics.horiAdvance = FT_MulFix(slot->metrics.horiAdvance, metrics->scaler.x_scale); /* set delta values to 0, otherwise code that uses them */ /* is going to ruin the fixed advance width */ slot->lsb_delta = 0; slot->rsb_delta = 0; } else { /* non-spacing glyphs must stay as-is */ if (slot->metrics.horiAdvance) slot->metrics.horiAdvance = loader->pp2.x - loader->pp1.x; } slot->metrics.vertAdvance = FT_MulFix(slot->metrics.vertAdvance, metrics->scaler.y_scale); slot->metrics.horiAdvance = TA_PIX_ROUND(slot->metrics.horiAdvance); slot->metrics.vertAdvance = TA_PIX_ROUND(slot->metrics.vertAdvance); #if 0 /* now copy outline into glyph slot */ TA_GlyphLoader_Rewind(internal->loader); error = TA_GlyphLoader_CopyPoints(internal->loader, gloader); if (error) goto Exit; /* reassign all outline fields except flags to protect them */ slot->outline.n_contours = internal->loader->base.outline.n_contours; slot->outline.n_points = internal->loader->base.outline.n_points; slot->outline.points = internal->loader->base.outline.points; slot->outline.tags = internal->loader->base.outline.tags; slot->outline.contours = internal->loader->base.outline.contours; slot->format = FT_GLYPH_FORMAT_OUTLINE; #endif } Exit: return error; } /* load a glyph */ FT_Error ta_loader_load_glyph(FONT* font, FT_Face face, FT_UInt gindex, FT_Int32 load_flags) { FT_Error error; FT_Size size = face->size; TA_Loader loader = font->loader; TA_ScalerRec scaler; if (!size) return FT_Err_Invalid_Size_Handle; memset(&scaler, 0, sizeof (TA_ScalerRec)); scaler.face = face; scaler.x_scale = size->metrics.x_scale; scaler.x_delta = 0; scaler.y_scale = size->metrics.y_scale; scaler.y_delta = 0; scaler.render_mode = FT_LOAD_TARGET_MODE(load_flags); scaler.flags = 0; /* XXX: fix this */ /* XXX this is an ugly hack of ttfautohint: */ /* bit 29 triggers vertical hinting only */ if (load_flags & (1 << 29)) scaler.flags |= TA_SCALER_FLAG_NO_HORIZONTAL; /* note that the fallback style can't be changed anymore */ /* after the first call of `ta_loader_load_glyph' */ error = ta_loader_reset(font, face); if (!error) { TA_StyleMetrics metrics; FT_UInt options = TA_STYLE_NONE_DFLT; #ifdef FT_OPTION_AUTOFIT2 /* XXX: undocumented hook to activate the latin2 hinter */ if (load_flags & (1UL << 20)) options = TA_STYLE_LTN2_DFLT; #endif error = ta_face_globals_get_metrics(loader->globals, gindex, options, &metrics); if (!error) { TA_StyleClass style_class = metrics->style_class; TA_WritingSystemClass writing_system_class = ta_writing_system_classes[style_class->writing_system]; loader->metrics = metrics; if (writing_system_class->style_metrics_scale) writing_system_class->style_metrics_scale(metrics, &scaler); else metrics->scaler = scaler; load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_IGNORE_TRANSFORM; load_flags &= ~FT_LOAD_RENDER; if (writing_system_class->style_hints_init) { error = writing_system_class->style_hints_init(&loader->hints, metrics); if (error) goto Exit; } error = ta_loader_load_g(loader, &scaler, gindex, load_flags, 0); } } Exit: return error; } void ta_loader_register_hints_recorder(TA_Loader loader, TA_Hints_Recorder hints_recorder, void* user) { loader->hints.recorder = hints_recorder; loader->hints.user = user; } /* end of taloader.c */ ttfautohint-1.8.1/lib/taloader.h0000644000175000001440000000312013153174711016444 0ustar00wlusers00000000000000/* taloader.h */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afloader.h' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #ifndef TALOADER_H_ #define TALOADER_H_ #include "tahints.h" #include "tagloadr.h" typedef struct FONT_ FONT; typedef struct TA_LoaderRec_ { /* current face data */ FT_Face face; TA_FaceGlobals globals; /* current glyph data */ TA_GlyphLoader gloader; TA_GlyphHintsRec hints; TA_StyleMetrics metrics; FT_Bool transformed; FT_Matrix trans_matrix; FT_Vector trans_delta; FT_Vector pp1; FT_Vector pp2; /* we don't handle vertical phantom points */ } TA_LoaderRec, *TA_Loader; FT_Error ta_loader_init(FONT* font); FT_Error ta_loader_reset(FONT* font, FT_Face face); void ta_loader_done(FONT* font); FT_Error ta_loader_load_glyph(FONT* font, FT_Face face, FT_UInt gindex, FT_Int32 load_flags); void ta_loader_register_hints_recorder(TA_Loader loader, TA_Hints_Recorder hints_recorder, void* user); #endif /* TALOADER_H_ */ /* end of taloader.h */ ttfautohint-1.8.1/lib/taloca.c0000644000175000001440000000732313153174711016120 0ustar00wlusers00000000000000/* taloca.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" FT_Error TA_sfnt_build_loca_table(SFNT* sfnt, FONT* font) { SFNT_Table* loca_table = &font->tables[sfnt->loca_idx]; SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; SFNT_Table* head_table = &font->tables[sfnt->head_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; GLYPH* glyph; FT_ULong offset; FT_Byte loca_format; FT_Byte* buf_new; FT_Byte* p; FT_UShort i; if (loca_table->processed) return TA_Err_Ok; /* get largest offset */ offset = 0; glyph = data->glyphs; for (i = 0; i < data->num_glyphs; i++, glyph++) { /* glyph records should have offsets which are multiples of 4 */ offset = (offset + 3) & ~3U; offset += glyph->len1 + glyph->len2 + glyph->ins_extra_len + glyph->ins_len; /* add two bytes for the instructionLength field */ if (glyph->len2 || glyph->ins_len) offset += 2; } /* to make the short format of the `loca' table always work, */ /* the `glyf' table's length is adjusted to an even value */ offset = (offset + 1) & ~1U; if (offset > 0xFFFF * 2) loca_format = 1; else loca_format = 0; /* fill table */ if (loca_format) { loca_table->len = (data->num_glyphs + 1) * 4; buf_new = (FT_Byte*)realloc(loca_table->buf, loca_table->len); if (!buf_new) return FT_Err_Out_Of_Memory; else loca_table->buf = buf_new; p = loca_table->buf; offset = 0; glyph = data->glyphs; for (i = 0; i < data->num_glyphs; i++, glyph++) { offset = (offset + 3) & ~3U; *(p++) = BYTE1(offset); *(p++) = BYTE2(offset); *(p++) = BYTE3(offset); *(p++) = BYTE4(offset); offset += glyph->len1 + glyph->len2 + glyph->ins_extra_len + glyph->ins_len; if (glyph->len2 || glyph->ins_len) offset += 2; } /* last element holds the size of the `glyf' table */ offset = (offset + 1) & ~1U; *(p++) = BYTE1(offset); *(p++) = BYTE2(offset); *(p++) = BYTE3(offset); *(p++) = BYTE4(offset); } else { loca_table->len = (data->num_glyphs + 1) * 2; buf_new = (FT_Byte*)realloc(loca_table->buf, (loca_table->len + 3) & ~3U); if (!buf_new) return FT_Err_Out_Of_Memory; else loca_table->buf = buf_new; p = loca_table->buf; offset = 0; glyph = data->glyphs; for (i = 0; i < data->num_glyphs; i++, glyph++) { offset = (offset + 1) & ~1U; *(p++) = HIGH(offset); *(p++) = LOW(offset); offset += (glyph->len1 + glyph->len2 + glyph->ins_extra_len + glyph->ins_len + 1) >> 1; if (glyph->len2 || glyph->ins_len) offset += 1; } /* last element holds the size of the `glyf' table -- */ /* this value must *not* be aligned to a multiple of 4 */ *(p++) = HIGH(offset); *(p++) = LOW(offset); /* pad `loca' table to make its length a multiple of 4 */ if (loca_table->len % 4 == 2) { *(p++) = 0; *(p++) = 0; } } loca_table->checksum = TA_table_compute_checksum(loca_table->buf, loca_table->len); loca_table->processed = 1; head_table->buf[LOCA_FORMAT_OFFSET] = loca_format; return TA_Err_Ok; } /* end of taloca.c */ ttfautohint-1.8.1/lib/tamaxp.c0000644000175000001440000000624013153174711016144 0ustar00wlusers00000000000000/* tamaxp.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" FT_Error TA_sfnt_update_maxp_table(SFNT* sfnt, FONT* font) { SFNT_Table* maxp_table = &font->tables[sfnt->maxp_idx]; SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; FT_Byte* buf = maxp_table->buf; if (maxp_table->processed) return TA_Err_Ok; if (maxp_table->len != MAXP_LEN) return FT_Err_Invalid_Table; if (font->dehint) { buf[MAXP_MAX_ZONES_OFFSET] = 0; buf[MAXP_MAX_ZONES_OFFSET + 1] = 0; buf[MAXP_MAX_TWILIGHT_POINTS_OFFSET] = 0; buf[MAXP_MAX_TWILIGHT_POINTS_OFFSET + 1] = 0; buf[MAXP_MAX_STORAGE_OFFSET] = 0; buf[MAXP_MAX_STORAGE_OFFSET + 1] = 0; buf[MAXP_MAX_FUNCTION_DEFS_OFFSET] = 0; buf[MAXP_MAX_FUNCTION_DEFS_OFFSET + 1] = 0; buf[MAXP_MAX_INSTRUCTION_DEFS_OFFSET] = 0; buf[MAXP_MAX_INSTRUCTION_DEFS_OFFSET + 1] = 0; buf[MAXP_MAX_STACK_ELEMENTS_OFFSET] = 0; buf[MAXP_MAX_STACK_ELEMENTS_OFFSET + 1] = 0; buf[MAXP_MAX_INSTRUCTIONS_OFFSET] = 0; buf[MAXP_MAX_INSTRUCTIONS_OFFSET + 1] = 0; } else { if (sfnt->max_components && font->hint_composites) { buf[MAXP_NUM_GLYPHS] = HIGH(data->num_glyphs); buf[MAXP_NUM_GLYPHS + 1] = LOW(data->num_glyphs); buf[MAXP_MAX_COMPOSITE_POINTS] = HIGH(sfnt->max_composite_points); buf[MAXP_MAX_COMPOSITE_POINTS + 1] = LOW(sfnt->max_composite_points); buf[MAXP_MAX_COMPOSITE_CONTOURS] = HIGH(sfnt->max_composite_contours); buf[MAXP_MAX_COMPOSITE_CONTOURS + 1] = LOW(sfnt->max_composite_contours); } buf[MAXP_MAX_ZONES_OFFSET] = 0; buf[MAXP_MAX_ZONES_OFFSET + 1] = 2; buf[MAXP_MAX_TWILIGHT_POINTS_OFFSET] = HIGH(sfnt->max_twilight_points); buf[MAXP_MAX_TWILIGHT_POINTS_OFFSET + 1] = LOW(sfnt->max_twilight_points); buf[MAXP_MAX_STORAGE_OFFSET] = HIGH(sfnt->max_storage); buf[MAXP_MAX_STORAGE_OFFSET + 1] = LOW(sfnt->max_storage); buf[MAXP_MAX_FUNCTION_DEFS_OFFSET] = 0; buf[MAXP_MAX_FUNCTION_DEFS_OFFSET + 1] = NUM_FDEFS; buf[MAXP_MAX_INSTRUCTION_DEFS_OFFSET] = 0; buf[MAXP_MAX_INSTRUCTION_DEFS_OFFSET + 1] = 0; buf[MAXP_MAX_STACK_ELEMENTS_OFFSET] = HIGH(sfnt->max_stack_elements); buf[MAXP_MAX_STACK_ELEMENTS_OFFSET + 1] = LOW(sfnt->max_stack_elements); buf[MAXP_MAX_INSTRUCTIONS_OFFSET] = HIGH(sfnt->max_instructions); buf[MAXP_MAX_INSTRUCTIONS_OFFSET + 1] = LOW(sfnt->max_instructions); buf[MAXP_MAX_COMPONENTS_OFFSET] = HIGH(sfnt->max_components); buf[MAXP_MAX_COMPONENTS_OFFSET + 1] = LOW(sfnt->max_components); } maxp_table->checksum = TA_table_compute_checksum(maxp_table->buf, maxp_table->len); maxp_table->processed = 1; return TA_Err_Ok; } /* end of tamaxp.c */ ttfautohint-1.8.1/lib/taname.c0000644000175000001440000002661013214327357016126 0ustar00wlusers00000000000000/* taname.c */ /* * Copyright (C) 2012-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include #include "ta.h" typedef struct Lang_Tag_Record_ { FT_UShort len; FT_Byte* str; } Lang_Tag_Record; typedef struct Name_Record_ { FT_UShort platform_id; FT_UShort encoding_id; FT_UShort language_id; FT_UShort name_id; FT_UShort len; FT_Byte* str; } Name_Record; typedef struct Naming_Table_ { FT_UShort format; FT_UShort string_offset; FT_UShort name_count; Name_Record* name_records; FT_UShort lang_tag_count; Lang_Tag_Record* lang_tag_records; } Naming_Table; static FT_Error parse_name_header(FT_Byte** curp, Naming_Table* n, FT_ULong buf_len, FT_Byte** start, FT_Byte** end) { FT_Byte* buf = *curp; FT_Byte* p; FT_Byte* startp; FT_Byte* endp; p = *curp; n->format = NEXT_USHORT(p); n->name_count = NEXT_USHORT(p); n->string_offset = NEXT_USHORT(p); n->name_records = NULL; n->lang_tag_records = NULL; /* all name strings must be between `startp' and `endp' */ startp = buf + 6 + 12 * n->name_count; endp = buf + buf_len; /* format 1 also has language tag records */ if (n->format == 1) { FT_Byte* q; q = startp; if (q + 2 > endp) return FT_Err_Invalid_Table; n->lang_tag_count = NEXT_USHORT(q); startp += 2 + 4 * n->lang_tag_count; } else n->lang_tag_count = 0; if (startp > endp) return FT_Err_Invalid_Table; *start = startp; *end = endp; *curp = p; return TA_Err_Ok; } static FT_Error parse_name_records(FT_Byte** curp, Naming_Table* n, FT_Byte* buf, FT_Byte* startp, FT_Byte* endp, FONT* font) { FT_UShort i, count; FT_Byte* p; p = *curp; if (!n->name_count) return TA_Err_Ok; /* allocate name records array */ n->name_records = (Name_Record*)calloc(1, n->name_count * sizeof (Name_Record)); if (!n->name_records) return FT_Err_Out_Of_Memory; /* walk over all name records */ count = 0; for (i = 0; i < n->name_count; i++) { Name_Record* r = &n->name_records[count]; FT_UShort offset; FT_Byte* s; FT_UShort l; r->platform_id = NEXT_USHORT(p); r->encoding_id = NEXT_USHORT(p); r->language_id = NEXT_USHORT(p); r->name_id = NEXT_USHORT(p); r->len = NEXT_USHORT(p); offset = NEXT_USHORT(p); s = buf + n->string_offset + offset; /* ignore invalid entries */ if (s < startp || s + r->len > endp) continue; /* mac encoding or non-Unicode Windows encoding? */ if (r->platform_id == 1 || (r->platform_id == 3 && !(r->encoding_id == 1 || r->encoding_id == 10))) { /* one-byte or multi-byte encodings */ /* skip everything after a NULL byte (if any) */ for (l = 0; l < r->len; l++) if (!s[l]) break; /* ignore zero-length entries */ if (!l) continue; r->len = l; } else { /* (two-byte) UTF-16BE for everything else */ /* we need an even number of bytes */ r->len &= ~1U; /* ignore entries which contain only NULL bytes */ for (l = 0; l < r->len; l++) if (s[l]) break; if (l == r->len) continue; } /* this string gets probably modified */ /* by the `info' or `info_post' callbacks, */ /* so we have to call the allocation function provided by the user */ r->str = (FT_Byte*)font->allocate(r->len); if (!r->str) return FT_Err_Out_Of_Memory; memcpy(r->str, s, r->len); if (font->info) { /* we ignore the return value of `font->info' */ font->info(r->platform_id, r->encoding_id, r->language_id, r->name_id, &r->len, &r->str, font->info_data); } count++; } /* let the user modify `name' table entries */ if (font->info && font->info_post) /* we ignore the return value of `font->info_post' */ font->info_post(font->info_data); /* shrink name record array if necessary */ n->name_records = (Name_Record*)realloc(n->name_records, count * sizeof (Name_Record)); n->name_count = count; return TA_Err_Ok; } static FT_Error parse_lang_tag_records(FT_Byte** curp, Naming_Table* n, FT_Byte* buf, FT_Byte* startp, FT_Byte* endp) { FT_UShort i; FT_Byte* p; p = *curp; if (!n->lang_tag_count) return TA_Err_Ok; /* allocate language tags array */ n->lang_tag_records = (Lang_Tag_Record*)calloc( 1, n->lang_tag_count * sizeof (Lang_Tag_Record)); if (!n->lang_tag_records) return FT_Err_Out_Of_Memory; /* walk over all language tag records (if any) */ for (i = 0; i < n->lang_tag_count; i++) { Lang_Tag_Record* r = &n->lang_tag_records[i]; FT_UShort offset; FT_Byte* s; r->len = NEXT_USHORT(p); offset = NEXT_USHORT(p); s = buf + n->string_offset + offset; /* ignore an invalid entry -- */ /* contrary to name records, we can't simply remove it */ /* because references to it should still work */ /* (we don't apply more fixes */ /* since ttfautohint is not a TrueType sanitizing tool) */ if (s < startp || s + r->len > endp) continue; /* we don't massage the data since we only make a copy */ r->str = (FT_Byte*)malloc(r->len); if (!r->str) return FT_Err_Out_Of_Memory; memcpy(r->str, s, r->len); } return TA_Err_Ok; } /* we build a non-optimized `name' table, this is, */ /* we don't fold strings `foo' and `foobar' into one string */ static FT_Error build_name_table(Naming_Table* n, SFNT_Table* name_table) { FT_Byte* buf_new; FT_Byte* buf_new_resized; FT_ULong buf_new_len; FT_ULong len; FT_Byte* p; FT_Byte* q; FT_Byte* base; FT_UShort i; FT_UShort string_offset; FT_ULong data_offset; FT_ULong data_len; /* we reallocate the array to its real size later on */ buf_new_len= 6 + 12 * n->name_count; if (n->format == 1) buf_new_len += 2 + 4 * n->lang_tag_count; buf_new = (FT_Byte*)malloc(buf_new_len); if (!buf_new) return FT_Err_Out_Of_Memory; /* note that the OpenType specification says that `string_offset' is the */ /* `offset to the start of string storage (from start of table)', */ /* but this isn't enforced by the major rendering engines */ /* as long as the final string offsets are valid */ string_offset = (buf_new_len <= 0xFFFF) ? (FT_UShort)buf_new_len : 0xFFFF; p = buf_new; *(p++) = HIGH(n->format); *(p++) = LOW(n->format); *(p++) = HIGH(n->name_count); *(p++) = LOW(n->name_count); *(p++) = HIGH(string_offset); *(p++) = LOW(string_offset); /* first pass */ data_len = 0; for (i = 0; i < n->name_count; i++) { Name_Record* r = &n->name_records[i]; *(p++) = HIGH(r->platform_id); *(p++) = LOW(r->platform_id); *(p++) = HIGH(r->encoding_id); *(p++) = LOW(r->encoding_id); *(p++) = HIGH(r->language_id); *(p++) = LOW(r->language_id); *(p++) = HIGH(r->name_id); *(p++) = LOW(r->name_id); *(p++) = HIGH(r->len); *(p++) = LOW(r->len); /* the offset field gets filled in later */ p += 2; data_len += r->len; } if (n->format == 1) { *(p++) = HIGH(n->lang_tag_count); *(p++) = LOW(n->lang_tag_count); for (i = 0; i < n->lang_tag_count; i++) { Lang_Tag_Record* r = &n->lang_tag_records[i]; *(p++) = HIGH(r->len); *(p++) = LOW(r->len); /* the offset field gets filled in later */ p += 2; data_len += r->len; } } if (buf_new_len + data_len > 2 * 0xFFFF) { /* the table would become too large, so we do nothing */ free(buf_new); return TA_Err_Ok; } data_offset = buf_new_len; /* reallocate the buffer to fit its real size */ buf_new_len += data_len; /* make the allocated buffer length a multiple of 4 */ len = (buf_new_len + 3) & ~3U; buf_new_resized = (FT_Byte*)realloc(buf_new, len); if (!buf_new_resized) { free(buf_new); return FT_Err_Out_Of_Memory; } buf_new = buf_new_resized; base = buf_new + string_offset; p = buf_new + data_offset; /* second pass */ /* the first name record offset */ q = &buf_new[6 + 10]; for (i = 0; i < n->name_count; i++) { Name_Record* r = &n->name_records[i]; /* fill in offset */ *q = HIGH(p - base); *(q + 1) = LOW(p - base); /* copy string */ memcpy(p, r->str, r->len); p += r->len; q += 12; } if (n->format == 1) { /* the first language tag record offset */ q = &buf_new[6 + 12 * n->name_count + 2 + 2]; for (i = 0; i < n->lang_tag_count; i++) { Lang_Tag_Record* r = &n->lang_tag_records[i]; /* fill in offset */ *q = HIGH(p - base); *(q + 1) = LOW(p - base); /* copy string */ memcpy(p, r->str, r->len); p += r->len; q += 4; } } /* pad end of buffer with zeros */ switch (buf_new_len % 4) { case 1: *(p++) = 0x00; case 2: *(p++) = 0x00; case 3: *(p++) = 0x00; default: break; } /* we are done; replace the old buffer with the new one */ free(name_table->buf); name_table->buf = buf_new; name_table->len = buf_new_len; return TA_Err_Ok; } /* we handle the `name' table as optional; */ /* if there are problems not related to allocation, */ /* simply return (or continue, if possible) without signaling an error, */ /* and the original `name' table is not modified */ FT_Error TA_sfnt_update_name_table(SFNT* sfnt, FONT* font) { FT_Error error; SFNT_Table* name_table; FT_Byte* buf; FT_ULong buf_len; Naming_Table n; FT_Byte* p; FT_Byte* startp; FT_Byte* endp; FT_UShort i; if (sfnt->name_idx == MISSING) return TA_Err_Ok; name_table = &font->tables[sfnt->name_idx]; buf = name_table->buf; buf_len = name_table->len; if (name_table->processed) return TA_Err_Ok; p = buf; error = parse_name_header(&p, &n, buf_len, &startp, &endp); if (error) return TA_Err_Ok; /* due to the structure of the `name' table, */ /* we must parse it completely, apply our changes, */ /* and rebuild it from scratch */ error = parse_name_records(&p, &n, buf, startp, endp, font); if (error) goto Exit; error = parse_lang_tag_records(&p, &n, buf, startp, endp); if (error) goto Exit; error = build_name_table(&n, name_table); if (error) goto Exit; name_table->checksum = TA_table_compute_checksum(name_table->buf, name_table->len); Exit: for (i = 0; i < n.name_count; i++) font->deallocate(n.name_records[i].str); for (i = 0; i < n.lang_tag_count; i++) free(n.lang_tag_records[i].str); free(n.name_records); free(n.lang_tag_records); name_table->processed = 1; return error; } /* end of taname.c */ ttfautohint-1.8.1/lib/tapost.c0000644000175000001440000000654213153174711016171 0ustar00wlusers00000000000000/* tapost.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include #include "ta.h" FT_Error TA_sfnt_update_post_table(SFNT* sfnt, FONT* font) { SFNT_Table* post_table; FT_Byte* buf; FT_ULong buf_len; FT_Byte* buf_new; FT_ULong buf_new_len; FT_ULong version; if (sfnt->post_idx == MISSING) return TA_Err_Ok; post_table = &font->tables[sfnt->post_idx]; buf = post_table->buf; buf_len = post_table->len; if (post_table->processed) return TA_Err_Ok; version = (FT_ULong)(buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3]); /* since we have to add a non-standard glyph name, */ /* we must convert `name' tables in formats 1.0 and 2.5 into format 2.0 */ if (version == 0x10000) { /* XXX */ } else if (version == 0x20000) { FT_UShort num_glyphs; FT_UShort max_name_idx; FT_ULong len; FT_UShort i; FT_Byte* p; FT_Byte* p_new; num_glyphs = (FT_UShort)(buf[32] << 8 | buf[33]); p = buf + 34; max_name_idx = 0; /* get number of glyph names stored in `names' array */ for (i = 0; i < num_glyphs; i++) { FT_UShort idx; idx = NEXT_USHORT(p); if (idx >= 258) { idx -= 257; if (idx > max_name_idx) max_name_idx = idx; } } /* we add one entry to the `glyphNameIndex' array, */ /* and append TTFAUTOHINT_GLYPH_LEN bytes to the `names' array */ buf_new_len = post_table->len + 2 + TTFAUTOHINT_GLYPH_LEN; /* make the allocated buffer length a multiple of 4 */ len = (buf_new_len + 3) & ~3U; buf_new = (FT_Byte*)malloc(len); if (!buf_new) return FT_Err_Out_Of_Memory; /* pad end of buffer with zeros */ buf_new[len - 1] = 0x00; buf_new[len - 2] = 0x00; buf_new[len - 3] = 0x00; /* copy the table and insert the new data */ p = buf; p_new = buf_new; memcpy(p_new, p, 32); /* header */ p += 32; p_new += 32; *p_new = HIGH(num_glyphs + 1); *(p_new + 1) = LOW(num_glyphs + 1); p += 2; p_new += 2; memcpy(p_new, p, num_glyphs * 2); /* glyphNameIndex */ p += num_glyphs * 2; p_new += num_glyphs * 2; *p_new = HIGH(max_name_idx + 1 + 257); /* new entry */ *(p_new + 1) = LOW(max_name_idx + 1 + 257); p_new += 2; memcpy(p_new, p, (size_t)(buf + buf_len - p)); /* names */ p_new += buf + buf_len - p; strncpy((char*)p_new, TTFAUTOHINT_GLYPH_FIRST_BYTE TTFAUTOHINT_GLYPH, TTFAUTOHINT_GLYPH_LEN); /* new entry */ free(buf); post_table->buf = buf_new; post_table->len = buf_new_len; } else if (version == 0x28000) { /* XXX */ } else goto Done; /* nothing to do for format 3.0 */ post_table->checksum = TA_table_compute_checksum(post_table->buf, post_table->len); Done: post_table->processed = 1; return TA_Err_Ok; } /* end of tapost.c */ ttfautohint-1.8.1/lib/taprep.c0000644000175000001440000006170113221140566016145 0ustar00wlusers00000000000000/* taprep.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" #define PREP(snippet_name) prep_ ## snippet_name static const unsigned char PREP(hinting_limit_a) [] = { /* all our measurements are taken along the y axis, */ /* including the ppem and CVT values */ SVTCA_y, /* first of all, check whether we do hinting at all */ MPPEM, PUSHW_1, }; /* %d, hinting size limit */ static const unsigned char PREP(hinting_limit_b) [] = { GT, IF, PUSHB_2, 1, /* switch off hinting */ 1, INSTCTRL, EIF, }; /* we store 0x10000 in CVT index `cvtl_funits_to_pixels' as a scaled value */ /* to have a conversion factor from FUnits to pixels */ static const unsigned char PREP(store_funits_to_pixels) [] = { PUSHB_1, cvtl_funits_to_pixels, PUSHW_2, 0x08, /* 0x800 */ 0x00, 0x08, /* 0x800 */ 0x00, MUL, /* 0x10000 */ WCVTF, /* store value 1 in 16.16 format, scaled */ }; /* if the current ppem value is an exception, don't apply scaling */ static const unsigned char PREP(test_exception_a) [] = { PUSHB_1, cvtl_is_element, RCVT, NOT, IF, }; /* provide scaling factors for all styles */ static const unsigned char PREP(align_x_height_a) [] = { PUSHB_2, sal_i, CVT_SCALING_VALUE_OFFSET(0), WS, }; /* PUSHB (num_used_styles + 2) */ /* ... */ /* %c, style 1's x height blue zone idx */ /* %c, style 0's x height blue zone idx */ /* %c, num_used_styles */ static const unsigned char PREP(align_x_height_b) [] = { bci_align_x_height, LOOPCALL, }; static const unsigned char PREP(loop_cvt_a) [] = { /* loop over (almost all) vertical CVT entries of all styles, part 1 */ PUSHB_2, sal_i, CVT_SCALING_VALUE_OFFSET(0), WS, }; /* PUSHB (2*num_used_styles + 2) */ /* ... */ /* %c, style 1's first vertical index */ /* %c, style 1's number of vertical indices */ /* (std. width, widths, flat blues zones without artifical ones) */ /* %c, style 0's first vertical index */ /* %c, style 0's number of vertical indices */ /* (std. width, widths, flat blues zones without artifical ones) */ /* %c, num_used_styles */ static const unsigned char PREP(loop_cvt_b) [] = { bci_cvt_rescale_range, LOOPCALL, /* loop over (almost all) vertical CVT entries of all styles, part 2 */ PUSHB_2, sal_i, CVT_SCALING_VALUE_OFFSET(0), WS, }; /* PUSHB (2*num_used_styles + 2) */ /* ... */ /* %c, style 1's first round blue zone index */ /* %c, style 1's number of round blue zones (without artificial ones) */ /* %c, style 0's first round blue zone index */ /* %c, style 0's number of round blue zones (without artificial ones) */ /* %c, num_used_styles */ static const unsigned char PREP(loop_cvt_c) [] = { bci_cvt_rescale_range, LOOPCALL, }; static const unsigned char PREP(test_exception_b) [] = { EIF, }; static const unsigned char PREP(store_vwidth_data_a) [] = { PUSHB_2, sal_i, }; /* %c, offset to vertical width offset data in CVT */ static const unsigned char PREP(store_vwidth_data_b) [] = { WS, }; /*PUSHW (num_used_styles + 2) */ /* ... */ /* %d, style 1's first vertical width index (in multiples of 64) */ /* %d, style 0's first vertical width index (in multiples of 64) */ /* %d, num_used_styles */ static const unsigned char PREP(store_vwidth_data_c) [] = { 0x00, /* high byte */ bci_vwidth_data_store, /* low byte */ LOOPCALL, PUSHB_2, sal_i, }; /* %c, offset to vertical width size data in CVT */ static const unsigned char PREP(store_vwidth_data_d) [] = { WS, }; /*PUSHW (num_used_styles + 2) */ /* ... */ /* %d, style 1's number of vertical widths (in multiples of 64) */ /* %d, style 0's number of vertical widths (in multiples of 64) */ /* %d, num_used_styles */ static const unsigned char PREP(store_vwidth_data_e) [] = { 0x00, /* high byte */ bci_vwidth_data_store, /* low byte */ LOOPCALL, }; static const unsigned char PREP(set_stem_width_mode_a) [] = { /* * ttfautohint provides two different functions for stem width computation * and blue zone rounding: `smooth' and `strong'. The former tries to * align stem widths and blue zones to some discrete, possibly non-integer * values. The latter snaps everything to integer pixels as much as * possible. * * We test ClearType capabilities to find out which of the two functions * should be used. Due to the various TrueType interpreter versions this * is quite convoluted. * * interpreter version action * --------------------------------------------------------------------- * <= 35 this version predates ClearType -> smooth * * 36-38 use bit 6 in the GETINFO instruction to check * whether ClearType is enabled; if set, we have * (old) GDI ClearType -> strong, otherwise * grayscale rendering -> smooth * * 39 if ClearType is enabled, use bit 10 in the * GETINFO instruction to check whether ClearType * sub-pixel positioning is available; if set, we * have DW ClearType -> smooth, else GDI ClearType * -> strong * * >= 40 if ClearType is enabled, use bit 11 in the * GETINFO instruction to check whether ClearType * symmetric rendering is available; if not set, * the engine behaves like a B/W renderer along the * y axis -> strong, else it does vertical * smoothing -> smooth * * ClearType on Windows was introduced in 2000 for the GDI framework (no * symmetric rendering, no sub-pixel positioning). In 2008, Windows got * the DirectWrite (DW) framework which uses symmetric rendering and * sub-pixel positioning. * * Note that in 2017 GDI on Windows 10 has changed rendering parameters: * it now uses symmetric rendering but no sub-pixel positioning. * Consequently, we treat this as `DW ClearType' also. */ /* set default value */ PUSHW_2, 0, cvtl_stem_width_mode, /* target: grayscale rendering */ }; /* %d, either -100, 0 or 100 */ static const unsigned char PREP(set_stem_width_mode_b) [] = { WCVTP, /* get rasterizer version (bit 0) */ PUSHB_2, 36, 0x01, GETINFO, /* `(old) GDI ClearType': version >= 36 || version <= 38 */ LTEQ, IF, /* check whether ClearType is enabled (bit 6) */ PUSHB_1, 0x40, GETINFO, IF, PUSHW_2, 0, cvtl_stem_width_mode, /* target: GDI ClearType */ }; /* %d, either -100, 0 or 100 */ static const unsigned char PREP(set_stem_width_mode_c) [] = { WCVTP, /* get rasterizer version (bit 0) */ PUSHB_2, 40, 0x01, GETINFO, /* `DW ClearType': version >= 40 */ LTEQ, IF, /* check whether symmetric rendering is enabled (bit 11) */ PUSHW_1, 0x08, 0x00, GETINFO, IF, PUSHW_2, 0, cvtl_stem_width_mode, /* target: DirectWrite ClearType */ }; /* %d, either -100, 0 or 100 */ static const unsigned char PREP(set_stem_width_mode_d) [] = { WCVTP, EIF, ELSE, /* get rasterizer version (bit 0) */ PUSHB_2, 39, 0x01, GETINFO, /* `DW ClearType': version == 39 */ LTEQ, IF, /* check whether sub-pixel positioning is enabled (bit 10) -- */ /* due to a bug in FreeType 2.5.0 and earlier, */ /* bit 6 must be set also to get the correct information, */ /* so we test that both return values (in bits 13 and 17) are set */ PUSHW_3, 0x08, /* bits 13 and 17 right-shifted by 6 bits */ 0x80, 0x00, /* we do `MUL' with value 1, */ 0x01, /* which is essentially a division by 64 */ 0x04, /* bits 6 and 10 */ 0x40, GETINFO, MUL, EQ, IF, PUSHW_2, 0, cvtl_stem_width_mode, /* target: DirectWrite ClearType */ }; /* %d, either -100, 0 or 100 */ static const unsigned char PREP(set_stem_width_mode_e) [] = { WCVTP, EIF, EIF, EIF, EIF, EIF, }; /*PUSHB (2*num_used_styles + 2) */ /* ... */ /* %c, style 1's first blue ref index */ /* %c, style 1's number of blue ref indices */ /* %c, style 0's first blue ref index */ /* %c, style 0's number of blue ref indices */ /* %c, num_used_styles */ static const unsigned char PREP(round_blues) [] = { bci_blue_round_range, LOOPCALL, }; static const unsigned char PREP(set_dropout_mode) [] = { PUSHW_1, 0x01, /* 0x01FF, activate dropout handling unconditionally */ 0xFF, SCANCTRL, PUSHB_1, 4, /* smart dropout include stubs */ SCANTYPE, }; static const unsigned char PREP(reset_component_counter) [] = { /* In case an application tries to render `.ttfautohint' */ /* (which it should never do), */ /* hinting of all glyphs rendered afterwards is disabled */ /* because the `cvtl_is_subglyph' counter gets incremented, */ /* but there is no counterpart to decrement it. */ /* Font inspection tools like the FreeType demo programs */ /* are an exception to that rule, however, */ /* since they can directly access a font by glyph indices. */ /* The following guard alleviates the problem a bit: */ /* Any change of the graphics state */ /* (for example, rendering at a different size or with a different mode) */ /* resets the counter to zero. */ PUSHB_2, cvtl_is_subglyph, 0, WCVTP, }; static const unsigned char PREP(adjust_delta_exceptions) [] = { /* set delta base */ PUSHB_1, CONTROL_DELTA_PPEM_MIN, SDB, }; static const unsigned char PREP(set_default_cvs_values) [] = { /* We set a default value for `cvtl_do_iup_y'. */ /* If we have delta exceptions before IUP_y, */ /* the glyph's bytecode sets this CVT value temporarily to zero */ /* and manually inserts IUP_y afterwards. */ /* We set a default value for `cvtl_ignore_std_width'. */ /* As the name implies, the stem width computation routines */ /* ignore the standard width(s) if this flag gets set. */ /* It would be more elegant to use storage area locations instead, */ /* however, it is not possible to have default values for them */ /* since storage area locations might be reset on a per-glyph basis */ /* (this is dependent on the bytecode interpreter implementation). */ PUSHB_4, cvtl_do_iup_y, 100, cvtl_ignore_std_width, 0, WCVTP, WCVTP, }; /* this function allocates `buf', parsing `number_set' to create bytecode */ /* which eventually sets CVT index `cvtl_is_element' */ /* (in functions `bci_number_set_is_element' and */ /* `bci_number_set_is_element2') */ static FT_Byte* TA_sfnt_build_number_set(SFNT* sfnt, FT_Byte** buf, number_range* number_set) { FT_Byte* bufp = NULL; number_range* nr; FT_UInt num_singles2 = 0; FT_UInt* single2_args; FT_UInt* single2_arg; FT_UInt num_singles = 0; FT_UInt* single_args; FT_UInt* single_arg; FT_UInt num_ranges2 = 0; FT_UInt* range2_args; FT_UInt* range2_arg; FT_UInt num_ranges = 0; FT_UInt* range_args; FT_UInt* range_arg; FT_UInt have_single = 0; FT_UInt have_range = 0; FT_UShort num_stack_elements; /* build up four stacks to stay as compact as possible */ nr = number_set; while (nr) { if (nr->start == nr->end) { if (nr->start < 256) num_singles++; else num_singles2++; } else { if (nr->start < 256 && nr->end < 256) num_ranges++; else num_ranges2++; } nr = nr->next; } /* collect all arguments temporarily in arrays (in reverse order) */ /* so that we can easily split into chunks of 255 args */ /* as needed by NPUSHB and friends; */ /* for simplicity, always allocate an extra slot */ single2_args = (FT_UInt*)malloc((num_singles2 + 1) * sizeof (FT_UInt)); single_args = (FT_UInt*)malloc((num_singles + 1) * sizeof (FT_UInt)); range2_args = (FT_UInt*)malloc((2 * num_ranges2 + 1) * sizeof (FT_UInt)); range_args = (FT_UInt*)malloc((2 * num_ranges + 1) * sizeof (FT_UInt)); if (!single2_args || !single_args || !range2_args || !range_args) goto Fail; /* check whether we need the extra slot for the argument to CALL */ if (num_singles || num_singles2) have_single = 1; if (num_ranges || num_ranges2) have_range = 1; /* set function indices outside of argument loop (using the extra slot) */ if (have_single) single_args[num_singles] = bci_number_set_is_element; if (have_range) range_args[2 * num_ranges] = bci_number_set_is_element2; single2_arg = single2_args + num_singles2 - 1; single_arg = single_args + num_singles - 1; range2_arg = range2_args + 2 * num_ranges2 - 1; range_arg = range_args + 2 * num_ranges - 1; nr = number_set; while (nr) { FT_UInt start = (FT_UInt)nr->start; FT_UInt end = (FT_UInt)nr->end; if (start == end) { if (start < 256) *(single_arg--) = start; else *(single2_arg--) = start; } else { if (start < 256 && end < 256) { *(range_arg--) = start; *(range_arg--) = end; } else { *(range2_arg--) = start; *(range2_arg--) = end; } } nr = nr->next; } /* this rough estimate of the buffer size gets adjusted later on */ *buf = (FT_Byte*)malloc((2 + 1) * num_singles2 + (1 + 1) * num_singles + (4 + 1) * num_ranges2 + (2 + 1) * num_ranges + 10); if (!*buf) goto Fail; bufp = *buf; BCI(PUSHB_2); BCI(cvtl_is_element); BCI(0); BCI(WCVTP); bufp = TA_build_push(bufp, single2_args, num_singles2, 1, 1); bufp = TA_build_push(bufp, single_args, num_singles + have_single, 0, 1); if (have_single) BCI(CALL); bufp = TA_build_push(bufp, range2_args, 2 * num_ranges2, 1, 1); bufp = TA_build_push(bufp, range_args, 2 * num_ranges + have_range, 0, 1); if (have_range) BCI(CALL); num_stack_elements = (FT_UShort)(num_singles + num_singles2); if (num_stack_elements > num_ranges + num_ranges2) num_stack_elements = (FT_UShort)(num_ranges + num_ranges2); num_stack_elements += ADDITIONAL_STACK_ELEMENTS; if (num_stack_elements > sfnt->max_stack_elements) sfnt->max_stack_elements = num_stack_elements; Fail: free(single2_args); free(single_args); free(range2_args); free(range_args); return bufp; } #define COPY_PREP(snippet_name) \ do \ { \ memcpy(bufp, prep_ ## snippet_name, \ sizeof (prep_ ## snippet_name)); \ bufp += sizeof (prep_ ## snippet_name); \ } while (0) static FT_Error TA_table_build_prep(FT_Byte** prep, FT_ULong* prep_len, SFNT* sfnt, FONT* font) { SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; /* XXX: make this work for more than 256 styles */ FT_Byte num_used_styles = (FT_Byte)data->num_used_styles; FT_Int i; FT_Byte* buf = NULL; FT_Byte* buf_new; FT_UInt buf_len; FT_UInt buf_new_len; FT_UInt len; FT_Byte* bufp = NULL; if (font->x_height_snapping_exceptions) { bufp = TA_sfnt_build_number_set(sfnt, &buf, font->x_height_snapping_exceptions); if (!bufp) return FT_Err_Out_Of_Memory; } buf_len = (FT_UInt)(bufp - buf); buf_new_len = buf_len; if (font->hinting_limit) buf_new_len += sizeof (PREP(hinting_limit_a)) + 2 + sizeof (PREP(hinting_limit_b)); buf_new_len += sizeof (PREP(store_funits_to_pixels)); if (font->x_height_snapping_exceptions) buf_new_len += sizeof (PREP(test_exception_a)); buf_new_len += sizeof (PREP(align_x_height_a)) + (num_used_styles > 6 ? num_used_styles + 3 : num_used_styles + 2) + sizeof (PREP(align_x_height_b)); buf_new_len += sizeof (PREP(loop_cvt_a)) + (num_used_styles > 3 ? 2 * num_used_styles + 3 : 2 * num_used_styles + 2) + sizeof (PREP(loop_cvt_b)) + (num_used_styles > 3 ? 2 * num_used_styles + 3 : 2 * num_used_styles + 2) + sizeof (PREP(loop_cvt_c)); if (font->x_height_snapping_exceptions) buf_new_len += sizeof (PREP(test_exception_b)); buf_new_len += sizeof (PREP(store_vwidth_data_a)) + 1 + sizeof (PREP(store_vwidth_data_b)) + (num_used_styles > 6 ? 2 * (num_used_styles + 1) + 2 : 2 * (num_used_styles + 1) + 1) + sizeof (PREP(store_vwidth_data_c)) + 1 + sizeof (PREP(store_vwidth_data_d)) + (num_used_styles > 6 ? 2 * (num_used_styles + 1) + 2 : 2 * (num_used_styles + 1) + 1) + sizeof (PREP(store_vwidth_data_e)); buf_new_len += sizeof (PREP(set_stem_width_mode_a)) + 2 + sizeof (PREP(set_stem_width_mode_b)) + 2 + sizeof (PREP(set_stem_width_mode_c)) + 2 + sizeof (PREP(set_stem_width_mode_d)) + 2 + sizeof (PREP(set_stem_width_mode_e)); buf_new_len += (num_used_styles > 3 ? 2 * num_used_styles + 3 : 2 * num_used_styles + 2) + sizeof (PREP(round_blues)); buf_new_len += sizeof (PREP(set_dropout_mode)); buf_new_len += sizeof (PREP(reset_component_counter)); if (font->control_data_head) buf_new_len += sizeof (PREP(adjust_delta_exceptions)); buf_new_len += sizeof (PREP(set_default_cvs_values)); /* buffer length must be a multiple of four */ len = (buf_new_len + 3) & ~3U; buf_new = (FT_Byte*)realloc(buf, len); if (!buf_new) { free(buf); return FT_Err_Out_Of_Memory; } buf = buf_new; /* pad end of buffer with zeros */ buf[len - 1] = 0x00; buf[len - 2] = 0x00; buf[len - 3] = 0x00; /* copy remaining cvt program into buffer */ /* and fill in the missing variables */ bufp = buf + buf_len; if (font->hinting_limit) { COPY_PREP(hinting_limit_a); *(bufp++) = HIGH(font->hinting_limit); *(bufp++) = LOW(font->hinting_limit); COPY_PREP(hinting_limit_b); } COPY_PREP(store_funits_to_pixels); if (font->x_height_snapping_exceptions) COPY_PREP(test_exception_a); COPY_PREP(align_x_height_a); if (num_used_styles > 6) { BCI(NPUSHB); BCI(num_used_styles + 2); } else BCI(PUSHB_1 - 1 + num_used_styles + 2); /* XXX: make this work for offsets > 255 */ for (i = TA_STYLE_MAX - 1; i >= 0; i--) { if (data->style_ids[i] == 0xFFFFU) continue; *(bufp++) = CVT_X_HEIGHT_BLUE_OFFSET(i) >= 0xFFFFU ? 0 : (unsigned char)CVT_X_HEIGHT_BLUE_OFFSET(i); } *(bufp++) = num_used_styles; COPY_PREP(align_x_height_b); COPY_PREP(loop_cvt_a); if (num_used_styles > 3) { BCI(NPUSHB); BCI(2 * num_used_styles + 2); } else BCI(PUSHB_1 - 1 + 2 * num_used_styles + 2); /* XXX: make this work for offsets > 255 */ for (i = TA_STYLE_MAX - 1; i >= 0; i--) { if (data->style_ids[i] == 0xFFFFU) continue; /* don't loop over artificial blue zones */ *(bufp++) = (unsigned char)CVT_VERT_STANDARD_WIDTH_OFFSET(i); *(bufp++) = (unsigned char)( 1 + CVT_VERT_WIDTHS_SIZE(i) + (CVT_BLUES_SIZE(i) > 1 ? CVT_BLUES_SIZE(i) - (font->windows_compatibility ? 2 : 0) : 0)); } *(bufp++) = num_used_styles; COPY_PREP(loop_cvt_b); if (num_used_styles > 3) { BCI(NPUSHB); BCI(2 * num_used_styles + 2); } else BCI(PUSHB_1 - 1 + 2 * num_used_styles + 2); /* XXX: make this work for offsets > 255 */ for (i = TA_STYLE_MAX - 1; i >= 0; i--) { if (data->style_ids[i] == 0xFFFFU) continue; /* don't loop over artificial blue zones */ *(bufp++) = (unsigned char)CVT_BLUE_SHOOTS_OFFSET(i); *(bufp++) = (unsigned char)( CVT_BLUES_SIZE(i) > 1 ? CVT_BLUES_SIZE(i) - (font->windows_compatibility ? 2 : 0) : 0); } *(bufp++) = num_used_styles; COPY_PREP(loop_cvt_c); if (font->x_height_snapping_exceptions) COPY_PREP(test_exception_b); COPY_PREP(store_vwidth_data_a); *(bufp++) = (unsigned char)CVT_VWIDTH_OFFSET_DATA(0); COPY_PREP(store_vwidth_data_b); if (num_used_styles > 6) { BCI(NPUSHW); BCI(num_used_styles + 2); } else BCI(PUSHW_1 - 1 + num_used_styles + 2); for (i = TA_STYLE_MAX - 1; i >= 0; i--) { if (data->style_ids[i] == 0xFFFFU) continue; *(bufp++) = HIGH(CVT_VERT_WIDTHS_OFFSET(i) * 64); *(bufp++) = LOW(CVT_VERT_WIDTHS_OFFSET(i) * 64); } *(bufp++) = HIGH(num_used_styles); *(bufp++) = LOW(num_used_styles); COPY_PREP(store_vwidth_data_c); *(bufp++) = (unsigned char)CVT_VWIDTH_SIZE_DATA(0); COPY_PREP(store_vwidth_data_d); if (num_used_styles > 6) { BCI(NPUSHW); BCI(num_used_styles + 2); } else BCI(PUSHW_1 - 1 + num_used_styles + 2); for (i = TA_STYLE_MAX - 1; i >= 0; i--) { if (data->style_ids[i] == 0xFFFFU) continue; *(bufp++) = HIGH(CVT_VERT_WIDTHS_SIZE(i) * 64); *(bufp++) = LOW(CVT_VERT_WIDTHS_SIZE(i) * 64); } *(bufp++) = HIGH(num_used_styles); *(bufp++) = LOW(num_used_styles); COPY_PREP(store_vwidth_data_e); COPY_PREP(set_stem_width_mode_a); *(bufp++) = HIGH(font->gray_stem_width_mode * 100); *(bufp++) = LOW(font->gray_stem_width_mode * 100); COPY_PREP(set_stem_width_mode_b); *(bufp++) = HIGH(font->gdi_cleartype_stem_width_mode * 100); *(bufp++) = LOW(font->gdi_cleartype_stem_width_mode * 100); COPY_PREP(set_stem_width_mode_c); *(bufp++) = HIGH(font->dw_cleartype_stem_width_mode * 100); *(bufp++) = LOW(font->dw_cleartype_stem_width_mode * 100); COPY_PREP(set_stem_width_mode_d); *(bufp++) = HIGH(font->dw_cleartype_stem_width_mode * 100); *(bufp++) = LOW(font->dw_cleartype_stem_width_mode * 100); COPY_PREP(set_stem_width_mode_e); if (num_used_styles > 3) { BCI(NPUSHB); BCI(2 * num_used_styles + 2); } else BCI(PUSHB_1 - 1 + 2 * num_used_styles + 2); /* XXX: make this work for offsets > 255 */ for (i = TA_STYLE_MAX - 1; i >= 0; i--) { if (data->style_ids[i] == 0xFFFFU) continue; *(bufp++) = (unsigned char)CVT_BLUE_REFS_OFFSET(i); *(bufp++) = (unsigned char)CVT_BLUES_SIZE(i); } *(bufp++) = num_used_styles; COPY_PREP(round_blues); COPY_PREP(set_dropout_mode); COPY_PREP(reset_component_counter); if (font->control_data_head) COPY_PREP(adjust_delta_exceptions); COPY_PREP(set_default_cvs_values); *prep = buf; *prep_len = buf_new_len; return FT_Err_Ok; } FT_Error TA_sfnt_build_prep_table(SFNT* sfnt, FONT* font) { FT_Error error; SFNT_Table* glyf_table = &font->tables[sfnt->glyf_idx]; glyf_Data* data = (glyf_Data*)glyf_table->data; FT_Byte* prep_buf; FT_ULong prep_len; error = TA_sfnt_add_table_info(sfnt); if (error) goto Exit; /* `glyf', `cvt', `fpgm', and `prep' are always used in parallel */ if (glyf_table->processed) { sfnt->table_infos[sfnt->num_table_infos - 1] = data->prep_idx; goto Exit; } error = TA_table_build_prep(&prep_buf, &prep_len, sfnt, font); if (error) goto Exit; #if 0 /* ttfautohint's bytecode in `fpgm' is larger */ /* than the bytecode in `prep'; */ /* this commented out code here is just for completeness */ if (prep_len > sfnt->max_instructions) sfnt->max_instructions = prep_len; #endif /* in case of success, `prep_buf' gets linked */ /* and is eventually freed in `TA_font_unload' */ error = TA_font_add_table(font, &sfnt->table_infos[sfnt->num_table_infos - 1], TTAG_prep, prep_len, prep_buf); if (error) free(prep_buf); else data->prep_idx = sfnt->table_infos[sfnt->num_table_infos - 1]; Exit: return error; } /* end of taprep.c */ ttfautohint-1.8.1/lib/taranges.c0000644000175000001440000006074013153174711016463 0ustar00wlusers00000000000000/* taranges.c */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afranges.c' (2014-Jan-11) from FreeType */ /* heavily modified 2014 by Werner Lemberg */ #include "taranges.h" /* * This file gets also processed with the `taranges.sed' script to produce * documentation of character ranges. To make this simple approach work, * don't change the formatting in this file! * * - Everything before the first `const' keyword (starting a line) gets * removed. * * - The line containing `none_uniranges' and everything after it gets * removed, too. * * - Comments after a `TA_UNIRANGE_REC' entry are used for character range * documentation within a table. * * - Comments indented by two spaces are also used within a table. * * - Other comments are inserted into the documentation as-is (after * stripping off the comment characters). */ /* * The algorithm for assigning properties and styles to the `glyph_styles' * array is as follows (cf. the implementation in * `ta_face_globals_compute_style_coverage'). * * Walk over all scripts (as listed in `tascript.h'). * * For a given script, walk over all styles (as listed in `tastyles.h'). * The order of styles is important and should be as follows. * * - First come styles based on OpenType features (small caps, for * example). Since features rely on glyph indices, thus completely * bypassing character codes, no properties are assigned. * * - Next comes the default style, using the character ranges as defined * below. This also assigns properties. * * Note that there also exist fallback scripts, mainly covering * superscript and subscript glyphs of a script that are not present as * OpenType features. Fallback scripts are defined below, also * assigning properties; they are applied after the corresponding * script. * */ /* XXX Check base character ranges again: */ /* Right now, they are quickly derived by visual inspection. */ /* I can imagine that fine-tuning is necessary. */ /* for the auto-hinter, a `non-base character' is something that should */ /* not be affected by blue zones, regardless of whether this is a */ /* spacing or no-spacing glyph */ /* the `ta_xxxx_nonbase_uniranges' ranges must be strict subsets */ /* of the corresponding `ta_xxxx_uniranges' ranges */ const TA_Script_UniRangeRec ta_adlm_uniranges[] = { TA_UNIRANGE_REC(0x1E900, 0x1E95F), /* Adlam */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_adlm_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x1D944, 0x1E94A), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_arab_uniranges[] = { TA_UNIRANGE_REC( 0x0600, 0x06FF), /* Arabic */ TA_UNIRANGE_REC( 0x0750, 0x07FF), /* Arabic Supplement */ TA_UNIRANGE_REC( 0x08A0, 0x08FF), /* Arabic Extended-A */ TA_UNIRANGE_REC( 0xFB50, 0xFDFF), /* Arabic Presentation Forms-A */ TA_UNIRANGE_REC( 0xFE70, 0xFEFF), /* Arabic Presentation Forms-B */ TA_UNIRANGE_REC(0x1EE00, 0x1EEFF), /* Arabic Mathematical Alphabetic Symbols */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_arab_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0600, 0x0605), TA_UNIRANGE_REC(0x0610, 0x061A), TA_UNIRANGE_REC(0x064B, 0x065F), TA_UNIRANGE_REC(0x0670, 0x0670), TA_UNIRANGE_REC(0x06D6, 0x06DC), TA_UNIRANGE_REC(0x06DF, 0x06E4), TA_UNIRANGE_REC(0x06E7, 0x06E8), TA_UNIRANGE_REC(0x06EA, 0x06ED), TA_UNIRANGE_REC(0x08E3, 0x08FF), TA_UNIRANGE_REC(0xFBB2, 0xFBC1), TA_UNIRANGE_REC(0xFE70, 0xFE70), TA_UNIRANGE_REC(0xFE72, 0xFE72), TA_UNIRANGE_REC(0xFE74, 0xFE74), TA_UNIRANGE_REC(0xFE76, 0xFE76), TA_UNIRANGE_REC(0xFE78, 0xFE78), TA_UNIRANGE_REC(0xFE7A, 0xFE7A), TA_UNIRANGE_REC(0xFE7C, 0xFE7C), TA_UNIRANGE_REC(0xFE7E, 0xFE7E), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_armn_uniranges[] = { TA_UNIRANGE_REC(0x0530, 0x058F), /* Armenian */ TA_UNIRANGE_REC(0xFB13, 0xFB17), /* Alphab. Present. Forms (Armenian) */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_armn_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0559, 0x055F), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_avst_uniranges[] = { TA_UNIRANGE_REC(0x10B00, 0x10B3F), /* Avestan */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_avst_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x10B39, 0x10B3F), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_bamu_uniranges[] = { TA_UNIRANGE_REC( 0xA6A0, 0xA6FF), /* Bamum */ #if 0 /* The characters in the Bamum supplement are pictograms, */ /* not (directly) related to the syllabic Bamum script */ TA_UNIRANGE_REC(0x16800, 0x16A3F), /* Bamum Supplement */ #endif TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_bamu_nonbase_uniranges[] = { TA_UNIRANGE_REC(0xA6F0, 0xA6F1), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_beng_uniranges[] = { TA_UNIRANGE_REC(0x0980, 0x09FF), /* Bengali */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_beng_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0981, 0x0981), TA_UNIRANGE_REC(0x09BC, 0x09BC), TA_UNIRANGE_REC(0x09C1, 0x09C4), TA_UNIRANGE_REC(0x09CD, 0x09CD), TA_UNIRANGE_REC(0x09E2, 0x09E3), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_buhd_uniranges[] = { TA_UNIRANGE_REC(0x1740, 0x175F), /* Buhid */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_buhd_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x1752, 0x1753), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_cakm_uniranges[] = { TA_UNIRANGE_REC(0x11100, 0x1114F), /* Chakma */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_cakm_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x11100, 0x11102), TA_UNIRANGE_REC(0x11127, 0x11134), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_cans_uniranges[] = { TA_UNIRANGE_REC(0x1400, 0x167F), /* Unified Canadian Aboriginal Syllabics */ TA_UNIRANGE_REC(0x18B0, 0x18FF), /* Unified Canadian Aboriginal Syllabics Extended */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_cans_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_cari_uniranges[] = { TA_UNIRANGE_REC(0x102A0, 0x102DF), /* Carian */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_cari_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_cher_uniranges[] = { TA_UNIRANGE_REC(0x13A0, 0x13FF), /* Cherokee */ TA_UNIRANGE_REC(0xAB70, 0xABBF), /* Cherokee Supplement */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_cher_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_copt_uniranges[] = { TA_UNIRANGE_REC(0x2C80, 0x2CFF), /* Coptic */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_copt_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x2CEF, 0x2CF1), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_cprt_uniranges[] = { TA_UNIRANGE_REC(0x10800, 0x1083F), /* Cypriot */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_cprt_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_cyrl_uniranges[] = { TA_UNIRANGE_REC(0x0400, 0x04FF), /* Cyrillic */ TA_UNIRANGE_REC(0x0500, 0x052F), /* Cyrillic Supplement */ TA_UNIRANGE_REC(0x2DE0, 0x2DFF), /* Cyrillic Extended-A */ TA_UNIRANGE_REC(0xA640, 0xA69F), /* Cyrillic Extended-B */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_cyrl_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0483, 0x0489), TA_UNIRANGE_REC(0x2DE0, 0x2DFF), TA_UNIRANGE_REC(0xA66F, 0xA67F), TA_UNIRANGE_REC(0xA69E, 0xA69F), TA_UNIRANGE_REC( 0, 0) }; /* There are some characters in the Devanagari Unicode block that are */ /* generic to Indic scripts; we omit them so that their presence doesn't */ /* trigger Devanagari. */ const TA_Script_UniRangeRec ta_deva_uniranges[] = { TA_UNIRANGE_REC(0x0900, 0x093B), /* Devanagari */ /* omitting U+093C nukta */ TA_UNIRANGE_REC(0x093D, 0x0950), /* ... continued */ /* omitting U+0951 udatta, U+0952 anudatta */ TA_UNIRANGE_REC(0x0953, 0x0963), /* ... continued */ /* omitting U+0964 danda, U+0965 double danda */ TA_UNIRANGE_REC(0x0966, 0x097F), /* ... continued */ TA_UNIRANGE_REC(0x20B9, 0x20B9), /* (new) Rupee sign */ TA_UNIRANGE_REC(0xA8E0, 0xA8FF), /* Devanagari Extended */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_deva_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0900, 0x0902), TA_UNIRANGE_REC(0x093A, 0x093A), TA_UNIRANGE_REC(0x0941, 0x0948), TA_UNIRANGE_REC(0x094D, 0x094D), TA_UNIRANGE_REC(0x0953, 0x0957), TA_UNIRANGE_REC(0x0962, 0x0963), TA_UNIRANGE_REC(0xA8E0, 0xA8F1), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_dsrt_uniranges[] = { TA_UNIRANGE_REC(0x10400, 0x1044F), /* Deseret */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_dsrt_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_ethi_uniranges[] = { TA_UNIRANGE_REC(0x1200, 0x137F), /* Ethiopic */ TA_UNIRANGE_REC(0x1380, 0x139F), /* Ethiopic Supplement */ TA_UNIRANGE_REC(0x2D80, 0x2DDF), /* Ethiopic Extended */ TA_UNIRANGE_REC(0xAB00, 0xAB2F), /* Ethiopic Extended-A */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_ethi_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x135D, 0x135F), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_geor_uniranges[] = { TA_UNIRANGE_REC(0x10D0, 0x10FF), /* Georgian (Mkhedruli) */ #if 0 /* the following range is proposed for inclusion in Unicode */ TA_UNIRANGE_REC(0x1C90, 0x1CBF), /* Georgian (Mtavruli) */ #endif TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_geor_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_geok_uniranges[] = { /* Khutsuri */ TA_UNIRANGE_REC(0x10A0, 0x10CD), /* Georgian (Asomtavruli) */ TA_UNIRANGE_REC(0x2D00, 0x2D2D), /* Georgian (Nuskhuri) */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_geok_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_glag_uniranges[] = { TA_UNIRANGE_REC( 0x2C00, 0x2C5F), /* Glagolitic */ TA_UNIRANGE_REC(0x1E000, 0x1E02F), /* Glagolitic Supplement */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_glag_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x1E000, 0x1E02F), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_goth_uniranges[] = { TA_UNIRANGE_REC(0x10330, 0x1034F), /* Gothic */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_goth_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_grek_uniranges[] = { TA_UNIRANGE_REC(0x0370, 0x03FF), /* Greek and Coptic */ TA_UNIRANGE_REC(0x1F00, 0x1FFF), /* Greek Extended */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_grek_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x037A, 0x037A), TA_UNIRANGE_REC(0x0384, 0x0385), TA_UNIRANGE_REC(0x1FBD, 0x1FC1), TA_UNIRANGE_REC(0x1FCD, 0x1FCF), TA_UNIRANGE_REC(0x1FDD, 0x1FDF), TA_UNIRANGE_REC(0x1FED, 0x1FEF), TA_UNIRANGE_REC(0x1FFD, 0x1FFE), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_gujr_uniranges[] = { TA_UNIRANGE_REC(0x0A80, 0x0AFF), /* Gujarati */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_gujr_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0A81, 0x0A82), TA_UNIRANGE_REC(0x0ABC, 0x0ABC), TA_UNIRANGE_REC(0x0AC1, 0x0AC8), TA_UNIRANGE_REC(0x0ACD, 0x0ACD), TA_UNIRANGE_REC(0x0AE2, 0x0AE3), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_guru_uniranges[] = { TA_UNIRANGE_REC(0x0A00, 0x0A7F), /* Gurmukhi */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_guru_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0A01, 0x0A02), TA_UNIRANGE_REC(0x0A3C, 0x0A3C), TA_UNIRANGE_REC(0x0A41, 0x0A51), TA_UNIRANGE_REC(0x0A70, 0x0A71), TA_UNIRANGE_REC(0x0A75, 0x0A75), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_hebr_uniranges[] = { TA_UNIRANGE_REC(0x0590, 0x05FF), /* Hebrew */ TA_UNIRANGE_REC(0xFB1D, 0xFB4F), /* Alphab. Present. Forms (Hebrew) */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_hebr_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0591, 0x05BF), TA_UNIRANGE_REC(0x05C1, 0x05C2), TA_UNIRANGE_REC(0x05C4, 0x05C5), TA_UNIRANGE_REC(0x05C7, 0x05C7), TA_UNIRANGE_REC(0xFB1E, 0xFB1E), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_kali_uniranges[] = { TA_UNIRANGE_REC(0xA900, 0xA92F), /* Kayah Li */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_kali_nonbase_uniranges[] = { TA_UNIRANGE_REC(0xA926, 0xA92D), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_knda_uniranges[] = { TA_UNIRANGE_REC(0x0C80, 0x0CFF), /* Kannada */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_knda_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0C81, 0x0C81), TA_UNIRANGE_REC(0x0CBC, 0x0CBC), TA_UNIRANGE_REC(0x0CBF, 0x0CBF), TA_UNIRANGE_REC(0x0CC6, 0x0CC6), TA_UNIRANGE_REC(0x0CCC, 0x0CCD), TA_UNIRANGE_REC(0x0CE2, 0x0CE3), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_khmr_uniranges[] = { TA_UNIRANGE_REC(0x1780, 0x17FF), /* Khmer */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_khmr_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x17B7, 0x17BD), TA_UNIRANGE_REC(0x17C6, 0x17C6), TA_UNIRANGE_REC(0x17C9, 0x17D3), TA_UNIRANGE_REC(0x17DD, 0x17DD), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_khms_uniranges[] = { TA_UNIRANGE_REC(0x19E0, 0x19FF), /* Khmer Symbols */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_khms_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_lao_uniranges[] = { TA_UNIRANGE_REC(0x0E80, 0x0EFF), /* Lao */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_lao_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0EB1, 0x0EB1), TA_UNIRANGE_REC(0x0EB4, 0x0EBC), TA_UNIRANGE_REC(0x0EC8, 0x0ECD), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_latn_uniranges[] = { TA_UNIRANGE_REC( 0x0020, 0x007F), /* Basic Latin (no control chars) */ TA_UNIRANGE_REC( 0x00A0, 0x00A9), /* Latin-1 Supplement (no control chars) */ TA_UNIRANGE_REC( 0x00AB, 0x00B1), /* ... continued */ TA_UNIRANGE_REC( 0x00B4, 0x00B8), /* ... continued */ TA_UNIRANGE_REC( 0x00BB, 0x00FF), /* ... continued */ TA_UNIRANGE_REC( 0x0100, 0x017F), /* Latin Extended-A */ TA_UNIRANGE_REC( 0x0180, 0x024F), /* Latin Extended-B */ TA_UNIRANGE_REC( 0x0250, 0x02AF), /* IPA Extensions */ TA_UNIRANGE_REC( 0x02B9, 0x02DF), /* Spacing Modifier Letters */ TA_UNIRANGE_REC( 0x02E5, 0x02FF), /* ... continued */ TA_UNIRANGE_REC( 0x0300, 0x036F), /* Combining Diacritical Marks */ TA_UNIRANGE_REC( 0x1AB0, 0x1ABE), /* Combining Diacritical Marks Extended */ TA_UNIRANGE_REC( 0x1D00, 0x1D2B), /* Phonetic Extensions */ TA_UNIRANGE_REC( 0x1D6B, 0x1D77), /* ... continued */ TA_UNIRANGE_REC( 0x1D79, 0x1D7F), /* ... continued */ TA_UNIRANGE_REC( 0x1D80, 0x1D9A), /* Phonetic Extensions Supplement */ TA_UNIRANGE_REC( 0x1DC0, 0x1DFF), /* Combining Diacritical Marks Supplement */ TA_UNIRANGE_REC( 0x1E00, 0x1EFF), /* Latin Extended Additional */ TA_UNIRANGE_REC( 0x2000, 0x206F), /* General Punctuation */ TA_UNIRANGE_REC( 0x20A0, 0x20B8), /* Currency Symbols ... */ TA_UNIRANGE_REC( 0x20BA, 0x20CF), /* ... except new Rupee sign */ TA_UNIRANGE_REC( 0x2150, 0x218F), /* Number Forms */ TA_UNIRANGE_REC( 0x2C60, 0x2C7B), /* Latin Extended-C */ TA_UNIRANGE_REC( 0x2C7E, 0x2C7F), /* ... continued */ TA_UNIRANGE_REC( 0x2E00, 0x2E7F), /* Supplemental Punctuation */ TA_UNIRANGE_REC( 0xA720, 0xA76F), /* Latin Extended-D */ TA_UNIRANGE_REC( 0xA771, 0xA7F7), /* ... continued */ TA_UNIRANGE_REC( 0xA7FA, 0xA7FF), /* ... continued */ TA_UNIRANGE_REC( 0xAB30, 0xAB5B), /* Latin Extended-E */ TA_UNIRANGE_REC( 0xAB60, 0xAB6F), /* ... continued */ TA_UNIRANGE_REC( 0xFB00, 0xFB06), /* Alphab. Present. Forms (Latin Ligs) */ TA_UNIRANGE_REC(0x1D400, 0x1D7FF), /* Mathematical Alphanumeric Symbols */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_latn_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x005E, 0x0060), TA_UNIRANGE_REC(0x007E, 0x007E), TA_UNIRANGE_REC(0x00A8, 0x00A9), TA_UNIRANGE_REC(0x00AE, 0x00B0), TA_UNIRANGE_REC(0x00B4, 0x00B4), TA_UNIRANGE_REC(0x00B8, 0x00B8), TA_UNIRANGE_REC(0x00BC, 0x00BE), TA_UNIRANGE_REC(0x02B9, 0x02DF), TA_UNIRANGE_REC(0x02E5, 0x02FF), TA_UNIRANGE_REC(0x0300, 0x036F), TA_UNIRANGE_REC(0x1AB0, 0x1ABE), TA_UNIRANGE_REC(0x1DC0, 0x1DFF), TA_UNIRANGE_REC(0x2017, 0x2017), TA_UNIRANGE_REC(0x203E, 0x203E), TA_UNIRANGE_REC(0xA788, 0xA788), TA_UNIRANGE_REC(0xA7F8, 0xA7FA), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_latb_uniranges[] = { TA_UNIRANGE_REC(0x1D62, 0x1D6A), /* some small subscript letters */ TA_UNIRANGE_REC(0x2080, 0x209C), /* subscript digits and letters */ TA_UNIRANGE_REC(0x2C7C, 0x2C7C), /* latin subscript small letter j */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_latb_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_latp_uniranges[] = { TA_UNIRANGE_REC(0x00AA, 0x00AA), /* feminine ordinal indicator */ TA_UNIRANGE_REC(0x00B2, 0x00B3), /* superscript two and three */ TA_UNIRANGE_REC(0x00B9, 0x00BA), /* superscript one, masc. ord. indic. */ TA_UNIRANGE_REC(0x02B0, 0x02B8), /* some latin superscript mod. letters */ TA_UNIRANGE_REC(0x02E0, 0x02E4), /* some IPA modifier letters */ TA_UNIRANGE_REC(0x1D2C, 0x1D61), /* latin superscript modifier letters */ TA_UNIRANGE_REC(0x1D78, 0x1D78), /* modifier letter cyrillic en */ TA_UNIRANGE_REC(0x1D9B, 0x1DBF), /* more modifier letters */ TA_UNIRANGE_REC(0x2070, 0x207F), /* superscript digits and letters */ TA_UNIRANGE_REC(0x2C7D, 0x2C7D), /* modifier letter capital v */ TA_UNIRANGE_REC(0xA770, 0xA770), /* modifier letter us */ TA_UNIRANGE_REC(0xA7F8, 0xA7F9), /* more modifier letters */ TA_UNIRANGE_REC(0xAB5C, 0xAB5F), /* more modifier letters */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_latp_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_lisu_uniranges[] = { TA_UNIRANGE_REC(0xA4D0, 0xA4FF), /* Lisu */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_lisu_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_mlym_uniranges[] = { TA_UNIRANGE_REC(0x0D00, 0x0D7F), /* Malayalam */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_mlym_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0D01, 0x0D01), TA_UNIRANGE_REC(0x0D4D, 0x0D4E), TA_UNIRANGE_REC(0x0D62, 0x0D63), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_mymr_uniranges[] = { TA_UNIRANGE_REC(0x1000, 0x109F), /* Myanmar */ TA_UNIRANGE_REC(0xA9E0, 0xA9FF), /* Myanmar Extended-B */ TA_UNIRANGE_REC(0xAA60, 0xAA7F), /* Myanmar Extended-A */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_mymr_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x102D, 0x1030), TA_UNIRANGE_REC(0x1032, 0x1037), TA_UNIRANGE_REC(0x103A, 0x103A), TA_UNIRANGE_REC(0x103D, 0x103E), TA_UNIRANGE_REC(0x1058, 0x1059), TA_UNIRANGE_REC(0x105E, 0x1060), TA_UNIRANGE_REC(0x1071, 0x1074), TA_UNIRANGE_REC(0x1082, 0x1082), TA_UNIRANGE_REC(0x1085, 0x1086), TA_UNIRANGE_REC(0x108D, 0x108D), TA_UNIRANGE_REC(0xA9E5, 0xA9E5), TA_UNIRANGE_REC(0xAA7C, 0xAA7C), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_nkoo_uniranges[] = { TA_UNIRANGE_REC(0x07C0, 0x07FF), /* N'Ko */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_nkoo_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x07EB, 0x07F5), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_olck_uniranges[] = { TA_UNIRANGE_REC(0x1C50, 0x1C7F), /* Ol Chiki */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_olck_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_orkh_uniranges[] = { TA_UNIRANGE_REC(0x10C00, 0x10C4F), /* Old Turkic */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_orkh_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_osge_uniranges[] = { TA_UNIRANGE_REC(0x104B0, 0x104FF), /* Osage */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_osge_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_osma_uniranges[] = { TA_UNIRANGE_REC(0x10480, 0x104AF), /* Osmanya */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_osma_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_saur_uniranges[] = { TA_UNIRANGE_REC(0xA880, 0xA8DF), /* Saurashtra */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_saur_nonbase_uniranges[] = { TA_UNIRANGE_REC(0xA880, 0xA881), TA_UNIRANGE_REC(0xA8B4, 0xA8C5), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_shaw_uniranges[] = { TA_UNIRANGE_REC(0x10450, 0x1047F), /* Shavian */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_shaw_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_sinh_uniranges[] = { TA_UNIRANGE_REC(0x0D80, 0x0DFF), /* Sinhala */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_sinh_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0DCA, 0x0DCA), TA_UNIRANGE_REC(0x0DD2, 0x0DD6), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_sund_uniranges[] = { TA_UNIRANGE_REC(0x1B80, 0x1BBF), /* Sundanese */ TA_UNIRANGE_REC(0x1CC0, 0x1CCF), /* Sundanese Supplement */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_sund_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x1B80, 0x1B82), TA_UNIRANGE_REC(0x1BA1, 0x1BAD), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_taml_uniranges[] = { TA_UNIRANGE_REC(0x0B80, 0x0BFF), /* Tamil */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_taml_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0B82, 0x0B82), TA_UNIRANGE_REC(0x0BC0, 0x0BC2), TA_UNIRANGE_REC(0x0BCD, 0x0BCD), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_tavt_uniranges[] = { TA_UNIRANGE_REC(0xAA80, 0xAADF), /* Tai Viet */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_tavt_nonbase_uniranges[] = { TA_UNIRANGE_REC(0xAAB0, 0xAAB0), TA_UNIRANGE_REC(0xAAB2, 0xAAB4), TA_UNIRANGE_REC(0xAAB7, 0xAAB8), TA_UNIRANGE_REC(0xAABE, 0xAABF), TA_UNIRANGE_REC(0xAAC1, 0xAAC1), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_telu_uniranges[] = { TA_UNIRANGE_REC(0x0C00, 0x0C7F), /* Telugu */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_telu_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0C00, 0x0C00), TA_UNIRANGE_REC(0x0C3E, 0x0C40), TA_UNIRANGE_REC(0x0C46, 0x0C56), TA_UNIRANGE_REC(0x0C62, 0x0C63), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_thai_uniranges[] = { TA_UNIRANGE_REC(0x0E00, 0x0E7F), /* Thai */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_thai_nonbase_uniranges[] = { TA_UNIRANGE_REC(0x0E31, 0x0E31), TA_UNIRANGE_REC(0x0E34, 0x0E3A), TA_UNIRANGE_REC(0x0E47, 0x0E4E), TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_tfng_uniranges[] = { TA_UNIRANGE_REC(0x2D30, 0x2D7F), /* Tifinagh */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_tfng_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_vaii_uniranges[] = { TA_UNIRANGE_REC(0xA500, 0xA63F), /* Vai */ TA_UNIRANGE_REC( 0, 0) }; const TA_Script_UniRangeRec ta_vaii_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_none_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; const TA_Script_UniRangeRec ta_none_nonbase_uniranges[] = { TA_UNIRANGE_REC(0, 0) }; /* end of taranges.c */ ttfautohint-1.8.1/lib/taranges.h0000644000175000001440000000177313153174711016471 0ustar00wlusers00000000000000/* taranges.h */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afranges.h' (2014-Jan-11) from FreeType */ /* heavily modified 2014 by Werner Lemberg */ #ifndef TARANGES_H_ #define TARANGES_H_ #include "tatypes.h" #undef SCRIPT #define SCRIPT(s, S, d, h, H, ss) \ extern const TA_Script_UniRangeRec ta_ ## s ## _uniranges[]; #include "ttfautohint-scripts.h" #undef SCRIPT #define SCRIPT(s, S, d, h, H, ss) \ extern const TA_Script_UniRangeRec ta_ ## s ## _nonbase_uniranges[]; #include "ttfautohint-scripts.h" #endif /* TARANGES_H_ */ /* end of taranges.h */ ttfautohint-1.8.1/lib/tascript.c0000644000175000001440000000127613153174711016507 0ustar00wlusers00000000000000/* tascript.c */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" #undef SCRIPT #define SCRIPT(s, S, d, h, H, ss) #s, const char* script_names[] = { #include }; size_t script_names_size = sizeof (script_names) / sizeof (script_names[0]); /* end of tascript.c */ ttfautohint-1.8.1/lib/tasfnt.c0000644000175000001440000001061613153174711016153 0ustar00wlusers00000000000000/* tasfnt.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" FT_Error TA_sfnt_split_into_SFNT_tables(SFNT* sfnt, FONT* font) { FT_Error error; FT_ULong i; /* basic check whether font is a TTF or TTC */ if (!FT_IS_SFNT(sfnt->face)) return TA_Err_Invalid_Font_Type; error = FT_Sfnt_Table_Info(sfnt->face, 0, NULL, &sfnt->num_table_infos); if (error) return error; sfnt->table_infos = (SFNT_Table_Info*)malloc(sfnt->num_table_infos * sizeof (SFNT_Table_Info)); if (!sfnt->table_infos) return FT_Err_Out_Of_Memory; /* collect SFNT tables and trace some of them */ sfnt->glyf_idx = MISSING; sfnt->loca_idx = MISSING; sfnt->head_idx = MISSING; sfnt->hmtx_idx = MISSING; sfnt->maxp_idx = MISSING; sfnt->name_idx = MISSING; sfnt->post_idx = MISSING; sfnt->OS2_idx = MISSING; sfnt->GPOS_idx = MISSING; for (i = 0; i < sfnt->num_table_infos; i++) { SFNT_Table_Info* table_info = &sfnt->table_infos[i]; FT_ULong tag; FT_ULong len; FT_Byte* buf; FT_ULong buf_len; FT_ULong j; *table_info = MISSING; error = FT_Sfnt_Table_Info(sfnt->face, (FT_UInt)i, &tag, &len); if (error) { if (error == FT_Err_Table_Missing) continue; else return error; } /* ignore zero-length tables */ else if (!len) continue; /* ignore tables which we are going to create by ourselves, */ /* or which would become invalid otherwise */ else if (tag == TTAG_cvt || tag == TTAG_fpgm || tag == TTAG_gasp || tag == TTAG_hdmx || tag == TTAG_LTSH || tag == TTAG_prep || tag == TTAG_TTFA || tag == TTAG_VDMX) continue; else if (tag == TTAG_DSIG) { font->have_DSIG = 1; continue; } /* make the allocated buffer length a multiple of 4 */ buf_len = (len + 3) & ~3U; buf = (FT_Byte*)malloc(buf_len); if (!buf) return FT_Err_Out_Of_Memory; /* pad end of buffer with zeros */ buf[buf_len - 1] = 0x00; buf[buf_len - 2] = 0x00; buf[buf_len - 3] = 0x00; /* load table */ error = FT_Load_Sfnt_Table(sfnt->face, tag, 0, buf, &len); if (error) goto Err; /* check whether we already have this table */ for (j = 0; j < font->num_tables; j++) { SFNT_Table* table = &font->tables[j]; if (table->tag == tag && table->len == len && !memcmp(table->buf, buf, len)) break; } if (tag == TTAG_head) sfnt->head_idx = j; else if (tag == TTAG_glyf) sfnt->glyf_idx = j; else if (tag == TTAG_hmtx) sfnt->hmtx_idx = j; else if (tag == TTAG_loca) sfnt->loca_idx = j; else if (tag == TTAG_maxp) { sfnt->maxp_idx = j; sfnt->max_components = (FT_UShort)(buf[MAXP_MAX_COMPONENTS_OFFSET] << 8 | buf[MAXP_MAX_COMPONENTS_OFFSET + 1]); } else if (tag == TTAG_name) sfnt->name_idx = j; else if (tag == TTAG_post) sfnt->post_idx = j; else if (tag == TTAG_OS2) sfnt->OS2_idx = j; else if (tag == TTAG_GPOS) sfnt->GPOS_idx = j; if (j == font->num_tables) { /* add element to table array if it is missing or different; */ /* in case of success, `buf' gets linked and is eventually */ /* freed in `TA_font_unload' */ error = TA_font_add_table(font, table_info, tag, len, buf); if (error) goto Err; } else { /* reuse existing SFNT table */ free(buf); *table_info = j; } continue; Err: free(buf); return error; } /* no (non-empty) `glyf', `loca', `head', or `maxp' table; */ /* this can't be a valid TTF with outlines */ if (sfnt->glyf_idx == MISSING || sfnt->loca_idx == MISSING || sfnt->head_idx == MISSING || sfnt->maxp_idx == MISSING) return TA_Err_Invalid_Font_Type; return TA_Err_Ok; } /* end of tasfnt.c */ ttfautohint-1.8.1/lib/tashaper.c0000644000175000001440000003607513153174711016472 0ustar00wlusers00000000000000/* tashaper.c */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `hbshim.c' (2014-Jan-11) from FreeType */ /* heavily modified 2014 by Werner Lemberg */ #include "tashaper.h" /* * We use `sets' (in the HarfBuzz sense, which comes quite near to the * usual mathematical meaning) to manage both lookups and glyph indices. * * 1. For each coverage, collect lookup IDs in a set. Note that an * auto-hinter `coverage' is represented by one `feature', and a * feature consists of an arbitrary number of (font specific) `lookup's * that actually do the mapping job. Please check the OpenType * specification for more details on features and lookups. * * 2. Create glyph ID sets from the corresponding lookup sets. * * 3. The glyph set corresponding to TA_COVERAGE_DEFAULT is computed * with all lookups specific to the OpenType script activated. It * relies on the order of ta_style_classes entries so that * special coverages (like `oldstyle figures') don't get overwritten. */ /* load coverage tags */ #undef COVERAGE #define COVERAGE(name, NAME, description, \ tag, tag1, tag2, tag3, tag4) \ static const hb_tag_t name ## _coverage[] = \ { \ HB_TAG(tag1, tag2, tag3, tag4), \ HB_TAG_NONE \ }; #include "ttfautohint-coverages.h" /* define mapping between coverage tags and TA_Coverage */ #undef COVERAGE #define COVERAGE(name, NAME, description, \ tag, tag1, tag2, tag3, tag4) \ name ## _coverage, static const hb_tag_t* coverages[] = { #include "ttfautohint-coverages.h" NULL /* TA_COVERAGE_DEFAULT */ }; /* load HarfBuzz script tags */ #undef SCRIPT #define SCRIPT(s, S, d, h, H, ss) h, static const hb_script_t scripts[] = { #include "ttfautohint-scripts.h" }; FT_Error ta_shaper_get_coverage(TA_FaceGlobals globals, TA_StyleClass style_class, FT_UShort* gstyles, FT_UInt* sample_glyph, FT_Bool default_script) { hb_face_t* face; hb_set_t* gsub_lookups; /* GSUB lookups for a given script */ hb_set_t* gsub_glyphs; /* glyphs covered by GSUB lookups */ hb_set_t* gpos_lookups; /* GPOS lookups for a given script */ hb_set_t* gpos_glyphs; /* glyphs covered by GPOS lookups */ hb_script_t script; const hb_tag_t* coverage_tags; hb_tag_t script_tags[] = { HB_TAG_NONE, HB_TAG_NONE, HB_TAG_NONE, HB_TAG_NONE }; hb_codepoint_t idx; #ifdef TA_DEBUG int count; #endif if (!globals || !style_class || !gstyles) return FT_Err_Invalid_Argument; face = hb_font_get_face(globals->hb_font); gsub_lookups = hb_set_create(); gsub_glyphs = hb_set_create(); gpos_lookups = hb_set_create(); gpos_glyphs = hb_set_create(); coverage_tags = coverages[style_class->coverage]; script = scripts[style_class->script]; /* convert a HarfBuzz script tag into the corresponding OpenType */ /* tag or tags -- some Indic scripts like Devanagari have an old */ /* and a new set of features */ hb_ot_tags_from_script(script, &script_tags[0], &script_tags[1]); /* `hb_ot_tags_from_script' usually returns HB_OT_TAG_DEFAULT_SCRIPT */ /* as the second tag; we change that to HB_TAG_NONE except for the */ /* default script */ if (default_script) { if (script_tags[0] == HB_TAG_NONE) script_tags[0] = HB_OT_TAG_DEFAULT_SCRIPT; else { if (script_tags[1] == HB_TAG_NONE) script_tags[1] = HB_OT_TAG_DEFAULT_SCRIPT; else if (script_tags[1] != HB_OT_TAG_DEFAULT_SCRIPT) script_tags[2] = HB_OT_TAG_DEFAULT_SCRIPT; } } else { /* we use non-standard tags like `khms' for special purposes; */ /* HarfBuzz maps them to `DFLT', which we don't want to handle here */ if (script_tags[0] == HB_OT_TAG_DEFAULT_SCRIPT) goto Exit; if (script_tags[1] == HB_OT_TAG_DEFAULT_SCRIPT) script_tags[1] = HB_TAG_NONE; } hb_ot_layout_collect_lookups(face, HB_OT_TAG_GSUB, script_tags, NULL, coverage_tags, gsub_lookups); if (hb_set_is_empty(gsub_lookups)) goto Exit; /* nothing to do */ hb_ot_layout_collect_lookups(face, HB_OT_TAG_GPOS, script_tags, NULL, coverage_tags, gpos_lookups); TA_LOG_GLOBAL(("GSUB lookups (style `%s'):\n" " ", ta_style_names[style_class->style])); #ifdef TA_DEBUG count = 0; #endif for (idx = HB_SET_VALUE_INVALID; hb_set_next(gsub_lookups, &idx);) { #ifdef TA_DEBUG TA_LOG_GLOBAL((" %d", idx)); count++; #endif /* get output coverage of GSUB feature */ hb_ot_layout_lookup_collect_glyphs(face, HB_OT_TAG_GSUB, idx, NULL, NULL, NULL, gsub_glyphs); } #ifdef TA_DEBUG if (!count) TA_LOG_GLOBAL((" (none)")); TA_LOG_GLOBAL(("\n\n")); #endif TA_LOG_GLOBAL(("GPOS lookups (style `%s'):\n" " ", ta_style_names[style_class->style])); #ifdef TA_DEBUG count = 0; #endif for (idx = HB_SET_VALUE_INVALID; hb_set_next(gpos_lookups, &idx);) { #ifdef TA_DEBUG TA_LOG_GLOBAL((" %d", idx)); count++; #endif /* get input coverage of GPOS feature */ hb_ot_layout_lookup_collect_glyphs(face, HB_OT_TAG_GPOS, idx, NULL, gpos_glyphs, NULL, NULL); } #ifdef TA_DEBUG if (!count) TA_LOG_GLOBAL((" (none)")); TA_LOG_GLOBAL(("\n\n")); #endif /* * we now check whether we can construct blue zones, using glyphs * covered by the feature only -- in case there is not a single zone * (this is, not a single character is covered), we skip this coverage */ if (style_class->coverage != TA_COVERAGE_DEFAULT) { TA_Blue_Stringset bss = style_class->blue_stringset; const TA_Blue_StringRec* bs = &ta_blue_stringsets[bss]; FT_Bool found = 0; for (; bs->string != TA_BLUE_STRING_MAX; bs++) { const char* p = &ta_blue_strings[bs->string]; while (*p) { hb_codepoint_t ch; GET_UTF8_CHAR(ch, p); for (idx = HB_SET_VALUE_INVALID; hb_set_next(gsub_lookups, &idx);) { hb_codepoint_t gidx = FT_Get_Char_Index(globals->face, ch); if (hb_ot_layout_lookup_would_substitute(face, idx, &gidx, 1, 1)) { found = 1; break; } } } } if (!found) { TA_LOG_GLOBAL((" no blue characters found; style skipped\n")); goto Exit; } } /* * Various OpenType features might use the same glyphs at different * vertical positions; for example, superscript and subscript glyphs * could be the same. However, the auto-hinter is completely * agnostic of OpenType features after the feature analysis has been * completed: The engine then simply receives a glyph index and returns a * hinted and usually rendered glyph. * * Consider the superscript feature of font `pala.ttf': Some of the * glyphs are `real', this is, they have a zero vertical offset, but * most of them are small caps glyphs shifted up to the superscript * position (this is, the `sups' feature is present in both the GSUB and * GPOS tables). The code for blue zones computation actually uses a * feature's y offset so that the `real' glyphs get correct hints. But * later on it is impossible to decide whether a glyph index belongs to, * say, the small caps or superscript feature. * * For this reason, we don't assign a style to a glyph if the current * feature covers the glyph in both the GSUB and the GPOS tables. This * is quite a broad condition, assuming that * * (a) glyphs that get used in multiple features are present in a * feature without vertical shift, * * and * * (b) a feature's GPOS data really moves the glyph vertically. * * Not fulfilling condition (a) makes a font larger; it would also * reduce the number of glyphs that could be addressed directly without * using OpenType features, so this assumption is rather strong. * * Condition (b) is much weaker, and there might be glyphs which get * missed. However, the OpenType features we are going to handle are * primarily located in GSUB, and HarfBuzz doesn't provide an API to * directly get the necessary information from the GPOS table. A * possible solution might be to directly parse the GPOS table to find * out whether a glyph gets shifted vertically, but this is something I * would like to avoid if not really necessary. * * Note that we don't follow this logic for the default coverage. * Complex scripts like Devanagari have mandatory GPOS features to * position many glyph elements, using mark-to-base or mark-to-ligature * tables; the number of glyphs missed due to condition (b) would be far * too large. */ if (style_class->coverage != TA_COVERAGE_DEFAULT) hb_set_subtract(gsub_glyphs, gpos_glyphs); #ifdef TA_DEBUG TA_LOG_GLOBAL((" glyphs without GPOS data (`*' means already assigned)")); count = 0; #endif for (idx = HB_SET_VALUE_INVALID; hb_set_next(gsub_glyphs, &idx);) { #ifdef TA_DEBUG if (!(count % 10)) TA_LOG_GLOBAL(("\n" " ")); TA_LOG_GLOBAL((" %d", idx)); count++; #endif /* glyph indices returned by `hb_ot_layout_lookup_collect_glyphs' */ /* can be arbitrary: some fonts use fake indices for processing */ /* internal to GSUB or GPOS, which is fully valid */ if (idx >= (hb_codepoint_t)globals->glyph_count) continue; if (gstyles[idx] == TA_STYLE_UNASSIGNED) { gstyles[idx] = (FT_UShort)style_class->style; if (!*sample_glyph) *sample_glyph = idx; } #ifdef TA_DEBUG else TA_LOG_GLOBAL(("*")); #endif } #ifdef TA_DEBUG if (!count) TA_LOG_GLOBAL(("\n" " (none)")); TA_LOG_GLOBAL(("\n\n")); #endif Exit: hb_set_destroy(gsub_lookups); hb_set_destroy(gsub_glyphs); hb_set_destroy(gpos_lookups); hb_set_destroy(gpos_glyphs); return FT_Err_Ok; } /* construct HarfBuzz features */ #undef COVERAGE #define COVERAGE(name, NAME, description, \ tag, tag1, tag2, tag3, tag4) \ static const hb_feature_t name ## _feature[] = \ { \ { \ HB_TAG(tag1, tag2, tag3, tag4), \ 1, 0, (unsigned int)-1 \ } \ }; #include "ttfautohint-coverages.h" /* define mapping between HarfBuzz features and TA_Coverage */ #undef COVERAGE #define COVERAGE(name, NAME, description, \ tag, tag1, tag2, tag3, tag4) \ name ## _feature, static const hb_feature_t* features[] = { #include "ttfautohint-coverages.h" NULL /* TA_COVERAGE_DEFAULT */ }; void* ta_shaper_buf_create(FT_Face face) { FT_UNUSED(face); return (void*)hb_buffer_create(); } void ta_shaper_buf_destroy(FT_Face face, void* buf) { FT_UNUSED(face); hb_buffer_destroy((hb_buffer_t*)buf); } const char* ta_shaper_get_cluster(const char* p, TA_StyleMetrics metrics, void* buf_, unsigned int* count) { TA_StyleClass style_class; const hb_feature_t* feature; FT_Int upem; const char* q; int len; hb_buffer_t* buf = (hb_buffer_t*)buf_; hb_font_t* font; hb_codepoint_t dummy; upem = (FT_Int)metrics->globals->face->units_per_EM; style_class = metrics->style_class; feature = features[style_class->coverage]; font = metrics->globals->hb_font; /* we shape at a size of units per EM; this means font units */ hb_font_set_scale(font, upem, upem); while (*p == ' ') p++; /* count bytes up to next space (or end of buffer) */ q = p; while (!(*q == ' ' || *q == '\0')) GET_UTF8_CHAR(dummy, q); len = (int)(q - p); /* feed character(s) to the HarfBuzz buffer */ hb_buffer_clear_contents(buf); hb_buffer_add_utf8(buf, p, len, 0, len); /* we let HarfBuzz guess the script and writing direction */ hb_buffer_guess_segment_properties(buf); /* shape buffer, which means conversion from character codes to */ /* glyph indices, possibly applying a feature */ hb_shape(font, buf, feature, feature ? 1 : 0); if (feature) { hb_buffer_t* hb_buf = metrics->globals->hb_buf; unsigned int gcount; hb_glyph_info_t* ginfo; unsigned int hb_gcount; hb_glyph_info_t* hb_ginfo; /* we have to check whether applying a feature does actually change */ /* glyph indices; otherwise the affected glyph or glyphs aren't */ /* available at all in the feature */ hb_buffer_clear_contents(hb_buf); hb_buffer_add_utf8(hb_buf, p, len, 0, len); hb_buffer_guess_segment_properties(hb_buf); hb_shape(font, hb_buf, NULL, 0); ginfo = hb_buffer_get_glyph_infos(buf, &gcount); hb_ginfo = hb_buffer_get_glyph_infos(hb_buf, &hb_gcount); if (gcount == hb_gcount) { unsigned int i; for (i = 0; i < gcount; i++) if (ginfo[i].codepoint != hb_ginfo[i].codepoint) break; if (i == gcount) { /* both buffers have identical glyph indices */ hb_buffer_clear_contents(buf); } } } *count = hb_buffer_get_length(buf); #ifdef TA_DEBUG if (feature && *count > 1) TA_LOG(("ta_shaper_get_cluster:" " input character mapped to multiple glyphs\n")); #endif return q; } FT_ULong ta_shaper_get_elem(TA_StyleMetrics metrics, void* buf_, unsigned int idx, FT_Long* advance, FT_Long* y_offset) { hb_buffer_t* buf = (hb_buffer_t*)buf_; hb_glyph_info_t* ginfo; hb_glyph_position_t* gpos; unsigned int gcount; FT_UNUSED(metrics); ginfo = hb_buffer_get_glyph_infos(buf, &gcount); gpos = hb_buffer_get_glyph_positions(buf, &gcount); if (idx >= gcount) return 0; if (advance) *advance = gpos[idx].x_advance; if (y_offset) *y_offset = gpos[idx].y_offset; return ginfo[idx].codepoint; } /* end of tashaper.c */ ttfautohint-1.8.1/lib/tashaper.h0000644000175000001440000000314013153174711016462 0ustar00wlusers00000000000000/* tashaper.h */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `hbshim.h' (2014-Jan-11) from FreeType */ /* heavily modified 2014 by Werner Lemberg */ #ifndef TASHAPER_H_ #define TASHAPER_H_ #include #include FT_FREETYPE_H #include #include #include #include "ta.h" /* in file `tafeature.c' */ extern const hb_tag_t feature_tags[]; extern size_t feature_tags_size; FT_Error ta_shaper_get_coverage(TA_FaceGlobals globals, TA_StyleClass style_class, FT_UShort* gstyles, FT_UInt* sample_glyph, FT_Bool default_script); void* ta_shaper_buf_create(FT_Face face); void ta_shaper_buf_destroy(FT_Face face, void* buf); const char* ta_shaper_get_cluster(const char* p, TA_StyleMetrics metrics, void* buf_, unsigned int* count); FT_ULong ta_shaper_get_elem(TA_StyleMetrics metrics, void* buf_, unsigned int idx, FT_Long* x_advance, FT_Long* y_offset); #endif /* TASHAPER_H_ */ /* end of tashaper.h */ ttfautohint-1.8.1/lib/tasort.c0000644000175000001440000000471313153174711016171 0ustar00wlusers00000000000000/* tasort.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afangles.c' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #include "tatypes.h" #include "tasort.h" /* two bubble sort routines */ void ta_sort_pos(FT_UInt count, FT_Pos* table) { FT_UInt i, j; FT_Pos swap; for (i = 1; i < count; i++) { for (j = i; j > 0; j--) { if (table[j] >= table[j - 1]) break; swap = table[j]; table[j] = table[j - 1]; table[j - 1] = swap; } } } void ta_sort_and_quantize_widths(FT_UInt* count, TA_Width table, FT_Pos threshold) { FT_UInt i; FT_UInt j; FT_UInt cur_idx; FT_Pos cur_val; FT_Pos sum; TA_WidthRec swap; if (*count == 1) return; /* sort */ for (i = 1; i < *count; i++) { for (j = i; j > 0; j--) { if (table[j].org >= table[j - 1].org) break; swap = table[j]; table[j] = table[j - 1]; table[j - 1] = swap; } } cur_idx = 0; cur_val = table[cur_idx].org; /* compute and use mean values for clusters not larger than `threshold'; */ /* this is very primitive and might not yield the best result, */ /* but normally, using reference character `o', `*count' is 2, */ /* so the code below is fully sufficient */ for (i = 1; i < *count; i++) { if (table[i].org - cur_val > threshold || i == *count - 1) { sum = 0; /* fix loop for end of array */ if (table[i].org - cur_val <= threshold && i == *count - 1) i++; for (j = cur_idx; j < i; j++) { sum += table[j].org; table[j].org = 0; } table[cur_idx].org = sum / (FT_Pos)j; if (i < *count - 1) { cur_idx = i + 1; cur_val = table[cur_idx].org; } } } cur_idx = 1; /* compress array to remove zero values */ for (i = 1; i < *count; i++) { if (table[i].org) table[cur_idx++] = table[i]; } *count = cur_idx; } /* end of tasort.c */ ttfautohint-1.8.1/lib/tasort.h0000644000175000001440000000170713153174711016176 0ustar00wlusers00000000000000/* tasort.h */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally part of file `aftypes.h' (2011-Mar-28) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #ifndef TASORT_H_ #define TASORT_H_ #include "tatypes.h" #ifdef __cplusplus extern "C" { #endif void ta_sort_pos(FT_UInt count, FT_Pos* table); void ta_sort_and_quantize_widths(FT_UInt* count, TA_Width widths, FT_Pos threshold); #ifdef __cplusplus } #endif #endif /* TASORT_H_ */ /* end of tasort.h */ ttfautohint-1.8.1/lib/tastyles.h0000644000175000001440000002673613153174711016543 0ustar00wlusers00000000000000/* tastyles.h */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afstyles.h' (2014-Jan-11) from FreeType */ /* heavily modified 2014 by Werner Lemberg */ /* The following part can be included multiple times. */ /* Define `STYLE' as needed. */ /* * Add new styles here. The first and second arguments are the * style name in lowercase and uppercase, respectively, followed * by a description string. The next arguments are the * corresponding writing system, script, blue stringset, and * coverage. * * Note that styles using `TA_COVERAGE_DEFAULT' should always * come after styles with other coverages. Also note that * fallback scripts only use `TA_COVERAGE_DEFAULT' for its * style. * * Example: * * STYLE(cyrl_dflt, CYRL_DFLT, * "Cyrillic default style", * TA_WRITING_SYSTEM_LATIN, * TA_SCRIPT_CYRL, * TA_BLUE_STRINGSET_CYRL, * TA_COVERAGE_DEFAULT) */ #undef STYLE_LATIN #define STYLE_LATIN(s, S, f, F, ds, df, C) \ STYLE(s ## _ ## f, S ## _ ## F, \ ds " " df " style", \ TA_WRITING_SYSTEM_LATIN, \ TA_SCRIPT_ ## S, \ TA_BLUE_STRINGSET_ ## S, \ TA_COVERAGE_ ## C) #undef META_STYLE_LATIN #define META_STYLE_LATIN(s, S, ds) \ STYLE_LATIN(s, S, c2cp, C2CP, ds, \ "petite capitals from capitals", \ PETITE_CAPITALS_FROM_CAPITALS) \ STYLE_LATIN(s, S, c2sc, C2SC, ds, \ "small capitals from capitals", \ SMALL_CAPITALS_FROM_CAPITALS) \ STYLE_LATIN(s, S, ordn, ORDN, ds, \ "ordinals", \ ORDINALS) \ STYLE_LATIN(s, S, pcap, PCAP, ds, \ "petite capitals", \ PETITE_CAPITALS) \ STYLE_LATIN(s, S, sinf, SINF, ds, \ "scientific inferiors", \ SCIENTIFIC_INFERIORS) \ STYLE_LATIN(s, S, smcp, SMCP, ds, \ "small capitals", \ SMALL_CAPITALS) \ STYLE_LATIN(s, S, subs, SUBS, ds, \ "subscript", \ SUBSCRIPT) \ STYLE_LATIN(s, S, sups, SUPS, ds, \ "superscript", \ SUPERSCRIPT) \ STYLE_LATIN(s, S, titl, TITL, ds, \ "titling", \ TITLING) \ STYLE_LATIN(s, S, dflt, DFLT, ds, \ "default", \ DEFAULT) STYLE(adlm_dflt, ADLM_DFLT, "Adlam default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_ADLM, TA_BLUE_STRINGSET_ADLM, TA_COVERAGE_DEFAULT) STYLE(arab_dflt, ARAB_DFLT, "Arabic default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_ARAB, TA_BLUE_STRINGSET_ARAB, TA_COVERAGE_DEFAULT) STYLE(armn_dflt, ARMN_DFLT, "Armenian default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_ARMN, TA_BLUE_STRINGSET_ARMN, TA_COVERAGE_DEFAULT) STYLE(avst_dflt, AVST_DFLT, "Avestan default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_AVST, TA_BLUE_STRINGSET_AVST, TA_COVERAGE_DEFAULT) STYLE(bamu_dflt, BAMU_DFLT, "Bamum default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_BAMU, TA_BLUE_STRINGSET_BAMU, TA_COVERAGE_DEFAULT) STYLE(beng_dflt, BENG_DFLT, "Bengali default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_BENG, TA_BLUE_STRINGSET_BENG, TA_COVERAGE_DEFAULT) STYLE(buhd_dflt, BUHD_DFLT, "Buhid default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_BUHD, TA_BLUE_STRINGSET_BUHD, TA_COVERAGE_DEFAULT) STYLE(cakm_dflt, CAKM_DFLT, "Chakma default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_CAKM, TA_BLUE_STRINGSET_CAKM, TA_COVERAGE_DEFAULT) STYLE(cans_dflt, CANS_DFLT, "Canadian Syllabics default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_CANS, TA_BLUE_STRINGSET_CANS, TA_COVERAGE_DEFAULT) STYLE(cari_dflt, CARI_DFLT, "Carian default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_CARI, TA_BLUE_STRINGSET_CARI, TA_COVERAGE_DEFAULT) STYLE(cher_dflt, CHER_DFLT, "Cherokee default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_CHER, TA_BLUE_STRINGSET_CHER, TA_COVERAGE_DEFAULT) STYLE(copt_dflt, COPT_DFLT, "Coptic default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_COPT, TA_BLUE_STRINGSET_COPT, TA_COVERAGE_DEFAULT) STYLE(cprt_dflt, CPRT_DFLT, "Cypriot default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_CPRT, TA_BLUE_STRINGSET_CPRT, TA_COVERAGE_DEFAULT) META_STYLE_LATIN(cyrl, CYRL, "Cyrillic") STYLE(deva_dflt, DEVA_DFLT, "Devanagari default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_DEVA, TA_BLUE_STRINGSET_DEVA, TA_COVERAGE_DEFAULT) STYLE(dsrt_dflt, DSRT_DFLT, "Deseret default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_DSRT, TA_BLUE_STRINGSET_DSRT, TA_COVERAGE_DEFAULT) STYLE(ethi_dflt, ETHI_DFLT, "Ethiopic default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_ETHI, TA_BLUE_STRINGSET_ETHI, TA_COVERAGE_DEFAULT) STYLE(geor_dflt, GEOR_DFLT, "Georgian (Mkhedruli) default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_GEOR, TA_BLUE_STRINGSET_GEOR, TA_COVERAGE_DEFAULT) STYLE(geok_dflt, GEOK_DFLT, "Georgian (Khutsuri) default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_GEOK, TA_BLUE_STRINGSET_GEOK, TA_COVERAGE_DEFAULT) STYLE(glag_dflt, GLAG_DFLT, "Glagolitic default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_GLAG, TA_BLUE_STRINGSET_GLAG, TA_COVERAGE_DEFAULT) STYLE(goth_dflt, GOTH_DFLT, "Gothic default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_GOTH, TA_BLUE_STRINGSET_GOTH, TA_COVERAGE_DEFAULT) META_STYLE_LATIN(grek, GREK, "Greek") STYLE(gujr_dflt, GUJR_DFLT, "Gujarati default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_GUJR, TA_BLUE_STRINGSET_GUJR, TA_COVERAGE_DEFAULT) STYLE(guru_dflt, GURU_DFLT, "Gurmukhi default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_GURU, TA_BLUE_STRINGSET_GURU, TA_COVERAGE_DEFAULT) STYLE(hebr_dflt, HEBR_DFLT, "Hebrew default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_HEBR, TA_BLUE_STRINGSET_HEBR, TA_COVERAGE_DEFAULT) STYLE(kali_dflt, KALI_DFLT, "Kayah Li default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_KALI, TA_BLUE_STRINGSET_KALI, TA_COVERAGE_DEFAULT) STYLE(khmr_dflt, KHMR_DFLT, "Khmer default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_KHMR, TA_BLUE_STRINGSET_KHMR, TA_COVERAGE_DEFAULT) STYLE(khms_dflt, KHMS_DFLT, "Khmer Symbols default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_KHMS, TA_BLUE_STRINGSET_KHMS, TA_COVERAGE_DEFAULT) STYLE(knda_dflt, KNDA_DFLT, "Kannada default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_KNDA, TA_BLUE_STRINGSET_KNDA, TA_COVERAGE_DEFAULT) STYLE(lao_dflt, LAO_DFLT, "Lao default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_LAO, TA_BLUE_STRINGSET_LAO, TA_COVERAGE_DEFAULT) META_STYLE_LATIN(latn, LATN, "Latin") STYLE(latb_dflt, LATB_DFLT, "Latin subscript fallback default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_LATB, TA_BLUE_STRINGSET_LATB, TA_COVERAGE_DEFAULT) STYLE(latp_dflt, LATP_DFLT, "Latin superscript fallback default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_LATP, TA_BLUE_STRINGSET_LATP, TA_COVERAGE_DEFAULT) #ifdef FT_OPTION_AUTOFIT2 STYLE(ltn2_dflt, LTN2_DFLT, "Latin 2 default style", TA_WRITING_SYSTEM_LATIN2, TA_SCRIPT_LATN, TA_BLUE_STRINGSET_LATN, TA_COVERAGE_DEFAULT) #endif STYLE(lisu_dflt, LISU_DFLT, "Lisu default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_LISU, TA_BLUE_STRINGSET_LISU, TA_COVERAGE_DEFAULT) STYLE(mlym_dflt, MLYM_DFLT, "Malayalam default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_MLYM, TA_BLUE_STRINGSET_MLYM, TA_COVERAGE_DEFAULT) STYLE(mymr_dflt, MYMR_DFLT, "Myanmar default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_MYMR, TA_BLUE_STRINGSET_MYMR, TA_COVERAGE_DEFAULT) STYLE(nkoo_dflt, NKOO_DFLT, "N'Ko default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_NKOO, TA_BLUE_STRINGSET_NKOO, TA_COVERAGE_DEFAULT) STYLE(olck_dflt, OLCK_DFLT, "Ol Chiki default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_OLCK, TA_BLUE_STRINGSET_OLCK, TA_COVERAGE_DEFAULT) STYLE(orkh_dflt, ORKH_DFLT, "Old Turkic default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_ORKH, TA_BLUE_STRINGSET_ORKH, TA_COVERAGE_DEFAULT) STYLE(osge_dflt, OSGE_DFLT, "Osage default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_OSGE, TA_BLUE_STRINGSET_OSGE, TA_COVERAGE_DEFAULT) STYLE(osma_dflt, OSMA_DFLT, "Osmanya default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_OSMA, TA_BLUE_STRINGSET_OSMA, TA_COVERAGE_DEFAULT) STYLE(saur_dflt, SAUR_DFLT, "Saurashtra default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_SAUR, TA_BLUE_STRINGSET_SAUR, TA_COVERAGE_DEFAULT) STYLE(shaw_dflt, SHAW_DFLT, "Shavian default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_SHAW, TA_BLUE_STRINGSET_SHAW, TA_COVERAGE_DEFAULT) STYLE(sinh_dflt, SINH_DFLT, "Sinhala default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_SINH, TA_BLUE_STRINGSET_SINH, TA_COVERAGE_DEFAULT) STYLE(sund_dflt, SUND_DFLT, "Sundanese default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_SUND, TA_BLUE_STRINGSET_SUND, TA_COVERAGE_DEFAULT) STYLE(taml_dflt, TAML_DFLT, "Tamil default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_TAML, TA_BLUE_STRINGSET_TAML, TA_COVERAGE_DEFAULT) STYLE(tavt_dflt, TAVT_DFLT, "Tai Viet default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_TAVT, TA_BLUE_STRINGSET_TAVT, TA_COVERAGE_DEFAULT) STYLE(telu_dflt, TELU_DFLT, "Telugu default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_TELU, TA_BLUE_STRINGSET_TELU, TA_COVERAGE_DEFAULT) STYLE(tfng_dflt, TFNG_DFLT, "Tifinagh default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_TFNG, TA_BLUE_STRINGSET_TFNG, TA_COVERAGE_DEFAULT) STYLE(thai_dflt, THAI_DFLT, "Thai default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_THAI, TA_BLUE_STRINGSET_THAI, TA_COVERAGE_DEFAULT) STYLE(vaii_dflt, VAII_DFLT, "Vai default style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_VAII, TA_BLUE_STRINGSET_VAII, TA_COVERAGE_DEFAULT) STYLE(none_dflt, NONE_DFLT, "no style", TA_WRITING_SYSTEM_LATIN, TA_SCRIPT_NONE, TA_BLUE_STRINGSET_NONE, TA_COVERAGE_DEFAULT) /* end of tastyles.h */ ttfautohint-1.8.1/lib/tatables.c0000644000175000001440000000724413153174711016456 0ustar00wlusers00000000000000/* tatables.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include #include "ta.h" FT_Error TA_sfnt_add_table_info(SFNT* sfnt) { SFNT_Table_Info* table_infos_new; sfnt->num_table_infos++; table_infos_new = (SFNT_Table_Info*)realloc(sfnt->table_infos, sfnt->num_table_infos * sizeof (SFNT_Table_Info)); if (!table_infos_new) { sfnt->num_table_infos--; return FT_Err_Out_Of_Memory; } else sfnt->table_infos = table_infos_new; sfnt->table_infos[sfnt->num_table_infos - 1] = MISSING; return TA_Err_Ok; } FT_ULong TA_table_compute_checksum(FT_Byte* buf, FT_ULong len) { FT_Byte* end_buf = buf + len; FT_ULong checksum = 0; /* we expect that the length of `buf' is a multiple of 4 */ while (buf < end_buf) checksum += NEXT_ULONG(buf); return checksum; } FT_Error TA_font_add_table(FONT* font, SFNT_Table_Info* table_info, FT_ULong tag, FT_ULong len, FT_Byte* buf) { SFNT_Table* tables_new; SFNT_Table* table_last; font->num_tables++; tables_new = (SFNT_Table*)realloc(font->tables, font->num_tables * sizeof (SFNT_Table)); if (!tables_new) { font->num_tables--; return FT_Err_Out_Of_Memory; } else font->tables = tables_new; table_last = &font->tables[font->num_tables - 1]; table_last->tag = tag; table_last->len = len; table_last->buf = buf; table_last->checksum = TA_table_compute_checksum(buf, len); table_last->offset = 0; /* set in `TA_font_compute_table_offsets' */ table_last->data = NULL; table_last->processed = 0; /* link table and table info */ *table_info = font->num_tables - 1; return TA_Err_Ok; } void TA_sfnt_sort_table_info(SFNT* sfnt, FONT* font) { /* Looking into an arbitrary TTF (with a `DSIG' table), tags */ /* starting with an uppercase letter are sorted before lowercase */ /* letters. In other words, the alphabetical ordering (as */ /* mandated by signing a font) is a simple numeric comparison of */ /* the 32bit tag values. */ SFNT_Table* tables = font->tables; SFNT_Table_Info* table_infos = sfnt->table_infos; FT_ULong num_table_infos = sfnt->num_table_infos; FT_ULong i; FT_ULong j; /* bubble sort */ for (i = 1; i < num_table_infos; i++) { for (j = i; j > 0; j--) { SFNT_Table_Info swap; FT_ULong tag1; FT_ULong tag2; tag1 = (table_infos[j] == MISSING) ? 0 : tables[table_infos[j]].tag; tag2 = (table_infos[j - 1] == MISSING) ? 0 : tables[table_infos[j - 1]].tag; if (tag1 > tag2) break; swap = table_infos[j]; table_infos[j] = table_infos[j - 1]; table_infos[j - 1] = swap; } } } void TA_font_compute_table_offsets(FONT* font, FT_ULong start) { FT_ULong i; FT_ULong offset = start; for (i = 0; i < font->num_tables; i++) { SFNT_Table* table = &font->tables[i]; table->offset = offset; /* table offsets must be multiples of 4; */ /* this also fits the actual buffer lengths */ offset += (table->len + 3) & ~3U; } } /* end of tatables.c */ ttfautohint-1.8.1/lib/tatables.h0000644000175000001440000000205013153174711016451 0ustar00wlusers00000000000000/* tatables.h */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #ifndef TATABLES_H_ #define TATABLES_H_ #include "ta.h" FT_Error TA_sfnt_add_table_info(SFNT* sfnt); FT_ULong TA_table_compute_checksum(FT_Byte* buf, FT_ULong len); FT_Error TA_font_add_table(FONT* font, SFNT_Table_Info* table_info, FT_ULong tag, FT_ULong len, FT_Byte* buf); void TA_sfnt_sort_table_info(SFNT* sfnt, FONT* font); void TA_font_compute_table_offsets(FONT* font, FT_ULong start); #endif /* TATABLES_H_ */ /* end of tatables.h */ ttfautohint-1.8.1/lib/tatime.c0000644000175000001440000000222413153174711016133 0ustar00wlusers00000000000000/* tatime.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include #include "ta.h" void TA_get_current_time(FONT* font, FT_ULong* high, FT_ULong* low) { /* there have been 24107 days between January 1st, 1904 (the epoch of */ /* OpenType), and January 1st, 1970 (the epoch of the `time' function) */ const unsigned long long seconds_to_1970 = 24107 * 24 * 60 * 60; unsigned long long seconds_to_today = seconds_to_1970; if (font->epoch != ULLONG_MAX) // we don't take care of potential overflow seconds_to_today += font->epoch; else seconds_to_today += (unsigned long long)time(NULL); *high = (FT_ULong)(seconds_to_today >> 32); *low = (FT_ULong)seconds_to_today; } /* end of tatime.c */ ttfautohint-1.8.1/lib/tattc.c0000644000175000001440000001370113214330454015765 0ustar00wlusers00000000000000/* tattc.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" static FT_Error TA_font_build_TTC_header(FONT* font, FT_Byte** header_buf, FT_ULong* header_len) { SFNT* sfnts = font->sfnts; FT_Long num_sfnts = font->num_sfnts; SFNT_Table* tables = font->tables; FT_ULong num_tables = font->num_tables; FT_ULong TTF_offset; FT_ULong DSIG_offset; FT_Byte* buf; FT_ULong len; FT_Long i; FT_Byte* p; len = (FT_ULong)((font->have_DSIG ? 24 : 12) + 4 * num_sfnts); buf = (FT_Byte*)malloc(len); if (!buf) return FT_Err_Out_Of_Memory; p = buf; /* TTC ID string */ *(p++) = 't'; *(p++) = 't'; *(p++) = 'c'; *(p++) = 'f'; /* TTC header version */ *(p++) = 0x00; *(p++) = font->have_DSIG ? 0x02 : 0x01; *(p++) = 0x00; *(p++) = 0x00; /* number of subfonts */ *(p++) = BYTE1(num_sfnts); *(p++) = BYTE2(num_sfnts); *(p++) = BYTE3(num_sfnts); *(p++) = BYTE4(num_sfnts); /* the first TTF subfont header immediately follows the TTC header */ TTF_offset = len; /* loop over all subfonts */ for (i = 0; i < num_sfnts; i++) { SFNT* sfnt = &sfnts[i]; FT_ULong l; TA_sfnt_sort_table_info(sfnt, font); /* only get header length */ (void)TA_sfnt_build_TTF_header(sfnt, font, NULL, &l, 0); *(p++) = BYTE1(TTF_offset); *(p++) = BYTE2(TTF_offset); *(p++) = BYTE3(TTF_offset); *(p++) = BYTE4(TTF_offset); TTF_offset += l; } /* the first SFNT table immediately follows the subfont TTF headers */ TA_font_compute_table_offsets(font, TTF_offset); if (font->have_DSIG) { /* DSIG tag */ *(p++) = 'D'; *(p++) = 'S'; *(p++) = 'I'; *(p++) = 'G'; /* DSIG length */ *(p++) = 0x00; *(p++) = 0x00; *(p++) = 0x00; *(p++) = 0x08; /* DSIG offset; in a TTC this is always the last SFNT table */ DSIG_offset = tables[num_tables - 1].offset; *(p++) = BYTE1(DSIG_offset); *(p++) = BYTE2(DSIG_offset); *(p++) = BYTE3(DSIG_offset); *(p++) = BYTE4(DSIG_offset); } *header_buf = buf; *header_len = len; return TA_Err_Ok; } FT_Error TA_font_build_TTC(FONT* font) { SFNT* sfnts = font->sfnts; FT_Long num_sfnts = font->num_sfnts; SFNT_Table* tables; FT_ULong num_tables; FT_Byte* TTC_header_buf; FT_ULong TTC_header_len; FT_Byte** TTF_header_bufs = NULL; FT_ULong* TTF_header_lens = NULL; FT_ULong offset; FT_Long i; FT_ULong j; FT_Error error; /* add our information table to first subfont; */ /* this is enforced by the TTC structure, */ /* which only allows `DSIG' to be not related to a subfont */ if (font->TTFA_info) { SFNT* sfnt0 = &sfnts[0]; FT_Byte* TTFA_buf; FT_ULong TTFA_len; error = TA_sfnt_add_table_info(sfnt0); if (error) return error; error = TA_table_build_TTFA(&TTFA_buf, &TTFA_len, font); if (error) return error; /* in case of success, `TTFA_buf' gets linked */ /* and is eventually freed in `TA_font_unload' */ error = TA_font_add_table(font, &sfnt0->table_infos[sfnt0->num_table_infos - 1], TTAG_TTFA, TTFA_len, TTFA_buf); if (error) { free(TTFA_buf); return error; } } /* replace an existing `DSIG' table with a dummy */ if (font->have_DSIG) { FT_Byte* DSIG_buf; SFNT_Table_Info dummy; error = TA_table_build_DSIG(&DSIG_buf); if (error) return error; /* in case of success, `DSIG_buf' gets linked */ /* and is eventually freed in `TA_font_unload' */ error = TA_font_add_table(font, &dummy, TTAG_DSIG, DSIG_LEN, DSIG_buf); if (error) { free(DSIG_buf); return error; } } /* this also computes the SFNT table offsets */ error = TA_font_build_TTC_header(font, &TTC_header_buf, &TTC_header_len); if (error) return error; TTF_header_bufs = (FT_Byte**)calloc(1, (size_t)num_sfnts * sizeof (FT_Byte*)); if (!TTF_header_bufs) goto Err; TTF_header_lens = (FT_ULong*)malloc((size_t)num_sfnts * sizeof (FT_ULong)); if (!TTF_header_lens) goto Err; for (i = 0; i < num_sfnts; i++) { error = TA_sfnt_build_TTF_header(&sfnts[i], font, &TTF_header_bufs[i], &TTF_header_lens[i], 1); if (error) goto Err; } /* build font */ tables = font->tables; num_tables = font->num_tables; /* get font length from last SFNT table array element */ font->out_len = tables[num_tables - 1].offset + ((tables[num_tables - 1].len + 3) & ~3U); /* if `out-buffer' is set, this buffer gets returned to the user, */ /* thus we use the customized allocator function */ font->out_buf = (FT_Byte*)font->allocate(font->out_len); if (!font->out_buf) { error = FT_Err_Out_Of_Memory; goto Err; } memcpy(font->out_buf, TTC_header_buf, TTC_header_len); offset = TTC_header_len; for (i = 0; i < num_sfnts; i++) { memcpy(font->out_buf + offset, TTF_header_bufs[i], TTF_header_lens[i]); offset += TTF_header_lens[i]; } for (j = 0; j < num_tables; j++) { SFNT_Table* table = &tables[j]; /* buffer length is a multiple of 4 */ memcpy(font->out_buf + table->offset, table->buf, (table->len + 3) & ~3U); } error = TA_Err_Ok; Err: free(TTC_header_buf); if (TTF_header_bufs) { for (i = 0; i < font->num_sfnts; i++) free(TTF_header_bufs[i]); free(TTF_header_bufs); } free(TTF_header_lens); return error; } /* end of tattc.c */ ttfautohint-1.8.1/lib/tattf.c0000644000175000001440000001665613214330453016003 0ustar00wlusers00000000000000/* tattf.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" /* If `do_complete' is 0, only return `header_len'. */ FT_Error TA_sfnt_build_TTF_header(SFNT* sfnt, FONT* font, FT_Byte** header_buf, FT_ULong* header_len, FT_Int do_complete) { SFNT_Table* tables = font->tables; SFNT_Table_Info* table_infos = sfnt->table_infos; FT_ULong num_table_infos = sfnt->num_table_infos; FT_Byte* buf; FT_ULong len; FT_Byte* table_record; FT_Byte* head_buf = NULL; /* pointer to `head' table */ FT_ULong head_checksum; /* checksum in `head' table */ FT_ULong num_tables_in_header; FT_ULong i; num_tables_in_header = 0; for (i = 0; i < num_table_infos; i++) { /* ignore empty tables */ if (table_infos[i] != MISSING) num_tables_in_header++; } len = 12 + 16 * num_tables_in_header; if (!do_complete) { *header_len = len; return TA_Err_Ok; } buf = (FT_Byte*)malloc(len); if (!buf) return FT_Err_Out_Of_Memory; /* SFNT version */ buf[0] = 0x00; buf[1] = 0x01; buf[2] = 0x00; buf[3] = 0x00; /* number of tables */ buf[4] = HIGH(num_tables_in_header); buf[5] = LOW(num_tables_in_header); /* auxiliary data */ { FT_ULong search_range, entry_selector, range_shift; FT_ULong j; for (i = 1, j = 2; j <= num_tables_in_header; i++, j <<= 1) ; entry_selector = i - 1; search_range = 0x10U << entry_selector; range_shift = (num_tables_in_header << 4) - search_range; buf[6] = HIGH(search_range); buf[7] = LOW(search_range); buf[8] = HIGH(entry_selector); buf[9] = LOW(entry_selector); buf[10] = HIGH(range_shift); buf[11] = LOW(range_shift); } /* location of the first table info record */ table_record = &buf[12]; head_checksum = 0; /* loop over all tables */ for (i = 0; i < num_table_infos; i++) { SFNT_Table_Info table_info = table_infos[i]; SFNT_Table* table; /* ignore empty slots */ if (table_info == MISSING) continue; table = &tables[table_info]; if (table->tag == TTAG_head) { FT_ULong date_high; FT_ULong date_low; /* we always reach this IF clause since FreeType would */ /* have aborted already if the `head' table were missing */ head_buf = table->buf; /* reset checksum in `head' table for recalculation */ head_buf[8] = 0x00; head_buf[9] = 0x00; head_buf[10] = 0x00; head_buf[11] = 0x00; /* update flags; we have to */ /* set bit 2 (`instructions may depend on point size') and to */ /* clear bit 4 (`instructions may alter advance width') */ head_buf[17] |= 0x04U; head_buf[17] &= ~0x10U; /* update modification time */ TA_get_current_time(font, &date_high, &date_low); head_buf[28] = BYTE1(date_high); head_buf[29] = BYTE2(date_high); head_buf[30] = BYTE3(date_high); head_buf[31] = BYTE4(date_high); head_buf[32] = BYTE1(date_low); head_buf[33] = BYTE2(date_low); head_buf[34] = BYTE3(date_low); head_buf[35] = BYTE4(date_low); table->checksum = TA_table_compute_checksum(table->buf, table->len); } head_checksum += table->checksum; table_record[0] = BYTE1(table->tag); table_record[1] = BYTE2(table->tag); table_record[2] = BYTE3(table->tag); table_record[3] = BYTE4(table->tag); table_record[4] = BYTE1(table->checksum); table_record[5] = BYTE2(table->checksum); table_record[6] = BYTE3(table->checksum); table_record[7] = BYTE4(table->checksum); table_record[8] = BYTE1(table->offset); table_record[9] = BYTE2(table->offset); table_record[10] = BYTE3(table->offset); table_record[11] = BYTE4(table->offset); table_record[12] = BYTE1(table->len); table_record[13] = BYTE2(table->len); table_record[14] = BYTE3(table->len); table_record[15] = BYTE4(table->len); table_record += 16; } /* the font header is complete; compute `head' checksum */ head_checksum += TA_table_compute_checksum(buf, len); head_checksum = 0xB1B0AFBAUL - head_checksum; /* store checksum in `head' table; */ head_buf[8] = BYTE1(head_checksum); head_buf[9] = BYTE2(head_checksum); head_buf[10] = BYTE3(head_checksum); head_buf[11] = BYTE4(head_checksum); *header_buf = buf; *header_len = len; return TA_Err_Ok; } FT_Error TA_font_build_TTF(FONT* font) { SFNT* sfnt = &font->sfnts[0]; SFNT_Table* tables; FT_ULong num_tables; FT_ULong SFNT_offset; FT_Byte* header_buf; FT_ULong header_len; FT_ULong i; FT_Error error; /* add our information table */ if (font->TTFA_info) { FT_Byte* TTFA_buf; FT_ULong TTFA_len; error = TA_sfnt_add_table_info(sfnt); if (error) return error; error = TA_table_build_TTFA(&TTFA_buf, &TTFA_len, font); if (error) return error; /* in case of success, `TTFA_buf' gets linked */ /* and is eventually freed in `TA_font_unload' */ error = TA_font_add_table(font, &sfnt->table_infos[sfnt->num_table_infos - 1], TTAG_TTFA, TTFA_len, TTFA_buf); if (error) { free(TTFA_buf); return error; } } /* replace an existing `DSIG' table with a dummy */ if (font->have_DSIG) { FT_Byte* DSIG_buf; error = TA_sfnt_add_table_info(sfnt); if (error) return error; error = TA_table_build_DSIG(&DSIG_buf); if (error) return error; /* in case of success, `DSIG_buf' gets linked */ /* and is eventually freed in `TA_font_unload' */ error = TA_font_add_table(font, &sfnt->table_infos[sfnt->num_table_infos - 1], TTAG_DSIG, DSIG_LEN, DSIG_buf); if (error) { free(DSIG_buf); return error; } } TA_sfnt_sort_table_info(sfnt, font); /* the first SFNT table immediately follows the header */ (void)TA_sfnt_build_TTF_header(sfnt, font, NULL, &SFNT_offset, 0); TA_font_compute_table_offsets(font, SFNT_offset); error = TA_sfnt_build_TTF_header(sfnt, font, &header_buf, &header_len, 1); if (error) return error; /* build font */ tables = font->tables; num_tables = font->num_tables; /* get font length from last SFNT table array element */ font->out_len = tables[num_tables - 1].offset + ((tables[num_tables - 1].len + 3) & ~3U); /* if `out-buffer' is set, this buffer gets returned to the user, */ /* thus we use the customized allocator function */ font->out_buf = (FT_Byte*)font->allocate(font->out_len); if (!font->out_buf) { error = FT_Err_Out_Of_Memory; goto Err; } memcpy(font->out_buf, header_buf, header_len); for (i = 0; i < num_tables; i++) { SFNT_Table* table = &tables[i]; /* buffer length is a multiple of 4 */ memcpy(font->out_buf + table->offset, table->buf, (table->len + 3) & ~3U); } error = TA_Err_Ok; Err: free(header_buf); return error; } /* end of tattf.c */ ttfautohint-1.8.1/lib/tattfa.c0000644000175000001440000000244213153174711016135 0ustar00wlusers00000000000000/* tattfa.c */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" FT_Error TA_table_build_TTFA(FT_Byte** TTFA, FT_ULong* TTFA_len, FONT* font) { FT_Byte* buf; FT_UInt buf_len; FT_UInt len; FT_Byte* buf_new; FT_Byte* p; buf = (FT_Byte*)TA_font_dump_parameters(font, 0); if (!buf) return FT_Err_Out_Of_Memory; buf_len = (FT_UInt)strlen((char*)buf); /* buffer length must be a multiple of four */ len = (buf_len + 3) & ~3U; buf_new = (FT_Byte*)realloc(buf, len); if (!buf_new) { free(buf); return FT_Err_Out_Of_Memory; } buf = buf_new; /* pad end of buffer with zeros */ p = buf + buf_len; switch (buf_len % 4) { case 1: *(p++) = 0x00; case 2: *(p++) = 0x00; case 3: *(p++) = 0x00; default: break; } *TTFA = buf; *TTFA_len = buf_len; return TA_Err_Ok; } /* end of tattfa.c */ ttfautohint-1.8.1/lib/tatypes.h0000644000175000001440000002674013153174711016357 0ustar00wlusers00000000000000/* tatypes.h */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `aftypes.h' (2011-Mar-30) from FreeType */ /* heavily modified 2011 by Werner Lemberg */ #ifndef TATYPES_H_ #define TATYPES_H_ #include #include FT_FREETYPE_H #include FT_OUTLINE_H #include "tablue.h" #ifdef __cplusplus extern "C" { #endif /* enable one of the following three definitions for debugging */ /* #define TA_DEBUG */ /* #define TA_DEBUG_HORZ */ #define TA_DEBUG_VERT #if defined TA_DEBUG_HORZ # define TA_DEBUG_STARTDIM TA_DIMENSION_HORZ # define TA_DEBUG_ENDDIM TA_DIMENSION_HORZ # define TA_DEBUG #elif defined TA_DEBUG_VERT # define TA_DEBUG_STARTDIM TA_DIMENSION_VERT # define TA_DEBUG_ENDDIM TA_DIMENSION_VERT # define TA_DEBUG #elif defined TA_DEBUG # define TA_DEBUG_STARTDIM TA_DIMENSION_VERT # define TA_DEBUG_ENDDIM TA_DIMENSION_HORZ #endif #ifdef TA_DEBUG #define TA_LOG(x) \ do \ { \ if (_ta_debug) \ _ta_message x; \ } while (0) #define TA_LOG_GLOBAL(x) \ do \ { \ if (_ta_debug_global) \ _ta_message x; \ } while (0) void _ta_message(const char* format, ...); extern int _ta_debug; extern int _ta_debug_global; extern int _ta_debug_disable_horz_hints; extern int _ta_debug_disable_vert_hints; extern int _ta_debug_disable_blue_hints; extern void* _ta_debug_hints; #else /* !TA_DEBUG */ #define TA_LOG(x) \ do { } while (0) /* nothing */ #define TA_LOG_GLOBAL(x) \ do { } while (0) /* nothing */ #endif /* !TA_DEBUG */ #define TA_MIN(a, b) ((a) < (b) ? (a) : (b)) #define TA_MAX(a, b) ((a) > (b) ? (a) : (b)) #define TA_ABS(a) ((a) < 0 ? -(a) : (a)) /* from file `ftconfig.h' (2015-03-02) from FreeType */ /* typeof condition taken from gnulib's `intprops.h' header file */ #if (__GNUC__ >= 2 \ || defined(__IBM__TYPEOF__) \ || (__SUNPRO_C >= 0x5110 && !__STDC__)) #define TYPEOF(type) (__typeof__ (type)) #else #define TYPEOF(type) /* empty */ #endif /* from file `ftobjs.h' from FreeType */ /* we use the TYPEOF macro to suppress signedness compilation warnings */ #define TA_PAD_FLOOR(x, n) ((x) & ~TYPEOF(x)((n) - 1)) #define TA_PAD_ROUND(x, n) TA_PAD_FLOOR((x) + ((n) / 2), n) #define TA_PAD_CEIL(x, n) TA_PAD_FLOOR((x) + ((n) - 1), n) #define TA_PIX_FLOOR(x) ((x) & ~TYPEOF(x)63) #define TA_PIX_ROUND(x) TA_PIX_FLOOR((x) + 32) #define TA_PIX_CEIL(x) TA_PIX_FLOOR((x) + 63) typedef struct TA_WidthRec_ { FT_Pos org; /* original position/width in font units */ FT_Pos cur; /* current/scaled position/width in device sub-pixels */ FT_Pos fit; /* current/fitted position/width in device sub-pixels */ } TA_WidthRec, *TA_Width; /* the auto-hinter doesn't need a very high angular accuracy */ typedef FT_Int TA_Angle; #define TA_ANGLE_PI 256 #define TA_ANGLE_2PI (TA_ANGLE_PI * 2) #define TA_ANGLE_PI2 (TA_ANGLE_PI / 2) #define TA_ANGLE_PI4 (TA_ANGLE_PI / 4) #define TA_ANGLE_DIFF(result, angle1, angle2) \ do \ { \ TA_Angle _delta = (angle2) - (angle1); \ \ \ while (_delta <= -TA_ANGLE_PI) \ _delta += TA_ANGLE_2PI; \ \ if (_delta > TA_ANGLE_PI) \ _delta -= TA_ANGLE_2PI; \ \ result = _delta; \ } while (0) /* opaque handle to glyph-specific hints -- */ /* see `tahints.h' for more details */ typedef struct TA_GlyphHintsRec_* TA_GlyphHints; /* a scaler models the target pixel device that will receive */ /* the auto-hinted glyph image */ #define TA_SCALER_FLAG_NO_HORIZONTAL 0x01U /* disable horizontal hinting */ #define TA_SCALER_FLAG_NO_VERTICAL 0x02U /* disable vertical hinting */ #define TA_SCALER_FLAG_NO_ADVANCE 0x04U /* disable advance hinting */ #define TA_SCALER_FLAG_NO_WARPER 0x08U /* disable warper */ typedef struct TA_ScalerRec_ { FT_Face face; /* source font face */ FT_Fixed x_scale; /* from font units to 1/64th device pixels */ FT_Fixed y_scale; /* from font units to 1/64th device pixels */ FT_Pos x_delta; /* in 1/64th device pixels */ FT_Pos y_delta; /* in 1/64th device pixels */ FT_Render_Mode render_mode; /* monochrome, anti-aliased, LCD, etc.*/ FT_UInt32 flags; /* additional control flags, see above */ } TA_ScalerRec, *TA_Scaler; #define TA_SCALER_EQUAL_SCALES(a, b) \ ((a)->x_scale == (b)->x_scale \ && (a)->y_scale == (b)->y_scale \ && (a)->x_delta == (b)->x_delta \ && (a)->y_delta == (b)->y_delta) typedef struct TA_StyleMetricsRec_* TA_StyleMetrics; /* this function parses an FT_Face to compute global metrics */ /* for a specific style, optionally using another FT_Face to */ /* derive blue zones */ typedef FT_Error (*TA_WritingSystem_InitMetricsFunc)(TA_StyleMetrics metrics, FT_Face face, FT_Face reference); typedef void (*TA_WritingSystem_ScaleMetricsFunc)(TA_StyleMetrics metrics, TA_Scaler scaler); typedef void (*TA_WritingSystem_DoneMetricsFunc)(TA_StyleMetrics metrics); typedef FT_Error (*TA_WritingSystem_InitHintsFunc)(TA_GlyphHints hints, TA_StyleMetrics metrics); typedef FT_Error (*TA_WritingSystem_ApplyHintsFunc)(FT_UInt glyph_index, TA_GlyphHints hints, FT_Outline* outline, TA_StyleMetrics metrics); /* * For the auto-hinter, a writing system consists of multiple scripts that * can be handled similarly *in a typographical way*; the relationship is * not based on history. For example, both the Greek and the unrelated * Armenian scripts share the same features like ascender, descender, * x-height, etc. Essentially, a writing system is covered by a * submodule of the auto-fitter; it contains * * - a specific global analyzer that computes global metrics specific to * the script (based on script-specific characters to identify ascender * height, x-height, etc.), * * - a specific glyph analyzer that computes segments and edges for each * glyph covered by the script, * * - a specific grid-fitting algorithm that distorts the scaled glyph * outline according to the results of the glyph analyzer. */ #define TAWRTSYS_H_ /* don't load header files */ #undef WRITING_SYSTEM #define WRITING_SYSTEM(ws, WS) \ TA_WRITING_SYSTEM_ ## WS, /* The list of known writing systems. */ typedef enum TA_WritingSystem_ { #include "tawrtsys.h" TA_WRITING_SYSTEM_MAX /* do not remove */ } TA_WritingSystem; #undef TAWRTSYS_H_ typedef struct TA_WritingSystemClassRec_ { TA_WritingSystem writing_system; FT_Offset style_metrics_size; TA_WritingSystem_InitMetricsFunc style_metrics_init; TA_WritingSystem_ScaleMetricsFunc style_metrics_scale; TA_WritingSystem_DoneMetricsFunc style_metrics_done; TA_WritingSystem_InitHintsFunc style_hints_init; TA_WritingSystem_ApplyHintsFunc style_hints_apply; } TA_WritingSystemClassRec; typedef const TA_WritingSystemClassRec* TA_WritingSystemClass; /* * Each script is associated with two sets of Unicode ranges to test * whether the font face supports the script, and which base characters * the script contains. * * We use four-letter script tags from the OpenType specification, * extended by `NONE', which indicates `no script'. */ #undef SCRIPT #define SCRIPT(s, S, d, h, H, ss) \ TA_SCRIPT_ ## S, /* The list of known scripts. */ typedef enum TA_Script_ { #include TA_SCRIPT_MAX /* do not remove */ } TA_Script; typedef struct TA_Script_UniRangeRec_ { FT_UInt32 first; FT_UInt32 last; } TA_Script_UniRangeRec; #define TA_UNIRANGE_REC(a, b) \ { (FT_UInt32)(a), (FT_UInt32)(b) } #define TA_HINTING_BOTTOM_TO_TOP 0 #define TA_HINTING_TOP_TO_BOTTOM 1 typedef const TA_Script_UniRangeRec* TA_Script_UniRange; typedef struct TA_ScriptClassRec_ { TA_Script script; /* last element in the ranges must be { 0, 0 } */ TA_Script_UniRange script_uni_ranges; TA_Script_UniRange script_uni_nonbase_ranges; FT_Bool top_to_bottom_hinting; const char* standard_charstring; /* for default width and height */ } TA_ScriptClassRec; typedef const TA_ScriptClassRec* TA_ScriptClass; /* * Usually, a font contains more glyphs than can be addressed by its * character map. * * In the PostScript font world, encoding vectors specific to a given * task are used to select such glyphs, and these glyphs can be often * recognized by having a suffix in its glyph names. For example, a * superscript glyph `A' might be called `A.sup'. Unfortunately, this * naming scheme is not standardized and thus unusable for us. * * In the OpenType world, a better solution was invented, namely * `features', which cleanly separate a character's input encoding from * the corresponding glyph's appearance, and which don't use glyph names * at all. For our purposes, and slightly generalized, an OpenType * feature is a name of a mapping that maps character codes to * non-standard glyph indices (features get used for other things also). * For example, the `sups' feature provides superscript glyphs, thus * mapping character codes like `A' or `B' to superscript glyph * representation forms. How this mapping happens is completely * uninteresting to us. * * For the auto-hinter, a `coverage' represents all glyphs of an OpenType * feature collected in a set (as listed below) that can be hinted * together. To continue the above example, superscript glyphs must not * be hinted together with normal glyphs because the blue zones * completely differ. * * To compute coverages, we use the HarfBuzz library, which has many * functions exactly for this purpose. * * TA_COVERAGE_DEFAULT is special: It should cover everything that isn't * listed separately (including the glyphs addressable by the character * map). */ #undef COVERAGE #define COVERAGE(name, NAME, description, \ tag, tag1, tag2, tag3, tag4) \ TA_COVERAGE_ ## NAME, typedef enum TA_Coverage_ { #include "ttfautohint-coverages.h" TA_COVERAGE_DEFAULT } TA_Coverage; /* * The topmost structure for modelling the auto-hinter glyph input data * is a `style class', grouping everything together. */ #undef STYLE #define STYLE(s, S, d, ws, sc, ss, c) \ TA_STYLE_ ## S, /* The list of known styles. */ typedef enum TA_Style_ { #include "tastyles.h" TA_STYLE_MAX /* do not remove */ } TA_Style; typedef struct TA_StyleClassRec_ { TA_Style style; TA_WritingSystem writing_system; TA_Script script; TA_Blue_Stringset blue_stringset; TA_Coverage coverage; } TA_StyleClassRec; typedef const TA_StyleClassRec* TA_StyleClass; typedef struct TA_FaceGlobalsRec_* TA_FaceGlobals; /* This is the main structure that combines everything. Autofit modules */ /* specific to writing systems derive their structures from it, for */ /* example `TA_LatinMetrics'. */ typedef struct TA_StyleMetricsRec_ { TA_StyleClass style_class; TA_ScalerRec scaler; FT_Bool digits_have_same_width; TA_FaceGlobals globals; /* to access properties */ } TA_StyleMetricsRec; #ifdef __cplusplus } /* extern "C" */ #endif #endif /* TATYPES_H_ */ /* end of tatypes.h */ ttfautohint-1.8.1/lib/taversion.c0000644000175000001440000000163413221753713016667 0ustar00wlusers00000000000000/* taversion.c */ /* * Copyright (C) 2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #include "ta.h" /* the function declaration is in `ttfautohint.h' */ TA_LIB_EXPORT void TTF_autohint_version(int *major, int *minor, int *revision) { *major = TTFAUTOHINT_MAJOR; *minor = TTFAUTOHINT_MINOR; *revision = TTFAUTOHINT_REVISION; } /* the function declaration is in `ttfautohint.h' */ TA_LIB_EXPORT const char* TTF_autohint_version_string(void) { return TTFAUTOHINT_VERSION; } /* end of taversion.c */ ttfautohint-1.8.1/lib/tawrtsys.h0000644000175000001440000000253213153174711016557 0ustar00wlusers00000000000000/* tawrtsys.h */ /* * Copyright (C) 2013-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afwrtsys.h' (2013-Aug-05) from FreeType */ #ifndef TAWRTSYS_H_ #define TAWRTSYS_H_ /* Since preprocessor directives can't create other preprocessor */ /* directives, we have to include the header files manually. */ #include "tadummy.h" #include "talatin.h" #if 0 # include "tacjk.h" # include "taindic.h" #endif #ifdef FT_OPTION_AUTOFIT2 # include "talatin2.h" #endif #endif /* TAWRTSYS_H_ */ /* The following part can be included multiple times. */ /* Define `WRITING_SYSTEM' as needed. */ /* Add new writing systems here. The arguments are the writing system */ /* name in lowercase and uppercase, respectively. */ WRITING_SYSTEM(dummy, DUMMY) WRITING_SYSTEM(latin, LATIN) #if 0 WRITING_SYSTEM(cjk, CJK) WRITING_SYSTEM(indic, INDIC) #endif #ifdef FT_OPTION_AUTOFIT2 WRITING_SYSTEM(latin2, LATIN2) #endif /* end of tawrtsys.h */ ttfautohint-1.8.1/lib/ttfautohint.c0000644000175000001440000005026613221753737017241 0ustar00wlusers00000000000000/* ttfautohint.c */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* This file needs FreeType 2.4.5 or newer. */ #include #include #include #include #include #include "ta.h" #define COMPARE(str) \ (len == (sizeof (str) - 1) \ && !strncmp(start, str, sizeof (str) - 1)) static void TA_sfnt_set_properties(SFNT* sfnt, FONT* font) { TA_FaceGlobals globals = (TA_FaceGlobals)sfnt->face->autohint.data; globals->increase_x_height = font->increase_x_height; } TA_LIB_EXPORT TA_Error TTF_autohint(const char* options, ...) { va_list ap; FONT* font; FT_Long i; TA_Error error; char* error_string = NULL; unsigned int errlinenum = 0; char* errline = NULL; char* errpos = NULL; FT_Bool free_errline = 0; FT_Bool free_error_string = 0; FILE* in_file = NULL; FILE* out_file = NULL; FILE* control_file = NULL; FILE* reference_file = NULL; FT_Long reference_index = 0; const char* reference_name = NULL; const char* in_buf = NULL; size_t in_len = 0; char** out_bufp = NULL; size_t* out_lenp = NULL; const char* control_buf = NULL; size_t control_len = 0; const char* reference_buf = NULL; size_t reference_len = 0; const unsigned char** error_stringp = NULL; FT_Long hinting_range_min = -1; FT_Long hinting_range_max = -1; FT_Long hinting_limit = -1; FT_Long increase_x_height = -1; const char* x_height_snapping_exceptions_string = NULL; number_range* x_height_snapping_exceptions = NULL; FT_Long fallback_stem_width = 0; FT_Int gray_stem_width_mode = TA_STEM_WIDTH_MODE_QUANTIZED; FT_Int gdi_cleartype_stem_width_mode = TA_STEM_WIDTH_MODE_STRONG; FT_Int dw_cleartype_stem_width_mode = TA_STEM_WIDTH_MODE_QUANTIZED; TA_Progress_Func progress = NULL; void* progress_data = NULL; TA_Error_Func err = NULL; void* err_data = NULL; TA_Info_Func info = NULL; TA_Info_Post_Func info_post = NULL; void* info_data = NULL; TA_Alloc_Func allocate = NULL; TA_Free_Func deallocate = NULL; FT_Bool windows_compatibility = 0; FT_Bool ignore_restrictions = 0; FT_Bool adjust_subglyphs = 0; FT_Bool hint_composites = 0; FT_Bool symbol = 0; FT_Bool fallback_scaling = 0; const char* fallback_script_string = NULL; const char* default_script_string = NULL; TA_Style fallback_style = TA_STYLE_NONE_DFLT; TA_Script default_script = TA_SCRIPT_LATN; FT_Bool dehint = 0; FT_Bool debug = 0; FT_Bool TTFA_info = 0; unsigned long long epoch = ULLONG_MAX; const char* op; if (!options || !*options) { error = FT_Err_Invalid_Argument; goto Err1; } /* XXX */ va_start(ap, options); op = options; for (;;) { const char* start; size_t len; start = op; /* search comma */ while (*op && *op != ',') op++; /* remove leading whitespace */ while (isspace(*start)) start++; /* check for empty option */ if (start == op) goto End; len = (size_t)(op - start); /* the `COMPARE' macro uses `len' and `start' */ /* handle options -- don't forget to update parameter dump below! */ if (COMPARE("adjust-subglyphs")) adjust_subglyphs = (FT_Bool)va_arg(ap, FT_Int); else if (COMPARE("alloc-func")) allocate = va_arg(ap, TA_Alloc_Func); else if (COMPARE("control-buffer")) { control_file = NULL; control_buf = va_arg(ap, const char*); } else if (COMPARE("control-buffer-len")) { control_file = NULL; control_len = va_arg(ap, size_t); } else if (COMPARE("control-file")) { control_file = va_arg(ap, FILE*); control_buf = NULL; control_len = 0; } else if (COMPARE("debug")) debug = (FT_Bool)va_arg(ap, FT_Int); else if (COMPARE("default-script")) default_script_string = va_arg(ap, const char*); else if (COMPARE("dehint")) dehint = (FT_Bool)va_arg(ap, FT_Int); else if (COMPARE("dw-cleartype-stem-width-mode")) dw_cleartype_stem_width_mode = va_arg(ap, FT_Int); else if (COMPARE("dw-cleartype-strong-stem-width")) { FT_Bool arg = (FT_Bool)va_arg(ap, FT_Int); dw_cleartype_stem_width_mode = arg ? TA_STEM_WIDTH_MODE_STRONG : TA_STEM_WIDTH_MODE_QUANTIZED; } else if (COMPARE("epoch")) epoch = (unsigned long long)va_arg(ap, unsigned long long); else if (COMPARE("error-callback")) err = va_arg(ap, TA_Error_Func); else if (COMPARE("error-callback-data")) err_data = va_arg(ap, void*); else if (COMPARE("error-string")) error_stringp = va_arg(ap, const unsigned char**); else if (COMPARE("fallback-scaling")) fallback_scaling = (FT_Bool)va_arg(ap, FT_Int); else if (COMPARE("fallback-script")) fallback_script_string = va_arg(ap, const char*); else if (COMPARE("fallback-stem-width")) fallback_stem_width = (FT_Long)va_arg(ap, FT_UInt); else if (COMPARE("free-func")) deallocate = va_arg(ap, TA_Free_Func); else if (COMPARE("gdi-cleartype-stem-width-mode")) gdi_cleartype_stem_width_mode = va_arg(ap, FT_Int); else if (COMPARE("gdi-cleartype-strong-stem-width")) { FT_Bool arg = (FT_Bool)va_arg(ap, FT_Int); gdi_cleartype_stem_width_mode = arg ? TA_STEM_WIDTH_MODE_STRONG : TA_STEM_WIDTH_MODE_QUANTIZED; } else if (COMPARE("gray-stem-width-mode")) gray_stem_width_mode = va_arg(ap, FT_Int); else if (COMPARE("gray-strong-stem-width")) { FT_Bool arg = (FT_Bool)va_arg(ap, FT_Int); gray_stem_width_mode = arg ? TA_STEM_WIDTH_MODE_STRONG : TA_STEM_WIDTH_MODE_QUANTIZED; } else if (COMPARE("hinting-limit")) hinting_limit = (FT_Long)va_arg(ap, FT_UInt); else if (COMPARE("hinting-range-max")) hinting_range_max = (FT_Long)va_arg(ap, FT_UInt); else if (COMPARE("hinting-range-min")) hinting_range_min = (FT_Long)va_arg(ap, FT_UInt); else if (COMPARE("hint-composites")) hint_composites = (FT_Bool)va_arg(ap, FT_Int); else if (COMPARE("ignore-restrictions")) ignore_restrictions = (FT_Bool)va_arg(ap, FT_Int); else if (COMPARE("in-buffer")) { in_file = NULL; in_buf = va_arg(ap, const char*); } else if (COMPARE("in-buffer-len")) { in_file = NULL; in_len = va_arg(ap, size_t); } else if (COMPARE("in-file")) { in_file = va_arg(ap, FILE*); in_buf = NULL; in_len = 0; } else if (COMPARE("increase-x-height")) increase_x_height = (FT_Long)va_arg(ap, FT_UInt); else if (COMPARE("info-callback")) info = va_arg(ap, TA_Info_Func); else if (COMPARE("info-callback-data")) info_data = va_arg(ap, void*); else if (COMPARE("info-post-callback")) info_post = va_arg(ap, TA_Info_Post_Func); else if (COMPARE("out-buffer")) { out_file = NULL; out_bufp = va_arg(ap, char**); } else if (COMPARE("out-buffer-len")) { out_file = NULL; out_lenp = va_arg(ap, size_t*); } else if (COMPARE("out-file")) { out_file = va_arg(ap, FILE*); out_bufp = NULL; out_lenp = NULL; } else if (COMPARE("pre-hinting")) adjust_subglyphs = (FT_Bool)va_arg(ap, FT_Int); else if (COMPARE("progress-callback")) progress = va_arg(ap, TA_Progress_Func); else if (COMPARE("progress-callback-data")) progress_data = va_arg(ap, void*); else if (COMPARE("reference-buffer")) { reference_file = NULL; reference_buf = va_arg(ap, const char*); } else if (COMPARE("reference-buffer-len")) { reference_file = NULL; reference_len = va_arg(ap, size_t); } else if (COMPARE("reference-file")) { reference_file = va_arg(ap, FILE*); reference_buf = NULL; reference_len = 0; } else if (COMPARE("reference-index")) reference_index = (FT_Long)va_arg(ap, FT_UInt); else if (COMPARE("reference-name")) reference_name = va_arg(ap, const char*); else if (COMPARE("symbol")) symbol = (FT_Bool)va_arg(ap, FT_Int); else if (COMPARE("TTFA-info")) TTFA_info = (FT_Bool)va_arg(ap, FT_Int); else if (COMPARE("windows-compatibility")) windows_compatibility = (FT_Bool)va_arg(ap, FT_Int); else if (COMPARE("x-height-snapping-exceptions")) x_height_snapping_exceptions_string = va_arg(ap, const char*); else { error = TA_Err_Unknown_Argument; goto Err1; } End: if (!*op) break; op++; } va_end(ap); /* check options */ if (!(in_file || (in_buf && in_len))) { error = FT_Err_Invalid_Argument; goto Err1; } if (!(out_file || (out_bufp && out_lenp))) { error = FT_Err_Invalid_Argument; goto Err1; } font = (FONT*)calloc(1, sizeof (FONT)); if (!font) { error = FT_Err_Out_Of_Memory; goto Err1; } if (dehint) goto No_check; if (gray_stem_width_mode < -1 || gray_stem_width_mode > 1) { error = FT_Err_Invalid_Argument; goto Err1; } if (gdi_cleartype_stem_width_mode < -1 || gdi_cleartype_stem_width_mode > 1) { error = FT_Err_Invalid_Argument; goto Err1; } if (dw_cleartype_stem_width_mode < -1 || dw_cleartype_stem_width_mode > 1) { error = FT_Err_Invalid_Argument; goto Err1; } if (hinting_range_min >= 0 && hinting_range_min < 2) { error = FT_Err_Invalid_Argument; goto Err1; } if (hinting_range_min < 0) hinting_range_min = TA_HINTING_RANGE_MIN; if (hinting_range_max >= 0 && hinting_range_max < hinting_range_min) { error = FT_Err_Invalid_Argument; goto Err1; } if (hinting_range_max < 0) hinting_range_max = TA_HINTING_RANGE_MAX; /* value 0 is valid */ if (hinting_limit > 0 && hinting_limit < hinting_range_max) { error = FT_Err_Invalid_Argument; goto Err1; } if (hinting_limit < 0) hinting_limit = TA_HINTING_LIMIT; if (increase_x_height > 0 && increase_x_height < TA_PROP_INCREASE_X_HEIGHT_MIN) { error = FT_Err_Invalid_Argument; goto Err1; } if (increase_x_height < 0) increase_x_height = TA_INCREASE_X_HEIGHT; if (fallback_script_string) { for (i = 0; i < TA_STYLE_MAX; i++) { TA_StyleClass style_class = ta_style_classes[i]; if (style_class->coverage == TA_COVERAGE_DEFAULT && !strcmp(script_names[style_class->script], fallback_script_string)) break; } if (i == TA_STYLE_MAX) { error = FT_Err_Invalid_Argument; goto Err1; } fallback_style = (TA_Style)i; } if (default_script_string) { for (i = 0; i < TA_SCRIPT_MAX; i++) { if (!strcmp(script_names[i], default_script_string)) break; } if (i == TA_SCRIPT_MAX) { error = FT_Err_Invalid_Argument; goto Err1; } default_script = (TA_Script)i; } if (x_height_snapping_exceptions_string) { const char* s = number_set_parse(x_height_snapping_exceptions_string, &x_height_snapping_exceptions, TA_PROP_INCREASE_X_HEIGHT_MIN, 0x7FFF); if (*s) { /* we map numberset.h's error codes to values starting with 0x100 */ error = 0x100 - (FT_Error)(uintptr_t)x_height_snapping_exceptions; errlinenum = 0; errline = (char*)x_height_snapping_exceptions_string; errpos = (char*)s; goto Err1; } } font->reference_index = reference_index; font->reference_name = reference_name; font->hinting_range_min = (FT_UInt)hinting_range_min; font->hinting_range_max = (FT_UInt)hinting_range_max; font->hinting_limit = (FT_UInt)hinting_limit; font->increase_x_height = (FT_UInt)increase_x_height; font->x_height_snapping_exceptions = x_height_snapping_exceptions; font->fallback_stem_width = (FT_UInt)fallback_stem_width; font->gray_stem_width_mode = gray_stem_width_mode; font->gdi_cleartype_stem_width_mode = gdi_cleartype_stem_width_mode; font->dw_cleartype_stem_width_mode = dw_cleartype_stem_width_mode; font->windows_compatibility = windows_compatibility; font->ignore_restrictions = ignore_restrictions; font->adjust_subglyphs = adjust_subglyphs; font->hint_composites = hint_composites; font->fallback_style = fallback_style; font->fallback_scaling = fallback_scaling; font->default_script = default_script; font->symbol = symbol; No_check: font->allocate = (allocate && out_bufp) ? allocate : malloc; font->deallocate = (deallocate && out_bufp) ? deallocate : free; font->progress = progress; font->progress_data = progress_data; font->info = info; font->info_post = info_post; font->info_data = info_data; font->debug = debug; font->dehint = dehint; font->TTFA_info = TTFA_info; font->epoch = epoch; font->gasp_idx = MISSING; /* start with processing the data */ if (in_file) { error = TA_font_file_read(in_file, &font->in_buf, &font->in_len); if (error) goto Err; } else { /* a valid TTF can never be that small */ if (in_len < 100) { error = TA_Err_Invalid_Font_Type; goto Err1; } font->in_buf = (FT_Byte*)in_buf; font->in_len = in_len; } if (control_file) { error = TA_control_file_read(font, control_file); if (error) goto Err; } else if (control_buf) { font->control_buf = (char*)control_buf; font->control_len = control_len; } if (reference_file) { error = TA_font_file_read(reference_file, &font->reference_buf, &font->reference_len); if (error) goto Err; } else if (reference_buf) { /* a valid TTF can never be that small */ if (reference_len < 100) { error = TA_Err_Invalid_Font_Type + 0x300; goto Err1; } font->reference_buf = (FT_Byte*)reference_buf; font->reference_len = reference_len; } error = TA_font_init(font); if (error) goto Err; if (font->debug) { _ta_debug = 1; _ta_debug_global = 1; } /* we do some loops over all subfonts -- */ /* to process options early, just start with loading all of them */ for (i = 0; i < font->num_sfnts; i++) { SFNT* sfnt = &font->sfnts[i]; FT_UInt idx; error = FT_New_Memory_Face(font->lib, font->in_buf, (FT_Long)font->in_len, i, &sfnt->face); /* assure that the font hasn't been already processed by ttfautohint; */ /* another, more thorough check is done in TA_glyph_parse_simple */ idx = FT_Get_Name_Index(sfnt->face, (FT_String*)TTFAUTOHINT_GLYPH); if (idx && !dehint) { error = TA_Err_Already_Processed; goto Err; } if (error) goto Err; } /* process control instructions */ error = TA_control_parse_buffer(font, &error_string, &errlinenum, &errline, &errpos); if (error) { free_errline = 1; free_error_string = 1; goto Err; } /* now we are able to dump all parameters */ if (debug) { char* s; s = TA_font_dump_parameters(font, 1); if (!s) { error = FT_Err_Out_Of_Memory; goto Err; } fprintf(stderr, "%s", s); free(s); } error = TA_control_build_tree(font); if (error) goto Err; /* loop again over subfonts and continue processing */ for (i = 0; i < font->num_sfnts; i++) { SFNT* sfnt = &font->sfnts[i]; error = TA_sfnt_split_into_SFNT_tables(sfnt, font); if (error) goto Err; /* check permission */ if (sfnt->OS2_idx != MISSING) { SFNT_Table* OS2_table = &font->tables[sfnt->OS2_idx]; /* check lower byte of the `fsType' field */ if (OS2_table->buf[OS2_FSTYPE_OFFSET + 1] == 0x02 && !font->ignore_restrictions) { error = TA_Err_Missing_Legal_Permission; goto Err; } } if (font->dehint) { error = TA_sfnt_split_glyf_table(sfnt, font); if (error) goto Err; } else { if (font->adjust_subglyphs) error = TA_sfnt_create_glyf_data(sfnt, font); else error = TA_sfnt_split_glyf_table(sfnt, font); if (error) goto Err; /* this call creates a `globals' object... */ error = TA_sfnt_handle_coverage(sfnt, font); if (error) goto Err; /* ... so that we now can initialize its properties */ TA_sfnt_set_properties(sfnt, font); } } if (!font->dehint) { for (i = 0; i < font->num_sfnts; i++) { SFNT* sfnt = &font->sfnts[i]; TA_sfnt_adjust_coverage(sfnt, font); } } #if 0 /* this code is here for completeness -- */ /* right now, `glyf' tables get hinted only once, */ /* and referring subfonts simply reuse it, */ /* but this might change in the future */ if (!font->dehint) { for (i = 0; i < font->num_sfnts; i++) { SFNT* sfnt = &font->sfnts[i]; TA_sfnt_copy_master_coverage(sfnt, font); } } #endif if (!font->dehint) { for (i = 0; i < font->num_sfnts; i++) { SFNT* sfnt = &font->sfnts[i]; TA_control_apply_coverage(sfnt, font); } } /* loop again over subfonts */ for (i = 0; i < font->num_sfnts; i++) { SFNT* sfnt = &font->sfnts[i]; error = ta_loader_init(font); if (error) goto Err; error = TA_sfnt_build_gasp_table(sfnt, font); if (error) goto Err; if (!font->dehint) { error = TA_sfnt_build_cvt_table(sfnt, font); if (error) goto Err; error = TA_sfnt_build_fpgm_table(sfnt, font); if (error) goto Err; error = TA_sfnt_build_prep_table(sfnt, font); if (error) goto Err; } error = TA_sfnt_build_glyf_table(sfnt, font); if (error) goto Err; error = TA_sfnt_build_loca_table(sfnt, font); if (error) goto Err; ta_loader_done(font); } for (i = 0; i < font->num_sfnts; i++) { SFNT* sfnt = &font->sfnts[i]; error = TA_sfnt_update_maxp_table(sfnt, font); if (error) goto Err; if (!font->dehint) { /* we add one glyph for composites */ if (sfnt->max_components && !font->adjust_subglyphs && font->hint_composites) { error = TA_sfnt_update_hmtx_table(sfnt, font); if (error) goto Err; error = TA_sfnt_update_post_table(sfnt, font); if (error) goto Err; error = TA_sfnt_update_GPOS_table(sfnt, font); if (error) goto Err; } } if (font->info) { /* add info about ttfautohint to the version string */ error = TA_sfnt_update_name_table(sfnt, font); if (error) goto Err; } } if (font->num_sfnts == 1) error = TA_font_build_TTF(font); else error = TA_font_build_TTC(font); if (error) goto Err; if (out_file) { error = TA_font_file_write(font, out_file); if (error) goto Err; } else { *out_bufp = (char*)font->out_buf; *out_lenp = font->out_len; } error = TA_Err_Ok; Err: TA_control_free(font->control); TA_control_free_tree(font); TA_font_unload(font, in_buf, out_bufp, control_buf, reference_buf); Err1: { FT_Error e = error; /* use standard FreeType error strings for reference file errors */ if (error >= 0x300 && error < 0x400) e -= 0x300; if (!error_string) error_string = (char*)TA_get_error_message(e); /* this must be a static value */ if (error_stringp) *error_stringp = (const unsigned char*)TA_get_error_message(e); } if (err) err(error, error_string, errlinenum, errline, errpos, err_data); if (free_errline) free(errline); if (free_error_string) free(error_string); return error; } /* end of ttfautohint.c */ ttfautohint-1.8.1/lib/afblue.pl0000644000175000001440000003136413153174711016306 0ustar00wlusers00000000000000#! /usr/bin/perl -w # -*- Perl -*- # # afblue.pl # # Process a blue zone character data file. # # Copyright 2013-2016 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, # modified, and distributed under the terms of the FreeType project # license, LICENSE.TXT. By continuing to use, modify, or distribute # this file you indicate that you have read the license and # understand and accept it fully. use strict; use warnings; use English '-no_match_vars'; use open ':std', ':encoding(UTF-8)'; my $prog = $PROGRAM_NAME; $prog =~ s| .* / ||x; # Remove path. die "usage: $prog datafile < infile > outfile\n" if $#ARGV != 0; my $datafile = $ARGV[0]; my %diversions; # The extracted and massaged data from `datafile'. my @else_stack; # Booleans to track else-clauses. my @name_stack; # Stack of integers used for names of aux. variables. my $curr_enum; # Name of the current enumeration. my $curr_array; # Name of the current array. my $curr_max; # Name of the current maximum value. my $curr_enum_element; # Name of the current enumeration element. my $curr_offset; # The offset relative to current aux. variable. my $curr_elem_size; # The number of non-space characters in the current string or # the number of elements in the current block. my $have_sections = 0; # Boolean; set if start of a section has been seen. my $have_strings; # Boolean; set if current section contains strings. my $have_blocks; # Boolean; set if current section contains blocks. my $have_enum_element; # Boolean; set if we have an enumeration element. my $in_string; # Boolean; set if a string has been parsed. my $num_sections = 0; # Number of sections seen so far. my $last_aux; # Name of last auxiliary variable. # Regular expressions. # [] [] ':' [] '\n' my $section_re = qr/ ^ \s* (\S+) \s+ (\S+) \s+ (\S+) \s* : \s* $ /x; # [] [] '\n' my $enum_element_re = qr/ ^ \s* ( [A-Za-z0-9_]+ ) \s* $ /x; # '#' '\n' my $preprocessor_re = qr/ ^ \# /x; # [] '/' '/' '\n' my $comment_re = qr| ^ \s* // |x; # empty line my $whitespace_only_re = qr/ ^ \s* $ /x; # [] '"' '"' [] '\n' ( doesn't contain newlines) my $string_re = qr/ ^ \s* " ( (?> (?: (?> [^"\\]+ ) | \\. )* ) ) " \s* $ /x; # [] '{' '}' [] '\n' ( can contain newlines) my $block_start_re = qr/ ^ \s* \{ /x; # We need the capturing group for `split' to make it return the separator # tokens (i.e., the opening and closing brace) also. my $brace_re = qr/ ( [{}] ) /x; sub Warn { my $message = shift; warn "$datafile:$INPUT_LINE_NUMBER: warning: $message\n"; } sub Die { my $message = shift; die "$datafile:$INPUT_LINE_NUMBER: error: $message\n"; } my $warned_before = 0; sub warn_before { Warn("data before first section gets ignored") unless $warned_before; $warned_before = 1; } sub strip_newline { chomp; s/ \x0D $ //x; } sub end_curr_string { # Append final null byte to string. if ($have_strings) { push @{$diversions{$curr_array}}, " '\\0',\n" if $in_string; $curr_offset++; $in_string = 0; } } sub update_max_elem_size { if ($curr_elem_size) { my $max = pop @{$diversions{$curr_max}}; $max = $curr_elem_size if $curr_elem_size > $max; push @{$diversions{$curr_max}}, $max; } } sub convert_non_ascii_char { # A UTF-8 character outside of the printable ASCII range, with possibly a # leading backslash character. my $s = shift; # Here we count characters, not bytes. $curr_elem_size += length $s; utf8::encode($s); $s = uc unpack 'H*', $s; $curr_offset += $s =~ s/\G(..)/'\\x$1', /sg; return $s; } sub convert_ascii_chars { # A series of ASCII characters in the printable range. my $s = shift; # We reduce multiple space characters to a single one. $s =~ s/ +/ /g; # Count all non-space characters. Note that `()' applies a list context # to the capture that is used to count the elements. $curr_elem_size += () = $s =~ /[^ ]/g; $curr_offset += $s =~ s/\G(.)/'$1', /g; return $s; } sub convert_literal { my $s = shift; my $orig = $s; # ASCII printables and space my $safe_re = '\x20-\x7E'; # ASCII printables and space, no backslash my $safe_no_backslash_re = '\x20-\x5B\x5D-\x7E'; $s =~ s{ (?: \\? ( [^$safe_re] ) | ( (?: [$safe_no_backslash_re] | \\ [$safe_re] )+ ) ) } { defined($1) ? convert_non_ascii_char($1) : convert_ascii_chars($2) }egx; # We assume that `$orig' doesn't contain `*/' return $s . " /* $orig */"; } sub aux_name { return "af_blue_" . $num_sections. "_" . join('_', @name_stack); } sub aux_name_next { $name_stack[$#name_stack]++; my $name = aux_name(); $name_stack[$#name_stack]--; return $name; } sub enum_val_string { # Build string that holds code to save the current offset in an # enumeration element. my $aux = shift; my $add = ($last_aux eq "af_blue_" . $num_sections . "_0" ) ? "" : "$last_aux + "; return " $aux = $add$curr_offset,\n"; } # Process data file. open(DATA, $datafile) || die "$prog: can't open \`$datafile': $OS_ERROR\n"; while () { strip_newline(); next if /$comment_re/; next if /$whitespace_only_re/; if (/$section_re/) { Warn("previous section is empty") if ($have_sections && !$have_strings && !$have_blocks); end_curr_string(); update_max_elem_size(); # Save captured groups from `section_re'. $curr_enum = $1; $curr_array = $2; $curr_max = $3; $curr_enum_element = ""; $curr_offset = 0; Warn("overwriting already defined enumeration \`$curr_enum'") if exists($diversions{$curr_enum}); Warn("overwriting already defined array \`$curr_array'") if exists($diversions{$curr_array}); Warn("overwriting already defined maximum value \`$curr_max'") if exists($diversions{$curr_max}); $diversions{$curr_enum} = []; $diversions{$curr_array} = []; $diversions{$curr_max} = []; push @{$diversions{$curr_max}}, 0; @name_stack = (); push @name_stack, 0; $have_sections = 1; $have_strings = 0; $have_blocks = 0; $have_enum_element = 0; $in_string = 0; $num_sections++; $curr_elem_size = 0; $last_aux = aux_name(); next; } if (/$preprocessor_re/) { if ($have_sections) { # Having preprocessor conditionals complicates the computation of # correct offset values. We have to introduce auxiliary enumeration # elements with the name `af_blue____...' that store # offsets to be used in conditional clauses. `' is the number of # sections seen so far, `' is the number of `#if' and `#endif' # conditionals seen so far in the topmost level, `' the number of # `#if' and `#endif' conditionals seen so far one level deeper, etc. # As a consequence, uneven values are used within a clause, and even # values after a clause, since the C standard doesn't allow the # redefinition of an enumeration value. For example, the name # `af_blue_5_1_6' is used to construct enumeration values in the fifth # section after the third (second-level) if-clause within the first # (top-level) if-clause. After the first top-level clause has # finished, `af_blue_5_2' is used. The current offset is then # relative to the value stored in the current auxiliary element. if (/ ^ \# \s* if /x) { push @else_stack, 0; $name_stack[$#name_stack]++; push @{$diversions{$curr_enum}}, enum_val_string(aux_name()); $last_aux = aux_name(); push @name_stack, 0; $curr_offset = 0; } elsif (/ ^ \# \s* elif /x) { Die("unbalanced #elif") unless @else_stack; pop @name_stack; push @{$diversions{$curr_enum}}, enum_val_string(aux_name_next()); $last_aux = aux_name(); push @name_stack, 0; $curr_offset = 0; } elsif (/ ^ \# \s* else /x) { my $prev_else = pop @else_stack; Die("unbalanced #else") unless defined($prev_else); Die("#else already seen") if $prev_else; push @else_stack, 1; pop @name_stack; push @{$diversions{$curr_enum}}, enum_val_string(aux_name_next()); $last_aux = aux_name(); push @name_stack, 0; $curr_offset = 0; } elsif (/ ^ (\# \s*) endif /x) { my $prev_else = pop @else_stack; Die("unbalanced #endif") unless defined($prev_else); pop @name_stack; # If there is no else-clause for an if-clause, we add one. This is # necessary to have correct offsets. if (!$prev_else) { # Use amount of whitespace from `endif'. push @{$diversions{$curr_enum}}, enum_val_string(aux_name_next()) . $1 . "else\n"; $last_aux = aux_name(); $curr_offset = 0; } $name_stack[$#name_stack]++; push @{$diversions{$curr_enum}}, enum_val_string(aux_name()); $last_aux = aux_name(); $curr_offset = 0; } # Handle (probably continued) preprocessor lines. CONTINUED_LOOP: { do { strip_newline(); push @{$diversions{$curr_enum}}, $ARG . "\n"; push @{$diversions{$curr_array}}, $ARG . "\n"; last CONTINUED_LOOP unless / \\ $ /x; } while (); } } else { warn_before(); } next; } if (/$enum_element_re/) { end_curr_string(); update_max_elem_size(); $curr_enum_element = $1; $have_enum_element = 1; $curr_elem_size = 0; next; } if (/$string_re/) { if ($have_sections) { Die("strings and blocks can't be mixed in a section") if $have_blocks; # Save captured group from `string_re'. my $string = $1; if ($have_enum_element) { push @{$diversions{$curr_enum}}, enum_val_string($curr_enum_element); $have_enum_element = 0; } $string = convert_literal($string); push @{$diversions{$curr_array}}, " $string\n"; $have_strings = 1; $in_string = 1; } else { warn_before(); } next; } if (/$block_start_re/) { if ($have_sections) { Die("strings and blocks can't be mixed in a section") if $have_strings; my $depth = 0; my $block = ""; my $block_end = 0; # Count braces while getting the block. BRACE_LOOP: { do { strip_newline(); foreach my $substring (split(/$brace_re/)) { if ($block_end) { Die("invalid data after last matching closing brace") if $substring !~ /$whitespace_only_re/; } $block .= $substring; if ($substring eq '{') { $depth++; } elsif ($substring eq '}') { $depth--; $block_end = 1 if $depth == 0; } } # If we are here, we have run out of substrings, so get next line # or exit. last BRACE_LOOP if $block_end; $block .= "\n"; } while (); } if ($have_enum_element) { push @{$diversions{$curr_enum}}, enum_val_string($curr_enum_element); $have_enum_element = 0; } push @{$diversions{$curr_array}}, $block . ",\n"; $curr_offset++; $curr_elem_size++; $have_blocks = 1; } else { warn_before(); } next; } # Garbage. We weren't able to parse the data. Die("syntax error"); } # Finalize data. end_curr_string(); update_max_elem_size(); # Filter stdin to stdout, replacing `@...@' templates. sub emit_diversion { my $diversion_name = shift; return (exists($diversions{$1})) ? "@{$diversions{$1}}" : "@" . $diversion_name . "@"; } $LIST_SEPARATOR = ''; my $s1 = "This file has been generated by the Perl script \`$prog',"; my $s1len = length $s1; my $s2 = "using data from file \`$datafile'."; my $s2len = length $s2; my $slen = ($s1len > $s2len) ? $s1len : $s2len; print "/* " . $s1 . " " x ($slen - $s1len) . " */\n" . "/* " . $s2 . " " x ($slen - $s2len) . " */\n" . "\n"; while () { s/ @ ( [A-Za-z0-9_]+? ) @ / emit_diversion($1) /egx; print; } # EOF ttfautohint-1.8.1/lib/sds.c0000644000175000001440000007267113153174711015456 0ustar00wlusers00000000000000/* SDS (Simple Dynamic Strings), A C dynamic strings library. * * Copyright (c) 2006-2014, Salvatore Sanfilippo * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Redis nor the names of its contributors may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include #include "sds.h" typedef struct sdshdr_ { size_t len; size_t free; char buf[]; } sdshdr; static INLINE sdshdr *sds_start(const sds s) { return (sdshdr*) (s-(int)offsetof(sdshdr, buf)); } /* Create a new sds string with the content specified by the 'init' pointer * and 'initlen'. * If NULL is used for 'init' the string is initialized with zero bytes. * * The string is always null-termined (all the sds strings are, always) so * even if you create an sds string with: * * mystring = sdsnewlen("abc",3"); * * You can print the string with printf() as there is an implicit \0 at the * end of the string. However the string is binary safe and can contain * \0 characters in the middle, as the length is stored in the sds header. */ sds sdsnewlen(const void *init, size_t initlen) { sdshdr *sh; if (init) { sh = (sdshdr*) malloc(sizeof *sh+initlen+1); } else { sh = (sdshdr*) calloc(sizeof *sh+initlen+1,1); } if (sh == NULL) return NULL; sh->len = initlen; sh->free = 0; if (initlen && init) memcpy(sh->buf, init, initlen); sh->buf[initlen] = '\0'; return (char*)sh->buf; } /* Create an empty (zero length) sds string. Even in this case the string * always has an implicit null term. */ sds sdsempty(void) { return sdsnewlen("",0); } /* Create a new sds string starting from a null termined C string. */ sds sdsnew(const char *init) { size_t initlen = (init == NULL) ? 0 : strlen(init); return sdsnewlen(init, initlen); } /* Duplicate an sds string. */ sds sdsdup(const sds s) { return sdsnewlen(s, sdslen(s)); } /* Free an sds string. No operation is performed if 's' is NULL. */ void sdsfree(sds s) { if (s == NULL) return; free(sds_start(s)); } /* Set the sds string length to the length as obtained with strlen(), so * considering as content only up to the first null term character. * * This function is useful when the sds string is hacked manually in some * way, like in the following example: * * s = sdsnew("foobar"); * s[2] = '\0'; * sdsupdatelen(s); * printf("%d\n", sdslen(s)); * * The output will be "2", but if we comment out the call to sdsupdatelen() * the output will be "6" as the string was modified but the logical length * remains 6 bytes. */ void sdsupdatelen(sds s) { if (s == NULL) return; sdshdr *sh = sds_start(s); size_t reallen = strlen(s); sh->free += (sh->len-reallen); sh->len = reallen; } /* Modify an sds string on-place to make it empty (zero length). * However all the existing buffer is not discarded but set as free space * so that next append operations will not require allocations up to the * number of bytes previously available. */ void sdsclear(sds s) { if (s == NULL) return; sdshdr *sh = sds_start(s); sh->free += sh->len; sh->len = 0; sh->buf[0] = '\0'; } /* Enlarge the free space at the end of the sds string so that the caller * is sure that after calling this function can overwrite up to addlen * bytes after the end of the string, plus one more byte for nul term. * * Note: this does not change the *length* of the sds string as returned * by sdslen(), but only the free buffer space we have. */ sds sdsMakeRoomFor(sds s, size_t addlen) { if (s == NULL) return NULL; sdshdr *sh, *newsh; size_t free = sdsavail(s); size_t len, newlen; if (free >= addlen) return s; len = sdslen(s); sh = sds_start(s); newlen = (len+addlen); if (newlen < SDS_MAX_PREALLOC) newlen *= 2; else newlen += SDS_MAX_PREALLOC; newsh = (sdshdr*) realloc(sh, sizeof *newsh+newlen+1); if (newsh == NULL) return NULL; newsh->free = newlen - len; return newsh->buf; } /* Reallocate the sds string so that it has no free space at the end. The * contained string remains not altered, but next concatenation operations * will require a reallocation. * * After the call, the passed sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. */ sds sdsRemoveFreeSpace(sds s) { if (s == NULL) return NULL; sdshdr *sh, *newsh; sh = sds_start(s); newsh = (sdshdr*) realloc(sh, sizeof *sh+sh->len+1); if (newsh == NULL) return NULL; newsh->free = 0; return newsh->buf; } /* Return the total size of the allocation of the specifed sds string, * including: * 1) The sds header before the pointer. * 2) The string. * 3) The free buffer at the end if any. * 4) The implicit null term. */ size_t sdsAllocSize(sds s) { if (s == NULL) return 0; sdshdr *sh = sds_start(s); return sizeof(*sh)+sh->len+sh->free+1; } /* Increment the sds length and decrements the left free space at the * end of the string according to 'incr'. Also set the null term * in the new end of the string. * * This function is used in order to fix the string length after the * user calls sdsMakeRoomFor(), writes something after the end of * the current string, and finally needs to set the new length. * * Note: it is possible to use a negative increment in order to * right-trim the string. * * Usage example: * * Using sdsIncrLen() and sdsMakeRoomFor() it is possible to mount the * following schema, to cat bytes coming from the kernel to the end of an * sds string without copying into an intermediate buffer: * * oldlen = sdslen(s); * s = sdsMakeRoomFor(s, BUFFER_SIZE); * nread = read(fd, s+oldlen, BUFFER_SIZE); * ... check for nread <= 0 and handle it ... * sdsIncrLen(s, nread); */ void sdsIncrLen(sds s, int incr) { if (s == NULL) return; sdshdr *sh = sds_start(s); if (incr >= 0) { size_t tmp = (size_t)(incr); assert(sh->free >= tmp); sh->len += tmp; sh->free -= tmp; } else { size_t tmp = (size_t)(-incr); assert(sh->len >= tmp); sh->len -= tmp; sh->free += tmp; } s[sh->len] = '\0'; } /* Grow the sds to have the specified length. Bytes that were not part of * the original length of the sds will be set to zero. * * if the specified length is smaller than the current length, no operation * is performed. */ sds sdsgrowzero(sds s, size_t len) { if (s == NULL) return NULL; sdshdr *sh = sds_start(s); size_t totlen, curlen = sh->len; if (len <= curlen) return s; s = sdsMakeRoomFor(s,len-curlen); if (s == NULL) return NULL; /* Make sure added region doesn't contain garbage */ sh = sds_start(s); memset(s+curlen,0,(len-curlen+1)); /* also set trailing \0 byte */ totlen = sh->len+sh->free; sh->len = len; sh->free = totlen-sh->len; return s; } /* Append the specified binary-safe string pointed by 't' of 'len' bytes to the * end of the specified sds string 's'. * * After the call, the passed sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. */ sds sdscatlen(sds s, const void *t, size_t len) { sdshdr *sh; size_t curlen = sdslen(s); s = sdsMakeRoomFor(s,len); if (s == NULL) return NULL; sh = sds_start(s); memcpy(s+curlen, t, len); sh->len = curlen+len; sh->free = sh->free-len; s[curlen+len] = '\0'; return s; } /* Append the specified null termianted C string to the sds string 's'. * * After the call, the passed sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. */ sds sdscat(sds s, const char *t) { return sdscatlen(s, t, strlen(t)); } /* Append the specified sds 't' to the existing sds 's'. * * After the call, the modified sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. */ sds sdscatsds(sds s, const sds t) { return sdscatlen(s, t, sdslen(t)); } /* Destructively modify the sds string 's' to hold the specified binary * safe string pointed by 't' of length 'len' bytes. */ sds sdscpylen(sds s, const char *t, size_t len) { if (s == NULL) return NULL; sdshdr *sh = sds_start(s); size_t totlen = sh->free+sh->len; if (totlen < len) { s = sdsMakeRoomFor(s,len-sh->len); if (s == NULL) return NULL; sh = sds_start(s); totlen = sh->free+sh->len; } memcpy(s, t, len); s[len] = '\0'; sh->len = len; sh->free = totlen-len; return s; } /* Like sdscpylen() but 't' must be a null-termined string so that the length * of the string is obtained with strlen(). */ sds sdscpy(sds s, const char *t) { return sdscpylen(s, t, strlen(t)); } /* Like sdscatpritf() but gets va_list instead of being variadic. */ sds sdscatvprintf(sds s, const char *fmt, va_list ap) { va_list cpy; char *buf, *t; size_t buflen = 16; while(1) { buf = (char*) malloc(buflen); if (buf == NULL) return NULL; buf[buflen-2] = '\0'; va_copy(cpy,ap); vsnprintf(buf, buflen, fmt, cpy); va_end(cpy); if (buf[buflen-2] != '\0') { free(buf); buflen *= 2; continue; } break; } t = sdscat(s, buf); free(buf); return t; } /* Append to the sds string 's' a string obtained using printf-alike format * specifier. * * After the call, the modified sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. * * Example: * * s = sdsempty("Sum is: "); * s = sdscatprintf(s,"%d+%d = %d",a,b,a+b). * * Often you need to create a string from scratch with the printf-alike * format. When this is the need, just use sdsempty() as the target string: * * s = sdscatprintf(sdsempty(), "... your format ...", args); */ sds sdscatprintf(sds s, const char *fmt, ...) { va_list ap; char *t; va_start(ap, fmt); t = sdscatvprintf(s,fmt,ap); va_end(ap); return t; } /* Remove the part of the string from left and from right composed just of * contiguous characters found in 'cset', that is a null terminted C string. * * After the call, the modified sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. * * Example: * * s = sdsnew("AA...AA.a.aa.aHello World :::"); * sdstrim(s,"aA. :"); * printf("%s\n", s); * * Output will be just "Hello World". */ void sdstrim(sds s, const char *cset) { if (s == NULL) return; sdshdr *sh = sds_start(s); char *start, *end, *sp, *ep; size_t len; sp = start = s; ep = end = s+sdslen(s)-1; while(sp <= end && strchr(cset, *sp)) sp++; while(ep > start && strchr(cset, *ep)) ep--; len = (sp > ep) ? 0 : (size_t)((ep-sp)+1); if (sh->buf != sp) memmove(sh->buf, sp, len); sh->buf[len] = '\0'; sh->free = sh->free+(sh->len-len); sh->len = len; } /* Turn the string into a smaller (or equal) string containing only the * substring specified by the 'start' and 'end' indexes. * * start and end can be negative, where -1 means the last character of the * string, -2 the penultimate character, and so forth. * * The interval is inclusive, so the start and end characters will be part * of the resulting string. * * The string is modified in-place. * * Example: * * s = sdsnew("Hello World"); * sdsrange(s,1,-1); => "ello World" */ void sdsrange(sds s, int start, int end) { sdshdr *sh = sds_start(s); size_t newlen, len = sdslen(s); if (len == 0) return; if (start < 0) { start = (int)len+start; if (start < 0) start = 0; } if (end < 0) { end = (int)len+end; if (end < -1) end = -1; } newlen = (start > end) ? 0 : (size_t)((end-start)+1); if (newlen != 0) { if (start >= (signed)len) { newlen = 0; } else if (end >= (signed)len) { end = (int)len-1; newlen = (start > end) ? 0 : (size_t)((end-start)+1); } } else { start = 0; } if (start && newlen) memmove(sh->buf, sh->buf+start, newlen); sh->buf[newlen] = 0; sh->free = sh->free+(sh->len-newlen); sh->len = newlen; } /* Apply tolower() to every character of the sds string 's'. */ void sdstolower(sds s) { size_t len = sdslen(s), j; for (j = 0; j < len; j++) s[j] = (char)tolower((unsigned char)s[j]); } /* Apply toupper() to every character of the sds string 's'. */ void sdstoupper(sds s) { size_t len = sdslen(s), j; for (j = 0; j < len; j++) s[j] = (char)toupper((unsigned char)s[j]); } /* Compare two sds strings s1 and s2 with memcmp(). * * Return value: * * 1 if s1 > s2. * -1 if s1 < s2. * 0 if s1 and s2 are exactly the same binary string. * * If two strings share exactly the same prefix, but one of the two has * additional characters, the longer string is considered to be greater than * the smaller one. */ int sdscmp(const sds s1, const sds s2) { size_t l1, l2, minlen; int cmp; l1 = sdslen(s1); l2 = sdslen(s2); minlen = (l1 < l2) ? l1 : l2; cmp = memcmp(s1,s2,minlen); if (cmp == 0) { int diff = (int)l1 - (int)l2; /* https://graphics.stanford.edu/~seander/bithacks.html#CopyIntegerSign */ return (diff > 0) - (diff < 0); } return cmp; } /* Split 's' with separator in 'sep'. An array * of sds strings is returned. *count will be set * by reference to the number of tokens returned. * * On out of memory, zero length string, zero length * separator, NULL is returned. * * Note that 'sep' is able to split a string using * a multi-character separator. For example * sdssplit("foo_-_bar","_-_"); will return two * elements "foo" and "bar". * * This version of the function is binary-safe but * requires length arguments. sdssplit() is just the * same function but for zero-terminated strings. */ sds *sdssplitlen(const char *s, int len, const char *sep, int seplen, int *count) { size_t elements = 0, slots = 5, start = 0, j; size_t len_, seplen_; sds *tokens; if (seplen < 1 || len < 0) return NULL; len_ = (size_t)len; seplen_ = (size_t)seplen; tokens = (sds*) malloc(sizeof(sds)*slots); if (tokens == NULL) return NULL; if (len_ == 0) { *count = 0; return tokens; } for (j = 0; j < (len_-(seplen_-1)); j++) { /* make sure there is room for the next element and the final one */ if (slots < elements+2) { sds *newtokens; slots *= 2; newtokens = (sds*) realloc(tokens,sizeof(sds)*slots); if (newtokens == NULL) goto cleanup; tokens = newtokens; } /* search the separator */ if ((seplen_ == 1 && *(s+j) == sep[0]) || (memcmp(s+j,sep,seplen_) == 0)) { tokens[elements] = sdsnewlen(s+start,j-start); if (tokens[elements] == NULL) goto cleanup; elements++; start = j+seplen_; j = j+seplen_-1; /* skip the separator */ } } /* Add the final element. We are sure there is room in the tokens array. */ tokens[elements] = sdsnewlen(s+start,len_-start); if (tokens[elements] == NULL) goto cleanup; elements++; *count = (int)elements; return tokens; cleanup: { size_t i; for (i = 0; i < elements; i++) sdsfree(tokens[i]); free(tokens); *count = 0; return NULL; } } /* Free the result returned by sdssplitlen(), or do nothing if 'tokens' is NULL. */ void sdsfreesplitres(sds *tokens, int count) { if (!tokens) return; while(count--) sdsfree(tokens[count]); free(tokens); } /* Create an sds string from a long long value. It is much faster than: * * sdscatprintf(sdsempty(),"%lld\n", value); */ sds sdsfromlonglong(long long value) { char buf[32], *p; unsigned long long v; v = (unsigned long long)((value < 0) ? (-value) : value); p = buf+31; /* point to the last character */ do { *p-- = '0'+(v%10); v /= 10; } while(v); if (value < 0) *p-- = '-'; p++; return sdsnewlen(p,(size_t)(32-(p-buf))); } /* Append to the sds string "s" an escaped string representation where * all the non-printable characters (tested with isprint()) are turned into * escapes in the form "\n\r\a...." or "\x". * * After the call, the modified sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. */ sds sdscatrepr(sds s, const char *p, size_t len) { s = sdscatlen(s,"\"",1); while(len--) { switch(*p) { case '\\': case '"': s = sdscatprintf(s,"\\%c",*p); break; case '\n': s = sdscatlen(s,"\\n",2); break; case '\r': s = sdscatlen(s,"\\r",2); break; case '\t': s = sdscatlen(s,"\\t",2); break; case '\a': s = sdscatlen(s,"\\a",2); break; case '\b': s = sdscatlen(s,"\\b",2); break; default: if (isprint((unsigned char)*p)) s = sdscatprintf(s,"%c",*p); else s = sdscatprintf(s,"\\x%02x",(unsigned char)*p); break; } p++; } return sdscatlen(s,"\"",1); } /* Helper function for sdssplitargs() that returns non zero if 'c' * is a valid hex digit. */ static int is_hex_digit(char c) { return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); } /* Helper function for sdssplitargs() that converts a hex digit into an * integer from 0 to 15 */ static int hex_digit_to_int(char c) { switch(c) { case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; case 'a': case 'A': return 10; case 'b': case 'B': return 11; case 'c': case 'C': return 12; case 'd': case 'D': return 13; case 'e': case 'E': return 14; case 'f': case 'F': return 15; default: return 0; } } /* Split a line into arguments, where every argument can be in the * following programming-language REPL-alike form: * * foo bar "newline are supported\n" and "\xff\x00otherstuff" * * The number of arguments is stored into *argc, and an array * of sds is returned. * * The caller should free the resulting array of sds strings with * sdsfreesplitres(). * * Note that sdscatrepr() is able to convert back a string into * a quoted string in the same format sdssplitargs() is able to parse. * * The function returns the allocated tokens on success, even when the * input string is empty, or NULL if the input contains unbalanced * quotes or closed quotes followed by non space characters * as in: "foo"bar or "foo' */ sds *sdssplitargs(const char *line, int *argc) { const char *p = line; char *current = NULL; char **vector = NULL; *argc = 0; while(1) { /* skip blanks */ while(*p && isspace((unsigned char)*p)) p++; if (*p) { /* get a token */ int inq=0; /* set to 1 if we are in "quotes" */ int insq=0; /* set to 1 if we are in 'single quotes' */ int done=0; if (current == NULL) current = sdsempty(); while(!done) { if (inq) { if (*p == '\\' && *(p+1) == 'x' && is_hex_digit(*(p+2)) && is_hex_digit(*(p+3))) { unsigned char byte; byte = (unsigned char)((hex_digit_to_int(*(p+2))*16)+ hex_digit_to_int(*(p+3))); current = sdscatlen(current,(char*)&byte,1); p += 3; } else if (*p == '\\' && *(p+1)) { char c; p++; switch(*p) { case 'n': c = '\n'; break; case 'r': c = '\r'; break; case 't': c = '\t'; break; case 'b': c = '\b'; break; case 'a': c = '\a'; break; default: c = *p; break; } current = sdscatlen(current,&c,1); } else if (*p == '"') { /* closing quote must be followed by a space or * nothing at all. */ if (*(p+1) && !isspace((unsigned char)*(p+1))) goto err; done=1; } else if (!*p) { /* unterminated quotes */ goto err; } else { current = sdscatlen(current,p,1); } } else if (insq) { if (*p == '\\' && *(p+1) == '\'') { p++; current = sdscatlen(current,"'",1); } else if (*p == '\'') { /* closing quote must be followed by a space or * nothing at all. */ if (*(p+1) && !isspace((unsigned char)*(p+1))) goto err; done=1; } else if (!*p) { /* unterminated quotes */ goto err; } else { current = sdscatlen(current,p,1); } } else { switch(*p) { case ' ': case '\n': case '\r': case '\t': case '\0': done=1; break; case '"': inq=1; break; case '\'': insq=1; break; default: current = sdscatlen(current,p,1); break; } } if (*p) p++; } /* add the token to the vector */ vector = (char**) realloc(vector,(size_t)((*argc)+1)*sizeof(char*)); vector[*argc] = current; (*argc)++; current = NULL; } else { /* Even on empty input string return something not NULL. */ if (vector == NULL) vector = (char**) malloc(sizeof(void*)); return vector; } } err: while((*argc)--) sdsfree(vector[*argc]); free(vector); if (current) sdsfree(current); *argc = 0; return NULL; } /* Modify the string substituting all the occurrences of the set of * characters specified in the 'from' string to the corresponding character * in the 'to' array. * * For instance: sdsmapchars(mystring, "ho", "01", 2) * will have the effect of turning the string "hello" into "0ell1". * * The function returns the sds string pointer, that is always the same * as the input pointer since no resize is needed. */ sds sdsmapchars(sds s, const char *from, const char *to, size_t setlen) { size_t j, i, l = sdslen(s); for (j = 0; j < l; j++) { for (i = 0; i < setlen; i++) { if (s[j] == from[i]) { s[j] = to[i]; break; } } } return s; } /* Join an array of C strings using the specified separator (also a C string). * Returns the result as an sds string. */ sds sdsjoin(char **argv, int argc, char *sep, size_t seplen) { sds join = sdsempty(); int j; for (j = 0; j < argc; j++) { join = sdscat(join, argv[j]); if (j != argc-1) join = sdscatlen(join,sep,seplen); } return join; } /* Like sdsjoin, but joins an array of SDS strings. */ sds sdsjoinsds(sds *argv, int argc, const char *sep, size_t seplen) { sds join = sdsempty(); int j; for (j = 0; j < argc; j++) { join = sdscatsds(join, argv[j]); if (j != argc-1) join = sdscatlen(join,sep,seplen); } return join; } #ifdef SDS_TEST_MAIN #include #include "testhelp.h" int main(void) { { sdshdr *sh; sds x = sdsnew("foo"), y; test_cond("Create a string and obtain the length", sdslen(x) == 3 && memcmp(x,"foo\0",4) == 0) sdsfree(x); x = sdsnewlen("foo",2); test_cond("Create a string with specified length", sdslen(x) == 2 && memcmp(x,"fo\0",3) == 0) x = sdscat(x,"bar"); test_cond("Strings concatenation", sdslen(x) == 5 && memcmp(x,"fobar\0",6) == 0); x = sdscpy(x,"a"); test_cond("sdscpy() against an originally longer string", sdslen(x) == 1 && memcmp(x,"a\0",2) == 0) x = sdscpy(x,"xyzxxxxxxxxxxyyyyyyyyyykkkkkkkkkk"); test_cond("sdscpy() against an originally shorter string", sdslen(x) == 33 && memcmp(x,"xyzxxxxxxxxxxyyyyyyyyyykkkkkkkkkk\0",33) == 0) sdsfree(x); x = sdscatprintf(sdsempty(),"%d",123); test_cond("sdscatprintf() seems working in the base case", sdslen(x) == 3 && memcmp(x,"123\0",4) ==0) sdsfree(x); x = sdsnew("xxciaoyyy"); sdstrim(x,"xy"); test_cond("sdstrim() correctly trims characters", sdslen(x) == 4 && memcmp(x,"ciao\0",5) == 0) y = sdsdup(x); sdsrange(y,1,1); test_cond("sdsrange(...,1,1)", sdslen(y) == 1 && memcmp(y,"i\0",2) == 0) sdsfree(y); y = sdsdup(x); sdsrange(y,1,-1); test_cond("sdsrange(...,1,-1)", sdslen(y) == 3 && memcmp(y,"iao\0",4) == 0) sdsfree(y); y = sdsdup(x); sdsrange(y,-2,-1); test_cond("sdsrange(...,-2,-1)", sdslen(y) == 2 && memcmp(y,"ao\0",3) == 0) sdsfree(y); y = sdsdup(x); sdsrange(y,2,1); test_cond("sdsrange(...,2,1)", sdslen(y) == 0 && memcmp(y,"\0",1) == 0) sdsfree(y); y = sdsdup(x); sdsrange(y,1,100); test_cond("sdsrange(...,1,100)", sdslen(y) == 3 && memcmp(y,"iao\0",4) == 0) sdsfree(y); y = sdsdup(x); sdsrange(y,100,100); test_cond("sdsrange(...,100,100)", sdslen(y) == 0 && memcmp(y,"\0",1) == 0) sdsfree(y); sdsfree(x); x = sdsnew("foo"); y = sdsnew("foa"); test_cond("sdscmp(foo,foa)", sdscmp(x,y) > 0) sdsfree(y); sdsfree(x); x = sdsnew("bar"); y = sdsnew("bar"); test_cond("sdscmp(bar,bar)", sdscmp(x,y) == 0) sdsfree(y); sdsfree(x); x = sdsnew("aar"); y = sdsnew("bar"); test_cond("sdscmp(bar,bar)", sdscmp(x,y) < 0) sdsfree(y); sdsfree(x); x = sdsnewlen("\a\n\0foo\r",7); y = sdscatrepr(sdsempty(),x,sdslen(x)); test_cond("sdscatrepr(...data...)", memcmp(y,"\"\\a\\n\\x00foo\\r\"",15) == 0) sdsfree(y); { size_t oldfree; sdsfree(x); x = sdsnew("0"); sh = sds_start(x); test_cond("sdsnew() free/len buffers", sh->len == 1 && sh->free == 0); x = sdsMakeRoomFor(x,1); sh = sds_start(x); test_cond("sdsMakeRoomFor()", sh->len == 1 && sh->free > 0); oldfree = sh->free; x[1] = '1'; sdsIncrLen(x,1); test_cond("sdsIncrLen() -- content", x[0] == '0' && x[1] == '1'); test_cond("sdsIncrLen() -- len", sh->len == 2); test_cond("sdsIncrLen() -- free", sh->free == oldfree-1); sdsfree(x); } x = sdsnew("0FoO1bar\n"); sdstolower(x); test_cond("sdstolower(...)", memcmp(x,"0foo1bar\n\0",10) == 0) sdsfree(x); x = sdsnew("0FoO1bar\n"); sdstoupper(x); test_cond("sdstoupper(...)", memcmp(x,"0FOO1BAR\n\0",10) == 0) sdsfree(x); } test_report() return 0; } #endif ttfautohint-1.8.1/lib/tablue.cin0000644000175000001440000000135513153174711016457 0ustar00wlusers00000000000000/* tablue.c */ /* * Copyright (C) 2013-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afblue.c' (2013-Aug-28) from FreeType */ #include "tatypes.h" const char ta_blue_strings[] = { @TA_BLUE_STRINGS_ARRAY@ }; /* stringsets are specific to styles */ const TA_Blue_StringRec ta_blue_stringsets[] = { @TA_BLUE_STRINGSETS_ARRAY@ }; /* end of tablue.c */ ttfautohint-1.8.1/lib/tablue.hin0000644000175000001440000000560313153174711016464 0ustar00wlusers00000000000000/* tablue.h */ /* * Copyright (C) 2013-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* originally file `afblue.h' (2013-Sep-11) from FreeType */ #ifndef TABLUE_H_ #define TABLUE_H_ /* an auxiliary macro to decode a UTF-8 character -- since we only use */ /* hard-coded, self-converted data, no error checking is performed */ #define GET_UTF8_CHAR(ch, p) \ do \ { \ ch = (unsigned char)*p++; \ if (ch >= 0x80) \ { \ FT_UInt len_; \ \ \ if (ch < 0xE0) \ { \ len_ = 1; \ ch &= 0x1F; \ } \ else if (ch < 0xF0) \ { \ len_ = 2; \ ch &= 0x0F; \ } \ else \ { \ len_ = 3;\ ch &= 0x07; \ } \ \ for (; len_ > 0; len_--) \ ch = (ch << 6) | (*p++ & 0x3F); \ } \ } while (0) /**************************************************************** * * BLUE STRINGS * ****************************************************************/ /* At the bottommost level, we define strings for finding blue zones. */ #define TA_BLUE_STRING_MAX_LEN @TA_BLUE_STRING_MAX_LEN@ /* The TA_Blue_String enumeration values are offsets into the */ /* `ta_blue_strings' array. */ typedef enum TA_Blue_String_ { @TA_BLUE_STRING_ENUM@ TA_BLUE_STRING_MAX /* do not remove */ } TA_Blue_String; extern const char ta_blue_strings[]; /**************************************************************** * * BLUE STRINGSETS * ****************************************************************/ /* The next level is to group blue strings into style-specific sets. */ /* Properties are specific to a writing system. We assume that a given */ /* blue string can't be used in more than a single writing system, which */ /* is a safe bet. */ #define TA_BLUE_PROPERTY_LATIN_TOP (1U << 0) /* must have value 1 */ #define TA_BLUE_PROPERTY_LATIN_SUB_TOP (1U << 1) #define TA_BLUE_PROPERTY_LATIN_NEUTRAL (1U << 2) #define TA_BLUE_PROPERTY_LATIN_X_HEIGHT (1U << 3) #define TA_BLUE_PROPERTY_LATIN_LONG (1U << 4) #define TA_BLUE_STRINGSET_MAX_LEN @TA_BLUE_STRINGSET_MAX_LEN@ /* The TA_Blue_Stringset enumeration values are offsets into the */ /* `ta_blue_stringsets' array. */ typedef enum TA_Blue_Stringset_ { @TA_BLUE_STRINGSET_ENUM@ TA_BLUE_STRINGSET_MAX /* do not remove */ } TA_Blue_Stringset; typedef struct TA_Blue_StringRec_ { TA_Blue_String string; FT_UShort properties; } TA_Blue_StringRec; extern const TA_Blue_StringRec ta_blue_stringsets[]; #endif /* TABLUE_H_ */ /* end of tablue.h */ ttfautohint-1.8.1/lib/tablue.dat0000644000175000001440000012444413153174711016463 0ustar00wlusers00000000000000// tablue.dat // // Auto-fitter data for blue strings. // // Copyright (C) 2013-2017 by Werner Lemberg. // // This file is part of the ttfautohint library, and may only be used, // modified, and distributed under the terms given in `COPYING'. By // continuing to use, modify, or distribute this file you indicate that you // have read `COPYING' and understand and accept it fully. // // The file `COPYING' mentioned in the previous paragraph is distributed // with the ttfautohint library. // originally file `afblue.dat' (2013-Sep-22) from FreeType */ // This file contains data specific to blue zones. It gets processed by // a script to simulate `jagged arrays', with enumeration values holding // offsets into the arrays. // // The format of the file is rather simple: A section starts with three // labels separated by whitespace and followed by a colon (everything in a // single line); the first label gives the name of the enumeration template, // the second the name of the array template, and the third the name of the // `maximum' template. The script then fills the corresponding templates // (indicated by `@' characters around the name). // // A section contains one or more data records. Each data record consists // of two or more lines. The first line holds the enumeration name, and the // remaining lines the corresponding array data. // // There are two possible representations for array data. // // - A string of characters or character clusters (for example, representing // Aksharas, Devanagari syllables) in UTF-8 encoding enclosed in double // quotes, using C syntax, where the elements are separated by spaces. // There can be only one string per line, thus the starting and ending // double quote must be the first and last character in the line, // respectively, ignoring whitespace before and after the string. If // there are multiple strings (in multiple lines), they are concatenated // to a single string. In the output, a string gets represented as a // series of singles bytes, followed by a zero byte. The enumeration // values simply hold byte offsets to the start of the corresponding // strings. // // For strings, the `maximum' template holds the maximum number of // non-space characters in all strings. // // - Data blocks enclosed in balanced braces, which get copied verbatim and // which can span multiple lines. The opening brace of a block must be // the first character of a line (ignoring whitespace), and the closing // brace the last (ignoring whitespace also). The script appends a comma // character after each block and counts the number of blocks to set the // enumeration values. // // For data blocks, the `maximum' template holds the maximum number of // array elements. // // A section can contain either strings only or data blocks only. // // A comment line starts with `//'; it gets removed. A preprocessor // directive line (using the standard syntax of `cpp') starts with `#' and // gets copied verbatim to both the enumeration and the array. Whitespace // outside of a string is insignificant. // // Preprocessor directives are ignored while the script computes maximum // values; this essentially means that the maximum values can easily be too // large. Given that the purpose of those values is to create local // fixed-size arrays at compile time for further processing of the blue zone // data, this isn't a problem. Note the the final zero byte of a string is // not counted. Note also that the count holds the number of UTF-8 encoded // characters, not bytes. // The blue zone string data, to be used in the blue stringsets below. TA_BLUE_STRING_ENUM TA_BLUE_STRINGS_ARRAY TA_BLUE_STRING_MAX_LEN: TA_BLUE_STRING_ADLAM_CAPITAL_TOP "𞤌 𞤅 𞤈 𞤠𞤔 𞤚" TA_BLUE_STRING_ADLAM_CAPITAL_BOTTOM "𞤂 𞤖" TA_BLUE_STRING_ADLAM_SMALL_TOP "𞤬 𞤮 𞤻 𞤼 𞤾" TA_BLUE_STRING_ADLAM_SMALL_BOTTOM "𞤤 𞤨 𞤩 𞤭 𞤴 𞤸 𞤺 𞥀" TA_BLUE_STRING_ARABIC_TOP "ا Ø¥ Ù„ Ùƒ Ø· ظ" TA_BLUE_STRING_ARABIC_BOTTOM "ت Ø« Ø· ظ Ùƒ" // We don't necessarily have access to medial forms via Unicode in case // Arabic presentational forms are missing. The only character that is // guaranteed to have the same vertical position with joining (this is, // non-isolated) forms is U+0640, ARABIC TATWEEL, which must join both // round and flat curves. TA_BLUE_STRING_ARABIC_JOIN "Ù€" TA_BLUE_STRING_ARMENIAN_CAPITAL_TOP "Ô± Õ„ Õ’ Õ Ô² Ô³ Ô´ Õ•" TA_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM "Õ’ Õˆ Ô´ Õƒ Õ‡ Õ Õ Õ•" TA_BLUE_STRING_ARMENIAN_SMALL_ASCENDER "Õ¥ Õ§ Õ« Õ´ Õ¾ Ö† Õ³" TA_BLUE_STRING_ARMENIAN_SMALL_TOP "Õ¡ Õµ Ö‚ Õ½ Õ£ Õ· Ö€ Ö…" TA_BLUE_STRING_ARMENIAN_SMALL_BOTTOM "Õ° Õ¸ Õ³ Õ¡ Õ¥ Õ® Õ½ Ö…" TA_BLUE_STRING_ARMENIAN_SMALL_DESCENDER "Õ¢ Õ¨ Õ« Õ¬ Õ² Õº Öƒ Ö" TA_BLUE_STRING_AVESTAN_TOP "𬀠ð¬ ð¬ ð¬›" TA_BLUE_STRING_AVESTAN_BOTTOM "𬀠ð¬" TA_BLUE_STRING_BAMUM_TOP "êš§ ꚨ ê›› ꛉ ê› ê›ˆ ꛫ ꛯ" TA_BLUE_STRING_BAMUM_BOTTOM "êš­ êš³ êš¶ ꛬ ꚢ êš½ ꛯ ꛲" TA_BLUE_STRING_BENGALI_BASE "অ ড ত ন ব ভ ল ক" TA_BLUE_STRING_BENGALI_TOP "ই ট ঠ ি à§€ ৈ à§—" TA_BLUE_STRING_BENGALI_HEAD "ও ঠড ত ন ব ল ক" TA_BLUE_STRING_BUHID_TOP "á áˆ" TA_BLUE_STRING_BUHID_LARGE "á… áŠ áŽ" TA_BLUE_STRING_BUHID_SMALL "ႠრበáŒ" TA_BLUE_STRING_BUHID_BOTTOM "ဠრᆠበዠá á‘" TA_BLUE_STRING_CANADIAN_SYLLABICS_TOP "á—œ á–´ á á’£ á‘« ᑎ ᔑ á—°" TA_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM "á—¶ á–µ á’§ რᑌ ᒠᔑ á—¢" TA_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP "á““ á“• á“€ á“‚ á“„ á•„ ᕆ ᘣ" TA_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM "ᕃ á“‚ á“€ á•‚ á“— ᓚ ᕆ ᘣ" TA_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP "᪠ᙆ ᣘ ᢠᒾ ᣗ ᔆ" TA_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM "ᙆ á—® á’» ហᔆ á’¡ á’¢ á“‘" TA_BLUE_STRING_CARIAN_TOP "ðŠ§ ðŠ« ðŠ¬ ðŠ­ ðŠ± ðŠº ðŠ¼ ðŠ¿" TA_BLUE_STRING_CARIAN_BOTTOM "ðŠ£ ðŠ§ ðŠ· ð‹€ ðŠ« ðŠ¸ ð‹‰" TA_BLUE_STRING_CHAKMA_TOP "𑄃 ð‘„… 𑄉 ð‘„™ ð‘„—" TA_BLUE_STRING_CHAKMA_BOTTOM "ð‘„… ð‘„› ð‘„ ð‘„— ð‘„“" TA_BLUE_STRING_CHAKMA_DESCENDER "𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢" TA_BLUE_STRING_CHEROKEE_CAPITAL "ᆠᎻ Ꭼ რᎤ ᣠᎦ á•" TA_BLUE_STRING_CHEROKEE_SMALL_ASCENDER "ê®’ ꮤ ê®¶ ê­´ ê­¾ ê®— ê® ê®¿" TA_BLUE_STRING_CHEROKEE_SMALL "ê®– ê­¼ ꮓ ê®  ꮳ ê­¶ ꮥ ê®»" TA_BLUE_STRING_CHEROKEE_SMALL_DESCENDER "á¸ ê® ê­¹ ê­»" TA_BLUE_STRING_COPTIC_CAPITAL_TOP "Ⲍ Ⲏ â²  Ⳟ Ⲟ ⲠⲤ Ⳋ" TA_BLUE_STRING_COPTIC_CAPITAL_BOTTOM "ⳠⳘ Ⳟ Ⲏ Ⲟ ⲠⳜ â²°" TA_BLUE_STRING_COPTIC_SMALL_TOP "ⲠⲠⲡ ⳟ ⲟ ⲑ â²¥ ⳋ" TA_BLUE_STRING_COPTIC_SMALL_BOTTOM "ⳑ â³™ ⳟ Ⲡⲟ ⲑ â³ â³’" TA_BLUE_STRING_CYPRIOT_TOP "ð  ð ™ ð ³ ð ± ð … ð “ ð £ ð ¦" TA_BLUE_STRING_CYPRIOT_BOTTOM "ð ƒ ð Š ð › ð £ ð ³ ð µ ð " TA_BLUE_STRING_CYPRIOT_SMALL "ð ˆ ð  ð –" TA_BLUE_STRING_CYRILLIC_CAPITAL_TOP "Б Ð’ Е П З О С Э" TA_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM "Б Ð’ Е Ш З О С Э" TA_BLUE_STRING_CYRILLIC_SMALL "Ñ… п н ш е з о Ñ" TA_BLUE_STRING_CYRILLIC_SMALL_DESCENDER "Ñ€ у Ñ„" TA_BLUE_STRING_DESERET_CAPITAL_TOP "ð‚ ð„ ð‹ ð— ð‘" TA_BLUE_STRING_DESERET_CAPITAL_BOTTOM "ð€ ð‚ ð„ ð— ð›" TA_BLUE_STRING_DESERET_SMALL_TOP "ðª ð¬ ð³ ð¿ ð¹" TA_BLUE_STRING_DESERET_SMALL_BOTTOM "ð¨ ðª ð¬ ð¿ ð‘ƒ" TA_BLUE_STRING_DEVANAGARI_BASE "क न म उ छ ट ठ ड" TA_BLUE_STRING_DEVANAGARI_TOP "ई ठओ औ ि ी ो ौ" // note that some fonts have extreme variation in the height of the // round head elements; for this reason we also define the `base' // blue zone, which must be always present TA_BLUE_STRING_DEVANAGARI_HEAD "क म अ आ थ ध भ श" TA_BLUE_STRING_DEVANAGARI_BOTTOM "ॠृ" TA_BLUE_STRING_ETHIOPIC_TOP "ሀ ሃ ዘ á ማ በ á‹‹ á‹" TA_BLUE_STRING_ETHIOPIC_BOTTOM "ለ ሠበ ዘ ሀ ሪ ዠጨ" TA_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP "გ დ ე ვ თ ი რღ" TA_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM "რზ მ ს შ ძ ხ პ" TA_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER "ს ხ ქ ზ მ შ ჩ წ" TA_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER "ე ვ ჟ ტ უ ფ ქ ყ" TA_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP "Ⴑ á‚§ Ⴙ Ⴜ Ⴄ á‚¥ Ⴓ Ⴚ" TA_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM "Ⴄ á‚¥ á‚§ Ⴈ Ⴆ Ⴑ Ⴊ á‚«" TA_BLUE_STRING_GEORGIAN_NUSKHURI_TOP "â´ â´— â´‚ â´„ â´… â´‡ â´” â´–" TA_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM "â´ˆ â´Œ â´– â´Ž â´ƒ â´† â´‹ â´¢" TA_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER "â´ â´‘ â´“ â´• â´™ â´› â´¡ â´£" TA_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER "â´„ â´… â´” â´• â´ â´‚ â´˜ â´" TA_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP "â°… â°” â°ª â°„ â°‚ â°Š â°« â°‹" TA_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM "â°… â°„ â°‚ â°ª â°ž â°¡ â°Š â°”" TA_BLUE_STRING_GLAGOLITIC_SMALL_TOP "â°µ ⱄ ⱚ â°´ â°² â°º â±› â°»" TA_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM "â°µ â°´ â°² ⱚ ⱎ ⱑ â°º ⱄ" TA_BLUE_STRING_GOTHIC_TOP "ðŒ² ðŒ¶ ð€ ð„ ðŒ´ ðƒ ðˆ ðŒ¾" TA_BLUE_STRING_GOTHIC_BOTTOM "ðŒ¶ ðŒ´ ðƒ ðˆ" TA_BLUE_STRING_GREEK_CAPITAL_TOP "Γ Î’ Ε Ζ Θ Ο Ω" TA_BLUE_STRING_GREEK_CAPITAL_BOTTOM "Î’ Δ Ζ Ξ Θ Ο" TA_BLUE_STRING_GREEK_SMALL_BETA_TOP "β θ δ ζ λ ξ" TA_BLUE_STRING_GREEK_SMALL "α ε ι ο Ï€ σ Ï„ ω" TA_BLUE_STRING_GREEK_SMALL_DESCENDER "β γ η μ Ï Ï† χ ψ" TA_BLUE_STRING_GUJARATI_TOP "ત ન ઋ ઌ છ ટ ર ૦" TA_BLUE_STRING_GUJARATI_BOTTOM "ખ ગ ઘ ઞ ઇ ઈ ઠ જ" TA_BLUE_STRING_GUJARATI_ASCENDER "ઈ ઊ િ à«€ લી શà«àªšàª¿ જિ સી" TA_BLUE_STRING_GUJARATI_DESCENDER "ૠૃ à«„ ખૠછૃ છૄ" TA_BLUE_STRING_GUJARATI_DIGIT_TOP "૦ à«§ ૨ à«© à«­" TA_BLUE_STRING_GURMUKHI_BASE "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ" TA_BLUE_STRING_GURMUKHI_HEAD "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ" TA_BLUE_STRING_GURMUKHI_TOP "ਇ ਈ ਉ ਠਓ ੳ ਿ à©€" TA_BLUE_STRING_GURMUKHI_BOTTOM "ਅ ਠਓ ਗ ਜ ਠ ਰ ਸ" TA_BLUE_STRING_GURMUKHI_DIGIT_TOP "੦ à©§ ੨ à©© à©­" TA_BLUE_STRING_HEBREW_TOP "ב ד ×” ×— ך ×› × ×¡" TA_BLUE_STRING_HEBREW_BOTTOM "ב ט ×› × ×¡ צ" TA_BLUE_STRING_HEBREW_DESCENDER "×§ ך ן ×£ ×¥" TA_BLUE_STRING_KANNADA_TOP "ಇ ಊ ಠಣ ಸಾ ನಾ ದಾ ರಾ" TA_BLUE_STRING_KANNADA_BOTTOM "ಅ ಉ ಎ ಲ ೦ ೨ ೬ à³­" TA_BLUE_STRING_KAYAH_LI_TOP "꤅ ê¤ ê¤ ê¤‹ ꤀ ê¤" TA_BLUE_STRING_KAYAH_LI_BOTTOM "꤈ ꤘ ꤀ ê¤ ê¤¢" TA_BLUE_STRING_KAYAH_LI_ASCENDER "ꤖ ꤡ" TA_BLUE_STRING_KAYAH_LI_DESCENDER "ꤑ ꤜ ꤞ" TA_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER "ꤑ꤬ ꤜ꤭ ꤔ꤬" TA_BLUE_STRING_KHMER_TOP "áž áž‘ áž“ áž§ áž© áž¶" TA_BLUE_STRING_KHMER_SUBSCRIPT_TOP "ក្ក ក្ហក្គ ក្áž" TA_BLUE_STRING_KHMER_BOTTOM "ហឃ áž… áž‹ áž” ម áž™ áž²" TA_BLUE_STRING_KHMER_DESCENDER "ážáŸ’ážš រៀ ឲ្យ អឿ" TA_BLUE_STRING_KHMER_LARGE_DESCENDER "ន្ážáŸ’រៃ ង្ážáŸ’áž™ ក្បៀ ច្រៀ ន្ážáž¿ ល្បឿ" TA_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP "á§  á§¡" TA_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM "á§¶ á§¹" TA_BLUE_STRING_LAO_TOP "າ ດ ອ ມ ລ ວ ຣ ງ" TA_BLUE_STRING_LAO_BOTTOM "າ ອ ບ ຠຣ ຮ ວ ຢ" TA_BLUE_STRING_LAO_ASCENDER "ປ ຢ ຟ àº" TA_BLUE_STRING_LAO_LARGE_ASCENDER "ໂ ໄ ໃ" TA_BLUE_STRING_LAO_DESCENDER "ງ ຊ ຖ ຽ ໆ ຯ" TA_BLUE_STRING_LATIN_CAPITAL_TOP "T H E Z O C Q S" TA_BLUE_STRING_LATIN_CAPITAL_BOTTOM "H E Z L O C U S" TA_BLUE_STRING_LATIN_SMALL_F_TOP "f i j k d b h" TA_BLUE_STRING_LATIN_SMALL_TOP "u v x z o e s c" TA_BLUE_STRING_LATIN_SMALL_BOTTOM "n r x z o e s c" TA_BLUE_STRING_LATIN_SMALL_DESCENDER "p q g j y" // we assume that both the subscript and superscript ranges // don't contain oldstyle digits (actually, most fonts probably // have digits only in those ranges) TA_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP "â‚€ ₃ â‚… ₇ ₈" TA_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM "â‚€ â‚ â‚‚ ₃ ₈" TA_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP "áµ¢ â±¼ â‚• â‚– â‚—" TA_BLUE_STRING_LATIN_SUBS_SMALL "â‚ â‚‘ â‚’ â‚“ â‚™ â‚› áµ¥ ᵤ áµ£" TA_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER "ᵦ áµ§ ᵨ ᵩ ₚ" TA_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP "Ⱐ³ âµ â· áµ€ á´´ á´± á´¼" TA_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM "Ⱐ¹ ² ³ á´± á´¸ á´¼ áµ" TA_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP "ᵇ ᵈ ᵠʰ ʲ á¶  â±" TA_BLUE_STRING_LATIN_SUPS_SMALL "ᵉ áµ’ ʳ Ë¢ Ë£ á¶œ á¶»" TA_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER "áµ– ʸ áµ" TA_BLUE_STRING_LISU_TOP "ê“¡ ê“§ ꓱ ê“¶ ê“© ꓚ ꓵ ꓳ" TA_BLUE_STRING_LISU_BOTTOM "ê“• ꓜ ꓞ ê“¡ ê“› ê“¢ ꓳ ê“´" TA_BLUE_STRING_MALAYALAM_TOP "à´’ à´Ÿ à´  à´± à´š à´ª à´šàµà´š à´ªàµà´ª" TA_BLUE_STRING_MALAYALAM_BOTTOM "à´Ÿ à´  à´§ à´¶ à´˜ à´š à´¥ à´²" TA_BLUE_STRING_MYANMAR_TOP "ဠဂ င ဒ ဠᥠአá‹" TA_BLUE_STRING_MYANMAR_BOTTOM "င ဎ ဒ ပ ဗ ဠአá‹" TA_BLUE_STRING_MYANMAR_ASCENDER "ဩ ြ á á ᆠါ ိ" TA_BLUE_STRING_MYANMAR_DESCENDER "ဉ ည ဥ ဩ ဨ á‚ á… á‰" TA_BLUE_STRING_NKO_TOP "ß ß‰ ß’ ߟ ß– ßœ ß  ߥ" TA_BLUE_STRING_NKO_BOTTOM "߀ ߘ ß¡ ß  ߥ" TA_BLUE_STRING_NKO_SMALL_TOP "ß ß› ß‹" TA_BLUE_STRING_NKO_SMALL_BOTTOM "ߎ ß ß› ß‹" TA_BLUE_STRING_OL_CHIKI "á±› ᱜ ᱠᱡ á±¢ á±¥" TA_BLUE_STRING_OLD_TURKIC_TOP "ð°— ð°˜ ð°§" TA_BLUE_STRING_OLD_TURKIC_BOTTOM "ð°‰ ð°— ð°¦ ð°§" TA_BLUE_STRING_OSAGE_CAPITAL_TOP "ð’¾ ð“ ð“’ ð““ ð’» ð“‚ ð’µ ð“†" TA_BLUE_STRING_OSAGE_CAPITAL_BOTTOM "ð’° ð“ 𓂠𒿠𓎠ð’¹" TA_BLUE_STRING_OSAGE_CAPITAL_DESCENDER "ð’¼ ð’½ ð’¾" TA_BLUE_STRING_OSAGE_SMALL_TOP "𓵠𓶠𓺠𓻠ð“ 𓣠𓪠ð“®" TA_BLUE_STRING_OSAGE_SMALL_BOTTOM "𓘠𓚠𓣠𓵠𓡠𓧠𓪠ð“¶" TA_BLUE_STRING_OSAGE_SMALL_ASCENDER "𓤠𓦠𓸠𓹠ð“›" TA_BLUE_STRING_OSAGE_SMALL_DESCENDER "𓤠𓥠ð“¦" TA_BLUE_STRING_OSMANYA_TOP "ð’† ð’‰ ð’ ð’’ ð’˜ ð’› ð’  ð’£" TA_BLUE_STRING_OSMANYA_BOTTOM "ð’€ ð’‚ ð’† ð’ˆ ð’Š ð’’ ð’  ð’©" TA_BLUE_STRING_SAURASHTRA_TOP "ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ê¢ ê¢›" TA_BLUE_STRING_SAURASHTRA_BOTTOM "ꢂ ꢨ ꢺ ꢤ ꢎ" TA_BLUE_STRING_SHAVIAN_TOP "ð‘• ð‘™" TA_BLUE_STRING_SHAVIAN_BOTTOM "𑔠𑖠𑗠𑹠ð‘»" TA_BLUE_STRING_SHAVIAN_DESCENDER "𑟠ð‘£" TA_BLUE_STRING_SHAVIAN_SMALL_TOP "𑱠𑲠𑳠𑴠𑸠𑺠ð‘¼" TA_BLUE_STRING_SHAVIAN_SMALL_BOTTOM "ð‘´ ð‘» ð‘¹" TA_BLUE_STRING_SINHALA_TOP "ඉ à¶š à¶ à¶³ à¶´ ය à¶½ à·†" TA_BLUE_STRING_SINHALA_BOTTOM "à¶‘ à¶” à¶ à¶¢ à¶§ à¶® à¶° à¶»" TA_BLUE_STRING_SINHALA_DESCENDER "ද à¶³ à¶‹ à¶½ à¶­à·– à¶­à·” à¶¶à·” දු" TA_BLUE_STRING_SUNDANESE_TOP "ᮋ ᮞ á®® ᮽ á®° ᮈ" TA_BLUE_STRING_SUNDANESE_BOTTOM "ᮄ á®” ᮕ á®— á®° ᮆ ᮈ ᮉ" TA_BLUE_STRING_SUNDANESE_DESCENDER "ᮼ ᳄" TA_BLUE_STRING_TAI_VIET_TOP "ꪆ ꪔ ꪒ ꪖ ꪫ" TA_BLUE_STRING_TAI_VIET_BOTTOM "ꪉ ꪫ ꪮ" TA_BLUE_STRING_TAMIL_TOP "உ à®’ ஓ à®± ஈ க à®™ ச" TA_BLUE_STRING_TAMIL_BOTTOM "க ச ல à®¶ உ à®™ ட ப" TA_BLUE_STRING_TELUGU_TOP "à°‡ à°Œ à°™ à°ž à°£ à°± ౯" TA_BLUE_STRING_TELUGU_BOTTOM "à°… à°• à°š à°° à°½ ౨ ౬" TA_BLUE_STRING_THAI_TOP "บ เ ๠อ ภา" TA_BLUE_STRING_THAI_BOTTOM "บ ป ษ ฯ อ ย ฮ" TA_BLUE_STRING_THAI_ASCENDER "ป ภฟ" TA_BLUE_STRING_THAI_LARGE_ASCENDER "โ ใ ไ" TA_BLUE_STRING_THAI_DESCENDER "ฎ ภฤ ฦ" TA_BLUE_STRING_THAI_LARGE_DESCENDER "ภà¸" TA_BLUE_STRING_THAI_DIGIT_TOP "๠๑ ๓" TA_BLUE_STRING_TIFINAGH "âµ” âµ™ âµ› ⵞ â´µ â´¼ â´¹ ⵎ" TA_BLUE_STRING_VAI_TOP "ê— ê˜– ꘙ ꘜ ê–œ ê– ê”… ê•¢" TA_BLUE_STRING_VAI_BOTTOM "ê— ê˜– ꘙ ê—ž ê”… ê•¢ ê–œ ꔆ" // The blue zone stringsets, as used in the script styles, cf. `tastyles.h'. // // The TA_BLUE_PROPERTY_XXX flags are defined in `tablue.h'; here some // explanations. // // A blue zone in general is defined by a reference and an overshoot line. // During the hinting process, all coordinate values between those two lines // are set equal to the reference value, provided that the blue zone is not // wider than 0.75 pixels (otherwise the blue zone gets ignored). All // entries must have `TA_BLUE_STRING_MAX' as the final line. // // During the glyph analysis, edges are sorted from bottom to top, and then // sequentially checked, edge by edge, against the blue zones in the order // given below. // // // latin auto-hinter // ----------------- // // Characters in a blue string are automatically classified as having a flat // (reference) or a round (overshoot) extremum. The blue zone is then set // up by the mean values of all flat extrema and all round extrema, // respectively. Only horizontal blue zones (i.e., adjusting vertical // coordinate values) are supported. // // Some scripts like Khmer need character composition to get all necessary // blue zones, since Unicode only provides an abstract data model that // doesn't represent all possible glyph shapes. For such character // clusters, the HarfBuzz library is used to convert them into the // corresponding glyphs. The largest glyph element (where `largest' can be // either `largest ascender' or `largest descender') then defines the // corresponding flat or round extremum. // // For the latin auto-hinter, the overshoot should be larger than the // reference for top zones, and vice versa for bottom zones. // // LATIN_TOP // Take the maximum flat and round coordinate values of the blue string // characters for computing the blue zone's reference and overshoot // values. // // If not set, take the minimum values. // // Mutually exclusive with `LATIN_SUB_TOP'. // // LATIN_SUB_TOP // For all glyphs of a character cluster, compute the maximum flat // and round coordinate values of each component, then take the // smallest of the maximum values. The idea is to get the top of // subscript glyphs, as used in Khmer, for example. Note that // this mechanism doesn't work for ordinary ligatures. // // This flags indicates a secondary blue zone: It gets removed if // there is a non-LATIN_SUB_TOP blue zone at the same coordinate // value (after scaling). // // Mutually exclusive with `LATIN_TOP'. // // LATIN_NEUTRAL // Ignore round extrema and define the blue zone with flat values only. // Both top and bottom of contours can match. This is useful for // scripts like Devanagari where vowel signs attach to the base // character and are implemented as components of composite glyphs. // // If not set, both round and flat extrema are taken into account. // Additionally, only the top or the bottom of a contour can match, // depending on the LATIN_TOP flag. // // Neutral blue zones should always follow non-neutral blue zones. // // LATIN_X_HEIGHT // Scale all glyphs vertically from the corresponding script to make the // reference line of this blue zone align on the grid. The scaling // takes place before all other blue zones get aligned to the grid. // Only one blue character string of a script style can have this flag. // // LATIN_LONG // Apply an additional constraint for blue zone values: Don't // necessarily use the extremum as-is but a segment of the topmost (or // bottommost) contour that is longer than a heuristic threshold, and // which is not too far away vertically from the real extremum. This // ensures that small bumps in the outline are ignored (for example, the // `vertical serifs' found in many Hebrew glyph designs). // // The segment must be at least EM/25 font units long, and the distance // to the extremum must be smaller than EM/4. TA_BLUE_STRINGSET_ENUM TA_BLUE_STRINGSETS_ARRAY TA_BLUE_STRINGSET_MAX_LEN: TA_BLUE_STRINGSET_ADLM { TA_BLUE_STRING_ADLAM_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_ADLAM_CAPITAL_BOTTOM, 0 } { TA_BLUE_STRING_ADLAM_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_ADLAM_SMALL_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_ARAB { TA_BLUE_STRING_ARABIC_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_ARABIC_BOTTOM, 0 } { TA_BLUE_STRING_ARABIC_JOIN, TA_BLUE_PROPERTY_LATIN_NEUTRAL } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_ARMN { TA_BLUE_STRING_ARMENIAN_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM, 0 } { TA_BLUE_STRING_ARMENIAN_SMALL_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_ARMENIAN_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_ARMENIAN_SMALL_BOTTOM, 0 } { TA_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_AVST { TA_BLUE_STRING_AVESTAN_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_AVESTAN_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_BAMU { TA_BLUE_STRING_BAMUM_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_BAMUM_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_BENG { TA_BLUE_STRING_BENGALI_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_BENGALI_HEAD, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_BENGALI_BASE, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_NEUTRAL | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_BENGALI_BASE, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_BUHD { TA_BLUE_STRING_BUHID_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_BUHID_LARGE, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_BUHID_SMALL, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_BUHID_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_CAKM { TA_BLUE_STRING_CHAKMA_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_CHAKMA_BOTTOM, 0 } { TA_BLUE_STRING_CHAKMA_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_CANS { TA_BLUE_STRING_CANADIAN_SYLLABICS_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 } { TA_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 } { TA_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_CARI { TA_BLUE_STRING_CARIAN_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_CARIAN_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_CHER { TA_BLUE_STRING_CHEROKEE_CAPITAL, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_CHEROKEE_CAPITAL, 0 } { TA_BLUE_STRING_CHEROKEE_SMALL_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_CHEROKEE_SMALL, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_CHEROKEE_SMALL, 0 } { TA_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_COPT { TA_BLUE_STRING_COPTIC_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_COPTIC_CAPITAL_BOTTOM, 0 } { TA_BLUE_STRING_COPTIC_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_COPTIC_SMALL_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_CPRT { TA_BLUE_STRING_CYPRIOT_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_CYPRIOT_BOTTOM, 0 } { TA_BLUE_STRING_CYPRIOT_SMALL, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_CYPRIOT_SMALL, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_CYRL { TA_BLUE_STRING_CYRILLIC_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0 } { TA_BLUE_STRING_CYRILLIC_SMALL, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_CYRILLIC_SMALL, 0 } { TA_BLUE_STRING_CYRILLIC_SMALL_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_DEVA { TA_BLUE_STRING_DEVANAGARI_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_DEVANAGARI_HEAD, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_DEVANAGARI_BASE, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_NEUTRAL | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_DEVANAGARI_BASE, 0 } { TA_BLUE_STRING_DEVANAGARI_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_DSRT { TA_BLUE_STRING_DESERET_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_DESERET_CAPITAL_BOTTOM, 0 } { TA_BLUE_STRING_DESERET_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_DESERET_SMALL_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_ETHI { TA_BLUE_STRING_ETHIOPIC_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_ETHIOPIC_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } // blue zones for Mtavruli are missing (not yet defined in Unicode) TA_BLUE_STRINGSET_GEOR { TA_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM, 0 } { TA_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_GEOK { TA_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0 } { TA_BLUE_STRING_GEORGIAN_NUSKHURI_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM, 0 } { TA_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_GLAG { TA_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM, 0 } { TA_BLUE_STRING_GLAGOLITIC_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_GOTH { TA_BLUE_STRING_GOTHIC_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_GOTHIC_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_GREK { TA_BLUE_STRING_GREEK_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_GREEK_CAPITAL_BOTTOM, 0 } { TA_BLUE_STRING_GREEK_SMALL_BETA_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_GREEK_SMALL, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_GREEK_SMALL, 0 } { TA_BLUE_STRING_GREEK_SMALL_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_GUJR { TA_BLUE_STRING_GUJARATI_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_GUJARATI_BOTTOM, 0 } { TA_BLUE_STRING_GUJARATI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_GUJARATI_DESCENDER, 0 } { TA_BLUE_STRING_GUJARATI_DIGIT_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_GURU { TA_BLUE_STRING_GURMUKHI_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_GURMUKHI_HEAD, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_GURMUKHI_BASE, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_NEUTRAL | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_GURMUKHI_BOTTOM, 0 } { TA_BLUE_STRING_GURMUKHI_DIGIT_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_HEBR { TA_BLUE_STRING_HEBREW_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_LONG } { TA_BLUE_STRING_HEBREW_BOTTOM, 0 } { TA_BLUE_STRING_HEBREW_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_KALI { TA_BLUE_STRING_KAYAH_LI_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_KAYAH_LI_BOTTOM, 0 } { TA_BLUE_STRING_KAYAH_LI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_KAYAH_LI_DESCENDER, 0 } { TA_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_KNDA { TA_BLUE_STRING_KANNADA_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_KANNADA_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_KHMR { TA_BLUE_STRING_KHMER_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_KHMER_SUBSCRIPT_TOP, TA_BLUE_PROPERTY_LATIN_SUB_TOP } { TA_BLUE_STRING_KHMER_BOTTOM, 0 } { TA_BLUE_STRING_KHMER_DESCENDER, 0 } { TA_BLUE_STRING_KHMER_LARGE_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_KHMS { TA_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_LAO { TA_BLUE_STRING_LAO_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_LAO_BOTTOM, 0 } { TA_BLUE_STRING_LAO_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_LAO_LARGE_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_LAO_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_LATN { TA_BLUE_STRING_LATIN_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_LATIN_CAPITAL_BOTTOM, 0 } { TA_BLUE_STRING_LATIN_SMALL_F_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_LATIN_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_LATIN_SMALL_BOTTOM, 0 } { TA_BLUE_STRING_LATIN_SMALL_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_LATB { TA_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM, 0 } { TA_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_LATIN_SUBS_SMALL, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_LATIN_SUBS_SMALL, 0 } { TA_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_LATP { TA_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM, 0 } { TA_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_LATIN_SUPS_SMALL, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_LATIN_SUPS_SMALL, 0 } { TA_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_LISU { TA_BLUE_STRING_LISU_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_LISU_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_MLYM { TA_BLUE_STRING_MALAYALAM_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_MALAYALAM_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_MYMR { TA_BLUE_STRING_MYANMAR_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_MYANMAR_BOTTOM, 0 } { TA_BLUE_STRING_MYANMAR_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_MYANMAR_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_NKOO { TA_BLUE_STRING_NKO_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_NKO_BOTTOM, 0 } { TA_BLUE_STRING_NKO_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_NKO_SMALL_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_NONE { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_OLCK { TA_BLUE_STRING_OL_CHIKI, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_OL_CHIKI, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_ORKH { TA_BLUE_STRING_OLD_TURKIC_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_OLD_TURKIC_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_OSGE { TA_BLUE_STRING_OSAGE_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_OSAGE_CAPITAL_BOTTOM, 0 } { TA_BLUE_STRING_OSAGE_CAPITAL_DESCENDER, 0 } { TA_BLUE_STRING_OSAGE_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_OSAGE_SMALL_BOTTOM, 0 } { TA_BLUE_STRING_OSAGE_SMALL_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_OSAGE_SMALL_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_OSMA { TA_BLUE_STRING_OSMANYA_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_OSMANYA_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_SAUR { TA_BLUE_STRING_SAURASHTRA_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_SAURASHTRA_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_SHAW { TA_BLUE_STRING_SHAVIAN_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_SHAVIAN_BOTTOM, 0 } { TA_BLUE_STRING_SHAVIAN_DESCENDER, 0 } { TA_BLUE_STRING_SHAVIAN_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_SHAVIAN_SMALL_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_SINH { TA_BLUE_STRING_SINHALA_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_SINHALA_BOTTOM, 0 } { TA_BLUE_STRING_SINHALA_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_SUND { TA_BLUE_STRING_SUNDANESE_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_SUNDANESE_BOTTOM, 0 } { TA_BLUE_STRING_SUNDANESE_DESCENDER, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_TAML { TA_BLUE_STRING_TAMIL_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_TAMIL_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_TAVT { TA_BLUE_STRING_TAI_VIET_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_TAI_VIET_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_TELU { TA_BLUE_STRING_TELUGU_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_TELUGU_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_THAI { TA_BLUE_STRING_THAI_TOP, TA_BLUE_PROPERTY_LATIN_TOP | TA_BLUE_PROPERTY_LATIN_X_HEIGHT } { TA_BLUE_STRING_THAI_BOTTOM, 0 } { TA_BLUE_STRING_THAI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_THAI_LARGE_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_THAI_DESCENDER, 0 } { TA_BLUE_STRING_THAI_LARGE_DESCENDER, 0 } { TA_BLUE_STRING_THAI_DIGIT_TOP, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_TFNG { TA_BLUE_STRING_TIFINAGH, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_TIFINAGH, 0 } { TA_BLUE_STRING_MAX, 0 } TA_BLUE_STRINGSET_VAII { TA_BLUE_STRING_VAI_TOP, TA_BLUE_PROPERTY_LATIN_TOP } { TA_BLUE_STRING_VAI_BOTTOM, 0 } { TA_BLUE_STRING_MAX, 0 } // END ttfautohint-1.8.1/lib/tacontrol.flex0000644000175000001440000002016313211544051017364 0ustar00wlusers00000000000000/* tacontrol.flex */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* * lexical analyzer for parsing ttfautohint control instructions * * Lexing errors are indicated by setting `context->error' to an appropriate * value; fatal lexer errors return token `INTERNAL_FLEX_ERROR'. */ /* you should use flex version >= 2.5.39 to avoid various buglets */ /* that don't have work-arounds */ %option outfile="tacontrol-flex.c" %option header-file="tacontrol-flex.h" %option batch %option bison-bridge %option bison-locations %option never-interactive %option noinput %option nounput %option noyyalloc %option noyyfree %option noyyrealloc %option noyywrap %option reentrant %option yylineno %top { #include "config.h" } %{ #include #include #include "ta.h" #include "tacontrol-bison.h" /* option `yylineno' resets `yycolumn' to 0 after a newline */ /* (since version 2.5.30, March 2003) before the next token gets read; */ /* note we want both line number and column start with value 1 */ #define YY_USER_ACTION \ yylloc->first_line = yylineno + 1; \ yylloc->last_line = yylineno + 1; \ yylloc->first_column = yycolumn; \ yylloc->last_column = yycolumn + (int)yyleng - 1; \ yycolumn += yyleng; #define YY_EXTRA_TYPE Control_Context* #define YY_FATAL_ERROR(msg) TA_control_scanner_fatal_error(msg, yyscanner) /* by default, `yylex' simply calls `exit' (via YY_FATAL_ERROR) */ /* in case of a (more or less) fatal error -- */ /* this is bad for a library, thus we use `longjmp' to catch this, */ /* together with a proper handler for YY_FATAL_ERROR */ #define YY_USER_INIT \ do \ { \ if (setjmp(yyextra->jump_buffer) != 0) \ { \ /* error and error message in `context' already stored by */ \ /* `TA_control_scanner_fatal_error' */ \ return INTERNAL_FLEX_ERROR; \ } \ } while (0) /* this macro works around flex bug to suppress a compilation warning, */ /* cf. https://sourceforge.net/p/flex/bugs/115 */ #define YY_EXIT_FAILURE ((void)yyscanner, 2) #define NAME_ASSIGN \ do \ { \ yylval->name = strdup(yytext); \ if (!yylval->name) \ yyextra->error = TA_Err_Control_Allocation_Error; \ } while (0) void TA_control_scanner_fatal_error(const char* msg, yyscan_t yyscanner); %} %% (?x: [ \t\f]+ ) { /* skip whitespace */ } (?x: ( "\n" | ";" )+ ) { /* end of entry */ return EOE; } <> { /* we want an EOE token at end of file, too */ if (!yyextra->eof) { yyextra->eof = 1; return EOE; } else yyterminate(); } (?x: ( "\\\n" )+ ) { /* skip escaped newline */ } (?x: "#" [^\n]* ) { /* skip line comment */ } (?x: [0+-] ) { /* values `0' and `-' need special treatment for number ranges */ return yytext[0]; } (?x: [1-9] [0-9]* | "0" [xX] [0-9a-fA-F]+ | "0" [0-7]+ ) { /* we don't support localized formats like a thousands separator */ errno = 0; yylval->integer = strtol(yytext, NULL, 0); if (errno == ERANGE) { /* overflow or underflow */ yyextra->error = TA_Err_Control_Overflow; } return INTEGER; } (?x: [0-9]* "." [0-9]+ | [0-9]+ "." [0-9]* ) { /* we don't support exponents, */ /* and we don't support localized formats like using `,' instead of `.' */ errno = 0; yylval->real = strtod(yytext, NULL); if (yylval->real != 0 && errno == ERANGE) { /* overflow */ yyextra->error = TA_Err_Control_Overflow; } return REAL; } (?x: [@,()*] ) { /* delimiters, wildcard */ return yytext[0]; } (?x: "point" | "p" ) { NAME_ASSIGN; return POINT; } (?x: "touch" | "t" ) { NAME_ASSIGN; return TOUCH; } (?x: "xshift" | "x" ) { NAME_ASSIGN; return XSHIFT; } (?x: "yshift" | "y" ) { NAME_ASSIGN; return YSHIFT; } (?x: "left" | "l" ) { NAME_ASSIGN; return LEFT; } (?x: "right" | "r" ) { NAME_ASSIGN; return RIGHT; } (?x: "nodir" | "n" ) { NAME_ASSIGN; return NODIR; } (?x: "width" | "w" ) { NAME_ASSIGN; return WIDTH; } (?x: [A-Za-z._] [A-Za-z0-9._]* ) { NAME_ASSIGN; return NAME; } (?x: . ) { /* invalid input */ yylval->character = yytext[0]; return INVALID_CHARACTER; } %% /* the following two routines set `context->error' */ void* yyalloc(yy_size_t size, yyscan_t yyscanner) { YY_EXTRA_TYPE context; void* p = malloc(size); if (!p && yyscanner) { context = yyget_extra(yyscanner); context->error = TA_Err_Control_Allocation_Error; } return p; } void* yyrealloc(void* ptr, yy_size_t size, yyscan_t yyscanner) { YY_EXTRA_TYPE context; void* p = realloc(ptr, size); if (!p && yyscanner) { context = yyget_extra(yyscanner); context->error = TA_Err_Control_Allocation_Error; } return p; } /* we reimplement this routine also to avoid a compiler warning, */ /* cf. https://sourceforge.net/p/flex/bugs/115 */ void yyfree(void* ptr, yyscan_t yyscanner) { (void)yyscanner; free(ptr); } void TA_control_scanner_fatal_error(const char* msg, yyscan_t yyscanner) { YY_EXTRA_TYPE context = yyget_extra(yyscanner); /* allocation routines set a different error value */ if (!context->error) context->error = TA_Err_Control_Flex_Error; strncpy(context->errmsg, msg, sizeof (context->errmsg)); longjmp(context->jump_buffer, 1); /* the next line, which we never reach, suppresses a warning about */ /* `yy_fatal_error' defined but not used */ yy_fatal_error(msg, yyscanner); } void TA_control_scanner_init(Control_Context* context, FONT* font) { int flex_error; yyscan_t scanner; YY_BUFFER_STATE b; /* this function sets `errno' in case of error */ flex_error = yylex_init(&scanner); if (flex_error && errno == ENOMEM) { context->error = FT_Err_Out_Of_Memory; context->errmsg[0] = '\0'; return; } /* initialize some context fields */ context->font = font; context->error = TA_Err_Ok; context->result = NULL; context->scanner = scanner; context->eof = 0; yyset_extra(context, scanner); /* by default, `yy_scan_bytes' simply calls `exit' */ /* (via YY_FATAL_ERROR) in case of a (more or less) fatal error -- */ /* this is bad for a library, thus we use `longjmp' to catch this, */ /* together with a proper handler for YY_FATAL_ERROR */ if (setjmp(context->jump_buffer) != 0) { /* error and error message in `context' already stored by */ /* `TA_control_scanner_fatal_error' */ return; } b = yy_scan_bytes(font->control_buf, font->control_len, scanner); /* flex bug: these two fields are not initialized, */ /* causing zillions of valgrind errors; see */ /* https://sourceforge.net/p/flex/bugs/180 */ b->yy_bs_lineno = 0; b->yy_bs_column = 0; } void TA_control_scanner_done(Control_Context* context) { yylex_destroy(context->scanner); } #if 0 const char* input = "# Test\n" "\n" "# 0 a p 1-3 x 0.3 y -0.2 @ 20-30; \\\n" "0 exclam p 2-4 x 0.7 y -0.4 @ 6,7,9,10,11; \\\n" "0 a p 2 x 0.5 @ 23-25"; int main(void) { TA_Error error; int retval = 1; FONT font; Control_Context context; YYSTYPE yylval_param; YYLTYPE yylloc_param; /* we only need the control instructions buffer */ font.control_buf = (char*)input; font.control_len = strlen(input); TA_control_scanner_init(&context, &font); if (context.error) goto Exit; yyset_debug(1, context.scanner); while (yylex(&yylval_param, &yylloc_param, context.scanner)) { if (context.error) goto Exit; } retval = 0; Exit: TA_control_scanner_done(&context); return retval; } #endif /* end of tacontrol.flex */ ttfautohint-1.8.1/lib/tacontrol.bison0000644000175000001440000006324613211544152017553 0ustar00wlusers00000000000000/* tacontrol.bison */ /* * Copyright (C) 2014-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* * grammar for parsing ttfautohint control instructions * * Parsing errors that essentially belong to the lexing stage are handled * with `store_error_data'; in case the lexer detects an error, it returns * the right token type but sets `context->error'. Syntax errors and fatal * lexer errors (token `INTERNAL_FLEX_ERROR') are handled with * `TA_control_error'. */ /* * Edsko de Vries's article `Writing a Reentrant Parser with Flex and Bison' * (http://www.phpcompiler.org/articles/reentrantparser.html) * was extremely helpful in writing this code. */ %require "2.5" /* we use named references */ %output "tacontrol-bison.c" %defines "tacontrol-bison.h" %define api.pure %error-verbose %expect 7 %glr-parser %lex-param { void* scanner } %locations %name-prefix "TA_control_" %parse-param { Control_Context* context } %code requires { #include "ta.h" #include "tashaper.h" /* we don't change the name prefix of flex functions */ #define TA_control_lex yylex } %union { char character; Control_Type type; long integer; char* name; number_range* range; double real; Control* control; } %{ #include #include "tacontrol-flex.h" void TA_control_error(YYLTYPE *locp, Control_Context* context, char const* msg); void store_error_data(const YYLTYPE *locp, Control_Context* context, TA_Error error); /* calls to `yylex' in the generated bison code use `scanner' directly */ #define scanner context->scanner %} /* INVALID_CHARACTER and INTERNAL_FLEX_ERROR are flex errors */ %token EOE %token INTEGER "integer number" %token INTERNAL_FLEX_ERROR "internal flex error" %token INVALID_CHARACTER "invalid character" %token LEFT "left" %token NAME "glyph name" %token NODIR "no direction" %token POINT "point" %token REAL "real number" %token RIGHT "right" %token TOUCH "touch" %token WIDTH "width" %token XSHIFT "x shift" %token YSHIFT "y shift" %type entry %type font_idx %type glyph_idx %type glyph_idx_range %type glyph_idx_range_elem %type glyph_idx_range_elems %type glyph_idx_set %type glyph_name %type glyph_name_ %type input %type integer %type left_right %type left_right_ %type point_touch %type point_touch_ %type left_limited %type no_dir %type number_set %type offset %type ppem_set %type range %type range_elem %type range_elems %type real %type right_limited %type script_feature %type shift %type signed_integer %type unlimited %type width_elem %type width_elems %type width_set %type wildcard_script_feature %type x_shift %type y_shift %destructor { TA_control_free($$); } %destructor { number_set_free($$); } %printer { fprintf(yyoutput, "`%ld'", $$); } %printer { fprintf(yyoutput, "`%s'", $$); } %printer { fprintf(yyoutput, "`%g'", $$); } %printer { char* s; number_range* nr; nr = number_set_reverse($$); s = number_set_show(nr, -1, -1); (void)number_set_reverse(nr); if (s) { fprintf(yyoutput, "`%s'", s); free(s); } else fprintf(yyoutput, "allocation error"); } %printer { fprintf(yyoutput, "`%c'", $$); } INVALID_CHARACTER %% /* `number_range' list elements are stored in reversed order; */ /* the call to `TA_control_new' fixes this */ /* `Control' list elements are stored in reversed order, too; */ /* this gets fixed by an explicit call to `TA_control_reverse' */ start: input { context->result = TA_control_reverse($input); } ; input[result]: /* empty */ { $result = NULL; } | input[left] entry { $result = TA_control_prepend($left, $entry); } ; entry: EOE { $entry = NULL; } | font_idx glyph_idx point_touch number_set x_shift y_shift ppem_set EOE { $entry = TA_control_new($point_touch, $font_idx, $glyph_idx, $number_set, $x_shift, $y_shift, $ppem_set, @$.first_line); if (!$entry) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } | font_idx glyph_idx left_right number_set EOE { $entry = TA_control_new($left_right, $font_idx, $glyph_idx, $number_set, 0, 0, NULL, @$.first_line); if (!$entry) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } | font_idx glyph_idx left_right number_set '(' offset[left] ',' offset[right] ')' EOE { $entry = TA_control_new($left_right, $font_idx, $glyph_idx, $number_set, $left, $right, NULL, @$.first_line); if (!$entry) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } | font_idx glyph_idx no_dir number_set EOE { $entry = TA_control_new($no_dir, $font_idx, $glyph_idx, $number_set, 0, 0, NULL, @$.first_line); if (!$entry) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } | font_idx script_feature glyph_idx_set EOE { $entry = TA_control_new(Control_Script_Feature_Glyphs, $font_idx, $script_feature, $glyph_idx_set, 0, 0, NULL, @$.first_line); if (!$entry) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } | font_idx wildcard_script_feature width_set EOE { $entry = TA_control_new(Control_Script_Feature_Widths, $font_idx, $wildcard_script_feature, $width_set, 0, 0, NULL, @$.first_line); if (!$entry) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } ; font_idx: /* empty */ { $font_idx = 0; context->font_idx = $font_idx; } | integer { $font_idx = $integer; if ($font_idx >= context->font->num_sfnts) { store_error_data(&@$, context, TA_Err_Control_Invalid_Font_Index); YYABORT; } context->font_idx = $font_idx; } ; glyph_idx: integer { FT_Face face = context->font->sfnts[context->font_idx].face; $glyph_idx = $integer; if ($glyph_idx >= face->num_glyphs) { store_error_data(&@$, context, TA_Err_Control_Invalid_Glyph_Index); YYABORT; } context->glyph_idx = $glyph_idx; } | glyph_name { FT_Face face = context->font->sfnts[context->font_idx].face; /* explicitly compare with `.notdef' */ /* since `FT_Get_Name_Index' returns glyph index 0 */ /* for both this glyph name and invalid ones */ if (!strcmp($glyph_name, ".notdef")) $glyph_idx = 0; else { $glyph_idx = (long)FT_Get_Name_Index(face, $glyph_name); if ($glyph_idx == 0) $glyph_idx = -1; } free($glyph_name); if ($glyph_idx < 0) { store_error_data(&@$, context, TA_Err_Control_Invalid_Glyph_Name); YYABORT; } context->glyph_idx = $glyph_idx; } ; glyph_name: glyph_name_ { /* `$glyph_name_' was allocated in the lexer */ if (context->error) { /* lexing error */ store_error_data(&@$, context, context->error); YYABORT; } $glyph_name = $glyph_name_; } ; glyph_name_: LEFT | NAME | NODIR | POINT | RIGHT | TOUCH | WIDTH | XSHIFT | YSHIFT ; point_touch: point_touch_ { FT_Error error; FT_Face face = context->font->sfnts[context->font_idx].face; int num_points; error = FT_Load_Glyph(face, (FT_UInt)context->glyph_idx, FT_LOAD_NO_SCALE); if (error) { store_error_data(&@$, context, TA_Err_Control_Invalid_Glyph); YYABORT; } num_points = face->glyph->outline.n_points; context->number_set_min = 0; context->number_set_max = num_points - 1; $point_touch = $point_touch_; } ; point_touch_: POINT { $point_touch_ = Control_Delta_after_IUP; free($POINT); } | TOUCH { $point_touch_ = Control_Delta_before_IUP; free($TOUCH); } ; left_right: left_right_ { FT_Error error; FT_Face face = context->font->sfnts[context->font_idx].face; int num_points; error = FT_Load_Glyph(face, (FT_UInt)context->glyph_idx, FT_LOAD_NO_SCALE); if (error) { store_error_data(&@$, context, TA_Err_Control_Invalid_Glyph); YYABORT; } num_points = face->glyph->outline.n_points; context->number_set_min = 0; context->number_set_max = num_points - 1; $left_right = $left_right_; } ; left_right_: LEFT { $left_right_ = Control_Single_Point_Segment_Left; free($LEFT); } | RIGHT { $left_right_ = Control_Single_Point_Segment_Right; free($RIGHT); } ; no_dir: NODIR { FT_Error error; FT_Face face = context->font->sfnts[context->font_idx].face; int num_points; error = FT_Load_Glyph(face, (FT_UInt)context->glyph_idx, FT_LOAD_NO_SCALE); if (error) { store_error_data(&@$, context, TA_Err_Control_Invalid_Glyph); YYABORT; } num_points = face->glyph->outline.n_points; context->number_set_min = 0; context->number_set_max = num_points - 1; $no_dir = Control_Single_Point_Segment_None; free($NODIR); } ; wildcard_script_feature: script_feature { $wildcard_script_feature = $script_feature; } | '*' glyph_name[feature] { size_t i; size_t feature_idx = 0; char feature_name[5]; feature_name[4] = '\0'; for (i = 0; i < feature_tags_size; i++) { hb_tag_to_string(feature_tags[i], feature_name); if (!strcmp($feature, feature_name)) { feature_idx = i; break; } } free($feature); if (i == feature_tags_size) { store_error_data(&@2, context, TA_Err_Control_Invalid_Feature); YYABORT; } /* simply use negative values for features applied to all scripts */ $wildcard_script_feature = -(long)feature_idx; } script_feature: glyph_name[script] glyph_name[feature] { long ss; size_t i, j; size_t script_idx = 0; size_t feature_idx = 0; char feature_name[5]; for (i = 0; i < script_names_size; i++) { if (!strcmp($script, script_names[i])) { script_idx = i; break; } } feature_name[4] = '\0'; for (j = 0; j < feature_tags_size; j++) { hb_tag_to_string(feature_tags[j], feature_name); if (!strcmp($feature, feature_name)) { feature_idx = j; break; } } free($script); free($feature); if (i == script_names_size) { store_error_data(&@1, context, TA_Err_Control_Invalid_Script); YYABORT; } if (j == feature_tags_size) { store_error_data(&@2, context, TA_Err_Control_Invalid_Feature); YYABORT; } for (ss = 0; ta_style_classes[ss]; ss++) { TA_StyleClass style_class = ta_style_classes[ss]; if (script_idx == style_class->script && feature_idx == style_class->coverage) { $script_feature = ss; break; } } if (!ta_style_classes[ss]) { store_error_data(&@$, context, TA_Err_Control_Invalid_Style); YYABORT; } } ; x_shift: /* empty */ { $x_shift = 0; } | XSHIFT shift { $x_shift = $shift; free($XSHIFT); } ; y_shift: /* empty */ { $y_shift = 0; } | YSHIFT shift { $y_shift = $shift; free($YSHIFT); } ; shift: real { if ($real < CONTROL_DELTA_SHIFT_MIN || $real > CONTROL_DELTA_SHIFT_MAX) { store_error_data(&@$, context, TA_Err_Control_Invalid_Shift); YYABORT; } $shift = $real; } ; offset: signed_integer { if ($signed_integer < SHRT_MIN || $signed_integer > SHRT_MAX) { store_error_data(&@$, context, TA_Err_Control_Invalid_Offset); YYABORT; } $offset = $signed_integer; } ; ppem_set: '@' { context->number_set_min = CONTROL_DELTA_PPEM_MIN; context->number_set_max = CONTROL_DELTA_PPEM_MAX; } number_set { $ppem_set = $number_set; } ; integer: '0' { $integer = 0; } | INTEGER { if (context->error) { /* lexing error */ store_error_data(&@$, context, context->error); YYABORT; } $integer = $INTEGER; } ; signed_integer: integer { $signed_integer = $integer; } | '+' integer { $signed_integer = $integer; } | '-' integer { $signed_integer = -$integer; } ; real: signed_integer { $real = $signed_integer; } | REAL { if (context->error) { /* lexing error */ store_error_data(&@$, context, context->error); YYABORT; } $real = $REAL; } | '+' REAL { $real = $REAL; } | '-' REAL { $real = -$REAL; } ; number_set: unlimited { $number_set = $unlimited; } | right_limited { $number_set = $right_limited; } | left_limited { $number_set = $left_limited; } | range_elems { $number_set = $range_elems; } | right_limited ',' range_elems { $number_set = number_set_prepend($right_limited, $range_elems); if ($number_set == NUMBERSET_NOT_ASCENDING) { number_set_free($right_limited); number_set_free($range_elems); store_error_data(&@3, context, TA_Err_Control_Ranges_Not_Ascending); YYABORT; } if ($number_set == NUMBERSET_OVERLAPPING_RANGES) { number_set_free($right_limited); number_set_free($range_elems); store_error_data(&@3, context, TA_Err_Control_Overlapping_Ranges); YYABORT; } } | range_elems ',' left_limited { $number_set = number_set_prepend($range_elems, $left_limited); if ($number_set == NUMBERSET_NOT_ASCENDING) { number_set_free($range_elems); number_set_free($left_limited); store_error_data(&@3, context, TA_Err_Control_Ranges_Not_Ascending); YYABORT; } if ($number_set == NUMBERSET_OVERLAPPING_RANGES) { number_set_free($range_elems); number_set_free($left_limited); store_error_data(&@3, context, TA_Err_Control_Overlapping_Ranges); YYABORT; } } ; unlimited: '-' { $unlimited = number_set_new(context->number_set_min, context->number_set_max, context->number_set_min, context->number_set_max); /* range of `$unlimited' is always valid */ if ($unlimited == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } ; right_limited: '-' integer { $right_limited = number_set_new(context->number_set_min, (int)$integer, context->number_set_min, context->number_set_max); if ($right_limited == NUMBERSET_INVALID_RANGE) { store_error_data(&@$, context, TA_Err_Control_Invalid_Range); YYABORT; } if ($right_limited == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } ; left_limited: integer '-' { $left_limited = number_set_new((int)$integer, context->number_set_max, context->number_set_min, context->number_set_max); if ($left_limited == NUMBERSET_INVALID_RANGE) { store_error_data(&@$, context, TA_Err_Control_Invalid_Range); YYABORT; } if ($left_limited == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } ; range_elems[result]: range_elem { $result = $range_elem; } | range_elems[left] ',' range_elem { $result = number_set_prepend($left, $range_elem); if ($result == NUMBERSET_NOT_ASCENDING) { number_set_free($left); number_set_free($range_elem); store_error_data(&@3, context, TA_Err_Control_Ranges_Not_Ascending); YYABORT; } if ($result == NUMBERSET_OVERLAPPING_RANGES) { number_set_free($left); number_set_free($range_elem); store_error_data(&@3, context, TA_Err_Control_Overlapping_Ranges); YYABORT; } } ; range_elem: integer { $range_elem = number_set_new((int)$integer, (int)$integer, context->number_set_min, context->number_set_max); if ($range_elem == NUMBERSET_INVALID_RANGE) { store_error_data(&@$, context, TA_Err_Control_Invalid_Range); YYABORT; } if ($range_elem == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } | range { $range_elem = $range; } ; range: integer[left] '-' integer[right] { $range = number_set_new((int)$left, (int)$right, context->number_set_min, context->number_set_max); if ($range == NUMBERSET_INVALID_RANGE) { store_error_data(&@$, context, TA_Err_Control_Invalid_Range); YYABORT; } if ($range == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } ; glyph_idx_set: '@' { FT_Face face = context->font->sfnts[context->font_idx].face; context->number_set_min = 0; context->number_set_max = (int)(face->num_glyphs - 1); } glyph_idx_range_elems { $glyph_idx_set = $glyph_idx_range_elems; } ; glyph_idx_range_elems[result]: glyph_idx_range_elem { $result = $glyph_idx_range_elem; } | glyph_idx_range_elems[left] ',' glyph_idx_range_elem { /* for glyph_idx_set, ascending order is not enforced */ $result = number_set_insert($left, $glyph_idx_range_elem); if ($result == NUMBERSET_OVERLAPPING_RANGES) { number_set_free($left); number_set_free($glyph_idx_range_elem); store_error_data(&@3, context, TA_Err_Control_Overlapping_Ranges); YYABORT; } } ; glyph_idx_range_elem: glyph_idx { $glyph_idx_range_elem = number_set_new((int)$glyph_idx, (int)$glyph_idx, context->number_set_min, context->number_set_max); /* glyph_idx is always valid */ /* since its value was already tested for validity */ if ($glyph_idx_range_elem == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } | glyph_idx_range { $glyph_idx_range_elem = $glyph_idx_range; } ; glyph_idx_range: glyph_idx[left] '-' glyph_idx[right] { $glyph_idx_range = number_set_new((int)$left, (int)$right, context->number_set_min, context->number_set_max); /* glyph range is always valid */ /* since both `glyph_idx' values were already tested for validity */ if ($glyph_idx_range == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } ; width_set: WIDTH { context->number_set_min = 1; context->number_set_max = 65535; context->number_set_num_elems = 0; } width_elems { $width_set = $width_elems; } ; width_elems[result]: width_elem { context->number_set_num_elems++; $result = $width_elem; } | width_elems[left] ',' width_elem { context->number_set_num_elems++; if (context->number_set_num_elems > TA_LATIN_MAX_WIDTHS) { number_set_free($left); number_set_free($width_elem); store_error_data(&@3, context, TA_Err_Control_Too_Much_Widths); YYABORT; } /* for width_set, the order of entries is preserved */ $result = number_set_prepend_unsorted($left, $width_elem); } ; width_elem: integer { $width_elem = number_set_new($integer, $integer, context->number_set_min, context->number_set_max); if ($width_elem == NUMBERSET_ALLOCATION_ERROR) { store_error_data(&@$, context, TA_Err_Control_Allocation_Error); YYABORT; } } ; %% void TA_control_error(YYLTYPE *locp, Control_Context* context, char const* msg) { /* if `error' is already set, we have a fatal flex error */ if (!context->error) { context->error = TA_Err_Control_Syntax_Error; strncpy(context->errmsg, msg, sizeof (context->errmsg)); } context->errline_num = locp->first_line; context->errline_pos_left = locp->first_column; context->errline_pos_right = locp->last_column; } void store_error_data(const YYLTYPE *locp, Control_Context* context, TA_Error error) { context->error = error; context->errline_num = locp->first_line; context->errline_pos_left = locp->first_column; context->errline_pos_right = locp->last_column; context->errmsg[0] = '\0'; } #if 0 /* * compile this test program with * * make libnumberset.la * * flex -d tacontrol.flex \ * && bison -t tacontrol.bison \ * && gcc -g3 -O0 \ * -Wall -W \ * -I.. \ * -I. \ * -I/usr/local/include/freetype2 \ * -I/usr/local/include/harfbuzz \ * -L.libs \ * -o tacontrol-bison \ * tacontrol-bison.c \ * tacontrol-flex.c \ * tacontrol.c \ * -lfreetype \ * -lnumberset */ const char* input = "# Test\n" "\n" "# 0 a p 1-3 x 0.3 y -0.2 @ 20-30; \\\n" "0 exclam p 2-4 x 0.7 y -0.4 @ 6,7,9,10,11; \\\n" "a p / 12 x 0.5 @ 23-25"; #undef scanner int main(int argc, char** argv) { TA_Error error; int bison_error; int retval = 1; Control_Context context; FONT font; SFNT sfnts[1]; FT_Library library; FT_Face face; const char* filename; if (argc != 2) { fprintf(stderr, "need an outline font as an argument\n"); goto Exit0; } filename = argv[1]; error = FT_Init_FreeType(&library); if (error) { fprintf(stderr, "error while initializing FreeType library (0x%X)\n", error); goto Exit0; } error = FT_New_Face(library, filename, 0, &face); if (error) { fprintf(stderr, "error while loading font `%s' (0x%X)\n", filename, error); goto Exit1; } /* we construct a minumum `Font' object */ sfnts[0].face = face; font.num_sfnts = 1; font.sfnts = sfnts; font.control_buf = (char*)input; font.control_len = strlen(input); TA_control_debug = 1; TA_control_scanner_init(&context, &font); if (context.error) goto Exit2; bison_error = TA_control_parse(&context); if (bison_error) goto Exit3; retval = 0; Exit3: TA_control_scanner_done(&context); TA_control_free(context.result); Exit2: FT_Done_Face(face); Exit1: FT_Done_FreeType(library); Exit0: return retval; } #endif /* end of tacontrol.bison */ ttfautohint-1.8.1/lib/ttfautohint.pc.in0000644000175000001440000000044613213430132017777 0ustar00wlusers00000000000000prefix=%prefix% exec_prefix=%exec_prefix% includedir=%includedir% libdir=%libdir% Name: ttfautohint URL: https://freetype.org Description: Automatic font hinting library Version: %version% Requires: Requires.private: freetype2 harfbuzz Cflags: -I${includedir} Libs: -L${libdir} -lttfautohint ttfautohint-1.8.1/lib/numberset-test.c0000644000175000001440000004673713205545000017641 0ustar00wlusers00000000000000/* numberset-test.c */ /* * Copyright (C) 2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ /* * Compile with * * $(CC) $(CFLAGS) \ * -I.. -I. \ * -o numberset-test numberset-test.c numberset.c sds.c * * after configuration. The resulting binary aborts with an assertion * message in case of an error, otherwise it produces no output. * * If you want to check the code coverage with `gcov', add compiler options * * -fprofile-arcs -ftest-coverage * * Except memory allocation errors, all code in `numberset.c' is covered. */ #include #include #include #include #include #include #include int main(void) { number_range* list; number_range* nr; number_range* nr1; number_range* nr2; number_range* nr3; number_set_iter iter; char* s; char* p; const char* r; const char* in; const char* out; int i; int wraps[] = {-1, 4, 9, 20}; size_t num_wraps = sizeof(wraps) / sizeof(int); /* number_set_new */ /* -------------- */ /* start < min */ nr = number_set_new(1, 1, 2, 2); assert(nr == NUMBERSET_INVALID_RANGE); /* end < max */ nr = number_set_new(2, 2, 1, 1); assert(nr == NUMBERSET_INVALID_RANGE); /* min < 0, max < 0 */ nr = number_set_new(1, 2, -1, -1); assert(nr < NUMBERSET_INVALID_WRAP_RANGE); free(nr); /* min > max, start > end */ nr = number_set_new(2, 1, 2, 1); assert(nr < NUMBERSET_INVALID_WRAP_RANGE); free(nr); /* wrap_range_check_wraps */ /* ---------------------- */ /* !wraps */ i = wrap_range_check_wraps(0, NULL); assert(i == 1); /* num_wraps < 2 */ i = wrap_range_check_wraps(1, wraps); assert(i == 1); /* wraps[0] < -1 */ { int wraps_bad1[] = { -2, 2 }; size_t num_wraps_bad1 = sizeof(wraps_bad1) / sizeof(int); i = wrap_range_check_wraps(num_wraps_bad1, wraps_bad1); assert(i == 1); } /* wraps[n] >= wraps[n+1] */ { int wraps_bad2[] = { 1, 1 }; size_t num_wraps_bad2 = sizeof(wraps_bad2) / sizeof(int); i = wrap_range_check_wraps(num_wraps_bad2, wraps_bad2); assert(i == 1); } /* wraps ok */ i = wrap_range_check_wraps(num_wraps, wraps); assert(i == 0); /* wrap_range_new */ /* -------------- */ /* num_wraps < 2 */ nr = wrap_range_new(0, 0, 0, NULL); assert(nr == NUMBERSET_INVALID_WRAP_RANGE); /* start < wraps[n] < end */ nr = wrap_range_new(2, 6, num_wraps, wraps); assert(nr == NUMBERSET_INVALID_WRAP_RANGE); /* start <= end */ nr = wrap_range_new(1, 1, num_wraps, wraps); assert(nr < NUMBERSET_INVALID_WRAP_RANGE); free(nr); /* start > end */ nr = wrap_range_new(2, 1, num_wraps, wraps); assert(nr < NUMBERSET_INVALID_WRAP_RANGE); free(nr); /* number_set_show */ /* --------------- */ /* single integer normal range, min < 0, max < 0 */ nr = number_set_new(1, 1, 1, 1); s = number_set_show(nr, -1, -1); assert(!strcmp(s, "1")); free(nr); free(s); /* one normal full range, max < min */ nr = number_set_new(1, 2, 1, 2); s = number_set_show(nr, 2, 1); assert(!strcmp(s, "-")); free(nr); free(s); /* one wrap-around range */ nr = wrap_range_new(2, 1, num_wraps, wraps); s = number_set_show(nr, 0, 0); assert(!strcmp(s, "2-1")); free(nr); free(s); /* two normal ranges, start > max */ nr = number_set_new(1, 2, 1, 2); nr1 = number_set_new(4, 5, 4, 5); nr->next = nr1; s = number_set_show(nr, 0, 3); assert(!strcmp(s, "1-2")); free(nr); free(nr1); free(s); /* two normal ranges, start > max */ nr = number_set_new(1, 2, 1, 2); nr1 = number_set_new(4, 5, 4, 5); nr->next = nr1; s = number_set_show(nr, 3, 6); assert(!strcmp(s, "4-5")); free(nr); free(nr1); free(s); /* three ranges */ nr = number_set_new(1, 2, 1, 2); nr1 = number_set_new(4, 5, 4, 5); nr2 = number_set_new(7, 8, 7, 8); nr->next = nr1; nr1->next = nr2; s = number_set_show(nr, 1, 8); assert(!strcmp(s, "-2, 4-5, 7-")); free(nr); free(nr1); free(nr2); free(s); /* number_set_prepend */ /* ------------------ */ /* !element */ list = number_set_prepend(NUMBERSET_INVALID_CHARACTER, NULL); assert(list == NUMBERSET_INVALID_CHARACTER); /* !list */ list = number_set_prepend(NULL, NUMBERSET_INVALID_CHARACTER); assert(list == NUMBERSET_INVALID_CHARACTER); /* different range types */ nr = number_set_new(1, 2, 1, 2); nr1 = wrap_range_new(3, 4, num_wraps, wraps); list = number_set_prepend(nr, nr1); assert(list == NUMBERSET_INVALID_RANGE); free(nr); free(nr1); /* ranges not ascending */ nr = number_set_new(3, 4, 3, 4); nr1 = number_set_new(1, 2, 1, 2); list = number_set_prepend(nr, nr1); assert(list == NUMBERSET_NOT_ASCENDING); free(nr); free(nr1); /* ranges overlapping */ nr = number_set_new(1, 5, 1, 5); nr1 = number_set_new(1, 2, 1, 2); list = number_set_prepend(nr, nr1); assert(list == NUMBERSET_OVERLAPPING_RANGES); free(nr); free(nr1); /* merge adjacent ranges */ nr = number_set_new(1, 2, 1, 2); nr1 = number_set_new(3, 4, 3, 4); list = number_set_prepend(nr, nr1); s = number_set_show(list, -1, -1); assert(!strcmp(s, "1-4")); number_set_free(list); free(s); /* normal prepend */ nr = number_set_new(1, 2, 1, 2); nr1 = number_set_new(4, 5, 4, 5); list = number_set_prepend(nr, nr1); s = number_set_show(list, -1, -1); assert(!strcmp(s, "4-5, 1-2")); number_set_free(list); free(s); /* wrap_range_prepend */ /* ------------------ */ /* !element */ list = wrap_range_prepend(NUMBERSET_INVALID_CHARACTER, NULL); assert(list == NUMBERSET_INVALID_CHARACTER); /* !list */ list = wrap_range_prepend(NULL, NUMBERSET_INVALID_CHARACTER); assert(list == NUMBERSET_INVALID_CHARACTER); /* different range types */ nr = number_set_new(1, 2, 1, 2); nr1 = wrap_range_new(3, 4, num_wraps, wraps); list = wrap_range_prepend(nr, nr1); assert(list == NUMBERSET_INVALID_RANGE); free(nr); free(nr1); /* ranges not ascending (different intervals) */ nr = wrap_range_new(10, 12, num_wraps, wraps); nr1 = wrap_range_new(1, 2, num_wraps, wraps); list = wrap_range_prepend(nr, nr1); assert(list == NUMBERSET_NOT_ASCENDING); free(nr); free(nr1); /* appending to real wrap-around range */ nr = wrap_range_new(12, 10, num_wraps, wraps); nr1 = wrap_range_new(13, 14, num_wraps, wraps); list = wrap_range_prepend(nr, nr1); assert(list == NUMBERSET_OVERLAPPING_RANGES); free(nr); free(nr1); /* ranges not ascending (same interval) */ nr = wrap_range_new(12, 14, num_wraps, wraps); nr1 = wrap_range_new(10, 11, num_wraps, wraps); list = wrap_range_prepend(nr, nr1); assert(list == NUMBERSET_NOT_ASCENDING); free(nr); free(nr1); /* ranges overlapping (same interval) */ nr = wrap_range_new(1, 3, num_wraps, wraps); nr1 = wrap_range_new(2, 4, num_wraps, wraps); list = wrap_range_prepend(nr, nr1); assert(list == NUMBERSET_OVERLAPPING_RANGES); free(nr); free(nr1); /* ranges overlapping (with real wrap-around range) */ nr = wrap_range_new(12, 13, num_wraps, wraps); nr1 = wrap_range_new(15, 16, num_wraps, wraps); nr2 = wrap_range_new(17, 18, num_wraps, wraps); nr3 = wrap_range_new(19, 14, num_wraps, wraps); list = wrap_range_prepend(nr, nr1); list = wrap_range_prepend(list, nr2); list = wrap_range_prepend(list, nr3); assert(list == NUMBERSET_OVERLAPPING_RANGES); free(nr); free(nr1); free(nr2); free(nr3); /* normal prepend (different intervals) */ nr = wrap_range_new(1, 2, num_wraps, wraps); nr1 = wrap_range_new(18, 20, num_wraps, wraps); list = wrap_range_prepend(nr, nr1); s = number_set_show(list, -1, -1); assert(!strcmp(s, "18-20, 1-2")); number_set_free(list); free(s); /* normal prepend (same interval) */ nr = wrap_range_new(11, 12, num_wraps, wraps); nr1 = wrap_range_new(18, 20, num_wraps, wraps); list = wrap_range_prepend(nr, nr1); s = number_set_show(list, -1, -1); assert(!strcmp(s, "18-20, 11-12")); number_set_free(list); free(s); /* prepend real wrap-around range (different intervals) */ nr = wrap_range_new(3, 4, num_wraps, wraps); nr1 = wrap_range_new(6, 7, num_wraps, wraps); nr2 = wrap_range_new(12, 13, num_wraps, wraps); nr3 = wrap_range_new(19, 14, num_wraps, wraps); list = wrap_range_prepend(nr, nr1); list = wrap_range_prepend(list, nr2); list = wrap_range_prepend(list, nr3); s = number_set_show(list, -1, -1); assert(!strcmp(s, "19-14, 12-13, 6-7, 3-4")); number_set_free(list); free(s); /* number_set_insert */ /* ----------------- */ /* !element */ list = number_set_insert(NUMBERSET_INVALID_CHARACTER, NULL); assert(list == NUMBERSET_INVALID_CHARACTER); /* !list */ list = number_set_insert(NULL, NUMBERSET_INVALID_CHARACTER); assert(list == NUMBERSET_INVALID_CHARACTER); /* different range types */ nr = number_set_new(1, 2, 1, 2); nr1 = wrap_range_new(3, 4, num_wraps, wraps); list = number_set_insert(nr, nr1); assert(list == NUMBERSET_INVALID_RANGE); free(nr); free(nr1); /* ranges overlapping */ nr = number_set_new(1, 5, 1, 5); nr1 = number_set_new(1, 2, 1, 2); list = number_set_insert(nr, nr1); assert(list == NUMBERSET_OVERLAPPING_RANGES); free(nr); free(nr1); /* merge adjacent ranges (right) */ nr = number_set_new(1, 2, 1, 2); nr1 = number_set_new(8, 9, 8, 9); nr2 = number_set_new(3, 4, 3, 4); list = number_set_insert(nr, nr1); list = number_set_insert(list, nr2); s = number_set_show(list, -1, -1); assert(!strcmp(s, "8-9, 1-4")); number_set_free(list); free(s); /* merge adjacent ranges (left) */ nr = number_set_new(1, 2, 1, 2); nr1 = number_set_new(8, 9, 8, 9); nr2 = number_set_new(6, 7, 6, 7); list = number_set_insert(nr, nr1); list = number_set_insert(list, nr2); s = number_set_show(list, -1, -1); assert(!strcmp(s, "6-9, 1-2")); number_set_free(list); free(s); /* merge adjacent ranges (middle) */ nr = number_set_new(1, 2, 1, 2); nr1 = number_set_new(5, 6, 5, 6); nr2 = number_set_new(3, 4, 3, 4); list = number_set_insert(nr, nr1); list = number_set_insert(list, nr2); s = number_set_show(list, -1, -1); assert(!strcmp(s, "1-6")); number_set_free(list); free(s); /* prepend */ nr = number_set_new(4, 5, 4, 5); nr1 = number_set_new(1, 2, 1, 2); list = number_set_insert(nr, nr1); s = number_set_show(list, -1, -1); assert(!strcmp(s, "4-5, 1-2")); number_set_free(list); free(s); /* normal insert */ nr = number_set_new(1, 2, 1, 2); nr1 = number_set_new(7, 8, 7, 8); nr2 = number_set_new(4, 5, 4, 5); list = number_set_insert(nr, nr1); list = number_set_insert(list, nr2); s = number_set_show(list, -1, -1); assert(!strcmp(s, "7-8, 4-5, 1-2")); number_set_free(list); free(s); /* wrap_range_insert */ /* ----------------- */ /* !element */ list = wrap_range_insert(NUMBERSET_INVALID_CHARACTER, NULL); assert(list == NUMBERSET_INVALID_CHARACTER); /* !list */ list = wrap_range_insert(NULL, NUMBERSET_INVALID_CHARACTER); assert(list == NUMBERSET_INVALID_CHARACTER); /* different range types */ nr = number_set_new(1, 2, 1, 2); nr1 = wrap_range_new(3, 4, num_wraps, wraps); list = wrap_range_insert(nr, nr1); assert(list == NUMBERSET_INVALID_RANGE); free(nr); free(nr1); /* ranges overlapping */ nr = wrap_range_new(1, 4, num_wraps, wraps); nr1 = wrap_range_new(1, 2, num_wraps, wraps); list = wrap_range_insert(nr, nr1); assert(list == NUMBERSET_OVERLAPPING_RANGES); free(nr); free(nr1); /* appending real wrap-around range to real wrap-around range */ /* (same interval) */ nr = wrap_range_new(12, 10, num_wraps, wraps); nr1 = wrap_range_new(13, 11, num_wraps, wraps); list = wrap_range_insert(nr, nr1); assert(list == NUMBERSET_OVERLAPPING_RANGES); free(nr); free(nr1); /* appending to real wrap-around range (same interval) */ nr = wrap_range_new(12, 10, num_wraps, wraps); nr1 = wrap_range_new(13, 14, num_wraps, wraps); list = wrap_range_insert(nr, nr1); assert(list == NUMBERSET_OVERLAPPING_RANGES); free(nr); free(nr1); /* prepend (different intervals) */ nr = wrap_range_new(14, 17, num_wraps, wraps); nr1 = wrap_range_new(1, 2, num_wraps, wraps); list = wrap_range_insert(nr, nr1); s = number_set_show(list, -1, -1); assert(!strcmp(s, "14-17, 1-2")); number_set_free(list); free(s); /* prepend (same interval) */ nr = wrap_range_new(3, 4, num_wraps, wraps); nr1 = wrap_range_new(1, 2, num_wraps, wraps); list = wrap_range_insert(nr, nr1); s = number_set_show(list, -1, -1); assert(!strcmp(s, "3-4, 1-2")); number_set_free(list); free(s); /* append (different intervals) */ nr = wrap_range_new(1, 2, num_wraps, wraps); nr1 = wrap_range_new(14, 17, num_wraps, wraps); list = wrap_range_insert(nr, nr1); s = number_set_show(list, -1, -1); assert(!strcmp(s, "14-17, 1-2")); number_set_free(list); free(s); /* append (same interval) */ nr = wrap_range_new(1, 2, num_wraps, wraps); nr1 = wrap_range_new(3, 4, num_wraps, wraps); list = wrap_range_insert(nr, nr1); s = number_set_show(list, -1, -1); assert(!strcmp(s, "3-4, 1-2")); number_set_free(list); free(s); /* insert (with real wrap-around range) */ nr = wrap_range_new(13, 14, num_wraps, wraps); nr1 = wrap_range_new(18, 12, num_wraps, wraps); nr2 = wrap_range_new(15, 16, num_wraps, wraps); list = wrap_range_insert(nr, nr1); list = wrap_range_insert(list, nr2); s = number_set_show(list, -1, -1); assert(!strcmp(s, "18-12, 15-16, 13-14")); number_set_free(list); free(s); /* number_set_reverse */ /* ------------------ */ /* !list */ list = number_set_reverse(NULL); assert(list == NULL); /* normal list */ nr = wrap_range_new(13, 14, num_wraps, wraps); nr1 = wrap_range_new(18, 12, num_wraps, wraps); list = wrap_range_insert(nr, nr1); list = number_set_reverse(list); s = number_set_show(list, -1, -1); assert(!strcmp(s, "13-14, 18-12")); number_set_free(list); free(s); /* number_set_get_first */ /* -------------------- */ /* !iter */ i = number_set_get_first(NULL); assert(i == -1); /* !iter->range */ iter.range = NULL; i = number_set_get_first(&iter); assert(i == -1); /* number_set_get_next */ /* ------------------- */ /* !iter */ i = number_set_get_next(NULL); assert(i == -1); /* !iter->range */ iter.range = NULL; i = number_set_get_next(&iter); assert(i == -1); /* number_set_get_first & number_set_get_next (single normal range) */ /* ---------------------------------------------------------------- */ list = number_set_new(12, 18, 12, 18); iter.range = list; s = (char*)malloc(100); p = s; i = number_set_get_first(&iter); while (i >= 0) { p += sprintf(p, "%d ", i); i = number_set_get_next(&iter); } assert(!strcmp(s, "12 13 14 15 16 17 18 ")); number_set_free(list); free(s); /* number_set_get_first & number_set_get_next (single wrap-around range) */ /* --------------------------------------------------------------------- */ list = wrap_range_new(18, 12, num_wraps, wraps); iter.range = list; s = (char*)malloc(100); p = s; i = number_set_get_first(&iter); while (i >= 0) { p += sprintf(p, "%d ", i); i = number_set_get_next(&iter); } assert(!strcmp(s, "18 19 20 10 11 12 ")); number_set_free(list); free(s); /* number_set_get_first & number_set_get_next (two ranges) */ /* ------------------------------------------------------- */ nr = wrap_range_new(13, 14, num_wraps, wraps); nr1 = wrap_range_new(18, 12, num_wraps, wraps); list = wrap_range_insert(nr, nr1); list = number_set_reverse(list); iter.range = list; s = (char*)malloc(100); p = s; i = number_set_get_first(&iter); while (i >= 0) { p += sprintf(p, "%d ", i); i = number_set_get_next(&iter); } assert(!strcmp(s, "13 14 18 19 20 10 11 12 ")); number_set_free(list); free(s); /* number_set_get_first & number_set_get_next (three ranges) */ /* --------------------------------------------------------- */ nr = wrap_range_new(2, 3, num_wraps, wraps); nr1 = wrap_range_new(8, 6, num_wraps, wraps); nr2 = wrap_range_new(18, 12, num_wraps, wraps); list = wrap_range_insert(nr, nr1); list = wrap_range_insert(list, nr2); list = number_set_reverse(list); iter.range = list; s = (char*)malloc(100); p = s; i = number_set_get_first(&iter); while (i >= 0) { p += sprintf(p, "%d ", i); i = number_set_get_next(&iter); } assert(!strcmp(s, "2 3 8 9 5 6 18 19 20 10 11 12 ")); number_set_free(list); free(s); /* number_set_is_element */ /* --------------------- */ /* normal range */ nr = number_set_new(12, 18, 12, 18); s = (char*)malloc(100); p = s; for (i = 8; i < 23; i++) if (number_set_is_element(nr, i)) p += sprintf(p, "%d ", i); assert(!strcmp(s, "12 13 14 15 16 17 18 ")); number_set_free(nr); free(s); /* real wrap-around range */ nr = wrap_range_new(18, 12, num_wraps, wraps); s = (char*)malloc(100); p = s; for (i = 8; i < 23; i++) if (number_set_is_element(nr, i)) p += sprintf(p, "%d ", i); assert(!strcmp(s, "10 11 12 18 19 20 ")); number_set_free(nr); free(s); /* number_set_parse */ /* ---------------- */ /* !s */ r = number_set_parse(NULL, NULL, 0, 0); /* min < 0, max < 0, empty input */ in = ""; r = number_set_parse(in, NULL, -1, -1); assert(r == in); /* min > max, numeric overflow */ list = NULL; s = (char*)malloc(100); sprintf(s, "%ld", (long)INT_MAX * 2); r = number_set_parse(s, &list, 10, 5); assert(list == NUMBERSET_OVERFLOW); assert(r == s); free(s); /* numeric overflow of range */ list = NULL; s = (char*)malloc(100); sprintf(s, "1-%ld", (long)INT_MAX * 2); r = number_set_parse(s, &list, 10, 5); assert(list == NUMBERSET_OVERFLOW); assert(r == s); free(s); /* invalid range (n < min) */ list = NULL; in = "3-5"; r = number_set_parse(in, &list, 4, 6); assert(list == NUMBERSET_INVALID_RANGE); assert(r == in); /* invalid range (m > max) */ list = NULL; in = "3-5"; r = number_set_parse(in, &list, 1, 2); assert(list == NUMBERSET_INVALID_RANGE); assert(r == in); /* not ascending */ list = NULL; in = "3-5 1-3"; r = number_set_parse(in, &list, 0, 6); assert(list == NUMBERSET_NOT_ASCENDING); assert(r == in + strlen("3-5 ")); /* overlapping ranges */ list = NULL; in = "3-5 4-6"; r = number_set_parse(in, &list, 0, 7); assert(list == NUMBERSET_OVERLAPPING_RANGES); assert(r == in + strlen("3-5 ")); /* invalid character */ list = NULL; in = "123.456"; r = number_set_parse(in, &list, -1, -1); assert(list == NUMBERSET_INVALID_CHARACTER); assert(r == in); /* whitespace, m < n, no list */ list = NULL; in = " 10 - 5"; out = "5-10"; r = number_set_parse(in, &list, 10, 5); s = number_set_show(list, 2, 12); assert(r == in + strlen(in)); assert(!strcmp(s, out)); number_set_free(list); free(s); /* no output */ in = "5-10"; r = number_set_parse(in, NULL, 10, 5); assert(r == in + strlen(in)); /* multiple range type representation forms, with merging */ list = NULL; in = "-3, 4, 6-8, 10-"; out = "-4, 6-8, 10-"; r = number_set_parse(in, &list, 1, 13); s = number_set_show(list, 2, 12); assert(r == in + strlen(in)); assert(!strcmp(s, out)); number_set_free(list); free(s); return 0; } /* end of numberset-test.c */ ttfautohint-1.8.1/lib/ttfautohint.h.in0000644000175000001440000007245113221753752017650 0ustar00wlusers00000000000000/* ttfautohint.h */ /* * Copyright (C) 2011-2017 by Werner Lemberg. * * This file is part of the ttfautohint library, and may only be used, * modified, and distributed under the terms given in `COPYING'. By * continuing to use, modify, or distribute this file you indicate that you * have read `COPYING' and understand and accept it fully. * * The file `COPYING' mentioned in the previous paragraph is distributed * with the ttfautohint library. */ #ifndef TTFAUTOHINT_H_ #define TTFAUTOHINT_H_ #include #include #include #ifdef _WIN32 # ifdef DLL_EXPORT # define TA_LIB_EXPORT __declspec(dllexport) # elif defined(DLL_IMPORT) # define TA_LIB_EXPORT __declspec(dllimport) # endif #endif #ifndef TA_LIB_EXPORT # define TA_LIB_EXPORT #endif #ifdef __cplusplus extern "C" { #endif /* * This file gets processed with a simple sed script to extract the * documentation (written in pandoc's markdown format); code between the * `pandoc' markers are retained, everything else is discarded. C comments * are uncommented so that column 4 becomes column 1; empty lines outside of * comments are removed. */ /* pandoc-start */ /* * The ttfautohint API * =================== * * This section documents the public functions of the ttfautohint library * together with its callback functions. All information has been directly * extracted from the `ttfautohint.h` header file. * */ /* * Preprocessor Macros, Typedefs, and Enums * ---------------------------------------- * * Some default values. * * ```C */ #define TA_HINTING_RANGE_MIN 8 #define TA_HINTING_RANGE_MAX 50 #define TA_HINTING_LIMIT 200 #define TA_INCREASE_X_HEIGHT 14 /* *``` * * An error type. * * ```C */ typedef int TA_Error; /* *``` * * An enum type for stem width algorithm selection. * * ```C */ enum { TA_STEM_WIDTH_MODE_NATURAL = -1, TA_STEM_WIDTH_MODE_QUANTIZED = 0, TA_STEM_WIDTH_MODE_STRONG = 1 }; /* * ``` * */ /* * Function Pointer: `TA_Alloc_Func` * --------------------------------- * * A pointer to a function provided by the calling application to allocate * memory. The ttfautohint library uses this for allocating the buffer * given by the `out-buffer` field of * [`TTF_autohint`](#function-ttf_autohint) and for allocating the `str` * buffer in the [`TA_Info_Func`](#callback-ta_info_func) callback. * * The signature is identical to standard\ C's `malloc` function (in header * file `stdlib.h`). * * ```C */ typedef void * (*TA_Alloc_Func)(size_t size); /* * ``` * */ /* * Function Pointer: `TA_Free_Func` * -------------------------------- * * A pointer to a function provided by the calling application to free * memory allocated with [`TA_Alloc_Func`](#function-pointer-ta_alloc_func). * The ttfautohint library calls this for deallocating the `str` buffers in * the [`TA_Info_Func`](#callback-ta_info_func) callback after they have * been used. * * The signature is identical to standard\ C's `free` function (in header * file `stdlib.h`). * * ```C */ typedef void (*TA_Free_Func)(void *ptr); /* * ``` * */ /* * Callback: `TA_Progress_Func` * ---------------------------- * * A callback function to get progress information. *curr_idx* gives the * currently processed glyph index; if it is negative, an error has * occurred. *num_glyphs* holds the total number of glyphs in the font * (this value can't be larger than 65535). * * *curr_sfnt* gives the current subfont within a TrueType Collection (TTC), * and *num_sfnts* the total number of subfonts. * * If the return value is non-zero, `TTF_autohint` aborts with * `TA_Err_Canceled`. Use this for a 'Cancel' button or similar features in * interactive use. * * *progress_data* is a void pointer to user-supplied data. * * ```C */ typedef int (*TA_Progress_Func)(long curr_idx, long num_glyphs, long curr_sfnt, long num_sfnts, void* progress_data); /* * ``` * */ /* * Callback: `TA_Error_Func` * ------------------------- * * A callback function to get error information. * * *error* is the value `TTF_autohint` returns. See file * `ttfautohint-errors.h` for a list. Error codes not in this list are * directly taken from FreeType; see the FreeType header file `fterrdef.h` * for more. * * *error_string*, if non-NULL, is a pointer to an error message that * represents *error*. * * The next three parameters help identify the origin of text string parsing * errors. *linenum*, if non-zero, contains the line number. *line*, if * non-NULL, is a pointer to the input line that can't be processed. * *errpos*, if non-NULL, holds a pointer to the position in *line* where * the problem occurs. * * *error_data* is a void pointer to user-supplied data. * * ```C */ typedef void (*TA_Error_Func)(TA_Error error, const char* error_string, unsigned int linenum, const char* line, const char* errpos, void* error_data); /* * ``` * */ /* * Callback: `TA_Info_Func` * ------------------------ * * A callback function to access or modify strings in the `name` table; it * is called in a loop that iterates over all `name` table entries. If * defined, [`TA_Info_Post_Func`](#callback-ta_info_post_func) gets executed * after this loop so that the collected data can be written back to the * `name` table. * * *platform_id*, *encoding_id*, *language_id*, and *name_id* are the * identifiers of a `name` table entry pointed to by *str* with a length * pointed to by *str_len* (in bytes; the string has no trailing NULL byte). * Please refer to the [OpenType specification of the `name` table] for a * detailed description of the various parameters, in particular which * encoding is used for a given platform and encoding ID. * * [OpenType specification of the `name` table]: http://www.microsoft.com/typography/otspec/name.htm * * The string *str* is allocated with the function specified by the * `alloc-func` field of [`TTF_autohint`](#function-ttf_autohint); the * application should reallocate the data if necessary, ensuring that the * string length doesn't exceed 0xFFFF. * * *info_data* is a void pointer to user-supplied data. * * If an error occurs, return a non-zero value and don't modify *str* and * *str_len* (such errors are handled as non-fatal). * * ```C */ typedef int (*TA_Info_Func)(unsigned short platform_id, unsigned short encoding_id, unsigned short language_id, unsigned short name_id, unsigned short* str_len, unsigned char** str, void* info_data); /* * ``` * */ /* * Callback: `TA_Info_Post_Func` * ----------------------------- * * A callback function, giving the application the possibility to access or * modify strings in the `name` table after * [`TA_Info_Func`](#callback-ta_info_func) has iterated over all `name` * table entries. * * It is expected that `TA_Info_Func` stores pointers to the `name` table * entries it wants to access or modify; the only parameter is thus * *info_data*, which is a void pointer to the user-supplied data already * provided to `TA_Info_Func`. Obviously, calling `TA_Info_Post_Func` with * `TA_Info_Func` undefined has no effect. * * The `name` table strings are allocated with the function specified by the * `alloc-func` field of [`TTF_autohint`](#function-ttf_autohint); the * application should reallocate the data if necessary, ensuring that no * string length exceeds 0xFFFF. * * If an error occurs, return a non-zero value and don't modify the affected * string and string length (such errors are handled as non-fatal). * * ```C */ typedef int (*TA_Info_Post_Func)(void* info_data); /* * ``` * */ /* pandoc-end */ /* * Error values in addition to the FT_Err_XXX constants from FreeType. * * All error values specific to ttfautohint start with `TA_Err_'. */ #include /* pandoc-start */ /* * Function: `TTF_autohint` * ------------------------ * * Read a TrueType font, remove existing bytecode (in the SFNT tables * `prep`, `fpgm`, `cvt `, and `glyf`), and write a new TrueType font with * new bytecode based on the autohinting of the FreeType library, optionally * using a reference font to derive blue zones. * * It expects a format string *options* and a variable number of arguments, * depending on the fields in *options*. The fields are comma separated; * whitespace within the format string is not significant, a trailing comma * is ignored. Fields are parsed from left to right; if a field occurs * multiple times, the last field's argument wins. The same is true for * fields that are mutually exclusive. Depending on the field, zero or one * argument is expected. * * Note that fields marked as 'not implemented yet' are subject to change. * * * ### Memory Management * * The next two fields are necessary on some platforms if ttfautohint is * compiled as a shared library, and the application uses a different * runtime library. This can happen, for example, on the MS Windows * platform if your program is written in Python and communicates via [the * 'ctypes' interface](https://docs.python.org/3/library/ctypes.html) with * the ttfautohint DLL. * * `alloc-func` * : A pointer of type [`TA_Alloc_Func`](#function-pointer-ta_alloc_func) * specifying a memory allocation function. It gets used to allocate * the buffer given by the `out-buffer` field and the data exposed by * the [`TA_Info_Func`](#callback-ta_info_func) callback. If not set or * set to NULL, or if `out-buffer` is not set or set to NULL, * standard\ C's `malloc` function is used. * * `free-func` * : A pointer of type [`TA_Free_Func`](#function-pointer-ta_free_func) * specifying a memory deallocation function. It gets called to free * the data exposed by the [`TA_Info_Func`](#callback-ta_info_func) * callback after it has been used. If not set or set to NULL, or if * `out_buffer` is not set or set to NULL, standard\ C's `free` function * is used. * * * ### I/O * * `in-file` * : A pointer of type `FILE*` to the data stream of the input font, * opened for binary reading. Mutually exclusive with `in-buffer`. * * `in-buffer` * : A pointer of type `const char*` to a buffer that contains the input * font. Needs `in-buffer-len`. Mutually exclusive with `in-file`. * * `in-buffer-len` * : A value of type `size_t`, giving the length of the input buffer. * Needs `in-buffer`. * * `out-file` * : A pointer of type `FILE*` to the data stream of the output font, * opened for binary writing. Mutually exclusive with `out-buffer`. * * `out-buffer` * : A pointer of type `char**` to a buffer that contains the output * font. Needs `out-buffer-len`. Mutually exclusive with `out-file`. * The application should deallocate the memory with the function given * by `free-func`. * * `out-buffer-len` * : A pointer of type `size_t*` to a value giving the length of the * output buffer. Needs `out-buffer`. * * `control-file` * : A pointer of type `FILE*` to the data stream of control instructions. * Mutually exclusive with `control-buffer`. * * See '[Control Instructions](#control-instructions)' for the syntax * used in such a file or buffer. * * `control-buffer` * : A pointer of type `const char*` to a buffer that contains control * instructions. Needs `control-buffer-len`. Mutually exclusive with * `control-file`. * * `control-buffer-len` * : A value of type `size_t`, giving the length of the control * instructions buffer. Needs `control-buffer`. * * `reference-file` * : A pointer of type `FILE*` to the data stream of the reference font, * opened for binary reading. Mutually exclusive with * `reference-buffer`. * * `reference-buffer` * : A pointer of type `const char*` to a buffer that contains the * reference font. Needs `reference-buffer-len`. Mutually exclusive * with `reference-file`. * * `reference-buffer-len` * : A value of type `size_t`, giving the length of the reference buffer. * Needs `reference-buffer`. * * `reference-index` * : The face index to be used in the reference font. The default value * is\ 0. * * `reference-name` * : A string that specifies the name of the reference font. It is only * used to emit a sensible value for the `TTFA` table if `TTFA-info` is * set. * * * ### Messages and Callbacks * * `progress-callback` * : A pointer of type [`TA_Progress_Func`](#callback-ta_progress_func), * specifying a callback function for progress reports. This function * gets called after a single glyph has been processed. If this field * is not set or set to NULL, no progress callback function is used. * * `progress-callback-data` * : A pointer of type `void*` to user data that is passed to the * progress callback function. * * `error-string` * : A pointer of type `unsigned char**` to a string (in UTF-8 encoding) * that verbally describes the error code. You must not change the * returned value. * * `error-callback` * : A pointer of type [`TA_Error_Func`](#callback-ta_error_func), * specifying a callback function for error messages. This function * gets called right before `TTF_autohint` exits. If this field is not * set or set to NULL, no error callback function is used. * * Use it as a more sophisticated alternative to `error-string`. * * `error-callback-data` * : A point of type `void*` to user data that is passed to the error * callback function. * * `info-callback` * : A pointer of type [`TA_Info_Func`](#callback-ta_info_func), * specifying a callback function for manipulating the `name` table. * This function gets called for each `name` table entry. If not set or * set to NULL, `TA_Info_Func` is not called. * * `info-post-callback` * : A pointer of type [`TA_Info_Post_Func`](#callback-ta_info_post_func), * specifying a callback function for manipulating the `name` table. It * is called after the function specified with `info-callback` has * iterated over all `name` table entries. If not set or set to NULL, * `TA_Info_Post_Func` is not called. * * `info-callback-data` * : A pointer of type `void*` to user data that is passed to the info * callback functions. * * `debug` * : If this integer is set to\ 1, lots of debugging information is print * to stderr. The default value is\ 0. * * * ### General Hinting Options * * `hinting-range-min` * : An integer (which must be larger than or equal to\ 2) giving the * lowest PPEM value used for autohinting. If this field is not set, it * defaults to * [`TA_HINTING_RANGE_MIN`](#preprocessor-macros-typedefs-and-enums). * * `hinting-range-max` * : An integer (which must be larger than or equal to the value of * `hinting-range-min`) giving the highest PPEM value used for * autohinting. If this field is not set, it defaults to * [`TA_HINTING_RANGE_MAX`](#preprocessor-macros-typedefs-and-enums). * * `hinting-limit` * : An integer (which must be larger than or equal to the value of * `hinting-range-max`) that gives the largest PPEM value at which * hinting is applied. For larger values, hinting is switched off. If * this field is not set, it defaults to * [`TA_HINTING_LIMIT`](#preprocessor-macros-typedefs-and-enums). If it * is set to\ 0, no hinting limit is added to the bytecode. * * `hint-composites` * : If this integer is set to\ 1, composite glyphs get separate hints. * This implies adding a special glyph to the font called * ['.ttfautohint'](#the-.ttfautohint-glyph). Setting it to\ 0 (which * is the default), the hints of the composite glyphs' components are * used. Adding hints for composite glyphs increases the size of the * resulting bytecode a lot, but it might deliver better hinting * results. However, this depends on the processed font and must be * checked by inspection. * * `adjust-subglyphs` * : An integer (1\ for 'on' and 0\ for 'off', which is the default) to * specify whether native TrueType hinting of the *input font* shall be * applied to all glyphs before passing them to the (internal) * autohinter. The used resolution is the em-size in font units; for * most fonts this is 2048ppem. Use this only if the old hints move or * scale subglyphs independently of the output resolution, for example * some exotic CJK fonts. * * `pre-hinting` is a deprecated alias name for this option. * * * ### Hinting Algorithms * * ttfautohint provides three different algorithms for computing * horizontal stem widths and the positioning of blue zones. * * * `TA_STEM_WIDTH_MODE_NATURAL`: No adjustments to stem * widths, discrete blue zone positioning. This is what FreeType uses for * its 'light' (auto-)hinting mode. * * * `TA_STEM_WIDTH_MODE_QUANTIZED`: Both stem widths and blue zone * positions are slightly quantized to take discrete values. For * example, stem values 50, 51, 72, 76, and 100 would become 50, 74, and * 100 (or something similar). * * * `TA_STEM_WIDTH_MODE_STRONG`: If active, stem widths and blue zones are * snapped and positioned to integer pixel values as much as possible. * * These values are arguments to ttfautohint's three different hinting mode * options. * * `gray-stem-width-mode` * : Specify the stem width algorithm for grayscale rendering. Possible * integer values are `TA_STEM_WIDTH_MODE_NATURAL`, * `TA_STEM_WIDTH_MODE_QUANTIZED` (the default), and * `TA_STEM_WIDTH_MODE_STRONG`, as discussed above. * * `gdi-cleartype-stem-width-mode` * : Specify the stem width algorithm for GDI ClearType rendering, this * is, the rasterizer version (as returned by the GETINFO bytecode * instruction) is in the range 36\ <= version <\ 38 and ClearType is * enabled. Possible integer values are `TA_STEM_WIDTH_MODE_NATURAL`, * `TA_STEM_WIDTH_MODE_QUANTIZED`, and `TA_STEM_WIDTH_MODE_STRONG` (the * default), as discussed above. * * `dw-cleartype-stem-width-mode` * : Specify the stem width algorithm for DW ClearType rendering, this is, * the rasterizer version (as returned by the GETINFO bytecode * instruction) is >=\ 38, ClearType is enabled, and subpixel * positioning is enabled also. Possible integer values are * `TA_STEM_WIDTH_MODE_NATURAL`, `TA_STEM_WIDTH_MODE_QUANTIZED` (the * default), and `TA_STEM_WIDTH_MODE_STRONG`, as discussed above. * * `increase-x-height` * : An integer. For PPEM values in the range 6\ <= PPEM * <= `increase-x-height`, round up the font's x\ height much more often * than normally (to use the terminology of TrueType's 'Super Round' * bytecode instruction, the threshold gets increased from 5/8px to * 13/16px). If it is set to\ 0, this feature is switched off. If this * field is not set, it defaults to * [`TA_INCREASE_X_HEIGHT`](#preprocessor-macros-typedefs-and-enums). * Use this flag to improve the legibility of small font sizes if * necessary. * * `x-height-snapping-exceptions` * : A pointer of type `const char*` to a null-terminated string that * gives a list of comma separated PPEM values or value ranges at which * no x\ height snapping shall be applied. A value range has the form * *value*~1~`-`*value*~2~, meaning *value*~1~ <= PPEM <= *value*~2~. * *value*~1~ or *value*~2~ (or both) can be missing; a missing value is * replaced by the beginning or end of the whole interval of valid PPEM * values, respectively. Whitespace is not significant; superfluous * commas are ignored, and ranges must be specified in increasing order. * For example, the string `"3, 5-7, 9-"` means the values 3, 5, 6, 7, * 9, 10, 11, 12, etc. Consequently, if the supplied argument is `"-"`, * no x\ height snapping takes place at all. The default is the empty * string (`""`), meaning no snapping exceptions. * * `windows-compatibility` * : If this integer is set to\ 1, two artificial blue zones are used, * positioned at the `usWinAscent` and `usWinDescent` values (from the * font's `OS/2` table). The idea is to help ttfautohint so that the * hinted glyphs stay within this horizontal stripe since Windows clips * everything falling outside. The default is\ 0. * * `gray-strong-stem-width` * : Deprecated. The argument values 0 and 1 of this field correspond to * the argument values `TA_STEM_WIDTH_MODE_QUANTIZED` and * `TA_STEM_WIDTH_MODE_STRONG` of the field 'gray-stem-width-mode', * respectively. * * `gdi-cleartype-strong-stem-width` * : Deprecated. The argument values 0 and 1 of this field correspond to * the argument values `TA_STEM_WIDTH_MODE_QUANTIZED` and * `TA_STEM_WIDTH_MODE_STRONG` of the field * 'gdi-cleartype-stem-width-mode', respectively. * * `dw-cleartype-strong-stem-width` * : Deprecated. The argument values 0 and 1 of this field correspond to * the argument values `TA_STEM_WIDTH_MODE_QUANTIZED` and * `TA_STEM_WIDTH_MODE_STRONG` of the field * 'dw-cleartype-stem-width-mode', respectively. * * * ### Scripts * * `default-script` * : A string consisting of four lowercase characters that specifies the * default script for OpenType features. After applying all features * that are handled specially, use this value for the remaining * features. The default value is `"latn"`; if set to `"none"`, no * script is used. Valid values can be found in the header file * `ttfautohint-scripts.h`. * * `fallback-script` * : A string consisting of four lowercase characters, specifying the * default script for glyphs that can't be mapped to a script * automatically. By default, such glyphs are hinted; if option * `fallback-scaling` is set, they are scaled only instead. Valid * values can be found in the header file `ttfautohint-scripts.h`. * * Default value is `"none"`, which means hinting without using a * script's blue zones if `fallback-scaling` isn't set. If * `fallback_scaling` is set, value `"none"` implies no hinting for * unmapped glyphs. * * `fallback-scaling` * : Set this integer to\ 1 if glyphs handled by the fallback script * should be scaled only with the fallback script's scaling value, * instead of being hinted with the fallback script's hinting * parameters. * * `symbol` * : Set this integer to\ 1 if you want to process a font that ttfautohint * would refuse otherwise because it can't find a single standard * character for any of the supported scripts. ttfautohint then uses a * default (hinting) value for the standard stem width instead of * deriving it from a script's set of standard characters (for the latin * script, one of them is character 'o'). The default value of this * option is\ 0. * * `fallback-stem-width` * : Set the horizontal stem width (hinting) value for all scripts that * lack proper standard characters. The value is given in font units * and must be a positive integer. If not set, or the value is zero, * ttfautohint uses a hard-coded default (50\ units at 2048 units per * EM, and linearly scaled for other UPEM values, for example 24\ units * at 1000 UPEM). * * For symbol fonts (i.e., option `symbol` is given), * `fallback-stem-width` has an effect only if `fallback-script` is set * also. * * * ### Miscellaneous * * `ignore-restrictions` * : If the font has set bit\ 1 in the 'fsType' field of the `OS/2` table, * the ttfautohint library refuses to process the font since a * permission to do that is required from the font's legal owner. In * case you have such a permission you might set the integer argument to * value\ 1 to make ttfautohint handle the font. The default value * is\ 0. * * `TTFA-info` * : If set to\ 1, ttfautohint creates an SFNT table called `TTFA` and * fills it with information on the parameters used while calling * `TTF_autohint`. The format of the output data resembles the * information at the very beginning of the dump emitted by option * `debug`. The default value is\ 0. * * Main use of this option is for font editing purposes. For example, * after a font editor has added some glyphs, a front-end to * `TTF_autohint` can parse `TTFA` and feed the parameters into another * call of `TTF_autohint`. The new glyphs are then hinted while hints * of the old glyphs stay unchanged. * * If this option is not set, and the font to be processed contains a * `TTFA` table, it gets removed. * * Note that such a `TTFA` table gets ignored by all font rendering * engines. In TrueType Collections, the `TTFA` table is added to the * first subfont. * * `dehint` * : If set to\ 1, remove all hints from the font. All other hinting * options are ignored. * * `epoch` * : An integer of type `unsigned long long`, defined as the number of * seconds (excluding leap seconds) since 01 Jan 1970 00:00:00 UTC. If * set, or if the value is not equal to `ULLONG_MAX`, this epoch gets * used instead of the current date and time for the 'modification time' * field in the TTF header. Use this to get [reproducible * builds](https://reproducible-builds.org/). * * * ### Remarks * * * Obviously, it is necessary to have an input and an output data * stream. All other options are optional. * * * `hinting-range-min` and `hinting-range-max` specify the range for * which the autohinter generates optimized hinting code. If a PPEM * value is smaller than the value of `hinting-range-min`, hinting still * takes place but the configuration created for `hinting-range-min` is * used. The analogous action is taken for `hinting-range-max`, only * limited by the value given with `hinting-limit`. The font's `gasp` * table is set up to always use grayscale rendering with grid-fitting * for standard hinting, and symmetric grid-fitting and symmetric * smoothing for horizontal subpixel hinting (ClearType). * * * ttfautohint can process its own output a second time only if option * `hint-composites` is not set (or if the font doesn't contain * composite glyphs at all). This limitation might change in the * future. * * ```C */ TA_LIB_EXPORT TA_Error TTF_autohint(const char* options, ...); /* * ``` * * Macros: `TTFAUTOHINT_MAJOR`, `TTFAUTOHINT_MINOR`, `TTFAUTOHINT_REVISION` * ------------------------------------------------------------------------ * * These three macros give the major, minor, and revision number of the * library, respectively. See function * [`TTF_autohint_version`](#function-ttf_autohint_version) for more * details. * * ```C */ #define TTFAUTOHINT_MAJOR %TTFAUTOHINT_MAJOR% #define TTFAUTOHINT_MINOR %TTFAUTOHINT_MINOR% #define TTFAUTOHINT_REVISION %TTFAUTOHINT_REVISION% /* * ``` * * Macro: `TTFAUTOHINT_VERSION` * ---------------------------- * * This macro holds the ttfautohint version string. * * For tarball releases it has the form *X*.*Y*[.*Z*], with *X*, *Y*, * and\ *Z* the major, minor, and revision numbers, respectively. If the * revision number is zero, it is omitted. Examples: `2.7`, `2.7.1`. * * If compiling directly from the git repository, ttfautohint's bootstrap * script derives the version number from the `git describe` output, * appending the number of commits after a tag together with a shortened * commit ID. Example: `2.7.1.23-379b`. * * See function [`TTF_autohint_version`](#function-ttf_autohint_version) for * more details. * * ```C */ #define TTFAUTOHINT_VERSION "%TTFAUTOHINT_VERSION%" /* * ``` * * Function: `TTF_autohint_version` * -------------------------------- * * Return the ttfautohint version triplet. This function is useful when * dynamically linking to the library, since the macros `TTFAUTOHINT_MAJOR`, * `TTFAUTOHINT_MINOR`, and `TTFAUTOHINT_PATCH` cannot be used in that case. * * The returned integer triplet is _not_ the same as the shared library's * version triplet (which the dynamic linker uses to resolve runtime * dependencies). For example, hypothetical ttfautohint versions 2.27 and * 2.27.1 might both correspond to shared library version 1.0.38 in case * there are only, say, documentation or packaging differences that don't * affect the library code. * * If the pkg-config configuration file `ttfautohint.pc` is installed in a * place that pkg-config can find, a call to * * ``` * pkg-config ttfautohint --modversion * ``` * * returns the shared library version. * * ```C */ TA_LIB_EXPORT void TTF_autohint_version(int *major, int *minor, int *revision); /* * ``` * * Function: `TTF_autohint_version_string` * --------------------------------------- * * Return the ttfautohint version string. This function is useful when * dynamically linking to the library, since the macro `TTFAUTOHINT_VERSION` * cannot be used in that case. * * ```C */ TA_LIB_EXPORT const char* TTF_autohint_version_string(void); /* * ``` * */ /* pandoc-end */ #ifdef __cplusplus } /* extern "C" */ #endif #endif /* TTFAUTOHINT_H_ */ /* end of ttfautohint.h */ ttfautohint-1.8.1/frontend/0000755000175000001440000000000013222454026015552 5ustar00wlusers00000000000000ttfautohint-1.8.1/frontend/Makefile.am0000644000175000001440000000703013217275601017612 0ustar00wlusers00000000000000# Makefile.am # Copyright (C) 2011-2017 by Werner Lemberg. # # This file is part of the ttfautohint library, and may only be used, # modified, and distributed under the terms given in `COPYING'. By # continuing to use, modify, or distribute this file you indicate that you # have read `COPYING' and understand and accept it fully. # # The file `COPYING' mentioned in the previous paragraph is distributed # with the ttfautohint library. SUFFIXES = .moc.cpp .h # Make call to `moc' emit just `MOC'. moc_verbose = $(moc_verbose_@AM_V@) moc_verbose_ = $(moc_verbose_@AM_DEFAULT_V@) moc_verbose_0 = @echo " MOC " $@; # moc from Qt5 aborts if unknown command line options are supplied; # in particular, it doesn't recognize `-isystem' .h.moc.cpp: $(moc_verbose)$(MOC) \ `echo $(QT_CPPFLAGS) | sed 's/-isystem/-I/g'` \ $(EXTRA_CPPFLAGS) \ $< -o $@ DISTCLEANFILES = $(BUILT_SOURCES) AM_CPPFLAGS = -I$(top_srcdir)/lib \ -I$(top_builddir)/gnulib/src \ -I$(top_srcdir)/gnulib/src \ $(FREETYPE_CPPFLAGS) LDADD = $(top_builddir)/lib/libttfautohint.la \ $(top_builddir)/lib/libsds.la \ $(top_builddir)/lib/libnumberset.la \ $(top_builddir)/gnulib/src/libgnu.la \ $(LTLIBINTL) \ $(LTLIBTHREAD) \ $(FREETYPE_LIBS) bin_PROGRAMS = ttfautohint ttfautohint_SOURCES = info.cpp \ info.h \ main.cpp manpages = ttfautohint.1 if USE_QT bin_PROGRAMS += ttfautohintGUI ttfautohintGUI_SOURCES = ddlineedit.cpp \ ddlineedit.h \ info.cpp \ info.h \ main.cpp \ maingui.cpp \ maingui.h \ ttlineedit.cpp \ ttlineedit.h nodist_ttfautohintGUI_SOURCES = ddlineedit.moc.cpp \ maingui.moc.cpp \ static-plugins.cpp \ ttlineedit.moc.cpp ttfautohintGUI_CXXFLAGS = $(QT_CXXFLAGS) ttfautohintGUI_LDFLAGS = $(QT_LDFLAGS) ttfautohintGUI_CPPFLAGS = $(AM_CPPFLAGS) \ $(QT_CPPFLAGS) \ -DBUILD_GUI ttfautohintGUI_LDADD = $(LDADD) \ $(QT_LIBS) BUILT_SOURCES = ddlineedit.moc.cpp \ maingui.moc.cpp \ static-plugins.cpp \ ttlineedit.moc.cpp manpages += ttfautohintGUI.1 endif if WITH_DOC dist_man_MANS = $(manpages) endif # `ttfautohint.h' holds default values for some options, # `ttfautohint-scripts.' the list of available scripts ttfautohint.1: $(top_srcdir)/frontend/main.cpp \ $(top_builddir)/lib/ttfautohint.h \ $(top_srcdir)/lib/ttfautohint-scripts.h \ $(top_builddir)/.version $(MAKE) $(AM_MAKEFLAGS) ttfautohint$(EXEEXT) $(HELP2MAN) --output=$@ \ --no-info \ --name="add new, auto-generated hints to a TrueType font" \ ./ttfautohint$(EXEEXT) ttfautohintGUI.1: $(top_srcdir)/frontend/main.cpp \ $(top_builddir)/lib/ttfautohint.h \ $(top_srcdir)/lib/ttfautohint-scripts.h \ $(top_builddir)/.version $(MAKE) $(AM_MAKEFLAGS) ttfautohintGUI$(EXEEXT) $(HELP2MAN) --output=$@ \ --no-info \ --name="add new, auto-generated hints to a TrueType font" \ --help-option=--help-all \ ./ttfautohintGUI$(EXEEXT) # end of Makefile.am ttfautohint-1.8.1/frontend/ttfautohint.10000644000175000001440000001754413222451117020216 0ustar00wlusers00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3. .TH TTFAUTOHINT "1" "January 2018" "ttfautohint 1.8.1" "User Commands" .SH NAME ttfautohint \- add new, auto-generated hints to a TrueType font .SH SYNOPSIS .B ttfautohint [\fI\,OPTION\/\fR]... [\fI\,IN-FILE \/\fR[\fI\,OUT-FILE\/\fR]] .SH DESCRIPTION Replace hints in TrueType font IN\-FILE and write output to OUT\-FILE. If OUT\-FILE is missing, standard output is used instead; if IN\-FILE is missing also, standard input and output are used. .PP The new hints are based on FreeType's auto\-hinter. .PP This program is a simple front\-end to the `ttfautohint' library. .PP Long options can be given with one or two dashes, and with and without equal sign between option and argument. This means that the following forms are acceptable: `\-foo=bar', `\-\-foo=bar', `\-foo bar', `\-\-foo bar'. .PP Mandatory arguments to long options are mandatory for short options too. .SH OPTIONS .TP \fB\-\-debug\fR print debugging information .TP \fB\-a\fR, \fB\-\-stem\-width\-mode\fR=\fI\,S\/\fR select stem width mode for grayscale, GDI ClearType, and DW ClearType, where S is a string of three letters with possible values `n' for natural, `q' for quantized, and `s' for strong (default: qsq) .TP \fB\-c\fR, \fB\-\-composites\fR hint glyph composites also .TP \fB\-d\fR, \fB\-\-dehint\fR remove all hints .TP \fB\-D\fR, \fB\-\-default\-script\fR=\fI\,S\/\fR set default OpenType script (default: latn) .TP \fB\-f\fR, \fB\-\-fallback\-script\fR=\fI\,S\/\fR set fallback script (default: none) .TP \fB\-F\fR, \fB\-\-family\-suffix\fR=\fI\,S\/\fR append suffix to the family name string(s) in the `name' table .TP \fB\-G\fR, \fB\-\-hinting\-limit\fR=\fI\,N\/\fR switch off hinting above this PPEM value (default: 200); value 0 means no limit .TP \fB\-h\fR, \fB\-\-help\fR display this help and exit .TP \fB\-H\fR, \fB\-\-fallback\-stem\-width\fR=\fI\,N\/\fR set fallback stem width (default: 50 font units at 2048 UPEM) .TP \fB\-i\fR, \fB\-\-ignore\-restrictions\fR override font license restrictions .TP \fB\-I\fR, \fB\-\-detailed\-info\fR add detailed ttfautohint info to the version string(s) in the `name' table .TP \fB\-l\fR, \fB\-\-hinting\-range\-min\fR=\fI\,N\/\fR the minimum PPEM value for hint sets (default: 8) .TP \fB\-m\fR, \fB\-\-control\-file\fR=\fI\,FILE\/\fR get control instructions from FILE .TP \fB\-n\fR, \fB\-\-no\-info\fR don't add ttfautohint info to the version string(s) in the `name' table .TP \fB\-p\fR, \fB\-\-adjust\-subglyphs\fR handle subglyph adjustments in exotic fonts .TP \fB\-r\fR, \fB\-\-hinting\-range\-max\fR=\fI\,N\/\fR the maximum PPEM value for hint sets (default: 50) .TP \fB\-R\fR, \fB\-\-reference\fR=\fI\,FILE\/\fR derive blue zones from reference font FILE .TP \fB\-s\fR, \fB\-\-symbol\fR input is symbol font .TP \fB\-S\fR, \fB\-\-fallback\-scaling\fR use fallback scaling, not hinting .TP \fB\-t\fR, \fB\-\-ttfa\-table\fR add TTFA information table .TP \fB\-T\fR, \fB\-\-ttfa\-info\fR display TTFA table in IN\-FILE and exit .TP \fB\-v\fR, \fB\-\-verbose\fR show progress information .TP \fB\-V\fR, \fB\-\-version\fR print version information and exit .TP \fB\-W\fR, \fB\-\-windows\-compatibility\fR add blue zones for `usWinAscent' and `usWinDescent' to avoid clipping .TP \fB\-x\fR, \fB\-\-increase\-x\-height\fR=\fI\,N\/\fR increase x height for sizes in the range 6<=PPEM<=N; value 0 switches off this feature (default: 14) .TP \fB\-X\fR, \fB\-\-x\-height\-snapping\-exceptions\fR=\fI\,STRING\/\fR specify a comma\-separated list of x\-height snapping exceptions, for example "\-9, 13\-17, 19" (default: "") .TP \fB\-Z\fR, \fB\-\-reference\-index\fR=\fI\,N\/\fR face index of reference font (default: 0) .PP The program accepts both TTF and TTC files as input. Use option \fB\-i\fR only if you have a legal permission to modify the font. The used PPEM value for option \fB\-p\fR is FUnits per em, normally 2048. With option \fB\-s\fR, use default values for standard stem width and height, otherwise they are derived from script\-specific characters resembling the shape of character `o'. .PP A hint set contains the optimal hinting for a certain PPEM value; the larger the hint set range (as given by options \fB\-l\fR and \fB\-r\fR), the more hint sets get computed, usually increasing the output font size. The `gasp' table of the output file always enables grayscale hinting for all sizes (limited by option \fB\-G\fR, which is handled in the bytecode). Increasing the value of \fB\-G\fR does not increase the output font size. .PP Options \fB\-f\fR and \fB\-D\fR take a four\-letter string that identifies a script. Option \fB\-f\fR sets the script used as a fallback for glyphs that can't be associated with a known script. By default, such glyphs are hinted; if option \fB\-S\fR is set, they are scaled only instead. Option \fB\-D\fR sets the default script for handling OpenType features. .PP Possible four\-letter string values are .IP adlm (Adlam), arab (Arabic), armn (Armenian), avst (Avestan), bamu (Bamum), beng (Bengali), buhd (Buhid), cakm (Chakma), cans (Canadian Syllabics), cari (Carian), cher (Cherokee), copt (Coptic), cprt (Cypriot), cyrl (Cyrillic), deva (Devanagari), dsrt (Deseret), ethi (Ethiopic), geor (Georgian (Mkhedruli)), geok (Georgian (Khutsuri)), glag (Glagolitic), goth (Gothic), grek (Greek), gujr (Gujarati), guru (Gurmukhi), hebr (Hebrew), kali (Kayah Li), khmr (Khmer), khms (Khmer Symbols), knda (Kannada), lao (Lao), latn (Latin), latb (Latin Subscript Fallback), latp (Latin Superscript Fallback), lisu (Lisu), mlym (Malayalam), mymr (Myanmar), nkoo (N'Ko), olck (Ol Chiki), orkh (Old Turkic), osge (Osage), osma (Osmanya), saur (Saurashtra), shaw (Shavian), sinh (Sinhala), sund (Sundanese), taml (Tamil), tavt (Tai Viet), telu (Telugu), tfng (Tifinagh), thai (Thai), vaii (Vai), none (no script). .PP A control instructions file contains entries of the form .IP []

Introduction

ttfautohint is a library written in C that takes a TrueType font as the input, removes its bytecode instructions (if any), and returns a new font where all glyphs are bytecode hinted using the information given by FreeType’s auto-hinting module. The idea is to provide the excellent quality of the auto-hinter on platforms that don’t use FreeType.

The library has a central API function, TTF_autohint, which is described below.

Bundled with the library there are two front-end programs, ttfautohint and ttfautohintGUI, being a command line program and an application with a Graphics User Interface (GUI), respectively.

What exactly are hints?

To cite Wikipedia:

Font hinting (also known as instructing) is the use of mathematical instructions to adjust the display of an outline font so that it lines up with a rasterized grid. At low screen resolutions, hinting is critical for producing a clear, legible text. It can be accompanied by antialiasing and (on liquid crystal displays) subpixel rendering for further clarity.

and Apple’s TrueType Reference Manual:

For optimal results, a font instructor should follow these guidelines:

  • At small sizes, chance effects should not be allowed to magnify small differences in the original outline design of a glyph.

  • At large sizes, the subtlety of the original design should emerge.

In general, there are three possible ways to hint a glyph.

  1. The font contains hints (in the original sense of this word) to guide the rasterizer, telling it which shapes of the glyphs need special consideration. The hinting logic is partly in the font and partly in the rasterizer. More sophisticated rasterizers are able to produce better rendering results.

    This is how PostScript Type 1 and CFF hints work.

  2. The font contains exact instructions (also called bytecode) on how to move the points of its outlines, depending on the resolution of the output device, and which intentionally distort the (outline) shape to produce a well-rasterized result. The hinting logic is in the font; ideally, all rasterizers simply process these instructions to get the same result on all platforms.

    This is how TrueType hints work.

  3. The font gets auto-hinted (at run-time). The hinting logic is completely in the rasterizer. No hints in the font are used or needed; instead, the rasterizer scans and analyzes the glyphs to apply corrections by itself.

    This is how FreeType’s auto-hinter works; see below for more.

What problems can arise with TrueType hinting?

While it is relatively easy to specify PostScript hints (either manually or by an auto-hinter that works at font creation time), creating TrueType hints is far more difficult. There are at least two reasons:

  • TrueType instructions form a programming language, operating at a very low level. They are comparable to assembler code, thus lacking all high-level concepts to make programming more comfortable.

    Here an example how such code looks like:

        SVTCA[0]
        PUSHB[ ]  /* 3 values pushed */
        18 1 0
        CALL[ ]
        PUSHB[ ]  /* 2 values pushed */
        15 4
        MIRP[01001]
        PUSHB[ ]  /* 3 values pushed */
        7 3 0
        CALL[ ]

    Another major obstacle is the fact that font designers usually aren’t programmers.

  • It is very time consuming to manually hint glyphs. Given that the number of specialists for TrueType hinting is very limited, hinting a large set of glyphs for a font or font family can become very expensive.

Why ttfautohint?

The ttfautohint library brings the excellent quality of FreeType rendering to platforms that don’t use FreeType, yet require hinting for text to look good – like Microsoft Windows. Roughly speaking, it converts the glyph analysis done by FreeType’s auto-hinting module to TrueType bytecode. Internally, the auto-hinter’s algorithm resembles PostScript hinting methods; it thus combines all three hinting methods discussed previously.

The simple interface of the front-ends (both on the command line and with the GUI) allows quick hinting of a whole font with a few mouse clicks or a single command on the prompt. As a result, you get better rendering results with web browsers, for example.

Across Windows rendering environments today, fonts processed with ttfautohint look best with ClearType enabled. This is the default for Windows 7 and higher. Good visual results are also seen in recent MacOS X versions and GNU/Linux systems (including Android, ChromeOS, and other mobile operating systems) that use FreeType for rendering glyphs.

‘Smooth’ hinting

Fundamentally, there are two approaches to hinting. The older approach, let’s call it ‘sharp’, popular when text was rendered in pure black-and-white, was to make all stems round to full pixels so that in a text line, all stems would be either one pixel or (at a larger point size) two pixels. When grayscale antialiasing came about, this approach actually started harming the rendering rather than helping it, because the horizontal and vertical stems would render very dark but round or diagonal stems would render very light.

So a new approach was developed, let’s call it ‘fuzzy’, where all stems and other elements are equalized so that in grayscale (or ClearType) rendering, they all are of roughly equal color. This means that stems are not rounded to full pixels but in fact to fractions of a pixel. However, with black-and-white renderers, this approach yields poor results because in black-and-white you cannot render a fraction of a pixel, so some stems become one pixel and some become two.

The TrueType auto-hinters in FontForge and FontLab Studio, to name two well-known font editors, take the ‘sharp’ approach, while the TrueType auto-hinter in ttfautohint takes the ‘fuzzy’ approach.

In theory, a hybrid approach is possible, using TrueType conditional hints: If the rasterizer is black-and-white, ‘sharp’ rendering could happen, while if the rasterizer is ClearType, the ‘fuzzy’ rendering could be used. It is not intended to add black-and-white auto-hinting to ttfautohint. However, it is planned to develop an interface so that ttfautohint can cooperate with font editors, providing this hybrid hinting.

ttfautohint and ttfautohintGUI

On all supported platforms (GNU/Linux, Windows, and Mac OS X), the GUI looks quite similar; the used toolkit is Qt, which in turn uses the platform’s native widgets.

ttfautohintGUI on GNU/Linux running KDE

ttfautohintGUI on GNU/Linux running KDE

Both the GUI and console version share the same features, to be discussed in the next subsection.

Warning: ttfautohint cannot always process a font a second time. If the font contains composite glyphs, and option -c is used, reprocessing with ttfautohint will fail. For this reason it is strongly recommended to not delete the original, unhinted font so that you can always rerun ttfautohint.

Calling ttfautohint

    ttfautohint [OPTION]... [IN-FILE [OUT-FILE]]

The command-line binary, ttfautohint, works like a Unix filter, this is, it reads data from standard input if no input file name is given, and it sends its output to standard output if no output file name is specified.

A typical call looks like the following.

    ttfautohint -v -t -m foo-control.txt foo.ttf foo-autohinted.ttf

For demonstration purposes, here the same using a pipe and redirection. Note that Windows’s default command line interpreter, cmd.exe, doesn’t support piping with binary files, unfortunately.

    cat foo.ttf | ttfautohint -v -t -m foo-control.txt > foo-autohinted.ttf

Calling ttfautohintGUI

    ttfautohintGUI [OPTION]...

ttfautohintGUI doesn’t send any output to a console; however, it accepts (almost) the same command line options as ttfautohint to provide customized default values of the GUI.

The following command line options are not available in ttfautohintGUI: --control-file, --reference, --reference-index. Note, however, that the corresponding functionality can be selected interactively.

Two options, namely --ttfa-info and --debug, emit information at standard output and standard error, respectively; they are thus not available in ttfautohintGUI, too, and there is no corresponding GUI functionality either.

Options

Long options can be given with one or two dashes, and with and without an equal sign between option and argument. This means that the following forms are acceptable: -foo=bar, --foo=bar, -foo bar, and --foo bar.

Below, the section title refers to the command’s label in the GUI (if applicable), then comes the name of the corresponding long command line option and its short equivalent, followed by a description.

Background and technical details on the meaning of the various options are given afterwards.

Control Instructions File

--control-file=file, -m file

Specify the name of a control instructions file to manually tweak the hinting process. This feature can be used to correct glitches in ttfautohint’s hinting algorithm. The syntax used in a control instructions file is given below.

ttfautohintGUI doesn’t have this command line option.

Blue Zone Reference Font

--reference=file, -R file

Derive all blue zones from the given font, which can either be a normal TrueType font or a TrueType collection – for the latter you can select the face index with a separate option.

Use this to harmonize font families, avoiding ugly height differences at small sizes.

Fira Regular and Bold (version 4.106), auto-hinted with ttfautohint and displayed at 16px using Internet Explorer 11 under Windows 8.1. The bold series shown on the right side uses the regular variant as the reference font.

Fira Regular and Bold (version 4.106), auto-hinted with ttfautohint and displayed at 16px using Internet Explorer 11 under Windows 8.1. The bold series shown on the right side uses the regular variant as the reference font.

To make this work the reference font must obviously be similar enough to the font to be hinted; in particular, it must have proper blue zone characters so that ttfautohint can derive blue zones at all.

ttfautohintGUI doesn’t have this command line option.

Hint Set Range Minimum, Hint Set Range Maximum

See ‘Hint Sets’ for a definition and explanation.

--hinting-range-min=n, -l n
The minimum PPEM value (in pixels) at which hint sets are created. The default value for n is 8.
--hinting-range-max=n, -r n
The maximum PPEM value (in pixels) at which hint sets are created. The default value for n is 50.

Increasing the range given by -l and -r normally makes the font’s bytecode larger.

Default Script

--default-script=s, -D s
Set default script to tag s, which is a string consisting of four lowercase characters like latn or dflt. It is needed to specify the OpenType default script: After applying all features that are handled specially (like small caps or superscript), ttfautohint uses this value for the remaining features. The default value is latn. See below for more details.

Fallback Script

--fallback-script=s, -f s
Set fallback script to tag s, which is a string consisting of four characters like latn or dflt. It gets used for all glyphs that can’t be assigned to a script automatically. The default value is none. See below for more details.
--fallback-scaling, -S
Use scaling for glyphs covered by the fallback script, not hinting. See below for more details.

Hinting Limit

--hinting-limit=n, -G n

The hinting limit is the PPEM value (in pixels) where hinting gets switched off (using the INSTCTRL bytecode instruction, not the gasp table data); it does not influence the file size. The default value for n is 200, which means that the font is not hinted for PPEM values larger than 200.

Note that hinting in the range ‘hinting-range-max’ up to ‘hinting-limit’ uses the hinting configuration for ‘hinting-range-max’.

To omit a hinting limit, use --hinting-limit=0 (or check the ‘No Hinting Limit’ box in the GUI). Since this causes internal math overflow in the rasterizer for large pixel values (> 1500px approx.) it is strongly recommended to not use this except for testing purposes.

x Height Increase Limit

--increase-x-height=n, -x n

Normally, ttfautohint rounds the x height to the pixel grid, with a slight preference for rounding up (to use the terminology of TrueType’s ‘Super Round’ bytecode instruction, the threshold is 5/8px). If this flag is set, values in the PPEM range 6 to n are much more often rounded up (setting the threshold to 13/16px). The default value for n is 14. Use this flag to increase the legibility of small sizes if necessary; you might get weird rendering results otherwise for glyphs like ‘a’ or ‘e’, depending on the font design.

To switch off this feature, use --increase-x-height=0 (or check the ‘No x Height Increase’ box in the GUI). To switch off rounding the x height to the pixel grid in general, either partially or completely, see ‘x Height Snapping Exceptions’.

The following FontForge snapshot images use the font ‘Mertz Bold’ from Vernon Adams.

At 17px, without option -x and -a qqq, the hole in glyph e looks very grey in the FontForge snapshot, and the GDI ClearType rendering (which is the default on older Windows versions) fills it completely with black because it uses B/W rendering along the y axis. ttfautohint’s smooth stem width algorithm intentionally aligns horizontal lines to non-integer (but still discrete) values to avoid large glyph shape distortions.

At 17px, without option -x and -a qqq, the hole in glyph ‘e’ looks very grey in the FontForge snapshot, and the GDI ClearType rendering (which is the default on older Windows versions) fills it completely with black because it uses B/W rendering along the y axis. ttfautohint’s ‘smooth’ stem width algorithm intentionally aligns horizontal lines to non-integer (but still discrete) values to avoid large glyph shape distortions.

The same, this time with option -x 17 (and -a   qqq).

The same, this time with option -x 17 (and -a qqq).

x Height Snapping Exceptions

--x-height-snapping-exceptions=string, -X string

A list of comma separated PPEM values or value ranges at which no x height snapping shall be applied. A value range has the form value1-value2, meaning value1 <= PPEM <= value2. value1 or value2 (or both) can be missing; a missing value is replaced by the beginning or end of the whole interval of valid PPEM values, respectively (6 to 32767). Whitespace is not significant; superfluous commas are ignored, and ranges must be specified in increasing order. For example, the string "7-9, 11, 13-" means the values 7, 8, 9, 11, 13, 14, 15, etc. Consequently, if the supplied argument is "-", no x height snapping takes place at all. The default is the empty string (""), meaning no snapping exceptions.

Normally, x height snapping means a slight increase in the overall vertical glyph size so that the height of lowercase glyphs gets aligned to the pixel grid (this is a global feature, affecting all glyphs of a font). However, having larger vertical glyph sizes is not always desired, especially if it is not possible to adjust the usWinAscent and usWinDescent values from the font’s OS/2 table so that they are not too tight. See ‘Windows Compatibility’ for more details.

Fallback Stem Width

--fallback-stem-width=n, -H n

Set the horizontal stem width (hinting) value for all scripts that lack proper standard characters in the font. The value is given in font units and must be a positive integer. If not set, ttfautohint uses a hard-coded default (50 units at 2048 units per EM, and linearly scaled for other UPEM values, for example 24 units at 1000 UPEM).

For symbol fonts, you need option --fallback-script too (to set up a script at all).

In the GUI, uncheck the ‘Default Fallback Stem Width’ box to activate this feature.

Windows Compatibility

--windows-compatibility, -W

This option makes ttfautohint add two artificial blue zones, positioned at the usWinAscent and usWinDescent values (from the font’s OS/2 table). The idea is to help ttfautohint so that the hinted glyphs stay within this horizontal stripe since older versions of Windows clip everything that lies outside.

There is a general problem with tight values for usWinAscent and usWinDescent; a good description is given in the Vertical Metrics How-To. Additionally, there is a special problem with tight values if used in combination with ttfautohint because the auto-hinter tends to slightly increase the vertical glyph dimensions at smaller sizes to improve legibility. This enlargement can make the heights and depths of glyphs exceed the range given by usWinAscent and usWinDescent.

If ttfautohint is part of the font creation tool chain, and the font designer can adjust those two values, a better solution instead of using option -W is to reserve some vertical space for ‘padding’: For the auto-hinter, the difference between a top or bottom outline point before and after hinting is less than 1px, thus a vertical padding of 2px is sufficient. Assuming a minimum hinting size of 6ppem, adding two pixels gives an increase factor of 8÷6 = 1.33. This is near to the default baseline-to-baseline distance used by TeX and other sophisticated text processing applications, namely 1.2×designsize, which gives satisfying results in most cases. It is also near to the factor 1.25 recommended in the abovementioned how-to. For example, if the vertical extension of the largest glyph is 2000 units (assuming that it approximately represents the designsize), the sum of usWinAscent and usWinDescent could be 1.25×2000 = 2500.

In case ttfautohint is used as an auto-hinting tool for fonts that can be no longer modified to change the metrics, option -W in combination with ‘-X "-"’ to suppress any vertical enlargement should prevent almost all clipping.

Adjust Subglyphs

--adjust-subglyphs, -p
Adjusting subglyphs makes a font’s original bytecode be applied to all glyphs before it is replaced with bytecode created by ttfautohint. This makes only sense if your font already has some hints in it that modify the shape even at EM size (normally 2048px); in particular, some CJK fonts need this because the bytecode is used to scale and shift subglyphs (hence the option’s long name). For most fonts, however, this is not the case.

Hint Composites

--composites, -c

By default, the components of a composite glyph get hinted separately. If this flag is set, the composite glyph itself gets hinted (and the hints of the components are ignored). Using this flag increases the bytecode size a lot, however, it might yield better hinting results – usually, it doesn’t.

If this option is used (and a font actually contains composite glyphs), ttfautohint currently cannot reprocess its own output for technical reasons, see below.

Symbol Font

--symbol, -s

Process a font that ttfautohint would refuse otherwise because it can’t find a single standard character for any of the supported scripts.

For all scripts that lack proper standard characters, ttfautohint uses a default (hinting) value for the standard stem width instead of deriving it from a script’s set of standard characters (for the latin script, one of them is character ‘o’).

Use this option – usually in combination with the --fallback-script and/or --fallback-stem-width option – to hint symbol or dingbat fonts or math glyphs, for example.

Dehint

--dehint, -d
Strip off all hints without generating new hints. Consequently, all other hinting options are ignored. This option is intended for testing purposes.

ttfautohint Info

--no-info, -n

Don’t add ttfautohint version and command line information to the version string or strings (with name ID 5) in the font’s name table. In the GUI, it corresponds to value ‘None’ in the ‘ttfautohint info’ combo box.

This option is mutually exclusive with option -I.

--detailed-info, -I

Add ttfautohint version and command line information to the version string or strings (with name ID 5) in the font’s name table. In the GUI, it corresponds to value ‘Version and Parameters’ in the ‘ttfautohint info’ combo box.

This option is mutually exclusive with option -n.

If neither -n nor -I is set, the string ‘ttfautohint (vNNN)’ gets added to the name table (with NNN the current version); this correponds to value ‘Version’ in the ‘ttfautohint info’ combo box.

Add TTFA Info Table

--ttfa-table, -t

Add an SFNT table called TTFA to the output font that holds a dump of all parameters; the data resembles the format of the --debug option’s parameter listing. In particular, it lists all ttfautohint control instructions (which are not shown in the name table info). This option is mainly for archival purposes so that all information used to create a font is stored in the font itself. Note that such a TTFA table gets ignored by all TrueType rendering engines.

Forthcoming versions of the ttfautohint front-ends will be able to use this data so that a font can be processed another time with exactly the same parameters, thus providing a means for round-tripping fonts.

Family Suffix

--family-suffix=string, -F string

A string that gets appended to the family name in entries with IDs 1, 4, 6, 16, and 21 in the font’s name table. Allowed input is ASCII in the range 0x20-0x7E except characters %()/<>[]{}.

Assuming an input family name ‘Foo’, a full name ‘Foo Bold’, and a family suffix ‘ 1’, the output family name will be ‘Foo 1’ and the full name ‘Foo 1 Bold’. For the PostScript name in ID 6, ttfautohint uses the suffix with space characters removed (for example ‘Foo1Bold’).

This option is mainly for testing purposes, enabling the operating system to simultaneously display several instances of a font that are processed with different ttfautohint parameters.

Reference Face Index

--reference-index=n, -Z n

Set the face index for the blue zone reference font if the font is a TrueType collection (.ttc). For normal TrueType fonts, the value is always zero (which is also the default).

ttfautohintGUI doesn’t have this command line option.

Stem Width and Positioning Mode

--stem-width-mode=string, -a string

ttfautohint provides three different algorithms for computing horizontal stem widths and the positioning of blue zones.

  • ‘natural’: No adjustments to stem widths, discrete blue zone positioning. This is what FreeType uses for its ‘light’ (auto-)hinting mode. Essentially no glyph shape distortion, low contrast.

  • ‘quantized’: Both stem widths and blue zone positions are slightly quantized to take discrete values. For example, stem values 50, 51, 72, 76, and 100 would become 50, 74, and 100 (or something similar). More glyph shape distortion but increased contrast.

  • ’strong: If active, stem widths and blue zones are snapped and positioned to integer pixel values as much as possible. This gives high contrast, but glyph shape distortion can be significant.

These three algorithms are mapped onto three possible rendering targets.

  • Grayscale rendering, with or without optimization for subpixel positioning (e.g., Android).

  • ‘GDI ClearType’ rendering: the rasterizer version, as returned by the GETINFO bytecode instruction, is in the range 36 <= version <= 38 and ClearType is enabled (e.g., Windows XP).

  • ‘DirectWrite ClearType’ rendering: the rasterizer version, as returned by the GETINFO bytecode instruction, is >= 39, ClearType is enabled, and subpixel positioning is enabled also (e.g., Internet Explorer 9 running on Windows 7).

GDI ClearType uses a mode similar to B/W rendering along the vertical axis, while DW ClearType applies grayscale rendering. Additionally, only DW ClearType provides subpixel positioning along the x axis. For what it’s worth, the rasterizers version 36 and version 38 in Microsoft Windows are two completely different rendering engines.

[Note that the GDI framework on Windows 10 no longer uses B/W rendering along the vertical axis; we consequently treat it as DW ClearType also. We test this by looking at bit 11 of the GETINFO instruction, which was introduced in rasterizer version 40.]

The command line option expects string to contain exactly three letters with possible values ‘n’ for natural, ‘q’ for quantized, and ‘s’ for strong stem width and positioning mode. The first, second, and third letter correspond to grayscale, GDI ClearType, and DW ClearType rendering, respectively. The default value is qsq, which means that the ‘quantized’ algorithm gets used for grayscale and DW ClearType, and the ‘strong’ algorithm for GDI ClearType. For example, to use the ‘natural’ algorithm for all three rendering targets, use option -a nnn.

In the GUI, simply select the desired stem width algorithm in the three combo boxes.

This image shows different versions of glyph g of the font Merriweather-Black as displayed with the ftgrid demo program of FreeType. Top left is unhinted, top right is hinted using ttfautohint natural stem width mode. Bottom left and right uses the quantized and strong stem width modes, respectively.

This image shows different versions of glyph ‘g’ of the font Merriweather-Black as displayed with the ‘ftgrid’ demo program of FreeType. Top left is unhinted, top right is hinted using ttfautohint natural stem width mode. Bottom left and right uses the quantized and strong stem width modes, respectively.

Miscellaneous

Watch input files   (ttfautohintGUI only)

If this checkbox is set, automatically regenerate the output file as soon as an input file (either the font, the control instructions file, or the reference font) gets modified.

Pressing the ‘Run’ button starts watching. If an error occurs, watching stops and must be restarted with the ‘Run’ button.

--ignore-restrictions, -i

By default, fonts that have bit 1 set in the ‘fsType’ field of the OS/2 table are rejected. If you have a permission of the font’s legal owner to modify the font, specify this command line option.

If this option is not set, ttfautohintGUI shows a dialogue to handle such fonts if necessary.

--help, -h
On the console, print a brief documentation on standard output and exit. This doesn’t work with ttfautohintGUI on MS Windows.
--version, -v
On the console, print version information on standard output and exit. This doesn’t work with ttfautohintGUI on MS Windows.
--ttfa-info, -T   (not in ttfautohintGUI)
Print TTFA table of the input font on standard output if present, then exit.
--debug   (not in ttfautohintGUI)

Print a lot of debugging information on standard error while processing a font (you should redirect stderr to a file).

To reduce the amount of debug data it is recommended to restrict the hinting process to a single PPEM value, e.g.,

   ttfautohint --debug -l 15 -r 15 ... > debug.txt 2>&1

Background and Technical Details

Real-Time Grid Fitting of Typographic Outlines is a scholarly paper that describes FreeType’s auto-hinter in some detail. Regarding the described data structures it is slightly out of date, but the algorithm itself hasn’t changed in general.

The next few subsections are mainly based on this article, introducing some important concepts. Note that ttfautohint only does hinting along the vertical direction (modifying y coordinates only).

Segments and Edges

A glyph consists of one or more contours (this is, closed curves). For example, glyph ‘O’ consists of two contours, while glyph ‘I’ has only one.

The letter O has two contours, an inner and an outer one, while letter I has only an outer contour.

The letter ‘O’ has two contours, an inner and an outer one, while letter ‘I’ has only an outer contour.

A segment is a series of consecutive points of a contour (including its Bézier control points) that are approximately aligned along a coordinate axis. A segment has one of three possible directions: left, right, or none (which means neither left nor right), derived from the TrueType outline directions. ttfautohint itself creates segments that contain at least two points. Using control instructions, however, it is possible to create one-point segments, which are useful for fine-tuning the hinting process.

A serif. Contour and control points are represented by squares and circles, respectively. The bottom line DE is approximately aligned along the horizontal axis, thus it forms a segment of 7 points. Together with the two other horizontal segments, BC and FG, they form two edges (BC+FG, DE).

A serif. Contour and control points are represented by squares and circles, respectively. The bottom ‘line’ DE is approximately aligned along the horizontal axis, thus it forms a segment of 7 points. Together with the two other horizontal segments, BC and FG, they form two edges (BC+FG, DE).

An edge corresponds to a single coordinate value (allowing for a small threshold) on the main dimension that collects one or more segments, all pointing into the same direction (either left or right, all others are ignored). While finding segments is done on the unscaled outline, finding edges is bound to the device resolution. See below for an example.

In general, segments and edges pointing into different directions ‘repel’ each other, thus preventing alignment on the same vertical coordinate if they are near. Note that this is a simplification, but it should help understand how to manipulate and/or create segments in control instructions files.

The analysis to find segments and edges is specific to a writing system, see below.

Feature Analysis

The auto-hinter analyzes a font in two steps. Right now, everything described here happens for the horizontal axis only, providing vertical hinting.

  • Global Analysis

    This affects the hinting of all glyphs, trying to give them a uniform appearance.

    • Compute standard horizontal stem width of the font. The value is normally taken from glyphs that resemble letter ‘o’.

      If, for a given script, there is no glyph for at least one standard character in the input font, a fallback stem width gets used. See also option --fallback-stem-width.

      The stem width(s) found by the algorithm can be overridden with the width control instruction.

    • Compute blue zones, see below.

    If the stem widths of single glyphs differ by a large value, or if ttfautohint fails to find proper blue zones, hinting becomes quite poor, possibly leading even to severe shape distortions.

script-specific standard characters of the ‘latin’ writing system
Script Standard characters
adlm ‘𞤌’, U+1E90C, ADLAM CAPITAL LETTER O
‘𞤮’, U+1E92E, ADLAM SMALL LETTER O
arab ‘ـ’, U+0640, ARABIC TATWEEL
‘ل’, U+0644, ARABIC LETTER LAM
‘ح’, U+062D, ARABIC LETTER HAH
armn ‘օ’, U+0585, ARMENIAN SMALL LETTER OH
‘Օ’, U+0555, ARMENIAN CAPITAL LETTER OH
avst ‘ð¬šâ€™, U+10B1A, AVESTAN LETTER THE
bamu Ԑ۪݉, U+A6C1, BAMUM LETTER YUQ
‘ꛯ’, U+A6EF, BAMUM LETTER KOGHOM
beng ‘০’, U+09E6, BENGALI DIGIT ZERO
‘৪’, U+09EA, BENGALI DIGIT FOUR
buhd ԇ܉۪, U+174B, BUHID LETTER MA
‘á’, U+174F, BUHID LETTER WA
cakm ‘𑄤’, U+11124, CHAKMA LETTER WAA
‘𑄉’, U+11109, CHAKMA LETTER GAA
‘𑄛’, U+1111B, CHAKMA LETTER PAA
cans ‘ᑌ’, U+144C, CANADIAN SYLLABICS TE
‘ᓚ’, U+14DA, CANADIAN SYLLABICS LA
cari ‘ðŠ«â€™, U+102AB, CARIAN LETTER O
‘ð‹‰â€™, U+102C9, CARIAN LETTER RR
cher ‘Ꭴ’, U+13A4, CHEROKEE LETTER U
‘á…’, U+13C5, CHEROKEE LETTER NV
‘ꮕ’, U+AB95, CHEROKEE SMALL LETTER NV
copt ‘Ⲟ’, U+2C9E, COPTIC CAPITAL LETTER O
‘ⲟ’, U+2C9F, COPTIC SMALL LETTER O
cprt ‘ð …’, U+10805, CYPRIOT SYLLABLE JA
‘ð £â€™, U+10823, CYPRIOT SYLLABLE RA
cyrl ‘о’, U+043E, CYRILLIC SMALL LETTER O
‘О’, U+041E, CYRILLIC CAPITAL LETTER O
deva ‘ठ’, U+0920, DEVANAGARI LETTER TTHA
‘व’, U+0935, DEVANAGARI LETTER VA
‘ट’, U+091F, DEVANAGARI LETTER TTA
dsrt ‘ð„’, U+10404, DESERET CAPITAL LETTER LONG O
‘ð¬â€™, U+1042C, DESERET SMALL LETTER LONG O
ethi ԇ܉۪, U+12D0, ETHIOPIC SYLLABLE PHARYNGEAL A
geor ‘ი’, U+10D8, GEORGIAN LETTER IN
‘ე’, U+10D4, GEORGIAN LETTER EN
ԇĉ۪, U+10D0, GEORGIAN LETTER AN
geok ‘Ⴖ’, U+10B6, GEORGIAN CAPITAL LETTER GHAN
‘Ⴑ’, U+10B1, GEORGIAN CAPITAL LETTER SAN
‘ⴙ’, U+2D19, GEORGIAN SMALL LETTER CHIN
glag ‘Ⱅ’, U+2C15, GLAGOLITIC CAPITAL LETTER TVRIDO
‘ⱅ’, U+2C45, GLAGOLITIC SMALL LETTER TVRIDO
goth ‘ðŒ´â€™, U+10334, GOTHIC LETTER AIHVUS
‘ðŒ¾â€™, U+1033E, GOTHIC LETTER JER
‘ðƒâ€™, U+10343, GOTHIC LETTER SAUIL
grek ‘ο’, U+03BF, GREEK SMALL LETTER OMICRON
‘Ο’, U+039F, GREEK CAPITAL LETTER OMICRON
gujr ‘ટ’, U+0A9F, GUJARATI LETTER TTA
‘૦’, U+0AE6, GUJARATI DIGIT ZERO
guru ‘ਠ’, U+0A20, GURMUKHI LETTER TTHA
‘ਰ’, U+0A30, GURMUKHI LETTER RA
‘੦’, U+0A66, GURMUKHI DIGIT ZERO
hebr ‘×’, U+05DD, HEBREW LETTER FINAL MEM
kali ‘ê¤â€™, U+A90D, KAYAH LI LETTER NGA
‘꤀’, U+A900, KAYAH LI DIGIT ZERO
knda ‘೦’, U+0CE6, KANNADA DIGIT ZERO
‘ಬ’, U+0CAC, KANNADA LETTER BA
khmr ‘០’, U+17E0, KHMER DIGIT ZERO
lao Ԉȉ۪, U+0ED0, LAO DIGIT ZERO
latn ‘o’, U+006F, LATIN SMALL LETTER O
‘O’, U+004F, LATIN CAPITAL LETTER O
‘0’, U+0030, DIGIT ZERO
lisu ‘ꓳ’, U+A4F3, LISU LETTER
mlym ‘ഠ’, U+0D20, MALAYALAM LETTER TTHA
‘റ’, U+0D31, MALAYALAM LETTER RRA
mymr ԇۉ۪, U+101D, MYANMAR LETTER WA
‘င’, U+1004, MYANMAR LETTER NGA
‘ဂ’, U+1002, MYANMAR LETTER GA
nkoo ‘ߋ’, U+07CB, NKO LETTER EE
‘߀’, U+07C0, NKO DIGIT ZERO
olck ‘ᱛ’, U+1C5B, OL CHIKI LETTER AT
orkh ‘ð°—’, U+10C17, OLD TURKIC LETTER YENISEI AY
osge ‘ð“‚’, U+104C2, OSAGE CAPITAL LETTER O
‘ð“ªâ€™, U+104EA, OSAGE SMALL LETTER O
osma ‘ð’†â€™, U+10486, OSMANYA LETTER DEEL
‘ð’ â€™, U+104A0, OSMANYA DIGIT ZERO
saur ‘ê¢â€™, U+A89D, SAURASHTRA LETTER TTHA
‘ê£â€™, U+A8D0, SAURASHTRA DIGIT ZERO
shaw ‘ð‘´â€™, U+10474, SHAVIAN LETTER OAK
sinh ‘ට’, U+0DA7, SINHALA LETTER ALPAPRAANA TTAYANNA
sund ‘᮰’, U+1BB0, SUNDANESE DIGIT ZERO
taml ‘௦’, U+0BE6, TAMIL DIGIT ZERO
tavt ‘ꪒ’, U+AA92, TAI VIET LETTER LOW DO
‘ꪫ’, U+AAAB, TAI VIET LETTER HIGH VO
telu ‘౦’, U+0C66, TELUGU DIGIT ZERO
‘౧’, U+0C67, TELUGU DIGIT ONE
tfng ‘ⵔ’, U+2D54, TIFINAGH LETTER YAR
thai ‘า’, U+0E32, THAI CHARACTER SARA AA
‘ๅ’, U+0E45, THAI CHARACTER LAKKHANGYAO
‘à¹â€™, U+0E50, THAI DIGIT ZERO
vaii ‘ꘓ’, U+A613, VAI SYMBOL FEENG
‘ꖜ’, U+A59C, VAI SYLLABLE BHU
‘ꖴ’, U+A5B4, VAI SYLLABLE KU
standard characters of the ‘latin’ writing system, special scripts
Script Standard characters
khms ‘᧡’, U+19E1, KHMER SYMBOL MUOY KOET
‘᧪’, U+19EA, KHMER SYMBOL DAP KOET
latb ‘ₒ’, U+2092, LATIN SUBSCRIPT SMALL LETTER O
‘₀’, U+2080, SUBSCRIPT ZERO
latp ‘ᵒ’, U+1D52, MODIFIER LETTER SMALL O
‘ᴼ’, U+1D3C, MODIFIER LETTER CAPITAL O
‘â°â€™, U+2070, SUPERSCRIPT ZERO
  • Glyph Analysis

    This is a per-glyph operation.

    • Find segments and edges.

    • Link edges to set up stems and serifs. The abovementioned paper gives more details on what exactly constitutes a stem or a serif and how the algorithm works.

Blue Zones

Two blue zones relevant to the glyph a. Vertical point coordinates of all glyphs within these zones are aligned, provided the blue zone is active (this is, its vertical size is smaller than 3/4 pixels).

Two blue zones relevant to the glyph ‘a’. Vertical point coordinates of all glyphs within these zones are aligned, provided the blue zone is active (this is, its vertical size is smaller than 3/4 pixels).

Outlines of certain characters are used to determine blue zones. This concept is the same as with Type 1 fonts: All glyph points that lie in certain small horizontal zones get aligned vertically.

The tables below show the blue zone characters of all available scripts of the latin writing system; the values are hard-coded in the source code. Since the auto-hinter takes mean values it is not necessary that all characters of a zone are present.

‘Round’ characters in blue zones (e.g., the top and bottom of ‘O’ or the bottom of ‘g’) are used to control overshoot handling.

Blue zones marked with an asterisk are x height blue zones, which are adjusted to be on the pixel grid (to improve rendering at small sizes) by scaling the remaining blue zones before they are adjusted to the grid. See also option --increase-x-height.

adlm (Adlam) blue zones
ID Blue zone Characters
1 top of capital letters 𞤌 𞤅 𞤈 𞤠𞤔 𞤚
2 bottom of capital letters 𞤂 𞤖
3* top of small letters 𞤬 𞤮 𞤻 𞤼 𞤾
4 bottom of small letters 𞤤 𞤨 𞤩 𞤭 𞤴 𞤸 𞤺 𞥀
arab (Arabic) blue zones
ID Blue zone Characters
1 top of letters with vertical stroke ا إ ل ك ط ظ
2 bottom of letters ت ث ط ظ ك
3 glyph joining Ù€
armn (Armenian) blue zones
ID Blue zone Characters
1 top of capital letters Ô± Õ„ Õ’ Õ“ Ô² Ô³ Ô´ Õ•
2 bottom of capital letters Õ’ Õˆ Õ“ Õƒ Õ‡ Õ Õ Õ•
3 top of ascenders of small letters Õ¥ Õ§ Õ« Õ´ Õ¾ Öƒ Ö† Öƒ
4* top of small letters Õ¡ Õµ Ö‚ Õ½ Õ£ Õ» Ö€ Ö…
5 bottom of small letters Õ° Õ¸ Õ³ Õ¡ Õ¥ Õ® Õ½ Ö…
6 bottom of descenders of small letters Õ¢ Õ¨ Õ« Õ¬ Õ² Õº Öƒ Ö
avst (Avestan) blue zones
ID Blue zone Characters
1 top of letters 𬀠ð¬ ð¬ ð¬›
2 bottom of letters 𬀠ð¬
bamu (Bamum) blue zones
ID Blue zone Characters
1 top of letters êš§ ꚨ ê›› ꛉ ê› ê›ˆ ꛫ ꛯ
2 bottom of letters ꚭ ꚳ ꚶ ꛬ ꚢ ꚽ ꛯ ꛲
beng (Bengali) blue zones
ID Blue zone Characters
1 baseline (flat glyphs only) অ ড ত ন ব ভ ল ক
2 top of ascenders ই ট ঠ ি ী ৈ ৗ
3* top of baseline ও ঠড ত ন ব ল ক
4 bottom of base characters অ ড ত ন ব ভ ল ক

Contrary to scripts like latin, the baseline in Bengali is on the top, and we hint from top to bottom.

buhd (Buhid) blue zones
ID Blue zone Characters
1 top of letters á áˆ
2 top of large letters á… áŠ áŽ
3* top of small letters ႠრበáŒ
4 bottom of letters ဠრᆠበዠá á‘
cakm (Chakma) blue zones
ID Blue zone Characters
1 top of letters 𑄃 𑄅 𑄉 𑄙 𑄗
2 bottom of letters ð‘„… ð‘„› ð‘„ ð‘„— ð‘„“
3 bottom of descenders of letters 𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢
cans (Canadian Syllabics) blue zones
ID Blue zone Characters
1 top of letters á—œ á–´ á á’£ á‘« ᑎ ᔑ á—°
2 bottom of letters ᗶ ᖵ ᒧ რᑌ ᒠᔑ ᗢ
3* top of small letters ᓓ ᓕ ᓀ ᓂ ᓄ ᕄ ᕆ ᘣ
4 bottom of small letters ᕃ ᓂ ᓀ ᕂ ᓗ ᓚ ᕆ ᘣ
5 top of superscript letters ᪠ᙆ ᣘ ᢠᒾ ᣗ ᔆ
6 bottom of superscript letters ᙆ ᗮ ᒻ ហᔆ ᒡ ᒢ ᓑ
cari (Carian) blue zones
ID Blue zone Characters
1 top of letters ðŠ§ ðŠ« ðŠ¬ ðŠ­ ðŠ± ðŠº ðŠ¼ ðŠ¿
2 bottom of letters ðŠ£ ðŠ§ ðŠ· ð‹€ ðŠ« ðŠ¸ ð‹‰
cher (Cherokee) blue zones
ID Blue zone Characters
1 top of capital letters ᆠᎻ Ꭼ რᎤ ᣠᎦ á•
2 bottom of capital letters ᆠᎻ Ꭼ რᎤ ᣠᎦ á•
3 top of ascenders of small letters ê®’ ꮤ ê®¶ ê­´ ê­¾ ê®— ê® ê®¿
4* top of small letters ꮖ ꭼ ꮓ ꮠ ꮳ ꭶ ꮥ ꮻ
5 bottom of small letters ꮖ ꭼ ꮓ ꮠ ꮳ ꭶ ꮥ ꮻ
6 bottom of descenders of small letters á¸ ê® ê­¹ ê­»
copt (Coptic) blue zones
ID Blue zone Characters
1 top of capital letters Ⲍ Ⲏ Ⲡ Ⳟ Ⲟ ⲠⲤ Ⳋ
2 bottom of capital letters ⳠⳘ Ⳟ Ⲏ Ⲟ ⲠⳜ Ⲱ
3* top of small letters ⲠⲠⲡ ⳟ ⲟ ⲑ ⲥ ⳋ
4 bottom of small letters ⳑ ⳙ ⳟ Ⲡⲟ ⲑ ⳠⳒ
cprt (Cypriot) blue zones
ID Blue zone Characters
1 top of letters ð  ð ™ ð ³ ð ± ð … ð “ ð £ ð ¦
2 bottom of letters ð ƒ ð Š ð › ð £ ð ³ ð µ ð 
3 top of small letters ð ˆ ð  ð –
4 bottom of small letters ð ˆ ð  ð –
cyrl (Cyrillic) blue zones
ID Blue zone Characters
1 top of capital letters Б В Е П З О С Э
2 bottom of capital letters Б В Е Ш З О С Э
3* top of small letters Ñ… п н ш е з о Ñ
4 bottom of small letters Ñ… п н ш е з о Ñ
5 bottom of descenders of small letters р у ф
deva (Devanagari) blue zones
ID Blue zone Characters
1 top of ascenders ई ठओ औ ि ी ो ौ
2 top of baseline क म अ आ थ ध भ श
3* top of baseline (flat glyphs only) क न म उ छ ट ठ ड
4 bottom of base characters क न म उ छ ट ठ ड
5 bottom of descenders ॠृ

Contrary to scripts like latin, the baseline in Devanagari is on the top, and we hint from top to bottom. Note that some fonts have extreme variation in the height of the round elements in Zone 3; for this reason we also define Zone 1, which must be always present.

dsrt (Deseret) blue zones
ID Blue zone Characters
1 top of capital letters ð‚ ð„ ð‹ ð— ð‘
2 bottom of capital letters ð€ ð‚ ð„ ð— ð›
3* top of small letters ðª ð¬ ð³ ð¿ ð¹
4 bottom of small letters ð¨ ðª ð¬ ð¿ ð‘ƒ
ethi (Ethiopian) blue zones
ID Blue zone Characters
1 top of letters ሀ ሃ ዘ á ማ በ á‹‹ á‹
2 bottom of letters ለ ሠበ ዘ ሀ ሪ ዠጨ
geok (Georgian Khutsuri) blue zones
ID Blue zone Characters
1 top of Asomtavruli letters Ⴑ Ⴇ Ⴙ Ⴜ Ⴄ Ⴅ Ⴓ Ⴚ
2 bottom of Asomtavruli letters Ⴄ Ⴅ Ⴇ Ⴈ Ⴆ Ⴑ Ⴊ Ⴋ
3* top of Nuskhuri letters â´ â´— â´‚ â´„ â´… â´‡ â´” â´–
4 bottom of Nuskhuri letters ⴈ ⴌ ⴖ ⴎ ⴃ ⴆ ⴋ ⴢ
5 top of ascender Nuskhuri letters â´ â´‘ â´“ â´• â´™ â´› â´¡ â´£
6 bottom of Nuskhuri descender letters â´„ â´… â´” â´• â´ â´‚ â´˜ â´

Georgian Asomtavruli and Nuskhuri form the old ecclesiastical script, Khutsuri. Note that fonts show a great variation in height and depth of ascender and descender letter forms.

geor (Georgian Mkhedruli) blue zones
ID Blue zone Characters
1* top of Mkhedruli letters გ დ ე ვ თ ი რღ
2 bottom of Mkhedruli letters რზ მ ს შ ძ ხ ჰ
3 top of ascender Mkhedruli letters ს ხ ქ ზ მ შ ჩ წ
4 bottom of descender Mkhedruli letters ე ვ ჟ ტ უ ფ ქ ყ

Georgian Mkhedruli support is incomplete; it doesn’t yet contain characters for Mtavruli (which are not yet encoded in Unicode), the uppercase glyph variants of Mkhedruli.

glag (Glagolitic) blue zones
ID Blue zone Characters
1 top of capital letters â°… â°” â°ª â°„ â°‚ â°Š â°« â°‹
2 bottom of capital letters â°… â°„ â°‚ â°ª â°ž â°¡ â°Š â°”
3* top of small letters ⰵ ⱄ ⱚ ⰴ ⰲ ⰺ ⱛ ⰻ
4 bottom of small letters ⰵ ⰴ ⰲ ⱚ ⱎ ⱑ ⰺ ⱄ
goth (Gothic) blue zones
ID Blue zone Characters
1 top of letters ðŒ² ðŒ¶ ð€ ð„ ðŒ´ ðƒ ðˆ ðŒ¾
2 bottom of letters ðŒ¶ ðŒ´ ðƒ ðˆ
grek (Greek) blue zones
ID Blue zone Characters
1 top of capital letters Γ Β Ε Ζ Θ Ο Ω
2 bottom of capital letters Β Δ Ζ Ξ Θ Ο
3 top of ‘small beta’ like letters β θ δ ζ λ ξ
4* top of small letters α ε ι ο π σ τ ω
5 bottom of small letters α ε ι ο π σ τ ω
6 bottom of descenders of small letters β γ η μ Ï Ï† χ ψ
gujr (Gujarati) blue zones
ID Blue zone Characters
1* top of letters ત ન ઋ ઌ છ ટ ર ૦
2 bottom of letters ખ ગ ઘ ઞ ઇ ઈ ઠ જ
3 top of ascenders ઈ ઊ િ à«€ લી શà«àªšàª¿ જિ સી
4 bottom of descenders ૠૃ ૄ ખૠછૃ છૄ
5 top of Gujarati digits ૦ ૧ ૨ ૩ ૭
guru (Gurmukhi) blue zones
ID Blue zone Characters
1 top of ascenders ਇ ਈ ਉ ਠਓ ੳ ਿ ੀ
2 top of baseline ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ
3* top of baseline (flat glyphs only) ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ
4 bottom of characters ਅ ਠਓ ਗ ਜ ਠ ਰ ਸ
5 top of Gurmukhi digits ੦ ੧ ੨ ੩ ੭
hebr (Hebrew) blue zones
ID Blue zone Characters
1 top of letters ב ד ×” ×— ך ×› × ×¡
2 bottom of letters ב ט ×› × ×¡ צ
3 bottom of descenders of letters ק ך ן ף ץ
kali (Kayah Li) blue zones
ID Blue zone Characters
1* top of letters ꤅ ê¤ ê¤ ê¤‹ ꤀ ê¤
2 bottom of letters ꤈ ꤘ ꤀ ê¤ ê¤¢
3 top of ascending letters ꤖ ꤡ
4 bottom of descending letters ꤑ ꤜ ꤞ
5 bottom of large descending letters ꤑ꤬ ꤜ꤭ ꤔ꤬
khmr (Khmer) blue zones
ID Blue zone Characters
1* top of letters áž áž‘ áž“ áž§ áž© áž¶
2 top of subscript cluster components ក្ក ក្ហក្គ ក្áž
3 bottom of letters ហឃ ច ឋ ប ម យ ឲ
4 bottom of descenders ážáŸ’ážš រៀ ឲ្យ អឿ
5 bottom of large descenders ន្ážáŸ’រៃ ង្ážáŸ’áž™ ក្បៀ ច្រៀ ន្ážáž¿ ល្បឿ
khms (Khmer Symbols) blue zones
ID Blue zone Characters
1* top of symbols for waxing á§  á§¡
2 bottom of symbols for waning á§¶ á§¹

Khmer symbols are used for lunar dates.

knda (Kannada) blue zones
ID Blue zone Characters
1 top of letters ಇ ಊ ಠಣ ಸಾ ನಾ ದಾ ರಾ
2 bottom of letters ಅ ಉ ಎ ಲ ೦ ೨ ೬ ೭
lao (Lao) blue zones
ID Blue zone Characters
1* top of letters າ ດ ອ ມ ລ ວ ຣ ງ
2 bottom of letters າ ອ ບ ຠຣ ຮ ວ ຢ
3 top of ascenders ປ ຢ ຟ àº
4 top of large ascenders ໂ ໄ ໃ
5 bottom of descenders ງ ຊ ຖ ຽ ໆ ຯ
latb (Latin Subscripts) blue zones
ID Blue zone Characters
1 top of capital characters ₀ ₃ ₅ ₇ ₈
2 bottom of capital characters ₀ ₠₂ ₃ ₈
3 top of ‘small f’ like characters ᵢ ⱼ ₕ ₖ ₗ
4* top of small characters ₠ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ
5 bottom of small characters ₠ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ
6 bottom of descenders of small characters ᵦ ᵧ ᵨ ᵩ ₚ

Subscript latin characters are similar to normal latin characters.

latn (Latin) blue zones
ID Blue zone Characters
1 top of capital letters T H E Z O C Q S
2 bottom of capital letters H E Z L O C U S
3 top of ‘small f’ like letters f i j k d b h
4* top of small letters u v x z o e s c
5 bottom of small letters n r x z o e s c
6 bottom of descenders of small letters p q g j y
latp (Latin Superscripts) blue zones
ID Blue zone Characters
1 top of capital characters Ⱐ³ ⵠⷠᵀ ᴴ ᴱ ᴼ
2 bottom of capital characters Ⱐ¹ ² ³ á´± á´¸ á´¼ áµ
3 top of ‘small f’ like characters ᵇ ᵈ ᵠʰ ʲ á¶  â±
4* top of small characters ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ
5 bottom of small characters ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ
6 bottom of descenders of small characters áµ– ʸ áµ

Superscript latin characters are similar to normal latin characters.

lisu (Lisu) blue zones
ID Blue zone Characters
1 top of letters ꓡ ꓧ ꓱ ꓶ ꓩ ꓚ ꓵ ꓳ
2 bottom of letters ꓕ ꓜ ꓞ ꓡ ꓛ ꓢ ꓳ ꓴ
mlym (Malayalam) blue zones
ID Blue zone Characters
1 top of letters à´’ à´Ÿ à´  à´± à´š à´ª à´šàµà´š à´ªàµà´ª
2 bottom of letters à´Ÿ à´  à´§ à´¶ à´˜ à´š à´¥ à´²
mymr (Myanmar) blue zones
ID Blue zone Characters
1* top of letters ဠဂ င ဒ ဠᥠአá‹
2 bottom of letters င ဎ ဒ ပ ဗ ဠአá‹
3 top of ascenders of characters ဩ ြ á á ᆠါ ိ
3 bottom of descenders of letters ဉ ည ဥ ဩ ဨ á‚ á… á‰
nkoo (N’Ko) blue zones
ID Blue zone Characters
1 top of letters ß ß‰ ß’ ߟ ß– ßœ ß  ߥ
2 bottom of letters ߀ ߘ ߡ ߠ ߥ
3* top of small letters ß ß› ß‹
4 bottom of small letters ߎ ß ß› ß‹
olck (Ol Chiki) blue zones
ID Blue zone Characters
1 top of letters ᱛ ᱜ ᱠᱡ ᱢ ᱥ
2 bottom of letters ᱛ ᱜ ᱠᱡ ᱢ ᱥ
orkh (Old Turkic) blue zones
ID Blue zone Characters
1 top of letters ð°— ð°˜ ð°§
2 bottom of letters ð°‰ ð°— ð°¦ ð°§
osge (Osage) blue zones
ID Blue zone Characters
1 top of capital letters ð’¾ ð“ ð“’ ð““ ð’» ð“‚ ð’µ ð“†
2 bottom of capital letters ð’° ð“ 𓂠𒿠𓎠ð’¹
3 bottom of descenders of capital letters ð’¼ ð’½ ð’¾
4* top of small letters 𓵠𓶠𓺠𓻠ð“ 𓣠𓪠ð“®
5 bottom of small letters 𓘠𓚠𓣠𓵠𓡠𓧠𓪠ð“¶
6 top of ascenders of small letters 𓤠𓦠𓸠𓹠ð“›
7 bottom of descenders of small letters 𓤠𓥠ð“¦
osma (Osmanya) blue zones
ID Blue zone Characters
1 top of letters ð’† ð’‰ ð’ ð’’ ð’˜ ð’› ð’  ð’£
2 bottom of letters ð’€ ð’‚ ð’† ð’ˆ ð’Š ð’’ ð’  ð’©
saur (Saurashtra) blue zones
ID Blue zone Characters
1 top of letters ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ê¢ ê¢›
2 bottom of letters ꢂ ꢨ ꢺ ꢤ ꢎ
shaw (Shavian) blue zones
ID Blue zone Characters
1 top of letters ð‘• ð‘™
2 bottom of letters 𑔠𑖠𑗠𑹠ð‘»
3 bottom of descenders of letters 𑟠ð‘£
4* top of small letters 𑱠𑲠𑳠𑴠𑸠𑺠ð‘¼
5 bottom of small letters ð‘´ ð‘» ð‘¹
sinh (Sinhala) blue zones
ID Blue zone Characters
1 top of letters ඉ ක චඳ ප ය ල ෆ
2 bottom of letters à¶‘ à¶” à¶ à¶¢ à¶§ à¶® à¶° à¶»
3 bottom of descenders of letters ද ඳ උ ල තූ තු බු දු
sund (Sundanese) blue zones
ID Blue zone Characters
1 top of letters ᮋ ᮞ ᮮ ᮽ ᮰ ᮈ
2 bottom of letters ᮄ ᮔ ᮕ ᮗ ᮰ ᮆ ᮈ ᮉ
3 bottom of descenders of letters ᮼ ᳄
taml (Tamil) blue zones
ID Blue zone Characters
1 top of letters உ ஒ ஓ ற ஈ க ங ச
2 bottom of letters க ச ல ஶ உ ங ட ப
tavt (Tai Viet) blue zones
ID Blue zone Characters
1 top of letters ꪆ ꪔ ꪒ ꪖ ꪫ
2 bottom of letters ꪉ ꪫ ꪮ
telu (Telugu) blue zones
ID Blue zone Characters
1 top of letters ఇ ఌ ఙ ఞ ణ ఱ ౯
2 bottom of letters అ క చ ర ఽ ౨ ౬
tfng (Tifinagh) blue zones
ID Blue zone Characters
1 top of letters ⵔ ⵙ ⵛ ⵞ ⴵ ⴼ ⴹ ⵎ
2 bottom of letters ⵔ ⵙ ⵛ ⵞ ⴵ ⴼ ⴹ ⵎ
thai (Thai) blue zones
ID Blue zone Characters
1* top of letters บ เ ๠อ ภา
2 bottom of letters บ ป ษ ฯ อ ย ฮ
3 top of ascenders of letters ป ภฟ
4 top of large ascenders of letters โ ใ ไ
5 bottom of descenders of letters ฎ ภฤ ฦ
6 bottom of large descenders of letters ภà¸
7 top of Thai digits ๠๑ ๓
vaii (Vai) blue zones
ID Blue zone Characters
1 top of vai letters ê— ê˜– ꘙ ꘜ ê–œ ê– ê”… ê•¢
2 bottom of vai letters ê— ê˜– ꘙ ê—ž ê”… ê•¢ ê–œ ꔆ
This image shows the relevant glyph terms for vertical blue zone positions.

This image shows the relevant glyph terms for vertical blue zone positions.

Grid Fitting

Aligning outlines along the grid lines is called grid fitting. It doesn’t necessarily mean that the outlines are positioned exactly on the grid, however, especially if you want a smooth appearance at different sizes. This is the central routine of the auto-hinter; its actions are highly dependent on the used writing system. Currently, only one writing system is available (latin), providing support for scripts like Latin or Greek.

  • Align edges linked to blue zones.

  • Fit edges to the pixel grid.

  • Align serif edges.

  • Handle remaining ‘strong’ points. Such points are not part of an edge but are still important for defining the shape. This roughly corresponds to the IP TrueType instruction.

  • Everything else (the ‘weak’ points) is handled with an ‘IUP’ instruction.

The following images illustrate the hinting process, using glyph ‘a’ from the freely available font ‘Ubuntu Book’. The manual hints were added by Dalton Maag Ltd, the used application to create the hinting debug snapshots was FontForge.

Before hinting.

Before hinting.

After hinting, using manual hints.

After hinting, using manual hints.

After hinting, using ttfautohint. Note that the hinting process doesn’t change horizontal positions.

After hinting, using ttfautohint. Note that the hinting process doesn’t change horizontal positions.

Hint Sets

In ttfautohint terminology, a hint set is the optimal configuration for a given PPEM (pixel per EM) value.

In the range given by the --hinting-range-min and --hinting-range-max options, ttfautohint creates hint sets for every PPEM value. For each glyph, ttfautohint automatically determines whether a new set should be emitted for a PPEM value if it finds that it differs from a previous one. For some glyphs it is possible that one set covers, say, the range 8px-1000px, while other glyphs need 10 or more such sets.

In the PPEM range below --hinting-range-min, ttfautohint always uses just one set, in the PPEM range between --hinting-range-max and --hinting-limit, it also uses just one set.

One of the hinting configuration parameters is the decision which segments form an edge. For example, let us assume that two segments get aligned on a single horizontal edge at 11px, while two edges are used at 12px. This change makes ttfautohint emit a new hint set to accomodate this situation. The next images illustrate this, using a Cyrillic letter (glyph ‘afii10108’) from the ‘Ubuntu book’ font, processed with ttfautohint.

Before hinting, size 11px.

Before hinting, size 11px.

After hinting, size 11px. Segments 43-27-28 and 14-15 are aligned on a single edge, as are segments 26-0-1 and 20-21.

After hinting, size 11px. Segments 43-27-28 and 14-15 are aligned on a single edge, as are segments 26-0-1 and 20-21.

Before hinting, size 12px.

Before hinting, size 12px.

After hinting, size 12px. The segments are not aligned. While segments 43-27-28 and 20-21 now have almost the same horizontal position, they don’t form an edge because the outlines passing through the segments point into different directions.

After hinting, size 12px. The segments are not aligned. While segments 43-27-28 and 20-21 now have almost the same horizontal position, they don’t form an edge because the outlines passing through the segments point into different directions.

Obviously, the more hint sets get emitted, the larger the bytecode ttfautohint adds to the output font. To find a good value n for --hinting-range-max, some experimentation is necessary since n depends on the glyph shapes in the input font. If the value is too low, the hint set created for the PPEM value n (this hint set gets used for all larger PPEM values) might distort the outlines too much in the PPEM range given by n and the value set by --hinting-limit (at which hinting gets switched off). If the value is too high, the font size increases due to more hint sets without any noticeable hinting effects.

Similar arguments hold for --hinting-range-min except that there is no lower limit at which hinting is switched off.

An example. Let’s assume that we have a hinting range 10 <= ppem <= 100, and the hinting limit is set to 250. For a given glyph, ttfautohint finds out that four hint sets must be computed to exactly cover this hinting range: 10-15, 16-40, 41-80, and 81-100. For PPEM values below 10ppem, the hint set covering 10-15ppem is used, for PPEM values larger than 100 the hint set covering 81-100ppem is used. For PPEM values larger than 250, no hinting gets applied.

Composite Glyphs

The ttfautohint library (and programs) supports two solutions for handling composite glyphs, to be controlled with option --composites. This section contains some general information, then covers the case where the option is off, while the next section describes how ttfautohint behaves if this option is activated.

Regardless of the --composites option, ttfautohint performs a scan over all composite glyphs to assure that components of a composite glyph inherit its style, as described later. However, components that are shifted vertically will be skipped. For example, if the glyph ‘Agrave’ uses a shifted ‘grave’ accent glyph, the accent is ignored. On the other hand, if there is a glyph ‘agrave’ that uses the same ‘grave’ glyph vertically unshifted, ‘grave’ does inherit the style.

If --composites is off, components are hinted separately, then put together. Separate hinting implies that the current style’s blue zones are applied to all subglyphs in its original, unshifted positions. In case you want to shift components vertically, it is mandatory to set bit 2 (value 4), ROUND_XY_TO_GRID, in the flag variable of the composite glyph description to get visually pleasing results, as the images below demonstrate.

Here, the subscript glyphs are composites each having a single element that is shifted down. If option --composites is not used, subglyphs are hinted before they are glued together (possibly applying scaling and shifting). Because the ROUND_XY_TO_GRID flag isn’t set, the vertical translation doesn’t align the subglyph to the pixel grid, causing severe distortions.

Here, the subscript glyphs are composites each having a single element that is shifted down. If option --composites is not used, subglyphs are hinted before they are glued together (possibly applying scaling and shifting). Because the ROUND_XY_TO_GRID flag isn’t set, the vertical translation doesn’t align the subglyph to the pixel grid, causing severe distortions.

The same as before, but with ROUND_XY_TO_GRID set. Now the subscript glyphs look identical to the superscripts.

The same as before, but with ROUND_XY_TO_GRID set. Now the subscript glyphs look identical to the superscripts.

For comparison purposes, here the result with option --composites (and no ROUND_XY_TO_GRID). The composite glyphs as a whole get hinted; consequently, the subscript glyphs get separate blue zones. At the displayed size of 16ppem the vertical positions of the subscript blue zones are rounded differently if compared to the superscript zones, thus the smaller glyph height.

For comparison purposes, here the result with option --composites (and no ROUND_XY_TO_GRID). The composite glyphs as a whole get hinted; consequently, the subscript glyphs get separate blue zones. At the displayed size of 16ppem the vertical positions of the subscript blue zones are rounded differently if compared to the superscript zones, thus the smaller glyph height.

The ‘.ttfautohint’ Glyph

If option --composites is used, ttfautohint doesn’t hint subglyphs of composite glyphs separately. Instead, it hints the whole glyph, this is, composites get recursively expanded internally so that they form simple glyphs, then hints are applied – this is the normal working mode of FreeType’s auto-hinter.

One problem, however, must be solved: Hinting for subglyphs (which usually are used as normal glyphs also) must be deactivated so that nothing but the final bytecode of the composite gets executed.

The trick used by ttfautohint is to prepend a composite element called ‘.ttfautohint’, a dummy glyph with a single point, and which has a single job: Its bytecode increases a variable (to be more precise, it is a CVT register called cvtl_is_subglyph in the source code), indicating that we are within a composite glyph. The final bytecode of the composite glyph eventually decrements this variable again.

As an example, let’s consider composite glyph ‘Agrave’ (‘À’), which has the subglyph ‘A’ as the base and ‘grave’ as its accent. After processing with ttfautohint it consists of three components: ‘.ttfautohint’, ‘A’, and ‘grave’ (in this order).

Bytecode of Action
.ttfautohint increase cvtl_is_subglyph (now: 1)
A do nothing because cvtl_is_subglyph > 0
grave do nothing because cvtl_is_subglyph > 0
Agrave decrease cvtl_is_subglyph (now: 0)
apply hints because cvtl_is_subglyph == 0

Some technical details (which you might skip): All glyph point indices get adjusted since each ‘.ttfautohint’ subglyph shifts all following indices by one. This must be done for both the bytecode and one subformat of OpenType’s GPOS anchor tables.

While this approach works fine on all tested platforms, there is one single drawback: Direct rendering of the ‘.ttfautohint’ subglyph (this is, rendering as a stand-alone glyph) disables proper hinting of all glyphs in the font! Under normal circumstances this never happens because ‘.ttfautohint’ doesn’t have an entry in the font’s cmap table. (However, some test and demo programs like FreeType’s ftview application or other glyph viewers that are able to bypass the cmap table might be affected.)

Writing Systems

In FreeType terminology, a writing system is a set of functions that provides auto-hinting for certain scripts. Right now, only two writing systems from FreeType’s auto-hinter are available in ttfautohint: ‘dummy’ and ‘latin’. The former handles the ‘no-script’ case; details to ‘latin’ follow in the next section.

Scripts

ttfautohint needs to know which script should be used to hint a specific glyph. To do so, it checks a glyph’s Unicode character code whether it belongs to a given script.

See ‘Character Ranges’ for a complete list of all handled scripts and its ranges. This list is auto-generated from a source code file, covering the ‘latin’ writing system. It also covers some non-latin scripts (in the Unicode sense) that have similar typographical properties.

In ttfautohint, scripts are identified by four-character tags (if there are less characters, spaces are appended). The value none indicates ‘no script’.

Each script is represented by two tables to handle ‘base’ and ‘non-base’ characters. For ttfautohint, a non-base character is something that should not be affected by blue zones, regardless of whether this is a spacing or no-spacing glyph. In other words, non-base characters are hinted using a script’s default stem width without applying blue zones.

Right now, there are two pseudo-scripts that are used as fallbacks: latb and latp, used for latin subscript and superscript characters, respectively. Its main usage is support of phonetic alphabets like the IPA, which intermix those characters with normal characters sitting on the baseline, and which are not specially handled in corresponding OpenType features like sups.

If a glyph’s character code is not covered by a script range, it is handled by a fallback script. By default, the fallback script is none, which indicates handling by the ‘latin’ writing system without applying script-specific blue zones (but aligning stems to the grid if possible). The fallback script can be changed; see option --fallback-script.

The user can also select whether uncovered glyphs are either hinted (which is the default) or scaled only with the fallback script’s scaling parameters. This can be controlled with option --fallback-scaling. Note that fallback scaling only makes sense if the fallback script has x height blue zones, e.g., cyrl or latn.

As a special case, specifying none as a fallback script and switching on fallback scaling (‘-f none -S’), no hinting is applied at all to uncovered glyphs – using none always implies a scaling factor of 1.

OpenType Features

(Please read the OpenType specification for details on features, GSUB, and GPOS tables, and how they relate to scripts.)

For modern OpenType fonts, character ranges are not sufficient to handle scripts.

  • Due to glyph substitution in the font (as specified in a font’s GSUB table), which handles ligatures and similar typographic features, there is no longer a one-to-one mapping from an input Unicode character to a glyph index. Some ligatures, like ‘fi’, actually do have Unicode values for historical reasons, but most of them don’t. While it is possible to map ligature glyphs into Unicode’s Private Use Area (PUA), code values from this area are arbitrary by definition and thus unusable for ttfautohint.

  • Some features like sups (for handling superscript) completely change the appearance and even vertical position of the affected glyphs. Obviously, the blue zones for ‘normal’ glyphs no longer fit, thus the auto-hinter puts them into a separate group (called style in FreeType speak), having its own set of blue zones.

OpenType features handled specially by ttfautohint
Feature tag Description
c2cp petite capitals from capitals
c2sc small capitals from capitals
ordn ordinals
pcap petite capitals
sinf scientific inferiors
smcp small capitals
subs subscript
sups superscript
titl titling

There are two conditions to get a valid style for a feature in a given script.

  1. One of the script’s standard characters must be available in the feature.

  2. The feature must provide characters to form at least one blue zone; see above.

An additional complication is that features from the above table might use data not only from the GSUB but also from the GPOS table, containing information for glyph positioning. For example, the sups feature for superscripts might use the same glyphs as the subs feature for subscripts, simply moved up. ttfautohint skips such vertically shifted glyphs (except for accessing standard characters) because glyph positioning happens after hinting. Continuing our example, the sups feature wouldn’t form a style, contrary to subs, which holds the unshifted glyphs.

The remaining OpenType features of a script are not handled specially; the affected glyphs are simply hinted together with the ‘normal’ glyphs of the script.

Note that a font might still contain some features not covered yet: OpenType has the concept of a default script; its data gets used for all scripts that aren’t explicitly handled in a font. By default, ttfautohint unifies all affected glyphs from default script features with the latn script. This can be changed with option --default-script, if necessary.

ttfautohint uses the HarfBuzz library for handling OpenType features.

SFNT Tables

ttfautohint touches almost all SFNT tables within a TrueType or OpenType font. Note that only OpenType fonts with TrueType outlines are supported. OpenType fonts with a CFF or CFF2 table (this is, with PostScript outlines) won’t work.

  • glyf: All hints in the table are replaced with new ones. If option --composites is used, one glyph gets added (namely the ‘.ttfautohint’ glyph) and all composites get an additional component.

  • cvt, prep, and fpgm: These tables get replaced with data necessary for the new hinting bytecode.

  • gasp: Set up to always use grayscale rendering, for all sizes, with grid-fitting for standard hinting, and symmetric grid-fitting and symmetric smoothing for horizontal subpixel hinting (ClearType).

  • DSIG: If it exists, it gets replaced with a dummy version. ttfautohint can’t digitally sign a font; you have to do that afterwards.

  • name: The ‘version’ entries are modified to add information about the parameters that have been used for calling ttfautohint. This can be controlled with the --no-info option. Family name entries might also be affected by option --family-suffix.

  • GPOS, hmtx, loca, head, maxp, post: Updated to fit the additional ‘.ttfautohint’ glyph, the additional subglyphs in composites, and the new hinting bytecode.

  • LTSH, hdmx: Since ttfautohint doesn’t do any horizontal hinting, those tables are superfluous and thus removed.

  • VDMX: Removed, since it depends on the original bytecode, which ttfautohint removes. A font editor might recompute the necessary data later on.

Problems

Interaction With FreeType

Some versions of FreeType have an experimental extension for handling subpixel hinting; it is off by default and can be activated by setting the macro TT_CONFIG_OPTION_SUBPIXEL_HINTING to value 2 or 3 at compile time. This code has been contributed mainly by Infinality, being a subset of his original patch. Many GNU/Linux distributions activate this code, or provide packages to activate it. [Note that starting with FreeType version 2.7 the Infinality extension is still available but superseded by a less aggressive subpixel hinting mode, to which the explanations in this section don’t apply.]

This extension changes the behaviour of many bytecode instructions to get better rendering results. However, not all changes are global; some of them are specific to certain fonts. For example, it contains font-specific improvements for the ‘DejaVu Sans’ font family. The list of affected fonts is hard-coded; it can be found in FreeType’s source code file ttsubpix.c.

If you are going to process such specially-handled fonts with ttfautohint, serious rendering problems might show up. Since ttfautohint (intentionally) doesn’t change the font name in the name table, the Infinality extension has no chance to recognize that the hints are different. All such problems vanish if the font gets renamed in its name table (the name of the font file itself doesn’t matter), for example, by using option --family-suffix.

Incorrect Unicode Character Map

Fonts with an incorrect Unicode cmap table will not be properly hinted by ttfautohint. Especially older fonts do cheat; for example, there exist Hebrew fonts that map its glyphs to character codes ‘A’, ‘B’, etc., to make them work with non-localized versions of Windows 98, say.

Since ttfautohint needs to find both standard and blue zone characters, it relies on correct Unicode values. If you want to handle such fonts, please fix their cmap tables accordingly before running ttfautohint.

Irregular Glyph Heights

The central concept of ttfautohint’s hinting algorithm as discussed above is to identify horizontal segments at extremum positions, especially for blue zones. If such a segment is missing, it cannot be associated with a blue zone, possibly leading to irregular heights for the particular glyph.

Normally, a segment has a horizontal length of at least 20 font units (assuming 2048 units per EM)1. Using a Control Instructions File, however, it is possible to define additional segments at arbitrary points that help overcome this restriction, making it possible to fix (most of) such problems.

Diagonals

ttfautohint doesn’t handle diagonal lines specially. For thin outlines, this might lead to strokes that look too thick at smaller sizes. A font designer might compensate this to a certain amount by slightly reducing the stroke width of diagonal lines. However, in many cases the sub-optimal appearance of a stroke with borders that don’t exactly fit the pixel grid is not the outline itself but an incorrect gamma value of the monitor: People tend to not properly adjust it, and the default values of most operating systems are too low, causing too much darkening of such strokes. It is thus of vital importance to compare ttfautohint’s results with similar fonts to exclude any systematic effect not related to the outlines themselves.

Extending ttfautohint with new scripts

Right now, adding new scripts to ttfautohint only works on the source code level, this is, you have to patch the C source code.

The process itself isn’t very complicated; it is demonstrated best by example. The following commits in ttfautohint add Ethiopian and Armenian, respectively.

http://repo.or.cz/ttfautohint.git/commitdiff/d14c7c07
http://repo.or.cz/ttfautohint.git/commitdiff/b5022cd9

It shows that you have to do the following steps.

  • Add blue zone character data to the file lib/tablue.dat.

  • Add the proper Unicode ranges to lib/taranges.c, following the structure of similar entries.

  • Similarly, the files lib/tastyles.h and lib/ttfautohint-script.h must be updated. The latter holds the information on the used default character or characters; it also references the corresponding script tag HB_SCRIPT_XXX as used by the HarfBuzz library.

If there are any questions, please contact the FreeType mailing list for help. Note that the script data in ttfautohint are hold in sync with FreeType’s auto-hinter.

Control Instructions

An entry in a control instructions file has various syntax forms, which are discussed here. Brackets indicate optional elements.

Common Syntax Elements

font‑idx gives the index of the font in a TrueType Collection, starting with value 0. If missing, it is set to zero. For normal TrueType fonts, only value zero is valid. A font index can be specified in decimal, octal, or hexadecimal format, the latter two indicated by the prefixes 0 and 0x, respectively.

glyph‑id is either a glyph’s name as listed in the font’s post SFNT table or a glyph index. A glyph name consists of characters from the set ‘A-Za-z0-9._’ only and does not start with a digit or period, with the exceptions of the names ‘.notdef’ and ‘.null’. A glyph index starts with value 0 can be specified in decimal, octal, or hexadecimal format, the latter two indicated by the prefixes 0 and 0x, respectively. Glyph names are internally converted to glyph indices.

points are number ranges, see ‘x Height Snapping Exceptions’ for the syntax.

Similar to the Bourne shell (sh or bash), a comment starts with character ‘#’; the rest of the line is ignored. An empty line is ignored also. Both the newline character and ‘;’ can be used as a separator between exception entries. A trailing ‘\’ at the end of a line continues the current line on the next one.

A control instructions file is parsed line by line; later entries override earlier entries (in case there is something to override).

Style Adjustments

This syntax form makes it possible to override the style assignment algorithm of ttfautohint; see ‘Scripts’ and ‘OpenType Features’ for more details.

[ font-idx ]  script  feature  @  glyph-ids

script is a four-letter name2 of one of the scripts supported by ttfautohint. feature is one of the four-letter names of features supported by ttfautohint.

The elements of glyph-ids are a list of comma separated glyph-id values or value ranges. Note that is not necessary that elements are specified in increasing order.

Assuming that a font contains superscript digits ‘zero.sups’ to ‘nine.sups’ together with the glyphs ‘a.sups’ and ‘o.sups’, use a line

    cyrl sups @ zero.sups-nine.sups, a.sups, o.sups

to add those glyphs to the style handling Cyrillic superscript glyphs. However, it is still necessary that the selected script contains proper Blue Zone characters, otherwise those glyphs aren’t handled at all.

Use the --debug command line option to see how ttfautohint assigns glyph indices of a font to styles.

Stem Width Adjustments

Use the following syntax form to adjust stem width values for a given style, overriding ttfautohint’s algorithm; see ‘Scripts’ and ‘OpenType Features’ for more details. This adjustment doesn’t change the glyph shapes; it only influences the hinting process.

[ font-idx ]  script  feature  w[idth]  stem-widths

script and feature are the same as with style adjustments; see above. However, script can additionally be the wildcard character ‘*’, which indicates ‘any script’. Parameter width can be abbreviated as ‘w’.

stem-widths is an unsorted list of comma separated integer stem width values (in font units); the first value gives the style’s default stem width.

The effect of this adjustment depends on the selected stem width algorithm. For smooth stem width positioning, only the first (i.e., the default) value is used; it gets a higher preference than other discrete stem width choices. For strong stem width positioning, the stem widths are snapped to the provided values (if not differing too much) before rounding to an integer pixel value. For natural stem width positioning, this adjustment is ignored.

A typical example is to reduce the default stem width of an extra-bold font, which gets better hinted if a stem width of, say, 100 is used instead of the default value 150. Let’s also assume that the font further contains latin subscript and superscript characters that are hinted best with a stem width set to 80 font units. We can achieve this with the following lines in a control instructions file.

    * dflt width 100
    latb dflt width 80
    latp dflt width 80

Without the adjustment chances are very high that the ‘eyes’ in glyphs ‘e’ or ‘a’ of extra-bold fonts are filled at smaller PPEM values.

Use the --debug command line option to see how ttfautohint assigns stem widths to styles by default.

Glyph Adjustments

The following syntax forms allows adjustments of a glyph’s hinting process.

Change Direction of Points, Artificial Segments

[ font‑idx ]  glyph‑id  l[eft]|r[ight]  points  [ ( left‑offset , right‑offset ) ]

The mutually exclusive parameters left and right (which can be abbreviated as ‘l’ and ‘r’, respectively) indicate that the following points have left or right ‘out’ direction, respectively, overriding ttfautohint’s algorithm for setting point directions. The ‘out direction’ of a point is the direction of the outline leaving the point (or passing the control point). If the specified direction is identical to what ttfautohint computes, nothing special happens. Otherwise, a one-point segment with the specified direction gets created, see above. By default, its length is zero. Setting left‑offset and right‑offset, you can change the segment’s horizontal start and end position relative to the point position. left‑offset and right‑offset are integers measured in font units.

The following five images, displaying glyphs ‘O’ and ‘Q’ from the font Halant-Regular, demonstrate how to use direction changes.

The outlines of glyphs O and Q, as displayed in FontForge. They are sufficiently similar to expect that ttfautohint hints them equally. However, this is not the case.

The outlines of glyphs ‘O’ and ‘Q’, as displayed in FontForge. They are sufficiently similar to expect that ttfautohint hints them equally. However, this is not the case.

The same glyphs, shown at 12px before hinting. [Please ignore the outline distortion in the upper right of glyph O; this is a bug in FontForge while running the TrueType debugger.]

The same glyphs, shown at 12px before hinting. [Please ignore the outline distortion in the upper right of glyph ‘O’; this is a bug in FontForge while running the TrueType debugger.]

Using only ttfautohint’s -a sss parameter to force strong stem width and positioning, the hinting of glyph Q is really bad, making the glyph vertically two pixels larger! Reason is that this glyph doesn’t contain a horizontal segment at the baseline blue zone (y = 1; this corresponds to the segment 13-14 in the O glyph). Normally, segment 1-2 would form a stem with the baseline segment (as segment 7-8 does in glyph O). Instead, it forms a stem with segment 19-20, which gets moved down (y = −1) because the whole glyph appears to be stretched.

Using only ttfautohint’s ‘-a sss’ parameter to force strong stem width and positioning, the hinting of glyph ‘Q’ is really bad, making the glyph vertically two pixels larger! Reason is that this glyph doesn’t contain a horizontal segment at the baseline blue zone (y = 1; this corresponds to the segment 13-14 in the ‘O’ glyph). Normally, segment 1-2 would form a ‘stem’ with the baseline segment (as segment 7-8 does in glyph ‘O’). Instead, it forms a stem with segment 19-20, which gets moved down (y = −1) because the whole glyph appears to be stretched.

To fix the problem, we change the direction of point 38 to left by writing a line Q left 38 (without the quotes) to a control description file Halant-Regular.txt. Adding option -m Halant-Regular.txt to ttfautohint, we get the shown image as a result, which is much better: Segment 1-2 now properly forms a stem with our artificial one-point segment 38, and the O-like shape is properly positioned. However, there is still room for improvement: Segment 19-20 is also positioned at the baseline, making the connection between the O shape and the tail too thin.

To fix the problem, we change the direction of point 38 to ‘left’ by writing a line ‘Q left 38’ (without the quotes) to a control description file Halant-Regular.txt. Adding option ‘-m Halant-Regular.txt’ to ttfautohint, we get the shown image as a result, which is much better: Segment 1-2 now properly forms a stem with our artificial one-point segment 38, and the ‘O’-like shape is properly positioned. However, there is still room for improvement: Segment 19-20 is also positioned at the baseline, making the connection between the ‘O’ shape and the tail too thin.

By giving the one-point segment 38 a horizontal width, we can prevent that segment 19-20 gets positioned at the baseline: Replace the line in the previous image description with Q left 38 (−70,20), making the segment extend 70 font units to the left and 20 to the right of point 38. The exact offset values don’t matter; it’s only important to start left of point 19. Another solution to the problem is to artificially change the direction of segment 19-20 by adding a second line Q right 19-20 to the control instructions file; for our Q glyph, this produces almost exactly the same hinting results. Note that such direction changes only influence the hinting process; an outline’s direction won’t be changed at all.

By giving the one-point segment 38 a horizontal width, we can prevent that segment 19-20 gets positioned at the baseline: Replace the line in the previous image description with ‘Q left 38 (−70,20)’, making the segment extend 70 font units to the left and 20 to the right of point 38. The exact offset values don’t matter; it’s only important to start left of point 19. Another solution to the problem is to artificially change the direction of segment 19-20 by adding a second line ‘Q right 19-20’ to the control instructions file; for our ‘Q’ glyph, this produces almost exactly the same hinting results. Note that such direction changes only influence the hinting process; an outline’s direction won’t be changed at all.

Unset Direction of Points

[ font‑idx ]  glyph‑id  n[odir]  points

Parameter nodir (or ‘n’) sets the ‘out’ direction of the following points to ‘no direction’, this is, neither left nor right. If the specified direction is identical to what ttfautohint computes, nothing special happens. Otherwise, ttfautohint no longer considers those points as part of horizontal segments, thus treating them as ‘weak’ points.

Modifying or adding segments doesn’t directly modify the outlines; it only influences the hinting process.

Delta Exceptions

[ font‑idx ]  glyph‑id  t[ouch]|p[oint]  points  [ x[shift] x‑shift ]  [ y[shift] y‑shift ]  @  ppems

The mutually exclusive parameters touch and point (which can be abbreviated as ‘t’ and ‘p’, respectively) make ttfautohint apply delta exceptions for the given points, shifting them by the given values. Delta exceptions entered with touch are applied before the final ‘IUP’ (interpolate untouched points) instructions in a glyph’s bytecode, exceptions entered with point after ‘IUP’ (please consult Greg Hitchcock’s ClearType Whitepaper for more on pre-IUP and post-IUP delta hints). Additionally, the touch parameter makes the bytecode touch the affected points; such points are no longer affected by ‘IUP’ at all. Note that in ClearType mode all deltas along the x axis are discarded, and deltas along the y axis are only executed for touched points. As a consequence, vertical delta exceptions entered with point should not be used in ClearType mode.3

ppems, similar to points, are number ranges, see ‘x Height Snapping Exceptions’ for the syntax.

x‑shift and y‑shift represent real numbers that get rounded to multiples of 1/8 pixels. The entries for xshift (‘x’) and yshift (‘y’) are optional; if missing, the corresponding value is set to zero. If both values are zero, the delta exception entry is ignored as a whole.

Values for x‑shift and y‑shift must be in the range [−1.0;1.0]. Values for ppems must be in the range [6;53]. Values for points are limited by the number of points in the glyph.

Note that only character ‘.’ is recognized as a decimal point, and a thousands separator is not accepted.

As an example for delta instructions, let’s assume that you want to shift points 2, 3, and 4 in glyph ‘Aacute’ at PPEM sizes 12 and 13 by a vertical amount of 0.25 pixels. This corresponds to the line

    Aacute  touch 2-4  yshift 0.25  @ 12, 13

in a control instructions file. Since we use touch and not point, points 2, 3, and 4 are no longer subject to the final ‘IUP’ instruction, which interpolates weak, untouched point positions between strong, touched ones, cf. the description here.

The ttfautohint API

This section documents the public functions of the ttfautohint library together with its callback functions. All information has been directly extracted from the ttfautohint.h header file.

Preprocessor Macros, Typedefs, and Enums

Some default values.

#define TA_HINTING_RANGE_MIN 8
#define TA_HINTING_RANGE_MAX 50
#define TA_HINTING_LIMIT 200
#define TA_INCREASE_X_HEIGHT 14

An error type.

typedef int TA_Error;

An enum type for stem width algorithm selection.

enum
{
  TA_STEM_WIDTH_MODE_NATURAL = -1,
  TA_STEM_WIDTH_MODE_QUANTIZED = 0,
  TA_STEM_WIDTH_MODE_STRONG = 1
};

Function Pointer: TA_Alloc_Func

A pointer to a function provided by the calling application to allocate memory. The ttfautohint library uses this for allocating the buffer given by the out-buffer field of TTF_autohint and for allocating the str buffer in the TA_Info_Func callback.

The signature is identical to standard C’s malloc function (in header file stdlib.h).

typedef void *
(*TA_Alloc_Func)(size_t size);

Function Pointer: TA_Free_Func

A pointer to a function provided by the calling application to free memory allocated with TA_Alloc_Func. The ttfautohint library calls this for deallocating the str buffers in the TA_Info_Func callback after they have been used.

The signature is identical to standard C’s free function (in header file stdlib.h).

typedef void
(*TA_Free_Func)(void *ptr);

Callback: TA_Progress_Func

A callback function to get progress information. curr_idx gives the currently processed glyph index; if it is negative, an error has occurred. num_glyphs holds the total number of glyphs in the font (this value can’t be larger than 65535).

curr_sfnt gives the current subfont within a TrueType Collection (TTC), and num_sfnts the total number of subfonts.

If the return value is non-zero, TTF_autohint aborts with TA_Err_Canceled. Use this for a ‘Cancel’ button or similar features in interactive use.

progress_data is a void pointer to user-supplied data.

typedef int
(*TA_Progress_Func)(long curr_idx,
                    long num_glyphs,
                    long curr_sfnt,
                    long num_sfnts,
                    void* progress_data);

Callback: TA_Error_Func

A callback function to get error information.

error is the value TTF_autohint returns. See file ttfautohint-errors.h for a list. Error codes not in this list are directly taken from FreeType; see the FreeType header file fterrdef.h for more.

error_string, if non-NULL, is a pointer to an error message that represents error.

The next three parameters help identify the origin of text string parsing errors. linenum, if non-zero, contains the line number. line, if non-NULL, is a pointer to the input line that can’t be processed. errpos, if non-NULL, holds a pointer to the position in line where the problem occurs.

error_data is a void pointer to user-supplied data.

typedef void
(*TA_Error_Func)(TA_Error error,
                 const char* error_string,
                 unsigned int linenum,
                 const char* line,
                 const char* errpos,
                 void* error_data);

Callback: TA_Info_Func

A callback function to access or modify strings in the name table; it is called in a loop that iterates over all name table entries. If defined, TA_Info_Post_Func gets executed after this loop so that the collected data can be written back to the name table.

platform_id, encoding_id, language_id, and name_id are the identifiers of a name table entry pointed to by str with a length pointed to by str_len (in bytes; the string has no trailing NULL byte). Please refer to the OpenType specification of the name table for a detailed description of the various parameters, in particular which encoding is used for a given platform and encoding ID.

The string str is allocated with the function specified by the alloc-func field of TTF_autohint; the application should reallocate the data if necessary, ensuring that the string length doesn’t exceed 0xFFFF.

info_data is a void pointer to user-supplied data.

If an error occurs, return a non-zero value and don’t modify str and str_len (such errors are handled as non-fatal).

typedef int
(*TA_Info_Func)(unsigned short platform_id,
                unsigned short encoding_id,
                unsigned short language_id,
                unsigned short name_id,
                unsigned short* str_len,
                unsigned char** str,
                void* info_data);

Callback: TA_Info_Post_Func

A callback function, giving the application the possibility to access or modify strings in the name table after TA_Info_Func has iterated over all name table entries.

It is expected that TA_Info_Func stores pointers to the name table entries it wants to access or modify; the only parameter is thus info_data, which is a void pointer to the user-supplied data already provided to TA_Info_Func. Obviously, calling TA_Info_Post_Func with TA_Info_Func undefined has no effect.

The name table strings are allocated with the function specified by the alloc-func field of TTF_autohint; the application should reallocate the data if necessary, ensuring that no string length exceeds 0xFFFF.

If an error occurs, return a non-zero value and don’t modify the affected string and string length (such errors are handled as non-fatal).

typedef int
(*TA_Info_Post_Func)(void* info_data);

Function: TTF_autohint

Read a TrueType font, remove existing bytecode (in the SFNT tables prep, fpgm, cvt, and glyf), and write a new TrueType font with new bytecode based on the autohinting of the FreeType library, optionally using a reference font to derive blue zones.

It expects a format string options and a variable number of arguments, depending on the fields in options. The fields are comma separated; whitespace within the format string is not significant, a trailing comma is ignored. Fields are parsed from left to right; if a field occurs multiple times, the last field’s argument wins. The same is true for fields that are mutually exclusive. Depending on the field, zero or one argument is expected.

Note that fields marked as ‘not implemented yet’ are subject to change.

Memory Management

The next two fields are necessary on some platforms if ttfautohint is compiled as a shared library, and the application uses a different runtime library. This can happen, for example, on the MS Windows platform if your program is written in Python and communicates via the ‘ctypes’ interface with the ttfautohint DLL.

alloc-func
A pointer of type TA_Alloc_Func specifying a memory allocation function. It gets used to allocate the buffer given by the out-buffer field and the data exposed by the TA_Info_Func callback. If not set or set to NULL, or if out-buffer is not set or set to NULL, standard C’s malloc function is used.
free-func
A pointer of type TA_Free_Func specifying a memory deallocation function. It gets called to free the data exposed by the TA_Info_Func callback after it has been used. If not set or set to NULL, or if out_buffer is not set or set to NULL, standard C’s free function is used.

I/O

in-file
A pointer of type FILE* to the data stream of the input font, opened for binary reading. Mutually exclusive with in-buffer.
in-buffer
A pointer of type const char* to a buffer that contains the input font. Needs in-buffer-len. Mutually exclusive with in-file.
in-buffer-len
A value of type size_t, giving the length of the input buffer. Needs in-buffer.
out-file
A pointer of type FILE* to the data stream of the output font, opened for binary writing. Mutually exclusive with out-buffer.
out-buffer
A pointer of type char** to a buffer that contains the output font. Needs out-buffer-len. Mutually exclusive with out-file. The application should deallocate the memory with the function given by free-func.
out-buffer-len
A pointer of type size_t* to a value giving the length of the output buffer. Needs out-buffer.
control-file

A pointer of type FILE* to the data stream of control instructions. Mutually exclusive with control-buffer.

See ‘Control Instructions’ for the syntax used in such a file or buffer.

control-buffer
A pointer of type const char* to a buffer that contains control instructions. Needs control-buffer-len. Mutually exclusive with control-file.
control-buffer-len
A value of type size_t, giving the length of the control instructions buffer. Needs control-buffer.
reference-file
A pointer of type FILE* to the data stream of the reference font, opened for binary reading. Mutually exclusive with reference-buffer.
reference-buffer
A pointer of type const char* to a buffer that contains the reference font. Needs reference-buffer-len. Mutually exclusive with reference-file.
reference-buffer-len
A value of type size_t, giving the length of the reference buffer. Needs reference-buffer.
reference-index
The face index to be used in the reference font. The default value is 0.
reference-name
A string that specifies the name of the reference font. It is only used to emit a sensible value for the TTFA table if TTFA-info is set.

Messages and Callbacks

progress-callback
A pointer of type TA_Progress_Func, specifying a callback function for progress reports. This function gets called after a single glyph has been processed. If this field is not set or set to NULL, no progress callback function is used.
progress-callback-data
A pointer of type void* to user data that is passed to the progress callback function.
error-string
A pointer of type unsigned char** to a string (in UTF-8 encoding) that verbally describes the error code. You must not change the returned value.
error-callback

A pointer of type TA_Error_Func, specifying a callback function for error messages. This function gets called right before TTF_autohint exits. If this field is not set or set to NULL, no error callback function is used.

Use it as a more sophisticated alternative to error-string.

error-callback-data
A point of type void* to user data that is passed to the error callback function.
info-callback
A pointer of type TA_Info_Func, specifying a callback function for manipulating the name table. This function gets called for each name table entry. If not set or set to NULL, TA_Info_Func is not called.
info-post-callback
A pointer of type TA_Info_Post_Func, specifying a callback function for manipulating the name table. It is called after the function specified with info-callback has iterated over all name table entries. If not set or set to NULL, TA_Info_Post_Func is not called.
info-callback-data
A pointer of type void* to user data that is passed to the info callback functions.
debug
If this integer is set to 1, lots of debugging information is print to stderr. The default value is 0.

General Hinting Options

hinting-range-min
An integer (which must be larger than or equal to 2) giving the lowest PPEM value used for autohinting. If this field is not set, it defaults to TA_HINTING_RANGE_MIN.
hinting-range-max
An integer (which must be larger than or equal to the value of hinting-range-min) giving the highest PPEM value used for autohinting. If this field is not set, it defaults to TA_HINTING_RANGE_MAX.
hinting-limit
An integer (which must be larger than or equal to the value of hinting-range-max) that gives the largest PPEM value at which hinting is applied. For larger values, hinting is switched off. If this field is not set, it defaults to TA_HINTING_LIMIT. If it is set to 0, no hinting limit is added to the bytecode.
hint-composites
If this integer is set to 1, composite glyphs get separate hints. This implies adding a special glyph to the font called ‘.ttfautohint’. Setting it to 0 (which is the default), the hints of the composite glyphs’ components are used. Adding hints for composite glyphs increases the size of the resulting bytecode a lot, but it might deliver better hinting results. However, this depends on the processed font and must be checked by inspection.
adjust-subglyphs

An integer (1 for ‘on’ and 0 for ‘off’, which is the default) to specify whether native TrueType hinting of the input font shall be applied to all glyphs before passing them to the (internal) autohinter. The used resolution is the em-size in font units; for most fonts this is 2048ppem. Use this only if the old hints move or scale subglyphs independently of the output resolution, for example some exotic CJK fonts.

pre-hinting is a deprecated alias name for this option.

Hinting Algorithms

ttfautohint provides three different algorithms for computing horizontal stem widths and the positioning of blue zones.

  • TA_STEM_WIDTH_MODE_NATURAL: No adjustments to stem widths, discrete blue zone positioning. This is what FreeType uses for its ‘light’ (auto-)hinting mode.

  • TA_STEM_WIDTH_MODE_QUANTIZED: Both stem widths and blue zone positions are slightly quantized to take discrete values. For example, stem values 50, 51, 72, 76, and 100 would become 50, 74, and 100 (or something similar).

  • TA_STEM_WIDTH_MODE_STRONG: If active, stem widths and blue zones are snapped and positioned to integer pixel values as much as possible.

These values are arguments to ttfautohint’s three different hinting mode options.

gray-stem-width-mode
Specify the stem width algorithm for grayscale rendering. Possible integer values are TA_STEM_WIDTH_MODE_NATURAL, TA_STEM_WIDTH_MODE_QUANTIZED (the default), and TA_STEM_WIDTH_MODE_STRONG, as discussed above.
gdi-cleartype-stem-width-mode
Specify the stem width algorithm for GDI ClearType rendering, this is, the rasterizer version (as returned by the GETINFO bytecode instruction) is in the range 36 <= version < 38 and ClearType is enabled. Possible integer values are TA_STEM_WIDTH_MODE_NATURAL, TA_STEM_WIDTH_MODE_QUANTIZED, and TA_STEM_WIDTH_MODE_STRONG (the default), as discussed above.
dw-cleartype-stem-width-mode
Specify the stem width algorithm for DW ClearType rendering, this is, the rasterizer version (as returned by the GETINFO bytecode instruction) is >= 38, ClearType is enabled, and subpixel positioning is enabled also. Possible integer values are TA_STEM_WIDTH_MODE_NATURAL, TA_STEM_WIDTH_MODE_QUANTIZED (the default), and TA_STEM_WIDTH_MODE_STRONG, as discussed above.
increase-x-height
An integer. For PPEM values in the range 6 <= PPEM <= increase-x-height, round up the font’s x height much more often than normally (to use the terminology of TrueType’s ‘Super Round’ bytecode instruction, the threshold gets increased from 5/8px to 13/16px). If it is set to 0, this feature is switched off. If this field is not set, it defaults to TA_INCREASE_X_HEIGHT. Use this flag to improve the legibility of small font sizes if necessary.
x-height-snapping-exceptions
A pointer of type const char* to a null-terminated string that gives a list of comma separated PPEM values or value ranges at which no x height snapping shall be applied. A value range has the form value1-value2, meaning value1 <= PPEM <= value2. value1 or value2 (or both) can be missing; a missing value is replaced by the beginning or end of the whole interval of valid PPEM values, respectively. Whitespace is not significant; superfluous commas are ignored, and ranges must be specified in increasing order. For example, the string "3, 5-7, 9-" means the values 3, 5, 6, 7, 9, 10, 11, 12, etc. Consequently, if the supplied argument is "-", no x height snapping takes place at all. The default is the empty string (""), meaning no snapping exceptions.
windows-compatibility
If this integer is set to 1, two artificial blue zones are used, positioned at the usWinAscent and usWinDescent values (from the font’s OS/2 table). The idea is to help ttfautohint so that the hinted glyphs stay within this horizontal stripe since Windows clips everything falling outside. The default is 0.
gray-strong-stem-width
Deprecated. The argument values 0 and 1 of this field correspond to the argument values TA_STEM_WIDTH_MODE_QUANTIZED and TA_STEM_WIDTH_MODE_STRONG of the field ‘gray-stem-width-mode’, respectively.
gdi-cleartype-strong-stem-width
Deprecated. The argument values 0 and 1 of this field correspond to the argument values TA_STEM_WIDTH_MODE_QUANTIZED and TA_STEM_WIDTH_MODE_STRONG of the field ‘gdi-cleartype-stem-width-mode’, respectively.
dw-cleartype-strong-stem-width
Deprecated. The argument values 0 and 1 of this field correspond to the argument values TA_STEM_WIDTH_MODE_QUANTIZED and TA_STEM_WIDTH_MODE_STRONG of the field ‘dw-cleartype-stem-width-mode’, respectively.

Scripts

default-script
A string consisting of four lowercase characters that specifies the default script for OpenType features. After applying all features that are handled specially, use this value for the remaining features. The default value is "latn"; if set to "none", no script is used. Valid values can be found in the header file ttfautohint-scripts.h.
fallback-script

A string consisting of four lowercase characters, specifying the default script for glyphs that can’t be mapped to a script automatically. By default, such glyphs are hinted; if option fallback-scaling is set, they are scaled only instead. Valid values can be found in the header file ttfautohint-scripts.h.

Default value is "none", which means hinting without using a script’s blue zones if fallback-scaling isn’t set. If fallback_scaling is set, value "none" implies no hinting for unmapped glyphs.

fallback-scaling
Set this integer to 1 if glyphs handled by the fallback script should be scaled only with the fallback script’s scaling value, instead of being hinted with the fallback script’s hinting parameters.
symbol
Set this integer to 1 if you want to process a font that ttfautohint would refuse otherwise because it can’t find a single standard character for any of the supported scripts. ttfautohint then uses a default (hinting) value for the standard stem width instead of deriving it from a script’s set of standard characters (for the latin script, one of them is character ‘o’). The default value of this option is 0.
fallback-stem-width

Set the horizontal stem width (hinting) value for all scripts that lack proper standard characters. The value is given in font units and must be a positive integer. If not set, or the value is zero, ttfautohint uses a hard-coded default (50 units at 2048 units per EM, and linearly scaled for other UPEM values, for example 24 units at 1000 UPEM).

For symbol fonts (i.e., option symbol is given), fallback-stem-width has an effect only if fallback-script is set also.

Miscellaneous

ignore-restrictions
If the font has set bit 1 in the ‘fsType’ field of the OS/2 table, the ttfautohint library refuses to process the font since a permission to do that is required from the font’s legal owner. In case you have such a permission you might set the integer argument to value 1 to make ttfautohint handle the font. The default value is 0.
TTFA-info

If set to 1, ttfautohint creates an SFNT table called TTFA and fills it with information on the parameters used while calling TTF_autohint. The format of the output data resembles the information at the very beginning of the dump emitted by option debug. The default value is 0.

Main use of this option is for font editing purposes. For example, after a font editor has added some glyphs, a front-end to TTF_autohint can parse TTFA and feed the parameters into another call of TTF_autohint. The new glyphs are then hinted while hints of the old glyphs stay unchanged.

If this option is not set, and the font to be processed contains a TTFA table, it gets removed.

Note that such a TTFA table gets ignored by all font rendering engines. In TrueType Collections, the TTFA table is added to the first subfont.

dehint
If set to 1, remove all hints from the font. All other hinting options are ignored.
epoch
An integer of type unsigned long long, defined as the number of seconds (excluding leap seconds) since 01 Jan 1970 00:00:00 UTC. If set, or if the value is not equal to ULLONG_MAX, this epoch gets used instead of the current date and time for the ‘modification time’ field in the TTF header. Use this to get reproducible builds.

Remarks

  • Obviously, it is necessary to have an input and an output data stream. All other options are optional.

  • hinting-range-min and hinting-range-max specify the range for which the autohinter generates optimized hinting code. If a PPEM value is smaller than the value of hinting-range-min, hinting still takes place but the configuration created for hinting-range-min is used. The analogous action is taken for hinting-range-max, only limited by the value given with hinting-limit. The font’s gasp table is set up to always use grayscale rendering with grid-fitting for standard hinting, and symmetric grid-fitting and symmetric smoothing for horizontal subpixel hinting (ClearType).

  • ttfautohint can process its own output a second time only if option hint-composites is not set (or if the font doesn’t contain composite glyphs at all). This limitation might change in the future.

TA_LIB_EXPORT TA_Error
TTF_autohint(const char* options,
             ...);

Macros: TTFAUTOHINT_MAJOR, TTFAUTOHINT_MINOR, TTFAUTOHINT_REVISION

These three macros give the major, minor, and revision number of the library, respectively. See function TTF_autohint_version for more details.

#define TTFAUTOHINT_MAJOR 1
#define TTFAUTOHINT_MINOR 8
#define TTFAUTOHINT_REVISION 1

Macro: TTFAUTOHINT_VERSION

This macro holds the ttfautohint version string.

For tarball releases it has the form X.Y[.Z], with X, Y, and Z the major, minor, and revision numbers, respectively. If the revision number is zero, it is omitted. Examples: 2.7, 2.7.1.

If compiling directly from the git repository, ttfautohint’s bootstrap script derives the version number from the git describe output, appending the number of commits after a tag together with a shortened commit ID. Example: 2.7.1.23-379b.

See function TTF_autohint_version for more details.

#define TTFAUTOHINT_VERSION "1.8.1"

Function: TTF_autohint_version

Return the ttfautohint version triplet. This function is useful when dynamically linking to the library, since the macros TTFAUTOHINT_MAJOR, TTFAUTOHINT_MINOR, and TTFAUTOHINT_PATCH cannot be used in that case.

The returned integer triplet is not the same as the shared library’s version triplet (which the dynamic linker uses to resolve runtime dependencies). For example, hypothetical ttfautohint versions 2.27 and 2.27.1 might both correspond to shared library version 1.0.38 in case there are only, say, documentation or packaging differences that don’t affect the library code.

If the pkg-config configuration file ttfautohint.pc is installed in a place that pkg-config can find, a call to

    pkg-config ttfautohint --modversion

returns the shared library version.

TA_LIB_EXPORT void
TTF_autohint_version(int *major,
                     int *minor,
                     int *revision);

Function: TTF_autohint_version_string

Return the ttfautohint version string. This function is useful when dynamically linking to the library, since the macro TTFAUTOHINT_VERSION cannot be used in that case.

TA_LIB_EXPORT const char*
TTF_autohint_version_string(void);

Compilation and Installation

Please read the files INSTALL and INSTALL.git (both part of the source code bundle) for instructions how to compile the ttfautohint library together with its front-ends using a POSIX compatible shell and compiler.

Unix-like Platforms

The generic instructions should work just fine. Since ttfautohint depends on Qt version 4 or newer, FreeType version 2.4.5 or newer, and HarfBuzz version 1.3.0 or newer, you should install packages for these libraries (called ‘libqt4’ or similar, ‘libfreetype6’4, and ‘libharfbuzz0’ or similar) together with its development bundles (called ‘libqt4-devel’, ‘freetype2-devel’, and ‘harfbuzz-devel’ or similar) before running ttfautohint’s configure script.

MS Windows

Precompiled binaries ttfautohint.exe and ttfautohintGUI.exe are available, being statically linked to Qt, FreeType, and HarfBuzz. This means that the two programs are not dependent on any other program-specific DLL, and you can move them to any place you like.

Hints for compilation with the MinGW environment are given in INSTALL.git.

Mac OS X

Right now, only a precompiled binary ttfautohint is offered; a ready-to-run app bundle for the GUI version is not yet available; however, ttfautohint is part of Homebrew, making compilation and installation very simple.

Detailed instructions to compile both ttfautohint and ttfautohintGUI can be found on ttfautohint’s homepage.

Authors

Copyright © 2011-2017 by .
Portions Copyright © 2011-2017 by .
Portions Copyright © 2014 by .

This file is part of the ttfautohint library, and may only be used, modified, and distributed under the terms given in COPYING. By continuing to use, modify, or distribute this file you indicate that you have read COPYING and understand and accept it fully.

The file COPYING mentioned in the previous paragraph is distributed with the ttfautohint library.

Character Ranges

For the FreeType auto-hinter (and thus ttfautohint), a ‘non-base character’ is something that should not be affected by blue zones, regardless of whether this is a spacing or no-spacing glyph.

adlm base characters
Character range Description
0x1E900 - 0x1E95F Adlam
adlm non-base characters
Character range
0x1D944 - 0x1E94A
arab base characters
Character range Description
0x0600 - 0x06FF Arabic
0x0750 - 0x07FF Arabic Supplement
0x08A0 - 0x08FF Arabic Extended-A
0xFB50 - 0xFDFF Arabic Presentation Forms-A
0xFE70 - 0xFEFF Arabic Presentation Forms-B
0x1EE00 - 0x1EEFF Arabic Mathematical Alphabetic Symbols
arab non-base characters
Character range
0x0600 - 0x0605
0x0610 - 0x061A
0x064B - 0x065F
0x0670 - 0x0670
0x06D6 - 0x06DC
0x06DF - 0x06E4
0x06E7 - 0x06E8
0x06EA - 0x06ED
0x08E3 - 0x08FF
0xFBB2 - 0xFBC1
0xFE70 - 0xFE70
0xFE72 - 0xFE72
0xFE74 - 0xFE74
0xFE76 - 0xFE76
0xFE78 - 0xFE78
0xFE7A - 0xFE7A
0xFE7C - 0xFE7C
0xFE7E - 0xFE7E
armn base characters
Character range Description
0x0530 - 0x058F Armenian
0xFB13 - 0xFB17 Alphab. Present. Forms (Armenian)
armn non-base characters
Character range
0x0559 - 0x055F
avst base characters
Character range Description
0x10B00 - 0x10B3F Avestan
avst non-base characters
Character range
0x10B39 - 0x10B3F
bamu base characters
Character range Description
0xA6A0 - 0xA6FF Bamum
bamu non-base characters
Character range
0xA6F0 - 0xA6F1
beng base characters
Character range Description
0x0980 - 0x09FF Bengali
beng non-base characters
Character range
0x0981 - 0x0981
0x09BC - 0x09BC
0x09C1 - 0x09C4
0x09CD - 0x09CD
0x09E2 - 0x09E3
buhd base characters
Character range Description
0x1740 - 0x175F Buhid
buhd non-base characters
Character range
0x1752 - 0x1753
cakm base characters
Character range Description
0x11100 - 0x1114F Chakma
cakm non-base characters
Character range
0x11100 - 0x11102
0x11127 - 0x11134
cans base characters
Character range Description
0x1400 - 0x167F Unified Canadian Aboriginal Syllabics
0x18B0 - 0x18FF Unified Canadian Aboriginal Syllabics Extended
cari base characters
Character range Description
0x102A0 - 0x102DF Carian
cher base characters
Character range Description
0x13A0 - 0x13FF Cherokee
0xAB70 - 0xABBF Cherokee Supplement
copt base characters
Character range Description
0x2C80 - 0x2CFF Coptic
copt non-base characters
Character range
0x2CEF - 0x2CF1
cprt base characters
Character range Description
0x10800 - 0x1083F Cypriot
cyrl base characters
Character range Description
0x0400 - 0x04FF Cyrillic
0x0500 - 0x052F Cyrillic Supplement
0x2DE0 - 0x2DFF Cyrillic Extended-A
0xA640 - 0xA69F Cyrillic Extended-B
cyrl non-base characters
Character range
0x0483 - 0x0489
0x2DE0 - 0x2DFF
0xA66F - 0xA67F
0xA69E - 0xA69F

There are some characters in the Devanagari Unicode block that are generic to Indic scripts; we omit them so that their presence doesn’t trigger Devanagari.

deva base characters
Character range Description
0x0900 - 0x093B Devanagari
0x093D - 0x0950 … continued
0x0953 - 0x0963 … continued
0x0966 - 0x097F … continued
0x20B9 - 0x20B9 (new) Rupee sign
0xA8E0 - 0xA8FF Devanagari Extended
deva non-base characters
Character range
0x0900 - 0x0902
0x093A - 0x093A
0x0941 - 0x0948
0x094D - 0x094D
0x0953 - 0x0957
0x0962 - 0x0963
0xA8E0 - 0xA8F1
dsrt base characters
Character range Description
0x10400 - 0x1044F Deseret
ethi base characters
Character range Description
0x1200 - 0x137F Ethiopic
0x1380 - 0x139F Ethiopic Supplement
0x2D80 - 0x2DDF Ethiopic Extended
0xAB00 - 0xAB2F Ethiopic Extended-A
ethi non-base characters
Character range
0x135D - 0x135F
geor base characters
Character range Description
0x10D0 - 0x10FF Georgian (Mkhedruli)
geok base characters
Character range Description
0x10A0 - 0x10CD Georgian (Asomtavruli)
0x2D00 - 0x2D2D Georgian (Nuskhuri)
glag base characters
Character range Description
0x2C00 - 0x2C5F Glagolitic
0x1E000 - 0x1E02F Glagolitic Supplement
glag non-base characters
Character range
0x1E000 - 0x1E02F
goth base characters
Character range Description
0x10330 - 0x1034F Gothic
grek base characters
Character range Description
0x0370 - 0x03FF Greek and Coptic
0x1F00 - 0x1FFF Greek Extended
grek non-base characters
Character range
0x037A - 0x037A
0x0384 - 0x0385
0x1FBD - 0x1FC1
0x1FCD - 0x1FCF
0x1FDD - 0x1FDF
0x1FED - 0x1FEF
0x1FFD - 0x1FFE
gujr base characters
Character range Description
0x0A80 - 0x0AFF Gujarati
gujr non-base characters
Character range
0x0A81 - 0x0A82
0x0ABC - 0x0ABC
0x0AC1 - 0x0AC8
0x0ACD - 0x0ACD
0x0AE2 - 0x0AE3
guru base characters
Character range Description
0x0A00 - 0x0A7F Gurmukhi
guru non-base characters
Character range
0x0A01 - 0x0A02
0x0A3C - 0x0A3C
0x0A41 - 0x0A51
0x0A70 - 0x0A71
0x0A75 - 0x0A75
hebr base characters
Character range Description
0x0590 - 0x05FF Hebrew
0xFB1D - 0xFB4F Alphab. Present. Forms (Hebrew)
hebr non-base characters
Character range
0x0591 - 0x05BF
0x05C1 - 0x05C2
0x05C4 - 0x05C5
0x05C7 - 0x05C7
0xFB1E - 0xFB1E
kali base characters
Character range Description
0xA900 - 0xA92F Kayah Li
kali non-base characters
Character range
0xA926 - 0xA92D
knda base characters
Character range Description
0x0C80 - 0x0CFF Kannada
knda non-base characters
Character range
0x0C81 - 0x0C81
0x0CBC - 0x0CBC
0x0CBF - 0x0CBF
0x0CC6 - 0x0CC6
0x0CCC - 0x0CCD
0x0CE2 - 0x0CE3
khmr base characters
Character range Description
0x1780 - 0x17FF Khmer
khmr non-base characters
Character range
0x17B7 - 0x17BD
0x17C6 - 0x17C6
0x17C9 - 0x17D3
0x17DD - 0x17DD
khms base characters
Character range Description
0x19E0 - 0x19FF Khmer Symbols
lao base characters
Character range Description
0x0E80 - 0x0EFF Lao
lao non-base characters
Character range
0x0EB1 - 0x0EB1
0x0EB4 - 0x0EBC
0x0EC8 - 0x0ECD
latn base characters
Character range Description
0x0020 - 0x007F Basic Latin (no control chars)
0x00A0 - 0x00A9 Latin-1 Supplement (no control chars)
0x00AB - 0x00B1 … continued
0x00B4 - 0x00B8 … continued
0x00BB - 0x00FF … continued
0x0100 - 0x017F Latin Extended-A
0x0180 - 0x024F Latin Extended-B
0x0250 - 0x02AF IPA Extensions
0x02B9 - 0x02DF Spacing Modifier Letters
0x02E5 - 0x02FF … continued
0x0300 - 0x036F Combining Diacritical Marks
0x1AB0 - 0x1ABE Combining Diacritical Marks Extended
0x1D00 - 0x1D2B Phonetic Extensions
0x1D6B - 0x1D77 … continued
0x1D79 - 0x1D7F … continued
0x1D80 - 0x1D9A Phonetic Extensions Supplement
0x1DC0 - 0x1DFF Combining Diacritical Marks Supplement
0x1E00 - 0x1EFF Latin Extended Additional
0x2000 - 0x206F General Punctuation
0x20A0 - 0x20B8 Currency Symbols …
0x20BA - 0x20CF … except new Rupee sign
0x2150 - 0x218F Number Forms
0x2C60 - 0x2C7B Latin Extended-C
0x2C7E - 0x2C7F … continued
0x2E00 - 0x2E7F Supplemental Punctuation
0xA720 - 0xA76F Latin Extended-D
0xA771 - 0xA7F7 … continued
0xA7FA - 0xA7FF … continued
0xAB30 - 0xAB5B Latin Extended-E
0xAB60 - 0xAB6F … continued
0xFB00 - 0xFB06 Alphab. Present. Forms (Latin Ligs)
0x1D400 - 0x1D7FF Mathematical Alphanumeric Symbols
latn non-base characters
Character range
0x005E - 0x0060
0x007E - 0x007E
0x00A8 - 0x00A9
0x00AE - 0x00B0
0x00B4 - 0x00B4
0x00B8 - 0x00B8
0x00BC - 0x00BE
0x02B9 - 0x02DF
0x02E5 - 0x02FF
0x0300 - 0x036F
0x1AB0 - 0x1ABE
0x1DC0 - 0x1DFF
0x2017 - 0x2017
0x203E - 0x203E
0xA788 - 0xA788
0xA7F8 - 0xA7FA
latb base characters
Character range Description
0x1D62 - 0x1D6A some small subscript letters
0x2080 - 0x209C subscript digits and letters
0x2C7C - 0x2C7C latin subscript small letter j
latp base characters
Character range Description
0x00AA - 0x00AA feminine ordinal indicator
0x00B2 - 0x00B3 superscript two and three
0x00B9 - 0x00BA superscript one, masc. ord. indic.
0x02B0 - 0x02B8 some latin superscript mod. letters
0x02E0 - 0x02E4 some IPA modifier letters
0x1D2C - 0x1D61 latin superscript modifier letters
0x1D78 - 0x1D78 modifier letter cyrillic en
0x1D9B - 0x1DBF more modifier letters
0x2070 - 0x207F superscript digits and letters
0x2C7D - 0x2C7D modifier letter capital v
0xA770 - 0xA770 modifier letter us
0xA7F8 - 0xA7F9 more modifier letters
0xAB5C - 0xAB5F more modifier letters
lisu base characters
Character range Description
0xA4D0 - 0xA4FF Lisu
mlym base characters
Character range Description
0x0D00 - 0x0D7F Malayalam
mlym non-base characters
Character range
0x0D01 - 0x0D01
0x0D4D - 0x0D4E
0x0D62 - 0x0D63
mymr base characters
Character range Description
0x1000 - 0x109F Myanmar
0xA9E0 - 0xA9FF Myanmar Extended-B
0xAA60 - 0xAA7F Myanmar Extended-A
mymr non-base characters
Character range
0x102D - 0x1030
0x1032 - 0x1037
0x103A - 0x103A
0x103D - 0x103E
0x1058 - 0x1059
0x105E - 0x1060
0x1071 - 0x1074
0x1082 - 0x1082
0x1085 - 0x1086
0x108D - 0x108D
0xA9E5 - 0xA9E5
0xAA7C - 0xAA7C
nkoo base characters
Character range Description
0x07C0 - 0x07FF N’Ko
nkoo non-base characters
Character range
0x07EB - 0x07F5
olck base characters
Character range Description
0x1C50 - 0x1C7F Ol Chiki
orkh base characters
Character range Description
0x10C00 - 0x10C4F Old Turkic
osge base characters
Character range Description
0x104B0 - 0x104FF Osage
osma base characters
Character range Description
0x10480 - 0x104AF Osmanya
saur base characters
Character range Description
0xA880 - 0xA8DF Saurashtra
saur non-base characters
Character range
0xA880 - 0xA881
0xA8B4 - 0xA8C5
shaw base characters
Character range Description
0x10450 - 0x1047F Shavian
sinh base characters
Character range Description
0x0D80 - 0x0DFF Sinhala
sinh non-base characters
Character range
0x0DCA - 0x0DCA
0x0DD2 - 0x0DD6
sund base characters
Character range Description
0x1B80 - 0x1BBF Sundanese
0x1CC0 - 0x1CCF Sundanese Supplement
sund non-base characters
Character range
0x1B80 - 0x1B82
0x1BA1 - 0x1BAD
taml base characters
Character range Description
0x0B80 - 0x0BFF Tamil
taml non-base characters
Character range
0x0B82 - 0x0B82
0x0BC0 - 0x0BC2
0x0BCD - 0x0BCD
tavt base characters
Character range Description
0xAA80 - 0xAADF Tai Viet
tavt non-base characters
Character range
0xAAB0 - 0xAAB0
0xAAB2 - 0xAAB4
0xAAB7 - 0xAAB8
0xAABE - 0xAABF
0xAAC1 - 0xAAC1
telu base characters
Character range Description
0x0C00 - 0x0C7F Telugu
telu non-base characters
Character range
0x0C00 - 0x0C00
0x0C3E - 0x0C40
0x0C46 - 0x0C56
0x0C62 - 0x0C63
thai base characters
Character range Description
0x0E00 - 0x0E7F Thai
thai non-base characters
Character range
0x0E31 - 0x0E31
0x0E34 - 0x0E3A
0x0E47 - 0x0E4E
tfng base characters
Character range Description
0x2D30 - 0x2D7F Tifinagh
vaii base characters
Character range Description
0xA500 - 0xA63F Vai

History

Version 1.8.1 (2018-Jan-01)

  • Bug fix: The configure script couldn’t recognize Qt 5.10.x.

Version 1.8 (2017-Dec-31)

  • A third, ‘natural’ stem width mode has been added: No adjustments to stem widths, discrete blue zone positioning. This is what FreeType uses for its ‘light’ (auto-)hinting mode.

  • A new option -a has been implemented to select the stem width mode for the three rendering targets (grayscale, GDI ClearType, DW ClearType). This supersedes option -g, which is now deprecated.

  • Stem widths for the hinting process can now be manually set using the new width keyword in a control instructions file. This is especially useful for extra-bold fonts, where the algorithmically derived values are often too large, causing the filling of ‘eyes’ in ‘e’ or ‘a’ glyphs at small sizes.

  • libttfautohint gets now installed as a DLL or static library (or both, depending on the parameters of the configure script), together with its header files.

  • Two functions have been added to the library: TTF_autohint_version and TTF_autohint_version_string, which do the obvious.

  • Two options to TTF_autohint have been added: alloc-func and free-func. These are necessary on some platforms if ttfautohint is compiled as a shared library, and the application uses a different runtime library. This can happen, for example, on the MS Windows platform if your program is written in Python and communicates via the ‘ctypes’ interface with the ttfautohint DLL.

  • TTF_autohint options {gray,gdi-cleartype,dw-cleartype}-strong-stem-width are now superseded by {gray,gdi-cleartype,dw-cleartype}-stem-width-mode` to handle the new natural stem width mode also.

  • Bug fix: Later control instructions now correctly overwrite earlier entries as documented.

Version 1.7 (2017-Aug-26)

  • Support for Adlam, Avestan, Bamum, Buhid, Unified Canadian Syllabics, Carian, Chakma, Coptic, Cypriot, Deseret, Glagolitic, Gothic, Kayah Li, Lisu, N’Ko, Ol Chiki, Old Turkic, Osage, Osmanya, Saurashtra, Shavian, Sundanese, Tai Viet, Tifinagh, and Vai scripts.

    Note that the used blue zone characters might not be optimal. Please report any problems so that I can fix issues!

  • Option --fallback-stem-width now works for non-symbol fonts also, as documented.

  • TrueType bytecode generated by ttfautohint now correctly supports most recent MS interpreter versions.

  • A bug with bytecode for composite glyphs with composite subglyphs is now fixed.

Version 1.6 (2016-Nov-27)

  • A new option --reference (and --reference-index to select a font within a TTC) makes ttfautohint use the blue zones from another font. This helps synchronize the ascenders and descenders of font families.

  • Support for Armenian, Cherokee, Ethiopic, Georgian, Gujarati, Gurmukhi, Kannada, Malayalam, Sinhala, and Tamil scripts.

  • New option --ttfa-info to display a font’s TTFA table (if present).

  • Glyphs covered by the fallback script are now hinted by default. Previously, they were scaled only. The default fallback script none now implies hinting without script-specific blue zones (but still aligning stems to the grid if possible).

  • The new option --fallback-scaling changes the behaviour of the fallback script from hinting to scaling (as implemented in previous versions).

  • ttfautohint (but not ttfautohintGUI) now honours the SOURCE_DATE_EPOCH environment variable for reproducible builds. This corresponds to the new library option epoch.

  • Bug fix: Allow dehinting of fonts that contain a .ttfautohint glyph.

Version 1.5 (2016-Jan-24)

  • Support for Khmer, Myanmar, and Bengali scripts.

  • Improved Devanagari hinting.

  • ttfautohintGUI can now be compiled with Qt5.

  • Bug fix: Too many delta control instructions for a single glyph caused a bytecode stack overflow, making the MS rasterizer ignore all hinting instructions for this glyph.

  • Bug fix: Don’t create multiple TTFA tables in font.

  • Bug fix: Under certain circumstances, glyph indices used in Indic features were incorrectly assigned to the default script.

Version 1.4.1 (2015-Oct-17)

  • A bug in handling control instruction files could cause severe glyph shape distortions of accent-like glyphs. All users should update.

Version 1.4 (2015-Oct-04)

  • Support for Thai and Lao scripts.

  • Support for the Arabic script.

  • Better support for scripts that contain superscript-like and subscript-like glyphs, e.g., the International Phonetic Alphabet (IPA).

  • Accents and other `non-base’ glyphs are now hinted without snapping to blue zones.

  • A new control instruction syntax form was added to adjust the mapping between glyphs and styles. Right now, its usage is quite limited; a forthcoming version will give much more flexibility.

  • The touch keyword in a control instructions file was buggy: If used for a point P at a ppem value s, it sometimes led to unwanted movements of P for ppem values unequal to s, thus causing outline distortions.

Version 1.3 (2015-Jan-06)

  • Keywords in control instruction files can be more verbose to increase readability. You can now use left, right, nodir, point, touch, xshift, and yshift for l, r, n, p, t,x, andy`, respectively.

  • A new control instruction keyword touch was added to apply delta instructions before the final IUP bytecode commands, also `touching’ the affected points (to use the TrueType instructions terminology). Such deltas do work even with ClearType if applied to the non-ClearType direction.

  • Support for the Telugu script.

  • The amount of information about ttfautohint and its parameters that gets added to the name table by default has been reduced. A new option --detailed-info restores the previous behaviour.

  • ttfautohintGUI crashed if not used with a control instruction file.

  • ttfautohintGUI now correctly switches to a horizontal two-column layout if the standard one-column layout would exceed the screen height.

  • A new option --family-suffix makes it possible to append a suffix to a font’s family name in the name table. This can be useful during the development process: It helps the operating system to simultaneously display several instances of a font that are processed with different ttfautohint parameters.

  • The new library option info-post-callback helps in processing data from the name table.

Version 1.2 (2014-Oct-06)

  • It is now possible to control the hinting process at a very low level using a ‘control instructions’ file. Right now, two modes are supported:

    • Adding segments and changing segment directions.

    • Applying delta exceptions. Note that this doesn’t really work in ClearType.

    Please see the documentation for a description and a small tutorial.

    In the command-line front-end, use option --control-file to load such a file.

  • Support for input file watching in ttfautohintGUI: If the ‘Watch Input File’ box is checked, the program automatically regenerates the output file as soon as the input font or control instructions file gets modified.

    The idea is to dock ttfautohintGUI to your favourite font and text editor instead of adding a cheap text editor to ttfautohintGUI itself.

  • With the new option --fallback-stem-width it is now possible to set a default stem width for all scripts that lack proper standard characters in the font.

  • Add alias --adjust-subglyphs for option --pre-hinting to better describe its functionality. The short form -p stays unchanged.

  • New option --ttfa-table to add an SFNT table TTFA to the output font, containing an ASCII dump of all used ttfautohint parameters (including control instructions). Right now, this is mainly for archiving purposes. Forthcoming versions of ttfautohint will be able to re-use this data if a font gets re-processed.

  • A harmless buglet was fixed that made the glyf table too large by one byte under some circumstances.

  • A bug fix taken from FreeType, correcting a crash for unusual outlines.

  • Better handling of TTC files.

  • New library options error-callback and error-callback-data for improved diagnostics. [No change in the front-ends except better error messages.]

  • Many other, minor fixes and improvements.

Version 1.1 (2014-May-05)

  • Support for the Devanagari script.

  • Bug fixes in the computation of strong stem widths. GDI hinting now gives much more consistent results.

  • Better recognition of script coverage: ttfautohint now properly scans composite glyphs to cover components also.

  • Improved glyph shape analysis: Non-flat local extrema are now recognized more reliably, and stem detection works better.

Version 1.00 (2014-Mar-20)

  • Much less memory consumption while handling fonts with complicated glyphs.

  • Option -s was partially broken.

Version 1.00rc1 (2014-Feb-07)

  • OpenType feature support. ttfautohint now uses the HarfBuzz library to analyze data from the GSUB table. This allows the hinting of glyphs that don’t have an entry in a font’s cmap table, for example superscripts or small caps.

    Related to this, the new option --default-script controls the default (fallback) script used for OpenType features.

  • More than a single standard character is used. For example, the ‘latin’ script uses characters ‘o’, ‘O’, and digit ‘0’. This improves the hinting of fonts (and features) that have only a partial coverage of a script’s character repertoire.

  • Much better GDI ClearType hinting in the range 30-80ppem (approx.), avoiding overly flat tops and bottoms of round glyphs.

  • Better handling of non-square pixels (this is, horizontal and vertical resolutions differ) in the created TrueType bytecode.

Version 0.97 (2013-Nov-09)

  • Improved script support. Besides Cyrillic and Greek, which are now handled separately from Latin, ttfautohint can handle Hebrew.

  • Option -f now takes a parameter to specify the fallback script. The corresponding long option name has been renamed from --latin-fallback to --fallback-script.

  • Work around a bug in display environments that use FreeType 2.5.0 and earlier for rendering: Sometimes, the ‘strong’ stem width routine was used for DW ClearType (this is, subpixel hinting in FreeType is enabled) even if ‘smooth’ was selected while generating the font with ttfautohint.

Version 0.96 (2013-Aug-06)

  • Option --components has been replaced with --composites: By default, the components of a composite glyph are now hinted separately, since tests has shown that this gives good results in most cases. If this option is set, however, the composite glyph itself gets hinted (and the hints of the components are ignored).

    An unfortunate side effect is that ttfautohint’s option -c (which stays as a shorthand for --composites) now does exactly the opposite as in previous releases.

  • Older versions of Monotype’s ‘iType’ bytecode interpreter have a serious bug: The DIV instruction rounds the result, while the correct operation is truncation. This caused ‘exploding characters’ with fonts hinted by ttfautohint. Since many printers contain this rasterizer without any possibility to update to a non-buggy version, ttfautohint now contains work-arounds to circumvent the problem.

  • Better support for glyphs where some points have almost the same position (for example glyph ‘Oslash’ in font ‘Roboto-Thin’).

  • Better support for glyphs that use explicit ‘on’ points around round extrema.

Version 0.95 (2013-Mar-07)

  • New option --dehint to strip off all hints without generating new hints. This option is intended for testing purposes.

  • Minor fixes to the created bytecode for compatibility.

  • Minor GUI improvements.

Version 0.94 (2012-Nov-29)

  • New option --windows-compatibility that adds two artificial blue zones at vertical positions given by ‘usWinAscent’ and ‘usWinDescent’. This helps ttfautohint’s hinting algorithm reduce the possibility of clipping if those two values are very tight.

  • Implement option --x-height-snapping-exceptions, making ttfautohint avoid x-height snapping for selected PPEM values. Useful in combination with --windows-compatibility.

  • Minor fixes to the created bytecode for compatibility and robustness.

Version 0.93 (2012-Oct-09)

  • New option --components to treat components of composite glyphs separately. This greatly reduces the bytecode size.

    I’m waiting for reports whether this option works for most fonts; in case this is true I’m inverting the option, making it the default (and the old behaviour optional).

  • Full support of TTCs, this is, all subfonts get auto-hinted now.

  • The upper limit of the --increase-x-height option has been removed.

  • Drag-and-drop support in the GUI.

  • The command-line version of ttfautohint now acts like a (Unix) filter, this is, it accepts stdin and stdout as input and output, respectively.

  • Less memory consumption.

Version 0.92 (2012-Aug-07)

  • A serious bug in the created bytecode has been fixed, causing incorrect rounding.

Version 0.91 (2012-Jul-12)

  • A new, ‘strong’ routine to handle stem widths and positions has been added, to be selected with the --strong-stem-width command line option. If it is active, stem widths and positions are snapped to the grid as much as possible. This algorithm is useful for GDI ClearType support.

  • A new command line option --debug (not available for ttfautohintGUI) to print very detailed debugging information.

Version 0.9 (2012-Jun-06)

  • The created bytecode has been reduced in size, making it approx. 20% smaller.

  • New option --symbol to use standard stem height and width values instead of using character ‘o’ (which may be missing). Use this option for symbol fonts or math glyphs.

  • More documentation (in text, HTML, and PDF format). It’s still incomplete, though.

  • Option --ignore-permissions has been renamed to --ignore-restrictions. The short form is still -i.

  • Defaults for various parameters have been set to more sensible values:

    • hinting-range-max: 50 (was 1000)
    • hinting-limit: 200 (was 1000)
  • Option --increase-x-height now has a mandatory argument (in the range 6-20 or value 0 to disable it, default value is 14).

Version 0.8 (2012-Mar-21)

  • Implement option -x to increase the x height of the font for small PPEM values by rounding up far more often then rounding down.

  • Add option ‘-G n’ to switch off hinting completely above value n.

  • ttfautohint now appends version information and the used parameters to the ‘Version’ field(s) in the ‘name’ table. This can be suppressed with option -n.

Version 0.7 (2012-Feb-05)

  • A GUI has been added, using the Qt framework. The binary is called ‘ttfautohintGUI’.

Version 0.6.1 (2012-Jan-02)

  • The improved handling of composite glyphs in 0.6 was buggy under certain circumstances, making ttfautohint crash and FontValidator complain.

  • Dropout handling has been activated.

Version 0.6 (2011-Dec-25)

  • Improved handling of composite glyphs.

  • Implement option -p to pre-hint glyphs with original hints before conversion takes place.

  • Don’t add a DSIG table if there is none in the input font.

  • Human-readable error messages instead of hexadecimal error codes.

  • Better tests (both at runtime and compile time) to reject too old FreeType versions.

Version 0.5 (2011-Nov-06)

  • Rendering on iOS is now expected to give good results.

  • No bad rendering at very large PPEM values.

Version 0.4 (2011-Oct-27)

  • The bytecode has been changed to ‘create’ twilight points. This should avoid rendering artifacts on some platforms.

Version 0.3 (2011-Sep-09)

  • Fix font generation; sometimes the glyf table was one byte too short, making the font invalid.

Version 0.2 (2011-Jul-19)

  • Fix bytecode bugs that prevented correct rendering on some platforms.

Version 0.1 (2011-Jun-30)

  • First release.

  1. To be more precise, the sum of the height and length of a segment must be at least 20 font units, and the height multiplied by 14 must not exceed the length. Thus (19,1) is also a valid minimum (length,height) pair, while (18,2) isn’t. The value 20 is heuristic and hard-coded, as is the value 14 (corresponding to a slope of approx. 4.1°).↩

  2. The notable exception is the tag ‘lao’, which originally has a trailing space as the fourth character. However, ttfautohint ignores the space.↩

  3. Unfortunately, there is a bug in FreeType prior to version 2.5.4 (released in December 2014) that completely disables vertical delta exceptions if subpixel hinting is activated. For this reason you should expect that the touch parameter fails on older GNU/Linux distributions.↩

  4. The number ‘6’ indicates the version of the shared library of FreeType, which is not directly related to the source code version of FreeType.↩

ttfautohint-1.8.1/doc/ttfautohint.pdf0000644000175000001440000516246013222454011017554 0ustar00wlusers00000000000000%PDF-1.5 %äðíø 8 0 obj <> stream xÚU½Â0 „wžâ^ !vþ u@‚ )b@”n ¼ÿÂ¥)HUt²s±?;ø@àxY‘S±CÁócÅþ,PgSÒˆ:C²·IaÄë›5ÝÎÅØ2¥ÌÓê9Þ õ ææ÷z!S!ì$‘©6 LlCVžÆÁ1†Æñ½·ç£ÑPø¢Sw‹¢+›òa#jÕÃpS-rÞ’cèÛ-›Î?ºðŽ3¥¬Qà©âºûA?Ý endstream endobj 54 0 obj <> stream xÚíœKoã6€ïýþáò1ÃøP [ ·¹=x㤧Úÿ()ñ5”w“µ³D`H¡er$}g†Üý»;îÿÄÎÈÑŽY·{þg÷óÓîÓg±“œi-q÷ôº{PL Ø=hdF›ÝÓñÏGÎ%pŽœsxõGºœ#ìÿzúm÷ËS¬ÿ_ãɧêgŽ;QW/¸õMêX¿ûg1´t¨jV{óÞ?h„P†(Ä! UmŸjÀ2gÕ¢]}EvYW"ãà|R2)0ËîexïAä¾HY/•ó$Ý?È©ô>ÜÆ/òmýñà/÷2ß·¿>ºùnË#÷ŠŸ¼k*°¿k ¦•˜¿îÀ¹xæëgou_ÑòÕ8†bñj:T¡³.€TW€DQõ1ÿ¥šaœ:÷ËÔ±‘}Í,O˜Æ>‘Õ¹RKÚ.•*Ü‹PSøÍÔ‡õ~ªÙ—OG ¿±ŸçºZîÓ9ØuüK­hÕ> ëïï{Ç Ò(%¦‹4_YÐß i° mÒh¡ÄaÇDdtT`|ùrW)4‰Œ[hå í~ ¤õA¨%³¾[7b‚PŸ=ˆµ˜·’†›u’ÿþx]ì€Q&åBž¤S~ ,)R¶Ë¤µ†))RjªãÓgE˜ÑLùfx¼H»ù£¼~Z}œÿ#³zƒîT+# ]Ú\ÙC]-:æö>ü+–6gÆ©VäÑïo²·7\õ±)€lÑTïæÕÞI…GÍ‹Fúiß‘„¦CÒ0§]Kdešó8å#¾êÀ9Žñu£iüpR²6Ñ©, ¶‘áë² 8«]i<ái¬ýÇäÈNBHó F/Ƭ‘MÔ“c…²ôŒ®~ þv QJº@Cd<û­ ©ZôvEoTòS})äT¥*zÅÌ|ÌÚx!ÔÎÚ€Y!xfΛñf!úÀì[ÁåGVÀÞ‚¢0m™ú`P#®…ŒD„À%‹c³`'_*³ñÝÑ9˳ ãµ#cd‚´s^åÍtíc¹YxW`Bßo7&V2¡Ïb‚¬tKt‘Nz‰¾J¨üíb¥bÉsR"ËP,·ÉFNVQwa4)ᤖ;]¸3ÍüT•°$<={1òHåìÝq•^âwLj8Gœ93 HˆŽešcˆ´•cv“Ì5°t3'%³BcÎfæÐ3IG¾R2±iF9ëºbÝË*¼=[÷=ˆ¦‰${ úv˜Q>º1S!\#Ïaæ6c6 §Ñ; ¥â¤ÔÑO6|§ÓN ÁÀÊö>†»÷kÈ¢HÈèÛH8¯Î’uè0Ór^ÞK.©8SâÜœŽs]W™ŽÔ 8@y_È(rò+t@¦-Î:]§©íƒã„•×È Ÿ“m–³/QuÉÊ’S•w5æáaËàH¤t½]‹nºŒaü"\2Á%å^ˆ˜Á _bÄq΄èùPqØ<¦œÀ8„†à&‘lŒvß8BJ7oŽ3Dw 8•;é¥ê«J ƒ*eUo…ˆ5hûþ´QNäämÝŽp`‚ÛK¸AÌÊ.þTé]GŒ;¦ ¶ Äî@JN7€J0ÉÍ%upe†ÿÂÕ6iÄ ¡*ÒÀô– £´tCçë3¨/AgNÎ)Ê<Ÿ!N'aÌÝ£/m‡"{eqØ”@­6$E_ {~ï‹eFn]C—ÐCËÇKèÙŒ^òɽ—G^²‡àÁÅ-©ãT„ÌmâF9éÆÍf.áæòìbköYöëŘ‹Õ2ä ŽH;ÜûGQé&Î"ó““KÄÈ|vM8¡Z W¥kÅ ×J¾:ôªÖêEL¯¸2a{s#„u(JB7PÎ2‡gcðªŽ.¤LF„ÕÌ-YÒm³Gn­.D˜¡nI³ƒÏÇç‚«mù™O'˜@Óò© ŸWV¢­Ó›~vj…l›\~dBdõª90ÃóC6帞”5ko"ZÚ¥ŒÊ3¾ — õíT¦…e@Ú¤Ãz¹>>ÏHÑÚmóæ½ÌæÙÒ× Áu*é@õ–`\@tu²Ó0*Ál ]Õ«XÒÞ{•6é¬öÙQ_Rueój»Ðõr*˘‘ß#– œŠ§èD¨F*&B¾¬ùþUä3ýä÷Ÿþ虽œ endstream endobj 100 0 obj <> stream xÚíœËnë6@÷ý ÿ€Yß.¼(Ð[ »Ù]8±ÝUíÿ/Ê÷SŽ%Þø:I‰@°¬HäP>Î ‡Üý³ƒ6°“d'…FJï^þ—~ÿ%œüû×î§§Ý_É0ÒXÃî鲊0Ó»=EæÑ§Ó_0†1¾˜ÏãaÀ±¹DÍ%fNÍçÑ|‚9¸9Øáϧ_w??™ l5K5H‰4—U ørØ›§ÃÓº»6ÏÞýYøáûœ1†ãS 3,ëÁ‰ˆÐ-šÄpØ Å-ØyØKs΄9Ì”˜2ßùÑÿO¸ÿöÄñLd¸“Ž…eû Xƒ5P‚4U€“çwÎd‡“ÑrTRŒ¨%*I¢’yΈZ² ’¿§ÅY•zÚÀÄI#ÁíW4¡ü*³âŠ;-7€§)Ž ¹„'MxBRy¦š Cv^‡¢âFXÒÔ6aûÄxÖ\q§î6àI¶Ûsc‚X¤3žöÚIEŽ~8·ƒ´Ó4hM®¾—¤[U¸jÿ«Ë? ðÉpJØ*cÝ[ ·±æHʶ9ÿ7F®†e9 ˆ‰W‘£-r1ì‘kÑqô%â‚Éi©óS”W&§u¡t09[нùï<‡»à6„„Hæ´nà4VÂUc1 —ÍïÁÅJ¸* Ì¡¼ÿáF_@p‰(•»Pg:<{ôÏ[°Öúã lÒØSoÝ ²QÈ´B\°× ã ²00:£â¾ŸVRBŒÔª­wRòa¨«yÙL] ¿At‰;] b‡/‡2ÇZdО« ·4·Ê çDÐY8 ŒÉÔ‹ZŽ/šr®Dq*ù7( hD©lÛ:Yß\©aáάz:( ÚSD­®*ϱC«ØgâD£qOÜ-{§5È2ériW[ŠÀ&) ëûó¼ëe|ä·þYsüT endstream endobj 134 0 obj <> stream xÚíÜË®Û6à}ŸB/`†3Ã+pàE€¤@w)¼+ºpšœ®ºhߊ’mLKæ¸-7DŽaÅ–å_ÔRÔØþ`Ðé ï¢ qøã¯ù¡_žþùsøx>|†´Š:Âpz¤Ìx—^zúöÛ›Ö‡lZB£µ‰é†Z[šîMzÌÚtïÆÇŽ´:­I—gßÓ-ÌÏšãï§_†O§ôîc†ÒÛ“Þß[þþ>ÝèöÚçwƒ.›9_wcÜ…óhŠžþrtŸ´çŠ”ü Bn«íœ¸ÜJí9 ¤½õל)Nj6À”¦ÖôGß.m<Ï; ÇNmnÆgçÆÛ¦£¡ãØ‚éÓZyï©!¾ÞŽÒøÿËóºÜ<»3Ь[…×)‰q^JùúÒ¿±4û£`ŒQÆØ5!±Dkz·–Hb‰†Y`î9Žÿ6õ$Y¡©Ph²VÁ÷[¶ý=rHb.¨€wÔcØöx$7x$3Žn»²IšÆ¡*“,|7ÙÜ$Ç$60þ+“VjÒ?4éç>ò}|íq¤iý‚c¨äÈrwŽÍ9rG!Ÿ¡ 8F«"š5G'åèv9®OÇul¥Eº[ln‘#[•ñ´Æè¥íîLÆMIßf¢%Vt—™ OßÝ5²¸B$Ljiq1ˆ1V#AÏÈS÷®±=GÎh<ö âHéû;ŽQÊÑìq,^Ý©ÃðÔc{Žœ‘œ£Õ ÖÏRŽô£Ýè«9²Ôc{Žœ‘œ£#åî/çÍ¥‰»­‰{ ñû\É8/@ºÚsÆeî.®•B¦'æ£/Aè½Bˆ%…(T“à'%ÒbJ µYøN±EnHn1jå](Y¤W,æRç¥Ü’;ɼÒCš~Ú¼¡E'ùìÄÚcjŠõ®ô¡úÿõÈÅ'jéE¨S?E¦Ò#\Î57+2æñÕo˜Ôt<׈㊑œ#xÊ'ŒöŽ~›ãF°f6s5Év¢›le’[’›$P\ɤ{Á¤Ûí"×§ ¸øÍÃw‹­,rC1¯‹iƒÑÙ’Eÿ‚ÅÇ×Ài»X]=\³üc+Žœ‘œ£ Ê‚)q /p4{‹«-²ðÝb+‹ÜÜbš–jG%‹ñ‹´mqçÔ±z¸f;ÑM¶2É-ÉM«Mž_0‰»Ãõ×Ùâ·Åç&¨²(ÃÃ÷¢L{•\“\eŒ Ü]ÉšU¸ÕŸùJÕšï"Û‹ä’bžJD ò%‘(wE–ª3µßOàÁ»Èæ"W’ä"Ñ©ûo( L»_R šŒ«¹ÌÝ=¶÷ÈÉ9RTAÇ’Gi™Æï~ ‚6>pF•¾^+ŽÜ‘Ü£¥t\‹¥ušÇ5ÜøR!IúH¾w’íUrM1WG$*K…’Ji¥Æíª|PÈ®Ûðìe{”“eÐÊX_B)-ÙØ=”w×Ç%_,äÁ»Èö"¹$¹Èh”ÖÅÉ´jcvEšy[ ¨Ø\E²à]d{‘\’X¤Ñ^YkK"¥µÚ¸K×ÈkEòà]dûLá’ä"è¢HiåŸù¾øÅ¨É‚w‘íErILäýË)­eÄ«h¯eñë,ýËO?¾Å…P endstream endobj 146 0 obj <> stream xÚ­ZË®$= Þóý]ä~‘Z½@$Xᨙ>ͱ€÷_Ävb§Ò·Ñ¯ÑÑtU;ñõ³S§ÿžôI•úÍ)†¼¥|úùŸÓ¾N¿ÿ“>µ…`üéë~:ÛÍjw:¿ÅO_·\”Òæzv9—_fWÊÝ•ò¾üÙk,¯¼ºžCùßÕW¡üï`Øíu¬N¿þóë/V[VYW>êtv¦ì"#‹F°®ŠåÏ¥ö®RÈ@ #5éù´¥” Q ÖX»ëÙ[ŸLÿuCB¶îÙëYûºƒ¦ù„ûʾLq¡‚ˆìüÉt6m÷‰zñ¶Òø tVÛ²þª«p+Ï&ÁpuÞ·ÿ}=ŽF)‡¾>’|9¿Æý¸§¶Ê]˜õ±º•Ѭ/]¥íÀßMµMÃñš.|û†dìÅ,nÕÃFÉD4ò¾ªïŒ ;k»y—™ÚÚÞØ#‹¶ÆT²Š¬#Ö7 eÐæìW]e¦v8£±š:OóÙ©=qS¿`SÕ…äïí¡YJž´”ÉŸq©ƒ6R-òÖ)'x ‡¥°:– ß:‘žÄVx¢×ïÆ,—úY˜-!5šƒgoBû&8Dêö¤í„3†uU·2v«>Õ1ÅÉÑ\zì#¦d¸ÝP|@rŠ*ê{!~êÆݠ˲Ùã­ñ¨lU ¦üÊþŽ¢±]4OeøÛ±!Ø5‡ìÜŽÓ᫺€*ÚbÍ;Úᄊ ËQ ÝøÈ»°›Æb:²{GŽ`ïLëÝÉÑ ÎÔ¦qf„nJMZ^-Â+¼u¾»¨»tCôæs+B Ó1òæ ¦Ä¡î¶îebÁÝæ ñé¿W× Ó¢ì¿ÝÕÛ,Ûó—½9$×Q*9Êr_±”ŒÌ*©º°‹ßç í:YXx$Ã(u¡ÉvNàþˆÛf½z–/‹•`q©Ýf]0¼¸4¾T—>ôê²®âU¦MË\ÏpŽa ï† 2ñ›àåOê¹Z¹]I󶚢sPH©NË1-³°õõ_û¯/¼£¸¥ÓEž&…­¨x Ý´q*õ%ƽYÒKÿ‹~s6Íô¡/öd·ìS=vÚ|°”tær&ùËS¸ ² "º-Á´fUÇ"¥ÄÚ žýÎ8:°È,ÄæC,K‹ºÿUùx¿Å(M`Þ;Â))Ì9Þp¨ÙVt ÝÆEM”GyÍC …–÷`Õ§Õp߈•$×ÌçÇØ%vPJnˆ[ˆqåÝ1f~,\¯òQ–ŸVYFûU ‡h­V} àÚÍC­z+¸rO‚:ÊVp*|: %CaÆ)D»)ÜÖ5?& œC«‹B²Ër„ªô…ÃÝ©2Rœb¶Bbae &Í¥×ój׈Õ^$ _Ú©åúkɪQ‘¥ì¡9(ÙR+l°ì…+„rŸ¨œ°þÂFÓ²‰‘½¹Â“FZÃÍ vd¯v'cw8‘Á‘æ„ öÉ(¬ Ã[R=–“Áb¥fm±ñç¬ÓVá¬î•=Uû»(›œÀüÌÔE½ùØñÑÊzÚf<³ÆUèF!Èš‹wVïÙéØ.ÏV%ŠÝeyÂKhÚ¤½ 0¢û*åŸMÜL4å³yްwdf@(»Lo6mKèµQ—ª9 °aÔ}`8µµ(Ó8•k£/0a0z´ÞÀõ1–šÕÌ;ž€EX‹ì6ÓË]sÐk{ÒÌ5¾gCœ£!Nߣ]ÂXxRé ‡g)uÚ–K”šÒýÃíAëAبhDµ|¦&á!{=—®M%yûR»•Š+zzaÿùx…‹ ±¢g( yÆqùƒØHÏ€CðVÇ©²äFkËü¬¿§þ4] ê Qãú;Ž´7nŽÒvÀŽƒ.ÒE6Kl‡53áJ:pbñ<â…б¸#ñxœNjøí‘šîgõJ{xLÌ@¤{<ƒXÇÖѺóõ ¾ÍÉÅmÄTÝ­MÒå-Yû‰Iò4ù^âS@OüTLrê‡e–òIôö÷B *oéä…ÄŸG*‚8u~œÁ¼fŒ8fˆ 1« ¼½¼ÚªŠ^•Ö´âØX'’œ¾Õ1‰pÜ6Å_ð-µBÀë„ý%›•yMCçËåZ¬:Ñ‘x¼ŠR›XÅ®–e³¼¥ugˆkgEÌ:ô+h¤_vÞé°Pgß±P×cZùP®o éï|½ÓÛ4O]ІáZsv™ðuÄ¿ò/K°©2;å—_TŠ‚ÑÙõÅÄ2‹®)f° LôIÈÐÏ®uÁdï,3®8¨E§Ý(":'‹@Ž.º@§b±ÕEÖqãU*EàvÍUàúV‡ %o§nPÙEX<Û#Œ;Üà?ã²,‚_°üÈöšø âjt†)>ºp‡ëéÃmü›‘Š"÷"ÞöȪÞ(ÚÃêÒ­ÃPó'UÞ+dÿäîUÞʧ¼€ãõæ´ç òÃN׌P‚ô¢ÊÃÅðºäÒ†‹[š¢qPä˜øÈ™˜sð( MÐw’•ºÝ$b²²ï%+±ªû»Žaág¥Ü{#Yá¬U[¾þ°‰ «õŠ‘¦“hŸ¹Í¢«kTڢΣG<}0¥4ßGq×W“lˆz/(i}8ÅÓ âø¨$ðo«ê˜Ÿ"Ìæj¶#œ ©ï«ñu… ú…ÅSÂV‹|0ɃYîëžÍ<ºå‘. |âߟµöÝÛ̺€£\.ºélã£6šïX/0²ˆ®-„µ ֻɑ‘ðâ»$:]Æñ,IÆ,ÊÑhŠ–šž?6|< ïð=R¢Ú?€.%úäÄãNoÆÿœlÃ’4B=µÞì¿Ó@ï/äô< Ô몄’Ó+„3V%‹Ï°r†¾˜€ñ(£ þY{Éæð‘—Ðw‡¦VåùS?<òÛ™ý¡fwÖ‹¾‰v¡KÇäë–õžÌòŸÞ>- ՜죬eQN_xpöÀ :pPÅ ñ@øô»²ß]|ø ïoŒ LIòºä¦sHµ¥ÒëØ~?ý·ßý…öň endstream endobj 151 0 obj <> stream xÚÕZÍ®+1 Þó}ùq2©ê Øî±è=mY±€÷_ıcg2mÏ!¡««Ó™IÿÅþìäôÏ“=™üÏžVwZ㶤íôõÓï~œ~ûw²fÙÌfO?ž'kãíéì—<ðÇý¯c,cž×¿ýøÓé÷?&Sœ_¶ä”-<´Z´åÚS‡Óä§Ãcõoûu=ƒ]/B¡‹²|eî™æf¦Œ¨C hÃJù‰–õÑ]úPÂ×7Žì*(Â\•Žö·øU/Ö ¶Ý—²ïL­¤\eHŸšO³‹¿†¢/ðÍñéF>Ò½µ¾„²ê–#Æ*7þM‘ÓO[¥pÊN‚­xçºg1^¡¸°×:Ãß\ÞÞñ~o”ëˆÏyÉ ¬—®$øB)‹!Iå±±ëçz¶õmÞQžZ°Äû—?¶ÿúû,|F¿@\OgÈQ9a¾Ê>Y{Ǿ…¾JY`FÛX’msc¥­}6éü¦‰]eâ¿=YXl€c‚0#+xPÈ\˜ãÖÏcÀ›c_\sPµ“Íñ=DV3¾|5݈zxöAVo³VáÃ~ëʯm‡S‡IÕÚ»<¬—˜(ò¾­ÐþZsaÁa«£ÄG °0’N¶’Ïò+ǾN 'âºEo$ÅŽ—_êÈY/€Là?2µuçt¯@c{'Ôæ{¸÷Fá8Cè±Úzº“é¯"P 8O aV­•‘+ÌÄidÀ°¥”l®ÖËshç·œU£æþ˜ŠØ:Є!ÈÒ¹„§hÿ¥ôM'Äåw!ç¥ä^¨ªÓÖÚ.;x›·½ˆO™4mm÷^ùñ”Ð7sG.A¾Tñ¾T|¾7…}!ÛCP¢ .© Pç첂q1³³ºcA;·B!ÿͿ׭(cªé¢Õø…S}–ܹ2åz.T ô\¹‹±"¨ö!ÞèW©.ìš?f |&}-*oc~ëŸøÕ=™¼)tç|• žÉ0Áu.I[sÜ:ˆðß”ûçÿBnæÃ+æƒ,õËæ{¢dâ2·ü¥ßÿg&0YêÍ=dô¼OÊïü×.Êß*xÍ»fs Õ˜ðs¬¼¨üá®…î»Ú𠀩þ‚d°C@ûÚë¢0‘ ž=g‹Õ£X#\%ZZÏVµ3Jþ$âóº¯Û„Ê|‚Å­þ¨Lͨž€=D§zyþúh_fg ² qŸÉú|ìÒ}Tá(ÕyÍi?It;ëoµd·Mß¹‹~yñ§G¶EªW£LEò•Ÿ^Ÿ®',ƶÀÉNE¥µGϮ̢[ÁÓi†§í»NoÑ|ÀÛð Z)÷!Š]ѽ¬ Í›·ëB½*aËD܇KG+#/MãmæQgWZmãûšc{×Êüh ÈôèMÔP9m|wî Ö²ÚÑNX7xß‚Êñ?opeû-«õc‡ ÆWç£úp…²hHŒöÿ¨™Ä§ÞAyrŸÐn£»ozQ}årášðø³ètU—qã‘D/Юìß…Ò+¾¡ͨ¿Ì˳ÿÖå¾ß&2*íô¬æ‡ædämSíÐsSµóTT­¢Bï Nwm|?™Ä©&kú\V.#~ì{¢–Ϊˆ“Xÿ7}Lá]H‚]À€xáÇÛ­/L:ʼn»B…T÷â/â|¨Ì‹÷•Ç©b†è:Š1 €Dkçl5ÈÔ> y‚(½zfŒ¶ªÚ7±—ÁÁPdÐ .dņéViMÞ—EéS•ÖT—"ÒÚÆÔÍ4®ó—ÙHä¸i•T©¡ZŸþÓs™ðñ¹Œ„B8ë¡+^jvV,Å_êí q‡$}ÐláƒP·k k}7_ÁØûb +GÁÈ™ _272ë9`K™YùÞ¦á’l+8ðW øld«tvÓÄ›òôªDÑ`UTâF ’ã^Ë­·ÌñøYÞSÙ1 :ïwÆÝãvºxê7Þ iB ’Gï­c1_/P8¼þ„ìfÐí£¾:w»ó [GN‘i¤Ž%›Ø¢ÆÇÚ˯yO°¼À߻ø‘É~`~ªßöê:ž{ë^h ÿ$Q+S7éþâÄ˾,‡+0Õ®ŸÑ&‰Hk©˜Þ¡Ñ2hý¼„ÁÁ\j­ Ü3Æ{ÈjL­Àã~9‡°?Ζ¢(íŒà Éa©<Ú²’ú¸œÅ…g%Eû¢zQ ' Ϫ0Î’ýÕ¿„’I¶Æ“?îûäÍ e[é+R8W=©‚èÈJÕµQ‘‚ôßúæƒáÝ›˜€ Løf8 /BUŠ;(Þš(«hçqÑÏw9Þlú~Cœ¶ñË:èfKØ]×¢» ±ßd|¦´çrÓÂG*2œÈ¶Í`¸|iÇ)í—jH‰ŠKžÄ{o zJÈ®æ€ fæ¼£ŒY¿î…¾ô¢Ž¯=R[¢Ž0b¿PZ«ê¡9.ï„›ˆ¨qËigl»|TÖG­P{s.æìP¿PRf(?îûÝÒ;ºEВáªÚ-¸§# !„_«‡ù %Ç£ËîÀç³ðÞ2ÔqGÿø|ÃùÅš ¿cZ—-е»Ò”?ÿæß›Ç™ endstream endobj 156 0 obj <> stream xÚ¥Y»Žë6íóú+|S ’I`» …wµN¤Èÿ7‡3Ã!E­í{qá»k‰œÇ™÷ìôߤ'µÿÓS4S i^ÒôñïôÓÛôã/zÒn¶.˜éí>]ìlµË?öƒoÛŸW¥´QJÝ÷Ÿ~½¸”®*¼¿+eRîS)¯ÖK¼æŸûgÿÏ¥ýýÇz1^]á›r·ýsÇ·ø»[Ö¿Þ~Û™›I«9©¤3sµóU³IÈØÄýRÀ ù²),]ó³­|ümõ»xJmëÅZ{eà†·k–Ó…ý¥×rõð0ßðËZ4jNjüØ•ÔÞNpp ¸¿!»^¼uW•üä`úê]¤'j…©‰lö‘ˆ@ÆIðXÓ[>‹gÂö‘o €Vf»›ßm«ëÀÖÂ4šncœ³½wk;{öKÏí@˜ÅÑ 8¦"ŽY47E ýpQñ³9&:]N@K‹ÄV@.{øhÅ‘¾ÓÜ9‚ø(‰è€’gëM•V­¯$ŠZæ»Õ`Ê nD5gHíA†÷rOÝøMŸ·â©m)éd[Ø.QÄÅËbÞ­ÌáÄÚ]Ž3¼¦Jàb“‰èÑ6ly2Ù4çpMr¿¡ðÅ/Ócý ¦­$xŠýÒ_ñc°¸W¡%$èÑhé›JÄ”ÏrWt%kôÎZH‰¸+K'­®‡ÐßÓ¡=wé*ôEK)f¬;íL ȼÄEõXŠ©Z·ù´© žøÈè0ì7é…ù ?K…Ä8!àµÓÊA¤»Î7X¸„û rÝ(~Ê2œ¤çÂBC&IQ³ˆ Ô õªº#»ryè5ýT÷ÒÓQHcîªù?ÍÞDäd©|8‹9Ð8p¼{­K}ý0rËÁ¦ªz¢ºÄªÜFÍö·X£?i‘j×"áSl‘à´HTXÁÇß!eB{´P/÷d³#;w(ùÎÚ¹>XÊYuÌ x6TûÖ¹¥x Ñò¦Ë\8 ŒLoã¨s°‹lÇàÌUïådA-3NèZ4‚ÓÖ—Nh²+”âYè=•ŠÑ–6µù.PlØÐÛ±èØakÙ¯#ë’9ÊF”ã©9ø­«#¢â)¨ X)Q²ÏŠø¿9Z+Ž=rÐÓ£¾Ôë%`¼'ÍOâYbl[ör•zØr­ïa‘ØI‹ÌEVF*èw•fm˜&ó Ä×¶MpT;¼‡¦EÚ†õÈÖѹ‡6P.)!"x±MgÙ¦ÔëÄã·°Rßoœ^Z㜎UX“ÝiçзfÆ…g|ÀH…:W2µEó&d¼NvpXr‡†D3œ¶6.ÈåâwbKº Çg&N±rPéX¯=ÖøÐO™ ¥4 ?ùèÆoKF?Oöµ‡Ç6bTÂJ 1¿!àU7„á“Á†$eU,g‡4ÖË9ëfž‚ ã‡÷6íÅF'lØÁ÷B)>ã"”oñ¬(é Kõ[#;¾UïŸß`¹—W|¿óoÿ”ý^³bÓfÙsµÎ:øY©(Wm¢=§ïuH­l~Ý?HÇ0륧,ìòš ÉÍKJÝ꬈3»ÿcñMÐsŠùÁÿ눭ü{;¶–§Ý^$œÍ64ð{9¿`ˆïlôd¦¢ƒ¥ÔBfÂt¼Ÿä¥n–²öül’9ËÕ·Ö~ÝOî!1ˆ|Ƚ³÷ßBÿ5„ö¿~F|‹²{þ–roEÝ€ Ç–F#9C,ÓÛA§¯Æ)ÿ8ÇC–!t¿hÕ±¼¼a[˜ÙCÉ_Óº ¯/xÞ³µ[óxäèZ³vbdÙR#`±¬(ò½žYƒÌî÷6jdóÆ­4ã &K£ßi¥`Çب°­».ßÍ´µ÷+¼°žk.ÆøØo”š•ÕŠOu´Ï/¥L4Ûf»›}˜®.@4Y¤qRˆäD€rt=ÊѾ‚rl\¾½6&V÷ŒËA÷(²_ÃÔŽ1}´šÃéLt®¼ä€é/¡Û–I.H@l?œÕ÷2_Ê錟u®/S>O¿žÞï,‚“í3­‘„ц^®'ózƒ×‹óXÝgŒPæÞzkÛüO!÷Ðä~$„ÜqÕºÌ%mØAÊWbZØ´%̈’÷BÔÍTÃÒ¸nl¹¡YqW©ºéôÝ‘WÏvG>]/Type/XObject/Subtype/Image/Width 949/Height 942/BitsPerComponent 8/DecodeParms<>/Filter/FlateDecode/Length 98115>> stream xÚìÝXçp6!ÂR@Qq L™*ÔZµ·µ.œ8qïQ«Ö½X‚‚ÜV«Õ¶*Zk¨¸·âT†ìÈÿ§!BÂPFßÏÃÉ{oÞ»÷½ ÷½óra%''+È‹U3¦âæUѽ¨„Q’©­¢Z,˜ˆP(¬± Vѳ¨¸ö+s­ÉÔ"³›+ÔLJµ¿2;D¬+ay*n^Ý‹B»´Š˜‹Ä½¦,l$ØËÔ(UÎŒ‹ñVäc¤äÊ^žJÊÚ—¢û¹ÊÉå2•›‘ƒålv:/97$c@>¨))Y‚²B¥œô­’y•¸»Ez®¾QFÎN¯ÖðXŒd ÈÇÕ)•ÊrPV¨”s±U’_+må–r—\Ób4Î)Êe&F,ø¶|ŒªÅ.œ .²³@,VAP®”Ù²åÚ²´½«zQÚÐ\aÃX¡»pV•¾A*:ÚTñb—ë+e^ÂJÆâf*3»x¡Œ-@Iù zdá§¿°ù‡%Ëó)(WB6ß©0Y¹¼2Y¡ÝU¡¸\¾ùOâ®QZh®ˆZÊ}ó7œ?VÛ7—lÅ÷ò^$a%αJ21b1ò1 (+?'Ù ÊÕ5+——‹îûYåÛoÈÍå9ìåµ/¯èë4dêæ\2ÖaåÎZ&2± Æb$c@>¨’T*‹A¹ª²r‘ù–\V(ùse„Té¹³4»bV•lÕúÝ&Ûã ¬ŠeVÝêÊðf†X ÈÇÊeÎʬʯBåœî-ésù÷½ø]oIgm¿b¿-OŸ×Vô†' _i—JWæ]5døÐ ±ä0c[9 Ê ²vó±û]«d@>Ͻ2³«t¡Y¡²–§4KXÙ™²z¼«„XBÙšü…ˆ•1 ¯{tY»KW%ß ¸ÄXeÞöX×È7ݤ¢ZÝNn²K ¼?šŒ¯;Äb¨Ñùxç΋~þY¼DCCãî½û¯_¿îÓ»×ê5kÛ´ióæÍ›6­[mÛ¾ÃÍÍ­â–•Y’'Ož**,63ëÀM›;uêTüË[·ríÞý‡™³fa­×´ ,›¦Ê¯’sñ{S$N¨ò±•‘ÕŠL P=ò1csP›Íf+*æ½JKKËÜÜÜÀÀƒÕh§+›9¬jO-Wab–¿è Õ%cÉNΫ‰±%k×¶øY[ÂãñvïÙ‹„ê»c–Ùà%#qYA6.“(ÍŽAª-RuÉšÈÄP³óq‰o€Ï·(T3ï†6­·mÛžwM3IXP'(((44$&&¦^=³iÓ¦•xñCéÞ¬’–¤l³þTmÆŒéJJJ7Ù²%øÝ»w¦¦¦S¦LíÒ¥ 6de™#öE}Ÿ ªta*óëîJ±0eÝ‘#GÓ_ß²¿Çdh9«ðÊ YZdb€Ò`WD£>>>kÖ¬þé§¡¡»\]]Æ{ëÖ­òj<))9ILJJÊ×ÍúèÑ£ÿüsfӦͧN…µnÝz„ñ·o߯Q“³²ˆ¬-Ù?ùûZñŸª\éKUK(maŠ,[¡¤òÕ?rqË­ï_5ø•Бâ·Òªj‰odüõe¥½¾"--]QQñÓk””TTT¤×LÛ¼yÓ°aÃ<==éiË–-¯_¿îçç\.Klgg[.³ëÖ­çóùôxÁ‚…/^ ܸq#¶ éóÊE_‘%dÉÀR‰†O¡ØdɪÂe+QÞ¢®ÊWœl¤ùê²ðÂj5°EÿÊÀ×çc+«¢Çݺuóññ•VóöíÛ”S;tp•ØÛÛŸ8q¢¼–844”ÍV=ýðáäI^_1k&3œÏœù¿‘ÅË0Jú =…*¼¨ ¤/ò(qÍ’…JŽ¿²º „ÕskA ¨|¼gÏ^ÑùcñXYÔÇ ô{Р¢$‘““SŽ©ÂÑÑ‘¹ãÍ›7_7kGSü©––vlìlPú}ŒŒ^²,i/(”´¨,™\Ô²h\R\M³oµÈ”ÕüÀ ™ Âó±½½x*-Ç£ß~~þõëׯä$Q¦YÇÅÅŠ?¥p¬¯¯ ¾zß#Ó·P¨F¡¹¬A¤ìßJˆ<]Qy·z†HùˆÂÄåœK|3 ?ÿJùk"üòqóVêêê‘‘‘î;~ë_ØR,I™f-k$&&&òùs333…¼ÓÌ‚°Ó§ílmñ§jD\.fß_ín”ö7ƒCê’—>"TT>.÷555ÇŽ·~ýºÄÄDGGGÚ=ŒTSWïß¿Ew¦L³ÖÐÐ7vÌä)Sx<Þ¶­[?¼ï9f 6¨¹q¹ØÝ­<Ý`¸#…, ’“\ V+@uÍÇdüø º|Ý;¶oÙ¬ªªÚ Aƒ±cÇUNJ?ë-¬ºuë¶|ùò訨zff~þþ––ͱA@¥íÕäæ•kòws ¬`½ #r‰•˜˜X»=cÆôç‘‘;„-dèÝ(AßlŽHÃÕŽRí9þìo“r.K|£!@CÍüûŒ}€lçãbߢææõ%–?{YÉ *mI¾r‘>}Lž šìAÅB$KþúXŠˆŒ-'«»tÛ„<÷û€ê‘Ë1tV$ÙY€*I‘öµršK‘„ e»ïò´ åÝš …jD>–W«W¯Æºù Í ò{²¹,iCXd(¾Ž¼ælaå®ä`@>äæê©KˆAòq4’r0 @™r³®L@²¬á!ë P(z Dg·Œ Åçcü‘€R¦ç¢.pw6ÕÍ;7ø†|Œ!€ M!ÈЀì ÈÇeN3ˆÑ€à ÈÇß”©v*&ãOÔÔ†„t ) |ÆÆ    ”¾_ Î  ß/ PçÊN CUå}VFðë§·’0ÊŠ«3ªN}µk …ÂìììÌÌLy UUUeee‹…| 2çCVƘ{áM´tzԩѨPwã=ï…ojæP|DÎÊOÆÚÚÚzúúò:©©© jjj*ÊÊRó1î~ Ubóë§Ž»Ô®[GC£P¡˜½-í|çš[J«“””dnnž›O^‡BCCCSS3òÙ3.§,%"ãü1TÛÉ =êÔ§·«W£PÑ,µøG^GJ›* ?&$R2Êõ—ÇQ墨zzïß½ÓÓ×—x¡ò1T=5EE @ÉÈÉ)±NŽ@oÞ Ÿ9È\.÷áƒ:::J’N!ãû¥j )ÁbqFZš°ÆÄBê)õ7ï`@R—q7!úzº¨Z¸¾>©!§‹¿¿Î H‚ë+à3ܹù â1†ù¸2……7nóØÑÑ1$$´ª–dâÄ 'Nœ/iÛ¶íæÍAXG îÑÇ:´ÿ”•”ù|¾­­—פVVòœq”Pi:¸w¼x鲋³¥ä‰^“*täc?|èÑãç/\”V¡AƒÓgÌ=ÕÓÓýÆåùóÏã§NžZ¿aV4€ÌJ/ÿ4©ðõyOçÍ›oii™™™ùêÕË-[¶ôîÝëßÏU÷¡Jœ?®Tººy÷÷ÕÖÖa³+ö“‘§ÂŠ¿? §Õ®]»òœãÉSX¿r ™§Í,-[µnÍ”ØÛ·üþû.çÏŸïÛ¯Ÿ¼òqU:tèÐæMK]¶fõªû÷ïëèètêÜyúôªªªÌÔÀ€‹—,Y¹bÅ“'Ohj¿þýÇŸÀdë#†+)*n»(¢£{w÷޳fÏ^·vmPÐæÜÜ\‹F ©|ùŠ•½zõ*å"½|ñbÕªUW®\ÎÎÎnÚ´Ù”)S™IíÚµ8ÑëÑ£‡ÇŽKMIiÔ¨ÑÌY³íííiÒ€Œˆ¸®™~ŸùçlNNN¯ž=&L˜è1lV4€ÜàiiÑoŽ&‡~¿yýÚÙÙ鯛{vï677ÿãX^ø÷ß³”FîÝ»§¢¢Ò¦M›ùó˜Ô©óøñ£íÛïÚµ»›Õùðá½­­««ëž½û˜–'N˜ðâÅsjáæÍ›+–/»sçÅ SSÓáÃGôÿñG¦Î¦ÀÀ;wÄDG›™ÕŸ9sfçᆱ˜|ŒO)Vɱ3ìBáË—/çÏ›;wî¼Æß½{wêÔ):Ú:Ÿ.S _¿~½dñbÚªêÕ«÷ßÿ-Y²˜£Á>|xÁ]Ñÿ ‡ ’ššrüøñß~;DE¬%­eaÑÂØØühdd´téRUUµC‡~6ÌcçÎ;;;æ‹YÔ·o¿!ÊÊÊ«W¯?nlXØi.—»v횉'êëë/X°*Ö24|ðàArrrTT60YÊ B©å¢Ÿ/ódggfd‚·oß®X±¢aÃFÚwȯ™7yòäI™™™K–,Íûr¡ð¿ÿÎ 2ä‡~˜4irJJ²¯¯o¯^=Ož<Õ¨a#Š —/_¦ÄL¯ ;¦­­}åÊ•”ädMMM*¹|ùRß¾}³³² ü©}ûöÛ·ïÈÎΦ¬Ìãñ˜¥Ú°a½ÏŒ3(™PÎ=zÔ‘#G­­­¿r$ö÷S>†*•››;eÊfC¡M¡S§Î.œ}Œ¦N:ÕÙÙ™÷ë×ïÑ£‡ÁÁAÅ_ž¡§§G™UQQÑØØXúV!LKK=UUU¥ú;wîLOOߺu+—whØ®];Ú ½½½©œ©fbb2oÞ<æ1mîîèÐÐÉÉÉÈȘÕÕÕEs´´´®zVVÇ=tœ$>µE +±-Ò944ôýû÷µjÕúƙ޸qÃÆ¦`¾‹ý2`ÀÚÎìíí™pÌpwï¸q£NN³ÑZT…¼ÿù mtp‰• ~Y¼ÄÊÊ*'GµsÇκwÛ»o¿™™3uÀO™œ@˜3¾3gͽVOOÏÎÞžb1=vmå:oîÜÌÌL¡Pxáüùþþ/_¾üçÌiÊÇ—.]RSS£’I†Û„ñãF{zð½œiçöíÛiiiîÝE-S€>ñ÷ßÑ_ä㪧­­ýÅ0Wü)‡Ã=ÖÊ¿â'..Vb>.Ó¦7jÔˆ2±è©©i]ú””lbRG¼ŸÏ§ 6G.—[tQ‹.-To…¯¯È{Ú°¹­ SйSggg'oïõë×3§akS,ùüª”ä䜜¾_¼]>ÿÙ³gTÒʵåŠë×®¥¥¥R5g—¨·Q~~¾4éò¥‹*ÊÊôxëÖ­!!;é÷†õë{õê5þŠ@ ññ ùyb±XL³ÔBÞã ¸’ù¸ê‰V³DqqqÌãØØØüã0}‰¯JHH(ýL555?]U,FW—O³/‰SRR-@ñ‹ Õ>Kz*~Ý…ªšZ]SÓÈÈgBISyZZ”bãbÅÛ‰ÓÒÒ¦c“:uꄇ‡ÇÆ~pquÕàpÚwè°`Áüû\¹reذáÌ«”UT†é1løßÿµ`þüøøøà-[yZ<š´1 Ðܼ~AˆR`UÄçœØØdÜ¥K—DOž<©GéX_??%ë~ø+š™’’"zªªª–‘‘QÖy999_¿~-))QTvÚÖÖNôŸ&ÅPS£9fŠ—ŸOÛ+m—½{÷2d¨èó|P Hº¾âÁýûJŠŠ¹¹Â¨¨¨;¶§¦¦6¼àæ_Þbúôé}úôž2yRŸ>}©¦·÷Š"C† a긺¸ÎŸ?RŠ{w¦¤]»öû÷ï£üдIS*¡TãïïçîÞÑȨö»wï)äÝLV(ÔäpÆŸ°víšÄÄŽŽN”£"##ÕÕÕ~üq…àÎ:™˜Ôù;ÿräÉ“¼Î;~UWWwë–à_ýuóæ Î;#Ë¢°°° ÆÓZëW¯^ )֭ͫ[¿bÅò‡ÒvãååE‰“)ïÖ­ûëׯ}}},˜odd<|øpª zU»ví†õÞ¸qãâÅ‹K™¹\îž={W­Z9kÖ쬬̦M›nÛ¶­eþ§GK4z´'m¦Ó¦MÓÐР ¬­­M­™˜c½T§x,ééÒ¥K™§”8›6kvààA[[;ñË*Ä_emc³{ÏÞ5kV9BIIÉÕµU@à&>Ÿ©ãâê’””Ô¼ysCC¦¤}‡öAA›»uë¦ÀÊ»XBƒÃ‰‹›9sFbb"ÍŽÒó¬Ù³™š&NäëêîØ¾-((HUUµAÆãǧIŠJJFFF¦¦¦L5cC5uuzZ«VmGÓÀÀ L—a°˜KZA>thΜٷïÜUQQ‘¿ÞýtûB:õ]ôjYpuÔ>_¿¡¯§û!6« eää@>@>@>@>@>(ø~¨2ÉÉÉ·nÞLNJÂ-¸*KAËãY[[kr¹%V …ÙÙÙ™™™ò:ªªªÊÊÊ,«¸|ŒhU"%%%üÊ• ò´´0*)1ñÊ•+NNšššÅT£dœ••ÅçókÕ®-”ǯ£XL $..ŽIÉRó1¾?ªÄÓÇ­¬­MLÔÕÕ1*==ÃáÐÎ×ÚÆFZ@’œÜ°Q£"ÈëPhhhp¹\ M.WIIIJ>¨ l6»¶‘·ÿÑ߈v¸´Û}ûæ´ B¡ðcBBmccÊÆ¹¹¹r<ÂüÞéF¿}««§'ñB |>ªèèÃÁ™c€JC»]ÚùJ›J±8>>žb´|‡cõ‘zJý¥^K¬€óÇ5EÆŒôtú-¬WÞŠú+q*ÎCÁ…ïØùÊ$œ?dhäc(1ÈÇ ‘‘@1ÈÇ ‘ñýÒå*ìÔ©={vß¿?==ݰV­¶nmG{zêêêÊÚrNž<éÔÉ“â%nnnqx ÏÑWúþW4©P…Guêèþ)5*)ñù|› ½Z´h!£!q@ðýÒåfݺu[¶·iÓfÆŒ™<72ò9eåS§NîÜbbbRšºuëæëëcfVÿÛ毿þ:}:lÍšµÒ¶ssóiÓ¦‰ tuõ¾qKX¼ø ‹Æýû÷Ç– éP(µœ™T¨BþÓ¹sç6kf™™™ùêÕ«mÛ¶öëÛçÌ™ŒŒŒªýPˆz]8Cy¸zõ*…cOOO/¯I¢ÂÞ½{÷ë×wþüùÛ·o/±…çÏ#é§¼–‡Âqñx<-7·¶å5;@pöìYÊÇØä…ãV­Z1ííí»uëzáÂ…¾}ûÊk‘ËÇþýûù|þ¸qãÅ uuuÇŽ÷óÏ ?~ܨQ£àà ÀÀÀk×®‹*,\¸àáÇû÷8}úôìÙ³òO!Óïÿý¯Ç²eËèXMYY©Q#‹;¶¿ÿ¾N:'zuêÔ‰y­5eñaÆ1Oß½‹iß¾ýÆ)õ4èÆ…ü³ÈôûäÉSÆÆÆ¥ìÈ… çýýýi©TTTœ§OŸ!zmÇŽîãÇôèñŸOMMmذ!Mµ³³{󿵇‡Ç»wï/þ…~èhòÔ©°ãÇýòË/AAÁVVVØ<ª ¡¤§â×!py<úÍÑäPÉ›7oZ¹º\»±)0pïÞ=õÍÍ9JSÏýûïúõëïß¿Gq¢uëÖsçÍ711¡8Ô©£{HHhë6m¨Î‡ZÚ»¸¸ìÚ½‡iy’—׋—/¨…[7o®\¹âîÝ»999uëš>¬_¿OÿA½yó¦;cbbÌÌÌ(‡têÜùXvݼyÃÉÉII©ðxÒZ§ß”‹y¹ƒƒÃÏ?/š5kæ–-[)khh0åÇŽ³³‹ñõõãp4BCC§N²wï>KKËâfÕªU“'OÖÓÓ›7o=­U«V){qñâűcÇvéÒe̘±)))AA›tøðïZZZL…¥K—öéÓgûöíÊÊÊk×®õòšø÷ß' ·mÛþÝw)¯S¾WRR¤šïß  ‡m Zd ×W²³332ÁÛ·oW¯^Õ°aÃöíÚ‹.N˜:eJffæ/¿,ÖÕåSÉÿý7l˜G÷îݽ¼¼RR’ýýýûöéý×_7jØP__ÿÊ•+”˜éU§Ã´µµÃÃÃSSR8•\¹r¹wï>ÙYYC† n×®ÝÖ­Û²³³oÞ¼Éãò˜y{{ûùùN›6ÝÖÖö¯¿þ3ÆóðáÃVVÖÈÇ2*66Vb 544Ì?Bz_ü˹\.ó1>CCñs½tØ´bÅ >ŸOgÏžC›Tppð† ŠoÍÈȈ×44Ô‹9m,榥¥‰žªªª***úûûµhaµrå*¦ÇŽî»wï;vSB Òb0§M›Ö¹sçû÷ï;::2W ÑV.šãàÁƒ]]]5²À¶PⱤB¡¢ÇŽŽN!¡»TTUE'•;tˆ‚óòõë×ÙØØ¬ßàÍÔwvqmåê²cǯI“œ]._¹Ì¼êTØ©={Ø¿ÿ¿óç)Q¼xþ<&&ƵU«Ø¸8j°g¯^vööyiÄÙ™i6-5uÓ¦ÀaÇ{ŽC%-®]¿îãë¼ù¸šb}ÝË(n2á˜áààðï¿ÿ–ËÑÑXË–ö¢§ þÜ«W¯;wîLš4YTH³¶¶¶¾zõêØ±ŸJÄ/–Ð×7È?0ø yÃRRB8¨†Y‹-jÑÂ*'GÒãÿÛ³gw½zfLå~Td³™ÇÙÙÙ·nÝš1c†¨]>ßÎÎîÊ•Ë B/— ægfd…‹.üØ¿ÿË/ÿ9s¦s§N—/_RSS³³µe.Éðš8qäÈQ ÝìöíÛiiiî:ˆZ¶·³?qâÕòqùÐ×׉yW´üÝ»¼B)[` k”ùï---iW,”uÛhԨт EOëÖ­›ššš““£££#^"rddÁ§µµµ µ“›‹ûŸÈQ<–ôÔ¼Akz`§ Ð±S§V®.¾¾~kÖ®e¦Öª-zUrJJ~œà ¿ŒÏž=£WW Ð×#"ÒÒòR‡³‹ îýiҥ˗[¶l©¬¢Bƒ‚·„††îؾÍÇÇ»GÏžsçΣ”@M 8ÅútÚ‘Z ÇDˇͥK—h=1ÿ¹ B…ôÛÖÖ–~‹V§³¦‹Q( ÇÆÆêéé1 µVbSE’·&³TbI7—>>>®Ðˆ.>ff‹u ×Y(! ÊÕTUMMM##Ÿ}qK¸ÏSµx<Šqq±âíÄÆRœÐ¦cã:uê\ §Hãâ⢡®Ñ®]»Ÿ^øðÁƒð+W<<†1¯RQV>l˜ÇС'Nœ © ññ›7ñx\šäçç_¿~ÁpóâPœ?fc3(?þø#EÉ€€ñÂøøøÀÀdž *äßÎ"==]tÕ/…éû÷ï‹*«©©ÒLñÞ½{÷âÅ Qý³gÏ6iÒ„yJ­Ñ¶%ªyûömñRkeÛØl‡þ9+¾ü·nݲ··/Ík•””23 æ(?~„ @Î$''?{öÌа–´HàäävZëÖ­+V, ¤x†|\(\6mÚl÷î]Ë–ýš‘‘ahhرcÇÑ£ ¾_ÚĤÎÚµëüüü:vt§ÀJ‡DãÇ?uê3U[[û—_ûøx4¨wï>L>¶´´¤j«W¯‰‰‰655]¿~}³fÍD_v¶ ÿÎ))´=­X±rüøq¢…9r$m43gΠ#­ÐÐ]¥ÌÇ-Z´Øº5ïZŸ Æ+))999¯_¿¡ÐÉÒüüó¢…  >¼^=³Ã‡S÷i;Ö××džPÝ-_¾Œy@©†"ʾ}ûlll¥U¶¶¶¦ì±nÝZOÏÑ'(ûûû‹â„³³KRR%æ_¤]»vÁÁÁ]»ve®ÕÔäÄÅÅÍ™3;11‘Ï×m×®íŒ3™šœtuù;vìØ²e‹ªªjƒ ÆæßC@QQ‘Âtݺu™jÆÆÆjjjô¸víZùÄ LýeÅDGc­Ë¦yóæ¾xñb×®ÝrÙ»gOŸÚ;8¨¨¨`ET‚¬¬¬kááæ H›úðþý¶:ˆßþUŽihhœ=s¦q“&£ÎË4¡w‡€J äãr`iÙ¬Ä:wïÞÃ@€¬Çc òq¹@öy ÈHÈÈÇ2ì×_—a*î €| âXø–\äcø”Yl6;::ZIIþ/¾¥>ÆDGSYR ”p1¨ªªª¹¹¹€ÊA»]ÚùJ ~”555o^¿Þ¾cGEEÅœœyêõöÆõ놵jQ¯%>ŸUC__ÿydd# ‹¼Í*å]Úíó½¶´;Öáócccÿ8rIJyscccyŠ×¯_ß½s‡ÇãQ¥…äc¨*ªª,6ûé“'ÊÊÊ € •­©©Yü>—*Ô33{ýòeøåˉ‰‰ò:ZZZ”þ똚R¥ÕA>†*CïRÚF1²€Ífóù|UUUÃZµäø[¦544¸<‡ÃaIÿ<"ò1äa®B¦)ÇŸbç+¾ò1”-AÊ7Ü¿@ìC€| €| €| €| Pf¸€X>Æ@UIIN¾}ûvrr²Ò*‹Åår­¬¬8Ò¿QYD(fgggeeÉë`¨¨¨(++óåyÈÇPeRSS¯]½jѤ _1 PÁ’¯†‡·ttäp8ÅT£d,ÈÉÑ××/¾ZuO ïß¿WVR¢”Œ| ²åéÓ§¶ööÆ&&êêê € •žžN‘—v¾VVVÒê‚´ôôÆ òÉëPPð077ôà‹ÃQRRB>Âf±jq¹\ @E£.ív_¾x!­‚P(ü˜PÇÔT››+ÇC‘›“# k×~ýò¥®žžÄ -”pé'T œ9¨4´Û¥¯´à—+$ÄÇ7µ´”ã3Ç"9¹¹tÀ@ýÕÑÖV”t Y é †ü¹¹éÂ|5b„Bê/õZâ­Žq}$GŒò1|ŽÇäc ÈHÈÈÇ ŠÇÜ¿px Pƒv¾Òö¿¢I5gÍtYRqÿ Àá)@MÙù KÚ/ kÒ ,iR>×WÜ¿?$$äæÍñññZZZÃìì쪰ÃQQQ]»~ïïïïââ*^¾fÍê]»v1ÇŒãé9FÆ×ÜÛ·o‡ºxñb—Šž×Þ½{W®\!^¢®®~ñ⥓'O®]»fß¾ýÚÚÚGýùç…W®\QQQÅù‹Œâ?~ô]çΟR£’ŸÏ·¶¶?aBóæ-äxÊ!9rdÉ’ÅYPŒÓ×׉ywîÜ¿999ßØì¯¿þjaѨOŸ¾åÛáéÓgXYYÏœ9# ÐÉÉé«Û9qâÄ?ÿœY±be¹¯’B-óx<3³zúúz•¶MlذÅb~'(Òo33³¼›Š€œdaѼ<{öœfÍšeff¾zõjûöí?öïvºvíÚÈÇ’=þ|Ù²_ÝÝ;.[¶ŒÍþªøÍ ‚ÿþ;Gù¸"ú¬££#úýÕ(ÂVÐ*)Ô2—Ë ®Ìm¢U«ÖŠŠŠâ%t¤¸ 1ä?KzÚ´Y3×Oÿ!ogo÷¿~¸páBï>}%Û»w²²ò‚ Dḋ/>zôHEEÙÉÉyÊ”)FFF̤ï¿ï2fÌØ'Oÿõ×ßii© 4˜>Þ÷ïßWQQiÕªÕìÙs({|ؾ½û´´´˜ +V,ïÙ³gpP’²’··÷Ô©SŽýqÌ@_?hsP÷º?þû.ßçËÌ_+ïß¿§´×¨Q£E?/2­gJ%6nÛ¶mĈ6Ö6/^¾Ø¸qãóçÏý|ýÄV§¤aZÓBá«W¯(vOŸ6¿ÿàþìÙ³µµµF•M—Ö«·=¾{ï.—«Iõ—ýºlúŒézºz³fÍ¢ (ÍÓƒ… dfeΞ5;ïät^ûE·³ü ÁóK.^º8qâÄ6mÚЬ…¹BÚ ÔÕÔ¤µÌt„ÐPÇgld~5|ùòå)))C=¾®#’‹~–S|0Å“©S¦D>œ5sŸÏß²u‹§çè£GŽjhh$%&Ñ‚ÅDG÷9Y¨äì[üý+Š|¿4ó”ÂCFFFNNÎÛ·o׬YÓ Aƒ¶mÛŠ¾Œzúôé™™™?ÿü3Ÿ¯K%çÏŸ9rD·nÝÆŸ@a `cÿþýŽ;N¯Ò××§@B¯:sæ4«W¯R¼´Ÿ*{õê••5l˜µ?yòš/ee.—ËÌÈ××wãFÿ)S¦ÚØØüý÷_‡8heeõõCQA÷¯ Ìêææ&­‘€À€-Z,]ú+óÔ¾eË®]¿ß»oßèÑ£™##£éÓg0'MšÔ½{wJu-[:ÔÊ¿¢EKK»vþÉfæÓ…‰‰‰Ý»ÿ :ùšœ’²cÇ:¤`>cçàèX«V­É“'_ˆ°µµ¤Q‰°`ýÎÍÍ7n<ómôÝ:tèpéÒå‘#GÅ'$$%%uíÚÕÊÚšY~¦>-©©«×þ|.œi*)9‰ŽŠ˜SéâíK\€M›65mÚtݺõâåÒZfZ»tùòõëשÐÑÉ);[ܯ_uuõ¯èˆDiéé¢ÿ PRR¢å_ñÇW¯]£ŒîããËlè 5¢ãÂßý6hÐà&M›îß nݺ%~N*){ÿŠbvÍ#F =vppܹs§ø×'%%ÒN_tq¦·÷kkëµk×1OÝÜÚ„„„Lœ8ÑÉÉ)<ü SvºG¼páB§N^¼xñîÝ;WW×øøxŠ|4‰¹ÓƒèÓbiii›7oöðð`bdË–-#""üýý©ð[FCb¯Ùß8Ðt$Áb±$NÊ;Oy÷.¥gQ ŸÏ§ŒO OTÒ¼ysÑc}}úWÌìDg×òošAGâí·jÕšòœxû¥WhIââbò?—F+uΜ9[¶ÓÚ*±‘ž={I»ÎDâà´k×¾L yãÆ Ú™pÌhß¾]jjêÇʱ#mÚ´nÕÊ•ùY¸pa15#"®Sz¦–™§ÚÚÚõêÕ{üø1ó”i*þT§ ].X°ðÀƒ{öì]¿~}nnN¯^½ž?ž?)oj¿~ý)ÿ0•)›Ý¾}»C‡¢—Sü³µµ¥XL]nݺ•‘‘‘žž~éÒE''ç–-Ξý‡&]¾|YMMÍÆÆ†BK«V­&OžLÙ766VÔ5›žžÖ¾}{Q‰­­E áW)~¾õúc]]ݨ¨(‰“(æçææRf/ÔÑÑ¡ãÑS--í"k%·˜ÙŠ'''ç7XЭ---:æøŠŽZNZræÁúõ<°gÏ::ùþû®S¦Láñx¥Y<)Ûܧji|~Ù>#H]ÖÖÖùr±óž&&&•cG‚‚‚ÙâíKóñc"½ \]]Äs?½ ðÇ@ž4h`nÿ_ÐÄݽ£›[›ýW­Z͔ԪUKT“NNNN¡» P6xöì=pqq¦¨pãÆ J‰TÍÙÙ9::: `£BþÅöööÌ™µM›6ïÞ½kÇŽ~~¾ÿû_Ù³gSÀûø1& 2Dtf¶˜³´ßè[󱕕ÕÅ‹333‹~*ŽËå***ÆÇ'ˆÒSOKôô[zÅ„KjÐØØD”)‹.n.iKBëé§Ÿþøã€3gά\¹‚Ö ÍR·Y4P~ Jó eì2?!ዳ¿ÌS--^9v„Þ…î_! ­b‡#º¬ž¡®®†¿#Õ”Äë™+“™Š|uëÖŒŒ‡?#ËÄ¿ØØ8ñvè©––6•›˜˜\½z5..ÖÉÉY]]½mÛ¶¿ü²èáÃW¯†2”y•²²òСƒ9yòäâÅ¿PÚ ¤–ò.Þð©_¿¾x쩈/4aqyrÙz÷ê””´v횢“Ø,œ;÷¯¨$!>þöí[¶¶6bWC _ÿÁ/z­’’RfF†Ø$±Žåÿ4kÚŒ£Á9÷oAûΟ¶66_|GbÑŸBMi¹h -{‡ƒ¾sçSBGffF‘…ÿbFº|ÝØØXÑÓÏŸÓAÓAee ‹Å^ôSLË-[Úgee]¾|I4éì?g)j7¶hüÕùòGAò }ñ¹½‚Çv¶¶Ô£””äz¦¦¢CCfêÓ§O²23‹Û~ rÃo ?E®¯`öûâ%ü(ŠÅâ‚©XÏœ9#*‰‹‹»yóe橳³3= g®Á022277?x𷘘š$>#jªsçÎǸyó&=µ´lNyúùóH31õêÕc*¿}û&>>žyœ˜øñÕ«WÌãììì‡J½¾BÊ8|ëùc;;;íÛ·?{ö¬Ëw]tuu>&ÞÎNÎ%~o_âǼ 0JsFTTÔÖm[ÝÚ¸ÑF@I÷ØÇDŸ‘lÔ°ÑÁßž={VGGGü8Fœ£“ãÇþ Ÿ6mÚDGE/_±œB¿hꨑ£¦N›:kö¬ï¾û.7'7""bÊ”)T¡˜–­­¬ÝÜÜÌ_0Ñkb“:áWÃwïÙ=fÌÚ\¾º#ßÂÁÁÁÉщ{øðáæõÍ333ïÝ»Gï ›û÷ï<è§?MŸ>Žª5Š˜JJй¹ÂèèèÐÐÔÔÔ!C†J«Ÿ¿cÇŽU«Vúûotww/}•¾ý$Þĉ^Mš4Ý¿?EÕôôt.—Û´iSUUj¹™¥e`়;qLÍK~§V­Z­¥­]è†gâD$œ7oþ’%‹)ü™ššîÝ»OáË©Œƒq49»wïÞ¬¥¥õý÷ß?A(©5‘µk×P}z0fìŠ×£G{*H©IO58œøø„_/NNN¢ÕæêÚÊËk"SÍcذç/^Ì›?VÌ–-[™à[¨‘ï¾ë’¿Ž7-]º”Öñ Aƒ©Q·¶m׬Y4{öl55µ¼ÏÕ±XÂ’Z^±be``¡ƒ$Úh èÛ·_‘È•¡# EÖ…´Ïr ¿\YÂü㘵ëÖîܹ“b7­úfÍ,;vêD“xZZ´×62Âý+dD‰÷¯J¸¾"ï÷Ê•+˜§ººº7Ùµk—µµèD¬øÕ¤E‹Û·ïðöÞ0vìe弯¿ðööÑÖÖfê8::RiÖ¬™¾¾>SâæÖvëÖ­]ºtÉoJ¨¡¡7oÞ¼¤¤D ¸”ž§M›ÎÔ¤XÈçë„„„lÛ¶UUUÕÜÜœ‚Mb³ÙµjÕªS§.SÍÈÈH_߀Â=544äp8zzz…ûUìý+X/Å>-Pi"Ÿ=siÕ 7¸¨YYYÏŸ¯Ÿÿ5^§>~øÐ½sç䤤š0\/ìäÉF£ˆ6`ñ!äcøjvv¶Ò&]¿ñ¨¦c „Q€¯sýÚu¼µä$þ~.Ö¨¡¨ ï—øÊmCPé;߯û~éš6 ll+ÈÇP€…!@>¼ °óý4‰°ÙÑÑÑÊ5àÖ«***1ÑÑÔ_ê´Ä ø|T U•ÜÜ\Œ@å Ý.í|¥?6›­ÉáD\½êÞ¹³‚²rvv¶¼Žƒ²²2[QñúÕ«zzzÔkÉŸÏÃæU‚6ʇ÷ï7·²RTTÄhT¨œœÚíÒÎWZE6[‡Ï‹‹;úûï-¬¬ŒŒŒäu(^¿~}ûÖ-ކõ—z-±ò1T UU›}ÿî]:ŒÃhT¨ììlMMÍâ÷¹Ç´^½7¯__<>)1Q^‡‚§¥EéߤN꯴:¸¿T%ee.Â1@ÅSSWW(én,6[[GGYEEßÀ ==]^‡B]]]“Ë¥pÌb±¤ Î@~Df±455544äø[¦ó?ˆX * @‰ñQîáþbGäc pÿ €8 €| î_ žªHJJʽ»w“““1ŠËåZZZr45K¬) ³³³³²²äu(TTT”••Y,ò1ÈœÔÔÔÍš7çiia4*TRbbDD„­‡Ã)¦%c¡‚B-##MG./0 Pœ’šÅf±(%KÍǸºªDdd¤ƒ““±‰‰zþ7Â@ÅIOO§düøÑ#ËæÍ¥Õ™YYÍ,-)%gÊïùc55µF÷îÞU`±””$Ÿ)Æùc¨¢8«¶‘—ËÅPT4ÚáÒn÷ÉãÇÒ*…ÂÄÍ6ÌÎÊÊÉÉ‘ã¡È¨·Æ&&Ïž<áëêJ¼ÐŸÏƒª¡¡®Ž3Ç•†v»´ó•ür‚ <.733Sî‡B PO©¿ÚZZŠ’N!ãü1@M—“››‘‘‘+¬)çM©§Ô_êµ¢¤©ÈÇð‰W €x@ÆàþPEï> @¥ï|…%MªQç¥ ÎÀçȈóǸ@Ê¿RËó'Õ |ÌtYRÙØND$__qààµk×2••• Z:Œ9RWW—JŽ?¾dé’sÿžSQQ)—…˜9kæ¹sç êëëÿqôJ‚g‘Ï(ꬱ±q§Ž\Ì·Š<}útÕêUOž<¡¡X²x‰ƒƒƒì¯rñ•ËPWWÿçÌ?x3@¡óÇ?îÖ­ë§Ô¨¤¤££cee=nÜXKËæòœ‹9‡¾aƒ7›ÍNKK}òäéîÝ»îܽª º|»ü>b5dÈЮ]»Šž&%%¯X±ÜÎή2Ïï;®Q£FII‰7nÜ Šy3gÎÜ_µbåŠÌ̬uëÖedd6mÖ¬ý‡ÄªU«ÙìO_£¨ø­ÓŒ‹‹óðúÇÇÊðöÃ_ €JξÅ~>Ob>f¦Ì˜1³iÓ¦™™™¯_¿ Ù9pàÀ¿þú»víÚr0eþ|ž½½½¢bÞ]“ÝÜÚjhhøúúDGGWÄX4kÖLüéòåËhv^^“*sŒš4iÒ²eKzЩSçÜÜœ?ÿüsêÔiªªªÅ¿êÉ“'žžc¬­mªÝ6áââ¬ÜrqîÜ¿¹¹¹ø»Pí3ô—ù˜yF1ÉÙÙ™)±µµíÝ»×¥K{öì%¯ƒPÚûWp¹š ùÿ_¨üîÝ»£Fܺu Sò÷ßÿòË¢3gþa*¿zõÊÛ{Ã7•Ú´i3eÊdMMn13ºyóæü1gΦ$--- àìÙŒŒú÷ï/ZÇß¹s'Uö÷÷üø‘¶¶v»víÆ/ºð£¬sÿœ•›=zôãdž††Ò9þü† ëé@ÊÇÇ›~úôé3mÚtª¼k×®C‡~ûðáC:u<==Û´qcÚìٳǤI“SSSƒ‚‚>~L8zô'mñJѯ—þþ#"® ‚:uêÎ;·qãÆÅ̽”è ÐÏÏšÍÎζ°° èOïfÒ’%KhîöìÙS«V­~êÑ£M¢µBùØÙÙ‰žÎŸ¿ k×®ühjZoÅŠøCPó±è¶oŸÊ55ó2¡†‡JÞ¾}ëîÞáüù [¶=½xñâ˜1žßÿý¸qãRRR6mÚ4hÐÀß?Ò A==½k×®2ùøìÙ(Û\¿~-555/G)(\½zµG”GIíÒã;wnóxýÑ£G뇄†ÐÈŠå+X¬O—Ɔ_ ¿qㆷsñƒƒƒC¶ {ÛömtÁœŸÎÍÍ¥°ÈœóoÕªU»¶í¯„39²LsYYYÉÉÉW¯]ýí·ßúõí§¤¤T|#Ìñ­3æš“ôôôÐ]¡ýúõc²»µ•õ;whQéµÌ,è`hïž½úúú¥œâúuà@FF†¿¿?óÂ6­Û”fî…P}ÑõÔSʲûì§f½7xs¹yç°iÛõæäççÇT£ñYôK^8¦ÇC9tèPxx8åc>ŸOCÁf³Å¯½ Ù¢¦¦†?DÕ-BK8ìé9ZTB‘lË–-***B᧓ʉ‰I»wïfr•øúúPZ·téÒºuMK\¶Ò´,íµššœ¾qî´•ºm»ÌØŠ5 ‚††F‰­€¼$h‰' ®ÓUUQ­[§Î‹Ï >‡&v/Ë¥€‘÷?ÌbíÄÇÇiå†ÍØÈÈØØøúõkTÁÑÁQC]½M›Ö¿þºôñ£G×®]4pó*eåÁƒüi`XXدË~¥ØãëãËÜ+bíÚµfõ̾ˆ:pþ˜]pm²øxoóîÞ¹£wT¯ÐT~þÙܸØ8QÍû÷ÚXÛ<{öLOW×”RÛç-ж_ÎŽºíççÛµkW[›B“ìlí²²²ÂïˆJÎ;§®®Þ¨a#‰Ë)^RʹñqC¡p’פ7oÞìÙ½»Tˆ¶¡°IãÆjjj/_¾¯IPÑš%·\l¿,--oݺ•œ”$^¡„¹»r? µíí[·Å›ýïÜ-š·`3[Þ§ƒ,ñ—”¨¨¨dffŠO‰ŽÎ ñ·.é—Ã@Åfß’öËÂ/Äc2󓜒ù<ÒÀÀ@Xdý°Øì–-Ξ=+*‰OH¸yó&ó½ôãäätëÖmJÃíÚ·£§˜ëׯø÷ÃïÞ½str*ÔTÇN<<†QìæÝØ’¢Îóç/ê™™‰~LëÕc*¿Š¢}º~!)éõ›7ÌãlàÑãÇBiý’2Å?¾qã[‘•wýñ®P]]ÝN;ªchhX·NÝÐSSÓ¼¯a;ûÏù çESûõëwìø±‰'öïß_OO/))‰Ú5j”øE®ÄÏ×/99¹E‹…¾E¯U«VTغUëÅ‹;ÖÄØäÚõkû÷ï9rdÑ;ÍUʹbffÖ³GÏmÛ·uêÔ‰zWúF8Î!C‚‚‚¨/”}逿իWªjª?tÿ¡/ï…}ûýñÇ^“¼ü8€fúäÉggg ‹2ͽ¨>½ûùýÈ”©S†ª®¦þDZ?ž<}B‡k¥ymà SSSCCCíííy<Û¡CjÕªµsÇNü-¨VZÂý>|Äf+ …¹111{öì¡þÀƒ„÷|Š¿jâÄ ”%æÎóÃÿKKK àñ´~üñG¦Ž££ãÒ¥KSRRÜÜܘ’Ö­[>|X[[‡Â •DEE¹¹µ¥ ûáÈ‘ßmll¨œ2Å$¿¤¤DÊu(+«««õêÕ;''§wï^ÆÆÆ¤çÌ™}ñâÅÓ§Ïèèè„„„¬[·vÃïöíÛ—~ŠËÇ”Àè7›Í¦C'G§‘£FæÿM]¶lÙï ÆçÝZ÷—E¿Ìš=‹™ª­­½)pS@@Àú ëÓÓÓi)ííì‹~Â/âFDnnîòåË •Ÿ;M9xÉ’%Á4NAA FFFS&OéÕ«T÷£.åÜ‹¢Ñ?vŠ:µ|Ùò25â1ÔCG[çÀÁ{÷îUQQ©gZ2k¹/¥Ï€þýW®ZI›K½zõÚ¶m[Ö¹¥©©¸)ÐßÏŸ¶Ú¬¬,ÚF½7x[[[—æµ®®®”òwíÞEÇ3gΤÕDÛ Ï௠@5ÏÇyO×®ýt{\>ŸoaÑxûöVVV¢ûWäŸr-x•¥eó  `??_/¯‰JJJˆ×®]§¥õéŠä–-’““›6mª§§/ÊÇ;vìèÔ©33;Ê~ñññ‹ýœ””D鈦Š>í7rä(ŠÑ{öìÞ¹s§ŠŠjýúf#FŒ¤IG)L›˜ÔaªÕ®][___UU•žRj¢`­§§W¦Ë”Y>Ħ•ïÅóçníÛ‹¾ñ*TVVÖ¿gÎÔ33“6õé“']ºu‹}ÿ¾&Œ†žÁ_ÇŽ5hØPbQÂE P5‡§€Jßù–õþr?ßtÿŠŠãêê"mÒ… ±)T^jÄè¥~¿t%ºpþB1«kHŽß€ÊÞù~Õ÷KËóhHê5› ò1ò1@±pÿ ¨Øð*ç+uÿËb±££¢444232ä{TÕÔ¨§Ô_êµÄÁùc¨²M377ãP9h·K;_iS9Nø•+TGEUUŽÇzG}¤žR©×ë(á6P%ôøü[7nØ;8HÛ4 ¼äääÐn—v¾Ò‚›ÅÒÖÒJˆ‹ûý·ß¬mmŒä2 ²ÞFEÝŒˆPWW§þR¯%ˆ¶¨Ê**+âúue%l„+[ àp8ÊÊÊÅÔ¡ &uëF½yóßÙ³IIIò:<¯VíÚF&&Ô_iuM ê"r>Œ@ES/E6›­£­­ª¢¢¯¯Ÿ.¿— ««©ir¹, ùŠC‘‘Ãᨫ«Ëñ·èQéH ø:¸ˆ%H6›%×,1ýâóyp7äcäcäc€ÒÂý+Äò1î_ ‚ë+JKIˆÏç|†óÇ”$–æTf±XÌñÒüB±ræ–—¥_4T€õ¹>ÓT^‰x…ü™ ó ?µü¹Dás¡hÙ ^"jS4‹"ËV0zaþÖ—M1X_.›¨} %LS¢–¿l¿`á •äæw›%¾,±nJ¼Ý^)ÏñK­Æ¬¸/‡:¿Ã¬/Vœh¥|±‚%÷âÓ*oòË9æýúüª‚µ ¶ë¥ÐÚ+2Ã%>‹/ûøÅªÿÜ´°P‰Øb0£-[xÑøKCa±k„õå%­_€ŠÆíÚX, ;Ü/Ë¥}¹S=þ¼³fþª³Ävv,æï¼(H,ü²}ñ‚Û#-~ÙÍ/ ówm_ìGÄ EåŸÿȳ¤ŠIAµÏ £ >Ÿ÷k¬Bs,vP¥®2iƒ#>ø*ܱ½)Kê8ÚSÙMñqÏ!¢ñ/ØÄÖ¯øø³Ä÷òâkêËÆÅ[âKþy²Ô•Rx“–´ ÄW«èF]¨5f vIù8¯vþ+ ¿¬˜ÕPú7^±/,\(ñmV–×–ÐÚ—MJSMâŠaIª&yÀJÑš”‘f•þVòŠ+ýÚ,åÒHm‰ãÃ*Å*.óJ)i¦¥ÿâßxe­PáJ:?%µ¬Èi&i­I>Rºj%¼Vâ©é/,ýk¥æJ|aIÕ¤¶Vª±—Z^¸°Ô+NXšU)áÄO)ÖHéWJ±C]ÊJ\BiÕJ³FJ]X ¥²Äi1k¸þ î_PçÊ÷¯(€óÇÈÇÈÇÈÇ¥¥¤€Ïçˆò1Ò1€®¯@>D Cš’òðáÔ”¹ï©¦¦f“&M48¬täcÉÒÒÒnß¾mײ%OKKî;›”˜xýêU+kk ¬z)ù÷¯€šíå‹mÚ¶561QWW—ûΦ§§s8œÛ7o6iÒ«@r>F:†šŽÅªmdÄårkB_©›ÔÙÛ·ná >Ÿ5†ºzM8s,BÕ¨Iý@>@>øZBt$Âý+ Æ«oê2ÞøPK„ ++«øj***JJJ, #Õ&c' g»«… ܽsçÐáß‹Ùáß([  Ô[¿AMMÍâk¦¤¤¼xñ"G PV·.@5ÉÇy²bÅòÀ€æÁœ9s1 P7·´ü˜”[|eUÕ͛߸qC©1z ûpý1€ü Y·v­£“ýÐzŠ1€rGÉ89)©~ýú332„%¡:TÓÌÌŒ^%ÄÅ]P(Žñô¬F‹ûû‘ß'Lœ0pà@6» ÙǼ‹éѳ‡¹¹yݺué©çÏ„ø++«oœWbbâ¦Í›|}}ƒƒƒ?~÷î]###]]Ýoi³Wï^AÁA;CvîÚ½ëÏ?ÿ|õò•………,Ü|÷Å‹}úö¡ëرc¡oÊ q áݾc»­­­A™F¸¼ÖE…¢6hØPQQ±è`ãF¯‰-ú944$&&ÆÑÑQYYYf;ræôiOÏÑ´EýöÛ¡Þ½{Ÿ`À ƒÊËËSRS·†>}öôÐAŸ?ÿ{3_ Œ£¢®ÙO²g½r=:ZXH¨¨¸˜,vÎK˜sŸ<ïuq¼ÕÍmӦ͆FF¯^½Z¿nmNnξ}^g&ÒÒR§N"--}:(˜F£Áp l 'oܼ©ªªV;Ë8…ƒ Hs¡3_¾|a0meT5WÍ] o}wR¼qãFA~>уq⸹¹ïß¿gldôµ£KM-**ª‘bÕÕÍ·/Ä-¿·ºÚyujjê°¡CÇÛÚVVT¾N~ýáÃ>^Þ¿¡7ÎÍÍ=wNHPpýæ»ú»ÄjÄгøTPP¨f)ä)Ó¦nÞ¸IYY¹õèã6ÇÊ+8ô ⸡KéoÓ_¼|ϲOŸ>Äk+kNÆÇ÷îÝ}ÌÆT#ø‚£_¿~0&Þæîž```ð7IÏžQQѵôqdÔ5(„«Í(aÎ}þ…üûï¿ãÆ›>c¸õõõ333÷{{qý­ú¬ˆžžÞ77%%%â 8‚‚ƒaø‡ïŒ#ò›çšs211Œ#8JKKŸ?Þ³gÏØ¸8ÒOBb"thº::­Î¾8°?--mÏ®Ý;w&Î 4èïIÞ˜˜ZCÚÅÛ°ièAŒaù) ƒIëªÚ­rÿŠêúÞ¾'OÚ;Ø›™™MŸ6p;:8¦¤¤\¿q›ªªêÌ™3u´kšÖâ%‹Ÿ>}ÊÅœEæªY¸ ''Ç¢té5õ‡§Þò)-+=räÈ­[·ÊÊʺwï>oÞ+Îü<"""((hÉÒ%GMNN¦Qiýú÷ƒ á@'ràà7oÞHHHŒ=†›‡ûîÝ»ž;=‰«±q±'ŽŸHKO§‰1|℉u‘€¾}û]‹ŠzùêÙ€¡B¿zõ 3è㦖p-Ÿ`;ž=CUPo³fÎñññLQŨƒvtt$Ò6lø°)NSlllˆp T'NœèêêÚˤ,ðòÅË›ÿݬ¨¨ÐÒÒZ¼hqbR"”RVV”<ÜÛ¿âÞiÓ§A¤]6²©Nõ"&*ö‰å¥“ü¼<ê·Y¿Õ akÔÖÖ©{²¡„ Ò$CÌÕÄùc²ó©÷%eeIIÉ„¤Ä¾L}üðÑ#0ãmÇ/]¶ôí» e%e¦>NÐÔЭ®Ï¾hhjœ;w.;;[VVÖÚÚzø°áäÔÕá#‡£££¿|ù¢­¥=Îjk7Ý×× zaa¡¼¼ü¸±ãF0¾xñ"Ö ¡„„„©àæææää4iâ$"Ø 'X˜[LŸ>=*:*$$äýû÷‚‚‚jjjS¦LÑê®Åšµ¼¼<°­“&MêÔ¹sCåuþüùKá—>~üH£ÑÌLÍ óæÏÕ‘žžE4vÌXsssH[\\//¯‘‘Ñ‚ù ˆ…‘à9ðTà’ÅK>r‚6l˜ƒ½aX!ƒAÁA±±± •Jh1bK}8r ed_±|…¥¥%kñ‚‚ÿ\ùRÅ«  0yòäÿõÿ_]CÏZ°ðPÞf¼õÚçu'æÎöíÛ¹˜SÈð×r%œqßæNfÿø‰ã¡¡¡gBιþ+ôqkl–%%%¬ëuàg/o¯¡C‡îôØÉÇÇúrãÆþ~þð`œW;ovÝ,)!9þ|ð&--ý£ÚP™uìØ±:€æûq´\íââ*vÞÜýz:èôªU«@€B;<&;MqfaaÁÃÛøŠ¢™à/¹ ”¨©©i×.]srr@aô9‰$.½{ÿn÷®Ý³çÌÖP×xýúõ·-Pï‰VšŸŸ¿zõj5uµ ë7€X<{î,(ub)6ÿ$~ýúõƒ-Ïž=;55ú~RwÖB• 4uRGFF€XvÜÔ®ë3òZ¤¾¾þ–-[ {öîÙ¼y³U Tr·nÝ=zä±Ób‡à¤x{{ÛXÛØúÐÍÐBk_¾l¹ŒŒ ´ómîÛºví n:…Ù¼EÃóæÏ·±¶rwß¶pá¢ðððãÇ}÷ìÝ‹FA„Õ ¶`h=t{$&$î€iÐÖÖc’ŽÐlj‰‰ ë½÷ZÔµwïÞÑyíÚµ={ö¨tTÛá¦K—.´óúìù3OOOÖôƒ‰ƒWÁÇÇÇïóÚWRZº¬XgÏž?ðÞ»{¬Ìýû÷ Ë jøóçÏúú/^¾ñ7mÚ4H<Ðǃ·Ziƒ`!"RPÖÅÏÏ,ׄ @¾C.@,fdd€'ÀáÇçÏ›ßA¾èuо ¦G=cúŒìOÙ`IÁÿÂ Ï ¼÷{ƒ>QRR nŠ0F p „SÊ›[[ÛŽÊa¤‚² zìØ±0H¸qãÆ~ïýà­núä7ÉÅ%Å ‚)"”«W®‚ß·o”''U¯‡Þ¢E‹ÜÝÝwlßÚÆ·ï܆Ûsssáa~nÞ¼Ù¯_¿¿G·V}lemŹçræÎ™K¸aœç8Ùô¥žžÈ_MðœX§¿— ßæM5ÿÍœ5g£G611!.=IxuÝm‹[Ïž=áP]]}⤉—ÿ¹lmeMu«Þ0  F¨m>} ýki}h’j€&Õ…µ ;Mqêi\£””Tÿþý>xH´ÒÐ ¡Œj¤‡¤Zhcäþþþ:uZºt)¸uuu³²³N>eeeUï  Œ†!@ЬàA+Chì{À†J¸®Oèk@ÂkË&ØMX¹j¥íx[b¢F«Â.€šçPCˇñ+1º€{aļvÍZò5ÆÓ¦Á¸ÿé³§0‡±õ!ŸCÄè¿©@[õ?yÒÑÁÁkß>xjà4È’ Aù5úX·‡îÍÿn–––R(” 6œ››ÛÈÐô±Õ8«>€¢±Uu••ÎÎ΄޲³³»xéâÇA‡_·±¶É[#ÁkÖ.sù÷%îzôèQBBÂv÷í„640¬ª¬:x Œ¾²²2X[b$˜€Ø¸X8 ¶D0Xù'Ož€„9 R ÍÈ‘#A†B„0¨±ÿ]Í"ݦüB΄€lutp„CâUøõÖÃ`@‡¹’ y²ãdÂ=eÊ”³çÎ*)+_“ÕÎúD¦N™ âÜ }SRS‚C‚ÁèCIŠŠŠ‚H%¼uíÚqbR"ø‘ýFŸt‡2ƒ(^}ƒäää ë7pòX!p q b"’ˆb€Ù€ƒF_&V®¾N~ ã Râÿ%´ÊýÝ`²Óc'ùoÍv›¼‚%ÝÄîÐÀ8‰„¯ï1ßÕ«V­[¿nÕêU0À‚óÐZ UÞ@íVKIIá0ñAAAÃG ;nìŠ+ºuï¶Õmk½ËC¡y@¼l2’›÷5¯^½‚fCÎ×B·Bú¬ªª‚±o¯^½ÈA‹Cg‘ÝPò`hž——]1€²•É>Gœ—0dŠ|ñ$üí¤Ù‰¼ ¢æ°ÉîïAuútR ˆÉ  5Òšµ.âmzúæM›@è¯Y»VUUuÕÊ•Ð!¢9DaUcœÃÉD#(ѧOŸfdddeevÖØØÌî—/_@Ã2±.ÐÕ““‘¬V‚*//ïÝ»7y‰ÐŽ AY_êÛ·/ØzPl5éÑÓƒ¨Á‘””¦s̘1`aãÄöì)Ü ’lÐüyó#"#úŽ Î\±ÙÀ^0âp#k MLLøøø Šº&΃ÌýÁtJÔ6 }¿gVO???ÿsÎgNdÉâ­´½yó¦ÙÕбÿþ×®]#oÞ¸ Ï‹õ¹ü ´ºïKפVWG‡u7.hE_¯¯O²¸©T±ïyd:ª –\³{ƒ•—‡Ç|ÀøD·­[fLŸQXPãÔ‘£F’Þ@†Jˆ‹³¼ Ë.LKKËÆCs]ï²AVFFt-Ó3´½€À€Ø¸¸OŸ>A[‚>¢fUùš-U”5#‹¯±€UWSgQ\B3¥%%T@@À©S§XÇú999j ¿EI‚wTT”‘¡áµÈk½LzA ³j½íËy ³ú䪦ŠÕöI®7Sµ‹‘Q]ëÿW5tš‚¬…ðãSn¤ƒ¯·ÓwttÔÐÐ8æ{*ÛÌ™³–.YlkkGû+W!§§§-Z¸p‹››¶öwã‘””¸níÚ½ûö©¨¨ÖÎ2î_ ÈOè⯽}S{âÆîRRTôôiÒ‡ï¡§í¤© >Á!Kxò$)1 táw«Áƾ°Xb¾FúíoWE¿N'Õ$,oÍr–‰¾¨°NèéïÙ··¢¼üîݘîݻӨTCƒû÷ï[ 0Ý{VÓ´DE jzÿ¸ç¿àKKI®ìì ¤  ÀÅÜúñÝ»÷+V,ïÒ¹ „vöÜ9?¿²ÑÀÐF®µ†€ä‚lH'G[[ÛAkÙ¤p ……Ï¡CÐ~nÝúoåÊU-YÂo¤P+³˜_ñXÙúèíÛ·#1«lÚìtûöíáÇÿ³8ñññvãÇ_¹AlañîÝ;8„ÞwãGä×õ<- ®®nrò0‚„!ÁÚ¹Sçç/žÃ¿Þ,?‡rh_ˆ×ÜÁJ’ËX-&\­e_òóókd¥XÍ\}}ýÊÊÊ—/_ÆÅ= ¶›0éirèÈabñ±>i…gÍœåèàxñÒEßãÇùù¬Æc “XûwïÞ½zõ±8síÄK¦Jµ°¨õ[MÚ†‚"¿«ËœZ†––•-]¶¬S§N[·ÔlsÄÇÇ·ÞeC5ƒÓÇWRZòc’’?õ utä®_¿Þ§Oשּׁ¬Aþmu»]?OP@°¼_Cêvùù4*h½¥¥¥%¥¥Ê,ÈÈÈp1¿C+/ç(Lk+k({í÷&“’Ì-Ì{èö ¤vò›ds¡¡®þôÙÓòòrâF„¯^½ú:úáã-þ&9YùGØ/ÿ_ÿÿA ;=wòòñ™Ô·”ê7 !.‘›ûý£/_4;¨¬ì¬úäu#ÓçœòLÓ-ܬ¥Ì¿UU5_ßãÐeO°_Àp'ko~Œ Òrú¸×Wp1wyóÿŒ É“ÆÆFO222tu›ü5ŽÊÊüüü> Ï€Å$Ýúzz™K bbb@\ÖL]sqeWPP¸{ï^úÛtb³Wccc×/]ÕÎÜ5Þv¼±‘ñóçÏk¥ô(ä+(8¸Þ=κtîL¾{ÿyæ~l,XaÝV’4ÊãøÇ¤ûöíÛ ŽAl¼MO/,,´±¶QUUm@§ÓÓÒÒ¾Ë!AREÔ r¾Dx”PžššM’[ð—5 Pü–––·ïÜŽ‰¹ IRÿñ;Víú3èð<Â/‡ÇÜ¡ÑÄU:veþ Ap5âjll,¨U)ié/eeÑ7®CMš5s&³9鸸¸ØÙÙ©ª¨€Â†Á%Œtu´µáy«©©]¹z¥k—.Pù@I³‰]@@`挛]]oݾտ_5Uµ˜;1ƆFÐ’ïÄÄp¾Ôu̘±ÂÂ6»n¶±±e0èaaY«à'§U«W»mu335£P(Ÿ>}Êx÷nÚÔ©l„rèÙ³ç;wFŽù§>\b`hp-êZ¿¾}AÍ¿xñâtPPó§0köl99¹C}št£´´´¹…ÅçÕåå_ºuëþî]Æ–-[ ÂôëßﯭÏà;=—,Y-,LéÜ©Óëä×a¿ïz©¥¥Õ»wïí;¶OŸ:M^A!>þqè…ÐÉŽäoÂúú @à*3—­©©©¡×C˜Ó ñúur]]*•šššš˜˜àä4¥n2–,Y²tÙ²ù æ>¢F!033yxy@Rƒppp<æ{ D$„óîýû£ÇŽBöÙKˆ†€R:À`T«¨¨Ü¿ÿæ7çÌž I¡]¾|™*&VRZZYYÉ"‡4JKKƒC‚Aá@‰Õ}•PDDdͺµŽö¢b¢ȇœW¯æö?éy-rô¨ÑaÝn×úØnüxÌmsw‡–°g×nV}¬¢¢zýúõ€S0R¤ŠQaœ´Ës—ó'¨g›6nòó÷?söLnn.ÜÕ¥K3³¯».,Y´Øs÷®«V*+)òiD“,ÖÓÓ;èã#ÎåË—ïÛ·×yíHŒ©©é&—ËV,ç$2ÒÒ[ÝÜ9â¼ÆY\\|äˆP³²³È¾f‡ûv¿“þÛ¶×¼µ*+#ÃÉ& -,@[ü9i5cÚtzUÕÆÍ›JJJ 3Z½rÕº ë›//oÍ€¼B3î=räè.OO÷mÛ #€@ 0_íì, ø7Wi{‡Œw»˜»A_ ‡h¿iqÀòrsg~øëKY'· ƒ¸‹ýREEEiii0¬ÄÛÞݺvƒ3p‰òmÙ@“˜9£fn+ 0€Øÿxë·9óæ’W×­Y *í„߉<æ ‡¹sæŽùýý"Ћá—/¶Lž1éiA‘‹+$%¥âŸœ½v¡¼¼\VVÖÎnëw1HÀ Ø¿ÿôé [·oÛžGŽø‘µ••…r>ô|à©@ÐÙæS§LiöÓYã¼æÐ¡CoRÞ€$˜ìè8vÌX.æÎZkV;;î»pñ"([[[}}½·ô217v\È™30Y´pQ]}þ R{ýºu]˜pàˆ}é’%ÇOœX¼tÉСC;iÎ'Ô‹ÁÇÚ³ïWòÇ`Soc¸lÜȨf¸nÚŒEÁ oÓÓ‡ŒA~l¥ Lçl`Ž%6ov­×UTT\ 諸‚AæÁ`0233‹ŠŠ†ŽQTPPÖ˜D£Ñþ 'æ&ëÝ`ùy"""<‹¢}šØÕu –‚ ¿¸4-//ïü™3ú††ŠŠŠl–Yp3W¯FFD€hƒ»PÿjZË;ÙŸ>}Š‹]¹ü/ýN8êãVOFFÆ1ßc}ûö•‘‘­(/?sîlaQáˆá#~u¼ƒ³[§y5 ‚ H[EDDDQI)óÇQQ…m£K“•““WP¨÷ÓªHËåá#GüåF999¹¸¤¤‹’¢"‡C}Œ4*•*((tÂÏ/??Ÿ››[SSsËfWÍÿêxQ#‚´[À܈ÓhÒÒÒœ¬¯¥ 7iŸ2¤©F™X_qùRø_¾bð¨ï±¤¤$­îZk×üµ¿'àúc¤½ÓÆÖ7 ®?F¤a0þ ²—U ­ œ?FÚ=íp>§pi!Pø"m³bc ‚ ‚ êcAAA}Œ u`0í'¿YÁv³ØAAP#H“‘””¼C§ÓÛCf!›YÈ2>wAi|?iïð ˆððÄܺE~p¨ºÍå‘|¯²²RDD„>‚ ‚ >F6Í€OLL¬=äTHH7‚ ‚°×W ‚ ‚ êcAAA}Œ ‚ ‚ ¨AAõ1‚ ‚ ‚ >FAAÔÇ‚ ‚ Ò2àþÇÂUZRòâåË’ââ¯_©ns_á®ùBüODT´k×® :‚ ‚ >FÄqiibb¢‘‰ •Fkó™-,(xpÿ¾Ž®.JdAA}Œ õó6=ÝÔÜ\QIIXX¸Íg¶¬¬LDD$þáîݺá£GAÔÇRÜ<<ò íäûÒMÈì“Çñ¹#‚ HCàûyH{G˜ æAAÔÇ‚ ‚ ‚úAjÑöv«À,#‚ êcAAiðý<AAšCuuuUUUEe%»_¥¸¹øùùøø¸™±#êcAþ€¹Ú°a}RbâùÐ hùu€2æååUSW§ˆˆ°÷YZRò6=N§ƒJÆrCP#ò»qwßæsð ápv^ƒ‚ È/Ç C[W·0??çógöžºkk'ÄÇÃ](‘‘V®?F¶CÀÉ“»<=Mzõ‚à€C,AZœêêê¢ÂBUÕ‚¼¼/ååÕ~À§ŠšÜUï#­Ö1Œ »æ½ÿ•þååå%OfeeÙ;:ltÙØ·O8œ=wNŸÞ}~2®‚‚?ÿØØØÜ¼\q­K—®ìì:wîü3aZÙX‚Ò/))iddä4y²¤„ä/Ø´´´³f‚Ãÿ„Ÿ¼¼|­r°›8Æú»=wikk7/ü›ÿÝô9tÈçÀAZ+ütó•+Wì'±žÙ¸iÓ¼yó ÷Ű0))©ŠŠ .²ÿéŠ÷óDGE-_¾¬k×®§àpÄðap¨  `na=‚ -NA¥Ñ²³²8¼$²¬œÜ%F¥6:…¼nýú§Ïž†óóó³ñfk7~Äð„Ý?às05%Åc‡Ç/ÊrJjÊñ'^¼xQVV&%%¥¯§ç4ÙI\\œý]ž;/_ hjŒ;=ÞfdxíÝ×ì4ÿ|¨Ûêê òœø¼qóæ;·×®Y[ï˜xÝúuŸ>¶µ±‘––ÉÎÎŽ‹‹ƒŽ Ñ0÷îÛ§¡¡ µ! 4p`yy9(ªÐ ¡Ïž>ó9xð/ù™ILL,*:Ú~ÒZðúëBBBÅÅÅ?²´”tGåŽ ¥5Ö¨ü¼<*•ê彟<ÓíÛ7™oݺ5}ú´©S§nqÛúðÁ¡"¢"cÇŽû£CÔ©S§HKKŸ &F#à2ØNB…WUUÃÎA–‚˜f0Mš ÿÄd3{oyyy>t÷îÝÿýﮨ ð“;W²±ãŸ>}Z¶|¹’¢âôiÓ322=~ÔJMÒîôñŠå+8ô ⸡Kéoß¾xùrÓÆ}z÷!ÎX[Y5`UUÕýû÷ ]±ñ#ßAÞØÈýúöSTTtß` oð7]Ïž=£££jéãk×¢úôécߟ YKKk»»{+­Q¹y¹222Æ «{ißÞ=ýúõsß¾ܦ¦¦?~tß¶íÏêcnnn==½-nnJJJÄp¯[»ßÒCä× å3*: ¬¤Ž¶vDd$çúxô¨Ñ?){;J½¤¤dÛÖm¢¢¢Ä™&ýX0êã?‰½ƒƒ™™Œí7ÔݔԔë×o”–•ªªªÎœ1S‡¹H`ñÒ%OŸ>åbÎ"Ãßÿ“rrrd ôª*øËÃ]ÿ²ìÒ²²#GŽÜº}«¬¬¬{÷îóæÎSUQÉÌÌ\¾rŧϟaè ÿädå]ôÙ…¹Z#77—8}úÌšY³žðÅË—Ç|%''Cg.//?vÌØººìíx½ª!™ËÞZw½N~}ðàÁ7))4mè¡öödPW#®ž:}:;;»cÇŽ `.^ºÔI³S-ñ½`ÑB÷­ÛÈ3ÇOœ½z&8äæÍ›§O-Y´øÐ‘Ãiiiþ°¡ÃXÃçç㋾•-++kme=üÛ¤OÝr2x0VéV©aôÆÃó]¹–”–°ñìµß{èС;=<øøøŽ;ºqÓFÿ~PÜW¯Þìê*)!1Ÿ¹TZZúG‘¡rjL‡@U×ê\6º€Š7g.è×ÓÁA«V­:qü8„à±c´½)NNæ<,͵!>dfÂ_˜Ä!SÓÿ™víÒ%'7ZæAH$qéÝû÷»wïš={ކºúëׯ·lu£Qi LáˆÔÕΫÕÔÕ7¬[_QQqöü9PêÐÀˆãŸrD@€ßÆÚ¦Þô¨ª@^U£¢£I}y-Ж~ЋùyP sfÍÕv1Ì}ÇvMMMè¤ Ø;11ž»þüèÑ£g̘žýi³ëfhó ,à¤2pÔ§OŸ`(EÔd}œ—/..QÏã{ÿ¾¢¢œU khhÀßׯ_ýA}Œ Òô1ȵÔÔÔÕ+WU¢R©`˜È_qïÞ½»gïž¡C†˜0A¹ÏÛ«¸¤¤©áWUU9¯q6éÙÓi³keUÕË—/DEEµãÆFÆ`eÀº-\°°©¯Ó€Tݾ}Çøñ¶ŠŠŠOž$ æ86.n§§'ä4ähïÞ} l@× aÈà!û¼öå²LÙÜüïf¿¾ýÁ ¦ß{ÿþysç*))Å=ˆ7…" :˜ð c†Ó§O;88JIJ‚P† £­]o9`}n­úØÊÆšsÏääæÎžC¸§O›îè4ô¥žžŒ ùùù…„„X§¿ßæM›6mÞ†[V,_1{Îì aa||¼¯^¿>ìs¨Þq68y²£ŽŽ¸§8M9{²òxÛñpe8ÐbàýØûœwʵzÕª¢¢¢f¼ ˜›—{÷n Œ[ GµdéR111âUKbrš€ô4v(‚ >þ""#@ƒ…·™©Ydd$©OuïÖ°k€¢’Òâ%‹›~~~~qq1ØÂëõèAœgoÇÁÒ­^µÄå${óÆŒ£®¦ÎaŒ`ý§M›ö¿þýÁÝC·GnnNÈ™3 _ÁJž:}J[[›Ì‘¼‚Š•õ¬`fvÐç Ø\¢(^''¿ÿžœK‚G0uê}}}p:,%%58$Ì=a…Á`íݽ¤9¸ÁbÞ½{ïÑ£‡ *¤UêãîÛyx¿Ë»Üܼ­Û¶6ä™|•ŠP–„Üá$¨ô¾GHºnýzP„...aá„„Ö†††¤$‚±ZJJ ‡‰ ‚„ÛÒÒrάÙõ*HYYYsl2òüÅsÂýêõ+m‘o»²S(ðYÉ\ãÂgÏžÙO²'o„pæìžvèСÞäÁpÜ÷øñGΆ‘ŒSÍLM³~1 ¢.**üÚw()9Mžì{Ü´ò´)Sº±s§ÎäPDTT´“¦&yIRR"//óúÀaP¢LšQßÖ­[?xðèVètúƒ¸8/¯}> »x±! +Ìi‡¹ã*päˆÄ«á½LL.„]x󿆆t³àp°ÿn׺wëFL 6 iii°ãnÛ¶ÚX[ƒšlt V‘ÚÓØ8ürø¥KáW®^…ÛgLŸÁá½:,{@_þçŸÏ992ÒÒÉÉɬ9‘Zï[û`ßû÷ë-ê¡oÞ¼ÁÜ@CŸôеKWÒ­¯§v1Œ¿FTÈÈâ˜0R²²2 ~¦PÿèêêÖÚßgÖnÅ N›1ÄzþݾsÛmëÖÀÀh0«¬¬9zkK–à¸J&1lxyyùz— ²22¤bƒ^ 0 6.îÓ§O Ã` Yk;*Ë<%k.@ÂÖ¿ŠKH@ à(--…  X›² ¸œÜ܆ô1èrÅFEGƒ>¾víZ/“^ÂZ%|?öþùó¡)©)%ÌŸ´ 4X¯>ÂÏßÒ?tèP6å öcv(§"ê^jvP¢Î„p›ššBñ®^µòÕ«W4æCgÆîºUîw’žž¶háÂ-nnÚÚ:äɤ¤Äuk×îÝ·OEE;;AZ^·hh±q±`tÉ“‘‘s44ÀîTTT°®yµ'""Âq:¿§ÔuÓæKá—B/\80ÐÂbÖÌYΡ@tãmÇ[[YŸðó ê¡Ûƒø=¹QkźÓa)òrs……„@Ðh?¨ˆ†DÅ!ƒ—¯X‘–ž®ª¢rãæÍfXgdXW–1?/Ðǵ…/7wu5ã'Ëõqk§&óúõí§«£ûôÙ3®šiH¨âÞû¼X= q:f•’&f‚'ØÙAË4p1ɺÅmË»wïW¬XÞ¥síì¹s~þ~?Væú3"!!Qk¦¹äÛJ,H'­­í ‹µD0›Bóð9tú¦[·þ[¹rU­«OŸ>]¿aô Ë—/—’”„ðGùáeácÇŽB³äåá=æë;oîÜŸ g“¬u½6/¨–B›ù#tjšššÐ¥¦¦’—Þ¼yÿìâcè‘ãããíÆ¿r5BéÛ‹’p0ÜA_×ó´`hZZZSœœXÏDEGÍœ1´)???ù£%9ÁÔ€ù¯cA H7„3n츱cÆÞº}Û{¿7—Í7qžH^^ÞÉŽŽ¡BA€>æÄZu&§ºó jVâIHJÖ›£’VTƒQW¸~ýzŸ>½³²² üÁ¸ççç“9—ùÛ)ùR#7Oƒ†ò'Ë¡ÍÓ¿Ÿ'( X^QÁaˇªL£Ö¬.ÕÕÕ----)-UfAFF¦¦yxøøøÊË9 $¦”””×~oâ01)É܆¡„ÔN~“Ìa.4ÔÕŸ>{ £Oâ°ªªêÕ«W_=|| Åß$'+ÿûŸ¢þ×ÿÈNϼ||&uÆÄIO“àïÔ)S`H ùýù¡´¬Œ¼ ÊìRxøâE‹à_ØÅ°ø'O~òIˆK|ùò¥ì[t:=ùõëæh&ó…ÈŸ$&&ºEÍNš}SSÓÿý‡¼~颼¼üO~Dæ'QUUóõ=þùóç vã ˜€á$n~Œ ȯÓÇœÃ>¨ÂÂÂû±±Ã†ƒHþ³g½Y\\ÈP55µ’þ_¿~]Ñ€)—g]Q™‘‘æ»î Ëÿú÷·±¶~þüySí8˜•ÊÊJÊ¡µz’@º!/âââÒRRu5õ‡‘—RSSY k­ÔZZZÞ¾s;&æ.¹>›äqücÒ}ûömÇIJRg£XË!iŸA‡Š~9<æn &®Ò±#ë W#®ÆÆÆB›”’–†ú}ãzZZ±#Œ¾ž¾¡AÍZd;;;UPØ/_¾400ÐÑÖ&Úí•«Wºvém”4›Ø`(¼ÙÕõÖí[ýûõWSU‹¹clh#¹;11O8V–cÆŒ½¶Ùu³-ƒA »Hje®šWÖœV­^í¶ÕÍÌÔŒB¡|úô)ãÝ»iS§² ʆÂwîÜ9bdÝ%PNèÝ‚CBz™˜d~Ì &Ë ÚóNOωwÁ±sçÎÇSš¸_+:::ÄÆ#ö“ì˾”çåç‹KH4#(÷íÛ>ztêtS_Ñ;fôСÃÔ5Ô ô8G™9k–”TÍ/V‹—,1|˜³ójðððÁƒ'Nlݶí¯?6·°Ø¹ÓsÉ’Å™oj¾xñb÷î=øñ<A~©>n© ¢¯Góòòöëׯ–½Ù«W¯ñ6¶®n[<пÿÿrss²2†p ±OÜǬ,/o/Ò¨eee:Ý«WoY™œÜðC¼ ÆÞŽ{ï߆ S§Nâ4ÜuáB•J5`Ήµã~ä葲²ÒŽÊãŸÄ_¹z4a/Æ·1pèðáþýûåææž `3úØÿ¤äµÈZ;=ƒ²‡Œj•û÷ïßüïæœÙ³µG •Ò®õ±Ýøñ0šÜæî.$$´g×nV}¬¢¢zýúõ€SEEET1ª¦¦Æ.Ï]ZÝ»gÓÆM~þþgΞz wuéÒÅÌÌ”¸qɢŞ»w­XµRYIùû€,ÖÓÓ;èãcld¼|ùò}ûö:¯]‰155Ýä²qÙŠåœäBFZz«›Ûá#Gœ×8Ã`täˆ"""YÙ_W ƒÄßá¾Ýï¤ÿ¶í5Ÿç€0he£a´°}lQŸ¢éìèàpñÒÅÀS0<˜=kvè… Ä¥C‡ÁHz»…@Ëœ6cºÏAòÜf //¿ní:{GQQS3SGGQ4#(99YIIÉf¼Æahhäë{,33†4{÷í³þ¶Až¡¡!Ô777??¹\\6N:ío¨Ûöï2vyz‚{é²eÃW¯i{€Aäåæþ˜™ –«¬)ÏZ Cw w5$Ý@¢õéÓ§®ä4hà1__0ÊÿûßÿæåÍ={îÜ¥ððšý§M»VÿdÁ€¨ÉÝ{vËÉÉY[Y“ó#Œüüü]»wA€`:{÷$>›ÀÞŽwíÚLÞ›7 ³ÒÒÒz=zØÛÛK{µV]»v2Ùéà!ŸÔÔTH†ƒ½½Õ8+R ,˜¿DÅ…° JŠŠS§LÝà£o``ððáCssóZ—Ö8¯Cü&å $i²£ãØ1c9y •òµ’?~ðK¡mà²q#£šáºi3E“x›ž>dÄò«+m`:gÆõàØ¼Ùµ^;TQQq%<¼£Š >zAšƒÁZXX8ÈÒ²¨¸¸¬Îê…ÚjŒBŒˆ R© (ëÝiô'aý>Hëe̸±ö“ìúp/XùÒÒßÌpý~¹Ö›ýÈÏÇEÐ6(//ñâ…¹ù,Šö>äåævuÝ‚å€ È¯.FËËË Ó30P—g³Ì‚›ùU¬è¨(A¸ëWˆc®š—pè­}š#99¹¤¤DéÛvlµøôéSl\ìÊåõlŒ/a£>F¾“‘‘qÌ÷Xß¾}edd+ÊËÏœ;[XT8bøˆßœŒAƒ\¶y5‚ H›DDDDQI)óÇÿ¢£‹ØG‚DLTT®CyÎwdãœøøø«V’&©™žkQמ={®×£‡¤¤dVvö ¿JJJFFFuusqI X|Φ¦¦X÷P#ì R©‚‚B'üüòóó¹¹¹555·lvUl`Üùë@Œ Ò»#N£ HKK7ºYXXXDT”",ü+Þcö?é/((Ø­[7çU«É/0· ”””£¢£oß¹]TT$$$Ô£G™ÓgÔ}?þ¨ï±¤¤$­îZk×ü¢Ùw¤žŽë‘vN[Ü(¸þA„Á`4úû>ÈbvHëç$rc–Aš _¤mVl,AAA}Œ ‚ ‚ ¨¤‚ £ýä2+Øn[#‚ êci2’’’÷cbètz{È,d2Ûº^ñFAß ¾Ÿ‡´wøDxxbnÝ"¿?ÔövZ'_Ç«¬¬©»‚ ‚ ¨„¥ðñ‰‰‰µ‡œ áãFAöàú AAA}Œ ‚ ‚ ¨AAõ1‚ ‚ ‚ >FAAÔÇ‚ ‚ ‚úAAAP#‚ ‚ êcAAA}Œ ‚ ‚ ¿ü¾4‚ ‚ Í¡ºººªªª¢²\ zâæàççãããææÆCP#‚ ÒfeÌËË«¦®Naï³´¤ämz:N•Œå† >FA¤mŠcƒ¡­«[˜ŸŸóù3{Ï‚ݵµâãá.”ÈH«×#‚ Òª««‹ UTU òò¾”—W7øŸ*jjpW5›•ò×À;{æL,AA8„N§ÊÎÖÒÑ)((àð–*:]RJêiR’˜˜OýssaÃ,\8iâDVYYYc­ÆihhtTV†ÃÙsçäææõèÑ£E2òß­[û8tø°Ÿ¿ÿ•«WÞ¼IÖÔÐýkKþãÇÓ¦OWSUUPPÀzøKÁŸ9AiÄ”0ƒÁhÒd0ø'&›&j uuyN|Þ¸yóÎÛk׬mÈî=»ÿý÷ß¾}ûΜ>CPH0##ã~l¬Hck©ÿ, Ý•••%¥$9Ì#‚úAAß-”sŒ+–¯àÐ'G6W¯\½ âxá‚#GŒ$OÚO²ÿË ôñNóˆ >FA¤íëc{33³éÓ¦nG‡”Ô”ë×o”–•ªªªÎœ1SG[.-^ºäéÓ§\ÌVøàRNNŽ5œ³gÏêèè°ŠãZœ=)<üãÇ4ÍÌÔtŠÓAAA.æz{G‡=»÷œ:ø$!A@@ _ß¾³gÍ>uútäµÈÒÒÒNšš æ/PSSûîy×îÓAAñOâùøøzõê5oÎ\111"–÷ïß9z$þÉ“ªª*MMÍ)NN=t¿.yñòå1ßcÉÉÉt:]^^~옱C&Üêæfld\oKËÊŽ9rëö­²²²îݻϛ;OUE…‹9yïçï•››K¥RµºwŸ?o¾„„ÖaÔÇ‚ ‚üíú¸¤¤„uýqIi Ï^û½‡ºÓäçÑcG7nÚèÂODDÄyõêÍ®®’ Á›´´4ë] Óߦϛ;·¡`ýüý‚‚ƒ'ØMÐÖÖz—ñî¸ß‰ŒŒ ·-n¤ˆhÎìÙ‹/yöì©ÛÖ­qhkiylßÁÍÃã¹ËÎ=r„ôì²iãÌé3-\ø6#ÃÓsç®›]k’‘— WNVnéâ%‚‚W¯^]íì hkkƒ\v^ãlÒ³§Óf×ʪª—/_ˆŠÖ^øQ7ð8\6º¼}û$¸¸¸øéà U«V8~\XXøì¹s—Â/p—ïÐ!+;+!!T2V`ÔÇ‚ ‚´}lec͹çrrsgÏ!ÜÓ§Mwtšüúõk===üüüBBBµ¦ >37¤“——oH ‡œ9ckcëèà‡ú²²²ë]6$&&êèè~̘Ã?p˜þÏôBXXJJʲ¥Ë :8c7Þný†õyyyä쬅¹…¥¥%8dddæÌ™¢655UMMíÂ… åååîÛ¶oö21™;o.HsùùùÅÅÅ-jiiÁ%½úÞG¬›Çø'OâããÝ\·ôìÙÕÕÕ'ÚOºüÏ?ÖVVïÞ¿SRR`fç»ví ÉÆÚ‹úAA_"[<ÈîÛyx¿Ïçææmݶµ!Ïݺu#ÝRRR\ÌIÙF£ Óéð—›«þïù½zõª¢¢¢wïÞä>>¾' ¤>îܹ3yUB\BYI™Ç€$Sçå×Ç]»t!=ëëéÃ_ÐÓ “’t´µY·ËèÛ·_@`ƒÁ––644tÛ¶ÕÆÚzØÐaâââœ]BB(f¸‘8¤Ñh ‰!.p4·Xå¼zµój[[[H~Ëõ1‚ ‚ ¿Fÿ‚0uuuyyyÉì¬,6žë.¨f4ž(IÉšý>6rqIq¸d Ô$UŒZTTDž!PD(l’!Lù~UDDBõ\Qqq¹¬w¢­ªª*++o®›6_ ¿záÂÉ€€³fÎjtã¹ÂÂÂÊÊÊ‘£G‘g 4 ¦¶†RÝïåxúÔšµkååågNŸÁ:@P#‚ ÒBúøÏì£9ó rrrRRR÷îÝ5²ž÷óÄÅkæ}óóóÉÍ¢BVMܤéWŠÕ ¡IHH2#Ï/ȯå“OXXÜüüüãÆŽ;fì­Û·½÷{nÞ¸‰}D¢¢" Å{ŸëIrb[]]}ýÚuŸ>>æ{ÌeÓÆýÞû;ijbnü~‚ ‚ ÍÔÇœó›Ó&( X^QÑÐÕÇÇ=ˆ»~ãFÝK]:w¦ ß½½û{®5:üòeç5Î'LÁúïÕ+)))Ûwp1W•œ:Ý«WoY™œÜœˆÈHâE=öyÔ×Ó740pqq±³³ƒ(@:¿|ùÒÀÀ@G[ûtP…"¬©Ù rwïÞÝòòòn]»aF}Œ ‚ HËÀÍÍÍËÍý13T]YY'· gffÂ]¿íÍ0»ñã322¶¹»C"÷ìÚ]Kóóóoßæ~>44úzô˜; CœF#ßl³¶²¡P·ž<H¥R-Ì-¦N™Òì”,œ¿àÆÍ›¡¡¡¼¼¼}ûô%÷•Ù»{Ïá#‡wìô¨¬¬ÔÔÔtßæN¼Å•ŸŸ¿k÷®¢¢"qqñžÆ=‰-ŸÍ㦛üüýÏœ=“›› ‡]ºt13«ÙªBJJ N~üøÊ¿£rÇ ë7hââ ö•üñƒX ‚ ‚p¨I»………ƒ,-‹Š‹ËJKÇŠ˜¨hdDhMyyyÖõmâsÛܶaµi]àü1‚ ‚ M.FËËË Ó30P—g³Ì‚›‹ëCfftT” €ÜÕ~Ä1I5W5ÖÔÇ‚ ‚´qDDD•”2?|ø/:ºˆå ³z•ëÐA^AîjÕ¹4Ø’sÏ‘W#°ž >FA¤½ÀÍÍ-N£ HKK7ºYXXXDT”",ÜÚ?K’·Õp\Œ ‚ Hó`0îb²¸.«@Z58Œ ‚ H3Aá‹´ÍŠE€ ‚ ‚ ¨AAõ1‚ ‚ ‚ >FAAÔÇ‚ ‚ ‚úAAAP#‚ ‚ êcAAA}Œ ‚ ‚ ¿ ü~‚|¥ºººªªª¢²’«±o¥"HÛ„›[€ŸŸ›› AÔÇÒÞeÌËË«¦¡A¡P°4vKiiéÛ´4:*KAÔÇÒ®Å1ƒÁÐéÑãKY X H»…ŸOKGçÉãÇÐ(P"#‚úAÚ)ÕÕÕE……ݵµËJK«èt,¤=SYUU]V¦¢¦ö,1Q\BZ ‚úAÚ#t:½  €F£ci Hee%J…F!F¥â2‚ ¨¤=R]]ý¥¼œÎ`TãkyB  hØ"A}Œ í^(3X‚ ‚ >FoúgËAšØm6¾-&>FÖ õ1‚ Ç|ÝS]""ÂÞgiIÉÛôtÜ7A}Œ ­œ?Fá\3 m]ÝÂüüœÏŸÙ{è®­û"¨õ1‚ HÛì-‰m1 òòÊ+*õ_óºg^>F~aü÷ï'ܲ²²ÆÆÆ¶Ö6ÒÒÒœÜ^\\¼gïÞGUTTL°›0iâÄæ%Ãc§ÇÛŒ ¯½ûõI§ÓÏ?åꕬ¬, …Ò±cÇÃG 03kRt|¦¦¤xìðøµ=>Ëûy...©i©þ~þ¿4FĤD¿~`-˜°¶¶ž7wÞÏ8aâ3S³Y³f±÷æÒÿìÙ³!Á!BBBئi*Ķ˜T-;+‹Ã[@"ËÊɱß7°EììÌÌ̦O›ÖÔ#""<Tïգǎ]»`cc£©¡YXX˜˜Ÿ—×Ô(¸8›ÜeŸ˜FgD¾»¹ª¹8˜QÎÉÉ™8iâÕ+W›ÝÓgOƒC‚A¨ºisØucïÔ©“¢’b£Lœ0144ôðáà ,ÀÖ„ H3zKлŒ&n‹ÉhlßÀ±¿3SS ‹ä¡JÇŽ?àÞ}û44Ôal€5 õ1Ò4ôôôxyyÁÑ·OŸ±cÆ.]¾l³«ëq__~~~ö7‚žÖÕÕ…»Z01111lú»Èk‘£FŽšê4…8l^ƒ=jt‹$†s}ÜЙZ\¿~ÑÜ“NÀ³èÖ­y;S7!¨º±otÙÈI²yxxl¬m|ùLŸ>§Ûïß¿ƒ¾bÙÒ¥;w!O¾zõÒs×® ë×+**a!?Ùmþ -b/Øó+–v(((ö21i©Ðªªªîß¿úkêcä§]0o>Hä[·o™0‡3¥eeGŽò²²îݻϛ;OUEåCæ‡mîî/_¾„îlÐ`K8säð‘ ààØØØY©Tê@ ‹)NSˆîÃyí^Þ-®®dD“œúôé3kæLÖØ}ûBD˜p¸bÙrKKËZM‡‡»¡Žõ|hhøåð?RŨýû÷Ÿ?o^VV–½£CHPpÈ™3ÿ^ùWYIÉkŸërŽˆˆˆÀÓ§–,Z|èÈá´´46lè0{{Hv½‰™6cº²²òÆ .Mëè«¿Ÿ)((8áwâÎ;>|:tèœÙs@bî?°ßßߪ‘±xsÙà2bĈQ£GÍœ1óuòë«W¯–––jhh,\¸P_O¿V\p)úzôªU«jEZר45vËA–óçχ3ìSáìÚ½ëúëCÁFÔ~àáå}ñâÅÂE‹ŽûïСœÖ‡ÐWÀ%\‚üY}\¯½(..?ÁÎ~’ý;;òäâ¥Køùù=¶ï°w€îßþåË7ÿû¯¢¢B«»ÖâE‹“’‚‚ƒÀšÈÉÉMqrê߯?y#//ϡÇ"¯]ƒ:ßµk×ys窫}U¢`:}}}Át‚e”——7vìO ôó¡ç/…×8°Sf¦¦`^á½kOZŸðó;tÚjÜ8mm‚‚|>¾ï“ß;vz@Orº•º‘Bâ½?ô&JJJqâÀM¡[[Y×M NÏÉÉitZ½nG_MüÇ<Êûõ«×ŽŽ*ª*?öòòRW3fŒÝx»Ò’ÒˆÈbMœV㿚k‡ÇŽÑ£F>{ölÙҥġ÷~okëÞû¡&»nq]º|UŒº|Ù2°zA!ÁÛÜÝ»ï*##Cx»xÑØÈhÕÊ••'N®Z½ú¤Ÿ¿ddý†õ`:&;ŒßçåURR:ÞÖ¶yyñó÷ ž`7A[[ë]Æ»ã~'222ܶ¸‘Ö®[ Šyö¬YÛwìØ¹Ës‡ûviii;&;9¬·0·àaþPŒ >Fš H(hü¹¹¹à~’ ÛÍuKÏž=áP]]}¢ý¤Ëÿücme#iAA!pýŽû6w #iP– ²›¤%$$@šƒÎ&ìhÜ¢¢"—ÕÔÔFe9hñ~CIIÉÙsgmml¦O›^÷®â¢¢½{öB° õÈS§NÑׯ™ …Ô¦¤¤‡„X³ª71‡||„9ZBÀ`ý~Shg ̽{÷§»wëù8þñ¨Q£`øA¡°FW³Ú«Z^^~ñâÅÄ™¹sçZY[AWnddÄ×ËW/¡G}Ï)ä‹Qç~M ¤Ñ”tîÜ’ÁÀ¯¶'ÊËË»wë¶s§ç’%‹—,«‘oÞ¼Ù½{œ,--ÅòAþ¬>nÈ^ <„ìëääNššpxóæM8OÎ CG:Ùq28@×ZZZž:µÖy ô–pfÚÔi/^|úì™™©)á¨ójgâgÒÎ:Ù;:\¸:zÔèG%$$lww7Ð7€K†UU•§NŽ5ªÑEhtzUYYyþ¡5…œ9ckcëèàg LYYÙõ.AýÞÌÌÌF ¸dmm½{Ï*~~~9Y9b~§!«Š >Fš¨bE2´ph`†††Äy}GJJ '@+…¾©e&&&¶ÕÍ-1))44ÔËÛ+8$x‹««JG•ׯ_WTTôíÓ·Þ»@õ6$Ž¿ªù.]I·¾ž^ØÅ°Ï992õmâAô5MíèÙ¼Ÿ}VaAážô¦¥¥Ež!öÉÉÉ©å'??Ÿ˜¯u¾QcÓh쬋4ا5þ¤ÞÞ€¡)hˆ¥Ë–íòô„CpÀaaA– Ò<üì…¾ž>ôä×®]û¦oôîÕ‹B¡C}Ö).æ›ÊÄ!EXÔjËK~ÚZÚädUU"‚;1)QPPÇ`žÎž;¢\G[›}²ƒCBàyè{ôØçÏŸÁÀõîÝ›Éùüyé’šõŸ²³±4–™VhQX혧Áƒ-âŸÄ''¿¡ÑhÆ?¬Xk–%%%?˜’‚‚n]å‰ÉšZ6¬ ³¯¦6¦ŒŒŒösÌââD¤ƒ‚‚>_ŒEÊã7Rþrx°Z;ÙÙÙÞû½U:ª˜0÷—ÑÕÕQURZªÌùj+oÓÓ m¬mTUU¡÷¡ÓéiiiäU ñܼ\ò0##£¡å‰‚‚ååå¦6//_TT¢ëÜ©ü¹w·y¹~ÿ˜tß¾}Ä1ñ³TÝÄdegq¨ì«Y Ϥ¦¦Âíì&¨©©A‚¡§®Y¬RýÕ³€@Mtµn¬þ!¤zÎðD ð¡Hˆ±Ž¿Ÿ‰½Ñ”|üø’Q´W²³ qdÕ{ ûU„s}Ì9M œ´\Ì•rzzz·o߉¹cfjÆÛÜד’È”@HOO×Ô¨Y³¡¯§WQQñðÑ#ÒgLLŒ°°0±¢£©téÜ™",|÷þ=òÌýØXèÀu¿-®`'Ëxx ËååX»þ,8Ü*‰‡±gqqÑÓgÏ""" nX¿žX°«¯§oh`àââbggãïòŠŠ—/_Ô]A¥  ëòåËT11ÐÓ¡¡¡¬o¯FDF¿޽z}ÌÊòòöjè‹Gêê ó‚C‚!j³Î¿}ûvŸ——±±q‡rÜ\ÜÐ1…] ³gþ.>GÂ\³¥­¥]XXBâ޾ç9=À`T«¨¨Ü¿ÿæ7çÌžM,)«•YYÙY³gËÉÉ:èÓ´‰oKkJéBرšR*9sæ ”9Ñ kIII@@€¡¡!•J…"­wÖ¶î‰îÝ»3Œ§OŸ’+ÅÁÏÛŒ·ÿý÷é§£JÇŸŒMJà/Ä£#C‚üŒ>n© ØØ ‚!ƒ9z4''gö¬ÙÍŽ%77×mëÖ¡C‡VUUžðó<¸f--­Þ½{oß±}úÔiò ññC/„NvplÞñÐo;88ó=&( ØCW÷Ýû÷G…ŽZWW·Ñ{Á–©©©]¹z¥k—.t:“[ÔÇÈWV¯qæb®ÁUTT;f츱cÉ_m imÚ¸ÉÏßÿÌÙ3ÐÀà»K—.ff¦uEµfµó±ã¾ /’’’²µ±Õ××{ðà!qÕ|À€ÌÌLÿ“þ»÷ì}ime]ïVk@/“qcÇ…œ9xêÔ¢…‹Xõ1Ü")%yñÒÅ‚‚~~~%EÅ•+VX˜[WgÍœE£Òþ¹ò/È>ªuð&l4¶ÆyÍ¡C‡Þ¤¼Þm²£#BC‰‘‘‘QWਛgÝJâÛTQ± ë7>rxÎÜ9PJì&ÆÆÆžaðóÔéS~þ~Ë—.“ïÐá뺌oA8®þq›º€v¿s玾>ãu&¤Ÿ)5[üLi~ìlS’˜XTTdÒ³g5î_Ô×° öŽ—›ûcf&ÈGÖ­Ø l ÜÕÐ:ØÛ  _ß~^ÞÞ ›ò5Îα±qÛÜ·•––vïÖ}åòäbåukÖ‚É;áw"¹.b£FŽlvDÖVV"ÊùÐó§ÁÚBF¦N™Âá½K-öܽkŪ•ÊJʇ||°¾ý™JþøÁ,¤áá¹óŸðËîjÜ(•••oÞ¼9jT:Ëò’ßèÚÓ§ƒÎ=Kl`ô›Ùºm[ZzÚaŸCX£º¨¨ª^ºxQCC£¥ZÒÆ`0 v YZ—5¶9 0…"&*J¤'û퉢ªªÊnâ„1£G³N*#È/ç‘VɯXð›ß=zÌÅK—‚CB&Mšô›K/===*:jÇŽøº4‚ Í.FËËË Ó30P—gÓ•psq}ÈÌŒŽŠ€»š'ŽÛwî[²ÄòGP#âûÌ y55÷Ï#$$ä²ÁåñãÇ ƒû÷¾ÉüáÇeË–Õúz‚ 爈ˆ(*)e~øð_ttQq1{Ïb¢¢r:È+(;ýŒ=šä`ß¶-‚úù{Á~ç÷ЙÉï·W¯^Xø‚ü 0ª§Ñ¤¥¥]‚,,,,"*JnÆ\@øÅK&M„Á|ÿ~ýæÏ›ÿG¤!¨äoÇ’ –‚ È—È"аP£¿DÏf/«<ö–6‚úAþLOe€ ئÒlá‹ uÅÆ"@Ú½øºQ…BÁÒ@hì÷áBA}Œ m½ ððPDEcïß§Òh(‘ÇÐâî߇Fó‚‚´[p}‚úøëFE™±~ßAÚ™™™7nÜøÉ}¸AP#H«§I!HægöáBA}Œ m‡&mT„ m˜ŸÙ‡ Aõ1‚´5‰ÌáFEÒ¶.«@A}Œ ßAe€ ‚ ªAAA}Œ ‚ ‚ ¨AAõ1‚ ‚ ‚ >FAAÔÇ‚ ‚ ‚úAAAZÜÿ¸½P]]]UUUQYÉÕN¾ÁÍ-ÀÏÏÇÇÇùgÀÚ]!ÈO·AÔÇHkd//¯š†…Bi?¹.--}›–F§ÓÁÞc!H‹·AÔÇH+Ç C§G/e5´ŸŒóóñiéèfïYP@ »¶vB|<>FPüa!‚´ÍÞ²¨°$oA^^yEE£þk^÷ÌËSQS{–˜(.! -ÔÇM ìb˜÷þý¬g„„„.…]dsKDD„‡çÎË—ÂXÝYYYöŽ[ÝÜŒŒ[$m;=Þø°g×nöÞRRSŽŸ8ñâÅ‹²²2)))}==§ÉNâââMŠköÜ9}z÷qtpháîŒåå³àààí;¶ÇÅÆñòò’'?|ø0bäOOÏfàpÂÄ f¦f³fÍjjDïß¿wšòöΠ¦åã­·½[éi¥ÍRTʾ—¼Â{"ë«D„,iñ·d©-D%eyY²•å=˳“­²d§ì"”ÒBëÿWÇ»®–Û-EéûyWoΜ™93sæÌ|gÎÌ;/O¯nݺ5°¿>­Ï+,,´kÛ¹Sg''§ú«eË–=xð`Íš5Õõ¸yËæÝ»wG팢‡Õ. f[LY6;õõk>½Dnª¤Ä{ß@n@MyÓ¦M;uê4Âj¸¢¢b•áón÷_½zå4sæ,7·Ž;âö¦¼<<…„³°°PÊÊ7oÞ¸º¹©«©M°·g±Äž={–p5¡+ÖÑÖVUUáÇePp°ŽŽöÀßòÙÝÿb(fl¾²dÌÅŸ -[¶TSWãgH•z&'O\ºd)s(##£©©I݃7[¯"¼mÛ¶ÔÔÔ &Ô«X©7S/*æk#¼wïÞùsÌ‘ÃG˜Ã1£ÇìÛ·oíÚµÓ§OGµ @C‡Ù³¨šÛbñ·o ï’¥‚B‚¹¹“““þþçŸãÇ/õYÒªU«o‰°´´t³fÍš(ÔzÛ  ¿;wæÔü¾ëœ .dgg“L¤ç±©Ùð,·Yü8+((¸té"=Ã5Åèã¯E³Ç">%ãÉ“'¹]Ròׄ¯ùróÅ‹ç^‹»º¸´jÕšcyÿþ½å ,PSSo¸ú¸°°0r[ä!C$$$ê•>1|ÿ¥‚»ín5<|M8)~ !ÿ@jý©ʵ¦‘‘#ztïn9ÄÒÅÍ• íÆ DEE¿E/ ¨‹¶@ÿHöìÝ{êô©§OŸÒãald4Õq*?“²²³=¼<ãããéIëÚµëÔ)Ž222Uøìùó¿þZíúuzHÔÕÕ]]Z¶lÉlffæLç™jjj¤ ¹¥|AaA‰(¯dZU…Á, ””êkfüøÉ“îó»uëfmccjj:ÁÞž|‘ùÏ1c<|xæì™ÜÜ\]]Ý©ŽŽÚZÚ)))nÿ›õæí[êæÒO©©ÒÖ-[ø¯Ås},ðeø¸Ä4hð s‹iÓ¦1f‡‰>8räHNNŽŽŽÎŒ3ŒŒéÔ„‰®_¿N†£ÇŽÒßý¥óaÈ=E‹™_ÁÃ/ñöí[ÿÿ‹/ÒèÛ·ï€þ&9\¹|…N=þÜÆÖf℉cÆŒ©0EBÂÂwïÞáä´qÃFeeeÒ7htHE§jPks{ñôôd‰±Z·jM:•‚¥ð­ÿ´¶´´ä8ؾ}ûî=»éFPÉ177wœâ(&&FödCIÞ´qÓæ-›/]ºD%ÄØØØÍÕ‰!A¥.pE`BB‚ˆˆˆIoN±äpéò¥ÔÔÔßû‰ÒÁƒ7Elrww ¹wï]ÑÌÌlú´é,ësézö,888.>.??Ÿ É”ÉS:tèP>·nÝ ½{ï.éo*À£FŽ4h“pJΞ½{(ò²²²t#¨“F¥´‡® õöñ¾|ùòðáÃf8Q¶<~ò˜2œÉ"JB‹–-"##é>ª«©Oš4‰üÒ©ÐÕ¡›7o&}ܱSÉ«ÌE  8pÀ€”ð“§Nöï×5ï¢ÖŸ}\§á“®>uIä³çΚõ1#›œÜÜuëÖÑ!Ú6mÚPó­©¡ñ¥ÝÏÊ^²t Õ½"¢¢úúT37mÚTàëÙŒ9$8$***>¡D!èPÛJ.kж‚Ÿ¶¶l±¼ÿ>) ŸÅÞÓ§M‹OH çÇתÐUZšš‹½Or˜tåÊ?ÿ*LKKsvq~ñâÅäI“çÍÛ¹S'ެaøôéÓü… ¤edæ»Ï/3ÎMO‰cRebÂ#Ø{÷ïÞ½û,W·Ö­[—OEhØjIIÉà•A!AÁ‚‚sæÎýøñ£¢¢b@irÆÙÙmݼeÅŠüÔb_(ÕÂ>|Èä"‹ùºr±ÇÉÆ©Ø¢Â¢°ÕaÛ"·Q•1kÖ,òN§¼¼¼ôôôzöìC¿_~ù…[|óöK911qöìÙ$¶òòòfÏ™ÍñËD‰ïâJ Aö×_ÒÓÓ©»Â$ tH–têKªSÑsgÑ?ÿüC¢ŸÊϾ½ûþøÕ¹W¯]eN†¯ §.M?‹~+WØÙÙ8pà³ÿÇ}E§™N;wÞ¾mûªU$ˆ½{1§¨$Lt˜HQõ÷ó§"D· ”OZB|B“&M¨ű!ìããc?Þ~ß¾}³ÿ7;::zË–-Ì)Ò¦öìSߤºÏs_ºd©‚‚´éÓ8Qå@Ù;}Æô&ŠM—._¶œ"O s*,<,(8ˆnâŸ%ô°èéê1öoÞ¼¡rKΟ?ߢ|±8|äð¹sç–,‹ÚÕ¥K—¹óæ’§3¤¼­†Y‘ŽgJE³>dÉL¼¹špµü8jý©ÐÇüS³KèëëKII%&Þd.·ÈcQì…Ø©S½½S›KÍ eŽãððpEÅ_<=<§O›~ïþýeË+ Ö}¾{ûöí×­Yë·Ô—ZgÆe ÚV€ñãï‰?¡ÿ拈ˆ0ïSæÎ™Ãqp÷î½ÓgN󔉉ÉXÛ±d0j×N\Ll‰ïÒÇS Í#Àè˜hе÷l6›»wëÎ`aaáboom+W0ƒ…Ü4kÖlÎì9+ƒVþicmÖ§Ï!C´µ´« öÎ;‹=½ºvíZY*H$1cÉik üÈÑ#ƒ &¡I6²²²JJJüäF×â3¦ž2·0¯ÀYqã’QA³ŠŠÊÌ™37ŽŽŽÃ¬†Ý¾}»cÇŽ ºGâââœh|ö‡_ê´Ü¼u3$$„YNÑ­k·)S¦PSÍx¤ÞBdddófÍ‹*Y6G}•6zzË–-wvžéìêB6III+V¬$Ëœœœ”½¯.T,@‚’*Yf]ˆÍî=»/^¼hh`H€´©µµµ}é}a2Ám–[|B¼±‘1ˆ¹¹ùÁCÈдiÓ1cÆ,]º”B£òEq ð`ÞW«›+•2]£ûî·jÕŠ&3I¹2å¤G}úô¹xé"Is:ܱc•® •AÌ84õµÆÚ]³fMèªÐ24ê–ôïßßÀÀ€™$Sr(ŸÿóçÔ©S¹³‚.J=½ß~ûÍi†Ó—ü)•ÇŸ#V\òDx,ò`ÒB·øJÜ•ˆÍ¤ÑÉFRJ’ä2¥‚EÂ"|§ðÇQëO €>®ëKþå—_¨#óõ7®]»æ³Ø»sçÎt¨­­=ÆúÏCÿm5lãØ¸½±ÃĉŒ™º¡«C+ÛQÎÔÔtàï¿3µ´••ÕŠ•+È%5gÕm[ôñwbÈÐ/¯°MMLÜç¹—q@E™šy~‚2Ð7ø2¸Û©Ó0ú¸²oÞ¼IêQ±eY³v µî¡!«èÉ©ðŠ}LM;wêtðÐÁ>rd¸•ÕÄ yû‹¢"qLèr)'Ò‹”Šo­ÅJ!Á!œ®ñ.íÝÂ… 9ëó8cÉŒ±mÛ¶3#ß½{WÁò¾Š&oTæ÷öÛÔÍèØ¡#çl—.]˜Oæé`𨳳³-,,\\]——týÉ@‡™åÆïkE”teeeîU†ówoK¢Mr–Än¯ž½8§ºuëFõoBB‚Q;#Æò«$7Q$EHºŸBH¸š ßVŸJsÖÐУ†¹còþý{æe²´L˜T¨˜Ãkׯ1ƒÁœžáÆI¼rß_ºz—Î],X0fô˜ÁƒËËËî¡Ý-INo“Þeò™9j9´ÂIꜞ'-D‡öÎÇž¯°T0ãÄÄD OþXj÷©Èßá"T…2/loܸA–3ŒªuuõäädŽËöÿMÞ#¨'Ôϧš¼|˜mtõ8æ&Mx¸ÐÇõ‚åË8:»t\*++kkäÖËW®¼yó†š|*Ä|NÒ—”à˜¥¤¤¨š–žÆ;@ÊJJʆ–”œ|çnÉÄÍŒÌLf>S…Ð…FŽi5ÌjSDÄŽ;Ú¶£n.`›Tµm„ÄW;`ÈÈÈÒúvñ'Àµ‚!%%¥Œ®åÌE.¹²ì2rí«•Ëżôqe~I%˱å¸#&¯ _݉Œ÷ï&:0C_dH{÷®vBЏ•cÃD›éMqŸ¥¢E‡™™™œTSªL’©ä0#²?&1Ê}Ý·oß–IòÇYb,îQ6ÌÒA\æâC:•;ÊÕüü|’Aœ¥¢ þþþ{÷îݵk׆úõë7}Út*N™™%9/'_V—^”3aæKϪøËV'’’ÜgedeÒÒÒ8gËßJq1qJôñ§ŸÐØåqÝ_‚*ÏÔÔÔŽJ3P5K•ÛƒqÎÈs­Gâ^›Ä¬ªìè2对ð UP¯õqÛ¶mËÌëõöñ~þüŬYn­[µß½gOÄæ>‡I8ff«‚¼ïIÝfT2Ž"*"º*$$0pÅ’¥KÂBWó^ƒOIkk»/zß­Û·Ió¶JÞ¿Ï}H__MÿÛÅŸ@%û»qkâ¯Æ’yŒå«‚p*ñK·##3ƒÛYÖ‡,ê¿°{÷ö­‹sÉ›â7©©ß6Rñ@é—Ì(8Sÿ’$UÊÛ(ÙÔSFæ«ÞÅ×ê–9E‚µCûÎÎÎÜ×¥Ë$™‚úùûF”!—ú”——§.wTHDDDÊï}A–#FŒ°²²:}útàŠ@*Z~¾~R¥†¥8ÉáUHþËÆLâ>KΈ{ù ,‘e™Ü*ü@jë©]×ýã|%.ŽúÕFíÚ ”,ד’””\òUÇ›«9âwß*|¢ð¦¬ÏK¼yÓ¬¯Y;ÃvÌ3ð0é!Ÿo$Þøò€])ÙAGG‡w€zzmnÞºùy¥Úר¨–ü7ûÿ#UQæ;&BP7—Í–ål•\¿q3_óéÓ§Ïž=k¡ÓB tÃ,’;Ÿ>åñNùuå–Npm`Á¥q˘ËÛ°ÄXŸJ·´¬2œ26t;¨Öc^¸30·Œs˜”””——ÇϲÔׯé÷+BÊûªÐFWW—*èsçÎqN]¸p¡  €™\Q&ùe,ŒŒ“’“HD6ç‚‘ŒÜüòË/_-L(w¿¸lÚ·oýúuÎè5qöìYAAÁ 3„ìMMMGͬ¥kÕª•¨¨(y©°6–ÙMŒΞ;'''×¾}‡”””ð5á]»ta&óÐrÈÿó¿Ùÿ³²²’””"}Ö¹sç–-ZpÐsè4ÃÉg‰O§NMz›p_ŽD3 YÒrlö»´wÑÑ1¤{˜ýhª –÷(øboïæ}ú´ný:y…~¥}_A--­ÃGë¶n]XXÈÌd­îà(ŸƒÊŽsF—I¯GÇD“À¢Ü.Éažápû¥úŽ$òbïÅÓ¦Nc³Ù±±± 7wïÞè0q¸Õð3fü€Š¦0Ѧb3~Üx*QÔ1 ½K=–°ð°Î:·k×î‹.?\ê— À¡¿Ípš1bøEEEµ×®]³··/³Å[Û6mO:E‡ÏË@+ÊRNÈÆ‹‰‰qqu±µµ•—8xèàǃV•qLÚtËÖ-=º÷hÚ´é»wïþùçÒÐ̶–––‘Û")‚††¯_¿¦ *¾hñW)’pwwo?^FZ&jWûç˜?9¥‚ŠîÖ­[;tè@‚ªª*Ù“"§ ùÆy@µ"µpYYnݾ}ôèQI ‰… 0/©Êíоý¢E‹F¥©¡ñ)/ïÞ½{íÛ·7Ðׯ­«W·mÐÇ? 77·àà ¹îóÄÅÅMLL<y¸Îr«:a""A+V†¯]³{Ïz®ºuë6Íqj•’tX±•››KÒǨ];kkkæ]\RRb׮ݤì-Ì-&N˜ð9iÿmßQ̵ûÄçÜ.*bËÊ®^JÅ2(8ˆn(’"ÂÂeÒØ¥sçààË—/õìÑ“É.N_õß%¨ñ 0W‡‡-Y²$//¯UËVË–’öý:L qñô´t_?߬¬,êÂuíÚu’Ã$Æãä)lY6 ëíÛ·“–ýý·ßJ®Uþ¢_g ýŸê®^½:55U]]ÝËóUË–ÌÙn]»’Þ¶}[Äæ7We剉>| ¤cÿІ z€·ˆ|•’BÍ(÷öj< "%%…| V5³aμ¹Œ{555Ë!–C--9#ä×ÓÃ3bóæ]»w¥¥¥IKK·nÝÚÔÔ¤vSW¶üÄ…üj\r¡ÞbmcÓ§OûñãkB~~~RRÒƒ=yü¸þ§w×îÝ6nøçÐßµ¦†¦æýûutt*[ÖY?³ˆªf!A!?_ßz{³–úú>}ö4,t5Ÿî—,]úøÉãµ¥ßVõœ*ŸÐÈ)**"±›™™inañ!++·ªÍ%$%e¤¥=J=pî­u¨Ÿˆ ê9µõöªA¬ÌM¸š ¦¦ö£¢Z¯²Èa¢Ãä)“o$&ê×Þ{ÃZ.™Ì(9™öäÉ“ã'Žûûûc…8?$pÙlvzzzLLŒQûöª**<lA—))'Žc±ÈÄ1€>þI0ïgQ¡ý±#G¡Î®]æÎ›Û¥sU5U–(ëô™Ó±±±sfÏùQQ­WY¤­­=ß}þ›7oêïlÝâjdÚË—/]]]9ûC:RRRjêê)/_ž9qâCU«Ïe¤¥•”•UTU™ sªÕÔ6Ð6@ÿüà™¬C¨¥ýöíÛ¼¼õ±CÚ‘E Æµ„/ø9 6²à§ïß3»ðHJJ6ÂäSª«ÜQ¨‘g5xjú4ìž½¤´ôåK—dÙìÆ¦ÿ(½”ê+—.QðáhÌY@Ížø¹ÁüŠŸ_3»ðì/Ý…GEE¥ñ¤=%%åÔ©SUî(Ô˜³€š=5} 6ÕÚ…çg‚Ÿ…yPã§ A¦Z»ðüLð³£P#Ï"jüÔô1hð™Ï]x~²Tóÿ‚¸qfßòÔô1hð ÙC j=€,úèc €>úècjì €šP\\\PP—Ÿ/€/+:BP%**""ò?ê } €jCÊXXXXKGGRR¹ꎜœœ§’J†>@ýÇEEEíÚ}Ì-êQ‘¶ׯ^¥R÷Ý$2ô1ªAqqñ‡ÌÌ6úú¹99……ÈP§äçæjhiÝNL”“—ÿ>- P 322Ølö‡¬,äø9?Ÿ-+K¥NFVöû !C üô©°¨¨ËòÀwë•Q©ûnEú5ÊEEÈðS} €écŒècEÐÇú€Æô1ô1€>,YYY+ƒ‚®&äåå5úÏ1c¾ÃE=°|Ù¡Y,Vù³«ÃÃ%'ø|Ë%ÎÇÆzxz0æv†í–TZò£äत$ŠÕ¼¹ó:´o_ úø¿õy#GTQQY¹b%÷Ùôôts s'''k›o¿Ö‹/ìÆÙyyzuëÖ Ô5BÈ ‘´ô´‘£GqÛœ:}Úg‰·ÍΨ¨+qW\]\—xûôécZãk•¹Æ¨©ªjiiÕ,ztï¾kgHñøûóõ>~üHù0göl=]ÝZIKñX˜[\¼x‘z#Å\?qœþþÚ÷×âÚ@FFFSS³I“&Å Qò«ŒhÄÆÆ–i5ÏŸ?WÆMrr’¡¡!©Éo¼VùkÌàAƒkœ@näää诬¬,ŸŸKNN¶kg``P‹·€=ssóÐÕ¡§NŸúmÀoœ³ÿû—.§¤¤T+âFZZzMøLêøéxñâ¹×âÅ®..­ZµæXÞ¿oy`à ÔÔÔH¬ 4<6lܰcçN’Jæý,èp–«Û߇ÿ¹uë–@éX/ý]¾lùºõëîݻǸÑÔÐX·v]ff&ùº|ùò«×¯HYþÚ·ï8»qŒ¾œë>OXHØ{ñbÎ%ÆÚÙuïÞ}’ƒÃLgî·nÞBš/'7wÆ gÏ¥0UTT†ZZü}àWzôÑ£5k×Ü¿Ÿ-+Û³W¯ ãí™éËž>{,P:cÇÎÎÎ.ëׯ˜ôÛeùZXXðÈׯ_[ÛÚ„‡DEEÅ'Ä èLutlÚ´éÅ‹W‡‡}úô‰âC¿AƒMŸ:¼ìÝ·÷ÀÁƒ¯^½b³Ù¦&&”bbbdÿ2å¥ãÔ©6Ö6ÆåS«©©ééêýûï¿ú`lÒÓÓãâãœ7OŸ> \˜ ""bÒÛÄÅÅEFF†ì<¹-2tU¨·7Ý—áÇ;Íp¢Ü ½{ïnaa!…Þ%sH²>degg§¦¦Vy9níò«ù¯kÖ¬ÉÊÊ’’’¢Ã“§NÒ_333rCZy¢ÃDRºþ~þ999+W®¤Ü[¸‚ áÍ›7Î.Î-[¶œ?¾††F^^ÞôÓ{ôèèXPP@ZYZZšó†c ¡A‰m׮ݓ§OÂÃÃ?~ÌL€f8Ítš2eÊL§™ïß¿_ä±Èk±©p<8õu5õ¿þÚðçŸcf:Ï\»f-ÙÊLdä6:•ŸŸ} ð…¼¼<é0’¡JJJŒ„„„¨¨¨¸¸8džÌ,KLì‹ )-ߥ¾ŒYWW—ÔgbâÍ*õ±RS¥2!ÇÇÇ߸qÃÏ×·½qÉ*·íÛäoÛ9xÐ rF6EEE£Fп?™IžÞ¾s;>>®B}LbÎÎn\çNÈܤI“^={1.Ë'LMMþþ;š6mjeeµbå ’˜R¥¥ŒŒ Éߨ]»F akS²rŽRAî,Z˜˜˜H±mÕªÕº5kIÎVy¹"®ïçõ5ë»jÕª3gÎôë×ÿý÷_R®M𛍍(’ÅþÌœ꫸º¹Þ¹s§uëÖ”|’ò¿ýö›Ó '&’Ë>|èß¿?3ÄØØ˜¹s-rORá[¶l±¶¶¶··'ËŽ;Ò=r›åŸold̸4772x“cÆŒ¡î )o¦›êŸ>}j£§·lÙrgç™Î®.d“””´bÅJ²¤bó£b…õy)¤œHŠÕÀcâÍD111F3ôèÞ#'7÷ÁÇ›ö¥ÂŽAEY9-=½²Ðôôô8f’È<\VI]î H)’ú,ïìþýû$¹7‚èÒ¥ iÇë7n0‡šššÔ%¨òrÜ˧Hy·mÓößãÿ2Æ œ•y WôÛê³ÙlæÐÐа$îsƒ‡Zå„£¨¨Ø¥s— lܸ1--­Ì -Æ@ÚšâO} Î)J ÅŸ.ÊqÙ¶mÛ/a6Q¤¬ Xa•[ý„:l.®®7®_§è,±>¨sž<}¹mÛÍ›7I5R‹[PPйSçJÅŸ@¥MrVVv™ ìÒ‘Ñ296ÌXéUšléLÜ/×-ª¹)7 £ÂOÜeeg•ę˱   ¬Œlu{ eTKß¾}W‡­&Ysúôi:ejjÊ8 Ü~üøqo“ÞÜŽß¾}[ªzJüòË/ÜAùûûïÝ»w×®]6nèׯßôiÓedd¸õ1OFpsâO‡™™™-E7ˆs–1bm_½%ãý{‡‰Ì€1ÒÞ½û±ñ>Ð(ÈÉÍuqumÙ²åouuu‘‹rĨ @Ù] *yåhß2gß¿_"Oe¾Rœ|FŒ—|Å—399y&Î***™ù!Sæk¥^]}ܧOŸàà .œ>sºCû”KŒiii:tvv.“‡ÿÉc2„tkFŒaeeE:;pE ÅÓÏ×ï³>.uËô=ÒÒÒ8ñgFÊ]Fsº:?dðÏ»·o]œKæW¼ácî{]ƒù$bb¬OŸ>}eÃû”—W™û§Oždff·®©©I ¬°°ðñãÇœ³òòriéiœÃgÏžqÏ},²±‘Q^^^|BÇ&66VBB¢e‹ušÀÚ¢u«V’.]äØ\º|¹  Àð¿Ýß(gøYUæ-¹¢¢¢¡¡á™³gÌúšq쌓’“š4iÒœ f|—[¹–º ¦¦¦£G¾uëVñ)]âXWWWRRòܹsÇ$Ê)þFíŒÊ¸ü¬‰ËZ€zJêë×ôÃþÇ@ ÑÖÖ! »3j'É/mm탇Æ^ˆe³å4š7—––æv¯ªªÊb±:$+#““³oß>n ؾ}‡£ÇŽÑ¯[×®¯^¿Y½–«LÈmÛ¶íÖ­›Ÿ¿ß„ñö*ªª×®]ݽo¬-³8¯îÈ}–´¾@ÉŒŽ,FJV+dÊÛ¿6üEº¿¡áó/Öÿµ¾C‡Ÿgß¿?uú4KKKÇÉSªÔÇelÌÌÌBBBȾW¯^œ³VVV‡þ>4Ãiƈá#HCS̯]»foo_2\]nüøÕ«W[¶néѽGÓ¦Mß½{÷Ï?ÿ”i?n|øšp–‹2‡:3aáa;un×®]…cÒŸ ÅØ;@ø©éÚ¥ËPË¡Q»vEnÛæ4Éä㨑#I*-õõ%º2pE},++;oÎÜ¿6n˜1Ó©I“&¤ÕŒâââ? »>}RRR6oÙ¼bå %%%«aVl6›ã·|Èó繓ãM›ÒKg)8NqôÇu@Ω󱱞^ždع511‘ŸïK—ÁjØ0)IɽûöFn‹¤œékÖwü¸qœŒ’’’R®rߌҽ$ÊØ™ô6 êÔ±£¬´ ç,[VvõªÐðµk‚‚ƒrssåääH‹‹ “ B ô;ÕÇââéié¾~¾YYYrlv×®]'9Lâ8(þï¢#†—””صkwDDÝ) s‹‰&|vóµKŽ>æ¾ hx|ß¾àÕ¸8ä9ø$???))éAƒžpMP NÑÐÔ<°¿ŽŽ?;«|;?@M(Âtð“}  QÀ|¨¹BŽ9Šü©˜Î  € D0€O°¿ÐÇøjï³&Ô·ò} €j AaAÁW))’’’È ð ’–’’B¥Nð{©dècTG: IJK_¾tI–͆DßASI»ré•:*{ßç¢XŸ€êéc6›žž¾?&ƨ}û2ö vIII9uꔋE¥úõ)))5uõ”—/Ïœ8ñ!+ êii%eeUU*ußí¢ÐǨ‚‚‚rl6‹ÅRTTÌÍÍE†€ºCBBBJZZRBBð;.у>@M$²”¤¤„¸8¾꺤}·iÐÇøV¾¿pà{ldÐÇ@} ô1ÐÇ|Øß œìì»÷îege}ÞÃóçÛ˳tOuú'%-­««+))‰›@P‰8ÎÉILLìØ¥‹,›ýÓ'63##îÒ%CCHdú€Šyú䉉™™šºº„„ÄOŸØÜÜ\))©kññºzz¸õô1 ($¤¢ª*##ÓKɤÄ^¿z÷¨ ¬Ï‰R^@} @~¾Ý*dú€ZëóPŠ‹‹ òòóy½•d‰ŠŠˆˆ–nÄô1à4W .¸™˜¸w_4Z#@ÝAÊXXXXK[[RJŠ·Ëœìì§Ož’JF¾ècÀ÷Æ×wixXc˜;w2PG⸨¨HßÐ0óýûwoßòv,ÆbµÑ׿qíù‚D Ì?àçaë–-Ë—wéÚ•~d Cä  Ö)..þ™©¡©™‘žþñӧ⪠7äRCK‹|c}0h ×°‰Ù³*4ôðßÿ s,_¿~mmkã±È£G÷ît8ÙqJ÷nÝmmlªø«W¯œfΜåæÖ±cÇZŒó°áV8ÎήŒýêð°GÉÉþÕ °ÆyóòåËGŽNKKÓÒÒr˜4ÉÆÆ–svLL@€rò#55Õ3œ¬¹²÷ö­[óæÍ—––1b¤û|wKì;†Ç»¹¹êêêFFn£Ã¿ÿF‡ªªªf}ûâIÔ"………²lvêë×|z!‰ÜTI‰|ÉÈÊV9„<Á‚[·oEíØ)**ÊÃÙˆQ#©5©¬u«ðìD‡‰Ÿ<)ïØØØ8=-­²Sþ¾~LkËm/..~ f?ÿq¦¶8))I d>¶ ¿Ÿ¿Q»vUfÚ¦ˆM‡ÉÌÌ4jg´ÄLJŸ|æ‘@JEe¾Ž=°|Ù¡Y,Vù³Ëž>{ } ~*t´µUUUøqyêôéóçϹÏsgIÞ5kÖL¡‰Â÷‰§šªjÍöãö˜–ž6ÅÑqçöß>:2rÄpIIIWWægΜqqvóçŸtöìÙ³&Ø?ÞÛgI|\ÉP)i)KË¡têÝ»·–C-Û¶i³qÓ¦·oÞzxxdgg/[¾¼®sïñãGãÇSTTܾc'›Í&2ôïgA–t[55µð j fH¸¨¨¨ZƒÁäžlæí,===.>ŽÔç… z÷î]»1Ÿ1}FvN=z´aã†©ŽŽÊÊ%í£›ŸŸ_Ù)Žw/OA¡Ï/Þ………ªçÕ«BÃÂÃ=¹e+?_l‹‹‹Ü¶m’ƒƒž^î!°'åú|Å,·Y|º$qÌ}HúxY@Àw‹çàAƒ¿Ýclll­¼¼£þý¶mÛÕÔÕ…J«Â>ff·nßÚ±c£ƒƒVöìÙÓ×ÏŸÌ&&&¯^½ò]º”ÑÇ[6o),(ؼe+åž@éÇê&MrpvqQSS«ÓÜ£yûø¨««36dرsç|ww¬ÒÔP®õ0Ÿ8N¦¾þÑcÇj]0 ñ’C}2nxœêܹs…R•Ÿ8SkB²˜ùËOT“’“%%$¬†YÕzy´#(ÒÐÇkSSÓ ööŒÙÖÆ&ùQòÉ“§rrs455&:Ð#M§fº8ߺuK t™þnÝ\2uÕÚÖf‰O§Žxû%ÒÒÒBV­¢´¨¨hï^½úšõuqs=vä(ÿñä~ƒCf‹Õ¬Y³½{÷¥¥§‘Ô›4ÑAJZ:|MøÃ‡eedúõëgkcË<ÌÔW&EHõµy?‹’Ž«›……EPpðå+—ׯ]WÝ*7kÞœûPYY9>.N ôÅblìOOOΩ? Ú¸quÖµ´´Îž=Ó«W/Fý  Úðä‰ÖÕŸßR-444£¹Þô1èë”·€ú¬IbvëÚÕØÈxÞ|÷ôôtyyyΩCÿ•ú&•Z‡ ãíE¾–ª¼ÏÖ)<âÌ»u®¬U]è±(...??ŸiÎvGíb³Ù/^¼X·~ݵë× Z´h1Îήa»jÅsÏÞ½§NŸzúô)µÔÆFFS§ÊÉÉqÄñƒ‡ÂÂÂH—Óµô`cm]¡b~þüyØšð7nˆˆˆtïÖmÊä)œ&úÔ/²³³…„¾¼èÉÎÉæá8$tÕ€–PÉ^ÿ×zOÍ›"¤¤¤æÎ™ãµx±‚¼ü´©ÓÈ™¢¢âÛrK’+óK§yz¤¦¦:͘!+#{úÌi/ïÅߘ¨cÿþkllìííÍb‰® òZì%##;i’ƒž®^BBBÀòeT•˜ô6áöb9Ä2''—þÐUt(++Kß¼yCÚ=//¯ºú¸LwåJûöíÉüòÅ‹¼¼O$…9g™Þùƒ÷É’Tò!–œSbbbjjê<@)@WÉÇ©ó¿ÙTÃS~üÄ «aØS.\X´r@ÿþf}̨¹ ^’•ý¥±ã}¶Náç*©¬UêèsøÈáðÕaLs––ž6ÓÅY©©’ËLg–˜Ø‘#GæÌàç¯ÿß(?Ü¿ŸÚMÝ֭ߥ½  §¦Ÿ£ýüüGŽ¡¦¦výú­‘[%$ć[ /BFF†‹›«Š²ŠÇÂE¹sÃÃ×øúùy/^üó•mèãŸaëñþEYIÉqòÆ<Á~‚­ÝXRoFFFôÔQ‡R\\\II©º~®&ܽ{×ß×­@é(z~Þ¿ÿ-‰*,,tsqe¦ÒŽ9êsf1²WÏ^thaa½?æÚµëeô1uÙ©Z¡®wæÌžýáÃö·M½Ú™œœ¼vÝ:2gffÒ_îdLàééeÞ±Ù²éïÓQJÐÇUrôØQR™ÚÚÚd651=vìGknß¹£^gæPM]}¦óLŽGÞgk‹?rF£HÑ2KñxÄù[Zdiiiîæ,::úÓ§O¾K—2ƒµ]»tqœê±9¢ZkÓ9j˜¸{÷Þé3§9‡EEEööö½{•4²í Û¥¥½‹ÚµËj˜U™!ä蘘œœ/OO¦á£˜¿`Áƒ‡[¶h} ê$L…¸ ¤¥¥/Yº¤2Çzzzs“&MJ×´ñy¡ÊüR—TLLŒÇ :tLLLü–D5mÚ”#j™wUÜŸ‚¼Ÿ¢Sº”o‰IBBÂܹ$³çèëðh!*›¹Eg1© ð³ äZ ¬  àÄÉ“ ˜••ÅHÀè˜è¤¤$ªHÉ`cmÍqÜFOÚN5Ëãl-2dè—׃¦&&îóÜyÄù[ZÕò$Þ¼i ¯ÏÝœõèÑskäVÒµÜ/«ÕÈ~øðÛÆ€k(ºSÇN‡þþûí»w¿(*r»¹‘xƒâÌiÛ¶iK“““ A}ÄÐаÌþn<3³¾ªßŠø­à*ó›–ž^攳¯x]«Ü IIÉšEû[¸wïÞèQ#‡YY9»|–`—ÎÖâ®V3“t¶LC‡åó­Öyòä±ÓŒÞ>>Ü"þæÍÄùîîAÁÁšxLµ/k5´ËW.gddlŒ¤Çòè±cStt²³³óòòää¾´,‚‚‚Rÿ}·÷ÙZdyÀ2ŽeÚqþ–Vµ<¤¿••”¹mH¤’:ÏÍÍå3¥ééËW®¼yó¦°°„u™­è¸Y&béiieôqffæ“'O~ø;·eÚ»´Ÿ¯lC7Bkݯ¼œ|Q˜ýí¿êÁ˜ëãdž µ45í³|y ÇRUUUBBâÑ£GfKKfF²ŽŽÎ£GÉœSyyŸ^¼xÁ=Y¹ÎqН]»6jäÈÃGŽ2[X<þœ©BÄnü€º«yj1´£G¶mÛ–{w|²9~â¸Ãĉ$IÌ}øYFð1ÞgkŠ^™ý+xÄ™¿MÙøméäääÞg|5kñýû÷"""ü/­ñöñ~þüŬYn­[µß½gOÄæˆ2 7gй–¼BÙ ^¥¥¥Œ§MZF©ÿ|eßÏ_c‰}ÊË«Gmí?Þ¾s›cÃl…ñ’ ÆúôéS™*2%%¥A‘®jiÙ¥k×ÕaaÜo¯ÈlbbòÏ?slد¢¢ÒªU+2›õ1;{ö,§{pä𑼼<ÓºN¸¦¦Ö† ß¾};zÔÈŒRÈ@‡d‰Íu§ù‡wP™™™—._þmÀoí Ûq~Æ£ÚìÊ•+‚‚‚ZZZqqñ÷<Èû¯Áâ}¶îàçÚ½–±‘ÑÍ›7¹Eì…Ø¶mÚò?¹"ñæM³¾fCÇtø0éa×oÜà˜)þ¤ÈK§|pch`øèñ£&Mš4ãâ;¼#ýþ`ü|A[[ûࡃôȱÙr_ïnÆ›N:ikiûùùOšäÀ–e_¼téÚõk<Ü?ñü|l,ç°yéVKIÐÉÉÉÙµ“:¸222$[}ýüââwlÛ^­nzzúPË!$µÍ5ß»wǾk×nÕ™Î.ÿmîÜ9ü·iÓ¦%K—2“Œÿ´¶^½:t¬­£ãÔÔ7o<= <˜ÿí'¿³¾}—-[îì®­ NœxèÐÜysÇŒC÷Ÿ#‡“““J·áç-M­Øó±:t¥&øúõëÜgÉrÝúu¹¹9Í›5§üð‘#'–_<3ÔÒòÈÑ#nÿ›5Ìr(©äÌnܸa7vìÏ·Åô1øÂ¨‘#Ÿ={¶Ô×—ž½•+ªü(z„¼¼îСCÄæÍ>>>›#"””•-ò?Þžq@¢|ï¾è¹sfk+))ùǃ<½¼¾Û´¶±yöüY`éçú\\]ëzÓe@ã„ê|aAÁW))ÔXäææòãEBB"%%…|U¶^™e÷îÝË‹Zsó_ÿÚ°áǽ{÷žšî¸{Ïž–ìploÃqÆûlQeœ¹·3š2Õ‘™Œ7ÔjŸß—æFJJ*hÅʵëÖú/ ÈÏÏoÑ¢…ïR_Î×@øÁÍÍ-88h®û<ºk&&&ž‹<\g¹qÎêêêŽk¶&üÑ£Gl6ÛÆÚzØÐ vá Sõ­ [M·^^NÎØØ˜÷gÀj!¿ZúÉj—½ûöFDDÄDÇÔÿ¨>}ò¤ÿÀ~t¾ç,\¸€ ^^‹+l‡òòò<Ø\C¥P3ŠŠŠHìfffš[X|ÈÊÊ-ý 1/q,))#-}ìèQYYY•ší·À÷ãÇ N¸výz]QTÜå\¼Øù¨;Hà²Ùìôôô˜˜£öíUUTxL³ núË””Ç‹±Xä â@ƒF„û‚ù;uRUUe={æÂ… ÿ›5«Œæ;™R­/Qø±HII©©«§¼|yæÄ‰Uí!#-­¤¬¬¢ªZ{®o„GÓܘ[gècP;hijÅìßÿîíÛ¼ü|Ç)Žæ¿šã1€ŸAAA96›Åb)**V9YBBBJZZRBKª‡ i†>uÈ{{ú! ñHd)II qñ*w± —˜V h`u<’ 5ÂüœYô1ÐÇ”CŒÅ***j<é¥ÄŠý,›=ÐÇÔ> —bc Cb)™”XJ2î;PXŸ;¢,–”PìÙ³œ/dÿtiä,ÇËÏÏ—’’âÿËáô1ò1‘‘‘i )Çíxƒù@} ô1ÐÇ@} @í€ýP=r²³ïÞ»—•õùƒJÅÅÈ“ú‹`ÉG¢èŸ”´´®®®¤¤$²úµ*Žsr;vé"Ëf#7™q—.B"C 6yú䉉™™šºº„„r£‘››+%%u->^WO¹} €ZCPHHEUUFFYѰ [F7îúÕ«ÈŠ*Áú<T‰R¸wÐÇ@”»UàöAÐxÀú<8=êâ‚‚‚¼ü|^}kAA–¨¨ˆˆˆ`év’€>àç„”±°°°–¶¶¤”o—9ÙÙOŸ<),,$•Œ| ø9ÅqQQ‘¾¡aæû÷ïÞ¾åíXŒÅj£¯ãÚ5ò‰ ü|`þ1hìÈÌÔÐÔÌHOÿøéSqUr©¡¥E¾Š±ÊøéÀèhìfddȲ٩¯_óé…$rS%%ò%#+[ÙrÌþ˜U¡¡VÆMr˜Äm?×}ž‚¼ü,·YÕŠ¤×âÅiéi+Wp[=z4`ù²}{öJKKÓádÇ)Ý»u·µ±©n¼zõÊiæÌYnn;v¬ÅŒ6ÜjàïÇÙÙ•±_ö(99À? ºÖØ#•=¡Ü6âââbö×VøÜÅ•yT8Èb±øôNÕKÄæÍ—/_¦_ŽÍnÝZwô¨Q­ZµªÒcò£äà‡~úôiႽzöÚ¼eË?‡ÿy÷ÆX[ÛÐÕ«ÃW‡±ñ]h à3$\TTT­Á`rÏ 6óv¶wß¾¾f}[´hñ¢£­­ªªÂËS§OŸ?Î}ž;sHòºY³f M¾O†«©ªÖlw!n$¦8:îܾ| ^ž‚BŸß£ Õ‡rÎTJóÌóöíˆáÃIMM½rå õäùñ»2((//o©Ï’ü‚ü6zmâãã·lÝ2ÉÁ¡m›¶¤ÎéTófÍ%%%që€>€ß6©vÔÔÐÈ/(X´rUpÈwØï‚ÿ1iÇ܇¤—|¿AÙÁƒ»ÇØØXLnßNçÎ………ëU9'ž<}z÷Þ=Oîݺ36VÆñé799Ùn¬sø0)IRBÂj˜ÇŸ¯/î;ÐÇü0}Lâxú´ésæÎ‰ŽŽ¶´´¬ÐM\\Üæ­[’’’DEE;´oï0ÑAII©f—³¶±155`oϘmml’%Ÿ}J…ÜØÈhªãT999Òi;vî˜:uÚºõëž­Y»†~ƒ zóæ Õ0ùùùÌ“²sÇŽ« WÇîóÝS^½ZNÉ,IݱcË—µnÕ:(8øò•Ëë׮Ljô1Ðǵ¬ó>}"Ékjb²)bSÏ^½~QT,ã >!Á}Áü>¦¦ÖcþÌÎÉÙ¾c»³‹óšð5LûZ†¢¢¢¬¬,n›Ÿ>ñ¸zHèª, Yÿ×zOÍ›"¤¤¤æÎ™ãµx±‚¼ü´©ÓÈ™¢¢âÛr[vTæ—N-òôHMMuš1CVFöô™Ó^Þ‹¿1—Žýû¯±±±··7‹%º2(Èk±—ŒŒì¤Izºz Ë—‘@7émÂíÅrˆeNN.)R t(++‹Ò j‘û÷ïS‘ÓmÝú]Ú;RŠaááôÔ0§ž¿x±víÚiS§*«¨DGï[³víÞ½{£m``àçok7ÖÆÚÚüWsIIIêßFGÇ>r8|u9cËq»wžéú¸–õqaaý2yÊå+WBCWy,ò(ã`óæÍzzzsfnzŒ¬mmböÇXÿi]>´;wîXÊÿÕ••”'OaÌì'P«ùàÁ###jŒEEEÅÅÅy TWæ7ájÂÝ»wý}ýHÑ ”¾›vqs¥–õÛr©ÐÍÅ•Y-4zä¨ÿÍ™=bÄÈ^={Ñ¡……Eôþ˜k×®—ÑÇòòò$Ö…„„j<ÖÀçNæÇBÿÍ?¦Þ 3’ÊQÃÄÝ»÷¨È]KŒkËÌ^g7n÷ž=êÍš1’éÉúµï¯—._âq9uuõ¶mÛþ{ü8S¤ Î;÷ÇÀ?ÊÌ¿¢˜xyzzzy9LžÔ±CÇÁƒuéܥʴH•Bê`3¤¥¥+{R¨oLµSàŠÀÞ½{ïܹ³‰‚‚­-sjÎìÙ>|À>} ¨Á-P"¸ÆÙÙ…®^}>6¶G÷BjïÞ»;~ÜxŽ{99¹6mÚ\¿qÃúÏ BÓÔÔœ6u*·Í•+q;£vVvuRÞs“&MJ×´ñóÊüÞ¿_LLŒÇ :tLLLü–\jÚ´)§&áK[r-gTWHŸŽ²êˆ!C¿L|251á,Zå.Ÿ¤¹mZµlÅQ±¤>¿*® òééU×þýúeddP±O¸z•ÿµoßòδµ´7¬ÿ‹¤ù¾èèù ´7n¿hÑ"ÉÚ͵07?{öÌüó)>!AÁœÝx¤KAñÐǺ[ï5èAG ]ÕÞØ˜³F>''§¨¨¨Ì›ýôÙ³ ‘’’jgØŽÛæõ+^Ò•ŸuP\Äo+ó›–ž^æ”\©¢ýdËM&)³¸žÿhP]–,㌳K'geemÜzùÊ•7oÞÒCÊ *s(3ýIRRªZÕˆIïÞ«ÃVŸ>}zРA§OŸjÙ²e³fÍ*t),,lÖÇŒ~çΟóY²$2rëÄ +ë‡×KKËÙsæRLP€>àûécj€œœ¦Ï˜±9‚%&Æie©ý{ÿõàhúû÷N>®‚µîW^N¾ÌXZvvö7GSeü(Ú¶m[fÿ oïçÏ_ÌšåÖºUkqqñÝ{öÐcûuý¦+!!Ñ»Wï§NþöÛo±.ØZW½ayÏ= oݾ]áÕ322k™‚‚‚µëÖé¶n}ëÖ-Rát! >7ÜÈ8ú˜ª8µµ ¸/:úùóçœV¶a»‹/rµswîÜ1üoc¦ºCŒ%ö)/¯u´µ?~üxûÎmŽ ³Æ÷GLŒõ‰çòDjFâÍ›f}ÍèÙ$q,P²?ÚÃZ¿Dÿ~ýnß¾}êô©œœSSS~ª¦÷ïÙ²%9Hi\³8îÞ½Sã˜DnÛöúõkE톯 *™õÁØgee¥¤¤ 0€Æ ÆøÒÕiøãÇ?{î\rrr Æfœ³«‹Ÿ¿¿…¹yîÇÜ­[·JKKúcP]§T[[ûࡃ±bÙl9æÍù÷Ø©S'm-m??ÿI“¨µ¾xéÒµë×x¸þâùùØXÎaófÍ*{•\ý$è¶ØµÓØÈXFFFEEÔ ZšZ±çc;uè(**J¥÷úõëµ~ }}}55µ›6uìÐA¾¢JG޹|ù2iô&ŠŠssOœ:ùøñãI¥ó¡ÕÕÕwìÜAO)ø³çÎ^àêcW‹–ì™3sf“&Ml¬­ÏŸ?·"h¥ÇÂEtÊ×Ï/>!~ǶíX¢-?AAAaAÁW))ÔØð9xL.SRRÈWµÞ´JII•ùÖ´®®®¿ŸÿëÔ× =,[¦¬¬²2pÅwhFIMïR__OΈŸyåååÙ\£ù’¥KÝÌOK{Çûíð™3gèœßÉS§j+ ]»tj94j×.·ÿͺ}çŠ1¨-ÜÜÜdeeæºÏ›¿pANnŽg¹mgj…~©©©}+Z™'P²¿›fvvöÖm‘Þ>Þk×­£¾{àòÀöÆí™gpÑ‚…,kÊTÇqöã¯^»6oîÜD   À?ÀßØØ¸ŸE?:¤]œ]bcc?N‡JJMÄþ› @cÔWãâ  1STTDb733ÓÜÂâCVVnNo÷’’2ÒÒÇŽ•••UQQá,îiœìÝ·7"""&: €j=8›""víŒj ôé“'ýä|å4 òòò<Ø\CYÁ̯¸l6;===&&ƨ}{UÓ,^¦¤œ8~\ŒÅ"_\×®_WSSC)€Š‹‹ÿþû³>}0@ ô1õ)))5uõ”—/Ïœ8ñáëoÔ•GFZZIYYEU•ÙŠ¿±á¾`~çNTUUEEYgÏž¹páÂÿfÍB€^¦¼|ÿþ=‰ãש¯½FxÖÏH2£f¨Ö§ã€>à§BPPPŽÍf±XŠŠŠ¹¹¹¼KHHHIKKJH6ÊÉ´4µböï÷öm^~¾ŠŠŠãGó_ÍQ„à‡'Nnß±º—žª*ªõ3’ÐÄ@ðE"KIJJ”.Ñ«ÒecžV1ÁÞž~(0Ôë?ÿ¤òèc˜O UƒÏúàöýôzYô1ÐÇø6ÄX¬¢¢"äCC„nœ6®†>@í¢  p)6¶°°YѰ [F7Žn²¢J°>Õ@”Å’Š={VTT”±)F¦Ôc8Ëñòó󥤤DD ý PëêADDFFùаG&ð æW} ô1ÐÇ@} ô1µö?@ ';ûî½{ÙYYŸ·¸/þ鶺,ÙžþIIKëêêJJJâ¦Kµ‰ @PíZ>''11±c—.²löOŸØÌŒŒ¸K— ÑB[µ‰ @À/OŸ<113SSW—øé›››+%%u->^WO·ШªMT€ú~RQUm$J¥dRb¯_½ŠûhlÕ&*@À?XŸ;¥ ½ðÓW#¨ô1ÐÇT—Ÿo· $€: €>úèc@å/X0ßrÈàb¼C úàë»4<,ìܹsd@nPP°ÿ1?[·l \¾¼K×®d&C3õfÖ66È*@ «Ç°áV8ÎÎŽÛ2`YÀä¤5aá¼ýž>s:|ÍšðÕa쪾±yôèÑ€åË8Èb±ª½ŒŒŒQcFYTT4f_4ýýù2œ˜ì8¥{·î¶Õ¯Îjì‘nܸakcݦMÛmÛ·WèÀÅÙyË–Í'OÒ×7ø±{âøq77W]]ÝÈÈmt8ð÷ßèPUUÕ¬o_<æ v‰Ù³*4”1KHHhij <¸OŸ>üøÝ±éð‘#™™™F팖øø4”Z‹"Ìmã0qâp«áut¹°ðð½ûö2fªÙl¬«]¹5’ªYÛ¡÷ÇÄø''?RSS1Ãé»)TT€ vÁüŠoB±‰bófÍkåKîã'Ø?{ö¬¼=)ïè½ûZµjeddD††.Žy £­­ªªòÓÒÓFŽU[QÚ»wU²Lç¤BNž~ÔÑÑ¡$·lْ싊Š"6o>~â8%VVV¶m›6Ó¦N“——ç‘K|bmccjj:Á¾$–PÎ4kÖlïÞ}iéitã&Mt’–_þðáCY™~ýúÙÚØ2ÇㆨB$}lÞÏ¢D7ÓÝ·°°Ÿ8ÂñX¸¨º7ý×_ûÆì?бcÇ£GTè`þ|÷V­[üãú 544£cö—±Ô×7(o @­CµP‹-î޽˱ٵ{×þÞ¾}«®¦fg7®G÷îd¹ÐcQ\\ÕÆÌº;j›ÍæQ»–¯²* ™©lml’%Ÿs–ª…½ûö®´ÑkCÕGXxXÇŽä¶FFRýµ,  BÇT_gee}eÃõJ=##ƒd®Š² i¬Ü¹áák|ýü¼/.Î"Oª¹œfÌ Úðô™Ó^Þ_¹ZZÒ“2ÞnÜýÖ­_Ç–eS}jÔ®Ó '_?__?UUUqqq~è>ß}œÝ¸É“&Qôüüý—.'ïL¥<ÁüGSÈêjêÏž?SSSc¼¼{÷nÁÂ…Ú:Ú®Î.êÍš‘ËE‹ž>}:uŠ£œœÜö;fÏž½iãFæÛô?ÒÑÖ±:LXD„4½‡—疈͔„Ý{ö8x`ú´é*ÊʯS_S«F*¹Z¹Ä'Çþý×ØØØÛÛ›Å]䵨KFFvÒ$=]½„„ê–PûgÒÛ„Û‹åËœœÜS§O…†¬¢CŠÕ×”êšMJa±ÄH3]‚ògÿûÏœ=WáÐ2”—/•••óÖÈ­‘Û¶Ùµ#ýwöìO/Ïà `ÝÖ­©søÈáðÕaÌÊ»Þ(Señ™qºjÀ€TÏ“Ô^ÿ×zOÍ›"¤¤¤J&=Glß±”i¦ŒŒ÷""¢LmÉ£ä‡ô÷éÊ”I“böÇøúûQ?¡YiTkýŠÿ?Nvîì9t­ÿ»2h¥Fóæú¥€ .Ðá€þýÍú˜Q¼*$+;›ã±²Ln5ü|lìòÀå+–’³À-[¶jiÉä<éø’ÔU‡—/^äå}â–Â:::ô÷Áƒûu­€>®vcÇ^¼t18$ÄÖÆ&jWÔ,77ʺ¤¾5ýÊXjkk3†è˜˜œœ/OOf‰­ù >ŽT,Ußòòrd©¨¨¨¤¤ÄgêLMMþþ;J¬¬V¬\QPP@­iÇÄ›7}¼}:wêDg» tåxÉÌÌ´07Ÿä0‰9¼výúµk×|{ST™ôޱþóÐß[ F‡£F~™Å;Övì‚… ^¿~­¢¢òüÅsuuõ>¦¦d¯««ËQ¨|æRµ†"Ü\\™ÐFõ¿9³GŒÙ«g/:´°°ˆÞsíÚõ2úX^^ž2“D!žÑǤ³Ûèµqqva\ª©«ÏtžYe¦Ñ˜å6kò”ÉtDD„ï?x°6| óRÎrˆe‡´µ´«[1Ò_Ž s[ÓÓßãaÐÇõ‹õ?·YNÎ3ïܹӥsgêXWæ²oß¾Œlå°cçδ´4Æ|#ñ†žžg‡Š¶mÚÒßää¤2ÊïþýûbbbŒ8fèÔ¡cbb"·›ö\gU”•“’’jœº6º_^{5i¢@⛄Z“&MnÞºI ïT:ðYž?þÁ1߸qƒZ#ª9 ßäääò¾š6ýE tº-éã_ÍúΞ;gÎÜ9#FŒ062æLíâ3—ø‡t?'4fþwPÔÕáslƒšäZ/ZîóæŽ=5hÌü1xc ¾½—§£ùî?¸ÿñãÇ®]»qœµmÛöüùó†Pe½Á]eU2÷dª Jì ”Œ_>ÈËËëѽGÙ«ó] ”ÌFˆ¢çpÃú¿˜qb’Ô?ÿð!³¶®X¾*cÄ1'ii%u`qq15%6ÖÖ_Z==jŒøÉ´fêêvcÇnظ´²ý¸ñÔáÿ¬ DDª+Ž+„Y ‚Àú¸Þ¡««K5æ­[·,Kßñ¨wÚýŸ½³€«bùâ8Ýpii¥ÅVó©(*v+`‚€ŠØbØ ¢ï‰ EAI DPRš‹ôÿpW×õRÎ÷ùøìÎÎÎΜÙ=ó›¹³³zúÔÀÀ@RCŸ855uĨ‘ÔyŸò˜ÉËÏ'fˆ2TÝw!¢¢”=öÚš“Løûk5 OTT\ >·1͵¯_YYI¶p@UU•#‡àÔ||}îßðáã‡òòrêozzzî‡_¼|iý† —Ì›ojjʺ•XG„2ñ¥ùù~Ÿ±ÞÏp÷n`@@ÀÀ»ÄÈ113§„A‹æ[·.©©ï–-]ºÍÅ…ºÌ\LLôÆ º¹)**¡³CZûöƒ®úïÎàÇÁš¤c¿«×¬&½Puu5Dk0…fý“Ëj:e‘z^‘ðàë¹ßf|`}̇˜>œÚ‡¿¡ÏCoÜðINI.eÌg€Ô¾¤ÜWdv‰"ÂõÔgÝÔ/¸4hqQÑoÍ Ø‡˜UŠÑFŽåáéYSS3œRºƒÆ(H1£ìÄvýziuÀß»w¯_¿~RRRd`NNNpp°™™ío{ÍA}ÜæÇÅÅJ>~üø!·Cœß¿²À" z ‰W+¾9‚zÏ›˜¨Õ/n‹)N+v£K Ü"Ó:—Kça·CÔ@böó•+WµÂaEc¬ë%nÚ¸Q^N¾ÙǹE~ƒ…”ÙóŠ„„‚.=‹>°> ¼t¾¾íG»ióf«ñV+W®”Ñ9fì˜V¼"‹.®ÅÍÍMŒ[“oÔ4k´Ó§O srpž>sf‘ÝÏܲ²²üüü))ßÖS#~#ý5“³³²núûO˜8‘˜àÍ1ìBÏŸSäÇhÏë¸r³?ÞÙÉ)#3óâ¥K?–Žž®^Ê» y õ;Ä]UT>þü:î5Õ{²x ^žºßÂÊË˾ÔZšZNøË—Í—KON§—ÒéÔrïè˜u55 ssp4 éß¾}Û@k!)¹fÕjðìññq¬[©­áååa2cVvVëN^noïëçOþsc4uû÷pg¼rô»PRR>sælnnîdëI… `v!¡§CÚи³fκHx?uuu^^Þ´´tª+ÿºêÖyW‚¥LEMU•‹‹+äÙSÖ} +ÄÄÆÀß9³gƒ3qü1ã#ýëå6ºb#²™hXX8BÌî`ÅhЩ¾°|Ù2øççïI„WUU%§$·4'`„üûïm2$à¦?ôÔÔÔÚú&„>Õð#À¶þþþå `v!‘£=tsy7sÆL›… ÷8`jjúÓaÇYZÞ ¼³rõªñ–ãÀGEEÍš9“éÇtccce•;w-\¸€&B{Áâ%À_qss_õº:Áj;S&ëžõÏ圜œ•••Í.Å`bl¬®¦îºÃuÆ´é2²23À ~×ÊÐÀ°»‘‘£££µµµ’¢byEEBB‚‘‘‘®ŽŽ²²’Ÿ¿Pp°¬ŒL|BéúøþƒûOBžìß·ŸX™x¨ÅÐìÚµóˆû‘–®ö½Ïƒûœ:}Êý葲²21QQCCÃú‰€ زÅù°»;¸...p+ PciLQDDÄÁÞþì¹sËìÁm©v[L¢~_zŒåX?ßf{ð®Û·Ÿmzk}ªq–ã¼¼½/^º´lé2)))YÙò=-=mßÞ½°í°bÅ´éÓÑÇ!¿ðv6¶+V­„¾´åر i4Q_?ßkׯVPP˜lmý3Þ•„õ”™X¸`!M„vû¿½½½E„E†Ú´dp\þ7ý/^ºb×f¡¯o«\‘ü¾ôêµkXù¾tÿþýåÛ1ß ¨[ÿxî\_?¿fvüøñÊÊJ;Û/+~ØÚØÌ?ïØ±£ö’’R ’%ÄÅ[z'tïÞJçâââéáÑ©sgGG§9sæþ²ûP[[»¸¨èÅ‹Ĉìⳉü¸[{†Vh#ÀÁyxxøùú¡)þdÞ§¦5ªÝ|›°¶¶vóæM°±eËÖ‡m***þ PÀaAÚ£Û †¿ýúõkð(:@„EðûÒmHDd$ùmùE]^vö­[·¡é˜4¦Œõñocæ&ÆÆ²²²ÜÜ<ÁÁAOŸ>]½jÕ¯ÌñÕÖúP¿q ‚ ‚ >þE(+)ûùûÊÍ­¨¬”‘‘±³µ3bþ+3€:AAõñļ¹sáÚAAäï…M€tt:à·Oñs¯‚tX‚A}Œ ‚ ‚ ¨AAõ1‚ü¼<<555§¼PXÞö²Ø3‚ è6Ñ"¨¤õ ©®®î……bBaÅ[þY,A¿Ým¢DXׯ@::Ü<<‚!ÁÁäWmkÛ]É·Q*++¹¸ðÁG¤£¸Mt€êcù¡Ç€‹KXX¸#””«AŽé6Ñ"¬ƒó+AAõ1‚ ‚ ‚ >FAAÔÇ‚ ‚ ‚úAAAP#‚ ‚ êcAAA}Œ ‚ ‚ ¨AAõ1‚ ‚ ‚ü ðûÒò…ÚÚÚªªªŠÊJØj4;;77;;;Z AAP#H»”1''§²ŠŠ€ `Ó1饥ïSS«««A%£ÝAõ1‚´Oq\SS££§WTPð)7·éȼ<>¾¦cÚØÙZOšÄÉÉÙ¢ì…-Çóðô8áü•«W&N˜ØÒAä€ãÇHG‡®©©©m Ÿln:ñ>>oß¾ý+ì )!© ¯ ðóIÍ™77--­~8Fó½á£¦¦f``ÜÜÜxû!‚ ¨äʬÃJ‚JŠŠ222ûø+¦ahkkïܱãç5kƒÆŽòòòòññ ð ðððà-‡ ‚ü™àÛEòM·n‚•UUK/Y»n­¯¯¯¥¥eƒqÂÂÂ{æñãÇEEERRRÓ¦Lµ°°Ø½g·€€ ÙàÁn‡ÜÞ¥¦nÚ°ÑÔÔ”^VvòäÉàÇÁeeeZZZ‹ìAÿ„HäYh¨Ÿ¿¹üóç®]»B‘UUU!¼¦¦ÆÃÓóÞý{PXm-­Å‹‹‰‰5a%A¤#€ãÇòM·îøqEy9HÞœó8—Óвá/_nØ´QVFÆqÓæeK—¥¥§Û;Ø3E›`5TÝÞ}{‰KïÛ¿äݸFweeeÉ÷€L'‚Ì-).qÚì¸ÂÁ!22jÇÎ ¦ãèìô:îõ²¥K×®^inÙ¶õ;ÇÁÁáêê: ÿÛ]Ç·ò÷÷÷¾v  ôõ¡ °±kÇÎ žçAî³b¨ 7<~b§ëŽ>ìÙ·—¬‘›6Þ¿‚•˜èŸQ£ºtéBJHLpÚâÜ»wïU+Vª««CLG'ǧ!‹lí¶mÙÊÎξfÍÊDäwïRºªt]³jµ³ó–²ÏŸáDPÆ~íúõ›7çΙ»oÏ^[QQQPÉ-²‚ Ò.Áñcù¦[7Áêê:fkcûüÅ w÷ÃNŽNL<==555×®YKìL›1ÝÏßoÚÔiLbtÕÊU6¶6¾~~\\œ‰oÞœ8v¼±”x_ó†L***Ĥ@§Ó·8;Óh4ØåææÞ¸iÓ›·oU»u£Æùêe||½{³³}ѵ ãâçÌžCÆÕÒÒŠŒŠš6•9)y9¹Y3gž9{´òÜÙsdee»¨™™![I®\½š——GlGEG"'d ­¥ “““˜”_bb"///!Ž Œ»÷ˆŽŽ¦Æ1¢•éÜ9))é‡ ¥¥¡InKHˆƒø.,,”ˆ‰ááá1îÑ£þ)R’’¤8®+WTTÝ•î݉]( ßäääú'JKKÁßââbÐÇC›­Y·víºµ'N440$»,Z AA}Œ í]ζÙ[t£ÿèî~4%'ç—IMt:„ )¾Hdí}#/·9ÊÃÓN>|x×ê$ÝI_OŸ—&õqQQQjjêˆQ#©ò>å1%’—ŸOÌ4ø–1ƬÜïBDE){ìµ5?n=áï¯Ô0ꢨ¸ìÓàH¹„¤$uÊUYYùϘÑdt?Ä9„jõñõ¹ÿÁ‡Ê¿_rDOOÏýÐá‹—/­ß°äò‚yóMMMY·‚ ‚úAPÿ Ë–-[²t©‡§/ïQ(,ÌÉÉYPO™_Pá &rúô©ºS88OŸ9³ÈÎîÇr"$$dh`¸xÑ"j “FÄDئA—––2Åil‚ÇÐXJ‚‚‚ UY+— €€Àa·CÔ@b!ç+W®x^8o¿ÜÞ´W/(þÛ¤$»E߬§¢¢²iÃÆœÜÜÓgN;:;¹vWíÖE+!‚ í|?A¾éãÖ}?Šºšú?£Fùøú¦§§“úR_OÿÙ³gdœÂ¸¸8=]Ýú§GDDÜ X¾lüóó÷‹ˆŒü±2êéꥼK‘§ Roø¶«ŠÊçÏŸ_ǽ&CbccY¼/O] ¼¼üçkDKS Ò ù²ùrééÑéôR:Z.)©º©Ñ11êjjææÐ»›7¸µ”¤äšU«AOÇÇDZn%Aõ1‚ >þq} Ì™=‡F£Q'ÅΞ5+!1qç®]¯^½ y²ný:!!¡ÑÿŒf:‘^V¶gïÞ!fCzšôìÑ£lìÙ³‡þuq†1ÎÒ’ƒƒcåêU÷îÝÍ|ØÝ½¤¤„)𱱱вÊλ W ŒOŸ9Áâ%@Jrss_õºš˜˜ø¦ž½[þ¹¼ìsYeee³I™C¿Âu‡«¿¿ÿ‹°ð÷Áƒ Æ440ìndäèè=0æ³ÐPOOPÆpHYYémR””qÀ­€>7ȳ._¹Ø×¯!Ÿ.^€¬i2fB³h%A¤½‚ó+Ž;;;';{fF_k¢“ŸŸ?##ÎjÑAAÁ… îØ¹ƒ ÑÐÐØµs×Ùsg7;9rqqÈÛ¼isýßñ?jÒÎ֖صµ±™;Þ±cGìZZXHüàþ§NŸr?z +&*jhhXÿ› P®-[œAnwu…ŒõéÝ{Æ´éGŽeå"""öögÏ[î`?|øpÕn‹ÉC………ÖS&W1Ö›c9ÖÏÇ·™î;‡ëöí'Oô¼p¾´´TZZz.åuF¦ ;;9ƒ&ö¾æ——Ý uuõëÖ£˜:ejNn.±&†¾ž¾ËÖm¶_çWHHH@üÌÌL8]A^Œßñ‹VBAÚ­6x†V@:2555 v‹ŠŠÌ-,ŠKJÊèôfı€€°ÐÝÀ@‚222 á:‚•nøÜððððóõÃAi÷àø1ÒÑK£Ñòóóýüü ŒŒdedš˜<ÁÎÆö1#ãþ½{¼<FAAÔÇ‚ ‚ ‚úAAAP#‚ ‚ êcAAA}Œ ‚ ‚ ­ ~AØè¥¥ñ ¥%%_>×Ü'ôß ã³Þð¿ †††€€šAA}Œ ­*Žéôèèè={ŠÐhh¿ˆ¢Â°ÐP]==”È‚ êciMÞ§¦<¸‹œ???Zã/¢¬¬LPP0"<\CS­ ‚ >FVƒƒCFVVXXMñwUùêšAi]ðý<¤£ÃÏí€u‡ ‚ ¨AAõ1‚0«U`õ!‚ êcAAA}Œ ‚ ‚ ¨AAõ1‚ ‚ ‚ >FAAŸ‚ÓfÁ‚_v±ñ¬ètº¡5p÷žÝžçÏÿ3jTÓç> z´nýzó!CøøøšŽhcgk=i''çd2äiÈî½{Ž;æåíýðÑü¼|}}ýßR7™™™sçÍSVR’••mÝZ8uúÔù çÉüü|ÚZÚ¿ñ.×oIýüý–,] mÐ…‹®ß¸.((¨  ÐFMIk54`ÀV[¶nݶÝý>}ú0:zìØú ëcbċ˜ÿØ­¥¯¯×¹Sg|Æ[Ê_óýŠ‚üFÀùþgôœY³‰]ª ÕÒÖW×ÓÓŽŽ&wÃÂàÉKNN~öbÈ×±Œ˜Ø˜!ff-jªªªBCŸ>þ“-o``@ f2dÞ‚ù¾~~?¬©MIÛ54«V®j ;†OŸ8 ÿüùsî=JJKð!ýûôñë¸×ËííW®Xia^7ø_YY¹ÐÖFNNn‹“ó¤–žž~ôø±¨¨(..®Þ¦¦¶6¶DÏ)00p÷Þ=·nðððÀn^^ޡÇÁ‰pss÷ï×Ïl°™ÃÊwï’é$§¤?q<11‘&"Ò·_¿ysæÂ‰OBBvîÚIt+ë䯹9Ó^UUÍÞHÆvïÙ )tíÚíúëÙÙÙÒÒÒVã­FŽAMII¹êíþ‚‚‚Î:O2eРAÄ¡iÓ§Ãî›·oƒ‚ƒÊÊÊ444ÙÙ©(«4{4++kÚŒéÛ]\Œ{Û‡Üyyy…¿ o¢«£ 1!D:ͤY6lÜ‘™yüè1H¡ÎàwïîÝ·×íàAu5õÚÚÚ>>·233E„Eúõë·xÑ¢¦+ëâåKöË–?yâÝ»w4mÄðÓ§Mcggo° À¶ïÓÒtûÒ6„…y^8Ÿ””9énd´`þ‚N:‘æš1}zrJòƒéet%%%8ª«£C½wÿ¾—·×‡ ÿ­¬¤<{ölm-­ûîìî¾`Þ|Ïsà>À™B¿‚•*/¿aÓFYÇM›!fZzº½ƒ}qq1áûášÚÚ=»wŸ8v\ZJÊÉÙ©´´ÂÁ«‚Cs;t”—·×ª•+ÅÅž}øÇ¨¢òe0Õ×Ïnˆ-ÎÎÄŒ+èÕmÜ´ +ô¹©ñ_¾z÷=T0욘˜€PIGF‡bmm=|Ø0؇Â1<‹-yäè䤬¬<úŸÑææÄhh'éNàÜøøøHª‘p2Ð~M™6õÖíÛ ƒˆÐK‡°âüdrrò ‡Ä›åÐplÚ¼)??_LLŒzuy99hY@÷êÕ+,, "ëhkƒØr?r$..N[[;&&ZUUü'S¶!2x]Pºàå`·»‘Qvv6ˆ?Â'Cæa´#ÕÙ6Ö>Ö· ô Èíøø„GA¨ZvÖ¬Ù&ÆuØýúö#¹|õŠ–¦–ƒ½³‹œÜrûåMXþóçÏÐeçäøûû%%%mb¨|hw¼¼½'N˜H¼hÍ+´z›7GGGCžÓ?¤C»IŒ³jhhÔŸÑv Mý¤‹ E€'Mœ8iâ$¢jª««A¡6Ú=¨©1íÕ ªþÑ£G£Gf«[– HHHÈÐÀÐÏÏÿ[Ëëë[^^¾ÃÕ•ø©znv‹ì /±{×î’’’€[·&XYÁEë:]zúPOgÎ%N„.´Âã,-‰£º:: R.^º¸Õy >þm¨Á¬^¹j™ýrx’{š˜®¡A {D<–$W®^…î2±·,ù:±¨Brr“>†N-///¡½Œ»÷ NÞbmÚ·fKS“úÂY}ÆŽ³ü¢¤»tÙ¸aÑàB£펩©é·þž=Á&Ѐ>2Øl ˆ÷uk'NœòîÕõÏ44õi,æû÷ïAú÷êÙ‹<Ú£G&ô1Ñ¥é×·ïÿîß#ôñÝÿÝ5<˜©tp'€´¥¾±×§O_Hô@ZZHgÓ^¦Ô›í«>N|“X—ÊQ¸¯ž1ß”yùùL?¦ˆÖó5¢ß-ùÄ^[Ó‚·VÁ%-²³ƒn«‹ëö]{vƒÛ"T ˆˆ0s‡¯¶†Ø}zã†OrJ2ñÃJee%5?¿“#ÎÏÏgñèw‡¾/uÝHcj+¡"%%¥óu‚P}kÖ®ÕÓÓSUUýR) Ÿ(Zo ­f+‹Ÿ1ŽK þäç7­ét:<䤿þRí=e²ŠH=#• 9t?tØËÛëÈÑ#ÇŽ›8aôÚ[ê7éÈ€ò€ïRS7nܸ{÷žÃ‡Õ®<ü?cFSõ–ÅCîîÛˆ‰ @ƒ.‹Yëé¾y1mê™fllü2üå¨#³³³ ZP œ?8Lª£n¶˜¬´%%% ºž¿x‘““S]] ž™x5å›+þ¾˜D"Ђ®£Ž:Õö¦²w÷è?@«Dí3¯£Ñ(ÞÒ!4:´Pàí/^¾´~ÙóæS•t³üLCSŸÆbæ1ÚqêUˆ!í¦13²jõª999cbbˆW}˜ê…i±6¸ÜeeeÄ©•K•ÑpßÂßÕkV“w T+~£íõqPpp\\¨äãÇr;ôck+?%0ÝL71Ñ#gêÈÖŸôóÂ|Üô©Ó–;Ø'%'}™;ÑHšÐ+Ø´y³Õx«•+WJˆ‹Ã 7fìw³#˜¦:@çR§‹‹G¿/TÃYeÅ ,öªOœ<©¡®%züäqß>}Ù?T±1f“ÃÌ,V”‹”ÈÄs+Ö¤j'lwNÁ÷s…ó ¾oo­YHá‚…3¦Ïð¿éæìYnnžñãÆáCŽ H‹PRT1bøÙsçˆ lõÚ)AÃnßIgêÂü?Öøèëé^ gÛ£{"ÐÄØøÖí[‘Q‘Ьè44ùXŒ&Êäü©?]6+íã6—mééV­Z©®¦¥»výº‡§G³‰@{2š) 隸¶¶v}Á@(lhDÈv§¶¶¶¨¸ˆl TTT6mؘ“›{úÌiGg'÷ÃîL¿3·]CSßœ´G¢Œê(&‹PZJgå6’”¼ÿ>;;‡²²rý?Aþ0 ¸K¡µ%”1õŠÔ{CH°N+oÚ¸Q^Nží'oÖŽAët zܹ1&¡;edf^¼téÇÒÑÓÕKy—"!!!O¡~笫ŠÊçÏŸ_ǽ¦*T/ÁËS÷CôÑY‰L¼ÔE¡5-&¶njüœÙ³á¶/=?¦9øà݈w,Ø¿¹¤¥¥uëÚÅ£¬ð3¡—••åäè4Ájƒ‰·ÔTUáÙ yö´¥•õ*â¹ýøñc¯ÄoOMT8\}=ýgÏž‘!èwé5Ô04¸‰I'÷0† ÑŸœ’Œ:‚ ¬“Ÿ_ $$DˆcpYåß\ŸžN/¥Ó©®|«ì‡‘“““””üïÎNÒ`û‹ZÒׇ6%00ü°å9•®uΟêð©Ûp.¡¼¼âò3Øl08dBú¿MzË’TdgUN†3ôZzuu55(ïÓÐomAèóçàÌ™Úhs׬Z 9ŒgÌî`±­o•†¦Y@†BW:×%66†4èÞýûÿ»÷?ó!CêG040ˆ‰‰¡v9Bž†hkiC]+È×]1,<ìÛ_»ÔÕÕyyyÓÒÒ©÷­ü×; ©OëŒtsƒŽ×Ì3yxxl.Üà€©©)ë9’q––wï¬\½j¼å8ÐREÅÅQQQ³fÎdZÛØØ:U;wîZ¸pˆ×g¡¡‘¬Þ²Œèª×U€ìL™tX¹BGGn2~~÷©©ÞׯÁSD¾>ØÊJÊе½êåÕ«gό̌+W®2e¸´´të¶m£Fª(/?yꤸ˜øP ²BK òñãˆCî**(@w³náŽ+—í—/ËOŸ6íÉ“ÇûpÚì5;fôh/Æû|:Ú:EE…ÙÙÙS&Oiº²àY=áBMM­¢¢bhh裠G¶66ÄxCÓU0{Ö,û;wí²07/û\váÂHpô?£›5øˆ7oÞBç4zJJJttÔ,ÆR¦>¾>'NžÑ Ù Ò ïß¿w;tiçÎØÙØAR_Õ‚& àVxM¼¥¡aw##GGGkkk%EÅrƇ<ŒŒŒt™´Ö¢¢P_A£««ûòåˉ&6xЉ±‰’’’ëÎ æ/¥Ñž>{ϤVÿ»óŸ†ºzuu5({Ö3íZÈ“ãî=À]? ‰ŒŒdñÄI&nuÙväè‘~ýúçå}ºpñbƒÊ¾i@KLŸ>ãô™Ó sÁ«§øpêô©îÝ»E¸|劀·nªíÙ³§ ‚554[ÔÖÿpCÃ:ÐtŽ>â⥋BB‚ªÝT¡ƒqíúuVN433óòö®ÊÕ?:fô˜€[·Ö­_­0t þ½ó_rrò+6ìÒåË ` Cõæí?ÿo/ö L™<ÙÃÓ´µžž.Üçiéé|¼¼Ã)÷ÒÊúøþƒûOBžìß·Ÿx#j¨ÅÐìÚµóˆû¦éJÍB£Ñî?ûÑ#eeeb¢¢†††õûfËçÃîîÛ]]¡s ºgÆ´éGŽeå žìíÏž;·ÜÁn Õn‹©Gµ45úô©º¦¦S§N ÇßìOQ&&&3¦O÷¿éO¸K›…6>¾¾ÔcÇŒ….¾ëW(<Æ›7m¦¾¯ÐôQ»ì-2ÈÃGˆµ< ÌŸo9Ör×îº_ úßä`ï½…{÷îÁ³ºpÁBÝ·ÿû×ÛÛ[DXdè°¡¬TÖúuë?ž”œ$**:sÆ ¸+U ¡¡±k箳çÎnvr„²@S©?Ǧ>ââ‘×|ýêÞí•––¶¶ž¼°°œ˜\—.«W­2lFµž4)--ÍuÇ#öí!åìäìáéé}Í;//vÕÕÕðóÙ0Ðׇö”|óï«6×××kÌùoÛ²õÐáÃàÀ‰·»Ö­­ûŒ`¿lùÞýûV­Y-/'œ²@[³¬\¹ÒÍíຠë¡Ô pvtZ±j%+'öïßQ¾c ¶€ºõçÎõõóûkX/( pÃç4¬Ðj@uÌ™ýåë-`üÌÌL(¾‚¼´ÝêǵQCÓ" me«[¨Î³nlMÍ¥‹—lØ´±Ù³T”U W#þõW&¡å=qòÄ®=»+++¡à;\w ÿ+Ù]¸x±þ±Îöm.¶‹ìÈsARCZÉkׯA+¯  0ÙÚÿF•Õ«°°vP x„<<<ü|ýþÀ¼M›>}РAsçÌù£©Aˆ¹Ü¸ÕÒÒï:JM6jTƒËã#8ÿ((*¢)ùÃIJJ²±³=â~ä~]G~=íäÕňÈÈ.]ºü±Ù«mò›ïµ­ñEø?Ð mQ.AùK… ;;»ì÷oº#,\i¾7lÚhbl,++ËÍÍôôéÓÕ«VuäŠü[ b>”yju‹>‚ ‚ 8õ[:’±ã,±ÕC}܆(+)ûùûÊÍ­¨¬”‘‘±³µ3bÞ‘+òo1úA¤}C´tÿ»÷???¿?Òét11±¾}úΙ=›¿åo+"¿…v2ÿA~œü÷‚óA¶?‚`'HÇêCAÔÇ‚ ‚ ‚úAAAP#HSðòðß÷Fþ. âxqâ8‚ ‚úAZqqñÐêêj4ÅßTTœ8~Aim¸ÐH‡›‡Gƒ#$8˜üÚ~×äO†|¯²²RPP‹ ‚ ‚úAZý1àâF;ü]ðññ¡A¶çW ‚ ‚ êcAAA}Œ ‚ ‚ ¨AAõ1‚ ‚ ‚ >FAAÔÇ‚ ‚ Ò:àúÇÂF/-OH(-)ùòeÚv÷…öº¯jÀÿ‚BBXé‚ ‚úAÇtzTt´a÷îá!ÅÅůÂÃõôôP"#òóÔÖÖVUUUTV¶Ãa…V‡››‹‹‹úAþ&Þ§¦öé×O¶K~~þv_ز²2PƱQQššXõ‚ü  Œ999•»vÅþvÐéô÷ïÞUWWƒJFk >F¿§{ÏÁÑYF¦ƒ|_Š …}ƒõŽ ÈOŠãšš]}ýÏeu Aƒ›‹K[W7òÕ+°JdÔÇò×ÀÏË‹ Â"µµµÅEEZ::etzUu5¤ *«ªjËÊ••_GG‹Š‰áD ÔÇ‚ ‚´Cª«« i4ZqI Z£y‰\YI‹ ‹ˆà2êcùK耯•à›4‚ü” ©ý\^^]SS‹Î„ÅEM X Í…úAAö.”kjÐêcAA¯úDÔÇ‚ü„„„|ÊÍýgôh4‚ ¨õ1‚tt^<El›˜ Ai;jP#¨ùÉ‹‹{ùò¥ŒŒ lư°&~A6ÇÔÇŽÔ÷ïc_¿¦†prr57oâ”ô¢¢£‡YXpppP·ËÊÊG—––$&.>tØ0Øõóóƒ]Èž¼¼<>ÎÒvdddøùû=ñ"''¾”¤”¡¡ádkkqqñ?-«YYYÓfLßîâbÜø]êã»w÷îÝ{åÊUQQÑVIÐÜ|ˆ••ÕÂ…6xŸ£>F¾£»‘¹š÷ßµ¬÷çÏŸŸ=.(  ¡®.»´´4÷Ó'råÅ à`###!AÁ6º:Ñ0äååuîÜ™ÉÉÍfggS…,ˆæ.²²°ÁÇË ™aeaHÊCBÌ jkÂ…@¬¢\Hìkk÷áÇ»wïjëèôéÝÚ›   .nînݺýÆê.**ºÈÏÏ?bÄè AløÜ¸V&ˆˆˆà³Œ mAèóÐíÛ·‹ÐhÇ “““/+£''§„…‡Í3§#ÿ·¯_áêꪪ¦j5ފ؅Ή²’2?_ke¬–—é@}Œ0!-%õ—~í&+;»ªªÊ¸Gnnn"Dõ«€+)-…mzu» Òòòó©úXJR2;'„;_]6JJ***$¢SLLÌÄØ˜Årýšå{Ë?¹©¤¬\ÿPÄ«W]ºtéÛ·/lw‘“+¥ÓÃ^¼ø½ú”’êÝ»·Ð—*>bDHH>ÅÒfn6k»««¶¶ŽãæÍD¿´£ñ{Ç¡ RUU%³¡§§çîîÞÊ«m*µÒ·lݺÂÁAMM LLLØ»oßæM›ºt‘ÃÇõq"åÝ»ŒÌLwÚšš¬LZ¨ª¬|ùê1ŒÚIZZKS“T®M$XZZŸ˜øéÓ'x>uuthßVTV>}öLP@€:Ô Ô0ú»õÅ}VVVãý­ à`ø+×¥‹ž®.q¡×ññyyyÈž¦†‘½ô’’“µµ´â ‡¼<þ’ÉŠŠ¢¢¢Ý»CHdÆ/þp-8”1Û÷SSØãÊ™ââb°ƒ’¢"Ç×R$$&&§¤€)n3f>@Î!ÿä!HÜ¥°°°†ºº8#Ùºb>~ bÝÈа¥µLêøúíAFFF/SS2DEEåul,ñ5©ßuOŠˆˆŒ®·`…¤¤äh\ÅAÚ ??ÿêêê5«W7&މù ^W®zy{ÿûß¿òrr‡Ü3¼rõêóçÏ3³2áÉbf6{Ölp†K–-'¿c»+yúÙsç||}¼¯zAqúÌé·oßÂåddd,ÇZ:”pG7||ndffŠ‹ôë×oñ¢Eþ,4ÔÏß/)) úù]»vµµ±Y?{ô²²“'O?.++ÓÒÒZd·ü-„Ìøh·hÑôiÓÇ×"}ìëëëáé‘­¨ ¸déo/o MóÀ¡>}û@6¦M›FÄ„8#GÜ·o_¿¾ý`ò‘Àñª«©Û;ØkjÔMZg;zÌèsgÏyž÷ åää444\¹beçÎ?|ø`cké¸îp…`?ÿ€€ç-ÎO?¶c’õ¤äädjö=|$ ÀÆXäçè±£pTTTtܸqsfÏ!ÛJ¸Tœ¢¢ââE‹¹¸¸ò¸Q}ÌÁÉ¿tÙ²³gÎãAP° &…C8?õqÇ”Lç΢4Úçòò˜ØXPŠ_§¥6Al\èBxäètzBBBde%èŦ,// Ϲ¨Už‚‚~~jšà+ÃÂÃA›0Ia)))P´Q11:ZZTùú[W[$rOccðàný þv»VUWÇÅÇGFE‘Ùƒ C¨vˆð.5¶ÁY+*(€ -ûüD›7p¦òŠ‹‹ƒèÁ þ%÷Ó'ÈhVI ‰Rçç‹ ×ÖPêçaaÐl€¨ç‚t9¨^8Ò„dû0ä)Y®´ôt1QQè<€’~“”ôòåËÔùµÚZð¶„æn) Þ†ô1dÌNí¥Ý v~£>Fä×׸‡q³þ®=»ÁÇ‚r%b‚GJNNš8q"x¨èè“§N‚®1|İ¡Ãܹååå‘—=êÛ§/xéuë×õ41™µekeUUBB¼Ð—©qç<<._¹ *VGG·°°€‹ë‹;}÷.¥«JW«qã9¹¸ŽŸ8î´Åù¼‡'“'÷èèäøþýûE¶vàÄ._½²fÍšsgÏòóó——”––‚ôl~h•¢ÿ‚‚ƒ\¶»Œ;ÖÂÜ4âÎ;¡' ¡¡AÆ¡ Í/_‡f“Þ&©ª©N™2üöƒV¯^íëã &Ž.[¾ÌÖÖvù²åàf!Ï[¶nq?ìýÿ#îGƲ{ذaœ 1JÄ'6:TUYEì®Z½ ú|||°ú{Ô¨QàÛ¤·nnnДL›:(Âv×í£G†º¨+®`ЦÇåºÈ>}fêÔ)Ëí—Ÿ8~B`#??ÿâÅKp¨²²ÔÇíPBÔùÇ„¡ªax\A®±’(`5F^B\žäˆÈÈb}Œ_ÃKÄ(d —‰ !;IK39¦WU••½zõ"d.!AA}==PÛÄëkJŠŠ„ÄïÃÃêñÇÿUm§¾²¸»‘q!(&Èî¢"BÂ… 焈 Çàhºª¨À.¤ÐEV$oýòB1áDÁÒRR¹¹¹ Ž!“ ÚAý×ÔÔÀ%à,c¥& Ô𷇑!ARßø8ÄËÃìŒëRO”AL50èñcèr@OBúõéSß8¬Â:ããGŠòr!!!C†} ƒ£Ü”.a4ÐÓø¼ H‡";'Ü/¹ bˆô¼¼¼d翤¸øàƒ¤<²Ãu± òñᣇÑÑ1  xôØÑûX‡Þ¼}ûáÇ¥K–@£Ýò!fC´µµ©íHØkׯMœ0aÞÜyL³ždMnÏœ1sÓæMYYY2ßûÛȨ¨ˆˆ—­ÛL¯>ƒ‹›2mê­Û·áêjjj'Ÿèòõ×9õñ¹sçôõõ×­]GìÊ+ÈÏŸ?ÿ›&®ýn¢UÈÂÆŒ3ÈtÌ_°båŠ?Bˆ£æææ–c-ëÁN¦N™ L æ%ÆkEDDˆ FZß’•”øòBüµk×ÒÒÒ.^¼H:qò˜}Ãú °khh˜‘‘qöìÙÉÖ“¡‚ ºººÄ¡ŠÐÐ"hkiíÙ³×Þ~¹Ã ‡:­Ÿ”´ÿ¤ÓéøŒ >n·þïß®ŒŒa½qbj,vÉ_üÙêÞ!¨{n¡o-üu¶hƒ BÎjpò;{\||AaaŸÞ½yê Á€úm Ú÷=ø†ôtee uõc~ÊË%/$Æ-..&GIÉ ð Ü\\ÔÑShÊ’‘‰ºÎ:/o>Cçäæ*+)ÅÊX€ŸhƒïwƒY ÔdÓêV”F«nòõÐâd7†Îd–˜”4ë˜ô쩨¤Ý ðŒu“R""²²³qº‚ $UUUÔî®ß¸~úÌb{ÖÌYS§L!¶Aû6ñ+–´´48[Øè×·ßÿîýÐÇ=„N¾¡A]Ï¿{÷î.®Û'XYARäÊ oÞ¼qÖ§wŸ¦3)--Eøs&}n¶û×ß i4šœœ9!A‰á±›¥æ«g?™˜˜8oÞ<2D[KZÆ»m5 y\[S·YC=‘<Êdº¡¢ÂÈ0q:d4° lçååIJJÖO®A$N†€Î>ì~ØÖÖVVF¡Ê àsæÌ!#èéêt†hp9(Âܹs+Bc@ïÅÂÂÂaÅŠ}{÷Â.lÀnQa!> ¨Û3½LLH÷GÈG¯o“’rrrÊ>&:©,þ|O]œ¡n”ih"ÁŠÊJZ#ò®¨¸Ä1DÿÈßÐ4ò¢]UT@'¾y“”œ :RJJª~´ÊŠŠ’ÒÒÿ©ÔQ¦YL M4Ö·gLA..)¤ˆ.t rssá/1ã¢þY™ê¦^½ºÉÑYj‚¨¯ŸŸõEc@lw‘“/ùøñcûÄDÃJJ—€Qþ5 ç5t*>|Ø»woIÊ‚`çâúÒ€VËÊúöûáàAƒ‰Ç×oØ@&)õÝÊž©ïS/^ºSÈðá ØLŒ¿,^9lØÐ•«V½KMURT|øèÑ ƒ‡¶ÕyËÍ€›>¾¾ç/\bf¶pÁB!!¡"†ª®¿¤éãësÿþƒ?€;m̂ӀÖçŸ1£©r_¬…Ë¢‘‰ï[‹ÒD©—«{]˜:9² Z™íë@/¨OooïÀ»iiißÚÚo£ËàÁ˜ž«««¿Í¦ NÛ`ûnXþº¸¸¨©©Y·"Bˆ rgΜ9wî5ÁºVIXŠ &*ÖT¡° `ÁüÄ€1lä}ú„OêãvŽ˜˜Ó¼ÞW¥tºž®®(ÆÉÉ™òîHOV’ª¬ªú¦¨*+áy#”V rsqU444ËÆÇícjÙ·w獵@ÔTUÁçæ4¨¹¸¹A:k}?‡¸¾èl) ãïüAIIÉ (((¨bLámpA7¸.Ó|³#ô¿` †îß ­d»°¨Hžâ =ý{ïÕÜœœoß¶7ŽXšØÅÙoÒvèêè> }V÷®ÙK3 üsc§ÐËÊV¬PUUݾÍENNœÉ&ÇÍĨ'c,SVFöÁƒ½{›fee™BŽŒ³g9Ö2øñãÃî‡Áÿlqrd,ÐY÷úÊ÷ÃW®\ñ¼pÞ~¹½i¯^à Þ&%Ù-²«Ÿ!!AÃn‡¨|¶4­!)ÈdaQ!UÈ‚'Å+xiª-È/ ¥íùóçÏœ=³fõš>}ú@K‘ø&qΜ9µ_aºU3Mb&¶©úøúõë¯ã^{zx’)ðóóCíL:uØÐaÔ‚tîÜ™‡1Z6Ƹ{Óó+H>åæ:Ø×ͯÈaaÞ6òçÃ&h)ĬYb1Ñgõļ˜%ŸñM“/à 55…›€k«nÉR”eeeõ1ZÄÇÁ¿CþB«ö.%…<”œ’ •XCcá¿ 0š¹…ööíÛå `v!¤3f4tDݸ³þƒÕûÔTð¬&())8G÷îÝ;jWßÂÂâñ“Ç!!O!‚ ã5êÑþýúM°²Š‹‹cc¼ )„<{Êt‰è˜u55 ssКpÊÛ·ỏžžN/¥Óå)(+Vz×TÚµk×ÐÐP22Y—Â×a`pøÄBL±±±¤´ˆŒÐP×6l1Œ’˜ø-e¶o ¸~”,ð¹üsí÷‡‰MpÚGŽY¸p¡¬¬,yâkkk'&&*|1ÄT„øøøºæƒrõ¦ÉÎÊ‚ ‡å¯Ç[ <ÀYÙÙ ò@¨ÁÆ'ŠêmšÌ¬,x%%%‰å ¤¥¤ˆÉÇM$þ1-=ýù‹ÊÊÊðTƒWçEû }}-­W‘‘.óu¥a͵ŒyÃpQPKïRSAã‚k%¥¤¨()Ç…8JŠŠééé¡ÏŸÃA%ƒSƒl€óåþ9‰,( 9„ŽeÞ6¡# \o¨®ÔŠŠÛð—/¡m·R÷ºŹ€Ú«ªªJJN–”€ì‹õ4ểŸ<àçïÛ§OK3óæM°F«ó³>ÄÄÄèêêò1¦»ùùú>yüXIY9++ëullÆZÈ¿hÛúõïôèÑÿþ »ùyyý Àç!HÛ¡®¦>Þ¼'O‚2dˆLg™êšêÌ̬*ʯ…L€VŸ|ëÖ-aaЦ>>>L2ô±çyÏ»ÿ»;fô"œÌå+—{õ2…VãSÞ§À»w‰õ í3z´——lëhëfggO™!¶̉¡aw##GGGkkkðºå FFFº:: -YliiigcÛ¬>&·'Ož ©8x`àÀyŸòÎyœãçç'_{ôèqçÎþýú+(*¼~ýúü…ó¤WvxðàA—.]b_ÇúÜð!1³Õ[øí­€[ššÐÓ000 ã×ÔÔlwÝ.+#Û§wŸŒŒ â\h¡%?o¾½ƒ=duðàÁ‚‚‚`´÷ï߃Œ†`½ÍŽ›‰"€š÷8çM ‹ãÇê㎎¾®nLlì‹ðpNNN¤Ý Ÿ=ÞìY GM{õ"VF#×?n6A~>>Óž=ã¢cbØ¡:wêÄ”²ŒŒLvN¤ J£QßEe ~¼H^q Õ®]‰.277áŸfeÉËÉÑ ÀAöâ_ÇÅAü:/!ñcË¢1!..xHj Ø…<‹72à ’Ú¸{w(uXx8äDQAbæäæG¡…Ùš’’ò6)IW[»i} ¦6§1¤¥¥ccbJKK¡^@%ƒ»Týúå?8d1tè‹çÏÁ˃{íejJ4W¿MMÍ’ââ—/_Â6´sšÀW¯¤}3Áj‚j7Õë>7.]¾\\\ va éÙ`|èá¯_»îôÙ3K—/“˜8a¢¡¡AXX8AJRÞððpPo_~þ‚‚‚}û÷AúàØMŒMæÍKZ¸`!M„vû¿½½½E„E†«[yꔩà0÷Ø2]_Oßeë6Û†æW€{tvröðôô¾æ——틺ºúÀˆL‚g«ßÜ4 Ž)¿æ 0ðÓ’¥^^WýüülmlwíÞEƱY°ò³a㆒’5UÕë7¬]¿®–ñÎÞŒiÓs²³wîÚ @µïܱcîüyÄÄäÚ¯oàÕR^dc|·Y¹bÅ®]»–-_W<{úL-1­¹¦&''çÕ«W°=qÒD2‡gÏ)++èëïß·ïÌ™³[·me´)ÒÆ %R8`À²¥Ë®z]õõõ….\pýú ¶Vù~*ì¿ öWaah¤#ó>5u°…Åï}»®u!¾™×»wïVTTÜ T`|A?G'':½t÷®Ýl+++“’’þ=:•29¤>cÇYŽ=fö¬YX§ŠJJ7ýý»víÊýÓ‘_Ž#H{£1eŒ ÈŸONNÎóÏW¯\õW䶦¹aQƲn8tŠ >FA¤å¼}û¶¤´ôô™Ór]º 0à¯ÈsóskÙpò.‚úAAáÔ™Ó111ÚZÚÖ­o•×?A}Œ ‚ 1;¶»¶³]¿v«ùKÁ*Òáiûo‹`‘AO‚¶BP#‚ Ò^Å;';{fFÆ­žÙÑ+edd€ÅØQ%£>FA¤}J!¡ç¡¡"4JäfÅ1XéEh¨ãË\h¿œŒttxyxj~~í÷¿(,o;ZìAߢi4Z~~¾¿ŸŸ‘‘ŒŒ Ú¤1222>|^,†úõ1‚ü5ˆ‹‹¿ 315åääl÷…­®®†ÂB‘±Þù»ÈÉe|ütÿ~qI ¤1„…„:uî,#+ Ck >F¿nAްÐPò³Fío­NrÊ[ee%øh..|ðù9¯ÂÎ.J£ñððHJJ–••¡AƒŸŸ_PHH€Ÿ'£>F¿í1àâî%åããÃêF¤µ$² €?~¤i+á´ ÔÇ‚ ‚t Pü!íóÆF ‚ ‚ êcAAA}Œ ‚ ‚ ¨AAõ1‚ ‚ ‚ >FAAÔÇ‚ ‚ Ò*àúÇ‚ ‚üµµµUUU••lø‰agçáææââÂç¡>FA¤ýʘ““S¹kW´FcÐéô÷ïÞUWWƒJFk >FA¤=‹ãšš]}ýÏeu Aƒ›‹K[W7òÕ+°JdÔÇ‚ ‚´Ojkk‹‹Š´ttÊèôªêj4HTVUÕ–•)*+¿ŽŽÉ¨Ai‡TWWÒh´â’´Fó¹²’&"Á!dÔÇ‚ ‚´Cjkk?——W×ÔÔâky,ö(jjÀbh.ÔÇ‚ ‚´w¡\SƒF@P#H»vô¬,T„‹õ ‚PÜ&A}Œ í–/ ©¨ 6“^Zú>5ëAA}Œ >Fö,ŽkjjtôôŠ >åæ6™—‡GKG'*"ëA¤ƒSƒúA}Œ ír¡¢ÂüüòŠŠfã×½c‘Ÿ‹õ ‚àø1‚úAÚ'ÄBE"4ZvV‹§€D–îÔ©éÅzüüý»»Û<<<ÒÒÒÆÆÆ­&HJJ²r‰’’’¾|õ²¢¢b²õä©S¦üXévïÙý>-íÐA·fcR3LÀÇÇwÓÏ¿‰SwïÝsëfº••5mÆôí..Æ=Œ[¥Ž >~<°oÓÑ F<<=Ÿ?ž—Ÿ'J£©«kL¶¶VSSûwQÀ­€ƒnnÞW½DEE‰˜˜û“&Nš7w.ÍÉÙ)3+ëØ‘£‚;~6h4ZýÔ\¶»äåçïݽç'ë´ƒ“‘‘wõó/rrr888¤$¥ á–‡£ã'X±Õ½SÀ.,,Ü­k·#†è?€¼—¬§L®ªª‚mnnn?_ø[ÿAÁÁPõÉÉÉeee¬ž®îŒé3:uêÔêuÚºmkƒ‡öïݧ££ƒúAP#H+ûwл5,,TMæ¿ÿþ;|øpÐ45¬-Ö³c»+;{YÙçää¤Ûÿþ{ïÞ=W—í¬(¶«^^/Â^¬^µZXHHRJ²UJ ªÑÖÎîêå+MÄÙâäÌÎÁAlsrrü]õ¸qÓÆœÜ܉ "•ýâÅ‹ê¯_.ñÚµ«Ê¨‘£Úèêúzúð7*:º¿~DHXx¯Ð硤>†ÆÄÆ13ƒmI Iy¿Ê;gÞ\gG'yyy|ZY,¿}ûvè÷6LNN¾¬Œžœœ•2wÎ2ŽÙàÁ5Õ5Ÿò>=}öÌeûvè\­\±*žqß>+W@¹lÝÖ 8Þw`?8„>}ú,˜7Ÿ—7---ôùsÁæ^`ø1tt´·nù¢OŸ9ÍÏÏ?eò—>³’’Òï|îXX¿ÂÕÕUUMÕj¼Þ–êcù+…rGË>^ºtÉë¸8Øž4i‹iprrÂFŸÞ½-ÇZBs»eëÖ³gÎ4ØÜR=­§§gµbCBBšô&&&D†v¶_:ó$õýûø„g'§Þ¦_Œf5~<±QUUú ôqÛ]Ä«¸˜x4U‡…››€JËÉÉ‘’’"r],}ØÖÖÖÞ¹c+)§1ÀdzEdegmwuÕÖÖqܼ™——·±h:u624"¶‡Z ý÷¿ÿöíß§©©Iô£àD>>>~žúçþwçˆã¥K–ü3ê2pÚÔimT"¸»zõìIl{_ó"wÿd·I<}AÁAªªªíu¤ùÇtðê+ÔÔÔÉÀÄÄ„½ûömÞ´©K9|Q#H»ÕÇÕÕÕNŽ›AwéÒe̘1?æè…„„–,Z 9øqðàAƒ!„^VvòäIØ-++ÓÒÒZd·HIQñcÆG×;à*æC- ä䉓EEEW®^}þüyfV¦ˆˆÈ3³Ù³fSŸ×mXÏÉÁ¹më·ß^gΚջwï… P¯~æìHHvW­XiaaÁbί߸ñðÑÃ÷ï߃¬740€|’³š ¤´Ôi‹sxx8î^½z-²µn6Á´ôôÓ§OEDFB³*''·ÂÞZVj²`ŠåöË¡"œ¨R¾šñS8;ó˜wFFÆÊÕ«rrsº¹Á¿NÒ.œ?áéééG‹ŠŠâââêmjjkc ÄÆ˜4råê•E‹Ÿa„eK—Áé—/_¾vý<°ð˜››ÛÙÚÕ!£ÇŒ>wöœçyÏÐÐPx W®XÙ¹sgâºðÜíÛ·/11žÖI'±s°?vü×ÜlœœñññK—-;{æ,‘¥ÌÌLد‡pþ êciÏúøðáÃ>„F圇'?_õ.‰ÚHPP0::ô1\ÎÑÉ4"4WÐ\¾zeÍš5çΞ•’”Ú¸~ƒë΂K—,%æ7spp$''Mœ8QA^>*:¤8âÃ[ ‰,ÇZÒée J݆]hŒY?žýh¨«Êûóè±cëÖ®mö¬Ãî‡ÿõÿö³8a²dOAq´Np¸­Zg«âªn­,gÝ'¨ ‚ZÛª¯G+Š£2Td)ÈP²HÞ?9=SFˆÕÚ¿oýÐËÝår÷äÆïžÛ{v^^9é0¤„Mãsssg̘A‹òõñ}ýú5%ïgÏž™šš~²`jh`¸gOàèÑ£è¾}çŽ4†h­‚‚‚i ŽGäc€Æ_ååý|æç¾}ûª«k0ã)!¦3;]?(º•KÐÇE]8޶¶6]\iøÏû÷ïÝ»·jåmÛ¶¥‡”‡F}æ—_†B9ËåÊË+Ð[÷ìçûæãxKKKй²ß+khhPn£ë1»ÌZ•––J¿mLÑœi"š†>|q%B’Wìܹóã¾`Bž‚¼¼Ÿ/]ð˜äZ×ÃO†Ó ¬Y½†I6lK‰75Ä••+ü±ê›‹ëÖ׬¤µ]±|ùò+¦L›êÒÆeàÀíÚV}M›@Y¹%`·=üäÉââbšŸy!šgÑâÅÌÍ̘=á‹/ÆÙÙÙÑ0]°?nhd4Ü«ªQ -ªG÷‘7#kn/]×…-Œcèu£nGQZ¥•lëêºuû6¦+À蘘®]ºÖ|bXx8ýýqÅJ&:;;9ý¦i)½eêLÊ}ãòóóZ¿ÁÀÀ€†i=ÿøãÆ;·‘YÏ_+ëyðáÃC¡MüqýàÁƒ•ËWˆnHíùÌÐÐÆÆæ.0ù˜v¶k×®õïןíZ‡n ™‹èäCsÅÊ•ÉÉÉ” Åt;ݦM›–¦-%%iaOk'Ú.™²lè±ÐçÏŸWûl¤æÁ¥­¥Uo8fôêÙë§?Qè¤]úÎÝ»´æk o’·Hݳ“£“pWO¢|,æ( Ý^’pÌ–¡ŸöüE‹9jàÀtòÒ*;§€_•\===Ù1TD”2;uêÄŽiïÖžÖáöÛtÛÉŒ¤r}-ÎÉÉ¡ûƸq4Çc¦***ÚÚÚRtæÂ¾¦›vº™;oÞ:áÅ‚èaþ«W8‘¦¾a¸—×ùóç>|8sÖÌÙÞ³.ü®…Ó§MïÝ»O°7¨A‹¢ë¢K¦ Nâý½”jÔÑ®÷ÉÓ'AÁÁéÈüv[×¶unˆÔ߯8Y»z [¬&\:õ :Ät’EëOWz¿\È ¦JJJ”WrrsÄ/®ëººÍk]ZbRÒƒ‡Uí_åçSŒ¨ëE)ÙtëÚþ]»~m•OPСɓ&ל ÿÉ“'}úõ™“ÃWk^Ìã)ÕZgV½½}l\lJJ ]¹™w™"Ýܹs;ÇÄ„ VôžáÝëæäTË"Ê*ÊeÙâòqõößÅÂ,ÊOYY™ìCÚ˜v´?,\(þ‰éé´£ÖÛ #ÓC\¦=BÓNK;|ðá`Ñ';'‡ò±øãº™–¤×tþüó­Û¶FDD 0 "â²¹¹¹ho'Š"ݤ0G"Óp¢Þ£@òÓ&# àĉ¡¡¡{{öì9sÆL:Ž˜LÅ±È J[[›ÃÜPRgÇ0]ˆÐ2í1¤„5Ðï–  ‚¥ììl333ÑÕ hN§ÙOÜð÷U^Þ”ÉS˜ cÈÉÎÆaˆ| Шò±¬¬\PPðèÑ£˜ˆLcúôé3cæÌ¼ÜP?w+*ª´´ÔÑ¡ª/0ee%·yã&ÑØ¦¹Ä–”Ì7®y>?®244”••]¼t SSk%Ö«¨·°±±©VyöãªÓÒž}óÍ|‹Ö´zÇŽß`¿$‹***b‡éúGÅË|f-ftñ®kåådå6oÚ´nÝz_Ÿm[¶ÖZP¢:uìdoGi5®Ö©ÊÊÊNŽN3¾þZt¤h½õßûÙ{‡;wÜ¿Ÿò“©©)3²­«ëƒJJJ[››×Ú¡ÝU«’¯·†ž#_¥‡îCnDÞ(++cÚáèI ÛûŠâÕkW[µjU³x5ºººÁoܸ1 =ßÏ£wœ^ÔËË˽{Ññ´>âë÷¢¨¨øùgŸ_¼|‰NV¿ÿñǸ1cE§æåå‰Ó‘¨!<ë= Þ7Ó&Ж:”’úºõëèµüýüßÌ ÚàAðæ‰ìæ~nÙ&+tÛ\ÕÁ¼0^W‹ÅlÂf&ѱÆÄhv5èüS¶¯`e¿|É´¢y!lö 4Š€=ù2U8¯ËÊ("3_ˆqttô÷ÈÍÉüÕßXþóçÏ7oÙlܸ°c&{{ûâââ¢âb#LG`Õ<}ò„.Æ311¡+PeeeJJŠHe‰:S/ËHMM­«Ñ›¼<—m…)¹è˜˜nÝ»Qòc"iBb‚„O¼}ÿÝÁ­[ô—’‡øZYYÇÄÆT]ÞjÐÓ¯úïÛ è¢[íwLêz7ó^å©©ª1©ˆÊ­¬ì]ÃqŠÎÉ)ÉqD ÿ½¾³X+ºó)))‰¸zÅåm³âêâÿ˜Ä;ï‹jjÙ²Ul\léÛ¦;¯_¿¦¹ß½kܪ„÷7Þ¸¦làÀ´mÙºå½Õ à`*y¯a^’Ìܯoß[Q·.]¾\O”¬¬••UbB‚Ñ_Qp\¿¯^={ÆÅÅ]ޏL‡—.]D'ݽ{—¾vý{$Š9 è4˜”œ$ùiSÝ[Ò Œ1266–yH[WZV*röT{¢¥¥%ÝH\»vóÇÐ:8:8²ó¿©‚TaÖÊŒîHéða&ÑáóðáCA-ëõ)<ÏÊ¢µNÂQÙà þ zE—iøèÑÿ?ß½{÷|áGŸo™÷îÝ“âp bãâÎ;ÇST\²x1S‰åäèÔÆ¹ªìˆ#LŒË^¿~ô葳³sÍoYéëës¹Ü3gΨª¨Pž ýN´³s›sçÏÓ¿önn™YY›6oªë'ý(‡ÑµóhÈQzi ¿]djbúûõß]Û¸ÈÉÉ]ÿý÷?ÿüSÂm¿z횺º:­^FFÆöÛÝÚµc‹Y ç A¿þöë‚o :”ÇSJLLlÛ¶­hÛ_ºðžå½Êg•«« ûm}ÆÙsgoÞ¼I±»™–ViIÉÅË—(m0ÜÑÚÔÔô·³¿YZXP ¡;“Ážž4ÿüß ñLù ¿ €.±ã¿ø¢ÞŠCñ ´´´¢££ûõy÷™µ­­-½ãâãÇWë³h«ÃO†/]¶ÌËˋϯ Ýß(²PAÑ»FAŠ#--ZP‹Ö“'MÚ¹kWBBB=ôšëUò+33³˜ßÃceeeÞ¹{‡Ž¦ÌÌÌË111C‡ íú6\Ò=IYi™ŒŒ ÍP³MÑp¯áwîÞõõó½qãí”w_¾ÌNNNbjEM?þÛï¾£¶Kç.”_¼x‘š–öåĉâë÷E»í~{÷í£{3¶í/ãæ­›ûöÒ÷45u×îÝÚw s„…‡Qé-[º¬Þ.ØÙ}•Êðࡃ;tÔÑÑÉÎÎþõ×_íì옩ÇÏü|ÆÊÒŠŽ>GGÇšõÇT¼'L¤³WžKg'ºÉß¶}[[×¶Ìw^kÎ/Z'MçŠcÇ-\´päÈ‘üJþñÇ™[MDR@>ø žd8œÌŒ …’’6"öpw§¿ìo°±)óѳêýþ»¾gæ§K—ç Oº ± [é¹Ë—-ßà@è±Ðœœº&YXXtéÒ¹æBTUUøîû={gÍö¦Ë˜×0/''Ǩ¨ÛÌÔn]»ÒÊ8x`ý†õºººt¯ëRJ¨ƒ=‡„†SÊ”0ÏŸ?ãÆŸ¾_ø•OçΗ/]6ï›ùõŸYdeZ¿aûÎÇŽ§tؾ}û_}]ïéʺ~í:º„oøé'>ŸollüY§NÕ–Ü¥sçÈÈHšÁÒҒ阂allréÒ¥CÁAª*ªff­Ö­]gcmÍLã={íúuß|»ÀÈÐhÇöíTD´z»÷ìÞ²m+½éêêNNN¶«ÏÁÞþâ¥Kì—÷™¢ K~äÍH[›Úû— Ðïó㪻v.Z¼ˆÖdàÀ,nEE±ïþÜ9s(÷Ìž;§wïÞæf3pÌJ‚n'ÌÍ̇>|˜v zséÖ…j‘·æÂÅ‹ô0ÝÈÑîäçëÇNý}鞃jþ¾4=ô÷õ;vñÒÅë¿_§ÝU]M­Èç"»„C€Ÿÿþƒ|ý«ºªÐÑÖvw÷¨÷¸þzzxì ý@Ƭ3)ýSþ¦-¥üÊvK'æ(ÐÒÒ¦›ùfššõW*¼ýœ¢‚BnN®Ÿ¿_aa!…››ÛÔ)S™©óçÍ ðžíÝ¢E‹½{™¶ò4Iô·÷¼† ãñCCíß¿ŸVÌÃ݃îp˜o¿áÇÎÿ¦M³p ZÍš­X½mÛV:±Ðë8HYI‰î…üÿX‹|äõ— î¾= 4Mta£|™ŸŸïîáQPXXR_<Š<žŠ²òùsçèòF³ÞŸÀ‰°ûöï=Âö~˜••5fÜXßU>...÷µÊËËûðäÚ„üC.ZÈh«ÿSkelbrúÔ©V­Z}”ûpøP M\55µÜÜÜ“'O::;ëë鉹ÍçHI¥gd\¼pAžË¥g!À@ øå—_»uíZ³kðéÐF’×ýO•CiYY܃=ºwGû @>øPJJJ††ééW.^,¨íËa¢T”•u›7×Ó×§g¡èþ#˜Í®Õù³çP>Ј¥g¤çååQ8ÎzžµÂkù'~uþ¿CŸ>}º{÷îN:éè蔕•…„†äçç÷ëߟ| ÈLjÃᨫ©q¹\---¶ r]•”•yŠŠ¯ 0ø' C“uñâ¥ÃGëëë/_¶L_O¿©m¾ššš¼‚|àÞ@ºI srUy«| ±cÀ‡´?`ñùüz?•£S0šU@Sƶ?–ð'?¡eË–hܰ þà_Iá34”U#Î(xŸ°÷¦[ÌZª¡R’°KP@>€†¤¥yÊÊ7##UÕÔ‘ë ÇTJ·"#©Äðe‚öð~ù˜éó”°[L l¨iÊÈȸ|ù2ºE>€FÅlÊÐ%(ò14 ïÕ-fS†.A‘  Ed%OQA?V'¾”Ьùš„?hœ;6Šùùùùùùà£@ÿÇðw‚ŠŠŠ×ååRø‰Zq8\99YYYüxò14~”ŒeddL[µâñx(º?MI©¬¬¤”ŒÒ@>€ÆŽù|¾ƒCiIH]ädemììþ¼{—J ù'@PŸomk[R\\QY‰£¼¢BPRblj­®¡†ÈÇÐUVV¾zõJMM­ °¥QD./WSU¥SQUE2ò14B ´¬¬’ÏàkyÞQðùTb(.ächìA™ÏG!ò1ÀÛ|Œ Q@>@>äc€Zð‘ù€…úc@>h0Nž:¹yËf˜Ëåêè踺ºz ¦¥¥EcRSS'NúrÑÂ…?ïÌÌS^^î9d°©©é¦Ÿ6² Û¶cû‰cÇ•••«-ÿõë×§NŸ¾xñ³ôtʉÚÚ:nníÆ1>;;{̸±>«V¹º¸~¬mÙ´eó©S§jŽ—––>ûëoÈǬóçÏ­]»öÈ‘£êêêeîî=†:uê4PÈÇ„Ÿ/GšSRRš””øË¯¿^¸pÁw•OëÖ­ŒŒ454ïGG³ù8&&†"ï£G˜ž}™‘4C«V­j†ãÂÂÂï¾ÿ>9%¹w¯Þ^^ÃËË_?NHHOÏø‡z·í߯?›¶/YܧwŸöíÛWåãûÇ&þõþ+|}}Í[›2”y¨­¥mjbª¨ ð±VLÀ@7Èdž£££ŒŒ tìÐÁsçÜùóV¬\¹70PNNÎÞÞ.::š3êv”MRRÒ­¨[=º÷xšccztï^s±[¶nMy’²~í:ŠÚÌ÷îÿÜV˜Ó?ö¡±q ·víþ ÅûïÖWTT\¹zÅÜÜœ] {{û- >æŠ Ä-íÙ³4Ú£æÍÛºµ;2>þÑÚuë–,^l``ˆcùà¿KYYyæ×3("_½vµ[×nŽW®2Õ÷¢¢ÜÜÜ”•”nÞ¼Éäã§OŸæåå9Ø;T[Nnnî…‹F͆cñB…ž:}úåË—†ãÇO ¤ÎŒONN>C¯Ò\·ùèQ£ºvíÊL3vì´iS‹‹Š÷<ðêÕ«ÃAÁ***µ.|¦÷,%%%?_vÌÞ}ûÂÂÃB†DDDžã={Ç®)))jjj}z÷;f ûÇ7oÝÚ·ooÊ“'êjj}ûö5r$3é§oÞº¹{ç.EEÅ÷ÊÇáááûìþü¹q 㙳f††„ZZYN™<¥êþ¤SÇéÓ¦3†™“æéÛ¯ïºuë>ëô=¤w„f~ÿ¨´´Ô¢µÅœ¹s¬,­h|FFÆ€öíÝwààÈÈHºÕqrrš?o~óæÍŸ={6mú4ZޝŸ/ýÓÓÓ;uòÔÏ?ÿ¼|Åòë×®s¹Üá#†ÓÝŽèêE\Žàñx4ðûï¿oÛ¾¦ª««|8ËÛ{oà^Z+“™™IKJJhÚg#ü×ÙÚÚRšŒŽŽæcŠ/O)çääPZýjúWšäóùÒÒÒ÷££)6ÙÙÙU[Ƚ{÷艟ö™$¯x(èPPpðø/Æ[[[_½z…ÒÛÆŸ6ZZTÕ5ææåRôš>u𦦿ÉS'ýüÍÌÌŒŒŒ˜'þò˯iÏÒ†{ çñë ǤWÏ^7m¤õ§…¼IW":uì$//ÏäËÍ[¶|ýÕW†††·¢nÑ0-ipïÏ?/YÜÓÃcÚÔiÉ)É;wíârå† F“^¼xA |ýúõ{åã+W¯¬òY5hÐ wʈþþþùùù–––ì<¢AóÍÀÛªÙÄ„DóÖæ£F¢<ºá§ , §·€™ê=Û{úôé³½gÓÄÒeKW¬\±eó--­­[¶2˜bw¯^½d„a”™ŸØ´iSEyóð›ßÐû®  @÷oߦüݯ_?Z`BbÂÆ)L=†Ù_ŸP©VmB€aA¡øúcCÃ={G5{Îì;vÒ ;¨  `šT^^Žƒùà?ò®¶¶6…?624¤LI!˜òqTT…'[mí-[·>xðÀÆÆ&&&ÚÜÜœrUµ…¼Ì~Iõôôê}¹’’’£!!ƒ==‡{yÑC;[ÛØ¸¸ à •ËWÐCg'gúÇÌilbrñÒ%šÊæãØØ˜=»÷0ß&£k—.Û¶o£ç2„>NHxöìÙ¬™3Ù:qâ'''îÓ»ORR2­ÏÁC¨<`nf>wÎ\)a³„¬¬çÁ‡Ó$J¥ß}ûmAAÛ[Â|¼oß>ºåøþ»ï™‡F-Œ&Ožü. þÒPA4ÈÒÀ¸qãØåL™þ\JØE’ôÏ&ƒÊ$>>¾cÇŽìkyyyáwÛªPÊä ø¢˜´Ê¯AGG‡&å½Êcg£uc§ÒÖÑ_ºÃ©u!ô¢kEÒÒÒ6oÙ<}útz[é!ÅÙû÷ï‹®§½=Ý Pg6¡S§NumB]¨Ü<<<æÎ›÷§ ÐCYmc¡aAý14”(º´qy“í®\¹RVVv÷Þ½1£G3#]]]ïܾӯO_šÓÑ¡–|¬©QÕ’!3+Ó¸…±ø—Ëϯʻ ¾]À†iZié75S‘7#OœKJN***’v0'ú\--m 7ªW¯žó¿ù&åÉcãË]»tÍî¢m$˜vy¹¹ò\.­É¡ CÁ‡ƒ™ILivNS+!¶b•â EOu5uѪ֪†Ý¢D†)ÉJ½­è¥øzîü¹ÔÔTz/DgfæWUU­VñL+ÿ®5…h³ ©¿TKÓßU«VµnÝzè¡ÌZOzn``à¾}ûDøòåK*Ú u q›P‡WyyS&Oa*Œi ';Çò1@Ãp+*ª´´”M½öö”–®\½òêÕ+64·uu=óË™?ïÿIAÖ¶FãcbmmMoܸQo>VVªúæßâE‹Œ Þ†×ØØØÅK–Pn›?~3MMz­ƒþ½²·³××Ó¿téR‡í³²²Ü{ôš——ÇFäœÜ\ú«¡¡Áãñè½¼¼Ü»ÿef¦îöoäcZ œœÜ«üW¢A–nØðJ‘]4Èæåæ±ÑöàÁƒ{¿]ðmÇŽ)¤Æ?ŽŸ8q¢à­j/$š€«5bf†EóññãÇãÄØ€]møèÑ£{õì%º!tWÀår«m)((ß¾‚•ýò%ÓXå…°€çÏŸoÞ²™Bm»·£jiiývö¬®Ž. ¿ Í¡Î;×ÚÜœWÛÔhNJØGŽíоÛ\¸Vòòò©©i4gµI1±1ôwâ„ L—ÉééÅ%%o»(zzxx\¼t‘†MLLZ¶l):õî½»lc‰k×®Q8nÖ¬=ÅÊÊ*1!aâø 5XXXH¹P’&¢Á±U«V‘‘‘#GŒd>xð ªFümxÕÔÔÌÎÎfç§Û6ÚÞû󞥅e¯^okü£øw XªŽ,œN[A¥WZVZkzÎÈÈØºmëÔ©SõõõÙh~›øøx¦Wjªm£G^¿~-Iýñ›,+ Gò1Àݽ{÷(?RÞ‹‹£ÈKywÉâÅl )aåë¥Ë—úôîÍŽ¡Dkggwçίa^u-vΜ9sçÍ›1sFß¾ý,-,*ùüÌŒ iéá^ÃEgãñx£FŽÜ`?%N{{;Ž'5-MA^¾wïÞ¦&¦”ºŽ†„¸µk—‘™qäÈÑš¿B"9ÊÇ8ÿ¿óü¥š¶ôà¡C|¾ÀØØ˜’_Ä•ˆéÓ¦1­/&Œÿíwß­òYÕ¥sZÏ/^к}9q"Mòó÷¿}çö‘àÃõ~EO48Ž9réÒ¥~ÚÐ¥K—œìœ}û÷)**²•¯...gÏžýü³Ï[·ˆ‹‹;xè d)Ї……]ºtÉÀÀ 6.6ìD;©Z}°TŽ/(ÑžùùŒ•¥Uee¥££#;?ŸÏ÷ñõÑ×ÓïØ¡#eæ¹t/Dùxò¤ÉsæÎ¡UíÖ­›’’Ý5=}ú”b4Í0jä¨%K—0›@i~ÿ¾ýT2Öò1@ÃðÝUÝ)PP£ìå9Ès°§gµ¾Ò.^ºØ¦MÑ‘m]]oß¾íà`_×b)xmݲåðá#W¯] “‘‘ÑÑÑé߯Í9)r©©©‡Ÿ ?vü—ËmÑ¢ÅÈ#ª^¢mÛqcÇž:}*(8ÈÄØxÚÔiaáá{3µµ´œi)óU›ôÃ÷?ìØ±#1)Q]]ý‹q㘎 ¤„m¯üü÷<àëïGu´µÝÝ=˜Iºº:šššLqõ¤c‘ožuíÜ%{欣'Ož¤Íœ>mzÀêvžiS¦VTT,\´nZ››/úa!½5áwöÆûâùsÿšÁÉÑÉßÏïËÉ“˜†É‚·ßÀc_èMÃâ·“æÏ›à=Û›^qïž@Ó¬™Ï§¸÷î]öþî&gÿÞ}¦¦¦ôޝ_·.0pïÊW 7\§W¯žÌÒºtîì=ËûhÈÑððpZàÔ©SŽ?!õQ~? »¡áÜŠB)4hK—-+..Z°šsîܹÕk×üòó99¹ûZåå剉‰ý x’’"f¶Aƒ=8aüx¼;Æ&&§OjÕªÕG/à‚úc€†íÅ‹7oÝ\0ÿ›š“þѶ,ù>¡„„„¢¢={ :wîü‰___ö¥é|äc@>€Ofwàž˜˜k›…ßÿ ú½C@>hŠü||ëšä!ô/®ÛñcÇñA…{MxüÂ6 ¬ )„=Ž ‡“™‘ÁãñPõ¢RÊÈÈ ã %#@ãŒÒÒVSSËÍÍ=uò¤£³³$¿DÝdedd\¾|YžË¥C>F>€FKIIÉÀÐ0#=ýÊÅ‹……(º¨(+ë6o®§¯O%†Ò@>€F‹Ãᨫ©q¹\--­’’H]•”•yŠŠh|Œ| ?"+ñxŠ ø…<ñ¥„fÈÇЄ üAãܱQÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇÈÇ€| €| €| €| €| €| €| €| €| €| €| ð‰É¢ ¯ËËi¨±m‡Ã•““••åp8x£‘êGɘ#-mØ¢…’’R£ÜÀ¢¢¢giiý)%ãíF>¨'WTVÚZY•–••””4Êm”““³´´Œ‰‰©JlˆÈÈÇuùù­-,JJK++*í=Ÿ_"Å?|¨®¡†Èǵ«¬¬|õꕊªjQQQãÞÒŠòrfcQ…Œ| P;@PZVÆTiôËnlSØRäc€”Q€| €| ÈÇõëïÿI  CS@ÉXFFÆ´eK^}ý_=}ò¤²²_qhøÈÇ€| P3óù|[{ûü¼¼ì—/ÅÏ,ÏåZÛÚÞ¿wž…ˆ РþªŸ òó)ò¾ÊÍ-{ýºÞù«¾ÿ››kljŽ$¡±aú¿TUS{ž•%áS("ëèêŠéHr•Ϫ¤ää=»v³c‚‚ƒ÷íßç³j•«‹+{:2l¨{÷éÓ¦}øVœ;wnõÚ5gNÿÌårÅÌFëÿ½êh~1I:88\Žˆ 0J'GfLÔí(‡y“z Ä¿-çúõk XøQ6–Ö'üDØÜùóx<Þª•?þÓáxâ¤/—/]fddT× ÆoÙ²ûÐÀÀ@ ü‘'ÍfšØ3àS^>Îr¤ª–Ó©c'ú[ZZú4õidd¤€/hÑù iŸ«ò±}UꎉfÎ’ÅÅÅ“——×\·ùèQ£ºvíJãgÏ+%¬E¦¿‡ÔÕÕ¥´½goàµk×òó󵵵njíááÁ¼nRròŽ;âããÕTU;}öÙ¤‰_J‚ÇŒ;nìØ¤ä¤K—.—›˜˜L™<ÅÎÖ–&1-6¬[øÈ‘{Þ“••ussûzúW***4õÈÑ#AÁÁ§Ožbµnýº„ÄÄ­›·\ÿýwÿ)a2ýõpwÿfþ7’ø6¡ÇBO>ýòåKCƒñã'tìÐáâÅÐgÏžQú7510a‚µ5viøÄç¦þXtiêjê9¹9̘ë¿_§kA‡öØ©gÏÕ××·³­ª(ùíìoVVV¯^½JKK«(¯PUUµµ³Õj¦…wù ‘äc©ª*dûèèûÌpTTõlmmÕÔÔnÞ¼Éäãè˜èn]»13äæåÒËOŸ:RõÉS'ýüÍÌÌ(dÿÝw+V®ÔÔИñõ šMKK‹VrÑâEÉ))”¡ SÓR ˜…HKKûúúzzš8~BüãÇ»vïRSU£Ù$YÛM[6÷îÝ{ÍêÕ”€wïÙ½lù²ûö+½íênéòeS&Möž5ëijêÚµkV¬\±Rü¼gyûùûøùÓÙ_AAáËôPÐ!Šãã¿omm}õê•å+–oüi£¥…ÅÃG(‹9ñK*sºg¸{ï.]W°?À¿pþT_ZaQ!Ç{3†þpj¼–àݘ{÷˜têØ‰Îç±±±7nÜðp÷ø·¾%ÈÇ?ÛÛ;D\¹R\\Lgƨ¨Û}ûôáp8.mÚP>2xpzzzNNŽ£ã›ÆÇÎNÎl3c“‹—.ÅÆÅQ>ÖÕÑ¥3#…K]]]fêíÛ·£cbVý¸ª­kUõªý÷ŸÏ1bDï^½hØÎÎ.îAÜíÛQæã溺_M›Î OúrÒ¸ñ_<~üØÑёӽ[w¦ŠZ[[{úôéÙ“““MMMÅ,²µ††:“éÙ•¯éõëò’’6ßËËË×5'Ív4$d°§çp/¯ª ´µ¥" Z¹|ųgÏdddú÷ïÏST¤ImÛ¶ÅÎ ÿÊùŸ©?®¬¬¤¿eee)ORòòòÜÚ¹1˧©úﯯ%ŒÇoÆÐõ‚©K&ÖÖÖçÿw>7/W[Koò1@#áèà@56.¶¹nó¬çYmÚ´¡‘®.®kÖ­---½Mq=Š¢Gá²  ¿ÖÅÆÄÆp¹\W—Z§:;9±ÃzÍ›'&&J¸¶VVVìp³fÍèoNn;ÆÒ‚vr¬z‰¤¤$ñùXB‹—,f‡544BŽ­kÎøÇñTnnníÙ1666ׯ_§6ÎÎôÜ3¾1bd—ÎÿévÕ€|,& “Ó?Ÿf)((Ð»ŽŽ»|Ñ4,™M Mv*ó±[iI)úžC>hçG!CCC š±±±éééjjjæææ4ÒÅÅ¥²²òþýû111æfæ<™9òfä‰aIÉIEEEô°¼¼¼®ÅæÐÒêêtY]]]äGÀ—t‹j6H}®âÛõ”V Ó«W5ùe8}Ú´Öæ­ßœGÄ~†˜Ÿ_uðàÛì¶SIÒ=³Õ[6m ÙºmëöÛ½† î5ýRÀ§?ÿ3ËéÔ±‚ž>}š‘‘¡¡®ñná5ÚWò€­]–ãʽKÒ‚7M™‘‘O>–ªjbaŸ¨  àììÌÄ5ж<|@ÿÚ»½iAzñ’%C‡ ?~3MMÊ| ¬k™O™¤X«…➘——':L¥¡¡Yë˽ª{Ýjebbb+ü"`½”•ª¾È¸xÑ"#C#Ñ fþ¯¡¡1uÊÔqcÇ:}*pï^99îÁƒ±K€¤gÿÚ¾‚nÚéôH§ëŒÌŒ¸¸8Ñ~<¹Ö¼~ýú/cD†ÙÐüñê¶‘³?5i4–3¤¤$Y £ƒCB"%äç6ìHWW—?ïßOMMµ·sÆŒ‰¡¿'LÐÖÒ¢pœž‘^ü¶I®TÕÏYË‹þªŸµ•uYYÙí;w>eÉܽ{—¾&ìo®U«ªN‹5Ô5JKKÙÄ••• ‹®¹”°ÞGY yyùÔÔ4#QÂo:²‡{ wuq}ðàögxó?ŸÿQþ1”–•‘±hmñ4õiNv63†+Ï--+eg.Èϯ¨¨¨º¢0ÏeÒ°èÒ_ðÑÖ >9ÔC#ÉÇwöÙÙ8Óøøm>v ¦ÌÖ›šš˜ÒK qk×.#3ãÈ‘£L§oŒ–-[þ|æçßÿø]MMݸE‹¶®®tÂõõó7f¬ž¾^Fz†ŠŠ Óœ„(°–•–ÉÈÈ”——Køµè›·nîÛëÚÆåijê®Ý»;´ï`bl,%ü ÓßŘÑcJJKŽ=š›—§®¡Á<‹â+-ÿhÈÑaC‡q¤¥ÍÍÌ>¤0y<Þ¨‘#÷Ø_XXhooǑ⤦¥)ÈË÷îÝ› çñã{{UUÕäääèèûãÇOÀþ Ÿþü/økÿtÿäé“èØ˜N:Òµ@«™VZZZjZª®ŽnqIqLl¬ðS8Á'ª?äcÉÑéI†ÃÉÌÈPPP(©¸CQQ1##ƒž%¾=ƒ––…]æo +K+C“˜Î¤„ý-Œ;öÔéSAÁA”;§MÎÎ?bøðÔÔT_??Z½ ëÖÓs}}|víÞuàÐÁ¢¢"/'L”|cE_z ç _zÖŒ™—#"ÂÂÂ(UwìÐñ믾bÆëéé-Z¸èÀcÆUVRîÜ¥ó¸±ã®^»ÊL¥´:wΜ½ûöÍž;‡R¬¹ÙŒ|§FE7 á'Ã?Æår[´h1rį©ÙìÞŸÇh<%*#F8;6üõ#Õû?¶¶´ºq32åÉ:½ëëéÅ?~£¨ hjjJ§2Á_Z\j´?–B>nÀãnTJ(>ŸOa7??ßÝã °°¤¸¸žpÌã©(+Ÿ?wŽòDæ+bók¾«|\êè1 á*//OLLìÕ»÷Ó'Oýƶ06þí×_[µj…•?ÔCFWMM-77÷äÉ“ŽÎÎt/æV#%•ž‘qñÂy.—žÕ¸Ã1‹ùÆ @£=Ë¡ŽªQRR204ÌHO¿rñbAa¡ø™U”•u›7×Ó×g^®&÷ž¾ôù³çPþ Ÿ=/î|ÞÓÝåŒ| Ðp8u55.—«¥¥UodEEE%eež¢¢˜ÆÇH½M-{ôpÿ§_>uDVâñê=…ÑœM¤YÑÕÕEÖ@>†¦«é_øgCФ&òsôMd3‘> 1r¤9œŒÌL׸·”§¤”™™)]_·ý€| M;¾HK+)+߉ŠRÕÐhÄ™6MU]ývTm,š~Jh /3ýߟ9uÊÞѱyóær3333¯^½ª  ÐtºíG>ø›Øþï¯_¹RPPÐ(·QEE¥Þnûù Ê{õß@IÒm? ¼‹Èößp7Í*Þ$|ü E€| €| €| €| €| €| €| €| €| €| €| €| €| €| €| €| €| €| €| €| €| €| €| €| €| ÈÇÈÇÈÇÈÇÈÇÈÇÈÇÉÿlå‹ endstream endobj 162 0 obj <> stream xÚ¥XÉÎ7 ¾÷)æFÑBj жAÛSŠÿVôàÄvEP¤ï(%’ZìÉŸ4…1˜™âÎOälŸ6·Yú¹-ù-ÅbrÙ>|ܾÙÞüä6oMŒ·—û¶l{DP¶—ëï'k]8ÿñò ‘†™” V¶L _!цô|åwt´v·<]mM˜-rÅwnºîÂ#Ñ¡˜ß"šÞ/t'pÂØoŽ ±Å5ó]F29œId ¶jsÞ½…Ó`W]A +²@tç=Õ5Úƒ´é"¯‘5ºÃ /iì€[娔¶œ Ý|¦«ªª>$‹X_9\ØSM>h«V®Qåñ/`åŽUtf…áälêo²ÚÕ¨.ã­ º6¨QØTá‘YQ鎻6%º{àÃl(z6¢ª¬NóŽ͛ÜÕq¡Æ»ZQ5h.Åý5æ– öôFöÍU­+«ÆŠ3´'yƒÆàÇ—VJµ ~íOq5-é²I”KŽR7uq¡…|0zKן›ªâãîæq(ÇfoõHµ²Ìª¶tmoͼ(©5V»o$¶ûW^OÔx½Îûá>QV‡¥–rä¦ôywªb%Ê¢JRÞÕ1Ÿ6Ÿ€ 66ÿúäMrò–³ñ©Dm2!¥ do~þh·þÞÞ© ¢ Yl4%d"÷Åø‚âGŸD‰¬Þ9ç®ii ×´iÚR¬{¯š50‹@g¢{”ð?Qi°OH†ÇŽvhç8v\€Wq¡‡3H‘ÝåR|È!©AOÖÇÅÞ&å”SwiÔ@IF(‡)µ§Í @¼j¨ «ÖåHÌtn5-™­ѽÃÂA„7´xÌE”\\DŸÛ¼ZÓ¾ŠÒä–”éÀR™(²5{Z¸iy€X*,Àê³å¼jÜ<Û‹@V·¾;<°†©BÅÉRxõXž]¡’rÚvìÊç¨c<™S¨ÉBGÁ dg¿L¨uWmQ´ê‰p×Tªÿ·nC½Êï"¸Óö¶ƒ—áH0B3Áw†iÊ0|þÿÉavÊQŠÓ±Û)ݽ¸ÔÜ”zûº)uAs@Y‰'Õà±$P<¢^„Ù‹êöЊÀr²V-wÕk=$_ÅÃŽuÓüÞ?”k°Y%¸Ç¬_À시L"ðî}^E«÷GNs`2aŒÚ2NÌzäþöVþ9:;õ 3w y‚BçAAÄÂPÃø ;ÈÝ÷vøÕÃÛ¥llö ØKeœF;¡þ{êTÔßá´ëGÕq¢¯.Üóû"”Úo}Mu®<´ñåUݯÿÔ›}¾÷ Þ“åöÊÈÞ85]v&”È©‰søßsvdÙ5ˆÙ濾2¯çVSÆ`BœÑÏ RƒC3HŸƒÎ;”6•Á<.µ§cëÄ5E¿}bçœ3Å uœ;f0„9ÿóŽ^‡5MžXãàtDãÉ3÷ðèQvUÊ6-YîêÚ;É n¦ª¼jƒÛx?Q2_Grïë3Ý©Á¨Aæžg.•¬%ko¡»ÂZ ªrÞbæYëàsÞ™ã·øXÌ‹£-h€§¤ù‚ÎÉÁ¥ÓḋůO!޾¬6þmõ‚IŠ µ–º$Žð™ù^¦Ó¿)§˜Ëÿ?àwûÎ0TÅiì 6@™@ù¦äŠØsø$0ÓøNg´<´-ZÚNËž$õY3õ·»Wò¯íêkàÚw.“AçÐЊir|»[î‚»)>Ž:]=ëOc&ïm`¥ÓßUVŸÌîS¿}Ñ·Jø*ÓáK¿øò‹;üéýéÖï,Oj€{Zã´5§-Ì~îžîŸ_½ÆÑ»GjÎ ‚Â{ÇÙwßý ‡/„Œ endstream endobj 171 0 obj <> stream xÚµZËŽ,)Ý÷Wä$Ãü¤T.Zši©w3ªÝ¨Q7+{Õ‹™ÿ_´† 2óVÝ«RªâÆãslâô¿“:IüS'¯OÞEâéÛ_§_ßNÿø—>))¢Œêôv?0 Ò?løvûïEJ­¯g ¯¬Å߆?%%àüiüݰ…•þdxŠwV^Ï>Éxÿ ÿ›¥áSpõi "¾HQµO‘êRã@"îøÃky¿þñöûéŸoe†Àg¨¢°Ñ⠭вÎÑÅò38†B=ܭܧ™š{Ÿ“‹×³Õ4ÀQ¼Lw–îÊ»rGZ¾×'In’•-‡mõ;]Ó8NÒ}(“IÏãñ<ð¯õ}'-nv ­Ó5ÚL Í/|YMkp…|žoZ3œ |Ð:'é@~cÊèy]·ú>õÔÒÛ•VVuOI½“Äô_&òéMñ‹n¸TÝÇ_/¼GÁ.­zÁ)‚:º¯B¤CwZW÷‡êt@G _ù—u[£Î&;E œÓ¬Xãƒ;ŠJ]: µˆ˜ŸÖ™·qi')ŽXn] U{·+˜€Sö` ¾a«B="‹ø×P&*OwCˆEÙ¡E£Ac _w–`#·ñÚ[Þ:¨W@—y®;ªÖ­ÄQwœÝYòzÓ‚Lp4ƒMa¢²«Ìá”±Jïøâ¼ÐÞ}b÷¬œÈY$Ê«ÚÂ6˜ øÃ‡e…h6–Ï S’" ”fö^ZfØjôÓëØ¾«žß:n<‚?æÚi»ì¡·†¸,cXZŸ˜ñ9Ï8Ú¶.péØôŸ§Ææ)Ó€åâóÅ/ýôHËp`õf%5[m4¤&¨¾ sËŠ¬©,j¦Ïzb¤‰5j@µ¨ÀØFŽÙ/Ož¤?=ðµ8td¾\ªªœZ´­³…úaˆs•–|°€Õ£1ÃFdÕ9—¤^žGÓvZp›ÎÀÙ>¦œ¸–«¾²¸Ê'VyÖ‘îS9µÅZðË3¼QDü!YÛ ÈC2¸,á§ûÃaaÇ vT&‡¬n/ic%êžæÅÕÝé¶±":àÊmüÂ`5±¦Ó]~œÇø”ž«³–b¾5ý¸pq¼Ê 5ËAó‡aÌØ„Š3;(O†d·²ûþË êoÙ-ãóÉÚ$ÖGÅÙKI„Á܇˜?è×$V‡mö’=éŽ`·`Õ1ák=bñN~ ¦T®Ž¡¾¿*CþÒäŒî…„™³7^¢†³qÒKÁó@ÑÄI¶ÜV ^‰híÀà­´"ÆÝ©d/¥²ÓÉfiËÎ4j€Í¶ýÙMáÑ1ö,utÇg’Me£1Îé/Õº˜J°ù¼‘à4ªû ÖŒ½F€ŽO˜ŠJOE’÷ÕÈä¬Ì?\ 2Œ¯ .g@ƒ€ËÅ*<ÁøÁJÛûE·|hçw‡va…2Êó“¢ÒF·«'>¡xåæeŸH¢Ù'u°~^ê/#Ðô4¦•ÉxŸÐ÷{jôm=ûöM/r,‡Ó¼Vao0 ô5OªË) à»"õ³¨Ž¾Ä© œQqÎeÑ‘ù§L¬¬YW£•vKÀÏ ZÃ0 `H\›&[­·É4[=E¶CÌѨ±‘Œ&']êʲ¯†’Å¥… ÙQ$J¬IOºÅfœ•Ù´œg–ž´}èðËõûLD½¿Ÿ~°}T¼ˆ—ùå†Z|牓sŒÂ0ã †¨øx-•}^Zzác˜…3ôšA@#LTé‡~ÂàÅ/Æš<;o*‡ãò}™1/ùã#$T:ƒuÁ#ZÔ3XµÕ.ÿþåo½´h endstream endobj 176 0 obj <>/Filter/FlateDecode/Length 13122>> stream xÚí}lWžçÇ·‘VëS å­ñ9L7Yá±¹Aã Ó°‚ nÇdw‡ÖMBF¹ƒ³±“a6 ±Á#>Ć„]Žq›$\PBH÷†ÜdgƒC›œ‘âŽEHÃ¥5 ¢]ª—A¬¥¥©'OùÃ÷Þ«]Uݶ«ãr» ÞG¢ûõ·îïçÓ¯^½Wßú¾W`”ü+pñ¥ž¶“wn„È[jøö<¦%ÓÀ0ŽËÍ ÑšqÞ‡iÀO*k ƒÜ•X PùÛ'bøïÀ10µþîvHQ4n÷‹Äþ¦„ÆçÈ™[ ¾ÿT¬« ‘×ð¿J¿q!åPüpB¨™TïÛÅŽe}UzgDB[=äOÓ®àƒõ¬•|Br_Þ¦"ýÒÑ—÷O§Dd4þ¼Áyº“g¸ÕãÃçÖÎÇKþE_ŠÆbk˜–¢¬çŒ=C­bI´V–ï;$yHÈáþ«ˆÐ/M¬¿Þfõ­>AkDþYý\®½%—Ë€Ô>À:ÐúV¤ý²úW§¢ÁåÉ0,O%Ã,ùÍxF’΄ ÅH˜üN·7ÈÏ\¥bBÙý}aÇg UøÐûf€4Š“m'€®Z~©õðÃó‰öµñv&HË›å[k ‘AT>Ÿ@oU%ÖÈ85ãD8¡_ƒæÚ00„©¹.DZEe¨Çd8Ó‡³wn_º¨3¼ý®ƒ ?é±ÊßÔ€¦v|2?–cF]TJÒÓÔZÄ> §´©ÐëËí(e Ôˆé P¬KàL³ù/G@U•WŠôP¯IÍi€U$%øgà‰0>fŠœõ¡´­Û¦¨»ÝÖ€K*C­8Ãsû%õg# ƒç6rŽ|jÉÐX$gÔföé}é$2¡ŸX‘c1¥°1*Åb´ßKazââ–ù¯¦d6 g§å뮿Ç|G_Zˆ Á˜´Jéo§y0dÝ8à ÃÝ¢ £”ávù¤Íµo[Š7MGg-/¯WÕ‡çËÞ é÷üé›cP¾3–f3éËéD—ÆÓû‡3|è¤%Qaøˆ# #ŒáOã÷y%|ÙÀüÓÛÀBc±&f¯Ë V àԌˬåˆÍÍé§bòÉQtµåðÁ§Îï²P…ìiK(„—÷â°3ÍßÃS ¹JJkaØñê ¿s3ô•›á}uaìÂŒÃDfþ°ö6Ñôqcñ™ž?ˆÛïîÕ¯4IJcÆŒ¡êvš‘“ñ"’›^,§g®lÇkÕ3pâ ÏÕnòRj £õIÜø8ÂŒ}`LJ0;à•bGªHIÿÑÒO­¨¥gp™3MßCRãö¡._CAF¤üy+Ãðürœð5g3|ö9Ü8ö¾˜Å0Ñ]‹¡k=Y ïÛýU"±Š^ºØÖIÆbèXŒ¿ÓÛhèó0éºÈE„|á*Ú¼¢m-ÑÑü+Å®v™þ½È?k A¢Ýg0´;"³.sAØëj#ÛIË?¶TéykµÆùlŒuiB³3òÛc¸ŠõzY ·µc=c¸{‘!- k³Fé0äh†ìòdÃ?èZ#~7 oè×?&gâgh,—„”‹ØPJjø¹§Ç%üç òÿVÍû±´­Z|Gñ¿µIþ£]OÝ÷É_Ùö†ˆ%5i‰ü½c±/ºþŽò…VºéŽ,#¸‡ˆºø™¶T-©.½0âõ/ž·Zþ²7@¿tå`íƒßKþÓ±Jgä/ Ã%ß_Rn{Šý‡Îû? Ã’QóœPë· Å» ÅÆßóáòó[n  j³‹w*‚ k³‹Ó‡’QÞyçÃåçàòsù9¸ü\~.?—ŸƒËÏåçàòsù9¸ü\~.?—ŸƒËÏåçàòsù9¸ü\~È#±ôå½³%ý#|í3›úV 7]+†Î°>¥¤3¤™]JÉQ†y´þ~!ª•”(Y}_BPÒ+úJJJ’¬ô… Ç]+¿Æ0MXEÍ ?ÍÊrœ¡}ùS‰m4'‰8— α|‘Oüu*.‘ÏJÑáS·ª¯3ü’æ<ÆM û‰iÀy†öå?6/•gàˆ‡Ô§u?K°ß!Š q2õ»U~áðûY{×’&ׄXÚq†ãÈŸ®/é6|ü8ˆ:vF~Œº:|B I©¶†æùÑÔ½H¤ØOX–H¹Eïäܲ¾\ £X°ˆ5'!ù·¬Í9ËpùOÆÐnÈI‹®À2)ÉÎÃù h%é ïǤp^%¥¿Bñר'É»Í0%¡vkN:ÃÏôxY›s–á8òÏ4i@¿÷)Ȩ©…LÜü°¨£ämÔ‘£gé5k5<Þ³n‘¿,7C"ne%í‹2 #X?=!f8Žü+ƒèÊ$ê}!øÈ÷þšvŒ^O€^iÓ‰åÀ22 ã2¬ —ã/±ê ì4{…Nd3< ¯è£-^g˜”1 ¥œfhûó¹Jr÷·¢Zð^eK¯ª|b+!Àš¥éè Ë”¼há¦Îðˆ’uÞf‡Úv%¥®Zàòæ3•j޽”úØ{Œ¼?}õcµÎç¡Hãsä}é'n”_gX®f¥ËIá¯Õ:g›fhWþsØH:¢Àöϯ³Ù_ß*œéo¡y’›6§¢lЏ(i–NM®zê aLcx1¦2Œnw˜¡ÝqÿÛ~v¨‹|/]”x]^B-‹qø)¬ƒ¼RÓr)éBùu†ý÷5†ïh á4Cž\4­àw<¹ü\~.?—ŸƒËïÀv°‘.j&Ôm7ÅKÈ?ÿ:Ó² l¹Åà7N{u†ŒƒPG×’ÓÖÇX‰ÌÌe˜G¬··êö®ŸªëY u?£ñFÿA µ_ëQ«ÛH×»jy‡W}rc[T*·”e=5† ‰[ŠÓA†yÈ_À£?:Ù¦9G—aÜÚ«;¥ë`Î!6é˜+åÏ0ìj#­Œ®%g`8š~6£KM:Èðõý]£pÌlmäÞ({꺈 ÆY®ÐñÖŸfk‘: ¬UJwôµûÂêÑ›€²üWúdâ”+$N®¹y¼a †`µ…aúCgŽ#? 6n4,ŒHú|á7¬cl'©–H!F.M¯j—aï!Q=ØëŽKï> »Œžš Ûš³»à,Ãq䟙uaÂá¥úç«"»0Ýh]tZýn~Ñ \˜†6'{Ü Ùx å7kV†±…墣 Ç‘e0Ö%š/LiGˆ]˜Ru‰å7Ù… 3V±å¨GÉÀmoE³raºµw«öEhî¿Ù‰1¦ëaeYï4Ãq.½âéѬ•þÖ©±.O´g½p])ÊZTèq »¡õû®Þl‹¡¸.›aÈq†yŽ|>Ô«Ð0[½2i½Tô%ß?Åýnñè ?ÌfqœaãþËÀ‰„~íAx’ŽãÆe¬@ç‡x’ü»ÇP8ès£ô†96;Ë0ù7“ ‘~å ®¦Ž$–Òí4Ô „·ŽnBW÷nÛèÊ–_x†<Ø8­àw<¹ü\~.?—ŸƒËïÀþ¸?}ôM‰î›d0ÑõMñÇl‹‹ 3Ô6ÿËðɶZþ§Î﫺ÑÚ,‚î7È\énï8x{×9_‹+¡1L?*ÑÍÿnFt>Ù–BˉÑÐçJQÙ€P£'ÕN£1沸:Ã>¥ßx:ŸlK¡åÝO=ä{Ûe ÒG7â(6Žeq%4†©0ZB_…Î'ÛRùÍÁÆ„qKÆÐ€H\PžÈÎaq ÌÁFá7À2¥¤ñɶ`äcÊlLk7]ÏKT“8–Å-0e6ê /é;Rj|²-ßlÔ¿ö–²©¡Á”mq Êr2Ïä4CÛ™ÚÆ33;N¦Ç²¸æÌFa5Ôýu>Ù–Èo6úÕt¦ÅÊ  •rXÜs°Qc8攚ød[ >ë}1g?¾Ïpéî$èH‡š²-îùh =A„#H‡2|²-N}ç¼b³bõ©žF†žüãêG£ò;ÝŸýËáû]ßÿá¥_|½*ÛâJùu†µï|ÔÙ}9Ѥóɶ8ôö£]ú”\Ÿãêðl ¿éà´üS~Ç“ËÏåçàòsù9¸ü÷òÊlô6n4?UMSêü›ÖšoDÑg!æ¾ä® C–)|&dbHi)éŽ2Ì+³ñÆëá³>Õ9ö$0ˆËÛß>-ªÎýœÝBñħë?ïq_[Ô2ÄbÇÞ )äh´ãU'æÑùTB§ËÖ¨b›±@óÙÄN¨Î­j¥ïb ðjo8â>ù G¿mA쨙apTòcoÜI†ùõýb“²ŽÐèh/4Ñá FçˆÇºKÍøØ•±Æbošž(pÂI†ö—Qe¨Å¿ª_î‡þ㯕;€ând\ JůµeU3Cø!YÂ# å$Cû˨ª¸¤¾/‚œ9xEm:ÞŒÇH¿ü–eT- ßÇÊ5tyOçÚ^FÕŠ9—2˜ëÑ3(›¨Âý?ä?9$¿%بŸœ ®±ÄoZé*‚º-Xüò[‚†™L® Ãib2gà)žÎ¶}ª¥›¡‚füЫRÐ.±–â—ßwu<†WIïŸÅPÏæw†a~#Ÿt8¨6ˆ#´o'šÔ£€Ÿ«Æ£,ÍÎ}Ц[%ºr¤™aª‘¦”:È0¯ÌÆ;УOlý/0Ï0ôšŸEäiú=Zè¼+ljpGÀ}Ú[¶´å`øAÀI†ye6z›ô5´YïRø{´Ù·6ëM,Eã  Õ·0|&”ƒ!»éàClœVð;ž\~.?—ŸËÏÁåçòsyÅzé"[y\Íåƒ1 Ó ?[h³¡û2¦Á½0ù?{BCaå¯2βgOhp!tÿµ c /¿Ž¬»ƒ.—½(ûþìUlï6d¯b[Dò[W±Õ±ÔzùYêÒ+®uÛÂ3Ìc[âBðt~†"GÙ´3Ìc[rÕ¿ßÔÕmp ¬«Øža±Þ¬«þĆ"‡5Ö[x†|ÖëŽY/[ã÷û”c\ŠÂ3Ìo[óugbƒËPx†<Ö;­à}?—ŸËÏÁåçòspùù´+ JP+³S!Ëo„¤=ÏvrDK‹¥P–3&8Õ 2<©Dó¾½2 ó 6VÆ5çhÆ%àQC߲ݬ\iÔª9;tu@ÆP=&N Ãl¤Îï>‰l7+·Cc¨ÝÚ·„§€á6Zã<Ô8%òó`ã´Ê?f°ñ®ÁXÁÆövó}µ© ¦þ€`£æ\‰ê”êÝiÌe÷ï& 6–˜eŸ†?$بõùæq@‹ûréÆ 6jšk Õ«Û0üÁÆÂ ¦-§€!Ÿõò›\~Ži6òÖÏåçàòsù9¸ü\~Ž‚ ûýGöKYû6¤:¢ð6™ï¦ßË–½5]aúè‡ ·4˜Æ÷ËÞ:ÊË9†öåo wÕÞÞÕ~ZÙdCYî&¹Ü{jÆP{m€:GܬÛêAº^ê)¿Ñ:Ç}¡aºž®£{8fFÖ›Nv’¡mùû½ÍÀ£´=ÔI̹ò6•XëQãÔ̹7_“öSãqú†; ÅÈ-Òªt†©õðG=©»á$CÛòïòÒå«èùÖJ·ïDô%> âG¼þÓbúÌJ¤÷¶ø`\Ð5ÐÒ2I‘>Ô‘axˆzàé£ ío™©­œ—ŒÑí;ÙÍØK¨Q‡‰s"Ä]Üs™k·l™©1Ììi`ø¼ªàN2´lLÓuSÎOàå½ô¾ÿ-½ ôÃïIÿˆFok»Kº¦`c†!Û!ÓÊ0¹pž¡Ý`#ûh?ÊvÈœ™©Á"r2© üRl÷Ìú˜+Ò,Êr34°Ï0Ô«8Ê0¯-37¶¨µjM_Ó‡‘Ø’ª£]Ìvèô»¡õgo™ÉVPV†^Zrœa^[fŠr~VCª­_>z¨ALµUÒý3=WŒú³·Ìd +õ=@ ýÐvËt’¡íYﺄºœwÀ‹×Rʦ‘ ïªGŸ^Vv\ƒQ—n™©3ôNZ>GÆ£Î3´=ðÜøáòžòÛ¤th•¬.i,ö¬'nÑl¿Ð뉽{c×òúÎ7®Îuü†]çåŸZZÂá°ã óØ2sgDV6ŒIîë—ɬw%9ýúv%ÔífºÉ4Ý[×죇£BOºïÁ‡ Cº¨ºŒm†!Ý,“ÍëdÈƒÓ ~Ç“ËÏåçàòsù9¸ü÷þà›»Uñ‡é«aÜzny­?¾aâªEƒÛ%”WIgéÃî@'9D^_qŽáYH²„Ýì+1g|t·Ó'ÍÉ+ŸHð·ËÏ1¹Î‡g6N«üÖÌÆ¥™"ÛÁÊP Z*,u‡üÖÌÆÂ3Ì#³‘¦Ü_Þl1ú’—ça§jñ¡lÚæ‘ÙhH"5ªµ”‘¥j1ÚÙXx†yn™yw!×–™|äÞ\þ{<ØÈ[?—ŸƒËÏåçàòsù9 ‚<ƒl¬zN -Ö?ýÊÝ$eX 0Ö?ÝùÊÔ3Ì+Ø_ªëc<¨È;.?Çu><Ø8­­ŸÓwµüû$yWÑv>3ïúS¿¬˜û~Kfã]Kfcqõý<ØÈG>|àÉÁå¿KÁƒ¼õsù9¸ü\~.?—ŸƒË÷Ãv¬7“E™«t7€±ay£¬Tÿô¹ SÎ0¿ÄÒLÞh},xš7^Þùpù9¦¢óá±Þimý<Ö;­òóXï´ÊÏc½ÓÚ÷óX/ùðç=…[™_QÉ?Dw¾¥—Òzé®e“ŽÂ«”’ ºtÿT3´{Ó¡»½Ãƒd~¥I`¡Rºk@Ù¤•pˆ•âaëÔ3´}ÏçƒÒ?²Rßz/°Ò]ÂF„žVª”½y¦ža^O:„¾ëR·í*så¾\6æÁå­xAeÉKþ´˜]â(ØÈGÌQâàO.?ÇA~‰¥éò³—.4Å´;PóÈøÕÜ2òÔ\?¬-W»z–έk›.ßöÍZGæl|ï‹Êrµ/ïÅ×l”lïjPÖµMùåÆˆ^Í¥ÍQw=ÙŽt†ÊAYØ GæÕù‰žU¿4¾½Ì¹ôšF-$Ó*{e©æ:d\o‡÷˜Æ£Øçq–a>ò'7÷ªÃþô36«ÍàWšç1ÍÕÜ7ì×]×ÙdfH;Ç0`ãíg›Õâ’ð¾Ú ¾V›Aj;º–jE¯¶%ؘqýövt, JBf˜G°q‹¤v|Ú‹ã̧«›[|z×ão³T+zXƒ×wÉøk˜¦ÛQçqšaÁÆ&t¨¥5ÓÜ`XÝéíêùìjE²1®#ÍÞÂP "šršaÁÆÚŽhŸRê°A9/z„Mê± ‰nKµ¢‡5ؘq½6ˆpÜÌ;È)î4CÛ[f¼êWEŸqòNVòWEG›í)sµ¢‡yËL“뤗ßcahA,î0üžoËÏ*…½q44¶«'çA­qdª¹ºë¢uÄÂp+ÛÔQ†yÉïëŠÑ‡êɯ„5i½qD,Õ\‡Œë»´¦Í =]ºe˜ß=Ÿ6ÿö¤Åñ¸´Óê°^Í}Ð]·A>ja¸QÀkÎ2ä‰¥Ó ~Ç“ËÏåçàòsù9¸ü÷~À*¶ â—.ï³û 1TöËÌ0bëÙNü·ÌTöËÌ€¯gË;.?‡ÃÏlœÖÖÏ3§U~žÙ8­òóÌÆiíûyfã´Ê?æ%™†ÉôsåÝô³ŽaòŸªÉ@!±nôú@Ÿ7¢;7møìZžaò‡É?íaÓò/ƒöÔ9ãæÏ®Dáò`#Ÿõrù9¸ü\~.?—Ÿ£¸f½)/¾ÖpÖMèÖpÇ«ì¸u YïÿŠ¼Í•nÂİt{ÊîvPVF†ªI9>i†¶å΄€~ XK!Jœ;Ï–A09w‰”) C®ßÄ€¼]SCv" þω#’WýD&àµñæsoæ‰öô©Ÿº|Þëš®ÀÌøN›v2›áe|…þdÚ–ÿ6ÖõÓojT?“ùwB`7£Òë¨ý/i5‡pýyn‰AÂçó:¿;Ä72$jåAàŽ™á5É/r‰¼~çÃqäO×—tg>‘/$Màãº™ç™æÄ‡´TÃŽ$Ðø9’ÒJÒ(ˆèAÒ*~Ëî˜àV>‘eâÅ"<9·¬/7CÒ-Ä7qòbe˜"¶¯Ï…Ž0´l|Âyô?™}ZsWÈ ÃÌåý8ç÷(K­ çõÈ‹¥TR^IÛIQÂl43œK7ÈK6ÙÞ®zg:ÂÐ~°±¡“ò£ê§Z$‡È nrÕJ)y¶N«GNÚ9gi$cÏ{朿x#feã1¬ÁÀoéMþ¡,†uè“ü¬û4CÛÁFÒ—/ë'ßT‹4Õ<€þêÜuÚy¼çú— x‹‰¾è™)1ÿêίWkÀÞl42$š{„Øø”±„!!åÃ!,Ð.€“c˜O°±FÞßDÞ®®ÓF»™ùÕëöË ´'¤¢×"‚%—ÔËZñÚw'²‚:CF*JÏb+C‚ÅDöÚ!GÚx.„Ç/ÕêW@¦g#í +ñ„”q4@úNz“Q•²ìŠ1.† (IýÍ é)˜É†G“eh{Úuž\M7‰¶®%Õ<8r6’óó2D<|†œ )euÏŽ WîÇ ˆ-dpê’ Fr0¬EM,•‹¡UdxtgÒ mËO‡ÍÍÄ2û@¦>­kº¥õSsÂdÀOÚëê;ô….BQ^ e'‰é`ȃüŽ'—ŸƒËÏåçàòsù9 ‚<2OÑùx‰9¿±¤“®¡Ú½{ÃÄU‹·K:;ô£þéÒ%†ÝÎCíˆ?ÜùŠs óxÆ3¡M-”Pb½’ztH}&²»Â?‹ñ¥,⛈ÜØn¿­?Ëy(“$÷5ä¨ZÎÇï=œùð¦VhŒeÖµ‘Ïäªê˜ÜN$s0Ä»3´/¢I]È@âjÉ+èË: 8–£ª›¿Ám?þ>›¡Ñ´³ méZNGµ¢'ÔÒÌmá´nŒ¥²«3ÌÁF“Û‹Íf(zqÆY†yd6Š!ÝMˆhŵÐüq2»j1ÚÙhpû HÉ,†hÄÇÎ2Ì'³q«¬É[åÕûyOËkÚñŸe. ™ªÅŒ²±ÎhÑ{ÈÞv”a>™žÆýZñ%¼®›åˆZ Ò§ÙU‹Y™·o<ðV†W=~|â(Ã|–QÅs’êÇÐJ$´ ­|ÁJ!†ú€±j1#kÕŒÛ×Y²2”H¯û•£ óšõüÇôßž%B1l‘´f’1fªº ·C™n†áʌцùÝtx1–éçu4x5«Ï›«ª«qû‰\ =~gæ'H×7$d¬{¹$ä¨ê*dÜnÈÉp“³ y°qZÁïxrù¹ü\~.?—ŸËÏQälì~SZ^°¦ôíJ q¯Ç–µØ‘a˜:‘…ÐV™Kú蛟 8ÇÐþ´«þ|OùVïiQu®n;}к»½«öö.é¬Ou.¸¥Álu2 S~vïP  \)7|èî1´ý¤C¤ëLCEuý— ¹dp#—{«@êÏ»Ú*YóþÅ H׿K|–N”.1Z]Ãõ—„3ÿcuTN4¹t¿‹ÞüÅÀðÀ:Á)†¶ûþ×ýôœó5¾ ¬‘…¯G%/Ý»è(6«øR,… |0úm#ݽË`u2 S1´àk¡ñv—7áo†ØI)pŠ¡íXoBÉ,[ ¥“Z|𼩔£*|ƒü!ˆÛéOb°5Ì±Þ Ãó`)ç \R‘é\Ï:ÆÐ~¬W‹=^9Ç£é—HP­—’2Ýè&Þ\0X‹[~K¬Wgx&L0Ü2pæ(Åïch7Ökønå4ßÉ]¹¨Q†‰NçauT~S¬WÔU¯œIóï5³æGõý†ß%c-nùM±^à %_™5Á —ÙЖØxÀ1†¶c½þ~övÑ+.¾]WµX˜`~\Æ<ŸZ#IÓ3Öâ–ßëÍ0¬>'¥Oii†‹ÇË’«ÅrÇÚù¼˜ ¶%£M4¤N"µÞ¹þÓg`Òûƒ ½>c°º†ž "q$ÃúŒ\š AzçÚ÷WŸêyø»¡¿®~£•{;ÉBß,ßï*½´iøø,,þ¨³û2>Xj´º†µïÉïtöŽÇM —œþ¤³{ïÔ8ÆÐþ¬—NjSreÖ‹Èë¦)¹2ë5X]+Cõ¦ƒ…¡zÓÁ†<Ö;­àw<¹ü\~.?—ŸƒËïÀv°‘.ªõÇ6ÕÇoÝnWnx¤Ó¡$à_·QÌer–a±ÞÞª¯/Ox˜'ÞF6;ÉaÄåí_}åζ¨ÒaåDâïr›œd˜GçSEe5ÍIÚ[ŸÎm š{}î”?C‡†í‹&'æ×÷{ül1¹ÑÑ$ÎŒiZYìa–‰B|N¥ä09Æ0ÄR#§KHNh*vXK‹jä“cËÌ´–Ñõ©¾|\Ó—nY¡-«˜©VäÈÎl40Œ¡ÑÊPOmtŒa™4Ëì»ÇÑN—:x›^ÈÈ e·> ji0U+z”Ïp{†>gæ±efï P— %¨#þÁlÕë°á–jE ë–™…g˜Ç–™Umae“ê®A([óŠ„VåèhPÝÃ7S­èaÝ2³ð óù´yŸW F´+» ‹=1õêÕùYK5÷ÁÄ0•Íp§Ã óxîI¨›¤î%Ý£R y·¨M©Ѹ¥šû`dØšÍ0ì0Ã<·Ìô·*c!Obêò‡$uxºUÀ3is5÷¡À yfã´‚ßñäòsù9¸ü\~.ÿ½ÛÑ.šÕÇ‚m:’û¢ð¿Âx7Ag˜Üׯ$0ê|úÅ r–¡mùŸ:ßS~y;Ú˜Ô¹ôr著®/°Ý#©s‹+¡1LÑ'iåpÿ—Ðøô­4^Œ8ÎЮü©XWµä÷ÿ)çÎȼ âÈfÕ9ÝâJè OÊ8ÕÞ¹LŒh|AHxR­Ûá8Cû¡všÏA¾÷ï¯}é£Õ¢’ÍBÞÞ†÷K1u`+t‹K¡2¼<‘ÝZVùœGÙLxNÃy†ã<`žþ«§Kõ´UáT´ôAñ§Õ¥KAé{ÿóáK‰å­aüÕ,a•±¸ÉÀ+óÉb˜þÑß•ÏB†Ïÿ¾,4B9Îpùßû;|ö ý»Ö${›S?|ÿ· êÿñ­îßW øî³‘ÞS£?.ÍXÜ‚¿ù§&Xþx`x$Ñ{nþ,Ï#Ñù³C¿_\ê8Ãqä¿úЦË_ºauÙ?ôÌ«®xì·Ãòà¡ïÿ ³¶ÔÌ ¿W?kɃWäáOÞz¸Z·¸Eþfgä×–6ÍûÝ0¤è:Aã3k“ø/2MŽ3Gþ“R—q±ÖY¶é£“í¨húùCF«YµúoåµðoY]’ØTª[\‚ò3øïd3DuÓêÄðÈOü:ŸÒ%[j>^=Ëi†ãÈ_ºáËŠ¥#ÿH« KæŸÀ€#Ý)¤%`¶nq'4†}‹â,}´Zçórˆ0*ghwàYßò$> wa¥Ÿý+wF¶ÕÞ~W:–Ú¬Ä[<­ªÅêë w%ØS¬þO*,3΢ã mG»è…tº>úa‚-—­o`˜:Ð/Á¿©Ù´¥¡õ71¤³x3CvÈa†<Ø8­àw<¹ü\~.?—ŸƒËÏåç(ìÎzYî" ÈdJ”·ài—*¡êRŸö‹VCÂy†v§]É;x>1 i¾¼m5–’—û}.•ßÊ0Øe5ìpž¡ÝÖï£162ÙR?‹Y†€öâRh„môDPZe–Ái†÷åY¿ÍèKN‡3ò§ŸŠuµÝÕä“knŸÞ4´ü¶Ì¼ËcËÌâ‘æ]ê—ó¸ßšXz÷ÁšXZT}¿xúnoýÖ-3ù¬—ßtààòß#à±^Þú¹ü\~.?—ŸËÏQ\òw—(¯ñft2~×—”°RÉ„ÆÉâ¾üÿ‹]én7ÅXr9xçÃåçø6NkëçÁÆi•Ÿ§Uþ{7Øø€mãöý¹ƒ³±=|w͆±Ø‘;Ø8 ¢ts¨‹6ŒùT€N2® R¤"t ó Œî‚‰ÌQ$ûéæ' Û{6VŸŠ•ÿ[dßßú隟tÁ[Ldt2~WŸþ¬³wïÏšÈ8YØv±Åžö„Ô’š^9Ñ]0’é—Ôíq&0L~>ëåòspù¹ü\~.?ÇÔÜt0a‘Ì&èsëzò±¸ š÷ËÞActuÒŸü¿±,Ž1´Ûú7It!§”´ ¤„Î6Ž””ÔiYæÊ†¨1¬ó³Ý“¶ŒiYVèÎg1è~Œg°Ú~R8 a혖•®”_c¸²Tä¯P7Ž¥Ðòû¼g©Æ~qdâJ¡q,®”_÷þqà¤X>Ž¥ò›·Ìl¤M¼i$8ON?,Ç☷ÌԼХ¯ÐÓalKä7—ÈI$åŤ‘àsÒÈù7¶Å-0uïƒÀßx–©—ßllbˆy}@éê¿9ÿƱ¸e¹®@  «ñ,S/¿%ØX7€➀”¾€uãZ\K°Qó>Hº%ÒÑk™zù-[fþ,–Š=AÞ¾Œ¡v\‹[®¶æ-35ï}ÎIlt3¶¥à³ÞuV b„À¸wB÷¾ûáõŒo)´üXÙ¾y5dÖM`q%tï—C²ðɶüžÏ:ÖùA9'°¸F>Ë&°8lœVð;ž\~.?—ŸËÏÁå¿w`÷Ïî©Ø÷'tµÐÛæcê“Ï/?F·2*+1o¶SBë/j&ÿ5ùàcÅ­„‰áp óYÔI>•t~¿ßÈp÷Óç6 ´®ó±ŠøÃ529†vc½ÕHyp m€´Ž%0ÙŒ®6” c!ÝØä†H˵õ±ài„¢ Ä—â”ÿh &À¿¢Ø—ø41$BÆ×Õ'æ+`dx 1R¸A=4I†v;Ÿyüçé—USçÀœKóç_ó_® Ò£;w›ü§E)ZÓ¸TôÏ;›–ƒ Ž}”¼ÊÄp˜à„ÿà›$C»ò{òeç7É)$ñPƹ+@y%ùþ$6. bƹKä?ùÈoqÙ¿( \ôý#ÃJâ7® ý1PibXMú™¼,ÑÂI2´l¬¹†”¼Vø†(îckŸ÷zcô øÈëÿb)d ½íO²èÐ5òZE~¡dï+ò‹,(BÅÍÁF#CQÀ-H552m⢉áCÀa4á;ÂQœ,CÛÁÆ…)|ãk.ázä·'žúç"uý×ñÛE>âujË·¹‚Õ¸JÜò ’œÐ_ͯ"ÍFª-BùÍÁFÃ\‹c¡ñ[4Öbdè#=ëªIÛKcÅdÚ6ÎÑÞmÅ<À\ cÁ _$E,À‚CˆUÉ1tUA ç1¢w‰Êâñ¢Ìô*›¡©Û¨˜ƒÛ(%#CÒà®ßÂCs飓eh;ØXŽÔÀÔžÇUû$'%¹}G‹s®"V…S¤-ж2@¯Àq™vDsI"~_¾Q”™^æ`£‰á¤/¡ª—Ò¤hf8·.À·_Òÿ2I†¶3>¿•r\ª¢C±˜ÍÀ­Í8«mO’ÃÕ¯ýœž˜ \¥WàOYâߊËä÷XxÖ[SŒW[sf£‰a-^̾ƒ‹ 2"53\»pÞKú†wAŒÉ1´?ëõŸ+ɹv‚oË騇\ûY±GÈ kžü ñƒ¶‰^ûé/êXr!9­V¸` jdx?>{|t ý…áL2úŸK®¹q² íË¿¨ßK¾Íñ²†B†Á¤L°¢èí_DnzúÕ’ÿBÒð´"ƒéþùÄ{é|… ä72$­<T6 ñYVnôš›@ͤÚ—ŽDƒ d6» .¢½ Ø`w.{æ´F¦Ï¿Ð Ð|ÚðÕäT H³*~Xzèö¹VÐ#0äÁF~Ç“ËÏÁåçòspù¹üÝ`ã‘EóÈä»õ—O•æcqtïÿã/m*M•uþþ†j Ìî<·‘ùó¾pš¡ÝÖßìݤÂ{Äú’²4’%%/k”•Ô³ÄÆ>½Ž+¢îýÈgpÂnͲ ±v rœ¡íÎç˜Çoˆx!ŸÄ/hqbIìG°A¯ãNhÞ‡‚x=Á6Q·ìp4.êŽ3´- ¸‡6uòŽý©0ö‰ºe£€# ]™:î„îý$vÊÂÆŒ…´°ðaÎ3§ïOÿÕÓ¥†çFæ¼<4ÿ5ò^{Hö¾›±”>üQâwÃ- u\‚dà•ùd3¬8'%йÒ`™÷–|Ç*œghÕ€?±…¾{ZÀ1£%äEBØm´¸–eTuïéëF£Elü)`hÕ´„OXÞû›m²Ôe¢Éâ”Á¾ž1Y¢@"5 íg6¾QöA˜-XO®@d``°K¤ˆ©Ž[;¦ÌF/c©[È¥Íkæ<õò›3S{÷„¼ô¢sDB/¨ º¥þ´¦ —ÀœÙ¨{Þc¬=é–hiB8å¿¢Zþøöù1ë‘;Ÿ¨–Ç*Ü(¿Æð'íhÙ€êC#_k K~žj”÷â{Çò`ã´‚ßñäòsù9¸ü\~.?—Ÿ£ °;íªß²‰L8Re™@w€M>æöéi¦ñ‡ÙÑÖ§7¹1Ø«1YÙùÍZÂâ‰Î‘•*ÃW~y¨4Ø[²Üa†v[ÿù$y=)<¦¬YÛZRò˜p˜J.í˜[BoÜFJJni "ÙæÊ`¯Æð¥DÓ„Z^Òî܃w—Ó íÊî'ßûÚ¶ĹsnÁ6RÀž`€8aÎ…vÐÂQ%Rá:h Åfò#àŒŒ­¢Æ0$à]¤bاÚîûwHœ!ß»•~ýIzßm£p€ø´ƒ»^G’:îÞÜæÒ½Ö4†¾ ö“Öôè ±´¹“V:ÎÐvbi x ;B"5†‰{-ˆÛ"éÞiH$€ÆÿwHñˆ´Ö5‚›K5†Ø©/Fo8ë 7 8ó&}öÁi†ã\zßû;|ö‹Ì%¦ì¿}ÿ›¨T¾'ÿ¾_ø590ï¿Ýw°§šnx5,ÿÃÈoÈeªâTâýå×Èÿ7ƒ#ÿÔ„,†ç¤v ð´ä³OdÞít˜¡ýXoƒwo KçØFš?;ýÄ–½Ê#/•ƒ,ýb,±Õ=ÝMYn†,Ô΂:CÚÙ+]޳ óØ2³ O²wr& ʵçI4©§­ê.B´Ët ¬[fj ¼ðL é£k§€aÞ[f{M¬ÆríY+úKr!÷–™t¨/͵Xæ(™\|ÖËo:ppùï ðX/oý\~.?—ŸƒËÏåç(ì.£Šö<‡ÁmcpÕå]mš¡>f:â$CÛò’—7¯€îœfÐÓ nE–ÿ '?½¥¶ÇÛ–ÁeÐü§ѹ’°V7ÐÖÞÆ–)`x_uûb§@K?*)wœ™:Š*7œ™ÁÅÐüï–°Íc4ÄÃ4oÙy†ãÈŸ~*Öeú¥·(à ÇE£¡/ŠŽ€Ñà$×Ü<Þƒaê5¨m\#ô<Ѓ)`h?±”4‰.¥%ìEcƒÑÞï Fƒ[`I,ÕýïqÈd8’@‡g*æ‘XúZ Û*2ý~e4à)ÇD£Á-(ËÍ0U{òvºˆÂT0´lÜ –9geµëÑ Gbj×£\K°Qóÿ­§Ñ ;eôˆSÂÐv°1V~ ÒÏ+]fHmW»Íà˜ƒšÿäºÛå1èu745 mÏzÛ•‹éç•®G3 Uíztƒ[¡úO®»ê“¡çµ œghwàÙë Ù¬÷ÇdÈ?¢Ó®jÕp‡Ìº–Òi×Õàs©úc3LLC»ò_ÂÞ½Ô'ísµfÐV­_¨Ü*ÿ´0üÿŠ¿* endstream endobj 178 0 obj <> stream xÚ­XÉŽã6½ç+ôVs§>ÉÉm‚¾9¨[ÖœÁäÿ)ÖÂE¢{ÃM–ªk/N?&=)øè)š)†4/izý>ýü<=}Ñ“ÖsòÞLÏût±³Õ.?€ðyû몔¶J©žŽŸövq)ÁŽ·)å<Ãíb¼‚Uû+@êön5ÓfºHOooñÊK™Ð1±CƱ²ðþö÷óӯτÖMZÍI%Ý¡U³ ñf˜ù œ•5ðô”ÿ±yá=‡ÌŸ¾„–mXàôÔ… “Þé%ÀGĦ%Övv& ±Ru@ý¬+CDç÷‘díf½˜G’E|cÁxËtqv^´ètÎZ†ç ÏÈÚ¾]lÒù+ÂmyÅæ•ƒ1iÕwƄ߮ÐÇbD$¸ç “ÿeÙ©eâ–ŠÌOÈ]gkTàš-ÌheÿH…¡ãìe%°ˆ"Ñ•³Ý.Z XS6w€ºº‹jd×ú›F0¶¨]Öñé³P}»„kwâÞE™ªeШjº€ y—ØtŸèD#(p+s‰²îY7Š5æÜU…-–wc-ïõ&$š “¼itK´kñäæh "sl¤8Ñ u ¹¸ÊÊîˆ>~Ëzð©0YZ?(ŒLÙg^k4ºaú"£GšËÓ.6ü1“fE—J¹ÕùŸ5`Nð¨rà@ÊGò¹²?ýþ]O¿ü3}›§9Ú¢é bx#U>—\9¯§S-×¶&ƒ§~9Ô£ÊÝéÙb9r§p–J·=Ëä$ƒÉ*e c]VrÏQN’AdÔœ?Ý!VXû&F Êud—Ï–ÐRQ žÞU÷¦í5[ Ý ´cîÁUʘñ̳ç'ØÎÇÅŒ¡%­¥¤‡Fq7:¬¡BÉLI>Tý”  w§d£Iý÷¥haÓ(öÍ[©är¯µZNv]¯¤r¡Ãj·ô‰²H`c`élfª!UNÏÆf…K߉ŒJé¤»¾I*Q[wS']%‡"Ò¦rñ¾dÊv-Õ«Q„w'_j j® Mž]«OU¸;ÓÚVzÉVfmÞ—‡Íû©¡Û?м&¨Cm 0 ré(\æ+K iTthu© IÖÀkÞXŽê ésGC§º„\°–±iµ¸ˆek¬Ò ±™¥Ü„tìN˜xI[êÄÈôRh:W©b©Õ i/ ~>Èrzkëq„ |¶³D ,aÓvI#ãÜÉ‘ýråtl¥ãC”Èã¤nÛ5uÒ14EènN©­3k“Þ>N²„ö8É­;´2¦iÌJá)<ëÔêÖ¦ÁþñQå›V«îñ´G:øÈñZÐ ohOS‡ µf]uhC¢ožÃ5ÄoØè6ŒÝ+G¤ô!ǸÚ‹É?ëÍîZªŒÃ³„mëÚµc¸ô°e-ƒÔ½É:R‰bkJSm€‡#Ã)û /[|ôÐÊ¥G÷-®Ü·ýnV\)Íí]‹à^Z”æÞ`_k,ågmŸÿ'9†z‚^ÎÈ®à1&€•ñÂ5}ð ÛëûÈZK~nL l¡§KPz޵ö}løK…÷®Ü¬›è‚ ÿ¿=–PLP<ÑtãG€ñ#6ÓÓÖÀue\î[I·7Cðcß^½˜9L¹+”»·c\Ëï|7(ws9ÈÞËåw_ÚáÝœÖ<Å×$°<ÊÏÁëOßÉA üîœ|³ 6΋Ñ|‹ç»Dá†`qgMßÜT›²*]ÝùÂU¥¦ÌúRfW?.­8M®Ý„\gÒÁM[“=Oç‡ÇŻϲ5M›ÕܵöflÝ­=kÊ7­™©MBƒã¡Nš˜0Í6,ï8Ñ2»J±¶= oøQ³9È—!÷*4pÊk_ú{Ú4 endstream endobj 184 0 obj <> stream xÚ½Z»Ž$» ÍýýS–¨7ИÀ€mÀ™Í =ÛÓ7r`ÿ`I$%J¥ªîÙÝk ]¥Ò“ÏCR—ÿ\ôEå?} p >m1]¾ÿûò§o—?þÅ^´Ú’Júòíqy3›Ñ¶üäŽßîÿ¼*eþ›Gþ…üWʧþl>ð»Ïÿú{o3@c?°=äcßÿõíoyQ/ÕÚnκ¼?ZñA½@ör›wºõQwêcÇ>BŸ§îj¹¢Ýt„yÁ?CŠ Ë‚Ù’‹—76ð $WháßßÀ¤2ü©á Unøî|ùåFã?äVh­.t*ÖþmFÅ3=Z_-u OcÊome®õ¹…g±å¹õksý-Îë\yæ4ïáÊ›‹Wœ®5òºØÁ—¶ü¬ò¾ ¤=¥¡“;>‰{N“2¦L—^pÔ¤´¥ŸÈPÜ@t¹É£ê¼˜Öuëeà›5. åå `sÚÑ º ¢$ídµ1Ïjëq¼éÒb耵ŸüRßÊžB§íƒ'²y˜»­d^»Éƒ«ºþâðU軵M¸å¬iÓÖ¯U NU‰¹Ôõ¢ð²òóÖNÃ_¾“ÔÙFžÁ˜ï(¯Êßï²?Ò¥K`¥\þªË\ŠÞÝ0ßåšPyé 3Õht6MYûHÓì–Ø6jSÆä_K¿YŽm*'„3I¯û0–åˆØ®ëW¹þÒ4k¥7ëÃdá×´¶þާ«–º0/ƒ´Ò,®åÛÚ"§°o.[ž‹ÖqvÅ|³Ål“ßD¿3»,ºÕ-ž˜æ·ýÚçæY»-ë00Íšej'ûÌòÔnÍþêPžú[•߸<‚Š›ÕÝÑNø³7£Ü‘åÆ3°ÁÂ7;¯û3“ Â~VèåYè »ÞµghcÙæ¢Žpë½ÒÂ×Í6#ÈöÐ {X”.nMBñ€6æxðp´;m­š‡•@A„Í'aÌ"‰}Yã¾"7øMKžHO2꙽©à³L™ì›þ**Õr(£Ùv»äÉkI2è>‰‹Æ²—ÍnùÑ^á3c ¤·B<=cÐÖâ Ò¢âØb´úX܃qï¶Î{Ãoþ*Gœi­²ÔžÌ”LU-"¨„§EY¢™újö£T•šiãˆ>HBùHÀíø ·;›êð‰}#×y$:JÚÄÀ÷Œ“Ä*+µ†½¨çÏž©ù9ŸÛIõÒ|H×¥YŒ®ô“¬$`E°ðÔ/+޽ Ó?A6•#°/Y¯½m1Æ4O×EQQ/u¡B3ׄÀTbŸŠqá?þJÿýméeí–q¦«ËaXFìØì.Ý o¦#(»/[V\.ýfƒž«‘΀«G–ÏÖÒaeÀÑöM„N/€=ÔR:‚{¾Á½0jº>Î~ÿYÈ9ø4ÖÍ9A½ bó?|/0¯òý˰O+³)!—ÇÀå…8| ILx!èAÕ·zF…k×Ô#NOÀ}eWÛÞNÀ^65y_{`Wm¦ß@î|öèô/‚=š‹À­1=j}¹QïçÈÍ„L¯ð5ä>¾€Üt6’º‹æ!6%&´Ï‘…}Jœó%qð†"€‰³Íjȇ};µÄŽ*JÃÜéÉ(÷/ÝÈ%«406‰ur±î–>0gz#æ÷}´–É1'¤|ÄDzgˆCÊ(>MÅÔQ<õÀV¹Í€éRxïÔÀk²‚Òq“tü¼r°›KÅ$º°¥4;åðšS¾=wÈ:DÎüêéœÀ —_í”×î0äýXø wØúµö2µ5¹Ã—sÎú7]›äEØ @Ç`'U‘‘:˜Ù¢`Ë‘ý¨3¢k@ »¨½%oÛd†võmHËátÏŽ; 9ŠÑƒ(†}å!ÐGg+aW*F»>Q1Ð_V1ã3¿ªÌ ü:¾dôL¦¯è™ÍÏ.¤y±ªgæËw:V­’ÉÚƒF«ÔpãObápl!ø#,>ä[¸÷B‰½½†³ŠT‹ýµ¢TSòü=IyêÍÿ»Ô ÌíÕ LÈ8’ sì'WSÇqê†è %l2ŸÞo!ú]ý§BX½¨ßÂ[cYô–³¢ÍÆøÙ~†NuznX 8šÔÒÄ\W°ýh “hƒy+n8@C€; -¤Æ¨´EYpÑ¢}þõiù­L+îd¥·[ÜÕedQN1sìÀQFåÒH° O;îž¶ä?ÀvE2ä’=ÅOášÙ[6a¦§äèNÀMÀÜ–.î¨fKH¶EßF®BÕ턹¹@±í•@\ÝíÜdw«â>ì°…e—¼§«ðjûâ6ΰ/N¶×¦êJê¤bÃ]"츄ªK¶Å?­ Ú}µ¢ºâJµQï-=¶ªf4xÈY9¹^$/*£—ªƒSêß$7±e¶ 2:È1íjøé¿aåu­q> È\Ò‘¢ °›ò¥"‘6AÄ·x,×z&Zxb ©_7¨o¡±eU·._üýûÌö¹íâêD_ÛZ”¼î{©±èË«íÝÏ®§ ÍýŽvþ tëTv2ês™‹fB¬£²ÔýJâZQáV“,÷îJæ:Î u8[9@OgÎ5Æ%¨ à&.¬pÅÒOnqtâžh²)’6-=vc·= Dë œÄ¦jiÃ¥Á§¡±ËØ)ªpG]C?ÀBÃiØ$‰2Ý3 ó=³–Jû‘HÚYÈ`zޤY^¹ZT.1&竜å '[áÚtÕóqZUú¯wû‹Bk—sRf†Vë[l˜°.êî¿R1o®ƒº9¡9UÒý.׿-‹o¹±•Øøá’R{ëó˜#‹UûVÔÂ%öÓ>\§@8µþÐæ´ÂÓïw¤GSÖqr6~—Ø<#Ù“²?£Hc[pÎu=k&ËC-òÒAoñBn݆az‘hwk#¸¦Vß2®Òé*âhÿ^õ¶\·Iûë6%§×.8š†wÍòBG[ÃìHSÁ~}5þ§Þ_Œÿ÷ÇtK»kµ‰HW¯Ï´ÐƒÂþ™‡Õ+–‹åIxņe¨ˆZ­e¹³¦ÓÊ}”ÖŠ¨ˆKý†ïÃýgLl¸3GÞf¨ÐCï®úêå­ï& »@ª~))Tá4¦-*ÙÓè§Qºòf¸é+òü´ùÏÎ٪׽uªÙh*·Û[âÌŠ)« Ø‘#:Me.­;ÑÑ€ŽÊ\üÛýœÍˆÕë’Ö;W5Ã.KVžÃRÈ옙©CO33ñð^Ž=ÍÂ@{çµcp0‹DL]¹ÅñÞý\^ŠKŒUv6*IÔÁÔu Ž`IÜåibË0û~ÉÝš^€`÷R'ŽW-ËY]›×óuÌÕ 9°f—_ãð¾·ÐÞSLçEq(td£k Ñâ›ù6×çÂZ3d˜Ûþb'Ü­+¦ë‰–wy1ÓN1˘}˜¤¾‹!Ÿ®"IÔåt²ØoˆØ~é­=+,bÿé cmÅÄpÞÅÈê0}Ç VözöŠ ŠÔ‘Ÿ:¨]M×VíÖI•—“†"\·#Ô|µ9ï.o>† $-»­¢‚ÀÃþþ‡ÿMpl endstream endobj 189 0 obj <>/Filter/FlateDecode/Length 30992>> stream xÚìÝxeð»ËNÓ¤M÷Þƒ–Ѳ)»ì!ED\(*¢Ÿ{ (8PDe¨ˆ ” eï e”î–î½›»ïB+2R ¥Íâÿãž<Ç›ñö}o䟛d=£!š/-‰¡'LîÀ®½ý4}½æjïýV/ºÚæë}që{ G~ÒÔ³ï¿õîÇŸjEí<,Õ²·e§Qfùs>j–zÍÕÞû­^tµÍ×»,÷ËÛ<;ÿ‹y¶7K€E€q³Ó¨´$N Þ™o†£á¢¢f'Ä›§§ÌÒÞû°^tõ}V/£H›ÿí×ï/ÒÊ;¾ûß³LeòÆé‹Öü}¥®áw)ïø¿Çcê÷¬]|±L+t“ë³ *uì[^{}v¤=E0µ9ûß]üû¢K:ö ŸÞüä»Î²Öl;~ßûÇ篿\*k÷Ƭ·æFÉ8÷Þ–¸8|‰XL ñ¡Ù¡«¤!qZÓÿ¹óæÌ}}ö;fY›¥½÷[½èjÛŸÄ‹‰êU_úäíÏ„¯ïÎzÆ7ç—§ú¿FÄÄií]îÒ Óö¸|ºkOÖÔ‡?½q9ûìÂq­èºèXá`§ÄÿEŽ\QÓeᯕO½tôÀ®zÛÕ{s«ó¤X×E’öÜ8uÖo?&ªì%í¦=ÑÕÕÞ­ËO°ÉJ‚Ðd¬š¾÷÷ &‡WŸ¾öì3¯D<7O)O[p©ÆÁÁ«ƒ¿ƒá-ŽûÖÞb?à‹oçœu˜mŸ·rùéÌòçÅüKì‹Hn`Üh/]éY¶0‹cx‹ˆ Ê·¬ÎHªŒö™+ìùáŽçv=´ª¬¡¼®4½JãÎgGùî휪»áY@ h9AûW–¼ðÄ£}ü^±ï6y8Ѹј֫JŠ£ÿ8ûƒÏ¥wúûqxÀw2öYW‘à“âc±dÖæ—OY0ÈïK©¡PXÛ¸YÚ½‹SŸÇO/•/}bê‹;üз÷ìrs®‚û¾¿)OYϯŸ`Ø ä/$žkˆ·©“»ºÚ»˜ýI7ÙàµU†gk={ø I®}`Ü—Ÿu“þç¿Â«ŸÄs v¨H«óŒ}qFHîÉRû çëoážM)2\]St¹\vã³€@p¯Mù¹?þ÷âAv4O¢ð¸~å+þ8]ZWræ%É®]e)üï…½b_qM¥RS{eß /{örL5¼¥ý¬I†·ÔœóQbD—ªß¿\±vþü‹d¹ºïØðë÷(ñÛÅõ©úcÁμš¼„¿Ußô,X?ìró©Þ4Âá¡ìˆCä¸wÖo ¸ºJ’ôúd^ôüZDMì2,rÜÛ-²[9#Tv±†Ë'tâxìÐÈq¯¾¦úß´íãFÛwã³ô¹ rk§O!»¨ÙWÂ~¸ÿw3²FËØÏ´ïýÅOãÆM “•Ë{ÍZº¾¯€@Ð:dl»îþ¸vo4ŽpœÎÞ›3ûæW9>cÙÍyhþNÃ%‹~aÙ‰nzö†ÿq܆Ï=R8}€@`qy¨ò> ¶ÇÐ €¹YÛ.'RSrú›·,ΨT =ÆÇ>òcŒŸI¨+μö÷†%¹µzʾ{×±Œê€}i4–ŠÎ;~Ù·ûSi;ëó=¹â÷OýßšçEÞ¹n›û#ISÛ9Õ_~sÉêwÚGþ$ÀÄ@ ±Ldà7ޜҿû“®ûÖ)ôl#œí…*’0ü#H®4XÌÁ”@ ±|L]þÁo«üßñ°¦ÓÀÇ_º ln8݇¼ºÓ;œî'ÖyP0£(9<éÏs]x8NB„>íÄß‹yçó¼ç°?¶ê§r=¦,E§™šü=cÝë4ò……Ò«û–´©iå]ºv±¸zuæT±Ûp÷]@ i;iI÷r„‹*{Ûˆ¥G¼xiq‡o.Çõö]>}æœBSVxfY‰(JÆmõzÍÕ^Ôkéõ¢«Q/X3l’F…D´tŸ“½;ᤊ8¹jΊU†ÿwÿÑhûý&¾ð÷Ÿ}?]§á80éUwnk×k®ö¢^‹¯]zÀ" ûãÃdË*»^hø­“Ïó¡[R/þÔÍ­Åâ ÷§|ð~Ök®ö¢^ ®]zÀ‚)QvÀìªaHœIrA½¨MF½Ö5k@s™ásýÊA½¨MF½Ö5kÀÝ3Ã14ì/ž¼+%i랟TWŸ_´`sì°÷Â"Fš¦^sµõZK½èjÔ –À:NÛN¾´å÷_Ææåœb ûÈŽ³ù¬)ÐìÙñÉKà¾e÷(-I¹©¤¤8ï^©²G¼½õ€aÌkõgq£…7î»®ÐÒTo:M¢'>)˜ø)4a²^¥)ý-ÓþõÓâeú”ÄÃþuX=r8°!Ö±Ë)vØ{7• þ>&Ü@«Yñ>Ú‘xÑSždêÓIœi{Àë‹ Q±Î|Eò9‘ÄŽD§€M±Ž-4a#ŸxfÞŸæç&zùtŠþ^h;ü¼„&0uÔß’1ïÐôÅu®íŠâº8kLàIô И)Ӱü9sŸŸõ&4fÔ“«»höÇ1ºã:WwEéÔµû÷&L]y~Npt جòÁ–ÒL õåXÁ×NšÝ õ¸¡ ±_0ûØ>ª Špi@ °Dt%õÁÁOÞšý‹õ><ôÇ Ôs6§œ­ÕiÔµû¿,õpÇ¢6öƒ ]pÿúïü^âÀÛ?6žåK+´´“·ÿ;m›8ðOÞ&ñ?9I'¾+®>Ó]Sx@w~o¬ç1ŽIÓçâxø‡}öd'·cXlCÃù½7»zÚ¶…߯á´í›-ÄdmÀî=øxïÁ×þŸ€ŽÛ‚í΀@`nØåt߉îœ[?‡ž“üþ{ìÏì¢UcGYÅÏÙ²•7çêr2Ý.\;û=ý¨‘˜ 60Yî¶ÐÜwد=âÙ ö ¯ákwïg÷<âlÞ"=–:yЍ«cÙq6ß`‚ZûdhØBsßaÄNpy¶bã±j×¥zâgùµŸõŽ7ç“[K°‘ÆÚ'+@« /¥êÒ’p ²ûÎ…%‡‡oZÂý|BE±cq©Ci•]U]Møê`×ø¨(uB 0¼R\@L=ŸÐ\Íá2%A2D•@L0<‚á´àßAhxÔ ½„ÐÙz;Ã;h ¯´ižõ|uàñ8Ê{j´eþ…c‹È îL“ÏŽ%7l`¬¨Ããâ°.°\ÿššû6sÖ;oÎÜ×g›áÖl{cG«L_ïžÍB-±®Õ?öänýÐ]>Ûãòcvº&Í,vï©¿yËñà‘£o¶n¥jJ]Á«`‡*^U-§¶–[Ë>ÖpkاìõöDD‹„´0Ø}D^ê¾^ Ô ‰¨¼}¦@ kµ§°^sÑîèó‘ý _ØlŽaÓŒ>‰KÜs 1$AbŠÅ죂£pÕ¸ºh\œµÎ!Š6ʰñ嫸àë»pĈѧO{TV::nêÒ墯o³>A¤±ƒ3ár}!MÒl¬ ê5ñDåÂó‚ó;Å;ê©zw»—ÎÛWçã£õ•ÒRËŸ²Õ§ÔÄç6Á0…Œý·TÖgúê“jb4fy@ ›³5¯vs^ÝÓî¢ÿ¦»aÛLKÓL=§>W˜Ë9¢œZN-›`ÜÕîAŠ Þ•½ÙÓ9ØLs¡™!æŽ(†rT9öŽ+.5”¨HU!·0›—(HÜl·™Kp}µ~~Z¿ m“ÞÉ2'n¯ÝFH’t§Â<¤Ô4`sÖ]©ÙW\ÿQ”«³ðž¾ç””òŠè ›`ØÃ•Ò§cmG6ÍXÝnš¦a€6€¥á¿åœò\^N67û€x?ÛÆ`Mp 6ˆ 7bZl™?'–£ß­£º"Ð Ø–?3«Ï”+Ù4ãÀoá—\¯,CœÁ¥üR6Äø)ý¢j¢\4.6bnÃIïÄQ„ἡ2NY?ã‚àÂFI¼§Î3LÞNÓÎQoY‡ªPCxšYJÞ›Ìù€@6‚!ˆ%i•é5š9Q®ÕÌ÷29œt»ô QMÒAŠ ^U½Ø4ÃeîßÙÆYïì¬tî¡ì¡#u¼Œ~ò/²ƒv´]¤¦}'u' I6TEÔ1ÌšôÕ3¬Í‹R*Š•ºÙ\DÜf|·¥kOí‘ïI–$Kt’EÈØ’±®Wôç Kà ӄ±ÃĘ\^îÁ…_d?;ÒŽTØpÃFsþq$ÁÌÕ'è¸Oó1¥¬›Žf¾O®¨×ÑïvtpîjÇP±¾è òàAÕš2n 'ʵrôäÂé«õe‡Ĉt~úyÁù]v»‚5Á]Uݵæú«¨\ݯ@ 릡™¯/•³1æ­öÎ\êiFÇ莫íTìÈ×åÇ{ϽÉ{ëHú›èÆæe‚ Õ„²ƒŠT±±f›Ý6©íªêÚYÝED‹LüÇpzsµ³TLC:˜4€@VI¥g¾¸XæÈ§f„;Ý~ÓL©¾$A‘°G¹Çë;R<ª«°‡À©1÷JÈ»«º³C7÷„èä7âTz©bLz„ Ÿ zrè:Î\ÊhÀ Õëè¹çK}%ügB›Ú4ÃÌ9õÙŠ©ÚÔ¢Ë?öàz¢ëZ·ÎÇ»Ö§Žª;&<ö³l±¿6 ²—ÎË4µs†£A °>Õý§çË"OßÓ 'ôGUG6Ô­§Hj¤xÔ«¯ñIfѶ$´d°bpe¿3Â3«¥«\un±Šžmk¨\í§jB‡¥hÀªTªõ%–öt=â/»õY-£Ý«Ü³±>Þ‰ãô¸ýä(A4zÌ”x ¿‡²gWU·3‚ÓIÿòÐyÄ*bÝumW#éD’A}LOõÁnD@ +QªÒÍI,â!‰óµ¿é)5£Þ¡Ø¾¹~S /èEÙËáüpt—¹pN7U÷huçSÂSHÿð×xèŸi»êqõ{t4€@Ö!_¡ý8±ôA?éPOÉõåzB¿[±kmÝÚvüvïÊß÷ãú¡¯,b©c¸=•=;«:˜U=)ý‘§žsZÿF œÁ\õSJÞ¸d0 ЀÅË®ÓÎ=_úx¬ŸÛscæ¨êè_µºrÜÞr|;ˆŽ²4|†?H1øq¿ß×+gŒ:<ì°·G¸lÝ*È`Š :…¦ÂpÉ`°qfXÍ¥%™g¸¹ê͸܆©1­FóÉùÒi!Ž×§™ š o—¿¹±~û3²çÞ—`â4ãç;Â,ý6Î\K‘‡{l‹ßëÂñ×áë¾ÿ9ó§égŸÉWæÝý{ËŠœïøÎ .½K‡EØëK4Ùiæù±h®z¯d´U ¹T¥þâbÙŒpyO—Æë¶•é˾ªš÷sõOcìÆ~åt¡#¿£éÛëå5À,ý8Ì\K‘‹sÌ=~B”,jmÏõÝ»?r|üÒì_õŒþnÞUYzçë8î°G‡EØë€fá²?>B"ô¦©Œ]/4üÖIˆçù‡Ð6_ï•tnF²!ÍìÙ,ô Ö…·æ÷ÊÙ Õɳ"œ" GHèÝfŦMõ 'cË È(¶GVªü5­òÍöÎ!RÃUd.j..©ùÅãþ™Ó®W‚ÈÔ™lšÑëLÙÞüü}ìÀ¦™#GMzÛ6İ›f¶n›nâå‡ 1ìÀ¦™ó?iP(ò^Üù×Õy«?1ñÅà™xO$ #A„ 1ìÀ¦™©wZÄ ª—Þ£ã<ÂÃ"l-õ@Ké«4ׯsÕÔ®•7ø(®_‘Qý^G ¯†®Y^»,Y“þtÕ)£¯qt©¸«@3€£?ª'TX„­¬^hœ¶mMâsj ë>ŽvóUßWÿ˜¦IûŸã롼0ôŒM✗‚fF;tž•8sªÿ´)~ÓŒî~º3{’jOéè8±XÞÀfáè}«±:»z_QýÇQ®ùä…×Ê_µ#%óœ¿Fš±y}œú®î±6¡xç+‰/)ôŠf£¡­ò6 4C¿¥W.S½ÛÉa­zɯ5¿¼({išô)‰+ÀÞ<„Ë»þáÈ—O>ùX¡ª°%f W¿Og˜“hÀ,h†ø9µ2µF=½ƒî‹º÷”Œržó×íùÐ3÷>Åÿ°ÝGqc'xäBõùæ¾ô¥HI'âàV@ sÐ3ôÂäò"¥nXxÆÜê÷‡‰†½,›)"Eè™ûÓ~Sf·›ó¹é;‹›}4ËÕïÅ^'@ “Óèé//m©Õk=ýã×Ö¯|ÏñýÁâ!è–û\—Kº,û[9óëºâ\ÕÙÏSæÞe¦¡qé½8.h í×*F.Šç»oÏ"Wo¹­³`8úš"åIîükbõ¹/S>»›×súpész¢{ÚR^UÝðEkiÏå”]ÆÞ¸ƒí#Ð'p{®ý¯—ž®:=/õ‹;¿Zd¸ù¶þ 6Ò ´R¡ànÜÄŸÿ-wÓfR©Ì,«úÓJçwQžžGlu:¡‹à®3Ͳ•Ç¿M_pç~0W¿ç:€ ½]Ì$Ï‹&<Êøûë##ø;vjg½>sô8]×øIaÍîöúšÅ°ï)ú×ÇNNtºOô~ô6¯äÄruóÔ¶Ñ Ü;R¡`ÓŒæýwµ?Æþ71¿ìç·fe{ÿb»÷_îòúZÀ‘/_ýË”ÓO¸ ܺÄ69ï¹’¤EŸÒ8mllKºÀô8 »_߆4s4«hÌòŸ· 9øNZЫ8hZÎWìÇfš’Þ=^qìv³ß`®~ö: Ü{§gdê;nƤØ[äÇ݌Ϣ}çO‘ ¥Ò2Ð9p/B$¡_uXðöÅ7rWšœýbq Ø nv•–ÄiÁ;ây¦ÿs£¢f'Ä›§§öl¶ÖG¹W†îM8ó±&kSü7ϼ5ËîOÙ¥¡5{—d<0¤è–ZxăfioL¯/Ì5SŽñ“YêíØþ=³Ô›v!´?MN„ŽÔO?þÚgNŤÌèk<ê.póTiDhÚ3´÷ö«Ž¶[±´Å'ÇÅáKÀbÍ-X5 ‰3Ã%GçÍ™ûúìw̲ ÎÉ_ØZŸVઉ¸r±tÝKoL_?™&/Kµ;þ·è—tݵøz½¸aÃTÓ·wìØei_›gCÐkJíߦ¯WÄ›pæÜ‡¦¯·sÔ‡;^lÝϤÂÞ“y§"zÄ•$AÞú‚^n½åÇ Ìê€.¶"Ò‰†ä Ùá·ý¡ôñöZûëŸÒsôêh©bk½äq): lÎr2×c.eÊ>œòáSäÓL :Úš‡Â£SYÔ.ßš¼ù89e™r{=ºl¶Ð˜ˆÛa7Íõ;/¿ó$1%€ °š¿›¡~Ê£þ=›œ™â­$-ÿÖIv5ô7ýñŸÞÍ¿ÇËÇ‘D‰Z´]%ȦI>¥í.R àÑÖõ# º4ºÐ®à¸Û±^E1×—«ºÉ”Ës5C H,ž€@wÅý€;s–~yæËˆ ¡L¨•ýõ3ÅÓ*rLcêâ%ÿÝk—sjgÓvVÇô‘TO¢ˆ2h¥B(­÷·¶›;huÈ*ÿZzÏk…´=—ß^ :¤ Â5ƒÀ`—S›óÜã!>&ziæKCÈ¡˜(tH›"Ëwû%?sæØºzekí0±*bØå„C<’ZaŸõÂùv{ïÖR7œ§-m§ØT‡yhàμ¼$'íŸýùnd÷>L«lCþ–Ç}=—ûY)'QgÙ['T™ßnSN{!ÓI!­i¥‹á2üß«?®røQAEITîÖ¹ƯÖß»Îû°Çáë Å#ì”Ûp ØìrjCÞÛ¼Nɧ¿;Ýã?Œf•m ééÞ†ãIu4q¹†³¦œôtc\,óO¥+½—ü,ï÷ÊáH;F™i_¥+oÐ<á ¦ N–Òn}½ Ü^ålscïÂ>«CV]±¿rí,n^ŸRšD5¿“K+ Ѐq¾›|åçg¿ý!Á%ÇÓã­~F¡ˆRú@UF.–¹]O•º/ËußÌ ‹ |žœsð·Ùù­pˆIt Pí\˯dgëÜHãyób÷xö(;ÞP(i§ØZ@4`œßz?‡dÙϯÿœ$¸ôªþ5ÊúwíÑ ™ZË)¢h'‹mЏëž5«Ç§b_Ø’òã½§î^%.Ô¸’Ôµ ”Ô:Zó)A^õ^ìpÂíDïÂÞ}6Ò®òí2‡·åXfnÄÿøÛgHã_Å¿¢Ÿ%²ê Ì_wÚ¶T@qb\ï¯É© çˆ7ÖØ3„=W=ÄNídåí‰)ì½*ô¯ÐªÆSí„1"m¶V_¨ãx`U4p]š \h—'>ðÊ_Å¿>I?éB¸Xw‹Hzºm}¶¸ëžå][å“<øŠçø ›™C…zaLaÌ>¯½zÃÿ9„x˜X±­Þ~š ‹/X5œåÔz_ý ´2H\ >÷RâbÑOCéa¡Lº,MhUŸæ'(~mø¯h”D±ç: 4¤š þ#HX&¸üâå5¢5„G?¦º,Sï‚>«ê>¬ÖTÍ`±úˆ’©§Ñ-€@ƒ4C†üÌ«æ_~>ù¤àD:™þ=Ѫ[´uÛþâÌÿngÈŽŸ;gÑÇzž93ôíwÆO~’}dÇïñÓ¸ûÃuÿ,ÄŽóö‡ÛÒë¬rî&xàëó_VRJÐ]¨Ü£À‚ 4Í“–Ä1KSÛ¨^RO†. á(9ÉÓ“‹ùÅk©µSè)â¿ó`¤1fiodäÃ-~o»Ç¯zmC¦aÙq©ön¿,úš:Íœ>Óï³/äé\•Š}dÇï1Ó¨¼+­íÜiØGv\é]q›×{y6Ë$ ‰kñ{'Ùº:ã¯ôš4v\4ÜpòöÝ¿7;M`K‹°ÅÖ –h²Ó̳Y¨-êeÓLد¡ìcòs)Zžv9µl=Ò›ñ¾þ5RûÎfú¶Ùâ÷†E‡>Íá±9æÂ99ûÈŽ»ÖÞå{º›¸¥í׬¹¥dí½| 7¨d÷ø3lŽá eÙq¶ä6¯ws5Ï5 ü‡´ø½2Êef‡YŸ™ÃŽ‹(Ù@s×;ò²6³[r½Ð¼U7ûã#$Bo²õBÃo„xžmíõRZ*ì—PšO§NMc8Ìj½áÔ—é{]”éâ íÅŽøz½XS{ºªæ¨iÚ:*"Âp)¿±c—¥¦nIJjÉ·;›`âÎÈw©aâ+BGäÞõ q¹ßÞÓÙs†·7OmNþM%é…!5ócN{ÜT4rWØêØ4qÓiÆÍ­—‡aóL程Šî2U”2†:daVÖδô-ø§ÂžùùòO§ËNuñéÊqåªO©Ý…wŒ2 ›gí”z¨ýCÔXu€¥S.¢ìØUÃ8­)ÙõR*|q¸N¢M{2¡˜T2åCk¬}¶äz %ÆôUšëWN+ÖËÑpÂ…i5ég°iFM¨ÿ¢þz„žhôzU5GÌÒÞK—Ö´ø½)gSÕk?8î'ïX!¼ºïééLû»Ì4eå›U—†Ô”%…Ta1U\HT–~_©Ï—PöN”Ü‘’;SÎrJîÁõSvv¤XdDì Û xOò=ÏŽ¡¹þ3÷¿óvatãÍÙÄSÇÔÕ3uµt]ÃH%]yY›´G¿«H_¤#toŽO{AÃ-uÖ9“Ù˜f®îiÚîQùü?Ñ_ÒdÇvyb’1Ú„ü‚]f™Äiiñ÷ø ?öý¥oì6¼[ùóÅŽÝÕªL¶aÆöV`S†ýÅc–¦¶V½§Ýí”nÊÌÇ2™«ßpñÔ†P&4‚‰0úúšÚ3fioZÚÖ¿7£¨pº^“ìrxbš—fÓLa ÏíîÞ[YuâΛ¨¢LNV6•}…“]CÖºÒ.î´»íÞWÛ·»û»vô1ÑŒÃ0 :w>ðö›‘kþ‘ååU{{_zxüµ4Ãbœ”Ë ¹Ñd#N±¾([—}Y{øœã&©òÖzûÙw)}¢ÀãêÅsÅÁÅl²iwÅe‰·t‚]ÇÈw[qÉ!³Lâ¬ì„{]þIî;Qï}zö£mÃô•´.SË äÝñ]Þj«^„­¥^°ô@cÕ8JNÄíê½™dWoë“J¦\"/Ý´³ÉÚÑ_¹¼¨,²ŒæVånµn÷ü™åTù%ÎÅLNf•%fÄþ´°>hv3í|ý½®Ü8Júds?œÍ4ìЂ¿Ê°+ŠÄ Í›p&ëÃ:ª.Ÿ—œõ·`ªÚ©Ú…«Úy1² ’ZþŠ:ûabE{žÆ–¦õ¿±_ÿr_ÑÞÃ"Ûë¥/8`1«¥ÊñöÖ†1¯ÕŸÅþ÷@}]Î쥻d)e².“œˆöjnÄ÷µA5Ye7¤™Ûïl²j®ç\³‡dßûçäSù¹Ù(SOÖGè#;ë:?¨HÊH-³ÕZ® g‡áÄðB^A² e£,^Mª£•Ñ]]§ô×KŠtœX‘ÒfÎ{¡HjfûYóϵê¿k¾«D k&ôß¶àC¬ù(ñºRÍ‘M{ÿq˜ü¬óoß­_™Ã°*¢:¼úʸ+×^±…ÚÌ7µ³ÉŠg‹bµ¨\XZÙâO¨"«ŽóŽŸæžæ0T{}‡‡Ôã}i_’°¦{U{h=Ùa`ÝÀRnÉIñÉE΋5ÄÝOTF¬¬“>BNwûÈ®ó4WºTVɹö|!Yxš<ýŽþ]Ûkºè@EI§R†jö6MЗ9—ñŽåR9Ѻ詪©´‡µ÷†‹ÎudͨAµƒE‰»d›xÒŽå×Դoêë[ Ü—"g.Hÿm¿o”Ûëí&Øcé¢W¤+1ö]¡ÖãSþº°‚êÑù‘×=¿–\3‚iGØÙ^ÓÅ+3Æ”4ë-Rs”{ôo¿íÔC×ó Ý<‚gK}"`ÝÝ»)º% “÷:oä:îý½(níÒž§áiµA™òŠŠr'yFP Žk} 4豯Îyed®ÿ6?@ ±A¼<í•1™õøëÜs]wìêYò¬’PÆ01¶×d§J'J©¯¨nN”9²Ÿ·?@ø´êØ$s$A¶Sµ S…%îõ^¾IéC¥u]¼fC•ƒc‰«KHzúð;WOx¸ÈÝýND–ªEÛUüö}+àºwÕ—tdh3îp„Óžþ³tÅ«;g1Z†ä‘XöÀº`gyÓ8â(5í9,ÃqºSåȺzŠü»’Wê Ôú‡˜ñ”-v`hf¨¢ß]ÝŠROèð|.ú,‡Ê}VõÜdõdÛN3×-6T”2ú¥²1:§½!¿=21èÇÉOl>ü·'&ïëßš5\Ý®ÃFsOé˜.vÕ«ú>5‚áœâÈKÍݨ)¡S·”nªo_§>¢ÂÒ4¶C›k÷ðo~+c)ÅóÂ3y—"Êýß@³“ÚıƒM6<4ë®M&'ch~:'½!ʸÓî÷ÛÂe¸Ïsûk•çñ°’oe+ÒHÃ6­ÄNk¤² ŒÌ;¼™ÔŽ+#8Œ#ñ kI¾ÙC„\à4ÚwÌú1[ê°ø€õ­“Ñÿ¶MxûG‚ðZ7uxà¨Ï÷eBú`ØÛ*{içÇîÈWET!¼­Ç&{£ÄCËÕjýDDF“¯©#k7ó7gr2ãÔc#õ‘÷óŒ#¯¨”p½_©/<µÑaé“—&;{:¹¹9•WÜíG0ÚRÒ¡–®p¶€æLxáÁì1“O’邵 ÐX¡†Ó¶ÿ¥¾¬Îšéú±»lŠã\"dîÕ[Óåä7žÑ½ÚÞ›é-%¤6Ù!Y!©©ÞD“·q>Ã=³‰¿±›®Ûÿ”¯óþ}>ãTÈå!éi$AŽUu«.ý+hå°¤a…%Ywõ~’Ì)غ£î§­[@sÂdáÁN¡»ƒwONöá…ó±b+‚]N7SŸWå ÊpûƒM3·>[J”ž'céA¶97ÐTpvpj@ªÑgu„îÁÚÞΧUόԌBšae:TUwJ<ÏŽËìd“Oœ ØñÁÀâbq‡»I3J»÷sE½u%„¥\ÒfZØÓë¯Wl®ÇÄë‚-47PUæŽÊrûÆS:ÁøõR·Q[ÐÅ„Ø&›ï]è]#©©±7r#åªäÁïž´çLÕ+BFˆY¥–Ç[ýÈÃþ^•x®ÄÕÕ­¸d–R;þßKªµÓO<Ÿ×=ï6q&G!Y¥¥_ê1¸þÀFËiÑHŸ‘oJ_KÝ‘Üí½‹j¶HÝ»z&zßڢ͚6Mj8Ë'ÉÞÒÖ¥nÐH1;™Ä?wέŸCÏIþ ÿ=ùq†è³z¿•þöc¯› ÉÂT2u"ý¨­vHhfhZ@Ú­å—9I««‡kFôÔõÄ2s“"7÷ŸŸ”‘åT^ž˜0„ÃÝá¼ý»èoçü=çòèdØØ½ŸÞ>5WEóŽ~OðBØ,«Ë ·€Í4<Š?!tâùßK»s\®ÞÏS:ªFQmˆ5a‹njyôSÉoå0lÎó»¯w9±i†x¶â؟ن4óa†ÝìzÕ qSi†µ™Ü4„Ê'lsW GÏ È ¸5МäžX+Xû”êi¤™¦è¸¼”°Ð#1½ØGvœ$ÈaÊáB¹ðíGß«s¦±ã}IÍ•8Tn0ómÚ Z‹H3 &‡=¹1fcÝöš;¼.oäå4Õò×èªZÌ€@cN†m3?ËÙL“ðP¢ÝGõŠ×íºÎ nêÅdA™Ó›ém«½Á¦™ç…Hq}ánÞî]ü]ÓUÏûÐ>XZî›iFÔŽ”Ù9<÷Æs›ÛµÛNÒVs©ºYh€(pÛÉ-·{QÝYÑÔŸè¯T{WsJµ˜â€@cþLS2㵎ÌÃtýâvוÙCîîG÷ãÚîNºÐÌÐÔÀÞÄߘÈ=7Cù¢ “x[’i†× —q^|ï%û"ûÞËbDÕVsKöÇ:<¾A°žQ7±ÕH_Äu&÷Ñ_ýM)§DƒÉ fÇÍN£Ò’8-xgB¼nX5;!¾5?°àXfØýüþ9Oïôýíí\ÏžF_V®ÏOâ¤ÏtÞaG9˜¸ÉcÇ.3E°UèÝÿ¾ üüÁ0qãÌp̵¬H£þÊ1ÉôMñ&˜eaèõa«f'æÝ*G,ûàÐ »_´Ô55LWëxm6cg¿+KO¶Ð,í=´³É½«®ôäcaïœ_Kuñn,Rˆ{ë8{¤Ebv|oï‰ö+¢å/6>Éw;¾ro‘ø^ëmÓK[|r\¾D,&Ðø‡ÐìЂUÃ83lgž7gî”éO·Ö§%®/ ûVS7ŸÿWJÁĉÁa¯–ÖùUwçzë+_IøÆ·À=áÈ,Ó§™„]/š ¢àËÁZwß=G~müyXµüS§ÏøÔOfñ –XgúY‹­·Fñg[|òtÁ„9õ³eJGðŸçM)?ñÂyOuÙ)~§E>)3]7l˜júö²³–Ôù@Sϲ‰£szçS•? vÚXT‰KV‰H 7cu¼phÿ¿å‡¢Z“ûÏ…Ý»:Ï©ˆ`ëíÑ»WSÏ·ÑŠ¥ÍVY6uVë4÷sã+Ž+ˆùbC‚ùœ`‰’Šc bÜÍ/«ÓÕíQ.V8І»"(5(%2¥a<Õ!õ\ýæäs¤ÎÄmRò?ñëÕÏ ñUÏ×È¿ôìµÐÿÌ¥’NGä‰ÏçöìIl°Ä?{ÇàÍe3C Å¡èaï6l¦sÖŸ ¢.ìø¶Ìh,ÆÀÏý¯ÿ¯!ÙŒ3ò²•Ù+:ñÛ©möâ+"…ȹÄy×è]ìx¡¸ðû¡Ï;sÒ°x´7ÊýaÁ„_”‹ß·›]6;¯rž[×ÝnûâòܺZîÑ'=ü{~Uþeej…cXŸ³×¶ÇÜÊ®ÏÙí}0‰Àìp¥à;`æÏ¬?ÆØ½jÃm H È ÈÑsô*Ž*Á'aPþ ?nLúÖÕŸ?@BJ6ªãËNñÝ“% dwÞéÆŽ[ìÌ'ù}«ûJ;ˆi4¶àHéa1×.„×ͶMfˆáîл¼wWûÕúaº·:’ Ÿ=³K±Ûa½.ñùÜ#}ЦewZäSp,Óbÿæ>®}R0íÀ*àÖw°úʪÇü'Ŷ÷›KQ RIêz(5 | Î8ŸÑp4=‹qõ¼¶â@:LyhÁŒo^÷|Ù9ƒª W$NÛ;øóäç‰ß Âý»Ç†Ÿµ°í5CjuŸ»œ‰ˆ&rõÏž:¥<¦&"X,l¡¹JMÅÞâÝqÞãl®e’ÜC1µú'¼+ÒÞYbW’èœ84w(Å`–hCq=ûæKÓ3õ™N|ª\M;÷öÍÜðÛÔÇb“-oדӑ£]ßxox½%L%½œÜñ·ØLA@ ±Jërÿæ1\ʳ½“}*IŠÏ0¾cßñØ(kÂ>Ï}1E1­½Mñ^ìZõßNN¹FoÉjÀRÃÆ%ÖE7–ø/[Ž)4VieöŸøÙä­(•!dŽc¹#¯&à¬s:—æ†U…aŠ›@?~ÿ"ºHÏÏ+×ЖüwНä°#/Cˆz¡Ä.û & ÐXŸóUçi†îæÔ݆Û˜˜yå˜KÕ€‚þ˜â¦Á!8}x}3¸‡ÊÕ½…¦Þßpl¸TEt½Bì ½ZàÉ4ÖgkþæÑ^ØhãD4¡"I=h–ÚQå$WË1ÅM¦/¯ßæx¹Ö¢ïé˜=uJÃÈÐ$bGÄÕ’iS1íÆúlÉß<Êk´6Α Õ\eM²ïéT§’îe=Lor¡\|8Þz»‹ ½åv|yL¯ó_~^Ñnpº`SGÞùy_”÷ìi §mw¾ê<—â†KÛÙhûø4=ÐU¿ñ›'WFWxðôå4Ée/Lw“éÉíuEz±¼JòÐäÉ ÷7 _¹ÜÒNÞf3 ;0““8f¯¿gGL6@ ±:[ò7=à5ƆHÒþ~{~ÉéüTß¼Ñ4SÊål×é‡#Ó˜L87\'Œ/'§ÞÀ˜åæ”͘UÒè°©èpG™/&X,ìr2nkþ–‘^£lvªSg| Î,¹°SµÂŽú…ËÙ@*µÓÝd<(O‚Ôäj+¬â¯íaßã¬â$¦ ÐX™KÕmzAÓ%y OŒ,}Z«›¡Ó%¡žŽÅ¤7%W:$]Ÿlê÷^•TІ¦1ÕÀba—“Š÷th“M#Élu’$+ÿì\ã*Ð ®–`“‰y=÷xN¶šNì¿(1ËO–èímÉ­ŸØ•Kö§õÇ´h“e´xåð@£å“NÍ2Z¾­l¾Ñòá$ºøv̰…&-‰c–¦äÜí÷—ìëëÚj×e‰Œ|Ø,í Ž»5Íp9[ØøÂÚ“^¥õ™l aØ`ÝŠi†C´7K{ÍU/KÀ‹nÖë½Ïž÷UÇÌŠB™Þ!íä+»vuÊ˳ðYˇ±§ìtøº>À,ýl®U‡¹êK4ÙiæÙÏUR`7/Sèê/T]èåÓjÁ"d¤YÚëï?保|ªñ0ˆ<1!ЮªÿJZu– 5Ó¬j®¥HÀ‹hÖë;þ³Î*‰ÇÆ’¸sç,|Öê&íxYy©1Ð(}ÌÒÏæZu˜«^h.ûã#$ÂDW,e× ¿uâyþ!´Éê-.°/¼ºyæÜ1/7ÏZßšÛ¼øHÙ‘ÎòÎBŽðÞë 1ž;vYjê–¤¤µ¦Š2CC‚ §h ¼0+{gzúƆr’¬l¹ä@´¯¾¡¤•"E‡ˆ$ w,z&RôÄ%SEóÔ{5ÊD xQìˆT/7;{';°i&a׋ח3Œ#I–h("ÝžH–{ÝØ2vBüpë'üPô–¶óÄ7#œ²Í—É,|Ö PÜšãU§Æ”Ö”õ“ºå}3>Ú`¶”Üð:žäãQ­–c̾ê0W½Ð’@cú*Íõ+Çó¶f®9X²q_[±ÞK—Ö˜¥½iéñ7•èén\Î>M¼˜ÒX¢Óf¿[߈!-±®¥ÛKBi"µÅ6x°eUß{½5Š?[º&B­Mºû×{=;ï«ëK6DEYø¬E”77tùÙq~»,³ÌÒæZu`à M“?zÌÒTWÏÚ;¾¦T]Z¥­ •¶æ}§ÓÒ¶š¥½ÙÙ 7•0Œ¿N?ŠC"É †‘³ùÆhš¹G÷’*¬±^V³Ò +?:jÏëÿë¸n½C~~­OÇå~Ò -:ËÉijV´4bkY*ÍQn“/ÒÕÍÞp–&(Wçgºx °£l`Õa®zÀÒ%;Sq:Ê1š$löܸ«™ÆÚìØLÃÄÕƒoÎo°Ž›>¶—„îmL©T´“‹›XÈæ?d8áK£Q»œýÕQnÐ 7œh &£÷op¶âL´cgôÀ­‚…!¤0ÿDÑwÝòù¾á®þʺ|º hÌhNw–wA?ÜÊKà­%kßñ•zædZi–ÐΛ€ÀT°¾¹n-Ìè/V_ê‚@`ü×( ÌÒfÔjÚÛSu×ÎÐ>·álãIÚĵӶ)''ùŒžn¾Øß4¦w©ú’¯¯˜k‡®0*T¢”—ž.©àí0ü­×G–+0Í.ø×ùÊsQŽQ耦 ƒ$’’»9ŒÆlRjRBíÃÐMñøj¹E'‹kô ÐX¬ÔÚ”0)n& Ð$ånŠ\‡ÊªV²ÿÍÞ«¹üÝ4–%¥&9LŠ-4MrsÒkt*D'‹kÙ4ã7×^Ô Çý€EÀAÁJT%Éq8£+šâ?ïvλ×^mR:×ï ý•wjÙt Xl¡i”R“ŽýMwäì{|XÊ´>ÉckfÆâ¤Ö¦„Ú‡¢nÏ>ß‹Î+% "|ƒ4{¯4–åJýI úà6ØùOPZ_Ãݶ¯¼Së7×™h,K"ß[ì…~¸ å†#«s,#®OÃfe"Îà‹€ƒ‚å)r½DÞè€Ûh÷²ÀUçµ(½¨á¿†ch¢WÀ"` M£|e¾'¶Ð܉œëT«¯Õrµè °(Üì4*-‰Ó‚w&ÄóLÿçFEÍ>w¬-rR¯£²NGÜæ%cÇ.3Ë2x¡Yêåšk¦4WÕRñ$³Ôk®Y«¦¬_ËÞèLùɋȲ±-®7!Þ +–¶øä¸8|‰XL ñ¡Ù¡«†!qfø‰6oÎܱ<ÔúŸ{´ÒKìêv±©ç³SÚoØ0Õ,_u÷U½÷a“ÍX¯†Yײ÷:qD…N…Î-};[僧4™àÛfÅÒV«,&ÏhñÊáÆÏ0˜tj–Ñòßæ3ZþäS{›÷÷‡-þ!y»ñÙ`w£å^OhÓz_ðkjU›m´øÏFËÿ®•¦ãkûOÞ¯ú…ÉjÞü¶³‰Ï‘Ÿ·•Í7Z>¼‰Ëg}Ùø1ßf™p MÃ6JO í?¬«,G«íùl΂çë°3À8ŽK¡¼Ð™pCW€åÀ×öUdžûÙ\ΣË.Ú“Ýÿ‚çwçÐ/Mq¦œ‹‹Ñ€@c¦Â¥Ò±<®½ÎÎI§?‘ Ä÷š ã8”KËÑ€@cyø¤=]í´)‰«¨o^/ÎÏÆ9Mq *¤è°(8†¦¡HþОÌ[E~f§ÓOǯC—4Å‘r,“•¡ÆòpöAgîûž ξYáIÔt €qRJVn]N`Y°Ë©1ÐHyR‚Ñr“7z}|J5e´†‡N0NNɱ…, ¶Ð\E–GNxºS.ûÛ3¸úÙï³Çyàþ4Má‘<¾Ž¯`bRŒÞhžŠF‹Ÿ|ª•>_µÃhñ ã× ™A´q½_5ZØÔõN|3Œ–Ÿû©§Ëׯ¯Ç39ÎøWÁ}Í3ûÙÌëÍ´ÒõuZíz3m<ÿ Ð\Eñ ׯO´ FOÜ Ç:aøôÉ=JØÑÈÃ~Tp-Ø0uNwY{DVwËSm ¦!Ш%\;tÀ]²W¸î]øz޶bÀ³›¯+Ö‹÷Ìï³Ev~β+RšD?€ ¿ÉÑÐ\¥DÁ(n.ÕùmÌ.}橬@¤0µû} tÿ·9L­ìðôLõÓ/Öôï‡yànM=]O7Þ×VSìT!Òù$nnÏ©SÒ«¯^Žàp40ûz tßþ€é3Ä.2$awé2;ÎæÌwhŒl¡!RS% xjÇÊ%{ÆÐ! ãe¸@% И€Û‹F”`ºáÊRl”Qs Å/¾ÐêõFF>|éÒÓ·õ¢Ém„C¶·WDŸQ¹fâË7¯@¥.~¼ä¢m­:ÌU/4‹v9e§™g?Wu…óM%5ýûeýôƒ¢c¡–¬ìØ.kñ5}û´z½!!#ÍÒ^Ô‹&·U !B›8(Ø6W檚…kÊìz­ŽIˆçù‡Ð&«·ºÂ¥²ÔÍ𤴗ÉK]НÏ4ì@®’²ø[wGëÖ:*"b<;2vì²ÔÔ-IIkMÓ^Ôk²åç~k2‡ã‘DÃ14&>èhsͽþÍN+iW×Yiòz3ÂaF‹x©•îB˜}Æhñ6+ÙF‰-4޵Žš ôÀí%MœpSÉ¥[JÌ[h®š:Ç*må}ÑTMΛ+÷„ÆÜ¿{løY~C©Þ%óÄs'Sƒ” -r9Э_-æ 0¦°K—Cï½±z4÷ ;3±%}?ÞpøÏÎW·ÖŠ&}áò߯ɞ–¾^,B·©ÈêeUºêû¢©|ß/¦L1Äšµ×]’\[òð‰¼Ü˜¿öÚç|ãèé%f h2Ó4žª]üК?ßðìæÿžwß·þŸ«c:éê×ú «@šSÁ.'y¼\S~Ï‚¡áêa ;„V$Õp0SÀ=PgîÕä Ñö`2ØBcàPçP­­ºÛÏ‘oìüææÑl¸qY7z‡™ZŽ—ºÝ›Ûï`€]¦ûmŽ. v9Ý'ÇÐE×ÄIVv=sÒĺòØq‰3´SãºùœzèÀZÜjhLL^#¯ÐÞÇg9éª#kí:×ð„Ù!%µ f h!²òLpŠGzoW\L »œ êªîë]Nv9‚ª¾YåI!vNYiž§ÌÐBzñÑm²à±rüX‚æ£w-~]4ØhùWÃ~3ZžÎ**ÑÛZÀãôéˆUn²ýa¼ñªÁæ†]N|(…®€¼z±\Xì`[Ó)7÷•]»ÊÊZ-ûÈŽ³ùšfNêóÉ\yz:We¸;=;Îft ÐX)]ÛUT¦ÆüºtBý±a¶uíÿ±‰‰7•Ä;‡‰Í¹úï›J"VýnKÀÍN£Ò’Zòío†]2QQ³³SZÿc½‰ÓÛRšßú>SR¸cî]DçΞ7žw:vì2ód‘Ö¨×{•}ÃÈò^„æênFšW+Ú«©×ïTü|›gÛ”¹ª¾ëmÁ»Ê}ó(ÆñÅ¥yE|òÁf}ûú„x3¬XÚâ“ãÆàK¤Ueg-¾ÔÔµË7=i´8˜|²Uþœä'Œ_°…LÜo´œ™çÓ*õ*.4þù»õÆÿž&®£3£ó«FËËæ-øŒÑò÷g‚2^þ»ñߺ—¿3ÞoÌØç–7u]œf3ZÜË×øËïë-4Ç{(¿³9†gÙñØ.½.Tž·íV{1<¾ÚóŠiÀvÜïÇа™&2ÆÏÌÇôìxw—GKØv“]I-]Û!UœŠ¹hlÄ™µ…^ÿÄ•þÉaÇC¤¡õÚúBE 7YFêéÚŽiâtW9ÛH3 {šÆ1{lšèeÅÙµE=]{ÙöF’ Üõö"ö:-(?ZǦ™Îã=<¥b¿ŽÛ^®*?R×Ë%æh‰ïur!µÎ5Ñ—$—°Õòu›fÆgô‰\ÆÉêõ¹O×Þ6©¥j£ÓÅéJƒehl‡¿£¤Çò©á²ðJue±²È†ëBi˵2_¥ïe»Ë˜ô`p/§ÿ¼Ô·ý#¿ï~ºgxÃa4c}´Ù@Cê*n¿ÚèCòýj;aÒ´`´ø±Ƹ õ¶ˆç´ýFË™i­TAßÖú|ퟦ4q]†Yd–Å[hþæ"ëæã²âtZ×>‹ØpK9ãHêìÁ:R—#ÌÁ¤kg†@“–dž ÔæfÚÝñ5/÷üéÈåîCòwÐ Ý*õFDŒ7K{ý|GÜæYWJ[Jó£k¢ÏJϯR{~iœÓ®{Amî…ǾXêðƯá?Ÿ>\ߌ¼3Sxfi¯¹æ+3Vzm~Ö‹4ÙiæÙ,T˜+ºãk:xÈÛ¹9LU»‹=N•Ÿl•zCBFš¥½^^nhH]1Ãk_Û>W˜=Drá AÅ ×’¦Ë®>[×ëÔ'ý^òÖÎâú»®7'Ã<Æ\ó•«F½6?k@3)|°ë…„x÷ûhÊz sD'ö;³#ìcnֶӼܷý‡“†xßž·õÞ£L\ÜRv„}4åv6ÊÄôú‚aý|‡7h´¥ Ïð»Öt=êpôæ§™š“õŽSº¸¸ D»„:fd¥hï*ÊìÛ*fGØGSn§1×|eƪQ¯ÍÏZÐì@¡7Yeþ!ô8Ã#ûhÊz=|•Ýû—±#ì£OÀ¶5tóqñqð¶ço»ÇzÓÒ¶ÆÇÊb“’Öš¬½ùùûŽ}“a¯älo*ÐÓ<† ¢k¢³EÙ•¼Šž&í£D•¿Ÿ-+S«ÎM9]YUz“Ë7H;`¤áÆXìc`˜Öæç+3Vzm~Ö€fÓWi®õ‚OàÝî6y¹oä?'5zF—\|ïõš2Ê\ïJÎ홈¤$]Íp´ KM—ƒŽ{oœ/œ^z¸=¹oCðû«_Ϲr©»ŸQLe,a¾2cՍ׿g-¸{f8m›ýÑc–¦zø(ïò•}ÜeB¾£¨ïöü­á²ð{¬7-m«YÚ›Ÿ¿ïö/p#µ% ÏÔw­îºÄ{©Ht… ¯í#:¯¯3;V™”Ð=ßÍï®÷ ù™'Иk¾2cÕ&­—©£V~È{w1犺]‡ñÚ_~Ôõp¸¾¹Vˆ~sÀÁnÆÍì×>=ÛoÇ=ïu²d®l ¡ 9…ÇðúUÆVºm$nº]%£//H}kCad¿à@?pŸ«=ÁÝ&Õ­OSÖf©+áMü”R6Q`¸°žqƒB¼>ßz¥ö—ôš´`iˆmJ{Q/&á*µUlšaÇ·Ç' ÂYëÜ·²ïW‚‰év‰¸bÌШöÿ““$qRà»âêÿ»k èDÆ Ýñ3 h,Ï“;|~±ã?U?9ÙV»H¿6ÁLïÁí‘3ü¸¯!Íø4<Õ©¶“ÚÇuæá÷_BvLÁÿÛ»ø&êþà7²“6I÷Þƒ.ZJÙeSÙ-ÂQÄ…ãQAÄñ èãƒâª‚ ( {ï!PViK÷J÷H›ÜúÿBmÒñ}¿Žãw—ñëýrwùä&À0ùhgùÛØÛŽ;€ßRÿ€O¥ì1~Ëa\;›4”`öÌ›{0¸Ú­Qà^sãCÏ:®.Ð|rþ#˜@ i'þÕgE“—+ÛÙtqÅ^N†ìíë¯rñå¨ðSá$}õ N.ú9é×Ôìï~É_3€Öv9ý3ìMÎ>å¹*¢Î³=¥™«ÇÍø—oô«±±§s®OhZhFbFQtz‚«ÈuÃ#ÇïJvàˆû„Ù Ã"·mç/ZBd]f#:Q ßbFŽ€6´B°…æž<íùÅ×Kô™C/]Š+)0mþfuÒ —ëÇÍ þöq'ÏÕœs"àbÀ#ß=":݈ÆG(#ÿ7dý¼£s–€y ƒ¦™­Û„£Æ§Ï`:ê£2Ê7Ð,4m•WIöÂÆ ¯KNzý¬¬÷6mò«¯oÓSdèyñúQÀM™ÆÐëbwÝ”éýÓåkÊÊ›N»¸Ä¯ü¿YŸÚUºfƒˆ¿hÉ?Ž4mn4vûp‚Ü”p(_1 ó'C‡þ7çÀv°æ¶ÊCÊ«VF:L“W¦”ULTÅ×w]ÿÈoóŽÎ…ãi:â âröõr¥ã•1Yp"š¶I¸ÿ€ÑÍÿ|@°k]Ü ï\4æxpp½TYVÖ~Cæ8Má)XÜ[R–Tâó–ׯ„-‹Î¼³ââòöw¶¸ÎÂYœC®ÊÌÖ>-€@Ó&‘…EþQ¡OY Iv™c­ßè*''w¦}O8.Æ/:ù_ "]Hq_þ¯Y¿nÎß8ûÐLc„¹¢½gLû[cATöÁðQÓ§a“faðqÏX¡Þ}šÐ ñŠr‰Ü̹˞Ív¸Òy\ÜÂS‡l]©‡!6¨øóä™{QY|ܱ֧áÿº­í’68ÿ‘ùÉÝF·tí½{}h—9ãàö.ÜÛ §וþÕ— _ü°OñÐW•ë=ÈàªÚ.³Ô{0K'OUóüóûyk Å—Ÿ¨Ÿ¹øÇóž%Ù{#t'ßÞVemnÁém¹Öh‰wNN†/ZM  eQ÷«†¤dÊöîÇ‹–¾ºðM[ך4€K}Åyל‚¾‰â_3¼2u{Š :3/´–1üÔ¢5Ë%)›6=eûv;öûã'_¿ulWÌÑßqÞS÷ï{uX—þšþ‘ú¨æp=—5ê×Ú~’åÒ)zó:Û×+NÎÉÿÄöõ†¿"UÞzòYLˆ¾%¤ÎMÕÊt“œ[,•‡ó³{¦X¥É¤"–bwÊ[%†êíÝ/ñŽK[ˬXZl•w° Õh‚&‘œ~mCü²aÁGŽ4øø<'ýâ¶QôÂÛŒ@ÐÑZBã¢96þ¸w™Ï‡?~ôaò²rQEK1+¶®×)*´¨ÈE­®U:åP<˜µÚ¢ç­%÷hw¯ytX.™ìòx/‡Þì’@ igb·,[êyé’cEe¢â±/ý×v‘>µ5ê¼ëP77ã¹ÓüÓkãÖX룮”cÉþªÓj…>~”&¾ÒÍÕEÝS渲zãZ•1Ó‚IÅ‚äÙ#2Ç0–¶lÈÕmÓq2Ñ3!ÒèŽph&ŽWé‰Í Dƒ‰ùì'&Q€áñ•ŠÌ¿ÒRÓ|è(üÞ£œ(?o:—&N‹Uwæ=½K|W˜h:´ˆøhYáŽCòƒåƒ:xSÔ*•á¸tRVúm•ŸúÆç2”Éôo†wgéýø P§„\qµvE!,ZHp9¥ú?ÅËÃÈâÒÆoU‚ù¢vßÐ ~ˆõr¡¦óð2=‘ZGz0>8û´/‹¡XS~·\bÂMÈógð3‹!ùLòxé£~ãž“:Á-ºh:͸±S6nêz)½ÒÅÕ£¦F¡ÑðÆ=Á¯ìrLûÚëo]L’.Ö•R>T5WTm¬•ŠýIôEÍTÑX8ßúÌã2šÒv¨û1à¸JG¨Œ÷3\ Qr–wö"ï¢ã:$cÈ'>1t2Ž)*––À’ €@nB+èGfgeH/Eñ¢;rST¸¹­˜9#¤¨Èµ¾>/À?/Àz›­î_ÒÐs—ìbªû:'Ê%QfÅ`㇕ÕhWÖó¦u:vðÙÇ«´Äznœ÷÷ãxK‰Ò ¼ 鼋NGÇ-úsQÍÝ5þšìÿË1ºÀ +hÀh‡ë_ûþµg~ø¾ã2^ÇnL”`²BB²þ6ÞÎÒv+ÓôØ%*Þ¦8±Ëio¬>*JåB¹Üsšá +µË«‰'#dñW÷>‘î<¬œâ0NS¬ŽG:t(8¦j$¾ÓacÝ™¨k7,a1¶„,®sÍüMrN‚ñc™Ø¦™‘™Á[ƒi ñdF£¿Up7´‚Žt ©Ý*üc¬p<4Èxãì ³oiEð~ÂxÑ1í‚û/rV©‹ 7„;ÒwßæÂå”k>­#ŸŠu¿~ef‚H²ßTQý|Éâ*“A&óêgêà…Dª{ÔéLbÜ’Mfg’™—É,§Ä QƒL39‡2‡-Á `DAMt-Ì{4àžÔŽªýýמx;%ž×ÕôÿëÆòAšæòõAB° Þ1ªcŸ!ëKX¦adACߣµÃ-’¼"ùé?=Óò0CXˆ!Ô™r¾Íkú·rÚ€Ñ_\0qeŽ'Oäãá¾ÒnyºÏr2™ø™pŠ“5Úá» £°|­é2&ÍÆDŬ/&º¶hT1­@ŸÒ »óï^!/K**ïQÁ,ž4à^Ñ š+xöìœ/þû®l±»¶¼Ñ½i¯ WVÖð‘I×û¸"ˆ0 ̹fÏ£å)Jœs¸Ô ËøÅý#‚ ABs?_Î,ąך‘ÿF·Û‚/˜á4¹c´X=Q_Hä’¹Õá¹®œ(” cz‡˜¦ 8ëÌÖËã¹€½ž§=T‰ª´©—!³ ¸oµ£êÇ-w´Ë±õ¦ŸŸM»õa–9Pƒ%„ ÄÐR×àFšBIS&#>¦é"ׯŒåiy¢òBqÁ&ý'9ÔqOÂ+Œ µv¡J\ÙÑڇø*¢ª€,(" ÉB4Ȇ0¡C-ÔÜM­A0„Ïo¿~5±5§^9ev´ÀÜ€@­ ú5¾¼ãåÙ£fÅÐãx]n|Ô¨3ž!„¯@œ¹]¬‰"¤1‘l¢”î´¬¯És~Ä’:}j!SÃä§ŽýhJâÂ02<„ A}/‹ÄHÛ-f³GzºCe•Öã¢sL‹Þ_]«Udi Qª"Jˈ2Î!€ c‡RCÙÛ@í~Î=x[ÖG{îÙózw=ÌQ4àaÕŽªY8gøÜÏŒ+Ë–8^¿ÔÇfUQŽnOØßt¨abIC4ié…Ê-t~™²¨¸ïòOunn¾>žç/tY³öè‹óÕþÍòæFΨbT¥LI¥ùØeÑŽ ¢M…/ëëËø ¤¡‚˜»éþ$BÝ4hÈR Š]CC6‡r<63%³!°æ"°C ÉÍ$C#™vVoÓFš>[zŸŸxî[ã7ó%/5]m…¥¨½:Ç!þ$ió銚˜‘ñ«íÛÙßoXqÉÎû}‰q]yúž¡NÖwéå¼aÎäÓ«B.Ì)uîjž œ½ªŸµ,5Ó]ÉV–³åålY¶ÅòG5[­$”(ßxð¢8J+ '9®p&œÿ:žé¶Í 4“>áÑÂ~}›Æ>’¸bÅö>üûv/ÖB_¸íû @ÖÈ6ÖsõÕLu[YÅT¡¿P ñ&}üH¿ Áh/j°'ë)ãn{H‹¿¦ïOQGR2P¦Ai¦ÿšh£«ÁáœgþÈ|v@DC½ÒŒÅ,çêÐÑMQ.a—µCK×Û´‘f¨I ùoï²ì&޾Îêê*‡GºNÙ~zCCGØ%Ðx{ x€@s5`Ü£~ ½Y»* oÎ^¼*üLRU·=îMÉæÊüÊó!|Pwý%,ÆT³5(ßèù¦Ý*VUOÕ5p (CÏ wBqG‰+D¸X„‰Ä¸X‚KPA„‹„¸H‚‰Åh¡·%Yµûk¯MØÅL½«Ëõ4ƒ rСCžÓU ]Íœ5Z¡ç3‹¢ ð«¥Îê8ŽÕYûœNÃ56° ulJ32B†b–éêF¸‡òBÉDwÂÉpjмRáäœÊOîÒ&(Ç 4ƒ2͹åñålE÷ÊÌž,Ɇ)§ÕÖ¶ýGL™üìhÚëªÐ<Æ–?>ÐzU‡ {6óBÙvVoÓF÷­®óž˜ÿ®þm·«hTZmVç?oI¨…Ê0Qçm3½aa###' ÂرßçälËÌÜ`³(ãï7 z÷\VV~ðc„ÄÇyK´îܶ†ò'þðG_ûý–ÝÛKûÜ8 •hk5UʪZÇZ½Xoô"½FÒX)¬0ˆ ÖA±^+֢ͣ1lÁ¯ÕkÙç8LýøMoÿú—©QŒBÑ‹‡±"Œ#0VŒq«1F‚1RkŸE9F{c4ê+0Ú±#ÐLxóÌ‚aÕ×Ê+1ìŸî.Ó=Þ½ô¥ƒA…AjÕÌK´ˆvRöpq²†­°àWêþ¬­;b«(ão1Z? ½z _T,ÀªÐZ-Q´F@Z5$%S¶œH›ÕÛ´‘Æm”Ûsóþcøì_„ë°hw¹DØhøÉ–Ó‹B êPšÙ´é)[Ö‹B êPš9~òõ‡7ËѨ#^‡’U]vÿµ…æ.äÒ)úµïˆ)P÷Õ¡—ëÍë®úœ9¶c×þ·ÿuãs/^ryĈ²®ñ·¼V*œ|ãkï‹u Mþ'wŽ!KÙ÷”ïîáù=úe:H"Ôõê?Q‡ÒÌ?¾¶y¡ƒ:”f¤Êírn%õ€Uµ×¯ÔÛ´‘Æe«S>V8þ3à g2Qçì2½vÙß„—ìxø7©KÆ®òE9Æu’õQ¹ûKL–ælçʘimmàá¿¶|:,©««Œ¹ÍM»îtM³°¦™+ÇÐð‡”4í{Bc®èºÃvùˆí²¿©}¯:ÏÇР_-@6ÇuQ5á=ݲ4ê®×æäcðk ÌDòsÖ•å  4­C´œÿqPÿÍ3ÿÑ­^§Ý}ç'òic7F°ÏQ±ÎAÄ3£àæ¿Àà´m;“øË¾±Õoþ`Yž]Sù†óq»”Éyšt™ ½€Û-4­Â¥Ï2ÇE5Dá¼êå¹z4p_xE¹Dn惜4³g3ßön\ÜÂ=›íÓRrIJ˾?†}çøÔ;Õ“>0,iølšßp·ÆÍ±c¿·Ëôöî¹Ì^3¥\:Å.õJ…“íRoXð+v©W¯xÏæt¨;a¸k™òŸ”=÷«‚0Çiý+fí—.µí9´pæwY ^Ü=Ô{—¥¸åV,-ñÎÉÉð%@« 4¡,ê`Õ”LÙþÏýxÑÒW¾iûzm5½Äpì×wN¼÷ß‹Ó2 笛üÜÅgTe¯j5EŽ¢Ÿòðìm›éUWõ9ñ=»Ì‘qßÙ¹sŽíë6lÕÞ}ól_ïÁŸå.·}½!/E'ßÇ tǰ*Œ]s´0¦ÎüüÅ·Íô —_ ›Ï¸›Û.~Vzl¥Qz×÷ÙŠ¡z=½½îôx -h-¶ó1@+ 4Э Žá‹{-ä—˜²kjrê‰ÕÇšNÐV×g8¼ W¿l–i¸‰¬5ÕD»¢¾qÒ$Ëêí$Föªý¨—õQŠæøÎɉ…5 Mg6i.glK?¿Á7 ÇÀÁ NMúsÈ1ÛøØ#˜àÚ´Ë—¾‡@ìŒ3S¿á%“Jq)ý€Õ]û’ÐjŠ ¡€]ÓŒQðÃ\?:×~0”iZy8$•« .©x“¿ôƒ€‚6@ éØä _ŽeNŸøV§»zÓJO·N«°µØ?ì¼ãÐw‡, Ø‘pÕ ¯ÕNuëß×»Ýx&ÎÉ| Ó§SeÇypiš®k÷©.náQ±ã¾\Ñ÷øáÏ9Ž4ô-4¾“{¬ËvÄ6úb>û#.ÃGìmD=¯5^µ>Ôy]ÛU­;åôÁo®S‰ø^àÞî°8†¦µè5²A]Ò»ßóá‘#~ÿyVÆ…ãÿ:&f«ªlOSø´6 7(ðåÇ?}a-;4j85™ÆàvNÀ–ô§¬?€Jsïþ›»u8®úÜïZç½×:·~/ ´|ºë„ÚU3,pÒM'9öò*8»ÿßs{Où"ãâFgç7B"MOˆaƒyK_r ÷Ào¿)}ÅSÀ-€­8$¡^¾ªè–±æiËK§-‡æØì¿hpœèÝïù~ƒn½ÞZ°8ä«Èoüº<™<åð¿iðñV°…¦­}`8o–×쾊¾ó?Ú–·íÕŒÎS\!—èàà›°Mê$‰XûM\BüŒð§~[ý+[ ·ß-E²o¿ÏÈäÀð¨¦24 hN$NNx|UÜê“Ñ'ŸI›•,Ú4;éÞ}žÓf/\ ôz4ˆÊih@óóz}œøïI>“`¯~¾m¥Î¬ƒ6ÍHùéÊ[Æ8-_ Í€@ZʤÔè975-åÜMg?æÁÏËG}KóÃ~ü¾iL4  ‚ƒ‚Û ¹ã¼GçÙ>泪•[ÿ˜Ûéù8Yhðjüü¶)³ÞƒõÏÅ–m´Ž¡BC Yh@Ë ´¢àó#k}@¿í3Û÷w¾;4 xEjÝK×—ý_mL¶y–P|u|ýË/Bã ЀDZ‰ úöYÙg­tí¬~3F¸ŽLq›â@:BË€{d è÷Žîü£vµTV·¸çâñ™§ý+ÙÚ<*4¤þ¥ù† ‰h¬r3ÉÐHêm9œÃ^#žØ²`ü’q«ç~Rÿøc®“u™("lq£/ÏÁåûlßÎaacsr6Ùe) “—÷‡íëuvê[W¤9ç ûîâñO//Ç$yÏv~öéЧøßà‰ºñiU*¥»a@«b‡ƒ‚‹rís$rG«·±{°l…ã?¼þÝÆïó5ù)—'o®ÛHstK×ëæÚÇ.Ó4Ô^KQ€ÿ»Ô«”wkÆw;TšÕkãÔ‹Ÿ~4´×©aÇŸ ŸÒÌmŸYSé‹0 µáÙòÇZ/ êPaÏf~@( õ¶“ÞǨóG…:²·h¹Êk »ìÕÒßÍø²qÕúšõSݧ%)!q²Ùëuwëãé1â:¿SU}¬¢ÒFÛiP” ‹ Æ­*(ØeËí4þI!!£QaÈàÏŠŠöäåo±Q”QtwV&¢BHàKê†Suê£ónY /Ÿø(—:2ÐeÂG=>WäwzfM¥¼Je½¹Ø¥3þ®žîÞ °ZK ±å"ŠÖ¨C«†¤dʦ? ;X½"© uêª>J÷chÐò<Æ$°1oE­¿òÌÄ3ßW}—Zù]ŠÛ“ÃFððæÜçˆB êPš9ñ=[N/ 1¨CifçÎ9¶þí^¼u(ÍìÝ7Ï–õ¢ƒ:”fò êÆYš¬·Òþ®=)¾oÐ?™ÛÝŸïêш:”f¢¯$ ‹0 •ÛWi¯_9­^±ì¯¯¦küÞ"|—ß#­{Ü»]2$—~¬úᇪÔÇ\'q#lÖckÊ+÷Ùezsr6Úk)²Ë4ÈÃ@“e9¶øÈÔéžô°Ÿ{íîêéuï¯õði€EÆú£Ç.“ÚÑêIU7r.œés ?•'~Jóf̲^åsP¬ù_õÚ ®“Æ8';ÍRouõ1»LoAÁn{-EEÅ{íR¯ºñôý¾„Á˜K䥃ä‘ÚÚó~°hlD~ŸoââÑ‹0 °£ž¢ÙxVø.ŸĄΠ[ð~‘©p]ÍÏOd=6P1h‚ëD?¡?´S»¤Çu'É“ÇyÇy”«¾zàpùôE“½$|X Ѐ¶‰‰e©áR¾x¶À¼„ ð |Ý÷MµgýæºMóóç…ˆB&¸N ÁzCCµ¥Dé1Þ± âR€%–§zÚ•õœåÄö ê+áCã ÐØkƒ¥:í•­Û¾ÊW›Ež=ößÞþ ësN]|hîæ=ª h ÿ”öDˆàý#NΙ–Yøx¢™ËK4Ä(yNÓÝg¤¸=¹¿aß×_¨¯;‹ƒbÌŬø^cí0 XLLRý¤Æž<gù© ’¢«Ï '+ôàt׿™í±J±Yç2˜˜Ï%9³}…ØõýDu:b¥{̇ºyב×%Ïž&OYpKœ¥WPÍØJ“tŒ’’ØyJ}Ö{;¾ýé¦EØ´åÛ7-¸òè¿^`‚q3Þ[,„ÐŽ «ú3˯ûÌÜ).LÙÑik|?àõ½ùt锵‡]‡=[ëåÊÃác½§ïHj"Íı·øäiÂòʼn0>Ϊ†º£¥ÌzÝódBÍ¡]Lñ–À¿}äi — ÓL&ñ ³øgÐ_a²VŠÓ“åcšƒŸ0b½ÜØé<¬L‡_Ky±>Öù7™ñŸtX¢è¯|Ãbl6™}†û_§/¼h¯hsL„9BÄ^Û¥‡ã&Aiöį\9ã­os§äSC¤Æ(ØTÓÌSi1µ€ó"¬›böÕà '·_¾Qq¾V|NŠñcé¸9æg]9×Z[[O¨i|¢3"âZû"|ƒK¼”éÞø¨#Ðp†êc)?ï:ú¹d™5¹°,]­óYó⿆“SS×}¹`±î|?èa É ßæ§ Ë·ÞÁ“ö¥õ¦–#ÈI¥ï’íô·ø£dnéÔh”¯£˜‘´Ôº!š®´žÐKsDŽQò‡Vè!7;Cã6[šÁ+5xªïÎÉ8nŸ¾4Í=_JÇhž!~°ù©¾œu§Ÿ™Ã¶5§õø@G¶¯#K´E¸id-êI{=é / CNS¶ÂÇ}F?ÿŸHÇ+×ï'Ý\ºù&$È„¸4a¦Ûžh Íýbý8ã7ÁøâiÁ úÛÌ+/Ò‰:3n¾,¼|Qtq‹l+«ïʆúS!Ø ‡óp6Rl>iá×q˜3l+kž4ƒ©ð¯ æïËüÌ D¦…t´è¢°ê)˜É=¾ãœüX‹ߢ&ÂÅÖ}LŽd«]Ùþé7-ÂMs f'ê÷Š áãt€@c*Ú1|MZøØç¿ŠQ\ÛñÎï\wèLZpO?õ™okd}”f ³¼H±]Içeù! Áù‰~›½BNkŠSÔ÷.aôq.gD—V8nñ =ÂÌáá–0Ú•åˆ|“°§`Ï_3xŒ+'ÊOZrÿtÌ!Ý‹+8¿H&ê*IÉ9aÌÚqì*íÆª&,,6Í•õ¶êšÊ¦lω¹i¶¢.üý×IyÐ W´oÏivzÝ¢µë¬ÃÝ'¼w¸‹ƒÌÄÇÞ©ã?ØTI:2õ74îÇÔ;wr[\å\è|~ü³Ì|›'±¼&ž“Ÿ©ˆa1Üìå–®æ~é°–æx˜>RÌ z»`hÏS‡×å’¹¹DN‘'ãd&CۘȞÊaE9'òe®íL2²X-‡ï®ÁG)Øî2®õgÈ?O^0an^„ ŒÉ9¼ K :D Á;5Þy B:0inI|žÍ„qœ˜q2ì@hß//Œ»P\û·§¦;Ý|ý{*u£°•¼Ê>Ïs¾‰4©…ê:a]­¸¦FTƒ 2Ze¦åœl85—õÜÛ: ƒíh ²øh%ÛE QÚT ÉÎܾ×’ÆÆ‹«>Ý:hè[á‘#àó ‹ÔrjÊé ãA‰_%®”+÷Ð8ùÖ7=T_êT­uŠ(ÿÇ7ásü@Kàõ+kHM¯ Eœc’£•¼J4Æqs¥]Ýiw¾å°™4 ™æ¼²šOmíìÝ»ë˕ʨÒÒ 'N¬NJR¹¸´\£18£h4|M½°¾AØ Ö«jg¥³ÉÉÅäÞÐÉÅäÂgùC–§^~Û7¡vøRþ:I¤ºiЩä9œH,= !ºI¹×¼a›Ú=ST°ÿÔñ•˜ûemò°Ñ‹`tÄ@s9cÛšoÆ5•U%g~üzìÔY›`…hK½ êêºíïô–·nz‘³" ¥™I|ªÌôïæÈ8¢.ÂÑ4¨'ôÕ¼êj^U¯rö‚È3G8XPçhql* Nf‘¡ðÛfPšÙ–ðgXXÓ˜99³öìY2qâCn§¡qÚÈ3êyzÔ×ñuZ¾VË×h¨¯5‘&ÊúÇ+ÍN®F—°Æ0¥Y)¡ïïzq(ÍôYqlJÊ4(Í òâ1—+MøsL›»RKQþ¾­gZK ¬ºò,€höïZò÷1°6´±¯FÞÄ´7÷D,íR1æ¢ï.†© w}kÍòÒëÛoâßÙ¹sŠÖd Ðjš:Q]‘c‘V¨E¡=AL‹%”õ­Z"¢E(åð¾€ðXã i!*ÜÕ³CUŵŽ×Ó ‚ʽ²³#Tª‹W£AéXµŽ§c †Æš Yœ¥pÊBZÌ„ÙÚ'Í–¦a6òL&Ò¨çëYŒ3b)-E‰”’¢ãb jÊ1RkvyØí'(Ç 4ƒrÌÑ~¥}û.}9¸³z”¤Mîc:ub%,€…ï?rèð¾­ü¯ll\Êq7Ü„ã¹üMøüìBu*øÛ°:û|¯Œ§ÁH-Fê0žÖÚ¡I˜1„ák™4Z øÕ³D eæSw?›Yb–ðžÈ"âÓ|!%D*ˆÌ"©Yê`pe×;4¨Ô)•Z¥k£«Äd£+ô£¦^30ϱ6k«GÌ\_„WtÂæ_¾ã"üîmhº.\+ZËš‰½Pw¿/Û³™Ÿ”LÙì¯\õéVUÉ™ÇxûÆÎyÑvÆÆÓÛšëݳ!oEÕw”q++3R LšÒÊ'™Ü¼…÷ùæ½;o)<”ž?=²•Ä'*Âf×WÏ “¿ ÀfÆ÷L h£³Ö=.Â(ͼºðÍö´(l÷ƒ·Mü•ƒ†¾u˘ÁÃÞ†Ïß¾ò¦ï?€rÌ‚wz£>*£1­üof’Åż5?ý•âXC”–2Cµò¿¼)Í`«Æ|‹ú¨lÓ6Á" himãšðÈSgmÚ¿ëý²Ò è‡Ý ao…E ƒÏöN¥W^ß*ƒú©öçÅÊfßHÓÌ$ó†õ‰“ÉÖpÑQxú%”fÌ¿®ÃÄâVÞÚU‡ÜW;5m•Aý“Vy¸Ki“sÎõEÃNûøuƒEÐAMÓ u/ZjË=MàÿZ”xã Š2­=Í\ÁÆv6^H#÷î'rr˜Áƒ¬ÛfZ}šA’¿Š»qКlRÚðÌÓ´¿ò•`΋Ç`QtÜ@ÀC‹™Ñ#l$´´K4 Ð@ €@4h Ð@ 4h Ð-åf’v™T¨ê…I†zÛÖ¬hÕ¦(×>›… ^¨&êm[³à>-| õžÍ|T@}¨êmëõBSC½€ÖƒÉج²€PuhÕ”LÙr"¡^¨&êm[³à~ÙaSª-#Ô õÂ$C½mwÖ´ê@ƒ~ñØeR¡^¨&êm[³ U4h 4€@ @ €@àªÿ}q•" endstream endobj 190 0 obj <>/Filter/FlateDecode/Length 32436>> stream xÚì|EûÇw¯÷»\.—Þ{BBè$$B¯ *bAQÄŽ/bA^@|-ˆÈŸ&‚(¡—ÐKè-Þ{½Kîr½í/‰ˆpÔky¾Ÿýl&³eöyfvî·3³³¨Ó í'7ƒ¦GÌ駇Žnþt-eoOK\m÷é¾uxÉã¿lmë§~òÅŠ¯lÈ^BF°;¬(—`‘˽rñ’EÒµ”½=-]pµÝ§»¹tåc¶®ùï*û+Ò˜¸ §±ïÛÎCyƒ_ôiþ÷òö¢ªs Ië£lâ≇“—}IÈÌ2„†h—.ÑOjÙ Ðyà©¥Çÿì!³Åø^óÏvÁclBÍ j#£ËªøU ¬1[Œ¯%LÉýu#£Ñ@0È©r=Q¯£ThH˜‚‚¨›t¸ƒÁ¤Ê@ tãÿz<@CôtãÁÿÕqš¶q­g#˜ý—óço¹-:ëw9‘à9³u^aRšì‚=)r×|÷Í’+UZ~ä'â´Ï““›¶bõYûß\·ëÏbÒÔŒò#O‘Ÿúký½:-MÌ×UÔëðCÞ}oi8›€`%g?Yÿëºt±?€ê9÷ƒ/¿ïËýWŽ$Ç·­˜¾7³–úþ—Gq» <$&B]ÖÉ'Ѐ/í=,eyT¢Öü—»jÙò÷–~lþt-e/ž.F>Ðå§Í8­tÜåpbeìq§¬E5n1è\í¤³çßíòt1“%õ±„,•’$R|M–â1ÄÀÖqèz:¾ø GÔ\£éhøÂ×ó]5®(†’edFXxðx@µˆ®EhMYQÏ@Jœÿ›0QMT#(‚¯5DMËBШI5 r‘‚®P’•r²\IRÒut¶šÍÑp8jãÂUsTdCË[*ãÆýœ•³ÒüYô~ïAe]rª;ɵìõ…+yT[?öVï$§Çí|ÅOWèâlnƒ×#ÿº•Ôé_~ô5í½“…¯{•l˜ÿ.“¨e"ºÒMϾzÊé«§ gN½òÚþ-øÖ§<ý[ÿu—+G:ÞY>þ7iüŽÊî;fÍ¿tîÄÚ!ÌÆË¼˜ \ÇúâÇÁûg.ÜúSÊSéÛ†²þ¹•TŒ3¯Þˆù9ëRÔw‡/:3ú榶vxË ¬FЀ zyg ƒÖºy­,v,5«WMÈabBÓt *‚ªŽZg\(µµÔ:¥—,|#WÇáh¹.*WŽŽÃÕrñÈû‡Ä|s¤òM“g»2p@á‘ûÿ:(ßÂPõT|iËÅà²FJ•Š´„["¡Jêiõ -ƒ¯âãʆ­úƒ@ó |ÍV£šY¤i\C ÊgT§Éñð¤öñšÆ*P]­ }uF!uš1y÷x–éGÌß¹&mÈi/…\J¼¿õõw»âìÆ!Ë*Ò¥<ž{„Ï9rÆ ‡ø=YÊ!ýØÃþûó݈?^úk´göyž[o,uo–rhÿû%K“™|ŽûÒ¾1ž\Šó—9‰ÿÞ À¶jô¹W …3KG¥áÿâ:W3ºt"Ó5St`&¢ˆ*èåôŠ Z…’¨¨@¨†6†áaªÚá“ßõòZ;nÜ„7\ëë+öë—îåÕöÙZ&¾¸Ê\ÿ¹ZÃň.•ÍEÕ® Æ =ª÷Ò{yè=½õÞžzO F±•œ­¿¬@Ö0p£»¢uHQ­A1IVÝ4Ï>üÌ-Ûo›åU²c Q«Emáå w×dÉW¥$rÁg†~Õ«lÇ–¢9 J:¾JòKœè®«½…G‡àÒDtèüŒú>žËiƒ?;öƉ§wÖ5Ç7£«ÍkàǸ3”âê(Ùú¯­€ lµûêvU¯$úKÿ´CÛf:§fpSE«,a”â:¦’VÉÐ1\U® ÏâAéÊ:¸¦¹ÛóxP 媹ø‚‡Çõù9«f¥” -!KR¨Ç+î÷]¾xê½ÖýJà°Þ-·t_²¾@9Ü MBm PR{½³qîŒçc½ßaxi,Òòâ¥A¯ª©î³íÖZÏô‡Nùi¬ï÷\|«Ný²úrZxpÁÈW¾á½’cŒ¤5¶d g`?ÇØé76ñ7͘ùÖ1o¸á `—è Øª´j&ez`×ôª(‰ÊBfA£¨˜QÌÑq<ž‘ ½ÇªÆ=Ødsp œ^†ˆ^Ú<¬Eµ…Ä‚ë± ñ¡!ˆ^è3`ÐKM=MK¿ðûÖEùŸ¶ÏÍA>4”DñK\ùõ€ÛÞÍ?0¨%²Ùp§ž8WæöÑ[ó¿ÿ¬ÜaŒàÁñ-$ãÖì* âHÑTeЏþý h›C2j‰(2/Ì©“íµÔÚ\V.®c$”\ÄøÈ}âk‡1õLûs#é‚ñËQy6);“”±¶ÏCï¦ 륋à¸VzåCÈÚó¶"hš ¨Ftgçûoǃ~ÆN¡Ä¡¢ÕÛnÄ¿îU²mc–p07{Ûâ¹§½â¤õJ £æâÚ3ÝÆ:äl[üÖù^Ÿ®1Òx~Ùòì°~ «Vþè¶þ*bÄ%…<(­)¡‰± o|{|Æš¨;ßn•Äý_ô7ÀæØš#ªUê–öu%tTÎÔ“ë³ÙYÙìl=ª’ ­ê¦r#`=ebF&Æì«í‹/:T—GÌM'§Ÿ¢žrÑ»öÕö ×õ¢a4ë4qÙ©mxVr`ïésx€>åã=ÈûÚª$Vô—«úL}ÊwQ^` ÈéQc§|ôû:æŽyAÜ{RÑi+ £Ã§,zWµøÕ£Ï¤LdGNöÜôÆÚŠÒÆ7_Áó+ê­õ+ãXøÉ}¾ŸW”2Ѩ<ÙCþûó”)3ƒ¹"~ôÂM{ãXP/À¶ØSÔp[¤\>ÀJl·œi$5æ°³³ØYr¢Né3ðeá™= =n„£›¦2ŽYE“¢s=ø¡TªÑ/½Qù”/o¨K«ï¥êýùéÝÒ¿¸Dî ÜûÑûÀßûiûEi£®Q®malöÕùŽVq48šOМA+“•Ÿÿ®ÁçcW*®azŸ>}Ó·ÁËpqC8jÑqמÚá¤Ô¾º]5Ä™9ÖƒÓÚ>W•W~“üÊ#8Ìãϧ†Ã=`Y3X3¸¯¶o*åâ:æO¸Ä¡i†¯Dá‚FñµÌ8©"ˆU@ÐX«šQÔ\|qûí~“ÞJdᕵ>÷êŸë©“R?ìUùåßvþñö"Çž×H£3`_ß©öcS_ 0ýqƒMöÖ†- ƒ|&oVZ_(ýæW0ÃÔÃûk¥YÍZ=A5¾·6ª[S$xQªÏуaì? h¬QÍHËO=³5ÕcÒüÃ8M²E›“+òë׿“Š2ú¿ê˜²¥VÛã3~Ü€N$¼"xtk¥®r[ÃÖ,âçàà)–º‹œñíÚßKï5_¾ Bù3sÝ^ùJ=ÖÁ¯W–>ácR¤!FAc£EÒÀÚMQn'ÅŠN¦\S‰Û¹ŒùÉBÊ' co5RÄÐçæ¢§ã¾úÀíçÓ„è繺:]KÙÛ6v6d5¨>ìíLzð[M†€ëÊkoW½%Ö‹¿wù1‰ý¥˜Á^OÏ‹øÙÏoŒ¥î"Gþ ö‚ËÊhMô<ù[·ÔÇŸ9?%·1·éÖT°¿ƒ±…æ’ÑÛ^‘†th/$üá#0LožÄðz¡ùY'eÙ'ÐБtÑYßšxâdøúÊ>íÆt-eo8Z&=YѸbÀ70ˆ5ìÿk|ºD—>»*‚Á3½^ž ¾MÍ3ñqß””ž*,:d.)3688 Œ÷sAÁÑììd3J™ÁN‚¡x $è}‘øJmÝÙvÎ7ð—ñS2œÿûÜÅ©sç½êÿZÛÏp)ÓÜŠ YxcÁK~/Ï œ÷Äî'¡[ã“Í`Šl®Ñ`µò" éÐlc°[Vú¡_7$••\Ç0 ¾ÆÃ¸¾éÉÙV©Ð~v£r^˜ ùãRƒdEÝòC¿~5™oeÛ.q¡ÉñOT¦Ì¿>O¡ï‚¯K¢”LÒÞ€@ÐX§Ž}ùĘžƒT£ÿâVÕ4‡NLüߪëïT-p'»¯t^íEö‚2më8ÓœwÆîbéSÏ?U®(ëü ›?êŽå©­É~(¦¦:«gf˜BgXz£r„{¬Gè·6lY_ÿóbÇ÷_â¾l‘3@w@!PVöùæiÏgž:ŸxS|£³‚¦{f£AÓn„Î!Ä„öÀÜÒ°wªCx´§}yRƒdYÍеEß8Ÿd²G^õmUŸ5³¯¾v¢*¥3ç! $ë3t˜—‚ÆÂ$ŒYòP̈±Ÿö´¬2`Ȫ´*ñõAŽ&{QÕÂPjاNKÙ6”c{e¨0~óà_—ÜùhgñŽŸ¥¡¤ÞdÝh¤¥ ?ãõd¯(JÁ×3fï ÛÓ²jCVRo˜ætL~hyí—o:Ìyžû"Œÿµ{"xÆíYŸ»îYk:|rE{Æ`ÏØÌ¨ \Óà˪eËç,ü¸æÓö/¯1¯­‚†Ñ‚ènôì•mÇë™»e”ëÇ&Ÿpeº‚O€Ç3ÐqÐ’ðO_¿2S¬=qg¢?1 úB=ø ûƒT”KÈÍ vàÈ”}dó_nTÔÒ”}–ñTwÛ‹!ÈY)éÔMLvé2Òé;Ç›ãQí$‹Ø÷¥ å¸q?[$Ý ÷-’î+9Üy»R5ãä‚e)$”òøùÁ:Ñ6†|ŒSçÓí¦[©ûn´î8sb"üˆ€ÕŸ@¾t j•hIºV-[þÞR |ú·W¥ßÕµç$ªÕ.wÒXUU2Wתޑ¿U¨n÷rØKxKÉØ)UÓS4859y¦ùíMJÚ|êôÛ)‘ ÿËÎ[mþtƒ;6×üéŽóSêå;y?KV})4Z4æñ{ú0}\ϸ\â^޼bädKt?ý‚àé¢h«Ó)uSÅÒmUÀ:€.'ËÀ+,»hqà‘£Œ:Qàá#q e‹§ðn}Ìý„2À?@»@tBÝ„RZi:+ýñ{Öx׋…íÿv€µC˜¢Z=dõ7éÏN-ŠŠÿ{¡F™ž¶^Î>óã[þ:Å@I¬IÚéò»P#tÒ8µ¶›‚£ÐPµÜZ.x ;Zh,€Ë4¹“S³š¹%Vm©9#*ãσþáwËÀ9@‡h#Ä#ö9%« êÇìVã]ã\,w‚è,¬ª*‰·ñ}lZ.Uz©sùs o ŸȪ¬ç!Tæ­ò9æxôñ‚F‚4@瑹¸p‹KÈUdñvÑö~«>ä~àEòâ7º¹s€N2\<¼Ž,zÌ`\Ð8•:!G sTõŽdV×ò¾9õîìwßà¿Hô9s–Q'ªŽŒç„„‘&ÕM<ípJB’˜ÜAÍP˹rJ®|€]Õ~àóc@h×øKfOçÃTa’ô·ä0®fR/ÒS(à ó8i„ƒ$ƒ >_õŠ˜xAºÆ§Æùn#‚ðÁW€ :ªC¾q\ôâWîã¢åaŠŠŠêÈ|5t!ý¥ý ù—¹—£%Ñn­ö®ñN“‚  ÐQ0Äi­àë„å,ö4ÎôŠþøÓs?ð ÐõºAÇ×NØâ¶9Hä¨u|hk­g-å Sa( _`À³â¸¿)`Sepå›ì9&û «`ëÙ± qGG°GæÑÓQtZoºò £ Ð~¸Ç8ç”gO:¹ˆ·˜„BÛÐíD5F¡z‹sóÑMª¶ü” \ }0¯1j/Öüôû‹áã€y@t¬hÜEîE)IúÐ&u$[q ö´˜Z.•²¼ø“Å39³<ˆ6uíÌ=¨óß«&b~6pÍzÞ•-3/y=ÖYÅ/& Îy(JÆäºªm=ðµüþÒ)ŽÇŸ®~æÁxM0S½Reh4ØðT€=uY·C®" W;½ÿÁ1¬!ƒ¨ƒlÐ\Ç,0.6¡fjѱI—n„°º`æ8”–IÐöÓæÍVçMÑë³IN¶8—ó@é@1IœOÏ0£èŠsr¸CA<’ˆä¾ÔuõÂÕ {–9 Òíºáæ˜Ý5w^L¨Ô]P¸1Åm½f âgÆ0¢£Ú Oˆq¤xÔ)þI=ª0ž1œ ½N€ Úà\Áí+—Ó\^œÏ~›`«Þ¦Bý¾G}¶ Ž¹Ö}¡¨ºlðŽ IÓîò”üF}”µ¼Ž°“D щ¶™…¾J_Vpsí_‚&%? ‚4%7ƒhSÍœ.ªC]W:ô+ü!lÝBÎ"ef{ÃçvÅiäOa󱂹Xy,F;…òêŸt€¿ÿ$‹ä¯“CXàÞ¿\ú¾pΟŽée|Y L–¨ÎyCS0Ñ€Ü!š6?((É"&{{mûÎ â×8W‰÷cèèÚ"­¾N×ÞtózÆ-lñt°vAS”k™† ³¦‹!µNZºîóñ˦2?õ!ùšßÞÀÀñ]x6¢õG$|„&yò¯ìH‹ä/Ÿ®í{½<à¯ÿ¾»ø½÷?ù%H’;eÉϪ®ÉN¦õÔÕ;RS“ùú޶ˆÉînÃÚ¾3WÇí-‹ºàpáŸ("ÊÊTœj÷0š¢<¢ýßÂV.íûÂ>ÃôæI ¯šŸuRö‘} vœ®ãv>¹’ü¿·²¿‰Ì·QÕaY:Ã]óØ4!,ÌøJKRÒæœœCuþœ„\‚rEˆœó)ã=ÒßÏØ<“0ü»ââùÌ$e99Æá[ÉØÉú+µ¢óˆ*ý¹¯ÎßøäÍÜN¾å„Ò¯ȾúF>Jª$8ˆ19{HÊŒ JÄcÆüTXx,'gŸÙ¤LsóLÌàågŠK޶å¨A’AÜ©#× ´-]gŒáLùiûYn›o%b^¦ñV:±Ÿâ¨…ª«4æ¼Eñ_ðªaT¢ÖœFš9]î1ó&#å?'Njw­pX‰«•~—9íÅE ¾àj&9yf§OöÏkÛL¤q(&uh}W\Äà ®fN~ÛœöŠë¯àKpÀâì¼Õ]|jLí‹qOS]EÆ4Hc´õ™‹|ÁÕ̱csÍi2.bðW3©—?lûQTudðy‡sSjžjÉÝVÃ:q{n%=¾àjfädßÂO€Žó'i©§ó¤ËJe:ìåe}•óƒþû7Ùs¸®Ùf"=½KT”q M»ÈÏ?`{kEçþù‡¾ó‹ð®8«ÁÉPõ¬ºêI 2Ù"&—iï!}ûÜà\/§¶L-D éôÚR-Ù“Üö“Øõ-l=éÐ.,Ð7Œ?ñXÄT3¤K¿KwÚ ¨ø¨jyí@ê Þ”(Äûgd>½q“ki)E­Æ×x¸“šF*¬N<6´YÓàk<ŒÇØS‰ ‘‡J µgÊOãaJ% šl5ÜÈ€ éÑ4O § SÕOi¸£¹£ÍžÆ|ÎÖ î4U*ÇuLey0¾ÆÃ §r«½Ú!)a‰9žÒ™j]‹ö9‡ë‡{ð5ÆcìªÐ"èTæ'+n.oþ—‘½NØ<ðµíÎÑ4žÎA_;«N‰)7È6¼Éz“ŠRíÀ2\ÁŒ) Ùå¥Áäÿh¸Efú0å÷g¾CòCš!×#¤F„Ôд– ÄFc€ BP=BP®#j¤!j¢  \%ÂV!lu9¡n SÉd+Ù<ÏMäæ*rÅ×øÂ—ò[IùÆ,dÖCQSÎGþ—ngj¦™8úóŸ§V]ˆq‰e&°÷Kysá†MÅi£€TO¬XR…?óî”íˆ Gô¢D؇iŠZ÷ãBÃÜ+n¿õ®1g M̰婅ŸTªñ¥†PSE¨j$H9.cs0ã×! cS*É@¤hOïø5° ’¢G˜j¤4R‘_á_/%¨µUÊQYáîYô¬˜P_Š5¨F`pr×»{<= ž®zW"bœ9-8`ñƒsÉ4÷4êŸ3þzÐ6ˆá’kgE—ˆG½¿òæŠäñÃ™Õ +´Ø‚¦Gâ°—GÏ •}Y‘°]þeõå5üÿÙ‡iÙ·rvq˜ïÞæ»$ꦾ§©µîݧiDE%£²œQŽ/¿ÔläÓxBƒÐÅàÒ_×ßÙàÂ7ðÿ]ÏÒAãÞÛÔæ)ŒË•§'xê½LîŒ šZ´¶ŒXZF(»L¾$BEÎgƒ¯ZÓ×€ᾚiîiÂÕÌKG£·EìOÓL |þókK³ê3CÜC‰N$UšŠEƒû4= ö9÷(§ly…aÀìWÙÖiÌç˜(Ó>¬Ë¯ªœÚ(É I™ÊpªÃÕŒXÃbtizT_Ê,-`T0*ä$¹›ÒÍMá6¬jØsƒ·çå}×¾« Ý=ëÕ˜”Çꑳðâ¨Ñ!!­íLÁ(»Á½ùµ%-ª-'”çó¶5~XžæÙèé#ñ‰ÊìuÜ ®cp5C¨õ¬p+w3(ì© S”×ÂÞX{÷‡†þÄL`)NÊ@Ђ¦gA¿Klv,ÿ¬RçhüRqªú¢Ó§%ØãÇÅ_:x„.§‹œEHÓxš®R3:‚®ˆY”ÏÉÇ×µÀ¿Ñ?²>ÒQíˆ"-_}$"äœ×4øÒÉÙGïƒ/Á^‹÷žz¥ˆS”çw~ê"\Ù„‹ÂÝdnÍšW3ÇHnctv¦i^ {=êˆO|ÆΔl®ç¿+€»4=…ûèi¼Ÿ³Qaªí²í 9‹îÿ$Û®%®UUŠuÕ Ëe÷\”.Ò€¸ª8†žaU&3´Œ0Q¾hˆš‡œóîç1ÃeMp}°›ÁÕŒýiGšà)¿§×§ÿôñ°O+_+Ç´JFáMð—ˆäöµKíëuÊesÌ^Åž0rX O<ó(n%n•^•?– Íâf¥9¤áâ w}ïaUÃhzkï× è)½êzáK³"]~Ýù:.kúÔô£CìOÓ¼Ý{áˆ}ñïõùâGQ]SÒcp›‚ÆÎ!J‰n_¹ÔOiŴ̬Z£¯>¥:ù_‡Uög¬k©ëíÁ·;s†Frã-þ-\͸+Üã«â=¶§êänø"#Ë®º\ݺ½_u¿Qõý‘<íIÓøqü{;F%ìI1\qJ‚^Ól+¨u]î"頻‘ÞÜ!ß1>‘OàÛ™±ä¥Ž¤“q;8Ùš’¨<ï|~§ïN"F|¡à… elQÍ܇¥e%”&LÊŸTÂ.9´)‚yæÉ­‚`??ü³Âfÿ_ææp–¦×Àfš&TEã>:|Îrÿãëĉw‰èe%K7ü¶PéÀî÷ëag­«Vô¢øþAEº¢,mÖö\ûóõ¶´cýMZ‚öÿÖþ@i .e˜:¦ÝøÄQå8¡pB«âœû9GuÎÑêécÕˆ}´ÓŒó¿øâ;ñ…ÔëDLi@éðœ€í5W4Ÿ#ßΕ=~(ýÁXMêÓ»…󾞱>EQ݀ϫ}pàïŸò?¦0¦ØÇ¼ÀûãNcM7k«ÿÖJó…Ï«fOjæ>n2·©9SÁwån£}´Ó¤—C^ÝT´‘Ú›¦¸¨€ú4ö…¶!¹€úÒ0OÆÿåü•‰ye„^ùÉÑæ”èŠh#ìÏn¢žHÉ”UyTµýI¶ßsÿMþÍÉ¥“GWŒæj¹v\.ˆ1¦"fTÉp’Ë΃—ˈTŠNYX8òÎÈ¢"²Ng‹F½òê_ù¢#PÅièuÀ6ŸÍŠr ¹Ä™²lþËŠZš²¯Ûή'еèíÃdj³?tš+Ú¬¯•;Ä¢/9ä|šDûÛUIFNcÍ&½ÐÝ&'%m6³“©é:÷ò!ãV¶eg ÁN*7ínühcþÓ¬‰>]P*‚[äf3æ§víÿ&ù²îùsĽ߭5°xÁ^Ø%éŒÛ§¯½¿KâÕöóÄ ^a{Oì§<ðŸO·szê/Ãï ¢˜1]óU,ÝqæÄDø«4>|é@Õ0*QkþË]µlù[ï½Ó]gW+¸×taÃ%±ÍHjù€=”~§K½O¹Wf׋2ï];z¨¹Õ¢‚]Qäs­ÿ%ïƒØ•nµwâÄ §O¿cf'G¥FÑzŠ%yâžbµèÍ ³È 'ìå…"HôV\HáZ¤háE:(²Ý7øKùõO«bûÍ'~ÜgÎß5‚p÷î‹ùnJááýZ›ÞNÏI LNži~{q¡ìîÿ¯·Ø¦Š‡í l|±l »óm„Õm W!xºa½Â[ÛÞM¹ßmU–žë0 t9µ.on’§ïw9û“äOÖiÄjDsÿê†û¾}›¿ûc¸–ºªúpž¸Û]qÚÈÃÃ#ù½=Ö¤fz"ìó©+²{Mx탬Yä^Àc$Sµ®.Ì mΖ‡!EªÂŠØJä:·? hì]¾¶æE¥òµâµ2Q¹Zq³,]£—òšŸ0YU*’Ê_äo—†ST®˜« zÂú_…>sò©Ïú~±¤ÏHhÏ}WŽRR¢ ù8òù>¯ÉYtûâ-£ ¡Ûœ-d”d/ hl=RûJÉì°ÌÑäö»ÎwCkBI»õ›[‰[vïlÓjF3ëÜLfø=á2…Ç@§•ÿôƒû¼ÜÝ{ÔÁAoeeëÜѱ/ ¿ÞRq¢;(˜â¸dŒ±ŒåT±„—ê ¶‹Æ;M86úXä•>È8øJ%¶Œ¡ù¢wk1 &øYh²CIAVñŠÂjÂìÕ|–„EÔL4(èÕ/ŸA@ ›ã·‚šyUhHááýâ™/ë\]ů¾òÌçç†x^pû-Ýå¶½SƒiE¡\'æ[ÇÀ•‚Q'}O"× ³€ ±޼uýÏòûÿ¦Ï(®InîpE)¦ŸMÓÓÄT=Õ^bü¶§‰ ‚•:åô3/0IÌÿºÔÌ£h4ÙˆÑk¯âk<üî°÷(ÁÔ5V.ëŸxhIÅáSÅ`¥„n¶xÐ<„4áÊë­€ ±œ†°Éó›5ͽ9Åô=ŧt”aZÍèºlAvDU„;¤yÍÃ-öö¥ù\ ïçØ_zò Mí¹©+ã¾Ižr|í‘Çjݽë×>-¥”•y¬èÅ¢n£N@* 'Ac#ôÖ]»Ö¨i.<“Ãܦ•|Mï7«ÕBð „2!KòWo ê\æü¨ ùúöWŲ¢µ1?Q"Ü0m„Gæ};ð‡/f|™ÿiŽiMƒén\º2ëmvŸ‘>ëzMz”`ô©Þ§ Wÿ¾lÙ™àˆ>ýË뼇¿‹ ¥îž=‡ßKÅ5Må˨ûBÉ}ŸùÙ3KRkÏo);V;*™J|y0ò¯Â?÷íÙ1|'…H…»¥]ôâôz+dþ~ [ 1¡i´â®I¥å«.ý°…µ…”g5÷¢ÍÝ…àr3ÿZËÿ¬aÙwo]¿ôm#ûaQF¼µÎï/—š8GÈn@ÐX˜ë–»nÅÖÄðŽbާyˆbÝ]9Eî)õ´cW¸”º<Ô'›)«mð_èм)ý€¸âä 뜓7Ž®îthb›âžp_&{ßä~ËZ"¢_Ï»´¡¹ +æ÷üí£ï× ìØF×× ï–÷t( {eŸ›x˜L CîwA—…ñòµé“b'ãjÆåGb>Rk\Íð?Djßv@ª¬ñ²‡į­þþUÃl͸MÄ[²3Á£·W5ë¦BQ‘Õ¹ˆ7ö¨½ šK#/áj8ævlki 7r¿«ðgÄ; ßT´qÁÂwp5ƒkš»y5‚3$ñ ÄÍÛI¶ÆkŽòìSêTZ—Q'ð¹½°ù 'vté1€ 1’›A ³ÀH‚¢\šO ª½Gí+Ú;ÞsIÖñéqCCŸÎÌÜmQÿIùùmat9_DÎ"<œæF1PÆ3æ!ˆÔœ~¶Ýr…SW%¸Ô=~Ÿ¹~oM½<å%ï—ý:àjÆïíÎLyÌ$ל´Ž§>5=}WwU (iPãàË’Ô‰½&ÿÓÓ„TäÆaý=ïkXvê0ûÎb -ÚŽåZf$rYQGfRÙS´{ŠÏÓc-b¯—׈6îéZâZíQ¡˜Š¨ºæx-¾:EP3ûÙvËޏÆá‰û¸ÓÝǹLø¿Â_ÒˆgH?&ûî¤âáΤ8¾[íÄ|YuéÑøÆaÊb -Ú!hð‡sÖ )ûŒÃ2ðµ9ÓÅb/¤pñ¾.Ê¥µýÀÂÆ‚rEy¬K\ÇÒ 7qâ<€¯CBž2›½ÞÞ#‡ÿÀ×~~Û"hš_ؾät)HÄWóÍìg-WÍR&'Í8l_×U=a¶ž7üæì*ÜEø²^¼¹œÐõ5ÿC¤ârAÒ š”´àë°°gºÉºÁ½¢¯ ®`Zì)ã\ž…ðµTìj÷YlÁ¢@»9›R} £oxâks¦ëᣎ%Áøº]½!{Šv'z'uxÊÿ¼¼#¾ŽðuVÖ³Ù[\|âôéwð¾.(8ødASêZáU!¢ŠòØyƒê™ßÏ6Z®pøÂú Hã»Íøú‰½NBª°oMüž¥Â'ñTj4W6ÚŒú¤›“s(9y&À×u“ué9Î2úlLèóÓ¹çÎã1l^µ»ÿm<€¯9üJ»Ïb -Ú-hÌŸ¤¥ê…üÄî)ÜýTçú›p,2€§hx"žž¤—qegϬHÓÓÌïg›.W8׺6îùVâ+çØ00¨u 5®l¼_í×át»o±`œ=8oÁ˜ õ‰ó^:nÖ48ÇŠ•Å eM«=1ÕÃGÝ®ýs%92]c§G-boIÉɶìf|aÛ«¢˜Y,'É#"Ìïg[/W8|§¶¶²ôâD°HìË¢KŽ ŠX¡édº¹¹‡»Ï(×uëñõè $%´%Æ­)1¶ÓÔô¨,¶`ÑÀª­R~|´ûØÎ µ šÐ\\ @À 1‚RQÌÛ»¨×†±Œ¨z ƒ’`>â†ý÷=A1Ñʯ×4øBTˆRoLª‰¦@Î`Å@ ˜áDù‰Ñîv<€F‰"4¢ŠNTï:ÕD4€š1+®47U Aó fýWëÆp$c)· ãAccd4¤ó(<¶¯}›éPá²gø/¹€®‡)PÍÍPA<…“]¯ÔØÄÕz’ÂN×\…\‘ZÚáÏØt QQkŽö?*á"2ÝÌDp#ôò:…Ú&®v¯_ºüä hlŒKÕcœcìÚD>Š©s¼oÖqj¼å™nfBØ¡Zr™•¿¹}Ÿ±îƒÄX®-ôÐsÁƒ!XjMêòÿµk+) éÄô€u!j"ÒÁªš"= ÷͆ÃSÊÊj'>“Ø,qvl±Â—·› ãú DÕÍÚò~BwÈ;@ÐØ¹’‰åÊpµo3]K†\ïulRÕ4 s@2=ŒaãAÓ˜ B༳õÜ‹ÉXóg&­Aù¨ï‰Ê[ hAc3¤V_âl÷óm\—ê´,­¯ýõO;œ@W ˜ wJ@¡2¡ÛÆÕ1Cn7ÜC‰qXëƒ"ðo.Õ\жwAƒbÒ¼½0ìí¦åiÄø»:rßœ¸Ñ½j5¶rµƒ#K4¹k€ ±AS}1Zm¿ö¢èNýéxô_šû¹_ ýMf†uú̄ߓ^?ÿÞÀÞee6 h‘Ji‰D y VU£Ô+íw\ÍìÇåKE£$k\Tçñ˜¦ø~ f̪fNöœ5;0»¢–©çå^{çÄ ë×4Þ4o„Ôx©²²ëÆÐü‹4qZ„C¤½Z‡¢WZt ñ•5 žA¯`˜/ä»™qúî|-”"5œ–˜ÄÛ·ïxXµ¦$ ²ï…Ú´i!þÆÿµ¢7½wÃâ­žÑ;žŒü;òßñf4E¹„ÜŒŽL›²ÏuUTÔÒ )Ýræ )\|}@žÍ7 h?Äĉ,’CÇÿ¯«NuþüF½¾EÐDÖD¢<.îqˆE°HÑÂÉI 4OB¹EøÚ¹©f·ÄxÊTII›Íloy~T»ö÷Eߪ/¸Ô§ÃF ú‚%—n‰ £Ê›«}šÔðQôÓƒšÿ-AÊ[I·<ß¹ßgNL„°AãhÀ—T £µæ¿ÜUË–Oyî™®?ïÄ7$ÿ[•~f”Óh_aúCÛ ³Â-òn-þ#×…é²Ù4"Q¦# e ¤˜Ù'û¦ …ÛÀÜü­!‰ßy%,š™ ^´ˆ´#í:$”E¹JÎcûè+ EˆÔ#D’©[O7aL«#л©bé¶* Ú Àj ¸àA²d™ üÞ±WëTª(&óÉ€ÌÏn‰‘ËGjµÝ-¤,¨á¬3ÝÞeeïœ8ñ`LrT”õ—²'q.½^9ŒÞú¯¸NñÕ‰ Ay¯„ b —Acv¤:©X#ö¢{Ú«¸vÁ v›@ \\ߘT3@wsÇÃã#GN¾}Û]"QøôÙâ͹ëaáIöÔªŒ‚ÆÓJuÂZ>&ÿ«Ñª¯çW}»Þ7šï’4f&[–Ì AíúÍ/\Á€ˆ±MÓ< 8)isšÕÏÜŒ€ä¤GUw%bq~üž25ÚÏ!¹BZ¡ç»C€Y€×¶ÿ!_žÄ ?@kx‘=ë± ‰FÿøÝôzíÍ¢†*Ý…>ÀLÀÓÓ?( ¼é>àh OЧŽ+J¯WÆ8"Ÿ¨¸Ûy÷D‚0–Œô„ÈþŽDù<Îk½ùÐßóS¢(ê~€V Ù³–UwO¬ˆq.ûhs&ËT$€9€.§(Rû2üÀÐ.$W„\—^@ÀꀚT•X#r¥º‚+ UACv•£µ• ­\g`’àqÚFéyYÇ Ê4¿°fÉø±Ð‡ûX Jj¡DYâN÷  àh]÷ow®RUqi™M4å …롊5Q¬(òÁðX™¨é]EN¯Wâj&ð%\nÀ€.§J”Å> 4ð8Üc ¹NCŽnd3/ rß­ÃcÀ-XPµP¥ªr4ðDMÃu¾2:÷õÞ÷&ŠAÍ‚Æê¨ÕÔ ©Bð<vµ ¹H‚"H¯ƒüò p h¬‹uµê ~€Ç€+˜ÿì„B<œûn]à7Ð4X 0†¦…juµ3´ÐÀcÑduñ4¥°iO“‹ÔiÒ‰H,žu€$: Ÿìž€Çà;Ó©NŠÅÍÿÇЀš€û`…&£wÌ™m2þ¸a¡Éø…àÉa.§Ü Ë|°N\ÛzQÊ'ó»išðð©±Ò“»"_¤“XÄ^KU–Jk4E¹–¸# ZÝF–8u[S`àx‹Ø é‚ÉÝ#h¤†z µ@ÃŒ¥ªK¥ @û9>ðz!eàks¦‹K™Â¬p<€¯ëM¶Ó$BJ× š   II›ñ¾ {ÆlöBº`r7éüõDê f‹ º`»¯:,•.€f¾‰>} ø‚W £µæ4’ëX‡/¸šñ IoE×)¹Õ>£ûqJtÚÁ³Kþ7GÎë‚g²œœCø‚ÿä$'Ï4§½.˜ÜM ¤"©À‘èQëá‘ì¿ê°Tºt 4¥šSB=ß©ºõzºZx1—ð–Œ§Š‡¥¹}» ý’ž¾Ë"öBº`rwÝJDv¯®çT–Jk4øELå:¶^£õŽõŽâÄ^:¦£"1Iõ8MÕeéææ¶ˆ½.˜Ü]‚†L«åÖöœªÃRé`í‚Æ!£L¤ž ƒ¤¨§ÜÃ(+"éÀ)`"¿Ž[~Àª€yhš ÐI1È/„-g(‡ê(2˜[ZƒC`K˜ à@ÐX¡ Q1_.8û‚`Ä3ï§Gi¨à0 —È-䀰* Ë©Ù 6‰ƒ`ZRæ>·Ï¯«^™¨!ƒSÀ4W€°* …¦YÐÔ‡>õrd9^UJÞø±ø)Wèr€Ö`Ù@ÐX!(­|ÿÞ4f xž—À³ÅଠèrjvƒŠMb -pˆh¡ ¶ ¥õD¥A ®Õ;3“«RÉQ Æõ ¸4V$h$Úð<ï-Sæ°UH#í_1–ºœî  ø£¸eºŽ !5:c´2q`ñ·&£ãGtïùǾµˆ]ã£LÆçíŸa2Þß+ßdü¾9çºõò³fx›ŒÉÇô§;¶YhVùÖæ}iu¾™I[Ûçÿv¦ëÞEóµZ~¦wom~h¡iªå)x Ÿûáú¦)€¾>à¬4F¸rnt9À“(žõð|ÙE³^·‚ÆZàÉy hà‰ˆb¢ï­^Ùª§Óñï~³J=Ü€5chŒpäCmÔ4-¯j§Åšua¬ë‚F]0ýÁ@cÈcÃOÝ¥6Çê³Ï½|þž30\.Å'@¡‹ÜøaËø˜û_qj‰ì=ê#Þý}èÃÒ|QÏg‚Æ\p䜆2 Õï‡ Œ²fËí"5“ÏU$ÌøÉ›Î*¾0ÿTjæ+H> à10cñÕÙ”¯{OùóÁÈ;©ç›B:æÆ™‘e‰ f00†ÆWÎUéUjƒª§–Zƒˆ¡ˆqA-ƒ«!B¡:*×õˆªî™¸s-4-¸Ò\+U•> ßY œŽÿçÖUz!ºœö”ž%èDJß# ¹DW< mŒÉèµYGMÆÏõnå<†“&£ß£4¿šÐEéb¦¿¤¾c¬ŸÉø/Þ6Ÿ‹µ2 Áô„<«Ô¦çƒYÕN÷·w>•ëE%¦OçÕ­Å„qú­v]'Â_h2úȾöÍ7ÓZ¹ú¶µy€ºhž¤`ƒÉèñ³MÆo¿`5óÐäfXæñ_TíôXAㆠšîH7<|ªEì ðŸÔÖ] ±§Ò”C¦}2çµÕCÈCO¤±:ñdÍç ±ˆ½–J·š¬’ù½¹9Ñ6™¦#ÖÝs¸×ÚþzÅ/u„T‹\j®‚n‘¤{`ºtq^{ÊtË'ü=‘ÓúíÆ5šúAcU¼:ÂûÚÙ܃¬›ÇÄOÍåd_‚¦šÏ÷ª®Æ?CÖí@!Å΂¬È^­í?‚1»°Ni‘KõµPÒ=0]ÿB{ê[y™ù`ŒÂ×j¬èrjçðËÔYìº[/÷ŸãF¶3¿Ô2ÇL¿äº÷¿b íÏzxŠÈ¢Y¯‚[Ac]°Il‘Q¥ª²?ÓÒ}|ÖOž\ììUJ:Âøyòä xË h?¢˜è{«W6†…êét|}÷›UâèÁà¬èrúþÌ€â'ËÖʼ2c†3ì¸éøΙž—eîKíœhȧ¯Éèq­ôå±²ùMzt—®f?4ê˜f5ƒ‡ýs³íØd.f@•>ÅŒJìˆ-hÂ&ðD+\Çààk<<:vÐÉm;6E¦Â§ ‚ÆÎ4Másj Ar¦*ñp 3¨V]#ÑJìØd'¹g³ Š>‚Æ~È8Ô໓úÇÄÊ ]t%·y år3:òᢔ}dó_nTÔÒ¼{ÝrfW,Hܘ(•Ì ¦øçn£î¤àwHJ²ÌW…G$|×å缘–\C ÄLìCÓÚ>¾^o[ªPZ*éž–nCM¬¥ÒMÙgŠ¥;Μ8~Dº”‚ &£_{½•ùfÞ=k2[=Ôôþ§.Y—½Œ0Óf~ßd|c„ÉøÕ3¼MÆ¿äcúÉ|[kS­ùø™Œoeƺ#¬…¦ãëÖ˜Œ‹v³ ñ 4àKª†Q‰ZóçþªeË~ò~7|¡CØ¥ÂkoN{º?êqvxà?S>D?zlŽùí;fÝñãóºü´щhü!~§¶4Áä£G¯íSa‘üVª›EŠ–¥Š4žîˆ‰*ó§{ò mðp±2øwO—Ía·¶½›r¡»ò×n[rÀö€o9ýÃôþÁçò*Êdƒ£¯T_²cKù˜•Fr õ¨òAcW0©äû­¿po¸{ÂÉò“vl©#¦–襠”] ù€ ±7ÞˆíµýzŽÍçJrìÕLL#EÉõÁü Èt½áÁc pûízö÷‘§ì·‘†ˆ`LË—†U2+åd9ä;‚ÆÞ˜ù³±×iÄɲ;6ÓØë„±³² Ó[‡.xˆÞB.j\ªNÕ4Å^¥†‰Ãû-•L«Àpi«§-õýû­ YEÎÂ}w×cÎ>¡ßO LG¡l hl‰7b÷_É v¹Z}9Öu¨ Í=7Z)àªÙá´£IÒ¨}d‡6D¿Ì”õ~££ìֵΊv0 d`U|o2ý¦kNŸÕÊü.èVæ¿YåÙ%éê ¦'ÔX•ù‹ÉøôÀÙ&ã=Öd|tÖQ“ñs½MÏs³péßÁÕ³¾5?Žðm·fûôs¦çK€.'<Q)Žä 9Q~Â^mäcjJÅ‘u‘7…7¹/¥·äœ"ù ­w¤¯¤,Wå°^@И€B$ÌŠ«¨ð8Uf·‚†ƒi5(A…}¥¾zT_Î,ù÷;‚.ÝyO,Ö¨ïÞ+¼ÓÐ(‚ k46Ç«Ña—3h¥²²2™ÝÎÔÒ4ŒÆ8B¨OmŸkÎÿ].gOD/Ÿê³úÈ*© Acƒ?öLÚäorÌÞÂ=öj#Ó4÷:×+I 53÷(Ï3ì·ùÏœ´%T/c9z’¡PÖ n•¹qã¶úï¡ížñ¶]èhP‹TÄ€ : zÈáq¤á¡OíÄÕ%Ÿ« ‹òéÛÃÁä¤]ËÙŸo¦”ª áIòï×(úsMG€ ±*Bœ¢øÑ×¶–ÈŠñÿìPÐ`ê\” ¬}d·rE‚Ü<ÂW Áã´¥ˆ¾`Úò—ñhÜñ1CÖF2ˆP z8²ô¶rÇíù—7y3Wi¯}©ÕšŠ¤³Ace¼9$2ílŸ½…{"‘íϺ–.'L–¨1~䡲|@Š×_Ï×?OÆÈÑï§Bþ=´qCË«›š^Ðý¸Ÿ m% h¬Q!žä#}·gýɰCACCôÌðÿíÝ|eð»K.»IºÓ¦{·(£´€mŠE†¨ SÅWDDDEq"²d(KE”j‘Ñ–MYeZ t·t¦+i³ïr÷^ZDÐ"´Ð$mÿßÏ}ŽãÒäÉ=yžË/O.wõ(.¦™w!ÄMã&WËϹœ‹®ˆ†—Ü­Á7¬eEÍ%„÷Z @Kù=ßìê¾kv½|úÑ=üÝÎ_òqNó糑¿ÌovýêWîv~²«ÔÏ)ç›]Æ}Ýìú—}š?QêÊ­EÍ®¿6í.çÝ´¡ÙõÃïr^œ½TK?vÏivõ„Gšÿs82â¿`(:;jLaCQ¥© Cn`Óù‚oý·oyßk×jyµðÒƒ»¤{ãté/õ_Œ °ÿ\ ~˶|‘9W­sÃ,tXf¿ÐôY'% ÷ ¤,V.³ßÏož9´‡ïíOú…-ºû{±vïø¸D¨ðи´4Ê4 ÏÄ[›_°?;{·Å¢LÓðÌС« ää$ýûoH÷¢¤aGŸÛ;€YœxÖ‹YfÖ4Ý4¨dP’då3ÊÞ]¥ÝZeš†g.¤»»ÊÕîÞõ»]Y±èÂ\v^–9ͤ%ó|Hÿ¶¿2…ú¤ðÓó(r^öcãÐ_TAêAAðß+®Ý«>{ŸÎë8õl½¦hq ±deöÌÄì†$–ÜH&Ä0“fbFèZqwO©‘pÖñlK b˜‰I3ûöÿÏ’ÛË„fbÒÌ/ÿÇŸ1 &­÷µ™G»]õ© \ÿ>!²ˆÍ¯~éô‹É±{%x N+„fbÒL~e–Ü^kµ++Í„fbÒL\‚ÞBEŠ«SÕ4-ž:äS+@˜¢ÿ^Ù1ëÙzM ÐRVJµÖ§ÿÖï’&9¾¦dëY†VÜ7;ûW«loNÎ=„ØeÞq¡zgÝpõý8Y™ìÖMýxc‡¸ }-c6Ð--×b36Ò®¬Xt@¨u.êå¯íTõ 3@ ¹ë‡+í…[¿÷ï) ã×U"ç_ºÔ­°'[ðPù¬²½)ÿf÷Hv´´Oú#âÞÀq¦=ÊÓß<‹È›áoÕëVe}ÕÒr]åj«l¯µÚ•‹öö·N q÷Òwªz¶bÓÜ?8Í}‘\ܶ#ÿõ1F{up—âcÓO®:¤ÄÉ©ýn‘¸ÊõÖq3Ì|×ðÃŽîÞzÓèFŸ‹:‡ Ap ßýíè#‰žBÏQž£¡ tZÜý„Ë>a_Ï&ƒƒ4 Þ0  uò7Ô·ÙÕÏìo~hó(·uúnçA™ö xôa=¾•^—صÍ?zmÛ¶ÿ»Çô¼Uº#½]X«üx¬Ò1ªH"ýpXÈŠ‘ {z÷zþ@J‹ÆilMm÷3·ŽnÊ4•=Ožéwfßãû³]Þ¼N^%¸Ž_Go|ïò»éU' tÒ4³o¿ôɧñóP†™3ËL¾jØ 4÷ÆJIÓ¹xŸ ”×tËp¼Î¬9T'…–”t¼­u¬M¬‰uT­Ñ¼[Ì ^Õgí+g^¾P{ZB'$\öÉ=ךvRGùù*oó˜©ñ6òó(“ù õRGG•ª£n²f¨“ýqgª†ª}´ª×Ù^_ô^>ýä”Ku¡1t6ììœ[Ë7ì×\φj@ i—(qџ̂Ą÷¿Þ÷Ëü gyMB"íÈ-ó[)¯–j?jˆ˜ÛýSïϧ¦O¾X{ÚC§BÈn-Û7þ¶‰ †j@ i—LƒcUEQÙæ¦Ú€ô€ô¹×ìÕêkò¿íx_ŽýA'¼§û˜n•~4í䔃iÐ$:2Ÿ¨~ª2œòéPä™éHj(2m’y½æÍùP9¿rº7Z 8;ÿçá‹F_¿^æàPÍF+8† 'Ø£öpT0KÄ}‚ýfôWúsˆ9ózÌÒû)h¶Áëé†Ï•ªÍÊóRV=µ²)jéw aÅECzi”Cw† †*@ i¯T>Ý?xr\hI©‹JUüȲ!é£ ¤,ºÕË“%ùÎ!òè Ÿoœ5í•+•WÞ齘Aûéht¿kk߬J•²þ³õîvî›"¶F8ô@Æ æ¶ C‡@ дo›}ÙÇA¼Q , *g—{­¸ÃyÝöü鋯Ï_4æë„Î|gh™CÔ.¨Úc—¼añF™ƒÛç]—÷uéÕ€@ÓaÑ(]½#r‡¼XŽ"hgÛ|TˆÊÞ‘oººíóï?®úQÈ'ƒ#ÍŸÚQŽwä(ž_Høùê  yþ9>5þ°§Ü ꦳#È¢+ŽWºUwëÌõ@øùðĹœ9S_¤5+ý>{ú~Q#}²ÿ¢‡ðè4qíü™×÷d®3IÝüŒô²7C“ºxñ·iË tN¾=¾'ê_ü1Uq!ã½WÌU!ó›ÿäÀ—¼8˜¾pøÛû™ovßñÁÈwùŠOoÒÿ’¿kÍÙUõª ™×¼øõ_¹§¼z1 Ã€3·žÂU1%mÊe§ËF–±3׃~àöáÎ]Ìr—€c£~ØÜðô–àR_Õ¢å~¤‘;]¡rÃ5ÎsÓŸU,›üc/ÝG[3.ÌZcúï‡v¹Äd}4iµKÎÿ~/Ww†Š6(6fáÓ§N¨X:qGOݲï«‚çóÇg3>ö(¿ù;e+¯/8õFÈ÷Û“·½°áù£Òãó7.tèãýÐÁ° s°œ«­ùÆ$% ·üÓˆX|huj*~ØÚ¯pj¤¨¢\žµû¨Ê:tµU¶÷Bºûýÿ±döîÈ¥ã¨uI Þáâ¢?Ÿ¨¾áñÆÙuüŒ5×?X—½ê»% Ò ÷ôôMË÷1;_$IGÚ.Sç¤ü†×`µþäõ ÷ËÚÏbQá¬Ì‚­<ïÀçViÒŒ´äûs\’…Ñh¨*lÒÕÉ ô(”Ÿïw>/8¿Óž[Ü/ýãÆiÏO4öº4+˜ÒÌgXšŠ©DÖÅœ²C¯8_È ÿÕ½Á5´*ÄCåq_ßC¡h©†»UKt0†bMGäÐŽLÄ¡P£M¦E)a'©JS`®¿!¦Tµ_ãÁIj¼!Gœ›+ÎSpTASZ¢÷<¥|MÈ)7ŠŽ§ù§±h–o­¯·Ò»™dC±S5,=‚ì¨nª;jŒ£® ñÂUÜO«PNŒ“PÜÎîQa¥A”¹Wta×# a=ªúŒÑ„ìFÝ’˜ŠÕp"ODô¼!>ØÿŒ&¨z% h1“7eò£ææ¼þ’×Kì:±ß•ÙâOGumz.ÊÊ] q†Êþ‹‡I=Z››EØ_"ÆË«¼ñÌJiî!¿C&ÌTQ/p¼Ioœn<Ü#§»ÿ~3ÅÛkã;A]éØÚÂ’baq‘¨gâ÷jðõ-ë/ÓÉþú¶N7ÆTz9¤ëÙ®¹a¹©SIœ„€@ZI?Úà¿Éÿñ¥‰k*W-’¿{gÞ1ì)¦ûG …PM·Á:Œ¨ $•—pç£tÿPEè¨Ò* ¯–-;Ìÿ­ŒUæIzþd€Œ”u¶ f1c¹ ü†ðÆ aqÞ ×Ê=5^‘Õ‘£ä)+‘Eé£i÷ŽÝWo_í <"ЬD'*&NçM=­>%оu“¶¶æ8&]*ß™4§©ÞÆÊ¢ö<ÇågA`wcÕ\Áü"Ú€òñü\vîOÂë±z/ÒÛ»qr'ݹ´å¾_ Â';[Z]SçäTHâmø]-[[&(-”— Êê8u.zOgLyŒ‹Þ£›90K ô>ÖË¥ÜåÌ€³ÅþÅЖhÀÀ"†1»¢WæÍþ¢üóa.Úø¾K“ó¤>~žp¬ð݉hb€¡´†à⺽š±=g ó󒇆2·j0MžBY†ðÛ_ɪÑ"&ÖÈLn2“«é&¡¤mô¬\ÊÊFmÙ¦rp¨–¹úe]ù=9iÒD…»ûÃz|ª+ÅJ®h>N÷Ø«àW1£›ÖÍMç> | “fn°Gz¾·Ú¥’ô¸q³Ç–xJ*dn¨¶Ëù.×»fŸœnb›  š‡ÆðÁßÂë¥îÝMÐm£býË®¯0+)Cﵜǻq¡¢ïÉ‘Òи÷˜ðõÕ_Ê´ówt;üÔen`5ûº÷Œ#ÍËõ}i„®fUW²*ÊØå§¹gÊå&”lÌ72G““=eÏLRJʦ´¾q‚`Ò̉¡C®ôêÙ´¦Ë¹ó‰[¿Û4wNëÆiH„¬Âª*±ÊJ¬B)ʰ2 ªq§ä])‘_ƒ_´"Zj”6ûÍ“fö>’üØq&Ó0ifTò£&®AåT÷Ǹ½ Òh6æ!£ù´!ÞÈÛÅùߌ—ÿW0£(*RYYZS$uîˇê¹_=¼g:èÎòÉE ×–ìèv¬á >MÉ1„¡Î&gf 7v½ù~©+Xå¬òrvÙUìJV§ÂTBZh7&&ß80 &{-Ðá}Ÿ°Æçz¶ÊÞþVša0Ëág3|²sr»„ý÷}µ¨V…ªj±š´¦«ejÑZæY9RŽ.”«+åAöˆ§s¢œ˜Í –ÏKSý×™‚™ä&Ӝ¤çÎÆœ.ñ)¦hÚŠ~ŒQò¼ÈnŠÝënó–•}øµÏª´B2¢«H UÓ‚Dñ cDÅo5ÂgSQIÜÔëþïNa”Bª(u*e¦2Dz2§²³Ž¹J‘’™ê…õµDª‘JտɾÁž™˜.Á½¶kÛÄ„\#—Cp WªLa}E2+ÏFV½Ö'AI›cYEÉFW'5",ÂÒ"˜öæ»a«çõ…#¤!œ£#B¸#DWÄ脎4«âßO·d‚ùÝc“¼Š>7^;’åSynx*|ÇhÚåB=Iî^¼ûèˆXñà/+W/Ž[ÕÒ:t®câI¯}Csúû{„¦E8×ñe¦›ÿ7"´‘Ö`-_«j´2­UbEZô*‰’‰R}Õˆ „ P’2Ö³Œº»bbVâΦÙdÅá»ã×pš- |„Ïgæ43—Ši/1-b±A̾խ8ÓM¦ÆéŸîçZNìÏ„3žIþ“r¾ÂùëxhÚlfœA¸T Â8Õyê+E3÷©öÆKƒji)CŽÓ ¿Ž¡9,¯¿µü€‹"¨ˆ‰Ñ¿£E¸÷ÂëÕ_œ'ˆ)Ÿ/O2øÖ·Náçú¦¦µúšÖwQ&Íüu M²sõ­eh$¦ ‘a&ZDã§ÙH42ßmÁ¼â¹ÝÝÜq9ÔL‹ðŠ%·Œ9Ó¦|zÉùÖD­`!,¨œûGÇåÝ~¶&ÓX2Í4Q¸»mš;Ç''Ǿªº(0 00Ðòi†¡ì™qGbö¸iþ ÎŽòq»ÒÒ½<äÆ*ŠŽÏ-žlÇoP¬ƒši˜“vvàfn•4ÀvMÎUëŒUX¦\ïxþ¥I–à~ˤóUon<¥>u¨þ …··K—qV©çÐÐ1V)Wæc­^äì8À*åø´J¹„> waÛ)`ë¦0Ç:ÃB+—É4™#•Îù¼cC«˜eŽ1ü]ù’5•«ó y–ÜÞÀÀáV©gë\2ÒÉ©¯µz‘ƒ}”UÊõöl•rIƒwÇîÂ6R. eÆ’>˜ýBJ’yÜž™wàr‹Ž{ÅÇ*9àôÃwEÓ.ºé/9,}¯ô]5e‰S»5j³ÀÌÃÂÆZnÀ ౄ„ Ì3 m±rú†‡-d˜¹«eÇi˜(0iüõµ%Çi˜(»‚Y`æþ§a¢ŒNÇ,0sBﻀ šÀ0ˤË'’H0 ̼£–ˤ¿eÒüÊ3¹Y¯×MØ.Úüëo¤ %Æ1¤Ÿ¨ÿG¥K)„jëíÍÎÞ³{÷Tf™_½ú³Åê97woròóÌ3ÏÊúÅbåVUŸÌ¼ú!³ÀÌ+‡,ÙjëN_Ï5ÿØ›™WÕµX¹EE©Mg¯aæyy¿[¬\6·ˆ/Ic˜9Î˃]À†å‹´Ö~Á2åþD™4ã=Ðü©.(Ž[0_ZÁ™u$7_¥ÎåbÚZµÙ2Û{åÊN«Ôóµk»¬R®…£Ì‰Ê‚QæŽiÁ(s;œ—Û»°í” °õ@Ã|è±Ê¦Z¦Ü ™ì¦4ÓÄ{·;%ÌuAzÁÑÒú7ÝßJ«O=XŸfg’“ó‡Uê9/oŸuREõIkõ¢ÚºÓV)·¨(Õ*å²¹E¸ ÛN¹€–íš  ,`\ê%â½w¦(G)y×ÿƒ7æ9°"= f€‡ŽÞ·? ï«y*݆óè«. —–~P`(hÉÙÜÃv’ÍR)3íÃQ¨Q5ˆ9¬ûúøKøΈž¿´¨ä­j²êþîJaœÃB.fÐ<¥TNQ*ã ª€@c­êFÑç»È¦„¹þxÞ½+ñ­oj(ͽï†6àÜZRe$yP‡›0H.]ÖÏ÷rNWßuIÉb’&îu6†ÓxªDºY*9Àc 4Ö×tH nd±’»øÆ’ûÈ4zŒŒªWWëh®à œá €@c©ña½ôgnaÑgE9'šæ“D…V£pP0ÆVjEgt‘ÏvyóJ­fNÞ»wÍ4´„08x5†èYx6F9SpP0ƦÄÉ–û½_Ô }!kA‘Íý Nê"Mœ4±t‡­×uó|hlNT´9lY©Ÿ˜ù–ÒØÜ8 í¦W7ÿf»>Î@r Æ4¶ÈËÝÞå.NLÎ|+W¥  дK ÿ&äc¹·0¥´*€@Ó.á(¾2àÃÞŽ²Õo¯¾’[]lg—,‘lgæ8^õ4 .NisXë]ï«9ëRkÞtʪµk<ç ‹U-¦j4ƒ ªX­cf½ŸzÌ¡’ üæ¿>§8TDÓZQÊ·!ß$;(HRÞûÆÌy¹ÑŽð <€UÀ-Bt¦Û‹ýu¬Ÿ¼‘ÚÛŽæñ.BåëÐf1³ïoOû㇋quþïm³3 ˆ.[þ§KÁò_R÷ý|v’Äýãuö:¨)€uÀ 9œ2Q«)güƒž{®k¥"»¼‘¥ˆ¬ñ}ÃTPKÀ:„=˜Ye 3WÆÇ«wåÌʈës#Ì·& ÇM '±X+Ðæ`9W[³JIÂ-ÿt#"§$Yéª2¶Í‹Ð”óùþNN£=Ü>Ò*Y~x¨ê,ŸD’<•HH="÷ˆ‰Ùd™íMHØ`­F¶Ð*å̳J¹q±+¬R®Nך»ÐjésyÁo+ˆ8°µIýŸåÄÜÆé{í“] ÑÝûAþ£·ÝŽ¥-91ÞD°™@ãH1S+v C Ë?ÝO—|8o±Þí,³½‡#¯½uüÇmÏ–VÄv›Wà[[7ŒòÑ cŠ‘d9RÁG]|Z–´ýih*Šz_úó}«´Èî]ßÙ³çË—;bÄú´ƒ³­’f KVZ¾\WºG—¶ì>»‘îQ¹øæ²Œ°š_û„¸6ݽ·ºâ†F]Â[;3ø›¥â?^"ð{=Ht©‹«ËÝno£ŽÖf]G¶Ž¡±!Ö „Ž“_øÝMÞ}í—ýÅR®]“ºÈL‚—B8²ð%Ý6×¾ZÔBUëஞ,[ëPûóGZ×Û‡uQZä©›6ÕX’ΆchVÇÐØqæ¯<0Œ?ò#w¹Y)ŽŽ ºôtmº5¡·8oš,žüá[K»Í  Â€Qæã·\·¸×$}¦qÿk¿¡>m¿â†æ…‚_ÅÛô-G6„äCM ЀÛtëñ$b'¿íS0‚N‘O u™?yþä­“Ç~Ý–¢>eNÛ7~vîù³³ùÿ=ª/'©Â4òïú½ÊiÀM½Çծހo`hÀýè#‰ÚÔsËÖç®{§x±ÝD1Ô °ñ0fVXñ³;Ú§¬(›²ª`up MûãÊ‘mèý­Wg.¬Ì@¨h@;ÄFÙ3Cf½ÕýE]}ýí²Ž„:´K}œ£¶õßžã“3ãðseÙp¥'Ð&ø©inñ#¼üƒ›–¡BhÀÃ'Åí?öE¼ä±çJ¦ï9™ .AJªëÄÉÜ‹—0†ù/³ ™´ AÇÅŽ_é°úÇÊæzµÊXuÉgËÿ™¡?ûª´ÿˆ€MQ[Â/†O:=!¹òw¨ðP๹ÿ\““ Õ€@ÚË=uÆskÒÖì<÷ãœ+³FÔ x@j??f®Ã‘s^ÈÖÆËˆAP-4  ßÅ›s¶vß1ùÒÄß»i„†Z­`¢èu§®Ïðkö.òñ0d`Žy½rÞ\¨€ ‚ëu8(‚ÎÆ¦ý6mЊï¿òAruò> p¡ÐÙÕõoìÉ`ñ*Yc/.Tz¬OâÅ.'‚+W¾¦‹ú@ B=Žøzúož¿é—W¥y˜cüó3,Ô øo&Š^{*ëÛóûddêR^õ˜3áÑI¬ÇYÅP54À*èµ ={tLߨ•£¾yÜ«ÞsâCÍ€»¹¦PÍýã„ÁîâwÀÇ!aEèa{ŽT  °v¦‘#¦­´ýÒEŸ/ºøî¥OJ—íVüúš÷ë¾|_¨p;ÂD}•~usövÜõ@?×>óÂ’¼…>P-€vÄ ç\eYeS;[¹ Jó?ÄôMû#3ºo‘në/}äåk/~R°¬†¨n£rÝdqVÙÞÑÖêEþ#­R®½¤ßCyœËµ1ß¶¹æ¹ €ìoûo\¹ö¿ÓLy±º0 R˜cŸVu¶r5*Ù­™šKÓÏÒœ©ì§Kžþ©ûÏ<ÿéËã7—}«£t½\ç~VÙ^ÿxkõ"ooë|‘'±ëõ€ 'Éÿ¥ls4qÚ»¢ïÒ]wEØ÷¸ç½evÐ…¶†Í|ø 3Yl¿ÐôY'% ÷ ¤ Ü6‹2n J9³PQÔ[(©°“š/óDFh/šµ¿d7kôìñ²ñ«‹W»4f†Ç‹ Î#Q}Q¦¿›,–YèÞõEÕ‰òŠƒ‹2MÃ3#F¬ÏËÛ—•õ‹%£LÓðL\ìŠÂ¢Ô¼< Ò‰2MÃ3>¯¨ÎÕ©Ò[ú4B¯Íܹ"k9—Íú¸Ï[Oø ¿Ÿ6ÀD™¦á™K§ä.î n^õÐ…¶h,ÙE™=31»†!‰„%7²³•+””3“fdÞw¼‡õFL›hlŠ ®sdï|pMsueñWß—÷œÇ ±qk˜ÃLLš¹ôçû–Ü^&Ä0“föìyÁÂý§¨(•™˜4“vp¶%ËeB 31i¦°de+¢Ìôòâ² i|ÎÖ½Æßÿë΄fbÒL÷èRèÂÛ 4–/ÒZŸr:[¹vöÍ\›ö4&Ìš²f¡¦OèPaؚЯO*Ó7–nø¶tãT÷éqŽƒ0Ö”WXçâ…–˜ù‡Ü<ë\k¢¥3FÄx;s9¤5Š‚É)[ÆLtàs[Q®Åf:yØz a>ñXeS;[¹BqÅ]’bZIcŸ¢¬I(µ‚¦åH_i?f:¥:¹±Äk¦ÉŸë‚ôlu¹Šªt«lo^Þ>kõ¢¢¢T«”«j8wŸ©FŽaÇN`'xz?Sõ3SìüFÏrà·r”ÅŽº0 °,„Z@c?!¬)æqºñ0ÐhI_fbbÍ7%”úïúðBà ]1‡lßJÑÒ豋ØE?¢'»d¶?Ûy” ʇWtÔ“‡ ¿R¯ÐÔã7W6Åš½Ù5Û´/§S¢tQ½ô½ùª«}!âváz¼­4õëRùVnƒp¼ *@¡rhljTœ{=yϺ¼:Ïmlìø5ý¼¥æ=4]Wtä夔Ÿ+µÌNü(%”/î½ÑшiÍF±|„šMß:x¦w¦š\É®LçŸXáðeW}×¾º~¦ÛN‹¢ =w¯–“O!|1P¤fÓ(…oªãÞü ÓÓöš xH*è_jèlp¡.Ø@Þß:ÕÔSŸW£Ïø áµ]…V¥£'Î`§½iï!Ô0T²S† Ñù^(Ï6^Žš+ï&¯ÛvGÖÿþÍ›còo}ká<1í½ý¹ð²:p ¡JN_óê3=g¢“©ôøäï¶.õYð©'•g&|wÔ9þ¥ÒîîÎløÚ¢Lヘ¶Ñ¬y(kjúFn»Ü“+éúDÃhµF}†z£tƒ'é©ëãoô75L±Ît¤]ÃÓ,´\Ïû¾ë-Õ»›ƒŽéi)䘇Þì‘ãZ¤¿6GJTÔÆJÚß õ4·sT¯§¶Ö£èÒ± gÑÓÕhuýšéuÉqw5«£ŸvÅ‚liˆíÏ|»vaÞÈéËÌM_~É™º©êH3€Ž>Bã7râ¦EŸ>“]ÿ¢5!–wéðeŸ1—{Ê Ì´†1­¦±e(k J}EÓ²;nQ¢XMÜ£Ú—¹—Ó„©¿‹~ë©ïÙCßs„¨ét±´—tÖ³µPmCƺÞlÚ~bÌUI«ióeÕ)’Ú¡0y{d_#Oäd…Ñ!C¨aÁt0 a]ÑÐ;«¨®æŒcc½bÐȹ.®.wtaüï[ϞцMê yÐÑÍß êÒc+”> ݘ=Ÿ¡ H%â]|üƒgŒÒÁ1Ï~ãɦŠz›Æ¶›údúŒF$ÿ¼§ñ^ú^ÌTÎ.?Ï;¿Æaµ'áÙKß;È\nÀ•lƒ 5ŸáAX;êÄ4BÛãÄ‘¾ Õ=õL×ßÂû~Ó7cB†^¬ÿ×_àµ,=Âú©®é=Éô„½kœÑ£¸ø‰B^É1»‹˜ÃO¸Ký1c@1ØŸð‡3Ùܧ´&ÍÍEs²ÑlÍ £»ÄQƒLëóÙ‚ì¬Fv2ùAŸñEû4¾ï×› º–FsÃbÚÉ© N¦_Ô#ïìÂbʾ˜n>s1œ(Ð9 ÒôóÎÀ„1C^.¯çCÌ4,êÒ—ýŽûõ[ßïüÓç”rÕ5NLuü÷åúšVŠj¢ b©²9Ù—y—~³K’‘nÆÂWNÊáìÃÿP…Vå£y¹9†B(: €L u¡]þªíÛÆcns¶Nª¦ûKÐ)2ŒÕ~rÀ˜%M¿rº+,vAò&ò  s`YùäkœÕ‘Û"3®”‡—·è¾“$RÉL$Jâ…9œœ=¢äZV-“i¼>>„éÁ¦;c Ô±t•üÊJ~3ߤøgÑ~´?b†RCi—ûy%‰ü¨ LôKî˜;üÄ Ѐ{ª Vœšz:ò»Þ¢*QNLNkÍ00³l@õExq^˜*L©dWÊH“oÜH77Ò݉t¶¼ádXi©³J¥H®ÊåÛr-ŸFh%GYë©åÖÔpk|…3¸ê\]õ®]ëºõÛ ,û©ExªžN®¡HÑÁR ƒ h_æúÕ?îÿ@¥º¼vyrì°·ƒÃ†Ã‹g1 ® '^<Ñk{¯#Æ÷«¶÷­iZ_[ìP©æ††µ`ä†Kó‚ŒAÌÄ,(QÊ.)ÅKs89GG°Ò%¼¾\ã”e¯·—è%<òáâYSóbjjµ]™½}xIɸS§Ö |Ãѱ-êʈU¥’£ªç¨j9uLŽ©ãÔ I¡£Á‘™ê£}¥F)ú×¥ ¤˜«ò.¥Ov'}4¢ð›_ö©3%tžp[d©¢gÊ1§µ¢‚¼´ÓÇ¿@$ÈŽ-#†%,. èŒ&ëÊžmŸhZ.)ÎØºaÔ¤çwÃÑ’ Bã©é§ýÿûG¦ç¸ˆLšÙÂB&‹ ­~LœÆ}_fºPc9»s 9*J»ît]ÅUÑ(ÍĉAÒ4D"BÄ'ø-: ‡C’Lšù½gÏSMk¢srf¤¥-=ºÕã44BkÙZ5®Ö²5j¶ZÃÖÖsꙣâ¨H””%æ‰ÊµîÝêº9p oE)Lšé»%èääl&Ó0i†Y~'!+˜Ä´Ã™‚ÜÔß~žb^’ •å—  :i 9¸ÿƒ¯½¡…Q,J72sîáÀÏj/x$¹h'›¯Ú‡õøšãMxwÌB 3oQ°õõÜz%O©â© ¥…jŽZÃÑèØ:Écb ³À1qš&Ü„s¨ÆyãrÓƒ•9 n¥³Ü/;;¬´ô¢·—‘uóó:ª¼)Ž˜P³’‰,–Þˆõ,½že0˜çæÉÀ20Q†Yà™xLºB)’/µ§„—¥ò¡å–É1LšarÌñA¥ýË?NÌÕà‚·Ë/™N_]ЦЃǎM;dãÏR¥ú¦ïøqŠr$’…ðúYEñ9ßMþu´5sxÂV5Nõæ Ó#˜ai—›æx&‚ cúæÎ¦ƒÑ˜H'jZÆIœgä1‡äuBŒÂÄZ±À h$vZ;f.Öˆ¥)3whpp¬wdþÀb›ËTõöØÉ€ëí÷€™[]øËäÕ¬»váwµ£íZ¼x1ì°•š¨Gú2SKï–’„I$,ö,×.O.)θ}ܳûÿæX.ÐXx{m¹Ü”Ÿs¿¬<´È>bEŕͱ1CÆØø&³’~g¯\mHÝwûJnÜ0òÕY¦‘#lü%>µ½y¡V15ò[_dZ¯è >í´iÝgfÒ̼Š;RWXLû8#Hì°·ÿ±&.þxñ¬ðîûs‡˜óÆ¢~ÌœYfÖØøs6 ‰ÃŠŠØÛ¶ÿâ·lÃnÜ0 ޵ñgÞ”fõ¯ìÎÌ™eóšö º0 ­µch‚ÆOz~÷ÁýKKo\b>ØÅÆ¿/žåù³âÖ¨ 3ߌ §/W<ôAš‡L 0üü#wÜS¬-Ûèð.蟙Lš1ìÜðmýäÅ•G•®ëšFe˜ù)©8ªD&´Ë–s« #ÈY¯Hè€NhšvˆÌôé’-ùMø‡·–> stream xÚÅZËŽs· Þ÷)üVt¿†E› é*ÅìŠ.‚ÐS¡Y'=kU(¶ÏªËÙD\|]) Ó$?&¾ÿèŠ c´)+^A>{gU7šÂŠ´…TŠôß él}zǺ"I¿¨:ëëWfçAȦg˜+âDu™G¼2)ŽÆ©à +µ±? ‹à®-Û‚@.¢º^w‘ÖãŒa=Žج‡îp)M«‘VXœª‡½H4‡LüÍÑ…‹{>†De.×Î7W‰oç7TÅ4ž%DO–Y-Ü9{ÒÙÑŠ„ß ¼zâQ¯pÊ«ïÕÔëzö7bx¥i/«1 ™]Ï—S·#9&X‡&3m†Yïžf­.Ôoq^V'oñˆ¤`OR™±Ô&õ¢G£Öh«}£˜ö÷èŸÿþkҒʺ@LÓ*›LúhVX¥vË*ý:3Ïj\µkøõô+¤¨ìæv:©˜Ì27xHõDßt}'¿Ërƒ]Ë*j”%Ü…Þ[Ôl2ñÆ“ëæE¥mëlª ã¾Y`–lúEµußÈ6Ã,¬zl‰ˆÑüDF·Yü»à Æ4ÔˆIêoý¿ï¶3e(_”·œ¤ìmøWóè÷®'”¾°eV+âÌçXÅKþƹtNå$Üü.,E±gL ÔxC¥‘ €X¿Âò¼JÀ"¡I;«JΩrV60”K‚ìýÝ¿ØÃ_þsø™WQT‰6ÖE@þ†` Ve¼ò>²’ÒðRʸ™» (Mܼ³PܽQ®‚„…»Åm5¹¥©é¶Îc(½`X1¥œ–ð_F|Ç×{Ä=ÿY 8È"³ò=c:c•³nÐYÎ&ž&ª  yÈÚÁ¶hüÎ×fÀ". T0V,¼WÈëÆ@ÜŸRö »Ì™g¡‘ê5ÖæÄŽŠ§Àpìú~JzMÔƒ ù"ç0,õ±ø Ùãz¾oÓëxÓ´ÖB¢ `ó·1JÃãÎ!m¬‘&‚#¶ÊpéOüHy˜KÏ.#<ÁD×4|>Æ“ä#‘C(’>ܨ%Ìñvd9„¶‰ÌÄfþ [ÊOW –øÇ“qw•rñˆ“)!L™Ы-Ð6Lù¶f*"¾„$òN_:q¿ûÆ`x"wuŽÀP#H%&V`gí$| µ]’²ŒínŒÓ:ÚÓš$L-r§ûâÖ£œ–ýNŽ<`||r‘o…^1hÎ5íÛÙ£ ³B¯‹@XæIý" ˜ÃP/6åÖŸ²Ñ¹N¬¯Å=´ÐWwÛnªµ+rEu+Å’¯?eLÉøGË"ÆûzðíN}[%†þDw\ôm#}^ÖÞÐ5³rþ"ÖFâòú4aìøR­ñLÍëª!è„qÅOä·Ý¥Û2¨*J° úÑMŽkh»k16RZØî´X«,W¦˜òÐŽ¯5Œ-„vÜ´“ @gÀ#ÞÀ#é7£ðíç•+ ÷™?<-sµ¶@>¾ôWøéñéWÑPm†èXV8Ð¥%z0îÀ‘…šÃÏÍ óH˜ìœI&$ÿJüÿŽé.Ò(šþÍÍËJ0ëÁX\4ôÖ¦È^NPi*¥ŸúS]ú ÈaéR}Öªc‘€¡øÞ튴žº[•Wív9júÄ2ÖVi[ç‹·?Nݬ”Tð£‡ÖÝxÎv›>˜õ°•ïn:tP°Ø4›¤ÛJá•àù…ÃM7­ËPc†ó½*,FääËOÛ¦N# »Nl¤–c6ÇÎÕ¼ªñØ[çñ,š+[‡Ohûˆž) ñÂ>+V·Ã¢HÇmFœ{<æ2C ¯\fP™Û;wÛ¶]*É—óv×.B$´¯{Mé­¦¦UZ©· ¨!,`n[ƒQÅ2¢íFv™¤JÒl¦IGX·ŠŽS•±;¿ñÊjx è¼Þ‰TþõíB¸ƒ? ÑÚ–ºmâmTMÇk¨˜ÄôcÒÿQW“˜I¹&1M˜76…½CÍFبÁ*¿EÚðJ½ï¤€UÅò{©ìèmTÞf„r†;i¢‡¼š»Sh~/CK*—4ë`HѵŠ]\ ¯­ˆ™†99ÖbÊ•µT$¢›H^.‚—±êé,žÒ3Ç]¢w õ@ûf)n#µœšûøª<šXWFŽåºoeìz,Se+Çk*Äq1]ëÆx¯2౯§ª}éc¹è6¥_k6…IQLÚ§~Qd?Xit« ?ÒœJQ s›P¹Ÿ»< ÿÑé+íôJÃ"Í‘Œš\­Yê°ÛiþòXl`؉,Üâ–àݪkÓæâª4t=tÌ}£±;ãG$®³˜mŠåƒQѵw \&q/¶5yâñh:õnZ?!нY˜…ôƒ r*¯  ™‡Ž^|qpÆÛhã`ó)­nŽx»ÓÚ'bIÜe““X~r¨:µÅù[:M=¹PNÔÜÉö$£}žØ{äýX ·Ïúiøv3eLî3èî—|\Ê與Z!P5R%°×Þñ¶xÍOâiÃuͳWZ‡ PhæÜÃü Œô͹ªkçv$W¦» ݵc˜va§qKÕâLh¢|Ò3Ô¡‹ÞS?Y65Ø”‚R÷ø·­º”Ù¸R_õmk+D;÷ÔwŸAäÚsð§¹×Óä¹I™:Õ¥×®‹q”ÓûÉ8žo¶ISᆠ‹Œ6[+2ðù³"Ãû¯¾Ÿø[<ßèñßß$V¡•Ð¥­ÇæžÎÈÆÒ¼jÉKòܲŒ@qxtsÌ‹\çWH`ËÄeÿuÙíP3mÕ“m2 j§¹íÒ›T/°<|òfî·ÍPC8}¥2Â'ÄXÏÁhØ»¬ÅºÆã«…Ø@ñÕ§®?[òØ/±2ÓLýêiÿéÇ9@¦ôˆ¢øV'Q'sþž¤•Ù1lNv‚èpo<ÆgÍß¡ê­ <ÙÀ, ´:‡²‡ÿÉ–˜$1¨Iå´|ä Ö|–HŸUhÒþÈ”Ž?SŸã4·ó<éî´A†T|—Q *@q|ó¡ñ_>Bz][Ã$åe–n’ž™ÜØK¢ûÚ7u¦ÐÙÓ…ë”?/á]†Š4̇èhx»pSw]`€ýÆ> stream xÚÅ[I¯+;Þó+òÒÏó EY ñ`º;Ä"ç&y ÄþÿÛ5¸ìvç䈃ÐÕÕIw»ír¹†¯†>ýë¤OªüÓ§hN1ä-åÓÏž~ÿãô˯æ¤Õ–UÖ§Ï“±[öét¶[øãþ·‹R^)åâõl¼-WÎÔ_®þŠøìYþÖ·òÿy=[WÇ™\Ÿ^C ]S®±^E¼*?íÕçò[ÝyÎ\W¨ƒÊßÌí¯}ǧ¶Þå9ðÝ2q䉤6…ƒ—\[Ä\ðÕ2•/O½®‹òÞñ8ã¥otÕÈ|ÂÖ½ïlÁ9’8Ž÷4Îd‘Ôë9àcÁèõõL£Ú_|™–‚-ð[·á”nDœˆ·#ñÿñ§"gm7ï27.Û†¸N³³¸l!ÇX}—#.WŠ8P÷Yxçi ^Žm‡Ú¢¿üê¤Ôå°)S%He™P¦‹ºïVÀ=SþZ¼2N6ˆpð›×™'kT1ò«•uÚ²M/W6Xñ½Õ£ÞŒ‹o…Úç=œ¨aQ:Û6oÜ,Q}3ÍT™uùBºÌª€7ÝRB΀Mòn“˳7TÍ­BnPœ€ï„ûÏò$ Ó⅑ƒiDG'‚&ˆ-þ½“ž‘V²HÅ~ ½ýëñÇ¿[™[Ÿ £ ãÔ–t"~9”‹Ú' ¢@‹j[÷^þ:ü[ÈÕºRiX-_xµ¹è§õ‹!/âÅ炆¶iúƒïLGGfŽD¹äYDN#CŸ´.žÆ›JFñ6V.ÍÍÞ"»=»Ü'ŽF°ˆAù“¨´Ä­€Šwéô=Éå@Ö HDV6›'c¢à¿-$èŸ(|åQvmÐqÔ1Õ^„ŒöâîE¤š'>{VBQ+Ã`˜Lè&ì¹Ò[¿ßmfñ [à7mº-h”?–«¹M'3/H\Y"­ŠÑf}C­Õv6aíNÓR…ì¥áýùüàîþüðIQ¼³6„!nbZÆU´y¢af2¥ÀkéÜGâš:ÒV4Ú·Û¾‘L!â cõàªoF~˜n»¤mk Y %#L#¦¸#‘€ß›íâ•Ì ñUsk ÂÈþIãy 3iã¦@nͦñPq5,Í äÅM°Æw¯O‹=&\ã µºHêÂ…é'(DË 4×Áú2‰\ª¯€˜Õ 1A5cggX¸ÐŒ6XhRe±.´c ägq§}ÑNo¬€^ÛgŽu“(•i(4ªCTöCž_¤½ ºÚ¡óU¦Ö¡y#¼³<3˜ÍÈ7«ý×E1t£óçow¸ŒZÓîš®ñ1§Y2`Ý»0A(l˜ßÉXbÉ i82 «‘|bË•ÕD_¢E6î»Ü»f„Xx  _îÒM7Îvtµâ¨Wò<c<§ þtØDm.p0"µfGmSÅÉŠØdúÎ4L&¹AܺѤ„~|H^±Ý©UhàK ‘Gïùß_¯ƒB6º£x¡²ÕŸ~“Òu°«²·˜wìpù ½î‡7ŒÜùªõ!KX%޲<-h#%<Ñ@'z“ tðíŽI uœ848×Çs|ûóp¶ÞÍ+ƒk~+8D ¼éŠJF7žÌàoo]©½—¼áýÝ•‹Ây…Õ%LÞœµ“vBn‘÷V‹}×çU« ÙUóš;CgI˜z?†¥ÖY½EŒßEÏQŒ‹)ÜrÂì #:ãü•§aJÛÃO‘,¨OÞ0¥cøNŸ®E§‚31·&¬C¢‰'´ ƒI†Þª”ú3¥&S=î²3GÖ¥…˜ïJ…MGófêèìJÔdôœíø†’Ù\¶Ÿ¦¬óèi$ëÜdDaøûi$­â”ùJ")l!º‰¤ž#:‰¨I» @iêÝ "C–ß@XÕ8£ñîÛz‚3:9ãµMwzÃúÆg46ÇR°C^&žQ¿£š¼;ánj“EX—^¤Ý};ÐÖíø@¤Íx»7¡€'$3Ô¤öx~²ú3qõÀ̹ϛqa%ŒD&¯’(<´_Mv¬¥†¡.øgþõ²ÑÚlÑÕ4µu[T” ²EÓÔg·¶pe8e4h÷¼‹¡\ØØÒp§õ×`©Ÿ&³©TÆ™Êên\¬9c®ZÓyø42׸®ÊV¢¬#E<ÇHÅfž7’¾„rÓ.}ÇŒ5#Ù¸œ (ãL±DËyå}&¯9µ>GÞÉ!Â8á d}Š3JIf Á&tí5LúKXlÞ(|gTøÎœÞ£LL ½pÙ(ÛÐmö1EÝœì GeuÛÆ¶n­“ŒM¼•»È²¡œyuQp§¹h-˜ÁÛe¶v#;„lŸšW»N"2¦ß8Q wH uŸqD#Р^aÍ]žÐ‰F„}ºlG8£'qjXrበ+g9+0c…u%Q±þ¯«ÿÒ[‚ò¦ÿn¬ÐÛ (}V&Û\Ùâ”ECkµÛ¾bÖ./B-ñ¢Õþ"Ò2–Æx!x%ãAíu¼»°H“ ÆÒ<Øš>áh"½9R«'Ùþ"iS+MºŽ¨åê†(õ/ÚSÆÕ9Q䓞5YêöqÒþl¬#,ûîþ Oœ ¥ÕŒö©vŽÓ•&™Ä4¨µv0vpᲡ ž¼ 7êìWɰ]jm˱g/ØÜZ5´ µå»ˆq:›C6Q_Ý'd•yŠ7|tÔ¸®"Ã5| -ÓÌcXD“×’&ús&l:¤I&†ZÇœC(wÂ×ัûz.ßý÷åO(¯ Úa°B)ßÝ áf +’/r»p™·(K8M¸¹§©õ’/ Ò…ÖB$ÙâÐzŠ›½&ñ9K azîhÙ%°.µ±­µ}x'ïÊÔ‹u³²1r·Í=^> SžîsѶ­à,ªl¦Ù X¬0E4Iß ë-H77 …Ry(fcPE­‚ž€Ó@„á¹ËôüÖKó-qÉ­"§CÜ0åÚ0Ó®m=pÑÖ‰:±Ãʰõéò‚‡6ìÓç0icý e"½²DðÒ“‡~ Ðkq¬0‘ "‘ã– UµZé¹~ð/Ó‹BP*'šg܉WC™|`’WìÍmxÝ*°è=¡ª¹…¹D_må`7_ޝ48åìZi¯"^|0,Ž«¹ ƒçd35ÈÆúƒ&˜\áó6¡ês6çõŽ÷Læ>9h SC/‹7ÙMPÁ=·Â~¯[ž½ó€âFõ ºÂÈÁܤܜ„é-`YP˜iú#}S“ËÍ8ô"·‰jMº´Ò”Jd@¬2²-’%ÐäFÉÄ^ȳKC;Ø`¥eK9U(àî¬}J¦x©}J[Õ Ê3Ò-ÞΗ}Ǻc1)2ôò…Ì;ê8Ò«ë=?Æáûêa›3‰Ì*ŸÞ«£Á«/»gàõ&†Cšl·)¼óNVfZUæ—Æô u/1²ŸW]*ãê{ jsé(#ä²Äí½eH6ÿ@ßêu¨=QS­æ52*v5—NzÅõ27”EîÊ&R² Ö S¤)ôè-F;ºöÎ/ Ö9ï²?dœ§óƒïÀÁ.B/õFù‹ù‘ôÿÊD½9/¢H×Ã(#öt‘ìËä´n˜ÀìäF>dc<´ÂJÈh6kÒ*!Sí¹;Ë]ïÆ¯T—ý€œ|öi4ÚË5Dy‡;þ¾¢ÚºÍÞ4Æ1k[R§÷©‡±–á2ö©ã95­ßý‚O›¯eí!IÌcšª`Näü¤‚4·$}þp±'&²lšœàÜRÉw†ö…DòG otøùœ6Ÿì«?ÃßËȺçüu”YÅG…ƒOÛù‚ñ›ž»ùZ_,FXä=Z·}s‡®=û G$­~̺_Öý²ïvîM[«Î½`Ó"çðÙ6c;}´õ‚…Ón²Ú’ÉÒUóŸsCî ƒ Çɶ—Fëáî=S'zbä×eÒ¯ò…2˶‹%p©0ËQjŸ¦<Î÷1J¾t…õGÌ7||Óã†ã†N£6|‘‹‹€8 i–¦¿üî?0Y# endstream endobj 202 0 obj <> stream xÚíZ¹Ž#½Îýzió>€ÁlÎllf8Ю¤?r`¿`’u°ÈfK­±Ccw V³Hëüª¨Ë¿.ú¢Ê?}‰æCÞR¾üúçå?.¿ÿ“¹hµe•õåÇãbì–}º|Ø­þ¸ýýS)Ÿ”r×òéËgþú0Ñ–·Î–7ô6|}ÄúÎ•ï Ÿñ½‰ŽFìWåÏô‰¡3a[¿e_è\DúsÊÿ°äðN=¾>œj3Ȭãï0ßý‚½ûH[©ÒßÄžey|Ð3¹î™îÚŽSi¬Y&‹}ißfp£Q UL°w›šñ¬ŽÞx‡‹ÝqNç/ôÿøñ—¢ßm7ï2jHÊ$Gì7~\cß‹íømÝfÐàÏsÝÍ üƉ•4ÎåÑòT5ìãW¢cwކ½M3÷aÕÊñO¹šÊxè*u+”{jlkë2ªuù+¤:7ÎåQ•eõ¯Jè!µm5²eñ¨W4Þ€›´±/_£n’ÙAKp òÖöÍ/Æ`¨gy7¢O¿Ô*k€ÌÜ4âbZ}ŽÎÈ~CvlÒ¬Bœ|Ò™Ûüqc¹~$_æ}ê Hç:OM’}=ƒç÷-17ÝÀz¤‡ªøD GeÉ“*aJrtf÷BͦtW;**Ün´tcö&Gb>ðwدšX JÖT£3‘,ví¦wvè^-m-Fs“m3é„®ñ¨;ZµÓÌvšW¦kßȽ˜“AT@C¶"m›<ÚÙþø’оh]2‰75©”lbµ»|Ä´ëñÔÕAUÙK;ü4õ]‰ã¹.g†GûágjHrœ¢ÇCbÆÉ GÌhå6mé@Á_õ×fO?Qå98m(<ÙúiÚêSæ ©¤ÌX” ¡Ѱ¹/[vØp`u™ŒµŽ[ˆgL‘ÖvÍ1M6õ x›æ¨m}wï½(!! vj£‘ç›W+JaêãòI*Ï3í”ædˆ JÖ2lwpÁ9ÂuñÇàkn0W:IX8E[ùÚPGnäxß™ålG9/=ý¤¨L8Ž\{L c6dÒ HôëðJ˜@Q¢¦ÖsE§å@›W$O«ÙÂ}A;ŠBÚ­¢^6(´{Ç÷a4ôh8áh;ùAœêd P2sƒÃi/;bLîNWà@z•\Š ƒYG®>ŠØ=ImÄ2¢¦æQŽÊÄG±œìÞT«¾¯áŽÈ œ˜ÂíÙªWÔ“”‡[°“YÂ.°*Ïè…ÒÔ¢J~ð†Ô+MéS&6zs¼,SÌf™¨+@"rµÝ“ò'ç…Þ\@’‰3šJq¡©½JDÏégFÂ]QFtšãJ“hǶˬՀËFÑ h°éó†É`@ù¬¹g+ ë~wžŽݰµ¹³û”ˆFÌ3´¢“¶ ôBÍ€âUóàÿ™ã_7`Ë’ìù| »ì½©ì†štÍÜi)35Z¶5e¥sew¢¾‰Jý*sú‘öæW/_”æªÍõòˆHn¿¾ ¤ƒ/ã>Aæ5ÌaÆÊho—(Þ¡ü: u Ð×)ȶõâvVXŸ9ØkÁ3rVPÁ³9°Pÿl¬½uÌH PIýn~¢:µÔïµOJ4äjÉy˶ƒ–·p¥uyó±@'[*Ð,P%µx뎄³Czá5Òt:o&úqë÷@CÂý´"ÝýÕ’[GðÿMYSß²¢Äú.b?ÓzÜ\G™oÖFæñº6r&oVQÙf©©Â™­&K¬ø¯>з—›U»fÁ[öxnw`aê‘Ð$÷‹H®èsZnwîIË[™ÇèÕž@â¾ÝÂ6«ÕòÀ«Úk-Šý.ò„ÐæŽrN¢£|T=i4·àaçŸ02Y¦ù&Úó£íÊŸ£ÀxR,@¡E#lnÅ…¡tzêÒ.†-š§@.í PŸ©B 1B|·¾v~¯ÌôÜif¦ñ«¦ËrîE(¹Ê‹¾öÙàn¯€×aÓ¯îüt­,êzTõw;±w#­h¯’µi;·‚¹õÀ`ñ>SxÂéW·µ,‹ºNùhØÛÉèݯHÎ@0ÞN®HÏheªvÈÃÿ9¿ß¯¶Ú~àQ E €žÞè€@Ï?-ñ~×öðûLOÕÜÂø´J[Œ¦›ß ¡ßÏšä–×.~ Y÷{*ûì.‡˜”ØñŽ™5 jC½x>"8¯¬=¦^;\¤C¼äÚÛà^Z|[5|«½~Ab`­ÍŠäH/d^W8ëZ€¨¬Û\°G·¥:­>–` wtêœç£bò¿Í'wq¾Uù¸Cz® =. ùZ`.Ÿñµ*•ÛŒ#é2,—Üã¼ËÙ éMi}k±Ó¼Æ@(°XËÉ×Ç÷³„>‘%²Û| ¶Á›;Êʾ“”?N•›óò¯òZæåßÍjÈjç§çp˜”—ù¾=ËêI> a)`•%jhl¹ Tήà ßð+ÊüV.(&n|~3{.X#SÁ¯»TÀ'ô|úï¤Þ®|[¥‚:ÒR-F’ŸY‰‹³™·Uíôs!úÙÞÔJ—!ýH$$TØR2£9¼“j¦àÿiå“Vnï§•©“¤J\ö—b‰ÔŽjh[à´¿þî?é|E endstream endobj 206 0 obj <> stream xÚµZ»Ž3» îó~Ot£.€áâI€t þ.Há]Û©R$ï_I)J£ñÚÅÁÂX[£¡HŠ—”Nÿ;é“ÊúÌ)ø´Åtúþïé·_§?ÿÕœ´Ú’Júôëy:ÛÍjWþ剿îÿº(enJ¹p=›¨ò/÷ÌŸ?y ÿOøìõß¿þžÉ9Iι-XÈ #)§òçÞ&ëj·¶}b^%? ªã&ŒTõ;T ÏŽ$×8/ ÝËh¼H™ä¼2 )T ÄòT_”¿¯8 a ªËí~lPJçïwü :r¦è¥Œ]Ï` ±Š\ßý~)£²[ùÚÖò÷;oUìv±ëZÐ>YÈPÆ ‰ƒs‹Þ•±2£ØÜ; ç¾²PfŪ-ù¾o•záÆâË]å*]µ/3¢4´FÒK’ 7-•Hš'}VëŸõ›VñtÖv—$´å.QÊ–{Üòl‚UE¾Y%Ð$ü ÎsW…Õ­¨ƒ'Ód‚ hµ[ôõ\Åo¤È—x‹ðWöL}é&TØ®‚”§Ù:‹Ñ]C:f Å®Ö-×aµµe€ë—걎P@ò—Py6ö2¬×ÄwbYŽº,‹&‡ª:ò 7ö/¿0vé“Ö[02vÙœrmsµ-/åÿ®ýÏ|ë¬3— Æ\uÕ4'¨|Ùü  ~ÉSÂ"NmÍ(Tã6¿äâegÑ’[·Š´!f´ ej0h¬|7]{íc>æÈÝ}LÝWž ›žâ§O§£ÛÚÌavšd6 ?›õ‰^ì'U…¸¢¼ê‹gšZMÒGžŸÈ#È”éI‹P«D Ãeœø±Ù0õ×2ùM?„ º…igñ8¢„•kúNb ›©9ZFêÜ»ðg¤bx4ÿ}` è<Ôü›¤Ÿ»;?×m-Ûž>zØ—>_‚‘Õz)§â·òSwÖÎæø®ç`)ÂTK è¾´_(šŽ0-¤£*«Ì>º’t BTœû:ûh£7§G 0ú[ƒ^RÒ¬]š3ÙºÝTŽt[q$KÑ,å"}§‰°¡F°¼ –ãÈŠ:¿ÓòP¥WŸa,*pE§H†õ7¯Ûy—fSGÞ äh >›@ÆqÕ(pô~>ºò–U‚ @‚¨*‘Ûi¹ vÎÿ©ë"c¢k„)®€Î©>…´G”°Q~sN G‹"ŶQÁˆ,‰¬¾6Rˆ9ÈÇO RÌɼ„H’‹îPnTÓR±lî³C œ¿6q’bœKŽÉk7¸ñ\va›áÎ dwhE&o X?-°–Æh_É»M âŠÍa¶ŽáâBQcä•Ñ(slè˜×ìTèúÎ ›3ŽÞvâë¶™v‚ÈA ZØA´±ï8³LE:†Ýƒ¨ÅCƒë>\<’…]8€švû ›·? ˆçò¦#Î8T{M"ºD£n¿»ixNWänT8DDë@5¦/»jÁ‰<ÔŽ.ÉYQÕc¹}²+TùÓ³ë©e Þý²Œ5&n«:6r„vob¯€*±,NªºN?—¤`S\A²æZô«­•'øV>š†¶~ÊóàÊÊ+l–tŽi~@[‹Û%ÿqmk×Ñm:šw˜xYg»ÉØöº˜>G]CXÖˆ Ž3š!ëjn?ä ¸Ñ$ºCs‡c÷ÚRÜsòaÑÅ™³Ö :TsX©£¥Ü1ƒdņ'\M}غŠÃ337÷„^à'—% ÝX¯д͕®N\*'7AèU¡°¶„©Í™6çíT‡ëê †E¤w¸Ù`½wCmq̕սF/OK ÁjX€!xÉ-‡!œƒÉõ8»O˜ëÃóðs#á æÍø"Õ¹º‡,‘SÞ jg{©ø¨ö ð«4Ö] 5Ô9ž*å…a`FÝ÷‘Hõ"M%ü‹¦>ç5•L3Üýõ«*Ïø±sDáÂJØ$Sñ@sWÖ;ô¢=àɵ΀Øv÷Ô1¤Ò\ªÉÈÇ,<;¸ã°æ¤Öü¥—>UÒÇ*б1 óZ饽 “…4ÄÙÞ¥¸m ¸,V˲øüzº„Ü>¬‡_8nÓÖ »9Ç'»ŸÆ˜w+Ü7j>›ü–lzUó%ªù¬m¼‡¥8šÜP ‹O2AD’ŸëC—‹ý|f©ðä¥Ö€¦ÿ.æg¾ÚwÕ[mtRs\'NW¨‹2øÍÃ5ajÂÞ¨ ÝóçúÏÙ°)KîfùNIi¬Î÷IpÄM[aAºÚ¸ùáWdÓ¥Ç4ºÐæ}‰k}T˜J·ž¸°žÎ²ôbUl*xµèŸk_þÿŸ•¼Ýtð³ÆKÛîÌääbñ~¥\zç¶³R¸X1`­ÛŒN3êÆR¶‹N‡^j²œå† Îþ°\KŒ«6ãç#WîìÎgân‘y­ï;3_ÆJ¹®q½pŠýžY·âMùÚ}‹Ž˜Lœp¢©çû½å.²ýxú¸ŸnÃQó¬ÒÜ•õÖ_䙓¸ c‡Ã+ÏCk¦0”³inñRkʶðÃÁ$Îp!^†zÉÖïØæ´³ÁÈæxÌ–cät8ðþe³ü;ÓößG×çâ¸ÿ:„äó:%ïYœòz˜3ùË+PÕ`«¾ÎÔ¼‹#û÷.)ØŒó¯²ì³ì ä°£{ïy;þe±Ä Dp¼ïš‡P4¼w¬ÞB²sN6mŸMëÛ–ÔgË’ë³g›ÿ…¥¼ü^Nþ£›·úûlÞ‚ƒÍ:óiiéìÏ„ŽÝp¤1FVßpïBS#Ï)£ˆµò*îƒÖusU…#ÂÝz‹d>œtâ¯ð5Fâ^)ØË¢Þ©4`ç&wÒUœÝÝĬD]wt ó¶_MEŠ]ܘœÓ¹¨"n>@6¥¨7§Z öü† Íø†7JNå)µ3{A†AVe»qý¸>Ç(åå•Þ¯^(Vm<¦n½£7¨m¿¦Ík£ËÍÃôë*²üœ.CÐ=§`¡ê¶À„M³2.‹JþåÖ""‰JOý‰¦˜á'm3·Ù–LX9iíŸûòѳÿ 71Únü]\\Ht AïÐÁwžD\Êþ€ ·9FÍÆï.Üc’I%Ñ)„+ƒf(©'Rò„âÆÂ<é¬ èôêN ¢œâ:žd€à÷`º´¦ÆKpœÙïtI`<'Y¬ïÕÛ¯<ÚµA.)Ï>Oå‹Ä°[ÿãO¿U+„¡ endstream endobj 209 0 obj <> stream xÚµ¹Ž+¹1÷WèÔËû ì›x™á@3eüÿ‰IV±XÛô÷žþ~¦¿îvui±iýCùy»jéÓ¥Ó «ãíªd̰ >Éð¾éiˆ ®Ï+ëÛz®±ô$Á6ÄÊå§áðÉ'–µŽ`ËÛ5ãSp1ˆy½®îϲú–70ÀŽ+(DÏ" w:è ™ LºB~k`qßGÝTù|ë4,ì—«Ô›5Ø&¬GXD € ž·«‰*³Æ#9tb–Ðp×ÌEqëw¦^ÚݤHïÄ#sÖ-x ÖÇÖ·2}“’C)OT÷$‘VêúÄ×'ž¯á²€@–’0 7b¸ÃK”媈ÎíZîC,1(ßðl…/ábÏâ"â hä^ò«C )@‘¶ >$y°â£‰oYyÇ›À–Cĸ¬uáò7KâlŠX…*ºÈ娀2Põ¦ì+o¹8‚øfà£6Ñj ä·–žÔ õ¢\3Ü”ÐÃTÔÂauuþžîºkϪù3qsÎ0€Ý†lÒèºšÄ ØÖÎX“‰ïæ³dÈ*†QÆW4URv¥Jeûž9ÔRbÇ æ¡tæ°B³‘Ó’xÿ¬¼ïù_M»]‡À;é&¡Þ™Ùt(¥ž‚#®xœ° ˆ7õîå[¦1t˜•ÕŸvkÆË‘j2Y«²ây‘Fû¬zB‡†Aº—‘{Âáì'2Â Š†{ ŽwÙQpÜwPÁoSEö3Ûºgéè¦@¤{á–é½&êu2Wé¿Ü¤õ(ëš¹@«UU¤‰´ë JC>·Þ‰D4¢¾z¶™ß¯51á ‡ñ; au%3›Od˜k"wa" *ÊÛМ oM§”q>œ°Ý¡[Æ;Î] d¯89ù³¹Ào¡çrlÇ®ÂPÛûÕ±©]Çæ§“ Z½4R;\^ÉÉçׂ|G¥Å“ÓC©F9î§Ð‰``ðžã:1Rñ–ýŽÇp=¡ž¯B ž¢ÆŒ;øÙ$šÒ6¶}®Ñ 6rôêÁ*æðÔC«oz½‹hÌ•eBB8uˆŽûˆîµqë–© O§^,ï$¶{˜TΜ²¶~¢fö£,/ ³jްXdGº°i½ê¸ƒÏÆ‘½A†Î1¡îÑËYçèa=+C˜f•ü¬ÒæXÚiÅQþIzÛƒëi1%Ѐòé.z¸Ëµlž®é9Zù¡ÍÜ¥¿yHyî‘‚úhˆ´vuhbiµ´ƒ´÷Î‹é‹ØœóÌÐdÞ38Ò'£©hq‰BÜ‹àèïÆâ j™¨)ÀU?pË;塎2aÙ5^ 7è&aÉ ªµO¡D]¡֪™òÙ©Ê‹~¨1o>¡OÝ 6öçh€°Ö%¬µSvÊï¬ýá½r}ø©¾aOÉ5"À @_·\{{‚ $Ø /‡)¶n\·"ÙñY…¿l¡9Ot¬cÝU´ŦE3pÎ8m¯ªÀu ¦Í¦Yä[k×Z™2A¼ïêñ#™ÊYø´ƒuìj¬èL5ú{÷Ö ÓM(Lç–H®Úu¶Jà“¶ÝPgNËÑR¼ŸÇá)Pjó2üé›[έȋ”[´Ve~^õ¦¥IQ´1›ÑÈ·2Pú„]ù«¡cbd¥9²ŸŽ ê×h~Äì·W /¶”$ÔÒU¸9š,²Ì™Ès[9̧ÀlÔ£¥¾N„,!øÍ¸ä&¶t½1Gø¯}Ö‰ôùßóAš•ÈËš„„Ë6G®4%¨üñÂ`ô2!+îû„Q§+ƒ•*—^_TCà©1M¾èû×JJhG·ŸJhµ‘hj™×º6æFó]S‘‹)mÙÉ ``†h*Oš±õ‹ ;œs=#̸Þ!Û]¨+=×ëêl¾[IÙÎy­[9˜j)º÷e£êmh¨ïñ¨MÃŽ-DxLzr ÊD•#~; [À7õ#\³c|öt÷®]mº Áñ¾­„>†€ðtLûê0$OšûR8Ù9§fh`G9MhŒ+tëã†jc¤%««bUö4O¢Z!†"/ÖY¦«CÛ35Ôv’öÛ„Œe8u°ßc`íõfl+cæ½.‹C‚ê–)¼²›•}=x•A^ ­J=ÌV™Ïyül°Š×¤<~€ëÝÙï~è°‰E0 ÃŸzWã°.¹u(Î`Á‰»çãzÙbípñÁ²ÔÀf>,o3º¯xáRàØûa´†Üeu7/¡Þ»+½jt´KóFÇ‹äo·/L2ð•ÝÞ å3 mê1i«¶Žµ.‘d_·¢ú_yóî ̲×Fuñì· ãµº†o`å;"“ŸÈ¹4 é›þ·2kùzvž“µ“"¸àV‰rµ2|s`.i¯Ñ£Ë.+°ÚäœùëÓNH?ß;!§ÜCÍ>5 ÚT´zчˆw(²)š(âP¡êšè6‹Ä×mj¤+Ÿ²ݬÝÔ`ÂÕµ 5™—YŽUSÕpü ê~tÕF ¿©ZÜÉÑï×À®ÐąŒrX9G] þ ÍÿO©;k”KÚš¾|=®R¨eM"òÐwÕ’2 àë¶üí¿ØI@B endstream endobj 212 0 obj <>/Filter/FlateDecode/Length 77845>> stream xÚì\”GúǶwX–Þ›€ˆ4±€5h4¶Ss‰&šD“‹9ÓM.Í$æ41¦xg4zSõ¢±D£D ñTl¨  €ô"½í²½ïòŸÝUBTva÷Ý÷¯ûÁÙÝwö}ßygžß@ $ù@ ä#@’@ I>@ $ù@ ä#@’@ ’|@ Hò@ ÉG $@ ’|@ Hòû£ÑktœR9ˆÔÁ1ÌQ B©Ac0iÌáùu¡é¯‡öÓA©Qª4*.v/µ¾£~Ñ÷‹r9»é»¥-ê/ÍW¬€Ák¯Ýûw³³ÁäÉ`„¨0 VRNŸ ÷ˆ–üë_¦¿/¾ˆý¤¸RuE®‘§D¤ —ý¢‹,l+LÑÜë"ËÊ@u5?~@æ: ¹¹€ÍÉÉHò‰O|º:õÖ„=Oì ò ú¢ûÒK¦À¦M/ÀeeË÷,‡jº=mû3Ï`ó"·ŸÚ¯ŸX<-nÚµ“úzS lkr9ÉÀÿþgÒ{ÈêÕ@¯|~Ï/DUV‚òòÛwÃÓßœœe¨<  ÷óøvS;ýÐéôØô!>ÁìÙà×_Mß™™XNŠ_¯ü:;s6 ,ôZ¸ÿïû1~‘g…gû»È+WÀ˜1¦À„ àÄ À¼W fÝ:°~½Ù*mÏ ‹Át9}ú´u1'Ožlu\[Ðh4VÇÍÏÏ·:nIIÉTÐZÂIФ‘-# î+¨»ÛËhäîÝÝ<£‘c0À9F#»»Øæ·&67÷„ ||Lgtý£ƒFN"™þº¸À¿2óç2IâêÚåâ"rumwu­7uO"""¬N«ñ°Jk&K—uÊxÊ~—ú.ÓåÞuöððp«Ï{øða+b]÷½žÏ2e Xÿˆm!0PÐ@LL˜†ÀZwä­({÷ú…‘«VÝ%öí#·¶šj„•³>HHH°ú~ÓÓÓbï²³³‰c4Ο?ouÜ«W¯ðHK•5"ËŽ•ÆFTGTUUõo(B h%,&Ú–ÑÈ4[ –^Ïèê²̸ë¶‚×»ÃIe±Z·>wñôTšm´*И@KÍH )#“û1 Ä1…þ…ÅŒâs°ð:ˆ Ú EfàiN|$«®Jÿõ²>…—^zÉêrD¶ÅjXš «ãfeeMœ8ÑjÉ‹‹³Zòƒ‚ä¯ë࿞òI‡‘‚ äs¹\øÖ×hŒÔé‚ôz_­–RO­–O•Š¡3EQQ(J*UE")Èd%™lr‰FCb2;H7s,{D"’Z Ã:=ÇËËò9çVÀR9à™ÿú(® S¯7Yƒ©ÕÂ1d2‡c9W'f9Q+• ¹žL®¤PZnU |}}­Î–tnjh:Õf*½Ñäè„Ø‰6€–-å¸qã¬.½|F=x«T·]rµ‘ëþ+u ^îEÜqä6›KòqVüù«Mááw*wiJJô¿ÿmàp^9ujU¿ºî(åvHUÃ錔ü˜˜«%€…Hïª3„ÕjLÂa,meåh:Ýb+¼u:Oµú6Cq³ðR(P˜¡}°¨²Éb¸ºVÝ’üçà(n欪º›3soüÌÂ€îææÁ`XL 4&Ð’øÁÊÄ-â¡PX ˆÅ‚–ªƒNo3_@#…RG¡´ …ÑP·«OÕ›ŒF=mܨ™; ˆ–¤-&ÉŸª{¯›Ô½Þì´À‚Lýrsâ/`å­ºT9½Æ¦Mw„;x»v™$Ú´„á1¨aè¡Ê2ý²r×ò-íÁޝ¬ê!¡ÐS(„¥~ ‹ ,«T*,'•<,Ÿ°¨tºº¶¸Þ}(¥T*µTzÅĬª«ƒÍ!!Géô~®DJ¥Þ÷¦–£ÑÝ`€ÅR°ÃÕjXªçj4=© ÛŠNXÛ`2[éôÆ~OÔSü¦À¿íêö©>S¢÷v*}BSStU]©¼*g>próöýFÅuÌ`N! j{ðA=ƒqJ>*ˆ~ Qê_“$‹XüÄ}REµ›ðr·T*är-¶¢šNÏæpú7·åÕÛp¿õá„>è! «ÿß·¸.<£1@§ó1×HƋŰFÂÏÍ•„…u¹¹5óùV›Ž¯”MÔMjƒ:Ò-k‰­ÓÅtvÆÞ¸T^þôøè|m™±ÐäèûA4Áª ûûMó?Ë¥KG’H:§|öìaº$ùC™¼Tª@±ØW(ônkãµµi8œ6?1—[H§—óù½h[€24Ú¦>-ÃA&­¯òÉáS©ÉèÆFsW‚ØÃ£E hàñj¹Ü:]B¾wæ2?#p¦SJKKry¹×£GIM­¹U%ÊA9aGÔê8‘–/w™ –/ “iQÊzï§D,_™99w­¯[Í„¡û)“±˜£÷ç^^^)îî>ju°TÚÛt´úùYn­šÃH Â-kÏk”P8¦²*}{ppiXرøø6c½¥ß½_Öæ,:M¬ÿsª"ÉÇ\¥Ï¿«+¸¾j¼ÄÛ»ÍÛ»ÅÃãrxx;ƒ!§P,‡ýRYɥќå¦,å¹ÌÍ­wO¯÷U«CÍ%yl5ôB„ÐHµx{WxzÂ@›ý'•ÜÒ2>/OÍd^ˆÏ<å^„=%(R.‡ZÐÕR[k)>îîù¾¾•II©@;f·>ÏÍíÎOhnžÙÖFS*a  ÊÇç—[ÉfcüÆ¡ÝH»q#áÚ5h7 GŽÜŸœÜcÕ$ùVŠtåƒkki2Y}Tô}{û‹¸–L ›m’v?¿ÛÜ”ôââžb\ÂçcMþ{ m›Ÿß¾Œ |?&Öˆ–ËcE¢ˆÖVèïŠ={rf&yëV†ÄËÂßzæLàòåÒU«¤ýÚYrW×{ûË_~bû=Ë918±//§@[€nåJCTTÞ† 1(Q°-üŒ‘#'9Â>rDôÜsÚ¾GSR››ßÿê kw)­ÝOI¾@9~œ¼aƒaéRõÑ£¿ýßÿÅ!½Ç0Z­ -¹l™ÛÞ½~ûöu¾ûî] 0,º^Ï='Z»–ÈEaÂÆ¬â,3;q6ƒÊ¸»Ø?ù¤!1¥•³ Z×­c_¼Í‚|Ù2ñܹwC¯ª¬^ݹq£:"‚Èiåô’¯Òªn+·ÜÛÙ³”mÛŒ))êýû»Ñ”YçAïîÞ¹Â4ÿ®ú÷‚?Dz°Î\,ݳô²ò2 oVo^ž¾Üò¹‹PHݹÓ57WûÚkHìùøñÊÝ»ùßïóöÛ·¹û½oß²EKø•Î-ùû.í{òÌ“c™cw.ÚàñÇ* ®Ô»ù|͆ F´à¥s]}«w¾öš¥wßU­özë-éO ½GX“©4J‹ÞCÄ –€¥!PÿÆš—^BIäÔéôoAüư=W• é=$_(B½‡X†¿>÷õ{óÞ=Ýö‡¡Ú:n 0ûâEŸåË5¤æfre¥ôÙgQÿ=Â:<8¯xý“ŠO`xî蹤‚ê§Ÿ¢†@üy Úo¾|ü±Û† ®ùùÝ>>¢¯¾BzSò³³³­ŽluÜööö}ûöYwË–-7õ€ji7?äù††ø¦¦]±±ÙhL\}– ä „@XË}ÍëuueîlquE ‚{£$À“ä‡kµ/–”¨¨Ô¤¤I$ô,qÒ{„Õ,Q(–ÕÖ~ºkð+:#HòLºLö·¼¼“11ßøø §ˆ@ úáS©t¬BñAdä´{I¾ÓñHg眢¢ÿ35æ#ˆ~ ©ÕþÛ¶¹¨Õ¨1pJÉÿ¨¥%X¯/-­íj…@ ú†*¾÷žìzyq‘Þ#Î%ù®jµ`ófZýARn:ï幈&âkølûžÓµÚÔK—`à¸qê{Õxn¨o€9Ѐò9‚pÐ[Zü?þX´dIWJ øæ<ÝZ©ªÑ¥1 ; Âpïåâ#*+ã~ú©›B¹ôøã-ýNÖµg;϶g´Sê)ŒV4I¾£õÞëõ±± àHïwyì2…Ø`‰pÉ=UÑgŸQëê`À¿°pçªUýY¤(úRú%H6tÿåsáô>ð•WÚÞyG‹³[kqmÙKÚk /ë^æk¼»ŠÓ´ZšFÃ’Ë“¿øÂ¥Ë´°Å¤úú“k×j©Tiý¡Pïwtíî@ÍQìéªAí"Hòª÷êqãL;¬?Ž›Ô‡þ}ïðm’ V‡Ëd¡ÁׯS zW—Eï!ŒââǾúJÃãÉ¡¯o‡§g+ŸßÛï¯ÑÔÜ 1 Àu”ÕDUSã÷öÛÍëÖ)ÂÂðww:øïnaÈ(¡0¢­Í§½×ÕÅÐëu|¾N·è½ÉŠŠDcþ™¬PPD"ep°ÂÛ»-<¼%  §Щí´dd™‘jD’$ßA—ØÕåõÖ[ò¿þµÿ Ô¾†ؽÂfƈÅ1±5&Ínñönõõ-Ž–p8PÑçoÞL1«¾*6ö×¥KéZ-O&´·¾tirYYkbbsHȵ#àa´0 1ÿœé=‚pzßðùçjÖ»Ä2ЭîŽ.s)ƒ-.>Tú1••AååíÁÁµçââD\®GR’åøûÝÝ=‚¦%KÎΚeùP r$ïÚÚQ»wCù¯IM­ ŸÄŸT¢.©4T†·†“ed”—ä#½b [¿D¸¤§/?½£*7C¥ÊŽþ.5µŒmª°ÙìÈà`Ëñ»_}õ¶¾|èÜ—›¿¥ÏœÜÒZ^>êÔ©ÊÔTzTÔ[îo­?±¢LŽ ô–‹W½‡PenÊEÅèf¤××ÏËS3™…#GîON–S(7Í&™Ü³GÐÿyD‘Ñíâ"äó{~¤ÓþjÃÂÀý÷û77‡ççCí¯˜?_ÿÎG_}änpGy I¾èÙ)Ç;§A¥‡¯h¹ü‘‚³ðíéèèlOϾ†2rÒ¤¾¾‚Ú_>"QB^Þ‚ .Ì›·þÊáé}à+¯àµ=ÿ6b%º9²5tú¯ééÅ÷Ú°³ßšüüà‹›žžýPvö ‘á˜å&$ùÑû?TΜ‰ûRÖ×OÌÏ?”–ÖØè÷Ÿ>=¤µ5õ—_2ÍKÓ#¸‡*ûüqÛ;ïA飯J¸víä„ ¹Cט!åpÎÌžZS³ò“OF‘HÝ‘£O°;@C°y³66Ö4^¿ðôú7._Žhm}öì!Ñûê||~^¶Ì€<”Çx‡¤V¾÷žhÉüÏ¿“'/^ mlÜ2gNî0t^Ô†…½êë›"ÚÞŽò’|ûÁ7o_-zôQ|ëýK99]Ά±c%ä¡onQS©cPjÞÀ+>?þ¨LKë²ak]gáÙÓ§áßm“'÷tÛ9y$Ò‹ÁÁžj5R}$ùv‚{ò$µ¤¤³ßyçøÐû_ßÿذ­õ@˜ @›QNG௣GIRiËÃÁ¿óxß Gg‹«ë?‚ŠÕ·&ø!äôª*ö¾}¯½f¤Óñ\zKJZ‚v8T}Ov£ÌŽÀÜ’Îo¿5=û,îïô/ׯÓÕê=‰‰ö9TýÓÛÛç¨T(›!ɶ«Q«ùŸ}&zõU=®,¬¯w“J‡Û¿ïÍ"¦ð,ÊïA‹½ÿùϦüÀk÷˜gÞG••íJK³çI‹ÈäíAA+êë}F”Ùp9;;ÛêÈVÇý¯™;?ÿ¬´ô7>ÿÿþýïá8©Y¹reO˜)•Ž_³æâÚµó¹ÜÄ¥Ù°Ýçk¯½Ö>ÝÖöAQ;#c€q?ýôS§KçXFo 6ÍL*,¼Ëîuu³Ýõ[ Vgéôôt‡¤³CŒÆ×fzòµµG¸ÜM|pϸ%%%N—™—.]j P4š 7–¾öZr`àãÚb4fΜÙÐxíÚëTêþèèÄÍÉÉAFcHŒF!ƒ1Låˆl‹Õ°:î_|á{ÇpÓ¥UU$6;3!—‹hLœ8ñfiüàÃ_$õ1½þNrss­NçÌÌÌÈÈHKXi vw[–çÃ+ÜU¤†¼Cå¾óC¾H¤7Ý»~ëpå¶Á·1nïôHg'‹LÞ…ã9ä£AýæððÃQ‹G 8âP “,/úâ‹S¦ˆÙld4ìf4ú·¶”#¬4ìGËåIÅÅÛn-‰WH.ð‰X3÷ߟtð @ œœp­vNQÑ·s=¡´s§nñbG]€šJ­œ:5© å:|€É¤ àPZÚpÌUÃÔO?Õõjä·3°žÞš˜8º¢å{„SóLeåɘ˜þ7x¥üò‹~åÊn‡Þ镸ø  Üär”ñä ëëÕ4ÚЮEƒM¿[ 0DE9ðÊFuêÊ÷ç%]&ãËdßøøÄÅ×ÏvðšÐѯOM¬­EyIþ VOÌÏÿïèÑø¯°÷îÉ'{ u>>Z'¤µe}„“²°ªêCëÍvƒ|ò¤aéÒn 4f\¼på=$ùCÀc×®KJjÄû4ׯF—ÎNƒ½¦Õöø¸°ÊJ”õÎÈ#¦=Ý%Æ ðäC‡ôÓ§cáJZÍ»ðùˆD("É·‰1b±»X| (ÿ¥7+KkÖc© Bv„s’QUE„Q{ßÊJãˆÆ€Œ\Oejjxu5ÊHòmâþŠŠìQ£ˆÐ¦>9l¬.f³EÑѨmáŒ.~ŸO„Q{ïÂBÃԩعž_Ô:ˆ$ßvÿ˜Ÿ!*ì“'wßk[k»Ñ†ÚöG©QÖwÔßæâŸòõ%ÈíóÏŸ7ŒƒëiåóÙ nr¹¶[+Ò¡~gÅ‘“âfÃ@ß¶ð¨¬4ôZÓ ö©.-€@Ü¡T8ç?sr9 ½þ°ü&ù R©¢Ñ²9"Üþ[¨ÂÃIkÏhML¤µ•Á>Qc¬I§¤?äñÕ…Šò*òòêâÿ¸Ÿ˜w³ÂžŸo9SvªXL×jQ@`“ß‹~‡zÚäVåÂÀü¶¶ó^qÖ)7÷<o° L }ìX¬]`sHH­ö:Ô{“éÖe·hZPFE’?PÒnܸN„$¶lfƒVýž »OKý?®hY‘%ÎB%)"½ÿXó5Ô+…ÉOžïyðþ(Ã$ ÅÚ¶ áÂ?äá8(£:vjØßs~OQSQjxê¬äYðm„VR[û û8Göà:H¿Ú&NÄZk†Ð×÷º2'›zÎäH©ŒfŽö¡ú ò€ÀÉÉ™³3K›KSÂR‚<ƒÀž=çýý‰sûîtxyaíªZùü'ÏK_ýl½±#ŠŧðQFE’²K²Ÿ0¯] J½K£¢gut”FEáyy]¨÷÷›Q Z¤þþX“üOOA“¸¡"€À(Ð=°xf#’}ʆ½Oœƒ³@ å™Í€q£×( œ¡ô­óIDùI~ß¹DýG[B­€š›ÀÒü“¡'âV€1@„µ> XaŸ·¿sá’…µºÚ$zrñØE(çi4¾o³€/Mÿ?@µ¹ƒˆ¹R)ðAæI~ߌ¿Ðkáöφ<®\±ÙeøÝŠÑD•©CÂׯFPkÃöÕÄšJ%Qø“SÅnÓqŸËWwuyët‡y¼3v| ‰Ä=?ßÀfO@fÆF.^Ó§ƒ$ÈíB9=6W —¹¹q$Ü?‚8½þ݆…⸿ÿF;.õè]^î÷Í7F77™¿¿hxV¨³‡ä{p=öÿ}¿P*„Óû+Wòp?PßÒ.ç ^¸¤×1z¢ÐPo¡PŒïºtvN3/BÌfoŒˆ»Þ}È*©»›©RYw ÿ®.n{ûmFïØÁÈ2‹Ü ÚƒÌ&23Á‹/GòC`%«’/år£jjpÿþÞÞ`^¬l~Y™Wx¸²£áB¡­5üü|þ C½wml„¯ÐD/¿ì¬’ß#ü7Cß}—ëF€>d³ê ÒÜC‡Å »»»©ïxÞš‹H“ËŸinÖöUz]]]îíB“Hh……·{ùYY=¼ɶÕ(•àêU@ŒEv!`ÎàÏ`òòÚ<<’ÑÂÎŒÝÐÕ׃øøª–‚¬¡åc³ˆUÉçñmm¸x¼s Òßÿ‰¾ÛʨTªÀÚ9`“&MJHH¸íèÈHŸO?…ß ÊŠqÃAi)˜2…8·@'†/OÌf³óóqÿ¾òòzW£ñom=µŽÏ£‘”t§ÑûûGüûßz váÂá’üììl«#>|x°QF= Øì_~ùÅé2Azzº±B¯_ÿ:22…FËÍ͵úÔV?#Qß›_µtw65‰p´;Ö’%KîüP ÀŽyóÛ³'{Ñ¢¹LfŸÞÕ„!îs/Ÿ=»Å¼šÊâ‡>=<Ï׺_²-V#--m°Qx‡)^|˜½§ÃŠ Ó`h7¯ nu:ÃGkuÜœœœ¸¸¸¾¾eI¥üK—ú9ÀéëvTååñþþíýîK6|ϨŸomy¾ÎUýµÎhpOŸV=üpZd¤“fÈÁ 4·b9ÄhÞé}þIòããS‚ƒ¥Ø[6`Ȇº©)ÁÝ×ïÆoyF¶œ×®«ï¹¨T¤¢"=f¶ƒnµZ†wýRp¹Œóç ò,¤!!n-h}Pçƒ|ö,q,ÄS¥êÄöV‡¬VáY¨<<˜"¼m dWÉ'76ꉴ•K€F#Âö. úèhªFC„g¡c0(ÖŽ­E8 ’Hdôõí&Æn¹7[Tª6ìÍéý“úø0D„ØI¯„£ÝDúíxÃq?FÒ®Ã÷(Ðʼn!NéõÑh„}wc¢ô†…±¤R-67ÊcËÓýJªíÌðÏàR¹á‰PhŒˆ Ô-3t:9¶—%Õ3™dÔž¡Ì¿¯ü©ˆVڮ·3g ÉüÉJKÕ³f§ô²ôz%¶K¯ŽÍ¦Àˇ¥w½êP1µËàÛ¡ š:‡—ßÑaÄ÷îywJ¾V+Ÿä3‘ü"ãÍÚÕí¸¹/û6ìŸ=«‹Š"Né¨TØn“„’O%@·,½ÅÆjKX®Gëâ8yjm5øk†#C£‘’HX—|¥÷‚Kå>ïý< D“£§úàgyxûI>»å˜:Û¥W%0»ºˆPz_÷{ÝRzgÌDRê4^~s³½N’|•JŒyÉ§È Qož8£5+r]ܺ~ÚOòQ·½| j»Ïï>Å×àÓ„O=Ä’ç6O7nBÝ2]$b[ò ×Å‹£ÇW™²_…uË! •E”é ¸Á¥³³Û`‡ƒAÍÇú&ôÐO ˉÒ;¦çñp6ÚÉ~’ï¢Pñ¾ƒËí’ùn91ºånÞ¬‡I¾s™§–#‘ºCét’LF WI¾•^>,½ÛeûÝr::Bɇväå#ˆAXHÜÍi²c_~CÑFâ n9¬•^”ÎTcþýw—¼K*e´´x!ÿÉI ×Ôü®¯'Â-+ao:†D¿a󨱄;po1B>ùH55ÑÇŽ!Éü™ÐH„ã·e ãìÙàÏ?‡5w”ØG3yr÷˜10`˜3G“˜H„[þÅÓ³46ÖH§Ÿ;6«{sø]¹B»px»vy——ãÛú#Œ£>AäåZ-É`ðÀ]W³ºø·ö äšÛNÇÀçw<âo¿%Èú]BiSd¤–ÉüÓ™õ½ž…ÊÝÇCK£]Ý´ÉÞµ`AiF’üÁA´‘8‰*Õ;GR$’ss‘ê;—+{ðÁ›†•H;95ݨQ{ܘ0¡õµ×ŒAAU›6I½¼ð}³’ääªéÓ¡A’?8gZk«%àÞÔ4^*Åìur„Bz] ÃW8T\|ê)Å”)ï¿_‘’‚ ·Ó¨þ˜1.hËcŒÑ2v¬21±)!%’ü»CÀ‘8%nn=á2 ›éÕØ÷Úk”ë×'®]‹û ëZMãé)!ØÊçBH"щ±½³@‘Ë{wêãrvv¶Õ‘Ïßêí6ƒ1)*ŠR^®JM=«Vk ƒtvvðÈïpIL\RZú^BÂ%©ôAlIg[âõõռ˗of‚²2ý©SEþþΞ› FUUU_ß&uuµÝ¸QÝÇÎ Ã÷Œlù¶ÒÓÓ’Îv0¦Q©…§O˶YµÓÌ`c•••ÙžÎVÇU©T999ý$¶¶ö nŒÆx‰¤¹®®I"±¿Ñ¦¸d[¬FZZÚ”MžÌ T>ìÔª‚Áìð‘ãî¾èÆrmÖ>Z«ãÂb××·rww`!¥Žf¤¦Æá¢¿*¡ïöFΩSþ‰‰œ¾; ‡ïõó­-Ï×QØÇh˜|¬¨¨ä¸8}€ïcÆd±Rq8Qlv‹«+60·ºÖÖö nŒëàÁ ¤$OÏþFc˜Ê †ï¡‘8¤=  èÓOu#Gž[³OãS¸¡ÛÍh}ù* E`4bù ©j5q²¤gg«úÖ{gÄ~“ôÐH "óðP‡„DïÉb1κåp10„£…Ï‚’JuÇö ”|bloHÑhô±±8»)4/¸@#q0'ùz:¥ƒ3I>›í¢PËË'‘xØöò!zbH>Y­Ö¦3IþŸK¯¯¯+òòŽ«°ƒ?¯¨…À>ÝŽ ‘öi…(ÈdŒK>…0fœ!‘h0¼,Ö%¿[ p!Ì>­Ô|>Æ×áBHn9\VØqÁÓ“ÔÜL¨[î R}±½i C(Tb~ð¡¹S‘H…»i½v”|ŽÄa0ܰ-ùÔ>f¬áÒË×÷Z,á×7uËr‰q?A©Ô£ƒŒ.©q·û«%ŸÇ#\·ÆÅüj»Äñò Xݪѧ—ïáAê{a \ÒB¥zbÛËg¶¶*ð5ˆ½/8552ç_­Äq’Ï庬aß |_ ¾å45©ÐÒ{Άer/¡Z%®®,½Óµg‰DKŒ11´†î*7ö“|ƒ¯¯ë­•ç‰âåS©\l—^ŠJEÁ·t¡PîÌ+º×Ñ‹#ÈÆê(lWqçÏaZ/E£!wv"É·¡ÂÎb¹Ê儲VB&ÓÛk×CÉ×c•$Fk«ŠcŽð'ù„šš_D&3t:_¬ÚgI¥ªÁ¬Ÿè¼pÚÚÔø»/;zùžž® „²VJ2ëmtJ%A$—mt„|âµ Y¬H›×æÞÞ.Š"„ä75‰ãã‘ä[ÑÃõïÝ pIƒ!Àv³½]A€qìxm£#ú ^vp õ,V,V[™]]*bLvu/)éB^¾Mµu>Ÿt䡊®œDbbµ¶~S q·5ä]aH$¸l£#„ämÐ~…âƒÕAûÄ™”Ï*(y{#É·MõçÌ!i Z¹¹[ÓZXSC„‘8îÕÕòÈH$ŸÎH7ƒAœ|FšQå£*r£…`ur³äÊVRþGÅi>ƒãÁ¯¯‡N.Ý!²]3tD„«Ph Ì(ªFíåBÉeeD˜oùq£#1ɧ“%ŸRZŠûÛÔð5•‰•2²¬#Šÿü¤j4ç|¶(Lý,ç›Ï‡qÂ8øœã^U%ŽoW´o)ÙÒ©ëü[Äß¼—?xÉ $×ÕÇTUS© • ³kîgð-«´TŠ&å;!*­i(Œvôhry9îoVæ+ƒzMtÑÅ‘Tn{;֮Э££]H„ŒçvõjǨQ‡kg+³Kt%/•¾¤Ñkðqkv•|}D©¥…P6Käæ„Õn9“äãnm©;aH$hìž3ŠýêŸWþ'pÝÑuº¨(Jf&îo™ª¢ö„]„ö6pki™È˜ð ûA^.¾ÉbˆÅR//\Þ]öõAA´ƒ‰%ù,–V×±‡X‰ÓlÝnk«dÒ$h$ð/†´ß 8WqîÛæoaà‹š/fÅÎJ‹{+/o=¾3j 7Ī9jN§VeLÍËÃÚúäæ–Í»2`êJ°ÇÂïÊ•Îôt˜6·AÕ`iا‘qÒJÎÎζ:rqqñ`£¤]¾\~åJll¬Õ'-))qHJY—PË`ÍodeeYw^fõ3ºa¦¯oŸ)--åñŽáÈ •H$·}võjK`à•ú+¯Ö¼ ß®ô\ù@ÀwÆåñx¶”…þãÚòm?¤› “³”…A¶¶¶žpscsãˆcÆ”XÛ(õË/¿8$¡m¬nÍFÜÀÓrù_~©¦R­8oHHˆÕ碙;?÷0îÏÉYG¡`°àÛ"(111š?O‰äåç—>òüGæ½ÿ–åCÍݦMÚbœm,GVÇ%Ûb5¬‰;o^jP©JK€âR¦ `âĉÖýBnn®ÕÏhÏž=ááá}}ë]QQDs#y“¼).|$xÚ£ø~ÈùñÇâÓYÞníØúæü7TÆRdu:Ãâ×Ü~¾½g\ b£‘Ò'Méé‹Ò„zÞæÍ¾cƤ‘J¿(:z’››(&ÆŠèB¡Ðjƒ³uëV__ß»<‘ŽŽºèè»~…‰6¥wZ¹66ÒÈäQ  ·q¶±à[—lï'ª« Qj‚jŽÕeY&ÉÇ *]ùRÆI £]F/b,Âêÿ)76ââ |~°[00÷ŽaŒ¹Sï䙌gþxcöÔêFblÛ ©‹‰‰Î˳Nò‡ƒ„ææ OOÜ';9+K¿t)ŽoÐ~Ã÷„R³ðEFÌ·s€8™ „cL«¿aí=Š_c\,ákÝ×Ú m¸|ÔË—u&ÀÀSŸú<éó÷G¾¿cþ¤¦ÎH¡Ÿß8ì b>*BB8§N‘±1ˆ§×‡ÔÖ^ÀûÐ•Š´s§ÞÙZÝ0çåC±_ñßÚ<òìgóþÉ\õ3þËk¯Ù‹ø {¦Ê¯«K£ àæ 'î$w|Jþ‘#ò?„èÙ?žú8NçåŸÿBYÙ³»OÔTªlÊϼ¼k›è‡ÔööºÐP ™Œï4'gg–.íÆõ¶#öðò/V^„zÛê¶•vÖøøG°:omèªèX–Ý“—RÀÇ^_†Og§7iÄ‹´R¾Íx›åÂÂßC°,õ¨G{æâ‚+ †ŠÁ#ç–;'Mr;{ W2º±±ÐÏ÷ N†.þôéø¾G{H>›Îî ³è,žž‚ÕykCF? ÀàJàco‘ð€ššZ_ßrÀxêx7W|î¬C;}Z;gKÜp9<<­ï(øCÿòÝ-—»‹ÅÙxïÈ'Ÿ=k1ˆwÁ’Ÿ›¾;c÷[1oeÎÎŒˆ©©£ärü—׳ð°Fuµ –¶ÔcêtœææF¼ï¡GÿÏ4“'#¥Ä ¼¼BjkyØÞzhi^¼ØûÐ!Ç^ÃÕÕÙ£Fá>©)Û¶éžz ÷·i§á{‹Ò­{xݬäY¦7AA¯ÑHœr+JKs-+ÃÎõ„·µ5á½ S õ“&gCBx½driTTFs3nÙÑŽ~€ZM„{”ãÇ))Ftº:ä¬e\î_ˆàè÷H~T© ;×ÜØX÷aPô_UÏš…dgœ LÁRíÙ>޾ÿ·ß:jèþc×®e‹ï{.*yÃÝC!;9FòϲXã‰4 §JþÎØiÛËË«ÁãVÐ=D"òÙ³Ú„€Àelv‹·÷L‚9ú]ÇŽÙÿÔétæÞî‘33 K—‰1Î×1’ÿ:=@*#LŸœŽF3NžŒ‘¶ýÈööÎðp!‹…ãgdfªŸy $.ù-<<}ðK};5­÷ÝÇÉɱsó>O¯ŸYPðÞwfJ¥ä­[uóæ$/¹:êÄ^^3°½—üТŸ;—|ø0®$ª¦¦2* ß.>õÇU3g"uÄ«£ßåæPY:½æ•W‚6ndµ¶Úí¤ÏæççFGÃÔÆwÚÆþü³níÚn$ùÃËa/Hki££]OŸv:xí]¦N–—WˆçM¯-.>¾×Ó 8¿Œ PB ÝWøøÔ®Yöùç´;6Žž)-UÓh¸_øèïR©©FeÞiIþðr†FSR©÷ao%Úa*~åJŠƒvôê!¹ªªiÔ(%…‚×tvQ©‹OG¿ÅÛ›PC÷¹S¿iÙ²˜—_æÕÕ ·Þ»ËdßÙ°=S§×?T__2°tä§<< …ÄIkýìÙÄ72/﮵1ŽC.>851??÷‹zýQL ôõC×®õÊϦó‡UU ­vÞGéC^kn>îï¯$Æž®˜üClv”HDœA|P‡ K—’·?}\c£–ÅÂñ Qý  ß¶6B­ºoAÃ㕾ù¦xüø˜—_9xÐvá7m¿iuíZíš5ÿò÷Ç}.Q(’…Â}|Xj\{úm|~b{;qVâƒj¤[»–úå—ö?uJML ¨Äï*Z ÈdêÔT¤…Äaÿر]¾L¨q|µ^ß”ŸÀ(ÞºUÏbAáß¹“_Zz×åzHUU´Ï>£?~çW¦%hΞ¥}ðí7 ÉÉê;ò¨ÊN¯N½+žÓ3N¯_V[ûIHô9 XdÜ[½ÀËk‰DBœý¤IäýûaI³ç0Q…bÂÑ£?/Y‚ã„]@éœ9H‰Dž›[LXØ“%%Dh‹îa͹5'å'a`Ó¨M§Oo½ï>þõëîyyA7j"#UÑÑ,77’§§Q p‰hæ±;$(ð›7ëæÍƒ2ïZ[ëÒÚêzýºëéÓÆyóôsçÌ“ï_=¾0k!ð-†–éøÜPº—ï64ì :C£³È³³³­ŽluÜ^x¡'Ü(—ÿeËÙ£ª©ÔÄÍÉÉqºTÞj¦çm„VûÏÅ‹?KI¹2€&h__ß={öXÙˆ²m›%P ÀÏ,^·ûiõÑGYë«W%R©:6¶Ø†EZ†¯,Øòm?¤§§;ä9Äh,_¾ü®Ÿw0ꫯž ¬é{Ûˆ––«/øͲY±bÅÝ¿ ÀÃ7ƒ/~ ü¹Åð­k×â Ñ0‡=àõv÷W­’¬Z¥ &Eæ¿ÀåËñ<Óÿ5¤šmg¶ëv½_[2ósÏ=7ÃhZmú?t<ò=-íåži´ÜÜ\ç* ¶Ä%Û’ÐVÇ-//ONNîyÛ¥Ñ< “5âz£b¨Ü=aXêþËã½pùòGS§dXlxx¸-§¶ \윖–vׯŒ11±>8k–¾5S¿ùæ›ÞйJ¬€iß±0Ïú?¿}€¯n…ÿÀ´þ¹õ¦ä›~ÿºîL Xwܸq÷<ÆkãFý”)ÔGí}hmm-6Æ0•#Ltf´ÞwŸ`Ïû,1òÜÜr££ßÂÎæUÃHGÈбHx#_–ù—p¨÷䦦ξúJäÛŸ–‰™EEýªÖ8æçw,1ñÕãLJ|g0¦N7ûâÅ…f½?€ß ¨ªò(((2•d„jÚ4Ý„ œÏ?GIè`ûvW™¬sÕ*”’|HýÊ•A[·’ ¶œV¶§çöŒŒ±ÕÕ/^½:Tî~€XüÈXWsp­÷î±Û¶<ý4jÒGXP.XÐÍãq1 EyS«½6n„èßét” Ø’|IHˆl‡l íXÊØì&M±XÐݦ´Ôá÷P(ž>=ëÈ‘¼±c3ÇÇq{¾¥ ¿äÙg»<=Q1Fô {þyø—»n!Zøýëý‡êýýQ{~o°µŠrãÌ™1kÖð¡üäÈ)òjV5ËÀúvDÈá¹uuPø[ýü®ñù®™ÞíÚˆ¼¼®€€ÃS¦ôÞ‡©ÓÅ64D–— ª« î¿ÿÀäɺn]‰¶<@>y8L·äŸ~jÌÈhŒ@óðwQ}ö?p>ÿ\öÊ+h)FbBmn|ø¡ü¯•NŠR»’¯§Ó-Íû¥k×ê УwÕŸàŸhu1MµIwM'KbvFDÀWzGGTgçôË—5Lf—››D&s¹îbñèݦ¡´¬ÒÒGd²âÄD7©”+ hI͘1¹ÉÉ•·–—¿¢»r@wø™'ç¶ámÏöô„/ V‡Ëd¡4šw{»oMMϼ7¼ýý5tzEDÄé”!‹uÛ/w»n†(pp•h±gÎðjjά\‰J/¢” 08ÞÊ•ò?D©Aø?þH-)iýæ=ñ¶ÌqJɇ4NŸ>bëÖ€¬,|/ΡèÔrè¦>÷PUè]’‚N7½ÌKñ0““Ÿim%›×;»`Á•~û>âÈq' ¦%9A³cVÕ>½÷(.¾øÔS¨è"î‰jÚ4ƒ§'÷é§Óh§q³¢¨ÍÍü-[ôAAõÿX}®)_Þ Ÿ3NA£ö0/ùšåËcÖ¬Ñ íIIø~ñâøpJ8Ô~²ñÏBI¡ügÕª-- ÉìÿàrÀzÒú·ö¾…§Žü½GCôD› ùñÇIÓ§ÇßÅÆâ~xÂÂ=y’»y³ø7äãÇ{~ûú Ó:„K—¬{pJœÞ`t+!=^ñöÛ~_~ÉjmÅý3`ëØ÷ÔûÕ/ º§Þ[ ¸Pð¤÷#rs‘Þ#¬ÀÀ篌WQ©/åäDËå(ApF¸V;}Çú•+­ß|õ~RØ^hùjWÛ.”>Î!ùÀ¼'tíš5‘o½EÕGÜÓ¿÷ÉÍEz¢ÆuG×}yòK-]ûŸ˜˜ÓÑÑO^¸°´ªŠh›íâƒáù††Ο¯MMm_½º§ó~føÍQÌox ¥Òm`º™KR¿z5TýÊõë>>èiªF3ú×_)r9Ò{Ä`y÷ø»GD¦5©F–g{zNúHeå›'Oî;6ÏÍ %‘ó2««ë/ååM|þ{iicFŽì½SÎÜÑsGúŒ„/4bß©$"Љ1˜}}¤úÄÔûñ_- Ë[°¥b°Xô˜W¿¸éEÉÐÝãëûÐåËiÞÞ¢¢Ñ¢lÎF¢Jµ¨¦†¡Õn/0ÏÀsÇ1HìûÂû—}}ÔÂO@XRéÄÏ?oMI¹:cJ „ìž|sK¸ÐŽ?M‡þý?¦O·¬w‰Úùˆp­öýŠŠ•W¯æ{{¿˜X€V\ÀŸ—›êׯ^ž-.ñÝw%Ï>{=ÈëBÃq¥^™áŸÁ¥rQÊ δQÓF˜V¡zþïσ;æè팈°¬wù~ffþ¨Q0ŒÆócYì—ÖÕE45Œ‰Ù.$‘PšàYò-ª_¹~}ØçŸg0=7üÂÔéâçÕÔ\~ã.OÏC•?ì•ì…Ÿ—+Êßõ&JÄ `Pûs¡ÆCá?ð`m-þsII'üüðcŠD•j^C{ÂI>DáãSºvmøÉ“¥,Çõð„åY–íÝ+™<¹g°^“¦ÉòÕyõy”>ˆá ‘NÿOLL@h¨EøK£¢Î–±Ù(eˬ®®ûš›ù2YNHû!“üììl«#[7**JníÙú~˜xêÔïÅÅç}´ÝÃcPqüq«o666Öê¸Uf¬Ž~öìYë"¦§§[}Ò˜˜«ãNµj+‹ØüüÈŸ®^µª-*Š Õüá_Cÿz¾Ô$ökBÖ°`…’Ÿï×–o‡éùÚ‚C™Çã[÷ÁÈa¹&iµqååO]¸ ÷ñ)OH(¶%¡^{í5«ã2¶üÆÐ·‹ØÐAn^'Ô:¼¼¼,ŠFã—Ÿïsü¸ÞÍ­ñå—¯EE±xô^Ñkkk+?;*.Ù«au\x¹ƒ+” \>ÀepµF­æõ×%%%ÿü§èÙg…v´z\®•}ÉR©Ô!q!À!xܸq?زR¦ÑÍ­cïÞ6±¸wÞHéK¤K`Àƒë1ùÊ>qûùÖ–ó: g1=”——'''ð`ã„ åO>É/-M:ujbf¦?™l3õ,, jß}Ç9}ºùŵhŠ­sâªVs³²˜ÇމW®TZ X|Û1{bhÅÄÀM"‘Ýÿ?€¯zÍ_Í %ÐÐkü̼¼qû÷XM™=œ8ÔÂAœFò-z©ÖT[Pæë_zÉ=77øï·³»˜EEn[·ª'Mjýâ #šÀoñ-ÿþ“[B¿s!PêØ¬ôô²2ö¾}¦æ™3¯½òÊØ¹sQ² É¿Éö´í+ί€IÜI½?ïJIQÜr÷;–.U„…¡‡ê¥¿e‹É—zõU´§5ã@½€ž:©é½µ¸ªÕôÊJzQÝ<> *}ç»ïjýü`XeCg<‡’ÿLÆ33âMK²d¿}Ø‚ÅÝgÕÔxîÜéÁãµ?òˆm”‰Ù ×Õå¶w/µ°ð–|«Ð$’<BÌ¿ €àð-J«zú•+Ô ´©©êääöõëÑ~öHòïAgP?ßBÿ^ñÞ{î¹¹þ¬LKNŸŽ:ø±&öÜcǘûöIW­ê\±%ÓÙU­8vÌíÈ‘}½ÖsEƒîÍSéׯSËË¡ÌëGŽÔÆÆÊgÌP¯Z…ºðä%]))Ò¸8“'ƒÿþwùüùHø1RÇç9B?~Š}óîݨÌ#0ŽW~¾ß—_v.ZT¼uë≇êgÓrscwì'%}ì11¾æýS5·ŽV]¿ºšZRB¾~zóÚ¨(éüùZ$óHò‡ÞþàƒÂ©SÝ.]‚¯œ6M8s&jêwôª*îÁƒäšéOˆžx•|¦¨Õ5JÇŒ¡“oæLšDüßÿÂ@é_hx¼!<—›\õØùù÷»¹Ÿ6 ª¾šJuÆtcI¥¦—X̉¸uuÜk×à‡ÒÑ£ennÚÄDùäÉ–îy’|» ¿0=¾,MýºÐPñ´ièyÛšV˾x‘}Ä´™tÑ"ÔgÀ ùMùÏ<S릮¸ª¾ï¹sÞß|ÓüüóíIIÃzjf{ûÔ}û ökÃÂä¢À@ .ãñ44š„ÃõK@©¤TmTÇòb©®ƒ«dTVŽº|¹*-­Ú†±±Ðq§h4PÚ©j5³«‹!ÂËf451ΟW¥¥©üý•^^*’)ϧ«ÌÑ£ ƒÕóòHò‡†®”øâ–”¸ýþ»€S·ÖØ}k$|;„D¶·GÕÔ„ézH¼lÀ,%%–ÀIùÉ×ÅÏÞûëp8÷=@¿øê«ã¶oïHM=ýÀQ‡®?|q¥RŽD"hkc‹DT…‚ÝÐ@­©ùøYÞ›®xÌ 7F½,¯3/Чe0´tº–FÓšÌ4æE©MŸ÷j--+‹ÙmÚB0åøqí'ŸHzõlRµÚ›•r 9uÓ‡0 RQT*“ûÞÙéÒÒÂÊÌ„º®ŽÖyx@i×±Ù*@Ð2j”‚ËU¼ù§­.~¸µ ÆrÅòÞhÓK$ùØ@ _ïlßþyU X´$(ðP(FÖ×ÌËÓ²XÅ kÖ$Lš„’eb±À´Í˜A?~Ófå}Ó§OÖ3V„„$yyZ¸°w=À¤ý>>wüSóg˜$ÿߌâ'ýX„™%± HC…V(Ljm^¶œ"“Y¢PD"“Mïèèù‘ 7ª{Í[Öq87«l¶ŽÅÒš«°2róøù†˜˜†öv¿øøÛt½®)®Y$ä#ÉÇ̯ üÖ£UhU ‹C[Z"JK9ÍÍ5cÆü:gN£Ù¥vÎJ¡HòOÚÏØ/+Î^øÓ©¶Õ¯IBB†õt­ÚÖßDû¾|LxŸ²bsÄ=£ A <Æ}¬ÜwËý…WU¥¼û®)D§Ÿ}óÍ–Acª×jyƒYá;Ã#£¬­Ì@™ I>¶€bÿ6SÌ‹iXª»eHï­Rú˜ºº°¢"®‰‹;7qbå­-1'bb^…û‰’Šõÿ¦ÆüÞœ”ž¼Ð] H WòÙfÆfªË=ªÅ£ºG%˜öcny±êˆˆÊ矿O&«ŽoþaË3gDpLýwnJ¥e*$ù˜€¤V{œÿú—:>þÆW_iÝܼ÷ÞPýò÷õõ‘MM0ðQBÂv˜ÆPÅÈ`¥Túh4Á2{¾R© íðóC2À•ÉS«Ã¾ùê}õÒ¥ö?¡ŠÅž?ÿL¿zµõŇ|¯û4‹ÞCV44D{z¶P©Wi4'òøÃµÚ ¼§J(•òe2†J%rskts»ÁáüîãÓŽJg@½×úúÖÍŸoÿS³;;%cÆ G€@’o+?ÿ õ^-z55$5¨¶ÉûŸÿ”,]Ú´|ùpœ®’BQq8 óܘ.Í[§%“-R©ø"‘ˆÏ2 2¹ƒJ•“H°* qu­çªÏ%˺(ï ošˆ6¨sýÚÒâU_ƒÇ[8Øë©Óù«T~j5Û`€ÒÎÔë=”J†VË‹U †ˆÃ2™ ÆÑ  F­šJÕÒ´u¾uˆBZ¸þ¨p pGÈÁƒÐ¿wˆÞ›$¿¡gëì"ä;6õ‚ä»÷¿ž Ÿ>|‹ì¶¸º~ùq~þÁèèÞ*N¯Ñét:¨²°*ªR 4šÏ ÔðÛ”Øö¯wp”TªŠD‚oaÍ@I&+\]åæ·žDF"Íìì 6ϵ–ÉþM&_ær9ÃÍ[î`PÎYz=|Ë0˜Z-C§ƒ5‘§§šÃ±XJ J{ƒqI ’É}ôD”•ÔÐkLFQø‹‘è#pE@V£¬¬òå—rvºy5š¿Šp¬äggg[Ùê¸&++˺¸_›¹íCKĤÊ?)56—f½îíÝöÁC›Ro¼ñFOX®—nÙ=º{bð⿳Bïz¼Üü²ßú5PšÒêS÷æ·ßR4²ZMQ©ØðŸJE6/}E¾5Å…"¿•›—š›-áØ°°€^ë€ê™Ì›ÃòR›…\N§ëh4½ùoïëa™_–¹t}íòÜùç€Î`p‹f,²%¹jmØýÚ!yrXãÚòm?¤§§;Äj8$‘ÛÛÛ÷íÛg]Ü+Vl7ï›@ÎûMË=ztO˜g0è<<÷3uêT«Ïëkƒ·cK\6› >Æã’m±VÇ…z?цý©Á>]H_\X¸;!éû8“Û-†œ’’b l:·é¸î, ƒ:ñÁÝ“wß3¢èš(»Ôô„2ggŽMž5ˆSVVv§¥¹tt€ØXÆÞ½ Áf‹A=£-‚-“÷O6æmÖ?ßÁž÷qûùÖ–ó: ‡ ¨÷V¯ßþ,K̳sí¿ûmÑ`ÕÔ¸$%õ¼½'mmm¨¡¸C^ŽpÒ°ÿ|CC|SÓgãÇØeð¼D+± 5…jšN¹Ç¼ÞïÅ<Ó™LspgŠŒ<³o_ºŸ ØÃ”Ǧ+"n^§-5P;¸ªÕÿ`«CÝj‘´œ¬ÜãéÙvßÌ1|àAò_¯­ ‹ÿ‘’"ìÕ>¬,½´úç»])/Œ}€xÐbÿgá·[bÚtöàÿý)G/ºõÊ©W {Ííê‚øåc—£‡‚@’o%ïWT0tºF¶›ÞCÂa§[O›& ŽEyÀ,ì‹Éõõ³z jÚ¤÷fä è¡ ˆ«S_ý†Óö—oÄÆÚSï-PjkÕþhL;a‡¦«ËmÃÑsÏ9ö2èúW~odƒÝà±°¹è¹ ä[éß«(”÷GŒpÈÙ)YYZ´Â<aÜöî•®Z¥õósø•<µ¿`Ö~°èG0ér%z.$ùƒæõÚZ†Nç(½§ŠÅºaÞZ@س¨ˆ\_/µaªÛPAR«)·æ$ÓJKÑ£A ÉÏ74x(•ŸDG;ê("‘.4å».þÖ­âe˰p%:]¹b…%,›<=„q¾á{‹d²ø¶6{ŽÏ¿šÎšŸJþåå%]¨»1QÛ>9¸'OjÔXÙÔµþ¥—üÝÜô<žÐÙÖ`@ /ß¡—ÛØøDuõÖøxGé=äísoÿ Ìú”tñ»üïPB 0g%ÔjîæÍâ‡ÆÔU©CC»i4ôtHòŠ‹JE{ãïÃà ·Ymïù6= ò  ¹øYYÊ¿þUÿçÍ/Ž‘É$Éåèé äêöíú¿üe‡ãÀk Sèh¯(¾Â}ìWy“QB °æâ³¿ýV:s&Ö.LëáÆî!äRAKm­î¯uðe¨ÕÞüœÙø%òQ™§QB 0û ºøµŸ¥¬ = ’ü{ã"R_yE»zµÃ¯Ä@§,a#‡2-Éß·O޽Qñjúdã¥Ó‰zK zFâ#ö©;wêßxÀ…‹i{çŸ5kŒAë“O¢ „@8–.E׎K;j$5OÄ?1Ù(0òùXX{ç66œÝ°§cŸå}ýàœwÐSC ÉïRy¹kn®æ¥—0r=ÒØXÊ / ´úápöîýòÆ—0p4ûh§vµ|Î ºø&½7SÖuéAôÌŽÃ ö©k×j׬ÁÔ%¡Á·VªàiO˜~êwå­~7ì@§ÐWøß\Š'½‹Éª©AO ¼ü>®ïìYcJŠ!* SW¥ àïÚ06ñ %=V#©9*>úcÐ{¤d¡‘ŽÅÝè_šøÒ´–i #¹VÈ9|X™6K’|lAÙ¶M³aÖ®ªîÂÔ6“Ôj&í AüÜü¾šÿ ¶oWNš„ÙëŒõ5m´Ý%ã=Ê-)‘Æ¢}·Žüììl«#[7ßÌ=K/+óÖj÷þüóœÔF²ÌÀ@¥wå%Î%0|°éùJÀVÚ3fLaa¡uçe0åååV_¶CâÂkÞ¹s§uqy<ÞáÇ­Žëü|ϸ¶|Û_qÐê­Iäj3ýðÊ®]?“HXj6ÿÚÌm¦i4ï<õÔ?cc¯S(ýÄMIIÉÌÌ´î¼L&óäÉ“V_¶CâB£‘““c]\>Ÿoµ± ɺµéÑ`¡ÑhØ48ýI¾-VÃê¸ðÑÆÅÅÝó°„ÌÌ‚§ŸŽóôÄH ÒÝ.ê.ËÛ*¯ê Ê@S ÁÚ.F˜•“““­‹{åʇĽ~ý:4XÖÅ­¨¨HKK³.nqq±Õy¡á‹ÛÏ·¶œ×Q`Ðh°¤RC` ï¸q¾K+@p{‰ “F[WUõqRR5•ÚOÜÈÈHëNÚÔÔc]ÜÒÒR‡Ä­««ˆ(ôu¿V+¡P8qâDëâæææ:ÄàØRްհߡêØQ½ã¼úü{AïÍ—ºëy¼.Ìè½  øÿ&ÐÃ#e*O²´†ËEE„cñª¯—blÄO?üd®ü#?k|¼—GlIþ±ÆcPïaàƒúþV¾°“{ÒÏ×Í¿NºN´d 3¤ízÍøñ(!Ž…ÛØ(1‰.ª¾œDzõâÅcñQ?xy“ô$ôv[“ôØdöe¸¬¨3{_þɸtsÇëÇ'êO‡FñÄ⪪P6B  ³½]álëdüêî¾|Aô‚ôœC1‡"صè!"çågøgÈõò&MÓß ±’4*ö“ïHjê’ƒ›ÜÝ‹=DáëÛÕÇÃ:ÀÚ݇ûŒëâÒÓï"óóëº5ìÉryT•êÿÙ;°¨®´_¦÷™†6ô. "M-jcŒ)dcb¢ëf¿ÓMVw£›5ÍM⦘²kÚ&11ö «ÄRHïu†é ¾33JŒ Óîû{î3Ï™¹÷̽÷´ÿyOEŸÂîn6…BV*ɦËÐ'I*%‹Å¤ÊJUjªžËÕ±XèP ¨® tsSp¹(®Ç;€ƒNúÍ c‘Y8Ì/ö(ùôÖÖ^ÔÈ9ú9_Œ ó¥æî‹틊š"‡tv.=sÆõàAí´iòÐP¹¯¯ŠÇSq¹ªkÚ!5zMƒ´ÁææÁÇ[“ÔjN}½ÂÛ[cõ&MªTÊlkë ÔÛz‹•VUÕ^%` |y¾ ~ø„|uOK¤ dƉ%ÿ7­"²6¹mÊ“ç H‚$vÒP…`è³U¥¢Ý(½AA„?ÿÙ£¢¢7 àÜܹ#ýyªEY¼úÞH~##‘ùŽnÝyqsn”Õ÷˜ýýE.ª"0z{É*•°¹™ÑÑa®èø|)—KnjRúûkx<µ›Û(E"—ÎÝ3cϾš}¾LßEa‹@òíCòóò/¾èpA)=«}3­Ðgþ¥ŒÏ7NÞ‹ŠòwsKô÷g·µ±ZZÜ ¨Íͤž½@ ñóÓ³XO ö`èúïÝ6…¹E ՙЭQ‰näSOKJ S§VoÛ¦°âàÞko]ñöÛ›ö¡n>¸ù³¶ÏãøÒã±þ±€?j33¹ĺº†çžSàf)Lš?:ÆëË(·6j@È­Q´*F>‹*ÚêêH//Fc£ë¹sŒcYª UED J2Š®+#="ÑÛübw’âOeéë¶78°á‡ë«Èä~t`׬´O—JÑÑÓߺ§çƒ+U„ö“óò›ˆ2©¯Ï7==è3¥¼}®Žg4˜–ê$ôõM}uè3ôùç žžÃÞ7¼¯béú$#ù%ŠÅC·ŽÜ¸ÑÀçëÝÜ®<›Iþ l¶gg'»Þ¸´ˆÅ20™ †t::tnn·jûÁI‹Yï§kOƒäã“._ßÂçž 9v¬|Ö, ‚*­B!?>C‡YÕÔjfGU"A•þÏ?S««Q @6}ºÒÏÏÚ&Aò‡ã¾/ææ}Þ3ú|t¹Î¨ëÔ˜eÅ “¯»Ì¼­éjŸQ£1Vºº‚ï»ÏüKó3ÏÈG‰ókqq”¥ÛùŒä—ÕÔ°zõ•[oØ€nM2uÅ™sšñ Uªöººà@ュ’¨PP:; r9±¿Ÿ •’++‰ÅņØX]DÄz}oo­§'ªhù|§O…Ïâ'Ð TÆJ}¸G8à•:”‰º4 CÇÕJ·¡ÑÒ"8yR´c²šdÉÉýø”û’|dâÇ|û-³´4°¬¬~Ê2R£³t7qÀ ­üÊJÀ륎ÍvMK#´´Ïž¥>ÿü @`X´HŸ‘1褫ªØ—äW.Z4•ì……Õ[¶àÄÄFe0qÆ£Ãå¾ûˆä]»(==ºuëiá<’Ÿ““c±g‹ýòx¼ÖÖÖáC¼·7¸³s¤³6ä‹/¾€ü`·Üa+˜ ~òÉKþþçx¼“lö¸þá‘GÙ¿¿ewçr¹£ç…‰œ…ŒŒ ›„¶M ‰D2ÒY)“éÒÔ$a0ì*YN$ ë=ÊÙ{µÚ•YY"…â@ð)‹ÕäâríÙÿû¿ÿ«ªª²ì¾ááá6ÉG¤‰”û5O<öU*e;6ÒY–½¦ãŽiÓÝÜ’ººîml|¸¡!?"⼇G˘çá¤Zº DYYÙèya”³(ëÚJ¹­Ÿñ'âwÏž=‰#7þ!©çÕ׳ u?œ‘‡Ž C ˜¥Ñ¬‹÷67õñù‚Ëm'†.°Xªär¹Mò‘ÝÍË7P©DÓ4`Hà[D¢½"Q„\>«¹ùé£Góüý ,]’p´|>÷ða`2ø…JýÅÛ;ÆÃã]]wuòòú—Ãv!Ùä›ç“Ôjœ¯‘LJ«22‹Œ\ÔÖv{iéív!8øˆ¥û…vŽÚÛ› ƒöɤ”DZïí,þG;;çˆÅï9fabkìkBC©}}z¡0qÌ£#¡¯oîåËee9S¦€ð;MÁ¬«»n¥¸õ¿Hô Bñ\Cƒ$7WíXÖ)ÁŸIëëKíí…´ÜB \]_Ÿ1ãó””©--ÏÎ^déŽà€Ý¢LL¤57C8Và &ó1Óº ‘›7s@ò'–uuI ’Åþ-¹¹ ¦í‹ç@Á>u °í‰ôô¦õëE»vùfgƒäO@ò}}55¤€IþS+.\xòÒ%ß«[Ž-ùAAäÊJ Tã+" ¨Øº•ÚÙ¹};Õ6z°GÉW…æ=`òÈqwaþü7·§…v~ç@~×]ìK— k¢§Ñj³²úÒÓÃ^{Íþù ö‚šÐPfG$&`²Ù+½¹páÔ––Ô/¾ Ž¼Ò àô'$@Û>`ÚÓÒšÖ¯ܺ•WQ’?ndÓ§s m° -4Úë3fôDDp￟R\ â¸(‚‚P½ÖÞAXi@@õ¶m>Ÿ}æQX’?NÉ sÍÍ…4Xª„„þÝ»;w2~øBÃqé[¾Ü ŠÀV•N¡ðòK/y~óݪ¾J>ª.Q««b4à4è}}¥»vÛÚ8¯½æ¢RA€8¤ä'%±~üñ¶BÃåÚ³êì7ë.]Ê+-…X“A:]öÄúÈHîúõеïˆh4iVßq&MN¬úvدo¿’ßœ,°tg3˜ÊåËÕ=Æ~úiRK „†ý£Ö©Û¥¿õß‹33ÁÐl®úu7Švì°·qèö+ù ¡PïææX Σ"))Ê'Ÿdýå/ úvNy{yÜq™G3?½ðé¡/Y·ÎÆd¶–°úÍ›ƒÞzË®z¨ ödwÞé »c6B«Ø´‰³f ¨¾=s¬ö˜Ù±£~GŸòŠeß—”D»t‰YWáØi@@ϲeA»vä Id$µ¡ }ÀVèBCåÿ;²õ¡_ßnñf]Ù$)–K#Ó† ýŽ'ŸîÜI„¥›Òž–fàrGY‘W©Q‚äÿFëêÕÞ_ é°¡­oîׇ1üöɲèe¯†¿úlà³oÍykHò1Ó}ejªŒlMÝ#¸?>¬íšSžÃü;3唋5ñ(ùR•tÏ¥=ÛÏl¯èª2ôQÉžW6œuJŠvéRö[oAPØ!HæWÆ®|dÆ#^\¯ëNu-[ÆÈËsËχPlˆžF3ï¾s㩼ˆ>Ï*În?¶Ý:CÊÉɱسÅ~ÃÃÃårù¿WùÝ GeQå[IoQITä®Y¸0òý÷›ýýuTã×;î¸Ãâþé§Ÿ ý91‰ßöööO?ýt” þZSÓ“›»ÓÇçÆSO=õÔèya"gG!##Ã&ál“BÃÓÓ³©©i¼¾z³²â·mÛ:þE: àFÊËË-öÛßß?ö‹÷ˆÅÝwÝõ ‡cþúþûЯ½òz~\YÃâ|DšH©a±_ô¸ÃúÍîÌÆL3ÊuåÓ§ó9ü+' †”’ì™góí·ßöòò‚” ÜrFOW_º»¿xâÄ*ÿw÷ñæ…QÎŽ”ì›ÙÙÙiiix4>±rå®ùó[h4HäÀ­…sUÂoÊßX¬/~ý5U(,%‘†òÂ÷ÁßïüßN·qáÆßôn2ó‘}5ìg¥d%3“‘ãëy_ÿîýW­Âjk± Ø0A¤$Òç))wæåÁf»Ž…!.îŒHôÄ/¿põz ÀV´G}|þØÕuí¾ÿúÿ^[ùÚ¸ô~"Ø—ä£÷?óÌÅ ŠU©«n¨#ý {ñElü-{p«¨d±NÇÇ?PR2ÒJÒÊão±ð±§gyPІ³gAõò—+’Éfi46|{±Ï 2†ù•ÏÇÞ}Û¸‘o0@ÒlÅ^‘ˆ¦Ñ,jk»ñÔ¡‹‡˜g¢#§š£ìŽ=!!u^^Hõ¡‘°¡¡ÈËk•X ’?6¦OÇV¯þkYTÕò߸¸ù.ܘ—\bv¼ûË»Jö©úeþþOüò ¨>`+ö±XáIŒí$Œà`vûíUÁºÂBP}ÀVT²Xáá÷VW_÷ûÝw›áüp%ûd¯H”3eÊÓGftwCh61ôO …°ÝÒ^‡ ²>>½l6t˶4ôCC#«ª®3ßZñÖ¦ÈM;âwl\¸‚Èn9âíýá¼y‹ŠŠ²jjP .jk£°&ðxq]]dõè1È>ŠŒ„n9À†HI¤ÓññwWU]û£È]ôÚÊמYúŒÕß–QÉbmÏÌuu½øí·ËöïéóÏ#†[&&ÉЯâñ V0ôÔÖBP8ÝÝÏ_¸ZT4ôK…@ÁXt:©¯³ÅÐ}’C\«kÇÂ…æç‡uwWxzôö6s¹¨*I °Ž¡ÿJa¡o8 Ö³SªÚŒ=/áÞW"ˆ«×ÏkkK+,ìðö>˜3cF„\Žì{¤÷¨$à¬I_b¢ðÜ9ìöÛAòÇG öjzúú²²»öíC_ã0Ly÷ÝÃ.‰ ·ÜЯŸÓÒ¢ƒ°°?>ÍùôÏþŒïÎx—o0ÜÝÔ„ÄÅ×› ­¼[ÉbU†„@XÖ§{êTá™3Ö—|‚„ª¼» }I¥žëp800¾¬ ÂÁÙS¶Çìø¢p×……¾½½Hì?ŠŒ„•ö{@"a'ObJk/Ö騒Ä>«¦æ•ƒ©z½ÂÏý¢ OúúBz¬Ò>>Ÿë@Û³}g›™×÷¦LÙ9mˆ=`_Ì™ƒY}ܾÃ4ì7uKU‘»hHì—54 k¨¥Ž*—W³XR Ò`5.§ž9ƒeeAPØ.*ÕË=ÂØž}ÚÝ‹<öèÃÂæ›€Ý‘’‚UWW•É¿Žoò¾¹ïø}˜y‡=ƒYöHì §LyeÉ’!GƒXŸ3‹ss t „†=@,*¢¼ñ†aîÜ;_9:H§C€vJL ¶}»qŸXüëøçÙ^qü²ýPaOChèµcpÀ† º¦".Ž[QaåÚ:0¬qOùðCB~¾vóf̤ì‘»tÉÊ÷tŒ¾ü9¢9WrÒ{S¦ÀÀ®èŽÆ.^„p°±Þ‹Å´5k9Õ—_:ŠÞßa_cئkJǰetîÀ°1,ÙêOeá}çcØR óƒ”8¦M³òŽðŽ!ù/ѦØü¡ï3/mν-u€Ñ…egC8ØbUmŠݺuÚGq”gFšú […a¯™TöŠjÎŰ)vö³ö †=ŽaŸZ÷©NaÝUSR0l:†Ý‰q<cõõV­Û-øo&Ç˶Ò`¯ô˜’èÖ½éà5sS­Zj¸ØW¹ åÛlþd“Iì¯åDZg¯.$Vñ?,"ׯOhž@¦Â0…É>妣Ã1¬êÚ2ù ZÀð[ ûŠ„±&]6†-±f浸Ô@ÙÞb¿üãƒQíæf„vu-úöÛ¢¹ss##‡~|öÙgm7Ï<óLhh¨e~ÝÜÜ’’’,ó{þüy‹ýæää$&&Zæ÷µ×^‰D–ùݶm®òíO?ý´ ¶V¢NI¹ñ¬@ èééÉoYYYFFN  …Â2¿‹/ ·,î+—/ÓuºDDˆ‰Ä‘üîÝk{aóæÍ‘×”]×AÕj—¾ò Édäíµú  :yÝK­/‹>bèÏý·îxÇT5Ø„rãx3¾Å‰ªmÃï;‘ÃðÜsÚçž3)¿ÒE¥B1gtÈå..2™Ks3áòe¬­m`ö쨨CÔ®»ªŒ'Q’6n°à¾÷ÝwÞ ÔÔTJq1õôiÙOŒË/Ê‹¯ýßK¯¨ˆ*(8²reµ‡‡CDa@GGDI‰ÌÍ-ïªÊJt’]O=¹¥¥Æ¼cå§â”—£Ïþèèqùªë©“°%^˜#CM|, ½'ÕÔ`ÃI>0Ið †ç*+UdòóãLÞv‚†Bi™7ÝÑñëìÙ­¦eƒXAoú½Ù©é a…4‰Âo¿Óx¥µvË(CU«E‹Œ’Ÿpe¾>’¼ ª¡©‰P_¿ôü¯ùõÑ­$½¯(µS&ëg³!}Ž…€ÐØhÍ;Ú£ä3tºEyy‰äûåËÅL¦CÄœ«\>Ë–¡–“²¨¨J¬c‹ÌØC¯ˆÿwe²à÷’¿iSÏÚµV{ªçÎyïÚ…ìgŸmsgNMκ‹ë0O¬c°c¡n!d˱ ‹ˆ }ü1öÐCVÓû-%%&ó•°0Ç} ·úú’E‹Z¯ÙÄ›áŽ+_lÔü£OO㕨N`7–\¸0 ÛRûì³|qÿÔvôEG×%&ÖABŸO4Yƒø•|¤÷w?®¡Ó?[¾ÜbÎõšMTCÕ%5 ÕDê ‰E•WÞnÛ6ߣGÇõÏ^r9‘Ųì©\._6;Ø;v›fƒx¼.×Àá °XKçî®åóu<žöš% Š:®ì0VèR˜á’A„ñ’cȺ<¡½=0ÜjzßâêúÀ@Ç} ªVËhllu¢mÀ~##±¹sëê"NžŒÙ¿¿jÁ‚ª‘»6sqaÍrþ$Ÿ¯P,ûùç–  c±±Žs B¡xÎþɓڠ £=ÖÁãõ(/cÒ7Ñ© BÍ/Á4¦Ó¬[×ýÔSãúçÂüüxK[ö/¿ìýÝwÈ¡zôÑö5kŒ¿¨TDó¡T”JZ}=;/zþ¼ñÙ’’ÔaajÿN q|†E F€ÞCõcbˆb±Ö{¶ŠÞ_Þósì aÞ--}ŽÙ%qS}Ÿ¶¶©GŽø–”ä/^ Mý#1àå…Še%éýŠ~ø5!!×1k…MÑÑROÏÓ©©j } c„m"lêÒuE2" "ü¸KïF+OIçŠ eÀÒEN.]:éRtß¾¤$ƒùOFX ¨VÓÚÚhÍͮǎýùüùÈ9ËÎ÷7]SäTÈ’ã|RSHþdó\e%²ï].Ž.G)­ÞÞ­>^QqÛŽ…? íüÃú‹R‰ñxø’|G×{„W]] 2”MzoÆŸæ³[>s¦Mžªwl-¨B  B‡ØÔ}UWÇߺ5¦å@SxxAhhŸ9óæaˆjë“AQ}‘Ò]‰ Ç磯ÝžoF; umn®s¯¹ãR)~òÉ”={X¥qq˜¯—|WW•Êj·³ Éw½7ÖÙ++;L#]¤ý;CC£fÍšÞÞ>7?.†ý/1„ÿ&’ïîN­ª‚p¸å¼úÓ«ÿ¸ül ¶¼^ÊSè_:Õ¡_G¬ïlÞYm¨Þ%ð îÂC öðù?¯_Ÿ¹Ç¸1¨þõ’ÏåºX:sÕl¿úC§Cz_ãÐz/”Hä~~ךøN€œLΉv.\xfÚ´Ûsr>wŽ¥ÓA ëÏ·Á*­Ê¨÷&.óÛÞ2ÿÞ!8+9‹ô9Öûvö¸hp %oåÊÀœœÀº:HÕ¿“|‡ TâEò‘Þß{àÒ{‡¯w==?§]]:ßËëõåËû8œ_}•ØÞ¹tx+ßêómðB_ã·ÆìnÓ;ºÞ߈ˆÓ!±ýlö™¬¬øÏ?§jµæÖŽ3=g*¤xNÞ.*©¨ˆ\P`µ¶}7ì/ÊËëçñ]ï‚ÎÎOOçNû¢¢J|}ï9~œ‘céÂ|Î\[·ú|œðú¢-wüµüœ¤§R⯓.HWTšþª‡$¾Šp|cïáó.LÊÎ>¾x¾¹wýøÜÀsqn8míçlÞLܳUcYÂx×às+_©¹Òˆq[q1G"9’šê1Çknîçpœ>Öq8Ÿ/Z4³ `AM HјçÛ@8ÜZ¸Ÿýg‘ï’ÓN2B ,ñZ²MœD Ãal^LIq­©a´Õ˜õѪnÅmÚ&}ö™ÙA´ÖVœÖ–üC1ÿÎÜç¹Ïµ³$òôéý (ɼ¤«vP›ÛŸû“ä§ËìškͲ°-túûK—Æ–”@ ÿ0†¾y¾ pë òóµV\³Ò:0%9—‹Ï8­Z° #¯tmžùk; ·É[ûÊ+WK—Z©’aeû~ÉAã¦A.ùûÜW®s”õtGâ¼ìüŠ/ãpö.£à#™ÊÉäïæÍ{ðÇ›V®ì„Fìk%ߺómœ˜”5{ö8__ ³³S–œŒÏh­ŠŒ ÿùç Ì{çðçpÉ\>¿SdO<ÁQ« "‘ÒZ«ÍZÕÊgPÉÌ+©\I u”ýrFA5ð[ù.×Ëñ“Rë8œœ9sVåä€,ýNò­;߯é!ýµ!+kÀW7"ËdZ ·1Û:cFØåú VžõþJ¡A£é¬¸"“µö?]õé:Ú¼?õ C\—9Al%0‚Æ%¥žWÄóÈ<\¥T󾌦&ôYC¬ù7åßGÉGU.`ã·bUqÏ“î©J–H4Tü®mÙîsá$rëcmÉcÿúIáÕ·éÂt‚àC2ÿ”ÇS'z×dõÆã0õHI™YP€dþ[â·­Xk¡Ka%±×v:}ù·JwíÒmÝê¬ÓÈÕÕ[ù=¦u½82¤sBcã ;¸­>bÿå—±íÛ[,]4Þ¡¸PüÄj.GâÔq8R/®»ò-‚væ õùçÏ=G).†Ð˜¨‰_dÜÎQï¤ëÑRµZ]h(Σ¸/$„ßÝ IÝ¥§gÀŠ ›ZWò¿ù ·Õ&ГK"Áà ½a¹¾  r¥a¥æ?aˆÀmÖelÝjÌÀ••Œ;¡ ›hMú7´Ï>ë¬oGÕht<Σ¸×Çdz¾’:¡½}ÀŠMY¤œ ŒÀúè£Æ~±«\~çûïïûÓŸú>úèƒ>p¸ˆáóù‰dø@‹{”Ê‘Î"ÂÃÃë-MÜû‰DšàË–i°….6–UQ±Ökö Á <çÛ¼¼¼E2™y¾©B§C_¯;;’G.—kq̰Qíy"…ÆÇ|Ók¦×Ö+ß9r«nj+ètzCCÃ0³¯O‰aÞÂËËk"¯l±_*•šŸŸo™ß)S¦ŒCò½¼<««‰Ž¿œ¢eÐh´‹/’5št…¢à×_­¿¤‰”Ó§OûÅÁ{öô®YìÈ&~LL̰¿3ôž6;ª¡oq8£¨µ‰ßï¾û.))i,Wêx žNïÛÅÎJjjªêóÏIO?=àã3ðÚk©¿·áRG^oª¬¬,ÃÑ2ÅD8v Km&üøcõ£Æ:Å ÃnÝÝÔÒÒ‘Ê<Fíéíu=v, ÇåFZZ¡¥…šŠV˃VjØç64°Ožì˜5Ë)cŽ,ëp<øVE³ÖÒQöŒ.4T»b…:+Ë€û6Û‰ÀkjÒ»ºJœzEg¶DB–H( ž#ZïæF:|ç©Ý¥»{кŅ•$ßóðáÎGÑ;Ѩ½ßUW++µx–üÊ™3µäÊ¥¿€Á€p˜ÞgÎtÌ™ãÄ/XVóôÓ´sçÒÞz çq­_¼ÙúxBgç@”U´†ä#ŸÚÐÐ>þ¶ ‡UÕõ8ϺڔJK È•‹T:ÈdB8X Y£áææv9ò>Ú7…ù²ÙAÏËsƒ!ëø†PY9(:›äMüU«œ¸Òññ¾€”ÞLJbZ“ï’ß×ÛèMŠ izºsw“õ_Ýe™ ¼ÎôA°Î#–• Þyφ¾K}ý@` SI>³£™ø]ññàÄV~P©£ÂÁ¥§gö-¢IÚÔ¥èr/(hKIqî7½œ˜X½e‹66öôæÍ¸íD2Ï»÷^—¦&ÊçŸs~?5GÅ…JåRRbåõ¤'}[á±c=Ë–9q´öñº#Öo’/±ݲò[§awéî/ÄÆí©~ <³œþ}[ÃÃ}™L<›ø¿Ë5x]ƒÐÔ40{¶µo:¹ µš}òdwB$kçéaäe ðSgÇLkîBz½Æ¬÷FÉÑð<ù?èÝÜúß}9 sæô­\‰Sɯ¯·òؽI—|÷‚Ùœ9Î:PÿJµF«%â~¿T˜ocÌK*Õ€—”æã…J¢f0®L2aDãá•Qµ†,ã<Þû–-Ó>ø`÷¶m¨ôÀi‰qþüÀÔ©N%ù®¹¹=NºJ¶––鯿Î8y2ù?ÿÁ»¡óyz±x $$Ü6NÛ¸9`ów3çùÝŽ‡÷5wáã|^¾1ËH$¸í#k4„S§¬¾þÄ$J>U*¥VWKœ8ÚD.ëêƒ÷í·8Ÿo3 ðÝÚAìî¸:\*73 óÎ\™Î /¨ bö÷ã<ÞI‡ãÖĘ:ò­ß8‰’Ï+-í[ºÔÉó­@`và|¾Qò9œK>©¦FV¾¥Ð¥R½@€ŸŽ|‹EÆ·•OP«p<“‹_]mÈÌ´A°OÆŸJURµ^Í.)é‹sîh«NJj[·é}ц x^€÷ÕW”o¾ñxì1J[~‹°æfƒ»;ˆ·Å’¯ÁS‰ÒÃÙׇë*²D¢·úà5ûÁ#;Û`‹í·^ò³«³çþoîúÿ­­èÍuîV}ÌÔ'×”¤ ê²îÜJ»É<ëʼn©¬Œƒã©z¤Ü\=Ž“ÁD%_"QYw2ÛÒïëËÁ÷‚•”¦&mt4>ß}†Ébcm2»çK>2î7UmBŽ]ùG‘¸Ø©>I*ÅsÖ½vΛÏ@ J$^^0CÏò “J¥ÇÓ*F}žž\Ó0 üÆxW—O•¼k™ƒa6êԸŒO#ѦR®Ì:ðb†AA†ônn=†…©Ÿx¢oùrœJ~S“a<{I×Ájn&â©o»×ÝŽoɧ?¯uêýG"Ã"1¬=<Ü65­[þ›6®=ØPº ü.<ÄL±E(cb83fô=ðÀ€S¯Á0 ”’½ò°»{7÷ ãj<Wׯädœ¼µ*(È­»»—ã?jµ®¶ìC›oÃÛÕWïþ–oŽ+É@«¢S¬×:xëûòxë׿xDCñ ÅCüÁÛ+) ÇSluç“'uN½ÿÛäaÜ=ï‹+«ï ÎÃÏ‹‹§Lñ®¨Ài¹¥%ë6Ù=g²’L>WwWï~†}sÕ[™+Ø)˜óþœ¢ú"G•|Ì´Î.úÔãÆàÓñùdüŽÜJ>«¿ŸÐÞc÷,Ì>Tª:ãÊê{òÐPü¼x[d$¿¬ Ÿ‘.9Ÿý#¡Öì¾Ô~ ?/þ!†ucØW¿nþßfôyAyáSoXÉ8ÉÉɱØó±cdžý]Ô×çC§tÖQ«äbñ©S§†=c0´?~‰ÇÉï’%K&Î6ñÛÛÛ{ôèѱ_ÿxaááÂÇ!¸ãŽ;,ö+‹% e#ße£–ìÇQÆU¥´2IÅÅÅ7þØ4þíZ­\ 8êé©î圉Q.øæìÙ“ƒƒ5ʧ֯_ŸmÙ}©TªM &Ærå¶ûüVy4ºŒI¢°xû/Û1~7oÞ<^/w>|bƌ͊£üü|…Naþ}P7ˆ¾Z!ŽH)5bbb†ýÝ·¦Æ=ÒYÇ%t$¤¾ÞO(TúûOF錢Ö&~«ªª¦y<U*ÕffNwðñk^–®ïVYÉ_µj” åÔDâÈVLäccc‡ý]©Ñ Ðé቉NVh ›¨äd¹Š¤rÓ¸ULºÐÅeï /--Ͳ›"ñ°I¡ñÍ7ßß¼ íêà>ÊZP­«¾L_ÌÓQã7r<ÝyuuW×ÁôôÈ«ùèûàïwþo'ÎÛ¸p#ŸÃ·Bœ”Ís½½CËÒá™›ßkgÒz{5ξÃHpõzîٳ؛obÀÐÓé$|¬ÞØMïÞËÝ‹Ñúè™^1+.\Ø‹³ë‰/–ÅÆ2]˜±”X\½xÌþý¿m`„oÄ¿þð/k>äôå“U*žºue\.¿½Ïå5U"Ñâu¹ØÞ^E\†§9å“%ùJ%Þ´ze…ÊrRù)w’ŠNOÀÓ2||…BP[›„·^Q¡ðòjõ¶ñô„[/ùÆí×_Ùx’À.€ÕÓƒçòšÒÓ£ÁëZ³±mmݶX8Óù$ŸÞч7uÓ_ÙHF8(¤h‚ƒSñѳóó‹æÎÅQ¤ÕNùúëKóæÙüIn½äÏüäîÁƒÂ>š6žÁ_M‹ÅjnÆsyͨ©Qâr¼:W¯¨¯ï‚éyFåæF”Éðð¦"¹hYÿ²yŠyó$óH¤3( EÈåxxwß¾>AsóEüí>—›Ûš‘ÑÃçÛüIn±ä#Ÿ}øð•Ò7kK©)­««+>2íð’_P ÀåÚ™)]] :ï¨tË$ŸË¥ÕÔàäe½•Þ!²–Ž…ÜRét|ü¿þЇ¿íĉÂÔT%™Œ«´-‹}rrŠÒÓíáan±äk©TÉÕá â)Sð©’À@^7‘£J¥¿F0>«ú.»:[­WãêÝgÔÖæ]©!î¿qàŽ„ áãU›ô—ÛUì‰Üúúœ¾G?±®NC§ã°?qß¾²ûîÓ 7ÓúÜúûgz(Ãä¾¾å³fá'RÛ¼JÂ𸭥ºâ¨æ‚fãüãmضù¡óqòâr9]¥*pu57S®ýríÞ.ãHìFIãk+_/??$ùÈÜÇỉ‹»½´´À> ÁÉ€¯P$>üåêÕx‹Ù˜¢"-‹Ue7}“2b¿? @ƒ³Õš¼½…EE.Ñ^.,ÀZÍîNe'~^|Amm~DÄo¶šIïUâ*Ðo ¹á¦mÿ:rÜÝû8œ,ç}ýe?ÿ|vñb1“‰«hˆÅa?þ˜¿x±ý<Ò¤H¾ŽN'ãcŠí},–ÖÕU(‘à°´Š<^°Æý!ä˜J™šî—Ž“·öU«êë_3åæëy_›žõgÐo è aãxs¹Ï£££ëꜲyÿîS§º½½ñÖ¤OÕjSöì)|øá~{2€'e)$ùtüm.×å×ÚÚ1ò²»N ¯¢B™°.iý²•®tW /+,®¯/œ2EJú-­J]u[ÌmÈ1®U´€ß¬|OO&^›Ê0Ó8¾ïgÌXqáBufæµéÊѹ­¸˜ªRí=oš”ÝSogɱòi42>VÕäv¸¶}m¾,¿.4Ô¿´oÉÚ­  gÎä²…øÑ{dâGVUí¿aÁA$ö ÷–—Tª:$„×Ô„Û(pu͈Øpö,W¯wŽ7J¬« *-ÝgóÑ­LLQ³³³ÈþgLŠäki4>VÕ8#;S¨/DŽÝòÝeî,ŠL†«¶}’ZÍ>y²?0oùùF¸%ôÌœ‰Ûî|3{E¢v`]a¡sè}|^Þ÷Ë—ãmVžO[[Ø?æ­\i'£ô']ò “mè„ß­+Ü\[‹Ÿ”-üå—¾¥Kñ³Kòè&>0qzƒƒØÎ9ø(2RM¥Æ~÷‹#ˆº­¸Ø¬÷x²Ç‘Éf~ðÁ¹uëúír ûdI>Y,¦à` ù8fÜbêâxRüÓܧYDVyd¤¿STÏÇhâ ¾ù¦=3o%òÝUU§ããÁÄŸ ú=<Œ…fWÎÃaç´iz&“úÂ Ž¨ú ŽRÿÕK¢cXáƒ7½§jµ³?ù¤ì¾ûl¾–¾U%¡ bâ`s9$ówðîXë¾6Œaœ‘ßÇbɅ©—/ã!q»ÈæÌÑàluB_ŸWg'Þ¶>³& z]¸áP¶x±!-¶f‹C …öíë›’ÿÙ“E‡¨]?©Óãh ÒûÌ={Zg̨²ã¸'Kò•B!— i•$%M9y&¾ç§Ÿ¶,[†·ø]qᑸ8¤É£+*Jpä„BwÏ=ºuëh+Vd¿’»›š–ñEIÈo»Li5ø‰¯´ì ¸˜’bÏ9Y’ßïçÇÇå0œ¡úáξ5–ï‘#=«VáÍÄG%Z»§g^÷ ´*.WšžîS\ AЧ§«¿ÿžpþ<õÕWíÚܯ¬ÄþøGßÞÞ/W¯V{ÄßNºý–IÌ !áe¹ÿý¯ŽÉ_³e‹!3™û”O?µ;áojÂ^z {ùelÍšÓ¦™;ïgSgï`îXD[DvÁÅXýY"½ÿeÉûTRÎÆÇJFž¦ ‘b/_–8ÑŒµ7Þxcì`gíÚû®~}çwŠ-µZ÷ïßo™ßŽŽŽª* ýç?ÿ9Ò©œ––‚Ö®µ·8ŠŽŽ¶Øï<0úówï®\·.,*jØ}FÏG9; 6 牚1Œêm÷ô `³yeeí¡¡·äesl4 à§Ÿ~²Øonnîu¿ˆÙ±ãöçŸ/tuýÅÊyæ[HHÈÛo¿mÙ}kÆÜ:û¸Z½\"¡ ìws{)ýþP^^îpûöíÛ-ö›œœLÖh¢÷ìѳÙe«VyY1YZì—4‘Œ”˜˜8ÊYÝܹ³ù|þöM2&# û†Ýa{¯þkÙ_I¥ÒÔÔTËüîÝ»wúô鿇æêÓÕÕìêú‡Ç.C~Øg#III#rÝ¿ŸÆ[½zØ+êëëGÏG£œEY×VÊm1yà´´´±\FtwŸ²ukðïwa¸*F®KÌ}ö—ûµ—׃RéË]])”“|þ>«0Lc­———e7E’?z&ZªReÈdq]]-Î~?¿/Lf=Ç‘Ã9&&Æ2HïS~üKOÇ|¼Yb‚ßb¿“8ÑHǬ¬Ä§ä#¥_a»FòƒŠˆÞÞÇ®±½ð­¦†õÙgŸ~ŠÖÂ>FÊÍÕ§§Chü® „@Øáæ†$½‹z{W45!é-c³Ï3¿P©“tS¯¹*U¬B”^E&_äó7DD”â{ž*³¿?þñuë°U«è±'SòÄ}„ÙÓ&BÖä> kݯMç`–F³º¾þÕÐÐa­ g… VóÞ|³gǽ›è5Ñ=ú(5+Ëpøð ¡q-½á½27ÙzÙª¼½„Â&A¡x¢­m‹Bä¿Áh¢Pälv%‹5Ò?„Ëå«Ïž%«Õ§ââøú«ñž®Šúˆî`­~CÞ@HIoµªX ì?y ÇÒû¤÷ßo¹çž‡ÒûÉ•|µ—Q"¡ôõi]]ñ™,6b؇¶É)Þ%F¯®¡á³À@¼exÁ»ï*-R‡„`À¤¡Òªr*r˜TfzÄo6ý€¯¯!+‹üõ×ÚG úÍ”òSTT]\lªrj{3óŽL 0Ûâ^Z팞Qs3U©Ô0*:½ÃQQ(æuJ“i¾àüyj§qŸëÅ­­´… L•x†VËS(^jkã75Ñe²/‘óÉ:ô{]º7†«Šþèx´´Ä½óNùºu}±±W.LnËŒlÁö¥KbG몼UìEµi“ðV(úEPQò—ææ/p¶––«iàdþ–°2/üðÂîæÝÈñnç»dü&ðºûYCLM5ÀD‰«Ȇaݘ©ÍߘC™Ls_¾¯ZÍÒë=U*†N'0muÆ7•E”kM íèèárUd²’Béa0.õô´¸º^bòÉçÍ1Aï¯XVöùçE6tùú²ðù'Wòûãâ|þþwÜJ>b†ùcØýß~[’ sLûéýÇÕÕùü8kÙf”–2Žé°tä30v߬÷ˆKí—®=5H§kŸy†²u«z÷n(3¬VOÄ“P%< ¹G¿¸Å´ÿÅ-üP(iÇŽ!‡84tÛ̙מʭ­åH ÚZí[ÍÖ³== ØÍL;z”[WwzófÇQ,N®ä«M5MZ{»ÚÒá£NÀZ ‹KJŠß¶­pÓ&‡Sý½Þ'¾œ¿Hé#¥û 4x©ìSÚÚx›7w|úéÎ6 ²>t ý¹°çþqùÈxýx~C\œaî\ʇB@™Ay0üT¸ž­'É,/½¿ >åãÃ2ªFn·” \›\ Z~rýh‚F3ó“O”Bá¹GÕ:rçæ¤¹ì[¾œäH+¾{ãÎDE¹"Õ/Ù¸Qå8+Ö-U©fy^Nó2¶¶r[Ùl·*\ú¤Þ^?ý †ìY-wlYV¿ŒAe„{Ó€¯»ï>ê /¬‘J÷ál’ÞhIT6Ñ¢»u uÙ‰ßÅ9pëîŽÛ½»e޼ˣÎKwŒ*ã¤K~RãØ1¢ZóDÓ˜œÜr×]ñ›6ñššâ_‘É6ÔÖ~Íüm4/QGÄ‹ÞoÚ$Ùº†ìY“¸À¸aõ37ï?ûìÝõõq޼™,à „åçÏxýõ²¬,'Ð{kH¾F“ßuÿÄ H:­±±Ï?úÉ'ÁöT©4l×®™Hò#" Ûù¡-¡< Ï_ìÏ©ã8}Ôj¤÷ò{îQZº:0 øúþ;8xý¥KÁZ-„`˜ýýÉÿù¿¢âôæÍ]ÃMeÉñüùÜ={ÀÐGHD¢ÂM›ØuuÓß~Û>7÷:}:ò©§dS§.ôö6/µ!(„Ÿ ÷.ðvúØAz/|ê)¤÷ý™™VíoØì³O–—ó  `²ñ­©IÛºUyö¡‡w°žm$_ëê †þ:*µxÍšŽ9s"ß?üàA²Æ^6—äUTÄ<÷»¤¤âí·ÛǶ*ª3Á–É@ïíœO…ÂW×-%% úÀäAÑh~ø!(;ûÂóÏ;Gc¾µ% ýiE澞Á˜±qcð‰ôk¦ÉZÂÂÈíÛ=÷íkZ¿þòúõxÛ3ML˜õñÇ ÷öÏ?‘ê?WY AL–qÿÖ[*à—õë{q›ì[? S­SŸo<Ï 3ý¯5ô¥YYû÷·¯\ ©jÈܯÍÌl›>ÝûâÅøM›¤éém))‘Èj@•JÝÏŸ|ó2!¡í¾û¤øŒ¤÷Ûkkœzï ªÿÊå˯——ÿ#"BL$B€·fÿÔ}ûÈryÑš5N)ö“%ù¯ç¾þM÷7Èñjï«+cxqffÀóÏÓÒÓñ€‡a­òÖkÝHò³Ë©T‰H„iTTjj*2å‰b±ñ³»›ÐÑAlowéï7šøR)!?ÿŠŸÎNÚ×_òxƒ\®ÁÛ{Í®W¦¤HYô}§æš/iÔõ@°#žííÍèê‚=¿O…ÂZ&óésçÄÄüÖæÆ,öFF)†íǰc<à/òx¿l{ž:ïþ#Ë—ƒä›h¯è‘Nh´Î—_þÛŠ—0ì,îS^” *º!º\WMŽFîQ®¤Óõ¦µ t¡¡×b¹¹Q7oFŽŒ é›o^{ªª¿Ÿ%¢8~ÒïÉÍ;Ñ/ ü@†£«K¤P< û:9lvKj*²õýe²OD"èÚF!Ã^°9vÃæ™4h;†é<ƒôÞXƒš.Lw§»;qrrr,öÜiÚqyܾ»îúB£ù6=Ýï/¾ø¢Ã…ò† F<ç‡aXyCùÍwXüÿÃ0!†­AQ9Š¡“€aJìñW·ó°Z·nÅ~-Z4ú¬þþiû÷ëÂË/þÃïGGr¹ÜúúzË…gÔ|4‘³£a£=*'Rhä5J“M›6r¶X£ ÿßÿÞ¨­½ôÀÊzd,~àòòr‹ýÙä¾a"‰êÁ´ÜPŒŽ¶Øo||üM¯!k4¢âbÿ¯¿îš?¿0-Ìá¼búJ¥žhøm͇Ǣ²¬“lâ—4‘¶ØïßÏžýSnîÝjµÓ¼9ͦcb¼<–‹ &H‚ƒƒ-ö›šš:bž¯®fîÞ­¹ÿ~ì¶ÛnLveee§g”ýF÷;ÊÙ›úµClRhdgg§¾BÔܹ¤ÜÜÔÍ›õÏ?¯[¸ðÚ3………1–® Œ¤WdéÔY$ù&˜@‰hÓŒc&°Êõ(iÃE¥"=Ýðý÷”÷Þ£ž?¯}â‰A>ÂϸˆÅäŸ~"îÙcÈÊRÿýHéAe<³ôœ„‰Íú2Î…çŸ{ç·înHšÀ$f{•ŠóÚk¤Š é®] ÷N*Ö5[¶ $%ÑV¬ = ‚O--ÔwÞAi`ÍV>¬}ä¨ÿÙØÊGôº»—¯[·{÷ù?ý "ëclÌß¶MsÿýªÛnƒÐÀº… õ‰‰”={è{öhMƒ[œ@,*"íßO¸|YŸ•¥]»vfoÚä#ZBBÈK—&½ÿ>¨>pË{æwß‘Nž„Æ|üšû6«ª([·fI¥B¡¯¢ ¸ˆÅ¤'Œö³gë—-3ÄÅA˜Ø£ä#ê§L!«T úÀ-7îõsæHwí‚j>ž1„‡«¾üòòSOÍܽ»?<¼bÞ<(dœ ßšÑùó´ÚZýúõ£tØö"ùó¸}P}Œ{`28¨_°  ¤Ä¸zJJmz:XüŽŽGK‹WY™ðøñþ©S[fÍ¢îÞ aâ0’oV}ŽTß¹w1&¿šîîÝÚ¥KÁ¸®CK¥¢B¦aêTŸêê¸Ý»õ\nÝüù-!!2Ž…[w·wE…g^ŠÁŽÄDóÂød29‚Ʊ$3µðëh´¯¿^´aÌÜÆ_¡XðË/njµ|×.=$`dáGå :|kjüΜ ûî»ÎÔÔ†ØXh\t¥Gî–yó =Ø$3æÓnØ÷Î;—~eKˆà¦0tºÌ‹ƒ ŠæÎ-¸ãŽxþ''Þ»Øqñþ©÷ß6Fé#5è`ö÷§mÝÚ?ujG||kh¨–J…À±(kw·WYß´ˆ!ªœA°³I>Ù÷§7oNzÿ}†DR>kÄ0 ‰uuɇ×%$ì^»VI&‡aØ‘Ò#¯üú :uàÔbïb_XüÀˆ K2è@F¿°¤$ìóÏÅ))S§vùùöÛ TóhjrJJPUL 6½3K¾9žÞ¸qúÿ›ÜÐpñÞ{!ï7ÚÕ•ùóÏ2àËÕ«ÅLæÐïr°Ìè§Ü~»Ouµß™3Ñ&±Av×–ÆK§›ÖÚÙÛË/+£×Õưל’Ò…?N$3u¹}è¡°üü´·Þ*ËÊ‚®}àZ±O;}9N,XPíáqÝÙ%S—”v”~ÖöÙ[ño‰Œ·Ø1÷ôS4æf~M ²ûc•ÊêøøV7· @N&C(ÝB™èïéìôojâvvö„…)gÍ*½çhºÇ£ä›¹œ˜Øçå5eÏžÎÔThäbZZ.\@Ž‚3JG¨òX¼ËwìÀv@pÑ~³ÝiáÂòO>™I&O¯ªZ”-õôl‰@þ-ÆS¥õõùôöše¾Ëß¿Þ×÷@JJ‡Ãf³'²­à ’™»ö7nœzèЬ]» b?ŠØÀdPÊdJE"Ì4/¨¿?´«Ë,ÿ6»ÓÛ»] @5€j£›ò®.ÆÆ¡@3Ë<„Hþð5î‚åË}kjâvïFæ~2†…xà ‰uuSŠ‹Aì{©”Q¨Lò?d°¦•–.¿*f}ªˆ™L|ê™›^jE~}}nr9Òx®DB•É)ßááq:&¦!5*F ùc¥%$¤kãÆÈ“'`Ø^ [ QçÔðŠøêêÈÓ§{‚ƒO§¥ÝØg¶¥“NGG¾—5Tà)Ñܾ>ng'ª<$‹ÕêZ­…L–Õdr;à4!¬Õúj4BÆ]¥¨T> ]«í÷óëôôìe³‘Æw3°"HþDÌýK |ï½'1¬Ã>İmNGB__æ©S>eeiiׯ[ÑDhBŸ¢Ñè5£ëêŠ~¨ =x0€B V«cärFƒ*²èw”¤{¨T%‰¤ :(‘ØD"õ‰=­­üŒaîöšÉF²¼òm0ˆ´ZŽ^ÏÒë=5$í|¥’'“ÑU*.a³Å F;i_ A® Ó úˆ`ŽHþ­åÓ±Ã6bX†í4}d {Ãb¥´´jÖ¬#©©Jhìƒs¤s''#s s¦~æØ›~¢P8vM#¿×À@¨N'ÒëÙƒP«Eµ†^¿L£ahµt] "“•ŠŠHìÇ0¹é@È0¬ßt zMŸÓg·é³í÷÷5÷{ÖaX Éñ_ [‰aíWÏz_u ÚÏäpÃ0Žé`c eÀövÎNd¯Ó5·ÖV5'quU¡G"“{èôF6û¼@ÐB¥ÖR(W-1m^pž„h|¢emË µØ»äçääXìÙb¿ÉÉÉßô§Ÿ~2;ò0,¨¬ì­C‡þæãS3{vç:zëëë-¾¯D"±Ø¯R©´Iì2 ‹ýòx<‹ýŽýb¿š¯ÒRþÙ³âääÆÄDut4ú1ÚÒ[—••Y?=ßÔïDÎŽBFF†MÒ•M *•šŸŸoýgÍš5Êû¦3©8µs~æü±û?ÿ&£•šŽ!èR)Y£!©ÕL•Š«R‘T*c1J%Yn¬LŸD™Ìèîë3~öôü®L//¿ö+þ ¼ªÐzàŠÃÕÕÀf,–ŽÅÒ3z:]oj¨Pòxý4šŽJUq¹×þ• †y˜Ž©×üX%®:PzÀì›6?d¾MÒ¤ÅiÃVéÙV~I)5,ö‹×b¿û÷ïOMM½òÙ‚k×ÒΜIøøãA@õÀÚØØÑ%?vÔ Fáĉ‘‘‘–ù½xñb¨¥»ºUWW[ì·µµÕâgîìì´8¬¤Réoq4äêjêÙ³”¯¾Ò§§k—/—ýõ¯d:=ĤÙ6IW“êw”³¹¯­p¸Bc‚~ŽyøÙÂg‘9Æõ?¶L?þˆíÜiüâïO,.Æ®ÖþI·ú¾Sú§|^÷ùY…±qaªûTç˼vèw"ùÈñöoD’‚$!ôo¿e½ð‚úñÇ5³g&`¤“جÔÒB¹prઢiçÏ—~õÄ`ç<³ô™Ä ãßÑŽS9{çlút¬­ [³›@kßMásø?p®ú\°gpgm'¤{/æMt¡¡º—^"J$ôƒ¹÷ßlGõí·ëÂÃaU{ÀlÓ“NžDJ¯KN–ÿõ¯°ßàH ÑŽ÷ÐYYÖ¹Rýۧߎ ù ùÖ™Œò‡ÂzˆR\L=}ýÚûï×Nªµ´°•Š\U…b|ð ªéfÌP½ù&Øô ù·¤ñèpyôQjQíÐ!¤ýº%K¢e2rd¤¶j˜LxMM~%%Ü}ûˆ¥¥(ÌuññòG…¶üÉ)¹§YœHûCvïö=zT×ÝÜ ¼Ü"8]]nµµnååÌ¢"uHHWh¨òñÇu–Ž:@ò'ªý?ÕÕÅn܈ÌP·ššÐ/¿¤ÕÔHÓÓeþþ ÿㅬѰ;;Ù­­ìÆFnn®^ èKLlOO—deé¨Tãˆ}Ð{|›#‰Ðef"Ýâ54¸VW‡ž;‡äYÿ²  ¹O¿PxÝ„T3Íætt àbUWWw\\Õ]wA_ H¾]ƒ„ª3<Cf+²þÝ‹Š**H==C5•›Ûè:§«‹ÝÖÆji¡wt0‹Š)¯ˆŒ”ùû·Ï˜" ù,ÿW¬C ר@moGFmÜÀ€<>^ÁãÉÝÜä\®ŒÍî7­]åpd2¶LÆ’JY½½L‰Äµ¦†ÔÙ©6M*÷õíž:Ufj±‡t’ïH4IM;dpEcª\]ª³ìСWW$Šnmm¾%%Ìöv²D¢ãñ^^ @G§£ª€–J•™jš«Ë[Þ*¢êê¸}}ES¦¨'öÏHÚ)Z-[*¥h4fugvv2Ñ©¾èhô"b>猗švo§† 3@ò—ƒ5ßhy9žñ}fIÈ’±{ì¢Ó냂F2Ž)j5ª PT*³‚’««Kñx:6[áéÕÝMìëÓÒh“¡Œ>Ñaï?odÉ¡CÞû÷#G„Hôõ³ÏÞxM«:ÐWªFc>âÛÚmmÌžŠ\n~*eR’ù‘´tº‚Ç“DEÉ’“‡ê(Úí®Æ]çµç±Nl { d|æHç‘!Ǹ$XúÍÍûÞÞ7ž¢jµHtÍ&µ¤¤DH£¡jÛ´ ªÓNšÓöóïuuFÝý}ÅBE"q¯îDnjºÿÿ0m1g¾Ø ò¢uuÕ²ÙZÓV³HÎÑ¡¡Ñz©Ô^oïæÈHTÃKÛC‹²Å¨÷&êuõs°9C@ò•8N\¹¸Üì˜Ô!}5KlŸ±·wì[ã˜-õ!z*+?wŽuñ"rr¹{ŸzJc’ü±´ðw[wªûon¢;d|&+2+¨ÅhF§ú¦Úç^§åítú?|›PHQ©ògÏ–šìøI‚Mf¿ð^±´8ÈT0!{€ä;0T53 Ó±žU,[f{ñ©ü¹s‘£S;d8À.ƒƒƒ V> ù€ä’H> ù€ä’ ù€ä’H> ù€ä’H> ù’H> ù€ä’H> ù€ä’ ù€ä’H> ù€ä’H> ù’H> ù€ä਒ïââb±ßœœð ~Áïó‘Ã…ø¿¶-4ÀʰòÉ$|@òÉ$|É$|@òÉ$|@òí¥Fyèâ¡Ê–ÊɺÁÎÆÃ¸Xs1§<ˆ?dqgñͲ²;t‹Ç–”XNvñ"d (4ì¤Ð AN›Œ¬ûЧííڋܧVœÊˆÎ¸Å7X²Ä˜†ÇŽaÚsP "lÉÁ%Èq·ÇÝßÿñ{;È\qîh‰òaB‚Ñ‘œŒ?Ž17ùß×^öm3:>ü{üqÈPhؼÐp9uê”e>gÏžm±ß‰ Ñh,ö›——g±ßK—.ñJS•–mvG÷G‡Ô†ÔÔÔ {¥hpÐc`€70`0°Ñ10Àd ̆Á€.`êõôÞ^óÅô«¾®M5×Õ0U¦OÅÕS*¡Ðø•@‰r #¥B¯‹K%‰Ôäâ2Ê[„„„XV3gÎ4;²uÙ'NšÝ¡ü…ḩߨ¨(‹ï{äÈ |]à](¤^ùò-–ü+6 Â1,ÃPð11ÌÝøT #ZôTòiÓ>Y½z¤³6l°8eddؤ¼ËA†n ÂÂB‹ýž;wî–ær#B¯wôÕé† cqa*7ÆUh\Wb ‡ÊÛÛ˜h‰Äv"qìÅ…™¸¸8‹Ã*==ÝìøIòÓaÍa³ûM7YDÖMýX|ßc¨4~NÓOŸ#^‰ÜˆãÄ^cÙ0_§‹Ñj½ OÎ]£¡ ¸*•Dή ÒDJ ‹ý¢"Ãb¿ÙÙÙiiiK~dd¤Å’ïåå5–+õ}!¨ŽX‡•#ùÒVWO¥ÑDz½—VkL j5_¥¢›’‚ŠLVR(=Tª’DRÉ(§u_Íiè,ú¬¹š{Û®þ?Ê ®&G†¹¡êã5·ö6}º›>yæÉd’˜LT™@%×`ðF%‚^o, ¾BA—ÉTl¶˜ÉT¡›Òhdr;…ÒD"U#‡éîc|ßa‰‰‰AŸê.õÉ&£ä§ÒR“¦$Å£Á`HMMµXòƒƒƒÇëK«ÓjÅzªûêWL€a=ÖaÕVa(ô%(ö1ìA [µdœ‡ag¯ù‡wÞy'66öº¿Ý½›ûÅÆÜ{Ûm7žµå¶~ÆwÄBI¾91[&ùHòSŒéºP«u×j C«åI$×fÛ¡By4—7-4\b ò„O¡ B•á:ÝuÅ…„ÇÓé ©›Bé PZÈä2¹”ô»¦b‘HdqÚ˜>}º±HlP.3J~&+3cƘb\,[¿HòCCCÇëK­PŸë7J~¸Úu[6EÖçÛß"¥‰Éì¤ÑΚ Ò^"q¦Jµº¬ÌøRlöƒQQærÕ̽÷Þk“Böo=Jý3Òé&/®[¹ÖU|a¥é:Ê*µ4Z›²Jpm ‰³7üâvõÇä."šFã0™£ü¹×À@¨NÇ0+)Ré2eotª—Ïïïê’ DÌåvÒé•,–A‘è‘øåµAêj‡1ÅÐ颛›ï¯jxŒ.¬&t cbض‘#¢Ue0ìûQÃ|ˆò¬¬("QÇfW-Y™¸IA<@ÊjMQѼbÅqMÝ^e”ކ$Ö\¯ærÍ*R>ñBc¢™L‡3|=^¯0Èt V«göõ™M$u¨p«§ÓåI¯»;*.&ii{{T:U”g”ÝÆWú``ºäNzÃñør—_ †ïÝÝ |}o,ÏKÙìŽØØµú(›=–ÒÞ …Hþ-ÀW­Ž‘Hü¤R7™LØÖ¦a0z]]Ûx<$–ÿ£·ÓhÏž)YFò-ú” Û©TS ýºª@,—Êf‹¤Òض6¯ÎNªR‰Þ«Îϯ™Ë­çpÐKIIcJ½½i¥¥Ë¥žžžžµBa…@ wäì6õòå)'Oʅ‚ÌÌÓ0©dË9\{dÂqÕÊ£%svE‚WçåUìíýyt´hüX¨d±ŒÍûÞÞ׆Fl[Ûyyö/ÿHìSËË#OŸFfý¡¥K[\]!=¶*7Î;…m0,H×ó½¼Ð™†âõ÷‡vuM¯ªZ”ä¿Q$*ñõ­ã8’V"Ë~úÑ£’ÀÀ÷ÜÓÁã9tì€äߎLæÕÒâY[{ç/¿ôy{£ìú¿°°‚3 d®ÔD"lÚ4s¡6³¾É‡·wýÀ€‹¿¿Â>rõØW¤¥í^»ÌzÀ P4ææ§?¬ùò  TnT;¯ÌRw£À›f!ùŸÚÒ²ôÌšRÙX&•ñùöüðB‰$íèQäp±É¿‰Òû×Ôø2[32š£¢þ"•R|}!dF—®^ÛÛ;­»;tëVUPPGbbkx¸ µ?±®.ùðadÙ¹zµxÔ‘ŒpK”Þ§ºZXXÈ))§¤œb2/üöÎ.ÊjïãfŸafaßD@qÅ%µÔR[ì¦-.×®mæÍnvõv-³4o]³ÞR»Tš©%ššŠŠ¨(.ˆ€ì0À³03Ì>ï™%JA`æ™yηç3fžãsž³ýÎÿ¬Ó„T*Š™ßåšþC†xk4ñuuÖžÿ;qq—ÃÃM *U¯O¾tÉçöí«Ó¦•»L Éÿ|‰$¸¤Ä«¨ˆ¤T6ÅÆÞœ>½î^?¶äòe_A1ÙAUppìóÏ{ …¾·n¥nØ ˆ‹%$ÔEFê­SíBdSSêùó:íà3Ï n|„Ý”^4yrùĉMÏ> ¿ßóÿç‹ôþA4Òh¿B»?"ªýÐî§_¸ xöYil¬ŽÍvxðBD¢äC‡DC†\¼XK&»RÌ#É7CÑëB›*}ÝÈ‘y=&Ævw“SЯӦAíº|yÐîݰ6¬IL”uš8Ð †‰W¯Â*øÂ„ ¨c1”•^¸`µék““…¥GôVûá5ŠÉ¥VG¿úªrÂÑ”)*Ëü8‡’—œŸáÑG«$ùEhEEàíÛ‚Ë—ëÒÒ:Ûôˆ~×~ò#„ܼ9ü«¯Œlví¸q•11ñ¬X¡0ùôéºÈÈŒ… Ѱ=b€`(!ׯdf*ââ Ò7-X`Ï,—DÄå EãÆqoßÛ²ÅèéÙøØcÒh»®Öã´¶NÎÌlåó]ϸǻ䳔ÊÈ‚‚ãÇ[†ÆÅ]JO×¹hcX'ÞIJ‚4úÃO =|X8yrU\\Õ•nÍKEE2Ù©©SK½¼P„#ά§ÕÕ5¦¤œ_·NÅb¡8éGŒTjSB¼ØUUÞGúïÚÕ¸p!üÓ‰ÆóMþœ97 ráÆäó%’ˆë×ý³³«¦M;±zµ‚ÉDÅÌFÿ³Ïz67‡Ÿ;7á‡*,°Mø/”^ȯÍOLHŽL&H¥Ì×_§éõȸG d.äæÍ€“'5þþæüˆ'Š<$D¾bC$ò?xÐ{ïÞþ¤‚‚È Ž¿ø¢kLËG’o†píÚ‹§OsõúÊ´´#ÿø2ë‹L ¸2w.còäè“'SOž¬œ5«W]ý¥¢ÒÙ¿Î6»nƒ+ ;6nW¯[·íèÑp¤÷ˆ~ż+óÙ³™™¢É“¯½ðÂ@ÏDAtFåãsgÅ «ÅÏûõ×ú'Ÿ”÷ᮘ–•EÖh\¸3w’Åž´{7t\‹ŠRMœˆ †Š4‹…ZüQÇŽž=[<{vCÏŽ!©Wu¸ë³vD|õ•1 =Š¢Ñ_¸I$¤C‡–}õUýÂ…¨ßá?·¨(hûvul¬pöìþšÕï¦Ñ¼|þ<ð÷Ï|ôQœD¦»k¿¡¤„ºjÔ{ÃsÏi·m»â‹ÖÙaÔâÏ}öÙŠôô˜ŒŒ‘?ýËáC½¤JÅs! o~gD3óý(ö éÇ©?ÞÎdîxá…ÂqãÞ;ittÁ‡ªCC£_}Õê´Mhôš’úøiMeÊßÿÞÀçOOÇO4:·•/”³ne1©Ì™ÃgÒÈ8ŠÀ]($}ýµû;ú7Þ0õág„ýR3"¢éµ×Âss½çÌQ¯[§MNîæf˜ÜÒ8I«7eÅ*ËÅ¢¿Äž˜MÜ´É´h‘öèÑvMýŸÿ hÁ ©©ÒØØ€ÌÌèsçj/îÕZ>‰Ròøÿ¿¬¾<’>òÀ¬ÿóë]ã¢Eûss#ñN,ù°¥¶hï"˜~Ðý©öÓ%iK~o¡ïÙCøí7òeºwßE…ĉÐS(·ÆŽå=ó cÛ6òéÓÊ×^kïâP)ægŸ@bÿýiˆÞÚ û¯ì÷çøßo'Ï#íØÑ–”¤Ý¿¿íÌUtlvù¢E^ùù‘k×6.Y=ô˜W‘gÕ øyý?˼½a˜6 äæâ*öœXòÕ:µ5ý µ-µ¿ÚuëŒ+Vh¿úª[êœä›7Ód¯X¡Z»Öù ½Ê•+Q\!úÅNp É›7·s¹ºM›ÚÐ ‘3Д ߺ5ø»ï˜7o^y챞x „v¸ƒÇ„îÙq³ %%¤íÛa¡E-t×@=w®!6–±q£~Ö,èîø6ÜärÅÛo£(BôÝN0÷ä9BܾݰaƒqìXEÎeîßY±Â÷üù1›7»˜îþþÁ~ƒÏÏ:™³omZðŒðyÏã3ÒˆÙÙÙ6{¶ÙoSSÓ?þh›ßõë×wþ328’  (¿~²U¡øŽÏÿ’J¿üÒ•ßÂÂB‡ÄrZZšÍ~—-[f³ß;v8{ÀÎÇÁK/A…‚…€ñ, wëVL…óúõë÷éYU¥£R¯?¬·ÉærÔ—|ÕœºÒðIóy‰ ãÀ¾þïxZ,.b06r85¯¿Ž©JÃQôå}sÔI¾))éå ††~õ°™üÿWY9–J]ã{üpºï™¹/,X°À!•±/µ†Í~aÑ5j”ÍÏeuš=;N¤[Y_/¦P^ŠŠjpwÇì´Z>Ÿo³ßððpÜ6äa @?Xº¤Úø»åK¬ÿ—\©ÔH£=ð',(·Cš°¯4X×X~\¿@%áÍ:i”LöEhèaKõŠfä;/Gétɸq« ¹»ÚÕm+kkÝéô‡åã¸ÒpîEz«e²wKK3½¼VøùA½GYßU¹uoÊ 6òPt úÆ”°óV9t¼yÍøq ÊÉäõqq<µúŸwîðL8‰÷™lX]݇QQ8(g•Iß¶¶ojjb”ÊW¢¢¾Eç »:×:¹‹Pt úl'ì xÃË Ù ®„„@X3t¨šDz³¸øOª®×?yýúöaÃà=8%§œ¾7N§{³ª*ÛËk³'Z vÀB À®Â*EÂV;á¡f2A;¡€ˆÎ wM> ]Y[ûîÍ›ÐèïøU……§¢£¯¡g”ü×Uª…55Ÿ„‡£9|g( } Öh|¿¼ü*÷.Ÿbõù,0p%ª¿D$ÒÉ;{³i’|¬Àýþû)r9j¤#ˆž³@¯£¦fPÐçhß\<©þÖœ‚Á@Ôëß?ʼn“I¾»VËÿôÓ6ë%_ߤ÷¢g°Nz£®î“AƒP¿ ®¨ôðßÜlu'Èå×Qê[•ÔYôÞë_ÿ2úû‹—.­qsCɆ@ z÷ûïé¿ý¶<(é=á’oÕ{í¨QÒ§žB †@ z®÷ä¦wÞ¹‚ûyÚ8äOÏË Z.·<*ê@€"Ä Ö{ȉ2™×Úµ­O<¡pÑsîMD“šnþ`ìQ­4¼ºZG"Ýöó{èªv À9”Éx„ÿÅî Ôû6*Å>1oËÓõ΂ö½«ê=DÊ‘B½7;RèöiüÃ2žÉ£V ÁJ%«¥…¤×[õâuþümB“·w “)óðr8ý îU~ à6Êêé=ülZÖu"N"ùã÷®ÚŸo…¡aÜïNS*c[Z‰ÅÜ–)‡Ó¨åóEmîî~—/»Ëåð£·w±åØ(±xPc#¿¶–"—×ÅÄ܉ˆ(÷öV“HžîžÀºý”é=Gp¿ÿÞÜŸôp"Éçú©~èЖٳ];ö™ æDáÄfv³@.‘Ñ'ËÄ“ËÊ4Ê>ÿ@DD6“ ïÇêh—.M;s¸¹ý:eJą̊‚{g{óTª°ÆÆAee~þ¹(5•E%=ý]Ùw er^àdfZç롨@ œFòa;½ÅÂÉü|O™'¼ˆÅ³ Ζùû;t¨UéH¹@PþÄüIÂ`HÂÂòÂÂxII ¥¥‹w}?iÒw»PGà‹éÇŽ‰¶nEã÷„ÓH>,·¸j§×hkÈäGî—- ¡öŸˆÏŒœzöl5¯pes„«C/(`}óMÓÆHïˆnÀÖº|jYgÓ&ñoà¤Ü>"“½~ñbN`àš¡Cû÷È(üßOŸ~€ÿ°es„k.2wÝ:ñ;ïÑ9[„³XùærûñÇâÍ›qRn—ˆDcªªú˸ K€†þÛx¢ci®jµX–ö´¬Y£ïÁf.ÂB¨àÊÃïÀûÇ[ä>ôît(\ å,$ùŒuIž6"ñ¾@,†zÿ÷¤¤>¿y#R>@fq#.çàAcP /å}€ÞÏ´8b,ŸSýß°šÇ`\uëã÷þÍh>D9ËE%?;;ÛfÏ6ûý¯…Îß¼"‘ U(^¬­»wwï·°°ÐébyíÚ?t®û––FþðÕO>™×ƒs½(ŠÍÏ}ã7¬ŽƒRéºãÇysæ4ô¸Gá£>rºx:t¨í-ξ©zýúõû¿ô¬ªÒQ©=ÏÃær”––æxÆH¥yA.ŸÐÔôZxxcNŽ‹U_Xv¸ŸUÁgŠ»»k­|je싱?Qõúà†–BáM КšhB¡›ÑHɽkÛ³Ц¤´»»k4^^Š€…O‹—W‡÷ÝÅ»÷Èö˜]t0}Át²–ÜÛ0:tÈé2¤qH¥AìK­Ñ¿kØp½~ZAÁ»))|2¸(©©©V‡›DB}ç]FF½õuÝ“——gs<9r$22:Ôܦӟª¨ÈìvÏ>€Õ‡ÓQû¢úñññ÷É•J4Ú‚r;¤à÷W¥a­7·Ô&2™ïŠ™911ñþ/ý•þŸeß•üiçù0}"‘ç̫͛W)¥¥ê#Ô2‰÷—¿´ñùít:˜:\½ onŸ<¹mçN³ ‹Å••^õõ„@}}Û£ÓÒLÇ·2[÷d™%?ÌìŒ âÆ!•&:ö_*-=[îºzÿ«}ÃÆ m=Óû~$/6vvEERAt Â†p`½q*:'õFPã¤)“”Eð"âJëy¿î"ÊdâÙ³k/VùÜݾS"‘Y¶ê‚h~ý•´gps3,\Øn±M<žÉúë’%n áÊbf&ù£f-Zt~ÖÉ5;Þ&E£Üåª8^ò—ˆDðó>ÑM:~¼Ë5Žë§Ÿ4é±ÿþ·`ð`-ÎjI„ë±@,¦éõ;}|pøîPõ‡eþÿÚ¢ ©òIyHH77C™×/YÒͯ°:‚—›DBÎÈHÎÈ{¹œ‰%¢ æª8x‘ÏdšXTô¥¥óÙå jâ¦Mú•+€šääÄ7P¾G85°Þ˜UP°+* VšVž‘áýóÏ5+VÜY±¢{½ï9í<žî•Wt›6­«[uãÛhDÙ I~ÿó|MÍňœtÍ1-Z‹–Ã?|xä©ST½e}„óòry9¬7nu+faˆDÑëÖé¼½‹Þz«¿Ä¾3m+† ÓÉo: Õ¢œ†$¿? ×ë㪪öàc5­ÙÄß¾ÝàèÙsVC?¶¤e}„“2\£‰¨«ÛƒŸUø÷`WUE®] {azú€>èËèè옘•gÏ"ÕG’ߟ,ªª:=Ð Ó±bâgg;ÜÄ·R\€ÛA8+ +*ÇÆâ¤Þè¬÷¡6T®[7Æýýóó³ª>êáG’ßoMu©ô@€“ˆ&fd¸mÞCª||ÈJ¥TŠr?ÂM|®R‰“Ù¾Pär{ê}‡êçEE-ËÏG¹I~?0E$Ê ÁISÝ·´´Ï·ÿ¼®(MN//G¹áŒ&þI|lÐÙ™°íÛëW®´§Þ[9?çÕÔ Œ‡$¿w\-»úåÉ/‹…ÅÖ?½ÛÚ⪪ðcâ{_¿n|üqì„§Öß¶BPîG8iJ%Mü€¬,}@@SB‚Cž¾#!!5? ê#ÉïPéG|7biÎÒ诣kšÍ Æ'e²›¸1ñ!ÜœÓˆØ ˆËõ¨­å´¶¶šZ«µÕúv4áLhhÀ›‰O‘Ëù{÷V?ñ„£ 'Ï'$ÌC~‘ä÷œëÕ¿ï$\ÙT ?Ç56žÀÃæµ(ããÛ1¶ ¨&9™ÒXòzÓëew‰w!ÕG`_®þòÑá² ïî%îÝÖQWwgÇãdf6.Ybtèaâ'ýü|£Z[QžD’ß#’%aŒø™‘®^•Ðh.¾¦voð<+ÍÇQJ£1·¥ØÛû–éîž<ùÆü]* ìpµìêÌ#3W篿<>»e>½  áÞñ4ô󢢯բót]{l¬$:üÒ᪦ªèÀh:…NŸ¾Äåºx¼Æ›O£2Ô±@ê‹±Öøù» ÷¶Ûç‘x¨0 °CiãïsM*›*a2®±ñó¤$\E‚ω b!$ÐÐÿç‘#ìÈH(ÿ(s"+ÿáðX¼ÄˆD³ÞC<Ìdºx¼vê&çj@ç*1B‹‡Ç¨kúõÌÕÏ0žyŸÿ¾Áv˜;ÅÚ58Ïkž¹k°¸XC"áj»=Nk+óôiGÍÚ»ßÐ/ì¾ÏîÝ`ôhüÄo8˜ÝÛVÉf3[ZP@`âb0lØm /;Äü±=“©c³1´ªÐÐ ]Å·¼o3Y™GGŒî®¼/L‚=Œ±ïCI:Gu5£®ÎU¬üšàçx8š)& €4L†MÁb…¹||îåõŽNç/ýÕMÇ>™LæÛºÇËØ„„øøø?}ÙêïñŸÿùüÊyój÷‰ë×AZpù¼ Å~¦eÚ¯¤ªcc±À;˜Qhu‹ÜD2ŠL qÍíÔ¾à%‹c ³Èµ×s‡fd°¿ý:S©%3gˆägggÛì933³W÷‡ÝºÅöö¾–™Ù—‡:Š´´^ ·w[ýæMq|<…BÉË˳ùÑ6GÇ“v½—¾»Ñ8¦¦FêB›í?óÌ3ü–¡~þY3~ül§+¿cÆôsƒ¾qðàÆÿþw@Ó׆<Ù/سÒ0W»Ÿ~zuÉ—¯4š7ߦß6»øÀ4c˜2EcëRø¾T8£»î…mÆËH`[ÐÁº›Ó¶¼ÿþû÷9ùÜ9pô¨¹ àÂ=ø•Wºù‘“¯[É·¹8ûRk¤¤¤ôê~òrã´i)ÉÉNš9zkÆi42ÏêËæx†Ik³ßÜÜÜØnmÚ?ÆbϘè ]½Ž©´4ÞÓ“3 Ú—4r r;$À½­4Ü4ª^ýØcà…\»Ò0ï'(©R6ƒ•Fò?~=÷?%Za´g´€&pÕJCëæf•|MJÊù×^ÓS(V4~N£·ß7ÂÿSŸzªûÙæçÚµcŸPP 8à?­VÊ``9„¡P¨X,—O E` è„JJŒcÇâáM}}FF*¨Š…"ªFãŽÍ@J’“¥mÞã\;-*cbT;v$¾÷Þ¥•+»ÒûJ~z:lJ€ÄÄz‚ý$¶Ö¡ä1sšœðÖéÄØ^Ild³É: i¡¤+T¥u-~ÜÃæÔ+* #GâäeëÍ{tO¯¬¬f2±¹$QÃçÓe2<¤ES@@Kr2C.WÙs: pŸŸýÚ’‰ÄäZ}È…¯Ñ4c[òÕ>>0Oã!-V~zÂã§WÊ^ÉkÊ'’ü¢"£Ýu,--w°Ú;(÷ócáfç]µ—ÃåÖ4ÙOòÝÅâ¶à`\]ºÁЊí-Á t: Çb*ôŠS¦|«»H^N$ùçÎáªkÂmiÁì>ƒ*6›nÙåhx<× ´£•ßÜlòóÃWÑU©êz>óôý°È¬±”»ò£ÙÑá$¤Ò6_ßv<í³;\£‘v½®ÄáÈZENÒ¢‚ö·çœ­?«3éä÷¾ô64´ááÀÜNÐt:žþÂ2¯ yãÌUðIÄ'I^I(6œ¦z’HÚ"ð5÷ÂYæüº|B@™_­ÊXÍÈù°þÃÓõ§‘ä÷þIµµ&W¥—¦Ñ´`¼cŸF#ªÕxH ’R5„ˆtÔ™¬üææ¶@|%™³ÌùŃä´ÝíÏhÒ6!Éïý“ÊÊÚxø:¡•*•büxo•J‡ä[­ª*—²òE"“¯/®^ÍùÅ,2ëIæÝ}3“É®S¦Pµ‚gôPòmÝáËéÀ‰uâR’ßÚÚŽí^î~‡§V‹ì¹܆¦3>æüBž¼¸è7ð}Ü÷®´²×ŽV~CCž¦áðL&-—‹ñ@(üH¾ÁÃYùNV=áp4P¯W1}BNæüZ‰hŽâ·S\ªLÙïQmm¸šy‹Àn&Š'«žð7ˆý9¿ø™\q4Ð’ï¦Ñ°W¯vËÏgýûßø)ºÏ …dµzXŒ*n,0ôìYÏ>üг¹Å»’ù9¿¸ÂõFí!ùÔó牻vAiëVòõëxÈ(KD¢”+WܵÚ'²³‡k4¨ä8†Bòá‡ÐA¨¨ˆ:v EˆÓTO8 hÎ/Ö^ÖÃÃÕÊ”žÑyN&ãÐ †·V§ºÀÖë '<.]‚°‹—ÛNó¡\¯ #\§˜„«9¿fKYù½E›œ¬Û²:4_~iˆŒÄC.9æí­°,.*ŠúÅÓ› ¹y“ÿý÷n ´€½„BN=…rã“OLáá²¹s‹&OFÒ‚}Ü4ægŸ¹]¹ÂøñGXk@ãDò=››Ayy®Ô·o§é{­Ï> ?Õsçâ¤T”“É«GÒyz®:»­W<8#"䉉eééx8)Ø ž?Oþç?¡ƒòÚk8 „<ÞØHÒjÁÇQuÊüÈM›(W®xýuôi´û^ïi1 g£ÚínnX^é¨Q­“·qÉ’&œ\‚@`bñ”Ü\‚Z½øÔ)4Èñ‘NG,.¶ºéMh÷=„ó£§Pn>ý´rÆŒ+øè}!µ¶(”îN65Õðê«Ð¡Û²E‡Wt’y,O ËÉaäçÊsñC¨U,–tþ|«»6Ùuvß#fggÛì9''§ç7OW*/çæê¶Î[蕪TZ|¯Ø—xî‹ß‚‚‚n~ ji$‘tA£ÑÊÊʺúu´\^_UU×Å^¡ñññŽJ#›ý¦¥¥9$žíTiŒ?{ëÖ_ÃÃAoê Ö=¼ó„»ûh&“ªTÖùù7V`²ÒH+.öùæèˆ\¿>oÍš ú×÷÷->ü…êêk WakìA÷Œ3Æé* b_j”””^ô' 4:>Þ„ùù¨ÝÀêý0p‡›ã&­Í~sssccc»¹Á³¹™RPÐý=ÎE|×!ã§Ÿ‚lv¿+h_ÒÈÊí÷ªÒ°á~¬Áçó{xg ë‚÷Î[5f f+ ßNó "CCÙ.1 ØÍûº_»Æ6,¶ë×tºJÃŽcù|¾nVsZÑ0™¾mmX!I§ÃÏ¢5¢Xl¤RÂyÀÛ 9ÐæŽéÁÖªøxíÈ‘Ð!?€\o4Ð~Ù«-8Øg[ÑiH$>¶%Ÿ¬ÕâDò­‹kÑX>ÑT,Vþòå­S§æZa!äwÝ`g±Üqfå«ÉdOlïëN‚’O§ãÂÄ×j=îbE`„6__w¬|šL¦³ì‡ˆp&Éçp𶙇†Fã`¼kO€h99.¶y—%ŸNwS(pUz›Éd_½ÓZ"Q;óŠžãQW§ñòB"êd’Ïfã®kBaa[òñ3ˆ¬Ó£¢\ì¥ì(ù|>áêU\•ÞVÁã vµÚ€Iì´¦¦V$¢Î…ÉÏ€³ÃŽ5d2ËhÄt¥› @æþ I¾ÜqÖ±ß@& °måÓE"U×ëÔ] JCƒ«ç!º´ò™L7¥_’O"y`\òq3h¶ò]®z´ëÐ6__‚3ÌGí/jˆD>¶`¢UTàä˜jY™uì;ä3îx:§"¦Ñ¼1^iàf4!—«}|ä÷Aò#"Ü%ü”ÞR‰‡á‘Hë‰z,U§Éåh…ž3bÜkkqõÊÍ4Û3ñ3H—É4.WoØUòÑÑĪ*ü”ÞËFZ˜Ý€¡PhÂÂðÜÊJUt4RP§£ÇsïúЗDD¡Ð L !nFYµµ®×Ÿa_+ßLJXR‚«,d±F`µ›Î%»­ˆ‡P(s¹™·¸°ò¹\÷†\­ÓS‰\l/RÀÏh lÜ´x{#É·CTÞ&í7S©Xm³³ëëxHN^ž44)¨Sª~l,O£×h4nK fƒ‡ŸÑ@WmÜØUòqØf/§Rñzô5M,–r<„J¡Î¤sår+—Åb >º"]žÍ!åp†cµ’ä47+ââð Ë.2®×¸!ÚùyƱcIøèÛW„)´LíÙ:Ê„ô\aIi 5åµè×(×l¹³D"ùرÐѤjÒµAì ¤£Îdåãoi¾”Á„Õ¾}NCƒ+_ ä»dãÆÞ5FŽ$VTàAï # Ë}Ê¿J¼ ø­$ì çà }.‚Ph*…îmN­ÒeçE ®]“EEåÖåÎÏ›ÿìµg¿*ø é¨a ÃÛ K€U+Ÿ&‘(\»_ðn½QQ¡ A’o#B©ðÄ­ÒV©1$„XTäòÙEOû}ž¼ :³±k!ôljbÑ#:þô¢»lË}î\StôŦ‹Ö?¿•|«3º~…å:V~P~&ÕúÕ†l„Ù±ŒÒË5íŸwmÞÿJÿçÚiÁªªjvÅMöèØ/•ŽÙ?:FÐF|¿àûˆsçà¹.]˜ L¦SITru\]Ç{ xee¤€qøŽª…1œÙ5§àz—”¨†7P(‘ÌH 7“FO£q1ùÈE$ß2[x‰¼E—y—¡£˜Öxq0Ø5HÖé²}…g õнO¾o¢rb3Àe%ÿæÍ– \Pò³³³mö|ëÖ­žÜvªê”ÕqEså襣όñ<ƒáeëI¦‡rHLöÎÃMB€´Jš]+éväK[7x ÉÊʲÍïE üiW^Þ'Æ•‘ÉfÛ`¨WèС6ûŽŽÖý±¢äæå5 ¿ç7ŽEdiLšA‚îA•)…BéKYpˆß´´4‡¤‘*ÎÄŒÑ|út_^¶/¶_D=À½¾¶›¬ß‹3líôööˆJcVK‹6àw+ñàáƒ4ÍÙ%0<<\}ßÍ<±XÔb2nÏnöððpºJƒØ—‚ÔC¿ÞáÞ¾Þccž™ö ÏûÖÈ¿þõŠËoR ¬Jº€Í$GDèlš4.‘HRSSm ÂöíÛ}tblTk«;•ª Ææi²¬>,ŒùS\ÑÞy‡ùÁA4sÅ4 þ×5yyy6—XüìPްƒ½_¶µ•gÙiŸïÚ[(^ÚÌtÄ@’ü«¸óçÛö/ÕÔÔô{¥Ihi)ÓĦiBÅ$q°68ˆ\¢spÔ¨Q®‚N"L˜0,aXVQV«®uú鞌œÐQYYét•†=:ö£¢ªWTÔŒŽÍcñ@RRd}=ÀÕ Ü‚‚[ aÿ[ÒRi!öÝ#\»Ö6~|;NˆD!¹U{+&0†22\ÿ…o[®!æOh¡/>w®üÍ71Àè’’£Ó¦EË]3êÕ«Š9s¾¹üÍÆ;áŸç„ç>Ÿó¹k¼š¦ï ‚I|Ĭ÷:]ÊfÀðvýNyx8?3;áI*.ÎÃÁ¾{¤Ý»³g#ítFjškø[ùã÷Ÿõå,‰Ÿœ>íÕ«û_ø8€lÈVoXc·ðxBì®ï®Õ’/\ÐFDÔÈk¬ßm9ª5h]äíòÔk>> x:HWÄå==ÙØ8_ Êr4Y±‡‡‹—[¡ÐM,6 ŽäÓ¹pç‚Õ‘«Ê…¶>˜0a¶·¡íÿFOL óÒ%ì„ÖØ·‚ƒñóôë×µÓ¦AǬ¨YÖoÖZK%¹H[Ç1’Ï.)acûXèþE2u*ÿÜ9,„d\mm6œ'fe-BÚé¤ÄÇw¸cc@zú0œ¢[F?q‚ŒÞPXWÃû¤Ÿbžzã†:9:F‡¾>ÿzîœÜ¥)K]ÇrŒþU¡¡ÉMMø)ÀÒ!C˜§OSärTt퀛FCÈÈ0:Û´8DQQEÏ홼§zEµy@0&&{›[ (:2Y¾hçÂ,ÖÕ°Æ–‰xˆyêñãÚÈH«Û“áéÇq©ÚÒÝQ¾îç'â§©ÔÆ%K=¢?»ªªhð`—/ºÄ#GL‹¡‰{ήú S ,$óx2y8žŽç€´$'³328¤#íÖ­œôêè““Û\wÊ‚Ã$?[ ð©¯ÐjñS€›GŒ€ù‰!9ÐÄO¸u먫Ÿ)ç&‘·o7<ù$RMW"_ HÁÙù:zú^޶¦××Ë8œ+¶î¤â\x?ÞjÈG’?e8&fFe%¾ ý… ýt¬‰ïòsnI‡W¬@&¾‹qÃVW‡··–LœèñÓOT‡Nv†&þ¡!CðÛD™ŒXQ¡ŽE’? d†„àm_SBüô=ÞþŽjm…&þ÷ƨ\ØÄ7âÏœ‰4ÒŸM"i(”4Ëž<øÁD¥Š_{ÍçË/€Eee ÞÞ.¿À箉îœzút×~GGJ¾œH„†þll,]³ÕO?í½s§ý»÷\»–5r¤Ëâ“¡Þ¯YƒL|—$'0pž÷Z‘%%}÷í³ÿ£G´´ ­¨ØÝ‡=°Lòwíjµ´$ 8MO\ú:6»fõê°-[ì9{ÿ¥¢¢똫OÔÔÖºçå\z(ÏœôôŒ¨«ã™Lx{qÑSOÑsr<óòìùPX-?~ùò~Ø wõþâEí´iFOO$ùˆJ-©¸øë¤$—oª/“J¥ ¦Áƒ‘4º0‡'cï(j; çp ê ¾üÒ¶>Ôûeùù¾¾‚‚p½ÐÄ7†…éq°×ã%úù11óJJðV†…ééÐÖ~õÕÛˆ÷­êê˜êê÷'NtùYúãtºD‰¤dÒ$$Š®Í5MÊd>‚?C¿CõÙGúïÜ9p‹õ5š·Nªçr3""ð·ÐÄoyúi<¼©;‘âÛØ…³ 5­¶~éÆAÛ·‡gdôo'¿»PH]µŠn0|2fŒËÛ÷¾mmoVUí 0P(H]ž³~~Sq6ç·³êW½ûn›‡GÈš5ÑÉO:~|u^Þ±áÃq¥÷ø1ñ±"ùP“`&[pí˰Êǧh÷wÌŠYY}~7‰„¼s'eÑ"ÃsϽ‡©7ïˆDWy¼o $‡xàOOšN‡·Õzi˜?_´jwÿþ O>aTTôË¿IšZhÚÛ’Û´øÀøQ[}O‚¯œ0A6b„"4Ôx_o<¡¬ŒxèPÛС÷OJwÓh`q%fg»:d\³F{ôh¾¨Xì%¸ ˆm®¬ú«e2¾N·gÙ県ˆ˜QS“›Åc®4 Ú<‚„þÒãc¤@‘á#•*§NU ®õõ½ÿæn* `é$äæ·oo?^¿nݲúbÕÑhw£kW’—§;V› Céú]\ÜëÇWNžŒ“m¬¬;¿îTë)èø$æ“Ô9sˆÓ§soßæŸ>´y³zÄuDƒD"m|¾»TJ‰7/F€ÿ駆G5Ë|e¥›Hä~û¶û™3°Ðš&NÔ/]ÚN£¿q|^Ö<àL éÍé®{ã µ×ÔôVx8RA\ñŸŸR[ûˆLö‹«/©z kN®ÉRdAÇŽÄiï¾Kmh`]»æóå—¤âbõ”)ÐÖæëVnÍÍîeeîuuпçþ €)ÝÿË¢{¥W혢ۗ4JJJzè=­6dÍéË/û&%uôf666Úœ'¡Œ9į•Û!¶Ù/”üÄÄÄÎß´WWOws³nb#\·Òè ÑÑѽõZQÁ¤PÊããqUi`nÀ¦õùçÙ+V˜çO:[ËËFö_T@ÖCnÜai³/€u?$n? (\wÁ8ƒz¸iSËܹ²4®JÝܹ‘k×J·o7ºúTTiô;,¥2a÷îìU«H8+5˜“üv­õ_ÿb½ð‚⫯Œ®Ÿµ–«gl²\=%ËeãÌÇuR’ÄÙŒcDÿ¢òñi™5+àØ±ª9sðõæ¨Òè3IGÞ™3GÌãùâ¬Ô¸c0LPé[?øÀãwR)ª×²ïƒ>ùÄàç×4cŠ „pútfn.·¨E¢çÄZ„ ŽÃwwÇf°ôññÚ_d¾þº›Fƒ2(¢Cï7m‚zß0>Š „Ù< R+^{Í×."ÎvìFØ _"ôÓOçñÖ3„qɇh““õ³f±Ö­CªèÐ{uRÒ{DgT>>²É“ƒüEâ¡°”Ê䌌üçžÓ‘ÉHò1‡zî\Ø1Hõä––5k”ãÇ£þ|ÄýÓÓÉB¡W~>Š D7Pôú”}û*ÓÒ*ÃÂp îT}}z:{Å 4®[ÁË—KŸyÍ×CtEÅŠÞ{÷²ñº÷>¢'ŒÊÊ’…„àsßi$¢™2Å:®T‡ð²³}¶m«Ý²­ÇCtƒŽÍ®xíµÐ ú4j„“’xáI¥ºˆûÃ6Ý"”ÚädõªUì§ž"•–¢¼‹Z­ÿÎÌ3gª6mzàæáDgT>>5«Wú÷¿ÑT>ÄŸˆ½vÍÿòeÜNÙs>É–9üН¾blÜøæf”l.µ¡!dÍš6âµkWœÚw}_‹ºE ¢{¤ÑѲɓ#·nEªè¬÷¡ÙÙgž·SöœRòe½¾|ûöàÖÖM……<“ %ž«âuô¨ÿ4¿ôRÃüù;.íx½àõwKÞÝvqŠÄC¦§k¢¢ê#:ëý¯+V(˜LN&ùÀ²7ß‹¡¡%<Þyyx>0ÛU®ÑÌÚ½›$UmÚ¤°Z©¬´þ´·y/ŠDO¨š3G™˜ˆTÑ¡÷ȾïÀiE.•~yáK•c`vÒ|ËŒg 'p¹Ÿ†‡K”ÎÏdz²¾~tYYþªUÜN+ïçFÎͺjÞtýàõ(–=·õÍÊmÝZú꫸Ûa!ñÂÿË—‘Þ;«ä¿üËËW4W Ão¨Ÿo…o6“™=zôÊÚÚmgÏŽýÁeÎÖÃ%Èd•”Ôq¹«ÆK åvú)-"í”àtø²Ñ >DïTß—N^·îÎÛo£ØÀ½~TVI¥BzïÄ’ßhèp˜Ãç/..NhlÜvFC)ê\ ×hVTÐôúíÆu•|Hì¶Ñšj‚ªÿê«›X¢°”Ê”}ûd!!ggÎD±q?N3–¿nÜ:ø9‚6"°*°ó÷P'þ6|x¾·÷Š7þyçN¸^Õ)€)õfeåë/´ƒ)ˆškˆ )!¡tãÆÅAqøÉø¯¿&$ õ÷Noå'G&××ÒÈ´yóæûzñàóOzz>Úܼ>'çfHÈÿrÔŸƒa±ŸWWWUu1"bÕ¸qh*b@Qùø,`'Wx€\#.Jìµkƒ~ú)ÿ¹çn ²ލLªÉ‚É< ÅŒSJ>ê}7¿BåØéãsH x²¾ ?”“cÞÞHø‘Ø#p‹Ö¨½"¼B'Ñ¡ÌG[ ýÃl`#Š×ÂÃ`˜ôÃÐqbõj“yTøÃϪŸáŸ ††WB_AñóÉÏÎζٳÍ~Ùlö­[·lóûÔSOuÃjôúÄ7þuê”høð⸸*ëO°ùe—-[f{ŽôðpHêòx¶·pýýýmöô§o¸55~.°ÏÍ›—Ÿ’âF¡t“ŠöÏ“Îè7ÍA‡8äeÜÚÚÚ+/_|õ­ä[èXøÑÂ^3¤Ü¬¯_{àÀ 11y))=œØõì³ÏÚü²C- M ~¦BGGGÛì799Ù6õõcާ¥•OœÈ^²Z™õ§KúK¾=ظW•±/µ†Í~apmö[RR’˜˜øðþ˜1Ë–yåç§þúkêÍ›’©S¥C†ôÕH ·Í#Ô°ÈÈHÛü–––ÚìW*•ÆÆÆÚì7ÉÖmíáûÞM_µäå½{As3xùeðñÇtzÀ€å gôë@åvH€íÉãÏŒ·:Êu噹~êT¯ÌÌ9ûö‰V­R ü‰j,Ë6 …Â!~û¨ú6W’ÞV8­&%='§øùçc-ê¨XÖó×ßoNú#3¤%¦¡Jã’ïÚM ðbWUñÏóûì³3dÝëÖ[ €'ÑØÞ!‘€'Àþ&L«V¨(%;³9aóê|óTý$ßµÄD¥6ÌŸÏ1ÂgÛ6í°aÍsçê9WN‡g^Ë–Ö9sª6m’þñ,¥´¡iªtÐ)tQø’|+òxŸx¢$5u)oP€Õpž@0Êýlws.] 8v ‰àñÇÁáÀ‡¦Ï óޘ=:nçÞþÓOо/ß¶—¼|9”¦Ù³MhÇ'ÜÒâ³{·»\^»eËÝ·î;>‰=®%ߊ‘J]jqÌ`×½/ƒ,@¡ÏJÏ*(`æäP.]‚hå¼y±‹¡hA8œÄˆÄJ¾IZZ˨Q¼S§Â/–.[&q¶Ö30±Øâ×^C§i#ÉïkXÔéµ%HïûÖÜfÞ¸Á¸v *½zÊ”–)STË–AkIÚ‡ùw„=ÙµiÆŒ–ädÁÁƒá¶Ì ÈâÇ Øs.]âîØ-ŠŠ]»P!É8 ‘¨:Ç€æþ°Ø²@ï˵¾žuå ='þ©NIéPz9'EÏáÔ-Y›°¼¬,hñË-‚4ƬÃöШ¨þüs”(HòE.È̤춈½•¥(ñ{#óŒòrju5=/T\¬5J5|¸ìï×ú¢­p.%ü óç“ÓÓ9.XÇøecÇ¢hq¬eÏ9xP;lØïÃö$ùÝ•Åß»·qÉ’òE‹–ŽÑ_ÿl¬P[P ðô<•˜¨&‘\,ÒÈ:]@}=l\S++¡5ïÞÔd•yÑK/¡‚‡pyáoš1C2q"Ôÿ>¨¶ô î¶,íÙléÜ–ù týÓÒ[]ìŒ hÙ×!ÓIþ)j*’¨%±Þ±lÛú »ª*hûvulì­íÛû÷MºÁ0uÛ6èðÀH"ïÁ>x†BÁËÙõõ4±˜URB’HZýüÜÒÒ´¡¡ÐÐAE7LTª$- ^ÑÑ霠ÅRÞeÂ/:¸s€ 64ðŽ£Ÿ8!_´uã#Éï’óUç_¹eÞX1îNÜö‰Û=Œ àØ1fnnÍŠò~W¥êpùõ×A¹¹J??—«àpZX¬)ƒ¡!“;[ÿRƒÔì‘Äíí³|´Ú¤[·î„†ÊŒ¾‡J»YàårºLF“HèMM´º:(ðO1x°†Ï¿>4P>v8CÚ—­x—a£åÀ¯÷¾á¡e>ý 4¢¢‹‹CŽ%H¥-s犞z Í B’ß•òJ«ã¦þ¦¾¶4úó å˜1E6&ß9œÊG ýå}`àÁgŸÕH°Àimå(A55‘ S,fÞ¼©Ö±Ùzã@´r©‡yƒá¿¦Lk7먎BÑ’ÉÖ þ©íbïÏÀÆÆé_| †aÎëÖu¥úT½ÞzYÝÎz±Ø¯´”ÔÚ /ZE±¸X“’bd³Õ>>PÝ 11*Kuo£®³õg?¬_”àMÛ1ÔT<`™ê 5ÞtïO´Ì§‰ljŠ»}ÛÿÖ­¦1cš-²Ã~ˆHò]¡ü¡ Öì˜AL÷¯­5«WKû°ÛóC1´Ö'¹GrŒORÈæ®' c/¯û›®°)@ÓëwQ~°~óéÄòY£!«Td¥XF­ÈСï”×;º³hµµPï¡Ã½¥eÞ–-Ú{€¾î:îù…^ôL¦ÙÍ`èi4xé¨T…"Š‹ÓS© 꺞Béþ½2›2;1AHòxÇ3/O @ó½Ãx:Æò}WúÁaW®(ýünÅÇKIa$!½G’ßCüöÓö“ÏJ.Rm}ÚÖú¸}Î/àà‚?¬$¯ìê65‰¤¶Š·Â€øÿ4RÚñôô®,õ?9 #/] Ù·Ïê¾1wnyðÝ­;z´Ý bÞc?"¢çïLj+–[¨l ð «°Pðå—†ÐÐרqïËÕ(^ú4••A›*}Ytôw‹Kîõ\2Q!ÉïÅkhµé{š˜Üê——~HÚ&µ:ªÛ«¡ÅOr{ÈŒýÑÚÑ1Þ1ÚvípÆð®îy ŠgMš”*‡47׌quàOåZ¶À«ÞÜ‘0Áo‚J®BÅC:ösµž»³ã‹/Pœô…€––І†Àª*~y¹8<¼tð`hÓ»Þ*'$ùöƒ"—ú÷¿e“' »0 û‘¤‘¹:ó:y¤yÕ{s,·“˜6N…Û•`óIz½ŽIeZà4«[ä#\™uËîüÝ•ÊÊg†<“l.žû¹Ðæ»ãtºIJ¥ˆLþ¼ÇÜ9‘MM>‰Uæ¡A/ +ˆ-Ÿ<)=’üþÑûÆ… ›ì×n%ÜÊ{mP¤È7å!Âɺ“õEقϺ˜•+Èõ‘kü?ø@;lØíçêÛÖöni)Í2ƒÇ#*j³§§ËÄ$Ïd Òë©TbqÐÌúz«Ìç%&Ö!™G’ß0D¢°-[ì¬÷V‚jä—G¡ „@8)­úÖ·çÅœÀÿû¶ñÿP ØðY¤Á`Õ{È´º:oƒ¡œJ’HW(”ww§x?­Ö[§ R(ü¥RšF#åp„Nm@@Il¬”Á@2$@ì{¨÷u‹èäü®`Þ¼)A‡Å!NËܘ¹7$7²Y»U“Jzã—³ŠÐÇ'@$‚îãþþ­B¸V;º¥å…X–üˆ)”f2YD&Ãv@‰TÛÞ^¨2‘LuîºÞµ þªVOË÷ GûÐ]a•v–Ñèa4Buçk4<µÚ¿© þ꺘F+ârž4òÅ|@Ž6ÏA’?@zoíÏwˆÞóT*ešÓŽ@81:ç‹ø¿û”S§Ö,™a‡'® > ý=!á¬u¹ì½}ß¶¶Hƒ!ÈhôÕë­ížF³çQåÊ`óÝå\æK™\5‘¨rw‡ x) ¹»»ÜÒ7 #à§ø^?Aƒ»û2ÙÜJó>%o …ŒaÃÎßS}~[Ûï½&»­ ^L“ÉÃdÞq~2ÚÚèF£À` —•yÖÕi¹\ &e25$T÷j&óŸ/ŒŒ,ÿã*¡;!w ˜Ðë+P P¾ÂºägggÛìÙf¿MMM?þø£m~—.]:€½àÉS§ìSÇÿ>Ùž¤n¨ôbõxN_¶±i÷š.Ѳ—~ÆŒmíÛ@,øÒg~‚æ´¶¶ÚW0i‘_öë@åvH€mö õ>%%Åæçþ©¾\¡xD&[ î=ßÑÜÏ«Î[T±Œ«Û –Œ\òP7snf[$môÚ¨ù/õâ‘G‚G1;˜L·³g‰÷Öû&3?§xnu¾yÂçbŸëKú¢JÃ>åÈù:öX>g:èéZ£v[í6«û×ê_{(ù;¬–ÉÒššÞ / Ú¯Â3îlß>ZÌO? ~}ï³ÞH 3‡0mhZ_ÌV„}p2ɧŒ`–ã@%Rß6&?“}AE¿=ÂCp.Ö‹ÅÑJå‹‘‘vž'èhÞ¹€tVúCõþ®%7ÔFK®aÈAË—ÛíÕl'I~·a•ɸëÖýÕчUÿó§¢e¼,t0±2e!™ì{¨÷«‚ƒí¿.ZöQU•R&35í%”GáLëA¹_}¥xùåŽmvhµÄÂÛw-þúF”ga¹B‘ÖÔä½7W$ê­¡O=¡£el$ùƒe™œ¯˜8ѱÁ0R©7BG[HHãc¡ „@8ϨT44¼îÀ}oHµµz.¥‘V«s„R&c}ú©h`Òôaz:A­n'‘²%è-éÃâššõ‘‘öœ¯÷É/.6¸Ð>»dåÖ.}#fJ‹&(ȽÓ·³¸i4o76î ½»Žƒ hµðÓ4ðç|"Î-ùô‚÷–‡wéwFåçG+.F¹À>Ì-[òX¬oïËî@ÉoóòBÉ@’ÿ8Û··,^Œ© Uu­ÍÅDK³@`Ú‰ðó VK’J ¡¡(EHò»ÃãâEcX˜6";Aʸ‘1íâ<E7¡ „@`¢PHûøc•W¨wC¥¸¬šã†$¿;Xß|ÓòôÓØ OçÝ÷~«Ùƒ2YÛ¶©×­3a`’ü'ç?I«\5„¶#» íO‡@’ß­‰¯÷óÃN¨DêD»³ ÂÕîìª*”‡ B;q¢-8X›œìx;Á ý¢î «ûLÍ”4‚éEzÐÄ—¾þ:ÖBõö¨·ÇTŽaê½ýöìQ½úªÍÂE °A*¥}ü±üûï1a'¨é¬t¦( º£¹he/Iþ=d*ÙW—¾ªWüeØ_Æ·ñÛ¸\Lâ[aÓØs†Ì5úü›Á?þX¾hÊIv ÿ½æõ×M˜Ù÷æ[I‚àC³äWïРäA8luì﻾ï³êÏŽ¶]½€ðÛñÖY³0}ÕOŒ$ÿ. ¢ÃM=}Bñè3R©¥¯¾Jnh´};E.Gù p¼‰ÿÍ7Ú_ÄNxLTªé^Uf D „@’—§žžÁ™ß½KHLms†1r¨úwV¬PÆÅE¿újíñ/nT]D¹ p¤ÒR÷²2,ÌÚëLí–-†ôtÍâÅ¢§žBi„p ØË÷ãø}>çsèàñ…zìX'ŠÇ†ÔÔ)E[¿·ÀºÛÓŸLø«ÊÇe/ÂÎÐöíS¯Z…µPi}}•S§š ´á.ÂÁ’Ÿmû:Q›ý–[èæ†×¾ýö[*U]Q˜ZºtéCîxšæÿïÓûÛÌc ½€ÓÓÒp•«8ÎÖ­[móyäÈÛüÆÅÅeddØæ7((È!e¡/~Ó”¯ò²·-<ð§bS±®]Iˆ Ò€gø¯—ÈËë|Caa¡C"ªÌ‚Õ=¥´”ªÓ®¯ï¡ß”””¬¬,ÛžK¡Pœ.3#¿öñKìK­a³ßÜÜÜØØØ®~õln6†'$8™Ð5`ÙA ¸ðXÀLØP°´d¥¥u>>b­œÁR(ådrg&¢IÁTPuTššvÿ¿*‹ù|þýßóL¦Ñ E1ƒñ§­'~{B7~Ãõú(•ê"‹%!xƒÑhôõõµ9"¡ê÷ðN}»¾A×À$0¹¤»s³“’’l{hcc£Íù?‡”#G©JãlýÙoê¿1k$)å[]JýÂ…ÝÔ-ö'úÞy›$ ÅïöíèÞ¿™ššjÛCóòò’™‘_ìWX\—Ïil” î|¶í—XWXæäî°\VÖÅS(ÁJå`‰„«TzÖÕÉüý5Š”ÁP“Hë'ÕŸbˆàm«ËG6²D¢‚@h±¨iWš Ew}NU*Õr¹}F³Û[v<úI.÷Ý””nv`¿d¶ÁÜÚ]ë¹6˜ ø£JUeuähsh益V®Çf8•l6£±¥±`QòYB¡" À)£³‹89J ´˜;ÍP8t:£QËRµè=ÄY1/Ç:h:Mc^¾ •~j;-/ÖXÔ¢×[‚Ÿ¯çæjèô>·]¯w³U’»òKÕj;ýÏ ´TªæÞ™¤Ëý©½­ÍØÒbu«Éd5‘[6*©•H„—’H”÷DZåRƒÔª÷m ’||’ÀMØ'ß‹)ÓILNÐy°ä3™ôêj”^$ù†]QQ“˜èÚñc«}l"²¸&®”`Ñó ²løŸ'ýY;Øy&ÓÝ.‹#\£yéäIë7âãozx<¸–‘H˜<ž5T~ãZ[Ÿ>}Úê>ͺ6–Ñ?a;¦Íd°ÙÐM7éz=O¥¢Á6ŠNGµ4e(j5üIG§Ë8­¥«CL§Ã6A9“)ìÍä&¢G˜{XE›y‡/Éf|ËÙEß%×Éç],“Dó°H}›þšª’ÂâK$b¥IþïÐ**0ÛTïwFÂèªÑbŽ˜¦§ñÅ]Ž»wôð[°¹ KO%r8¿xzvåKL"ñmµò»ò[ÎåJ-¾Äçg3™ôûб|¶ÑÈ4}´Z†ÁÀ×hårØ&˜ÞØ[:KÑÊ劽½,–ˆËÕvñ d7ò‹Ü˵ål{}*̸E@ÀËçäŽóëÖa3„µ'µ'? ÿñóžCI†@’¯×éÌâ{}Åx€¦¦ª{½A”Û®w éû£å–¾ýÚô‘BŒ—K¡à76†/.†_J£¢$~~ujpIÜŽ‰{<ãÙÜlàñ°i*@ê½Õ]£/ŒR $¿’Ng@_8¦Fóðñðd1Ü}”ÓÚê-‘ð›šâ.]‚-=‡#2Dìí]ãç×Òňo`yÎ/Ùü㱟U?C÷8 õí#äÿ]©l³ãüsöº¯’ààŽ@P}=¿±1Æ2¥Ê]PPµ¯¯Ö¡kŽãs~,HjM¢ºSG¨=ssÏΜ‰’ $x … ~H¨¨ucÚ4”<ˆ· 2÷Œk•ÿÐ’’1{÷¶ É‘‘zÅÞÀþœß00øyg(jv62ôHòÍ„Ÿ:E°ì¸ðÙgeÉÉø™Ä‡è‹üß„òŸž"EVU-_nˆŠRޝ6 i?~p–9¿:2¹`öì䌌_W¬Ð¡~)Î%_íåe‹eŒŠ2ài¢ïTùø4††&½ù&£¢‚uåJðòåºQ£Z¦LQ…‡£Í]çšó[æ;*+ uï#ð.ùE&Pe2öµk×ÿö7=’|„M¨ÂÂàæÏgrNœð~ï=ù¢E-ÉÉÈèwU …&,̉|qÒ¤I?ü0ú·ß %ž`ëð\(ó•cÇ*cbšœt÷=–P ZóÊ+ÕŸ›Ïf„F¿ÿÎÔ†-®‡ ªŠ$•Zm}gáüœ9 ± ?E¯G)ˆÀ©äC  ©µ% ¢ßÚ‘NÓŒ»v©ccý?ø è“OX:¡ÑGååE®_O½x1uË' ¶ŽLþmÁQoû©õeÇômHøös‹ô ¡O”ËQ ú•*KJ‚—g^žÏ¶m†ÐЦ ´¾h›^§‡WTduÐrr …sÍù]Øð3·˜J6\δ¬ÎÏ%(_’o¶ò%”0ˆ¢Cø¡Å¯6¬yî\4ÆïÔH¢£­s~5))N·Æ§P[huìóÔþíØ±D¥²2-­:"Bá 5Hò`åË\4}1 Â¯ˆå\º¼|¹tÙ2‰³XèàNRá­·¼/^¼°r¥Ó>•V*+…ŽÑžS=?‰/‘D\¿>eófupp |/ -(¨mM†paÉ7·Öà…^ @Ƀ8LT*Tzå°a‚ƒÃ4<ó Š'E4h§¼Ü„I^“Bé¡àÞF=bOH,&îÝë~æL{\\Û°aí~~mÞÞ°ètØÐè5ÙEÙ¡‚ÐÁ~½Ù³_"/‚ØXÿ;SS óè?¢Ö©Oß:î…$¨}|r¹ I>bàÑs8uK–° #?ýH`áB'Ηˆ ­®ÎIoû?Qç秉‰¤¦‚wßu Ý++ÝD"bq±{^¨¯WSÚ–Ž TÁ;Oòÿ>Î7©Áh÷ð€­ø tÓär³ºwtX¾73kÈÍ5»‹Š@”ê½uÃlHuµUêý³;Ÿ=ÐtºÏ<~&m(îº÷ˆÙÙÙ6{¶Ù¯¿¿¿T*íê×*•z玔ë:'¤õ%’öá÷ޚóõ×ì?Þ7aBS/»R'Nœèr”æ ñ‡¼,—Ë­ëBשz}rCCöTÆ ñÏ&ŒùwÓ»n~ ] <€ùbXõ€p¨ïtdbúýÿDtt—™ªë‘ßà`u§¿4÷ážžBTD¢š@P¹›—’µ­nnJww% ww—¹¹‰5nn÷ÿ“[·níÉÃ5 MÖ ,«û¯;ÿQ1lذS§NÙö¾)))YYY¶ù¥P()GľÔ6ûÍÈÈHJJêêW&Î9q¢½ëˆ~§•Dºòü󃋊^Ú³'ÿ¹ç*{¹µ‹CÊ‘£pÈË–””$v½‹>ùå—±½Ç~?’ßÍÕ»Jþ]ø®g¾æð¿{òÿ6íàe|~Ͻ€Œéô«u•B@@öð`·µÁˬ&“‡ÉÄ6™üÚÚèF#Ãh¤™L<•ЦTBkPM&‹)5‘ØH"5ÉF$'>¼ÓÚèn 3…UÌËtÃA¸¯eÍNt×  ‡’ššj›Ç¼¼<‡”#,vìkýý)—.!BØŸ’èhɪUÉiiX=Œq?ú‰)r¹ŽÍÆÅÛÖ°€Q@í?×SO,ŸCÑ"ºödǽ>€ŽGçÞwÏP‰Õ³Ù±F£§Éd4Âf^Ÿ,—{)Ü›7áO-<^Ÿ/a0Ä4Z9“)¼o§mbq¢db=Še`qtx\ªƒEÉ×s8m^^ä–´z aÄ<Þ¯+V¤þôÓ¸º:´ º³  ¡Êdx‘|«ê×öÚÓ{Âovô_;£ZóðêÔ>ðòò‚ö:ÛhôÕjC ¾Z/“Mol¤¨ÕÖF@-›]Éb{xXU?¨5·%…ˆÍ`©SR¥¥zÔ·pˆ~XvFwä¼ê;‡•ïëK‘JAHŠ Ü"'åV]·ÒÑ”ËG–—s$‘Ÿ_=—[Äç—zxôd I¾P ʼtI†$á8 Øþí·I?üp~ÎtÎ)ÆQÓ««ABŠ Ä–m a ²µ5X¡˜tçÎÓõõPþË||„8ÛÆ›ÁR…‡ÓOœ hµ(×"ÈÅI“T|~êO?¡¨À8*??Zq1ŠD÷-€+Π M#GþsæÌß ¢ëõääÌ[·6îC+*ðpÄF%ßD¥êFb”—£lŠp¸êŒqGŽ ¨À´äûøPJK‰ÈH@ôFþ3"">›1ãÄêÕ2?¿°¼¼™ï½Kz¨K»åŽÙµL™Â9qeM„Ã9;s&I¥J¼pE–QÁª¬Dñ€è- &³$:ú· ŽüãááPû­v?ßO{Á®ä+†¥\ºDniA9ápÎÏ™ãùr(:uÃ(ãâX¨oÑtdr‡ö«¸Ü䌌é_=¸¨È•:üݱ8ù¢EdZ!°Qœyþù„Ý»ùè˜G¬"eææ¢x@ôKy/><ó•WnNŸî]^>ó½÷/\`)•Hò––ädvFšÄ‡À &3ÿ¹ç`Ãs|œ²šf³žžìª*ˆþ¢ÎÏïìÌ™'V¯†î)›7þí7g~LK¾žÃi3‡gëÈDÿRÖ;ü\—ž©ujKŽ4ÆŽõ¼v ŢߛûW““üãÍ*üÎÛîÇœäk Úõïã÷’ôtdè#°Ãµ±c½ üëëïÿ)»0›ñ#ù£ä«eWQD9„æ#8‡£yûˆ@G&wÿÌ÷Þ‹uÎÆ%¶$¿B\±ø—ÅcÙw}_‡¡/_´È+3e8VŠýüù‰ûöÝÿÓ[ÇÞ‚Ÿ¹ªÜ÷O¼"Ê!©Tå„ ‚+WPT TøO¬^íYW7î½÷%%Hòm'³8óºî:t¼[òn‡­/™8‘ž“Ã@“¥Ø Îϯ%"¢›5{ºÅ’£M™ÂGb€Q0™ggÎ,úË_È6P>ùÄM£A’o ~ÖsA<%žJº{’‰J­Zå³mêÞG`„ëii!Çÿi"ÏÎ…;—…,[½ö½9ï¡(r*ul¬W~>Š Ä@Ó¨ùî»6ê /8‹¹­=ög ?ë[ëgGÍî|s1 S§¤xef6ÌŸò müªiÓ†\¾|qÒ¤Ž/ÿ¿½3‹²Úûøa˜f€Öa‘U@‘4s¥LÍìÍÒ4õªï›-fY×Ê{ËÊì¶X×ʼÞk‹åž”ÆÅ…LTPPv”†af€a`Và=ÌáŽÌöü¿<Ÿùœ™yó$…i9Tz(_›Ê6µ)Úô fÎtÊȰ !}ãÐÃ`¨Ö¯ï3†¾bI 0Ûë$gffÙà¸nnnµµµDl[·îÝÍ›íÆŽ-7h3Ó£GBÑîÈ–-[4J>‡½½ŸOK;4gN!—knõˆdqIüƒ³sfxøºß÷‚ü€©ù ¡‡ L —Í}yîËÿ|æŸ7é}Ÿ†òòÐ|)0¬ôßΛ÷XZZ¸ùmÉA²Ä=ÎãéU?äN}`4"ÔK]$…9Âd¢¿ÿ½öZ2Œ²ŒK%›­W}™ $xTÿxtôªŒŒñ°».`RN äyᤃ¹vpÑîÝ«òòÀ=Œ¯ú‡æÌY˜‘áfNcøI–› ™.._N›¶ ;{¾A#`X؃çÜ9 Z~‹p„„|¹4+ T02…\î…ñãŸÈÌ´×h@ò‡R{û­))BáÆììéBáÊ’’™wÚïFŽóµGE‘JK!)Ì–cŽŽÇ££Aõ¸¦>>Mnn .ßu«­RA)>@òK™ü~\\;“9ïÈ‘èÌÌÔŸæ77C9ŒISLŒ-ìÙjæ–×Å&a_t´Ck+ÿN½Ñû0ô›P|ì;·$°8hµ6==ýo}ÚÚ ÆDìëk{Ûô\À U¦Q}>Ÿúôíõ7änÐäÉ¿?!rùÊ’’·ÒÒhZm‡·7þDéî~ÚË J`L:ÙlÄã™ó’[€žR{ûIIá55Ï_½Š]HÀ841™ÉÉó.^¼åóÕ¾7–“è5Ñ8WB¶ˆôR¨iyi80'zN¿Ø?R\ìÔÚš²}Æ î$—_··o#“¡„F¦kêTRUU747Íl+Þž<» ¯:UïææÙÔÔèæöÉØ±2Àˆ’éãU\̯­Í°zÏö'¶ó/ñYtVrx2HþŸ|püƒ®}€¯_§P,ÉÎÆbŸ~<.®ÿ¬ô—¡`&¡;(ÈöòeíäÉÁW¡¡‹i´$Ý2É••3]\Žóx,Àˆr,!aaFÆe9…¢ÿ„Ic>1é c^ƒet쟜Ñ~¿öúÂÂ|/¯W§O‡* ˜‘—?f ¶y´Æ·¶Øt‡ üÀÈSÉf×øùM»~Ý„×`’¿$|‰>ð4wöË11 ö€¹ÑÃ墆˜oæ8hµókkßKOŸ]PpÉ×÷š®›°:&&L `N‡„Dæä˜pš¾tì“‚5‡®&û®×<ºh´_äoOÂþ€9ª~d$©¶¶+8’¨m®ýòô—8°*y•^ìS««c «ýüÄÅéö:11V€Ñhb0®EFbG¿$ÿv°ÏDNK#9¢~ùe¿èh(.€9Ó=v¬H„@ò̓¼xPtÊš‹ŸkjšzñbIp°~¨/$`ZGÕO?]V©LãB›³sO_±Â¦½]¹kWè=`þ’D2éS:` 7âlžôioÇbÿUh(è=`Ž~mp°kI HþŸØæåÑ–,ÁνúÙg{ (%€ùÓãêj[ê™ [ǯ¿˜ýÝ_AìóáRPûéÓ&ùisìØ§ìßO>rDµw¯eÍržÐ„ z·ÿ£É¹!TÜ{lCˆ­Û‚å¼q¯ÊÀߎ ¡+„ ^òíìl¤RHÓÓÙ‰¾ý–ŸžÞ±áͤ1ÿ¾£FÃ|(ärç•–¢ÚZ4`Ž>%ßF¡ ~Ð;ÿ^¹k—e9÷ñý!&BO ä„Ð}HÐ}Œ~kGÓuÕ ¡P#^Õ„øèÁ¡p]Çùªç %ŸËµÉχt01—/£­[Ñôéè?ÿa2™`4Àh˜'b>ß++Ëø’ocV Þ/º€Ð Ì¿M½só'®Dú&þ”œD!gMíùè^uèÂøUŽP#B„*º:°E¿!ç¾ðO:‡8U§Ñ'ë°µ„Q­†y¦ÿî¼ÐN0Ãg4n±B„Úo·`4Õý}@š¯òl5pµïèè0,î¬Y³œoºÙµúÕÜÜó¾¾»ÝÝï÷àÁƒ&ɡ͛7‡†ÞµÕKS«çnÙB®Àµ]|ç*ÿJyåëõ¯ã·A¶A¿ÉfûmûXWË7¡wÞy ßÍÌÌäóù†]sÃúõ¼O>Áî^P½þº®wÚ(8çzr¹PHª¯·©ªêuOy¼îØØî4šø±K½óš&P'¬÷[oÀï.^¼˜Pµ÷èÑ£“&MÂÇeËÚ·oïâpWS)·IÚ 'Ÿ|ÒÃã®ós½”Êå99­löž°°Û—ÜÞ¹s§™·Þ"WU™§Ñèzåõ+¯ô‰ÿŸvƒÔÔ„ÚÛo±iÎ6¾ FãŒÆì]»Ô\ Ýh˜EÇ~´BñÒ… Ç""~tv¶ÐüSQ©U¸SVVøðÃõºe=üíý·{ooR5ÚÖúŒö›ýhïy±±Æ¼ªB|I3göÖÞñão<(a0îVRl$Rm-©¼ü‘ã99ma×ìè^A3%j5¾5h’Öívv¶éìD^‡¡0¾µõΜù#&æ Ñ»I‡h4Ó¦±„Ââ)SÌÚhÜl7ºîd7f•—gKm«;çÇò÷T6xyݸ/ÚädJiiWB‚1Ôô’oz¯Ç±®®_ïõð˜<|Üxch£{¨¥jЫ¾÷p¹]øˆŽÖ,\¦P4¾öZhÎÇ=ßÕóùÅqq2 ªèýÓÐÑà32ókkcKK¿œ6­ÔÞÞâ.Þ5??kÉ1—k¡Fc Ý[¸ðó¿ÿK¡øçäÄìÙƒíFyTÔÀ[nAIûã%¡$?@­^sõêQQ¿89Yzþ9‰çͳéb0.yxt¤¤°ÛÛG•—?´m[s\Ü>„ÿ>éæà`chÇ5`+KJ<Äâ­))–¸&®\øÕšDQN¡”…†âƒ¦V.*JØ»·ÃÃãê´i üwDlÿê«hÝ:cþ¨)çåëŸßgZÞ{64tŽe}}YXã ¢£ÓÞx£ÅÓ D^TTÀpÐj7fg;µ·o¡ûe{¢ˆ«Ìl ±ÝøyýzAd$ÿ“O&ž<‰Pho÷¬º=¢ Ê·F¶‚<Ÿ»©Á¾lÙj¹hh’Ù–-Zm—ŸŸ|ùrHaäÕC¯îªÛ…ùìY©T³p¡ÕdX¨CèvïíŸkæo•Í¡’·ÚTΣFüü³ºSúè\3”Ù-ÙDÖ'™¬Û¼·r±8TÆ+£o,ûªì‰´t½¿áù¨"µÜÁ€ª¢RË~ø¡3—'P'Üâ8“n’%ßxõÇF"¡lÞ¬Ú»×Ê2 ·Ù'69µð\XXÅ\nk` wMµI×w0'Éokë±³ƒt^ÞJ\·ðð/'z˜õÎÖ3Ö®©©ÝŸPLYhhðo¿ý•µ(›ò°+Ý•hO7nuô»J·ñL5uï^íš5ÝÖ8)ÅN,&fƒS?á·ß_q}%È6h}ZœS¡%¿µzõ‡ßtìØ1vö†K«šÂNioWxú*>?ìjq¨C(Áõ¾×Ë5Š$íçŒ$ù¶ee¤£GµsæXežQårFÌòŠ} ‹5Gá¶%pËòQˉ6 áVÉ‹{ cx¥ñÄ +{¨‡yñ"‘—¯® ôÌÌ„âm|Œ$ù”/¾ÐlÙb­Á삘ï’¨K½MÛcǺ`½alBI$ä÷ßWmÞle÷ES«5AADÎYÜÜé5 æè#£/Ùi É·Õ-Ìþ@»3Aƒì–WuŠžñã!†êŽÚ{¬nSšJ¥!|ÓPêaܵfÍã/Ùi ɧ~ø¡fÍkÍ3h°ãæ¶_Ð`·•Hº¬t—“pc‚ÏŒV‰ÔÝÝ©¾žà‰`ü%;G\ò±‹ßãìÜ EÜŠi äŠDO’XÜ=j†aÁF¡ ìÜi­®û „߇ZâââX^NðD0þ’äÌ!tÉ~úé§÷=gÅ‘#9±±Wo>3Óû FuuõíŸ;wv*i´;~Õ‡‡ÇPnÙà¸4-''ǰ¸áá°"r«·7G(´ ·àE”àŽëààPXXðûï8\QXh´üåóù&I«¡毿þz0§%çæ²»»â$Õ¥*æèÑ£–X®Jî4Ì%J(DBaÉ=GÀX¢Ñ Ôh4ƒBt´qêàÈvìû\¾,˜6 ÖŽ–Ë5òæÈ… ÈÅ Ã0ØsçÄ3g*¬t­‹€Ü\}ÀåÈ‚€éærm•J(ðÆd%ŸªR¹gdTGFZw :56RE"|³„–|''ò¯¿º&uv¢†äã6eˆ`ßýàÁZëàÓÑ7V_ÔNà'ú?ýD9yÒwùrzc#‘ ¼MUU]…”|׺:Yd¤Úª×¨ñ+, Ý´‰véRâG\õ»cbHDn°×Ö¢ädìa°%%m“'+¬w9ËË •«W«CC3Ÿ^EÔõ<°Ì;¼ùf¯s'´ä‹ÅÆ\±f%ß=?_cݹÅí[BqîœLFhÉww7ææfGE‚zÃb7NŸnHH°î{,‰Ñ²Ùb.qךí rÝöö„.ñ ȈKv¿äJ _¾òòÖ­U™õÖ>a]2z´> ˜4©ƒÍ&l¡¥64$VFqëmVÄÀ4àÞ°E"rk«žX;jGdžº;W­¥¦×Å×¹IÆôò‡y'=U—êÕªW{CZôŸ€)Ö¾ò|Ux¸Í»ïú:ôÇ‹/ª‰ºÌ>I©t]»–”›Ëºx±‡Fk%^¦¨Tèôiôúë`ʇˆKa¡kïÈX,ŠTJð¼–……¹øû —.%ìˆ}¤[RºÇ¸ÃÝF°c_Áp%Bž5ùúvÓh„ÕûÞf£TJê„L&äHVSSïƒ|ØPÇPD¢]»ö•î³¹”!3† wMS« žï$‘ˆÈzß›UUÝcÇZ°äÓliïù½BIÕx=ì6lPóxÊuëôaùÔ©DôMóó‘µ?~QÞ¾òö·’ow wþ'°IAŒ}¨;Gbµ·<ßm¯\!¸äÛ…=<£î =ü^~87üè´§{b‘] F!üòò¢ ´©©Í'N( xûŽ99hâDPnÃPiUEš"}¸Ô‘(“Ö:ÜÜXmmDÎwjk«fút‚~Rqq·ŸŸeK>F?v }ÝDîÒ¿ ­VãîNÀûNR©´ŽŽˆÀ£¯‡LÛìÛ»=îø÷Tî,¢H>‡Ã ‰œïôúzqÕÎ%ÿÌ™nãV)É—Yû <79ú\.Ágèõ–$¡°ÛˆãN͇Զ61¸øC#Å7åhüÑô¬ oß ¹e¡¯¯c]‘3"+ûf<Ôf =‘‘=Æ5›##ù­­®®ÄÉ9…§'H>)7·›å¢E"âŒ89œÕ %ȃ|ŒØÙÙ±¨ˆÈ9n——§$öΓ¶……F»7R’OQ(´D½¬±·§{¥hrK‹vÖ,ÞøS6›8B5r0ÚÚ5DE¥j86GðÑ.^,w±Sjˆk9I/v=àn:f*ùöMM¨§‡@^¾³3³¥…Ð’/‘hýý xãI$ÿí{Šß©êÜwnß/—Áð–ü–•‡¡nY1ЍÆÛUV¾>]Í?=sÙ/Ë*ÅDÜ‘‹¢Rõ>È ±xÉèÇξ۶ù=øÆáJÇ&öc9jm­:8˜hw¤RyÉdßÚÙéß¾´ï¥Å‹ç¤Íù"ý ð….•*ˆô4SêÚ·b7Ñ]:ù>³®¨®œ©>&1#2IOË`;‰5O©ÔÞ¿zrv~̹ÒXÛÍ;_ª¯Õ߯Læž‘Q’œŒ€aBäåU?kVCRR‡uéýbçé5Ó'‰&Å–ÇÚjmqrb¨Õ³‰1ËwfCƒ’FË´½7ŒØË— ûüa‰Lòá±¿Êø Œóë䑸§Xò)r9AòOKÒjm´ô.z¥·w„T*0î¶H&'¸¦Fò´ËÌ$Eµ3Å™CáXý-G9Rµhì­0ìP¬¢³w0°d,|ô¿=øTQÑ…ØX‰­­ß5öˆ¦ggoŸ1ƒÈ…Ü«µ•%çÌœ«{»ê»UE½Bj¤5ï<þŽ.`D¼|…“û¦Ë)ò4—´=.{®:^Íõðˆ«¨ Z ¾r¥,*ŠjCÍM½wõõ×bcA¡‡—N‡h]ƒýd²XõÎâ†ë¾Íå99éqqbï–;áʕܾIm½­=Ñ¡e#MóÉwp cU© » ¡MïvXçéçϸ Eaº70Žr9§´´Œ0 eSUªð½{ —,…v4t:¥“¸«~0¶¾>Úzû9ž¿zµ•Í>N°NÐÛ]|纺œ •þ0í}à“þ×8×0"û]Ÿ'E¥ÒX{ç'µ‡Ú¦wÑsBB’êêJCC R‚còòŠˆ´´~ÐÅ‹²à`bNÅi:˜ÞLVbkûmXØš«W_µÆîý%ååŽ2ÙÇññ/ä:•uó '&=ñPÄC8Àei÷mÒHUàèhVS“ÕgaP{_ÁQÇÌo›Oî&gðx¡eeZ-A\|Ÿ¬¬¬³ëÔÜìõóÏ„Zm¨’Ïf3*+‰œ™,ÖUOÏWJK­ì¾æ×Ö†UVb½o#“‰œ¿~-¸ÍaÀbo4½AÉo÷÷gÕ×[}.b™m “ƹ(zÇ â2žZ]M„œtò$vñ•T*n–ªREïÚU´z5ŒÚ!pÂj¸\‚oB½ÃÛ[A¡¼eE ïc½--Ý‘”Dp½gj4 §Oÿ7Åôë Ž”äË==Y55ÌÚŸ}}c ­~¶^pM µ£#'‚(kí…ž>-‰ŽiwWã£ðô$¸äcÞ=š¡Ñ¼RUe÷²²¤D¯÷²‡I¹|¹>(Hàèhµ’/sww8{–€Y«wôgYE½tµz܉—Rˆ²2¶Wy97/&â42__b÷íëù $„ÛÙ—‘aÁNm·rAýïŽÍ[SR@ïƒD"Ïë×Og3R’¯ppÐ:;³E"b:úþuuã[[­õ§œ9SSMŒm“œš›ÃvîÌ[±ºôGšf61ŠÝ‰­-V}Jg§û믓,°¿0@ÑZÆ9GŒ‰éúGø×–.m!özaÆ¡ÕÅ…Ÿé Wýs©©S§º¿ð‚eMxž_[;¶-ýz m„¦€àY9óܹʈˆëf³·øJ~K` ó‚n~ÉѱÒÛ{ÑõëVv_¾BaÌáé©ÉÇq?þ(‰Ž® 2½[oûû» zd))Ò—^âlßÎùþ{ów÷qÓä‹«W…ÂÿºMíÿÐAë@äœ\R–JÿkNÛÍŒ äK}|p!`´µ3³ ò¯«ã77[Í9ÊåSþýï3Ï<ÓªÛPÀê{â~½JìõAŒ06çD(üÇ?p€·x±½¹zPÔ†×mÛpÓäø¨QïÇŵÛpç·ÍWƧÊRõS™ˆIH}òäÏ?lVWEÑÿ.ž9Óµ¸˜˜ùÝF&ïHJzôÜ9ëXëý¬ï¾;ÿÄy„?:'Ç¡²òò¢E :Ƥ>8ØíÜ9H‡tÓéÒ'Ÿ}þ9óìYÞ_þÂ>uÊ|<~ìÔa±wþÛß:'Onøç?õHÇJ?¶u,¯“¸kíq;:fþôÓñÇ—ØÙ™Õ…ì\ÉÆ¸¸ÐÏ?¯!ê¢K:ý»)S–fe•-\hz_˜œLµuý ½22.®] CöŒL›­upp`‰Ã[Póx¢ °?Í>vŒ÷Ùg ʧLQ›hýZ|ÌK—˜Çws8ò¹så6@ „©Ñ,8t(oêTóy„o$É—¹ºj9µµRbæý%GG—ððé}„¢¢e&S"`çï;7õ¡šÀÑDÈ2¯òr¿cǰÞa#W3¤.)É£°$ÿnÂ/^µŠüøã̼<ì[ãO:gÎTŽ£4ÊŠýJ¯ÿ]ñ_ÿª&öšùwãÑŒŒÊˆˆ³f¹òúˆ¯ˆ$LNöIO—®XAØì?Îãž=;ä‰'о}§úîµ¥ïÚüóbˆ¡ë[5[­~¯<¬÷a;wfoÜzo*ꃂFïÙS’œ ],w£ÖFQÊC![ÿêÛ‰°;þë_äâbuB‚rÜ8µ–;¨Õ[©ßoÓØ¨^º´ç.ç+5Ê+uWœÄÒX9zý:ýĉnwwPúû2ÿ̃aVCöŒ*ùõQQ^‡³E"™ùuq¦ààÝ»VýÏ>Cæ± Ã`H9{¶\{Q§÷½T(+¬[ò±ÞÞ¿ë=LÉ3¥#K£ §MóÍχŠïHCkCüáJÏÏ;ÏKME©©$¥’*Ћ‹Ù‡“++SªªH“&õøùu{z"«ÛÍ 1™ÝÎνq˜LüBÛ´‰ôÕW8ÀøúkeVVOOn?›ææ°Ü\NE¹¾~½ÝÏ_2jñ‡»Kç&,>óL7áÕŒÞÓŠïgÎ4Û+$gffY¥R Jõ§NõLOoð<û‘G1øG=j’”Êï–””à×I==kRSÅ Æ»<^i°'CCC÷íÛgØï666þC7Ü÷A§P¼šž^Ðæ1…Üøp×Ñ]»Îîét 38îsÏ=gpÜÙXò.yþy««†R ŽËçóMR†r³”A,HRÍçOܼY0nÜÀ­8‡r³C¹`S%ÔÁƒïüÅ„ú&Æÿ-¸Ã)¸E0¶¤$!6B,„ܲÃZ¯{eèNøÓúÔÕÙx{w Ô¡{׌¡?*÷F_.¿qʳÂ=hãké—_~Ùà¸sæÌø6|ß>²“Ó• bÍØh‡R‘sšÍ¸qô+’|}»ûžÏ}ñÅ„jý9;;—!´ÅÝ}ymíÎÊÊoÃÂ2Y¬AÆ 0Xò4´ÚEׯû×Õ}Pb„ÒMBÆZ@™=„Nõ(ƒúÓ<¯\ÁzO?x0šË5¬ú ¥™J¹MrÁƒ5×®%j4š©So©DàG¢ê?%¿7|'ÎëŽ{P‰Ÿ.Ð…PòOÆõ½ ›]ØÚ·D †ºðᇈÃAÛ·óuý(fk4HFHÐC³z5å›o ¶ö.¥éç‡õþ©¢¢÷‹Š¢uifûùµµo¥¥)(”­))ŽÁ½„Ð÷ÆÓ{ã3êüy¬÷ù/¾ˆ¸\(¢f‚zÉòûïÛ˜S1.éZá…º×Kþ„ÒÊChÑ=ºŒP–®ú÷ ³½þzoàwÐàôÞ„ŒÈ³|I»„Ic2¨ŒþO´“'“°ÍË늎†‚ýû̉‰Åk®^­çpŽz{ç1&¼/¥2Y ˆ),, Þ>c¡¶Á8uÊ93ë½ÂÁJ¦ùÐÃåvaÕOKÓXøבRýKCý÷_ ¦Nw÷Q; zã „umåJ‹¸Þá—üý÷/ý}i3î£YEûý)ðê hK–(ýµÇ¤òf>üèìœáäôHs3~vÎÛ¿•ØÚóøÍÍQ ¾UU¹ááD{ŠJ|ø0Y.ÏÝ´IƒÃÍÍâÅôY³ºâã»aÂ`–ôî·jZ¶ Ížm)×<Ì’¯P+°Þã@vgöž‹{J>®·¸ÙNùáõ³ÏBY¹Ñ@´µÝíîŽ~{{rcãÜ‚‚zW×2.7“é RGèG´Ú¨––`±8´¬LÈãå{yí k#“ •òŒ¶¶1»w˃‚ ŸxÊ¡ÉÉ«Êûð̇Πçͳ7sY7¯ô>ܲ…ºm›ò“O ‰s#¸¦&âÓOÑ¿ÿmA“°†_òTöï±Þã°Ÿ“ßší+VØBßþZœZZí[[䎙¬ÑÜ€€‰2YXk뫹¹ø«z§–Ín¤PTÍ=6^dj4 ù…ªPdñùEw™/ËéjÙ•y+Õ_%ûV õJÿ+ÁÜúmóÐÏ?ΘAØu!Í}Qo48§8o>òfÿçÚÉ“mO¢œ8¡s"¶  ì×_ Þ{/Ú¢ôDÇþÎy;÷åìs ;,IXrËW¸Ù®zÿ}Ú’%\n”„ÚÙí§¼Nõ†Ñô®éHÆúÅÉ ÈÏ/@­/“¹(S¯]ãïaÓÎãÉ8Þæà ¤Ñ”TªR×ðбcÌÒR˜qý:õ™gä ]­Æ‡£Löpy¹Ky¹£D²èùόޥþ í£üÃæͧˆ[YYà§Ÿ–lÜHØ!Í …Z¡×{ŒT!½å[õºuô º`3CÀ<À¦uÊ™3öbñ‘µkÝ,p±™á7ýÁ¼àíô[èöòÒnÜøâK/ý«µß›FÇÀ0Köç´½ *µB7%ÉÅÅ% €ÛÑÁÐhœär½–;´µÑ”Jšn<3£ºZŦ½=êÒ%“©ÂM+]Ë ÐÙYîí]Ë$ÿÌØ£?§˜®áXïƒÓÒsr Þ|“È C™ *ãÄÜ›OnÆá5Iknõ¸\õGÑ6ntëîî‚ÄLŠ»Tš²¿p̘´ °Çåf·`믙1C²yóÊ’’¯Ìr bcÂiåp¸©­”ÓÅÁá{œ©ßŽIзQÕ@c2ýÓÒz½¥  ÍŸ?ð«?$ÝF·ñÊøóôÞ®‚€Îb&µþá½ÊÃë™!“C&Ÿ9}·o»¢£»¦NÝôñǃ†`:"¯]‹9|8wÞ¼üѼۈi¾ýüÞ©ªš_[{Ø«T5éZR'³÷ÏVkàXýC|þ˜  –Bqñî+öŒm@ w“é]D|xïyåŠï×_W?÷\½¹.| Üõ³Ï2·m[WW·ÃÛR02;ó[íí-ú^H&ùU‰­í7±±±¥¥üæf‚&¬ô,Ë`½×SÌã]¼ß }ö{ê=E¥ ß·ÏýôéÜwß½·hÞ5jl}ý"±’0&¾Bácÿú—šÁH[°ÀÒõÞd’t{ÉïIHxôܹñ­­Pª€‘€S[óî»{ûü5k`¥K§‰Dz/&fnAÁì–H À8Î}ÊÙ³ G^ž1ãÔäÉÊ›8mLL9’«ÔÞþËiÓVed )S.Ýé)5ìÜûÿ÷¿Ž99×—/‡‘ùVC•º}âÄ—.\@QQ½[`${,öÂ1c-[fbozÉ׫þwS¦üÏ™3v“&eÂŽ¥ÀpàVVæûý÷­±±0RÏúÈc0@õ‘vî.^t/.Îzä‘jww+»;ÓÏ×Âþ½\ïëƒêCƒÓѾo­±±díZ˜†gõªoñ#ì­ +‘×®…Ÿ>m}νI>êëá_š•årºaƒØÐÒ2ûë¯EO? kèAõßœ4éÕÜ\;­v·Õùa€Ið ÇŸê]íÔÂ…BÇZoÓ\VeÁª¿#)iyN·£æëÄSOµ,Ö+WúLštªú”H)JðHðq€æ£ÕRA¥¾ó|QÑ+ Å~~ €Á8Êå³²8UU—gÌ(³ö5âHæs):ýãøx†Z½1;ÛA«…‚Ü—$•ꧪªT‘èKŸ5<žÔÎî|ýù-Õ[v w>÷t›ª ’ȺUÿíÈH¦Fó~Q· –æ˜x„”–>úùçíNN‡–-+#Àš°$³ºš62ù“±c8œ×N‚É{À=ˆÐj¿hhx¥ºú4—û¸Ÿß±¾™% ÉŸÅI ’oåHlmß=ºŽÍ~/'‡ßÞ  ^ì@(!ìdY»öû׳ª«ò.¹Õß8933ÓàÈ999†E\³fÍ=¾Å©^YW÷ÌöíS/®˜0á–oG ¡!VTTdpܼ¼<ƒã%‘‡ŸÏo5´åôÔSOü»aaalj‰¹÷ L™Ìÿ?\ÓÓk–/¿åF£½Õ÷FãuðšŠ4EOqŸzÐŽý¡d“Iââü5I¹2‰ÑØ´iÓݾR#T]W÷Ü¿ÿ=+1ñv‹?~¼Å¡üîPJåÂ.©þþþÇ÷ ÛÙQU*¿‚ÿŸ~’ÄÇ_˜:ÕÖÛ»±éÊ»%ïöÞ»*ì£ ÑÈ4+6ä¡X ƒã¦§§'&&ÞûÍôé¾;vøž<©^·®‡Ëíÿ<777""ÂàZäcèð@\{Ùl¶Åµéœ‡0¤ÙgC) Î#ÌÝʆDB9zÔvï^íš5š¿þÕƒÁð¸MNÎZ8{êl±LìãòÀzopyJ\*·I.xäŒFÏ£ú~ðÁíŒÆƒ2”kŠÑÂ(®I“&Ý÷…‚þÇŒíÛ5sæt;FápÆ"TXX¨ahn䵦È'Ø'Ä+ÄŠÉl‹®´ª7ßìž0¾`ùìY’@@ûøc\zx<寿j.ìéëÉ¿C7ù zX½{s÷Y ʉ @?¶R)óÐ!§yólÛ¾ÿ¾}ݺ®cò“C“õù®ó­Þt˜û>ªš3´±±´-[Ȩ7lèöò‚âK¬ºZVF>~œ”“£]²D½jÕ=”ú-uÇúñã`1Êõëôß~£¤¥)W®Äbßu§ÙwãÇÕ¬©©UÅÆb‡$ßôî¾ò“O°£O[²D»f S£rlõØ(¶—.ávk,P­_i Þb`w_o1º–,Ñ,^ iB@BËË£>l#+Ÿ{N¾|ù½½ìܤkl)ª<¹ë×_)?ü°z×®šeË®ÅÆB±¶J˜2u÷nÛ½{»yD³fMWp0¤ 0‹AŸ5‹*ÂàÀ’$M  fgÓ¿ú €Î•+5AA&)ùH÷¬Nýì³ß‹DsëêR22ªæÎ­ ‡,´¼Ê˽³²˜=ë×+ýúða±¤éÓÝ^x!jëV°ÖíÖÓÿøƒšžŽÝzõܹwëÃÈwÅb&óÒc957‡?îwì˜`Ú´êÈH5ìžb±¸ ……î²ÈȺ„„¦ÐÐûÎæ€ÁÓíåõÓäÉIîî`1¬¿ÊÊÀ+Wœþö7õ“O‚[o…’¯§ÅÅåüÓOcá8{6ùÇ©©ÕQQ8†°à¼ã•”¸;§up¨KJ*y罦@Ò`1€{BS«ywq±KvvkXXcl¬ÍGA¿ 5K~5ƿݴi¾W®$nÙ¢w¯æ¬ô.ÕÕ^8Œý­‹kׂÙÀbƒTzߊ ·Š ½Ò "#/NŸ®¢R™L¦è=$_ÖŒ¢¤$|èÞ¿¿iÒ¤†ÐÐØŠ×lÐ÷Þsu‹‘áÜÉ[±r0­Å¸>a‚k]¶a;wb§,†ÙÂno÷¼òó‹ŠšãâšôJ)CPÉï·Öña'“á&|ô®]zušl*¨*6©îùùܬ,ìNIBCÁ§Ì5Üzž@àVUåZP€ßŠ""*ccæÍ¥É¿«Ó¯ZÜ_“›‡°†30Hì5_™,¤²2ðìYFe¥$!A2ztþìÙ0Z °,‹!‰Žn oí7.ΉGm­Wn.³¦¦5,L4ztÖ’%â›—O@òï nªãC_“]ª«C~þù뜜ºˆˆ*¯ÔÅ¥ žý þ2YHä'¸ÖÔˆF,\®`Ñ#àÔ)v~~ ™\§V_wu­„ªs›š<$·~è5Jš?sf=‰’?¤š|-6ö·o¿Ma0„‰—.ÑÚÛkƒƒ±ü×9:Be6¸¢º‹DXæÛÜÜj||þˆˆ¨ž4IN¡°X¬Ð{ÀÂ-Š¥ªTÂo¾‰jo_˜Ÿ¯·ÎÎ ÿCÄM¡ðimÅvØ­©É¡© ; BW×sÔ+ ß$Xk2™œãá‹]Hs3nZF÷»z'§ZGG踛+ïÝÚê×ÐàÖЀ͟>ÅúeÒ°>Ô4Z:‡Sêãƒ-n憊ÅX¨æ–—c‹›¹Mnn\.tRã=[Zô‚ŠÅjâñpã);  ¿ñD&“CAïAòG\K›pMÖmõ¨÷Yq‰ «©I9^¯g­¸>×9:Š Jš¯J5®±‘ÓÑá!;´¶öÛ¸*ïøØ±`ã¢À ‡áæ°¾ËP_;ZX,ì643™D® Xà]:;±9ujo×ûñýH¾¹TæB.H7CWßàbµëëÀþ¥³³V©l¢P©ÔZ2ù:HÖqûÜ®.µš§Tº©TÎ …Wk+§µUioßîå…ýø¢Q£$cÆ@O& ×|döm¯o8Éå‰R©¾°@"«ÕB*U@¡TS(dk³·ÝÝAVë¡Vû)n çôi,ðmŽÞe*ôñ©f³AãAòMI-©¿útûÜ»€ðÑWŸq# ùèÑh Å]­NhkKU©pƒ® P$ F3ÞA"áŠÝnkÛF"áº-&‘†·AðB.½ƒÐÁ!ü“µšÝÕ…¥Ý¾«ËE¡ÀêŽx¬îø+©££ÔÎNÌ`ºÓwÇ8´hü¨]>>°ë< Êhè[½¡1côÃU¡è8~ÜÛÖ6@©œØÚÊU( ¶Tª˜Fk¦Rå¶¶øÀ­l4FÂ…£Ñ¯ëÝÝøÀÒî¦Ñ¸(•úÛÁßJììʽ(„u]k³³¡…u‚Àƒä›ÈN‘Ná@JwÊDíÄÁw¤S(nót#´Z_ÆK£Á"Š+6S«µÓjõ•ÑÞ®`±ômþºÓŽLÀ¯-º€T÷Ú¬{m¸ùÿŸ×[„ütz¡Æ¾oû‡´âŠÍAÈIfë6:9 öMM µë:]*mñôTÐhXÚ;q£„Áȱ·oðö®¥R%¶¶úÿ£¦©Ïœ“Úö^QjC*T0Ìh`‹£t:ûf£1Ð-ÆFË'n 0ºº˜¸’J¥z‹Û [Û~£ÑÞg.ôv£¥Ïb Ýh >»Áî3Øn8´´ØËåØŽá«ÂŽÞŽa]Ç—ÔA&ã–JžÉbõ;6Z–¶4®´Ü®3¡á ÷f.ù™™™G68.FËÉÉ1,n||¼Á¼bÅŠµçÖ¢Þ¶)j¢5MO™>ø¸Ó§ßçdü_ÛtG ¤¨Td¥’ÑÖf§P8(d…¢7Åq ³³÷[¹œ,ïmض÷Ö²ÎÛ&‹Å7eOQÑÀ·X™ êéä¢uv¾ptìb±´öö½—ao¯e2µ †þèÄ :½ÚÁAsóÌx;„üuÇ@Ê$eÇ ŽéããFOœn’BipÙJ™´Ä¸|>ß$FcÆ@ÁÖ[ ýk¿Ñ¸a7:;):s1ŒF¿êí†Fg:Ú %ƒ!§Óko³ø¿øèŽ„FcUÁ*“ÂÂB0ƒ’ü¡X ƒãâË5UÜ¥K7änÀax ÿcÂkæ>Œ>ù¤÷ͨQ¶W® &s]4ú»á²ð=•{Îwôú ‘.‘–˜¿ׄÊm’ £F*¾ á:ö_žûr¬lo’…YŽýøc4njhÀGÕ ¸lÇ.\¿àÐTÑ`FŒ†5AÄá{–ToûY²Ä8¿ƒ+ðìq³qj/€Ñ£ae $|@òÉ$|@òÉ|@òÉ$|ŒÊÿÂ(>€ endstream endobj 215 0 obj <> stream xÚÝXÉn$7 ½ç+êZ#Q¢ Ñ‡A’A’Ó¾9´Ýî9ƒ`òÿ‡"µÔb äWIE>=.êåÛâKnI°¤XL.ËÓ×åÛ)˜¢ÍuÚƒ3 !å%g—“wÁ s,üá—¯aùñïåóòñaùð3,Å”qy¸“˜!Aúç½É>/·?ÎÖB²6\éÉÖb¤Ç_2 ‡x9A(ôæ¼µöNÿiÒ=^þ|øuùéa¯=8ã1o´¼‹v ¤á¬{=Ó²gÝý™eè«Ð{‰ü™W˰.½²‰AÌLgy ´bÄÔ'ЫR6Àª`ÕèÎ:’ÚæÕ”²¬cCt&Þžêl¼Ýú«•ˆböp$¤i?lˆY=ÝßúÛ_{!ã|ÙÒóä‘Wò@f3DÄÒðâTÅšxÆ|¢çËÞ³ñÅm ¨;l£‚[ÁÒ=ðª&]N±ŠuŒ².À Ù96ëä!ëýrrÎDÙšñ/Œd%¨úNÈy×̉B+"޲aÊ’zm9cñÌBv>ʺ„c¡K}ˆ—ÀñàñR£AøÑçxÈÞ/§€Q„b# ÉÈNtƒ[Dˆ¡Êá ŵÑFLHêž%g½u ÚÐ_Güˆà?x¼ÏËúYÔ’0¹®-BëzÊqX±ÖÙwºNbœp¿Õƒ¶zÂQÉUiÔÏ”Lœa÷;oêL;çÔϾŸƒ&óžÆ«ÕÕʪÔoÏB”Ú‹MæOXáW€hP”šnlñò¸Aý% ™¾í8À½1ˆ˜è`Zäó*ŸJTwŠË¢0y12¬dÌ *üsm‹³¦XJ%sé)Tº‚kIÅÊC¼²ž@ …6‚RÇuºp‚št¡3H$JlZmˆÆAê2²É¦tMÒà‰T»‚EEùŠ:‡]ܲŒTHzUÑ÷Û`#G¬+=­ãD•¾V«XÏS0jU©ªž§¤¿ZÏóWš¹Òi¦kõımT•·Øví½»;±TG¢Ôé2r;‡ Z·)ü*Ž[ Ý9¯ ÉòÕѧnݺ„œ9§oZݰ±Èã 7G5<Þä›]ó÷–T†G®óîˆqøu1¤§e,EÐjuö¡}ù<nÚ™·…IðT„cÜ„ÉÖ¡:®Nðý»C%æ#E®˜èãPV”Ͷu_¶“õh&øaËx:Ö¸ îëâœrHq(~ŸöÒù‡a–Ç®x»®ðê!è{šPÌl]·†¿Ò—¾øà,ÂÖ‰åQÔK‰ÒöYB¶í}}ÐÿdœK/4ˆ³‰º´´C‘pWÅ£=¶»öØN mÎ1:³nœg}Ýì7¤3¹·¼”Î&#†‘nWÇÍBˤ(ºìaÓq&ü~˜'gB€M˜Ã]ª!71þ]®~ þÑHwžRÜ÷¢1®Öt;îY .'—ƒ6x ÂQL:Š’JT]Ùú)¯‘”õ™ša•|GEvÏóWx…u£~囊"Oö;Uk¿5¡ènóÍg¤ÞÛ…C§ -ßF¡ÌS–r•ä×úû€DW·¥_Ý»[sÏû+Uƒh3ú©Qj1±U=ï¨á ˜)ÍÔ»Ÿô튩7ýDÆ—Ü+ƒÐj츹ÑÂ莮žin…¸ký£omÒó„DKeqõËA„CÆu-8± ºüµéòóåN4€i•–Ï#›…í½¯»!žûƒ«NšîØûís¾HÊVßãæ±M„5{;õÛ¡N„áLÂDnÑ:QÒHgòcRo×%Å÷Û¤èçÿÚ8&óPSÊ ‘¸wçSê—_Ïþ³Dn_|Åôyž‹öx®6žõi#þÖÞö»‰,ÛšÂl_|äuä ï$u°ù7ɘ¥÷ €Ôæ"·eŸøªv¨ endstream endobj 221 0 obj <> stream xœí’yT”eÆŸëºqD\)ÍmrGPDQ“r-rKÍ4„A0ƵE´0tÌÄÜÓÒ6wQÑÔLm_qkWK-Ë%SSÓl¾:}ëùþùþûÎé>çù÷Þßs& ÀMÊr&evä¹²œŽdƒc ¬×ÝÛÀxÂÛˆÞÆò†ü¾ß7¿a½7®6² ¶Ö¨`IÍ îªeÑ$X`ÏÚá!* 0´†¡)bÐ;62&2ÚÚ2~’ýï‹ì£'ÛS2³²³rsí}#í)9ÙÙ¶ä\‡ÓžãtÙÇ;ÓyöA޼qùöœ {†•Ι˜åcOÈs8ìs2\SóÖ¸4‡3ß‘ßÕ–˜’doèp:òR³í)ãGgg¥ý™ ·OÌreZ3œ®vŽIiŽ\WVŽÓžêL·''XMÿXúg}¤­Wž#ÕåHÿ£±"—“7ÆaoéråvŠª•Q‰Ìψt:\á¶ÖT{‡è蘈 v¬dl%;U²s%ã*Ù¥‚í£+Ù>ÂB‡×&ù?–¾J¶÷3&Ú’µ úWáÞí=»›ïÖnïÅ0O¼ožÏzkFZßžy~ ÏîÙ[é¹ËçúFXŽ/ÞSì9ã,»Ù Ì[t½yQPèµi%Þ3%ØtÎÛïœ<ǯ3,Ýæ9éÛæ°…ú·úöÌ\ï=ºWOÈ3Ð6Ì:u‘·Çâå‹`!a1–`)žÇ2,Ç x+°/áe¼‚WñVa5Ö`-Öa=6`#¬ÃÀflA)¶b^ÇvìÀN¼]x»±{ñÞÆ;xïá}|€ñ>Æ'øe؇ý8€ƒ8„Ïð9¾À—ø _ãÆÅ·øÇp'ð=~ÀIüˆŸp §qgñ3ÎáœÇ\Ꮔ˸‚ßp×à×q>”ã&~‡Ÿ† )0A¬Â`V¥ÕÂê e Öd-ÖfÖeoá­¬Çú¼ ØØ˜MhçílÊflÎlÉVlÍp¶a[F°#Åh¶gư#cÙ‰Ç.ìÊn¼ƒÝÏ;y{°'{±7û0‰ìË~¼›÷0‰÷²?“™Âû8€9ˆƒ9„÷s(‡q8à>È‘Ň˜ÊÑLc:Ìàf2‹cù0³9ŽNæ0—0ùtq<'p"'q2§ðQ>ÆÇù§²€Ó8Oò)rŸfgrÝœÍg8‡Ïr.‹9Ïq>p!q1—p)Ÿç2.ç |‘+¸’/ñe¾ÂWùWq5×p-×q=7p#K¸‰›¹…¥ÜÊm|Û¹ƒ;ùwñMîæîå[|›ïð]¾Ç÷ù?äGü˜ŸðS–q÷óò?ãçü‚_ò+~Íox˜Gx”ßò;ãqžà÷ü'ù#â)žæžåÏ<Ç_xžx‘¿ò/ó ãU^£‡^^ç úXΛü~A” @©Š‚UU6USˆª+T5TSµT[uTWaºE·ªžêë65PC5Rc5‘]·«©š©¹Z¨¥Z©µÂÕFm¡vŠT”¢Õ^£ŽŠU'uVœº¨«ºéuW¼îÔ]ꡞê¥Þê£%ª¯úénÝ£$Ý«þJVŠîÓ Ô Öݯ¡¦áz@#ô Fj”RªF+Mér(Cc”©,ÕÃÊÖ89•£\=¢<åË¥ñš ‰š¤Éš¢Gõ˜×šªMÓt=©§T¨zZEš©Yrk¶žÑ=«¹*Ö<=§ùZ …Z¤ÅZ¢¥z^Ë´\/èE­ÐJ½¤—õŠ^ÕkZ¥ÕZ£µZ§õÚ *Ñ&mÖ•j«¶éum×íÔÚ¥7µ[{´Woém½£wõžÞ×úPéc}¢OU¦}Ú¯:¨CúLŸë }©¯ôµ¾ÑaÑQ}«ïtLÇuBßëÔúI§tZgtV?ëœ~Ñy]ÐEýªKº¬+úMWuMyu]7äS¹nVû_ÍÛ¢Šûز¹‡æ»Wšå÷,0·ß¬’ Ìì³ ÝŠ -›áŽ .·úâ¦ÌèSôGtÇl¿‰.±Ø¿NiŒßï8•a¹õ—ú†yšùjxâû³¬ÌZ3´ÀøM”Ub:Êô›þV‡iUVæ7q¥1+ý¦¯õGǃÿ«Ù_ömÒìà endstream endobj 224 0 obj <> stream xœ]P½nà ÞyŠÓ!‚¸]"!KUºxèêö0R 茿}Ï8J¥pÜ÷sú8yé^º ÈJ¶Ç>DG8§…,€cˆâÔ€ ¶ÜºzÛÉd!ÙܯsÁ©‹> ­A~29ZáðìÒ€ä;9¤G8|_úê—œpÂX@‰¶‡žÇ½šüf&YÍÇÎ1ÊzdÛŸâkÍMíO{$›ÎÙX$GZ©´÷­Àèþq»cðöjHè'ÏJ¥¸ݨúæÂøyÇÏuÆM½MÛ¾}i"NXwS£m¡BÄûúrÊ›«ž_rºsâ endstream endobj 226 0 obj <>>>/Font<>>>>> stream xœ+ä2PÁ¢týD…ôb.§.#ˆ ˆ6Ô34R04Ò3¶#…\.ý4]] „BH—†¿‚§fH—kW búÏ endstream endobj 229 0 obj <> stream xœíXyxTE¶?§êÞÞÒtg_:Ý·ÓIÒ@„,’ΊaÓ˜@B „EÅFA4  :Œ ˆ"7!2È<a\pD\xÏ ¸á¨¤û{»ñ9óÍû¾÷绕ß9§ªNU:uªº*€`pšç6µ½ÿ×èn`Sš/”Ö·½±˜ÞÐ ™Ù6kî’̧¿°¢<놛g}hÎçÔÃ3Ú×Z[šf*8· ¾›ÊF´RAô\ã*ÊEùôÖ¹ oÊ](|`Vò7Ìkn Q~åÌmº©MØi|€òõ”—Ú´´ý׎ù')+ÙÐL1V¤DÖj¡¬›á)ÖÏ6xb@Nq0h…SI:xŠñ=l(èq†D·ù\qñXówÅ5ýÅPB²ù<‘¡C‡%ƒ‚ç%¾ï¼G„ŸAöÑôƒý4–W쥑"ÑæiÎ11ÏÒµêÍwóµæWÄ5ûÌgÍ:Ñ‹“Y­¹5B6küÖôm¤^0 &!’Gô¢ M‘:Vk$Y§1ji’ÖKŒsI0Æ’†Þ&Š:›†kü¬Í£ñ´‡!c½ˆžh£-Z>¡V8"øZ?¢'¢Ö¸O{ÜÈ×ѨäÍQÚ#Zv»Ö§eÚ¢Ž½C³þ®a~þûÌ}ÉIæ¾>H,)Nî+9Ul•â`÷mæƒ+'* -Ñ–‚‚•æƒ#\)†øÐ!X-GL¬–mã§Ôu Q\§í žþc$}^\0¿Á‰yèäãà®L–³¼¿±º¶÷?üè{øõ†ª4kžØûSî T°)¸¾gɽ«h×§É¿H…,Xæ©„*çdçLg»~¹^3;y‘ئo¸S¼3B“¯ç‰™Y¶øT½>&Ú–•5p XSmä%»Íf]¢K3)ÃeLÎNµI(Bƒ»¨^YöuÝÏÕô}×§®»‚肜bsqAŽ¥€&ŒÑ 4Ãhȳ8rãããb5Z…F2':róGŒ>ÌårRŒäæb!y=sm{µ}æ¬k®õ½°:ð^±läÕÕUwl |€s§ºÊ§NúýêÀ±×ÛÓ2õɼÌ=¾YCùKüÌš«æ üy‹Ö8òúª 7¥h&[g¿‹o’üžÆf6'•Ikj†6X˜êƒå©ka£¸?aêáݦ—LGáTê·©–ÈèTKj*ÏÒ °dY%ûhÓäØkã&'µŠ×§þ.zUôF¾!r£u>ζYÞŽŒXH6Çš“æ~Ü5 ýÁ}žÌæ(@!%Æfä)6AovE] . “í .I‡º$[3¹‘6NCM¹±!äǾ’>‹ê4·»¡a>4àLÐδtòOtz^® %7¥iX\lt|^î¡{ÿŸõÞyx'–ïÿ³‹öæíàéOëç~~×c'zæçðÆ7>Ãk:O¼:h˺­3÷?8ݱ‡üÃ`íÃ)'Qä¡å—dÇr]hñ-f[èÈT=ê“í©æðÚÛ.­=ÑK ?tHùÍž<Ý”»cÄÐÊÓO~þC–M‰ƒ­´¾¤yFÀuž8hÓé´Zà‚2QƒÞ:­²jVsô0í$~µdLÌlôáY‹® -•rÈ©‹õÝ)÷¯ƒ~è2>ÎÆV!ýü&î>ÿ6_.öî”<0íÅä6²eÙ¢‡jO–jË-^4‡LyDbRcÉÇ7ÕÿjüSPºá×coãÿŒÉýµÊ¸…;úgRsiôÐ>È€w=•)±)q¬1§êb0š§§ƒ#:eŽš[$wØ4zDWfFºDç(“2g |™˜™ê’ hHr5_w!rkÌ  5dí÷5~w¨Yå D¨ÁQ!8S¬ÉÖ$+×]æŒ8—Ý¥Ë\ÎŒDSªâ£b¤#i)—&f8ÐAQk!bÓ;ΉP¬¨Ñb.6»/|JÜÐNža¹l§Ä'h3Ú*­†6‹@›%ßÂǰ¹kG·¼ØÜ½ k?ØŒ¸ÎµÓ1}÷¼û—8F®DvÿÒ³£XÉ3ØbA{N}÷¶wÏò?8¤ÍW3~ù¸»7 üÃ×”–ÐZ>Nû'M«Ö0)?&n˜ÀmzÃÃQ3ˆŒEèhCHZ­¦ÁgB‹-©nq¤K±%™P2ÕšMm&¡È›èn˜o>çV7XÃ9em)ÎJŠ rÔ]†î< -5ÁIôñýì§ýûû5boÿ“lÊOUlW „,ã ü A`c‰ÛÀL%‘p;q"6áM¸×±Ù‡’K"JÏ8Ò‚Aå^[p6Rýmáúª/¸XÿÏ?¤1>Äøn¢´%œ^¤ô2¾ü/[þ»ÒyÅé2!‚†î ºÿ“>ÿÿû_~ëI„dñ)H\HW•/_*<0;¨œ±I gÿIÊþ0€Î¼8vÀ^Øg©ÕNènx [áAXI«:…Jî ”D*“‚ÝÒª? ‡I÷ZX ½‰ÁÓÉ+ø›Ôj˜ J¡æÁ½8&¸êá¸p'äøÚЬ Þ\|ž€þ2Ý<# š)þ]|7ø! ¢¿‡ p×éŸâ#Í?ÂØÈ Î þD8` Ù @ Æ}ÌM½·À˜ˆ·òrêå± ¡Úþ,î!/½ƒgÈf³ª6fÃYGi*kaóÙZ¶Žu³cì'®å<ŠÇñ,>š7ð¾ßÌ×s™¿Æ?â'ù9~žRP0v!Mp na´0MX$l¾¾ëÅWÅÏ4Í\Í]¿ækíí(m­v¼¶A»F»[û–®‘¢ó<þåžÇ|¯äÏÁ},OHb¯³×)ž§Á ^Ã(RÙ6¼›Ý†Ý,]¼ISÄŠp,œ\äëÙfvŽñ¬Æ‰0‡ õ¦‰þD¬X8}šÛëÔóM#.eg4Fè¢c¾€Æü+"¸ù«ð>?ŽZáQø@0`ö±§x-EÁ_„Qb8ø#ð,Ÿ·Ás¬’^±?ëVSÅ?ѹ0 sñ<œ~ÿº!Ÿ wÂõì]è£}|7üg³à>ÈÃ[á x’vÅ@ñFM–&_a³…ƒÝÀ„§iv˜Ž\Œ…åØÀ7jΰ÷` ð1†¬?žå5ÂYq¶Ò¸ î‚ùÁep³X'¼³€ãdÈNÐév+ÏÄo§S¥žÎ´Ý´»{é(å5T’H‘3†ââ:!6RzˆÎ "h6íñké{º5“˜f‰‘H§Ý_ L€)Á'aCpÜ\ƒèÂ;0J‚«ƒoSt vL‡«áÍòï4•|äƲÎ`o£ù‡ñÁ§‚v4@kð{à ­MZ·§´ÔS2êŠâ¢Â‚‘ùÇåå’3xP¶;kà€LWFº3Í!Ùm©Ö”ä¤ÄzÆD[ÌQ‘&#½ïuZ(p†]é¬j”dW£L·Å+¯¤äMTÐô‹‚FY¢¢ªËud©QU“.×ôæÌ_izBšž‹šh–Š¡xP¶Té”äÃNÉSÆ×‘|o…Ó+É}ª\£ÊkUÙD²ÃA ¤ÊÄÖ IÆF©R®ZÜÚQÙXAÝuFÊå-†AÙÐiˆ 1‚$9ÁÙÖ‰ £PXBea'=Ld”œì¬¨”“œŠ2Ϩlš!׎¯«¬Hq8¼ƒ²e,ovN—ÁY&G¹U(W‡‘5å²VFš­ÌVIÙû:VûÍ0½ÑmœáœÑT_'ó&¯2†ÅMãVÈ ·œJ¼”¥Î£ËëVþ²6…wT&Ζ”lGÇJIÞ2¾î—µ…z½ÔµeUU4ôjrbõD‰Fc+¼u2® !%e&ʬBókqV*%s$Yï,s¶vÌi¤¥IîaÂÍŽ®ädOOð$WJ“ꜹ$Åémª°vÆBÇ„›w%y¤¤Ëkewš-!ÇvFF…£é—BËÅ:URÕ©zÂEÏ¢b‘ó* Yj–È’:'Íi¤BZFBGóHR£Ï‹ÔJžA+2[Ö—7v˜ •r¥½,f˜RÇ÷@àìûêò’¦p‰&Ãü=(¢'Cê/ȲÛ-ge)!¢-§5%G©ùჲû™ÓÙf–ˆ‘û –|Ûä-Ì!÷;ʯò{`:edßøºP^‚é)]àÉq{eÖ¨Ôì»PwRã»Ps±y£“"¹[}BÄÉ:×Å¿(s|Lek¡Œñÿ¢º%T_=ÑY=~JTÙÑömõ¤Ër¡ú‘ëÂ’S^ÇSXXb)\­¥ ¬¿¨¬dꌲA5¨gøµ:ŠJµ¥*ÙÜxeˆz Ç¿ÙÈ<«´RÙ¥fa3åB÷åù¢Ëò—™gìàd0ýVOšÒÑa¸¬ŽB-4àUaF“êR¹ ×ÐÎÌ ?zŽTàM‘=ä²rEâ/TÎ^¦˜–½ô)Ñ9(»ŠºŽŽ*§TÕÑØÑäú¦;%³³£‡ígû;Ú*/Ž?Ø»*E®Zí%_µbá uMÙß¾V~jZTñ÷º”ÐCkë§™Y —ÚÙ?Ë\¨CY=écè'@;*0ÊÍðÓÎ@ž¹0\~éÓk¨Hœì'Ãzñ%˜IØDòVáSئ)€¹”<¬{uøòÿŽ~ï>¤ q+¸v˜òÿpµw=‘ºÉ‹tÙ3Ó¯ji ýtg¥Nˆâ p†$p°Í!Œ#L#¬!l&hT=¥dávÂ^ÂYµÆÃºÖåyüÄV©lלrÕlS([ß fw]ë ñšñ!^qUH­0¤6tX¨xpYˆgf‡xtF®OáSî¾ÒxG Úˆ";Qˆt1ØÂã@&0® —xxô®tWîæ½\äŒ#]äíÁ}»L–ÜR ²3 vöwÖªa}»"-¹›K¯f'a'a/³“”>aŸÀíìy3Šh a3a/áá AÃNP:Nécö1i}9„Â4ÂfÂ^‚–}DÔÌ>TÖF¥Š\B`ìC¢föMë¢Qì}’Þgï“iovåäö¨‚;',Ø3ÂBBJXˆŽÏõ³7º~h÷³OwInû–Ò!2©ab&H„ZB#¡ !éIÇÀGXKØB jsŒÚ£6‡¯ŽÁ‚‡PKб£]4ŒŸér•ÙKãéÖû½@íì0{Y寱Uþ*û«Ê_!n#~ˆ½Øe³CiÕµ17Ï¡z‘½°+=Ú,µ°½ä;ÑB aaa AÃö²´®öhêäy8DÐκà´ÊŸ„­:ð̱{\åc’B\…WDd³´ÙÅ<®õ(«×}ëHRˆkùj’âºeI qݰ˜$…¸fÌ!I!®)ÓHRˆkÜ$’ˆøÙ¦?§gÚóÇ]Ri[B^ZB^ZB^Z=ª(Á‚bÛÃ]YYä±÷À,»¯}{Ð7}[Ñׂ¾¥è[†¾bôMEŸ}VôÙÐçAßó8’\áCO÷eÙO"ú¡oúÚÑçB_úÒÑ'a¾ÇÏ]W婬Re»J•}EüŠQ¹Qd£ƒ<ê °vжßKô!¨æ<¤$¥…”“l OÛ•UÊ.ÌWz%;@ Ð2€ãè…ÑêäuE´„0°p†$hH; _£Ò(¢9„Â4Âí„3j΃yawª†å„§äØJÊ«ÕÁžT³Õì6_É×X1ʆãlAˇøx:ý¢-:‹M»0ýãèKõì>¶Ri!Ö†ùš®Sí~|¨Ëõ¼½4ÿ6¢ À…ÄGB»šV‡•m'žÛeLÍ¢º\Ùö^ŒTZí¶ÿh=e?mõ3¿´>oGò Øe›J¶ï¶¿e½ÇþJŽ_G%{\~$Ö+©ª=Ö‘ö‡TÕeT±±Ë¾Ta»í·YGÛ¯·ª-¡Š©í”óDÙ'¸¦Ø¯¤þ*¬Óížvês·½Ä:Õ^Ò®´ÙmB&¸Cb;Ъê´©^“ïÇVO¶v½¶N;Žž¸¹Úl­CkצjS´±ºhY©3ê :N£tŒõ±þà [ù‹Õ˜¦*¨²™…þ÷¨þÆ1Ô1zÉ1¼šUO,Ãjy_3TO—äs~4ÐE@t–¡] Õ“Êä‘îj¿68AÎwWËÚÚëê:ïóR©Ìîö#ýŠû1¨­HQ®Ü=€hYqoŠÂ¬¸×ë…ÄøÅ%‰%Ñ£,U¿AÃÔ}éK¼LN•×WO¬“ÿ”ê•s!˜ê­–Pîä=ø ž­¬èÁ¯æ­ëá£ð›Ê J9UáõVûq²ª~Mz1_«z:HŠH:[HocH/ƒÚ“^ºÂHO¯‡ U/C¯WõTô:ÛÓ++:ÓÓU ÚUöé—:‡2H'#CÕ‰÷Á!UçP¼OÑ‘G©*V+©Ø¬ª &ƒUU±b²ª2ù’JNXåž‹*÷¨#q¼¤c é˜N\Ð1 ÷¿ûµ”¹Ý¸«ÈÛ\¯¼g•-„FyÕâÖDÙ7]’:›½á‡Ž«qzs«Â›Zd¯³¥BnvVHEõ¿Q]¯T9+:¡¾rR]g½§¥¢«ÈSTélªðî];,ÿ²±î¹8Ö°Úßè¬Vél˜2ÖèüߨÎWªG+cå+cå+cöŒVÇ5Ækë:uPæ¥ë³Êw±ÅkcŠÃ[on¥o‘#qiJ/]H¶A½&Œô25”ªA¥ƒJ•*ÚSJU¤òh W%.-r¤ôâ¶p•™Š-Î2p/\Ô¾+gW„þÚ飢…‹‡‡¨»ýŸ}TWIïÏŠö…ÕrÖÄj¹„îëZ-•6*S’ /”EDTÒµ9T8˜ •BÎ/**eÅJ™^VüŸë¿(ÌË•]àcÏïB B»—˶êIŒŽ‚Iá×A/]—”Ÿ‡v/M°ÝØ~¡ÕlÉ Ì÷. Ka?, óP+jÒ~Á?jCGÕf&±@ endstream endobj 232 0 obj <> stream xœ]¿nà ÆwžâÆtˆ°'ñ`YªÒÅCÒªnÃá Õ€0üöåO”J€ßq÷q|G/ý[¯•úá ЃTZ8\Ìê8ˆ“Ò¤¬@(îQÚùÌ,¡A>>>/Font<>>>>> stream xœ¥X;o7 Ýõ+4ÚÃUô~ŒM›¦Ð!íÝŒ ÅM#°‡¤Cÿ~%’úâmÄ1)‘<<¤D}ùb¼¥?¿½µ¯þðöÓ_&¸ºÚÉO.`-¦Gm+¬ÃÖ¨æbSó®Q•X\¨¹WSß‘.Õ‚c½$ïb9"Lu ϺUªhÕ4¶½ ¥Âñïö=sÿõ“Õ"¼LnÍü*ŸlÙõDä&—C†\ rs1GðoÍÁž 'Ë v$k4S…_ è.4À`¦ >àµ$˜ôájJ0yøNà×ÿzöy&M@G ð·dÔõ€œ¬R‰iØNˆÃ’Cžµ£ä è?¡ Ý“ *^„^|† —`%ö1¡_&èwV{¼¸ÑKÉñƒÍ.÷A{?šÿÓà×-þxÕäæqVÿ¿ãxÞ€O× øxÕrß¶\ É•fCihžb; úùõO{of±‹mm&}ksÿÌõÔ]ñ°Þ¿·ŒóåÛµó8ªk¾áâø]/—Nµ~ɘW_ŠLgšùËÈkFâ8.‡>\;ˆ(®/Å¢ázÎTcQàÎI "Î z-‹ž›"¡±ZìbqvB3Xbž-ÒÉœNkÕŽa‘ö㸢Nº^g?«5z#ã><ø/.õ¤ñ!R™ˆ ý娠ãbÔ-4ĽÅyk±Íí+<ô ¸Þgà ø%š¹e§fòjÎäl÷BÞŠÎÌ÷Œz:ÂWÕ@•Ö6\ }AGKSJØHçýKé4°VOò‹8ŒPôjfþ´¶ œQ/‹—yJ:u›¬#h`kH¸-{9_l´Sßу«í€MÅÐy÷”#*ÒÔØ4¨cÙîÁ@M fF_7žbǽoìK¼HnfoàÔÅœ©Ùî™: ¿xp$Åþð¼ ÷xG5ÇÏFw£È(Æ”âD4&LÀÕÜip7×è²&™†Vì.Qg¡ÖI¤œdÞ³HÛÑкŽ‡yµ¬!zºÛ¦o3wãýâ»ÄƤ¨d»€‰´`_T¾6¶)&IèF]ãò,ƒÌȸÿÑ`Š‹ðnØSºhR$š²˜2#Û536C+‚ë@¶Yƒúÿ8)¸†}Ü‘Wâ1¯!‘f­T$&Ü}W„žXK$ÆåÁ¥‰ ÙÐOÖ‘jÓŠÄ„$îÉS/±£ó©ld,JMT±’gk#ÔˆwaNƒ/fÚ,ƒ"碬¼Œ®rÖbʤl×LšD^Œ .’ÌÆýpUÌœ˜ùÖ•*Vò$æ¤Íšp§o. É VÃÌ&×Rô$ÈWëBÏ€Aœòz¥gR“º¤ 5u…§»£Wè›BcIÒyeϦZö½¹ÓØ‹[E6‰Wà\ÎËèòJ[l…õ-¬qlᔡ-ñ›Ê\ÕÞx—CµT±ò/`eÎèE‰±5å®`[Ã[JJCO‘Q’PÏ_ZŒwœï¶—×X“ó9™ƒ÷8/‰ׄd,J~ªX,c- ;ßôiðE¯B›Ü p® §etue­¦LÊvͤIh¦T€Mñ›Ê\• .¸“isi²R³4\¥ÂJÃ)£o¾-|B7|+ÃwÈ]Û~=?™W÷'¢Îó½¹ùáöüÙúÏ\è“g1Üfçæîæõmë>ÝüxûáüΜpâ}Iôà5{Ü ØuóÓô€ç¹x3ù©|CJÄ8l¼»ùùvÄžnÞª»žzÇ@6Lß: !Ã7góÞü«¤Ÿ endstream endobj 235 0 obj <> stream xÚ¥ZÉŽ7½ç+úDs+.@C‡ q€ä`nA²[Ê!0ÿÿ%\ªÈ"»[šI0gĵÖW ½|_Ô"ÓZ¼^¼‹"Äåë·åÇ·åÓgµh)œÓ°¼=–‹FÙåâ@(™F¶?V)•½^lŒé/m¤´:}lú|MŸ %˜«OS ÓÇ¥¡GúÀõ¢mÞPÓÈ4bàêtžq׋[ñ¨ˆ«nø=ïÚhGú7­N§ÎäU[ún¯¾ýºüüVËìýÖþú»ò¦%E”QqÞcÂ)bΘzz½31q¿Ê àM÷J«ò™Z]ÆÈ£™wíËH¢.óh6KÆzú–ø·!¦u ª Ê :Yçq”I‘GÛ‰.rØØMn”Å/éó×ÿ:ñ­žK ZÝȶ]9…À ‰3(þ[[©ˆìëůHi³€ÌäMd–”Š·4¡æ}rm\‘Ü}3´f8® 2 4NMsÚ¬ÒmÛÈ[`æHÞ™˜Hi¥= ó¢e\˜ÀÅedß™ü"´´ú‹•iŸ1†[] ¡^›T˜éj*$ÁýçÒCUÀ°EMýP(ÞKß“w•a¥¥XK?ôFstX3Ì€–ÝZpU3c>’¤ºû@¨»ærk×›Ýæ½pГ‹GÉ.œ¶ò>H¸Ã]¾(_V­ÛHj' ¶E;Õ²ºl_Qu7© rF¦S¿¼”\Ø0z4"‚m/Âùôv¥× ©©¾O,šv(AËÈCYHtÛŽÊp°¾§}6àbðîHÇPMMZ\e¶^Ó¾A÷B~1%°°°ºPÉŠ1! @7êÁ«ê½³ëVÊò ËÈ€š+?HÒ@ÂC¡Y4¢Œ†dTÙá­,!âgU«>2±(‹iÕ˜â÷à5U#†ÔÑ\* epç:3ÃS]PN”óìà}uÄwÔ˜õGa½Òmë;{¤“eDÕ't´¯à¿§IÀö}U¥{¼Õ,Ø›º@U&QÞš‡¦€‹I”²ÂX§y¢¡¥Êô,*ïJ¿5eSƲ pïhP­§+`N¡´CÊÃü§pŸÌKGá4™—. oy6Š˜YyÆNö –|’QTö7¼.{š„Éño»"wH¬ãÄ*k…K §$¸å„ æŒ]“üû2 K¥yªA…¼˜Ì{‡X].”ÕÀdå¶YD î’’•&»0]ÔyGÁW@+»’óT=nûZ²À|þ— ÄDÊ’é¨`D„)Ñyª"¸øH`@²q08d%ÏVô YéP¤¹åƒYvcÕÃ_‰Í¿/• ý‚ÄLÎv­6Ú\ïô2H#‚TÉU]>ùhšýôù,?ý³üž~0{Ž":íŠO ëcZS­”NE—ò=ÙAó+OEºÏ§Ï—1øáÉøU4Óé=ÚWñÁb<@Sì¢lVq&ÊAç,ky©a†AcÃ3—s¬w/a† EzÆ÷¸žJä¿×{É=ݺ ‡u¨UCF‡ç#\TBi¨§ãtSö×ìÐVD8¾Ž°£®Ýá Ï"‹Ü¾u£ ô±|jHÙl#£]4’÷DÔ¸V²$¦a¹ÛWSxÞß챫qËñâ €9½¿÷;r2óн‹S†G¬ÎÁñRxˆs ‚ò©H“|ÙS\¹õ¤œìu,Ó[]DåÙc uã*žë)†ÖÀ‡²)~0Ds¼”3Ös8¶o"‚92k¯<覰k¸Ð÷íZÎS}Ûã¨5qXÓâ=)k=$!~JÁ<ƒª<“¡ME½2‡cµrš=¬ (‡¡oH» ºAMOÄ´tÝÊDªYWö”u²îl,ð=.ÆÐIà ³Ã ×je5,÷´;Ñ1VØQSqe= G¼ÃÆÑzÚMkLÛÅžÁ¾¿d;l3w$’Áººwe报.‚U…Šö¨+×/`X×+|Ú××Ûn­Öï'M >CÉ,>•5Žù !P´¯¡y¸uµ¶vzËÆ)a¥N'õM0“ó5Û½¯ -A‘–uÄúíLʯ¡å¬0¥iGZßÕ¨®ö4ÅÜ’š§öÁ³¾c ‘»EË;Ü£Ð{Æ‹¢æÉ8:ü÷©A+›\ŒÝ«— éy¼Ýº&xˆ©ú sK¾T9…Ö<^ñ.çUC3akWœ@Û¨¸0?ÙɶlkLiöB'Ãßʪ‹Oë[éçúö@f'Åz‡;ÇO¹†ö=ŸCIp! ç˜.ø,=%åvr¤m¿ÿð/–½˜å endstream endobj 257 0 obj <> stream xÚ½ZÍ®ë¸ Þ÷)òQ%Q¿@Åmî¦=»¢ Ÿã¤›ÎbfÓׯ(Qe˹Îííà 8Ž­’úH~¤sùõ¢.2ý©‹×ï¢ñòõËå§Ëÿ¬/JŠ(£º|«£pûf‹Py%ÜÇÆ[½ÓÖµ$kwêʸ#~t—ÔçUÛHYFç5V&µ»ãFrÅꛪõ…I=÷B%¸_ß»,ÛtËë–·pw<š,ÓB*ºû??þš pU ¬‰t¸í0‹1²áV¦òÒÍ›ò¦Q6ú w>·5K™¥@+˜l­˜eøÓaño¡‹ßþ5b Â$9¯Ê íš¼|k³²Š¢ Š›þ»¾!î5ÛF+Œ‚Í>r©Bß`_Õ|¯jëHp­jpÊj?³WeBò*Ÿ.¢°éÙI/e5°úÖÁQ0†»vt"ØÀÇžšœ;tç†å©Uåi¶åÒWäp¦uØSÄ"Ý-c—ŒÙ,ûÝ߸pMÉzhuE³]“έ_Ê(¬ë`sëÚ•$ÕÑH±)'¹³ä¥l¸U£zæJvc.gç›ËL,4s²^X$ w ,pAsõêÜtÇt”±»¾›˜D-²Õå³…e?åªWAÓ®MJ® ²#LäÊÐ_ÚP=*Ý|ö3iVO:º¼–~²³q»tµÎpw©'o»oz°Õ²ñÈ…"µašò‡¦ WP£à°GQCЩ{¥ˆ]"Hd1QÕ¸Ñ#;;¹êšG}y««oâiKeȃM\¹Uvª5ˆÑ©’Jîœ]˜/aÎD!Zf¢¥a¾mÛ%ï4ƒ-==—A¤ÉA€ÈK—s]{.£°+Çxí“ëÐ F.j—œ®Ã`h–êÛós–ØŸê.—C­Çä0=Jó,Øa=•86Ý”S–}lg{, ‹®è”©ÓöÿþÁalÊË„Ñj“ÿݹü¿ÿR)ÿûÍ>Ähivž¥U`œæš¹Ø»ÖLá{ûö5¹à¾‘n»¦skµì¢Eõ[ÓÁ›½küºý”p€Q"atuM°÷Þ4æE‡Š<:¤§ê3eå_ÑþÇÉv®Š'¹· §¸7!EEÔ.ÖhIï܆×å|óË6šsÜOf^`9³Ûõ–ë1üzßþçâ¼0¤Næúòˈ`}¿õïËß/?ON®M…tÑ6†é) GÅJÉ¿e^Ï›·+dQ¦ITÄ™A!ºÅ2S…¬ÆAí4Æ”#êç”1!!Ê„…oä‡,%¢î´JÙÙBi}Z0·pIoùUp¯’ïôQ…%ȡՖ®¤^éºõ†pÞœ“û äj¡Nk[åÉ.?½Ú|p–n´·V ée{R ú~§l~f—êý®  \Ÿ±P?ªº¤r™3W¹tSwjo°sEþfì&!vP®Œ!x;áÐn©´-¤óöÜnan·töʾףÍðµ@¶ z¤[ªë0¹—ŸåŒO¿AB³åÏZ aEpq´ÅÕÔs™©æ…= ®š=¯Ú ¬3UÌ[éÞ×PÆåô^½£!ê`ïz<â·µ,ÐÞhixs0Yq`óÜÑXßy<¶”µsKÁyKaxˆåÿ Âì“,•+ãy˜ C­o û$dÃk:Ú#°¼0ó,aÜiOwýó® ~t¶8ÆTLÌ/LB§o³w0¥ä ‹€ÊŸM99Ý¥=õ®r× û€Yw³1×ósYrEwä†.ÀÆdµáˆnèÞrC¥¾Ãdö UAÅ1b!˜Ôh¯©e4£)'Ì“4Hû€®næ¼?r³W*Úij¶‰‰Ä? yë5Q_^|°Àü¿¨ªé=Jv PP‘¯sd¤\bõX àþ@å?¼Ea•>¶Úœ 'êlÃÙè´‡ó;`Ô¨SkÅpfv =e‘©‚ã³Ú°“Ô( èCl¼Òòù£´Ôú‡j‰¿wA@AËA”ÀßÙ죄C > stream xÚÅ[¹Ž$7 Íýõ-K$uƒ ¬g Of8è3òù÷-©¤:%­ÔǃB¥ªÖ{E>R¤fø>ˆ»?1h´²ÌØáòmø>0£AÿJ3fPÌp¾ h©ãç†?‡¯ÃoŸÃ¯¿Ã 8³ÜŠáóž.:(&Ôðyýëƒs$ÎÉÝëɽ wÈãAp+ãi)Ý)pÇÝñ½Ä£þð û1Þƒl:/H«ñ;IÇ¿?ÿ¾|z’¤œq0Tv$}³ÀB9, ÑÀ™sq‘Îá×6 a­c6\ ®—8H¬nÌ¥AyîNŠY5ßçz 4ðk"ݸ›Š€ÅáH2Ž’ÜO˜ÕþÕQn¸+àæßO#®îp÷BGµ DÆ/0 As"Ü•~²g2†‹ÈÏ`…ÌÕÌы֙’8­ÑþéÈG-˜5P7KrDJ¶*èÁBVsnò`÷ËÊv¹…©d‘§‚4ºßo°˜…bÀŽEÏŠHÀiÔʦæx@=fW4åsTê”OQ´¥ ç|.Ý”J/9ÐGÀmP-óð”M €¦J…« 2ÚaµÓvlERmž5ªUm|Ô±ñuo?§È[Œ<0Å,<Þª”‡\W²t^®?€ŠR ”°Ô.¬ *Ž"û¨áòbJN2§)ZÅtËôØð"Y⪟ð&rÚ+J\„¹Hbãå^å,E–M¥†þ¬ŸI6|È ê=&Yøo×9YF·æ³6Í}ßeN¢×÷œÌ˜fFOÑïÄŠÑ„U/ a¹wDZ¬éå휭NÙ¥ü W…ü¾F”–+Ù"?‰‚}^÷> æ;ŽÐ ³Æý©öø1‡]:é5=Ø!† $ÇËû‘b¤DÆ<®zõËÐôÄ09¿f ‰æÄ91ôUòCBbÙ%‚Ü‘ Ec«p„â‰Ðµdwõ$5»ÊÒsËŠ)µ4q2¼°ä¶ãò»¯üX&õRÈ$4W'p4±€«…žæ<{Ÿ 4dNb®Š†Uß)ñW~°zPâ”Ì6ÇÂóÈ«_»õ•3 Vý/EP=5­À©]qñ.1~~¤ê.º§°'L1ì=Ðâ Ñ“uƒÜ©ÕË@ª%HÄb!£†.ùçãåå¨)+¤â=HaBš aVBÅêI½ÊêE¡Zá\·—*Ÿê¨zm3‹^Ì} ^Vâ#†”o’)fº©ø¿™AZ³b™y—Æ<)Ekq'®Ç6eñ&Ròñ\4Zͱ­ä{š)»î×#3öQ°«Ý •Γ¸ekË‚I«z*…°[ƒ˜©M„?‡,æíH}ü„¢œ*²‹ê‚\¤”Äd9£¬ðFÙÖŒ{ë¨éáM¾ˆ·çŠ#? )SȶÖfBCH†B¢ÙeŸµß%¿ºñÖŽÕ Åc—/L¹…ORÔC¼ÈεÿøFMéœÿ²•UÐ •G¯µy=¨—£?OßLÛ#øcHϯH|Ó3ÞTb_€4.ÿ‹c‰²$Ü2ã~¢>qêLš*Is~²KqÁ´/Ÿ˜y ŽËÌB\í>^†§-©wß•geêòlu¶Üê)²1ǪÈÊ ª²UzšªµÁڮㆸ΅i¥-+²ŠN̶5…Dl±—V©£3µ;L‘f¦\ø¯ §K¡HËMr?Éý¤uŠöfmc ñyÙÕ.®å´(J(G^» ¥Òs¥€Í[] [Ötšn‘ºKRóÎd'[ÅwÓPܾUà çRÇzœƒÞ‡W½R,Vm* _áÞò~ðoòØÚò°S,mo2£™ØŽT„·ô-Ä2îa\šMOÉG§¥ç®üy‹·¾•ZÍ|»½1l~»?Moiy…@̇s‚I‘f¬í #ŽÆm2jêÙU”9umüI-¥iÇ RQIjÀ¹zð’ô‚~ÞÝ,C#3Öâ÷ {Âú:ÉXi%Ò­Ðk 8”Ï—EßpÚ-|ý7VÙEêÿt‘ZYå}5°P¨•j­ûÈäTa ½{ìa› vëÚ°²iźe⦼åM#ô§Î½JŒ•ÆŸ-ÔN-èÖt,füÉÎ’¹€Ýí9_>3ÿ=ãhgR9ÿQF3+iF?“tÙ×_þ°0F¹ endstream endobj 339 0 obj <> stream xÚÍZ»®ã6íóú3ä Ÿ€¡"@R¤[ävA ]?ªl±U~?|›’H®h{‘ึLÊ:‡ó83äômbµlR0)iˆ6Óåëôm"Zšþ™¤"œéIMqú:¡F¢…ŠŸÿžþ˜¾L¿|L?ÿ£ÄPæ{št’„Ééãúç™Rä”rûhÿ/ö?³/1Ÿ5"~-„ý ìën_ñ½ÀYÝÇùÜœÃ=¸I_Æ i² ןÿúø}úõÃá\ˆŽ‚ÒHÒ• ¯aaÁ舆kJÙš𿴚P4–U?X^/qb9 ˆžQ¸Öî$‰]–|Ÿëì) ×DZÀÔ>³d‚}"¼÷# ·=1÷fD7ƒ¦¹n,Ø…íþÏ't<£Hñ3ÜÑO ϶"æÄ‘-H,Åkb¤[¢ë9@Û䨓#rã_ÊR3àjTÁO@dåžïc nn„f$n#E–4!ÒdÏYf10w2DX8ž)nFc¹¶·.êа8 #[›×çÄÅêFÇx`Œpþ ë&ðr„¾óàyxÅ€â–w¤{ ¹òNœ¸½`nÝ‚1.èÚ–—`í(wÑ£±ºU. ázÇÅgàCI÷~ˆ ѱ‰{íNŠ0®WdèvÐtwFQº;ÌÊ{È2Kv.¯ûµpÕWÆß9ø%ÔFù2ŒƒŸq…ï|~<| /€ºÕh‚ÌT¬&XŒõ :d5²ãA¬E %C‰#@̰&×Q稢‰ªûƒNÏÅaºôÌXLLÉJ@©Väì᥺Ž×½ÀóÈÚLÞ‚Õ% §`â)¸²´:â%\ü1puÏ @là…-–›j4Z–ŽfS%š#ÇÉ% ¯4ê$/^e^zÖK=PuK¶¦aƒ°6ù` 똀.rgG:ØJJðµˆvKí²%¸¬)‡–\wع¿"%!#·kî>š˜GÔ&’s ä·„¬H« Ç—{Nç&xâËt\ä³ÎÊ‘@1½:ËÚ’æ3H!‚E{ ÌF×Kô¥ûCÎùÏKÁoJè ~±J/!\¯GZôòž ¿¼h޹²áÛPí|”¥Ò-¾ÞKeöÝÿ ºé‘Áé nÉ… ¿¶´*áÛ7·•bHÈ– 9)W_ù¦ ±NH[ê6ĘÉõN›Ð!¨—èñs)F’~Z™[=Î\(oèþjhtC´`£æÛT7‚ºÿØá²Y³¿x+ñ¤ë¨èç0.úó–âyr²ÔD?¦`’"7Äk&“’kŸïêÔ‹®ÙŠ2ê•·$L°o2>CÀ;ºŒ«Šñà=KU½Þ¬®óÆq8ÌèmxòÔ„‚UdÊ.ä±p 9}]Zœ¡1Î|ý:ªžx¯O%ê¡Yí×%?ƒR<=ü-õìܯÑša²Y¤ŸrŠ Ùp.órÌ+n–´Â¬pÛ¹çi ‰%wÍÂÐ$ ‹c‹ÐëñÚŒ½?h¸NëÖ“Ì,ÖÉ–Iv¾q§ÁcÔºHr; ÎÍCkqˆ±N÷ÕKÍ“;5QjË[äãºfèå.´Å+vé4ÒäžFš!šzíYˆÄÁLâÝzÙ)÷’¦%ÏK!Q–Œqðk(—ºL>ÎM3™v(¨{©•ìÒ4(ÐçÐ[w«\Ò°«©ßLƒ)ÐäQyK°µ»‡P±&„ÐÛÓàÎoôñQ²£lnëtIpÇp¥W›ÃaÉ7au³+Ùƒ(½zâh\IõÆRr—é9˜4…ífG’é}äu¶èÃÐfï´[`©ç*äæˆ`¦r'°þä=÷M1lF4VÑnì JUý&êR>¤KEos¸J>'ÌQ¿‘qw”™"üŸrOèMóO1|Úç2îÁÄ÷Ó…éÓÙÑàUŒ½ªò'çÊxÅ.k|<ˆß.þçÝ*Åߺ8øá*¸tW÷ëKÁ¸…õcZ§l>y$2þçñ^ÏÑm ºzqsZ0.¢Aw°ÈªI˜Áv … @âq©µ†i¦´U¶ÿ“Ãé¡” ~T¬àÄK­Ó†í”І€T)éÈ güÁŒz¼–„—íè¼áÖnO2®êþn@}×߃»²XTú”¶>Ó’rñm'éúaûÛš4K9\<6„³jŒ¥ëß'ʆâøõ¡ß>Øf\j[@Oc/:;Ⱦƒ{'ƒ­Éi1›ÎÉ@U |wà£QZa4VëG4ÏH>2FL1^ïò(—ØGïÜg³{âìäR?[l k£M³´òì˜f0ãû®uˆC$ÌÔÎQ&«üMV#ðö’Õ@Ô©äÜ¢…Z.78²òM³‰Ú(¿OAv4Òw©16x¤#?þ¹ã´/?ý ißtŽ endstream endobj 345 0 obj <> stream xœ…VK’[1Ü¿Sè!HÇÈR®d²˜,2¹U½ÇcM¥¼xFÈÐt϶J£òp.Ï_Þ^Ê×ïµ¼üݸaò:Š˜‹•/Ì$åíGù9ÝV‰Ç;'ÙÝ•âŒüñ Rp \¼’ö(¿ w¦aZǽð0 Å!Y €̧y+¢•šøq°q&3 r=Mª¢yÿ8@T­¼ibÄÓÁvþæ~Ec¦uª:Š6R Áa"+B]nð4‘YJ?íbƒzŒy}?` ˆóz?éJŠH§-UI¬oàD‰J„X3%<MÍ · p¿DaI¿^ö­€ã¦m»NšO5EðäËä!Èœ¼$ÚŠyþ˜A»Kñ¶ÇvÙˆ¯ï~!£8úÄuš#á2®_Ø|+£’s’×h I)¸%w©¶ _'W¢`ÈÑÕ»ÓÈn3b­lçÁmRòîW dCÕh§™Dº·Ié~`¢ÛYT)£ÕLgp8¯mLFéB mËhÆ¢5¨„Î(Z“r”J!Ñ´JTª=ùÚM=ˆ|T‡jÇÀýTã´²§h éô#Hj–y«§[ùµ}0ÌkÉÏœ½½J@­sövrÔ–­Øp`"³`“¨—ÙÉæ–*ò»ƒ¬-²•l–xXxä˜ÝN‚»y’’scª5;ü×^Ä#Rl•’ŸYº†µ¸L¾súzù²?æþŽ$@@@KñàÇ0†ô*€~êàa+?I!® Où g‚'?twìL(Èh¾E†:Rò‚áï ÈǃŸ]ÑŠ±ˆÀÐF±o }GÒƒ±à[î“…´Ï5;°ÕZ[@Àˆö\×Ð5wÖ3‚ €çîêºJá6åI±´Ú"CÀœ0ièŒð¢Ê@£b5s5_Æ8o`ƒÙRm _v$cO`ß,p ¦@ÐÉL½ë*E¾sUî/„ÿ´ë…£Ó}©æqjô¥¹›°~5_a µ°ñ ylégš>‡P±uÿ@6îÀúƒÚ]^L:fê³ßÚþN]¹¿mÿvî¹ endstream endobj 346 0 obj <>>>/XObject<>>>>> stream xœ+ä T(ä24P025Ô³01Ò¦z†F¦ ºF& …¢T…p…<.  ‘ºz†¦–@y…ä\.ýD…ôbý S—|®@ Ê¥c endstream endobj 348 0 obj <> stream xÚYËn,¹ Ýç+êZWïÐèEÜf73ÞY´ÝíÙä"˜lòû¡$’¢TU¶'0Œª–(‰¤ø8dmlfÓðg¶d·‹Êe{û±ý±©œlÚþ»§¬ß¢ÊÚm?6²Ò.àïm¿m¿l}Ù¾}·›Ñªèb¶—w\s‰ÊÄíåñ«ÖÎkíá?8xÞáià?Ü.F—€Ó!À”…ÿwøÇ÷ànéZÞ.Ö—kßÚĴ8ö±àoÿ|ùyûûK•"øXŠ‹±ÊÅ"ä ‘3IŒ3ʦ²]lar—&>ÞÚ @«%±UÑ(ØLD’&G–hâãqkbé è@ý¦µÁ,e@8ë‘"h °O Ò}Ö‚*mÂ'¬tŽ©8ª MÅaGR·†cœ©Ü..5²›Ï×>aWºÉrÉÊÇJs ´úu]$÷8Ò…SÙä¯èÄ5À¤Éý9tQí¦R5špu Ì Å«¿«nê|Õ®zÔZËdòTeT Žœ‹W1Y2@nP¬g¤ö ¬S%äy¶ ¥‡Û è&¾ð…‘wXAáÑ¡ºÑk¸œ¢ˆÑ6+á§q“å—¥·`n—ækèEÌÌŸ²Æ´[Ñ|2à º³ªß'éÍtýÔÒ0'<êëõ}ùÔõ5­hPÏìƒ9ô³&Ãßß;‡Rþu(UÀµ±ïõ%IœUQ›?#‰\Ñœ–%yŽŒ?å¨ÎV¿nòh¢%©klÅùØojÌS¬¬ZûLšè+½¸ÛÊUbM\œ5d]qÚÁÕ˜Þ äë#Ýòu'/AšIÝ$R ïŒ4¨ÉÈø¨ŒëÓ'›$îŠré‘<"+’’eš;š÷Pfã‡yÈ"Ùö/~¾àÁæM̲¤¢æ42i‘¤|w¼º(’ב[N6¹Ÿ;¦ž¯ìC/ã–2±ÚŽ*¨´±ðÑUÞÌ7ÊÁTnúf¢·3ÇñÊùh«\œr¦æå•'6mQ}Þ.¾T®¬C•FÉY ãÀ–¼_S‡mÈ_CRÖ%8ÊGH^¹ƒÂ>Æ;e€›l[ç¾}ÿ‘¶¿ýâévÈÿ¯Kl›{£\ Óæ”–AÇùŠ_šÇ¬ª)m~¯šqì1íVc¿³4,¤…޶7‡–¾RšF9Lu@AÛ¯åôJYC†O †€Ç‘4Ȱk¦V÷H"!59î’·Ä>5()Šj×*¼]B8…Þm±*äHxdþÀ.ƒ¸! A»ÓÄtd^\æŽQfÑ+ùï·ØP˜Ó€¬EB„,¿2äõÐCB aR°%] (Õ¹CFq§°)t§ßGŠC/…8C!"tʰNbè2ko…3RެL#³Ä™ÉõèG`êõœ×Fó”æ!’Ó¬‹×ÜF›×Ÿ&H·½ËðÇ&Ê}4'ì@ÑÇÛZ`q„Ð"™HAÖïâ°~øEN4iÅ ãŸ×[¸ûj‚ýHa×\̵Í9¾ôÅ2;S{JAØi' ^ëìðÄÕ;Çž´‚2¯lNÝqN^Q´KKJg-bM‹÷IïÒ[ºðd}O9Ú4ȧ̃öâ\pïA2^åÆö aST©ä©XëNK ÜRÑÅ9GõÅ¢›þyp'G z¢É4'÷nò¡Iž8àŒhDy¥eg?LSLÉDÏ è0Œ~9Î00 åÊ>N%[”%[ÕN&xßµ5žfnsü€.sAPŽ&¤Eâf‹ëtÖøÝi¿rQ'‡ërq<ÂAù,4ïtØG:?ë@ÊÇ\©6Ãê´yA·xšÎ"ñû¾Š2P«9mçóD¹@îÇ2²–%4[£g,K' +s„?#p cl˜y€Œ®/”ë‚f¨:ÒŸ,QÊeêéÝe lùl2C[®ÃüZCÄ–µ.F^¸…ÁØ" OÞ‚”&µh©.Ím9dá«Û×_½ŽÊuû ñÐ] °ù f ¡å5MÀqÕŽ•ÎΚ©àVN¿JN,B–aj.LÍ|‰Hó™•í ýxZÍFvô&áÅBÅqë´] ò¤Þê›\#µÞY[Š'ˆPPñÐÀOCóMSû‰0D9e… cSõë0†uBËŒ!˜€Ú`qgÃï]囉ê[fTËõ¦%Ç‚çq :z(T¶/ÞEÍà–tmXMÍ Nqã˜á²Š0š­Wî­_!jw…qL?%¤=dz OÁ*²'!`:h}.Í›xEyÌ‘)ñ০ÄÂöØ¢OÑÏh–NÆV‹ÔN®]ë1 ‘ŸÖ2Ös~ù YDe¨ñwµ \m :[¼Ûþ^i’ïO÷Žc¶·ëïXŽjGcLýÖ8ŠÇB|ï0þú¾üç÷£A:(¯ív 1*M%}“;¢ú’,ÒS“Ác{æÁEeàðì ìõËÙŸ5!ŒOÀq‚UE+¢èS²Iô¾t@;6Á.èrm>¨Ç½Õ»±˜6üë‘îmPÑE©zÛËÙ›±W‘°ÚÖ£1ÿ…ŽÕÒWÆO„Æjë§Ð¨£²9Õ¯„†tC§Ÿ y-ä>KµAû„;¾ˆÛ¯4Ó*[ S•saéíÿù…|pêô¡LáÐç¹ eº¹ A£Í+ð:B³„¬H×S¹ŽÅoƒL‹ß¾§Ù4gFàš¿UæÃd~ŸØÝßlAÖÈšë7<þhQ¿Qó²_þò?ú5° endstream endobj 351 0 obj <> stream xÚÍYMã6 ½÷WøD#’¢>€A:‡Þ[ÑC2™œº‡=õï—r$ÊNì8N2‹Å ˆÌ±l>ê=ŠTºtVþ  ØŸLLÝÇ÷îGgbÀÐý×Zã½ï¼‰–ºï‘\ÛT®ÿíþê¾u¿¿w/oØ5É&èÞ:kã øîýð÷«µ¸“o7`çK²Ö¬e/ß~»A¶bå½|¬X޽õŸ÷?;pÖDqËÖç8ùW’Ê­túvbcÎSN6výÔ?Þ3vÌ$@C> °TË"d‹@‚Åc”¡ËÃÞ}+à°@øTPù*Ô«ìkï;È÷®ø1ôŽC¤Ò¢—·0òì,6v/Ïp){w,÷lê„ ‘¨$î4óÔìPv™agŸÕéç8N\§A tÄ: ˰\ª¸ø¾ú €xP€VB©¨½KïËΗQðúL¡ŽÆ»!­O†YV»`»MÚ:ôNöЩVRe¢s`å³/°Ý𡎠GPÔða­„©ÿFšZ:‘”§Ðœ¶èr¸†â¦“P²pì®úânÈg‰ ÌŠ“$\±Á$9bâvp¾™fcV§JÌò£™- G0<žÙÔ«`€x¨˜Q2‰\]6Tá,%ƒEÔ{ã Ç%µ†mxÜÎm}5ökÌO:ß ­€áŒXx»+›“.˜«ÜÝþÖïxƒß$Ò˜×` ã옲Å4KY¡ª2­7¬åEÎ\q9sù«™ /2W†.„œË\~”¹h˜¹>Oë«ñÂÓø,:’e7ˆh²E¢çƒN5Ó\ôt*‰ûéÑ–¢±Á=œÀÔ)&Ðô†E,ìKº#y=VŠ¥-ÏbarO߇ZÇ †ÕªÍ6[›1“’ÊËž”’¾0 ¨…ì/ÁCíô¿VGx_ÜíÀRí¹Xyr'{F…x5RS%0í'Šá¶ŠZ²ØVDŠFá5\lj–±=W#Ñjà}ó. ÷| jÿSÛ‚«ðUøñ²Ü´ ú¬ Ûûo¯Í^¸3ITYü*rA•K¼” }4‰ëh7NO˜ß] £‰‡ûQ5Í÷TÎ`’¦Š¼l\˜ÖÕ&aEmò~!óiUWµõ|*Àãk[NÍ÷O*Org‰(¼£ ô-©uFb­–k=éi¦t¥`éÑúÄFÃÁ?Þ`5·¤g!*¦EHNŒð´ë´ì`ÇíܰUAXÄhžLå!ã´ñíÎ ççI&<5–F,«¦k2 ù¸Èy:òºÃx£L3M³Ts áok! ·ñ”.{~^jRÂÿz—.¥æ}ÈB2Ä>‡ ظ>dÅ4ßuÕ¹ …ïéWQfsKˆq©˜!1€!‰Ð“• k•IGUæa¢eh[Úq©Úûy ¾ 4n­j…>ÛËÎa²¸§2äá²˼öÙ '¹Ï;#Ûôº-:­Ð>•j‡ök´_˪8(—v%”òðþƒÏ$EIQ?\ÿsŽ4Ø$QÓüAa›HŒÿ¨#é&>ã賸%÷ÈîÊCHÕ´Éš‡ŸŽ-¢o‹Q€Tö&»ã²\Ü~©¸8M»¨õŽ-ø×~‰‹¨Î;•ÕcÀA§¬bÁvtÐ:ê¶ãk怙CÂò2ë'žÐQßR·<дê<ÁYáÉhÐô¿4Œÿçhêøð`UK¼À[ ‚62`'Î@®¯ìùzŠ8.‰Žh û¬ˆLb%: §}ûíw’e» endstream endobj 354 0 obj <> stream xÚÝY¹’7 ÍýýC xUmM *9p¦òf.=W$ŠüûÙ$ÈÞéž[¸T«íEóÀ{Aöðs€Aó?<ÞEâ°ÿ1|y~ÿÐ*êÃû‰£ŠÃÆ(nù~øûMk°Û 8 üH†5?X­£Åü[Óq»A[¬š|ý‹ ÿ¤6Ä¿XÓ_±¼)-’ÍÚÔj²YÚþóþ'ûsç(*<ã˜Ó¥ÈO¨ëðhäIÁQžvòtªO0Möõ}ø9¨àÑÿ6xvÍðc0ÊX+–ïÃ_÷™84l•(Ž"nNΊÛ&:)'æ×‚&SG¥ÃÈ¿¡´ ¡ó0½¡ýŒäC™À–·<±>´9xÚ·² ny¹º‘O³VÙÒØ.mS›P3÷ëÛ7o'z¬s&ô ç6-kv9/p8Mb¥iØú·Òwj›¿Vš‘Ï4û·.VsónªEêWBÿ;ÕxYH *EÐÆ9ÅS—å7vÛ@˜Âø ”Æäßã´*°+ÁOýÈd• (¡Ÿˆw<Œ9åPž:Ì\A«œq-WâÔÉºŽ©iœ­ÿ¡´h+²k¡›Ós)[0*ö{ØThCÊä'oŲ–-Ò3Z…(é¾aŠQ&¾ÙDzSžÙ¤Û¥fÂc‰3¼Ã™O±\Å@ (VEQÐ…°›‹fŽ)âÎåÐÌ&ûd½›ÚaF1ÐÒËÜç[å2œéÍ}^gžJlîE‹efÞtn‡2ˆ•ÐÆ`d;vbuxù: ù’Q bÂ$_ECñÙýö ïý¹÷m¿èp <ÉÚC¸ à€`–A“e5ƒˆŸ½ãv, :@'¡áº„b ¡5 µZ9ŽQØ—ýkw“„nóZô²’·ÝK/‘RàºÁà°A`š"&æLTHÔL«ÔI_dñ‘ìxXM=¼FMÅ-£9šA*¦ëÈ(tæÕz:‹€õiQ–jéc»’s1¹ËpkjûÂܾ£9ßUÄñ¼^†ÓuM£èA5XJa+Åã<ˆ^ÍâÒÜ"¸A‘¦òÂù…Q@eÝ œöÊè8ë0)*ÐvÞaÚ°×}ËíM˜µ7ºL`ù4±ÔÎ;@Åย:ǰ¢#Þ)oì,éŠi=é|^éa£uî¾*ËϺÓ¹óPW%Ø/Kp=` Ÿ±ÚªO&©ÓX7ùÎó±(½F´£c]fb zÞ²²f[âHÃfZãZºò¶Ç(ž•lÞ[µZ±›S.ï#=žbºŠÇr`éÕzmgq:C ÇÊ ìD|´œ÷G©f|„,= ¶ƒÓ¸¬‚Ó\Dð—ˆùŒÜ^0Êæ´ƒóŠÍJ”DŽñ¸¿ãçÔÖ@냌qÐ{IÛ½ö•nâAÎóˆ‡;@?XÿôÐÆèŽ‚TlGY‘#=„^Jws²&¼I”Òûé2¦"[º¶zœ‹î¬h*8làvr*ÁFQ·  o'Á?ŸÁH!NA ·Ê4tЫ6I²»õM GÞô›@5­Ÿáh* Èñî× ˜Û sgáÒ"õË]LëËJ_T¤ûïoèŽû›týÍžqþßvûÈoC]ˆòÅÕ~ÅÁ€“´c*sf!ÑȤ€‹Í´F£tÜ̳:À£hOOë@õÊiRM¨š®r|ºÄT J6”-ÔÖBë¶ ò³(ýHÈØ]ƒœéD»8Ñ¡}X:¿25qY'Êd/Ò‰ÿt{àc7GÖå©ò"¡AVjl_nÅæ„ª °‚¸6Æõ¯‰ˆéþ…÷¼Ší4mäówûöÛýMËã endstream endobj 357 0 obj <> stream xÚÝY»®ã6íóús9$‡Àp [¤[ävA Ù²«l±U~?$ÅQ²%Y¶ã܆)š9gfÎP¼Íÿ qªq6šÓ÷æG#¼S®ù«ñZ€´^êæ{£­`Cyþ³ù­ùÖüüÑ|ùª"ÈÍÇ…&ílÛ|t¿ï¥Tmüàa2`zÔRšNJ´ñÛv eìÅcüÈØsɽ|üÚ@ðB:M,ë˜øSˆ‡êþÛÄ>Ä4¥ïC“§þò‘p Apì@ íPÏ…q¸/V@²òÑ( û~óÔƒÀH ÇOÉès1¶Kú%?Ùȉº2ÿËWpµ!S&¼¤E,èxaßR+pŸåþB­Ëf#Ð;ÚlZDþ ê¸Xå“Ý:¹²šÏ€ÏÿKø&~÷~C±iúXMíâã˜}w-³ã¸e5·°JŸ± ìÐ kêìé;æ’ŒÞC³ó(4BÙ^ãÁd“åšÄíMJ&ˆˆedTŸgp,˜L½2Jac`²,$倞.nù4æ¯Õ–'ÈpENúÌ-Òö.’-™cîPª‰äÎŒP.iŽ„¤«‘5mE{fiã™±áQ=«¡FF/„§5t0KV•®uHZ o)@qJ­‰hÎÕ»*¹)[«îÏ?Ì %žQœút%š[Š5µÝT“²ÙDMôƒjòOò`Ìæ½ZäÁ1‡æ´…ó–ZºìþÀpŽ ‘vC·Ô°-jÝØøÞbºìö+^£V‹øsgÏK"èÓ–cÍ(]óÕ#Íœg/é]•p_ù°‹åÃŒËG*r±|¸º|dåúÑ–ú¡KBÊ>Š_SCB,œ.R Œ ™>üÐ5/¹4W;!ƒy¶Šh#‚‚T2Ëh¡¥A*]ë0¾[Hý@YL’0ÚlXrF ƒ¬’ZQKrBÿª†ÖŒH”Í^T#ž@É‹HNv8]ã¨sÔlÁfîvÚ£š· ”\Àa“sެࢹ-(ZÆ#½ÒuöQ×’‡TÈ´ ÂkÜ®Çnƒ;Ûë±ñèqÑâžßמë½ƒÆæ—šô6dâ[²ºf/h*F/€ù,w#d•E}H0 Òµ Èy¡•zû©^É…÷\Èï¹V¦Ö‘[gj=·$··xîÉn¸"ùwõÏÐp‚×ÑðæCý2ìŽ!vìéÎRḛ̈OÃ8& cºv ì÷–„χßþgnÈV¸ ŒÿÄ­n¾í…ª–Nêš­¦ù"DÇQc­4Û/Çü½—c—t<Uæ£Ü=—c© å}mbØs.åÛW5¦}MQ Z¨€‘ ¯x›ˆDOCÏ<3 ãŸ­©¹=WFV¡„x"ðêYÃñÍÙ÷@IU«‰TBFñ8A.OCÐU'Jj —=)ÑÓ¥:ÓêÓ¦fôt©ŸPÞ–”bÀì+Ð*p]·ÕÁopïhúÖû\Ȇ¹ #¨nÇ6ÜV*W@²Í²EJS¾ÒÉ‰Û 7)°'²z¡°=âm´ ×ÑJßx5ÆuÚðÉJ;¦otüº/Ë?諸÷ ÎIŽ„jØc“*} v_m„<ÔÒ•¡a0y˜q™q·¯£ ¯¤Ì^ya&XÓ 'ÇŽ§|:ÆÐÝj²IkU#,J§µ.¦Õú±š,­ãŤ_̾ZÁ1ä~yòD ;ä4³õÒªr_ó§\\¨Çg¤Ò›ŠVºÔÎT¼¦¼›Ö²„ȉjÕTªÊcR‘:ü† ¦Ž†NT¬ÍÁ©éåä¢(êsèù*¬sàuÏ=…y7$Ùæ˜­Š™EÙÙŽª*°SXk+ÚK¨G™¼=¥¤@õÒú¨’høD”%¿LûöÓßGåŸì endstream endobj 360 0 obj <> stream xÚÅZ»Žë6íóú3’Ã`¸é.â.Háõ£º·¸U~?Ãײ%[²½, Ë”HÎ9œž¡vø9À é§gƒða8þ~Û¿þ¡"ÈÃþ2€QÂ5l”P‡ýéï­”wÆÓ·QôÑô9ÑÇî6Êj#¥¼Ð7Ý…@ŸÝ?û?i`ÓŒRXD2!©¨ƒ¥–úÚP:Œ,Q(¬¶ÜAÒÈ ã¼R¢)ßzç¶å’nÉC5©‰¶Š’Zñƒ>ô˜¹ÔaÒ¼¿ï‡ŸƒðN¹áß4iý°/ ÚáÇ •J¶–ïÃ_÷)æjOú6*ÎC4{·0þ\`X2ŠHž‰ùŠC^Ôe)LÆ©¸Âƒ†Øîðh'¬ò=žÒò­œ!n²  uÛæ©£ÕŒ#bpõW4/™ ô}(¦F³OüDò#bFÝ€ c®üṙtu­e¨Ãä«#_Ù)ßÚÔá6 V7ÍØL¼,’y ÚùÿŠ ”'ì 3P%5Õ+SÈ~D…aÁJ¦x;WPo¦.˜æiµoœrÛy 0|n ?á©"LX3¸Ehü<œ0f·¥e>np#1 ” ësøaa×1SNÒ1m©¥9¼$ë”ÌÕïòu²íRy¦æ…D®„6&:Šƒ”Áƒ†Ö4Oaík%qùj*—^ ³oHål•!Œå–Çx\ <á‰\~7 ôh²+¸òt›Ÿ5 Éï81‡VósНÜt(“]egùó(ÁܦäOØØÐØa+l”°›qä@‹0Z÷Ò4»ðà¡!5§#?j]. ;KsÁGÎ)”í¢\°K™Ñç©mYŒ¾OìÇ6XHLÙX)>ýޤá•ð‘jê!@™Hµ%Õ©®MsTsW«…ôîÅœAȪ×å_³*ìPizˆ.Èúõ9C©@Ù[sÔ5i„®Øl‹÷5é~7G.xMpDEmS¢ñÔ ¤z×O)6¦õFì-ŠñË©™‚ÜH’œ²Zud¶äuyLͳ3„Xk»>Ôu¡`A†¾K2\×L`àØVŠ3Žåç,ßur OªÑOçÂò¾jm‡¬¶±³ GmwÙ1Üq v¹ØPz)óS^äD÷u$ñ –]Ç6BØM›ä5ÍÙNkHrŸê0ýñÉ]n_ ³©@:ß²Ö±¡c·tn~sÖh…‚Ñæ\›æö²bWïh]7Õ%ÚC«gòµ†m+g ò8Ö)÷s=çÚ—‹&Ë-²ÌÈãÇ{®žH^Ç<ß¡EVëÐN.R¹«+Â$,ŠªŠz.­¥'ìF¬iå*ZYEÊ ŽhK³Ü5 ”GYç“»´P¾Ñ›|D^ÅP\Aòd_yš´…ÆÅb U ÁV‰6¹™î¶_¡Œv(.ʨœ°x¡Ç¡p \ŠëíútwgŽ'™ïŒ\-Uvyн©‚ ¦´eHÎ;ð]A–ênAa& +g ×)_®¨(Î- 9rð:šßVY(G…˜1TÍ¥Ô=]îˆðÜ QPeñrUB[xGU‘­² ]ôpJÓC@ÎÐpU±N+.Z¸§6³+‚Îm‡åº]Þžåi(ÝÎ-C Ý '{ÏÙÅ×qÂÛµæíZ³ú4q¾ÙR]3àø˜ìÎVÞ+?›+Š…êÚ!mD¸GaG^/£ëɪcù~òe¾6kÝ›zÕ6jyK2±0›QPa”ÂjÓ#1‰¨It®Ñ’à×nÛ©+ÈNïºñ“IO%ùbú_iázµ , šN*³Ÿêh¾Z#‹eÕ!.Tûœú9ñн|vÛMyé^ƒU%,Mï9õiÖ'=}w¥wêÅ@V‹íMCž™-UÝûcndÅ:)- ²ï!gÍc{¶Ûz¶µ–”ºö;Lõª£?-©ÿÜråý qÓeBÛrH‘ EÖwštB„øÓûÍ5©B R¸€ë§õŠã鈎)¬;ž>S|WrÆEÔ[þõ &?6V:¡‹)É ñc[Óì9íª¤Ðæ-ÿzà__ÅFÙC=žÒô„Çýÿàí{ÝFH;m§ËM¶˜íN¡'ô!˜ùÀP´Žh#>¾À1¬ ÓQéöí—ÿ Ι³ endstream endobj 363 0 obj <> stream xÚÍY»Ž+7 íóú+z‘’€…‹I‘î"Û)ü¬r‹[å÷CÍH”Æž§gwqaæÐ£‘E’ñCh¡è£…7Âc”!ŠËwñCÈàÿ ­@Z(ƒ²â»°d4˜¯ÿ‰oâ·wñë†î”QE-ÞïeÐ¥Fñ~ýûM)s¢/ZEH—V)wU ~ñx0 H gú*ÒÜ;í?ï í” !ÐósýékèVÛÿ:Ò¤!½\7ô÷÷„@ÅqÐFZŒ ’¢YÂb€À„¼ m š@¢Kb·xEÐLpcHéÊ—«´Ònåš~OyÕ Á•ï¸v8º'=à¡…Á`e¦Q<©âÇ©s‘¬-’áå˜S‘4ÿ«¯e²v®C™ì ­$ƒf3¸~m ¾õh^Ðãè!¡¿Ä„ÚÖ‡\Š„†Q³Î2VÇÿ"£¦]\Díb ¯íþ'ãÃZ-5Êâ³%Èv5d†¡€ ѵÓ+&Æ9 H㢑Îë²L8ºÎ` ¡-ˆiz‹#Ý“ö²>gì®}2(‰ä{ŒüÜØûØþQ̢Šñ˜&3!»)d*9õ©Ne9n;=ÐL±™µuâd¤Å’Ù´—ˆU3i7j´ŒÚï%Nš<î'κ¬ 5leÍ2"òÙä99| ‡ÏcÌÇyzˆWq T^Ô%ŽÅ’f®4Šu8Î y²^x5+ì@y[À1ã¡HDâB»ŸY3Ù(U4tct}ÜÚ°!´ÉÊöçõ¡mÝjhøÖÔ]Zx=ºC”& ÑšŠ®B#)¬ªjÊv<Ô8Š™ÝUQ Ry·;¸yUVIka(«9+µ…b{g-¤®94y2=é!îEêra/Y–€¥K‘<ŒÇ|žâƒbþ3Ñ7˜õæó(ú ˜ÝÚMÆëe¶ì)ëðõÀëЧ>|k8ì°‹¿¼Á±ÄžØ?‚gé´Å.ð%åð<Ä+/·>ð6ÞúÀîØY"›"n üÚrø§Ãï_¤€BÎ.ÓfŽ’öÚŽÃóMÓF,±#‡LäûâLâL•†׿™¢š.:(±†t#h©4EG\WtàlÑá†EÇµß T“E‡o‹Žn³»ª#mÞy˜;F;}PcAõ…§Nð`ÑS{Õ•m6R+®«jÒ„<6( Vï->L”ö7uU(½ÓDYµŒ(ÒÇÅÇ&þ?˜ï2WØaäÌåö\‰ë;¸?ôÜO$ÓÏ•8&8÷©­ÅFÍ. ýHÿTû>M¨vÓ?­À›ËŠÞ׿isĦElŽN’Ï·Þoëšj® QEϘýÕ¥m*-tw.@ߢ´2…¬°E‡ô2À}\·ÕßÞ™™•HÚ§À•FÛB§·þéшFO#tHÙø™ÍA{”†:©d!ïÃs‘±äót<0]*.C-À×™ªž36Y—å8¾ÁÎÐ8펌&¶¤WTÓÇ)(]J™.&£nO„~c"L8^_H„Åoy.õ”í#aò q2¤q]% AaUMÙ¯Œ¤œÚŒ½IÐiM '£îÌ„eaÔq;HYµ‰zpBÿB¾šGÃÀ3øfÿŸr@}óÐdÆœ!¬SZ—+’:ç…lñ©þ{¬mcÓ^ÞÛC¦Y Z¼0æ°ð)QÖThlÍ#[n{Dz’“¶:A(´ÈcCvþS>—ˆO ȽÜqÔØo÷Oe¶¦˜€ç2ëbx1*ü\4–9•6çלe{–çêuYr¾«/×\}Kõ<ç4Iò¨œ´~ÀˆE5ňƨþí/cm lgç<Ñ·_þ=™Ü endstream endobj 366 0 obj <> stream xÚ½Y»Žì6 íóþQDŠÔL )Ò]d» …çUå·Ê%YÚµÇëõÌŰÌ%Š:¤4Ý:-Ð9ìœ Ê‡îò½ûí­ûõì@« to÷Tæwo׿Z>Q7¡©œwNKe„ÒpÞD§¹X¸I´äµ¢´x×îMkAJ·;«MFYDRãI¢5å§Iôžâ3(HáaåÐ “h™²®•Dâi/Ïi/UûžËf9­0˜R­CòFr#>ù1¡¹rlëryQÝê×0½ iJålóEÍ×uøšå½4ùëY]BbJÚÓÅ¡ÑUM^¦žØ¶´øAh[-k \ÇA-Å¢VlY:z'ìR›r4’©¾ýò?k4IH endstream endobj 369 0 obj <> stream xÚåYÉnäF ½ç+ô®)nµ†2‡Üñ-È¡ÝjŸ2‡9å÷Ã’ªØ’Ý›ºå{FÃlZRñ½¢ÈWt÷­ƒÎët»²K¹Û~í~ì>}ƼË>C÷øÜ°CŸ»;tÈÒ=öß{OòÀY3ê‡ôÓë'<ÜáàöÞ?¿Aÿ Oÿ<þ©æéƒÅ» ¬!Œä¤n½¨Ï£ÈÅ´‹}öûq}ѯ~£k‹¿ßG#¡F4xåi¼ŽŸ‹Wmùã±ûÖ¹1vÿu€¬$(PHŽ%t_;Âà(FóüÛýÕ}9DQ»“À1ä#nô#wà³”¯6„p•EÎ+UÎÕ'R±Ð <Â"S<]À4ÅS=gñè±r3ƺ®R<(e“Ëò%rݯ†¥àˆ¶CJ(v|æ§ÏD³õ^"Æ–Ie½ñqЛeäA6ËöR³|<”Hwm15œ´|R\JÉ@eËF8Cð¬Ý‚œ@óü@°;÷Ü2ØPžÝ½œÇD+À†ü”Å  ¤=Ä,Z¼\|?y[Òôu[ Æ -1-®Ì·ëí¼að†Á[&"7‹lqJ§ŠfY*ÇYÕ¬®ãe†\Pó]fXÞ[xao ¥mL:(î/…ÛMáÙˆàZÆi¿C®mJNÖüäuºRJ.&VŽ$;޹ðÐñ@[uã×nzãm A·ÕóÍmiUÒ=‚ ê: (kŸµÒ—×®áBÝ+©a÷³+.¥±ùYÍùÙàðPMÙ •ª|±Ð,6KÖö¸uãÚ>õc㮡ÄgÃë— —Å­+ôÛúVîÆ Î¬_BßÏ:Ey··³.±2nˆr‘*îÜ7.òΛK²@)±£d¬4²¯@#7 ‘Ñ,2 {Kª%f5BD«íB®l§¿3ñM…ÆcU+«"d±Yb\žè©ÄI˜õÔæ:Ö‚îÈ”[s '5ÉrV4ùÂGEÅ…ÜL…,=Äû©6–ÞTò7Sl[Sÿ°aö çZ6+>‹ÑJsˆõi }^œoÊî0 i WL*Ö{×SùÁã­YF ï̲Lb1ëi !«I¾ëÁŠí¥l±Üƒ-–¼¿Ã2‚åÁúÂîü`hä{á_òíîȘ°ÂțׯŒl÷KfЦ>ë—ÍutĤÂB™Ó #¹àa¹ÂW(Œ='7˜JÎ"o/©ÞrÜ”½“k5 ör?Néšë×íRþi@ü:ã&ºYœ4@âUbL5×Y@ˆà]Ž›ŒŸHmèâc+Nh±u'™Xv¢„Þ|iÁHæÌ¢¦´X¥ŽVŒª)+98ÄYŸm®s#¨€ÁåðrUÞ¢pV0¬5ß¹bUP“‘Ô{G!ê¦mø!E—…­Ï ÿp¯·}ùíìz5 endstream endobj 372 0 obj <> stream xÚÍXMÛ8 ½ï¯Ðˆ*R¢>€AÚÃÞŠÛbãI|j=íß_J¶){ü‘xâ釱,>Šï‰”ú©@þ€ ¨‚O:&õúC}~VŸ¾¢£“I ž[d´‰¤N¨Ñ‘z¾üýdŒ¥³‹üí/Ë×…/>¡KlgŒi»o|5çžÿä»ñ‹ù½žˆ]è^éb÷:Ÿ¯K?`â ’öÖË“ŒÁ<ï‹1Ä3‘gÛ û@æ©z•­Å³b¥†/~̵ٚǕ‰¾<«ŸJÇ€Aý«À’ÆàÔ ¢väÕeÁkžK,ßÕ_êÛR¨†‘´ƒÔû‰ìÒù&Qþy‡cÅ)0QS¨BÆèR$²}ì3nê±Ø7xÈqxGxlÐãOo¹‰‡—Êql:? {ê¦Î^ŽŒ!È"”´`Ü8sñÓW;Ɇ·háux ¢Ü‰ÍÊ„è†; ù×ȿץD: “Àjr¬àrù¶‡Sœ/°®ÇƒGA^Iî.HžÀem¸k7’8mi¼æa}ÉN˜SÝæ;Žøžîã{Ü仫|o:·̃æ^¾_{.=^¦¿Ýõ @ä¹s8l i0jï\5­†PÆbÒáðË€¸Å©‘ìQg¹ ÈE”ŽÖšS¤Â,“„‡vÎôJ”»$Ï5í†ø_¡‹ ™‘CztNñ%/,m EÕ@ÖÅ\ö¼Þ„“•ïMër¸0È&öØÙýÛºwûo)àíßì‘€¶£Ç‹3ø§^ :áz·$§·\þiSªò:Bµ¬ÅNr°™îÊ@æ^|XÄ+z´8ÁÓ›nrAs¦‰ °£ BJKŸ$ßÈFH`$R&Î÷H¬SË´¶–—e)è'+RàÒ‡jÁ6ÊŠöÿZ4s¼;PrêBPºû•»b;§ZV2tšrËãîO×[ÂZµŒ¡jŸè¦«‚ÉÏqÛú«L='|P'®êûXðd‹C :y*£°¸}é1 ~O$H-‰œ¹ÎwËQ\kÕèV*5"™KC˜¨JoZÝb¸¨0ÑSÞ”’T;*Η{+ÎK1(ù½¶Å„éÓr7z)1Áa1ŽØV­ö)1lG\Ù”§VËz96Œ¤¨Á<¼±”Ѝ/·¼Óp‚¨7݆‚€£+Ì0oq*`¨‚+/é!°Ö[×y½…qÄžEÁí'ûÛÊ&ʺ­ Yàþ.R)»][Q»qwy׸t–ÐÊbÙ0è}«q(ÉF?¯ôg°–•Ä¡Ó`'ÄLëâË9Ž©n_}O™2wÖ÷Yts»(Ï­úþœJ‡×¶L-┋þ×îû~ß¡ŽìíÉÃ%A90áÍaµ¬‡p­†~—v¿º•´3aŒ¨·ÜDD5r‡s°Ç­~ßH7:ƒùߤ$¾ÙÛ°ò~ ¢å %nç¡;Æí×s°lãåc\B&ù~ŽãŽçCø Ûîåx.‡éÙ9[­õÀõœù‡T_ÜÂ"æøÈì†MV@‚jZ§Ç06Þý6„·ÓÛN õ¦›|>õ•9Œñi󄯙xcó¿szÓçÚIÚð—7Þ/gœGÃl¥ñò ¦µåAþŸróéy¹Qùrà÷íÿlÛëO endstream endobj 375 0 obj <> stream xÚÍY»Žë6íóü3œá À…‹I‘î"Û)lïºÊ-n•ßÏPâ˶$[kïz±LEqÎ!é"‚]ѧhÈ.kÉiË!¢œ¡ã(M3 ‡þþ¢~* ÚǬ.îäb9ÊDN_oÑ+郆´!¨°1A#\¶¶È˜GèIv…‰¹A±^Ç{(YrŠxËÇu÷ñؤ1CÅô÷åeÏ$÷Ò.«™T~­w ñ#VÁ 1æ$Îl¡<ëx¨«zp]Õ_ͱÞg¦¢mSÛ€Õ\‚lENi™ÊÀßž`†!ÚÏÌЀB¬¿Vs Œ«©DîÒïÁ\"’2~—û4RŸ65ß Ù+¬±HRv/¦@Ž7äÀ`€·àA h_rhÇÖUUÅÚºª@¦Ùy l÷¾@øüX³faµŽ­jØ× ü‡5øýíeß÷b*[냭¡Ò|EµZXcŒðùUᣭ³ïì4ËlÐäNÉ@͵Ðô;–½©ÚE‘ Dª#Q´H¢ø‚DÑ~ès$Êõ$*öªWæÝ¸^Ç¥¦yXÒ(ñ&!N²ëÓÑaÍ[/ïE#tJ\pŸ#Îð|7ŸêÔ\©ˆ®CB¡UßA«ãN;ÜØ‚i©&\׃hT ëŠ'kE9ì1¤é©€:à¾]ï@îBYG{NüžEó~—ì3Vnô¤ÙÆõ…€o,©ÀA>åQÎÜTDBº\KÎé1¤í*Âè¡;*hë¥xb›ñ`Ũcý>o¼Ï«=Ø/S ªZ‚±á)‚뀵Gxt-À¥4Asô0µÔÝDš@W®Ö‚Æ>¤,¢l8ÚË¡}›x+Â…8µ„ڑ훳Ž%iW<¼`;Mž×'»[‘ìö8&¼Ç5É^"ÝoY¥õ?$ÁS܃xßF±ÓØÅ"Ö5ɬåÊV2¢7…{sÜ‹#0ÞŸãU-8tˆŠä:"$qt’Û“ÃÎðšX¢Kþd¢æ Ÿ‘¨Ëš†ªiëÕûËy×àxÆøâý6HfϵÀ¯Aù9#‰EÕSrŽª£›Ì…Ó* ç/ñWÁò“æË kÌⱋÔùzH5ŽÓäR=²d¾“X-†T–Îc8Ü8ˆ/doƒ¿q?¼?f ÙãMƒøÜMv9Abgb|Ü0> ñf n˜a³oðM4gÁº•‚F‹_¤¡T­˜4ÉûL(‹®r^#=ºÐb‘®îlãwØO ã`b× ŸÝŠQ&[f”|‰²ãÍ<ñ‡VÕŠªöåúÔ¢†nLñÄåí½º:ŽåhØppueæó\ô‘7<ìÓ¢ˆæÒ"ÍSØI‘uÁëÈ51¨'÷ßùwÑ)+ endstream endobj 378 0 obj <> stream xÚÍXM7 ½÷WèX)R€áC€öÐ[PߊìÝõ©9äÔ¿jF#i¼3ãñzâ,‚&’ø(¾GJê»eä(Ê»¨CT/ßÔ—£úýOT`t4Ôñ¢À²öìÔ5«ãë?{c,(È/¡|V¾WùÜa‡Å dŒ¹È/Ëä;þ=þ% S»0í˜Å…~I'K¹×~)¼ä #Oµ³®L0QüØÉ$Ù8û“ÆbcêÍIüb³¯žv3Ü`å³|¦×mþÇQ}W:xôêŽhÕ‚&‰Å7e™´åjùOý­¾NDo˜hAÄì9žäãÃLäô×nu.í1”`B{Ôl3úÎHì& xEc½v²\ƒ&[n¡‘£#‰Kï  ‘Yû~ãä3CA‘ør]šj|ç $Òî «¹ ‹ #[FT6´4ŒÌËT톅w`5ù ¶` 4Ì®wŽvÞ¶†E Žb'hÃèõ6Hòèƒ(¹aTfUa\E½u„È”EÂ<%ƒéŠmgË\9´1š`I‹ë$-.JUIKÿñE–9S’æÇ’Öúñ&ß©÷¥;ýþ_>,c€ [“@G§1RŠFm=TÓlØÊ\5²TËLÐìÝÃZVÝ"ÖäüR6݆ÄA£s[ šmv¸as‘6(edª&¹Kr•G4Íÿ¼ÙÿŠÊ-¢l|.%˜)q®µ­ÁV€—¥\öAC£ƒÏ¦y ¹ä¥§1¢Ò­“ Ù¾‘Ó2àMD õ­Ï‚àúÜ\×Ûô~/ y(ÁD4šE%˜Éûjšæ0צdsŸEª[±k`[HÙt£4 ¼µ0øuÂÐ4%bPþuºI~*õ—q¼6žÖŽm!÷8»Ï Óü¡ÿÝâZVÂ1]/XngmåBâUÓlèÊ\”âg¶¡-?NÛâ–%¹2¹¤lº )¥lNÛð>ݹ9ïRËÞ&úùbÃRßl©ñ¨ÌO¡ò2¶Z‰yRˆDE°šóRÞ:¯ÁúÑ!gÓ<å¥IS·³Ñj‹p_ûîúZxGí,gÏ«kwW¥Oì3E²n$>Üׯ÷ÞN·òÒëX‰™(¾tÔOa5Í÷½Ã\Dܧ¡~u+jãÝR6݆$­]ð›S?.ѧ¨0õ"q~ßÊ7ïôËEày(grÙöÑ>›æå@Z9¹ÌSð:†{Õ ò%¸ä =®S‚ÈûOÛ\àczºˆéNúÐþÕƒÁWÓÂÛ]?D_KKûaΧå`‹—ÈÞ)-w<“M7ñX§ÁQ!|Ÿ€€%=›Q¢]!.³%·ëƒ•­Í@áÅtùØåuŸ@ï•xv›¦ˆ¿CÖpÿt2Z¯Èøž—ƒP¡ÛFØÖƒãûÊÍÀ–вíù°ÉÖ½›õõ°Ý'{W^D[ëS½¡Ö×Ä›¸Ksá éôÑÿ’€@}‹wzX›ëM=eø§¼Âº\-JÔ„-ÌWJ'e$ØQ¥Ls•¥{ð’ʳs©§àRZ¨Óå¼Ó×ß~ûI7r endstream endobj 383 0 obj <> stream xœíXiXTGÖ®¦iúÞs*¸`›#F£FÜhTŒ1q_‰û¾DQiA‘w‘}éB6E–¨àŠ(Š‚‰qßb¢±1ÇDIÔhcŒšÄèmmâýªtæ›™o~Ì3ß¿¹Êynߪ:§ê­sN½§4ÄÙ™h4W¿ ¿ ™QA!#ˆÆ™¢á½lÍˆí ­¹“ÍCk38??g_ýÆkÍž=Õ5çN5²¼¡qIr!iÜŽj+©3qvâJ\4-5&Mÿ®M;s+Ñ‹<_òœ¹Øsd`PpPX˜çàŽž#Cƒƒ½`DX@ˆçÀÐ(ÏèÙžc"æGz†š=ͼ9taPÈÏžcBÍQ ý#¸ºY!‘‘ïÀ ‘~žm„Dø{ŽŒž4ëEk;Ï…AQ\GHT‡€E³¢‚BC<ýCf{ŽÈýÕè‹þ¡_D€TÀ캢m`hĜ϶QQaïtê$T™Å—Ž‘æŽ!Qí` ×êéݹ³ÉKH‡ìêݲ»Cú:d!»tvÈ.^\xÿ=6#þáÇ·‰$ŸÞìOŽÙ¢s¢BÌŸIH_2–ô'É2€Œá˜@†’Qdq%CÈ`2ŽŒ$ÈpÒĆ 'Ñš¶š^š©N£bµ“µÓ´áÚUιΛ?q¾¨; ³êîèžèô½ØaÛÝ#.[Ö¶=4(ïÙsìüOWú!WrÄoÝS9êøÅj³tö©ü‡ý=%[ù‰éj}ÿlf°¥>^›êâj÷ˆ;8e¯ Ë—_vYézÅ-JÙ¯,7DCµÝ×àV¶Ü¢‚«Ý?®ÌæV¦9óµÒâ[íAÅÃ99c*óÏ]™›žÅrX6ËIÛš¸5e7;É~ßÊ0•ô÷«š¬’6•¦A*q7™$U=i­RIS¿*U½l2©¤A,a'ØÞò;Ùv*!¿[vRQzvvFùÊÝéeÁYS &0©Ïà)ÃŒ¬oYðåyׂÖ/`3Øä) Ìl6SÕŸ¹"òŠŸUUWrmPé½1v_Òæ¤ìE–¤$ÉÕÞ3îM[¦Ù}Cùà¦Öֲư„¯£mÜ!%`§âÊ¿_W¦ÜÐ* •]†ð½}¬!\ǧ•)¶£š{ÕÊŒj­â§<3¨êÓs¢ª>3ÏQÕ? UUÖd³Ù²•ïoUú¨ª]ÌÄlþ¬1«ÄYô|î^¨­ÙœÀBcÃãƧ%­\º2éxòšd6J²Oгq)#’“’Ø‚ì¤ÒôÊôJVÉJ-¥–ìlVœ”=1+.“]•_=+^·jõžÝŸn¨`E¬8&/*wáÊ06_²{9tLHNæ:²¸Žå\Gבœ=&+Ö¡£žH9µ}Ɇà¼@6™£wÚ¯*FU?ã»#¹zÇHܪ<Ü¥|XºuaãŠJXµÛå¾ÒаbÕç6?«a¸Å,·#1ÂHÒƒ3š‡¡þ„žûUUriæëvÿ·±ð]‘òAJ»Ò+ëØoÙUÅ€¬욤õlKÞÆ¼uk>ÚX–ÇV³Õu{BôV‡xó·‚Â8• ‰Oãw>ÒÈlfÒ¦›7«Äͽp±JÞ¨1û§²™Ó£f'Åò¹šL«øžZ«²¸ÇÜwµ_O+³=á0h~®Öþ¬¸Òø‚/ó?)Ù¶Piô°ñ퇦j7ÛmÛ=C¸ýQSnH×÷í1eʘ6Ý~ÍwÕJ,÷ª~ÊuC:,Ú-Љ%¥\ ÿ÷Щ}Ÿ£›<<õ:»è´”Õ£Ó?“ï2G‡èY>WãL}î nSµ‹ {-–¨êaăÛäÎÌ  y°^»·âÀþ­gØ÷ìqïû­¹g\àa9QUoˆ!—…¸K¤º1êSÇ„ÂÁVUÞLä‚Bɵ%‡Çš2”;D‡,W‰üBS©¬Ñ*›”HÃÛà:ÚYÓüX­˜¹óôT5Ík̆Dpõ²ÇïVF¾¹]IÚÞxÇù™WûS&·î„ÛãX墲Ãöö kR?JËgÛYIF;Ì>¶l[Z·œ…KýZtñp{;§û¶¯ŒlçÊÍÛvIŠÕÖ°~ݺ¢âE…ÃÙ”%áA+VÍ-É$®Ö»ÇˆNF6nSpI˜äö(6øèqóB§±’ÏÕ°ËJ3å-«B<ØŽe›C6ÍÞ1 Ý̳ˆ´ÈÔe–8K2cB >1²¢ìâ¼µ›–—$V°Ù÷'Ø}v`ùÖҜܢ‚|žsR³ã¥Ì„ü¸5Œû׎¸Êý Í­jí'¶>† pí·ËÖ`—fï %ã†v¯âo°€2I™b`àÚnõ[GŽè[KC&¸*êRÓÝjeŒø¯mâË“»#úÄV7¯ôI+ÿw³PLòØ”Yh÷¸ŸX«^f"U­2™ê3‰#©„úYW©DÖF È¤µp‡&ܺð2&í)‰l´÷å’Ç¥Ô¥¨ÍõÎ[fÙ\Ÿ¢&eÆg Å&=+`–¼ƒÇ>ͯàƒ7DóÁýE~KžðwƒwYJê­ì­¿µì‚ɃDZÕÊ]ø„ß9U½/rÀÙóØTU­µZ“’Óø„ ObÉ^U½"&ëi6O`£øˆ³DõªhýFœO„³Û…x&âå)‡°NpÏ“\[Çí´é÷Õ9ó•j%ˆ|_E5,‚Äí†Åàº"ÏÖ']žÒ$wW~i®‹=~þ’ø'¹ªÑÁÍÜXÛƒhרTΦPNiu}Ek¬À‰h‰3Ñ¢'‘ $-HKò&iEZ“·HÒ–´#o“öÄ‹t I'Ò™t!ÞÄD|HWÒt'¾¤y‡ô$ï’^ä=ò>éMúpbÒ“œš âDd§%ȧ'Ã9UÉ)ÊhNWÆr‚2ž”‰œ°L&SÈT2|H¦“ÄŸÌ$³Èl@Ìd $Ad.™GR5fŽSC§QN™N_i=´]´Ãµ™Ú,í&íçóÎ÷tcuãtãuk]d—(—h½·ÔT>(’ËGä£ò1ù¸|B>)&Ÿ’?—¿OËgä/å³²U®’ÏÉ_Éçå ò×òEù/ò%ùù[ù²|E®–¿“¿—¯Ê×äëòò ù¦ü£|K¾-×ÈwäŸä»òÏò=ùù¾ü@~(ÿ*ÿ&ÿ.?’ÿËOdE¶ÉOåg²]®•ÿ”ŸË*ЀhÁtàz@ ¯€+4€†Ðƒ44…Wá5p‡×¡¼ÍÁŒà - %¼ ­ 5¼m -´ƒ·¡=xAè 3to0t…nÐ|¡¼=á]èïÁûÐú@_èýa „A0†ÀP~ð ‡0FÁhcaŒ‡ 0&Ád˜Sa|ÓaøÃL˜³!Ì0!æÂ<†ù¡á‘ѰÂ"X K`),ƒå+ â  ’ R ÒÀ Òa%d@&dA6äÀ*X ¹°ò   >‚µ°ÖCÃØ›`3l­PÛ ¶Ã(ƒ° Êa7ì ¨„½ð1|ûàSØà ‚ÃpŽÂ18'à$|§àsøNÃø΂ªà|çá| á/p ¾oá2\jø¾‡«p ®ÃpnÂp nC ÜŸà.ü ÷à¸à!ü ¿Áïðþ€Çð°ÁSxv¨…?á9¨HPƒN¨EgÔ¡ êQB)¾‚®Øb#lŒnØ Ø_Å×Ð_Çfø6G4¢'¶À–ø&¶ÂÖø¶Á¶Ø߯öè…°#vÂÎØ½Ñ„>Ø»awôÅøöÄw±¾‡ïcoìƒ}±öÇ8á`‚Cqúá8GàH…£q ŽÅq8'àDœ„“q NÅiø!NÇè3qÎÆ4ã Ä œ‹ó0çc†b†cFbFã\ˆ‹p1.Á¥¸ —c ®ÀXŒÃxLÀDLÂdLÁTLC 2LÇ•˜™˜…Ù˜ƒ«p5æâÌÃ|,ÀBü×â:\EXŒp#nÂ͸·b nÃRÜŽ;° wâ.,Çݸ+°÷âÇø îÃOq?Àƒxã<ŠÇð8žÀ“øžÂÏñ >À‡ø+þ†¿ã#üãTІOñÚ±ÿÄç¨RB5Ô‰j©3ÕQª§•)P¤”¾B]iÚ6¢©mB ´)}•¾FÝéë´}ƒ6§ÔH=i Ú’¾I[ÑÖô-Ú†¶¥íèÛ´=õ¢hGÚ‰v¦]¨75QÚ•v£Ý©/íAß¡=é»´}¾O{Ó>´/íGûÓt DÓ!t(Fýèt8AGÒQt4CÇÒqt<@'ÒIt2B§ÒiôC:Πþt&EgÓj¦sh —O~AI^nJnœÑê²"&jq\vüj#þçûkz“”˜¾ (*”MbÑ•œ¨}Z¼ÿÒz ³ƒ9))( S‰7gãœ,øYYùZN*}ŠDõ`uð‰~<‹"ëA%\Ä)lìó© öÅYþDˆG|¬b©ØoTÚè•–½¶öíá;ntdÞŠÛÖç{°KNZ¦%Ã’ÍÖHÛ?^³gç%vKLMIµH]è°}äÀñlëq2üŸJKk• ;¼Ø·S*úH‡[6–®ÞƤӇû¼mw™ÖÕËÌlX¸YR28ñáŒJ)Y0*šÍ ZÌÙÃ3A»jÓTú°Õ’â§·fV2œ”Œxˆ¸ÞËg¥¦%¬\št45/‹u—j—éÙlËâÔåY Y)y|.B·NÐuYè–…*½ w’ø ~Uy|QG-hÉ/æ'èþ3AfÞô«bÒo þ¤˜×.ßøUõ’{!'7WjÌK‚C%LYŸ4}Fô &õ~I‘§ƒUUÆÏÙªÀÌÀŒ°‚øb&—äo?1º²}ÛÞö–vÃEo¥±ñ vlý᫲EutRµ‰Êâ71‡GÖ*ó¼yK#Ø86æs¦4b * ‹·ø8£ˆ•³Í1EQRÁÒŒDÌq"Î|/‰¶f_œ˜°F¬„Tú$ªÄIlõñQoWy ÂV¥fñæX’íh–pú]…§s8%-LÊ–¿ž’l“þ5Æö&úÄ´´D6sí\6„Mž0cFøHÖGB{ƒ3]8ů`»‹©¤­ŸUÂõŠîÂêMlûtëÎâSDyè+ÊCÞhY:ŠÍaþÅÁG–­ØÏNIÊú4]^NöšëóoÛ>v¯ÝËÈÆŒ+ Ø9ë@äEö-;¾«òhjnRÖŠt ±ãÔEæîñ_Ÿ½°¹ü„Ç—;§ù14ré Äæ…n‰áøªÄà^ø·ôzgÕ">¼…ËtÛBM¸,æ%®Ã m½ë^˜Ë=Âä³RUoqü—%é;ë™wÙ?¹žËÍtàÿ$Ìxˆ7vTõ«5/»Ñ9NêUõ3÷˜áƒxaµV„äÓ‚^|s›ß/k•­û׎?„׳<ÎM¦”QõuGYºJZY«ø÷ðÅyòÚ£äokÌxQßbø¦ðM%›TòzM *Ó‚’0ÈÐÈH#÷­/ü¬z•t©ôÉ<Ë<2“3x5ðc,‰u±/Ë•t {æˆ(ÇÑu±©Ã“_L§îbÏË[^WcóT÷Ïjñ¿vž›ÅûÙüÿÇ<•’ÊzKØú+»Nié¡’ÞŽýì,*ò¦"ž[Š,ÐBľ—õœJÚ‹qÔTï øI/äF+¯Ø;ð½8b2qy¦Ò¦ªß™çÌàRd¢Kf3ÔSÖs¼ñ˜pÝÇzÙ[Ù žúfÒøòÍâ[·¸e‡J:X«Jy áj¤³'úÙu=BZÛ‹Y`Öb•4‘~¯Æ¼Žïs]jâµiå^()Cë’¡˜´£.H\Eáò” Æ}rº%Óãsûq—þÛC÷{ìg‡7TìKsd1¾ºJS\zøÂù áL K*=cT²és 2W‹ô™©+“=ì´ÂÅÏŠæÀTžÌ³Õ-ßT;Ï ªªˆÍ«u_Ëó¡#ùÖÌ'‡©þŠâ±HŠvñöÈÑ/–¬›'äZ&й|.ÿ0fp â=›¯ óCH'û‘8uî ªL>’ª–ûYíu<"ÄwÇ­È3±;DXüUÀÐÎZÅ»í«1+ãx·î…ÅLy*éêW•Sçs-–¹l.›Ÿ>?½ÎŽ9æ›Ãõ ‡l" Î*~¤¨dEA¡ý¼.{YvR>Ëgƒhw†ôb+òNIf³R¥SIc±í.-„»{áɬ:‹ -‘–pn1(=¢Þ¢8®î:\Läb½¸•Òˆ´ë%|Ϲҧn\˜eºe>ãÿÒÃëÇíL-YR2SºiwãEæ· ŒUq­x«­/™¥îv¸ìX‹ð®#QÔ˜Óê4¥oH/e¥¬Ä²¥>føy @Š=u\_‘¦Žâœ'ý/k¸9IDŠ¥i…Öç/ ‚ÂÍê©Ç8ß–óÂÚCžÔç&ož¶çq¥Ï‹›²ôrž]¶Z6½Ì,_Wúdðc¬@\š‰±ß ž5f©‹ÂW©ÚB:±TÇ=—èâ@HºþD·û€J^%ü€jK2^€å-ô%h¼µÒ‡»:œPhº#&z»ÚÐÎ:„qõ7tD4ØÄ#w¸ÿ 3ûïóßçÿûù1Û› endstream endobj 386 0 obj <> stream xœ]’Mnƒ0…÷>Å,ÓE¡‰I$„T¥ýQiö8µTŒeœ·¯Ç¥R0ŸŸß³Í˜âÜ=wÎF(ÞìzŒ`¬Ó—ùˆëÄ®mU¼ò[MƒE ÷ëqꜙEÓ@ñ‘&—VØ<éyÄÅ[Ь»ÀæëܳÔ_½ÿÁ ]„R´-h4i¹—Á¿B‘ÃÛN§y×mŠý9>WPåñޤf‹†Á]P4eÙBcL+ÐésUɑѨï!ˆFî’µ,SMý˜9•¤3ËÌæ12#ñžyOÙŠ³UâªÌœJò(ö(âó‰üì©ÉS™”ÕœÕäg]’.kæšü¼oMûJú!]².Içud^‡Ï– 5äöåÔºÃ{ÏÕ5„Ôî|ѹÏÔaëðþ/øÙS*?¿‰% endstream endobj 389 0 obj <> stream xœíXyxTÅ–¯Nw'÷œƒai£ä)I«ˆ€È–²È¾JØ÷ºItv$ÝÙèP$„„@HØd‚¬"²w@ ¸*QEÅÛÐðîT5OœyãÌ÷f¾ùcþx÷ûú|uoUõW§Îi3˜N§«e ‹šf‰OŒ²Y† `:cL'~ÝÝÏ1÷ó:w#wÞ`xT×ãz¾ásê‰gëJz ž¤ß×”õÄ·{ƒô:>Íêè«ë˜ÁGðñÕ½¨ë¤Ø®e›–í…¤¤óaæisÍC#£fEÅÆšû·4™5«‰µØÌ}cl‰æ$ÛtK¼y¤%~v‚9Æj¶Šé˜ä(Û sßx‹Å<"Æš˜oì",¶KB'ì74ÌÜ´ŸÅf‰Ÿeš4mVTÄï³ÍÌÉQ‰‘‚‡-ñ5KJ„%61*Æf·M7é+6ý!ô÷õ-±W¼%<Ñ2ýñF9×7&~†ÅÜ4211¶S«V’•U~i™`mi³$6«¹mëÖ!-$ õÒv^ÚÞK;xéë^ÚQÒ6­½´M AÚþ£o†˜$† þÓwáéº)¯EZ¢f$F„ÇšlÓãÇüÙÖ—½Éú³Q¬7ëɆ ßdCX6‚Õ“Ìâ™]·NwXwÛ§¹O'Ÿ!>3}œ>Üg«¾¥>ÌÐv0?äþáNÐÆ‡ô‡ÜwÔ®ž"ø7OcµH¾=fõˆ÷?,4z&ŠœºÉ_àvÞúÐéëßÎqv໚®—i,ÌÎÂÎ40ÙÕhõtÀ 4 -AÓÚRô÷¤¨ 'uê95! 9ú‡;NªWO¨S7U%ë4¶£Öz!@cMËÔNÆ3W\'vðµ¼4›Ïâ rS2£‹'Ô˜1§ð”å 6óƒ|ß¶ý'œË²‹ð¸Ù¶d×4w­UÐGe|…—T,­Rvª!Æ¢íëx9?»fº˜w…„ z6Ì¥i·BB5­ÒU£iÅa.Ec]ªC4]];3jÌ_Ò½6Rc(GMK8ç…Îü ëè•6Í©8ŒÎŹK‚¶äKв“‚¹]ˆ®µjÚ—àì ,Ó´ïCBM+tÕÔ«ªÛ7 =C=Ýægî“·7–$ß»Õ@tËT¢NrŸ X€k!¸j¾!¡ihÚ—Ž¦ËvôïàÉØªÞج:ªgonPxîc>Q_úd´ËtÊ®¶s¤ éS ÕsÑô›‡¦ì©húœõxf¾U(DÝÜ¥S»{‰÷GèuÅ«—ÅþÝGUm‹îÓÏÕŽŸêÝ-Ý}l8Î33 ý{yÒ7«c¶» ûuînWôêjwÓ€|TÛyž X"¸õ÷Lwlu›¶68q-ù쵋c¯˜.«=húx)šn¢ÿT¡À•“S66P;klŒôÕp;ûrÞg¦Ý}Ôzÿä1|êœV¦,Z¬1½×Ç!¡"¦O‰ °Æ"FL‘£æ.ÌßKŸªHp‹ð3?«ˆáÏ"Šiw®Ð`‘p 68ö»õ;£õ‹ÏÕΟêÕÛêè€|Ã(l˜º|Ž»Á9¡ i­§îHV¤Ü—¼rÁœ5°`ŠTýE—KH¬X&h])M•rAj åFóiY³5í~XM¦ÆtÕ!ö¥JµÓh:²bÑÒ .þ›è?–eÅ€rÕxòL`NH 8´3±è§?€¦Ht  mâÛùâ=Bb­u—}#qäÀxðëc7×ñb^³4«0³$­”+Ê7mX;¿Ê<Ž4¥¥âŸ^âî^R^zsù¹’ÍžžŒå~é+Ü=ž|Q<éE° /‘÷j0ñ§ÝÇ‚Poµ¦×¥upW:—ê<¥o$3“Ó332_æÇ ±"…õ‰¬HjýDR RÛ@Ɖ<6„ ém¸Hl#E²Íư±"ŽgØD6‰MfSØTΦ±6Y˜•Í`‘,ŠÍdÑl›Íl,†Å²8‘ X"KbsX2KasÙ<–Êæ³,¥3;s° –ɲØ-êHWGwßçŸÝ>7õfý úîúxý½KMÿ³ÁßÐØ°Î°ÞPi¨2l0l4l2l6l1>gìgœo\`Lóíî›í»Ö÷¨ïw~ËýVø•ø•*~J>4‡W¡¼-¡´†6ÐB ÚA{è¯CGè¡ ¼]¡t‡ÐzAoè}¡ô‡ð& „0ƒa …a0FÀH£a Œ…q0&ÀD˜“a L…p˜0,`… Q0¢aÌÄ@,ÄA<$@"$ÁH†˜ ó æÃHƒt°ƒ2 ² r`!8!‡Åù° `)B,ƒbX+ J¡ VÂ*(‡Õ°ÖB¬ƒõP U°6Â&Ø [à-Ø Û`;쀷a'ì‚jØ ïÀØ û`?€ƒð.‚÷à0÷á(ƒà8œ€“p NÃ8 .¨sp>„à¯p>†Oà"\‚Ëð)|ŸÃp®Â5ø¾‚¯á:|7 ¾…›ð|·à¸ wàGø îÂÏð ü ÷à7PÁ ÷áxà!<‚¿† uèƒz4 }ÑD$¬ƒO¡?ÖÅzX  ŸÆ|ŸÅ†ˆÁçðyl„AŒf|_Ä—°1¾ŒMðlŠÍ°9¾Š-ð5l‰­°5¶Á¶‚¡ØÛc|;b'ìŒ]ð ìŠÝ°;öÀžØ {cì‹ý°?À7q †á ŒCp(Ãá8Gâ(cp,ŽÃñ8'â$œŒSp*†ã4ŒÀéhA+ÎÀHŒÂ™³p6Ú0c1ã11 ç`2¦à\œ‡©8`¦£˜™˜…Ù˜ƒ щ¹¸9.Æ<ÌÇ%X€K±‹pãr\%XŠe¸Wa9®Æ5¸+p®ÇJ¬Â ¸7áfÜ‚oáV܆Ûq¾;qVãn|÷à^܇ûñÄwñ¾‡‡ñ¾Gñ~€ÇñžÄSxÏàYta žÃóø!~„Å ø1~‚ñ^ÆOñ3ü¿À+x¯á—ø~×ñ¼µø-ÞÄïð{¼…?àm¼ƒ?âOxÆ_ðW¼‡¿¡Šn¼Ѓñþ 5b¤#Ò“ŒäK~¤QzŠü©.Õ£úÔ€Lô4Ð3ô,5¤@ú =GÏS# ¢`2Ó ô"½DéejB¯PSjFÍéUjA¯QKjE­© µ¥ ¥vÔž:ÐëÔ‘:QgêBoPWêFÝ©õ¤^Ô›úP_êGýi½I)ŒÑ`BCi §4’FÑhCci§ 4‘&ÑdšBS)œ¦QM' YiERͤhšE³ÉF1KqO ”HI4‡’)…æÒ-¡ZJ…TD˨˜–Ó *¡R*£•´ŠÊi5­¡µTAëh=URm ´‰6Óz‹¶Ò6ÚN;èmÚI»¨švÓ;´‡öÒ>ÚOè ½K‡è=:LGè}:JÇè:N'è$¢Ót†Î’‹jèÉ#îNy‰›äun–hݰšBgAf°g®¯¸!å ø¼ðn”ŠÑVkf~Fa0ý<±ùiù\1{^ö´ñ´QÒåZð~ìèÉo”¼Ü´pcV¢3™§ó”¸mü4¯®®ú@Óü~÷{ïhæggi<Öš’êàNž‘ç-V—n\²ZùP=kLàqÎä…Æ·éÚ!š+QŽêc÷®ªí¾ ^Ë+²V§sîx!~ "ô¸ÀÓ;;xÎYì(ÌàÓ§DhÚ5;ýø¾ô¶¨,™AVw…X鉻^§…„ˆJ@zÎd!ª.V«¢6ûèúåÒ93ƒxvn¦3GT³r§G–%äÎ{a.ž­¤§®ÚP¹¦r—¦=´3a[‘Ea‡¥y7¤Ç/ÊÕ$9/‹ì³²¾*_wÙubáoErUJ÷µ³É{Vî¼&õzZ®º.G/ÊM?È5MK˸ôÆð~Ó¹uüؽ‹ê+ßî¬ÌçM²V(+Θ°0åëõ{îc™«¸úŸ)ð%·;¢+ÐÌTŸ¼®4Yúa¹ì3®ÖÎèæ­þEm(k²¼À²£¢“ea3QÔíà%ܦZúÞÂË|§R™øn/OÏ^¢)3µ¯î5è?µýÄ¥œåÙé|ø°ÄŒ |2Ÿµž×ò¾vq‘@EùÂ’¶Î?·>‰G*–¨ˆaÔÛGƒøÁÓ{+Ë….²w,XSVZ¹¼/ãù9ù9¢Æô­µfh¬ž(H•ò’ÒÕå©+ƒã¸Å­PR•¦}æZ)"ZÊ=>¥ï̧¬ß &ããlx¤(I«æ¶uɇ(Týœ/ÔFµ»îqׄ­£Vv^ß3OtkkJ×/[µÒ±>k#W¾v¼LƒÒúœqáà…Gk‚öTŒëLqIUUUUIqAqIIqÁâ˜íá+%#é¶&²¬•Õ³BOÊöÐ'e»+ˆ¢ùä?­Ÿÿ}õ,")R†¬ ½ëb”‰žiƬhÇÿ¤½Ô˜Q"õ!˜%RKË”'Y"šOÌž˜õßh¡ÖZÞã˜-kø“ÔðÚ$ÒÕ$þÞ2Ó™+G÷Ì9¢gÖ´_¤gîKòôÌ}‰ÀëµVoMÿ±‘>øO5ÒÞ”«—y¤¾4¤ÙA2+ø*Gq4·p>%Ó¢¤ 5Ž›a#úf½tó]—·Ã•n )ç›*Ê7®S?œbÌŽ™Ÿ£¤89‹r‰ÌÂSòrü|ÁŽ]çsyP^_cä¹y +)ùÆùyqEÛ”½j˜±,UcÏÛÙ<ï±Pè'ûyÖ)¤­@‰¼^•:¶ «y¿fÃy~_‹©y…åÖ”ØTïYº(¿]–£¯\5ÇcKælRjÔ}ÆÊ•›Êwòó¼¸7¯P™ïíïÌÄîoujöG9¯äÛ×ìØ#ÒT%_•™?'?aULW6•¯Ü1fï ÐÑ󈊩®) ™Q4“Ïá##R& œÎu 6Ïæ6ž™Àí ·î·~¸P¡ÑNcÊ¢¬ÌÜÌENg:ÏUróy~ÐG|°§Òø¸OÕ®•>Æ®ÐÖjÁœQîØ"üÐBø¤f·H vvÚY’µ4O3ב*Rž#ïï°ÕËÐ=-±ë']õ‚@Å uåmn\Q°¬Ê^¤4åÅûD×jI³<[ŠL¤Dú±Î±–W†®´l²@¨UÜoã—dB,—d$sä¿(Ú=©äO2—ß“~}šÅ3¹=/sIÆGžƒ+I©©IqÛÓ×o<Êó]W’W%lººj¼ûHÐGHÒDòÍ|…´:Õ¡Ã0Wê6ÑÍî]½å°—»ìô…o~s¹ŠìBGWMÜÌ´L;Ïà¡r›˜U¥9 Ãj”Qj»KªA˜ZWZù¬\ÐPœ¦w¹ y/q.Ëú{by çêJc<.W1WJË׬ ¦ÊزĠq‚÷5 $ïÿ>ç$ÙªŒësÝè-<4*§•¾6¹\ò`ßô¶æ{¤=í,2N¨*¥Ü“1‘GLû¥ÖZ$âæZ!rKuèÖ•"`bO /vìL8Æàíô¥¾¾Òª¥Š¾¢ñWþ¼tù×ó¯çÿÏóoŒßQG endstream endobj 392 0 obj <> stream xœ]‘Moà †ïü »C•¶a•P¤©»ä°-ÛHÁé‚=äß㪓vHx°ß×€]œºçÎÙÅ{˜uFëLÀe¾pÆ‹u¢ªÁXo»ü×ÓàE‘ÌýºDœ:7ÎB)(>Rr‰a…Í“™Ïø  x ƒuØ|zõWïpB¡m ÇTîeð¯Ã„Pdó¶3)oãºM¶?Åçê꼯øJz6¸øAcÜ…*ËÔ8¶ù—«l9ú{BÉÇ$-Ë´U›ÌiªáxCñæÀ| >2‰%³L,÷\gOñÇwÄsEš’5%Å\KÖˬGÖ#1×l¨¦¬YSçGÝnOÏ£9Üû¦¯!¤–åaå^Q—¬Ãû<ýìÉ•¿_š·W endstream endobj 394 0 obj <>>>/Font<>>>>> stream xœ•XËŽÇ Ý×WÔRZL»Èzo dádv†ÊÕHr0’bÉHòù9‡õè)ÐÈ6‰¼õ ÉCVÿæ‚çÿû‹ÿáUðo?»p”Ôü ÿþé~þŇ#ø×.ù¿úß¼Øò;þ¥"‡Š¦ýí½KñÈY¼ô#†îßûTÛÑk\ŠGÿwÿ×Ú{Äùß8ª†£'ñÚŽÖ›Õñ¯­G=¿¿´£æËö!ïnüÕZ½lŸŠíHj±•o;Lzê^r>j¸žµ4Ï3OЀËE¯XLÍ4Çözëÿtï$#jŠùÏÔô(!T͈F8b®«¿ï~xsî°Ìß¿q?¿xõùöðáõÃ'ÿøë‡‡—¿ÜÿèîùbÔ²‡ÐkÍ=ûû×X}{õ¯s!×åE œ8Z--·±ì¿wï~}ûîwÿñe{ñï—ýÅçÏï>¾¼«/>þ~Þ!¥¤ Ü‹ëRIcïû‡W¾¸£ã?ñw þhTëþñêóÃS£F»x„VÚ4åõÃWþùþÌÿ?”›’ë¡ú4¤Có½©)s[’£·žcú:Û-`Wþ/v4ÿh~ýr¤ÔzÕgò2÷£Hô•J¡SÁ¼Œí;(Ä" ²–xCz äôa…ÿææöœ¹Úó‘JöÚeA/ùX« m*ZŠICéåk{™ÕÏZü<À—Öv’á’ÿ€Á «VzJ¾#¿jŠ!~míªX³¹Žõ° Õ‘›4éOÒþe|1~íÔ7Ö ³òRp r?±=MM,€ËyD °§\/A$UwÚ1§kËé •žMÃCbÓrdré•v50ŽP9ª6ó>™Ùë"3%ö<œ¥™ó‚„V¡å¯Òá!¶‰Fs Öåî+ ÐÂ@YF ëK„Iþõ-Ñ»DIÍàL׊ó¨íPË’}â}¯F 4}ú‡Ÿƒ í÷ÂÂÅÉ­3Fb~¬gˆÖVö¥¨—£‘H©ï›‡tÚ5—o»[6!7U»«ÖêK´ÍHÁ3x:3 Iê|CÌm6‰(²R<Ò´’ÚñÄÁJ ÁCâøze#š5y3£>½› þi’rŒ»ég$EªÛÒÀ -.G–8Ütkõ†! LLº`JZʬp±©) ·ô£‡s{B€ú%€à²C‹Îë—´l«Ýi;j¡Õ¼PN§¢ã“N#`Ó ôН Ä0lHUò—Ôj0Œ„Ù€+¢Gç3€ %­ ÷²ä’#QÜØ9쀕ŽÒ’3þÚ·Ç«ÄÐOŽˆö,”ʑå,ÓS¶2vç–]êt4aó"ƒAõ¤—– $ðªÚK”ö'Hféz²¨”M&[Fº½áô¡±™çEˆwÂ(§›Iñ5¢F½ü¹†ZÏdÒPvx4U`'Âß`„<¸gŽ#!Ž4‹Èí Bw8â‹Ê¸y >=Çy…唘 úDƒ<ïmk`8ð’GãÛ¡0r6Øš†bT¸5”,GŽýBóåS®qÙ¦ ÅãVd’b¼(Z0BÄeY@4FQ”JLàã¸Å›ÝQQ${AŽ( …™®CQKz© êÜÜdUa‚‘þ1–’GµôBÉ«ˆd©[ÄZP‚{v2UÅeti2DÄ5XÛ˜Š&“zQI¨hiH'Ê`}zYYºf«œ~0À:ì2äèxÃx'[Æ„J‰ÅZUazÁ »e(ä(—ff-͉H#Ÿ.š`üº£¨œx”¹‚‰ºö‹ŒÑÈèÔŒ¡âñ¢Ñ‘äp'Oœ· ùjÛNÒ©™‰}*Àå•DEù!³“ÀëvâL$»G i6°¹t0¯áú•ÙyÕ j‹ŸòYÐ.ÝLßãÙZA½y5O·’ôlž 8ãùq÷”–]cñ6\Vˆá“[õ0\öOKý†âç m¤­¬5Nã¤dà‡iTôšŠµožRv•P·Œð!ÿAî\‚a fy‘öDƬSlÔQ£ì×Zøz† |‘ãüHhܱšì ¬æÏÓ çe0 @´.-:A…&ȯRlS`åÌ ;[á–8î‘€·ŒQ)‡lÇÙ&œ:«MCaØ&vç­Ñ˜zHO ÆŒP`&ŒâÆ„èL%D¿–G%’álZBö|³«Àñ/t1¦âÀÂèÕQƒ‚!®fžÿ»Oh¶I 3œEcN †Êî/ò!ø óIK€0żsw»*0F›XóžäùI#ƒ­v4|¾Mgw{¨õý.@¢œýÅÆ‰K!xeݯ3éàéry7HÇÐÕMû¦¸:ÌZ¾ZŒà]%¥Í÷g~¿Jåç¤àæfÜœ#[rD}4rIÑò¤Z ÇRPV¢½å1¢Þ.¸=¹È2‰DLädQtÓñÂ^~"írà¤Uyÿ¡Ì9¤væm•9Ç—Tæ¨„Èæ¾Ê^6$àj«Ýð¾(2¾ ð­ÊÉéfß ÛùèymÂEùfƑdžGåŽ ^NHݾŸW ó’ç– S\ÎåîâÂÙúðÑNÄC:1àW d`¥bÐtÔnaqVÍF—5°T8_ìh­bR>xÌÌ¥Éd^«¡9ç]‘ñ¥’rçp­|]±×ATÛ¹%ßÝÞ±±‘<†Ùº@*'ü˜'ù?Ño6`º­Ád-]ö~¾zK?ÏGÙ§‰ý§ycµ»8@.ä»l:È¡œàMÿ—8º-Ť(÷¸sl›§Í‡ú´m•ã´eë”&ÑÌ¥»Ð[´¯Q“‹$ú`'‡L‡ÂÄr~|˜89d†hRÈ”…ŒÅf²UôL€éÑJ™éîŒMÿÉý¸©L* endstream endobj 399 0 obj <> stream xÚÅËŠ+»qŸ¯è½J0^„ÜHV—Ì.dá3¶³Há®î理RI¥nÙã@Œ»e©Tïçl¿mfÓøg¶h·²Jyûø¹ýñ}ûöÝnF«¬³ÙÞlˆÛ~yØÞ¯?iíàì3~{‹‡Ÿ+~ÂùÍÖUãÏo¿õŸCyÇÏó?Þÿ‚À½ZðˆxÆ|4°¶˜°± ‚‹ý€ÎˆK<͸\píÂx0fvPöÁüà6/«øìëE¿¼o¿m*E·ß7c’r‰Æoaû¹9gñÇÔWþ½ýmûuÅ.>éŒò&7<-âe¹¢3”׫HëUƒ^‹œô™h×hÆ5€F‹ÛÑ@Ò㢠6IzÚʧô ¨<ò†ð0iÁc'ºº` ¦ÓQhˆý-²hx…”9aHûfº}GÿÕ4ÙÃàŒ¹ò“Õ|Å¥>¼t´tæ§VªõÆ—½§€5ݸN©/ÀŠ|%ôöÿ&[ßìL¢!'VÔ_/O=jå@ê-Zà~ï®Ñ}RÉ!¯´WmñÃ¥¤„.Š­d¥ƒ)?~ûþ3múëZ–U647Þi b7šHíY ¸sƒð3ÍÇ@÷/HÜzFŸáwÀ3Ü 8J€åS®º5©¥É0›Õ>‡òšÚ±ŠD5½~Æ?Рó­÷ó›ó¾/„Tß M5î:\¯¼«u¨û±¼^ÖýûÖÌ¦Ú Ãê,¶#ã?e!¹ìTùxÏž†0êÞÅ9÷¢þ?—Nˆ* ä>ò.n qS?O—vôýÎ7£Ù£Ñv΋É$§ÔÞ*ýPL‘Ny!]fÄ$Ïˬ¦E† ‹ …AzÃõÎÃÁÙ4»ÂvÐöC¾¹<-$äy/¹ËÚ.'º³ÚM'€1ð$Ç ùÁÙeRU[Œ¶*î•¥ëÂÁ¢j,6î㊛ìÛù½Ú:'̃.4\û'˜¸s…LO?]cÇé²Wßڎ˸šˆù(§òI¸ßAŽTÝ)È¡ýú,¼æÊǵpz©úP=0"Ùr™`æÁÙe5½ËYaŸÊQ/ ÅIçá%Ë_ô­Ã$.»‘†›ÎŸ£å˜4òugK¤tY±ææ'Õì¦6Â}Ò÷ßßf`1è;´hT'ê>$î>XssÕ0Oœ’2~t·zY¨ÀƒveÝN寝R´¹ÐÚòÔèäê~Šˆ×åµaÆÜwå¡<7ÍÊö¿©ÝP9\ڑ퉌(<|Ðú”ËÞxµ&I«ê“„'º\ãB‚в!bZî.È´›ŒË5­Ë¼2+è£Ù®UúÐÓpÚµH“üåPsâG°‹ŒÛƒIˆDÓÇÝ=!g÷ƒ~<þokζ³?žÉ¿Ü†TÛzÆ¸Ä ½ìÉÿP+ëÑ?FÍ>TìiŒVÕÃ}ÅÔæ8¡o¤JJºt€Ì+ÃÂØif‡Æ{…¡´•6Ö˜F \_𦽙˜Ÿ*ø›£þêâ¶Ñ‚¦´2,NNTóÚ`íwÝvýC}´“ÐÝ#õKzæ>/Filter/FlateDecode/Length 58542>> stream xÚì\OÇ÷8¸£»»CÅB° Ån»ÀÂnÄú«ØŠ]ØúÚÝŠ­ˆ‚ t7Ü—ïHsäð|?ç¹ÌíîÌ<»3¿yfgg€VýGç2ÀÐJ!cˆX°´v@Îä€Ö'ç9÷ËôÓüIk±ˆZž6œµò{»øY¥ h奣X ½È¹ohh@"x±ZãÝ"”4C±€_c ”ýößß=¯e?œåTüSSï '/9ÿPj ûSJ£¾?Xû [tÍ{ÖFÚhèB¯kú*ãkÜ¿,¢ZNØà”Ï©kóú¤ß{î‚ÈÊa3÷/6^jÿ6õŪŽNj“·_(‹)ÈN¾9}Èa.Ö‘€Æ—íåB·[—Y» `i—ýѵ–Ús]§ÑêO_õ±Ë‚®;òMT¸mÜÍ!×7[‹ñþâf<˜håÕÿÃËf4TßT @Û“séž×šïþnÖ“W'?éÛ•%㦸è}5×yÃåÐ< ÝAó28å¢\ä­ÅótßJëðæ«+¡ÒyÚîu>n†äOR‘âEtÆmæ¦ ?29+çÍ'¼g™KbÊåñþ`MÏÎî&ϼÿ”Î!_ñôBC_Gé' fªµa/¶î¦/ŽÞLe‰ë t?qÐñïîž—ý†#6]=íj#…©õðæH?·(ñÓåó¿Äç#dµ.N“'Ù©0µ„—9´Ù?î]ºþ>2£!ktrš8º—¦¦‰Ü,A/3áÎúÙî'|£éˆœÍÄMGöºv¤Ôu·Ù4nóăßgìëL.µ@Îû½§8Sô–Î-çÒU½ bßWZL%Ýðß‚:ª¬ø'¢zÌ·—Æ …?ÖuSx&xO‡:ÛFD£éë%·n9ÿwÈR}¯á³ù‹Íúªë5Þ9؇ƒ+åšgœM6®ºOŽÞ Ïëu-j¡·UIš¹‘ÿ[9gýÉ÷ l›ÎŸYc'ƒmˆ‰ú¹uØpðiòhgUB ~Jÿõ4(wŽ– ÂN|t$¤Ã²þJyµ^)[ ¦¦‚TWNqþ5lÊcù»NÓÃj¶Æƒ#£ (¦“¶=>‡Wu@k’ój(ÜÜM9ÿÛ¾qNý­Ï÷<õ!±‹ïϱӎð[i@¬íðfHQô­£³ìgìpWGâÞŸ>qò–êꉺÄÃËŽûûà’¿ìø•Û­å0Ùýžû'iê‰5Ý],Hfi7Ì»®qàsÂlâÇK»¯Ò;ÚKÕå!wX´DÍaǃÕ7Æ+WêìÄ›;^›¬zkJBhµ_Ä®NÝ ×}HaYkq£ÿ·mÃó¥£íÆ*qRÞ¿.´ûÏH ÉÁ*:­³sÂþO³;Hæ¾ó:–;þòP¥«j‰´JÉA|á׬[a:*‹asî{—œ<ßð¥ÏÿºÛuo÷º]LCL$Ûk¾Ýâ-ã'ÎÖbF>û£3H÷ﳈ§Îøè›§£{xö’ÃÔu¥Œˆ5üjË©e£ Û òXFîÏ3“nG^±A¾w;n­•ßÁ®dP@¤å<Ûw¼tY…ÜóZÌ¢Ê;䟻ŠwY/-t7«É;V¶¿œß¯‡ ·v…“#%ž!èÂ=‰ùÙ©¢?Ù/8´Ô§ó»&Ê&§ 9àÚªm–[L%Д]¸Ožÿx±*©8"·KCÎyuïVþI›]í4q"Õcþ"ó> £Ä\mNë´!/ÖG–ôäuZRºÍY`³}÷øƒ í5Kþ4ÝëY°Ò€UËáM”þò0¾íõÑ“Foýž{~=ô9a´®RSø?eÂc9ôÌÔŒ\ªª¼¡ýDÆZ¯Ä†n•É,O±2b#£STÌuzÍ÷î%XùÐëÑo÷²3#QÕAÂS{b†œpªð¼¦ú‹Ø×bœuê‘€\W•´kçÿ°OÜI5GâÇÃ+7KûË1änËÕ{m¾³öaÏ'ž4W|²!Õ}çT‚l¾rÏlÛJCFò}nàç>XÙG-–ãÿ³,nN7ÄDén³¦¬ú_ô´%øÏ_¥Æ¯roó§$–5ãÒ¹ŒÁ‡º¢ŽsN]WŠUCÁ¯¾œm¬ak¹©±ª„þ’ƒü¤öp;èzÑÑ'xG×® %€(Ëy¥‡¾ÿÚõ¥0ÓþĆœ0“Üò¯d÷Îa mõO”3chò}UJJIÕ\™Ôh9ÿWt©CÜ|.LPEkfV]¡¿ ©,"úçlfÅqejI!Šã9 vÃPû³óZlˆ£ªJ—&€ N PU¨ÿþij‹ÓSÛáM”þò°éY )jÉ=ƒ§ªIEåóÎ[Sx)$as>¸wïÄÝ$š¸n Ó†u’Å7ÌzÅ}ì•w$³ä®Ûþ·zãÆu#ׇ¦Iw›{èÂã4‰¨Å~ålÜ=ï\÷¥ä¼öºJY𰳤Cé4F/òah¦ÞË+˜¹Çg½Ø{=j\çÇ GÛ Þ…×š¸¾Ïöe/ø=ˆì`¢& ªwéÃËiËU1633š¦ÐG•Ô&’ì0wmÚ•ˆÉ–¾…ÝVwí—R°-(ÙþëÅÂáW:’¹RÌ ~õå´Ñ†­å¦ĪDe“Ò¤UÌä韲˜ #@kïl'ÈéhZoúa1ïÉ^S@Ñ”Lÿ•Ä)Ë+-Œ¤ä¢êú˹VS¼Œ9-4©h¤,¯¦(Jü™&¡!fBbYß4̆9ÍvxcÒ%Ëó’rXVdÞmÃÊIÈ#ÊH •3·†ð¢Š•Ðë9νç8nQúG.ß³²˜¦Gjþ»»Bfq²ÝÝ¿p;Ì¡ÿ½³ÔÑuýÇóö’œ„¨ï²ÞÆ~ëÍx»¾O·î¼þ€A°«@¶®¸÷ÑýS‰®NõšxæQz âðµrõ_‚‘éµr.¦ãìcF›íË{ºµ\ú*—SUå²Ú’i?KŠ@#M$n>m 2áä͘“ñ2†Lâ¯\:ø™0ñ†€ƒ'k*ø5”SlS¶áŠ‘\>©éd-¢@# €„ÕÌÉìƒsw> Ï,bÒ“îì˜êî›Ûˆ´HXNJ?êîý9¹  ùã‘Å{ÿTš'©HL ŽÉo¬ž’-&;ÒŽ,:ø1©  é½÷"oúg AºËš*MeÃúÞÈô“Tm-ŠÞ^{ý7‡É̉|{Õ—aÑ…×éXSx…á·Î=ù™Çä ,ƒ´ÈСJ™Í}½|ÚöÁ©l.‡«O°òƒÖŽIÙ·ÿüïìÉ+úÊb¼ x垃Øg—_•t£-©;j ÉÇý4{p/åú5¡‰Æ‚è\Æ÷ &DA"ðKXMÍ<îêõ:†V˜|m­Çû¼F˜ˆd8aªø¥Õ÷(Ž–dŒ”…#åþÚ”é“ H+ø5•Ó¦1lC T~ä’¤~:æ~4ßÉÅzÚVï#â–Û¾pmw•ÐL®¸nÿy;öu’ìÐjŸ(S%»î¸¹n¶ó0•UtqÝ®³Ìü~T”áŽógI±–Þ†éy-«1ãѤº{ÝÚ8ÖXÕuÙˆŒÅdÏÿí²ÄOkHjv^“ sw r›.ýÓ=Ïñò…S+ï ª]†ÎÍ÷±k /«îµºÝ:´þt› kÔcŠ‹v ¸æ•2Ké4½÷ÝeŽ:ãã™âZ½ç?ÛURð;ÝbÞJU«é>]|~™ˆ ^ˆZƒûR¶|p©I@𚣦ê­ÞÕ}6±i²WS¤s]³puÜzw÷²Ù³ô7'#šƒ6Ÿ?EF½ø›ˆ =v¶é¦#ƒºÈb¬\—bŒÙcµöZk*ø5•Óæ3¬Šb>ÝòÍ,ÝUQ’ƶ]ûÆÁ¢, 0á ªÀ©ÐÀפóU›Ê‰¯öäME GÔ˜„‰r׈ûÜ•Böñ牦h ذ–[HˆñŠÔÓŠ’*Hj¡«h½@g;´n ³Ú ç l0ðàZ;ÐÙ òäÜ,ÓÿAN³í´~꘎Œ!¶f÷uj¬ùìÇ׳CÚß´üwrÐË×Ê/"ÐÄ·RíË,hí_¼Vz1üYy[ìÔ磦íû&o·üÌí-}˜¿O½èæ_ŒÞ˜C÷ŽÏÖgúºušÌ:r¼'µÅ—ý®æ ÉnÍ0“žï[·áøý/qù^Þbóšmk&˜Eß’•OÒt…KûuyÓòuÇßÄI[ŒY}òˆ[il ¾ý2æñØGU*ü¢¨ËËf,=ý5…SêD{°a¢›÷»$ŒZŸå.®í-Ï<úòú'V'¿m©P¬IbúÎ[œ‹5²X±^Î2\)s9È«Sñº/Üìç³,W\]ë;h³ÞhÉ[ç¾èÞ}ÿÌL“b­c§¿Y?`ñ‘7Éb&SN=8mªñÞ[L©(笸«e~5ë#ät”IJ1¦1e}Ù¶¸^=f…ku¨<å¢/õäÒêŸÔÑ䪤âíVËÑ{¸P^È…ž0~bjLFžïDi"‘Ðî3kóÉ­£uÅfZd¶lweÞQDe¹ŸtR×µæ#{«@´‡ïÚþ}Ë"ËÍþ…¸I…%Žz^K?“:cEÀ «aoŒÂ· u™qÉáÍL ôZ𽌕×ÿ\4‘#aØÉ×&­‰s¹ýT'÷Ù*§¹^NA;­ÅDãv)ˆðÓÕ½¦¥^1‡µ‹å{n¾µôöŠ¿¾ãCÇ ;Lð¾ô°/Ê¿fEì6eÎåü\ç‡}¢ìz•ù?æý9ýWí ~¨³„€–äW»ÅÉ7çÔbÆz%µöS•÷ÀiÞb»¯µ’¬ìï5ù°ÚÁh…¿9•Õ©êbV«/Nqìb¤„ÞøÄÎ_ŸYеÁ*ßVµų—ŒFi„ZŸ‰!O†RÛš¢×ÞwÚN´¼öoÑlp‘Ú,CuzÌBÃ9…éaO¶»¸Ž>dùe…A5û‰¹þ/Ô•çú%_Õ…ã²'ÍÝštë/¢;êн“s [º’¬ÔEœûtìoÃÅÿë£!ƒU[ºÔÈún½XØ$;¯ñkÊWÉüàÛ¯Ãï?êt{6_wz'!Ö"X¹ÿ{]nF‚ŽóöAç ýŸ ||úøËƒ°ÏIÛÅ‹z«Ë`U/6×å²Á‹Šÿİ\·^)©ÓbyušQð¤ pE¸¹ßwu\}ïa'•ŠÏFh~Ç|Þú˜ÈÌ- àWøžÜçÿ~ùWwꔎ ’ù)3ô¶ž‹(hƒrŽ­ZìÛŒ ËψƒtÛïZ¿Œ·‡¡|‰A‡¸¼pŠš¹øŸZvcåý}¾ÿ`ˆJ7Ô=7Þ#û¾gñ¹ñÏ÷ùäØ0.y`ÉŠ½´æ’ôÁò˜r*Áz&%L†:ø&!;þÍý¿ «v/KXŽé³wÝåàŒZôËýÓ—øæŠÌE"èLÜÔë묉ž7iL“––ɪ¼Ï”mC7,[¿)ÌqÓði£}=ÈËuÂÛšrÝ(«Vg1AÌ(`Rë<'ëÃÆÁC©ïõ=>ºê€âv¿ÄѳoV_á“Ô-e~¿ò#ƒžxåì/k5R¬ñõ­.[YŸ}“,=ú­´"5·˜Õ’µ6pël±Õ"t§\ÍUÍ-ñ¯k—¨ÒÍy×õ%†¼]¤ìv9rº5C¶›û™Ûö|ß››ónÇæ?C|féËÿ=J?x¿‹Ð]s¼Æ¤3»>k¸#OÒbÊž›S4ªÖp8åÑ>—~O[ÐG~V¾B·¹{ΡÎX…aÇ_žÚ±ÚÃÉtl*!*Ù8N=ëÝ›‚ ¹å½ÞÕ (&륎w(Õm²Qç¤udü tGí~0Y£iûªµF3 ˜ÔºN•÷~ëV¿ÄÏYóbñ°ÀÎ'’ÞNXÇøùòìÅ,–žr>Õ^sƒ¨5`åù¥æmñÙ9¦¦!T"2x§ ½%¤=Ñö.b®f g¼^Í&éB@€ÖHQ̵éóÿ,»±¶£DeÝ‚¤¶cð"^éÍá¶“ì´pÆ¡°ÍNI'ŠÌ€#ï®t”€¤´)še ²'‘î!zSy@ª U*ÑNUÆy@§ðÁƒ ¸Üz Ç`0`1h 9¯4ÑAÙè:²¾‡Z¹ex/(TYË¡åæUäG|@´ž¯má¨k±Rµ©j9+Õ°ª°S•zqã²u'ÞÆ1%õÌÛrüÐSUB儜ªZM¦­8YŸ÷¹-Ú~#$ó_™ª¹sç?~¼iÝú÷@\—(ÄÕÔr^ýDyÈ äf‡rË6œq¬º–Ù›p¢$jÄa´wêõ–º6+U—ª´Rõ«;U4Ÿw+^'ÝU- ¿±bÔŒU}ÿœwvªŠUxTÕ¼hŠðRÅŠ;7yì!…m/Æ[+0õKUµg ?qâºQ»¢ÿøñ£9òsçÎM›6A\—ÆU‰fXï¼ ‰AœÝjP5¸O¥¼½VPº–C¥À–¡4j„„´tÔõMUKZ‰·ªÁÆ‘6ÊdI5ÞªôHÞªBO•T¯'–öÑ£px"‘$.¯NÅ‹@ªÊx¸¼J;;—-"WP4ï+ÆŸ«{ƒìís¶)ÓòF¥ ÕrccctUtÔG¯%f11±æ¨C!.ˆKdãjRï¼Z˜iH!bT~ÙÞ\ÁUÖr¨²$NsÁ^ÔõM•P¬T~Uš¤ª¬Y¬ë¦ÏO¬Ð¢‘+äTU¿Àƒ(\AAMiáTF}N”¤þo˜ú°¯4õ~«/_\e/‹ ÜŒ¼/ü-XaHjªjZà("¶ªaÑa¥Š h mÛŹ“¢FÁy¦É6ŸøBÄ¢þ¶ªVËTt¤)Þ^|LÄq‰B\H³<;7F4‘ÊË6Ô¸–CóS5R„´tÔõMUKZ©ÚU „žª¼wžk.¤0òbÞxþ¥ÚCG\Ø©ªi¡Ûª”jMZªÐ¸2.^ðO£¥~¿p:L±‹VýSU‹–—)zíÏÑ Ò@9/i2äÜŒ!òÖ8Éö/M$cú?ÈAC¥þÈÈÐÙFTÝy¡£ìà/ÛP¼–Cqà¸Ó±¥õnŒ4è×’¨‘ÿréixÿýZ­•ªKÕ?+ñ•š/U8%ÞªÑ5ÉÅ«lõ¸”Ì~ª(}‡i¼œgH•¡˜Í~fþßµEÿbªêq_µhª/F¥Xº¾±®°hŠ0S%Ûm«—ͽQ:Rêý“—[lBª_ª<==¯^½º©.TUUÑ=¡€2šâEµjÊ4²ýcÒöŠa8¥Aü@´:è¯Ô¢o~ó£>àIŒóØ)+Wk¥jSUf¥v›*׳_\ÏŠZªþÝðYNpë(nò½=^Çz44U‚Ç%øcŦÚFOsO`W>ÒˆKè«„€M*ç­„[¾¶&¥iVªtòæV;þÊËÂTÐòFÉyÕÆfm}n›š·ïº¿Bª U*ÑNÒló¶– €°”€Ÿñ–‰½ùâªtùÚÌ Úu¶]ÚŽœ7äšU×aŠ30e +«o_¼vàöVìµåÝCxQ×ó ¶\ìM”ªºåDïn_ðhýaîÖZvذzÝ–ÛDínG«š9sæËÒ¥K›ê]  %ÝÙfŠ«…;Z2–Z¢hªy[ËÎSvu*}7¾éТíÑX!Vp_>|rè'49bÞ…köv»p3~6n×a¤69߻ӫùä¼1yWUUðñyxxx“Ô×-¦ ¢†¦:g[êi¯¥õÓ´qÕrª&i‰ÈÔ!ÍRõ×îcÕ¹ÄUí©ª]w¤É gäÍâ£ÍíˆÐ&Žþü®Ðæp±¶öx~W˜¶bÞ…u{Ž]Ä3Þ¬ÉnÞ¶Ñ«ªå"o] 1¿ùôækL4ÓÓAå\Û€ƒ~_Âûg ëæðòܾÂc­ëVaå]¸fo·± 7ãÈq¤ÎØ›/yBÎ;Ðú…¼ø.ƒ*³¼–—ßÎomŽ{sw6À‹jÐ~ø·d;¿ºÌóÛ?k¢Çƒ?L‡QŠoÿX²›n'ÄoQL•>Ë<Ç\þïÄ›˜"i‹1«Oqë"åÒ~]Þ´|Ýñ `Z I…¼å£®ä17‡ô6÷ƒ¼–  PeÉö¢ÐSwå¹¾Œš­{ÈiÈkŸ”¯cÄB¶Úôû8‹8bÔ^ó·#®°O7a›]¨Wæ×“)³*Š‹hžË*в·Ô*ÕÔU7š*®ìq•^&Œ°D½%Ýô&o1`k·,ÿ!´vªY²½0úkªÉ —NŠRJ'ôƳÒ +Îq7ÇS •É’jݧM5¦Gf0„ÒgïÅ#m*¶øµY›¬ÓÚR¦JuS¾§¥|ïz~ó ÝoÉéšè$€và˜—,Ù~ÊE#ûw*«$TLÃFö×¹KßÓii7^å±Ö)ÉÒ¿|Ûuð3/ðò9ÿ¨ßiLÞñÞb»;[IV8i5 {@S‹k%EÇ4–·ŒSÞ¬}Þ çÐÖ)Y²ý¼g/,#5"¥´*$™/9íŠñê¡%e¶ô§‰–Ì[9…iŸv ¥†ïèÍ ü&¯(†Çró™<áZÇ}G‡+–UÕ¶’*µÒÄ%²qU«è-c3½µ_ÖÛ]õ»Iš0Ú:Õ-ÙÎoÍËØo¸¿ç¬ãl¾wÑÊQÌ&Úuîåååïuy‹Zç{|J}ïa'•ÒWU¹¹ßwu¼b ´rÅm퀜@[§üʇ9÷kt‹~>^ºÔéá22¯®\ðÎ|Ã^]"oõôW¼ÕÓeÂ/,_à«aízÒâðÛã£4Jß#çd}ð:ö¢Q…@h6ñnó1‚œÐ8Pi—ýÝ6¹tYá,=ê,^€j:ñï3 \AÚ¸. tÖ¼èÌ; ó‰¤·“ÅßoÝê—ƒøUT†Çvr@KzêeK¶—÷ÚQ6¬¨fÿj·æ~Î&|T q Ë‘…žöj65€œ l`V8Ú-YwA\—ˆhhmr^~öZ¨ }öîÝ;gΜ&9Ubb¢ªª*Äq‰x\e@g;mGË›ö„hM qA\¢È9 å ¯I!.ˆKâªDig;'ëó>·EÛo„d¢ô¼–ý|(êZ 'Nœ€¸ ®vWµrΊ;7yì!…m/Æ[+0P3КhÉ‘!.ˆKâªAÎ®î ²;äl#[»”G„â LÙÂJ«co·³ƒÙE¨ åä¼0ês¢$õÃÔ‡}¥©÷[}ùâ*{ÙjªGG`…XÎ…{»Í8˜Ì~yM͘› ©v*¿³Ã.LM±¹à­{ÊeÄÌ}Cƒ·X*—p´ÍŽn<¿KÐ6à´pibìí6ã`v0{Ëg*q(ƒËå ¾3ƒ).?EmÛéÎ¥”::Ï4Éü_XyW´l÷ÎD7Ðï–o¹ 1öv›q0;˜½å358ÔÎܹskõÎŇ;dì¾àßs¶fì…ÓaŠvZbÕ;ûÂí‚bìí6ã`v0{{FĊu@dçœ?~üx rŽHvÛêe3v”ÎÒd¢îÐW›÷´WN¸Íg!ÆÞn3f³ƒ¢ƒ¢"¢åÆÆÆHé»pU½ä½sœ|o×±`0Z­î‚¢m^ËùT«è%rÎN}î1jÚ¾iòvËÏÜÞÒWæ õÁ=„Á eÈ0˜’ð²ò•¶Ë‹Á”Wô£WL=¼y r¹º‘ñçÊêE+÷½S›}ãÑù++×í8öÃvóµSË•î¯v_0ÀjêPéØ8µ•¶÷c<Ù8oÞ߬\7ymµ¿~Ùæ#?:®9é½Ù‘ì·ß}ã[–"…€£½»™·/æ4ÓËuÑ.ÿŽëN]o¸uÎìmß:,pµb|:{"ÀjÚH"—ä§Åš-9°nˆ ®xûÓòš?”4ïãê97…eÿñ6¾>ÕØ€Ö¨å¨óe¸ü7?¼ª`WÝ.“ðòáÅܹéµÔíIVù0¢ÞDyæÒV£Ôß~Ê·vÛáj.m>c‘ƒ¬¸ÑÔÍóÑíyNž>ÐíÅ"¯ –ÚUsx!ÛçšÈ˜ÎÞÎÛsÖª¡jÌ€í. ö]»pÉgŸ‹L Aš#×ÎåýºÂQELeÐ ÞQ³·nؼ«ø„û:~ÔûÌùË'žÍ^5u»Õò2E/?2®XÎ Âî¼¥:»Ô j pŸJy{;¬l@k£ŠצúÕn×JÔ­‘!ùUƒÅôõ>¿Iªv!QÑ@:óWJM]õœÂÜ‚‚ìŒ|‚¡Ú­;yamG‰:SÏÎO‹xsñnªn5\òö«åU½¸«†™™-Û]™÷䉨l"—ã“ÎDq°$­SÑ1˜:ö©s»:ìåú/aU§Ù:ý,o¾Ší+]¹ÙÀ¢ÿ}z3F½‡®ê5UwFr·wVìÜ7cä¶.Åtøªý ÅáÙ¾ã¥Ë†ôtCªR†žš¯O€ëÝ–ñôôD¿7mÚ$àžð䀶B•gÞõÐx¤Ê£ôŠûçF(p𓪶ÊÄ«9t¸iY!0Ûw‚¼ ¢ØkýÝù¨ âÅðì"a3¹8"ï!<+3ÓwÝÅ™d +ýåò^£W›†놆K÷¼]¼VÎýÁÚKNÈ”*ÌøüáüÊN;;ø­7½íâáQáé¨êß›}éÌðd"Gd$ÿÊ êÉC£€Öèš×é… âšWþW˜«L’ù4;*ƽù™7ª'%?âS²rgMÔe§Z1hß8ÿgÓ4ñ5 LdÝÏ °brú¶Ž3Çiž|›Â@@έJÞ—¸ñðÙs÷=sÙk¸Ï'Çþ”1ô´ЪhŽwÉø/¿¹‘¤¶Ë¥WÆJ/š/¼(ÜgãQ^øªýŠ;w¦C2YxzÞ¢µ'+Ë"yø'×ò”¸m9äønuûT˜›Ï~Æ» 1ööæãè±§¼u\oèuÝ>¹~ËWÆ'Þ —¸>%°‹èÙéIv‡u“‚ËÞ¶[§õ[ÞOö,~£ˆ WG¡ I ™0@ɳ’† ¶¶ÕôQoâÞ‡÷–þyð{NI¿¸ÑÔ¦¨ìVS».óyµ¬BÕéaªS¥ýFî|0rgɶÊÖûq[K¶7‡«Ñ¾˜3gŽ€{.]ºÔØØO÷(mÒîªqWÞ¬p0Å àñ@K¡ªª:bĈ:w»sçN‰wÎÿ¦‘‘BLLLAKUÀahõÀ42Ð6ä¼x£ÓÈDò¦‘ •ÓȀ蒓XÓO埬Ã425À΋|yõêý§—|r½âžý›¦G5ìT€ W¯^­é§…«–V”s¦‘‰ŽÀF„6Áp÷çw…ÖR°¶öx~W˜—DˆybÔí9vÏx³&O¸yo2˜iÑ,Ûù•>\<ÔØ£v*¨¨ÙµÀïl—²ÛyläÈéFÔ ÙnîgnÛKVÙOÛ€ƒ~_ÂûÚcy/Ïí+<Ö ±n5¶þ#”¨Ã~èÉ(VƳ’»+i~Vì)±ìä %êwÏ(B¼Û‘ãH±7_ò„[Ò›1Ý~Ž’×G5ìT 0%ÏÎqJƒ¶LÚ^ñ72†€V#çÕB/ tZ«œ \ê3²¨7×ïð†³¿s£JV3£šÍÞîf)Ñ£,X 9 õÙTC±]xÀÝ8t¶ñG5äT€<² –€ÖÈ9€œ làÙ9ˆ.0²Z=M0²½­Íà ;íNü[òGÏ)ÿ=7ã‡gÅøºÝ}~#%¿bx{†™½øfÄ’?¤¶6îÁ››¿?(íG>WB’:ªƒÎ UBóø3ßýxc—ÍÛêØcâ15þ4ÞLß×W–§–ìQ.\дeº]ùõ·EÝ9ÑÜáß±ìàÈ?ÓÿUý  µR¯9Û«§ Î 'ÞsÊÆJjÍÊþ:ùâ[…A® Vª x Ü9¥¥¶9ñU¼ÌTùÓˆÎ}löˆsbââV~‰ëä¤kS{ÿÁÞºWIeÏë›W*ž¼cÑõTñç”õv±ã‰úÍòPܔȰaÄ:”!€ŽMäÐBϯßàó—(ƒdg+ Ûµo^GŠ •#æÎÎÿž¤0ó¢h†®‡¶ŒÑ$ÖME»ïlgÿ |¤=:¨ƒš,Hy]7‹Ô[)^Çáâ±X '):#)9…OBó­º ‘&Ðtä‡\½ÇœtþÖhu|þ·uÝÇmèôó€­¸mN•~K ãVÔážÝW}x¥—TõrÞ Š|/­!r ƒYÇoµC˜Q19’b?†m=õ•!ݯ·óÅÞº ëÅ0ó6Üôã X%ʶj½ùÒ]Ö •œ=ÀÈ ÁrÎôÿpÅ–‹ˆ‘•GZu_ !Ùh/…]œ%G‡|•—O–žao4]th4ä.›ov)Qhªœ#±P°u%1DI2‚°rc¿Þ~’e2TK¬Æ@9¯?ã™{¨Ç¢‡…=w¹}öŠû y„Ãa¥ÒÔ/¸ÑÌþìrîê>Ó•[”a€ AúÀxÞ VŒ¢‚O¡v}Àë÷WÑÀ‡O°e³ßÃþlùœâ0@E³ŠNèÙÛÙçäE%­ÿú抴ãT©Æ:ú\6›™)gtµ+)9â·ûÇ{'-p iàæ}?<ï´Æú{]È‚71Î÷Ñ_ÔeËWgmB­P+0²½&°x²©Y¿e¿]Î`®Ç)*ÈÚjtê$IÂ;ÍT|î“ÍB@ÎË ’ÄLUþÏ.–óbpxb'E͈Œvƒä¼´y…%éª[¸„ÿ}Dc7ZαDMI) ]IY<"£«¤”’ÊA@Î&•ôxýˆåQSÿç3G¯ýH8µ©ï»þoሉ;úÿØbAª9jæl¯NÑßH߃É'Y´uŒ36ÕËðýæ¯×U3ëÛé4I;Ðòò«è[xÊ_qiUTYy§BŠŒduñÌÀˆ”1ÕÆé%—ŸüërŽDOrãu'Ñ[‰áó—ÖQŸ”ü7%ZLJfHšÂ-§‡œru¹¥·ãÕ¥®!óºxMyyVðÞ8qyÃÝäs¾d2„T[ ÔBŒl¯JD(ÎÀ”-¬,56ö/ª)ÚÎC§.‘穈¤–£—Ú¹QÿÝIÆÉ íç²X/g¤¸ñûZò‡Ü£†ŽÔÌ@µ52,|Û‡èOyмŠk?KeBsiÖ¿Õ°r2Z »Ëò¼p¬„ƒDúއQ˜Xyy9W;¥º]ó/ª!©WlDÝ¢ïzSEZé‹jq…!Ö“)5œ‡–­.)_åœe/ª!߯|(}' ki£kì:ĉ—’™k¯ªÓè&BTIÇ ¨µÞí­3j‘ƒöÆÍ~±×I”žî—£ž±Fô윓óù°çá¯ÙXnV,­ç‘#Ý%k €&£~rb9olìã™ûUƒ±äÞýÝbû‹ZÆIrÞ3»õ-îÚ û! rÎȺŸàÔ×[†øÝõQD'SófêK(~FÎßÌJî.CùÈ÷+ tÎèÔç<Å/ªi~ãÿ•šâÿñÍjù^;z»ø r4=W¹9翨Võ:’¨stžÛt6ˆ¦œ ±¬ ·˜‹’½Ïeæ—ý%ðbhXj×E{» -.çh GÛìèÆó»mN —v!Æ.ÜŒg¤È¤%É+ºžœ’܆Aü𦚺þIYœæ½®V§ÅWt1r‚¸TL}Ïðû×…ÀÊÒë÷që‘·ërZ¶º‘Û‰LI®FÔ›“¸(Rt¯ôÝ3ІN‘vËŠz»½ÛÑØ¡F€f‘óò³Ç eý …¼ÿpf˧Rˆ± -jfÆÂ#8N]Ck¢šãÌ®Ñå~c‡üø›¨b`ÚÌ#cQ G?<ï\ùcÃÎ`h⬠s´’wnÛ}}’)IèÕò²c[TÂѪåöránoÉØ¡F€ª4ÁÈöª³Â · ®Á±‡‡>zõtkNNÐÑ}ú \odêØbQ×FÞ ‹y%tI¾D“úø…r1ƒ@óý°6üCŸÎj:%® ;2ÐAu㹦~±úúåc-²¥]É3½ ´_1ôáÃcpªäÄa?ÏäåF‹‹›Û`'©¨÷@3ÓC»÷Ú¡¨ÔQÀ“”wÊwå’mpúýKÞŠ|N§°­VRšï~bO»pËô´€HÑ,#Û…Û|nXìa!/œÉߎývþä—Ùwê«èÍ•qJ—„Å*^†T¿¸èHž¨ÛE ILªg½sañ±,5^›Šõó›ßÜ ñõã,û‘›>9¨–oˆˆÜ‚裊Žj9oÛ@uÐë¯å>½]YÒhÉó{ûÊÏ¡Ï>TÑÍœëu2%ùß¶ Nu“X$BGÕrt;qSa³Þoê:E­în/ÚÍ2²½5‚úåUCà  63ÿÃ÷¿deuôBq™ß>}q “Ü<ÎjdõŽ9¶ @âýbt CG›ÞÃŽ+V¿y§PGµUñ©qª>…‰¨–—yêõkBý;‰ÆhH»™ÙÌOoW”÷Îm-çKáJÚ&eµÃæ²S©IŒÄ¤¢¤¤¢Ä7áŸ3Òã½¶EQH’JöZ&ï åÌ5ìÓ¬õVêâHXÎ0„;ËUV•Ÿéó5d‚j”6GC–A£\?ÿY7ß tñÌ?zö\Ó7ìœ=L´œçùN”&r í>³6ŸÜ:Z·í¬õcdêè2ûΫ§ÛâÕ4¬ú Zoh2H¤Rˆ¡ÇJœ>KRìÇh¨o——•þã]ˆëóÙ¥a„°hÙ‡*…Që-'Þ)ƒ¢+3·£΄ªBÆ×Ñz ‹¡—=/ç?GÿCo€œ+«vïæàr6/'JBÂÂÚv’ŠZ÷úžõø‹]s¤¸ö ¼T<²½ U÷¨‚¿_Y¿¾ç|{ÔájºEš)ÇÌ"ÒÜr£¥¹¤…T §Oå¹31ù„W¯°þrôõ˜}úpÅ›øö΋ »×»®sÄ·A² Q£³~æ£{ã\Ân=Ï5ªÝ6@ É9Õé1‹·ÔXazØ“í.®£Y~Ya@l;™DýxynŸï¾V„’õïE5«Ã¨Tﯷ$J[„Z1›ÿöÛb<éÇžM«â dÆg‡†¦„þ*úõK<4œn¤ h_Ø:tŠÖTcs"‰wý4&9g͘òM~’Œœ@/Ž›¤TþOTÈ6ޝèè)ž‚FI­ Þ/{'¯ñÝJf§Éeåþ¤‡¨þ¼d}ùWn¨f¦f×}]»Hv3ïnµáé+.(Xj’3[[‹mbBxþB|õ:Ú¥ólK‹&»ŽÜÂwl  ;µ­RßeÐ:³®ìþln§ãŽ ²£ÎÍÒ…ÅÓ€–óÎy`ÅäM‡¯^vøüå?…mJÎEþ;iå¶-^iñäÐW3'Ùû™Ò+9Ù»°f¨–sN '-4õKܧoŒoþÔo©ÔT“lS¬q律ô–èêëáEÚƒ‡¦›‘s;ZñÏF½y Ÿ”DïÑ kËV¤à)Ý¥íТÆëŸ¦}Õûr y_L~ŒíEÛnÌ!öO¬]W4iÒå«’S¦æ~ùØT>:›<–2s˜ÔØm–ú.ƒÆŒ<2fY¶Ç§¨©êqçfM{ØæÍ}¨Qú³wïÞ†É9ÂÊûûjÿÁ'⊮ü¬p@ ÀSq„§âýu¯’ŠFà¨?òn½é/öÍßÐ?K*«ƒBÇΔÎãõ'˜h›a1fÄ䈋'õVu]€ªx‘‘!),ÕòÄ#‡ëû®Zë®u18k)ô3Çp굑þèû늎[B‡¨+ÃÏ>’*KEuxñáÕ+Æ&yY‘ü+LÝb07p[¾µêµ #ñG´LïÁ–Š‚ŒcY¯À$&r4€ãÇ ²[xx8RåE5¢J7ç]×—ßyUg…š1;âã~q6/óÎ;½ùÔñ]9É–ÔÙV½‹³êtC)C,RÛ¤ÖE&ÆÑß$FEåwïŽúåíJË«zíýÍz-®˜×áªõ݈ÛëÁwp6˜ºÎÔ ù§~§+÷NÚ{ϳÿ^Wcçüïk¾ÃUYPó¶Iƒ–A#wßzlÐâY#¾¨Jæ%2óîS$ÍOé³s.lÑbH¾z-wà12’¡¯Ÿ±x!­Oo.*1Ée¦û1»Ÿï‹ïõ©çdq÷Qƒ{UòÂkÕoZ¿>`á2hÊú†ŸïOÞµg2â››²íËÉCáž4’¬XÃCìGšXá°‚éð¿wÒ*ym2+–Œ;·]¶ ^eè–ëCÁz@ËË9êc¤>÷5m߇4y»ågnoé«ct›MË_¾V›9»Ä R›1ÛkÛ¢íä<â®Æàï½ÍÍ4´c.Szç7ÛÌIŒÖ`Ò¬ûc¯/%]¾Z4i‚&Eéxÿõ¤‹º?l]>_Âõ›ãâw–ŽJSguèÛYK¼kÚ€œç}\=ç¦ñ±°‡ÖËzÏ_5èûxI²™;p¿‘IF.Û"çº#‰„#ö.KL7Fÿ‡‘(f6”§ßüçèÙ_ '°YÃa“$h—/HNv!^ºÌ65Å…„`ãÌ/]hažU”µ?ð¨OÄú§/¼%hý'› e©k¦,F ÕÊyAØ·Tç»5¨D%÷©”á·Ã :‰ƒqšâÞS[ÑÚŽ FvÜFzÅÿüä½A§¶¹Âž<¿´¼ñŠnažûå#þõk\D$³wOVïÞü1í2$ÏÎk×uZ~+êÆžÀýW3_º:Xc9ÚRw´µ®– ïíÀG‹~)ØQlÇ«ñOåw-!í}®ã!°*")çÌ´ÈlÙîʼñnDe¹Ÿt&‚€œ7 }}±À ,QÏB6>DL“B+0K³‚ê7Óqpµ+x±Ä z“ÆéN¸s{çÿˆØYãOý¥%#9ÚJ× “Á-×APEGµÝVð†™ßE°`‚&cñBþ†Q ¦ÌÛHw_fr1À`Giþ0üólS— d¿m·ûÓz(üHȘóáäÔD‚kî}÷PTË™ÞÿŸûSÆÐÓÞÌŠŽ~dn}Ìø0βD¤ b‰îËÆêŽßðmmßÇÝg®úÊ2a0Wã&ö{÷øóÔÁDí.Ío}¯]ò×2[v’ùòêÕûO/ùäzÅ=+;„üÈcÁ¹$ ¹ WuêáÍ•á" IåœìYu[4âÍmg¥”óÃú»=ycˆ ¼ 4¡œÓ=J'ÙUãNd QÛƒ£mÀi| ï?œ)¬¬zyn_á!´%XÐ¼Ó ¯”‘ææÇ±‚+6’b3rÎ +ãrÔiá‘^ŠÝHÅÛwË|¸ŒŸõXµ…¯l.Ï‹WØcÐèhgõsô×Ü£\ ·Îcìw; ¤ ­dû u–µæ+ŒÂ-éML~Àþ#O¹xK`9Óíçˆ 9qÏrû›üнJ8§Ôs¨Ü†[!ùCzÀlq@Ê9ÿ?˜F¦å‘ÀHˆcÄ38rX9°†h’gûõ1¦ üCþóPùAÂÌ„Õ'WY½·üaÆiüܳðQÃ/Ôã.6òL¬Üº„‚Tñ*RJâôä<˜hJø#ÛK§‘Éþãm|}þª40L‹ ‚UMâ$D=ºÞ¤¸É%ÿ.s[&#«¬6iäúzìüÉýuxéÂCÁÙÁÞËvÎæ6ðTxŠ9?-ÍSö¼”²’¬¨ 4½œó§‘q¨AÕà>•òövXX¦%PÅ©&±Á­I–丄qbˆø´5Ó¤S•b•À&mÊ ›´ì7O=¼ÐBÚÂmÏò®Ò }Ü-a6²SúÃw©l„úæ~zÇQf`_ )id„‰V-“vh5_.¶ojßJÈÜ¥swÛO¡çICOVÛ‡ñ÷Úömç~fÿ<¶j¿âÎÅ©u(:7×ïð†³¿s£x‡,q}J5›½ÝÍRBv ÷þn‹ç¼§gYî>2ÆÁÍ ç€PÁ©ú1ýÀ­ ³\3)–䊹+Ö^YËèÀ,/›´mˆºã7F?‚î¡Ø.<`‹n:[!§ì¸í¦#Øh.ƒ÷ÓÈKα*Ièlo}hæk9¥Û9n'3šA*b›GFöúöÍìÏ F7 D9/žFæÂ¾gñ¹ñÏyÓÈŒ€idZ9¬\· Ÿ›¦hu(*Lu¾×)Ý€³v?~HçåõXî㣚š Æ åáw¶KÙí<6rät#j†l7÷3·íauÔC«†:èz8}QJ7-#K2Ül]ÜÞKË,8‘ÈøËD°œ½ªÄ$Y¬iXR¾‡†]aÿ8=-ý«0dÂzͲ‰×=œ£IÕ–IÇÊAƪ°LKž,bbh¸[¹ØdެܩjLS‘y⨘/yç&{ØÎøïN$U^f:††N}ð`·‹ ±‚œ#8¥AÛ?&m¯øC57*8•D¶hÉy½èx:¶…[¢›Ö–†¦ÔR &/§Ð+®0BZÂ¤Žµ{¸ÄˆÛ½^Ë…Z–ˆ™]ÝÍŸ¨ˆ-ÿlÿ¸ô®IÕh9¦½LçÚ‘0e’MÇËã:Ê3mH\ç·–V=΂#éHa³ùhs‡B‘…–E‡œûƒ•f#c‡ió;(Å-ܼš 0RO@ÎÛÊ8å4vaãax.çE&;<3onlI€ }Ùá„0°ö²8 ‘’%)¥0’¹5ËyQ”Éû•÷«¦•¾q«=©wâVLjâŽeLnXÇ…€Q2UóÁ|ÈÇüÍ'¬-í¥N ðG½Éã¹Zˆ$†+)ÁVÌåÉžŠÈ\;&à3lØÔû÷mCB’åå禧/š×e‘ÞØ|=šx¹ã †y_×d£Ò®°ÎmˆJ‘•ðÃ'Zõ_Q‚ÅÓóöªâ 8…dv²NMÈIÁâWÚ”VZÖ®ŸEýÍÉ6Xžë¬‰ã¼Ïb›¢Þy#‡«­b·yìSªäƒ—>‹=õ:"‘¿¢‡ôQ^£W$¥Ê# g®zéÊ~\ìñ$œ½JÉv ÷u>¢'dçãRq»|‰ »]\ cb²²"45 HjϨ7np¢Ææéz vîé[¿¤ÿÝI2îÛ›I7CGÌ·Ð_Nt(ü¹§Ÿö”oÙ*½çíòÙì¤!À@"X< 9oŸ¨`U9‰È9755gc 2§ƒt‡âê¾€–,’æ_ˆÈPÉnúdãfšüƒ¤I:C_ÏÅñC´H ó3Øi¦Ÿrb†éÔãp®…­–ßšÁá9d9Ê¢çâ0ñø²qìhêF';^S¿þ®pºƒ Çç¼Î”r¶‘—'!r6†º¯""™ ç"ƒ˜éŒ-ž2CFtQÊ~µqÔü©†ÖÏfhÔYkÂâiÈyûD§Æ[ˆ¥.1ÎÏ£{§âHÿ{ìÑz’¬·"6=5÷Lû†§ŽÂyO׆û:ñkB°xG=‰ÃYó£1zò$*–Óà#ëº × @Ö¦ä²Ì1Ìoq™ñ%£ÌÅIʹF` Íí»Ô¤ÄÕ€‘Ã㬬ê<„ýT›¡•+nœYR{†É£)¸AÑü?eeº4LÎËfŠ5*ÎÁÿØòq%¿ Ç¥ 8a›†Fï˹[l¾ô!âš±çôÏA«÷DLqQB“sás‘BÜlöÎÓ³p ,ž´<µuÎÒ¹ þ‡_Ÿßå=ÝE¿ÑÆ{Ë×/н¢–ÀHˆcÄ38U"âM%Y©âq}õ±Aœ¶i±þ¯>eûW¶’RäÕ/vUX!Ç- ÚÓŽjy‡ãÚ¨ŠóµÝæð…\Ž: Ý@¿Q½ñûØï~ù¨(Baún£ê^gÔ¨–Û_2CUœ¯åè6C;—/äFú+Ð ôõÑë“L!W|ë­T&ƒJ+üÔ—cÐÏAåbWÅ3=t é³­¥;–Õ´\n½ðBSS¥æwÁëõË¿Ïæ)ú-iôÝæ{êEÁ9çÐ ô»NÝæÎÊ!·ïÖíýg¾›‚ª8ë…únó=õ̬/ᑼ×ÛÐïz9è%3ÅÊrd¹ ŸB..îÕÛwËy‚únyTô£_V¯.{c‘'j/2<6¾/ üz-þá‚Ú: ‡4^cb ­…t¡s¨‘ ÁÔïÙ¹p»à„{sG­ŠSMb'šK xqù2*Ѹ¼µÛÞ]ö>ÉÚê„úªÞŒéU`3¶ùeÿâ]C|gUêE\™Äã‹ÊÁÁRÉÉy*ÊIH­ƒwðyx‰H Õp2"ÆéuWcoÏ¿W$õrÙކàèÞ•·/ÞÆå"¸|[ˆ`†‰à  ƒ·'‚H/ÌÏGø=þ8Báµ¢ I«$¢<¥iÒüb¶¢Zºÿ£­P>žè]èûWÎ0³|`½{ÚËÍûŒÑø÷é[Õw*†fÍ6ìdQQyY•%T™-yTtuÛ’mûÉ~KÖØ¢ZNpÍQ8R÷¤$Âêiz1 %ä\¸Íg!ÆÞÜQ«aÕÊŸ£ò(¥;b¨ñ»÷RL§\%G"•’ÃB¤ðؼŠz:áõËãˆëº*V=•LtŒÃ¾ý4E…luuÕÀÀ.ú¯²Ê­°1HþM&ÿ–@¿éLú_«?cóír-#EY Z‰tRv!·H #%…‘”B( ¥x[J QA¿Å0â$„H@â "oƒw :쥃-öˆYX$O I×Öº·rIr`HÜá| †¡ýÅüõÃ~ËÄdd`3Ø[…£ªÎQ“7{ah¸yѰwšeiòfY]Él\q³õÑëaÄgŠ-‹ã=:g!„(Žì3Ž”<6OV=þuã¯ì“y>¿Ïøî ê¹Ôò\”¿ÕM1æjçñu¿À†úèí° ÐBr4*8U?¦_ÙŸ˜‚•G¥¥;Òè%R‹3Îïö0ð‹¶ìC_‚ñ¼Üš§¢~9ªåAcFEÙÛ—8yïÞÙz‹õXAH•ÂEâÒÓÒ˜ñÑŠÑ1š1‰N‰IÉ8 V¦PI/Lk&i¤¬Júk»heì˜ð•$»G™9¶’(“©ýû·tzF–¼|´¡‹PÓúÕÌ«ª[þ^gêcóü9Ùˆ@rÞ$p$ÏNÛ¶lQœxÄþŒdÄlö ´ä¼uÊ9V%‰“XîE5|¡ƒÿ’!9¼ë#–:iVìž##§ÓŠ ‡|\f̬å¤hP*6åÔß›N·¢É¿åµÇ9V¾ÖC%źfÄð¹#+›®¬¤Þûþƒ».SRUU«SójfŠí‚CÊúë9>†+•H·ìÅ¢9t—ïÞ¸?/-Õ‡©ŸG¾ÚÅwEä¼M"‡•+àä‹›¼¸z¹,0õ’$ưHÁ–É¥Zß|â©NR¤Òª=‹Ë+(ˆÏ ºÒ•}3ùp66ƒKWŪhÉhu,RÈ&õSq‘ÇÈc%«ü(3®‚róÆÁÙ6 ¨¢ òrZyp£ùËS)r”ÐO7|7&ƒù,"÷ðüüųËÜköÑ«òïE5I ½&¯…'~ÿz-~ÆÁ^ ÿ›>=åuÁ5ç+‚€¢·89¡7ì½ö›¨ªHÂéÎüoAÝ+ªñÖa›ƒ›8R‡ˆpi?oÞ—;»?·º@ Ø9os¨bÕP]§ÿÏÛ4,²<¢ä*zš¿]&ÞÉìè‚üPFT ;* ‰) Ä"Ä ESj¿Lsb3Ò+ mq9^¿üÀ;§~ô±ˆÅ(¶ ;¸3–9úa`É)ö‰ P~ªF§ÅØ*c%B:v0÷û¦ý;"ÒÌ´¶³T˜)¶äÙ¹°H{Ÿk²¼—®ôåÇšzžs ¡¦½ËA@Î[ŒÈC£Ç xPοpºÇÎïkÅÄZ̘e}èrŠp’I£;ÉùOÏöåFm8iY9‡´®ç/ ÿ:ƒ#pÆ·7ÿ²¶³¯ò\yx#o(A¯£¼ŒOh·­ö;zƒ'T‰ ¾þœ‘!Æ;îÃ60`Ó9Ñ„i4%9Ü7ì"¸´øôbw[†)×þõŠr5+ŪÂmïvú˜ô]Lšÿ<ãy™†{Z¿h®cz N>a¢'Ê~^aÐÞø3ó_³ûÏq 5 @9ÿ&`¢ÿÚ–‚":8á†?»ƒ ·ö.,=©Á*Ñ«ÖïšïèH 4Bο%J Λk‘–¦]ÆÎ±µÉ¶UÍ;×V‚‘`T:.mý”uvev‹O.&à•½‚\ûåù>6~³Rl›³ô0¸©ÎÓÏô9ÝíiO²–ü¯ŒN-[ãfMŽ*bS ZcßøžÊª¸küÀÖ„†#!æ–siÖ¡¾ódûs¯ €ŸuZ®±13#ƒ E‹€fõ±rÕP)½qïÍISÙåß™–×€êwºSãØm¶s…¿ßй>iî¤É¹Sü è~ÛâJï j›Ôò~´¸ÅfSÁ­|k[Xò¿ pL¿ù§ü¾äH®wmT$Ò¼™…Œð­žtÀtF=èÕ¨•yõðš€æëÉÞ/³¥1adðPñ°ƒF‡¯´?ªW¦ï³ÿlm-¢V/FïKyÁðÙA ‘syÞ™_Iž|j‘‡Ý/´2íÛß[´ ÜÆZN&£ÿÞ]´°ÐÝfKã1Kè|xýñkݯݲqãЗ]_{\m›ŒñjvYQëiNTíHUì–q{Œw]™`š¿¦Tî sEŠ^;9 òùsè‰Kf SÏs)>›–!óúe邆ºÜ¹ë¤ÓWfÝPdóÒÍ´û ý©Iá .£ÛÁg@šÏ:W_þuÆó­î¦•–¦•Ha¦@¾.T+Å:Tà~¬x¬)¢Ÿâóç‘NiŸtvŽH­«ˆ¢=Fi ²ZÐü`|àigჃ@ ÍjW=Ýô<"ÈQ{ZmÔ%­€³œðp4ä+dˆd(‘x-Òà@dÙÿ&dØ$üU^™‘jn.ÿõ©´p%ÞW‰Sh#ŸŒl!F¸ ™S6uÓ}…¼gw„G¹C ¦Ë9cÐõ×ËŨ<Xìš™]«åpõÈ×Hi¹ìd‰d­ýcs²V×—Ïß»4hP¡žjÕz¢•šX¶ À=Æ` j óº"[ª/áåË^gWüÂÎO´ ¿E]¼¤êÔqE;Øñ@š(çõW…ƒ|d²mùþ³ô½Ò;f³ýÁC¼GbâÄ+W¶N˜ ÓҕÌ { F‰„ T+7®®È#iŒùQ´l‰oéS®¶sþÙGbþìTL¾Qq ÃÍ•€ùsꙌ­OŠ; nÞ|h°®µheTcMoÖ¶á—»AÄlÛ\ÒË]ãEƒ‘Hsʹ¢4|å°IÛ•±ºÌ?rqmOÝßd¶Jtkz TÛB([VoX°r©ºRW㽫7Û[?uBz*¦‡KàPÊ™Œ³ã¯ zt‡K uÉUÜè]ÑXïÁàµl’N (iÏ1ñÏëˆ|þ<ºi—ÑÉs¾YÌ‘ú÷ïË\õÑøL‹­/Ÿ‘ "´ˆT4Æ@t13jÎ\( f{Ë=õ¹æä‹Ý  ŸïX7dÏ'‚_4 45óÎùO½à°/™“±×áÜ/‹UÁŒ|µ(ml0¯âÑ@k¯±•sïïbeXƒÒR¶Sí×&65¡¦¥£ ‚GŒ/çE¡aZjºØÜ >¸6Mµ´ŸëMÿ׬k]W 3Á7 4¯œ‹’/E0ÆÏícÊ0í=w"=âb²æ äkEЛ“ƒ?~ ÷s[ÆaTâãŸ0x¼ +Ë÷w”Œ£qì><ºÎÈfƒëíE**Ö½z ;PÜï•Gê†^!–s½:Á×–©vƒ6¹±nÐx÷WnŠG’öü>k÷+Ϋ½ó¶Frº#!棺(+Kçèø¨Æ» ™Ü ¶ 5`æ@¾N¨TÉù³¤£qAÇݨ®;JÄSFÜ1QÌyw®šÚzÈäÔ-›ì.b…^ùż[/ÖøøÓÔÍ›”$èa«M«ùç¹A£÷½PÅ©n¾…f_Ù5ó¯ùÞ*«¾ÎH¤yåù¶PºµÅÅânÝ]̨¤tq©*:cþ²gY/¾._í×&´³}yö4#*Ú'7sšQä•CûMXºÕ­êŠ™§“ž©BŒMc\ü^$° ×<ÈŽà#,Ó5þfí¡î·>_äMšyvÃúã9ñûíÐÛô['¦¾H¤ù䜠k£U‘R,L¢´8©œaÍ‚îû _;ŠbЀt%!9fyG¥å!›ÃÂFÕbéŠ,j>Sâ› žÖ‰Téç €¯FÔõ‹¥/g±zVWC½º¨DýBáÛ]ÂSò„öí®Ú‘ŠSÓþ|ÁÛïE‡g­Í¹A#ZZuÝŽ„@š…êoç‡À®œãÛÃòyùáÛƒ¸¾Cà ò-5Z|Ç’^ÿö<êþ_ç-ïì)4)Wû…9P]"+_~Rù% bj µ†žàh­Ç(fgC×-¤Îmuõ1zœfÏÀ€Ñ½õW¿¿×*˜Q¯›öd‹}Æ·ÊðyVÁÞ–Y¬°a18Ëbµ_•Ÿ®û6öe¹ÁcëétÅ’HÂË™Už6¤âÌ’„*P©Ÿ'ùHÎ+_¯ðº¹ÞT«Â­„yùŠÁœ¯Ègó¸ígW¿Ò#¹-h9Ч–†¼7ÍwÓ«g¥1u¬ÑŠˆ¸~OñÎVÚ:8üÖ @ê–óšÿ\FùÚqLìgûrùè‹ C†V¶E7!›`qâ{9nz®õíC×3Ýùƒ)àå'®Ð4‚UÔm´¨€ËÈ@¾qY}.trævyÚ)øŸÁ¯z{¢1j¿* ÀXm³ãÚáV”nâÚ8êš`áÄ@ õYç5ËÈ„ô1eõçN¤^LùyÂÑpoj3lXŒ Íø69ø±E®õ0‰jd{0ÐÛ1ì/ds%r–÷z¢xvúQít5ðzö‘ÚÃÕq- ç¤~9‡ËÈ@¾u$]P!Ä!'¡Ó+ÍX¥…‡¤m|>·¥Úh1îGVö¶ÔUMTûº"!­†¼èÊêùÿ¤Ót±å…2×ßv.`ˆo©£ &{î ßîFd¾²­X¹ÖT ©(ªM[Dðxù/aw?ðïÉ3ÿt ›¶äIU‹4ƒœ¿YF¸Œ äÛÆ@f@VRãH9mäz¬(V•H~ta\¿»-B4ídS~ùyiEö“àpžƒ·1©ÅŽ‚@šFuPõ22Ó¶‡MØæ§ZFæ\Fò ã h—DM<ã¶p1)[e~t"™—Q)°Ñ¦¥‡ Ïn éð1µ –?ÞéÒÅr.:Ãþ}ù“¡ÅŽ‚@šAÎf—Mû†lÏ(×é<÷ÈE_ ˜1oï*‹W÷¼Âè<t++õºf¡µÇ™e˜éãÄ‘…ŒV‘ W‰á3j+ÈÒÿþag哬‰&yÿþ4vÄžö÷æØ[æ(¤9äàôûnx\´áƒ æÃ˜–ˆ³uRÛ"“jLý»½ño/Û KJæ¿ö›2\ø4³_ø­Ó? /Ò×çÈG¥` k‹î„`Ê´ûrjª!b¤ž$¾^ÙBÃLlhZ í.‹ä/£*-GcÐø*މ†VþwXÞÚÒÂÙÚÝûµÓ£´û÷ÐÙW$ ó—4‹œ×‰‘~ ëÙiX5Ös5¦þÝÞø7–í™lìù ·ý|…dîÎ.¸ ÷Îî¯^¹¼õ¿]R*ëöõýí§!QFüBYï}{;ÓZì(¤åäüƒ޶ÙÑ@xÁÂVÙʵ]©·7þMf»mf&‡Áxáêj+É}LÑp‡¸x^j¦»³N¢©¬±à ¼—šôVYéË^¤ÇåµèH&Bоó m-Øž§¥» ½lª8ªïú%¹ž4zqkŠºÚË[|C\{n`ë´Šœ£uÝÐJ(ký«Tcêßí“Ù®SYY¬§‡ÜdF J…ƒ%>Ó1¶ç20÷`T½[QqDQqÔå*zõjm²nT¡A‹™æéáûC&ÁsT“à W‰«¿§Û¡Z®oó½•7øF†@¾˜Ïk«· N©·7þe{¹ŽŽ~Y) ¼I¹±P N•hš–ç3XÚ æý¹b’i6Ž‹5*F@´˜Òr¾TÏŠŸ\TGGAÃêêiW{yƒ@ ­!çêm>«1õïöÆ¿±lO·´ÔâpÝ_½BÃæ3®œkþò“[õ‹^Ç UZÉñ|•VêëQ –D!T¶Ø=º-¤wèe,P¥i¢×ÌR£Ñ‹¿Ïò@¾ ¸ò ä;BF œúaøØ Á^¾”{*ɯ–Æ §F ›«Å€tR@éHãØ©v$Ü—àì‰] &WFac¤Z-|azD½R­R}` Ÿr4L±¾þî©?[gf nÙHvOU×¼s¹=–|E¨YŠ œ¸'YÄl9׆r@ œC ·Ññød;[¥È:Õ`·Œý¦ HÆÑ$¯Ãˆÿßj—¤MЮЬ€@9‡@>,‹—ãåb9ž¬þZ@Ç38eÔëÛÌ÷\`Iå6,)vÑDÀTDšÎÿÃèE¥Ì}Bú_3¹ÚÐmRk¢¬|¸uöÒ06YÚÍØ»zI#ÖkUðÓoŸ9zódoK^Ø@Fu$7´ŸþTܘ¡–D€TÅ_e˿󅴎œ¼*ò-Á°”<hr®CЩÔHÑdPºírª©‚vv…ÝâCü s«HBÍ]k™Ëžï²§n›j½³KܪpÜyë!Š]7é´ã¥È¥.D~ÄÜ€ŸN¸_™lÚ`y‘•eË;þò‡þ£»ßFLzM™ÛsëBw*R:2B8¾ƒ&Ì_HkÉùÇ«ÂA ߤ‡ÎBãr†9C*–I‘¥g“;-;øÂì±I$©^Âýwc­¹ ‘žãÝý“[ÔãG/¡ ²O«ù“?xøÄ¼ fé<Ó(Ûî#Ñ HÇ R̽C‘t¨‚î¹Z¥:€!h3ÅQ!IÂɦ šÔd«^ýQs<ï½Hjûy·¯>%7úD†÷L&f/¤µäùVAµ¼w°gä´P‘\Dɲís¾‘FÔcZ­fK ½ÒIÑ#~=¡£4Š ñAöô€‚–¬+ ‚VŠFÒkÑΞ"ºýO@E/´’Ìg”U{,FX–²ªËT㡜·e‡GÌþmôd c’ÃÃpM×`^ô¹ìnÓ|0w!PÎ!¦‚³,c—n]Eãq§Q¶%Ž2Vܔ־«I¡C,j‚9íÜJ#“©Š–­+tœ&ŸR=òSÿ[bæ”}¨» Zom ¤0»-;Ù­Ú¦¾1îj‚¯M“GóŸž/ì;Ë óÒÌÀa5ïWÑËu¥RH>%dK—°}•F¤Æ1ÑZ&®E-ü¹‰‚£ IB€4‚æ:×ÊÙ¿¸‚U]7ñÚbM.…­ZrÃÎ"h˜Ê` \(9Ov¬ˆë¾âÓ¦æ?ÿE0»ÿ8ØÃÖ9Ò<(² :¤0Nú]×,»¤ŒÊ'ºÅ{ «"2½Ø‹ã C'ØWµ°¡LÆ’Å$ýŸ™v×,²//×]1I–í«¬O>)›gO=Šëð‡ê@k"z¹gÁÞ—Ígt^{sO_ÝÆ@ïéžGSyYñœø}sfÜd8ÿ¼af»s¼*î?p†5f-Ê9Òžyq€x:®5®G1‰ÏžÖaêéøäü{+>3åÒœ ÒÄØ¨yW"8J –Ùô¡=V8Qñâì~K®EÔîa|vcà@ò'ÎÀÇžøƒ¸ì6O†Øô–ï8(`¨:mÌ­£ËWOxî*Fwê*äܤwO ÑêÊš¾Ý›£·YÒ5Ui¢’°ªÄp–Å£TðÆ©4·×ÃB2(³ëUÍŸ3ñ¹F v¸Óp´*J,\Ê9¤µ–ej.˜9%„¡H‰{4ìô£žËüÐxŠñÙ?>©âo¨ŠÅ?0•Ý-R‰±ç¦,RfSŠ/Ù¸=ÉNqþ)Hr9L~$‹ëÛgT£HºynP™³G³~9&"¨œ×.®Hv‡æÛ½ /_ÖºÙ G±C “s¸z ¤HÆ›Fª<… 1‡£ÐÈ ÔΕÎ4»It«nÈ‘X,-†ÑŠYؽ!²TüËôÚÓ¾mC”‰–ž`HÿDPd={8åRb4ÁiêO°¥½r.Q{Žj?|hvtn‚ÀeüÄ‚i?Wv…ßV!H³Ê9\R7oºÖñ«ævÃW˹¤`Ì’¿•oaë¼f”÷pæ'?9sCÉZÃUÌÈÞ²ÈJÔ¦çea Èwyy ÎqÕt=tÃí²ÉÏyu oÉÿÉ‚¢?‚s\F»ìH.KzÜÿì“aÎ}Ú~^j?xhÿÛ\Hñ@#!Ñ~öÜ”]Û¡¢C æ”s¤nȪ>p¹„ÿnøäS/çv°Ccþš¡B&¨¼>ãh\»¹l?!èŒAbD‚ª4nëâ佊ÈJ ’Šî?ߎg>YöƒÛÔ¥y}šÖÌíAD÷"òt;µÃ²‡-5qŒªÛÝÈt-(A¤er0 9Á1RO߯ÄD¢ ò“rF?¿~pŽøGŽ>ôõM±µQK^šì?€þK‘Ñë¹KÆûB9‡@ -%çÙiØ´Äf⢶ —îî+ÃCÔ™×j¼÷–IZ‘ºë•&]!x¾-úT¹§QiòùKO|ƒ©ÛëÙ]ÓƒÒ.,-Á¹2;U°:< ^S²ŽK &$Wû¨PJÒ×§hùk2ï…¼óY‘¹üAh<Àþè1¬ô*>v2q^qä„¾Ê ™Á8Ïá%Wñ@™_¬Ó{²©‹ Iž_ö`m:Ò¯c_WLyÊ™•[/”ဈ¬ ­Îž\~¥Äs@ófPI®gƒûxfÖ®ì­-|ÝXÊÈmÌMè-Z ÕXÚ¿:Ý ¡ÑÅ×Vþúo&âMܳ¦A£^ƒ_vÒd9Gø‰'þ˜·ì@DžLæ÷ôW 0ü@ç-l•èÖô(S×­nY½aÁÊ¥jTªÖµ$-äôHIßÚl§C07y ¥“ÅÇå ¶sÖÖ”×?*L—”¢ìÚH{›ù Iß;ƒ$Ûÿ^eJ—2B•Ùƒ3TšãËÌl¬âŽ^Ò´3¿ftÒ><çGµ¸•½Q^] +„ä,ŒlPæŸ ï_È} š\¦°àìó,¦LÁ<¬$+5$K)H¥¨àÄ‹z:2Ç%V[+ @ÀV¦#Oºƒ¡N¹¯jÙ@öú5k°kx;±þ©)C_‘(¤%[ÿ9Ú­Úx><}ø«/×½ûMVDÃOÇÒ„ž”Œ*_¯ú)´2mÌ P ¬k-WÕ[Ó¿:Ý !7gÎy9äÞÅñú%Ç̼ñðüí‡-~ÙQH3ÈyUlÐÓw‹BŒÄ)ç ›²¨gÆ1? ˜9ºÀ<æ¿B‘ЉÊL¥žêý…Ý_€Ë¬þÄDô>q¢A ãéÀ­ÿéIpUfnéR®ÒTœ²G`ø™s¯ñ¤ZNgGù(j[”˜BŒ•¦’V×[‹Al(2]!¾B t6]¡ô¤ 4 B£È™<»¶ýI»€ÑS-÷†H|r]Õ[UnSQöMlÆ—…ÙR€)¬T"öøoó¶IʽÓÒ¢”5y’ÛÂÅïÅL™ K™¨Ó š0áb kà6}Àéûd®NèJk°öEGA Í çšÝ6U4F¤r"‘Da±ð“:¤~ÓØ¦˜C{u2ŒršI£;o0äbG|mÈ4Ì\¼ñ£äz°DÅáÂ'ªÜƒÉâK±JÕ°:ăa¬)€#—bFíbn‚áH¦ó0º7MÀÕÒR–EIÁ»6q“Y.‘b!ƒ8#M¨@ŒØ–ž ^îÓ9nóŸ–ÿÄsrDÕ½ÜÛ ²¶‚œW" êjV·75õ)‚b¾¼ÅŽ‚@šAÎj¤q?­áª>²÷ªÈnd˜3m_UÙù%{+âD…¦ØÎd¢>þuϱ²('÷×xd~ËÎßdË £pƒÙÔbÐ ò~ ¹nõ]û2äç8äõ|€Ã*º1dï€23„«Ñä ÿæå1õrÁ»§ÜßÙ¥sTV.Àq€Â¸:Ø·ÓÒ[VÑÑ ÄûÇØËu{AÒõiÂ2¾èàäüM_ßbGA Í#çŒA׉œŸsë„É“÷F.°ƒsÓÚ8 ñr˜®NÉÊÜ¢åÏŠ<Lk&w *J7d†è)¿ayÆé,ʇRK%È&é¾ß;®(x4¬€ p€^D5#œ-mVž<$ú:Å\ºÞÂîý‹Œ¸w¹°\AÞ+RÎC=Ùû”þÏ\¯ô^(Ûc†3µÅŽ‚@šGΫ-¼¦E_gÚï=ž)‚rÞömº»ês‚ x,–HÄÒªÇÚ(Dœ/$ý½Œðq…Íè®CqÓ\jΣ8TÖü)JÖ&fÓq}?o)q›äßÛ·™¥¥åzzzöLw°·¬%f\’»fI*‹”˽2Ð0A&³LK×./¯`1³llä„/)ÓµÆÃ.š ð}ž¶*¶úkº•Ù*c´Ás˜Á+ÝòoÍînûN¾úevTuáWœ °|'ÔãM§ÏÞfþ6õEPÙnëß}5¢ óEGA Í çü«7ä ž3Ü™Zúhïž$£–”êw\=¦#ç-¸’‡°ÔÉݬlp‘ OǰYí,ûPdARľù’BµÜ÷¤óƒq ¨¢£Z^þ<-Ot¬&l˜Ÿ?2(èÜĉ f,ÿ3®÷G¿BÕòÚ0úEEÃNžähë°õõ¬RS{]½¿?yx>›¨N@RÈJ €CB¿êsƒ†3è¿þBÿÏnF~ÑQH“åœÖn°é‘évSâyDÃÎã7ž]cšÃUáÚüÓ£oâªK_¤çýËîê§•ó²0ÍÔt ‡•‹òÅÍ)稊£úªx¤®ï}³]ÿ¬3 vùÇ1é3íQýFUü±o¶ÿ‹]GírTËöìùª}ûš=]Ÿ?zêÔA×ÝB‹ªMùæ±ã_iÆ ÌVZ2¾v¢ðÝ·³)ÓÕ ¤åËh?ãhÔŒ£0;¾FpxbK¦i&§PJ ÉÅå¦öQûÓƒ+™«Z¹¿³3ª|©©Zlv%K7Ûζ1Ê'G@‘ S Ãäëó²½sG=a”êdßGª¢ñ| ŸO­ÞªU”*tCª¶ Y Àª:û‘„í5¾Â¶þΗ†Z)2@–Š´ öp'êØRÌ˵nÚÑ´eZšš¦|ö'Z’¡-‰'#h ºîûÌorfЦ¼Y3Øñ¨±.$«=Ó­TVùé—~ûí,[ä+“s¥á+‡MÚþ¨ŒÕeþ‘‹k{êÂ5ŒÚã¿ j—ÆS*d93b H[Âs®}©kVÕÿ¾5ªå–EÃv6lÇcóM™…Z¬‡S¦¥•bf&ÃáÆä”sþãÅS/8ìK¾ê7¯û/‹ú>;W‘iûŽÜ…Rù×­üL†©£=µ#Ëô“ÃmP»ÕòG½<¤)ƒ¨?w"=ðb²ÈÏ“3§ƒ³µ2ÙgeRσ¥oðž{P‹”®¶v–‹ù+¤ðd±1Kòˆ¸‰GdúZrC¥¾—ÜÁA©ËD´>8Ÿ"ѪñnDG&7ˆ-CßÙ0s¾)¨åì›vô¨üÈT”Tƒ4D¡§-3ëÁ1êmÈ÷ìOÀT›ö5ö=RWÛ¡Oλ%Be—æP¸EWMN{—^ïŽ0SéºZúÁãÆ=uÊõÙ³2}}Ýâ:—sqìXA–á›aðiƬágK|xsnžúß0 ú¼PcÇW´Ï w)Ì[g^+L\N%r†Ê ¨D*_¿ÔäÚ81rÊÕ«5‰WeN½œy`ð`¨èä+—sÈ7 "A23¢‹nD“®e¤µÏ#I­úˆûޫū>lz²?ÖÏ2ÓæfÅ–š=Û2=C‡Íζ¶É²±–¤„My,oFåÙíøûJ·Q‚W*íÕk³ë•MÂ};éC݇™ÀZÿ²Ã•åá^¹€%x›bߨ((çß5uzT«ÇÍZpCûéOÅjIHUü…Pæ±ü‹H]‘t˜ïæ•s‚®VEJ±0‰Òâ¤r†5‹s¦’ºGNrEÌýkŸPÎ}™ä%ÆnÖÛfF‚‘'ÈžæEG!‘OLžÐet/|¿¾¢~Fܱ“n€OðЯÙÓ%&†ÎádÛÚ¶Í;Eõ;ÍÑáÓ¦¼Ì·û”ß!ðç¢"âÏ÷ðÅÚ=lI¶r>¦ yüÓG""(§Ø µgÓ¯¨€¥ë»¦NjuF6Á¤×”¹=·.t§"•¡##„ã;h ª+if9§8våLÛ6a›{Üö ®ï!ØÓÞVAµÜêO­LÀAÕrUx1•p|¹§/Ê1ÊYߥ µËhëqú4ý©rB&ŒüiéðÿŒ’2oú]¾atCŸ¬×[»ÏL:ªâ *_º“Ó÷–c…ºº›Ç³ËÍÕãp2Y=“}žJÌ ÊÍ÷‰Ž6`W²)ÆW{¸&YXÀ¢i^øOÏöåFm8i9¯ù¯‘ËȤ%âlêºV5¦®Þ—‰­ 䌚ðÓþ­^÷’âqV± 9°=7[o1%šµ\êºL¿²òµÜ¸¾^÷’һ͓‡x|‚•U‚*Xë5-ÑÒòÓc߬­ed„ªë¡K–$ZÖwXÚ¿%5Ìî?ÇÔp$ÒlrÞØed²Ó°j¬çjL]½7.›£r^"”î‰Ïd—?8Gät¦0jñÂÇn£næbðoÁÔu´;©KÎYLïæ’ó/À̬§å\*2U—œ«·´«‹:=ª¹Êët³Ö¸3VÅ]ãΰ&4 4›œ7b´†£mv4B°°U¶rmWcêê½q™Ä\&²–)û_ÊC»°ÚÛ :Æ,öwuVýì2Žä%¦…ä\GÛK—é‹ìmæWTF••?hE!ï¬¯× 8;.a—?))½×šÙnnÞËÊj èÞ}GNέÌÌ+­,ä¨i®je³ýˆ”¼ÖuµWs5¾ ëñ¨V·›µF¡Ñuãñ®Š„@šMαŒ Z·Ñ ­ä²Ö¿J5¦®Þ'rV<Ø•wF¢ùÈßÔ¢þ?ï9QÍXk1Ó•ptCµ<%}k+ß8*áè†jyBÒÆÖÏvTÂÑ Õò»wç´~ꨄ£ªåš¬ˆïª´£IÃ72Ò49o4êí‚Scê_ž4"MŒšw5!‚£¤Ð4Û™LÔÇãEv~ÉÞÄŠ8R9EK¡C-(—{z(Iª/kYUk3‚ ÷¼˜~3?¢ƒWÏL*uõ´£´²QþjìiGQWO»Ú«9i‚œ7zõ6ŸÕ˜ú—'-- ÊÔ\0sÊì¶à¿åÏŠ<LÝ€øF9aLW§denaÑ™QoîSTYZ°¢¢íþÞ½réBäIŒü² ©ÃËF$}5f{Ee´º’F t5Þxnîm5¦ŽèßaEƒ@ M“s¸ŒL YÆ›F£ÿ‡ax,–HÄÒ0àhÓÝi*ÓAÈrù¿—öÆN›¬ìPsÄã»–Íhºn4ßÒa³@ “s ÙeÓ¾¡C'Û3Êu:Ï=rÑzGmNÄÙý–\SuXc©“»YÙÔÌ”ó\ɉ`Hfj'S£-Oäå¯ÉÙÉ3É;xÝÌÝgxÔr|Žœœ~ß ‹6¼ÿ›jõHÓ![\ß>ãF°(µì쟱ì®ÝtUŽÉñô-C\r)ñŸG÷¨†D…òåƒ+‡™Gíˆ}WÚ¬o︠æ@>OÎëD€H¡®78½ƒ%Ó4“S¨Ð5}ë8‹÷9Ý­Ú‹‚ fÛæ’^î/`~C œmYƒµ§o¸/Æ1uS;²ª{ÚÉ](•Ç‚ ¤à2¢_…k„þ-Ž^Tei¡‘™…jùËÕ+kæªA V¢Nçi4¯5j}óL²´PܸQÿ¢M5B&7úâJÇæäšÆÁó â†ìùñD0”s”ó¯ ±}—^Q]z…‡¨Zwj#- šnmk¿Êk1K|âÕžûŒšŸ_Ñ¡j—C-‡@ÚÿÙžé‡M—_ö¢5úEÁ±6³^z­o¡šú+ŠÿkÖµ®{n™ä€ i°0 Z;Ç °1»¢æÍùÑd¯CµDõ»Ì§sÎÈè¿PË!6…¼èú’^ã#‡ÿ4Õú3†áŒ'>(|zÈdߘ?ã%ðî¯Ü$íù}ÖîWœW{çmä 0o!Ð:ÿJ[ø€L<›wæBÏ Ún±$[~7]Rrg_5O °X¥§¦dy¯Ì‰“Æ­>nþæO¢Ëé¥c³jÏä ‰!|±ªÛSù£®Ø6J!-Vi ‡fL¶þóÎIï„é^[~¼}´æ+x£²ëڙŪ@ï{¡Š£Šå†f_Ù5ó¯ùÞp(ÊyÛ'dÚ }?-ïq5FžÌ.9Ês.'mößœ< y»å.¦šVlmõ—!öXz¶]4™ÂaÑ…$±~wd0ÙñäÆš ’ Ýۻǰ;6¤åé¸é«%r#"xhÞ@š«¨ÖåQ­òÞLßßb½ÇÒϯž{*ëæKùF};Wr#÷¬ÞÍÁ"•¹Uþÿíóz)iæÙ ëÿU%±h‡Þ¦ß:100ç!PÎÛ4¨–ƒ©‘ Šy"›4…ãHQÎ_±cˆÙj´Œ%/A ˆ8Õà"D%¼x,B­ïõ%+r•¥Œ6—4pFì !΂.ò j9¤‹jÝÕºÿ[!|óG£ýªaÞ³·y×ñÑjÔªÃèóåü+A¥âèS+®ßäšž"Gåï³VÐéäEFKp÷µ¼ß$RÌ™ l¢C')Ç0V_Ò§ŒttšÃYSm²0%†õìGÊ}â€w?kÔh“«T’Ťu¬§èÎv' ŸiàÐ.`ôòkÃâAH‘,¯äÛ–s¸zLýìƒ ×ý˜üî¢ísW0*ÍÇ~EcQ‰•Ò+4@e.˜‹ùE!~þI®§Æ‘4ÅK)H¥ˆx‚‡wÑ‘±êØOhþ(MØiZy#š—‚©"HæÐŽˆô/à¤#5øìK¨âä{’s¸*\Sˆ<™mv „Ž. 5^aPf9•y î}Uw€ÉU h@ƒhДÔRl)¢0ùláľ1<µÙ4 B£È™<[ X5i°¼”Žy¬˜@F8æD˜8Äœ‚¨®Š"×à80h†ï fü•y”§¦ ‡ ÈWÜRZ~®Ø<:ãÅä G½ß›[™ýµÝ„Ò‹y*%&_ˆÍU€ª/øVA,ñ±"ŒÁŠð¥„QG‰SÒãŸèû¤5fõL âBÏD‚Éá˰Jí/ÑròŒåNŒùQ 3­º‰@.Œœ¯aA…Ÿã!È7hC¾˜Âûœ£²°C¯q¥œK“CŸ‘ eç*A߯Ë8~:È©rü0£*51à‹l`d˜ƒ{|\äz>ÀaÝ2ƒ: ã2—(nöQ£@Ì5¤FÒF>‡“÷Ò’éöe †#Yèr@Ⱥ·0 =^ÔÄ»tSÜ»›·Ê9ä-i?Èss¯“¤‰×…±Dïq| w¾®» ?*PaаÉ€Îi&Ãk’î'o§ÿpî’Ïhf`”Ú¢€f(ú2kÀ}!ãÜŒãú‰Òä÷)saÙ…@ ß¶œg§aÓ›aHvxA]·êî¾2<¤5*ó¶&!ßÚŠ‰Žºþvà—ÓC]÷no3ÿ Dá­IJйËw=w›8P+7Ïxáñ ½¤7þ˜>}cŒÛŒU[Öù>\>oÍß/<–Ü»¦?í鎹DÈõè\Õƒ üí9‡e[fÌÞë±ìð?ËÛÇ­›úóú˜3ÿ§Ræùˆm3œ)ª•a÷Í[rðUÇ£a´£4öš!PÎ?……­Ýš^ÃeêºÕ-«7ôÜ¿Zÿ>btìO‡-N…ÖD–ävŒx0_-7îç»ÕÆ9ù³“–N>øü) iôöh÷·{Á—­x‘žàÐÁ§H]ýÙcøWkß‹RŽVR²kz/¿L±|ikùOíFc­Î.›œÒ븹®ÐdE|ÆÅàóöoèl Öµ–«Œê­é_HÕê÷V É~âš_ÎÛ5}çÁ€ÜÕ>÷Œ~¹yÀ¢©.ÿˆ§o˜æÈŽfŸÚõӢƲ؅ŽÛ^Œ\êBäÞúÉõ,̆.vàÀ®Ÿô7$ÃS]öŠ^¿Êå‚8*`š36ùÀÜð.gM]6>÷–—å3®åÒ Dä¿Àï˜e6µ†Û×}'D½£3ûÔ÷#V,¦=|DÌÉ•Z˜ ºtQ’ß¹º„îIr Uóç‹à’òHAÏÍïM £„ߢoÝFHM“ÙÙòæÿ. èõ‰k¹³0KÇ›ê>Lÿ'ĈDäûøÌ,¹••¸›B®G“±²ÉÌ7Jc¼vMpMPœ<á¯'QóšGË!_uzT«Ï7ZÝ5ÆV«ât‰´žŸ•bžHÊ…J@btYvðxN;*Â:ÞÉÚ&ø|¶LT|ìøÕ›i#¦¬¥MµðŸsÍ(ç&·ï•ÈÚ´­nº#ôhWDùOÁÚvo'¸§³ëçŽ=^÷*Eå;®¿H“ä®óY¤òJÄ{ÖØ®£áhmúBå‚ð"üþº†D ËÍDóZq¦\ÛõuAø Ÿ<ñ*‡÷Tâ½ê­vj{é˜q:€Ÿrp©#Z‡ÄƒáÞ_7ó‰˜W–¯<²×‹˜{qÍ~ôØC[®y,o·å>¸î?—åÚx@-ô\º½&8ìÖ&~Ö5Ç åò™ÐRRm,–‰¬­¤]¡tÎÞÏœñµ/+ö¦ŸüÉ‹«³ä°…ÙqÚ/“ÃãŠÉb|QÁ²ÑÖèžÆí£?Ú“åè­ï@Å©ÄÞbÂäòIø=º¿±é­·bÊ7"}hEèí/Ëâw»Çyóg›ðnºÜój B³m^—èÿNl£¦ÿÂ¥ÄîwÉ»ýí”75.;¯úÆ!“HÓâSS2SJ“6]6Â'çŽ-ÐÉ·`[Xj[Oês³gJ£ëc Tˇþûî²ÊÊØºº÷{tO³³ƒEú{¦jõúF{Ý8µŸ¸óÚĶóÞó‚îÌ{/Ž1èjé öºéÊÐMµaÃu¡yëjÃït¬½*í¾ïõýÌk†@9‡|¦]ŽjyÁ´ŸÊô*¤“£†­(â¶xå˳§”¤¶=nK´Å i7n3ËsE,’ë¬ýþú0VúÄ]ïÅÊÝZ÷HLÉtÚý¤;¨‡¡'@CoÜz``™#•Ó®vè¾Vð%BQ‘ÀÇç­ZÇHP›¾¦ÇÞÈÛJ`Á+€ao“ôbŸø÷L/-¸Úå§Ñz%54@µ /Žû›1í=t‘ôÆ FdT¥¿_[¾rrZÞ®ƒ+_°Ìežvøç—ÙGÞ»£CeyÅÝ;wî±ïF›EÛ¶³wÀvÞ±g»Æoδß=\I&çíÙi:kŽÖÅKb[[rj*ªåy»w¼;WÍ{å{ßT2<ìÃË@ýÓ“ÓÞ¥ÇfËOœ¡PØG±þ÷3õì9™ƒ1)WPÀ>|°f®¢04´@Ë:ÍÕÞvgÞ˳n¸þg¿L{&?:‚êWã»PÎ!mÆ ëˆf¤qrÎ>xþÓÅ´s¶Šç{&޽¾Kâ–˜9Ÿ‚”Ÿ/°³Eå…ìDÑ•í·Ñ0CÎmSs@«'ª=ECOÞ@çïñ®ÿûu^éœiGp†ÿË´&޼ H‘þ9}[€s”VL'©—;ÍwöÚÅÒšª^wcΛïèïžTìàB{ü˜˜•-ðñFíòæ·>2g§â{·É÷à32ø¾¾bßæ¿ù^nj‹ÈÒ:Í[=Na0®º€ñQªXee°TC ¯\Îé=¶¨íêô™4Ña[p¹ ˜9ŸBljªõè1zxte°«–9¦¥¦ñ:z¶¥Ë¬ž¨öΪpôðÛ2c#îÈqóø¹œ|ïüìyz/þHkmÿ[:š‘«K¤+jûÉk¾£óžJÀ€Ï‹ê÷›/åmT¿E}¨§ùŨ‡†ÑiÌKšÅ Ási­œ—ééÁR @¾r9ûF¬z¾wg®ÏR7 ˜3£ÌÌÌþëYÉ3!BÕÔçÖ~WÑNÙ¿§Ã,ÂìK—t>öxZvâÚÂŽW›ÙNÈÍÛÛ¥s‹–>ß‘-¹ÛCà¿Ö~}ÿ[a2ƒrÕÚ•ô“«t}À7ñ𺧽;Ž=¦?kÌñcïîp¿µN äKå&ý=nôYí÷õà—ó‘W].%MìÓiU™“=/¦¨çÆ?ÃÂ§Ž‹Ñ˜$~f“›ÍÏï7hþT<©-¯ERh {°ôßýÑ=Nz_²e¨¦z“÷îtöþ®fšÝéñ?úݽ@~‰ID÷né¶¶°ŒC ¯_ÎÞ³Í? Ûoò×ý=ƒ á’uf}Ž·j…D‰°X Ï+&_pLJcfé唕úyqÚYU…ñ8JÔšOÝ«ô˳‚Z ÌdÿWb»P{u̹û¸¿SÄ÷¸³™?LªùõãqéߢW}ûãð´©°tC>å ©zºÌ·ÛfÖÙò&$¯Ã9R•xlùŠ L¢6àptoÞ>݃ŽÏòår®¬|´ràˆö{"ö3}Û% WùYåÌÓIÏÐVsfoçÇ'÷÷ëÒ_Ñ©wµ¿0eÒó—Eºfvm`iTËû_é|màTÑ1¹ÆöWÊNN+š¾˜¬™»Í}ë ÓYsd¡õK‡@¾ËÚ]¯w2A̶Í%½Ü5^41…:œ³aÎ\–=<Ü/ŒYæ3r…güÎŽpÜäËåœÿpݺ§\ðt¼Ù‰ñª¿;(Šg€…«Â}Tµ÷NðQÈ%1 ©q»+BB´;Týƒ2+%eQŽÆ‚>::mà2QGµUôÛ^i=¢lçŽ ÏpÜÕ_¿ûr‡È8²Ø´µqéˆú©Ï;™ðùŽqCöüx"¸©r^‡s6‚ך ^µo“,-+á“€4EÎá¼ÆÏ‡'y—ðŸjÚ™MP$Ç'ÿžJš××Ú¯Í4«QEuÎzÏiᔃق׻¬è¥ûvÈw—´IDñͺÖuÏ-“¼ŸuÜÛµ_Þ_ì¥çlÿÙžé‡M—_ö¢Á<‡4EÎÑ2V¾rؤíÊX]湸¶§.ü|þrÞþ—'¦5^ÆÝ ‚zŸo1 ͹¸ç ó³¨KúZ÷ ¶¡o^„,3ÿXëõ¶§ZÝŸ›wªWwø!φwå¦x¤Ïžßgå¾â¼Ú;o+kë/?|{×wˆ¥-6ŸÕ’:ªåF«ÈEQ@í@YRMŸy1ZuIÔ¼ü»õýä—“ZJ§×hyUyU°Ç…Þ•?ò Úî99Í•:j «ë‰£ºË[iÙc5¦ŽèßUEƒ@ MµÎi««gFèpf˜=SF÷Ö_ýþ^«¾ß ²  ¦!ªèlKHHÝX^@ÌrÓto#—gÎ)Ïa±Ð@ w·ý™qic4IŒd–aee9,Ýòýȹ`åëAR›ë·P1D°ò»Vô¸x¾ÇqÆ«a<Žg¢S±3 «öeÔjç¤jtÎNÛ¦db O»qzÞÀ;å)ÀmvÉÓn¡ ½wæ°A ä›–óšÿà22Ÿ =\h{ž¶Í?ó§ëf§»=êdíÕ.ªfN XÒÚ=(k‡ *‘j÷àY\žgBB»*¶“%ÕW Ÿ|WrÞØed¾O-7ZE.\%>]TØ¿¿^vibWio`ØV.OL 9 ÐàÔµƒFbÚ]6[›Ï4H†ÇÃg|õyTSrÏïÜv6•h¤GÂYýoã¯.ï-’¤-œ»|×s·‰µróŒßÐKzãéÓ7ƸÍXµeïÃåóÖüýÂcÉÁ½kúÓžî˜ûG„\NÀU=¸ÀßžsX¶eÆìͱËÿ³¼}ܺ©?¯éðë 7é“£ž»MjID”2AYžØyÎÎe ë­ÒÍäð òMÈy£—‘ù<—£Zn@Ç€YO|ÎÓæ G›¸6€0¥N®ÃEžÿ+G†neeš™Yª¹9Ôr䳩ۣš4}÷ð®:sáx;ͺ&³ì'®ùå̱]Ów È]í3|Ëè—›,šêòxú†iŽ à¸aFð©]?-h,‹]8á¸íÅÈ¥.Dî­Ÿ\ÏòÁlèÒiìúiAC20\0Õe¯øçu+‚ЧçvMßñw6«Ü¯u™ß-õ¤=6Vs9|ƒ|rÞˆed¾[ÜÒßZê¢4+ Ïù,u]̳̎smm”EÅ–•.üÀkè%iuzT½:¸;îsèí¥J)[ÏlýÁ²Þq3D=[­ŠÓ%õ­Ø¤óD"P.T£Ë²ƒÇsTKÎ è1–e>>Rj5ȸ¾d›Ïáä›sHãH¬Jt 9ªñÞud^”k5óŠÛ”Û:UvjÍIðÈw„´81·¨dèÞ[%î;†üø¿ÓÞá“LêY„È™7/ä˜tµ"£€ºNEë¼éÒ‚MÛ§ ]/BèN‹þ¨YÞƒs”ÖÇ+þ3ÁG‘ô^þbS÷Z _êð òÍÊy£—‘ùÎI$µÓtSã¼qd~Õ+ãQÖG_ª¤;f€ipºÇÎïkÅÄZ̘e}èrŠp’ÉÇ.R8÷G³´^·å!¿Ø¢*,Æ“ñ ‰h;[!CpDU@^‘é¹ìÄÿh9ûöünÃ;%ïëŒÆkùŸÍ®þæÍ íg±«ö„5‘šâòÌWŽ-üuЦO—;~l ±Ã7È7+çÕËÈLÛ6a›{œj™C°§½.²DYCô†ª÷PE¿ç•:æ[ühXæÜ¤[šcãkê9"3H~8äaœ-O!bÙ‡õx`HBàcƒ|mÄÅÅ5¸Ï¥K—FÝâ—BsÓKpò {Ô=Qöó ƒöuwz¿‘äHfzy÷âùÃüé´'ÅÌP“]ðdAßí#cÃ&™á鯆TL:Ò`åÄ’™6ûÿo¤ÙÁˆ)¨CÎ[Àáä+—s ÙeÓ¾¡C'Û3Êu:Ï=rÑk¯KH%yU©½&N³È’+L½Kü‘ו…TE8ùͯþºî‘ñOeËg&׸[”8§k<8е÷•Í´ló׿Ɋ|²H>ª­4~~mÊ•'Y“»åÁÏ)¯ 2™¬knÔÚõ»nj:=¶l›5uü9ªˆMý5hýÉ%)Aüó¡³5’ã¬ÃÓg/3Î@ðñS.U)±`0Üûëf>óÊòGözs/®Ù{hË5åíã¶@ׯ–>©½‚B"à°‹D]vïî\¿×ÔfrøùFäàôûnx\´áƒ†)†3è-ÊTŒ+Úy#JWJ¹µÝaÕNÎåµ< ¿ÄgÑõ§[áP-¯ùv>æ?¿ÃcO›ëš•³ßüL4 îoVÛ‘àìR“Jƒ‹uB ¬\õxTÃ1ýæŸò«÷0’ýÄ×&îüЬfxÏ º3ï½8Æ «¥ƒ>Øoè¦+C7Õ† ×…æ­« ¯ÙÿWÞLß ßŠœ×‰‘B]‹†¦1ÊkB2B *µ´­nøj”èÖŒƒCÙ–ÑÚå,RרDfò"VÇØ»Ž€@¾v¸¡ý´†×å\Ïÿ,N4‡4NÎ!ïA(7Å“:tRu­]óŽí´z#‡ßñí\”ljv@…“Wö±–Ä…NN1¸0Ê–{Ý ¯Æ ëˆfÊy3Ê9G—ê’ølFXD?¶ÂvչР "5™¿²€Kàˆ´>Òr©éÓK?½Ô¼8ªW< Š9|/`a4_‡ ¡qGÅ%j»–³–T÷ÃéæˆØêñÓâ4ƒGõy¡ Ÿ,@ëò1˜bË{Z´Þ!¹‚~î E×W¬>·jɦW{Fþu& [ïù Ó£¿ŽŒù}#‹) xÂÄê½ OOmtry QA¦XúRi»9›Æ¨zÚßNTt¿N­6]-OXîÔcÞ¼öïGÛü=o|P¯mÛ¶ÁL€@ZJγӰi‰Íà55oÿ†ÎÖ`¶·ÜsQïCÿBêô¨F0é5enÏ­ Ý©HeèÈáøš8•àñò_Â:ßô«^–±ÓßIÏäáâ\ÿ·w`M$mßMï! z¯‚€bP± âÙë`?ûéÙ>ËÙOÏ®g¯g½³÷ŽAņŠ‚R¤wHée¿ A RD‚2¿g˜L63³³å?ïì̼ß0`ªö X÷Õe?fÇN1íýèÃgÑ08+@àö¨æÁ!TkBi5{'ªåèÝÏz,Ñkª§6cQæíì C.½Ì-üq.¤ØÉË”ê S묣ÁàñÛ#ÇØyæ-+œçÕ^wZ7ôð4PL‚쓲ÚÄ>œàäÎðm)~zêCç_;ÔnѼõøÿ6rTã!réÛ@ÔR×Ua8¹ekÀE¦‰ÉçøÖju.¿÷ÏNµí2—eF}`uéåfÈàºõîÊN‹Î’ƒ:èÔ:¨{&RÓÊîPDP¨´ÔT]¦ÀÐÐ8=]],TB„hR(ŸkÎðõTãQ­ô»’èk‚~SlkÝcNí°jwÀoãû?1¡ 2å=vï𦂠9×5%ÌÒù08UYw‰¥…® îï?ôða4@R@¼ZÎÃý»s|=ÕyT+mÂwZs´Sž«Æ+O‚J4* ³½ƒ~)kpK!QéÛ¯„à ]&ÁÉñTpp¦¹E'[Ÿœèè΀u^y^í_ü¹Òöè1zWlo—8<8¿][–UttK£ü}´VX%ã«ÆªpûÕ=ðä-|¸µžÂø;¯vÝ^oú_æ.Z7ÏjoZÔÏ7Åe@›ü«á¹JH™z9ßs  T% q¬óZóá=ƾ…RWeÕaî ™•i~z†,ë½TeU¾úP˜J¤¡m! ¾#Kµ1©¤§ )1‰WÂ6µøOB}ŽWNֹÜ:’ú¢êS£ÏUª8ID8ÉǹpäßsµëözcëµË/Ó™ŽˆÍ‰ÔäfXíºB»GµúùFƒÙ=wly8õ·‰wÉÂ"· ;X Ÿ Ðtä½Ã5mö‹x+{U#ßí:ÌrÔ4Gd)™QÖ‡=I•èqXzÚpÌÕ]Ø–-Œ}žeŒº®d°8óÚRÈ ,äÞ\ÃÎhÀÅyA~ADNnhùW&J>†OÄ Ñ2Ty.a`ÄŽ,7á U滬vÝ^olV{}¶p°SÈ{’_ÞÈB®1Íù¾rZcŠºÎos> «ñ¨VOßhX£Þží Ðå½·Ñ ½É»÷“7~)u˜;ŽðÝ$‚îhØœd2¦­%Ù¹’=L¤Mèä8áÛäŽJ8º¡ZûvMÕ§[Ë­ó©q¨ÖÔqlˆnAQÁð.£bc¾×j×íõVXôÝP-—¸¡ñsG%ÝP-§ë‡5«jG³Odà›Èùç«Çè¶ N‡¹ãˆïÑ¿6DÛ$ibKrËFν¢Q^ÎþJ2Ãb¼8–Žšª_ $Îe ,á\>%xE/¦Âà;¯vÝ^o:ìiGÑUO»Î«|…œš¨…éʧ«}¾*œn›Ï:Ì5Ð!ˆmK´}+y« ]‰øNìÛ† *ç“¢¿‰+ò:iXØÚÀ-FíHrÔII¤|¿-ï1E¨–kÂÝÄÝÎQϺËÜÔíÕTE6ÌXxKÈ"‰!·);–÷5«Å*¯ü˽¸±#X ¤äõÙËœ#éç»#Ú" Þ +çò¼»ƒ‘z¼ÁÈ™Ã?œ/‡ çI S´¸Ä>Ù;=à 7¡µë3³[CXCuR¢C>ªß¨Šh—æ÷Ô £1V +¶’AŠè(éNPOÊ<ªqÛö)R¹jôÎ/t%ÂfuÌãÊó§÷âͺå¿až)º<4L4ª5MJ[$Ðp{®f-W¿;ŸWè9°ô§wÝ7úÄ bUˆÎ†þ¢úýÈçÃï÷m²Íø$»Md ¸ï}R¨#ç ¨'Z=ªAJiƳ8’'ßÖÆ7¥Õì¨l£¿æ?=–è5ÕW 4°œã ìô ã³ÕƒÛeÙo ˜¶úxP3eH_cP-7÷űˆ8nGÌ¥A|=‘Á{é{•ç~‡p«0Ÿ¶I¯ ôRÕÕô•úí¥í/P΃ó4$dÏE†Äþ6|̸iÿÛü´Æaë¤ÁÅOO}è<¾³æHà«)í6";õëÄûuó­ MÑ›ó}ö;žöØMÁ”÷a ±ãLLKìlÒæ‰ð±N^Ÿ—¿/Gmôkv…ÝŽ»»n•×2û}Àû.P—=ô=O‰OÚIÛƒ³V'ô#/t»öØœ§”é;¾ì?ô3L»|Ëé¼èxgµ™Î¿ñóÕX»º<ÏÎdLw§Ô 4€œS——.cA':¢íEsÞƒ»¼ò^Ë@E©A ôîæz….¯iGƒ8Á_b*S£åPi¯ûퟣ©‰,)®ãæŽq}â‡z ÛÃØÍUY*,Áɪ=nI¬ÇS–f(81—¸òaáÈT"¨@%T¼ˆ-DwYºÕ¼^«Qçò{Ït"Ö 4„œ —~\@f]µ;©W…[ êê£~¯ëP”%Ï2Æ7vöÝ+>PEW8ä¿ ÌÖY-η04ŽþË=>A0‘£â€“U Îb.ò0 JˆŒWuc+; M¿éÝ!~êï•"%« R¥`Í…f‰vjpÌö¹;b‹ùù¦÷Ê›ÛêâÒ¨$úš ß[|Í‘@ƒÈ¹æXF¦.:ë…Ü#B1Po`)Ï‚1=Â*Üjôú`drÀ}ÿDÁ¯z*=p¾>¡„#Ä·¾|4Îb`­”f=—Ä_tÈ\}7X†ÿökTV³lïi÷¨æ6mûžz¦Hë´æh§ZE 'ç—‘¹ê=»Ëäù/úÒ@ÝTo _â||·éȹڶÀ É~ÉÙnÙ/ g‘tÛ?Jd¨4ÄËåFO.ââUööÊîþ¹v¯þ$z-¸VºŒ¿éÉ5ý+-‚§L~|Ãç¢jÏÒ¾}ê¸8žª$äÖÁÑáÉyTë9CÇ®´£a¿¢u£ê_ÖaXQC,D 2óœärbãzŒ´Ð"ôßÀÞýÖ¥´fÀ÷Fiבf™Y=Í™æ=f3ÂÎljAÍ|É@à´O“d§ÊR›ZÙÄ,qä˜nT·©ç¦Æ*οu«ÍµípZ:nÛ²[kLTíÖ#Y]ß÷ÞŒCÜ Ú>\~S¶e£4äº|Ébâиþ5ïÝ´Ó…cFyZ‰euv¢)‹Mbzvî©G2wèLL:ŸÛø— ç0G„ÈRÞÿäs5’+c¥Eè3løàµ&ø^åPwÝÚí?šèœ&9IáÀLºzÐ*B_¶,ª}|lœZŒGý¬27džܩ_šˆ4oýÑÓþAzÒw%H¯Ì˳ èêV#–îL'Ù­6 ¥ó1{Š¡¾†J— ÝéïôÞ÷úkáï ×ö~g:Êô´€ï‘ÒwçåËÈp`™Z2ÖÖ-ôýõã#}Óh"SÓ|ÏÖ*bÓš{Â*(TrŒ†Ñúd+|C}›wšoíñ…Ÿ¸8/hÌã¥_´¾ºÍÅe ™‹†¬ÏšfyÐnY¶AêúüZž%¶PG]ÃÑ3¯,Xý,ïõ³ã¬Se_^XpiÏ öØZŸt•±XUôø"’M% Âw¹*ûØëøTL‹Qwlç”&’t$ü²‚Žej²4šÑahW eÏ-Ûá È÷ý¦ûå½öMoFÞé@3–sˆÞqíîÆ82 ØÞ³ž÷ù|X»•½ ݾþïÞOg¯å×/_=ù÷ cè‰ÅìY-g-™‰]öjLoã¥Ê'}Ö.ŒGHÚ‡_GÜe½ˆZ֘NjÇȧ¤¿Tˆ >—¹?òÀ¤)CÌ­âŽï½·¥À‡Ô8%‹ÌWÒß<š#-ýÐ õøZIo>Š«) _Ÿ ‘/–”eJEª8*(Ÿd¤”’@?½‹ZR»Ž‚@IJ|¹W÷WCž­W\»>IîPº}ä­äνkèÿVPù Kï^»YFêðƒl¨nû×”Z÷Ú·»u{§×¤äÍ‘ÅN"° Ïà§u›'y2`´˜}mé´CY ª¸Ø$xûŠžFµhTjwΦȺ²|ήª¦ SÞò·­‹ûƒI‘€—sË Xý(kuåïÔ«Ç´A¸sWiaNìy>zÁ£õ¡ƒŽI†#ÿp÷ž´w¯&RH9rØ¡§N«»±qEFùù,`_ßédl8ëñ#΃VÅ-ÝyîT%U«ŸVê§•†Ò”æ$í‡ÍµýêjÃq¢ %1ŒõÂá2• ‹³ü²)¡kÜ˧”pÐcJ+vl ñ-SSŸ?ßÛ ZpîÜ•6m^YX€ »Y#Š=qI>òȹAf8ÑóE†þÑæõÖ¶¤Â›SgÆô=?Š›sä§îSo<8Ó‡Uã²íZ³ -ž|ËûþÃi68yâV?¿þq‡|À„`@ƒË¹V„ˆ èºV°É..h`“ßì€+³3³ŒLŒÑlbR“*g6×hçäI=/Þƒï-,ÞYZÊq¸þ(3³ßM¼2–öÒòÈÚ¹ØÙBl‰A*ê¤x6­ú„Ñoë3<†íHÔ9šî ¥"E,>C&þ’¢cdAŒ‚oQ3n))SoÜ(ëyÊË›výúö^½€¢7k¨íWœ-ów€grH²L‰J­ñçŸënâbQ“Ç/óǹXQŸNÔš’R;gƒ ~å;ˆ`ÞήðÚ¥—Cƒ âÎ…;š‚…^&ç€êPÚXBn£¶é¼A›¯lX;q#.6VìçÓÔŠªÀá³=ú†IîWŒ4eÁ (27ài^ Œù0‚óø:þºC‰ƒ“ÀÉDl CßÄq£LúP*½[%R"¹L¥M«_‚x¹Ü6)‰SXTÀf'ØX+ðZ^Ö¦Š$ Ö2£ä²'j¶µ^®Q®[D`dd•=QKÈ9¼Ø>é€ùâKíQÙæç)tu;–Î% ³Šú¦‹·ÿ߆Ǯ­gA{ࡘñ6`tȹΑuíB[´„tâ¤dø°ßzþÞùI§…G8é².?>ñ¯¢…ćó•z\Ëßûy·,•*ÉD¤x%LÇIRÅ–ºsxŒZâma„»Sä'/êÚ\D¹kpW„Yˆ-,D–" º‚Þ€9ˆÑíS“¨Ô:'‘úÖ/5£ììá§Ï±ôr ìBBN ”mdTõêİÕï|UtTËÜò;ÛS}Œ,/I_½Côʲ=yƒ“åz‡þyÐa¶*æIxð©è?Üz µ!"Ê‚ÙDOJ½*Ʀ(t{;3!Å@L^ž/À (J*SÎ`È$™¬$‘”è_õFR‘*µÝWáãRÿ`!¢²ì@0T,¥Ô-9,W@e¯"°Ý4a¹sêþ±q-#¬^âxæYò CUôb¹B.‡ä2H&ÆŠ/8d‰]%|Òn1A,$ !% £¤½ñ–i…ˆ=YÎ6Û詘l%³½ýÔ„ÿ޼ÕéŽç[ÿHçó=îkÞ£¿²°ØÞ«W`d¤qQj—£Zþ¼8oæÐº*•*÷«†5êýçÙÞuJ©çl8ãÀ•§AE€œ7e0Ð4÷éþù]"ryV˜ÛŒ(ãŸÞýšó×X ½gèg•7YvVÄØ FL r* ÃMì8L`Y1ýn‘Õ5®ü÷û6#^~©ï@…Qå°rÒõÓsØ9|*Ýx4ºeR3ø4¾„ A÷AåVD-B !Ò¬ ‹C ¬*[ í(­÷]…W,ÛàB9T×,}™)•Y@"äq ãñ<&˜%µLyq§óH “ʆîþ÷hDûöñD‡Šç…ùV‚j¹FÅÏsrÜ*{®Qt0ö 9T‚ý‹þÌá³éÿ/¤ï=,\Ú1ŒÈ£ÜùŒºz¼W/:Qº'þ…!F¿Ëi;• =¸Éˆ8×(… É ìoŸZâO5Ì®•9aô º•}–n¥P)aÁ³Š;c±&ê¸/'¨écÐ!©Ó#uO»]¥b›:x< -J-wîÍä'Z[WIGWTn‘«½¤Ùþq ;ü@v% !€©˜~îýi9Ôýñ{Kµ\öøî­!ϨkÆ{÷c`ªHŸHI¼!Æs 2v; a®Ñ *y¸Plf‘ˆþEÃhÌW¦ieµ´J èW-GU\Ñ1ý‹†Ñ˜J"ÇŸ2¸sXøè£Çzݼ9úèQ¿ð'‡ þ|®šåhOYñFùnàrÍË:«ÇÔ Æ$½Eýeéi`…Ç­»_À‡ &lHœ þRF‡‘záŸúA­èJgbÉ ¢ª©5¦ $´áP‰Æ"GÿÏ5*P¿r¼‡Ó‡L^ad»g÷åŸ2YšqpjSÞ6 «G¶ÛV2г¹Ü¿N´MNÖ/(L²¶Fír­óÎÈ9X®n`Ípv-í&O™õxƹn—έªømÄ]ø, Ò“5åC°°H¨Ôž3Ìn±·8œ½frZ-‘û¼­8ŽUô*Z®Õïx‡xpåèloXèSõü=@¦’Ðt¹ sëPWm‰8n³bë€Ø~í ¼ÜØî N€ï­Õ´ûF«€4þð¼Y‹ÿ~騗šf:ïèên²K&MZóÜ}ʲõ«|,ž½bg”ç‚};Vô¦>Û2kI˜ÂÇ–„ŸlN9 _?eƺHÏEv-n½jâ„?Ÿ·ž:ÎàÉż6“WošâB† ñëݳì{ÕöŸ[KÜ>ó[ ÕX<°ÎõãæÌøüÖ*Ö>æš6ë&<vúÝ™ 3øøèQí¿³—ή5Ú3ôçârßhAVXDû¯ˆŽÁ+&»ê¹NÚºïÀVïÛ3ÖÇ(LûÌŸ¨ŽYý«3«Å„ÕSÐðøù¦ò—«ƒŽÚo>yôøáÍA,©‚ðþªþvnoc’qÀ\õ¯&ü¹lñäž#þꂉÛ;k[,ì:qѨžãƒ[µå^cñ@ÎõC¿#úW,Š”ôõrym¾H¿#ð€|¨=ªíd¦î°,õ¨V¬ö¨¦öæÁ!ÔjF)ÁÐ^¯ðmNuÃcT’b±˜W RA0³ã¢}Gzj_/Ç2Ã¥çËÅ1GŽ^=tè…P–ŸA0×ÓÞZ—â~x@g{Câ9Ä$Ê$L½ N›–1å·õSï;oÍ5|/Tò¨Vû_)„I7Ϧ˜u²!AVïÁTïµæ®Ý?„sÆžNS¨½®šS`%RÍûnË„âåàÎúÓ^CJœqÍ·¨=¸Úßáš6{ÈE¼•½Ê¾…²‘Ÿ/ºÊriq—ej)±°YˉÓK¤Ûh†˜<í1f¼Š—8í×uc‚Ю×GȹLÕ¦ykeÙ92³n7®wµ¶R;ŸðõÙ–v7ùõÆriîÙzEvvxFfHã y€£c4л×îĤññYÈ5¦yQv5ƒLOi7šî›Ú<ªi÷Vñ·4þð’]êoço1\û[;fékl¢óô“f,ñ³àÆî[èLDÏ+Ãüû«¦FHŠóÒ•ýîhOH=¿búÛýë¯y.n½~/Þ·ê´ëb+γ_õÐÝ‚œvÐaµ§¥ßÓUÖ¨®ÃOLºÙÈ9?¢d­;k®¤^îò矢34Ÿ˜Ç!TÔœl.V2  ̾ר@Ë9 Þô0v…³¬Od:n|´wq¯VÒx¹Ü61‰]XXÀa'ÚÚ(p5 ^…á<)ù†„¬‚IX™/YÔ‡ÀT$§œÓUŒQ´& {âUà¤~¨>¤dü)BèLvp;u /aùXudHÎK¹sÿÍó\¥‹9Ì)µ,#Óxp0ªI8C×ìñWé!!Svíjÿô)³˜ïõäéÔ»²kò,®Â=W žTþÿ˜üa8LDÊRÇâïˆð†dþ|&oY™ "§Šþ.—\ÈÄôóõ¸1ØãO+ù¡GŸ"}Êž¸8zo|™ñt{`7A°ÔËtÊ ~ïðnÜ 3”‚¨ˆpŽzúôÎÉ“¾d£Ãò^Í%Ä/×—âEê‰.*Q¿ €Õp%Q»T4uðŒ™Þ MÐÍÚÀ2®0VéE ž]ìz·E–žä§<¾ªô¢ çŸ@âþ]Âþ8é§ÓàE—ì?-µ$ãEŽúç†NÑNÈUta‹O‚­âBØ(ΚˆZç„ÓæQ­ÎnÖ>­ýRy±eÆ‘®vÓcÚ¯|:Ê ÿéu’óÏW…û1 5,ÅÉÉwú³èS<‘}dTtJT›µ—ʾ‹ûó§ÊCä¾Ù\£“'Ù&&s ’¬mm­8üñADñÁN-T>r_FK–éiYM‚‚ÿÌ7pùLĸ§¢¥B0 µÇµ†Qs–|Z©_a"œh0¶À¢ÚäFqú?ˆ¶ß¸±‡a‹û}ûD˜’ÔÖ/"1|õ§o¸ê"[þ;/(N#Wœ§ Ü”“˜„‘ú’…í°¬"))_²\>”VìXÏ™•Ú:ÆQYƒéax‚“,ƒ7ª—Q„ÉÙÝÀ*:J³­*ùÓ@0ˆÌÝÄÝ"+"CYœãõ¶o[1Â/JKä×_í8j —n³=ÿ·@^®ÜêHô—V!PÚFκ¾¸ÿœäàJÕ´FÖ@uk¿`MƒÃ3½NOï?â¯îQ+[ë›>P'9ÿQQÉ’“#vçÑ{éQ{\ñqô™ôÚ¿w·ÝZ^öŒÀáã*ÆÈÈ2bkÒòˆåO1O÷ûík)wë(ìHQé£LˆV!n˜Ì~0œƒ°/ªfXÁ–©ybt)á~© "«C2ñQ¿ ïú,ÊÙ×iäÙ°“{dâUÌè³??¥Þ5;šKQV²ˆKgÕSІbàl9í¤˜lN©;K`ùPj½U\‹¼Uè'EØ4yš#‚{CuN ›3¿“ùJ³lʵ¦<Ãâ­•Ål“•B¢›ÔB,ÙY8Í€ZŸ2nlaÇ yµK“îÿÍèËÆWŠT·)Þlàx³B#L»JÐ9Û¿î÷ŠÔ~ý/wþéL×ùUÙ`Éú¼õùO åDløô@ΛÃÝZ>Q@7ÞmèTN“´K²ÝsZ¸ÜÖûP÷C»\vµ·m'jGR5ò;NIWLÙº¶¦ˆ ‘+™ÿ!FÛae_jù,ÎõV›î¾$³w÷¼ˆ·TÔþUºGä¤ôšüÂè³Ñ>°¼¹lV½9Nª/%ˆþ *vŒã’ñÆyÊôî*% “x0\g9‡)ÏñdD¾MÒt¤Š;K>8 kD/”dR!ìBý)ˆ55D8ºÌž§ Óß¼u=÷õÆõ ¢è'ªV£ƒgª­ðOÕÔF`Y$@ƒ6jÚ#ëÛ²â?Þ¾|ûS)J-ñÛ¹³­aÓ9o>ÀNŸlñÏ!ö¹°wSy°pJÞ t78èzЖþ{·Ùno%u÷zÑTtE¢!9-÷‹k¬6&¡ àbʽí=$ÕnäRbò쉞¹OA=½ßB@¼ùoÁ‰ "Ã&tàÀû䪩 p–ŒÄÇ–N GÔ#N—pÑÃIýIÂõ7Ó+wŒÃäX)²ÛÿѸ&A¾Mþýé÷Üþm·íϵ7}_¥ÐŸÎŸö; CöyºH\ñÈ·|ó©¶Ë9çeWl‘]CÈ/…¬¬ÙNFdæÏ.t|×åbÇ[Íük µ@Ï$Õͤ„—¸µÎ b* OrŽÀ™2ú ™*€&t¬<Ð+ˆâ'%ÄÂúͪ×Þ1ÞÀFP(P-¿âéùØA=$¢¤×n§—Kœýyì°ŠHTAªLifz›¤+&Æ¥Å>zãåSšuŽËx µJƒZf”¥#ªqù¨FÎþ7ñ¬Óѳ»Lžðâ ï´REü›kwo®âócí¹Ø©Ë|;‡ßQáedÙóq¬N¶ëê¶³3Í!Ó O{óŠþ8„â(uj)ni%³‚µ­Ò^î±MOv ¯PÈqu2é1ˆþDÑ[äP¹S½¡@ŶpMbˆHlû†³iÿëÔ•ˤÿÆRì“•Üš©ó€jQô©P˜T)í¤BÕ‡VÒâ³£Q!Ø$9#cÕo>™öŽñ ßJµLÉà•7ß [f”\&áÙÖz¹F¹nh¸Ezz®ÑrBÒ £blˆâ.ʨû³¢TBª¾XߺÐÚ&Ó¶EB‡‰WÆ…»áXcðý•o=÷ͯ˜EÊ„q_sÁdg>Š{}2„vmîеçbǽÁch6r.Ž»Æu±§9“ÀÌèw>NìÛæGY™(.öêÑý4ᬌ—§ òˉïKщ†–ØW»ÅÿòÐæ€1ï…Y˼" ŽŸÉŒL¤ßVb-%®-¤Î¦2Óò%hŒ²³‡:ÅÓcåØ\Ý6'åùá¾}3 k'ñB”BÄ+JÍ4XYOLŽ‹ZJño¬9FZóÀB¡§××[ø‡’œŒÚå)ãÇz{}…–?Œ+Xg¥§>?²¯Є @Ñ€f#çò¼»ƒ‘z°+ÁÈ™Ã?œ/‡ EÎQ»¼J̃{k¿#9GµÜÿLë;ƒ_àlsïóÆimUæ«0iBïôbŸLÁ3ZÔ Ú „É7•8ºJí[‰ÌQ-õëíÐÚc™pOïà+W6ÕÚFÿ4'­2r/lfíÚv;gÏFÿûúlˆ|±ä“%L±º4뎖×äUÚ"žŠï¼]RS?~¼·{÷4Ž–Æªâ¨–w÷<íÇ' &þ>'““&!å"*’‰!µk‚Ш¸•iŽ»•ˆÚ/`Ëè‘Û´ût²QŸJH™|Gb¾šò‡ÐÙŸ’ì"Ô¼G‡ü;4Ôä4µ]þÙõährN]N€¤èÓº½žDV ôà/B¥¹Ë '"ÂîÜûúü¢¢ûùüWŸY0±»6ýÝøu©—ãRr:ûîà—Û<õdpÛ<4ŒÆ(móX„E»AhË‹¢wÌÈóM„ïˆïnP¢n2Ο†Q‹d)*³¨¨åPûöÞqq¹¹µòØÖ  ¹c1 9/—Û$&² 9œ$[Û/4P°÷Ÿ%ï2±5.k‰$’ÒYJ¿øÏœ|út¨¿Œ»»&Æ-:zʽ{»'OÖ$Ž _Ì/’åcò3É™¶çv-±Í´•©¸2²»ÀůoÉr٤˻îûábÜí!†úÀÝ£¢TÉ.òŠå7BÊ‹ô~p^žûá†úãûÁ†¤Û¬òø†»Ú“ªÄd¤Å¬_¾ZëÎÕÅ7ÐyOW qå\¸T‰ŸÍ>53êéB‚,ve‡3»ÿØR±³ Ú/õnßÉû+3 ¹ˆïÞOÞÈG¸kó•ôÔçcLÍÝ'ÏZØÈÅhÌc/úsõíüGÛ팖D„B©Öy¶­±î7ýÍ=¹œÎ³¦a`LcxÄ]V[ß¼ÓòW¯Y£Ç*-,ÎN¸·qØ'‹þ9 oéªuç—&YäßĪ=zíFX<ý/³Ž§Ú†ûU½.^&¸»ùŸ:îßRYò»Äw.Žÿ¢äßãå)Ä”\j®ÏÂ^êÐÛb k0%ÛÄh+3;kxDYšà§•ñ°ê7ìç¾|žÊ¥Eñý·qªôÎÍ™¥}$Míj_¶lÙÜ¥ ›ÚÕŽ–JgÏÂ/87CJž-òé¼NÿdA…åZÕ}5‰ÿýoƼÍá¦Î\Û¨ÿß¼EíŽj»âäþ9ÜËÿ›µøï—îÁz©i¦óŽ®î&»±dÒ¤5Ïݧ,[¿ÊçÁâÙ+vFy.Ø·cEoê³-³–„) xlIøYÁæ”òõSf¬‹ô\t`×âVÑ«&NøóyëiSÜeÿì}é>z€5QÉ…yi—™[õ1s“Ÿe¥ S¿N¼_7ß Úä½ù0ßg¿ÓäÒ§kÏÅGöõ¯ãðÇ}Rõ][þr/lÈŽýhX\":²+²{ÿþæ_”7y‡Ú‹ìÈÎ.Æ-]]ZÚ8’>½P¿93^¿#ÝsHÙÒõ‘§3ó ¶ÔÍ 'Þ¼EY³ÿNáè Z0ÂûÂηg'p¼©­—Ð/ÏdåG»o´Óº3,£Z^2o®hØM åäiÖØñyá¡IËÛ|4Ù‹IÇIyW Œ)s7’híUÿE?Í,ÉËæçŠ òÄ9…²<Ö‡HQ'Þ›=Nr˜EÆÅF–RKg}’½ßÅs¼ƒ­ƒ­£=X¶ø¦ºY°§Ø£×m"tHÅLâ=… rEWºµ¾x‚½sóþ}bßž”E~™ ®öïQµÎÍ„Ï7­ËéæAû¬Ã`;bé¤#ÿw1 ‹­˜ú×”+'þ;×M†‚WL>qäïI[÷uO]ÞaÐúá1ëúÌŸèºK2iõ¯ÎLÈyõ”sÿþ=~~ ©/Õ£Á’™µww¾™S±°˜'æ ¥%™@ ”¨JJˆ~‰ÂœÕ< ,€ïá„¡“± :Ž©O4²c¸ˆÛ¹…½D~Þb«gnÇ2Õ¾ ôè-›1QXõ­sN8ŸûÑ"WýhLQÁÆ#“5¿Ê¾JnI–ëêj‡ gfm›ÃÕÞ`TçãÐmýòÕßÇ®(陓Ä!ñ‡"®.ïÅR…)ü#ÿ &¬žÉת‹/ÔE-<DöBšÿ"/áÍ»¤¬ÄTNj®]Ú³Y¹é™¿ŸÌA”*Æf–!£w‡Å"ê±l=‚ž‘Å"°4*N­»x ^ÀÂX:ž®·i é}|IqÑÅ?øÓN¢a9¢)Êü (¥@®ž†õ‡b¶ä)v„¿Ch÷¥Ùke8[å©ÇÅ™¨X&àË‹E ±X!)‹¥*)­8Wö“¸à„­ M #¡Ih4ÙYLSüC̶¡Ãt&†A£ÒilšÉ’N¡ÓiŒäp²õ%…¨Ýj•¶Þ¢Ã[-F¿HDÝÜ^‘*ÿ¥SÙÓüÈ1LZºÒ¿Ëç;÷ÝÙ²âGµ®hŠWûœ=„ɳ‚\=¨ìÜLüzãôk¶ß6K;VýOÖÝÜÎÞMõ׫š”B˜tólŠY'Ré°$-mïµæ®Ý¾;o¥éO­øª»ì™K¡ˆOýKö3þèq•K ÌëXTËÅ'#d2¸šU›ß_ºö5ÒsûïÓS_ñ^혽AÃl/½ÏÆ´âL}½Þ_N¨ 2ì¼øâd{4- Ž„SJzÏ@J9‚%¨{…é°ÿ¢c㨰"ÿΜ΃þ×"n·zŒ’žßÉ¥ïéù—{Y}·«‰¤K ’^=<2oZßµ­Ÿ-v:Èù™¬ìÛG õɾˆ·&Õ¸;Ö GL{‹*?L‚&q3²uù{ôZÂêìñ²bL‘}[ñ“+_ø‰¦=cbºo!—¿G×bF·ð7øûŒÍ½gŸÞÿw›‘!íì§uÿ‚¡ð7îÏ#Œ¡j:ÆË©øÎ[ѵ j—-o†f¹çfŒ€³%<õ—üË®ü=uã/¦Ößb }|³·=–TŒ+—ä²¶­…§aZèkÁ@?†è}D¶Q; ´-Œ˜°yhä­Ñ8†©1N@j\¬CâØµí=n¨Å¾°ää …ÈÓ™Äé%Òm´CL"۪ÑPf]´`>sÈðŠ1ñ#–YԤ娊û6~é™Uþ]ûã–L.:t5fùÄIõÈö7oQ-/úç€Öqp(Ý6Ú= 3(ïåürÇxù;o@3¥zçf²¤“«ÿ<ôš÷z÷ü-†kkÇühËÿ[¾[ÿ¿m¦ë‚:Ì[_RºV4þð’]U÷':O?0iÆÂ?±!nì¾…j%–@0Ì¿¿jj„¤8/]ÙïàŽö„Ôó+ö ¿Ý¿þšçâVÑë÷¢á}‹W>•E¨œ9å&^)òò³Ä·mó®T@ÎZÉ(ÐßV6²ý‹jyÞC4¤)H{öàŸ>Aùk..^áä(\0?×˪v¢j@s¶”lW†ƒÔ#Û¡ÁÕ¦/wuÉ %†ÞÇ%&J}}P»¼:-êFõÎÍ6Ö@·Ï~B°±éêˆM?þý‚_Ö/î¼õZðÖªf5Óköỳ+Å1û^Íí[e¿k¯ X[6^u9íã:X+ö€“r¨=+ÏISëú:'‚*:º}ú|÷K;w«<'M­ëƒkHÕo­oÊȹv¨0Tß·œ Ðuš>P9äÀ×F¶@5Õø—{q'@C~²Ò "·œº~º+¹^IA,åÂÚ57r䂌ä‡)ÛV¶ƒ’@ΠAÑêQM#áÛ÷2¿:)2„7îöûöþT\©?´óõü¯3Xä’ê<ªI^oìfõËsžq—Ië¯èkN¨wR0F… EqêÓó7Šœ-ÁH çàG¥ÿþÑÑÑ:,@%jÒcW.gõéߞ˻»dàä`[cÍqõJJƒ2ãHW»é1íW>eü¡t(çïß`í[(uUVæÞl%5‘la+ÖIÖéÉT3k¡®<1oë$W{#ãáá¡ÃbUjDÛ!s4Nu û.œ»ÙýÜ[ÑXsF½’Ò€5 Ïô:=½ÿˆ¿ºG­l ¨GÎ?_=æÃ{ŒïsæÞl%#…¤+9ÏJ£èPÎSq:”óf{µ#5ûû à ˜³j4)Ë&qÔ)Š8Ÿ2íðŠZyT£vXµ;à·ñýŸ˜Ð™ò»wxSÁiÔ™þýûW18ë,ç-U t¥è!¯-X° ??_"‘4’œkwƒa9¾sþõ­«™d¸òT 8Ï€¯ÂÃÃ㫬s å@·ŠŽjù‘#GLMMÉd²¾¾>¨+@ó¤ºamZa´4)Eß¿ÿøñã«|•}Éd¾p@Ë@“Rô“—ÏUTñc{ÿAŸN …Úe-‡Ãiݺ5úPtÀM•1¤µ•ó_ýuïÞ½ ú@ã+z•5\5*žŸŸÿôéÓ¢¢"•ªÌÿ:‚ r¹üíÛ·rø±qtt\¾|ycÒËÝ”ɹæPtÐÈ|î[%:::44Uq,«Qq¥RÉ/5Ð{ôèñÓO?z44W_PôŠ·Ï§Îv è@çZŽâîînbbráÂ…gÏžI$Í€ Çd2W¬XÁf³]ŠþùíSi(Pt [-‡>s300@ ôØØX2™L£Ñðx<ªëèþsçÎý&¥ÑêQ¹w"vÄkúýë³—9GÒÏwgÔœ˜2ûÚÒi‡²Tq±Iðö=°àtVÑ?¿}ªNTŠt¨ååäää¼~ýÕr*•ŠÚè•sô£¦¾áÑêQ oÖmì,ÿ ó<(HÑå¡a¢Q­éµH )¼9ufLÿÐó£¸9G~ê>õƃ3}X08ç€St­·–ed€¢Ýj9 —Ë]±bÅñãÇQýf0¦¦¦nnnß°§]«G5j«Ù;[•*4ÿé±D¯©~œÚ¨²(öüsýÀM\,„åúrþ8+êÓ , h E¯îöѾÈkcxnlÚ´ \%@SÓrèc—;‹Åªø±¨äQ­œâ§§>tþµ³VI(Šs„ººKç’…Ù8퀆Qô*Ó@j–s¢/_¾¼üc]ý^˜2eJ•˜ò0€¦C¬…FõVÕ£ÚGÏÎdLw§Ô.ƒKå ”«䈩\:œvÀ7¿}ÔWÙü–÷Ô×uñX¨HSðúe³\‹Gµ²7储sù½g:k™Åe@›ü=á¹ã, sC/ç{Nq¡€óøæ·ÌÿÉ“òä endstream endobj 403 0 obj <>/Filter/FlateDecode/Length 64761>> stream xÚì@'ƒþ+¦U€# “"€!`Á ÐÙ9s:Ÿœçßž fz'¿í³Ön†ÚŸ.\4VJ£8þR µ èäµ£›TX »È9Oh¸€:àÁêŒg Wò Õ Ú|½5PÔ"ìßw“‹y¡÷sÍ?µFõ®±óÊýO©g}³*Ó·'¨x;&Õ¿f†0¢š“Wxß4Z_ïúÕ†Øa³3ÀZR.¶æMÉÿ‘%ËÔNS_xh•÷rû/±µ; lvEǰ&RҮΟteÊ F2Ðò:¢²öUŒ‡~µ·K#¶ô6:”Ô`ei¸Ô:­éŒV´tŽº4‘颲È]3¯Nºä®ÏKÿF˾c­çiúêq:ª•O*P ëÉ9ЍÉŶ;¿Ûtçl QKþ~<¿z朹=Ãïϖõ£ƒÙ–´“ôTý}*}dóöRñŽÄ½{Î%^¡ÊRO*âv½Ñðð–mãÓˆ_Ú€´÷ášsÓ$chÔ¬û;ƒÉý¤ø;–‹kx”9~¦4šIJ懇OJ¥»ê÷@CÍ9úQké!%<´³ÀU9¯ïª–5±ü×M‹6}–\& >m˱Sk‰µèÙ:ZQô‰%¶[ƒc ùÕÆ/3˦²˜Ž\y¤½§&Jh¤7Ï,¿ÜÀyû·œ6¼úµd¶œÝÐ)Ç…ÛÏ~ÎA$ôlݱ×İ”ñöe·NÚ!G.GeQ4¦º\¡ñ|¢h³3P?l}˜OÏÀ§ÞŽ^‰Ì ó©Žs:î=1a·“[ð‡Ô ~iÛ/œt0Â4¸y[äŸVžú&øÌÝwJ#3›ÙC刘Ò«;´yŸo»ôòGv9" dhfm1B™ÓJÝ,N)å†Ë"§ãÏ“Š ëí~ú 7v¶NÚ>ÓÝÚ;|×@*ä¿k½‡¾&/áCè§”råž¼­wsRØ¢×[—^R:ü6eš*6õõ¹ý—"‹û 5ÖCî·rµÂð=w6^™%ÃhÔ)©W÷<ÕÞÖ›ˆ5|™ )Ûò*¬ßƒ–ty×ÖÐ5C-e¨é/Ÿ– Ý­É‘ä`¥Í¶ÌØkuèÍ"ßá‚/<Ì ž,³mCFëÔ‘|Ô9Ñg¿Ù_‹=Û_–›ûHåÎK>m²&ÒúÌ·›ƒ…oí¿òµxè0Ls\$>bÙÐU;îþ±^Ôƒô#ä§êxµ„øR³ø¤«'“†¹À4v¤4 õU|¶õ´o‹Û¬úXMÁ—S³¯ÿ8o€„ûÛZÎܬ÷Á{( Сå<ïù,ÑêÙä⯕µW(‰¼€]zÛyDt5=›=NG—ŒÆÉ©]cçHeO‚'êì-þe÷V•G2^î³æôÀ­TLjiZÄÅ »âûîèÍæ<êìme÷W •'2 9ž›t&ÊsÈ`Ö- ¶y; UÆ!ˆÐ°e+uŸN(E4›a™mIõ!=ú®~«M胖ƒ/7ðØ?Ë{…±rå×ÞOÿ(]¯Nn`óVÊ?+)ï" Æ+GõEO›^&Ö&ï}Þ¦X¨©"õ¥ÿS&<–Zœ“‘] "/©al­Ñ\ïUúбV'…Åà‰8rvò¤t9ÕËŽŒà¬~(YºŽÙï|*~:ª:RöõÄ_“ޛՏ_Ãþ ŽÖ©ŸáQà —yñÌOrêñ)æ‹ù?ßM×sìËáx9F ŸãZÅî76ß5yàvOyݨÆÏœZè¬?°h@­GFJ"O_Á/¹³~”*ZúÎÚÝ—q9ÝaDÛKßp9iÞjüÛ÷B³\&Ýró—¬_q.0{‚Ï ´ãœßØ‘"×SñÙ×Ó£-ul''^åïµÚ›™ÕaŽÞAOGï4ˆ¤èÈr^ë¦ï¿ëú*H™?“¿ï#¸ã_Í™OæÌ,û;Ê9¿Š$GËUÖ4¢¼Ž,±Årþ¯êЍOr<}ÖJmIH¹¿‹¥LåˆÕ†¤Šßæ‘jnˆ–©l³1><µ‚Ò¼ 4|ï¼âDäE«2ÀÃÇÃ#"'òï+žÂÈOC›·RþY¡çVi‹Tž3x¡òÄú~ëK¯‚¨:eñ¸;·n¿ù·ˆOm˜Õ¼)†âøæy1Æ^{5N +0h×åÛ¶m™î“):x‰ÏÙÝ3• ¨•°ñúE¸I^8øÎêyAxùÝ‚TŒ°áŒž?îÆäô||³ÄßþÑÁK‰3Þÿ©a1€ó,|k—QÎÞg?ÜùazØZD5¹öá%T$ê8›”“T$5JžØ.ì·dJѼóñ6}Ÿ— Þ8hLz鮨4ã÷AeSÏ÷àäH‘ê©øìëi‹ÛÀIʼnW ²ÚUY%Èõ‘,~“K:û`;„ª²¾ÇÃW«èwöZ1eÁ¬o+¦‹ÓkKÅ߯iåìÆËi-VS¼˜’@fÌßòéâô–¢<õK&¿’(ZNªeS3Ð<æ·Ùæ-É?V@ŒPø7Ÿ¬'@?mÈù)…1~´q¦Õ“þOT±ü=Mf:™Ì¤•g}¾â|KOw^ObÛŸÝ5 ‹âèûÈÑ—ZœpcÍD—iÏ r°B¯¹.Æ;¯þ:ú¡ÇÛ.‡Uy8; C§J¼wûÄ}‚Õ¥ÉSE<­OÝËŠ”žºY¢ Ï—`ÄF¬_‚é¿è˜¦{¤1kO·C_çcꪸŠ`æ—ÔÊ*ÐBñéÌ›X\ý•¢=K]Lc¬öŸóç¼ßòX_áðáÉú*~=õÛŽm~…ªHcÍj–@1:-¨üz m(ÞKö†Ä唓ŠÓ"nì±sz^Ђ¼ð÷3¹ø¨Ó‘·i¥¥i¯ýVüYkœ 4!#úWIKõT@×fb‘ßJï×KKÿ¾<²òHñ$[]N†ËZ+­åænÞÂüåè–‡]|šO"åÿ»ð¼B׈>èX_z5eq×|I)$Q ‹AÚåÑ¡Z…-xºvžÇèŒR ‹Ã5%XÉñ›g¤{:sàHžÍºÑâ^Öd<念çÎPT3ŸC<ít’2a„lÓ.¡ Z[£Šiá[µ œåðóëÙYü<Ÿþ**ËŽ¾¸Ùõea \DÔ°²ã;·ñ–ðľ!݉·7_ž?[زŠ__=mÇ6·B•ü8\™Õ7ÇœŽ–˜ÍÕ…‘v Ó÷ξ¾[ïóX±yˆ\LOÍté/C!Î6e{GYDpО«[ÙN‘ÛP̧6ÎÁ¾Ï‡Ï5e¸ÿ2{Ñú¢»0&s[ò<šÐÏkÛ–Ù[ÊoÉCÄtmÜ.ïÊI?­9høÞy}>,hÙ!(h½ü×€WÍbéÄà³'Öß,Eøå&Û[0ûØõ¥W7÷=kF]óq9™Ká×6g®J;tÍkVØpþÈ›ÎUgý!ñõ¹Øÿ¿A‚œŸéºK×ËëÍ?mtú›6/çÐcÂhá¯æNWæAðÊæv=7î2^…Ð:Å«ÏhÍR×/\ýwÞÜï¼È¾—{¢<ÞýÌ ´ßlñ¨X.ê½Ýo¼‘8ÁJSâ­Xd©Âq¯µ¾Š__=m;ÇrP¡„uæ÷}f¯¶!±TPËj×ÅÝðÐQ€©œÎ ]|}:_7±µ:ñlwÞº&ÚÙPK2Ö‘‡Fœ–,¯•âÅœ'®c\жƒ8…¸h·C9(«œä†*Î ¶@çÛ +rÜ7Π³ƒížüÛÄLïä·Ùú@ç§‘Yá0„Êî;zr0B)× •M+üpÈÞÚõÎO’ܨMÿ]r1fN›LÍ}ëå¸ÒãÊפþÐÚ‰',IþÉ÷&1~¥d„ºšÏóz•)9tí©ë;FKá8ÞU}ÐMè,º)¯bR÷›öùNzøþD {Sýš›óá_¯QÑêÔJÒwÿù+¯&`zÎð¹å¿¨é¹£¡ ùøW‘vû]#ÏÍh:&¤¿¡^[¶úß~÷»ÁKꎷݴk“•¶@Ç÷dí´ÞA¡} Þ¾v‹ÿ³_墺36ø9‰b‘Æ5……òÄ`çkN¾O§àdÎ;xÖs¶*±ËUp<'•ŸŽˆÙ}´ ¨Ϫ<æ°Ý¾B‡Ç‰‹”“®ØöæÑ‘¡ùw ¥Ô®G)³ô¥ˆìë8­à•Û¼ãJ‹ªŽJá닯j‹½«éÊ’Þgh/˜k(-„‘š;WÌäZléÐþ¸ŸF õ‰²5¯¯Š“_X¾,vþµC„«*Ãn•ÆÞ±½9NI„ ãd'<õzlépCvÕÕ&º¡Š7á v-iï˜CGË™ œŽÙ°©•S˜áÚ0X´FR²B¶{eϾ0§¾Ã¸ºìû™•–kÎEõµ=påˆ:/]]”·8¨=8z3®pÄÅœñEw¶Z;yñ£0jíÙ Í#%q¥gžìò@/àãŽéR Mâí5ÜvÇp[†F2ë±½Æz±à(OCFÜZ^¨}ß ê6?ïÞÓBðZàÇÒžûoŸZ¨ÍÐ:JÖ3—±«üž¥ñjÏ9qÇ×Z‰ÓYô9ó9¥76-« î A„G Å\2ÏNëàµl‚ð5¦)¬ðH¨Êðæa ^Ù^â]1^f…c¯’ø·Àsá#*'~JÄe¢^&%¾M¹D–n— «-‘:‹ƒ]5Œ‚÷ ԄЃ;¶•o‘¨«âÝVË‘ŽwsUȹž1ffêÍFáskQáWeï°ÓB—M­$Úìª3}¤ÂaDeê>ð+ûºêÏÅ $5B™\Ì:•±`]Äø ±Ï4ãvMž»àÜðg •Ð_Š¢oe¯¿ô3H[‚ˆ¡¤]œ½é÷ÜÛIU B6˜-ñ4‹Ú«ÏÛ1N—Òøç¿U̇Ôê#<|ó*I÷kk®Ï‘Ã!ä?—ö¼ê¿u6þyqì;Ùûïs4ã÷N™³8x,³Ô%±o„÷=ɹLº½Øtþˆ©>ù9ô$ß {Œ'íêâÜØ¤¬6¼«âqäpòÍz‚µ’ÙiJ ©ÒÛ4g¢‘¦ z⺾éËÛ›D·k´w#Ykˆ¸à¡åwU—G)‰aÖ¬ÑÔ¿[Ì6Á›Ü,{3U²$úúÓ¸Û÷ ¯/bêÎÈ”rD¿6îµWªìeªÚzŒ÷^æe±Û‰ö?”5+x‚6°jåHE1¬üªU§ªK=ÈÉiL 2q–ÆJz_‹COÒ{ç{ç4ì1Rcnä<«ÎŽ­ä›ŸÕÅþ^ϧJ³^ïp¢)¤ø€ÅþB{_'Ù£Rb7Óþ˜ù«5½º\‰ç¨Kムd'çVÌxëí?[QOçÞ™in¤‚Š´ºÊ#[ƼíBí]§ÿ”!ÿ4¸èñÓa§µÅ–T&Ü5¥Ÿ¬©^¢9qiˆ¡"í[¶HOIú`Hƒ»j 1FYn¤ÏËÃøŠãÁÒ¨´&å¤Q6êFγÊÁ¡„ï›aî¯x๯™\Í{#õi ëû’ïÔìæô—ÄHÎYÐsg`|i7söÏO |ÞÐ>hÙ‘Ö/¡³õ };­©Ã³÷Ÿýd²H9ùìÉXé¡=xkvªÛ‘OLhM–·Ä+dîAýH¯ÓùÆ'´øÛgMØpQ“îа«>ÇI_³ƒhybº«ÑÕÈ… Oy•3SEëm­¤¯•|nÓ9ÑÕO&Hî\ÃÒp½ü½'hÄùx?¹A#îð¡ïŽZühÉk­Ów†á¯-[‚‡y[ª¾>ávÛàð!áŽqxT­·ð^híFÚ·x¼Ž,±<#66‡\{9»Æy/vvŽxìT¥´½÷¦—Z3ž^j6¥n‘WÙyL€7r˜ULc»¢æ¾rl¤éæo^÷€z5…¢b_±ogι@é÷ùÿ¾‰(»`“ˆç´þ³¼„F¿ÅÂÿ©Jí3}óµ³ó•»¼ÓÓÀÒ\uMAmò¶ó«´‰œ<ë(4tï±éÓçkŠd‹v:uÝX°¾]5© Ë»*€æP”Ë"µuëÜ@Ñ8lÄ;õ…KÃ)\ï”w@w±9%þUp‚Ü`Û}—Vkê«•-ÿÅ÷Ÿ“NÛ÷'ü»•î}Ûˆë]s¼ÒìSûÞXXjì)Ôsàꥺ-NÖâô¹ïó–’´/‘¼äàÑEè g¬ÔÿÇ'ölt5ëm™AB2íþ;2Õ¶Ö^ïÆåÂÚ.BÇ¢ûUÝ Ðøw‹¡Ø§R5óýwl”ZwÜ­Ç0œ¸‘ì6¶«Â—;w~ÈG>Ø*1 xüo˜ ßÝF4…Utxuלp˜og¬¼²‚Ðcìú3ktºâ½sL}PµòÃ;­þêBçï-µ›®tá‡:ÔqoÒe !ͧü×ÅùË~:_ÙÜŸŸë­k×Éj×î·f£#bv?× ÜÝAº°Ý¤8í\pPG Í©Dë÷â|~È*@—¢MB°¸Š];ÞT+àÇJhà+ÈWrÕŒç<`P˜àÁth´&< Á`ÀcÐrÎ>. ý —a µ‚©°°Ò.0M#¯¡›ÛÙt^b›«öóR=Q Ê¥§¢ÇŽ{¹*Œ Úæ¼åxØo’`¯±Kl$‡çº¯*a4ˆk¹j0h 7}Å.lR sµdÉÿÖíÖ7{ l­Ž`«µåœýD…È#äj¿ZÁTØFXi*M#Ã-Žd\j_Ó y‰]®ÚÑK죆ìñ¾úê#×rUôéô ¥uOÿÞ”/‹»²Î|Á†Ñ?Ï 䶯õ âf®êšÂ½\± ›Äi®Øî1..îøñãèBÊþùóç¶(Ï7¶oß¶ÀV´U‹6ˆw^‹üBlÆ)‰(u²»[ZË¡VbûPe!"ímº©¹jO/Ñ£l›n + ¨@jPüƒÕÍÀð\næJhÄÞãkFõæÁá "Ÿ¤¢¾øª:ÀCð•¼J9‚ó¼ª`†Mò²5` Ø‚\¡Z®¥¥…. ŠŽöѰÌËËÛm(Ø[ÖV«öÎÙBÊDÊÍZÁTvVøÚ¥#qÏtSsÅ/±F5(ÊÌÅŒ@¸š«ê1dÞAÛß>ÐC«F—}Õ„ Aíì+N‚¦´s®ÊØ…Mâm(Ø[ÁVËä¼¾ûå@g¤¾¨\„~o¢œ\øëùþ¹óç™úvwóÓ´ Aíë(Ž‚¦´3ìÂ&5kGµ´œsE¯»Uóhtll­Ž`«rÎ:A.[x¤^¤N؆úc9´5Õa$¤½M79Wí륺Q x¤$3ùãʸš+:¼Ê¨åŽšGÎ&”®Ó pÕW â²¯ê šÂ­\ñ° ›Ôt_±Õri·×8¦ l­Ž` i“{ç|Zˆ2rÖ+äOÁŸPz؆iô° |ôXµÛ‡*ÓH9ÒÞ¦›š«öô5÷Õ¶ “)|îoQÕ€OËæ¥(7sUøÂmSPDziEá¯gG|¿ÉSå㶯ׯÌXdÅyW‡‹V JqýVA.L¥MLšÂõ\ñÑÃ&ý”Y”N›dÔ£é¹j@Ë«½áûèÐ i¦œW^2äßž€!Ðcœä=Ÿ%JÀ˜ÞÉGS…SdzÌ"Mµ¥1~{˜a±‰3O&W%6ùb¤Y¿VšFv#,ùi»ÿ~eë%v¹úç%f¢LÛå 'Cjd«,€®)€v.JÏÀ†¥ÜÌ•ðè)J—jˆˆ ÷Y¢³ûâÊ@¸˜«&œWíš+úy…!ˆ÷ux¦_#h 7s%N›tË\UHÑÔWÀ96© ¹rss»páÂöÆ——GׄªiÕØÔiÄãõ_ši8™ñÌD´90•i×7¿™¦»~»î劗Ùz‰m®ª½Ä­\Óx¤Up1Wÿ½sø¯£ùêß Ïz cA®ç '9Òõi²kssåêêʹ-Îo+¶3l/zÚz;V£í`‹ëÑ aBÀV•s€NB»…¯­OiÚTjí¼­ÕŽy™[‚ ZÞ"9¯{±ÙИÛö¶»næ¯+~å§U” éà+È7r…´Ù¼­ÕÀ-%`¼}¬·­Z‡¯kÈj£çdg)#¾I5¡ °0‹Á©÷¦p«¨až§ä–õ†ÊîÊ=ÓlakW.YoúyÕ~Ö;ÏÙ¾üž‹/mg+lݸeÇž]ílG›šÅ‹sheÍš5­õ.P;ОÝÙ6²ÕÎíi¥­5okõ~ªN­¿-¿th×Áö¤x,¸w¯Þ Ã59çbÙ¹ëönk»ÿï÷>_¤!9?¸×³íä¼%e———çðöy\\\«´×í¦ !­µÏ®4ÒÞÀÕOëÚj`W­rÖA¦h“¦¿á>V£+€-¶»bw¤ÕÀ=ò6飗Ûñ1­ð8zèM®Í᢯ïz“›¾æbÙ¹hº;[ïàoÓìq·ì@׸««åü=€.†PÒöô¶»˜h£»!œÊ¹Š:ý´¼†›N%qëäðtóX纙‹m+·ÊÎ]·w[ëÜ-8â4j½í²Çå²_ÈÿÓ0¨ò‘Xµœu¹¤³uÜÛz°^T€îÿíÌæ²ðÃ!{k×;?IrÃÍ¥Ã.GV®¦f¨šú1‘$7ÊÙmfiðîãÏ~•‹êÎØàçh$Š¥} Þ¾v‹Dp-ЪBÞþ¦kõ˜ÛBzÛúÆžÏШ²½<æ°Ý¾B‡Ç‰‹”“}Ì&½Ó?þ~ï×c^Û3§™ÔÙ{=þ’:%Â×n¦Õ®¡1žýHïî Û×Jäë e®n@«ßR«ÕR×]h-[ÍXlU& ·D½=»é­~Å€mسÌ4„ÐÙa²½,é}†ö‚¹†ÒB2ý­FâÉ™)e5;éà…5´d†Ì³Ó*þ‘MBáQƒ¶M7¨™ØI`¶f]²MëJ…ªÒ ëH; ëèzIÛ<ºßžÓ´:0HÝ c^²ýÄ\¥¼ïäÊT^%ño糊2#®<)¤¤l‘%ˆZ,ý¸Ïû-=18ðSâ÷L}ûˆ#‡“‡Øê ÖØ)›D= µÅµ–¢cÚFËÛ§SÞ¦cÞ çÐÕ© Ù~Æm„¶"#>½ª)$ê¬>é€ñÖC¨Ïš/Ú=Ä&]Ë/ËÎ|³o²HÜž‘ôÄ’Ò¼x,­ä›ŸÕÅþ^G§JW7l;I“ZkluX[l½,¶Ñ[ûÕ£Ýuÿ¶Ê…&< ]v!Û™WóbÆ[oÿÙŠŠsî™áF*¼X^á>6>û¯M¸e†&ê—™6á„âç¾frU¯ªÒ Â÷Í0÷¯™\q;; çÐÕa|˜{‚Š·cRè,ѪN­";òÂúå/t¶T#У§?¡GOŸ(wvíòçJºIº¾aþæJUï‘Ss_¹N¶ Ò¬‘m&Þ]Þ"È9-•vQ‹0tA´Ïô5Îeö=EìémªéȧQcÑÄuÄm[ò‘H[å [úÿ ³á{¹sç‡|äCDY¸m ç´gO½:d;k¯eë:6ë³I4»ß™Ç9[ñV%ØâVGFÚÙ×Ôr·Yáèj´gÛ¶ÀVÑІäœuöZh èøR»¥ÌÒ—"b e 3Ñž/"ƒ-°ÕlÕ#ç?/Œêek Þ°”ÇÇàÔ{S¸•W.Zï¶·ƒÛ;8ð .°ÈyYâÛTA‘ËS§¼/R³18hƒ±8Û›êIñX.Ös.Zï¶·ƒÛ¡_^ßeÌMt¨ëTæ`;•R–‘np6âˆrò‰¹ÓzMŽÞ¡K¬]ÃÑkvt!ô&Š:µk;­wÛ‚ƒÛÁíí_phÄ ÆùÊ †Qx¤ÕUÌ·5”’éo»P;'üOYíUѺm:•„. ÛÿʋֻmÁÁíàöö/8´àÐ0K–,i°wΧ5uxöþ³ŸL)'Ÿ=+=´/ûÎ>w‡à¸h½ÛÜn ƒÇ|rÞßß¿9Gïô4°4W]“FP›¼íü*mÆH{ÝYá¸{ùÌEëݶààvp;D˵´´ªwáê*zå{ç8É‘®O“]ÁaÐQµœ [E¯”sJF¨«ù<¯W™’Cמº¾c´Ü@ׄRøãñ… ·ž;]àù;¤jÊ,jîËý+7‡‹ñ–"}ޏ™)ò ©¿nìÝý T˜’X¤áà³c†rí{Ô˜ó»<.ÿ"hd RB´:Ç/:5üêµßãn œ †ArÊ]Ïí¾~'>ëÍ›k±Þm¾6ýŽ&ÛDhXËëSt¦œ¾Þ¸øªÖ±Ø»ú‘Î#—m~j¸ ¸€. )3‰<`Ù6™WA>ÿK?íœw^ûÆÛÍ:„Â0'Sû ý;ó•ðܘ5¾Óð9Ñ×dȆ×ãÎbÝ99ÐÖúÊ„KWvkòcòï¾f[È|:KNð_&mi{áuîøIâ¯0iÓ~jØ磊öVϹÉ6Õr¶ŠÎx²½4öF˜ˆ­Ó8%¥±NvÂa×cKÁ‡tQxÕÆLÔ— Ôš4‹Võ^†GL¢ìÝÍo%Œ/Aº–$¿¿þ WÛ¤G­þségß݉3öΣk9 ±—­÷–þühzÜ“<ëåÓ,§—_~‘E—­®åÕŠ^ý¬;žy­ú#O|ˆ,} ‰ «-‘:‹„ |àIº |ý·œ´\¹Êj¾Š‚íW†ˆ«–{JÊ™Q½VDíxo«ÂSs«ŠŒ¸\ñ9²ÕðX-}„V› 9w¢vÔLìú§f3ej¿SO+ÏÍ,æ—'²M„™¶qssCÿnß¾Ã5ñà2ÁIŒØrn]TóØÜýjÜ«ºKƒS°{‘:èòŠiÖ{L?לb‹¨ÐWò2K)–5ý®óìù¡•oáLF{̰‘­¥ç!³5½“B'³M„wA\]›ðx:ªú 9ç‘ê%š—VH*Ò¾e‹ô”äOСæ½9´5r¤ëa%–ÎŽORcØ`Éüw9$TÂYÖæÕY¶­Ï„-'æÝXÞ›>Þ^‘úÐ'à ‰¶4¾ DÇèÙY®|”j5Gž/Ú–ªid†å-ñ ™{P?Òët¾ñ -i ‹B+øà»õ¿ï‰_ò¾[íðP¤Ï"Ǿ˜(ßuG¾ägŠ ÞñÐw¼£;MÍëëæû>KËM.2ñóRû!aœ¼õ™Ëw7«Yx!"¥¤\XwñuðWe¡Ø Ž}І´"7«,ܹî~õ{{ý*-ÐôÄ/¥ô'Ûw{ÕN&LÓnºàÜw}¤䂹¦‚(!ˆÕX·ZÝxp,]¥•°âðtÁç?Öä¾Ë}ëδ…´òà †w' a½÷œ5kÒº‹|:«ï%®f,êLÚðï¦õiìeñâÅ®¹fÍ---|±kUP }õ®JŸ¦˜€öB^^žÃÛçqqqL#]æÓ–UÓÈäý<¢uiÙ†WEàèdrÓÈ@§—sÆ42šÿ¦‘ùAŸF€NL#ÐñÈ¿=AÔ" AÔ¶F|tïClxM•v™|†Z”üùóÏ¿YYƒ-L ÜuPyÌ6½;ÄäbL¼S-ç0 ݇¦DT£C+ú°ÅxÄ>ɋٵd£,Ö{ÎØU…Ô‹w;Úý§éáÇÿÙl;_x#ð³Þ¼éªÂ¶›Ç}Ùéìê~íAÍIIH—^à=¯oyÜéõN.Þzv“E“+¬?ë1žå9dQ“‹œˆ´ÐÈãïõÅ…ÚÃqå¥$„½oq˜ëD6rNÍz¼céV¿Û'3jf»ìëG÷—¿Ÿ„Ôù©Q“顇Ü|üƒI^¿îOª±!±·{l±3ýRÎh9ç`™¤xl|L+<îz“kW úú®¡7¹ék.–‹¦»³õ^ð6ÍwËÞM‰¨†Rüñà¾ô1ú‚ŸëìˆWËήk²á[j‘ôw¬±–(ï;m>dåa#´Óüã†÷ÒC~Lõ¸sÙå Ê¯”dÿ‘ƒ¶½Ž'/:æ7Gzq2¦Î»Ë÷†86œÉ9"4tï±éÓçkŠd‹v:uݸ¢NE?-¯á¦S¹v[ÞÓÍcëf.¶­Ü*;wÝÞm­s·àˆ?Ò¨õ¶Ë—ËÞ(ôˆj’ÿ»fj݈j󕄤$âкÈi¾s‚®}®¯wÜSëoÌ÷˜ô>êBȇFLÓhåy"o=ø#Ø[¼æ­N‚´ºhÎùô 4{lº¨OÜÙ¹¿ï3­–WA¢¢‚IIïµ9p· ù‘çÞóÏ/'MgôzËbO­[ãzäÛй&Â<¸Âø~+?ߥÚlçù,÷qó¹wþ|™Û…©Ñ·b* ‚‘¥æ—#»êlNÌyë¿~÷ãQqaMÅü†¥€VuÜéÖ×jYn®àè û– Dz_±$!ôôù±¿’âbmþ;·LˆRz®öþŒ•ã/*09|œéÒ/Þ ¬d[]¹¿Eæ-­_ÎÑ+ ñ¯ÿzÔü>{ @w€}DµÒ/VÜæûHñwPýVñÞ ¢ §j72'gÞóYbô›à‚šfO¯Õa‘m¹8ááÕ_ŠÃÔxÙwQG­Y¤ã]²ÔsoŸÉñÏfb¯ŒëãóiË(Ó±õ‰¹á]=^°`ç²ËnC7]®ÅGýsbÔ€íom.Žd7/ÐožC*Ñçæ^ŠvX-Î~ͧެµù¬©¶v¦?¼l¯B@Ê›|ª¸Áb{%|-PˆT$Ÿ6ežØÃë³pìÔ<)ìÚ—?¤䥊2®Å•-SÇý:;gEÔ¢gÁÖòx¤ðµÛ^ ?¡_=P²##°¾°& O|5,çì ­t€î»ˆjÏ]÷~¡ó]³"9:/úˆó~Éý΃Dk«6QQ£ôm†º}c:#jráÇ•ë[Nñ­u,†e‘y+I1Dz„ËÍeê µµ%1„WQT^ß4^LUŽÍ%NH†¿,§¸áδ€áò•Æâ¸ú7/оúNjF€2#kDÕ©st75´C~Y“UÏîTÌfIm¹øµx¶‚pÕ*¾³qù5+8"¤¿hæÅ)†çé‰%±÷¾ÈYŒ’e¸RhˆëNÆzYõíÊõØÓ¥@Ëë .¨¦2¢ÚÖôçÂã¯å½¾zâ¨ï ]Q]Çkëj9Cï½µN“ØøÎ1xÝy ./=QÂ*óó*ŠÓC6 nÓ@çůWöu~ÓÔiÂø´'êgÞ~’J¦!§>¾[Òà>K¢/ÞIbôÉŸÞÊÔ›¬ÉÏn·åÂÓU¬l‡)‹òD|5÷Yäzô ¢2ãûžåö­8+?ähðå’>¬Ö´Û±ÒPxðVWõ•6–a*BDYqIJè± ‡e÷­\ì±jÕuY)~^å +Ò³TŠö=4Æô¼8Ë&HmäÊÝ}àö9È9Ýœ¦DT£CP›µý$úa·£7~o¬üf¼õæï­•Ëô'Ûkî Ï½ÕÏÑëo›P¹Øóð=»Ãõd4ïù,Qó½óQn·~3]ΘÇüñ~Ù_Æÿ¦Sj2`1Ô‹uçeq7^©®¼Õ»êîw=üÁEùÀk˜ü&º¯Y´Ø+êÜf¹g»¯il<ZrÞÞPË~<÷N6çAOc­Þ=³ŸüÔsrîÇ“™‚CÅ@Ë SQÍõ0½N£Ñ0FŸ›Vüãc®Ò e¶½gzDµÁHþm6?Q2ï9ƒµºÖ›ïRQmÆ¢ƒ½¯m4¨ 4Ö¢GÞj1TF?³ž£ˆgýÌd)ÎçõÁ‚"ØÏntêšÕÇzš£ƒ½ìr(²D®ÞÝ•èöÖôy±k°s‚Rš_NÀòw™qv‰»‡rI¿-TyàäéLrƒSïMáV^[jýß‹jaÛÉv«×¥‚=&z*šï¾‘†“˜Ÿ’T¹g¥(ùGaßý— Á.-ˆ¨ÖÑϰғnf9¯°ÓtJ!Øïµ7¼q—½!5BìítyûîMóæç'ˆ<<|rFÖ+fõQœ²LÑ×oÔÕÍŠÐêdržåb=o©uŒÖB/6! °#M“M»pÁ;­up{7,x;ÀyD5¾>‹öž\ÔÐŽØGT³^âU{Ý-‹¨ÖúÑÏЦOX~À‹yþä²¼ä÷Gí/ hIò° ³ÆèŸ«NÛ~aZí £¢O¾^¸MÇÍåþÿC ³/çh G¯ÙхЛ<*êÔv®í\´Þm n··Á¡EþGûDT˹6NÂêÂ+ÙÇtÕ™íø9Þ[Õ,7tî&]ɾ7¡òf:ërÎ:{ Z·ÑZÉM§’Ú?—\´Þm n··¿uh‘Ûqóæ]4´úÕЦr^wV8îÁ5Ûz\̽'wæçGõº3jœ‹fï‰ífš»ïìÖÁíݰà4¦nq÷ò¹yÖc¿Þ=0íOòG­ý‹.£êÞ¹ú ÝÖ:¸½€öóÎÚ/o4:5ŒÁvÖ‡º\œÌŒ¸Z)é±pà€.'çH«ÎcÐÁ–Ñú“ü±fŠ6xè¾pQžœsåðÁ‹ß òÒDœÚÂÝËujÍIN-Œ9¿Ëãò/‚ F¦ %D«ãN‰{ü¢Sï^û=îö—À b!§ÜõÜîëwâ³Þ¼¹ëÝæ3;²M€–Éy×eÔ8—35^—=~+ø6¤,i¦{Uƒ= ›ŒgÐßé§UÄ|zç|÷kXUPRyéôQ[{óÿ;ùÊnŸÜdÁx—%Þü¿D¤¡8ôÿÌ)\Ü=urõ:´ò·ÏŸ­zùó׳:?ÝÎ#ªá+~øX̸kváêÙ¾Blçx!'ÚZ_™péÊnM~ RþÝ×l ™Ogé¡Ã þˤ-mb/¼Î?Iƒà&mÚO »â½ôÐÞêŽÛDh™œ>·%P~•Qöî;-ÔºN˧Ù{âÜE7ž<Ü•ò;RAIoÔx íñpàÛ>…‹Û*å3ô&#¥"ót‚Ð:Ç7E(q‘¯ÌÏ¿íb:œXµ>¯}†T¿ÝkÆHfŸ¾¼*÷½è¢îÉÚcúý>Ä2Œo¶þb÷Ùx"ÄÈjœ3GTã‰ðù©1øö4±ÍÔþ ö_Ø?C•Xc£ÒϾ»g\›G×rb/[ï-¥ühzÜ“<ëå ú<¾ºñEÖÄ©Rp í#ç"f÷ÉôPceY±<æ:Xøô}·N½ M¦*:úñtóXæ´9w *ì©@o2)eŽO€W×–æ(žeµ°ýƒˆ!û®AÙET«H‹Iþ›>ýÈ£tý”CÓæ,G¶º¹ÄŠhé‹ ´âØ͹%x°£fb×?Í0›)Sû©cZynf1¿”8‘m"¨?ÐüÞ9ãDä•ì=u£³ï™àŸe]JÎö¦<Åz“Á«¨÷±”0®œ@·zT/»ÝiŠ'÷yêÆ§çRþÛ|¼Èç»¶ÓË>+m´5Ý Æ SŽ Â.¢Z™ ”ìàÙkÇ«I`UVô:?8jªS?†;è¼flâÓsÚ§§QÈ¥éŠc}ùÄT%îO»9y½‘.Ĉ8 FD5]ë1ÅçÞdÍš&]š‘#k @¬u–ê,ÛÖg–ón,ïMo¯H}èð…D[_˜Ȝ’d¹òQªÕEøh{9ÿ÷¢An°í¾K«5:^wV8à ¯€øÔ1;_Çÿ$1äœyÂ…F ÓÕ|—@jLÎ+©ŸžÃŽ¿º¸Œ‘¡´È#žþ†½µCcÿs òZãˆjF|”çþÈ‹m/ñ—fñ/?í®Y»-ÄÉ[Ÿ¹Œqw³š…"RJÊ…u_UŠàØí±Wäf•…û/÷Ñݯ~o¯_U¤54=ñK)ýÉöÝ^µ r³ïm¹¼àÉóÈ_„^ô8Èå©n¡…SLzö!”¾zõMX…óàÈ5âÓsØÔž¥û?fÌ¡ˆ…Œ‰”ëZT_irQ.×Ã×opwÖ{ÏY³&­û·È§³ú^âjÆ¢^À¤Mÿ~aZŸÆ.š+çBÉu5Ÿçõ*SrèÚS×wŒ–‚q¡®NÍ×É*ß㢑¾…¿_{÷˳\Ѝ\ϳF8ö b›¿gœœŠæÂ>h/œ†`%§ˆÅ,õxü¥Œž¸ÛN¯Fל崄Mh'EÍt‘ÿµ‚ªDÖøô $l“_UYxOjxoÞ‚„ê¶¹zÚ çt9/|½qñU­c±wõ#G.Û0>üÔpAðM—‡åu²JÊÓ¾ìÚ^’¤E¼ yæãÐCûñ4q·Ì7Ǫ½‰Ç $C0:æÝÐ1õlbÆŠ>ñÇóà@ëóγOß°¹*EWÇyC¸ €r^{#LÄöæ8%‚Œ“ðÔ뱥à ùÀ9Ý^Ńs™‹Cjk=û™MAž67ûüñ¾;.µ¯]XâìÓñp.ç¤ÌyâC¯Ndµ%òOg¡ýó.Ëëdî³YH°ŒeÓH/>'«êÛ##&£×£ŸZ½ss+8DM‘s kSr“3­ê¸Iy^(EÕòè§W3‡„[6å¿È¾Ný*Ÿ?§‘¿½ ±ú,íµ\Mšãé,v¹¾¨+k:£ókè•ï¢Ò\܇5¼3}Fz¬´ŒVu(ú?ÉgÏ;¯Úˤ o.ù,3\t óëÛsIiayÓüõáhÐåœGª—hN\Z"A¨Hû–-ÒS’<Óµ5)Ob¨x5"fe´ $ÿ6¯Š÷À½ý¾ÿ$1äœVþä¾ùkÁ+LÌ„›07ªåóž< DTÑQ-§/Ùð&±_ïž=1¹Ì E?wÑ TÑG97jÕrdqÎ[AÕrtYö¸8g SRõª°ÚÖˆî}Z<"V³MoÀŽ„®à@Îù´¦Ë[â2÷ ~¤×é|ãZ0ÒÞm !äÈ—‘_…UéoŽÑÊ_Ý¿mùIÌwÅHsѦ=ÒŽª8ªå¨Š¯ŠÉ8œöÕòêžz}° EÏì 7 ]ÅÑÿçÜz›/}Š‚¯î©·¶1]j¼€ µ;îãGáôéœpQ Z™Å8ë骄Vôåêm‰3®› ³î‹>ëŒÓ¶0²´0®èÅÕB¯_'Iž+÷}ê¿åäQƒÈ‹íúØo­÷ám}Ÿ»8¹xGèÙMMþ­°þ¬Çx–7ˆšÓ’VsÆeëé‚’—'5eŸ×Òþè58±·{l±óí *Þp¨»—œ ¸1¦EF æšèɤ„ VceÜj®µIŠÇÆÇ´ÂÛk¡7¹Öñ××w­ Â%¸Xöœ‚ç¢ Â_ÒwqŒãî^„’àòâö—òè§¥'>ÉØéøuŸLùíò"#ɰu‹³¥o'»¶ÿä1Ó~É©gê›Rì/ô¨4Z|azdn!Ñ=÷óš·j"§Óï­üš)š™)’ùøhú].ä+,'”WðT”󔣟<ÑT²:BÁ"d ‚A%’‚îéãÚ#€Pþ}H"Iœñ‘ eÁz€ü_µ¿ê<²J}îmºÛÕ׌XµõÏ›ˆÏ÷xˆ8–D†$'o/Õ+xÀÚ8'ÖÛ4{Ü-{#pQGq̧Ñû×ëóÓroÏ +±í'TsW¥sϪ_§o•ÿÈ^÷b!£<}ó’ãǽí×M”ãEäÖ-Ö9R¶ÈÅREQq_váŒ÷ÒæÉnC,<­¢ö´0ÖUÉ× ·H³Ï\³PÄ—|Ü2dæVÃ/‡@g¬ÛÊy±kÕ»@ûê]ICPq¥ª¨S[^ùøÖ§›Ç:W®…`ábÙCoN=°qz%/ÉÖzl±ísؼÁ™8d2?2—§Œ)Gyóåñ;ÆÊôĪ åÒ£lV.ËI—”’y–Ùëhþ9óéedþ]%PqITb IÆçòÓx±Ù ™‚„´ƒ‹r|©x!š€ EPEÌ8ÿ×’?™_†,ƒ£áðex\)OÅóå>Ä#Yx*‚§!4)§õK–’&‘±äR|i¾¬WŽ.óü*üRH(,  +Š—‰£©R)é?}l?ëÝ7ŠýI Y¯¥UÊ_cV­qãüðüšã5r!“‡ã{€¯õx ¥ìQzჯÂü1ì d<7ß‘óGµÞvÙ íàïrQMØÀÙÏ€ñcþû ŸƒM$jÝ€¢–”–"Ù%T„(2tKÀÙ_}ùQ•mÄ>AZ]4ç|:Úô²“óâp7Ÿ{çÏ—¹]˜}+¦© Yj~9²ëhâÄÅC0T>|En&EoÙ¾5#dŒÜ¯1·â‘à­H-£"@÷•óÊ6 ¦‘éú`Èü’_ýE‚L—ó†á!‘l®]cŠÇÿlM`ÉyxîUfmÙ(‰dÄOE›CD¸B˜í&¨Àçðædñee!¥i O§xH”‰ß¡eñÈL¢LÆâ‚E¼V|]QoEJòr_a…Ý„!âU—ƒmDµj Þ_J±dHÑpÁ{o¬Ûëµ`ú®Ršpï©¶™2G%òžÏ­žÖÄ‘õª\œððê/Åaõ…¡è·bß!•èss/E»¬gVÕ|êÍcvYCÜ.ÎQÄ£ ö5Û1Ö'n>\Êœ]‘Vî»ô¤’Ë-#8Ý]Îa™n¶"WýÃAõ^hPOLÌfjy)B‰ÆgQÕU+ÞÈ)'PÅÊu+äTJt%óGŠE0&ágS¾RT¿´W&›k“Ê“YÊ'Ü  *µ‰4ÿˆÁäÒhbd²!•ªÜp®ˆ¢\±ú‘ˆ4*N/Íû‘ÁŸ‘*êoîŸ.üGºTrÈ×!ÓžL+/gu\y¹ä§pÔÔb…¬~ý(ÄæÆ  Q¢’JD••!:[„]Dµ* ?\I¿B¿î LÎÌè-A 0ä¬ÇkGXlì{l0Âr/<¿æ=ì¼çV’bˆô—›Ë‰Z)`¸|¥±8ëe·€Ž¥©£îâ$“Xr-¾”.çä¿÷]¦­M´»|zqOˆ®Ñí妑éÚ”Ü\ä±[Ñ $o¸n,™ËDÊ¿/:pU é_ŒŒ°=°A”Ï:ÛÄT=Û…#ã$S‹©ŠÏŠû.ùý»|š÷È[¥­Ïgn$˜/A5»"éæ…Ì!¶:´â¯'æ^ë¹çɹA_—yÎyüß!8†ÝYÎa™® ÿԀ͛*»—‰²co   À¨"Ç­½Ñåi貪ß"ŠYü°) "?¿*~=4ë‡þ¼8IqHÑI¿'c#öo‚_ Pì §2ߣ úA—ÓøÓÞ¾9'zNãë¹oÌþ2š¹šÂ£Çývz¼8æ×ô>:-#-7YDÜhïä4!¢“¢È{…Sz²¸ƒÉ¾ÓñMYAæÊÔSGŒÉ×ÝýÑ=Ÿð¼×ßÅ Òó8º°ó²Î¶¾Ï·¥[ÜpHzïª"õݯ¡d>Þ¿'èYeÞø$‡¯u±Tcœ«üšÒ÷/š]Š#çç‰L 2|úhÈýHåH"¨R¡Ò«B}TúhãØ“9gn>ûúõ~ÑÑéRR²™¨–OŸNÂwšK@ 7!UÚ"ÔCƒ ÷ ï,È\ “5t¹ÜìÞjª))õ× ¡Ý5Ù‰ÑzxO8€Ö§ÑÕÌ¥-Â*0QÒßïû;{…†ee¼wînížrÓÈtQpwïñ¸íœÛ_Lè±ñ°o½z}¥ò {žeþ\+YK†ÚkvŽŽ™ý­¼¿2ÒÞö {%&JæäüTéöË;‘–3)’í%ó9HIRyÉp‡ñ¥3§­Msˆ'Ž“˜+çÐY­¼Üp çˆÐнǦOŸ¯)’->ØéÔucx¬½+hù»D3úªXQü[4*ô²§Jßˆ •¢aŸ¹@ EyïQý[oWÿ¦®Þy©oªsÚAáÑã”1£{ðIìµû¸Ç5rb€LtÊbY C); ËÈ9‚“ïñú¯GÍß0ðÖC'í—3RD‘í“‘ëÈÔ¨„1_wð ã0¨~S„q?U¢´~9ïìPˆüáÛ¶ôÛá¡ú¨PEE81‘73Kp«§¾"nê1ÜIV6òÃ†Ë ýòÇúP+Ÿúó‚JúŠU] çJÎÙR\u;t½3‚CÿR1ˆövdiòc+ÂO®p]›Áºªë]XË™¨©½8æ'!ðçO¶~–…HPA_•ÝK>&øœÊÿxú‡¹•œÊôýJñH6ªè¨–«ï—ˆ_›ÍÚèärtj¨ÚZر4D¦™ÿ-A~ËKvOW ú>ÈAŒj¥ò(ûŸÍ=ý”ß㱄MÄ”îû5>ËÕ¿K×òêž:È9À5H®.ÄÉÓÐt$^ÑNC·Ô‚Ë»Hb‰±Àðý™ûä'%Ý,²³½¢úy|hy—¾¾ã8¢Bþ{ÇmíÑRØìT’îªÃ.“äþ5š?Ïo\¹Þ+\oÞtUjENâoÑ™ž»¾p]¿ëègz"sX³"ñÆy²Oøêo^¾~'Ðô¹ëÝækóþ ׆$Þd¬Ð×<šäõg_tjøÕk¿ÇÝþ8AŒþxGyÜéõu²±/ÐM6«ë6Y“&–ß¹A8@#‹çºpଙq=á=+öhñjVðÉÎÎ~¨¿ííÈzÅþ>¡[ºî¥.3¢Ú\ËQfFTó»{íæíKÎ%»ìƒ~“¤øµË²Á>gž»pthÈ’MoŠXöCèiíºTGTgé!?ŸãÇü/¯çÛ?k[þ‡ÊDÆçƒ‚W˜´i?3}/]Ë™ð1V;Tµ>cMFâaçÑ:ËÎo¬¸ð:—™G¢¦û2új‡Nüh¥gTY=@Î.©èeï^•Mñ¾7H ´¼ar_ñïßrPGxÈvÇ·£?÷ñ”üófØêªc2jc&êKj½ÓP7¢*ØJ{å„ÞŠÈÈIzs-´@kBsb%†®´¼s2¢zf—‚‡Öš–¡d£W<ØGÁ¸:IŒ¼¥qOò¬—O³œ^~ùEVm©fdûÆÈƶ @7Û»>òxlžlðCÃT|ÅþpΙo0£O‰Ò¶™ëד6ªÝˆ—gº l#ªñ¨ÚŸßÿVg¨ª‚ˆ›FÙ«58Å^LY¸ôI™5¢š‰ ^Úp´tíUiå¹åƒ/¥M"¢Vò«EÌ¡¿G'hÎ(Áƒ5»þi†ÙL™êŽW£Ùs Ë¢€ÓÈÁç€FþN½ÍÈo´]Îm‡µûÊ +Œ~ &÷ €sºì"ª‘~øÍpÎs}“h§ø;Ð~¶¥¯Á³Õ½êѧ"í[ޏ¶ ¡*Ô î¥³å1µ¢œŒ'jŒ…„ÌÖôvdŽ…š~×yöüÐÊ‹p&£=fØÈ27æ< rt=$pŠ$,©[N¤BðŽèETß©è±uÆfÚ dÀR#nLv#jDT+Nýœ$6rB_ia±‰£Ä=#ÿ’z園ñxϬյÞ|Uч¸?ŒþÈ›C¹9Ë)éÑ÷¥ñ!rôQwJJåÊG©VsÃò- È€œ³ƒSï͵Π­wö‚‹‘ÄrðÙròÍØVYi\òï‡\)¸†Æ´ïßopÅ´AÉ]1ØuŒÃuÚ+#8Û»Mˆ¨&0dç±ñ«ì§½“,L%=vd0ë-ðŠŸçÝŽUî„@)JþQØwÿå5ØÀM~U‰ÌÕ¿”"ä”»»½XÒ‰ôÇéüvý÷ˆ‘îôcþÖ•R¼—ï “ÍŸ>Á±ºZnVY¸ÿrƒÀ ]kdc_~Ð5ó:Ô=&)ËÅzÎEë½àâd‰žÜæÉ¹¼œ ·ä\Uu,·äœ^pÄt{÷-´ÍÛ^nÓ¦g{—¡)Õðr“w\ª¯[Mèi}ð®õÁÚÉKýî/õ«‘Â44-`Ò¦€Ú‰Èpçýèç_NÄïE9WãÓY}/q5c±O€lõ9¯ë¬ph G¯ÙÑåЛ<*êÔv®í\´Þ5 .NoÆísTÈÑ®9º0h Gêßçí)ꪪã44¦¢ ãÆù%&>üþýf{ºJR£’4ÐìÒ |»IÎûãwõÎü#šZ¬ Õ¯_Óc¥ÃÙΑuh‘ ÙpZкm:•„. ÛÿʋֻFÁÅÉâ9äh1²XnÛ÷ÎóÈ¢$Ì$¾\uFÿ4"¸áµwQC+Ó¦¤£ªÚ*Šä·^SÏÚšE1¦ÔX}òFõ^xÔ¼íÆ½çU¸‚ÇŒªø£R9'. '†ΦϟQ2¾â·j»ÌÕF!÷mé·ÃC1ôQ¡ŠÊ­‚ÙóQ›<ø}W–pé‹ÙŒ¤ABÉoͼðÅ|•~/h«;•Èd^ùüKdFT»ñv³¡0ÌÉÔ>HÿÎ|%»DÖV³4ÂcîYõëôòÙë^,Dxµì\v9È{é!?ôB’ì?rж·3‚GÒC¢]8ã½ôp€i²Û O«¨}Äœ‡Ž«£¦=»n+“~fŠ©ãƒ—W&‰ADähq’D21¹--ÐÊ©B7ÉC,¶ª9âyVAìÑÇnا-e8é›8©¿ÔTE†ó¥}X#ôL™T©ÈÕCË–1ÕSîãå•y:ñD©P¹/¥zWHNî>Ž2˜üCJigM,PS{qÌO2"BàÏ až—ë1!>ˆ^#›Qsg ÛJKICíž¡±ñ$óŽ=‚äÿ®u׉¨6_‰‡]¢0ëQ.+(-E²K¨Qdè–€³¿þgï<ÀšHÚ8>›žH½÷Ž‚*ØÅêÙÛÙÛÙ»b¹³{öÞ{Gl(v±¡¨ ÒAz¯ÒÛ~›ïSŠ7¿'l&»³³»³ûŸwvæ}åNÙxù Ù™nÜͤ۳j>h!ÑÎËC¢I£¯½Õìûàu:õÕXÍë㩯äGËù—^á -XÎ%ê?õݹ ¥ÞáɼPµB¤QA•oޱGˆ)Špœ„!ìÞž’çÏjÛ!’"ÏxIx‹;’½8GЮcMJÀSô$)¶²¦™C%%“ò<Ü{{]&°›œ1ñUIb;u«¯mƒÐ[SKN½/èâNÏxKÕ2€çæLÕêL¬ñ”l·)pá¦íýÍGÕì,^ÕCÙÏ~ú»º|Ü#ݦߒ“ «E?«_–Ç¥i©Ê[yxU*7·\¯ä'Èyu¯pðLµtÔŬr|¹ Èp?aü#&Ö¯„45"»5‚ H…/YDÒ$¸}"˜lPA[I†&–&.èõà#Û³ïK:§_–ZËjÊ‹jƒ³Ÿ®«M—dÙ¢„7RW’˜‹HI8ÃcDŠp]Ä9.2iSuIêQÔ:‘†ìÈÛï¡þOE>OTïÅ+§«¹â4ç k5þl€q€”¤n¼h¤³#”ófM]ÕêN¬Þ-ÎDº-?ó‡ ")|¸ ³ßû¸퀞þj‚q;Åm¤˜¨Vë9/BXn×W¹Áº×²¨Qí«‰ £çÕÂ^Û‡¾»7Θ f GC’ÐÊ!ÑjÜâ6ƒ'ýc°¤Me\”Z!Ñhƒ\ >ËÿÃD;ÿÉÍB—é0€ Ê9ä›(<·—üx9Gˆï¤„t©æ–J?iñh„#hy•Ëäs|š›2Tª òóÛ|9ŽQ‚ UˆUCÞ£ÙÏD>U¡å˜ýÃJŽÒÓrƧ •Iúu’zëŠì"s.! ârËŠ¯ZSËËðÕ†ÁË74ÈV¤ïruEOŸÐjõÓêqµìâ¶Äµ]`ÕjY|GD5jaÖªÁèw;¿_Í$­ »ƒ&T ™w^Zéàßâ‹hò.,]Ÿ¿¯úÀ‹ùÿÁ}n°¾X3îÑtmèYæWE]Ì*!Ôçêoºb\º¬j\ú‘Š_<‹Vè‡#>¿ÛG9"ñ ó‘ôKÇÉ–xÐJ\üµîq)»m4'¾µ!·îFƒLOZ …78A¶ $ÈÚHŠYÕv#Â)‡ÁW›Îë%ŠŸ&ŒììçAøIwnÐÇÑÉ›QÅÊqÌ ó™,å¬e¤Iå\’qaæ´¸ñ盲Ë`ø…_–„UD¬;Kå¸tE*í^|6*q&ˆU€L—À§H) á"QaÜ+lÇ¿ÝLLV§ˆ2]Ñšƒ×Hf;&T™æØÞXAÃÆ3"¶ºQÎáçÉåÊk+þ„e5Y”å,ûìT\†ÐŸÈ‡Á«"¸Fv5ÞNÓ„_{+‘¡˜–[mÕ :@oç¤i (›ï¶ŒÜc°ë̵֣ùWxV~U9¯Šz.L˜´íªyE²ñ©ycù¸tg^ªýåÀQÙ\®¡ÇÅÁÝuq„R¢ ^V*¡æ (UÎ9kVPÞÔ¿A &Ù @ð!dœêEû)å6ö"z…÷-“¼xµÛ±ç#ÝÄE†^°o 4•œKsoÌœ>êÜ™Îê¸ò÷‰y"(ç¿*ªRU1N,Ä åóa)ƧgŒŒ!ËǥNj¹xö@¼ÀìñÍ®¬ÁS‡Ó;<8ã÷È"Þ‡zIÈÚ%úx! AšßB2A·@–ÕSVs¼Ü¬ÇþK’ºŠöž÷ˆY–áÏ)ýP§^ãiæ­ø3®7Ûj9iJ9ç„8rÒN}JER ³ÇEvµ©_uEàs½êIUãÒyé»Óh‡ú·>(•²Û¶îy%ÞDf<ŒÊÁä‘/e‹_("õ…#O¿1Ë©Ñ=Z¶¿CT»vLKëóö­nII®ºúmW×(“Þã5>¸—iç‰õR•_‰9¦jù:EN¯¿v0å#žœ ÌÕ_ñŠ ¸ãuo€):¦åŠåoÅY¯´ÂÒ^}|2„žžF¦þ¤¨Ê÷åŽË:ž£ïèWð;¶œ`;ä=™~Ø=`¾2üíZ‡fYWÆIˆø”SXX¦Òί‡!éf5Ñù„1«œÜÖ%Ð ÚŸ•r^?Ð+Ü/(çÊ×çd¯ÃK—bzHàÙ¾¼îw5,w\»‚Úëâžðu. E=ÒcÇ”e²´éffbB ƒ©8¦ß˜Š‡´KêøÊR©ëuî×',¬V f©W—sLÅ1-ÇTü¡«V··v˜–+-u’Db›‘¡]V–Ï`ÄÖ*@=V{ÕD5”U¢=©è'õ´‹¢q‰ мÜíÏ'!Ù”8°ÀH^°–5{PNÌ©+O&“Ô›­Õóö©.jH=Á;ñL·kTÏ?ïÎ}pÿ§DÿžÝÖ~ê±óáñ±e‡WL,K <á4n™šõèeÞQÍox˜µ jùœi0?-J›TÈÉÇÍ“Cü}*çÒœÛþ³7½I9œW×±¨v9ôÆ™¥Z-…ótrûݾϮôúÆ“íׯqçË[°F×%瘥^Ò¯ÎõRq‰1? NÜ¿NlªCuvö¿½)Ïu»GÛõ ZþÙ·Â[6ë?ÿÖ¦oæ™öNëóoˆg'̲û3Þ˜„K_£©f8Ë´ÓžótÌÊT¢iϯ…-º\jæ\ùLÄd%½¬L;Ö(M´rÈù—™Ïx ”+¸'‡€£à¼•|› P%€&iIx/Ãk”ièëh³µuJ #­B=?ÚÞð*5<ÞŒ®ÅH‰pÛ¤,€›jz4-âqÔÄ»žeù…÷SΪñù_ tU™yÇàîÇ«¨ NÂkW¼!{ÿ©ÅkÚcÿ¼è 7Ä#Nøxo—·ºÒ5j§¥®àfàëÏ(¶cÇ:ø§;‘b³9Ú 8/[&eÔX;*ÌÞéŽÙIqÕ0Ú6<Ìåÿl¬ü´(m8†U‡.V¥MBHÃ7Âëõùëˆì]}¢‹£YÑkÞ®e¥Ðuý¿—siþ}ßqÛ_hvXpìÚºnZµ•ÛÔJ†}þÿ;¼ÇqSê–5ëú/kÂgkS;¶ëv]+‚¯PŠt®ú 8©¤m[F>Ö=‹ÍIº¤®Åªo¯hùµ"Ué¼Íi¿/wí"tØPº\»ôÂ%¯M~—ï¼|ý.<é}RYRª^jrÛ™‹LWfl” ß_OÛÖÑšEÖÐ$kjP44È<%üÓÕ¥\ÿ÷QäQL>@P $ ðœ’NÊ$…ÂÂ,~V® 7::åiÜóXËX*‡RLTéæWŽ<â,]Ââ‡=‹8Xi¯tØî›õ0¥4ôùÆèá£?öFœ'­»^Üo˜_•Ø­ëÎ&¬íà øæÞ^ñšöNÿ6*îk¯º+‰ Š([ “k|ÁÍ@C"ž©ZØæÄ$Ää9X©‚°oim¬ÕU»¹ïw¯Ùtþ¼`Í…oĈ€ˆä>Ä&jïßûS|&·GdT‚¨¤@ê4mó¼Îô†Fi«7Ͻ±ÆtR#âË“iÃöí™jG.=¸hÃÃ2&K…¨fcXZŸð#7öö»müçƒÓ-eb".ñàÌ™{º»ì $ÙÁë¦d—%çèN9²k¼%“{[6zé¼d•á.ŠßìîÂ!L…ío<ïeüF' •„Y¶í%_•x…¥º¾ë×·Sôê”óò—K&_µ=wÛùÃü.Ó÷z¬#ž›_K5«”òdPvGÝp”Âz"ÉÚ+?9]"¿w袵;„#¦iËÚÎàçs ÆÊïÕÓçÏs¢Â|xÖÚ–ïàlÙ¦½§GòËå:´õÆ.CôÞ]Î!ÏâwÓ±åê{ÌÆ³ÔIÈŒêcÆUô‘IäÑŒ…Æ4cì«ÝÜ ÓÝÀïùâòmÄÖµ‚ß§ŸxÛåA·?Š8Ⱦ.OÒ–¹Œ5RÕà ö¥_ºL yÆëÙ£YUº„®]®]"+†¬e–¿ß3õ¨ÑŠî˜Ú•Öܬ!Ïp,{ƒð»‘®ì¾!0 ³Vg ä·Y›w˜~<;æÒǵçÏa) ®RÙõc Û¯¹8Ê€©cÀèîÃ\¿dÔÀ(mõæybM‡%ûgÚRe™Gºº­ý}[öè±w_žhJÂOúãÖs€ÔÖ3× H/j+¼?©óå1!‡‡vN#ÿÙšúÈ€öàÍË=²Ô}]<×¼rº#¯ÝsÉ6w‡˜Àj†;ÉfÑë«k½M—æN›õaÌ­c>š8€rC—xÞàøî¯ÖX…¿”s~\`côuo#IgîXµ×âø]©ðäü‚¨UU*Ù'PV<'A³ƒj•úbz\ð¸׃DŽòÆÜµ7ÆÒ`ÅM¯ŠîóÐxûb[•vKs¼ÜÕ\À¬9ÊM‚Ï$ÐÖWä Wt€åPjÊyEïf÷®y§N0·ï &$Š­­ØóæðºÖðZüš¶Ñ0-Ç–½þ ŒzÓnõ›Õ®á¿K¼Ðûþ¿ ßiÓ5lm‰É)O–¦±Ü+VЦ@q(¯óF“&<±Ö%6QºQ6ÀÖ±–‚$çΊ RÆ^>9ÙBÞš%ÔܬAÏȆÖüÐ|«‰ßØÑÀ0k_ëWp9Û‹U½óTÅqHeè]¼f;o)‰âߥíË< êfzTDÑ  йœW_k >l¬(ÙlÀ¨V‹ÏÔ›YëîÄåï’‘R—‹OÓÀcÐu¥âÅ8I¿;dœº{í›ÞÊÐê^œ¹g¯½¿{QÿÄç¤NéBå¼.9$±Yíu勤k§Qz²PŒ=ÎáÉù51W³H.ÿ¤OÓÇ´³§1 ®²­µv«f—ñ®ÇH¾ž‡â¶ÎÑæzŽ´>¥µ¯M>°Ùo ¿‹­°2+ïÖÕs–ëz]Z^¥èا¾_;o¨!ƘTÓ¨$ÚÑ„q6kÆÙ ÈÏÏß²Û§¸×è2Ê„¢¹Ú­iÔùâHP€­†i¹ê|1Öø"KYzdè¨ç¤Î˜UK-Et/!HwYŽÙ=«ú¨ÞeËËöÉRt«ØÌrnô‘éc,6>:ë=Õ}˨‡Ç;Óë nÖ°ˆg*í6ÝhJo~sÇ ³ö]p#N&ûNÁZ$¢Ôë ÚvÔrÔSfîË9¦âw¿ÜÖî»z_©v>Î7e—÷H²^‹«6@¤Vžã·Îü9;.XLÝìsrîö³ZÝ60Pö=»CȪ$›'Lœ¼ÛBŒÈÆn­ìmv?û»ª²ÿCÊ/ÂñÙ_Ê9 !5Zòf’ ‰V€Æ(QÜ"‘‰VíÐP²½"b[ÅÈö‡Y«iÁíÏ<©ÈªÙqÁŠ!æ A£Ù¸åm4‚—”²ýOœ¦OÀéÔ]f^ôÙ i¿+mèõ穟|l…¼<ýOÙ®q¡(ÛÁ¿B¶ž8Ì[1}Äm]Æ‘hèè¡7”â@­•'f}k¸µËÛ˜¼x›‰)_eÁ–KX˜ÃËöaù^Ðz…Ãcåñ.;h±y@æŽ7’â+ãÚÙMøk–<zÛùs ü'Ž~¦§J@q:Þ —þn?÷òê KÇ;À¢‘Id"‘ªç>|Öï­pRhM9ça8~˜~«‰Ÿrú9DÑëÊ=®êçŠxÕ¬s&ùPÑ ÈÁ÷‚ä Ϋǟå-]ô[ÿ/F'Ä/ò¿ÌÓ(éªÛk¤õ6O]O"ï¶·gŒO9w^bgGˆ‰Á´¼ôÔñ†Cû (*5ÿÈíIÓè—.‹mmˆqñ„¬ìŇ/õ6D–i.¹S~gÆ…ö§ÍÞŒåö¨_ûáWž¾ì^Ù°AN¹WÊ«¬u ú!:ÈŠðˆæÏˆ­jŸkŸEÊ2¦°š5wè]N60«âªÕÜìkÏ5·%K*¾y­¼ž±²bY>²½fͶßf­öÓß™$å¼s­n‹·aŸã_¬ƒcºý¹ £eľ0›}þòÆ×•§mõpp–ÕÊfs¢ã쪵ö¬'Oy¶†“*Ý?u=¯èŽÓ›´÷Τ½?­–§Ýò=jǵ“‘û’ w—ÔL4¸úÂÀšIŸçÏ€UZ)犾Ûžì)ÛïùÇùÃö“¥^GlaOû/©åwƒCGØ;ƒ^€ø>¼púðeýÚÝmÏs™wiF«]];T__ÒʱøÕ3Òã'ø¤OüÎ1»¼Ñ´\‰ÈÞ>ëa0õÙsâ§d¾—'öÁ ` À¯k›nì3lŠ·û̉Ç{p/pªf£¢’½7?évó¢Ê["®ƒ‹ò[DŽæÙ|(t~‚žë žé‡˜”B9‡üª;øª“²»¾Ú~!"Å p—} ¯'|}*1¥ÍúˆàÝ+õòlðóL>ï|-¬(Õä\e¢ÇF€ ¾6XÏ€a=uÖÔ\k5œ( «€®b¨£ØåóΝKoVT ƒ×AU_lv˜FìÙæÝKß#8¡_ 8º}çZ¥«QNÿ=&¢L¶ÍeÉU­ÓÃù‡j9I"Á´üŽ»;“«rßJ˜lgéç»e(˜òPá‹+Ò(GVº‘aÚk{iÚâxb~ExK)t+§-p—-nÑGD}BÒ1:ãT†žÿ|?–Âì+1Ч†<3¿ B—Ï‹]~CUT°¿ì+D=º·è#"¦¦‰ílDµýnìÏÌÌ”w9ØÉ]Í(¬f½¿<ý¾°Â¹¾?Ô4ÇÐ,-ÍÖÔ”7/¨Ô$ÝO"D>þ®Ô¤5.1Ö:Ò8@72ÿ9EÇ>¿ÌáˆÍL©c œFŽÜøðï=c÷cãøž³L¦}Zš²y,“j¤Ù6#-RfÝ V¹æHÃ#ªIË“^¸p3øìɲ-÷êöô"+9ÿ÷úËi$: •H<ìÐÜ”û>f¿¿á}3êDoùÄoIÖí-«÷ì;á4nŒß¢5ãíä“DêL„@þëi™ð;z2³èW°åéýg½Ã½9µ…•Í÷òlÌbÄ«——»ÅÅaË*ÝLjqÛØXja†´~/x¦¤2¢Úù«7®nÒ=8tå[~e ²;;²µļwKP¹©“*q›¶jŒ)¾¾©’ô£‡Ÿ5[yîܱ3'Ÿ\å"(“P§îØ9¿›ã´óKD^–(6%ôYºuº#ûiS•l×™üÖ9QË’YŸ+$QnlÃB:¶‚´+«š«™”"ýÕz*›Ü;D)¥#w–¯Q#CD óñ™ä[ÖÇ¥|òÃ…­<ã¿ì¸"¤ÁÅ úV>«ËÓ#&ž~}«P¦gåz|¬«Œ Õø4<¢šŠywJ3êoQFìÙ28`œ MqÉ–£w-çÓ°ôøGìá3'8<¼ºäY¡Ï-x•!c+ÜÈœÞ~/³,ó¾ÜÌ@èFÒRPºš)›ôjgèñrj"“ñž*U:rgyЭYššGŒxâì¬ËÓ1'cË¥}îlŸÎÝàÓ±úÝ$)Þyî}y‡A)Ç^°Ï[t'— /a6+"ª­GT“”50YÍú—_²խr ŽcØ:ëQnR²Í˜NDí®Cq×ç×P–ä Ñ$B ßaÕ› 4Þ†QÄj7÷Ø5/Ò’Ê W3´Ý1p;eoÎÁE‡—)¹G¾i¼bˆ „(3³¼aZ,¶\÷J’²7õ nÚÚd åf«¾ûSœXÏv†5 ‹¨ö-È­5sÂRC´ªµÚdy·ç¿Â¥¾S·õƒGêÖz±Yvo„" h‰ x} ÿRÎ^§×ú—9ëkþ&÷S“ļ•}“Œj½ÿg#ýÍØ‚×$»ÎÍ`ê±¾>¦ßÙoú73zzŸöÕªH EŠp¬§ˆZÀª8¿5ZàŽJ¾EbiÑ/éÓÍï-³¦”ˆ¤„ ¨ç†SmC+9ñ® ³;=ý]ì»b¤»°DXÛ»Øàˆjß‚â8m•CïåGÆδ—÷·‹²ƒwŽ£SËîéÉ-}iÖ™!³dey@EÎë„[é1¸J×SqMxŸ7áÞÿ³Ž‘•Fi*9ÏÏQý.9Ǭs›‹, SÛœ˜×‘Z•aÖ¾¤†Pb‰«,m%ˆÆMÀ2ù†_äfbÒý_È9öD'Š´ÒIõøn °æ k5æÔ“k$7Wcm‚k{ãÓàˆjhYØž•Ǫb£1&­ŸÑº†Ìãõ‡ŸºŒ¬]3ìw‚*Yʪµr#¿<m¬×{†f±‹J ïÎÜÝj«UЦ}ù`TQJ_>²}ÃöډȗóZw8ÖfÇî_'šZÉùno½ÿg\)ä˜iŽ-¼zÄ204¦¨çç¨åfÈ;#ßië•é•6DËUç‹Ë·XÏ«w›ï €¾Q]Ôø^2ùS8 ð8 Y¦ÐájBŽ™æØB·®;SÓ|úNQ§‹X¹äú Œ¨›»Ý\í†-•Dßi“©cJ„µýóÞiO ލ†¨¹ÍÚ龌úUc%ëá›Î¯ž´ðó"ÕqNPÊÅ¢Óá>KƒZûXW"ò/hèýƒÝÛ=ˆ±ìoã·Ü›pïÿÙÇÀ$¼]×blûÛÈ:&á­Ûʇc¢å@áÈ]ù¾|¢i¯,ê;ZŸûÄ˱8~º"Z¡=À•Ô\¬€3߃3=‹ìQv­qÇii>ú[Àþ~ú~!R+!~Õ³"*-ÊŠ[p5DZ³9ÖöÏ{‡Odä§[çJš¶ ® ÷þŸ=pŒ¦êiÇÐk˜+Q:r'EÇøLšb; Ÿ¢20ïoæ|Mï&š¬/©q}eŸd€”‰hßj€­þE†ÿ¢§]‰†˜–§R¤É½çÞTLT!K÷ULW©½—É©¬AÝ}N·¥`m‡@ /çMÛ|n½ÿg\i£7Õ®µôʾk}„Ïמ4…=o®Œöj/…è±`Öá)»·;ZÄ'È;µkRCp@l„–ªãTKÑ:ä³Ñÿe±%d!ƒâÍïlŸþåŬ+Övòÿ½ÂA~¨OC$††œÁ¾= ¼>–…’žû´Ó(¼3õé,YžTj9%¡çD ™ˆZ1ÊWû¡ÅP—С4_P¯i¦Ö9ÒœQFdÁFØtÙ›¼@P.ïWÈÖÔÔb—hD_Šz†Û=¾wYî²»c|DÿWo:–IØšŽºzÅèþÈ©ß*b@(Kã`/ Ö9ò}ˆÍL‰±rÇé,Šªy©YÌ‹(lY¿°æ‹¢½2ÅkW¬—3 U’ÔgÜÂiNZ—Œ½j,ùae`¾wUM³Fq‚dnö5ôljà”xi ´Î!ÍT¾ìAâ‹R¥ÿ‡OûEÖT‚0Ó÷ïÇ/*ÖÐ=¹¼G/r­­¸¤«›56ž¦dKd¦ÊÖn|£Wè’ZÆí{ãth¨¾¼ú·ÅÓÆl®Úhpz†{Rƒ ÅïèÅZóýJg°¯Å1".| L½¬¸M¬Î˾®Ò§O+Z¯$£ËÞvs²½}nx’Ê{YÌÑÎë{Çó#I˜zVL.Ö=Ä‚õ¥™ÕÞGT«gÍÀˆjæ/ç_z…ƒ@* áâ³iô?' ½¨*Kˆ~;òÚ»NsAI)º'ç¡âUp?¨¾Ög_‰è ‰·ÖêÎ]óáïÓ‡ûœ»=ÞàiÉàãmWvs'ƒ©@þÁ“‰/Ž)1kÝàjX="K{W4‚ýÄæ.%œL{õ U-ïצ}Ñ(1úÎÒk›ùãúÚ%†·z?7É3ÐMÎk‹Á!–ÇHSX_š•Õü ¼·ËÛ]éµÓ¢ˆ¨6ðɵÑ:y§ú÷˜q÷ù•>êu®Y#¤…"¢Ú•Þ—®lGa&ìé·\Q-ùà4í!#ã.¼,éÕ‡…(ƒ§ÉB®ìšºcS•×:!/ç_z…ƒ@* é¬ë/Ÿö…J…$ŽB#«a–ï7ç7ÑÛmi¯h HPI¦¡;ÂÛZ„ûÄ8Ëž½óšŒÕµz}³ÏGI{ögäD˜‚Yðå¨ SgL7—y<¥Ç~˜û(5œ‹âUX¿wu[e§¢¬£Êˆ,I Ø‘GŒÓãŒítSÀ’ùލÍ{VCÎQ‰ÞÇ;“u.ûY”ÿÐxW˜¢ËpdÏ$$¾?ÔòfÈwDT«kÍ=B0¢¤%È9ò5ªºÖ ZË&÷hEPȹ(wüß§eoln½bÀoÔ¿œQ~OÏf¢¼K‘ìRrûœÉ±éŠ4¤ô¬LÌ'Ê>/ö¾½lw&ö;''ù.Þø¸zÙ¥HêôáýNÒeIñ‘Üùè9Ù­(Úü ϶WÏ“æäâä#îFùX¸·¯ls¢ wpÆâÉ®ÒÂY†âèQ`Œ9X¬ 2œžâûQ>NdüþÖ”ªWüºDþ襄L#kc¶j‰Û1i¨G*´Î›-•ÕnÈ#ª•~-¢Z5«£ˆ¨6ªfD5@¹qÉ6c|4ˆ¸®Cq‹ç÷ªSûN@…%ØþXä:¡úC œC²aÀÚÑçù‹çÓ®Åö™ìh‰¥¬-&ñJï?}>ïBŒÃdÇÚ[©öÌÉNC8™”³µæœàÞžvîÏv:ÇN—ºÍrbìpw÷x±ˆ$|ù6Oé³Ee…·Üõ:*ñ82•¤&Þ’LTp¥ˆÒ1«!r7½ö±šùÞz VXYŒIŽÙMÛ..I³Ïö~N×Ò›uÂðÉ8¥– -B'dz.øu WýÁ£A1-ï{ÇsñŸ·Mò¹à L.*z3¤áÕj¯Yã.€Õ PÎ!¿F"Ñ;µµ±zœ*q´¬ðWŠiÌ>í~HÁUêØAéFüñãÄǯÓÄD ‰QüÌnjQC‡·Þu‰ |qÞÉlúè4yåŒØñ*Tþ\ÔX0ÆÓA¾ÆÌ¾Æ#O·’aæÚoVFs:ut¯n¾ãË^ˆ“‰À‚ÍL½ë¦z˨À¯º/Q–OXä?;^þ]÷ÌÄ!oh?Æ ¢çëÜêýœ "à‘y˜ŠcÅÎ aƒ‘°¦4/³¼ÁÕêZSµZN0¢Ê9¤e#ÊÛð”ëÓÎÄžÄõ&.^ÕȤZUÂLö§¯â≅շâ¼VߕɛÔGD-¤œ8NÒiøMº“‡¹sÛ"üž¥¦çIšn2šõñS‚žuwºBbIzçùJE¼—aasnòcm8g‚“黄µVÉŠ|=91P#@5ó]ÊËÑô(7 ü-zÏ¡~áÚìb}Áî)•îàÈæ»gÏþI'†ýÛ[ì/QFä“åQ^äv9ÔòæFƒ#ªÕ½f `D5”sH‹†Èòa$ÎÙù"Fˆ×52_=ÔNnšž¨&O\;ÔK¬!ç4{žþyMϹ¤r¢ÔeHñiNܸEGÞ&Ò»o}°3ád jÒ½dß$¡<0‚ß¾«¶z5ƒO¢y¶1·xŸž.‘Ëùs¶ÊPu `9˜™¼J˜¾5*¾šùy]<%Ðhér­XRè ŸØ¥·Ï´y½ñí£³ãF’i/EyÛï,ÏÕ°âUú?=RfÃjÒLipDµúÖ¬ÙÙ#ªA œCZ.Ñ©­çã¶ž5oÓ¿¶NU8nGÖ¸U ŽÀ-¨<%ð_”RmÅÙT>UE…Û^ñ¼] lˆÂ7្èzFùŒ4{rùåXv‡VÔìØÔ$²Îéé]m¤ŸÍ÷â0U©@\ˆÅŒŠ2¼®ŒJrzj*H6¢™HFNΞ·UT¼øø#ÉÏ9=˜uΣ”ãÎ. .?ˆO¢­‹ï“(†øüûDßqÄh‡¢kë¤Z°@9‡Ô*Šy÷zþíè¶ŒJ5™lè&wóRñ›4íÝÓžwe»t÷&7û!2½ÕR0 >NˆÓÑ7YÖßÒB>¤HmJo‹9·Ÿ¸<Õtfô±²Åþ³ùÞeƒ íÁ#§C7úôJ :³¡HD9°ù©HIj/ãª@C8€ãüœR“d¤r&áN;ɵD‘•Ù3–<ìoY̵¿d2Áöÿ¶3n~Òâ^‚cQX]!”sH݈ N&«.œ1á:Czòø«MJ7/ŠQ¹eé‘SÞªL²–´ ¿Á±M¥_-•idwbª]¥ùžêa¾Ó<Ô3UüþÀ¶°€âE)Úr72x6è+²Àì àD?MÎ9T‚hÏªŠÆÕ¸±è?ˆ<’x>„!¹î2HÒ¹cÑ×~G” ë+ù™r½Ç´`È›†È…D* x ¦¦PoIYò‚›ìÑÃÛo…ý‹ ÖÁs4;¨º ÑS~}w9§àEy¯Ößܳ•™ÿl'&&‰­,h,–øÙ´¨¥ü)2° 8”×Å_›òŒ˜’*67ãwôB) övY—ùÎܲI^E€[Y…G„}àòèiÖ§ #~~wŽrp{w"í—Éèp 6Kªœ¦¬kJOÊ5Ê9ù©r½Âµl©½—…` 8½eS»´"TT´órœžO÷ájÜM\Y›ïÏÓrò,Î;ƒ):¦åزÖnÕh¹ÜV®hfD|è¶}x¾3`ŠŽi¹ê|1cn¦A·Q##±5õñÖêuù‡ˆìÿµùNL– ·ª*Ç![å—Pâ|ðlô´Ù¡ —®RùèOªÙ$ù»s…œ£<ܾ‘ä‹.¢§Pð4‰œCZ6Ó;Û§K„åÛ<Øu-¶Ï$‹ø[¡œ:5#áDEI\é¿s¹Š¹Šß KÔ?„»éU–úW`nÛ^ý«*xg¦»]4áÓ÷éÆg ¼ RïKØóærû*W _ úÝŠ^Çt¢ÿï,x±•5ÖnÀJh) ÚL¤”þdœo: hö¨°¡È€”þsÎ=ÅKð€–á6&4=Ý#ULBD-”YŒËI5H 70,P"¬©¤å<5—ó†àÞ¿ÞdO/ggÿû×›ò\7ѱ³œôtÂbïÜ3 Œ(ŽŠ4¼Qñí¿/õòsÿž«ÊñÞQ´}Ñ„:òIdÒ'&0 ²5² EŒ¢BµÂBFa™J‡ÊÁ>å´r.…‹[.Ár…øRÅ€"jü.úÑ!K5DÇü­$Ç’\^`­qU ¦gŠ#ñŸöêãÔJîæˆõ=̳C“mvŠEÃØZÆñtÌØÆª×Ïk-ݶèr©™såÌëû·GD w[/ÇÌî»?¤u§š„TÙÛÍc6ïï¬H÷:¸ €Î¯Ï=Î¥ýÈ“^ M¿ûý0÷'¶o×É~Oï•¿´Ò4)m3çáó mÇN9™x(i¢úöS+dÞéߦáÕ¥nÚp7O\ž•±ž¾{Ý`ãÚ=:0¢¤É9ZsfÕüå‡B2ÄtËžSw^ÙG¯–ΛZɰÏÿ‡÷ nªCݲfýBÿeM¨å íg·? çhŒÈËšiF¼z_˜"ŽM{õ¤Ý*~V¹Š¨µAŸñBž½HlÒÓ5Ùì&3ÞØXL¨£…ÇÄO€ö ¡• ·âr/>~Öì×e'˜&•Ò )R CÄP‘¨`š„F—ÐR†¶L›$&‘‹ÉÝÚok5×Ú4¯PMá—GBx§Û!Ž<ö™S¤N)ËàvŒMi ˜WÄ+*Î+AejdÓc`¹;Öîiÿ°XÑ']ît±èêæËn®¯­-C˺y®œûÏpKeI9fjù:…N¡Ue~çÓ»ÏÛwä'kj^wvŽ,L:ÄÜ“÷ù«prܸ“ÕðÞø{ú¹d.0·¿ôÞ¸M<¥Hk+Ê ‘èR€Ç~Ò ñ=G¡í抮µë¢ósà›÷ÚÏ»›öNÿ6 ¨†¢^÷y{ª€$eO§ö‹_zŸ¯áFTƒ4/9ç¼;ùÌháãœëú‚ø+ }',îöéTG:<9-úÂR½hE›î¤&‹q,5{/´L½®µ Æß¾]Ì`ä°XviiŸ=;îã“¥¥ð‘ŽÙ¸€œˆ#$QØBJ† 9¥dJˆÅ)źyæêš8lë‰{§G¸¦ãõr¿R:Ný™ƒ[ë´;ʯ4Š\È™}^°ÔňÀpé¹ñÆáíƒ;ƒB AÐl’0—ÌuOytdžfp‹ Øç»m1,¡gh#""CM§à( sÀÙ~ò·‹¼ù›Órßඉ­O8HÈg0b 121Á>X×·oãŸ~¢”È¥Hh]çuz‰^æˆ`mB¾#¢@HtùÒô7×î–Øõ5©e?Èjæ%çª7ê,‚‹$$™ª©É€¯Ô[Z¿éÉÝÆ`O{.¹_îžðÚÚš€"ÆBÊÐÈ´Þï$"tdŸ]ÿÛ)Ü:Õam¦vÆ ãòzÓ´3€ÐX]ÇÜ6ã•Óûy™¤¤oæ„Á:YÔl–ºCzÆà—¯õì‘©©Ù”§(ç“7wQMšuª«å¬H÷uoF›Öz‡#ªAš—œËù7{3ý䣠)«Cï:Á78ÿlÒÒJÔÔ”ZÎÃI?P‹Îtê¶ÄëîSÚsõ­ò4d€:ýÂ=;·g­L±Ü4?x˜ _OºwG¯ððN`Ýå§WÚY|04„WR†GTxƒ±Ï²=.Ï8|cˆu­ª+0Œ¨ivrÎèwJÊÓžn3~üÞ¡ ­áÜ´_í’ò$ Ý’’’híè(“hD¢«Ç5ndÌÕ~áäÚ˜%ÉÔÐøkè»Ì,íRv¼a¬¡#ÚF©å_ZðÁ©Ô`ÊŽç[Ï3ß ŽÛö)²È,tÎ2 «Ë´óL‚ÇpIo¦+37ä¦Ìy²£{÷FSt§ÌÌ®qá·¹”¶íÅþ+¤}|`eknfyƒ#ªU :UÓÚ³féëb1&áÕr‚Õ ÍNÎå UÓ®3gØì=̇rÞ"‰Ù! :!f]*ž7)…‚T¿ZD/‚„ •­E*!Ųb—wLÎÖ̱É!Úrl;$t@pò¾þ‘OœY_r1iŠ™ï|õAmuZðäR«4ñúL³ç3ß1Tﹿbö»Õáz¤YëÞ³zê?W 4¹ŸsÑ8r1çáCA>èö–Üw ðV TôæEÃ#ªYièž5{Þ°qhI:§Ó¾}ík*‚Õ ÍJÎËŸ­YŸÖŽŸ-ÿÅÞ=±ú}ÌýFÐ{L‹Ór“¿TS@9¦è˜–cËi+Ê¡L/]O;K[=Oý½ÑûóÎ'é'ÙÚ9ð]ïÿýø¾+ý­]Åkæ¶±±Ìòòcãfxhµ,øü’ÁźÏ1ý@ÀpHÿxÛ×+tª3ÿM.Žš'9äß‹×/UÀ¦€ŠÍõKK§œ?È结$@\iŒ×üå¼yÑðˆjÇð˜ýÇWsƒÕ ÍHÎUZ÷7:6ÕzBTI¯Ýè g+Msè®Å!WqPŽ©x|d¹] ·½Øáÿ!Û†q®Ó¹—V/õøz¶e¶^)^Ê7â'{ùŒ ÂT>uÎUkÔ°àMÔ‰±F†~¯^µ)~íd•ÛPÆõ{ŵȶh•_}Û,F#½Ô«l7¨Wê.6ÖLÒ(rŽc´™~üõtØ,üEýùÛ¢^u8Z¦)þ¹ï‹SÔ›I‚׎lÇaiÃTÅ5æÌfkim9Ò:=]›ÍN02J¨gÞysFD òîYÕ¯‘c(-\x»uÑÈrèìÜ8åÉf0Ì åAÞ«ÒÉìí`µ„@ "çHóïûûŽÛþ¢@³Ã‚c×Öuƒ1˜[&(WÏ º«ÿhh~yæûS.'tYòêŽQ¸z<†cúmnÝ’ºz?|Šf·Pž¡F¾¡|jœ›“GÒ¹ìañ±±ÆÁ]wvžóàA3¼z%¬™¤qä¼üå’ÉWmÄÝvþ0¿Ë´Å½Þƒ^dZ")zâTÞgŒ®¬ ¾§ Ï¡N9>M×·•†CÇè»_ûØ«õÃ')S”Sãzyï ߘ%ù`h¸£{÷þÊÚºÉG¶÷î+'i9çdž0F_÷6btæŽUp-ŽßÑmlQ Ä+^$·âNÙ¼¨Š&éMñPm—R*ÙàéiT0EWŒ¢?!xýž Òˆr..Hb³Ú+‘tí4JOÂÌ-ŠD6Ù«÷L£;Oôã'ëMéÂì†òI6òk]@i>\7uå¾›*Gókž AôÞkŸçg<º÷ÅOßÜeÞýkv<'Þžv§O Éökã¸óåM™kµ,™Åñ¹" AåÆ1,4a æ&Cš’–½ëca¥ÑÕµ1¯GÄW&&” ûæg  ŠLJÝ\¥dò˜ÈkÜ&úäU¦{ÈÆðôA ßæ{"ªapßþ³9¯»3=⋌(¶cÇ:ø§;‘b³9Ú 8/[&eÔX;*ÌÞ鎸I»¦îاTš¶M»|¦â«4ý`U¡ƒÏu¦ÛŒ];í©]Sw¦½ß–a‘›ÛüŸ>¶Ñzä;ÀѬeŽaÕ¡‹U)G“R÷ïšÝüòB¿ÔWŠÃŒ£g”þéÅëô˜¿Aðàü®_,¬‚BΩ¶<ÙS¶ßóó‡í'K½ŽØB¯©ðƒ H#;;m¦JÓ3³–¼ÉrécÚÈç© ùkS KýÙP=ú­Õ®=Þ“]^i>m8r´Þpeï:ù6ßQ ðÂw,ü0pϨ3õY²¶91 1yVª ì[Z‹ Ù™nÜͤ۳jö’´­˜ÅçóD˜PÕ±÷ýî5»ƒÎŸ¬¹0àã‘܇ØDíý{ŠÏäöˆŒJ•H¦mž×™^Ï|a¢>Z;iìÚ7ÃQ 4D" Èʳ\vbC'Ƀ-›Î?½t^²?Oaõ âŽ-œç¿7¶Ã˜NjD|yb2mؾ=SíêT‰zËùÅæäâЃ‹6<,c²Tˆj6†¥_¿–Gš{#ºL&()¡w[¼yZ[VÝSuP^òý“çŸÅ¥¥ÆÇ¤ÐG?;ÍŠ ÄÙÁ[æìŠÀi2èê4NY§G|•'™µkÂð½EîÜYÞªå«Ae¢wC€ ¾6Ø•3`XO55×Z vAè3\銻^FÀáÈd<'o)Ïr$ºž“:aìG‡µÑøBOúéW³‰’;‡M˜1­àiƒ@þûíˆjü¨m³‚<÷<0Ì8S¿É²7¿é:ÀîmjöÓßÕå/Áé6ý–œ\àXM¶Q 79øjš¡§y=¦¹Êo³6ï0ýxvÌ¥kÏžÃRvŸ—Ê®[Ø~ÍÅQ† ÍÝ}ø‘ë—Œê WÓDí:o’ã.ÞÔ-ö¸ìî›ød(ÃîwË»öè¹d›»CLப>ˆ M»|bM‡%ûgÚRe™Gºº­y±‹ê÷”³Öæ¿oË=öî àËMI@øé@ßcܯž:nì Æ¹€æd J>4°ÿ8õàk# ðu©yjHÀñ×ÃrIúZœü€xÁ4+|ÚéQ³"'=97\ŸÊ_®Ù$¥á€¼õ -úŽóÙÿl¬§ö/ñÚ™Àõ¯Œ¼¼¹þ¶,BþðÞo4½tnÀ'¹!€S™ØÃÚJÑe½zòGs/ׯùÝ\¥«âçZé9Þ;Â(¤çzB9‡@¾ÿ>kHDµ²§þ›¢Pï=óf¥dÜ;«æÖùÌÚªM6´æ‡æ[Mü–&0;]Hºbzmù1ê‚íÔqÕd~˜¦:Ðî¼âú4«¯Sq9Û‹U]ÆT‡ô0Pì¯ÙÎ[cJ@¢xA½¡áêÁÉI…Œ €‚q„õu@ÔÍô¨ˆ¢‰@seßYÎZ›s>^}­5ø°±âpÉfFµZ|ækÒïkªH2í÷»Öò‹ÑÜj_¬&J80rEÚïçÂï¹0 .öw=/OäÅEéùuÕU†oïÿ—¢…5Õb¯\‹<}Ö¯2„¬¢FIóï¯ð4ÀdÛÄsÙÃi}k'Æ4¥{™&Ü{£îšÀØ>ô·¾Ž[ìÀå×ùé(p̨¹lýöÎXâbÒ‹‚Å]™Ã÷;®’˜YQ32vq,,ú5Õi·¶Ø„õÍÁa¬í¿ªYÎ>üGß]´¿;Û}ü“rL0äÕn?Ë—bCyD5_yD5µ^W9ì—Wìß3«³ÕŒm ¾Ôr…zµÛtc¡MFŸ#F«q‹Û\žúO8¯ºÌ_d‹¸y÷–z¨}÷;3nÄ©Àd…M&J½~¡ ýïŽZuˆrÝ—s\[ÏÅù‘§ò_æIµóq.¸ù([Ñq É~x-Ž÷Õ!{¶x‡ö¦?Û2*@ËÂöÅÒí i¿Ä!z×lùøþ7§¢'üå#Û+B¥UŒlß/ÿºtŸÙ¶éCV{tñõM:zñr×ç«öבsm¤·n<ó¤"CªfÇ+†˜+,[š[ÞÖI#øxI)›ÑÿÄÉaúœNÝ‹>$íw¥òá.Í{ôÏá(vâ½°"_q3äïN¼/ß¾Ÿ_±/†Ý„=Â×È yÐÿ”í÷«*—7±$×̳Îrê'[ñÅæ…l=q˜·búˆÛ,ºŒ#ÑÐÑCo(O޵fžÂÄ3þû£€éà„3'b ±ÂBûýç&óÂv¯<žðù$ÛŒ]7ÛU­ÝJ«Ù#‡„˜ª’uYšÒûïÔÝ<{¹]ùNvMW‹A£÷ž=㓼H|y¨uw‹‹¿A|à ³Ù7ì+ÞÎãuº®¹‘¡&5xœ2íŽ Gñ¿Gÿš…oS­ð–Õ \+O€¯«œ¶êÙÜæDÇÙUkí;Xwžd«Q;‚Fíøòì¸ÍÚéjÇ £ÙN9~oJå·•›©õ^y¥wõõªÉeåªVûçyç3Zªœ7À vocì&ï1@Üø¥l½7ö® T/ZѦ;©Ébœ†kZнÚ3n¼ š°ür+Æ¥½<>ùdÖv·’1-þ{­ŒüÝK`Ž}0-üxN#ŸvL±¦åwƒ§5~}Ã$û`ZÞÈbÿsµý‹½HŒ~wЯv—ÝõÕö & ¸ìKx=Ñàë/I(mÖGÿàB¶”<ŠbÞùÚm7¼û±I»àšpï¸k¼µ¥ÉQK“Ïï\ÐíÅÏ=Ÿmo³—ß‘ªöŽ–‘‘Ù޳˪–WÑT=í Y½Ö„õ­ {Úÿ3µò Ö+@(‚§RSÎìF¦i›ÏM¸÷¦Ú5á þö³›7ûîhµ›I`b…(òl_Ô¸eHOØT§=9å^Ö·ÄÄ XÛ!HKAñ²JáFæôö{™e™÷åndB72M H'‰nFxh«ãv ‚<%ùªuT;l:0hÐxF«ÝÜc×¼`tÔF&f‡€ê„È#¦(H»'Ò;F+6ÌY9~Åj³u:DxŠ òM9x^ë_欯ù›Ü{ ¤QÀ´Üä/ÕPŽ)zæ ±ÝfF^›²¹çü¡=©µJkx~ Ò 9¯nå¸J¨ë?LÅ1-Ç=í9×þ.#¿»àÀ¤A«>¬¾¿Äñ!exí‡xf‚ (ßNšÝA*Æ‹Rç½k]µ Ñ|çØžquÚÀçâuBðjÅòé³¼^¢tSVÈÿAÃ#ª•Þì­3 éoª|R[ÍØ2˱ֻHYyÌù¿×_N#ÑI¨D xäa‡æ¦lÜ÷1ûýÕ€ ï›Q'zË'~K²noY½gß‘§qcü­o'Ÿ‡Ug"òãåÒÈŠù±´ý$¯òøyÏ"s#[ýEŽ ¡½ÆÓ5$É}dR^û^ÛB–e@2Ý>mªòq¨÷öòŸlû´z`rðúwñRI¢•LЇòÿÓðˆjJ ßs¨þø›’ô£‡_é}éÊ„ {ú-—P§îØ™|pšö‘q^–ôêÃBÁ ÏÒ­²+»¦îØT•[‰È¿OA3!å±ÐñºÚéÞ™¸DÎ?)Û—¯¤à~•¦:*Q:W–[×(Ö„‘«›×’B¯xID+]~Ý“ð=Iž-ÔrÈBQm/¦å "¢ZÙçˆj+‘½ ˆVzšDmënÊD˜v]—ÜÌøbb?bφ”Á›ÆÉµ\^[-GïZîBÃÒ㱇Ï8dðò³BØ›ÖùIËMþRÝ6äSÇŒYë}ƒ‡KÌ@—æ¨Ì"À F˜ÉQ¥½Ñƒm%t³o-ŽbO<”ßV’¡Yí7J^TœõÍúª"!‘’p†Ç‰T1ຈ³“I¿á×Q½A2ÈV,xrµ+ŒáãRgmþfD5Šý„ukÔû t×a?Zå;m¬µó½ FÕ«ª(?¾„5J·êu$ŽaëÌ(7.ÙfŒ×u(nÑãü~Cuj[N¨°¤Û‹\g" w rÞBá@#æ¿‘²Ýi©ÅjÙíÝW ÂÑf)çä÷CŒæLÒ2 õP†ñÛ[£‰ê$iêX©¸opÏ4—3+~ØDf”ÛÌ­ßô–O–3 ÛÑ¿M`™Š 0i¯â{/ï?oÁ ù’ET#[ Y`¡X]»ß²…ÛbyŒªò"´ÖÌ K ѪöF]–w{þˆñ÷+Ly|§nëÔ­¥çe÷FØìš‘z¿o‰°ãå¼…b?‡r02« îÉ^½ÒØßÊZtn¦&ˆ*àPZ1*øö,:„œ‰ˆleB*@©²YŠ33Ž›Þ5ùÔK­~?dR&¶ T@EQ*`«# 4 µ ùÿÌrnô‘éc,6>:ë=Õ}˨‡Ç;ÓåÈ>ËÿÃD[ˆlº<Š¢‚(7Iz[bäa\ë ÅqÚ*‡ÞËŒ œi/ïoeï>%F§&–ÝÓ“·Q¥Yg†Ì~=l”!|Yrþ@†‚iÅ®­¹Ú¶jÖ3Ó$:˜©PÌ:§ç”× ‡§X%ÇãȆR1Ç,A…*z,c%Géi9PùJߢÈ\†{ PÌ:g²Qžjƒ´œL²EìÚ‡;b*“j%<ò“Ò3ÎÒ€48¢?úÈêB‹%XUk,<3Û¦výÁë?uY»fØïU²”'TkåF~y.ÚX5®÷ y„.QI¡àýÁ™»[mµ Ú´¯"ü–‰(%Š/Ù¾a{íDÊy &,·Œ©ZÊ{xÌúdó.©è7´ü¢AuQ àöŽOè,)yH09A@p(×E\TÑ[.e»Gsâ;p¿–‹LWš¯E0¢ÂÚ©xÖíac¾¹-‚òÚŠ“Ú~Qñ¨ÈÃÄE3&pÒËÒ§]Ü¥¯CáDò_”sè=¦q(ICÙ‘tfâ`ÍÕ-£Ä(à#ª!€ª Š›óB ÿtuÊÝ¥]ž©p}²dXÛ ÈPΡW¸ÆáQF U7xœÎx ŽÜì «rÑΔ÷‹¬ÐÜÞ¨¤9Ú»UÕÐÒ1çON2ëpR‡„Š uùPÎ!ÈRÎ!C`Ök Qè­Þ«%–뇦ÔJ"I$6ééšlv“ol,&TT*Æ;—rüϫ嘩åë:…:¦¥õ}ûN·¤$W]ý–«K”‰É—»ÑüàQ¦'ÒK©µmÃ:*ÞQ꺉š ÑóEÅ/®çîîÑ Ž†ƒ@ PÎ!?˜´2Aåú\½ñx¤©æ±( nù‚ šc^¥‰€úÑzðTÀöFÙ& îåãoß.f0rX,»´´Ïž÷ñÉÒÒÂ~´¼oP‡x«d¥îxÝ;¤UZÚô ;ÊmMòógÝÙëÓûKEÇ´\±>À½jÛªÖƒ]F¦VYi>ƒkhXÕz¨’é‹@40p¼BÚÓ_‰¹7j9rùqàBVX53ë2¥˜b^ÔS½gSܘ¨W÷ŽdÍ´hÝ@0ð¿ÔALY1-¿ëîþÖήÂü´yäHLee†·|^ôÝé™éÚ¶Û[;L1mîsåm­L0KýK9ÇÖÄ´Sñ‡®ZUÛb醅…“ƒï©©e³ÔÒ3¿|u¨gLMMX£ ¿¥7{3ý°6¬ùÊð·k~Î{8aÌ*'·uXƒ»ÓE6ô]óŸ‘óÔD\bÌ0ï_'6Õ¡:;û߿ޤ·g¾—r‘á²i¸ÿS¢Ïnk?õØrÈ;{ÿªíïÆ 2#ÊDÅ)Ì¡[6¶½f¾ÿžp,ÑDVœ•œ§ýÇá]ã,)Âø“‹æ®Øî4¶/3=Ã`Ñéõ½´>?g™.þ\qdûµqÜù7{›î‚Zø’sS+öùÿïðÄMu¨[Ö¬_迬 Ÿ­ÎVZ´KÏ hÛö­m ™ÿÒí찦ˆáÿÖoüнÛ.«V ßXI”O}Ã×·O°"U|e¿‘uuþdEÁYÂ3z¥¿ï.(6(°ï«s«Äf'(Þ,ã>½¸Þ‰}©À;K/Ar4ÊYú<}KS±¡0ÏNÏA]­µ0›¢}‘ÎïÍм&“®Síäg¯Ò«>üƒºbÒ¯Ê)@ÚÆ)ÿæ±L,” ‹…ÅE‚¢"aa¿ &2-üíÇ ëœbiN9…sS ÍÊ ôèÍ-jÿ©›ÞM_;52 ôö%G튿)îÝçM© ~ZÔNÔv˜Ñ› 6»J¥ûØ~*:ÛЄµü½ó€k}ãxÒÒE ì!C¦Š[PANÄ}îqŠz¢žznQÏy.T¸ÏÃùWÀp/E”½÷¥Œî6ÿ„¢êx¿ŸŠéÛ$oš¾É/Ï›¼ÏÏ÷˵·Þæ)öHÿ2ò;ªÁÂäƒcƸxõ¿Žª§G [NŸnã•Ù‰—[ÉJÄõµ¤“§ü>|8„\>}ÀÃû0¦ÄÒ’‡‹ûLX·9ÛX¾ê¾ zö6ßè þè_ŸäÝ}¥¦Ap¬DŒ)öSŒ&1èªJÄÎCFS¦—Μ^1À~æ^(a±æŒMZ¯ºfáçsá ‡ë©nckŸBu½jå=ª~£Q=vöÄôX¦Í¢Å¹û*(Ê^ëĆñ‡FœüëM±YI‡ò½¢N§C R{ZëÒÿ”<8·^Th•Ê–}x´8ÀG`Žj=e“ÕŽj¹ÕöÖ:ª­÷á냋:~0¥½ý 7Æi×Y»/îÛîãnoUS˼ØÄØsU(¼ñ‡8õÞžsTúŸ|»Þ½ºc”e¿»~'[ÅšÙðìKd™ÓK/±Ü#Î Þûבw8/”¨‘Ã| nÛ4±òâ±[.ð7]u=V ‰NvN7Qb‡ŸX³ç9O• q‹9ÚîëÇnœ´Ÿ;ïÆ•X×/j÷ˆQç˜Küþõ´¡€Öäðµhp89Õ÷z"¤Ä9æOF§ÑͲ²ïd q<>õqØüˆðJÍ*ÜÞne‰jâLOë}Ÿ{%`ÛMU²nOZÿÆv£ê› Yddıï-[–î@È˯êmNs^  $]#ªÂT‚ Ÿ”‹ © ¼BÞº'µ²â¯[-ÜÄs…OËYÕzŒNË–¥<¡Œ2rBPîF¯ÖeÀ‹L‰ŒHýypÐ(­ˆxµ{J·î9=:³º™5¸ÿ[åBZ6¹÷”aÑ UÈ×ììÞé냶hÄ—Õ üØÌ¼‚чB ìr¼Ý¦Ì¾Ð+dÆGÉ×qLk½·wÞweÕdzC%†¡ï~%º¶²GØÕ€ŠÅˆUÿ.·­'Ûˆ¸*õîÕ ý>&M†æÂ„nÄ®zrv4zµ!)º>£óÛ-›gv¡A]¬£ÎM»µùüñ%LÙ†Iòýç/z7íæ©¡8© [Õgê3ÎÎæJ‚¥Ü ÓuWÎ2…9|Õ™CXk<†Õ²ÜÅ_ÀJf‚Ü®é%R½@œÚè’;~¶…®$U¬5"96N¡§È@¯3‰Rrâ”Ñþ×§O5¨Ô?tzÿ»Qïú– =³ýœÒ*-ëXö:4¤É>t@ÿÅ¨Š Ú·'%$ Zží³_JÆÎIöµÑ¿IQ5kÆ´ybuœá:¤Òõ £ò†ûØÔ+[VÌmG^¹†xî‚pò$2‰ÒËÚÞñM*é¦jåë°|„ó8ÿ±ÿ³[¾V¾ÊJÌa¡²f>µdcu·ãW. õvqŠhïÊᨆ¨hjÛÿ¶|ˆ‰:ÎxÁ"Ó׸3ôU¯Š¤ßžVh>§éÓ©0?®”i¥EÄî…_L¾b°öeùB{Ƈœ e&j0 V¿u׿›7)±ü´ç)ê®Ý4ªõÏìâdLºT¯³¡Ûž}™uU‘ç"î\Ò=óa§,Òæ?çùÍÝ÷þ܇ÛýÛ¯òZþkÉ9ÈÓ’H caQ7iº±>ÅêIYϘœý^ôË©$]{Ƕ¢ˆhØ>/Õ•”°ÚxÄ…3|ßȺc]sýo÷£5ËõÆŽ’r‹N½;ó84‰»;M“5!tòï¦;ÏщÕf3WA±Ûz8¦è|+ËÔ kÔg/ˆiiUöh\.ÓòV¹"RVæ^<§¢*ÀN‰È:³ÈU6©Ê´6Œ…Nç‰Ø!/œŸ¯~©c1§ÒÍE¦ßØÓp›.€jšQý®à µ‰=»¤c4Wºÿ—”,ìßOÜßÕrÙG²þù^Xÿ¼ÑP¿‚LÄ,A]ÿ¾EД—اºhƒ€ävTƒ fÿ]»ß-š;õ²2¯Xù77pTCÊÜŒ.‹>uà±Ã*›˜'ÐéÓû/ä°ýjMÒ$•™Éwÿoñüº#XáêÃíö,·±—³»{êø©+×v{º¡º|¥7kçâ´OôÍáXÃŽ_+^¶hºÅÒRç9;çt B†¢{»wø=¬©‹¢á¸|Ý8"D²^ú¿ÛWϘq”©L"’ŠNÏI‹&t¤éœ¯ïs¸ÿÕ5ú Wö—“s@ SpÚ9D` {ÙõÌ.g«’ ЗO,„h[S¡HÌÈXZˆ¥Ò?Ã|^–ý7‘4!hà“Øý"óŠ’á¼a0]®¸ÀŠB úqyýþy©¥¥Ñë7FUïà5LÎsh`P- .Ø•×Q +Tw\~ÞñG´Z÷UY«jÞõ]-k½lrÒ¼}çuðÖ¬ƒµoì6†Õ&6ÝkúþOlgÙ£ tb͸s5»™ÇŸÌðóË2_™s‰j©AÀkX¹}}dÂFjç¶ñ¢[ã§òÏ>üêcî:îýw¾´ ç€æQÕhI²"Ò’¬½]_KŸt¿sud‰àJqZ·p' WY¡(46Êv§÷íq8%þÁn~=XØ©!>¡ÊÞþÇÚÓüu«ëžŸ—hg àG‚6âvmÿh ¥þƒÕ'>ƒÈ6ŸÝØ]þ“EmFŒ ô+%·\k.n«Çoûúg’s¤2îüÆåk}fèÆ®:~xaO:°’l¥ˆ ¼,j•_Z£å…8í°ØIZlò‰Dª­Á‹ù´n$ëÚ˜;ö&»ä%ÿbߤè‘Qî•}VŒ?*K:[ÿIõ±kÍóóô:UCãš]¸qøÑaº7ø¯¾2ü´r^ñêømµ9I—Í%o}¦Ÿ¸µwì®.`ÙuõñCkÍC×|‹yp?È#çRö3¯áãü,|ûº|ȲÇ|;׿Ej9Ò{M6F§m#lŸuŠ”H ¾z›nÞK#,œq&½®¬â%éÁÐÿRÞwNû‹>UŠoø™‘ßQ ï2ké€ÝÙ)#ìãs§vi˜á¦õôÜßUýäÀZ 5”•smð=¶Í³¢AVÛøŸ?0gåp=*ÌÓ­/çO·l ç@áS ý0i¨Ç±¼Ç“µq +Ü·ƒj94·4 ÝÑU†šú¯µßé–£Ò®˜¼ìd‘ÐäÞ=õœ ¡±q ‹}Óäú¹^>¦`éÒ›hSäwT£v^v¸³, å—Òk¡“zK»Ÿ7OƒxчÌßå|9Ø=ÀeÄë¿N_¬ÏòÉ9•Øj q9ªå¨¢#ÚÛ1”©)FËã“ΟZX™,ÌóŸïõî4k7“À€ ýð‹"‡£Z-å¯.§÷›çз¬¿`ž†B±]pêf÷=?ºÊ{þΪ¾ @n9ÇlB¼Ügì{V¤Ñ{ù©€¿h‚Ûç-©è×Ã8f>È^ yÉ–¹ýÛ~p<¾þâõÛú¸kìZÚ–N¾4öÏü‘ƒ|¤ž?à×D.GµZ*¯äYÔIÎDl°YI"cn¤D„à‰Χ_4O«Y­ë´¾‡GŒ¹ù'Ðr€¼çyY[}¾jîUË£ñe)‡,/Ï_ù¬òs'Å*RæXû·Tv.uJ²×)µs¼‡P®Á×hîÌÌF~ãöSŸ>éjß²Á\ÉO_=¡‚¨Žœ¿C¤£M}þÅe‹ó5µÛSy—ÇÆfhí?kX^s|öðÊ[šïÙsæÃ RÆÕ‚žJÐèsTs·ù Þ‘þÅC'[’ä\=ɰ++ëatªçUI/òµ{Öât§Keª‚àÕ½Ô>×m/L¿¼5l̉ ›NÄrWÎyñiS—6  Z:]íq@ü'Œ½Ò“y¡¨ÀÚ¿ºjTË¡¹¥Ð1æ…ιgݯ˜e·'e·kîJŒ\¾qû1o•ö¦èDZiÚ1µ{o†!X`iAÌÈþâ²ì"¦¢v{fª"mÍ͇‚Öþs"sTÓÒ+º²i©ç®»ï³+kÕlÏ5ëÏÀŽ»ÉÕdó¿»U1ÊÍ´‰Öˆp^X¼`Ñ’Ã2[³E‹½_qˆdµè¤Gù¦I“›úû–âYÇ=­Ð A¿µæiØ<Ÿ}` U*FzjiÛ‡ü'š_¤º;IT”\ÆtÐÆ"!¢¶•:çßâ²Â¡G¸ìš=äÁØ\jn-iãó‹¢jÿƪ —icbO¶¿† õcñRªj‹­—)·43N¸ 8ž’œrãk¾ƒ$uWt±kddø‡ð§>¸w²¾‘¡°05ôùæÎýÂMJÂ}o×ÃV_Èe¡yRT{†f©†vq[ ¹,4x›jh"2±hÓg;Ú·fm9¸¸¹NL нZûOuÑGµêùûlÿ¯O“kªy²½ÞJjŠ{-û÷þ²†!»Åt9ÍÓ(¶ž‰žÕłҖÔÌÜÏòȹ<ºb.E_èA>p”¨í·RµcÕ£|?y•’Ù ¡»Ëëfœà2BЪå¡÷<¿þ;àMæl÷4ê«»@5î‰ó}¢û?3ËþÙþÇŽOçpE%}¡ZnÞ!±w;*áè Õò~®UmßÞP G_¨–έ½-kÿEOÃr=Œ ÜÏòÈ9AÓŒ^š/„Ô‰Âü¸š©Æ'ú8Ûøjýû©½Eª.%•´«0þŠ““¯cÕR 9Á{߃›“—1-^l–·J[åhã ¼11ÿ­üPrN±Õ§lÞ¾ài{íÞíû—Ó÷„%å{¼|V`í-Ru)©”ÁÿšûÐé¡ß^»WIÅ­îø—¸¥¢´¢fy« º¢v; +°½%%Ý­ü0rNÝT}¿”AÝ-hdAimj8×F°£¾œ@ˆªˆÛ./:#¢[…V¡¸ú>}d;:ᾊaʈð[ÀÏ'çU^µý™ÿ|r&,+œØWß¾ˆQ…÷<}ȼR* >rt 2¦J…©ž¾AæØÇzÇæ¹Gµè°,TËGÜîsÃõ©‘þw< ᜠ~ø9å\öH#ÓúÑy¢a%Ø}Æ!ªD;ù‰GèÓøéƒ“ˆ&-‚PQ?Ùâ¢q9ªå¨¢Wnݾ¡ßZhÓâó¹}]+dI§.麷öž ԡĵxÛæ;5ð+ 8ªZNÎkÓÈÙ½[æ<åˆSŽÀ,³…!S¹dÝx–ð%x¼ˆBæµþ¨TÑt‹Éo‰ÁMÛ¼ÍÅ -~1jÕÖaŽjâ¦Õíæ\ØÍÜÒ»z{×*^ÿÎ1ùæ¼Ã_pT£ØzúD©âJ°D°Rna…éº+~žÀ  Ÿœ×¥‘ Ï§‘|=pIߨ"®/,oÿþU¯¤•;ÛÙ]^ËF©ÅÆÛ¨ÙZVQ#7Œ,Jʱ¹F'ù~›*X@Ì¿â¼Û«]¦†ùÈQ ý¨ÎQM”|xì²2¯iœ¬Ç^UëÆù$Ë“Ù胣Ô¤£Zdz~ÒQ Vsøs^áŽ}ïy’»ÛýÛ¯šjJ?àË4/ àö4’¯T²ê¿#zB¬[ÃQ »öÆg~õ1wç à¨OΛ¤ªÖäèz €¥ŠÙ¥ª¥ê$ ð ß)õÕjSÊ`¥_)¹åZÓ3Õß ç€t‹°i‹Úo\Ï€À§{Æ·ñpT8 üÀ&í@³bF° ZWËo‘†»áÂ_ÃdPXèqã†Mzz›ÕŽÖµüòåJjv§YKT<?9| h\.›('CjÕI \_½j›ªmÓÒЫ£‚)ŒP£c çÌŠ@Î_µãk7£ó ¸zªviÙ‡×]7T’ ª›Ð<à~ø)÷Î[©•%.ü5:Á®M¡šÏd¶MÕZl¶lB)U§ƒ#%§€_ðý³wï^°šF.ïµªÈøÀÂ/ ‘&o?¦œ§'á’b[`œUÈ5…¥D°³ó ¹ÖÖ•j ÞØ+æBA<ö7oÞi—.®mP5ïN))› ÔTÍѳMŠjßö{þámª›¸›Ûi…Ô{&ÿŒ[»<ÇZ«nÞ·¬Ü××WžÙ¾v¤e3դ짻=×W1È<¨ã‚C›Fè7ú^Ò²ÞK7<³ÔøÊ'W+ö¥ìËÞ¼jÿÕ²ž[áåødó¡—oî'вnFa–kP­÷:qA|¤ d¸jEì…­Ûþ—AT!"b Ä%M<¶4mÇá¨Üˆ«þYƒoDŸqe4¢.W"šoFÕùØ+;¦êçg&o?¦œ›KÑ×·áG)ÌÝeצm+¼Ö´u­£ z6o%Š_§èjbO¶³oC÷n·AÍy–ÚIÕÇœ*ar^±úwó‰m¼Ð ˆþÃgu œ©˜ª{A líï—ko½ÍSì‘þejÕÆè+q_¯u¿¾[ôþîäjG5·‡Sµ ÎŽ¸ðÎÓ+Ãü7[f\° [cK¬x¼tà?»›3 êŸ5yo·MûÏ<›:§Ã¥ ˆbëás‚Yºš²~¾ ¶Ùë¥å©£·¦³—ÍïÃáÉ& Hœyfê¤+®—¯l·P†!A¢Ïˆµbt ÞûS}ç³ÆMŽ¿øœ=dnó]„S10éÄ~R9|5’aC±—7ó Ûè¶zcl|tÄ×W¯”……%-9³—V:9‚Ÿ¨vTë)›¬vTËýਸ਼·ÖQm½ wX‚R=#L`¨ó_^‹ãÎ4P«œóËy<¨„+…H´Þkÿ—ÑQÕBVÿñJ^/ÙÇ1¥9÷ŸšŒÙFM'÷nâˆ$ÕbÚPu®ÿxÜ_ GŒ×jâ¡åj﵂ÉÁÕÞkp÷ÚÁY˜_ˇ\4uwµnúcÿÓÇÿžOÔÕ¬,ôOàÏ7§Ù.8u³ûž¿Ý åŒ=gU_:V ž5hÕžž6±õºÐ¹Q'%8Þxºª‹Š0î¤Ú D‚?–œƒ¬p-ˆ2_Yˆ*&1œ”T%®?PqÞíunËÓ¦䍯ÄpTƒðêýÖžë‡É!çÎä ˜¾f_qi6<`­ßl*,.¾·¼ß˜UÖñGí•!˜éà¦üÏ»"ƒøD‡3>ýI¯£F^x:œf½õJ ‚–ý63¤æô‹w°mìdí¦!U{¯ùÍÝ÷þ܇˜÷šw÷Úǹh„‰G'¯Ë˜pþmpWzÑ¥‘Ý.Ô®‚ÖuZßÃ#ÆÜü“þ™qN*}ö‡nõ»¼e…o ‡],긄†-è» Tk+9(‹p Jö„ʹ¤ ü@]X^s|öðÊ[šïÙsæÃ ôÅÕ‚žJ Iµ£š»M½Îdì·õïœ×5hU½X1dÖÿ²ÄØå€žŽ2,©é›Gãú‘Ê!—ý‹ôÓþŒò‘mço°¹»öD,W¶˜0÷îžMûÎÄz$•#B4 ª§fú‡æJ>uǼע×lÞæu§Ëê Ÿñ^dGOœÚÇN(û0MP'óé—·†91!bSÝ64çöt·Ë&‹¶ïñ=î»Ç5í O$´¢*:´¬œ q z8HL/€Ÿ¨A~G5Þ{Ÿ‡bÊ9Å4û¿ïú iÂs†9¶,|Á//Ê–Œ:u¨gí0ªÝ xë¥~ëžc“²ïÛz:´Ú{miòÌõžŽL„×töðæM'(©’$\Z‡î¤ççc Uã]b·À…ìb~„ï;_XÒäqy½×Tí×{™{N÷ØX•¤ÍÔ„]¹_{SÿçcöO¿¡gœ¶`øHöõ+m‰ù!;v\ON¨ñˆ£YÍÚ²¨3$å—Fž]ãy]XÅ-¯ì¾{«ƒ*hF@ÎY9ç+—•ŸãLr`˜ˆp; E=1zj@`å0+ÆSö@)ÛBZAÎiùü|ð5Èï¨Féø‡ÏgGÍÑFŽøÄ1ß}sP÷ú‘4ÃqÙnôÕhà$Lm?iç¹Iõ‹VÔÛÛ%·Ò–ÔÿðËÞkMoå¼ÓÁójßíð–ýß- ѳz¢CP]-Ú×zlì7"¨è㯠LÞ€œÿªÑyš2·›4}$³aõ0Ó)Ô‡à\H3 )šŽŠ Ýû0ï7„×òw×Eô3/Âv\cAúÁy=ú×T NŠOÜú"3¼¡Ò4~sì¸È˜n‡ß5ry¯µÀä Èù¯ðTLÕÙz‘Žª¦,®ÎèDLÁI­¤Uª¤ WqT¶„§Õ Ñy—ŽÒ]£»Î8“^OãËýóÈsÝ]ŽS¥©ÉqóCã¦wêA?ðJ;ä¼Í WÒ3•òð¦9è„ßKZ¬‰ãË ‰uuÿ:’!U^kÔ-bäð¢˜+±t³ˆTDÀãHd‚*x,€œ>³‚-I–BÄl+V3EÊÚÈ„\ —T™(E>Jê',œáûK‹g,ßà tµsÀ伜ÉSBco‰ ¥^•—1 —ÂhŒ I`"QZ£n)‰Eb¥r3ÐÚ”Yg¹JD¼—ïþ I8Á¤Ðàç“s=¦aT0r•„…¬ásaáÒ°>v¡ ‚¿Q­!A¤"@ŠZ)^·V³‰­L€ Ë?Â(ö Û½ÏÉ›´?8ü|r²Âµ êê8%Þ=¼I º?‘òÞh€Ž#zÒB3ë OFÊJù­´£­T­ã*“ȹ¨ô@8ÏÅNÛœ |ý>#…Ê2=5€_„&Õ$É÷.^¼q÷ܿ廲‚ë,Ëš²YkˆT.K4qNЮ>‡ODvš1mÌ_›fZ‘¡O-/ç€D§D‡G(#iì8CÜÞÒôÞ­\{P¨ ^ë9$p÷½]3\ æ¢šµö¿÷‰BK[o…k;ÐÓøUhÒQ .JwŸ¿Aë™ßÁzÂß”ÍZƒ{VòZ¢)é [½[úøÊïu× M@οk ,â“¶ý³ç÷}töêïvÚŒX”¬;t èÐ ü4€_Ž&Õ¨&.C!ˆ“ÕHø›°Y£Ö›á[,Ñ€–—ó&ìw-šP­œX®Á×hûªq0®¯†ãÃâ‡õ'¨‰½ë;ª5‰¸)›µú ¾Î °‹ÐU3IMõ|¥œËÒ ¢n|ì‘–åÚ¼H-Gz¯ÉƘœ‹Ôª*HæQÝØ]^·ý–8k¸–ä¨QêFŽjMŸ ›´Y«ÇW[¢•ÿfq`azÈð& ALøŠ°­Ys'Å*rl²kÿêªQ-‡æ–†KG§él}ýtZ…VasWbf6ò+ªfDtSÊ1¬{«nó²à[ÄnîzŠó5µÛSây3ÈÆfhí?kXÞ„£Z“|Öf ã[-Ñ€–Îå&= gn­°v©ÀÚ¿ºj4.Cÿ›[Šîê~a½ƒ{ßw.ëÙÜ•¹$'_oîRèuÈÛ}n¸>… ¡Ø›lýU*=w÷ ȹ:ËxN³ÖÃ.bjh+d·g¤(™Z‰ÕÞÌ͇ÆÄü´öŸ¦ÕòpŸõ§ËÓjÄl~ß¶°£rS6k ×­Ãnó[;׬œˆ–§Eó°'Û·ïk\´®œ£G¸ìš=äÁØ\ÚÆG»kÿöªQE¿ÆQóJiJÅÌ ¨9rnl4ÐÌ 32rp ==$9å†üËŠõ2Q-G½ GÓ*Ý-êýû¢È…Ófâa¹Â/TÈe¡yRT{†fi[ŠzF²RJ<Ö8ïß$™‰M-ÛTÔÛ·fm=ps;˜{´ö¶©½jjÚQ­û¢ýÝ¡ÆNbMÙ¬5BnK´NLJ­>5ª×­©Bà+÷øAí£0»nôoÛ_¹+°öo¯:ì\:ë”äì Â1œK‰l¤9¨é!¡÷0Côo³´¼NÑt‹ÿó‘ Û^b=œa¥j­CÖ ) –sqTÂÍ;$bqj‡Ä6ÐQ ï?œN ÛXËQP  œ‰N ÛXËôÖþµƒ32Ð*ÑùÇÙcÛ§ÀÚ¿ºjì®ùÜRè“!ÔÚ§Ê(gT±©* n³Vò=í5¿nŽ¡ókËwpï“rst½iÓŒ¦O;6Hk0Nî+9Eõ´£´HO»^ÊË) –UR¾šÞ½½ýõ•å ö´ÿ ­(ZÎëùæ>¦놫}œN±—Ï ¬ý««.x\¦uŒÙk²1'PiGC¬Q)áª4s%é¡_§å²{çý¦-Ïv~¥·W”_îrvÐø³W³ÿ7N‚ü1º¢v»‘i ȹcõæI{”%:鯖>}3Æ1N>ؤ¤[ µ€JÎon«1Ê×N6ƒa ¤2ÒN¶}ªß§ ªV-`¡Z.ÖËD§-&Ñã(lÚAHøoí¾õ¿§Ì¨5˜N ÿTûŽ}½òvÌC¶„®m²r¼Ó|Cì2ô‚ƒ-ú–J%8¼ˆLâ‚äwà§•s’†x¹ÏØ÷¬H£÷òSÐf™-•´"–×^ªØ6Õ5Ýn寀FAâÃB£ßô‡ìrõNÞ»ÑjóOµ…'ã ³fN¾ .|vo¢ßk‡X¹0såùûX¶z¼æÕaƒ3@Ó?¯œW<_5÷ªåÑø »wËœç¯qÊQì›–† i<Ý"r±–àE¨ )-$Âf¸yý>uô@š¿›®{3¯óG—e}oðd’ófüSdëÌîΟNb+­ =3óiz1ÕøÏ±36›ª4µøéÃÖÝ}‚Mé^Ø2b˜üžd½Ý¿éÉ&í»[Z¦M½6Ø€FÔZ:]mT@<ϱ윖ÇRÂjR u¸:ŠÚü`%†æž5»çzÌ5¥šu"¶§>{FLÏWõq’?­ŸÕþ蘨ŸIoôIe^âòÊ#ñg…²"#È#ŠuxÙ»¼ë.ACMèÛ„ô“ƒvÏÃD}kÔW~CDùì}–Q—ŽõògJ *1VVyñ),q‡<`ø‹#¿£Ú'lÖ^¥G5ÀwAõéWT”\Æ´¨N;LÔ¶Rç$‹ÀžiÚ#•b®E:5GÁ¿º5Îò¸í†`¯¥=”&º2Ïúòò™gÿ3:’×ܵI*s½TŽlª/î‘hQB\­‹Ó`ÙÀÜi)-°¨5š"Ž{úÛ;Í=cÚ±ª3~¸¿I1æI”D•VñqºÊZEÀuPë¨váêõ«;µ}ǯÍÃNƒÕŽjÓŒñõ†’6YØ€jGµsíÖŸ?ÊïßÓÿnèÊ/—9ª-`;ÿÂ*áÅçìêE«ÍÓØÒÑvÖÉv“…À7D瀶‚Iµ+“4B싺)vK`Mx°W?hÕFÇéUG»¯530C i×ô-I ºö¹½q$Ì9v7]Ë©ÇhÞAÒás²_TÌctQÁ®ñ*–ʼ³U¨øZô[!·îŽ SÙµ ïpµšô]ÔÜYþO D¸2M³‹ý¬AO; Žjä¦ ëÕßWtNÐ4£—&äc· óãJh¦°gZ »*õ r1ÏWü9íÕÓ9ž•kf½žù-áŒ%ÒѦ>}.ï*¤‚{cb,;-ÕSÂIi\…pB„ÏïÞ¦²{“;ýƒh§[öÝ0yÆÌÓ–sxJSB@Ô5™GµuŸtTû"ÕŽj– Õ´ HUrªÅ4'u«ÿxܵ…Mˆ€]X*@ä(šS,Gõ)›·/xÚ^»wûþåô=a nœ·ÆRŽkOͳ+o§Ø-!fd ,-FNs£Ó=r=œE3¶u÷@Kˆééò®BÌñ‹ç„Ç?¶»_Sâû꣧äjÁkjPØE•BˆJ”TÆs)¦Ô–}P»5´ˆMß’8{Ï:êåÚà“WGµ/ÕßœS7U·d]t·@ÛM¤µ©á\ÁŽj1`2âã£ú¿-+¢Óã DJйå!46Ry„erÔÓKß.{òèI:D¶·—ûŠ úá¸Ú0eÆ™ôi3>¡å( +ã2ÿGÁ]GÚå>:ËowL³e;dÏÐ5Ä48@SayỦÓüMwÜ?×+Æ£ç®)÷N÷SýºV‡9ª¹®=1#ðk¬¿]˜{÷àñhâ‘T¬ƒ]¯JrüÆy†æNœ¢†HZYΫ¼jÈüóÉ™°¬p^`_µ úEE×ýŸÛ¯¨ ðÔœ22F?yrÊÕ5[S³í·¤ªwo­m;i×8£G9êX?Ö¸æå7Ç~xøxíd¤¯üÑEƇjP¸ïí¦†«}U£a‡mÎÌÚ½®TÙh±Uû79)p;SÇÆs}¨=YçÛìáju-ûÖmâæ­ÐhÃÍ›×ììÞé냶¨AnGµâ&mÖê¯ 8ª¾9—ýÒÈ´ D±xöíÛ·{ôJ2Ö¹šØs {ÄÇϺsgû¤Im£K)äìCôÿXL÷´oOJHÌ+ؾ|Ã֔˗ /¬³^9Pk ÁMÇâMFêsYŸ¯§:xÈ¢œ!ÕÓi)/ým´ó½© »ÙÍ:èeÔljÔ®¸xIh¨·‹ Pt@ ÍpTkÚf­ÀQ ð=É9H#ÓFXff–ªª¾²´4æhI¨œ£Ó=ãâ,³²¢Ú)àV:ßÊ25èõÙ bZZ•ƒ}UoûqdrçÒ î]ÜôÞûˆÊ¡É†S†i à[àaŠ'÷w‡ÜZߨðÚe%«c¿¸,ÌåâCïá’S¥æ¦—åÃöÜXÅêKë9ÉPööå…Ì‚Geßnm´†Q‘‘@ÎÀÏ.ç L[¡Ááäh`â½8z—4îI$<–h–•)j“¤drÅgr®+1cª\=óï‡=ÂsÂn+Ýß—´g¤Î¨:£¬Ô¬ëͤoÿåè«î­,:5þèĽ{O? 16–ØXïÃ+Vñ.—vê(ûÕrÜ<öKBÕrtšéKM¿c»z´§f%ºh~àg—óê42ÒÈü‹¥‘rÞ ÑhÖ脪”Ð#¹{>’§éë'~g#Y ¿Õ¥c`œúîg¦¥cآו,ãKΚýõ²ºóS =<¬å_[bÜíÁ[‹ 4Y΃ֶ·Âzìs²ÞÔïio2Èy´#—£Z.\¿V4å7ÙG¿ó”‰“¹¯d1:ºH(Rž³ýñŸ”‚œ¸Ä œ´Spâ¡þ PŸäšmÈ¡g…ÀO/瀶"ÁÐpôÓ§=âã_YZv(µ½fumôƒ Fee‚Áw¸µnVz¶Z´W^Åt9`=K¿wÕ™ç×öq½ñ¦ùO^Yv¤u´£w±V³Ö%ëááO>lQRróáÚÌð¨„ûtŸ2ÛUô>ý–ÖŸíã [Ë—–ãCî!††2-ˆEÑÅ©1èp7(ìäÔ÷¸~z©8C‚ˆSuâlÌ9V¿“ætsìÁHFÙÞ } h~àg—óº42êDF¦U*):töíÛ¨¢ç34î›”¨•¼<é:¼æ98WŠc>†Õ²a˜„Tv—u‚¤0„!Fž‘ÁT¤l´T¯ 7ëxŸÕwñù7 ãßNK5 ­ìp¬ÓÔŽý©1åÑï8‘7ò®íIú§XP¬KÑ5Vng@1`‘µ˜&È` "ƒâ3×óñQ ᪓c Ó·B6±LìË„lYeìFi v8QâÍŒ«Ä½.+ßÄÇ‹‡Ž–T¾g;–íµà8ä XJ'Cš]ÛñÅ9:º.}5‡Ûª[‘_P þåÏÀk_‘HÇ2T­ÕÄÖ®¼ëþÄ¿·!Qñ™*äkvvQàÆ9øùå\Ž42éI¸¤ØxÜ=äšÂ®ìì¼B®)r_» 8 ›x9š§ù.T#7qtJ„÷˜ò%¶ç­dˆ³Ž%åüfб Eš’sg[n_·ŽfPÉ…×WTuÜÎèªåæõ˜Ð^·¹ã¶’¢ÚË–/ïlu $ð œþg˜IÇ#$tCm Kôõ4ýT¤$Êde¢¯lÍìïQ“«j-¤£ê‡tðÚv긔Dúè÷TYÔME6ikÄ4LæpH&Ó D ‹Éùø,*ä²ÐÜÅå`zzHròõ¶rYh>lر””;ññþm,ä²Ðܡ׎œÜ‡™wäZ  $ÔÄnúx,\+A Yïd:nÃ|¥Þk,­,_¥”H@kWôe„üŽjÊRN˜Ï&ŸWe8„Yétø°ƒJc¡Žj€@ÎëgAmô…äG) ¸kWì'3t“Ïéq;ޤ;î.Y Ä­®Õ#oÐ@ÛwÔ_¿)êíðéE¥I)EL–ú ã4»KËðFǰr~/I®†œ§×ôô…jyhè¢6þ⨄£/T˃‚æ¶ýnG%}¡ZþñìZ¦q7¬PZ{Óµ·QMÍpTÃÑzyîíõùË8à¨øîåüã¬pm|µÞÖ®Àª•sr+Mf;ªdNæo×Èù«WûJSåììÏhyzjÆÆåE}é ìw,‹ÂшҬÙRq9NûNÍLRF—{Ú2(oDå$ùeìÙKí &Ã<§+¸Xª*VÎD`",èBàôÁI>zÄ ‡ Åä•ãþKòÕ>ôŽN½71’µï Z;hyš×»Õv—ÏßYí ¬š«§§–ù˜ o¿‡¸ÛGxàÚ‹•”Ô*ƒOiybbÚŠ$%>z½e½êRv,²– (DKÊ¡ÁÊeÍyn ÐõÝÑ]qÍx§$«îFø3‘j‡ß#Ò^„‚eä‚ß”$ÑBÕl䣸\¸(–ö'b3á6¸’Ž¢Z~0<)Øõyǧj0hí ­£sÀ÷@i÷®æ‡ê‡ä hbez ÃgSò"^§Šq]:4õü±$*6uCy©£¾#¥V9` „‡#éKE•8µRD ò“ƒÅ±•X/Ì|!üV)ŒÖµŸ•I˜gÅÐPR©Ùç×ÑðF¸º„ÄC°ÂþJX!Áx&À’†/à²ÅŒ«RÉ"ÇF®£W[Âa(œdäׂ ¡ÂßŪA$: W@Î$$òû¿7vܰIçÎÝÊvíTRSKðSFÙ.yÿתNkôHú æWý›À«„xßaW¿W^1Ô´7N£‹”Œ38©án7i™úO¾Ï(±x©•0q 67ÑÛœ¦ªO*×®ŽRÚ ‰¸+ŒkF÷Dõðr¸²¶“œ|‘ÏÈÄ&D}I­+">•Qµ¿& ÈÞŸ,L&d¸®¾õXö~çQÒ:†ª‚aÅÈù¯G¥©iØ©ãÌ7Ô¬¬Ò®]Ð×_BòísAKˆž õ£;×û=ÕvîØhñ*.LFJGJJ™VÕ[P%›²Ö¶QOK©¬!)B¹+Âw"–ãDjòö&×ÞHÔ&áO$çJ!B¦ˆ~C¨ÜžTUïÚýèÃÀ ¨Z¶oï[Ú0rÞr ñ'—SkÞ8MÙRÏï@X6îð5ѯ[ß§ ‚”D*v°/†ìkÞ“×™C;è°±¯×#݇žºKJŒÖß \)Ì|Œ£eÃ0 ©è.-ê„Ha˜€×É©wí1Jœßà®>R©›übbxœe¥„Ë4¹Ù·ï=©•M£žN‰LÕÃz¯uÿ™=ûë'I9y¶R «ÝT6¨•ǪAÜt£fß#À%çF”Ã<4°FB˜ˆªJ`w€qO X.g›êáW$Rb¹9\¿n‰”*Õ…ÊePÕwÛÕÑDkçß8¹zLm!LJ€åÇç†+}Ìc2YÿöõfR«Vd|`azÈg3É b7têþ7Ú œ.•…€œó@ÎÛŠÓ” !ÂAÚ¦K/ ¬* >P„éýiðïž³g´ÏÌí9ûwíyiƒ`¨U¿9 'µ•f C "œVž©+.f!U£Å59mJq†×`ŽV£…x/²ˆM<¤†ÆûÇ "÷py­“ úµöÚBoo⯫åÍqT“;¶o¿4.•|,ZÒ²ÞK7<³ÔøÊ'W+ö¥ìËÞ¼jÿÕ²ž[áåødó¡—oî'вnFuš1º”x&²fâ‚øHAÈpU¹ Ù>@wº”ÞúÚ©ê|ì•Sõó3‘¬7ÇW-ÄH)óï#ð-»ð¿øî³¼ñWÿ`ˆá!á ñlß9}÷:oõØv“qc¾Ö+ŠuÆ#!ÿ=l±¨Å­Ø¸N’šÑº:H¢6ÌxAŽq&RAã|™Ê.8w•M&·oŸ•¦"Ewzy¯¨Ò$‡qÏÕIÕûüC÷¸¶˜Í ÐøßÜ‘PD0¼«$ú£Søm(zÞ‰2%¬=µ£©ùê£É%æŸ[C£ᢡ¤b[XdŽ£ÜÒ‹HÇu&V1Ñï÷¢C•N lœ+[Ìü¹Ôõ±²6„u+àÂ_“†» n*LÑM7äf8ªa­óõÞ \ìT"›Xïí¶iÿ™„­±%rBçt¸TQl=|N0KWSÖÏ·aÂ6{½´gð„-ÔɈàÍÃÿ|hî7»Ò³C*Å?Ü7‚!ž_c›áù?ÿ=»&p«øoÃJËù§=È3[µïWÑ*¤¥šõŠ„0-*‰|æ®´È(6š©Õ9 ½ÌU˜r ¼´;û‚ ÉT½›ýiËtW¬¤Q!)ªItSC”mHª*a÷˜Hå¼ÜÂç£ZNöååö&ážc%õïj“/ ¨]IŸ×òF‹`D"óôtG6»?ƒ™ÔÎX¤Tsì Z>äZ;£^¡ŠŽ¤ëv~ÚZ?‹ºà¦-Š‘óZ{ýBt2ª„_Sø«9ªõ¬ùu0Gµ\ÌQjâ‚þJœ¬´ÿ­÷Šwn>Süü›’s)¿œÇƒJ¸RˆDë½öøÑ]‹cõ¯äõ’=|Sšsÿ©É˜mÔt"±ñH‘„—²ù70dãղͲ¹wuÕ“â¡£4?¡ç¼èà æïr¾ìà2âŽõ_'/²¡|¢K‚›òï…'ñé ±i*“OŸ›o.mrqIað®]–uȺ¤ì;<6=èèk*—=ºæt+åH/e  ?Žœ×Ï ÷3[ÎÞ#D¦¸*>>dZÀéƒ:‹§\]Ûíü$3,ˆ(©ü˜ßŒ²F’M­š±Õ½Ó>áø %+t¦wš,˜ÒŽdÒZ^ŠÓº…8‰¹õg\6NYÉþôE„X7öÞ‚TóÃ˱S‚“ðÔÔûoè­¢ßóñûÈ1ݳñX÷x×›W‘òáU1èÿ˜”IÐLRWçÓät˜úš¨,„”ï)Óï=ÜAÕõ7}gÝ‚Â)¥tz†FûÔ´á÷ïû¹¹åj±°ÚŒsQ-G=¸O´C„‘ªÚŠxú›XhÍíÚ]¯VѸµ/]¡AQWèím(+Äÿº§?9ÕxÑ{Ýê㪟å×ôYÒ~gàŠûfÞÊCÔ¬G­Ü0ëé÷s'm|S>¬_IpDG·q$šÍµ‚aØüœÚi#‚ F@œ[G¿Î­æÈ·]pêf÷=?ºÊ{þΪ¾tÙ|µ·ØëÝÕF¸éýOÿ_x>QW³²Ð??ßœÖäâxÖ U{zÚÄÖëBçF8”àxãéª.*¸“jg(,бûcÉùÇYá~ pJTk—eÏ_Ÿ/©² ›nµárÍgÑ«6|Dî‡Am1’PZÞù6+bà€‘J=*‘G«2Wš‘MG1Ü­¡~f&ŠÅ™™šNo`PhÊ—ãtnÀb'I‘ ôAZˆúvŠ?‘–Hhô.Ä3ŽzaxŸHY‚£¨h¦˜k–  s˼ÈD¦÷–Œu;ðòŒ‘¢GíDÅQ:)–ëŽaíuTòý£D­ü‰¤æõå£q9ªå¡}úDØÚÈJºDÇL Ü7{f™TP*,ÍÖ~nÝ?åÊœÿz›ŒLHïŸuÍ€&…ׯoÖVßEkÕ)7Vˆþ§Uö¸^á/‡8ïö:·åiÓ?ë¨VþÈkg42ØçÏE™QeQ‡–íÖØ½¬½Þµ¡¸4°Öo6ß[ÞoÌ*ëø£öÊÌtpSþç]‘A|¢ÃˆŸ¾íUkÈ6N³^L]mÈ63¤æô‹w°mìdíOeü‚i]§õ=<"`ÌÍ?é¸× ·kÏÞµ‡`âÑÉë2&œÜ•^tid· Ÿ[ücTúìÝêwyË ß»XÔq í¾ ü!åügE*HM~t _mSuÄì}µžãäæB~Ðçƒ2 Û½¤?ŸP<îºî9Ó¬÷Z=„<ÛRhïªc0|¼½ºŽÇ‚"ÆNúÅųoß.QSËc2­33G?}zÊÕ5[Cž<îø\X''r–š5TÜ ˜V‚°ÛAMÅÎÛüõ­…Éôÿ†;¾Q©=a(Ñßè†&Å[ª¨'ÅëuÈF·ª»ÇMÆ+‘ÂÄ‚[ZŽeTû¶§dælvqÃó:ÝGÒu©¹í4®²i4™–#¤²ªâ’1ᤉ8Lï½RüÐÜ4Çö÷Ë ÓÛ‰ú¼2Kéî?îÍ®úëm\ÿ]´vBƒBôo¾š=“ðkž÷ª˜ ¦ù›î¸®WŒGÏ]Sîî×äc_jC®V–ÉâÝô›îYÞ«ÑeÕ‹Cö<ÃPIMOGN®m¿´®#•w\ö'ðÐþŒòU²¹®=1#ðkìJW˜{÷àñhâ‘T¬ƒ-'Éñçš;qŠþ'Ö"L¿¼5l̉ ›N˜üó»µò'º¡ÙƧö1¤‹³ƒ¦ š¹8çöt·Ëó^œñ`Â’¬cÎÝ|"; P ä\a‡pÝ@5¢šñÔáÓ—ü4q ¦åÛéi«Ë¬ˆi6e“·8¬VUsÁ½-2Ž(t cÇ¿¤†¾`grõíJLV^|q»GÏW²e{$$̺sgûĉ_ŽÑaòKª~°†ê:·VÚ€æã›âФzÜùfð«´"ïÞ½ûâ<'N„ê:Û%…!^î3ö=+Òè½üTÀß4Ás?'E4šÓûŒ¡¥}¡R#H ¸‚BBá‰îYIZéíŠËµ„ZR žF+§£i%%¡¡Åªª¹ †mvö¸°0_—,õÆÙØPGµUñÐ.,—k¿AOóu O"”JÙÎ{íèãîü—¬«bB)W¡ÉÑÐâh•ë‘Yl„YÖ….¤«IÔ(0E¨,°i:<ê•ôW ™¬ Â)ý7ÚmJ@`×è¨| Mí¢"TËýF»5çBh6d2YÓHWΙeç£Šç«æ^µ<d÷n™óü•C"N9þLboÝ¿»…ÃydßÍþƒ×YXÿº9= G?{Ö#!»w®‘ÔHcã«_!é?Ÿ-áeÐ2^˜¿(Ñ/ѩԡKé, }¼r®Ð*ëfÔ´˜\#Õ»søë²IOw}õJïÄ™Nª”]ºD6š¡ÉîñBÛçârTËÑÅÃÌkŠ÷JJšwïÞ&ww™š’ùdFÇlj±WzÕé|1½àlÿÃùYR› =MÐPUѹ*J.ñªZ–˜Æ’ªàzÅò{ÈŧÝMâÌTĸÂrÚc÷ËÚÞv{‰Ý×.­»)žÇbyÏže–ž®YZšll„Æåß­–ËZ;¤ Ùçð‹·và—¢ú”Ä‹|L›úÿöά‰k ò¾¥¸\A¯ ÒV¯Úº@«hõq¡"µˆô*ŠU¯‚[©Ö «‚¸ànµŠ­õj­Ö↢¥XwPQÙÂ!É` $*‰$ßûÌ3œ9™93ósf¾ùÏœ9ÿ±¡m-œ9“ÍGý»¬o–žœáß·~Ý7J–Î~|m×V_ÿ© {« Ñ¶ þåÉ“}32žÙØ8äåY•”l>ì¥m1ù«#áèvÓÍ2DzD\rÏþ^ 7%Ñ9±²ý.]ˊʰyæ2*¹]rß»Mî¨ÛÇӎ—¥…%!§NEª è7Ëè’gjZ£åR‚ZN½ÒÚ¥„È,ÜÉ67-`[Ä6™‘s“JveÕœ!f0%Lr.KxÝLⳋÚa`ÅFDÿŒë×ÚqjÅäTì”?2Èϳî®wìWOØ‘k÷Lh$R+…TQ99Ñ„[e­ó*»g}LJP(e¶E66Å6Ï,È’_ÐVö{§\'³§f4 ­îÀÊì~ŽCeà‘qò":]ó–þ"µÕs6A”“:ñû*†?«*Aˆ ß2ùN“Ä• —ϼ…ŽÙ©©Ú>C>ÿ¦¢žeýµŠ·Âþˉ¶ >+ϱ·Ï©N¨ìŽjKätÌÉ!r˜¥Ì÷þæ´¾äå÷ûø5Ÿq­ ˆ^HÐø­˜`𠓨¬j¢ £ªéÐR Á¯}(¤Jsaž˜H-2D ¦¨º†Ùgºíc—±¼*‹©4)ƒ.e0$ ¦ÔØLʲ—Øô,4|óîÉÆXK­¥¬ª&r:á*>ɳ÷;®üñRï:Ÿ“bÛ¡¼º•¡ü¬E 'Û95•gb\s|§÷bgÍjwïžM^^r§N:t µ¼ùÆ©$wýŽ×öf½ ´îè+/©t*ä߬ÓJÃ+ˆ²ä¹?Nµ™tuQWFÅ­¥^‡ó¶|³N¾±Max„÷óø ß“N>TÛ¼öxöãkò9ŽmÝfÌÑök:üHïÍw´÷!q&ÿn°4p»SàTwO?ç&71îëe”\Ïì’¾½…W.*)9(ÿÅj«µb"ÖZIÉËí_ãœ{VNò«©²ñ»é4*gÛ‚ÅÒo³7kmˆˆh¾ï6_ûÜÉ£Ò†™Ô¨Æÿe8g*1v„³ì#PV÷Y«B?ì–¨­òɯ«"6nŠKu ðÿl>ï‹êñª”f ÀTýòuè+9¯®£®#?(œ¶ö7ÿ5îikãùƹ²ôǃ†.ÞµÕW>gð°oP?4Óò |RkGø9'yV¥“¢IE…/f~RÏì GS«d“òÙcÇSãwK»u¥ÜL7ÊÊ*?t@-7@PÛÕB£ˆj¤„oŒUýQµº!ÑhŽ> WKo˜¾.ª®4¥™4¢Ù {qhö~Ô–Q£¾àZäY÷›³ýè‡úÔ­ÛÅÛjÂÙSËŸd¥‘žÊ a‹]:CýPŸç‰…œZ¿™œ“Š›“XHø5±•ØÇ»üx=r¹ä¯ Uƒ£©Y²Ä­GYÚuêïgîÜ$þh´¼ÉÚNÉmœú ¶+G£ˆjÂôï?rþüZaëÓ¿‹ü´mýñÝß0$oš~@Tΰ—žéëûdòGN«x+´ßÆ®ŒŒq—_¬R_?µ6$œiwÕ dKü©˜ðÁ¿CÍÚ>/†1cÎEX£qšŽ¨fÜeÊRž•¯§ðì’Ñ3&»¸ÿ6¥­|ïÉŠ™¯MZ^ð²ÔÄΚ©4ê^[ÎÀ P+¢³ÃØyªS­>]¶ÖíH†`J[sù^7$ZÑo¹f=<ý‰ÒL4¼È94é–«QM*•R(Ù&w¯´õtRè¬öæ!Ñh u{¶ÃRÃBíˆjÄE¬Iʯ”a^¾MØž¯¸ŠŽ¼º!Ѻ¯ît"jSMád!Ò˪z¶¯\«˜ €šôlÃÁtàÎ|AÝRôÙß>!ëûÈ-VÓujÔ¶©M”Fa»LˆÚ;A>+ìU’Õmö‰³«“n[}n%öë«,UšÝF°ÐÒiÌ;gS0в弴6°.th©r†Œ …!¨õjÐèÙPtÐâAÏv€aé.è%ÙzTZ5§Pj²´,¿.!Ÿ©–ß–B‘Wô€à`&µý—+ƒ»51@Rò05ÛÒÍÕRý1cJþ òŠ}þð°·5œ¤øÑ=}GFŠ54ð¡@´œÔ`™ ËÏeù »aºNÂåó«Ù¹qãÚuªµ¼2/uÿÒéãfÆ\+ktÌ⢬,~å[4‚Dðèו3üBÖË(£NðÎú‚Lƒ)M¹¥òë¨J+Ci«»T˜}açÆÝç‹:úÎøvwKQz#z~ô‰ýû…¼#oþ|»‚¨` X5¹=­ 9nÑ÷—ÊÌŒ A.ß~ôŠÈ ²Wy|–XH$ZV¿)p ½”pý›Ðð­¢ÍÏO¼½uîÜÈm•dzà½hžB™c¹é?,ÿ!ã}ÿætjñ?÷MÆoÚ8½3‹Æé?{]Ñˇ¶ü7 Ëêß“§îåWrÚÄ××7--­y]þWUieØ Œ½(&ê ¾.-J‹¿è€Eàúȉ}ìèÕyì^!ß­s¾¹×ÿÇ›‘û¶Î¶–­/Î92#$Íÿøvo[#BZš´àƒ1+»]_6ÿÊO8× »â¶lÆ¡=ªRÆ]¦®˜ydß•eò%ÇvòÞ_°9Ø•%ÉŽÔ'"Éïà@Ùàót»^:s÷, ýºt˦žfôK³ôlÿç6µS5ßèpï{â0;Ì®eÜÝÝ_ãï¼5öÚ‰ïÚk)yº­C¯Ÿ3m䃵PÌÝ¿Ú÷çwNÆ,›¾ÁÈmüÌ)Ã;™ÊÞa²{õ¡uö—¦î=zãäA‡¯6ð¸œè!·ç¦Q(³ênÕ®5‹ºýB¤¡+îí]žÞyÒ¬˜éN,¸äúÀ[èÙ.?*y…“Ïìdúô1ºs'‰–¯vîÝ`Of‡Ùµâo²¹ß’•üàäsÍsâÀ¶ ¢âAÂþª—Ó>”šˆj ;SÝFµ«Ž¨æÉ®ri"'x§LœX–kÉmäk8†½ç”ež„øå™¨¹{ÎÕÄIcÙöŸ·xl{Áì2çPÄÊ…[¬M˜ &Îjí1!d\³¾sç8†N:ßÚŒ&5â [8ÎcÑÒ®Á~l©"qIaizÌ’8Ë¡yGÕ/Óáþöśɜ˜ð]®<‹KjÓQþ“6n‡ ê6¶“×69‘ùÇ#EÚ?JîÝ`Of‡Ùµ¿wrž™™Ùì{R?¢ZõSÂ<ÍJ§Ú þú{rjÙÎ7â€oƒõ-=8¹ ^VûÉ1'&×.Ô¶³~à­P¦ë”èS¢k:®?1y= r®6:l‚ÓíÞ öÄav˜]Ëp¹\ÑøjAAA111Í}0=譜˟u…÷n°'³ÃìÚ'<<œœ7¢èÚÑrÞ0f; ¥Òˆ¢CË¡1Ûú¦èÐr`€¨Ù³ƒ¼Þ]E——sh9s@ËVth9ƒÆvÀ»®èOŸ>…–ðúrÎn¶øÁ >ÐrÞHÎåG…ƒ¥Z€BÁ¸¤¼–œ«)Õú¡èMŽM€ÞÀžÎhqu)†màM¼sU1x<žì[òy9((Ƽ¡¡¡®®®²ûLff&—Ë…_€:¬Y³F39WŠÂÈÉ2i×3"+'$$èåi Cn&u~ qÔì5"»Ähª~#Ÿ¦ ¡iÚØØX~<@s#»±4©è¿<’’’Ò¯_¿GzÃhÀñõõUp85öÎeZSt¥è§X¸pann®P(„œÃÄÝÝ]£õiÐrÀ;¥è¤–ïÚµËÑÑ‘ÅbÙÚÚÂVÀ0QÕ­M) …-¼SЍ ð ëÀe@¥w-¼ Š~ð—#ò*¾'vywzòäIee%¹hccÓ«W/ò'(:Ðoúª+çÓ¦M‹…ùÚWt…1\e*ž››{õêÕ‚‚‰¤&þºT*‰D—/_=z4äè7\.—Çã5Ù'½.œAœË è-Ó0¶JZZÚ¹sçH§R©2‹ÅüjH}È!#FŒ€Ý€! 4L°ªËçUc; s-'qsssppHHHHNN …²A4ÍÂÂ"22ÒÚÚ~9€¢7¼|êu…ƒ¢t«åDm77;;;ÒA¿uë‹Å255¥Ó餮“뇅…ÁtŠÞðòQüP ŠС–×ñüùóôôtRËÙl6飓rN.ÊZà0dEWzù(FŠЭ–“p8œÈÈȽ{÷’úmnnîèèØ£G´´(ºªËGù ¯†]X£îÚÑr¢¶ÉÝÊÊJ~Wt…Ï@êɹ‰´B ,NâZ‚ø!> stream xڽˎã6ìÞ¯ðÄ#êiAE»@{[`nEÞIr[ûÿ—êAR”"Of€v10Æ‘(Šï—— ,*ýÁô|\·¸¼}_~,ÚÄ5lF×]çWíè”[ƒ Ë l\¸ üòÇ÷¸üöÏòuùõuyù¢—¸F¯ýòz_ èuó>µFc–×ë_g¥tPÊîéÙ”r>=æ²¥eë/'mcz«”º§ÿi¾]þ~ýsùýõ½†°:³= 7WzÒ5Nô¡Co#ÞŸ®p®½gzÔ®{.cuZÒ(PGR06A‚÷v?-…ð® lkÔæ½V±0UQŸ´SÏX¿T!ÇÊ]>KÆó߯GØ•EÊ!éJEȤŸÌjÀ¦qK”k¢¼`¸œÒÖ©ŒU.uÅ@}tº_ßÎ4Ê27 Þ&î¡— ¾f£¸ø|b+”½|±’&€¸ú¬òJLæ ?æNÌ*åc{7ßê~B­à­­g¿±êe@mëß–U`L¢5:] 8Ÿ-êpÕ˜{3‹HÛðÄž…Ï¢!uzZuçJí4L去Ÿt‚>¤p=URæý¤õ¶Úâ¯fu– u¦8ôS©¸"€=Ù“>ï3%úm5Îÿ§JÌëÁN•Øqí6bÆMí+®`?OšEÍ’=ù8#esùµ3'å^•Œ~ª“`Ïh2¶8Äèùh*?˜  SÁi*wTúf×èrˆ«Ó)3ò,xÂø—0¨æß\tÆZ¦iwAVt X)%ƒ ¨#fšŽqzçƒr¸Nš©·E ¾%hAsªqˆfÓÓœÅi|ÎjwáB¼šþ$Ô]*7ÞdHҟȈ‡ìmïV5¿Ý›åo¼8EÕb¯8Š leVD£[ÝeÙS$ò$?6ýN05\«´úF‚ $X?c'R…Fùë.ä+ Boî,¬ê*CÿL=A÷,`â‰ö¨”¬7déo™Fm±b1ý½542|/UóTÔ–/çæ–`HÍþúV¨®iaG#ñ?&˜tRí|[`‡¨ZÌc=Ú›¬!ƒš¢Xä‰A.dÈ Ê·|gwŸB‚ (Aßã Ý|£ØÔu·fJE&¹$ø q"W³ ž9Í&YÙE ©Ñê![Ú3ùFß¡™¹ÞC%Z¡=¢mÞŽÖÒܯ’sr®¢Ø„•=4"x³A[’~çî„ýã«Uô®>•W+CM¹ÿ‘V‚C»éå2Úׯ]¼®61 ê6wŒù†C§!§kfݲ©6a͉çäòòÅ˲5u°A‰ú>­mWˆ¡Á´ÊeVd»Õzó³êÿI§;SmÝJ”˜ˆÌÐ:Ž~CI3-]‹p9aô[é)DMï§Ú¬ít¤ ÌöH;°…<ú”v¨x¤Ç“IŠ‘›Ò&XVÆÀ% \Û£¯IÖ\@ŠkËuÚ‰–á;ÜmpíÇѬ"ãœØ?q²KÚȱ¹fÓ”òÚ°B„Ó8g`Œ$M0=;V„Ü>se×ñ]‚à„ÃÙ4æï‰e¥úܬtk–U|¨–ªñ˜ 74$ã¨Dâ¨+-PEì†z·u£Tp…:‹+¯¤’ºû0ÁRs™a1µ3Ö›è^bǃkÅ%–Ò¹6¾åˆFù!Yp¹u—ÁÌ2%…Fì\q•†B“ßáûq4í/©Š 8'EoöžSñÔÆ`5öynqÛl~ƒØ;«÷áȯ½Ý­Àv´ui*êÕ‡øÍ‚rV Âw.Ðuk•ÚÙÂ?·T™~ƒ’±CÁi›ì¸6ðhñ Ù¾1¢nFFÔOK^F„”`V«¡ïxÈ”ýY޼˜Q…ƒËË+l—º±6ýV$Ö1ÚÊ [Ï9Á ^^gt‚ÐÛ‡¾ğqm”×÷2´á bÚyåŽpN ÿM›><ûÄÀ>•”~¨™ûÏÔmxê6¬(Žv_9W‰hÛÆKÃäŒÓdQâõ ×Í J «ßÌÏú,Š!1$C9Ò*PF·“éÙ˜¬{£ájGÈä~\wlgÑ in”vœ!˱JÓD#ba&åJg(èÃz.Ži`—~ó¡hCÓêbtí¬¦Áii}` Zf/Y6šŸuˆÀCªÃ‘ç0÷áùYë5Eµ1”.yoØÐ|Ï».§>²”:á_‰~¸ñ)JøÛŽÇ(@áÓŒy´çØœr®Lºñ]×þTÜ-ïNg Ü9gååeù¸ TÌ«‡i8ñ­UAV*N»”ÄO5þªëµ©ñWç!LÃl`Žd[ؘN2aš @‰ÊŽ¿õÔÕö)Ž—ä€D))]àAö£oÙV–”S%j[ }Rñ<í¦_˜“[¯Î»åäSEkÈŸÖÁѱ¯¿ü ì|W endstream endobj 407 0 obj <>/Filter/FlateDecode/Length 58120>> stream xÚì@SOÇßzlc£»Å@$ÄF0ÀVìÄÄnì»°õo·b+Š*!"ÝÍ`ƒÕû¿QFmïóß¾ÛÅïÝÝ÷ݽ{÷ƒ mò̆ BFáÑÀ ´u€œä@Û“óü{eûÞÏoý¬‰,!ÑÓŽ‹Væw?ïý?˜ •ÚxëøG,à_‘s1VhpÀ“Õk‹Xò š °u¶@7?;^Í x”ëVú§–hÞÕ"/ß•VÇ÷inIߨs`N\Ý߬'!”Œ±ë¼]ÇWöVÁÖùýʄꉰɨZR1öæÉ¿ß̹¿k†NÝ·À\J|¹ýØÒ'K6êã¶|¿Ð_U5›vcò ëƒï_h Ío#:K÷ZUZ›²Ú¬Û¾¸zKý¥nÐh§·ÆˆÅa×\ÊLTºeäA×6ZùŸàìûc:îêø¼ Õ• ( ýÉ9‚ŒãÕÖ«ß­¹€„xŒÔÏ—Ž?Aÿ룱ªX`IÛÈHeαC¥*òÝoÕ Ç­¢RqIbyÇ·Û/Æõž§[¥°¢Olù`´õ€J+W#’’5çÂŽ'‹.U(Cãe=Ú|‰ÓI‘$Y&šaúéijÌ#•Lr3?=yñD1ÝÇJ1/ãé‘Ï&³öibA? ˆUÎ뺪­X{åô•G^%“ ‡®>zzQwÙf­­ƒ ¿Ÿœé¹öR8¤7`¶[6¯JÒ¡óý´ù#Ý72øFó@“T»NÚ½ÚßæÆOÆXUi~B§çL]þ[$ßÑsãq¿iæT•2Þ¨µ¡«·éS¿ÿ²xd£!k.œšgôÚE¦É¨6Ìçg ‹·Ù³#×C38Rºý½pù³Í{Ã¥O),’ÑÐõWNyYK£êýykä.Iùpé܃I ˆ¬ÞÍmÜX;UªžðÊmÞ·»¯½û]‘5mÜÆx8iQ-4Ìöd±“o¯™î}üu\$o=fýa_¯ÎÔ†jë õ#7Ž9ðuÊÞ®ä ä¿ó=É›x¿—LA•!]í³@üºÌb"áú—MÈ@•“tÿxlÏÙö2(¨øÛêîËOßÓ©Ák#¼ñä5”Í›Îý´ÈÇ¿ŠðßøÑz­OÑòkuÖôƒ5JÍ7Îzk/½ÇGîDÑ®ÆÎóëXžg˜ùû¿e3Öœx—ÌÕì·þÜé•v²è¦˜¨ÏœNk|y‡/~=ÈU¿K;ómâå/‡»(~Ü=bäd¿þ_W6;BÛ°4§>¹tÈV…ñyïH·¾Vç†l8˜ÒM™ÿqĤ#ý>-3Ä×÷óVÈIÜÍ#rí§l÷Ö€ß:~â¦ÚŠ1zø:Ã+÷çþÅ/r£–mµ’Gåýùð%¹DKŸØrµX˜Â¾_;ëšæþ ä¡ºè”÷w_ -êl/ÝйÓü…êÛﯸ>J¹´Sç¦ÜØþÒtù3TXÿIìîÖ£xu`:ÇJŽûoËÚ€Ev#”yéï^Ûm3JrÐJn«‡ï½ïÃôC”‚·»ŽŒºäª¼ny=‰Öj#ùˆq¾Ÿ˜v3ò|g":ÿž_yäŒ/k/ s.âŽ-5öîîë?‹ìz¢šb"9§Ùv 6=H3]›ýûiŒî½?O£™n]±q7NÅõÜà$jèLãëjøÛ©e³ Û¤öXIÁÓ!coý¾l }=æ9b䪎Ÿt'%H´œç½%SÙ!;^Ÿ_ó Œïg¯ gÝ[ì¤|­ã¸íËOÙ_úÎèÓS˜ª]-r¨|$ ;—4ûá|;5äOös.òïú¶…ŠÉc¦…\]¾%Úr“ ÉyØù{äÙØ©Jšsqй°]=l«þ‚b½î€—‚¤{Ξo¾ßÿ2nBÊKÚ  ù°ò9¼Ð‘?iIµ1×zëîQæÙk•4óõÿÍ\fÈ©çç-”ÿª°’?†âíç;ëË ÕÆÀqŒcðÁ d=]¨®ð¿Ê„EóŠr2² hj FöcŒšj½rΩ LaQX†“ð;.]Õ\×i¶Ÿ“píCs„OŸÝ‹OGCT‚ŠžÜ?è¸[µû5‚Obo‹‘V‡C ¼T3¯ž‹á¤¿ì>ƒôíAzÇ9–BΗ£Èæ,ÑpÚx{ÕÇÇj-ý`Mk¸æÔ€l¾lÏô.5–Œ0Bý¯cgÞ_欋4ËQÛ,K/§›b"”Œí´þéËÿ‹›´,=jÍ »?¤r¬XÏf<Ø8ç7t¦8u4|ÁíôHs [O¥ƪ$ƒ…ʲÚsί .þß·wïNRd9¯qÓ÷ïu}ì̘„ŸÇ;P6ýmÙ½ò9Â%+øŽrN|¡BoÕò–FP3W!4[Îÿ6]šá 9þçG«!= ;7±H±¯*¡2!Å¢ …—ÂòXܦe þ{çõØCS“©ÈN ‡£©Òþ~ÄrKóSßÏ[(ÿUá岤MiåuKS—.‰eðã­+¼‚îàýïß½{üNj¡”^ÏÑ“ÛÈa›f½Ò9öš_¦°äî[þ[±nÝêakÂ3elg<¿m¤^µ¢Ú/›Ž´ç­×±ÞÔü—»®Pç>èJ¢! ¨6Ãõ?ÏÑ~5óØ´g¾×bGv}cäÑEø ,¬ö˜5Î[8ÿéþï¾ûÇha¡°F·>¬¼Ž|-c³sâ Õ-a"J§™ƒ ']ŽgùºØvE÷>éÌ-aiöÁЇ\îLæL±ëhø‚Ûi³ [O¥ƪxÓŠ¬âU;(}Èe´õÉvœ¼®–ÕÖ' øwöZœ¬%+"•5LŽßZX©?ÓJÍ—ÃÍVS¬¬&93<µd˜¿§(Iù‘IÒ”A !L³llšfÃüVûysò&Ëâé©ùœŽd~µáä'Óñ²$¤s†ëÿ+ªh’¾ãHoÇ‘pIÖ·ë‡/Ýíh1IŸÐúµ»Za1r=æz6ç¯èÏíE.^k†ºœ³§ Þ`ÂkûÍ7’ìz?ÙÔuÍ~]œpgl7DÉ÷ὓ𣯹¡ísúaV¨ÒUòX_‚’uZ6ÕyúQã¡öUGºõœúZ§U[åpr:”Ì)åM ™&’2Ÿ4}âF|²é(CY£~¦I—/¹.äâɺ~í݆mzƒb¥UÍjY[’@3©ãÔqÜ3w<Ê)a¥…ÜÞ>ÑûuA3òB²ïZtÄÛ/(ÉL{xoLH0%|Æ÷xFsõ”l1Î¥ððüïS™ÌÔw~óýŠyZ3]ÖRh)6öçÍÌ?A­‹EÉ›«/ÿä³Ùù¿ß\yÍ²èÆŸt¬+¼’⨛gÿH¦³y FA"Y:T£°/—LÚzÿ{“ £1˜Æä­0`Õðô½ûÎíñË·´·Jȳ€UqÀ=³ä eÂpŠžûx‚¿÷)î@'•Æ]BãMÖ†Á¬¯kMñÂ$*ä)&uœèÁ>æµëe|aqö÷««|ÞÑ›a"‚Ñè‰RWÜ¥ºX’QÒ.Ô{«®S'5$4¯á×ÕN[ưMmPŒßû˳úá¨÷†Û 0Óhó£sHÊríý£[ç­ê¡žKéõµ}¯´p?xG™Fé¾ýÆê鞃U—Iéõ÷šÖáÓ·ê2Üyö4™áV2[PŽWs›³MºÇ®›ëfO¡¶:’µ·á¿vŒӚ’úï×eÂ悂–Ë5ˆz³\.?¹ì"©usæQ6Æ®+¼²»×¶5»ypÍ©\.NÎ¸çø :"š×(,Õfr¯;‹]tG%±¥´{Í8v¦;Eøšn1k™ZÇÉþÝü#L‰Â7¼öÀÞÔM†iá ¬–ûDý;{ ÐÁ·LñêJ´z©ë®Î›ïì^<}šÁÆ4HkÀÆs'ÉÈ(¾É&Â錘n¶þð€nrh-ß­¿&‘5}„ŽÐ£Öº~]í´õ +Dƒ¢šO¶|5Moy,“b2zËÕm`@RR@8À†3I8H =€­Kçk¶Ô ^`ä-›„ˆjNÆ$yjÄ{æÜ!{Ëö‰“ŒKQذž*$Æt%ªæ´¡¬ “[0U h»€ÉvÚ6`²€ösÄ Ü8 ­&Û@âÉ¿7P¶ïýüVû> íÓÀ®pd¾|øŽTŽRWÊv?õj/JaÄ¥õKV{_"c1|ʼnÃsºÉ ÜŒ÷I{3ì–œ¾µ©·"¦Z¤0=üºū¿IdS úÍÚwbí U¬Àø¥!ˆ—´wÎü­×æ@õÒMU¦ñ2˜¥»]¢¨4¸ jI?åOÙ39Èéû{ÿ6•i ¨ÕàßfR«-³›ì1ÿÆ”þðƒwM7`¿žc3Žsüç1GšÈÝ~×è4ÚIëf§ì]½öؽ‰ «`1Àså–•£MÉ’oÉš‘´ÜI M-X±'GØ/fKx8¨fŠ%±—OYt*8‹Qî:É÷ü®±º„v×À±Â4~>4·Gå]+bC·èù{ŸxDv+úš!7äÐÄ‘£·Ø…ïê$E¿bÆ “£‘¬B÷š½|À×ÓÕ6‹,üâÿVséËÔ;jÅQ×—ºOYÞ;會Àø!NâÙq#*ny–<ÊJ‘ÐÈî‚›¶ÝöÂW~«íŒg;^6%†6­âe]¶0·¹ yu"Q×1•çEì&Ø2üÕj˸[}¾¹=Oöæíî=rc°‡OèÒ[ÚkƒìhbjZ},µax9ç:r?xå«‹…2®0áó#ÿÇ? :è$ù–¬ìÃ[|ï<º@¡©©ù&×ôr) ôôÀu ™Ÿ¿;@>óÑr—«ÜÝ.;ICí ¬PZ^FèiÆàK¶Tþø×Ù÷‚sYpIM|ofó’EÞ~Có¼Ó_“†WöžHr+’é`SÕôÒN;Žó+'Ìâàñ)¶ŽøY1W|Ãì†yZË5¡·ÀñdÉ·ß§¤§µbû–ò*ÞÀIl¿Ò.™S’£åeÂÎÙ0k·åÁeîÚPh¤=q³ž®ß›=öÊxm¬Ä˜ºø×¹ù#] +¶ôÜsÝoœ!‘¯.Zë­½ô¹Ewºšót@áýµcæø½ME©;/9aU/Œ¤ŒÌã.­yÜñÄçMÃK5‰hàà¹ÉÁ³T#Këù4£e²—ÂvÙ”ú}ó¦Y.7¼²êõ€ú”›g?3õ=vß;=Õ´´Ãåf½ZÓoÁáWiDÓñ'ï£)ì.úÂYŒ“\—Õz£ªChªË9'ñÊÜÙ‘“oîÃÏ[ À?2N^W™˜‡‚P¥U äÚ£¼Fì W~•tä6aÜmkRÉ¿ý =VuD†á…™¿óäz¨ðcÀ«˜ÊçûgÕ2ýßib÷õA;눿86(…Bûo°ÆààB>+.]Xn/'üÝ~ÜãTBù™¥ ðØÆÇÐ&$¼¶Šÿ³ZIÞÍ…ªB.öŒ•e¦ÎlÐ_‘Áó ’Žó´'6{è!v­¶Lè¾ÊÇ|X/õýÎ[¿nšo¹ñKg1:!©æâÈñjÖéŒ)KC\‰|eµÅu”‹¯¦jòg¿ßÍ^v-æ‚©<ÅM»:veâ„{qOt ž.w›¹Ë-l‡Q2ª 3úu¢Ž{º\½¢¨«(8n¼¹èÖxU ÄIº¶=°óÚí¦Ø×E‘UçGï<~Æ¥~e¥fD~ î|‘óûÞŒ¾Ëw† 9Ø•$¤%ù$Öo1\Úõ˜±QY­?ª:„¦Zð—]㩸?A3icǦö‰W\ïÒÍX©øø®>ÁO-‰í°KÄ ¥å¬0oYj¶¬Wû§¿2ªzÛfD7új罯‡( )•üi™=þõî “'û ZjT–fÍøyÜâŒtëó!~Z '' º×õû& ¡ïx0—C…[uÑP,Oqeì×mºš~Œ¡­ˆ™ÀAê¿ åõ¿K懩Ï2H“ä á¼â¬ÈÇ['xy´ü¸ÔPÀ÷¤Œ½þ ÷âýÒ.»wãMØ“émE¸ùÒs?x÷Ä #Qw’5¦ˆ žŒøe´à?gMY´ú¢EÆVw"‹J…Òuå†fe*Éø~ëeÔ½‡6·¦—éN¯äÈJ;÷¿·¢«¸aÄéznp`ö0mÖÐ÷cû²F]¨ˆ€(]Ìï¥!‹V[°Àète©»{{÷Ѧ¡ —QFóe²…¶$t¾c|ýc7dF᳊îŒÔ%4Ü´»s½BÆ_ºà$‹¦Ng svô‰Ǥw¼›†HÉđӎº.2hw}$V¨!]ú&_ι©Îô«âú.øºs¸û1=¯¹©–Nà dr¢ÒX<ž•‘MÓW<­ÂJë8Ïcìwþ³\ÎkÆS2ÔéÒÍÓFI¥è9Õt‹R1$¼ÃŽk¡Ø­µäŽÆåýf(#!¦9_C[µ·cª*SwIQ³ëbÌ[eÒ Í ‰ fCV,>tîRLñRÃzÚrÑ—}k¾Úowñ·çÉ‹ =ÎÃ7½à@{ÕtW -E#U*Ì#[í?[+qÕZÊÀ^=î^PÎè! ¨²[Ñ¥÷¡« ÐíW.ëµéö¼£äwuV<± B…UKªÚÅq¥184̃•“-FoÐŒÂgUˆ3R[h*)ütÔ?ä¿©ìÌò€Û2}k®¿cüzþGoâøÎŠ”Âø)ú›ÏF3Û¡œ£k7{í\sSé?œ„ë‡#læR«°&/7pÝ@×£¾¯yTÞ—‘2Ò3ïüÞ§II{ýó퇚Ԙi§¿Ý°òBH:“Eåw(B­§nùjÅDå}áü—ÌÂŒ¯çOE*uÓnÌE4êÕ~j¹<”¼99nl mWêþ…¥ìe%âªÂ)iæ*{Õó5ýOÀ¾?Umu‰õ´eNÂÅ•eú T@UQ Xì…$™ 4Š:xàUr^Ò«ýû~¹˜Ôž^&Y·‰÷]}é{6³0îù¾É _HÌIÂéŽYïédÒ6èhô\Ÿm\ mEÌêQš×ž½Á±Ê%Ð\ªÄß©]~«Üymai«Ô–Ùλ}cÌ ÿirø¿·ÒÜë&ö¡9Vsìé’·•ÈÈÈUó ¡ðŒfô æª ë<À¤P˜H0܈ò( X h 9¯±ÑAåê†"hMOõ.XðËÒš”% BÚ«Dœt=V˜+ÑY ®Ï}Žør%È=ØsUNMbÎU½NSÄi+An“𙫙3g;v¬e‡õMži´$!­––sÁСgÐN5\°4ä—¥)Orðð˸&ڤ볒 \‰ÐJôúÜçˆ-WÝóPÄ«Ò Z$ Wu;M_®ºM6WcŒŠŠ:~ü8rP¿¢ûö­5Êsûöíõë׃´@Z˜V Zaÿrf$yz÷פiöóžH}s+’YáË¡F h¨H"@¢Nº±¹¥•ø^ Ö ³V!SÔù^ Š~ó½ˆ=W|÷<‹œõ©8 ¶Ô=ß=ØsUéàáÒr¼®„œAɬWån“özZWq`ØŒ\!Znbb‚ ŠŽŒÑëI™H$¶F ÒiIlZ-::;*†Œk¸`„ðËÒJ°Å—tcs%+5è>GĹªíž§@̹ìàAΠ0NSDœ+n“„ÏUZ^Fƒct¤'-..M ÒiIBZÍ“óºî—Ú"MpŸÓÚÔvÏ#ÞüãàA\†ÊiŠˆä6©IÕÐrá½ö¯šFƒs› -–$¤Õ 9¯ôQ_8EˆÕrÛ ¤_–V Ò‰:éFçJ´VªÇ}Žsŧ†{±æª.x ±UNSÄ•+n“o+Z.¤¢C-ñôšðkš@Z -IH j•{çR&TÓmCƒ~YZФ¡HÔI76W¢´R½îsÄ–+îyÄ›«º<ˆÝVtš"¶\ t›ÔÈ\գ啊^ÿ}tउr^~Éo O–ñx“÷z” žŒê{? •†úBçÓôf…{Þ^æ¶¡Ô—CiàÈS ¾iÒ_Ë“†¶AUò#‚tÿþU •åꯕÊ•[/We¾Wƒ¸ žZäR/[=/¦ñÄŸ+jïÁšÏgÑd©¦?5¯pÏ#î\5¢^‰4WKݣѨ–^¯¬ª9Mg®äøn“îºëJkô=D®pzÔˆ\mذáÊ•+ëBMM ù&èÁ€JZâA5mÚú>ukõ0Œò€²@¤;è«,Ò'¿Ë’Þ¿Ÿè³C,Vh%¹ª´Ò?›+k¯3½ÎHZ®þVø*®ÀÜÜzù¼Lðij®|||„OKøÛŠ"FàEOko`W5Q¤%vï…`CÀ•sh#ˆÌ}m]JÓª T#òÖV»2ÏËâT åÍ’óÚ›õ͹­oݹë&þä ä äªy1“>´t†¿•rµÚ¾­• .%(+¸hRo½´jœ¾ö!« ÖɶRFl£ZB#4aŽ14㊫¨ož½t€{‰+õúÊî#¾¤yE—z åJDUNòjû܇kÁ›ëùÂÚ«7mßÒ”¨…è š\Û‘®fÆŒBfdÑ¢E-õ,åp¶•Òñ€(S©'‰–Ú·µ2žÊ³Sã½ù—"l‹F‹±ƒûøÁ¡Øä\Œe¯ÙÿÙÔÅ[ð3‰;AõɹïŽ]M”óV.»ššš·Ï£¢¢Z¤¿™6HBZ*Îö4Ó^ÏÕO˦UOT-r&![‡@«týõ±üHK`TýŽ´¸p¼UFçÈåvtx ,G¸#¶=\¬¬|îˆÓÖb,»“þ—S—ð‚·jöÄ[v@û¸«­å$žï@…g´þ½õ.&Zénˆ°r®cÈC^Íoá}‡°ÅU9vmغÔg•ûVq•]¼fÿgSoÁ¡cPƒ©·^öÄ\v@ÛòÒa2 Q>vU-¯zÌhk÷Öžlªÿ]¶—u—ôOû¦ñ¹ÃVupWzó_hù×ôltS>DzUoɼ´íø«ø‹á+NžÓM F\Z¿dõ±jÀ´€rÑ']cÄÜÒÛÚ7°BX´j¹l/ ß?q'Ýëyìt­„ƒnƒ>Zù§'þÜlÝçý´²À¡î¾æ;nE_3䆚8rô»ð]ØÁ'Q§Õ”’Ð2Wv •O©Õè©k´TZMøH«â4¡Ä%ꢦ·øº~Ë–½@G´u¸l/Ž Î02ÁFIZ¹óè^XNfrqõÀÞæXª‘‰ ™¢ÞcÒD“¢ßÙl¢:û^X7̺z`¡¬7k—}Z{*T…δ#T]g´ÎÒ}QnÐâ€I2à˜—»l?9A3ïW§<”¨i-qöâ׬ÂÌë/èÜäÕ*x²Ì˜ÏÌÏ;ñ/ýû+“Íÿ}ˆßþ„ž)Õ"dÐÒâZCÑQ­£å¢”·êœ7s ½Sî²ýÜ'Y4+#:½¢+$˜/<å…ÚÕS[ºÃ¢¦Ú²ƒnægg~ØéJ‹ÚÞ‹øYA‰ˆEÃŒˆÃãF_í¼÷È¥ÊC``éRk€´$6-Š.‚[é©ýÊÙîÚï-r¡ –ÂíA.ÛË®æeí×ÞKZ‹ˆsîý‘Ö_»éÑDj‡qwž}~iÉŸ»ÝÞ V ¿¡Ojìy}ÈMµâQU¸àëÎáîǪm\qÛ:@΀öNUχù÷ê˜0J¦bг²C¯,›ûÖ|­¯žï=ýß{º‹lÔù%s_kZÄy°8ô昻fÅsä¼Ü@׌«­&Þí>E ç y Ò.ãñ9é0lÑââiú´iü>Ñtôʏ”°nu>ê©uÁ“ÿƒ®ÇSߌ“z·yó§|èSµ@pÛrD9R¯tÙ^uÔŽ°v©€ï t{Ô–ç9[ðV%HK\Y0Ó.pM sâì Ú¢ì»@Z - ÑÐúä¼êîµ ƒ’¯¯ïŒ3Z$ª””555HKÂÓªL¶€ö£å-!Ò“‚´@Z’œs´¼é=)H ¤% iÕ b²—´wÎü­×æ ¯æ¸Ò@ÿÚ Çi´þ©´Ê9'ñ츷ÄO+áä„¡S÷º~ßdA¨Ù‘kvä àNÇ'âÖ.ÆÔÿÙ‚³³‹¾à *aXø/£P¨ÒöƒS2Ôé2ÙÓFIZ¹³çTÓœ¯IÅ5¿Š´í¾CØÈò.ú+w1¦þϘ˜]ô=8P?3gάwt.e2Ä!{÷ù/ŽÓµΟŠT²Ó& ì‹w NŒ©ÿ³ffBTTTÙÊùcÇŽÕ!çÅvó.ëÒðz®ë./0-i¯½+œx/ŸÅ˜ú?[p`v`v !ZnbbU< W[ÑËŸ;Ç(ôòy™à €¤jy½\ι>î“öf*Ø-9}kSoE 0ø‡È¿7Py:4b°NÙ\¤”Åœ]óÌ¥ ˆ—~}¿ïÕ_x5%Foê¶¹üÀúáÒ?¿råÞ“‹þ»ŸþÝ’« Qµ´¼.E/“súû3n˜|`º¸×ì從v þËÇ \ùðMùõ«Û†¸!f…ù¸øÁÏ7y<Ђ֬aÎkÍHØâ¹÷í•Ç«WÈ‘ãøm¦ÄòÀS+=þ”£Jx£óV‘±2à’ ×¯æÄüdÔú ˆ„:^}CLÖïƒÃ¸]¹qÞRZè ¶Ø™qœ.³×)^8ØÜ¨@Ëi¹@E/홑·ßÐ<ïôפᕽ'R‡ÜŠd:Ø€ËÆ½kS¿º®º"²2ýÿH/3åè~9°÷š¾„z#!ºY9Á}ûß<µñ@õÈǯk¤ŠÿSçÑ^/¾¨o ­ÊK ~:âԯɣԤÀΆ€&]ÅþØÓGgüç<Õ^³vúotÓÄCÌï'ÆÙÞ*»Š×yÊî+»‡ë„¨¢z}\á~bµÀ¦EZ^‡–×VtlÙµäï<¹*ü9&¼Š©|¾ép%Õ!¨ï©Îs‹ñŒ™H“œ{2Ü‚+¯²í{¢‘ÕÓ)š¬´ð„Ôôa~ÏÒ­’÷ ?õr÷€IM«ö-àß`Æ Èûúõë…ü&˜ ˜’ä1+ó ¬Ža‡£º{È—v<•ÝX•õÞƒ;6¹ú”¼¾¸C$YÃiýGm¶oö´8;?(Kûö@ãdz¡Œæ ϾËõˆ`S@c®VõG,Ñ/=Rr[µtoÇ›Œ)šŠ¢ŠíØ%ôäÑ:^óôOÞbLÒnRü-àßÀǧËÓÕ/íqŠ29Qi,HÏJ‹È¦é+à€%ÿñ‘ŠÎ£=^È8¼¸(÷q@€×™PKïN†˜ò‰nN ýõˀɗ†xw2jÂð‚è6u ‚xœ¢ÈÈ€ ·ÎTõ^ªÐÜa Ìå0Ó5ú… §$=z%ÔuY7 p± hD ‚aªtj.úý9W³»r‘‰³Ó§è⇬QC•˜q!9*ÖêMž '·\T€ *¶‘é™7sïÓ ¾V¡{ýóíOš€™v‘,7¤õ¡Ï¿bØ¥r^ViÒÎ=-ŒßEýa7IÎËAcÉfú,~ÿùR6»ÙrŽ!Ê)w³QR"@Š6f¦‘IÈ9@x˜á'×ûåp`ˆWœ#¿ôÂ|cþíG9ç]»CçÍð¼Fbf‘æúo4b#m¸àÓ¡µg~ÄþÈûqt¡×Z‡é[çX’šàŸîQ»sˆ%o(­SJtÅݘAš4ºŸò†Ãx`ØNIÁ‹×¡?©ºº8*IÙ@ì¨ßÏ |AÕÑmÞ,¯äÏï×Ò¨nrÍŸ ÂÉÑgîþœáØ]:ásx$EUh9 1Hu˜¾ãÔtŠòK.94®¦v™·¿ rpðLs£üË̘1CÈo.Z´ÈÄÄ[äSáhg_åï ¶˜ù§øû0FUÇxçD+þ(­0X6|ÖÖç?ŠùÛ&vlxhþ÷A5èÏJäÂQ¯ïôcNzªá©:ž®6nh^å!º7+W<“†³u±³>ûP÷6/¯»nBGS ç -£¦¦&äíó¨¨(þèœTºk‰ÒM7Ïîµ#+:>̧&½êWIÀ ØÔªòØ7;âkð’?^åreTõWŒrš£Mh­Õ^eƒÕtà­íú|´ëÓ˜xJT+õêûûõ¥³c´']žº—ÕÂyC®;È>s&ËNðo‚eð¥šþvŠåù3/¾š[…žÙ7ÕõVmdˆäE1µû.I?Ÿ6Õóšò.`ä¹Ïv+ì:Iö¢Å×Ïw¾zµ¦lt^ÉÍ+3¯‰gZRÎùo`™6QÃw¼FÙa®¦&¯b²¹$ÙrîØ{«puѹûècàd@+È9ØFFøØw0;äí·›Ž-ý ËŸw]-Tú7(ûpý÷ǰ´5{6!ª¨ð‡/žlÎH$àMµ W›¹ I ŸÇNº¬kàØ„ïÌü¦ì Ó}œNÙÇ ‹qioò†³5 °Œ¤Äëx웯圈À§£¿)í«§ÔÒûŸ!Z>éÅ˳„(:¢åücç^Mˆ'òçƒó'‡•³J>;1tÂôÛˆ¢Û;/nrÞ-‡fäA¢èˆ–#Ç*Çå@M€*r¶‘ ù÷ˆ2kÙKò¸´ªü"­úcß0ëë‹Gîï){æ9ºQ[~3SDÅ-GT|AxÆþ´Ÿˆ–WŽÔ2.¯R6@o2|Gþ™‘s7(_é4:.W9RZ¤= ð¨ÆBg`Æ ÓÅCpá÷äÏ%ÝêKm(*ÕêòØ´¤œ ±L\4::¼ö¸#¶+++Ÿ€;â´uͲ30vd§˜/ÓH¥_•…ºC·aˆqÇnú¾˜‡¸dB~hBX(¤Ÿú€* »·%MÎ˺õ5:@P˜†â·JÚïBUÃL«¾\¼”fÏeÅfÅfÅe¢q˜¹ßæÒº˜øpÞO:™N—¢ è$:òª<("•àKX8þI6†Í$0ùýšË 2XD:l•TÔBß—–áà•f‰+Å?à!.±ü€# q¨¥/þ;,¸²é¢¶è^¦6JS².‰±Ê‰1iaRoÕ쉷ìM¤¶G5X£ÏïÞ»—Y‘àÜ{#ß0<; ³-«`j=¶-+ç´ÝŽ£Ã†M6¦eËÙzŸ¾e_Û;ªŽ!y5¿…W®Š=»6l]ê³JŒ}kBò¡jAÌï6¼ä¬”C µ¯Ð‹¾«p’¶½Ý‡Ñˆ¨aÊÙ¼”àt&Ž[¥ïú±‹ÿ%Ôx=t×*ª§˜”4ðÄ©ùUUµ©&'rM›’©¡¡¥>÷á£YU£çA¨4!EÈÀñ²%y8ŒË'b²±¸Í(Уcp9ûyÇÙD‹ç\;œDXÒCÁS#°¬ØR«»ËYYmÕ*_‹sšÙƒÖZñ-%ç)ªxÖèz« eqóàAä²S˜¦ûÄßùÄ«¬e}s›*Z‘ty¹2-gÁÜNæuK¼È;¿Ÿk™ŠáJI•ÈÓŠe4‹dT³•(,…MÁòªU€ÌLóØ|¾~óplâ°(MS‚-ç\®V k ûÎ¥R­óòU`X§Q18$ä¥ÌT® ‘ùj“¬‘ªšAÌøbôìñš+8A™­`¥ïÜËí²kºzz¤eTšFZ«œ, q½:_¿ƒ k–ŽÝ’2¶0Iú@ËÛ.=ªUÜ&§ºž2`^GRkÅ´®œDŠKQé×Çêã'»‰rŽab)ÉM¥ÞE?‰¦FÿQŽ…12XEI–Ô?*k´7ñ­?Ž×ð½LEÅU?"ºÞ-¯Ttä…89}þbAóÍ”×é3‚ Wùx WBJIKØæ¾•=œmœjâðÕÞî^,쓎ó×>%%*¡a”´´BUÕ´Ž–\|K_žr9ÏÒ஦¨ÎmÕ*ÔüÛÍ,—…&„ÖŠrÞ.@gi¾|)O³L~¢F×/”6/(ïB"¨Œ$ ipJíŸàóð¬tV23)M‹ŽT‹T°%vIà)à:u„:Ês°,„‡†=;ø­W.É!w©ýÙʦRó©&ù&Èq!®0‰”ôÄéÉ —ªÙª½¿ôÖ)Ò)ÒàO¿ËÄÆÙíÞ]¤¤œ¯©¡òÍê¬à’Åyº:-˜&½0MZAFÊÜv©Ã£Z)…¡éC¼ô…]Ü'УšalÝñ@ÎÛxÿñÝ}ÉñÒ¹ZL‘n··S{ådv?£¯V¼ÀúB‡:›žR|Ó·O,EÌ$’“H¼48ªl\¢Sb˜o¨ÃÓ±—r‰%MÂŒ½¹=Ø…ÙU¥,zÓ)¹¹‰&Æjÿ€-)l ¢ëÈ †àRrHç[ä[X66å~梗·~ŽçTîÉJçõ›{|Ÿøîn±1:Ìû‘RLUUTGƒ:݆©Ë£Ziõê¹í|#6SìQ­žø çm¼ÿ°¸éWí9i•‚ É1ÝϺë”Üí…F¼mFo:ñ(‡ÿhøÞ<0É:É´ÈÔk8ƒ8SR仵­€ƒ‡NŸ:ðä)“ à5Uù”DËM›ÊÁý[{  ”:CyuϱÍÁe³åã{ÏÊUÎ{å„édfC ât^¾T KîbÓ")òXÅ °ýõ±à¾9r(oVp×.iü#ÝL…üŸjï^™¾ú!÷C¥h„2Ôu1”:U#K]ýòª•š‘Q2‰ÆÆÈ¸ü_ÓòȱågæX¯G_ìeó6ûͱ¢´«a”AÖÚÚ”ÔÔJÎÊ*J¢P:@å@ÎÈ † à¤0©ù±SÖîû#ªÁÒïJé8F),T$ˆ~ÇZ˜cVR¨b óÙß\{²¹¶Å0v¾öãÅ;ƒ,K¬8Î=8*Vèú_å™´ð÷ÉWƒ9oS¹ô ÒÀÖÈù¿†ÎŸ]>’KKËQQ vgÞ!‚_¥G“Сù]¿¥Ù¨u#Y ë|ªSФ_”Š•q€&iշÙY:¯ßÄ9:¨àhËUFi¼VŒúqyñ°HÿŒ¹¬Acdû˜Ñ„Øióï3iÕAáÑ;É´ çƒ? TDÑ-7?¨úc^*0W»¥¶Ç³¢÷kf?µ}8WËŽÙï踲wäY.ªjÀøyå.{ì¹›XÆçÕ=F®µù±¿ ð… rÞ’”¼¾¸C$YÃiýGm¶'BìØø| ñÛàÍ'ƒY2}zy^è¥×ººì2ÐíÈQäòEþûGPÅ Bõ":ÛzÜ`ü÷FnÓõ ¬ÜNg¥Ó? e¬>hô5:«ÓcDË+Gê€vHmgxÍ®9œ y3 ÀÄU]˜'ÉÝ6ÞèVvˆ£ÉY)Å<`\ó–ì°M¦îaAS0áÖ™ƒªÞK “Q¨qÞ{¸V^Є³Wöš-Û¤ÒšV‰3ïpoö¬®éä&…ÑJœFÆw0QB ¢ˆãÈž¶»£t?%é µªÓÓ °·³S'ÜÒ é ´¼]Ÿ{AÏpºÓ.ï2·Óõ† 9÷³aÓô³•LÿzhÖ)Í5w»‘}­Î?¸”%›uè³X9ïM6‚0JŠr]lll(eu›©JŒ¯yœVÏ¢è×–.Éè6èiÿNq:€Z(ièaõ¶ÊìÐÂh/Ë]Ÿ2ô­jT—\« ÙoqÀ8í¾Ç³}L•¤åŒÜV-5ø~'‚Aì߇‡/Îóù›ŸøÆ§h͈C¿YÂÆÇI}´²gÇþ3ôÁêJóVWò'úõ4ª­Ò9ãLÌô³¿~þRT’‘üùT&¥›¬¨&,ä!ù,( TAɋŽ$š™¸î)úêú ›àå™é ;TOÿörm§ÀpÅ^MU<ž±R¾ÅÉöh©DU¶tq–K Me WÑÏS]6¿¸è™6¿ÛäWt`_@ë÷Zúvt8ÆÐLlóÍMýïƒjxªŽ§ëÄ… üž™¢í²Ký¬û¶Ûiy×>(aETpHAH9—¡öÈ+x/.³‹Šº%–¤ ôÝ~ÇÜ[Û@[¨…IÍ7ÝvSãOÞZï%‹ÉK:jÜ‘cwËlµ½m&-F{TÃ÷Ø|tÀ‚iC?ªQè)ì~Gýl…™6/|5Ç~Á—îc©×7x_Š}Æ î$MÎã¢ÑblçÍMe2u¯€™24¹Wß9 }E^pX!-Ì7©ÒÄ(çúzýÅ%çÚÚ}Ä)ç(cÕ ß!ˆ°Zôˆù`mÁªùëº,ñUŠÑ‰)éµ½m&-Fêð¨†UuÝt͵‘qQzÍaT~ªæW h5зð€;ü‡È;rñ.úþE\©·^Ò$ä?b@Œz…¼³–ú\äy—¡ÚŠ\ȸ ä/ÂGÞ‡ŠXÈ{;ïGw}}7‘ ¹ 39@Þ±hs„r‘r]@õ>ÀÛwiåe?E\:ÔöÖHôÈ@«ŒÎ«î£cÈC^H#ï;„-ú\Š1õVMZ–ÏBeiÁZu}¡€þy!Zž|Hôfùóy!ZþðÑ,'ÿ y!ZþüÅÑœGr¸‘ˆ–s¯WšâÌÖɬߎږ=?kö®ÙÉ[Ra j{˦zd Uä¼ö®pâ‚krêQá_<ÙœŸvdï}çþkŒÍ\D–tý”Ý>ׂ´êÿšgÚùÖÓL;‚gÚù¢Îû^#D £¾IfË.ÔöÜṋ/Μ—-µ½M' šLãf·Ä{ùÜ´Ô#>8wbhRÂgf!ïÈ1¢î2n@ä<jX è_Åhö˜?OÄ•42@§œÃQµihÚZ™õ Æ »ÍwK?¢HZm£dÈy»—7".äa…lxV­A@–Ê,Oêtu ž(Aéd{þ½2oÊC¯æTÛµ¸“™QsŒ•‘))rɇ@! ¶EE_¢¸Ì·ÃîSáǧÈSŠûFIK+TUMëXî® Ä!ç2ŽWãÚ•ŠW¢¤l’”ð¹zˆ¤¸/S€²Ð™ ¶QE_¤±ä }Ó‡g3—üÒÍ×ÒP ùfuÖ?pÉâ<]`Ÿ¶‡`j¼Üw»ç¯zZ$KdB–^~Ü4„Ú›öÐgîÙT*™Y 6ñÐÆþ*`÷!€Èä¼ýâÜ͹Õ²ê=`­„äM’¥Ct.ÄÅ@ µ·=H,èÎÉ\ûx¶Š³­³¢óúM=¾O|wƒ1z›¤¶G5æ—Í“.›ÞZeާ¿ñî;í‚ÕýÉš öšpΓ9 ƾºå©œ~npß9ß]$ <¤D$çô×cdð<ˆ¤ãÞ:ÁËã åÇ¥†íht(:òÚµaëlïU’–7X1 •¥9o{PÒÒ󵵕(JËrWlTÚ4‹¾¦‹´.BI>ÑÛ =ªIu^}jÄü£'ë¨Óàø#Ì ›S^DR”æO¹a¤•¥ŠÒè`_€ÈFç|ÐD³!+:w)¦¸]ɹ$£É ó¬šhA`5náPNÅ ÚpÙGåX™  3M8É=8l!î ð"Ÿ¬úÀûáXú©äϼc÷ +ÿˆ3ð›ê%¨Žå£T®¡P}x©ºS©üK4¥ÔFŃx)zc¦BÕ¯ü•ŒÚš:=3Çî§ïñ%l§Åǧ[˜×1ø‹¸òaéšSõ«Û†¸–Oqc¿¾›r;<˜#]ÿ¤¡}wu¢@Ã=|jú¥GJn«–îíx3‚1E“Š‘wZ}Ñ „ó{ðÓÞ@J˜n•ªLfdÒ¹†COg’•¥±À¾‘Ê9Ä¡ÿy±ïÀOU7ÝÒŽ¦ê®p€V¢üY5Xrr„b¡_`Øæ\tù8E ÆRäÙ1.\n1Fù>N)›¬ÞP†¥Ò>M§¼Ðb+•÷•zçÏ/S/Õ—½ò,T.˜É?Aq:ŸŸ¤£”îC;8Þ˜ÇÅHØÝÇ´Ž–Vþçt^¿‰st˜¬Ø;*%êð¯õ³Xé––uŒÿtíõâ‹úÆÐ¿%©ënÆ›w×”˜ñÞåê÷ý€ž‹†‘ ÖÒ£¿Õ*/Nó>ì[ÚËg¿¦0ÂLê0Ì&ëØÛŒ©ÚJ¯îeuöê@öˆFÎÿ>¨†WµõÜym¡QiW[{W8@ËË9$ÿ JœüðPÒopxV:§R¾™̥¼DÖK?` 6±!-GF›÷¶Ÿ'0P©Æß8Y="8aTkû0áAÒ/P¸¼l J¡"| ¯§›Â<”ä­$âK÷Øí«óòU¾–æÛ¤ŒÁ®)ƒ¼zÍmÔ:8 QW“‡â›y©2r`Y¤8ìQvh©ßÏ‚ü,:ÍvÓ“C…Ú©%×ßo_àœ3^HåZî><¬ƒˆJÎin`°…XÞMªH ~ÃËQ؉Æ0ö3 R,,îÄο78Ã_ÄìÂJ¯¿+cgº¼ø‘gçH)¬¹](15Ì c|D±æ†ŸQT œna‚Pr¹žcR!R=&°!f8½ ¢ë’túòttžøîV “NIM·´o¤º´p­ffÏ!ŠB? ‰UX1ÞÄeïeÄTeŸEC,ÁĬ8ìQMÊrî¡cMˆ £â²å† °*@ärŽŒ32|Ü'í ÌT°[rúÖ¦ÞŠ`€ *9ÚMª*C,N5“›Ô—ÇE¡ˆy(T…œãÃqrxNœ'‡UˆU‚“ÑcåÐê Ã «wo´ ûW#Àì,e&¯š+˜iO7ž^³~aþ 3 ´ás!”rŵ a˜pÆx˜C‡”î¢eôàI[4ÈÅãSlÊ×±«CÐhÞ¤+ô#EÛͨBþ>ÿĵÒnÃãºK'=yå‡û+Ðþ@“äœþ~ÅŒ&G#X….î5{ù€¯§(À6"¡ÒMjÙ8AIýÄS ƒ“ûdĵûÇë@ø$4˘U,ÁRÜ<*Ž–åÔ¹á;ÃùW–ѯ+~» Bc{…Í´ü^z3͈sL•yëD«å⃊Â'CZ‡+†Þ1hµÒUo\¨D*&!™ƒèr…Iú#}ƒ©ŸJ‚7§ù“ ³;÷y6u¢’"R°1ÕˆŒf9M“sfäí74Ï;ý5ixeï‰Ô!·"™6RÀ8"¢A7©"¦»2#*¤]ú>Aμ$^‡? çÈÄ( AË.ÄÈäÁÅäzîãuöÌœY~ÌŠ[|ñ{îٗ߃ʜœòd‡©(wþN®=_^äÎûSqL¾‰¦Y•¯`gëÃè/Qb@Ò9P1µ-œÐåò³æÂ‹6ÄìÂ[ŽA7tsK±”Ê=÷5³W7Jâ׈)Eu0Ùš(çìÌßyr=Tøëwð*¦òùþYlr.*„t“*>Š;²s_àtÎáPh¸¨+[®iÑps»|/Œ¶×,lÄÝožœˆV> a1PQw8O®-œP š26óïèª{¶;†8V1dåƒjЛ•‡+W“_4ÚbòÅ›Z7¹xY­eã¬Ìœ€&Ê9@Ür.ä£çÙ¼]™Ð8]´}-ª¸˜w>÷ ÑHè‰*¨–œ¡EFêÅôÊODn¦ ·ñ{Ë##õÉ:.•÷0òÇOâgÈH½¨ò *îÎKèÞÖÎigBg ©ð‹Žt QnmPaÇÒÕj‚’Óïrg]Ð@s(}ì§h “•Æ_ÜÎJ‹È¦é+à€eD‡pnRQÌbøl>äHªpj Ã/Òy%4ô}Ì4|3.¦”$fÑÁ2¯ܹñ#%Xˆdt.e2¤gÞ̽O'øZ…îõÏ·?ifÚE)çB¸IåqxWÒájhL¯âqp8Ž õ ¢¥Ñ°4EJ‚Óa”x¼UbPÀh.í´ôªÔÃ1g4^/ô#M$^~øõý¾WáÕ”½©ÛæšK5Ã7\øiµ½ÓN…«ÙeÎ*9©÷7,9ò›¬ˆÎNa[,Ø¿f*˜´¤œ“7”ny¡AWÜ‘:§ A£û)o¨þ­õP\4::¼&sîˆmàoeåpGœ¶ÖRŸ+0Ϲžó@KqnÝ7ãZØ -³a#©ô‹ÙšjC´SÁË2O½‚ÖKE:3õqETªUG÷à2ðh=‹?ûg"«Ö½|ûÔ” ?ìð\í)[@åÏL®n $FjšFŽòI·TÞÛyk']DÌpqq“¸ÅÙEg{D¦Ïñz1iØ`téV8­QƦµµVmŒbléM…õû ÇðnWnœ·”®¸.n†o´¢Ï¾;ÓûXQ¾U|~¿föSÛ×sõ°ì˜ýŽŽ+{GžµOZP΋|*6ÙYç—È(¼ŽOÇ×üÞw[\EݵaëR±¹`AÊnjýGàŸ anþÓTC«_X” 5æ? NïÒù€E2ŽIÿZ¨iùÇ” /SÑö~xeâolGS%%G»cYxM"BôlìÓëÉ&GZ˜ÉÐ+´öP¹‘n|€ÉØ'e]ïO¨æ“ùÍžeÇ2ÑŸºov;|¡¸_ŸÏo•Õõ¿ÕÙåÙ1TÖqÒä“HÿzL7ÞOÛȪçû%9Æêþýéb9ã®®'Ì­W¤/ØÃÞw|ñÙ;ræ{›ý¸—c¼Ÿ›· SWeh1A ¶µÖkŒâméM„ùýÄÁ#Û{CeWñ:OÙ}e÷p]BÓ}£1Bö- zhü…›•¯ÙÕ çáÝ‘#o˜¸ªƒ­|-+çeÿ€mdÄyPX‚b 3E‹ûKÓ|fÅŽî)?.JC'ÿÒçà¡÷çuH)ÌTë » òòûpxŽmo<ЦntzºòÕü?ŸfÈj4u掯âP:i!óù—Xó(¾–{(76êÎÝ5B¤wîFä¼þ_ñU¢«¬Ã‡|ÏÕÿ„h9Òl‹ÂÉQ?&Ã>£-ù.5PÔd­ gE}‹bµE¸C~_å~§eOÜÚþÄcù€)1ÝîQ-7w“Õ^òçiá ©éÃüž¥[%ï:~êåî“4šèùcϼ‡==ÓH¼P†Óvyw¹®7ɹŸ ›¦–(ZAÎÁ62bF‹¤•Ȉ×B®Ö©ÝSÞ—ªx%xʵ¼[Êö{bך6Œ8ÿÞöîÍ!Gá¼ÜÌä­/rŒm͵+¶“F3™¤·¸ø8¶ŽN‘}Ïú“æeóØŸJ B‰™Ò,³c(_Ç?—#’ ­ STúbTy/}¡‹!4 B•xe2ŠP <).Š”.†°¼P®¿¹˜,ýIZš)MePeé²Ê¹Ê*9*ÈK#S9F¾i\ºŽõ9êÁ©ýUšoÌÂô¸ÕQ„Ѽ¿ÛkÃE}"UñJPj‰Éòe%K Fôè{Nþç„b[7EPá% EQÅvì’zòh¯yú'ïF1&i4Í7ZÁkŸ?àþ‡ÍKøž÷Ýoñn…Ý‹»“c_œçó!v¢FâÙicG²~µÐxô°œƒmdÄ&"çÌ$ˆ ¨£/þMù(]pÒ‘-ãL„,[<BzVú¿àÈÒºvÙg&U6£BW›5‡­©É22$¿z£¸ykò‚Û½jÕ(¹qÖGVñGFâÏÄnBFçŒ_²qénɱ&ɹ¼T5GŽ +‹—•ÁËÊ–ÈâÕdð2r9Y¼œ4Nš„%áÐü~ˆ‚%cÑØÒi%÷Qø°ï2Lþ¾¬ü+D"ݶȾù_à{—ôב#» ‘u7Uᛸ¨[”¾5°hhC܇h®dœ\Ù.* ¤ä Ý«¸]sÀè\![ŒéStñCÖ¨¡J̸kþd8®I¾Ñ¨næñòïÅÝ?0gÏ’î4*Jù'Ûk ¥'ëâ,·+4• 9´´œƒmdÄ/皉ŒHF* R3×G¬Ïî1:kÇR:2`çäà d˜Šü‰9XÍJM@Cüç²ñÊç¼ÝjăŒË-Ï^8¿À}XyÇróV—]#ó=Šÿ@ŸÂĆý,ú¥•¢œ’a›¡à ¨-£MÊRÔ|¤l1ÐÞËÉ¢à5IÝ›ÌÜK²ܸùvì‚å²cÆW~DF笅+hxšFYœ'ð'ùœü—/CóžÄ¿C:ºßîò¹KàÓ+Ú³;÷ÕS*“ttq1õC1!±X[«À¶;Pç-G˜M?ó*YÉÖr¹äîðwŒL~F6‡!ž47·KIšO¤ãô÷r&ž°mÞ¦‰ÖãrBJd–r@@Ñ%”œó®Ý¡ófx^#1³Hsý7ò=ªAM÷Æúsuë–³?ò~]¾OiÇ‚®´›X0mèG5 =…Ý﨟-Ðâr7Rš?ó@ÒËÿÄð”æÄý¼Ufž-¹;³Q®îHoÞ±ÕÕË´œÅ(‰‰§%ô-ørÄ1Z-S «dfÑ¡£–ÕÝAÚdm ’fÙØúÙ’?ò.äòûåP”žý¾jäíóâ~}²/_Þµõ‹mlD_¶¤¸sý?¡aiZŸ-ÌúXOr䯡K.N¾[ò2ˆù:[>b{¼Ñ±_=Wtꘟ©¿hI‰º:Ó@Ÿú.Psמ˜=»&ƂĜõêCt„évU,ŠMgòÊå.Tøƒ?pGpo‰òòÌ,š=/˜©áe­!§òœö¼×C§Ø]PÞG&äj½Ä‘wXrÉ¡f`S}£áõF­?…¼þv¶ª®›®¹3ZUÎ+·‘‘ǃmdÄ‚I+_9Æ†å ½¦—ܸ+™ÉÂʱ©yøL6$‹CeþÆHëpë¾ËŽ|`F8°:¦ø+• §e‚1í„2N0бš‚¼Ê¬Ïn½ªùºÞø¥peŠÞàÚ·tZ)[y¬NTŸÝ{ülhukõ¿‘Q ÓR‰h=Z|ÌßA*Å«äÈ,å¾­¯—öä䲜­‚/·o³H¡D™Ÿtô¯*6Ó4G÷Wí+Sz5PFÊQ?ÕÙsgá#£°©©ï—Ý6$¶ÉF‹µ4©oßéUÏvß”–˜v(mÿð—Cwæm»Îoà—ÈHÝSù7ú{ï\ì V²‡´3ý[ª6¤*<h9H̺.2´HÚ ŒsšEÕ@s¹_g3¬Îºü7~—ŽyË&Æ:(Ú÷W™ê èDÂxh¦ÄÔ4þñò»@\l,îGQO»ü3Jo‹6)°í®¹ÛWþÞƒl·A*š*›Gm‹>u`S— êI·—E™Ë·±;ÐÈù¤îzËìÖü¤Eh 4¨ó@Dréèœû<±j÷+'=±gÝ­/2¯LY—Ù̵Sè‰G7pu‰…}z·›ðˆÄßÝz‹—Êß¹Ë44 Eÿ6OK3ÝufÜóq±£—¿Zá8Ú¢µ¥Ò3»ÇŒÙïçF,Èy»ƒüâeǧB éZ!O²Î/´qÊÙu=ë¿ÛÓƚŒöü9Wg-oïöoÍ”0ŒÂo\£~øHŒOïÖ­À¶@˜cÚÁ1µ×*Üò¯Ç¾ÌÓZø=¦Ü[¹;ì¯Çô¯œN«d%°8¦T3Y¼lð÷ {È T{É»~¬åQ OÿýüÊ•{O.úìJ|êÚ¨kÇšÕ{l€œ·#-þB}Êt#3èv?ˆ&5wÚ—>åvš,¿l„‹3 BAzÐ(çß|^Ñï¼ZKùÌU-Î+^^O];+qú¶Ï»É·È¿ z™•uø´’[u×Ç_ÙÃNðf+Yò¨ö?{çÅÑÆá¹Þï¸Bçèl¡X±‹½&±÷‚Á5&ö’ÏÄh4F,‰-¶Ø+v¬(ŠØ‘Þ{ç \¿ÛoCc98”y¼ß9ÌíÎìÎîìßÙ÷••f©ÚÏ\nypËÇ÷fD5½åC Pο$¸ü‰~;”‚$3°h(ØÝ L>Öã”5Õú5À¾G^……gml¿ù/ÓíÓM&mü}³ýüç÷üK”ŠãÒhrîÚoxÆe’‚à_IiNè¨F¶ï€0÷£K{;¢šÞò!†¾cxˆéÚ·Ù­+€ˆ ¤ó3صOö†–Cô‚˜ÖÁœ&ÏüiÚýn±§ñCÅÍYËQ,)V–j«{#áákfƹ6¢ZÙ÷׊Sôz0òá¼ú;ý×ET[6ôÕ(‡ Y>å¼y^FÑo‚¤/V•@á䛥î 44A´`uïÛÆÝõ8EO¹,næDº,¼\ó¢&¢ÚÞýÎÿgwõëLK 9Á:/Ó`NEåuY¬ê©ªhµbdžK—%µÛ´|Ô}Ñcå§×îæ6¬1vŠ”ÐeüLªJžœõÜèŸý¶½ƒÐœ·3àA7l775Õ Î$^ ¯Z¿¼®„¬¬æpÐ ÞÍáit9×aØ!8ÖnØ7àH;Š¡FÚQê2Òþ6x þú¬ å‰äóQÊr»'$¬û£²¨©¶J[«ŠŠ$ ô„Ï"Y–©rº«Õ YˆÆ5½@_f#¢‹`KÝ1Ž^(LæÔµfÁÛÏÈU û—.Û—AdÀxào›f´eÖåvO‘}fÝ/—‹•âüÌ*çà-k†[…a}M§á¾bGHUüÉ0îþ¼Ó=™°Ñ!PÎ!w ò÷ãoØÈ »P> ßÏUÁEN.(ÙÕÕ ¨œc¨Ï äBà¼ç…C®Lš]Ïêr}™™6H£o*Ÿär=?ºVÎÅã¶F?ЦxÛfùwáô¡ª(ý‡KI׈ ßé÷~Î_Q`0®FB_ijêçGÎ)Gí?5Ì /y´$`ä²vñ›Û×!ª)Á¼Ç÷¡ƒix Ê í°è^ïÃ] V=&Íë¾á*R62B2¶ ¶9Ê9ò‹LN߸Á~þBîÙsÿiü}»hQ_%Q¿ªøÚå0Ì T®§D+Û6ú2›€¶\Ÿ›9Ïkÿ šîŸ7@+ê»2þ[B-Þs%µÚ+àž5?.fùýÊ»q¨ð7z#žÑ|WŸô­Uh—¬(Õí5A ‘N@%ʉ>}¹Ò­¿ ]¿õüm­kg„ÑÓýfuáÂ3H“ÉùÛ^á ω‹sÂÉcÌûäO”f…>»ýŸ=6A¯®Ím;{X¶;žuA¦R“ñïðÙ¢–ÄJ_»³¹Àq糎¤«8­àMx£çÚˆgÅC¶^+öÉÿcð˜É‡ýÂ'X½8,ˆøIèŒÝü¥ç|iu.P¿¿›cHœïšè±¶„WòEÑDzºN`Á&‡4œëüÁA]‡|–6:‰$èÚ9Ÿï“x>) cãYåùÚ¨¥^-zs5½™†»†”ÿ¸ ¼ƒµ‰þ%p²øx’ÀÏ“Z”'åpY#Qñl”6âÖ68Äa×¹dÉ«šñpUᥥƒdŽ?¾ošÃG\ q–ãïøüí¯=cÖ´zñ(GüðDAŸo8Æihà›í/cq’U³¬Ù½wÄ$0é8öµœ¸wKcrO{Ì£»þ¡7Vy8,ì±…þˆgHõó“ûÿIýùÆ¡±E³}'Þú˜X}8 Ϲ£?O˜Qñ_H qÌ©² Ñ®0š¤I­sä ±»\«ÂV™ŒLT×5ØæeÞ:М”< Ç;~ǰ,÷LuFSÂŒ‡}KØV°Ë65ÏbC¦=F•–Q¿Û·Zñ¬êÖ¬NsûbžX5ïßÌ+qªÁu:}4¨ÐU¡Ñ,R™SÕeÛ¶€—ªb/Š;`{CUΙ»Ftš¯ü+çb?øXòeÑæéÐÝ–/=³$Í) ý“TloTf^ìið kÍsߟñ¾Çç5òPYš¿öF…‹¿§ 4Ïï¶ïíˆgôÀ*þ ‰Zç¸jX–ßì~ú~¡wüå@GØÔF•sD¹jÂßüà *x¹€|y¨hÒvI¾EÄb¢‚ˆ©´z-ðT›ÍaÃܘΠFìÓ‚J3õ‹‰jàÁÖ°ÚéjàÅì5£ÏWíÿp§àౄ@ ï‘sUî‘ïf&M<õ1d ¿ùò›fp%N':Ÿøåïíe\TËÑœæ°atG,¹(:¯ÌßÚU;QíMLõeB È›hMq¤êñúÑ¡–îǤ”¨`£@¾HØ$¥ƒ«`e„·Il&ZŽbO³!…Qy¥ðA O“suѹŽÙ¿ª+«(I-VÀF|‘Ší‡ßþg¿ã=ž¸¡éf²Ud…M4J¬È•©à¸©?xPõpǾ§ûÜØÓk³Îõ<*ï߆ƒ|YZ>ôZàÁ~aYÖþì{Î¥ÀS=@s°Ñï.Ëçú›³Œ%ÚÇçÖ¼ø° ÁiÇŸ-á!ƒ@ )笗^¸‹°¾¶ÎʪÕrè=òÅ`TfvªÇMœQ SÊ»çò„¯”ißlornô…ÿÐBeSWƈÅ-Tƒõx¼ ÈÇËù»^á _ Å÷t Ç Û'FI2Srqóx|î9€ÃÁò17DÈ=¥Q„Z°‡æÀãeÞŽ¨FÑ­%½#¢ÚT0b ­n}J«YëC<ᤱäµÔ+õ¿F›•ŠMMh€92ág æ?ÁÇgEøYC¶uâSƒ=¯}tÇÔ€;žŸîcÀÚû÷ßùêŸ4E“‹=ÏÙÓÌ›É7çtºé¹ïï•V÷†am¬Z'>m˜Ú?Ø×µ3°§×}ÕôÆF«C$4=ké$<ôoøÒ¸r®. _1t¦ÈR^‡{N¯énü¦rÛ:iÐϧ÷𞃔†ÚÕõ«Ö.\±ØPµpß Ûì¯=>aí™TªÙѬÅ0Nkv»/f›ÖÉM ùN©RZ„ ˆçEEn›ëvÝÈ P}ø`³7Þq1ìA¯'z#ªéVô¬%@ÿ{Û1æ3~Û·zŽzBÏñ½§tÝ‘$Hßêzlæ¢È*Ø0/¹k!­™lLæ ™ûŸüb›4»´Šÿ3ÍÇÈƹ6¢ZÙ÷׊Sôz0òá¼—S jb£õüQ8eãë±ÑÞÏk‘Ý'­Yµdtnyô¯îçgŽ?˜ 'C^Î¥Ig"Xcçõæ³ø½ægFœN’–|±xhl*I™Ídc$±ˆ4˜"À•£iÔ.G]ƒÀcdj"ªÍÓFT³èâx!ù¥wךØhwYíøö×xyÝ |}-’ÈÓz¸™08Î/t|v6QÒàr®,Mp\Ì´#?D37®0­L [òÅâ£à\‰sÔ-çÄD¼ÒÀçºÇ<Šs “‚¥ è¢{|ß2ú#ª½f=±Ñê 诮… /nÓê´G•|?k2ltHCÃ3AZ¦……Ãý{z!‰?æ~f‹—NŽú¶ØÜܰ[Å#ðÊXeæÀ  ƒ¡7¢Ú{b£½=kIŸïZ¹1ªB…¬¼‚»ðàløèÒðrN0v4ªH.R.QQ”XÎràÁð}/‚R‰jùîÝ+8¿}•ض=Z=úïá³CTCžôʹÁÑQí=±ÑÞ‡žµS×íž ÒxÔ ¶S\uØt5O”¾iŸ°Ó`W8Úù±OM²žµöqUÛ–³Ð4-2bÙ§øÍ8&Ž)¤ á‚@ õ·Îi«jF|L82Ô…€oz™®z}©•°¡ _슊334áX^%  ‹Es8å•2ò61Æ•¹¢·¸P,%ž¯"dj §öc(º58Øo¤{v@ õ”óê/<¼þöÎ…´^áVÀ¶‚|öTp¹É)h‚ ðæ¦ÕÕ:“nRTœbãrTªñ'bj½‡hp  [2 JåÄý"‚WniÄ ch­órÚ•?vœ6*RªºåüôC¾Ao-*£m\Í(½F'­›^i„…Çè‘sÝt#|d::ö¸x©ÕÓ˜g­},DB•0àI*S ÜlâÜŽ©Ä‰Iµž’0ê ¦nÒ1í  BÁ4î†1pŒ2ê3óû¶…ëN>ç«éÇWy,Û+<"&IXÛ~5±YôàwgúŸ³œ·ú?Zâ#¯A ·nd -%prÔ¨Ž7nŒÞ½Ç»¨”}¢ÃÍ[?õO2Ò´ÅbÊ^u{¨Áï.¡--¡naÛ°”ýâ;ÏÑ(i+'—:sÔcQ¿~i.A€<›÷”Vô­¿œnZùmúé-ªFò.9‡nd -†bs³³C¢;˜IŸòMçO\aÍíEðºœcU“M$«¥h R„/ml9Ç1ETQ툔~ò(Ù+¨Š €ª’RÅ”p´£hŽ­²ºFã!ä-jÛkÜÈüçFfŸÖ |¹ò…¢"R]]¥™Fg“„¤L1X!®ýéyy4OæVûxÁbGŠÒXНÐ(ó™5 K’kìnDF;µÜýškÚöÎ ˜î7« ޾@^ÎkÜÈLßtuÜFŸX­™]Ð ä‹GƒCŒªÙêj5Ð xbU“ÿ{.mA‘Giº·Î(XŠ„,°Ù[ nƒ.»ióÜ“ÏÿUÌ¥ g-*ýqo¡²Õ7É¿Â×ÚÏ8×FT+²õZ±OþƒÇL>ì>Á 'ÿ=äbÇÐkV¹?¾HDü$tÆnþÒs¾´WrEÑDzºN€aÏ!!ç€ÑaÝŽ!C&º°Ê9þóöœîD‡ i°eFòj­<¿$aI2ˆ»W$pü2þ¾VcSQm”6¢Ö68Äa×¹dÉ+äöŠuñHïÐïCrž žm¿·a¾ŸQÌjUᥥƒdŽ?¾ošÃ«ÞÙÅOô ñ¦Â‡4ŠœœiŸµ÷ ×¾þ›Ö{Ìë¤&àœÜ f°ö»ã_v³ÓÕt…\ñ®_ÍL‹Jn6‘œcH Âk["­²¥Ð³Zàùf0j"ªº_öõ`“ÿ"ªûœ¬ªñÖ' Ë:ÿç¬ßøÕɨFªŸï wÊáׇüžÏð]?æúÞ®µOÊÅ1§Ê‚æºÂg&Æ’s½T#Š7t=+kÀ~nÀÚ[쎩͎¹î ³ÒMè•öU8y*œc„tÍs;çßdrþ6²jKCɹaÏ7ƒ¡?¢šEÆÑµÿû'^¿cÑ&ëæ|Åúu^ukV§9ýF1O¬š÷oæ•8Õà—s «b/Š;À·“ M+çoôpôžM„Ÿ%Ø:iš¸·°ö»ã_v³£ZÞõˆWÌ”RDŠj9š¾õMÜKƒÉ˜çojˆ&<Ý—–Ý/ndQçÜ»ç°nBuëIS³§L,ð)­²Aó+‹;iyzvË9ß {5ÔQM Ñþë•»ÑO݇}ÿ©¼ükËÞWêøËŽPx †”s´o£´“÷¤lú­4`í-vÇ¿ìf'9•¡úíúÌ!ÁîY–ǘ ÿ˜¸J}~ÑÄ2(-» ®-ró±q©\fÖêîÁÑ|2Ò8{ʼç±àH €‘˜è9ÿð;¨@µœmÙÒÎ7xE†@êÍÇÝv΀µ·Øÿ‚›Uô<[‰Œ ¹×)‹I<<8šõÐ…^«ÙòÜ6)äØé‡Ö¯üá¸wUÇ#7ÌMݬwïÑÚ* xqkm³KkÍ5¥QÞ¬Î7ÒrnØÛgÖÞbwü nvy*Ïó?Ѭ2 ªë1ã§_wÈäµEIWFv@MVY¹mÚ–+Ê©¶!Ô¬ZÙfK^æd¡ßdZ^Ë<ß HSÈ9òe {^žÒ¡°€U¬`­UID—r¸Uo[¥ ó¨H¦Më"bcm‰ÄÖV—¨|1sIbgr|rëÖ7qTËRvu©½¿Û•Qq¤læ[r®4Ž:2<ÎòÊ êFsà•=eâ[9“à‚@  t i‰ ÝÓIèÙ//g©Îg6®x‘ïºz×ñåSRÈZÞ<âà×XW§ Jf4¢7Ί€€øß³Ùý bw÷ìÉ+üýà‚@ PÎ!:ÛèD·,väÿÖ.Ðþ!Kó[dô5ZŽH­¯ý3"Æøâ´¡‰¬FÁBý€ØŽOwÿ Š!y;¢š"¬¯éT0b ­îi ¥Õ¬õ!žôýΈj_Ò rþ¶W8äK‚€VŸW8yVç›yd7tÝÓš¿ùa?McÀˆ_6ú"ª)jt7ôïþåa]oD5P¯¢ ‘ó·½ÂA Q$<~0ÿÂó†Î³ž1¤Û2w*^–Õ÷§‹µKXýePò{Jc.'.ù›«D{©þØ©ìg®-öѵ½KW͈xÚJ†.ÔQ"¸H¯«uçq~uŸÀ†s‰Eÿa^ù©X¥‹oÝKdšÛ½"³*¹(üvìs¦™Ý{:‹ï~:ˆ-–j­ó­¡‹Ž=vÙHvE+Ë3cÖîµb´á0tKkrbŸ%Z{õ{#ÈtÍðױ纃-ÿÆ¥ ®î<Ï0<ë׉ˆ‰OC35%  [²ÊX2•†<²Ô¨ÇpJKużô”Î+)Ç@ëÒb ò²f¬½/Ùۺü2Þ[kšÿ7QM›ùÛxç÷˜æ4/5ÑyVDDüÇ*ÎÖQ‰µö ™p|f¿©?‰Úsýž\ÛJ7Ò®¹WÝu°ó¡Py½œ9¾‰1 ðÚ¹9„'¥*}ð8« ¦n¾%Ý"¡ åh0©\¯¢\ðЧô2xl!”sH‹Clݡǃ=Þ¶•ëZ–¥ Þ+ ÞûF±>Aó}²çKkþòz™ãüôãx=#áâ]<ˆÒHí­v0¡{Q*÷?) ô¥ç>IL¤[âkžkð»ËH™5†~OŽÌ\[ò¯¯Ó;_-ò|¿jïùE“I¸«Å©«ÿÜÝU›m|ùäøÊù¬åziÖ蟬¥Cu¹ÓYÍ_+ôû"¥Hïà~ÿM«‰‡NYŸRÙÖ?ŒöñÔÉ9V5ÙD­A0Ò1Þ£4Æhð>ÎS‘iS£®ýÐÌú˜›ÑÌòC@–˜ôŒê|ñçµ»ÊÓfl¿¥„gùÜåz…kÖè¬UãeE”ùpÂ}z°›ò‹}3BïÀpÚŸ]Þ^c8R”ÆR|…FiŒ‚Âö+›+í‚X8¨ÃÅSÏnŒébrá<Á>W"mXj¡S4X#Bà©@>s9‡4kôOÖ*AÊwÇ+&NêL<¡n¸ÚÎN1ílä7ÚV÷gÔ¡¬¢Áà¿|>ªÜ…‹„U?c“4n®ÊKÕý‚ÞW¬D‚ ¿ŽMKÓ89©{v”zE«Pç_«Â»SU¦L–_‚Usþ»ÇÁ]üïÒÝ¢nÓo³ŠgT© ¦Al±Z ÇatY<Ó È—$çY©ØÔܧ×~–`¨]õñY~ÖmÝðû®ÎXz',M`ÍÇ´ZrU]r,î™ÊnˆÅñ¡|àt‘@Â5LÕ×tjé¾xœ…Ÿ}AT†Ëæ áã:«[ÌìÑyߟër°‘úŽZz^ÀqÓ[,+3¦ýºá"S;±µã@8uÆ8.´óùèíÆ°òÞ’‘”¥Âq˜nSÚtéJÅcþk7í"ÂŽf•upôµ“'àFÒŸ=⻌ðD7Y¸›8-¦Õ×uWeq‡F]þÏ·FíŒìéõçíˆj”wd~ cŠÓ®9våÐ>ÑúÜ«µ1W`D5HSÈ9"N8¸|þ’¿#r•tÇ^3þع¬Ÿù:oë¤A?ŸÞÃ{2سÈõ«ÖÎ_ö£¡j¿FKÿmðbù«5š„²íÏÿiåA.È&s˜!¤“URE¶\—þ+ÆeTÄŸ^WzË Íþ·¢îv}à|±ÿ}D™ŸvçÃkuî´áÆÍ9hbþ‘#oüd±sòáo¾N â÷ßÜñ潈À‡®çƒîª¥¹áªEöõ}èæŠžÀÞ½}"¶÷ªÀíî›æej«ÜZ¥Îã3ŠMm½§ön›Óží«û£4AUzòjM²†^A´,>CÓV;ºÜ~¹IãºtœrëfpÔÊòq *÷vpv½ž5õî½Á‹øˆŠÀÇ-ÿ¡Ò>Ø×¯3¶§×}Õôg~ei–ªýÌ妑·¼–#ªA]Ϋï»Ã_x³ð¬…,ùÄ¡“uOßß™çó‡ÅzšÍ‹ä%JüÕ2UbYÅÄÌÚŸ>ÌkgÔå“«PL!Bʳªªð;å^Õ¾=®õ¶!'È‹8Ee¬2]PɨD¿4.¬&Wˈ21U,!I%”Úh_W?°H\MŠš3Ž¢d% (J h‡€=q_Ûí6åF7½hF2&UHå‹ËÏ{Ð[:cÑõHZÕõ¯LA\Ç‹#µ’o•‹jyÿ‹Ñ4ZQ¥rÉÉá ¥FFÉÖÖJ|ÆœªAòdtÕí/wcÌÀl6 Ð]U²2UÔ°´ôFT{W˜µ÷C¶ï„šã¹oæÃˆjF—sF×u5!1…ŠH$Qx<|¤ÞüÑ(Oä«Ûš‘ø8Mr±´€@2!û×þªV¬}*éÓÚ¨ÍëOHJ¥Kv¶VùØì›÷(_­„#¤\@*Ab±“HL%UΜ¿¯¥ÛdŠ)*¬Š¡bÐT4ŠšBQSk¾Éè7[Ã& ’šL:z®z© 6:ëÔ)—¼RbM°)È Å’·}P¦”pßó~«dçÎ#¯X1«<’ùÄZ™Ç¼\I«ÒD5›,7ÍëáInܰåL?ÝãfûäÀ‡.:]·,-táb9‹YÄáºeg¹swOPß|cãz7«…ªÈ^S>鯽]uvünTñ-vL¯½_6z#ªéͬßSG2Œ¨i95ÏuŒ†iGúÈ~+£.{ɶÍ,¾-Iº3Vœ«Æ°é¤o¨æ ´()™VÎbs¹.YYoÝÚ7`@Á+îStžA²ˆ¢ b•XD «‰¥b…DN—¨œ"ÛÙ$¢QÛ¤íÓc|³Éæ‚n&Ç'©µÍ}/ÿVYçt™¨uŽ~žºûs2=uF¶‘•¤pCþýM»+ðcb·  Ähòˆâ’€-¿uÕU“ÃýåR›ÐŽÏÛ )nl WJAµürí°¼–ö‰I/^zcXžPhË-b›2‰JX¬D+«×îc´–z Øý1Éh}ÏV`ÉÇfÎ<ϱ–5Ì¥/¢šþ0kõ*FTƒ4‘œ³\Bä*qöí ã&NÜ:(j¡3´Eš;;æÚw¹2÷#¾a—£Z~Åßÿ±»».§mBÂøóç7>ƒ@H!–ç“KÄä,9Á‹™ Žƒ’ÅSpØÕvìÊ6l%›ó }•i)b¤PAr›2ã\[±yLÝ7÷¹íßöŽ~`V^QÄå œhkËzlª3²µ V¹hšQlšìm=øÎ]T˜Q‘& X;9ë똂^јu£©cí¼[îr-Õ2)Ö1¦ŠRÉ!UqJƒpoËë´|ô%s{ü¼26¥ÃqÏÉvïÞÎ^½òx½Ç|1àT8“BÙ ;n–03Ù$9Õ" QqÙ2 ·Ç]nŽc§š)Ö͈|c޺ѣ\rr•)|~²5•Þ·Mùö C ’ ÜÜDn*1’OEö•7o8RÓ9áQN§åä “Öt§2IIàÉÅtç÷ÄÄÖžÔçéSÔRßî –¸|¶³[¼ "‚d’ñhñ›%†œC"er„9wȳ£¬n‡ŽIòÎ#pä~B¿žÒ^X¬V¿gÜ=~§UsÓr¨~ÇÛÛ`÷Sþ‰™ªç!±nX`läÌ1ù½¢"¯—&É®ÿÅŽñ}ðžQ[ââo9SbLcR,ÒxæÑß-ÖØ÷}T;Íβ*3øbæ¶  ¨èä3—s,«uðÞo„Ä€4KP-÷Þfœ‡*:ªåºôKý&gÉ™d r£ï´½sÏëaøâ†¹¹õLïøã¾¯úk»éŠj÷ü9[,Nùœ5Lç°¼î ».cd`ÆÞæóüÌHfžU~w8ùk¿ Ý¢É÷Œ|ü_Qý=‚r@>s9G ’ðC'lŠ,åuX°çôšîÆ8Ø4ÍTÅQýÖªxϲ6WŒ‹: ¼žpÈ'ÈÄ"‚ÀZx+àÖíž·ž°Ÿ:áÛÛ­À¯äaµnd² x°oàÀñaaíŸ?/âñÌÊPåï0às~üÁaùx/âàøÌÎÏÓ¯›ãØ*ÂÀÛ6ÉÊ€„ÜHGpÓ¿ð cVY Ï.ò¹Ë¹øÞÓNºîHºà;?pæ¢>Oö@/2Í^;ÅÕ®…ÃÏYW³”< Ab/¹Ñ÷Æuöµ8Mœ3Îå+ÂWc ãiÚÛ+o7Î9;Û¸²2ÕÚúýóÎ?#Þ?,Zð÷ë>åÊQÏ0F‡cQ^N:q«¦%¾ZH!› O-ò™Ë¹4éLkìÙÞ|ÑtÞxæ ÓIÒÎí 3áfI±L}ý˜Ë<|@že¬|_¯ÃO¹·¹^gbçI„)T õƒÊ÷ÜÁ¡¥5Z—û¿‘#]óòL…Â$j Kù7W}ÿžõšœ_hßž]ä3—seiš€`¦}ßhæÆî+Så¼™pµHšyŸ°ò¼Óá…gX_ÌîÛïö€éŽ+<¼Œaû|ð>æ™­í3¸±­“úD(ÍÉÛ8AA™WJÉVg;»>·¶†­@>s9‡|FùÎ ±#s4‹ûzÝB™ÙƒØs>Í·Òšž‘€—6Q)÷~ KÄÛØÀwß ¯ñvð4EX_Ói¸o‡ØR2Œ»?ïtϺr{Gð4Eö™u¿\.VŠó3«œƒ·¬n § AZÎ ÆŽFÉE À%*ŠËY<l™æe”Ÿ)*µãGfn›ØxÏ%…Øáìu¿jg¬½˜´@>}ÁÓ«“æußðƒ© !Û¦Ž^õO#˜÷ø>t0 T™¡]Ýë}¸+6;¤aåœâ:¨£`ú¦«ã6úÄnÚ'ì´ËŽ´7˜+žD/¸˜pG !“‰=mÃŒ°8É+¯ÞŸ+MT€ÿ2ßa”oÏʯ`„kì£M~IkŒ±p\iôO£¶ž¿­uMGFL÷›Õ…[Ç(©ú‚§aˆt*QNôéË•ným “WHÃÊ9mUÍx G†º ÷’|¾éeºêõ¥V†ª÷Ùþ Æ‚™æDâ’ó÷oH¯òôaºcT·ÅØn¼ˆHAEšÙÚÜíù3Fq±È̬°•§šHDòóÅåg¤ç±f÷»;ô'­3ÂÁæ„@­«¾7xš(úXV×éu‹UþžàiêüýÝCâ|×Dµ…ƒ †•óê/†j{çBZ¯p+`[Õ ’ů#,Ðÿ¯a< X½K'Œ¶ÓveÑf¶©ÈŸûÓN™‰±ÐÊÊ<6¶íÁƒ'‚ƒ‘b+é×ÚÐ|FQÿÇÅraCB Ë{ƒ§‰ž(èâM­c¯wð4œåø;~ÇCûkϘ5­H°Ý! 'çºÿêèF&5çä®6Ô¶°ö´D¼£›ªž+˲‚–\Ö:ÅFx2mtƒujÅÚGÂD¨*$ãüÎÄáC3:u5OÊ£#÷‡áVSižß-µÂZj/¹2ÆPÍngÛ/3ë‚Aªvpžf¨wvœ’rÆPµË«íH´Ì–ÖÑ í=ÁÓÄ1§Ê‚æºÖU|ß< Gá9wôç T(Ѿ 5ÒÀr^W72Y©XösÖž†«¿œ“m/þ>ãêùƒÌƒÛÓ%í<©˜š¦¾Æj~'‰Ê~б#jÂ'KKþþ#w-ØuÁÒÚ£G×RWïn@9çó %ç6Ö= (çvv½ (ç )ßPrnØnn00ïžV{Q<(Ø¡®ƒãÒ½ÁÓ4¨ÐU¡Ñ,R™SÕeÛ¶è« Òðr^72hGïÙÑDøY‚­“¦‰{»kÏJÃ¥'j[ézÉÖQíP_QÇᘞ&dó"y‰X¼ûÀa±nrA<×¢T2ãî°=èˆï>‡;ï+pDRT¤rÔ4G Ê(…*¡‰EÏïfg„&:wÚ›{#3ëbÓ ¹Mûh¢[àæììkéM*êvv½¡‰Þ½·ef^II9ÛÄBŽšæÚ»ì²ÎDJnSŠºÁ»¹a¯†ï žFïøËŽu/‡¢?x–å7{£H£ÊyÜÈ }ý ¼ç eÓo¥kG%ý ZÞ}€¼>ëË W_èl¯RËŠ¥’ zÉÒ(Oä«Ûš‘ø8MɈ#‰¹–´AÃT¯Å®åp9èJF9¹EžÚ+»*ý Z.–þÛôÍŽJ8úAµ<â΂¦ɾ†~P-¿qsNÓï8*áèÕò+W‚›¾vTÂѪå ^DËéhºÚáù49¯3†‚3`íõi'r°‚½/ñé„o¨æ0ø¶$éÎX±ª’Ü¥ mrÚ¸ìN>ÞS1@û¸Í>â­¼¼ÐÓó¿[ô×hÛCUmÀ‘vŽ´£j¤ÝàÝ|‚œ×ÙŒaoŸ X»c}/pbë€î÷º£öý+6ÆžÍúãykë#ßì_”ß}ü`õÍ_|>j—£Z1wŽšøŸÃ(Ô@7`³çæÝ4TÕÙ9× zsÕ€µ£z ìhäÓ云iZè1´ªËâ9£f»0\³—áü:óøxfaQ‘§j—¿ªåÔMΣúC†Lta•süçí9Ý ¾qÙHʦûLî1#›öÛ(ÆèB]>ªßymÚÀö@ ȧÈ9À™öY{¯píë¿i½Ç@êŹ™q&ŒüFÕéŠú7'÷¨È‘Êå\doŸ¹ã¼cØ"ÚO|6@RÎõR( ®×T˱Ó+¢@ÕrÒ”Ê6T‚Ä ÿão?e2—SW²±lØJHóâíˆjUáùU ¶§ÑŒ±åÊVs6/ígþá÷‡Õâ´ëGŽ„]9´O´>÷êXô”Ò$r©7ZUôKáBþ!€ãŠfX.ãOÂa°K(ËHè in苨V}oéÌ«þ·#¿³Ç+Ó7wéòS÷¤>ü0RYš¥j?s¹iäÁ-(i8°° OѳÇ»ýa;`“j³ÂvC™M µiŽè"ª™† fÓm}CNdÖø™ ò¿r¬?÷´¤"ëþ©p‘«Ÿe]º/Ù¾G—ˆùpù”óæOÔ¿96ûÁùêäêÞGûaMgRƒq[i–ƹ6¢ZÙ÷׊Sôz0òá<5»)‡7p~î`Çuîû+}ž)ö„-rÞüµ;­âç¡éSö¶]²þGó{&×aakC Í–šˆjó´Õ,:‡8$^H– LÛ6|¾`ÅýLanÄŠê¥#BÓ Z>ÒpÀgçBÉÁ©qùCÇ»…DNu°áO#¯I:.Þ-°%0ÅÅ7ŽaìŠä ¸ ¢zm€Bž²ã¼ãË? ŽÛ¦%àÍK\!àÞÀÐ˵iY¤ÀžpOGoD5EAL;°¯— “ÀêÆY[¨ŽÄ†+rÞÌAfÒSÂ%FÊ•òŠS}ϱD)ƒ$–&·¼– íOËâ!¹ƒË=¸ øµùy$û-sfפÔf ZeèZ)&a@Õd»hÔ8øF¤Áî<õET#ü¼£Ïœ)ƒXÐÅÊ^;¶úÓêÐýEC—íMeÆ âwÌ ¾Âò˜ºv–õÝÛ (ç͹J½ì|Tgߤǥ/ô»Œjy ¾¯Q›qBm8 £$#èÕ`UY@‚*®¯¹ì%“0D ¤Ø Ñ` –C}Õðæý×ëÿ‘7Ìö!›Û£‰-{?X>å¼ówäs®iÖµâC7ÝaYŸ¯+æ%„•Ž:F„ZÕC>1Ê‘nîs vhוû#…Æï(„\çƒsÙaüÁW4$`þ7†¤Ò¯âö@óqÛ…¡Ÿ%ZÔþ!é£ÈµCà9 @¾h9‡ÞcêAyµì·ÛWp¶Ût?fA³øœw…øHÃT`Kf`Õ"„޾ÁÈ?þ­^ü¥”X"’?(ÅÀô<†á„ôÜ9Hb²ÅžÃ‹?üâ?8 (‹¨ÄÀä,ÆÈ©à}ôVA‡@ -IΡW¸z°æJ$–¿gi»e~¦þŸû¹QˆQzaäT€¡`ªÉJ9›}t!„)ËÈ´… 0*9ÇJ²ºÝ dÕaæŽÚÈÍk s] žv¤Å§N5$)%‚CÙëºò}§¸Oûü÷Fm Ï¢`K4´"€¯Ï´De‡¯HÀÐBJ1Ì   ë±‰5ìÔ83ŸxZ]FÍ•Ž›Èt«£È™õÙ5ê¢Ëv’Ó!‚Izíx5/ñÂúÝa^ xC /Î:‡|,ÓÃB)ì´ÐÎ'¾ˆ½Q´ÃT]Иnˆ9FFÃÔëÍ3Œr¨«Ï“'²€C¤í÷v)êÊöϪR;ó«êTÆ)7Á˜îx¨öCœ¾Ã¨$×N1PcˆÙ8ó[6WQa^ôpRã–µÀC (ç-s ñOU[Ïô> 2¿Œ="c„ÃpBTeˆñ?Eý^êc°|Á{tǽ\ý´×õ§ï6Ê(Cí{çNê¹&¢U'ïyvÇÉvÔsFý΀n› xŠ÷î½Mo¾Z-ŒÍ¹(.P,},6š÷˜á’ëú ¬²û6sjƒU-.ëܨËb_kÔÎhÀž^ôD<ÓTÞÝ0{ñÕj6Y ¼‚·®`U‡ý†õ5 F ´Õ½tDi5k}ˆ'(²Ï¬ûår±RœŸYå¼eÍpkøRÄrnë¤A?ŸÞÃ{RjWׯZÛ¥g·,žšæ±d™Ì¼ÚÎ.:v·CöFî…ñý¼´Sä½EÙñë=’>z5EÉÄO¢ ½W[¯m>ù¬z™®iÏ]½ýò uÐc£,cŸ­yý’MØ[IÉÒÝ`áÊ—]ßmä4òªŽMw*MÎz¾&™Ü0U{·ZÆàE|Ä Eàã–ÿPiìk× ÛÓ닾ˆgÒÇ?O8ìv&j±'Q1¯ç”ƒ>ç'òërÕD%<ôïþ¯hÌ{|:˜†ªÌÐ.‹îõ>Ü•5Òäry¬LŽjyÖ¤ Å}z‹”ò©ÏF¯.ÜzÙš‡ûöjHÍÇy#ùˆ‚³þÖfp‹óçÔöÝ^Øiù—âö*Øævëú:è ºL4Ù;«wýjZUÌlGrïWû{ìé’Ê(I×u¶¯]î®]7Ú°‘š¦tr,ø^Ú£û{ ¼õcÛ—ê=Ää=ÖùÈ)'r_(,ýë˜Û˜?–œ­ÍpûßÞ£K&6”¢C>'tÏüókÚNÚpdÃp;´##(5?cl®ìÁÙDÉD~]¦Éâïa;æ‘ÀXvÏø\w6í#ËÅÊd´»‘Äì…­Mu‡òkw0¨–sÂ$ªèQ.›`ãkCØÔðk&c'èÒ¤˜XÓ1ã‹î{¢£ZÎø^ JPEGµM¿Q öZ)•RnGà3³TövÒ.r.–d×ýkV¿hª¤q¿ß0jyK¥&âYñ­×Š}òÿ8 Ϲ£?Oø B‰žè°Ý!M"çÐ+Üë¨3³ þ|V#E¨tæ×n>[‹¶j w w*þ)ðø“éYÏÝ KÊÛµý¬wòÕqrTËÑ4øåµKýN¤ÒÒB§åj…º8¹èÖLåŒOþmi&ž\Ì*.4+,²)RÛhL½Í˜$ËãÆfî^¾"Ç”lÆ 0èx†åø)œ' $ ÖœbB z{?"SËäj9š#SKEJ¡H))ÅhB¬§'¥Dg¸TTW—«Ê¯‰ð…L’Uq[ q}}ÕÖHûìg,](x"ªëô£Ç(·#Kg$TË{ß‹*:ªåµixRC^¢7¢š4.táÖç"a™˜å¿æJhãº8Þ’&ìZ¹1ªB…¬¼‚»ðàìšàiaTèªÐh©Ì©ê²m[6:¤©äò*éÅ2âè®Þ¿QÔ9yù?Æ–u[½æZDÈØ‡ô1’‡Ž¹¸ü‚ sÇãI.Í|G°D’*]‚2F)©¨ìW.Q/ÇÉïÇ”Ø%%/“Q|WÒŠ $‚¬êô|y®IÆ-a§²è˃å˜2,Vĭ昫̼Õfø—€^¼îædsaÍúGFù/ZZÄn¢Ë¼Ò7†Ç)3±ÇŒù'K d³`XèGï&Çž.éû½BWˆîÙ¹`#΢/¦HZ˜P‘QpíØÂý¢={ó Ác¡U¹¥½ÐÁËVävŠ@±°)·VQÔ ºüqÏ”nÇ|";fFÚêtžÔWÑñŒâõ]è_[ÅcêºÝSßîx,¿Ùý`3C œ¾©è³Újo§DƒÇbIDœ¸ˆ~ÖA1“—[ZС}y+{Ñ­j¡½*4ó¡õáJnî;M¤•gId ×áö¯Ÿ®¦Œbó*³sâ5#ÂbIIH|—§Äˆ88k‚ß”=ð©°{¯¹NLk–5«]ÙvÜÄò ãÄ®º¢ë´M[øÙ‹m„•Q0äó¥G÷âƒûŒ~ßDHIU:;ißlïøžM®| kßl×=GEIÚ ±5#›ù°[SSéÌÝ{‹fAUª”éyii%)ŧ½ìAzFšW@̰+·sÍsõ”xŠ˜œ>לtK3r*uJIérã&¯´´ÌØøv·ÀTggxŽC Ï\ΑªÄW.Xò×­l¹Q«á?îÜ6Ë×:s×g  çNÑÞgÓ¦wq¾wjgŸ¯ú)¾ê–«ýM“ô<¹ˆkîÔ¼pk&ªÝÑzÏy¸ó ÚéjAéi_¯_זĸÈ0õ âÂΗÙÔ¼È&DŠÎÞz?Ú<úñ¤ÇUL‰W²ww’}@ë.tW>•­ñð•ÉB•¶ Ûëê0:u†PXXð²V¿¦¯n„V†‡¼¹e¨¢¿rÚ«týÕö=J»tf¯ZC?~²jÄ0žàjëÖ.:žu_°âHLŒÃ£øå¤ü<×ü“¶—Bû„ÕŒÀÇ]ŠŸâWž>ˆ©™‚d‘Ÿÿ탇ǎŠ@>s9Gï¼Äœr:õ˜“úièø‘ßü¯CÂú6Ø8o·kÓˆ6j•âirfü_¢°Þç·¹ï¨ùÉJËX–KÛՈݼ¶¸f¢Ú+ndj_d›=<°GMNÕ™se+‚wvïuuKȺwjÝ.¼m Ç7½ú¶Nи 1¨mÓï¿(h297t3?d®Ñé32''rJ ªå¹[þxc®ZS‚P(¥»þ6ž:~ì¸ÂÕ…˜˜„+((Ýù—n®!Ø(m-¾ZtÜûƈ˜÷§IÎùÅ Éɇ4óŽ|â=À©Ö‚ZêPÎ!Èg.çÌnÖºK ˜0Þuã©r%PÎßOlglZ,»gMmeA´@.9)ýÇ âœ@ëŽÍ~Êò«/² Ëgn>¡>†Uô®Î_ßeƒ›¹ÇƒU%Ì~$÷ ­~랣‹ÊA¿×ï\]ÓÃÎÒîÝ#ffUø¡v¹µ\‡ÂýàF8%â>=CÖ©£´s§7æ“òX7GÄJ­”VV$«ïV•'ð<)ij<ÁØÚx¥¥ð܆@ Ÿ¹œÿgæT=ݺ9'`±7|åòmTU»œŒìð*韄=ã Ž{žº$›2?к+å3ˆßAÈÉ‘¹8‡ç$ÿ™úW±ên ¤ó §•ý¯_W𙕛{‚·ÆÉµÏ¿ûé)Õoñ{ŸvÀF'“%½z¾ëWM`ê«Ad¦¹óµó Û-®•óRxŽC /BÎIâ¶Ñßm»éö øä\OSQ:QÊ×]ÎÒÓ–æÐd¼ª>Œ¶@%Ú› ©’UçËWi¢ý8Ð¥·¡ç’Ò¢¼ªÍË€MîÏ‚¨Œ²ãÅ~+M…råœü.)ì\ò©¶´>z³£›¡ ·m¯öoYoÜÞîøíƒoäÀs|þrŽˆžü6|è_V¿ß`Žƒí¢œ³£ÍnGÊ"Òö Ûûr±£{šÞÜ6Õò>ç|/| Uôl —s¥±?i\»½jÖ*vN&F2ÓóÝÂo¿ÈÖHuv>ܺ {‰8[˜ÄMpm²ÚóòoEÞ[„&Ðï·µ¥svJ)‹¥Óry™l«h²a>™&ÞYYŸ^;*á:gïèw訄{ûåkÕ/¿é tTÂcŸi'"¢ßM¬åÚ[jJ.ƒ&Ðï&6Ð ÞÍáù49';U$iÇcE‰å,Þ;ÞÃ4ìœAj—Æ!¨ŠÛw×6”iu±I1ç‰MoC–ž‘vò…Åz‡%\çØ®Wð‰¥»½ÿ±É˜tDÞæ!ϲ¼Tf¦5Dí†iG1àH;ŠGÚµ-i7x7‡@ Ÿ ç×A6]Íå…oÚ'ì4Ø•ÒoŸ R»û²] ‰DÕNçN–&;Ó<æP›xòóo½•§“¶XЊ‡í_‘5œkvºMEŸžtš‰æx£‰—óÑ?ÕF7ÔGmtžo%¥÷ X;j£·¨Ž@>ÑúÜ«ýYu.M#L8±yãÑ¢… g?ù—ï<)°‰!M çuv#Ó²›JHÁRiXª!·áE¨´Ë¾¼<Ê‹G®¿o{vuq»ÿHE¡ñþÿ°5–OÎO‹ÌœÜ-êH]ÐQM^š¥j?s¹iäÁ-S–"m˰á9yÀ‹M iB9¯ƒ –Y- ¿6¾©#o¹ëš”ìþhÜmÁé…b“lÎô¯D—ÕªUÉ£dš(çH]ÐQlß#5Ü?r–ôÙÎ-éÎþaƒÙ‹5m'm8²a¸ ©it°° ê|ó^fIjržmÑùz ˆç¥ÑІGé{*‚(¬žêöØÖ>jcüÄ÷íÛW—Í¢££r«õ¨Æ¾9²|ÅáŠRXh2ø×-³Ú³ë2õS™ueÕ¼C™l†¸ØròÎ5ýÌÁå4ÐdäÜÞE…¿>¼…÷"×סnZçÛÓ_§¿(]$F¯î3¹wÕ%•N¢Ý"¡$nú½”®#5‘uG˜ßýièò<„ö\¶u†(H1 aK,.û½ÉvìðS›NizÓò'Ö{è+÷ÇwŒ^¿]_ÛFÈ{6¨/žKYÆ÷uøC¢ÛöïKí½míã5Fý¶ôzR­Gµ’×'/ÈÇ93šTúC—/VtˆÜæýÞE3±üës½z÷ìD³ì#ƒû̽öàÔ@#XøÈÀ³óÚÈ÷no•m~ý¦ÉhRLjqí:5'7¿}{½ìÏne] "*]6ò¶,U Ú£®å=ª1:­9½ ×rµÜsx4Y±¤.FMÉ볡Æ~fD„hæÈ =óÖlôkÃê1J*íÕA­V®ÆUœ0AÚæËLÒò#Ö¬VQõ³s´‹ó‘Ñ£{Ó¥™q6&7ôˆq†çР”zT›YÑ£&Û9ë7›å:1ê‚¢8[D7a©;؉,3Q–@Å èUÎaU8¡³Ó“?rŸ?g‰c£†÷KhÛK_Z^®èø+}èð¨fr3¨Áа”zT›¯íQM‘yuùÐʼn“ÿ9<éN—BÛŒQ’+P"\¢B-f˜±`Ì1ðñÎö÷ƒë7¿K%ÂÈoß^¿Z®Õo` !HàÔ@ƒ«¹Ú£Úørj˜èõ¯·ÓºslbÖ‚NSï êÝsXþåà%¢Ì¹{‘ß~¸' ЫuhÃ³Š•Ŧä¦a˹…¤B;©œhH*zTC„wçv[øÜgûTÐ×ǯ¿R ­Ë³s”Ûo×Ö‡sθc *h½qw€œ7! …†¥ ©ìÌ,˜PrYh‚ ûHf¡k™!æ*7¤´d ¥ ²TIÝ/ =ª!̇òÿÆVw¿jDó€µ§ 8ó¦GȉËN:M ctkH›)æd"‚¨¤ÂßB’ÿÊSpx&K},;4Ng¼ÔÔÔøþö§Èëw³ßzõ `Ð}†Ú£ZÛÒ»b-jê8&CíT%åéÙkv´º˜T޽ps?µr|É‹­K‡îœpô È9ð‘ä¼èâÃ¥ž–ýÿ*„. q¢9ÇIâ:2;5‘ýa+Ù‡0f˜ÀÎ4 U=ª)ÓôtžÿªÓO'Ú“ë®8rÓü+¾;oY§…B>¥#Û9ƒ®b2Qái?:U+Îj9ÕãPx*Íÿ»È$šûß›ô”ùD†Êàì@ƒPêQmª¶G5„h598ãÙAë½cŽ”Öû.áÞª_"±·;¿™¿#¢0b×·C 1(m .ä&gÔôªb×™Ø7D—J}’^rÞ.£µF,:ºãEŠËùÁ”ߣÏÈÜ4jç¶ußÔ´x Ä*¯ï™7†‡"&J\Ë5a©ãCöÃE=>R ›"½œñ”x['±¾ê›™iìœõ•»Tä@e$6Ÿ†ÖtÔ\íQm‘{¥‰Æ®¾‹žäËñÛêz%ÌîZX¨]Lº´}î¦Å>Ð Ô“'OÖôÓüï¿©§œ'ÅôØÎõ’;®åöë9Ñ ¦¸5üجذiƒ L£Ê¹…¹ŸFΉY¸~ã*žÒ1µïS<ŒÇt/ê~Ðì@«’VÆrã‘{NK_ržžLÓ£œó|ô(ç2±¾ä\¿Í\ÏTò¨†¨ŠBví|ZHÀ R„þ»wwa¾? ¬øÙÎÄ'FFî]4ç:Çsúº¹­KÍ}YÂ_ëÖRÇ¿Õô—…9°p#ð~´5»Huoáø=;¸yžlï¢jäÖ®ÇÜ-|œ£"nÛrñ²r\odû«³ C,‚th4!ÇMs<бÃO™™÷SÓoàúÜ%þ›Ûîqö|ª_ ,%«GQÏ‹F&çL& 9OrÜ4ÇáO¬M-)ê¸ã¦9x|ÇÈÊNòQEÝäÅžןÚ)e<—ÐÀ÷ÝÙ\^g3ÓîøOžKùy³sî6²ã¦¹ÚNäûQ RSÔõÞÌõá¬äQ !p|lÖqh Êöž¿Í©ÎÅqôêßð(ÐðÔµýàm»Ï9ÀßÿÎ]¹Sh)®)‘ WµA…-Û¾5Þ¨Ô̬ûOC—ãü×r¤ôyy·GNwºÆÛ§rûìèg÷ÒÅP/‘Sżmx»asÇ%¼M§4<€¿7²ŽKxçžêEíð÷m ·I2|4cù/k~ø³£Õé«62—ð×o×ã?áï¬åê*gÊ2VLÅßÙ@×{3‡+2ÔÝV…Óoœ¾rO¾+kyEö×ÀìM3Úy^³lìq©šžv–kž—ã6ú9ûœ§¼mŸ:;…:¾ê1˜0äÓßM/Ûˆ¼¸‡@O=í8ÓÓ~kX7µE¥T)‰$.}w‹ÛøB®¾zÚõÞÌø9ÿo¢rßR>]­êªpú½}ÖKۯç$--êèC_ÉŒùa}§?¯–b*Jk´}ÀmtM€žÎÓh9RúýêÈgô4Ï´ Ý¥v®<4Ý㶇¦¢¹‰Ý?4KiæØ­BÔ!“ý‹üúTøM•þxÈ¿ª ³»õÖqLJôï½3CRøtۃǮp`¼çÑ€•yìð•ÿ>TÍÿзÿ‡8|EÑ1ù’€¯B HŠly2VöÜRòv|ПvêÖ`{wÎWYïnqq]µ·Ñ›UC &*`×F{͸ÒKWéD5(²j‘¼Bp-·ë®¾¡±ð#âæZ9E–D¶gthü‘ú¾Ö@\Ñ¥YøyÎrÎrzæ8üà03_Ó !AJDÕBÜâÃlC‹ßP‹úÞÊóéo„Ó§8*tÎ)L»1ÿñÖ¹[g_xåFŸéú¾gH!ÕæÌšIˆ4uø¦·Zv*Â)ÖѰd ÍSþ,"ÙóäV=§y[¿Ž -°þkð©ÇÑsüòˆPñh*è6²]™ssÕð)[æw]üûÙ{™Àõ¬ í9i_¸˜~•5ȱSˆà±^ä¼F©"ªb}â’[§´¸ï±wÓÞó ‚Ž"õr7d¹ÜüÉyö‹ç ±7ŒöA JAÊÒëÅc‡y‘o¾Ô¹CVÌn3®7›JavG9~1OÑբі%D•ƒ8š]Æì¨JS±¤RR;wÎ{f$9  QÇ‘íKðè3N»ï*Œßåþ÷ìï ¡üªƒK#õ³ãòùn›àîÉè²—ýÃSû¤m:º)U”z|ËO[°ÿ€ã•¤Œ ÖïXöìCyýºÞéc²‚]â,z{bËJt_CÉÏ—ñ˜êÛ#Ó.‰/ÑË#ZM— É ‹wS„ü¯¿0ʉ¸uþø‘1Û¡ 5€ORãHuî>gâù~6ŠÙדÙCÎF‰ý:@áTƒÚ@¿•Ow#ÆKâhNMp&A€à«ÔiHÿît<*ëíßbüMÍuæ©Ó&3fgܾQ]%¹~óEDËN»mÉ™4A¤jó)ž?ÍQŽITƒŒTåó‡£9qÿ1•…¶íní ¦y3¥j¥w²:ºAÄoŽ,_q8b„š þuˬöl˜`4ŠœËsã ¹]ÌÕfÅ܃Wt˜/Góš ôW2¯Ç‡MSÎ5Ú~Å}Érñà·ž!CV™þÏÚÁF8ró¯ î—ôë£sŠò‚Ñ!‘×\¯•E\Ýz_=J®îÃÓˆÆ\ZAžP†Ð)*at Í‘ÞȉÛåBÊ‘,'k¡õä?ËgÔAŸQP·›;5xTCêá­äõÉ òqGÎŒ°&•„þÐå‹"·yÃh 9t4Я%£#:l™è:vIÈæ¡÷™ä™Vó=ßûçÿ&ª!![O—MW£~à1­ûns?1kçÚ|›¹nN/²Q[ßZw#uøZÍD5äáÚ#4]MEº%$JäD®æ&B5ÒXÒúÕªTð¨öAnÐ0AØÎY¿Ù,¿Ð‰Å Ô]F¶¸ñ-œ¹åƤÍ^á[u;èýBï1ÐÍ.>ïp1ïÚ·VMWÎãܼåt@\Œ,Ï Ø(8ÚòTʆÁNÛŒ/ýý•ëø/ì‡R ßo‹WûëB‹zìÙ»×ô¸^¥á”Ägþš:|ôµ)ºf¢Zƒ@PL3ShG8GEw»}û‡åÈÔ]»ƒ{õŠswƒŠ eÕæ—yTÓ¸Aë·ó›ù)7hÆ¿õ1¬ÓspEæÕåC'Nþçð ' +ðÔuÍvFPiM3Åo†»á÷£62¦¯YPÅ­VCyV6Ð{²ûÜ)Z¹Ðr. m¢,ädòñ‘#Æ>£JìMídOye•‘1sÿ?vö+ØznSÔÏÝLüFØ ñ5ñc‘Y{o½{sM¥È+çÌZÖø…ãõÅá#š°EZÚ‡ÿ=y2(:PÙ£Z=Ý a¢×çL:ãôóc>¯guÚ0áöÝYP¶ÀÇ…$Zõn™_kÜH½*Ü*(« Luñ¼õÚøéãcRy%ÖÖùÚ«¨Ô¦¶“Yff;fL@ìêBz&ñõûùb4š‚ìëû_4a{HØé7¢ó÷ ‹=9žþfÝýL»·`·  åÙrçn‹ðWùWu0d{½DÅbʉ ‰J'GYÏ: ×Çíòª1 ç@jjtvƒ&¼;·ÛÂç>ãØ§‚¾>žxý•b(<;AÎ5°ŒŒ®Ø¥%í:Ÿ·ß÷ò”œþ¼'O]wîŽøqµÀÙ¹ÉÙè$RV‡AfÚVŠ7fP×ôê¼@Ônï“èS‘q\÷âtaâäðRra;Ó¶m ½Zµ‘„Y$G£ó¾nùûsãÁ¿¿äåÆðL\}{|ïìªö—™þ¢¦žöë‹¢»²Ú*âñüŸŒÜ‡‚þ[+h-éUg⥽­Â݃rësÙŠ¢#(Z·ª”Tò¡çR#cª+_óUcLMá ½ãI‚Üç¶ê˜‹»Ê¶äåä@­ªxTS£³4fCùÿ-STÕ¯|<9·ŒÌe¯ðo{Ìþ¾Øï~L(›š!J%­V¬RŽŸf~ðD§Þí9îæ×o´\ôäƒMÐF¯\Ô—÷l=«“.ê§ïó:3û=ÌNèD¢ÉRv=ûý•ì•¡íÑC¦£=ÃÁéàÈt´¡Û’ : •ÌË»t÷îM—ðŽŽ5á$®è|ç׸W]YÔùÂçH®è¸–ãa“¬Jv9®å¢¥ßIÆŒÖÄÐNþÅ™üeþãàJ6:ÙÝÈ[«{c"(®¹™)*nTÎ-¿ ™Š¸Ÿƒ~±È¨0dè»ÑÊ|3S¨Ø4AtÙËÈè÷i¨Ä̬$0À#2iOÚɃœÕYýúZ^½Æ }ÎïÚå“;mQW°v„«fÆ÷I.t>â½Å±»*A˜(LL%>â?H&¦‹ÓYd¶ ÕØ”ffB55¥™r)<&‰Á&s$“ÄÄßd&%ÑIêá¼Q)+„¤ÕÙˆ[ê½&Ô*ލUüƳË#ˆt³ÜR/³–nßQÚÚ”k¹\%/ÞýÏŸ9·þ–t÷“(%|In–8‹/á‡yìýá\$ˆgÅ™X™8’Üb]|Ém[Ë3Fž©`m÷ê €&ˆ.#Ûa1ÈÈ:©×ùÆaôü¸©ùF\#<†ž–öéT¹¨ÏÙûh‡8æ›G=!x ®øK{ËVA>+?×07Ççð“Y bª¸˜^\B+ÑDø{ µDN”K¨|c™©@aŽ(*0M{ûÊ“"|{ü¯.ZŽ«xß_]ñwõsô*<:’õìALI¥ü«<†vü1-]Ö£{¥¤2BüOªŸz$âïxXc €Ïº.#“Kˆ}ÓÃÝož×Û‚—×*a~ƒ¥ödÉeï_G™^|*°k9Æ~ZyD±øn±¨ "*ýY‘z&…Þ§ÅÐï Tñé×Ö…:"Û}s"ôÍaè!KVnÆÝ⎮–´F9öð'ÖuÙ,øIüRóÞ,®kø„ŵ^jÊ ~’>$kϺU«KÉÉkD¢7 F ;»U9©9©µý%ùby‰%ÏññüÿFI äç d<#­MŒ8 Îx¯…î<…—?;9‚ÈO þîtÑ£Ê} ò¨„è…¦í|¦«¿x Ñf ¼7íì<Ú7N•ðý>êöØÖ>jcÔcK€f,ç«ë/{‡ ›êÆÉãvþú÷³Ýªk·wQá¯oá}†Èõu¨‚Ö-Z¶¤áÒsQN}̸ó/+&n¾hi7îÊÙSXméå³SxÝž¦ÿC%p9¿%¡X…¤dž—*}°SÅYÃÈü”P:Ñöã;Z²µš{íÚì:õÕ Hb6’x­B̵k}Hîýûïyüø‚´Æ_EEHFÆY9ûžÿàö3 »¤cŠD\ª¼Õß}»¶ÈÈ0Ë É6ç¼i×U¹‰¬¼Mà”÷î{_+ÊIº¬꛿ßfK]VÈÉBtÛþ}©½·­}¼Æ¨ß–^Oªõ¨†á‘Ó‘Qƒí5뺴š»a~Ë÷Ž+R ânŸ’] 4H92 ã<'–dŠNÄ–>—Ådo\ÂÜ0Ço§r!‹¤ªÓ9˜¥!Á š¥Õ¦–yT£:Z<£·‡)‹ë:hÙçˆóoKê}—PêœííÎoæïÐ8g )Ä ´î î\ÞŠÁ+æÎíiÕËœ [{;·ɲ6¶ôGÓ]Æ8«°ñJõwêÅ%NåÀÍ495¯àQ Ã0-í[ÃDq¡6>¶õž‹ROçlrÞøEiCnåÑfœpÜמèý÷¥_§kÿz÷ šB@ç»@@¦¢G5ñ›ƒ«7‡ä+0D%ÉËç-9ºÀ­αâg;WüSœ¨v¶hÎuŽçôus[—šû:;g]G¶ ‚áBîį&NúqÒßñ}á4 >1*zT3ðœþËoÓuMe{ÏßæTçKMgçlÐ #Û]¡u2 ²¨Ûˆ;Æ=ÝÖ¸ ÇÊø`d»¸472¿=bµßbyûUSÿ|"öÒœH(àcrÞ˜úr” EOÅcUãL‹ìvß]iÚ †»Ú:Ûaõ]é8Öæ)‚ȦGŒÿ&óÛù¿Ì ÷ºÒ™ %èMÎaU¸ú)úµ»oœþ@ŸQ]u©çE?k†õÛP2@=€‘íúáé‰T“¿”/¦);£ÿlòv÷¢#ÓƒÇþÕç4‚øCáº#Ûõ£åÄÙ…Ê=†_Œµyä›2y6úSAü¬™?¿5úÆ-(hºTëQ ª¢7§¶mþ+†biJ%:~µ~Þû=ª!ŠÌKA‹÷Ä1LyòV ·-h—Z ÞÔqd;Ô±†$çA‘éÃŽcmðp—q¶OÑÔ¡×­¹ÓÎ}æÊü>sÐiæ˜9”4Eªõ¨†ÈâvŒyyÐÉÓ¶fÕyÉÑ£å³ot¾÷pž#I¿Íßi¯¨CÕ¸€ä¼! ÜÕRû+®ëøkPI˧‚©üQ;Œv,@曢@¤Zjâˆ;â];_j´LÕþË'7Žt ¾?)ŠMGçü+^|1É$êÌÍb÷@+*”/rþéÃ¥ÓŽNê³ì7§ß² 7™n›NwÀ¡X€ª\Ùd»ý;S¦p铹ê‡ìV,LxϽë7j+é÷p_Xx@©Gµ™j²¬7)™ÙÃvÝÊöJß:tÂW'|nN±&¾×Ðw˜vbcHË®_ãíø¡WÓÉP¬@“óØ7D—J}í«sOˆ&;ºÉ?$…¾-¹’Žûr˜;LŒÁFwD½H2™mT'7·ÐÄ4ÕÃ]A®±Å²;?Æ™Õi¾*FÐ)h?3bwšÚcz^±ò0KR""ÚÙ˜0‚6ì=š«ëИ˜sz)voßžÖW}stLH¼ôÑ’W&$$o Í|&R±ŒŒ§uU/ hú€¹x×Ò¬LäÑ‘ ó6:¶¼«µTøsõþÇ›CCk ”zT›_æQÈ41ï`­¾ú¡ýÌ ;S•KÔÒŽÚ¬NÎq Ç_¸–_»6»‘‹—pü…kù¥KÓ¿¾áŽ¿p-¿w¿æV„òû3ÁïÈDÐü¶¨ ÅP>bø/ÆJCнOÎ&›Ï´¦¼ÏºV¾JË2µ{—¬ÄäÚB×»+Ó¸±Lƒ¶¨åM¡™ëÿÂYÑ£šúœç·ø¸ŸŽ©,ü;dhTt[N¿]pzÌýÃ{ÚµáðsKÌ­WÓF—<9JÞùEâ/‡v|K+ÃÜœj·×<8/'³Hy@ˆŽ²"¨áa؃͘¸–+öga^¶¨iƒ{LÌY}»{ÚÕw3µ÷´£”pLÕMŒ¢ÙïƱB ÌPêk•²#š6EíÝ×'téÞ¾¶aPª„·QKYßð–¼ÄϦˆqè—Ìž-6=“ó}·™54>Šœ7µÛg=æŽè ˜Z‘‰‰Ýë7x`­“ ¯ÅIêñçÙϽ‹……n®ÕnèÿŽÊ}…èHBkÍ©Ã(9âÃBY„Å"šä«rUDÓí³LH¸¡¯b¿¦Çú–šz§Öß%=Q‰&d…ˆ¸]\éO”ž %Ò¨T&±V»<âõ¢(Ú’gÿÒ•IX»g»\²ðý°a™x¤•¿A³kh4’œ BŠ»»ï™³îOŸFuìÈⱦ+g¦<ùgÐØÈÅE¡f7wñyŠýÂBÛòó†"Ö$D€¹q|*‹€¢PÀU¨¶c¼üî 3=Ž¡} ÙNõM<c ¢w"ôT&iøgTþìÁŽn5žLÅ˰ˆoãË\z½ï`µÿ5yí¿ðr>þå§–‰·ñi÷ßMTCX]ÛÃt5h†ÀšíM…reú´º‡<É·´àed0 œh qÝg>JîŒ:Wó7v%#ª?U”*ùGbG"ÚËŒp$Kµ4#’ÔÏÑ-AΫRmÇx©KîDÑ!Ô³Ø041¾ˆÊz bzYTÉ(B’ !ÙZl½ŸÞc}µŠ./Þ. Â¥gkÄqG¢BoÎ>úúyù6ÃWöGŸà €æ ¬ÙÞ¤á[YX¶Ì&*Ê0''ÕÍ-Õ]=ï|²È-ûQæ¾Îûl)¶(y¯Âè|—jÎÀ0ÛJ´vªíGTó–ŠÔŠP@À¸XýìrÄä¦ìAÈwF´@ ˆ¢eû¬'éÊäœÌÝ3µ›vDÇÇÕDÀšíU/¾Q‡¾c$•}ñ»æª­ü7YÁÓ1û/ɇ.»¨ù‘mt29±U…qì †‚×ÇdÃã„¶ôÚÔ†äÕOÕŸ°õQX„|¢ÉC’a:ŠRUÅíY­T*e] Zý×éƒ eéÖ5Ê Ü"öÙO_»ïÝÛ‡ëxÉ×÷–)+µ‡"N|™`%Å¿Xìš4ðeÙ8KBÉì1…›AÀs,j+ÉðT)Q”}™a›Y– ¨(ÑûÀ:ð_Ç8†PžªXL4Ç!=BÝ—Þ%¤c¦çEoBžëZN}ˆ‘œÑc„ø*ãe‚ÇŠ¨·úþÛ×”„² ÿ„õ7=ðŠ-¹øÛÒï"‘·ă†ðyÐ̬s¿±K¯VlLšôã©'6Ü„M¡£º sa‡lïÀÿìñçz¯µŸžª^.êoJOy|Ê'Y\#sL0Á`I”ÆúÌ'Ù_F LkWYŽ 9¸ßøø‘kßlê8÷ß°Ø>I$7öμ×§&„ðhŠ  ¿%)=¤1}”HÅú†‰¹(ËX}rD}J>XÅËγvÇ81NÅËAsª¢ Tw9§=B¨R„zYÅ(–.í‡fµ@eÎ(ó†Ê˜ Ü|ã…½9vu–hüÀrÏ~d>ÒbܤŒÙ3 »ù6Ð9ôŸ°òfeÁ~¹u+´¼ÕzTÃjp³V;JAÜí“'/^?v¸xCê@λè¬+«æÊd3ÄÅ–“w®égN„R@ÎUÑßÎÄ´Ÿ¼‘xî[¬iì’ØLœ4/eü… ¯LÜ2ôÀZ÷µ^„Ö½°Þ¦˜™ ’EL`Òg~ä]ùÊEš¹²ÈÄ’TT²·‚ƒBRÛŠ«“½¬ðOSšu¬«kfD"S…—u±OD~l—‘yÔ*E-ì"jBfŠC2GÒÀ}3•:Æ©/JfµýÝ~ĪÌë6®d!¹j6fHÞDBžÚ"n·Ð’Véç?2Ú‘\û– f‹¹!d^Lò¾¿Pó•ñúµË¼…±;·5˜¢u§Zjâjݬ½yn’Â{öJ³‡GwhUüës½z÷ìD³ì#ƒû̽öàÔ@#逜×éý“+B7tþ²ÏÈ O. “†Ý?¾›=ä|[NڡܺÉì)FÄ’‡¥p¢9?þ¶¬˜¸`Ó×»·[l³*vš2YáÓ˜w„\¢‘P™g¬mx ⪺Mg„vo"xfmSÈê•MJÈâ„ë[oäÐV—zô¼d^U× |O¨Ì-8€2n1ZbˆŠ¥,ð–f9ªêwìU;ƵŘþŠÕ®Þ#Û+‰‚\î–’b\XhF»@°4QQ+, Šk¹ÅJj "Ä×r<ìÊ«<­·ÔFÎ¥÷Ž-¥àµÝÈeZ¿Ñ?µâÑ´#ñ`Dž¤,@jð¨Vmäû;n{àæ~jÅÛ¿×gC7›¢™ oÅ™×%}aµ8 4ÀÈvíUá>P÷)?ã§J)ŠŽ¾3õ‘ÝfsÇåž›ŸÙîÈN†¨ôEž@fÝÄv¹È­(|ÕKû=®k\Üst†êÅöI[¥Â.ª.>XgÂúÈùò‰–׉_™Pk 41Ä0P&Ö)ëêè¹ &ÇÚ—^ J1۸NJ®L^ô¿ ƒ_½îZ¡Ç‘P@¶¹E–t-¨sÄŠ #ñO%JM![Óx<1ŸSA¯¶c¼áËË*'wò¥Kùlv–1ÏñòöÑ踿–h-' VqD­âa¯ mÏ“®}ÒbïÕ‚Ò1ñ)K˶1HLlùj“ ¯í QTÔÍIgÿØañõcÚ òÈ­[½Îi"¡Ç·ÚÕjÔ Eq¶ˆnÂR7‘ef Ê( ¬:Ñ#Û«® ÷Y@ 2<>¡-<ð¯~›[½þÑiñ÷¯OÄmtU®*#&->3>©81zJl¬ytúú,:jþ­{¤´m*ÒêÝr®bÇœ¨@ 1ZxöþöQèñ=IþÛñl‡y¹cåºn’–6àÀAÇ6ËË;V$=Ûß§Oš±qó$f’¬¯e~²,§ŠÊ* å«ò*Ém5`RçÐËsb _m92ç]u3 3— ˆËrcòâ¢Í ÌòþÓbÅîYÖMœîP¥G]…RÒÉÆX1 E󨡼“<×Ð0ÆÎ®¦»\Ë.u¾ˆàŠŽkyi¸l ^·ääK£å˜ ËH }K¦ :+ÃỎe—$'KŒéŽfJ;ï°Î]•£»þêž³ZѱåK—½ µ³HŸ=³ak{ܽíYìA\r…Hü=‹Ý™ ~¸«´¶ Õj‹Ôºç°ü}Á9_Ù™æÜ½Èo?Ç“¥ 4$Ís¢…e7~À„ùŸ„]‚k¹Ï!×)1¬–‚;ÑÄC®.¥á)AÜ11ß;Q.xEyù–}_N;j¡pj‡¶é¬pŵüéÀ€¨Ž‘RolÛ{M¿yó§Q£êj££ôg$)bp“ʹYj1ö&»©½¼PbI$+¹èýËÊ3=Ï1@r¼§Q¼ÕßMÿ?è‘9®ƒOòí›BÄJ–í¹ž­2ÊOÊxN¡Ëúmº¦_ì_ï‚•OTÃèÊBIžáÇÑríNr÷Ĥ!÷î L75©FmRq-ÇUün'^÷'®'Ÿ¦Ù¥æ‘‹ ÈÅÑVчe!Öåä|"A`]pÁQnßšc8@j9¦Ó{ {*ª~^¾…š¹FªîuwQ÷º?]ã…ìÜf¹w¿AB"n—§ÏšYäÛµAêÝD5 Û~bàäEêÚþßD5õm_Y$Pá~­¢GµZ"k¹Ò?Û¹â˜âÄÈÂȽ‹æ\çxN_7·5Ûo×Ö‡sθc *h½qw€œ×Ôý?[¼*´À)AMÑ1‘©Ñr<¬Vô)1Ä&ÒR`DBÚ³Ðöjs•#ÇüS$~qù%è›+䈫´Sp{™ÚRN÷!©Ü>quíí‘–öÊÞ¾n¤ò9i•âeí¥quJb¿eÖ,¤Ô¹ª¶W4ÍòÜÀñ窻j“W¤ÚȺböºK†qù,ë ã•ìríNrœoÞNº|iãĉš»‚ŠÀ(bD$¹L.ÆÄRôÁ¡Ù†Y»ú%p²P ¥Êèr£B ¡W´‚Älo"g™)=»mµts›>+{BŸB+7MÊ¢0EæD3²]ó]ô\Q¸Ô÷c eÿj‹¬J%T¹u+¥˜‡U¨âQ­ÆÈZ®4lïùÛÔ7±;þ¨Ø–ÍÖž€2@Λ)ôA椩u½TÚ+Š8 NŒ~~ñv½u+F•º¹ã:éÖUäKøaªÑÉv4SI‚ØêBQ(Z¤§›g³Ùo¬¬jéo(4Îê¹-7>ЦjǸ6Ú䆨·–Žymà ø/ÒX¬|z~.'7Ë! EP®ˆk$1b M<£Ý•d£µLŒlŸA±à—ß,¸wÔ]ZÚ¢l¬©ñ…K”¬ìbŸNåyµý_…„j]ï u€ÚÐmd»2çæªáS¶<Ì5îºø÷³?ö2>¸O…©éлo‘¾ýqÛX%S* n¡ù‡C­_>µÏ•‘¬ ­ †<ÏDlBR}b÷s6yy³oßæ³XéFF-ÓÒ¾xòdo¯^©<^µKÍ¢ŽØVÖ1~:ðI¾uŽ3#¨€TRL IB1¹ØÅñÍ7ñK˳Jr â ¸</…†rÅ|ª©âà.qg¦2)*ŠÆÄ×Ü0LSãÚ ?×kFÆÉÉäCƒqCßûÍ›Lc^‹[½˜…qñ›~©4W @'tÙ.xô¿§Ý÷F]ö ÿ¶Çìïû‡ýî÷99mŠ~såÎõŸŠŠ^ØqÑ¿÷2WþŸ÷¹×öØF í[õãÝùe@¶uÀ—ÔBÃ"BQ;ã¥óË«WÄFl9›+åòÄ<ÜîtíSl’-³(›(EÉt`çšñ[‡è”{ËääÀçÏÍ ²ŒŒ.µo_ûÆf¯»à64®»š¯ÔlGC¾E¶çÚìr\Ë/´kâ\æ¢Æ'.næ;AÆ•ÛèT)•-`³‹Ù41M‰)QΓ‡­“ÄhÁ‚gb­RrŠT¨$ HJ:UÁ6³è 6c ‰šQºpåL#¥SÙŸ}ñÔýön¯ìÔ‰jyÇef—ë·æ9ººÿÝ@÷ “'º¦¤˜Äû." 1n|-ÏH{ñb?bŒìÙÒ¥g¿ån- w>mtÙ.Ž:wŸ3ñ|?ÅìëÉì!g£Ä~ >“‚ˆz}ùσÃ4áôÔçÇÿ1nêéÏ[Ñ+yl³Ê;£J;зo¡1ÌÂ7à©xc#Æš_3WÈY¬¬—ˆhÛè4ë4‰ÛßvÙö(ÆFɼl§þ -Ã[¾¡¢J"V×ÞšVÉÉs®^Õ„írræ^½Òþr-ÛãZ>üV3½Õ–4®å¥ákÚØ3==ÉÔh9Š¡)!ÔÜäÃÈKMg™–K„4!ßœŸç–ÇgóU[ÌæªlÍ’ÙR*¹kŒ«­ŠÉbË™ &þÒ>"²J>%ä¨%’ÚÂLãýú¡Pck[uн_hŽ\Ë5à7¯ñ€¿÷ KjX#ŸúôÔà{·©CÆHZJè‘C'M?ŠÍR9—çÆr»˜«û)æ¼¢Ã|Üù\ä·Ë+ÅÜ»µî³7е=¶Åw™z,û‚ö3f\ê²,²ðÆ­XßßÑFÛ¤Ú² ÃcäXɽ6aˆR¸yìfƒ/¢ˆ¨ *]A§Ëé4¦¤i…¢¤•d²ŠLR‘¨JµêûúY ¡kÁr8µJêߢ‚T BÙ ÛðCƒó{†t¸ßZÜ2ÚbãØß‹¸Yb¢RNPI *Q!W¿Ke$©‚(¹mý‹¿4sFE£‰‘Ј#â¼±3¥qb²Š„H’ÜÆ5Ë•žBÇ÷ªôþ ç•ÀGêgçt›Å;—Ö¸b'¹E.×òúÏÔ×?/÷W­ÿ çÐ,äœDA¤¸ŽÜÚ@™d  %ȃŸ)ˆvájäɃÇ÷oÿûáù½|ÙØGXTQ)&#-bëº Íáìæ˜[ ø ãY×¶ÞÈAƒÄà/v6Û.ÎÔ4Ô60dÀfÿ„tfÙø‹Rq ©! "þ!´bõ;¡!ˆ‚´ô%CêEÖÏ:•HɈXkFMþœ"ÕÎŽ¬ ÓdZ³û-`S2ƒó¥Å4"!T4Üz&cd F!#$–ÊУ1d4¯Ìœ¯¢.÷ÿ‚ƒÐ ±² :éÜáŸ7·ªÇEŒw¸32ŒåTŒ ijøí…aš…Ò³¸š`sÌçÏËË usOtrµœó¡U=Hµ=®Š½þjCкj7®)¾Ahüc€æ.ç¢U2DüìÛ¿§ó&>]æI‘½þ±Ë©¼½+¶jw¶3PJ§U;ùvþÀÌnž'÷"oä#ܳåRZJ¨vŒ•M›Ù_/käÝÐ˱×#ëcIÈÃü¸yØ´ßm§M÷òo¯S^´Ž]Ï*”vKGj̃÷ä8#?çK¢éV%²Ÿ[[Ž%%mÚrh­˜8¾¬úþ“L"šý¶10ø¤‹½ñkûêÕ«—¬ZÖÔŽß+½] «õ¨ÆVd^ Z¼'ŽaBÈË·Z¸mù@‹Ê6*Á›k×ý“LaR0…)¡ŽÙÿuâÏ»#2ÂNŸIíw1òÐõ sEúå «wî>ø²Í”I#¾ šZêÏ®ÚH¨„.#Û Ü‡øÎÜrcÒf¯ð-‡‹ºt7ø| ¢g¿åG ÕŽéÕÔZ”×ÔÁãíC|ÔáÑIÑå«–S+”vôØÕ­*G:]zê/ê¨1ÄÃb-=шHBjªôŸ“5iy3j{ý©Ö£šèÑòÙ7:ß{8Ï‘$ßæï¿´WÔ¡nÆ +RM{jÀß§Ö»ÑQD³sÐ ƒ–³¶nKØ7ÛtÔø¨“ úä¢ÉjàÒªû§¶ÏÚúK¹ËÔj# :lguýeï°aSÝ8yÜÎ_ÿ~¶Ûç4¬Ý­EÀ¤éçî\_›žŽ[*=û/ÿìœ×›ìû…fïìcüWÖ¬û…ÈxRP ^:G^³–ðæ­ª…®îÙò††XŽª6­Åáω·îbb”½z*{÷-¯¶¶#È3k[o¨í:P­ó4ŠMGçü+^|1É$êÌÍb÷@«J3Ä/w®OyfŠ›Æ+ÕyâöÄt<>úNáØy_zÞ>ý¿`~ÀX¨?º­ÙN4ë¿îQæºÏ´,ðkþÚ´®ñûØ?-†ìóÒþªVÙñ:'‚+:þúïûù†ÎÑÀ@9h ç«–Ú¾xeöס4ꃶó4²Ã´CZvuøA¸Ã½šæXi¥WYNtw‚y¹$ÇÝ‹ƒ`¢¨·I<2¡ç„ïþÍô…Ye—E˜´ WD7áR«õtV…ø ÎÓäq»G~[¸êqâdëÔCÓÆÚÙöî"gmÿ…T«Öƙϒ$£L´z‰TÙ—¿7õfÙ¢¯u#Ç›WÒóâãܶÏMºXm$t¼ ç¢æœ§É2^&õÐÚ”M6 èÉÝž)G*È9­å앞~88åܼêþvYÆõ"娬ØâêÅ ”éGG-¸•1f‚5,µ €œ4•œ§1ºü´·ÿÂiCŸX2ò¾{wufTúÑrì‘Ð5AcF“XTe‰”ÝÊ›úèøk[VÔ€¹ž¸Å.+àKÂöÍÛÑj£Ë•_v—ùXÃod‰‘bõÈöõ[*G@%t[³¨â4Œ¾Ï,ÕÞ¦¦pu¼º>ó\ÉTvÅÄ$iíü3¸ØyèìŸO´2$!¢°ßí¸râ„$èäˆ odˆŒâ¿ò—ÉŽ¤‚g—mz$fÑ~‘ùðukÆ:¥mè4â~!rß°ôIí7§<_ñͪò=Ù7©o|ûíšßx¸GüŽ Jivå¹kí®·]'ù³ÉDAl}Ìî³< Hf~‹¶úÉsÃþÙûÔT£î“gMèb ¦:È9@c2tèÐððð«èÚ¿Ö®s£Á*m‚‡ïÿnÙIδmkÆy›h:âíæÿºÕ>âØ¤¿#Ö?°ˆ«éxWf™=?|ҥߌ & ùŸïÈõ-ŸÿôÝ“ÓÿÚWp»Òæ§ÙÿÝ®ÑZL_7çÌñí5¦Y¤:(¨ëÿöÌs7P¥ìé½:dü_=X¥?‘MÚ[jïvtå¼o¾íÝ=¿- ä\›Ø7D—zë¾ÑcîÍöÀ¡Ø¡Ø//¯úÿ¹Ê3o­v¤Ê³öwd^I\ÕÍÙ RÊl¯ÇïM¹¶ï§YÛ mÆÌùr€ Só “ÑaÞ‚nÜò‡è¢—ÇΆ]ûËòÐöO‘"­µr~?•ÒT_Â, ð%²Ìè’|‘J“\IòÃ{?*ñ9÷Ú#xù´i€‘íUWIŠ%è±ë1÷f{àPìPì VWeÓ(/Z£Ù]“å]Ó¼Šð îní3½Çªm6Õ]2 ,×€ÅÛdY!Gw.Yäºxã$§ªQm½[µpÛ¼¶s™¬IñK¬ˆÊ¢H KTˆ!~€)ä‰Ä±b‰sŠ•‡ J~“#×±eñ~³6ÒcâÜ}³l À$ÿh€‘íÚ«Âá-¿gÇÃ7Ï“í]TÜÚõ˜{³=p(v(öÆ?ðù{ÃÌ%>X:;~ΡÉ6¥­fòÛä‰ÃùSwþñúÎþ&µí"ÅÜçËŸ|eîí_¾=z·ÌOš±ßâå£)µÅ×ÿ¬^¿tÊ”½\:•B%“ ,:?º5«ã·_[­š61Ø‚EÂfý–,ÝiÙžó¦`L”+……¢È}+öË;ûOÅ4-~_¾Ù·êˆ{P§‡+ß…™4qçï Ÿ °f»6xÛÆ_x#ï3DÞø£ÇÜ›íC±C±7~îø{tt´>/œ•=ª©ïöè–Ѥ×÷›ðWßhT‡¡«O­²½a§ÿ¼ö¿ QŽ“÷]™\nš•}úTJÓýËW¾ÜQöÅyÛ•ÉÛ@øš5º=;×cœ~so¶ÅÅÞȸ¹¹­^½ºöÍf̘±oß¾½3°z ð ¡[ï–æöY_è1÷f{àPìPìϪU«j—óÆÑrøœ­s€ÆQtü½ZQ-š°f;Ÿ›¢ƒ–ÍX³€ÏJÑAËæ ¬ÙÀç è9-€Ú뀦®è åP9g|4ÿÁu´>HεW…ƒ’ @QX—ê%çu”êÏCÑß»6|60fQ>¹F-‚e[àC¬óš|iF–â÷Ë3f̀ |óÍ7îîîšëLtt´››ØåP6oÞ¬›œWK¥•“---5Òþ™Qɳò¹sç>ËÃ=RébRn'P;u5¢ib¤š~Ã鍊C×4FÓ^U€æÂò^E¿ø×™/^tîܹÏ(4 2tèÐJ§ÎÖ¹FË¡(З¢ß<eéÒ¥|>_"‘€œÍ///¶'–Ф×ò#GŽXYYCYÍ“š†µU Š¢$Ðrš”¢-((P©Êü¯c&—Ëß¾}ûøñãáǃœŸ7nnnAAAï“^îΠLÎ5_@ÑhdªúV ¿{÷.®âD"Q£âJ¥²¨Ü@ïÛ·ïàÁƒ¡Ü€æ@µn‚kj>ÿu¶ƒ¢ w-ÇiÓ¦¥¥å¹sçž={&‘H4‚H$‡ÃY³f —Ë»E¯Ú|* …E@¿Z޼æfbb‚è¯_¿600`2™d2×u|û%K–@Ñ èU›Oå‰j èèQËËÉÎÎŽŒŒÄµœÁ`à6º@ Àåÿªé€æ¬èÕ6Ÿj–‘E@¿ZŽcff¶fÍšcÇŽáúÍf³­¬¬Z·n =í(zMͧúE^›wa¸ q´y×åndd¤ýš¹¢Wšò~9×(zPPPùW]ýT˜3gN¥˜Ïò0 é “µ*ul>à‘€¦Â'äïœRÀ;;ðQ+˜®ù?ç]|& endstream endobj 408 0 obj <>/Filter/FlateDecode/Length 28717>> stream xÚìXGÇw¯W¸£Gï±w±€ÆS4ƨ±&1š˜Ä$jL±æ³$±Æôh{o¨ˆ]Ѝ¤·£×ëe¿9IDnÁ÷÷ì³Ì w³ï¾³;ÿ}gfwq)¡Âî}ˆ1Z™šµËW,Zö±ÉÍ ‰7Èc 8iÜm é,Uë~‚3Z¶ÉdvÄñ@<ñ@<ÄñÄñ@<ñ@<€+™iT2ìİ€C ^À!Õ!FÜLR„2$1z‡tV‡PŒXtô!:Öø¦uª%İ€C ^À!Û!4cmÀÅS‡TzÄhµ ÷“$f€CÀ!P/àÎí#ÇDž~Z2DX$1z‡tV‡Y<@‘a?Ib8õ鬩º@«ñ@<Äñ@<Äñ@<Ä@<Äñ@<à4Û¦ªºöâæCêñËŽû²3ˆê¼Øy‡¢÷–ÊЇþ“WF7å‹Ú#,ÁøF9í¯¬‰¾Ÿ«Äw½Ç\ø¥T‹Ù„kÖý¦zÕµ=ö¾…1â]çïçxüÆ+˨YjbÐbåîOu– ÿÏÑ@Ùõý“mÔ<%8AýýfMwÁã3McI=å÷¥ŒO¶S Ô„ÇP͆ïÕQ¶PiÀS34™iTžÓÚÚÅ7³j-Y |ïß,õj%‘‰¹"·Àõ6\k Þf[–êý憬ïc$œÆò³ÝfMSÍ‹Iíjżñ~ïÍ5IÛv—³ÛË £NñY0À2âxÂPgÎé׃$Ÿ^šÕGGñ3yøl—m*FÏ)³Ó˜›ÜýTÈ•ïÖÕh—É0…%Ú˜€ŸKÇͬ´Pð¯,ìñ‘¸mg ª­c0F‚­ûÉüàA¢CìÍÅS×ürÚèCôˆÑj“Û´vùŠ™ÓŇ¿ÝçUÔc1ûVy21L›yek’ëøkc½‘’TµáæëÌhï¾U’D‹"ÉL]èÈS0kv—ñØ5w”6óÑ_–vg›Ÿ5Ú^™c™ŸõðTtpÉÇt—¹ÀçœUr±¬Å]1,ž©®§›UêæáYößdL^;˜ UCª#„–lތ¶°¼-BÆn+œ(¾²÷°Yäž.fE¤j;C®&¯¨ŽÏL}iý®DµÙ€^vôvâí` Ý!á£W/}S£—Úë½Û~ÊñwXŽ:‹;´7tÓð]?Ss¨t<°1À±®œ»ûf—7¤œÿÊl{KÌîcûOª3Ô¬ôJØÈ¥(ÁðËܼ¶žUòõ˜ë$*ù‘Ò í\¸®¢Zªjþ¡-“Ú®šùIúk½´ ‡¾+oŸþmYÀÎXÕØÚ¸zïXVào&ì'bh~˜‹­íÃæû3¬ Ž`#µ× ΞO|¢}³PãÿšÙæ–(y‡¾ Žñº³ Êpvr{%ÄDGû=ñeÌeõ®j äk}TñJUIæá°5‡›2ÒWŒÿñ!Oªµ… Ä>¨+—sƒ¦X]ØU§ÅDí`¾ªÔ±ÜúNw'9—wï]{üŠ@=¤Ædn£}—( —èGÎNdÝèN@÷·Úk)ï×|÷Ùä|ÿA•åß2ÛܙٟKCŽX§o˜_öÐTœàˆ+ÇŽ‘<ÍQ½,¥C ‡5Š'ølö‚·õiå‰]ë¶v[xH?æyy;W_½uÓ9Ô±öÖ¯•Ü‚öæ§ +8%¾ñ……½„üø+BŽcƒÉ}F¨ð[Òߺ¨[²NÏêÌz³­ó}N¸d}ÿq¥ íß2Û<æ®þ¼¸k´cêÆ÷J›/‹d·=v––Mè×À¬<Àµê)ƒ@½Me‰õµën¿üÊËËopvÊ~}JyîP;D­ =õدß)ÌO UIQÒž¯deœnå8yJ0ñú$\*Ek”FZb*'¸$'GmÚ,ÊÍ£+•hÒHKà05¾r\¼ìûî{¼´4ªLŽÖ(´Ä4ÊqõZ×ÅŸ˜§ß¥ÊåhÒHK ‚V€bŽGr._ÓÛE1Çæ´aG?’ƒ¢8LŽã÷;ÍÙþƒI,qÿå×GrÜþ–$„DÝVåewÉ©,ÏhddøÖæ¼$ìK“8aÞâibvã5r‰S£ÃÎÍý[¥§a =Z]гW΂Gkœ——€x´‘Oa~BËKkïvØ®ÆÛ‹~#©åÙ« ©:}ªn»2aÕjQn^ËF­ÚÁm|ä.®¼´´–•Þàïwû—[w¹cŒ#vŸ3Ï<ýnËopv† ȉº­ ûô‘œ¾Ûcz»ô£ÍYl²iõñQÞP7* S£S0sú£9³Þ4‰%Ù¯Oy$'kê¨ Ä£xûENyó ƒS7gØÚ‡¼8ùO7Ï!í°]å°¡5»ÿ@ц!æ¨Ùó§2bˆ©œplÞÜ2”FëcoÍË÷÷‡ÃÔèT÷é}gÃÿP´aˆ9îl\WÝ«§I,)ïÑ=iåWµ>>(Ö7V}UÑ=* ?䚪‹ô-k—¯x}æÛí¹]¤úé¹XV‹6¹~4NÏ»÷o!`\ýÐOÏMèÑÚÞª¶ÐýôÜ»C®oùê€Èñ€,â‘™F%Ã^ågqHâ_3~2˜A’z!%ÒZR<Í^­ð€zµƒ:ÄÈâ‘›IŠP¦8Ÿ,/Øãs»’Á ’Ô y,‘ÕÛ‘Á ÒêÔêš‹6HSô!º‹§ÎÓOkÙÈcågëÃŽk1vÎ '7™ eÃvØ‹çÔK“êꯙªÊÉP/ä±Ɇ!ì(/ìÎá›P6 a‡¼v0™Kge=çõj‡sˆÑÄŠTúý×™$hAÊÑc`•i… Zr´ÿmê$¬òX‚-H9¬LùüA3-H9žýõÎQ/p v8‡9&2¡<¶ÄÉ]†‘Sä¬òXÂ5/ ƒtÖ=¨8P;¨CŒ,H È°ŸvN ’xd0ƒ$õBKLØaõHüõjuLÕZ ˆâ€x ˆâ ˆâ€x â€x ˆâ ˆОÐr3)™iÔæÏчè&·)8xÙµÓlúZŒEËöâ9&ó‚dnË­“¡^Èc¢¼°;Š’×6âN=Kip„t‡´‘åF/–æâ©k~³9*=b´Úäî^»|Åô·f™`Ã{±Ð>’æO‰—Äçbæ›Ì ¾XóÖ ÜH†z!Éáa°„ÂΙÎÂixó·rɯuŒ×Üœ•%_KJ\ì½Z¡Tæ§=môrCŽïèÀ€9<çmåeZcRpÍ– ¤(D\%áaKïÉn©(_Ò c ¬üé ®U/\vCE€!ò€Œ‘^®áœR0sœEQöcKé®cüÚÀÏkú†z±s2†°ü*u%›îˆ.)uº, Æ®S½Ÿ¯SÐ)‘ŒHNc_Q¯ÒqÍ©úv§ŠiÚ+Z$8Tˆä;I4D(§z"—¨yÉÙŽ\™¾ñVOäÖy7ö„R±’gVŽ’jåÖ:Ê+.T3C†Ž¨g1–ùâUÕêAî4 ÄHˆ(ùtä¹·Z­\ä;*êª=‹h‰l…0i÷ìÓºýïL;K0äÆn°¼Jå¦*ü%WF¡IÀqƒê. ˜Q0¾€j[¡©&Åç3(R•VƒÑh„V¢¡Š¨ ( ˜–n÷˜ñ/½³ËBgðÕ}rç -ÖOÍ'Xç_L4¿æ¡ªT±jér1®oî1‚¾§Á’ÀMù¦Bëö Û½W®Ø\C™ìÊi¾§tåêNÕ輄”ªm •ji \ÌãÈJ*RÍmWtœ×  ˜–ccûyAAåWïpï¿¢Ô¥¼p¬2ñÅá5'¢¯j4#ÌT\}®jŠY%ú«!¨™JÞæ”¤EN˜ÍÓµã:Ý‘rBŽi¿Ï0„4”×½™=h˜»ˆîT üP‚Q”h¶M…³Ø6¯™ü˜uGJåDð¹¹ )Îáz=é¶LÕÅîĕ„]Œ¡²‹¿.pì[ÂÀ0Uq¿ýquÃ'ek½´Á\©ôa… áZ¦åPÚ]ÙýZ¢Ù±©‘wxLQÔý–ÄõÖ·;Žb;ÿßcÍcæÌ&,kƒ°SuùTÅô éÍv0ÐÂj8Zš?"±Ý’úSUùë=úäGí° R®N;Ò}v×.Ðæxtzl3.OŒKõ®×ªWføj¾/O?¥¾:ÁséJ—”ZUÀKÉ_L¯À…Ô³b¿¿ß‘‹ŽU¥]HÜ«/ßtaòäq‹¶;èÿéytí;Ùìv²Äùüï“’­M™jÖ8Àòþié’¦ÿ)î¾ñÍõ«ï¼Ò…Ukh cB9´ië¶uí ËÁ‚pðQ>¦3 +)=zÿãL.i}rEùQ•²„Á´µ²Éåê’ç>IŸUéï\Š·Êº[Ó³•Êã麻 ›ÉÒ6w(ÓæË1M½dÝ‚Ü<¯Ti¡Í3Ðô—~ùŒ Ã'/˜ñÚõ~¥îŸÿÆ×Ÿæ2á÷ÿ³qzïÂÑ]iNçý·§À‰ð즱’g.ßò¿/ކՅÿtB„š8vàþï¾ýfíÌBv»Z2èb1«æöKV|þùŸþcpCëîÞ¦©T.7oŽv¹u‹¦þ§à!åØ$m@šaP”v°ÔýÓ—êo懤B§S¢5J#-i D†>ÉhRŽÀMöH3 ÊÒ(§}C:MrüÝB—ïy<ü5¤›!QÕû†#[”ÌÝâ®àÒT/Ó|r«ìRËW=ç_4$Š{ô¨:w“….NMô0ïqÆßAQÈÞÿò[«‚‚¡[¶ÕYYUÛÛ9¦¤öܽ7zöÌ GÇå¼tÒŒ±WÍ0êæqyÍQÈß©,?úHŠB ÁÇ“€bŽäyEH3n /:iÒÍQH»(‡6#ñÊŒ4‹¯¦8XÁÄbç µù‰õlÿÑulý³È¹ ü" }­é,œÕÒ“zEñ0N£]ˆ1s^NÒ/ú*쪩îMÏ×f‰YEBu¿;ý2U)¸e[ #3zô0äx]»±mûžeK5ô&%ÔXµ†¨T¼DS[¡m¨4ȹ ?Óº°rò©)eR)KZÏ©—±dR¦TÉÐk‰œ)×P5*‡zŽ©î÷SÐu…ÈUª4–{?:ÓѱÜ/1Óq0-ÓrôÿÒ6¦Q5ÄåÃãaæŸ"P¨ro¹ÚJóÍ“R)NNæKJëÅâ’.ZFëB}ûê¥×op¾˜6ŒÒâñ¡±M9Ý=+âÎ7}TÐÅØ†Ê¡²¼øST¢Óù]dähar ÞrvÜ ¤H9šÒÿðeÑÍÓõ––åкBMÝ… ›;…ôSÙ%‰yuXµœR§¡ÖâÔ‚Ù@aÒ˜Cð™ 3’í§²¸i¯á9™‰mÌD˜ c31 g10}KÍĘTŒZ»^%ÏgÜïÖRS89º, 0BŽ5 “¨ÑUŽ`dµê°”J‰©­¥2” JÑÇšzY2[9dx)]MµPZÙ6ØØÞ°u¬p1DÖ" { ­«Ž`<ÔM'ÌÍë»n}ƒHTëè`{óV×ß~¿´àÝjçV)G\ìù7RÌVO iÊâñ¡rN:97—²nK•å…Æê2—òê¹UÌŒF©Ê£síUPFP…Í™í/\ž÷¥,3H´WfæÀØ _,Åfíø!¦¿ OO}0á.Aj4ãR¯ì—Ý® KµàÊé¹Vtª¤¢&»žRß@m¨eÔ¢e=ýpŰڂ‚u•¼Êj^ ¡ãÒ1³Œ0%_[hE÷÷¥xˆiæT¡Îçbè_úXÄ0ÎñAco•!=¯æ{®,_(ÌðÊ,y8Xæ`”F6çÛÒC¥ºÌ¿ÿÜ0Ρï­òVç'ªD{èq¯¥jú—æIóã⋱âRv©U¾•G•‡‹ÖÅëhgggÍç"åHž0>§__C!®.öÙ°áøšÕ­ˆ?Te__ªªÃªæ|“;GÿÙrÝ‚Á/rAE@<:;qGædwŽ`mEoê`:•6øï‰+šëÉßsŠÞe‘ú¬ž»cߊ·9÷î«™BÜëì‘9éϦ·ïÙOþãÏß_y9Õë@KÍt)¸5²"<ÿ3âB±UQ¯¢Ü¾¼ŠWUÇ®3S˜ B3•™¹Êœ§åkºEÞ:}oè+|CçR'ŒڷþöÁyœ.Ýna>Ï¢I- ã…•‡0’ËtpzëÁl+Ñ(./àÉ÷Qw—Ñ<ÎáÊ(×ѽ“ºÛøKõ=®_Àteü²Zqa}a q.»![-oèþÍ–«pËÎqpp 3èHEÜbcmo'†…>醙ö»?} Žp玑‰el¬lÆow±ß¶a˜oʾÅœêY K—¬ê7²Níÿbò]4à¦g¦ÇÉ<&–7bIÜý'—è ïÐSîOÕŽݦv\ˆmNǹ`ñ.Øió#G¬ø£‚¥â¹kœò=ù]îzêf.–¼@m ¯žÇ­EÏøƒ3˜†…‡|Ô÷7×Dç¼æ1ï+WyÕUE~¾ÿ¸×½Å>J‡µéÇ“?Â#³rõ*òð€9R;1K,vwÅBš¾sp_†*ïœ[í.Åï÷ê²i'7<@ågPRGlçÌ4ª§ŸÖä{U”Ë·w©'ƒ½¼Ædd|ºßn˜3ÇhùsBžñÝþŒV¥VxÐY÷Èà’X"4ïU]{ÅÞÿÝ·ûàã2½}„uÅjCºj¡~íY†¿©v›ÿ3ÛaèÞð¦1–xÚæ¦ñÇ–£erNÏž5tÛ6¤Uöö…EH9NÏšÕSVS¡|¨Q+ý[|-»ùãÍý¥gßÏî mIZÔÇZB3bÑHšP"úÝÅSg*µDUŽ.P"ñ’Xì 5ᵃ«ë0/¯Ñ†¸!'çTFÆ!S5ÖèbÓÏòLcæÒYY&” 2XbΘ÷D g‡·jë1©i¼d…(Q0m»ý—#Q‚sÿ¶¹˜þúgëªûÞi9ƒôCýaÇÓéyA]òZi ’ v „­õÌÙMSÅH6PØ\æËjívëÒÂwû¬ßà{¡ÖÉQŸÏ©¬¼´à];®í ®-†ÒXYüEåµß°¿v–r¥ÝC˜~þæL?sÅ[å½±ü¦+xœ Rλ l·Ãµ!$iQÿÅ£‰*-¨ôˆÑjÌt ÊF ªõÐ>Ó 5 ´ å8ujn«~—•°%ûpß¾caa)ÎÏt©Nc桵×Í_¦‚$– Á@ RüÔœaÇO`‹±—Ö~}=rD®¿»^å”^DKhÈçÇ)×ï½òò€ DåeÖVçûõÏôðhOK` )GIùvÖ  ´ å*›¦T;;_³ZœœbVR" ´œgÅŹ‘Üh©#ê.q.S¸¦û=MÚ§&7܆)0ÉüµùXt\¶ó.ªlƒ^E:\B’õ_,1ò˜IºçH2àhí€G`^ÞœãÇ iç²²¹ÇoŽŒ4Âe9<Èc /víà-[ i›¼¼¶l=Ö#w¨!"Ã~¢ ’x<'çt«¾ÿHŠBŒrÕO‡Ä’À}ß=’ÓE!í >HR/(ø ƒ(øxêß:QgpÞ\o¾1€å’@YÛeÉÞ9l.Só"JtUºÚ†¤E}¬%0U—\ˆkjšÓxÓ•q&Á1 9ì“ÆSÏväÎÿøÑ ‰¿Nç†'}có[§×Ç6Û±/hÇ´¯ê1Øz‡£ÜEžS0zã,:—éßêCÌnÊɉnm/5ùˆÖ8ÐM3 –ä~÷,%¼´ök›¼‡b *±¿Îî.#óÑ;ã_›r¦øô*ìëmµß°aÁ sƒyŸ˜at¸ÃÜ8Àó’Èű°°Gsºu·ë‘#͉Š·tl&Kíz¸écw °vvBôÒŸlxsãTñë—'_ÐÞƒ;k!ò茤8;oŽŒŒLH°­®. ‘–¤:99€_ŒM®¿ÿá9³»?a!‘ ˜C?ÛÊÏÜÒYj7|°íݹ½cùNØÏaŸú,qœìnñè„úñŒÓs'ÔöŸ^˜ *N{ÅuÒ Žc6Ú¬™5gÙÜógÑ,h¸\Î:KËÉÕ¸¹*ô'X,ðˆÀCpiÜû-y±jâ‡Gø}ÿ:áÜÁ¿Ö:;©}¼YgcÌ—,¯üé{uÀ¿^Rê»)ÉKb²®ÖéxBñÔaÝß÷`QŸKg‚xð|áiá½ïõC»ý:¥lþ´Q³Oeè[BÎî½–Óf–^8ûoñ‡ºúÏ|ÎÛSÆìäé2ï$½~øfß·zôz.ßn æ·¹z"$VT7zûȬTýkHd'hííXçcÿí— Ñ²(Ÿ¾:‚3¨T‡mF}N}‘ÏeÛ—›+ò þkÎòÿø~Tò¨qµ ¿ì5SíïKËÎù_*‹&®½t%¨VLâðü qua9‡Bé¯Ì´Í ~+nfüá„kw*5}ûüÇ/ß1¥UI/_»öö¡ŒÓ}=žËè¶àyD1 ?µ ³{/JGº†_Š:‡KRö‰O ty’ŸSܾaîõeyêçÔ <lvåÏß›}½ÞzÜDÁ'Kƒ^›•´·G ¿8î`Æ??&RU¾ö\n²T«F‘GBf&OäLNÝV𼵚XIzw©&]q˜ÔH{ú 6ŽcXEêÇRmŽ£Ð(½m8Pªê•–ÆÊÔ*3ÌÒ~’ÍÁt· îl–=¸þ qôž)«U­*Åæ[`úY®QXQÿs¾üŽ c±˜C]Ì&)äPûû—^8ËŠ½@ËÊVöë£èßo‹õEüŽùI¯%—­^ÒgÌc~C 7Ïzoóõ;JŠƒë’q^îÏë8ˆÁ}¸“ٯƾ:d§ü1sœ<8s  C\ç%hˆPNõ‡üê—” rv jÇ Ú59Kɨý¹ïŒÙ|Ýîr²u‚„åW©+ÙTGÔ à”HjabAšbI!ÑÝžæÐò᳄RQuFÍîÉlÑ`èä1uXD|!´eö¢¥-Ÿ7¨U~yµtòµòîiú{ñ\:àslíCöú£ÊüçÈ?¾;w¯Ž?è˜àêl™/•`à:GšÒŠ Êõm:µÐ†Ð5*ÇY@åJµ¢ÊQR­ÜZGyÅŽjÖ&ÄkY6Ì5¾ìl°ØbMYsQ„JU½½¨ÎÙÆ.øA`C4È* ²iáEÆh.†‚•RM‹mS™Ÿö´ù5Üê#ìD¦¬˜è.¶èú[¿Ÿ1»ßžÙ¹cúí¤ý¥Íÿº¹¿ôìûÙÏûå œ•@ •(ù\Ô¹D×:ÒÂýú°Qç<ù:¤ÒìˆÝúÈ¤Ž½ö½4ð›Z¢bÕRåbýå¼Ö§&©i£µòüM® «oÙ­ô¯Ê‘W©ÜT…¿äÊ2´„îŽï- ð)O@³®Ð”4*ŠP(*7V m\'ñh®5 mJµÜÿ––’-W¾]Ü”™tqßÂp,ôþ•J °áØI¥:Ì®cÞIfÙm[Ïms®Íºäl×w¾Ù5uq—ìrpÞU`¸ Uqh¾ù…×ßÿ•§±¾=ùð™¬·Çæ0T.gXüß+bÛè_Æœñ\6Ü·F3‚«Ò7]¸¶'[¹_fþúÅ_\¸{Âþ¡{åŠÍ5”É®Œæi¦8îHÑ]®Õy ðªZM …"Ô—%“—o,¬‹]§ð7Öijc”ìa ÙM¹:Ýú õø^ã4bZÕž"m˜- ˜.‘Ñ™¢ÿîà ÊÊj–äb³B…!ÔÆùZ• ¿æËS•—Ãën>œ‡›ªë«·¨Ïòà/¾¦¯ÙÅ¿ú¾Û¡¸ ß=LÙVðS½½S‰Gn&%3íÁa}Èô“–ƒƒ—%^2ͦ/=ô:¹aÃ6“¤žäµƒÁŒ–8;¼E3BC>7bie=1:þ5U|u 5ÑÊ5äs ,®Ëö£’ópbPìÍÕ_$ÞÖÍî>¤w‹ÁÃýÐ •GçeÛøˆºÙþg+«ÍÞ”zDŽi¿Ï7~¿Ókâ ö3n]Zü¢-éü¢ßð0 ׺™š«Ãr‹3®5~³»O¯+b#Rss>·ôXeo!Àï—ÉÈLB¹Ì—‘ öåÆ|{3=WCµ0ó}# ¿'‹öïFÉj/o.·i©f3‡qQk¤)ˆ­+Š ì²„­Ë*:¹"SÞ¯µwq?r.? NØÜ>xÕ%ŸoDC¿ÿ‹EBÅVô„mÔS´¨mÔ½Xš‹§®ùÍæ¨ôˆÑ¦¿]ríòÓßše‚ ïÅBûHZ|'OÍ!C 5|Ø ó˜ÉÍÐ)£È`†Á’¬Üõ&7ÃÝeA~Ñ&£Šóíqïo·G ºëÕEo'—o©]빊ïó‹°¬’¡4g”u&µ"3ÿáß ÌîË+ðïí68 ç ú‡ðýÝ^x8'·q-úk`ÔýÃq¿nôìÞÝËñ ½ŒaÕKs™!i70‚~}psÆÖ;»tÃN4ö“ý³–)ê7eJ#‚¬héZÚ‚†v{³ úþǾŽj‡Â»uÔZ¢5½$¸zÔõøOŒX3Nq“©M°^â´ Ë)áaóo)®OðÒ{Gì)ZÔ¶h„Û¢m‡s ì.û7}»éËE`Á¿Å µ-“8^ƒ¡«¼3yšw2Ñ¢Óê3¿Õ§5SnÞP…oôgw¸‘B£Ü—\gé#ÂÒÿ½q#ˆ¬‚šrsž«©û׉Û¯ÿ·ö–ïíßߨŒStÃö‡ërž÷—ÞØ \Dz,èß¿:öº¹*¢šÆ«aË„uZŒK}ת,€+šâEö û»ñÎ'ûÉ~!9o_ íõôŠ,;Ñ"!×ꊔ„çÃÊ‘_XºJœÆ˜ÚRN±elTòغQ¿‹~ï5¸§SŽ?§ÈRñ$ÁGç" Š{=]Õ«©ŠJ‡ØX s:†ÑÅYr¿siew½ï–2ÃÅ—ôZ¯ _Z6}#0~ïJ <õŒ—”)/~ô££>åqhÕܬ‡^?ª5¿ö㤃ÚSŸÍÎbµ½%8»¬ß”?úMi™';b«uå_zßÏ0µ§>…OÍæq^xè†gšJÕmõ„ªæ×kÈ1ÛÀvÎ[y§Ž·|ª^30½f\J*rÞE¯YKE95$áêÆGrâ¯nl)H3r ͘•å¾­6 )Êyä'T¥R”t“[\Ò`oWÞ5XËhÍ›Z5ò?²•RL¹öb½AWßéo?4¯zR3ä÷£bF±X žÄ  —õsfë%ä÷ÛåsãÍ0¬€=Öé%dù…G#œQW„I~JÞ­umèñ³×µ©ü€z¤†ô#ßqº“.97)‡«+¯-ö 7s0/ÚúK©È«NV/“I¥ò†UC½¶¡nB½\'KYXY ¬Æöê0ŠÃ5E…áj}Âpè™ËTÂû QuC—¼é×¾\9—«äŠªEÖ5Ö6Õ6}…´5‚L®ëmaYË×ÚìA$”¾b•ÌÆ¦ÎÙÉ&11pÇq‹?¬usû(d ÷1 CDsD͈/'¹úÐêŒþ™ <€R“±»,yúXí¾ý&ì7AšÔiFü ¢çì£'g(ÜëîÉT¢¬ /­Á+ex½Øêžr¬üÞá¾¼ž Ös”®šk>LÁÑþÌÆÝx|Ç‚Ãeòxl!á:±ja†Ÿåb¯™yôri<…Á¦²XT“Ò4¶pxï互Ԧ€‚ipÌÜÆwè„Í š©FZ¬(.W”%ÝÍŽ©É³d…ô¼MeÜ-Ŷ:…­50ÔÌf(×1bŪôW_)Ô¬8ž‹é¶rM̦oZW…›#=óˆë‘ †àç6øñèhÈ“Ã&ŒÄ1¦,høw_/3À%Æï@R„ÿz±~ü¬Auïz][?Ï%%5üøq ‰¤J,Ž‹ŒÌ ðp‘[É´©bg¹eʪïÍ›óC¶c¶Ž^®¥Ö³5Ö<ÈLgi‹Yª<‡Ü(oXºÜ‰oãÊÑ(ú“Úþ•I5Ó§I‡<¸©S?α\kè­Jvª¼¯O<®çªo…ÇLoj tú6"¢û"GŽSó®ž*ÝvóÆŽw co§DO÷çȽ‹cr2ªwî­ªÞ>™^í”×­,!Â"Oc"q:sÖ:馤{x§9HúIûÿòcøépEˆ@~¸=®;Ša¥®ÀæÏµA_®Û8¡êиèê<öí± ›rÔƒM( „õš6×””‘[¶Ò6yy£¶l9:gN®™aYAž.ï®ènzï»ÖþÖVJç7‚{ÐüyB…Biž)I³Wݹ¹!.·n\WCŽÙÞ}ôâYŸÞ-7T'ÇÖ² ã†ñšër¬ÅÍ‚E×Ê$·ºv›åì:0jìñW¿©®ÌZzvë9ßɵË¢ngT7s õ·XÄ­Œê…ÃÇ —»ô#–‡ÿŒSßýÁU¾¯á÷ÝÒ’àâ ^š^¶vv¼¢âæòwPi~Z»^M‹¯`šTªÓ›ÚV:(-*}?ƒxÛ0Ì®‘.‰)MÑç³÷móÄ¥cõ«éÿGàãÆ?ŸÁ4<òÊXgæT2q¼ÛÙ® ÄÃØ¨òƒã ãVÌßÝ”áùÑæ¿¥ðcÇ )»èõÁÎXü”)¢ú±ýœèÎ]k†._¶&ùåbý˜G¿Ç·ú1J@}Ë4 Fü‡{{oÃß³Oåí͸›Ž”£d˦–£åúxâK‡–õ*ò°rœ::oØÈ¦æ‘~´!„Yoû´üˆô£å€9Cä:åHªûxýÓ ErÃí8Ùõ_†Ä8VØõ8BïÃïk DÊá³N”Ž•!ý@Ê¡O/,k­ëd5Õÿ+¢´Ô5ɨa¤¤qÖVû)~¿T~Ф¨DÀ‚xD=ä%Öñ-ºK¡×Êø—”CèÒo,›Ûv³­„¥M7L$:a^¥úåÍ+ºŸ®¡Xë›DÙE[ƒr`÷Ç?¨Ù<ìañ@Ôºå:ιt™‘#ëÓ Å(Ç{f‰B^}hÏ«-3CÂçô賨µ{TÖ58à‡ÏÅ Èb±º†?Ûàöcêæ¥ÓãÌ’ÞâÌ H {{œ¬‹YÀ×6·£*ýNX åhŽBž­¢~ó•á¡&:S†>¤!bO—Ýÿ»:ت¾²ÒÂâž›«šö¼4ª ¤½þmžª‹a¯âMs±æ©º4…ïàÔÇBØñ¬<˜ª‹9~´ðqvÛ–*±Ø&OÿÀ¨þïaÄl}N©‹msŸgÔC}fzù›r4õà°XÒ!ƒ¥OkFÿ!_"{Çg}Áª–ÉŒûø£n+V;=Wçìd–›Ç.¯ˆÿøC?{W?û®¯“/Û^úÞ{{­ª6ÊqÌË''D’„÷lÝÝÊ÷jb;„¥Ù¥Æuš")‹Ø`³.áRüwj&vigK†žúϯ•ØØ|óæ ÷œ«Êª^Ò^Ÿ ½6ªÐÁ{ôˆššŒ·öT½1­cß…Vµ$iQk‰‘Å#7“B†]•rI"n®ÃZ%¡Ð¹¬¬e£–+ÝÚ^úŒ/7ÊëÇIUÈ3¾Ã|Ú¦?™ñ-EºRl‚¹ùfü’ˆGE©9Ä£¼Ë”€Ÿ>7Ü`(Ù~e½òxêÓÓœäË`f$iŒñP“'Âζߓˆ‡>þ ÑÒ== 7›Xj2¢¹^Zû–ï&”åk»m?nÔAÃç DXlQk ňEGÒOÓFk¤Q&”ÄKúw £5Š?L+Çéçï£5Š?žðWGÃBÍéö,fZwÔÔ\BãcB‡Ä¡y7w—é/-{$ÿêðaí,Nöó0ýdç¡øÃ¤²!H»¡ï£Gë²b “Ù¡óÀÕ£´LNü'|þ8Ðû“%Û¿ï÷Ég,ü7oÕ„uûîî ¼!ðÿZ„4à>ëD4ã7¬v¶ý»wû %ÐÚÑah«~ÛSL.'ª9-öKvxßù¤°ˆåLŠV–Yÿ¤“¤EýKŒy¸xêЂJ­6á~ФhAÊÚÇįÎÎ9…¤'OÍyò_¥8;oŠ¥ç(C1DZ°°T''Çg0§f¡Å(×ûÏI,©®G ¶ààÌ=Nư|‰³ÓÕaÃr|}ÛÓŒºúhAÊ‘_´É´õbeSƒ¤&~ :åA¹‡ô£Æ3ÿܦ¯[Þ`èÌ`¬Ö†­ôe¡ÑÇk>íºZ|{X•Ï9ÁS<ÔäI(.‰E RŽëñŸ´ö·ÞrïÓ‚è˸4€ rðÆÇ¦¨Ê¶Æ—_ˆß)¼ÿ¨´ƒ‹ýµrôÈÿêw%I‹ú/–¹ÛŠ$Iú¬Zû¤Ós·®?Îh 7-$!‰%•Õ—jüü§ç.ܵà]S™A’>+ú¬ôá)õö¸ TÁç6_®§}=ÝÛlü*ô˜õùq%½ÚÐ’'ì³z*A –vÉ^ºT9”ÑØ ±\N¬ŸÛôoEîˆÏoÍ[úßÊA¶õ±–yä ö$ñxv)æð K~²ˆ9,©©'ƒ(ø I½XÙÔ’Âʽú g}hõ1¿J¼ä…ù¿¼Þõ„•¡ÿª(.¹ðt?ì" ªç'¥i•:#ô5‘¤E}¬%0U€Žä eÙ’¥.fþ'G¾dü-ŸuÖmªO‡…ÆÂLËó5KQñþ&€.'V´"ì 9 t 5™ë7ÕéžßçÛõ35©TÚé+óÓò“*tüù t œfèçéâ>S8KÌâœÜQ>ö?F7k4æd‚Ìûu#FnµR*Ú(çæm'¾™œ»ý™úwRiuDg­:\³EYhù‹Ÿ½#ÿ°ÍÕkûНÇQUª‡¿E(µ¼C]Ewÿ&[¼PÅ¿C©ŸÇ­AaS1Tmcž¹Ö\¨šå*Qú÷¸¦"×væœuÄÀ”p(œ5êÉjΟÕçö°+ÊÝ4ïmóìlìAÁ:¡¢1eæ~¨—š®ÃºÐ•f˜Ö®`êmfž»Â#Ý#%ö|—"Uª‘r`3«Äý ¦„ªTNüêçWkú¿ð’òÚ´7.õEú+/w[¹ÆÚ²+ ŸQ„ãUÄýÀƒ TZËÆOT\Ë&¨²6ëRrS¸eÛè˜øé~÷M¯]AÊm·è1ÉÄÀ”ˆn$ÉD¢=Þ5£òÖèoÀ{ðü]B{-ó¬„^7€ªÃ1¼Òƒb•XF‘¡DÞläaÙ4j'S:$ÜI‹ Ò†DoeéŽ×ëŸ(Úôü]­â˜¤,Si¹F*Z)Þ%û¤Â ôo\'Ä©-ÑT9®ã´ÙG‘a®J½Z8ÿ†Ò˜èG­¾ç ÄÀ´HílÍ_uãÃuS5jwÊŸ™åæ6ØÛa4î—ú÷y”5.µN¸úþ[¡´Þü¶šYGP²Õ,%EiÕ–:ëÿl·hZϬêdúâ@Ç£¬k0§¬Ìñ\ JG…¾çtØq€]^QÞ5øŸD82ê|tüM2«c:e$CÅhK ]³õ‘7ôVé×Û-$j:SÀkhèxh™Ì¸?ê¶bµÓÙsuÎNïr™¿‹þ²œ±æoo«UNâ(\,ãªAìŠAíb!?@/•Ц)]zý˜Ô©ª":$µ®®1›¾Éza”Üʺ·çäs]è%g­1ÒÜ“‡ë;°Äò„Îê:lüÑøüÝ{ãÆÔ†÷‰°¾7hÿ0—TÆ•Æx—¡¼a'|NÑÿbЊ›zãu9bÖ%ÓZ•Z•ÜYct¬¨V®Zï3g}>´ö½r =ÐíôØxÓ^ gÖdbX, »oFeM´ÖÄ€<Á‡Ã€ƒŽG½U±,~DzíU»â•B·«C£ÎxðuÁ,Ž{ñ`¬_µ¶Î¥÷_ãúæ°ñ¶6)·>GKÑafý•¹D3šn+: ¡¬°,nÊõ¨—ÛµÕùëSû-ùpþö¾œ£ç\T¦­è{ä 3tòŠEïüîQ<2¶Ñö&‰9âb˪Némˆ<è$p(W™_UyúºþšqC3jâ)f9*UÍf+Ðu²¦ÖQjhÛÀÀ»È~Ki Û¸ ôøäŠË°´X¦I‡4Cõý—Z·ÎðB(: ÅW°~‰½ÏM¸x±ã$ŠŸ°k˜7ö ŸVqzê«úAtœ_Ä®K‘d› Ro9Öà\m›7Ž<ÇR …>:¬"ºb cü·Êë‹tŒïmZn&%3íÁÛ¸¢ÑMnSpð²ÄK¦Ùtâ%qËÇm1•¶J¶¶ÜºNE†Ã…$f Ü]§ ÉÂg)ÊÉ~žÑvIòÖ³”–vÕ õ‚«G™pëšÔDAø\A4Vˆõœ´&Þ=ûZòÚPÞ'ÎYR×|Ø@ÓÉÍÍÿ÷Å'Ñüê‘jVwÈWN[$YÑoGáßoWƒ°àúîø=cßÇ¥ÿ¼Ý6j„^,ÍÅS×üfsTzÄhµÉ¿µËWLk– 6¼ í#i)$çbæ›Ì ¾XóÖ ÜH†z!Éáa°„ÂËK•s¬‹7¥ËIn¼Ø?4aZsóNF·>3[Ҧþ]±^]­ÏŸ¸ÝT;õÙÔ•ëΣ‚Ç«ÿ%òh‹ªl‹“º­èú­e }ðaàHh¨©ŒIvrBky·`†×…wS;¤1Ä€t(‡ETïþ£6ÄŸ£ÂsE¢ïFŒHmlÁMHí±}å,âúemäˆNæm¸Ã€N¥EÝí©;¦­;˜öh•Ñ9›Yˆ<èT4¨ë9 yŒÁtL²#×ÊÙ*6IŒ©TT`Z.ˆÙ)‘—X×X“ĉL‚iù d§HZhSmCšÈ£Óð:¥ŸaÀ€NE¡´Ð­Ê¥Â¶‚ Æ”ÊJõ‘¡¼{þè¬Tʳÿkåè‘,2‘Y—1X2°ÂŸâQ./C‘GAÜé/°¿šûÆKvl&ÞIülän«Ì4*)âÖ\²t2º»"ÅéDŽz!%„Ƈ f°è]¡^ZRe„YRwkÓ݋ݟ±oï±FÙ£ÜúL-üó|eïñ}^³oµrùÌ5²xäf’bERH–é ÎNCÈ`Iê…<–Zw2˜Á¤ûA½´¤8ÿYgIåKóùt3¾Œ_Eµ9ÂòÙÆöý‘åG¥5¾q¯£‰6fng¹\¤Ñµÿ\Ž›Û0£ìQv]6¦]«¥qnsX°Ù|ù‘•Ù ]§8s)F,:úþé‘hmBµD²‘xIŒhmÚøÃÙyÈ Q­ÝÝF™°ÊÉP/ä±ɆN…hmÂøƒI÷7çLB ´fу¡^ŠóØ×c,Q­ ²Ÿ>þH( ±Ô?’$ªîªÌxSž1Z­Í ‹$zíà\§ñ,ÔYoÈᆲVæÓDü±²1|Ĉ­(ÖÞÞcžq¿j•5˜F ÕÈKú&­šzv±éÏ[©šÎpæmÌÃÅS‡TzÄhµ ÷Sì E RŽÐ>Ó u^Þ´ å83ß„f¤^Èc NÍB R ó˜ ÍPªSÑ‚”£V¶êaç,G RŽî+Ÿ¥œ„Šø0«n(ÑKUe¨oŠþo £ñÂÁŒÐ©P^ãUS³ˆÇÅ Ù'Ñ‚”ãĉÙϾ_næî)æiaÓ=L$bbÖa~¾Ñé…,ÖáÏ\#˜{úiÉaÙ»Ô“$ÖËÊ:B3HR/ä±§‘âÍ uÔKKÝeÏXÂÅÒ ¯ºOn¬cþ–C±^&äá*‰U£¿CÕµG?2ô™ÝTù–ÿ\ÎÝ»ŒãXsO$£Ýå_'”õïÁÏOHKçÙ:Ó:Ùkdñ@E†ýDÁI<ž—† f¤^Èc >È`†RõòPüá$–ŸJ jTÕþ€b,#êGÉÓu8½˜fw–.tUU F*Ý‚¡É¢Q5ÐìOÒîª*sâñEegŸ2ÊùõÃZ=#{wýù¸ëAÃÒué” _Zg8saª.„èâÓƒl‡àXóPA!Tê*[P‡U pF!Eå£R°1‚­­1§›×`UæmlRW« ˧r–Í›º¬syî0 “p0ï@¤ãHC:žf^Žã(ò(¢YTëdúÉ3„ÆŠ`¦S™ œZATJÑæ&…‰Â:«·!ò 3P(-ȬËdÛô$v‚˲«Ä®®¶§ªJ¨× EºúÝå:N!¤!ªJ‹¶´§ž¡yµáˆA<ÈËÙ»Æ8¥Sè†ÖÚâ òâG¾ÃÒ–GjËÛÇeÅCoÀ½¶3Wr¡f̶àNãp趠ã֩weý6ÕsyLÊr¾eÐŒ¦õÌ*q?D$â@Þ>/so´Ç¤è7ønŠàµ©Zgg¯óÌY³O–|²jÈÆªâÚ÷¾?.ÔÁŠ„5xÏìÞ“ Óº¦=‡+ˆYâÐëõÓƒèî&ÎZp³ ÃéüùuçDn™¼”J›á#aÅUÒuÙÒî6ØpUù/ÙüEó¦2×Þ½uyÜ—Ñ{\&S_L]NüÔ«¼¹¾ê¦è呟ÿúÛ¼ GÛSq‘?ßøÐçìG‹ï,ü}±–¥ÁœÄüÖZ}¦Hl=]¯™ºjWoþ´ÿäë2R&Lì÷nŸÞL‡}Ë_<Žéîž?ör¥gˆVŽ”£á£ä/OD¹ ­rÖ# S~šæ÷ãG‡Ó©$йoa¡¨®îº k0¥FKÕ>G+-7“’™Fmþ}ˆnr›‚ƒ—%^2ͦ/=4±oÐÀ¦rÂ7’oZn õB3ômŒ2Š E™s&m—ê&›[­»~ð¸<×úहWuþ+߸Rrr]®Û_ Oâp&™³5ùÅǾ­/ Ü„B.»Äb°¸8}ÒeÓE{;O(ŠÊ鄎uç8]Iyl&¦U¦¯»]Ó=`@CæùÄãtš¾xø›´>FöqKÏ.×ÐRSÙ½™Vñ'èµ”,¯å·¯Ý‰Ë·Àò¿×c,ÿk?-£øvKÔoˆƒ¬ü‹–´f-Жîˆ'Bü|ª6ðÝ.ÛÌÁb°›Ò¸UÕéT‡„ÃáÕó,ë'qçˆ[Ûá84ϹÙmõ™k½SøâœÓîëÚt3à6ɶ§8eÚè,3z±4O]ó›ÍQé£Õ&oÖ._1ý­Y&Øð^,´¤¥œ‹™o2/øbÍ[G*B†z!Éáa°„Å6NYì©‹RÔGÄ^|Ïh{å‰=(ÍB(.Ùšw±¬†Áá9g®^¦ÉJ½¼è,Ãê ¡H­R\}KkU¨ÿª²7µÌÒçî½µAÙVDËn O†ÛhÔÙWïê“ËÔág*©3­cáÝÓõ4Çìµw 1Ä#ßLÛÑõÓ_n76Ÿ¼4gkâúœÔååÚê“]‡}•Ï0÷¼2yÒUWN˹z{,ºxiÑì*{·Æ² 1ÞéC+/ºr¨èþ?T„Åy­füíÅ¥ z}ì¥÷rdÙ§½Ï8× Šª÷’Pcj¯¬¿¨ºøŸèÛg-F?ÚÖÇ!U©ì¶æí»“^)4PÒ ¹Z ý¬bªßÚ¨˜Mßj Ãwžâ”i‹³¬-N^è¶²0âÿí\gþÿŸ™íØe—º Ò›`A$Dl±7Œ±×ä—ËåÌ?‰—˜hbÌ%—â]ŠzIîŒ)žF%– kì¢"aYÚ²°í3óŸeÑ3j ²ƒ<ï×¼æõì³³³Ï|Ÿ™ïg¾O™9[T08¢î0ç_‘ðú5Ñé5„@C˜]Ý BòáCk‰¤Ç6Í¢Uã€Qƒ‹a‚Z— Gðçí8* ô-hœ&ùßL)Þ¨¥×q YB jœuþýí?ÝùéǨµE~jÇ[§N;ùBƒ¼í0òæošá%Ìú~Ö®3¯MhzbžM¯! ¯ÄD¿8øátCÇë` T‰³¸¨žüØìéÙâ(Ù-Ú%ÃeÏ•>Gç:ƒ#µºB.§N}IóòÍR ©dú`aFš6­~îè~W•ä竆}ô›­à P„rî¦Ãþ6Z«ß U“¦ý0yÖKYÒãÛ¿}}ÃÊ×AØô¥/®wvZØÆ£ªÄ!GHÏËWá@n8`Dð1‰Õ@‚üO&Žœ7!•&ƪÓŸ êKì1È޳DÕÃo9Ÿ“ÄíÓ&¨ñ’™ËÚXÀ48©ùxŽÀšÐ… (p¡ÎÓ‚ñ ;p @1#ªÿ2JÙÂk~ሖÈÀ9L$z åAAÔ©/^Cƒ.Øùø,…¥ù„äÔ×ý¾&Ód¿®¾/œ®P< ªP;`§&ܸ2Uu6ðølYþj×mB€òÀ:ÓÅ‚Z]{hâ‹‚6=¢q|ÜEªŒh!N-¸=“F†¶N¡ùª–ê×®·m‰]Ÿ¨¹>5^Í4ÊΟóöˆÍ·ÐT,IYhÛÄÜåP/Ül± X÷ þƒu§…#fo­%øÂÒ9\KOðÕì Onv6O19r¢}ÀÂó{Z¯–«¼½ýš›IåØ:mšN!—eô÷—ææ’‰/TÛ}Àã<)L{(ªšâ¡x@  b CøG1q3|Ä85   !âèèÌ™ød1.uÞßß)óΑÀ­[úúÖ×\œøÑ.‰…Vï—ôÂØQ?;ˆ©bFÛ„©ª­[^ÜoÀÄ1g ×<ˆÿ°…#žG0‘ÚYø¶4£+ì¨c«ŽybÐêROÌfÌo mª`í’%áÕÕ’ÖV2à J)‰zà€¸M›°S?Wg­õÝ@æÈ~ý•£n&ó¡x@  Bø šE4ÍMÏßžÀÃþÊ»mè3;†?ïÿÆ–,UÊÜÍ)s]¢XÎèag—¾}ö¾u1½£ÕÌH7把EK/NlH,~­‘Ýäú–T‹¢ÐPjÙÞѶú¤êÚO cž‹ÐòçL~šþG¡BA*Ç¥Uotö–Cñ€@ ‘˜ÊÊq3׿ žß|íìnQH™‰*½ê<ü$û½µZµ—gõî»ÿÔrWQ,(nb5Eê¢^Îx95{xθœÜþy”w™¼ƺôŒPVÖ¬ð(àÒ¿¯YdfjÕ dÌÑG”Šâ~åøÓž½.µeÅœ=+w= JèÃgï÷e¼ªsUbï(EUÚ©ÓßMR'½C³Ãn÷ÍÚ'¼v¦ÕÛ[î`üæp~rËà²2ÏfÍ=·|à¯çÔWsª«¹ S#7Ëô #òG$ORF)?}ØÁpô¦šÃlGëL¾IfžÆNUÑ÷N](ˆ;ábg:¬¬ =þc¸c`(cÖ‘ÔÄœ˜×W‰EES~äožègë×àÊ!C¾J">²$ãT¬ZBJJGeØ·xaCAŠ-Hωjqmi.1B¿ø Ó¿Û¦‰š}}î²eLNÅ0Mº¸©I#•^7æztô9:#ÝHÆM¬FµÙ¤ð)öÂ<‚MÁÃ4©åIÒªÀh [ œM;§ñ×ôºŠ3ét§øÅV‡þyßi}óÔ…â¸iK‡ãÞý ¸–K×ý Ó­¡ç0૳§‰U-Zo-FÇH‰Ë-™r`áÞ´l\^K*Ǥ›xæÅŒGKæ=È9I€ØÜ¼´­Û7L‰JMO8» TRRÓc3çä“Êq~ÜØÂÁƒ\wÇ-ŸÜª·ýÓµ_MÍS›6ÿôì3÷©d`Ñ„)j8JC×Êк4ƒ Ð*ñ±úFµ&ücãš‹£JyR¶7EñòA¥ç§^Àixï«6˫њE»µOÇ„r¡x@ ž¦Q,–«œÏ5˜‘*ñ¹“5ýþ©Ëe†Bÿj¾ºÑ³‰À9 Œwò9 ¿íYYÝPØÈÿü™o"Í¥ÂY'GáýϤ6Ä]ʉF2Ï. ;5c„2õ´œÔ†xG–ÎË«S9~kKoá<Ð|³l­\{æèµ˜`3bíïÈ3!&0‘Íd¹8:Dׂ´èQ½WË–÷°{zÚ=èHÍà;øûbR9&f$_ŠWŒ¼¦ó4fO=§•èzi­á6Ówèº%dqÀ>{êBñ€@Ü 7¸úA]†±f\­sÅV/š>îаSCËFfEü2åbŒítj~þ—³fŽH]ëj¶"™ü߹Ò‹‘ää£rRj/fÎ,‰Á/¾uà™¿týë9¿Î>¬æŠ<’OË£øóüÕŠ®Û4ÈeÛ^~éöB£w|)öê]žm…(&fËö,$ _Pãäu½´ÊlxÛ—Ž­ÝÜ9rÒ‡O](ˆûõÃ5<—¼×wåØŒ-3&.ÉØ÷ƒ Á9¿Zíi0nò"©¤fáÈ/M{Ÿ‡}šþtbQHíØU\N®“~¯møØ]Ξ ATËe|ìÖ!™sèSÅææu¶\‘[ µÚb<9uG¬«Ïãl A¼õ%pË£Ï×-ÇèTŽŒäCS3 yÝ!iKgº7ÖWº~W?nxc}ÿÇ}x}ù¼…âP‘z‰äÓÅ‹"ª•ÎùÕryYœ“áRò[§~L¹ÈWùo™6uIÆP7&ÐÃêÝ "õ`ßâEhÈ¥ä–NUXPÈTx“ùi[·Ååä4ûúþÖ–{‹ÊrÞÖ’.nlÒøHÏ[Ù-‡ÃSywª…S?¦fò$†^(y–Üs¦s2õ[Óƒ=iH_< x@ TÅN§††Üü8$¿ë·¤~èÉ85fŒéê×ÕáaŠpçì š¿‚ÓeK§6Dµ4¿ÍË_ ./÷R7ße˪(Qx©ÛŘt¥ëGR?z£r4cÍ_´|¶˜»|›Ž±ª¿ ŸŸP< ^¯1ª!SK½Jî¹%©7&Ž@~ÕßÒÐ놰§ Ò.WûÎÖ 6уžÃú²MPxZ@ ÈÝaÄ`Ç”ÛèZþcô©Ž<Ƭ-rF,ÖÇm#¹yý3r|ó6þíۓɆ÷NE”¾ªöOéë6éæÈ£ëëÐÝH‚*Í‘¡¡S©P ŠÔ uJâ°†S¡!Á“)R/ñp*#8xU\#vs^}¶9káç÷ƒÞ1‡ óÉò'¶ô˜rPùÊífñP”S¢LUK•!tAò1T(Eê…:%qØ‚©P ™l4EêEäE‰×¦ÊGQE<ðŽGÁ—ÚJÿÝòù›œUò×Ãóùš×_€Wn÷5[‘»vIÓ±}Œàp<<Æ= ‚¤l¸ÂŽÜs¾¾mÁ·ÉFИÐgØ1zÔgÕÕǯWf¸«Ê©P/Ô) )®°ÃbKg*Üe ¹lt¿ö°cDêZe͉*ÅA7ʆ+ìˆ {½¥5K­9ã.Ùp…©Ã>©©=©Püâ>ÙX”3aŸRíY£yÿuÝÊ”åf$…Ê7”VG®“”‚‡ÛrEý+·ÛăÜ)¹{›fw£<’‚A.¤r ¦r¯P“‚A.¤rœ8¹ÌíÔ¨ꔄ r!•ƒ-8æÆb‚A.¤rœ>»Ü½õB ¹ÊÑ9GÝ-‚A.¤rÜeŽzV8û”Jâó4ï¬È{cÌ£Kâ m#Í.µ פrØ i ëËWn7w˜»Q»âÆ€ã6®_Ï B1(R/Ô) UN…bTV¤H½¸+à¸*7·U þóMï­Ü·r˜6µñ‹f!îÑå[§Š¤`}üÊífñ Š ÇI±xµò8ŠA‘z¡NIº6X yb\ûk´ò÷Òäê,#Lü㛣7©Ž€Då Ë+’Åã1~5µ'(R/dðA…bÔÖž¤B1®X.¯kX»:ý­‰ƒ4ZáõrÇ’À¡º¾Î¥_‚¶ Cæï¹™e.,V®û1WlãÙ8è“o4Ûßhá@S=‚ЬVIþe~}½1À_=p ÆdžÑœÞ¢ùïGûþøtP[  šè7ïÀ  Ûá&”¼šàLØ1œÎÀ=<4h”ÞÑØÐ¼®L_j(“=6Bú'¿[^½ëQY9dÍ?M>>† ¹47/öÛM¯=Ÿ´•µ¶h½è±ƒî€„âüNÈXdÚ»Îæ,fLù¿_Ô3¡Ez!˜ek©)(FþŽ˜¦oÖ¼]ÜR,õ‰§ÝŒ9Hå(?¯f´s|°Ùfú&ûí6Ó¡õè7œ9"Ð~w>ž¹¼”K¿9š±5gúx/Ï-Ò+ý›/ AàZ,F×ÉÃÒ¼|³TâRŽÚÚÚ%¯y™ûïù%ªŸ½FÈ!¸¾šéimûŽqmsÚÐ ½ kvœàí,å<2Š@Ø ’ýûui~ä54è‚û‘Æ¿ë÷fZ|©íÅä±™ª¾å×ÕCËõvñ°ëòŸÙ~Ü1á塬»gvo¿ö½¦h*êȲV¾´ñ@X猰 šTÚ#/}öyûÿf ýìf.ÞŠ®ÿÌ5?¢ÎW0Œ°jað4înLáß«Ÿndi½öíå‹“Mw«qî˜wû»W­Óhó’ T[ÍÇò…¶Ý+³;Q77ýaÉÀonf±B¾Xör{ óÍÚñ‚¶uO5;ÿ—”®Í—»ä9- X_HìÇë$z£îàÆP] š6®cÀ.'¤Qr(nñ'Ý3®ôo3îv˜fÑ”íÒ¥Qa^Áñx´n‚4âý¸0€¦õ¶îqñ¸lbŒñgyÐÐ_èW¥¯Ç<ýoø¼Ía­?z”$(>=ì}!ÝYÁ²_娛Õt¯+³Vý}×EYJ´ñæõʱðo½U3¨.„~ÏÑCñ³>@¿u÷ÌžÃÑœRä¸:ÑÏâF»Ø®Ó×]Å¿¸ê(‚ž¡»pÕ½ž>mÅ…´`¯–ÑhÇ™ÚD€k††îyZ?†í¸ÊïOW«ô5 ¶¸Ý×;êÖ5ýGaÖ.Ò/ý<}ùØß AAB…‚TŽK«ÞÀ˜Ýy{ˆkwîù¡dÈÿý‹öÓ²G¬ žŠâõ™{ö ÆïˆÖo³ûuøÍ+™{¾½=³a7\@‹Ü(q«Å,Uh=ü03- cÿ~»=ªµ!ÐFB`@tRhŠž‡Æšã¹îZÝâ‚ÎæÎŠó D;õ?ìÕeÍØ•3‡„ N íœçQW§NH cŽîU’SÛþí1ãÀ`ÏÚcF‡¬3×z:ýM&¸^á?çƒþâ^ƒPOqë¼0/Äš§1Ø:ă=õÙµ6òZv´•”[¼gó~¯¼îÝ 'QOÂ1†ÖÑ“ÊA _ÕÑÛGòKì1ÈogÞKáÜÕßÉ©Ð=<_~ã4CŒe÷ìªh3<ðÌï~&Š6BxV€&£úÀ¼ŒªíŠ]úåÖ²dÚSgÊbf‡ˆ&Ëzjx"Ýy:}¸ÞÖnÏŒMï}žrk'9n­¬8ý¹J8UÔ;GÃy·ú”Ž¡º€â—Fªÿ_@~ÆZ‡ˇˌ=«7†ê‚°ù˜ï•ËÇ?øŸ5ƒóª „L±ïXÛ¬Œ°­ÛnË!£Ρº “߰˾@°¬€uãµG˶ñ¨*¦Î>ÐæT‹Ú=2ïq»óÓòá¹.¹VÙÁ¢¥37þ)Àgÿ—Dmšb»÷¾˜9¸À†4-¥az\t gÍ¥Yª·äg'ÔÓ+mÉŠ]º%¶âQš'SNÿusBã >Ñž¸Ûº9T—) ^4eÉ_½{çÃo¨-¬ ³_›p_™Ý„s¨î rÏù¸^ÅA^ôlÏý!ÂÎ×IÝ|’¾÷(ûI%œïüá)k\‰ÓkA¥w{ƒ¡Úâ°°éà\\Cuï'³—coЍd<¥gÓÚ†'Z7ˆí! ÷ÖZ°Ç£6.@8¨‰í`k€Õ÷a³,*û¸áÛkuO‰g'Ížúìš©7ÓëmÀé#H_Ä(—{”–’‰Äjp1œÇ£Ñ+¥sÃôañ´øXY\´O …m‚·‚½ÌÜZ¡ÓcB³åàÞâûFΔ!˜žà’wgéAµ‚•òKóÿ;X¾s×á¡C ûÃÓ´ÛQ'ÍûðýÐmÛùÕJcüúâEÍICÈ{èil ˆƒÏÅ®;**+®¶]ù¹ö§â b‡o4':R͉‘‘÷Щ؀£á•;D•|•DŸ”ÿ([Æoå˜Äz pi4}#‡-6Ý_;ÑϤë ,¸÷fÂz?Ö »=¢ºÚ[«möô, ¶Óïà©ì¨­ŒWFÊF+£5I™ôÞ‘÷\ÀÕs5~½\ïiD3g4<$-¸/¿#šæKŠë;€?ør}Êèñ«#c&Añxˆ”Üöí“®´ªþòž‹žœ»­ôƒ}ô˜÷üÅ®43ÿ²÷¼EÍ;¶¹K?b«ªþ¼¿ã͵òÆÆ?ïßÿõ´i`ôöE?~³‡´pzdxT$ˆšm‹^FªË«KtÅ…’Â]á;\c4+Ú79bØö$G´„ &•cÒÇ~™rñ7CZÖÏ2éLiÁ4é™vÈlÍýw|À x'q–„¦õ¼×¶þMMKöïoñðP‰ÅQUUSOÚ:mZ½´cž¥ µUq+«˜U•‚Ê¸š¸¥‡—»6¬Õ§µI¦ÎœÕ*mµþ3¼ _SËR@i´:r¤ô¨~hÔ— .¿×~$ V™³õ›é‹ŸÛûèé…ăŒ9n˹xfmˆ‡3æøŸw‰süoNþÿAWï6 %‡Êlœz3—a¸f(Ö_ +Øòä–J¯"¡Ù;AÛ?wé —!±JY¿sy‹Y­$o±Õ^žeAAw¼Åþ=Åí• *ë˜csÁ2ïÞxts¨.¯^qcÀ.«fòÌÒ-;þ²Úd~àé~÷×íËÙí·O°G ÍS ½—AHå8š’’ãÊ\T´8#ã½gfÕ!šëÜŠrIyüõøIE“¢[b,b‹:J½ÿñŒ®{ૼK—IüSÔ ýeã¤rØ i=óÊqŠÊÿëÜ=ñ@Nœ=}æWJ¼7X§[C·œÂôðXõ°ÿ÷Í5k˜6çÿ")æ¶þÒ~ŸÅdþcÕ*¡ÔeC B•PR!ñºâ§áÕ9æ\aDƪ³0Ø8ÏÛîèð•aR_»¯'v·ûl_•jöîÝ­žžj©TÒÔä©Õþ0{¶Ê×·/Û6ª¤$)+kë’%ds`j£Z‰(«„'ê=ÐUI ê„0"¬- Í"´Pö:]Ù¿¢À_K~Ÿ+{·Þy ö¹¸>ÛǸ9$´Çùrý2Äëš KXúÊC÷›ôƒÀ¥œNgM‚' ±dw‹5ØI)è¥[Œ@0`À;n¬—NÜ{zP°$ß½YãwQÌŠø`KxÉûÀ>˜®hÑiÊ* %ùDY&ó"<P›”&ㆆy„%H¢‡úÇF‰Â˜¨óJˆÉ$œlùô#Ñ‚y®'”1Ów<·æŸ†œL‚óû^˜~ú/i„ÚíÉ>-5ù>²nÝ;ûýë„–òíD]|SÜpƈ•%¬A¡ƒñu¯ÞçNNäôRWF*Çëï¬ê— …š­F_½õ›é]sž˜ðvü¯ýÕ¬)·ü¯ýÝ·Ýe„;æQþ¨‘™®ˆü¬Å±ÑcÊ\YvrMÔRãKÞ’¹Qtô£´ÙìÕ-†«MÊKª¼RmÙYåµ½×›@ ·2—'-0VÇLMu`ax¢òÊ¿(.ƒe[0¹u;ý×ö)“ûŽ%k5ÙM¹‡+/ä6å+MÅ(ÛòJçÓ¼5àýyqOx±c¥¸ã&ÙfDá½äˆÜåÊz:ò NQ"c&-~nï‰#ÖÕ\!…zô„ÕÑzà±É“¬ö2Þû-*Æc¢I÷Mœà.#ܹ0û ¯¦g´Úe’ys/éH"õ€¦³z0÷æ<&#ÆWD.sãoy?D½^Ÿ]_r¹©ØvrWžý\áCA@Z½Ú<}m¾²!:ÿ‹Ÿˆ4yÞ²ÿ€@¹,@ÈgÜc°iõ–\ºš1hfÇóBó~lÐ\h».쎋uô˜à£Oé¥eŽÈÃÊ׬ãÆ>˜}2^(ðIõHš'ïJv(Ïè¦~ÙŸ”Š2]Y¹®¬PS”Ût­B_Œc4ÌàË O”Ž_Ñÿƒ4yŒ÷Ðkì`{bšë·Œ­ÛÑšZì‰^3n¤Ó•p)P>¤Ç\Yß—ÑÉå“¿¯éÖªÛ\6¹PÄ”* ä·HûjÀ±} 2Àp}$õ£«rÜ¡pº0izTC'fýg£ñýd¦Ãîh¨ªW*”比F†×(u¥% hƒš£nôj(ð³ùIh [ê-ô‹¼½½%b®XÄK8K¢9œe†<Ð@꩜efñg21…}ä¨×Ü….;/_4gAË®ôÐ;n§ ³”Xt;Æ`ÊÎ-P]U¨’Tþ®žCðÌjµh½Â„ãž•¿9.‡ÎáÒ¸L.Ç¡qÈ FÀ Î™zˆÑ1ゎÒùt§ØÐþõ‘‰éœ8y³ÿúH7rˆ+­³ë¸Ýè0Z0‹³ìƒ]¯µiÉEç\ë­Æ·~®S[Ô­ÖV [Â_.’äŠøµþaçüaf »©áêÿxˆßm‚qËýS|ÿ¶¼,Ú¯'ÑòrÇèQdÌÑ»”£Åq—Û¶37o!s[:C#o±kkÛvlïê(:BbH‚¤ Øõ·í¢b¯¶;vr]wž`aêú*•ÑoN.;ÁnuV€Zª¨ 6@3ÔêLkš«O›¸‘Î÷ÄùxÎ6Ùæƒ®/l÷2`鉮4ß̧ctž…Dz±˜v&ßÂ'Ó“@hJÛ$a¦ÐÑd¢U*2ˆ¼ ^Ñ1˜`ËĆðOßU0n7‡ã˜ão(ä7n± 9™ôä-v…côHò.û>o±]¢B.`¸ócÁ!]­.“IÞÚöêgœÎþß…÷ãy·L’·Ø|üð}þü¶ÑVÙ;”è_´OÓfl‘àó<“ÆÀ‡â@º)þàp츋«>³2òs³ù3Θ™~y‰Î>WÿÇïÝaåk¢9 nÉyãõ+’K9ðž“çɳ“él:ûÏ!(4ÒÛ±—´šoDäšLk.´=À~¬ãƶìJ·Dðxäºe÷÷Ö1O>/Filter/FlateDecode/Length 27592>> stream xÚì|ÔôûÇ“Ün{½k{Ý뺣-´e¯Ò²K™Š²A@EAü£(øPP† ÈT™2 ´ìUFé‚ÒI÷º®»ŽÛIþ¹”R†m/=Ÿ÷ëßû6÷Í“çI¾Ÿ<É7 ZOª‘‡ÄaEDiC³zù7/ûÌàfÐÄô±‡¼¦›ØõsÔ/ö”Ý´O¦³C0@<Äñ@<Äñ@<Ä@<Äñ@<ÄñÚ­xd¦2è°V41¸€CŒÕ!-,¹™´Hehb8q‡«C°l:æ ixÓºÕ’&f€CÀ!pˆq;„ÙR {Ô‡j="JcÀõ¤‰àpÄbÜiáœÈ˧C†E3À!àˆ 8ÄXÒÂâA Ö“&f€CÀ!pˆ±:†ê/ ˆâ€x4„ .x„ì(W8¶ANû©¤1kUèžœ¶be8bªýa§úM·66ÆnÏù‡µ$zs-ûeŒl ¶Xõç äÿÕ ë°=_²>ßÄÈS‘Æi¶ü¬í&|z¥a,©Åv-e¾+Оƒ´k·h†ÛCÐÈHͤÿ·â€x¼,ÜH3á—3çÍÑ•U'ÿüiK×÷è®y ^^.Õד“œƒœj’wW›„ àÂÔaÀ—vû§nŒ‘`ÂA½ÆÌ1 | OÂòÚÂ!ß0^ï^““zAÐ Üa€x­½N[¥§ž8{j…L–¼{Ûá}¸{†C„ óxiwÿ¾eTaþ-’T—'Ú7ù~V,DÄãyP9G³škÿñxå’ôf5•™!çacëÛ¬ÆJä ñxaƒ—4«éÙo!DÄãyøø›2ë°“Kвí‚ÆLØåæ !ôªKéõY½ü›‰3æ@l ó@<0˜xd¦Òâ9éE¹|šø×Ã#’fÐ$.ô±„ÔúÒÁ .+âj;uH ‹Gn&-R™ÒBSšxÜÕ…ç¢I\èc ‰{ÐÁ Ëâj;u³›ÖKSÌ–Ø‹ðòÇ ²†”lèÓŽøËvvNõŽâZƒÉ†k¸‡».í°.//6ûþQC…œq¡%”lèÓB5edN6:pYTA`2Q¥¹«Ô$þÇãj»sH‹‰Õ(õ¡ZˆÒP)Á >”rtí]jX¡¦ƒúPÊqöÜ|šA“¸ÐÇJ0¨¥ç¸Í ƒúPÊ!“À†ÚÒÂ9‘å±)L8š‘}”fÐ$.ô±e¦ÑÁ ¥&âj;uH ‹%PtXO*ù ‰ÇóòiñTyšÄ…>–ð„ÕãùG*Ä6Ôvêª ¼0 ˆâ€x ˆ€x ˆâ€xˆâ€x ˆ€x @[ÂÌÍÄ2Sßcް nS`à²øË†Ytüe»¦_ì3”~,ý±éÒéú˜AA¨†Ó¡)ÉÄ[¥šI¯Òl!FãV²¼Å›eнˆÆ7›S­GDi îîÕË¿™9o޼éÚ»´©œ=7ß`^ðC—N©âB“ÍCo Æ9ÞbÙ÷Ë6E©ŽL¾»×ë¥[£T¶:Z² y 3ZÃòÖpœ¶@<Äñ@<Äñ@<Ä@<Äñ@<ÄñÚ±x4}º)ÊåÓÄ¿‘t0ƒ&q¡%¤Ö—fpYAØPÛ©CZX”rtí]jX¡¦ƒúPÊqöÜ|šA“¸ÐÇJ0¨¥ç¸Í ƒúPÊ!“À†ÚÒÂ9‘å±)L8š‘}”fÐ$.ô±e¦ÑÁ ¥&âj;uH ‹%PtXO*ù ‰Çóòcé`MâBK xÂêñü#âj;u Õ^Äñ@<Äþ Lpm±K»8öjŠw-®9\JÚ­×vêj%1¬1ÓXWÊÉ^ Õ‡þ·f€£^þ¹-·ŸI4qŸŒùór|MÉú¸žãVXéþØéæþ•¥mõ¤4á•]!œ±¯Ð¨»%ÏšyÏÓ„¤jI²¨ªæüñ {ÏâïÌ›Ïôå2CQ\½2¾æáެÅ}ˆ—^*©¹wûÆÂãwÎWãB{E¯÷ו£;¨$Uqο“}WN}qüceÔ®nv¢.æô¶i—rÊMݾ6ãÿ<Í^d Tæ]|â"òXƒˆÐÂôÎc_‰œþ«Y›ÝkÂ×Dêj‚WËX4›é»Qq<[0€ýéå¶¾$xêÕß4É]ºí¦.8ú}È·{«6¿%5í~5úBIÈÔ#mi‰O"/㣵çìp«Ó¿ øéPÙꉕlª·Ö\O>º9Í.§‹r„ùv¶Ü»“©57ƒ5?PÐ¥¡ë¼Ê!„ªlË=ö[3'ÿ)".Ǽöû­^‹zua7N¿Èûzîô×x´qîÚ¼£³Sl6~<;°äð€ƒG‡|ðF_ö¿_W½f®NB¾J‚ ¯½§­èËþÁÝ­MT,³ª°éd}ªAEã¢@ûá`RàŒ8•¼xU€Ÿ^•”O&–xXhy¢ªˆˆ:e1[k0K®¿;6O,Ðr-%}ûÊT¥Ü†çA`Ò›kO–ÏR*”ŽV\¯kÙã®Ó“BF;š˜rL{†úùªe•Ôrñš}ç+{í=Ù±©r ˆ&íî}A×þƒ…\gïþS9÷I4°AæÐR#ˆ^ƒö\L˜!H]9*µÄíõìüÙ¢ðÀG-âg…àèažÿ™ÁýI*­b¢M½FUqD™ÓqÃiùÔO²,+eøÝry…©‰+•gຌäÇø JG¬ÍyÓüñˆ–ØÒ.%拃8T:"‹“1‰Ç~-«:/šñ©;Ww¤‰—W(,»òu[ ƒïgªØQOY‚­2€v=šÖ.9ºÛå`õ/Q$Īý¬âû.ä¢Wʼ*Ô°–¨…1ëû_s¿13XAJ]¶oµê=÷¶¿)©­aW+U±¦ºqÌu=7{qˆh{¨è×. &êŸï$d⯺¥Ý»rzB¢Íšñî6:¸VQæÔ'áÛigú“ö%ÝÕÂV@æÑnz4µKü±Ù)ü;?üâoßPò&…UX©·b#¥÷ }-àg¹pÿŠÐ¢;«æ–ZT¢I…Õ±5c-o,ž/Äy¶ïÅ\»‹ &ýúàï»Ö¬;÷ëçM‚Îb2»:ðbS ³5^Œ—ßÒnŸsÕìïõ‹4oO†‰—¥m·`bìï“V¨E:Q½ÃZÄ«*¯U#¦l¼ö^=ÏÃFl€xtÃ#îЬ4Ë}ãZŠXþHéež/Þ[Ê^sZûC ¶fÚçWÎY½2–;—„žuJ^ý~±µwÛý߸lmé¬<«†.Ù¤ëé=»¨®=£H¶¦èNâæ …?~^`òØO‚¸SªÌc;¸½ôa©º}t|¼Åú÷Œ>ÔN–E”‡âû[’~Ýùù·RÓÌì]õ¾aùvp“î?ºë¨Àâó;”î¿ÚÀá ˆ@7†Ý(ã!eÓ·ÝC¶­GPuÉE­ÿn#>z:OPIöøP}¨ µzu|÷f°Œ®SÎvÕ}óIÜó}ûúẈոm6`7àP6Éî÷ÞeýÁÕŸ¿Ì¢®9P¤•«4E¸f]|ÅsV°7Ö8TšqfvèâÍxÙmAU²"F"C$“—§On°Í_™ÈgõÖ+hû ·Ãr¶•ÛÒ)~º ¾käÆŽÛ¦¯Z\i"þÐßûVQêæÙïß.ëÑP]äââŸaÀ.ˆÐ*ü4ÿ}}!lÀºGïð²¢¾Z¢ï´ºQ¹Íéþ´ÊV§!Ïx{q¨Aä÷0AÆ<¨ÕW>@`ÂD‘—ö¤>ûäbM–½;mÙõÈÐù%CÊ9YölãÍi{ÿ­~tB„/ ú7\ó€8Ÿßé3üÍsk“pöÓóê8íLìâ; Ÿ ïô„Œ•eçÛ†?+¾••ÇRRF5 Æï[FuêtÌÊŠr×¢¬»õyþ"µ´²U¾ãC¿.>ëªdó­[{[jhßm(ß ¹…\ÕFîhW—ó7«’I÷]¦•<ÓâÍ2Å^Dã›Í©Ö]˜5«—3sÞ,x?ÒµwiS!9rdF›°ôèÑæÈ§•ýZûžÁãþÌÐ[r"úíWi᳃›w⛦ÿV>æ…6tãñã³_q]>?|øIK¶•ézêÔ÷ÑëúŸ¹t~àmÿCçU•÷Ž?½‘·DʘªmÚëHìõÆÊ÷1EÑŽq)nnÏZô™ã7HLÄ®Ó1"t¬¬&Ÿùc~ì3º Æ_èã÷N&'ÏÐâã›Í¾þjÜ¢§¶å0d]èÅëWûÆyžŒº"Źq­¸…ôìþ­Ó¦÷S*mœCÅ7,ÛrK-E^¢GmN¸5úv¸æA/ìe²Æ2ºñÁ ¤E:Þ¶õ¥ëé`ÆK‚^©…ÍOüÜ^*5ȺØ=\îìKÈœ†4FƒUýæÑp0ïq÷¤÷™N%æiâÑ?³‘ó—bý¸õÕ%ºÌÀZzÃNInÅëY©É¢g¯—S‚îIŒt.áK1Siõ3gÌêPÕô(‰0‰ÊÛHÃEr‚‹l„`!¸É†[sÆã] n‚h„n†Ø‘…¡ó«Öû–ñËL„Rk)ÒF7ó9éé‹òÍFXZBâa¬ nT|x`cm¼E™GËf‹——7­)±°0Ⱥ”…zK6ínŒ¸%“Û*pÊÜGÇô?Ó%õAæa{ÿYÌMîœ÷Ó(Ýsìµö!… ™ÇáüsRÜÄÏú•¢Òñ€À<¢‚¤2`¢†gUô¬9Ë,QTò¨3F5jÙ×å4jL­Á4ZL«bTuš‘˜¹YÁË1¹‚¡P`ŠZfm-£V…©øJ‹T¦Ë;!‚àÔ<„ß1γ{Q·*—ªR·²2q™ÊDõÔå²4¯Ü\Quu……e¦›XÃ|‰þ O»›¶ ƒóÑ`÷¾pG-ˆ‡s$0ðƒØÇÎ t¿´4Ç‚ƒçEG7­9Úµ«A,9Ú¥Ë{§N=i‰^9ôšqÈJÒPFž¥åî?׆¦§ßðñÑ×tKK³¨«Ksvz¾rŒ•ÕðìŠÆê˕ȳô'B˜ŒG§Ì0*óÐvc8§±¾' ¯»öäÏ5ù6A— ¿ uÊŠJeÉ4¿‡o«áVYÊ­¼Š=;dvp¨u0…[M…c‰=¸ÛÑ¡L2éС*¡°L$ò¾Ÿ3âìÙ]£FÛÚ¼r$%¦~œË[4Ø#Ì…ÍÄØIvv^•”ä • …”–¤89x´8)..ë‡o_]MåT}ÇÅÅP–ü4xðˆÛ·õ?FYâìLÕ Êí³ ~Dèj$ÏœcòëÐ!o<Õí^Z‰••Ce%¥¿üœCu©ºA9Ô‚šRÊAÕð§‹Iеøpv E«HÒ’Ò’tý÷ë((²MéY"˜!µºÖ*%‹êz&V±*Ë-Ê“z%'/”rK˜ZfÇœŽ®5®Ö¤5ߌI)GlïÞ·;vÐ7ÒåÎ݉‡¯9ãòMÍ–;uuHÝ’ƒú,ÓlÉØNà ÿñ0býHnè>€ÖîµS $ÿÆIÇ«M¿Rú!yöi+Š"‘è› ¯ûÚH¥éNNTÎñüNÖÞþ^Ó¯”~77ÈßOë//Ò$pŠ2y9K#îÕ°¹,•ʽÞ;@eopÀÀæÐŽL±ØBVÓåŽnȲ Éê¥ÿtÑ:å[³×$¯9â&éV±;\\cqn/»4™àÖ½TÄäZ§â¸G§ø²båI«kÁ¥y`ühX¬£GM:t¸ë”R‘µ]y¹°¦f×èQ6¤hD­©íZìIæeÞ³<˪Bk‚¸5ÁjkWLå‚©IûJŸuåYB…g¸ ¥ŽËyEËàRþ”ØØ¬9Ã37׺ª*Kìš%~ì>s­yïÚ®ÔGÊ”¦š¥&9lÏ$™²nuÒžBuùÄÚÉËù )5¾ù”rP*þñà?“0™÷<=ï=w¡VØSÚ³‡´G §8ŸecVïW"¶ÞŸ/˜±Û9¿›”Äàé ê r¤> L‘ÌOºÅ[RdÉqy}Âoò©ïG”€“Z¸`€ñÀ#x¡Icö}òW?›Ñ'úþ>îÇ×/˜Ÿ&Æ‘ØM™™À³1-±Ê|ßfb¿a‘aq²k›'þ¶Q¹éƒ¿æ ¸6x‡DXà!€'÷Hqè>Q÷8jé.èѽ{[57¶Z¿³dç{_¼øNWÒ•/xüÁæ![;m?ãûµù7nÅ ØEÚƒ[@<þAÃ-#úwë¿W°wzåÔ‰Û&MóSÈ”JáõÜ‚¥‹‹´[(Áု@<ïïPÖd¿)õƒÖÈ¿¾vb99yüæm*¹‡»ðjœëšµß­¬÷ö~nøýœüÊnËI¾p\°ç,GÄÀè±3µûnÐ÷—¯Å~"_z}T¯×ß\ÉdëzBëÑÞ‹>KÚ»ûyù‡¶þ¨„35"d­ ‘›Ÿ·àZnè(¯.ÿÉ~´…‡êf¦ÒBƒ‹rù4ñ¯¿ÿ8:˜áé9’&¡‰%>>£é`†¯ïšÄÅË3Šf¸º i³eT±.é˜hỈy«à~>US>l¨ÊÖVx]÷òó:Ù3^‹À4ŸßÍ!„Ï` (E9¶YkÞï@“õ©–´ðzçfÒâÆ‘ÒBSºì“^Ãè`†XA‡ÐÄ÷Á´0ÃcÄ¥)ŽýÛlYÜÂBS±ßª‘ßG²G¾UöÖÚôCT¥ÜË“›¯yí³¯¨kªçíºÖkÏÍ7¯*†÷qönÍ>&=êS-a¶`ÓziŠ9Â{^þ¸¡dCŸvÄ_¶³sªwìiš”lèÓŽ¨¨m™™'RS÷ªSÐ쇇ÿ”›“•õ·»':Xâá>ÄÇgU6tcöý“éé‡ %ú´cøðÍÙÙ'ÓÒ..ƒ¼â¾>'÷´¡âBɆ>íèÙýÛ¢âóyù'[{‰JggáÕk(‚ŽŠc^æõe΢ä[÷.gJ: ’†R3PS~‰™  ù/Þ1…kUñ©™_^)é?Ôѵzxšô¨Ï±¤ÅVšj4"J£Û£4\OJ0ºö.¥ ÔԀʡËò2O92ƒ*PSC)‡.ð¹1±±ïQjj@å %”`œˆ~›*PSC)‡ÎŒì“ÇϦ ÔÔ€ÊÑ—Ó1±ót]Cì<Æ…Œ«q‹¨5må v å””XŸÐ½Ê>̶Ӿ€šê[ãúÜÉ ±²qÒ¹¢¦OQއ0˜œo;WyMQëôv4éQŸcI +¦aWòÑQŒ˜.ï7 l4Ű²ACKÒÎQÃÊÆcÇ:YGè`F^~t›-‹àr3V}ëôëVÿ¹óÄÿ[þщ›P¥sèéï\.Í{¦lhk6'”§+ ­Vu+£$‡gîКW%hÒ£>Õ’%@iÖ“Ê?è²Ofž ƒÔQ?MBK²ïŸ¢…Ù'!.çÚrqõ^^I{w nÜàååËBƒe¡¡?p8+ÒY”;wºà›™~Où Ó¤Ÿ‰äë#YYLdmý^{×Ö¼*A“õ©–ÀP]þ»NuŸ>Õ}Õ,ñyÇ©Ðj[ñ'é×Ú—Ëh&LÏß}<ÁuðT]€Ç˜æôÚ"÷n2WΈ9[\§‡<È<š3L4Aµë°53cÉ¥!!=…àv‚:ÿ“Ýg|u%»ëCðÕ÷ßß|ÂëÁÇͳG§°ÁS¯èçÜ¿jx…ÃÏÓ#“ó'!J;õÙ5bÇÄáImágcæÍ 7ïùÔJs§s=úq1!SŽŽ97¸LYc×óȱ{LB¤*éHà(‚ª1Ëó\›-ç4eX Â+þÝù†*Ôê&(DQYBH:“ÕT f}3/CPQú¥} Ñ èu »ƒ¡8BzâD‚ä h“q¢ÉË1<´Ú!2Ìá/ è/©’hÁÕšä“(UuaÉzcx{<Å1Ìjx=^¿‹ñËÊ[¬9›:øô5m|)aV¬¼>ø˜ÿ_Þu@<è ÛeÕôé: ùëîcõÇÍSA3ZÐÏâÿÍ™£“Ý)ÍþÂ+½9+Õ쬋¦žß­)ïUj=bò:Ü.'îý‹×S_ÎÒxݸ,ì»hˆsýÍýk/Y›÷q,d9žæZÛÉK­N ÇZ£ÉÛ>ð›cÖÇxcÅ¿x]÷Ft$r‡‘H9f{‚ai¯­°Ax×PSž7’Ęè**AJœ2 c“Ä ¥.X “q“Ôö&I7­ö݆vpû“‰vT£¢Ó¨¶3=P”LÝYeã1´çïWóÅ©Kû|Óx›×êñºXæ¯ ÅŸXnu¯ï0Ø”RÇå¼¢e È<xâà¼.sÒ%é¥A½´W®´Q¿Çrø³.s@ Î`¨¹\Õk¥]JÙW9W±1¦¿§æt–‹ÖF‹V[°Jݬ, ¦ôÓ*„ [¢†Ë4«&6ÿ¼$y_\®/Ù“µˆ™²A ÌR¥OH„i¸º²Ž;éç$I?ɦ\ÑDJ+0T£%½Ïb,¢œÚ<Ë© cêZ"”A™ˆâíúAµÓìg* ë#vìå¼ûÆ Ç«ÉÒ ¿”rÀ«ÑA<ÚÝi–¢Y›×£³Ò©Ãßa=o›3À%-ª)vöŽ´×°+fuQ <§í‚›·`ÇiªÀ°=5,ŸŠ­Za£ædòtÇôZž°^aF`LQ-^.ÒuÏÉMcrd¸B‚š—!¤ü%²ÖU¢†?„fˆ·èÊÊnx‘èñ´E’P"ø±Ñš(•«õ¸‰Z™Å~$ó:ÖTd¹û”ù ?ìÑٶó7À./ž›þŽç“×JÇ ùÃ&i\¸)ì& íë‹ûïΣú –¢ºCüé7O$Žï"ùhYHyàå‹.^á›8¤¦ÂVA´x°]ÿ7k¦©õM>÷Ö…»·G”>1KË)†¥è¥¨å5ôòUUg8îS/í°Eq{‘^«ÂìN`ª¾Úú†ChV &d3M-f3÷Ä¥¯kQì³ÑjÝ›ü\‰bÒldª„,Lâ(–>Ö¸r·˜@XùáQµ‰7§Þª]÷’(k•ç÷“nOžWâVîÝßï°YVp=d0T·}ó,“º•ÔZãà–F# ˨¸¸oæM›¶ëR_4÷·£ê¶[>ÁâßëС´¾ØZKí < [e¯Ðñ32.Ç1šwW”ˆÉg8¸d˜<õpÿ·G¨šTšÿë_‚ÙFñÞ¸Ä]" e ?BÅCpB*DM¤„HbÇ(—Àû‘HSmÊÃßDÔ$odzm`:e£&+/Èl²•bˆÖ•Yg…p¤ÿ )nù£Ê2ë~£¸ù*»UJûUÂ[jðׯVœg³fõÚ)«•ßU0Ù¨Ór^V¬ü?¾£@æÑ>5_-óML²7u«„´£åÿ.¡?è9uÒc'F¶Åh+Mɨ儎nEL…×Ý;ö&®ÔÞ‰ oÛ©§¥\înÿ›ÅpŒj‹íÈf})ZS—z3‘債$F1êpS÷Ç%žM‘Zɾ‡± m-&¨"Ufº¿¨Pô(jñ0’lz I h2Jv…? Ôì0C8¥ÏXüæMʃ—4 /¦ÒÅ pÓ DõO£\I!8Šk»¢™; Y’Ñ(Z† jøNœ;ƒnõ‰¸éL—i.S—V/ÙÒ‹’Äëp$Ä !†ê"È›h7ýÀ\¤q¨.Cfç{pHPˆÇ«ú¹q¨.âýÛ¦§ Øm³}Ñ*Á4}êŸçÔ˜ÔÖ{ÿÀŽ¥ºîš•ÚçvÌùïv(«í¼pÒD߉+úÉï{#æÇLœKdKâm¢h©ýWgPÞ W…pO1ÌÒ¢ˆø’ª.„,sÙÊD¤¼+Q­;Ñ„3eRÆd¤7üÒÇÇ$ÕÃKQFùðZú“2è…ñ¢ÕÂr1ÃäØõ–ÏÏ´HÞ) #€]ƒiÌ\SAU¬·æ91”V8GA"ˆA/œ,ÔÊõ@Þ¸Yssãk›æ}ü®ðð½óñ íñoÃPÝ¢¢¶éŸG‹ î?Λ¾i­<ã©.n#KPvžÿ¯üû7ï[yΜüWCÙ™¼7ë±Ç¶ÕŒ¨×ä>|sLlÜ¿]Y7J›ùd5—¬ŒÄ+Ÿ³qTn3, íô'Ú¬ëÆ@®6|±cȦ3dÿÊ’§1峪;¡Ø%mþ -ÕšÔ u6ô¸äŽ"è·¥ÓR'÷îÓ«ó±ÎøXò¿¼ëÀ5 ‰ej¥ i_Œ@¬Šl®„Å!BCe!ôÛdÁ´øÐyÁŠÁ+ð=8òß¾ââF‘Aiµïç LH씓ÃÒjÛ‡Ñ(û6ÎÊÒØüOi¿Ji•Ar)­2sÜbŸ–c×x¡ô:Àïo1ÀMè¶uð¯X,ú_Þäà´íè\P•˜è “ G“Á'­A§üü·nÙK¥%Bá±ààZyû¶Þ’£]º4µÄæNO™u©Êö¾þ+§Ì]Pn'éxµY ‚œÄÏöî«47/±´ôÏÏsùÊÖ¡C Eݪa™Zc[¦uÈ{°ç»š—ÙVÝxz¯Žæ2°›(ZM’8B’â¦-)ñ²kxVEú¯ŠJG©ÚÜÞþÞ‹¯ºr·äa™»OeÚ•SÙpI+ÔZ ð!l™JÇSC \N š¾3Üu;ò_UÈ<èE@AÁ±±n†šReJKÀ--¯Ðyyó¢£Åå唟©)UîÔðæjX’ŸÿÞ©S–P妖PÊ1:¦?¥zå ÊTÍ“9GÈwãN„†ü5rŸÞÔ4:4dæÉSÍòJ9FF÷¡4C¯T™ªy–r0ÇQT¢»7•4”s›Î@)Ç9¥zå ÊTM³FXffß7ü3³^<b_ÆÙ*’w¤a´î*¥èÍÄŠ%š-~û»ß¡W!óè•s5ó,²_Š[[6è" ÐL=\|.  Àí±ñ²ú³UgƒïQM='ó`2,ÎY5ÑWÒ¢2¨²„¡Ë4˜Gñš:Á>»gò–¨†À$ù&•÷Xuç%Çqç ËzÓ¤7ñB¬*÷ÒZ²I¥"]SR¼rrS½Œê|‚@–ÿ¾[»'Lû/ŠGn&–™úè8#æˆá%40pYüeÃ,:þòc÷±FEmkcÊ»­ñXÍ;;ôÝ%Mzmšl¸Ã†n|•Ÿ—ZGŠ÷séÛÛ‡uú¢í ¾ùW¤Ô6JüDć?´¤8î¾Ï®òôùÖ¡Ý»§Çݽn@úü׺»?–¨ä&Ì`N-è?Y_ã|v‡#qÚqê_vlޣ㪩h]S! M\×—*7kJOeåД”ÇL øÍÒò‘sÒ2VÊc—š…ûôñÖ•ËbÛ†ûøénµ¬PKUñ 3‘”x>™i~&+*îÚC=²Ò7,˜ßAØ}¾…¼íñ,_‹Æ¥S¶iR«]gtmÁ-DRÚÛáë›>FºŽû5ØVU]gïU7ñùËõ¨­Ô ·x³L±Ñøfsªõˆ(Áû…ÕË¿™9o޼éÚ»´©œ=7¿í­H9rðëT’gg{²[·TÙÉ0d(âB“ÍCo Æ9þ*-”÷Bn,_æ½g/‚dH}¼Ó'¾YB`È‹µI¨†Ëä»_q]dþˆüã…Bì ¤±£‹|«‡Í*îð“ÞQYuΒɯ™vF’Þa“w$²Îך5róÓýý6Œ HÙNv쀦ÜÁ T'ö…0©<¡qž#'*‘-–S':ë*£œã:â‚‹•QÆòåd](È¿Ù7l!‚ J=|öÔ×’²{6¶~aC–øø…7mêÆí¢íDŒs£*#¢Ü|ö¸ž\D¨¸tíX(LÞugê‚UÔœòúúËñ—ΗŸ6è´s¥cßsyƒí†:vwRôQÙ,)—X—ú5O‹®ñYǬÀ]½ï¼ óÈ¢´¤‰qäò‰Aý¨ŽQS1ë·¤[ºz‹Å}¦Ôžk‹,Ù©¢bK}Pµh\ºƒ}U•û†šmC‡>çÖy‰]¦5ö²ÖØyá´í¸ë&¦>ò㯿ÞhÅ$/4„ú y#.­ýÁ°–R¤fÒ‰ÿ[ÞìO¢7k›~µ V#ÁOyF£L HŠgÄžÅ22ðaxxÂã5›'jS`Ó¯Ý'Š‘‰HS娳ý7§íÕõñF}žeðçË{?ÖÙó¤>_k{öpXõ½åßG«FFš˜šê;dÂa•Õú;{Ö|z6÷Ò$ìÍwwœUhwÇϘñ·+Ýr)å TäEýVWvQ÷ güÁXY–hËì: ÙÝFçØZíÌèè?zuû|`ƒßà¡éé3Nž\9a‚1]Ýñ£†ÇÃ#‡ãÈð—ûõ‘¿æÉë+~ÝÑ´²ßÀOXñ¢M\nîºÄ,°8|DéåÅËÈd•–æ®ý!ÄÛ'Ä»ÏĂӒ“[;l­T¬f3êõ#c.©ŠòÂ73áõ¥ÿw©nÌ Öå Â@.÷ÍϯâóÓÜ;†ä23Y™ˆÇ Ÿn÷î5çâ€Ñ5~½>ópóì÷ê­)||Òà_½ÆÉË«ëÞÊEÎƒ× r0N¤]õ9yêÖ%ÓãVމ¼õùÚ¾ïÌ p6çýËöIMÍÖ3¶=ƒF™*7( CÉdEVºHz«½óß!¸ï"ÂYTµFîxÐÖPšA)GAþÍ]þÁáÈôÖ_Ó¢kB—ø‰Wx¿ßû½ïÑõ7T ïé?*pâôŽ~(Š`J¥NxòóU®®M…ç¡t¨Î]IKõê¸Ú‰jÔ¹ ƒ‰G¹@àŸ§±†±0S¹ÏY«¬×$~Ž••NN ü‡ô£¥”ã©W#+Ø ×9ÌW‡ýßå“{™[©šy fÈï–Ã{þ…ÚÉQééÉ¿tÙá»Õ¹kÿ§ðõ}ôcmíÞŒÚ[×B/=¨8óÛí5Ó»ôoó¢é..£¯\ MO¿áãÓ¿Âÿ€Ûß¾W0‹ººôÿÆ#…@<hkB–<öÜ­ÞC¼{#ßåËó&,Ÿ•?sÂÄÑã'/C®ƒ[þ}TüáÂôÃåú ãz.Oœhå P3™[‡yòdè½{%VVEƒ4µäÕ­C"Ÿqµω;Ùç±iYäp®1žm-p1q9¥œøM¼û.—ÂÎN»]©{y|ÕÈHÿêµþ=%$›Ïý–tK]½òÒºõLÇû­ÿÈÂ"‘hå„ çªÍÌB%K†›&Z;>uΚœ›Ó®™ÍõãMŸ ™tSP0ßýBŸÞ^û~â¤÷kç9AáãÍÉ{úÍðº,dšèÉŒ$/£c›= Ê3î<[ÅF3Λ֯kÞ¯j¥óþªš>£/ûÀE£y dЕ‹ 7#ƒÃ`ÿòÉñžãšcsÿ˜]“uGåêÚ.ì¨ò­Þ.B6FªÊWïLv3pŠP•Qgù€÷ɇ+>r­ïËîÏl¼=-º¦6^ÝìÚ»a1Ñš8Êí+øwrªÝÜȆ×Í«%o–_¼¹ÛâÏó^|ä•Q#Úÿ5shÄ“7†r8Ûê{Ìc¾3êTÙ‹¦¤5¾ÃuOIJYÂ@V°i—|Tû]·Š‹“‹ññàŠ£×Ì}ð7eîЯ’Þ]j Êâýò'n0›ºmï½ó“Ùr¡jΧ³“¯U9Es^î‰X­k­k¬c¬Q›Að;L ´DlëÍ]·ÍbÎPòÈ6¿7QÖ{¨ íd —:s³›×e›ÿÊB¾MDà‚9í –Å'k/ºœübÞv¿ƒ&iÑ5ô´Ó£Æ£’OˆhŒ; ´(µðü\´Ðôñ]þühÚß6KôÔ×Z×Ó’`¤˜*׫VB@<hÔÆ«%+ðþƒý¿ó[}?hãªiñºgdÑ6Á¶¯·Ç$ºÜ7\HÖWÆíÎ=<'Ä ­ Y"Ò_!t™-~ë¼ÿ÷õ“ÿḾ³ÿ•éóð9%$jr•ᶞ鹕a•´âÓKœë3Ýã©ÂÙíÙÕr¥Èì*»¾BgÒôuè¤(—.ã<<"é`MâBKH­/Ìಂ .M‘VØýË9'9MöØ“²–æ¬Íö‚sç1•ªÙQcxii3(%¬Dµ9‚=¼9“~d=ŸÔº’µlÌ´úÙí‹Å¯²"VJ+SAò¦ #÷[Jf0^B9h¾çb-ØtÌÝc‘©©Õ’’øËºƒjjØüÃÕ5–P²A¨tïj¥¦Ì?8¬Ý;Ä©)—q‘UYçeèÞêDM¥¶ÿ|ÎD© ýðÿf©†£L_ðQöÖ-es߸PŸ¸$šå~$&EOOaR·lx¸ƒÔpI–â²þU ¦/PÚF%º~`§îì˜Í6\wæÊ¸öܱ¥;ÿHM½ü öü;§ú®½K©5u×Ðãyy±gÏͧ Ô4ûþQC™A“¸ÐÇ”‘qŽë6}Îq”™f(3Tš»2ùn]§)ß­Ô$B\–å®Þwt½­÷¡¨ìçç_¹ªqp?êk!Ëla¼®¯ôðvR—yFB–õ qaT¿h_™£"/5ÍÊúû¥×ȹ¤á ‡›-LgW½~ÐÏmáœÈ°+Ùˆae£)ÙÙGé`MâBK (MQj .M±ø²ñ u+(PøxSø«;­¸+?Xq¿Ñ=Ú¤ááíÚÚ㥒Ìõ¦çz¦c6jr‚¡·!DU y޲”¨ö9ïLÙÐã–Ó™šêÏV馛-K/JiÏmañ 4ŠëIå4ñx^~,Ì I\èc •ÐÁ •&âÒsËò뺆‡·S…@K1ŠQ[OnF„—ž¡{x;K´¢ÿüyÚ,Ý/qDÃð"wÝÙ*•;ÝCMëf>ÊW‘uÏÍ?^q]Ø.Ý"ñ—ñ)ýµ)Иö\ª @û£éÃÛ§F̈öŒV.ßÁ*-¥êŸý#Ò‘x¢6Û™â3h}®lÕ§*2IÝßîVÝ1ÖÀ³­h4}x»£—×,žéVÎÆ…ŸüöèUçô¢~´öÑy‘÷Âszµ¡ å·{"ÝŒ2yÐ.Ñ?¼½bò$½Ý›ó÷÷`fþI»wF%W&Aæ@³üãáÃÛQ—“½«ó®Ow/F'3èca¦,ÓX™ÆÀxÇ×{E×l®Aò¼'œYìj‘bX«rj²Õáy` ذmü± OFÎü¯Ö!®2"~”ù)ûNù…>‹M á–%L>×YFÈœ‚· Í⢭mU™¼LÃ4ÎëB怑ðFÀØã¯dç!še7ÂÞ‰‹¸ñÅÛkBy¡g®xP8^Ïí4æ³ÙÓ·ˆËÆ^/å´¾I.|×BëBúÒÓ¢W'ëÆk…âᱞÙéÞÅŠâ¦á™)¨®¯uSX^ñ±­e›äûøÉ‹²lµ­n’‡¹gMQzN[`$°1vgeûåqWûiÞºî%º´¾30쎎ïW¨»ˆn–Ï­ê™!Éðç[f¤ºÖ üÖšå`êP.(7JoC怑]Óûî×FßÜT|tص Þú‘_nè‚ 8“l‹#ÃêLXgòö_+7í/áÕ20²õM²áÙVñ« ó /µñjçÑA÷xë$Rëwt(Â/sKïܹ,%M„w)c r‡Ð ÓC©9MrO,)·«lý1½V<«³,ú²D„ "þ 3z{ĵ’¤m±(Å;1ÙÞTÜD'pÓŠŒ±Š‹Cú”·¾xP™G¥y%ˆÝñ1ó-4Ã“Ì &îŠuT3dv¾‡†–Q:¡¾ÿþæ^ԫĮ÷ùµÁ%Dĵ’™É@<Úxœá¦tŠø¶Óãod»ÿ8o^cɵ’šIÒÏpÁ£Â™ëŒ°èrڌŗsä tÇ–c‡°ªib 7ö‚Õ0þ>†( 4ÅüÂÅÐ…_‹ësþùg‡Ü\ZâTQ¡Ë<¶íV²ÔÌŸ6ð:wÁê » ‹rœ¿àþλv‰µ<ÒU"yûØ1Cé[«­+< b²T1Ñš¥K8¯½aLùˆF‚ÝÏ¿PSŽQ> 4ôÆ ƒX⛟_ÅçëŒapÕ,5UÐNžH8;3bη™¹™Xfê£ÑÎ1GX·)0pYüeÃ,:þ²]Ó¯aÖÊ ?–þØtétˆ }Ì  TÃéДÀdb‹­RͤWi&¡ÉËèhÀ¥wÌÊ£¦f*„?¨q¬‘‡‡ÿÔö–xù#ÈAÖ^¸Ô!É I&ªm¸Õ dñ?‰’$Õ´Áu‡\J<4V¸VQæÔ'áÛigú“ö%ÝÕBæ@'â*¯¾éÒðd{ÔôþH§ÊîxqÃ}ª¢æÃu³®¬«µ¾=|¶¹œàxYÛv ¶±á ÖÁþ~1i…Z¤Sûïz!óÀHÈ—ç+p…7ß§!»¨­Íš«ÍI"‰˜ aè+°‰‚™Úœñ™‚™K[ß$wswj塨uKR®Rܾ•šffëjíy`$œ“œégÝEÐ&GÇBjÁ4—¡Õ»Õøã*‚ð™€i.E¥B²uMr3w¿† =†õ Ú~Âí°œmå¶tJ€ˆ}8^rìïôå8ŒïNÔY!ŒbLXMÖ t"¡‘ì{ljÐÔaæU¤ÊŒlu“:Zê^­È0uZöî´eÆåmŒ|y^±²¸»eýWw’w†i[‰ ¦dM/Bf¡«Su!d§1ç­L„Aʃ ©Uë[ D4£t8ˆÆÀ¾‚½Q£0ôÁu\Rò†VÒl.Y5¯jK«ŒX–Z_:˜ÁeA\šR^ü’É€’P):ôºó-e‰§çÈWÝÆ²\¨©ÇRÿ5nwîá9‰Æ´ç¶°xäfÒbøVi!]žìêN3húXBât0ƒÃò‡¸4¥R"|¹*<( r1qi)KÄâˆWl!Ç=Y¯¦³«ìú iÏÅZ°é˜#,ª@M ¨–”lÄ_Ö=™š6ÿpu °Ž*PS÷H†œq¡%”lªáTš0ÿà°:Lt·#PS.+âRYf‘–¨StjZ^òbù‡šPo¾¿ñm¹W–ß=ú謳ØÕ"!ä%d#<ü'ª@M_%ÿ(v¸£ûovÕ ÔÙlÙ}¢Ø˜öܱ¥¡ ÔÔË7ÔzÚ9Õwí]J¨©£¸Ö€ÏË‹={n>U ¦Ù÷Ê šÄ…>– ŒlŒs\·ésŽ£LƒŒViîÊ仩5Uj!.V¶Õ¾ÙTšZÛW¾Ðo÷ìñ5÷ë$è, á ?!ôúA)GdtïZ[É ÷•¹1±±ïQjš•õ÷K¯Q‘™îÅÊ×]p—Ì`¼r´‹=·…s"îd#†•¦dg¥ƒ4‰ },1 l4E©I€¸4ÅÚ¡òER¥®Ú˜ýóÇ>‹¨r‡HKé*ŒÒªL)ÇÑ¡—µy/gɫȆîà€¡’±dº¾h') Dl¶áúóWÆ´ç¶°xPE‡õ¤òšxÚ%Uꪥw?ÿ_ÀZS¦©'6ÞÈJù»rÙa¯êU˜·sÈQìû†3WÈ«ä/MYAgNgx|l­¯ÑéÇD£ò?d´?’ø(iþÇqÁ!I%Õ£÷\J¯¨™€:KWa#u·VPšqtèe~™MÛÛ&eKU˜jॺÃs;£=@‡Ì€öÇêŒï˜(ó-×y+/Ü=‘QüyÿŽC¼ì‘LJÄSúQmˆ´#Ç<Ç«ÚË+Í˸C™팭9[®T\~C´4j÷¥•æØäþ:å  ÷Íï‡ß ÏòÍ2î(@æ@{bá_¿çîÒ,_y.ç«zºXÓÊ<SQÅ©qnÄñ׎ƒxÐ/ýúç»J\mí¿½ïëï: ˜HÚµ;éþèw`ÕK+”©jҔǎrã2CQcw¦P˜\¾ÂÎÍS»‰ë{÷"¹Ü½ù»Êø)˜kën·r’/Å ›ÍÙæÙA9Ayžy ˆmWºUÊ’±ùÕè=+Orþáíxy@¿…¿Ìñʘÿat² ó¶œÏ!ó$µk³åÞLÝŒú¬3'õžã;ïjœUÞ^¦.Z¯øfÞW!»ê/ÙT´jHX€½=ÍÎ0ÏXptÁ.wŒ~sñºpó-ÝC·->ØŽ‹ñùZ&ÂD63щÚßͤÀDWð¶âˆŠ[“j„Ëa‡»šM§êIujüõÇï^”f"—·G‡}áoÂ|j僥á9q'û!6-‹Î}âç£B—Ý^iòÙ&¬P[+ô]ßï¥nþ»WF`WckÞe³Ó=¤ŸJƒ ^t-µ™÷ÒþïJÞ:ÒTh=©_àûn†ºlÊÏ7o4βÿ}Šÿ„wÞ­˜ÿ~͘QT…W¼ðõº´#“½}oPƒ¦²YÍ©–crKÄ2Ç$Ä€¶B?è­5ºçz²<Ö¾6çÃÄ*eëÀìV7’Ì•(ÊÌ·|…]ØdqUý÷ë»Ù"CÔå;îó?~wÆžžteÌÞ+—DôEžVÉÑ5S“ssÚ5³¹~šÝp³Ÿÿ¾óÝ gûS7†m¿ý©ï™E‹ï}´k1ÎÕ¢Û&r~²ÖÄi­‘—;k¦‘í/æ½=~ðVS";3uÎéÔž3‚º±mÿ`„~õ²â.̺ô¸vYãè¨WŽK%Éï'¼Ç帥œ @Ü•u ú&\Ù¦ÙÃ↥¥þ¶V  &]OïÙ‰)+ìŽýüΕx×/‡_+¯Ýx_ìÖ¨H‘¤v]ëíf]X”ŽúÔÄ”êÇ9Žß½æ¨›W² ž)WÀ öï§URÿÒŒyUMŸÑ—}àâƒ'5û¹EÏ’¯{Øhsq”A°9ˆHDR]…:›ùC2ñS²6Èòåבeµx î¡¹$¡¡.eÞT ´Ò?R‰ˆa–‚£ù*__œÀ·Þ²™µ%ÌjÖêsL¿ÑæäÒ6z$Bf˜gDVD–Ø”€xÐÆ ׺xÐ ÙéKmd®}™JB<È9rJk~(Ã&û›uÁÔ+oÔèîØš¸ëû_eîÐÅ'.êvk»/?À|z%©*_½3ÙqLäaÝWudpã’›ÍY”+{^÷UüùëïïÙvå«a²7‹Í¿FòFÞ@Â5{viú¼”Š4ž¤bX|øFw¿&×¼ëJòN3·X3Ôb×{‰Çgý9RTcu°ß!Ý‹:8iiòž=è0¶V듟o-“÷À*ì¤bédKñº´ïrþÐÐjVeÆþh¾°«”‰§JE,Žuƒ6—ÊVÕ1¦ûóCÙº.kq¨ˆ ˆÔ]jÒ_ÿþ ®8zÍ\­ªö¹˜é{’£>ìâÍx¢r¾ï½ç‚íòä`*If-þH<šÿ<Ò›T!µyŒï§¬8RÕcTá¤]’QJ‰IÐNåô×)œ™kð”ÿ#8/ÑÝêNRáE\üí…§r"Þðtxî,.±ÜªSOk²æSüüÙ¾w?Oþù }/%8pYRRß»'­BæTQ13:ºÒܼÄÒò–mÖÂóÌRqA¡‰Ä€¶#ßêNÏ6Z(˜µâî_„‡ü(°ÒâWÿâÓð׉_Ì›ˆxŽzgÞ]Íœ$ìÍÂô©Ii“ž29ü°Þ|.§ß×4ˆG³Ê:Ë7Ë/ÞÜmñçƒ?^|ä•Q#¸Oý9ŠðÅø¼wÉ ;Ã{Nð¿uBââ49˜ä£ää™ä×;P%•¼äÊ2X¼žb÷¤Â­§»N¢^²½stýmXôް”°Þ¿ûŸÿ\›1EåãÍIK§”£øçõ$—K«œƒRŽèÐÐ>>õd}†¨ˆÉ ™qòäÊ 4LãïZA<€.TF¼}4âm}¹3‚l×ýßëúž^×›Ì3†úšE„Bj "½!5±£ŽÜUÅËcjGöóèÀV\¹œ|Ï\ìÆzZ¥¹.½xtžê«¤w—6(G³99Òž_îÂ>K˜HÖ£öáWn&ݵìJôÝÅÜOÌrAwnEmz‘/Ñ“kªÖ^—Gt±÷f©n&åd™Ú95tBuÚÚ ?%9œÓë÷ŠžŸù |4wÄ1ÓËWÙ99òž=©œƒVÊAᛟ_ÅçSÊA•s˜9ýÒûÅu²ÉNñ-(Hqsñ€f`Ì®œº_“k pThÆyÓçˆR‡Á¢‘©os排a/öY95@—v`O«|úQôãs¾5@phÛ{VÃ(¶]ay*×zÕÔŒÕÄø1¼J÷š½ó_æœÓ<Â<ï³í‰éjÌÆÞéÓanˆâþªÂ?ðÎ øí¯mïù°°õóRjQFÛ8ˆd²"+ÝÃJ¦òºÛÍ™w§SeªÆZúŸ¸ìâíTlÃ_aÃô]÷Ô+üz¯ðÇg|Ze#\qô7âgÍIÎýM9÷7ª Dõ~3@s._óJ¶3;t:Ò9HI(O—žú+ëÛ5õ¹££ß³Ó±Ö‰»Ãuh7·>– þyº/ž±¹cZ€4Hžcee†“ˆ­ŽSBb烑‘ÞíËì[¨;˜½ÅfÞC;ú_å—–ÕÚÙwꈳÙF°² \q¹âÒùòsgÊb„S\§õ¹Þ_¨aÍâ²gsÚדZÓ]\F_¹â‘—Rî—2.sUÓ--Í¢®.ÝÙÄ€ÖVŽ„°ÕÿÓ—kK?Yý)¥"Ixh¯ JoÞÇŠkéÿ·w&pQé߯î¹g`€áœáoAAD ¢ñBŒ“¬ šh®Ý7‰›dcÖlò7Ù¨Ùè£fcÔxÄã…šxxàÅ¡rç È sÝo ‡ñBfçk}úSS”ÝÕOUׯŸêê.‰Ÿ_Vvôw[Oüý eÀŸ,Ç4™¼¯ìf]£Â¬cwÛƒétŒCGÈ¢¢;çìläùñº£Gk\V]êï2 Ásôk¡¯{›}Œïë©+o“Ù—Ñ=*ŒìdøTµuŸG’R¢ÈuÏ\༜qη¾+Çúñã{ÂÓrÛÙ—’…¹7«íÐn–ÝË4pàÂKiö9ô¥4ïö?G'¬´—VÉWµ?º#Ô‹ãC'9®\øº8ÜàŸßˆ£wKЧ¾ëö1 ž½y³Šž_VñXJËŸ¤Ç·ô^tñè«Ó¼FônI©>WbÎUõO` ùôIWP…ç-‡ø¯Î¿0{ö +«·›olðsª½‚š:ÌéwlïHåV§Š<4"ÿé…Šè{3N~fHKÄŠÌÅæËæôk¦sæsƒ²1a”äo¯ºã.ÕJÊÒT¼½a°Kãb m!Qf'·1cV?¤¶×6´g-/ûþï™Wœ¿Ý(["¬Wù† ÁæE´åüBþÅ}\2é*ëôÝ2è+›ã½b¶{¿°ì£%s_{ÅþEÅËÛ ÉÑcóìf…tãèXE¡^¤y´”ÄÍët'Ý£ûÞ•J1üÄÉ·ðøãeY­'µú_¢´«µo‰ÐYƒY˜~E£¬]ÜàÑ`eZ‰žE®®ßU¾‚’VÒ‰©ÃM89ó£OvÇÆ ^=päè<9$ŸÿQÂþQ Ư™Zð‹ERÁ¬”&ˆÿíñc3?üô—˜˜ ½{Û^…¾MÎçS‰þ¦´”ǵðB좤¯““sïxVÂÒÀn”FM;[¼RÅR]g_ÇÁÍìækðõ1úL2$¸÷›¸'ö@ò¹Ëþ‹È2É”qËrz≚àt±ó[Hüðeî>gn+´j¿» eø¿çkL š>HÕb´[4PŽîã’yWÙøxaØ ì‰Â]ä/WàHb>*çÈLo ù"ÃY“¤Ï–lªÖT‹jh« ×ì~m†ÚU=?°ôñr‚3<ËmÓ3;"õy¾ü´¾A të׿±6Ä俆YO¥N ±f‹ÎO¸Ø;uBZ¤ñ´ÒÙ¹Y9P9Ý3©5ƒ™4—}ö\˜;EP¢Ì¤S§gêõ ½¡×áS§f©q¢Ð$ ×k(†«EŸ¦>^F/ÝîV׿ +Ç„=±—úËF]Qx«ÎO=iàºoÅi¯+sUjKÖÁ{fÓñ{r0vØ‹»vሆŽjÐ~ú˜ö݇û k}?ýéúâéOc'ÃÔ@U°4U¬ÆpÅÑ£¡ çü‹Œ†K¡»Í óqNÝÊf-{ë†Ê ÆHcËWGâM%B©+·ý\tc\ͶDëªö‡¾mΖ®BÎì¤Ô5°vÙ–¥ˆâ ЬNÈ⌬®È,A²‘ÇE*D¦w|ª>¨jhÅ['B¯„×ä&Ÿ@Ý{5Ëå‚­ûf?Ý´h±¸g6]°'¹ÁAëžxâñsçȺþ—e?Ž’æ²$fkVÙðì‚SR›&CLÂg2*Çœ§8Ô ˆ?SðXzøþ¤³‘¦ã#22¿zrú¨‘ŸÙ†­šyí—_Ž”ÏÙÞóˆ0••õÅÔ©íýÇœ¡Ü§üUíóȼ¼–?ýôNBÝPâè•i§ß¹m®r¿ ç¥{Ë•ž[á‡}‘î[k”¾a­>“æèß™Öc›.ˆØ_?phŽº¶¤˜Y¬SÇÏNý±ïÏÂwŸºë®š¦Ñ¯cåÀšÝ‘ýâúægædõÉèÜ<4²uWCóòÜ4š"2ëÖ ‹¤"U|½ù™‡ù‰¦´!ùù7F®þ4çìÔ¿û£·Û—í@LLçœ$VŽæg¶ñ+/åx÷¬1ºPV,sßî£z-Æ×­Ç¶[pDªÅâÿ¦¤„——‹UªBÿ^FX‹rØî|±~$!'¹ïÆÉI³SSQõ²Þ÷úu¬&Nä–û´èmx«Â„4çZ NŸ³L^^µ»ûírnJ’Få¿_¿Õ[©”‹DX9rïâiùÝàTãqS-šŸ8Õˆ5ÝT<(Ã'Ê­lë°Ãb‰ÜDA<ÀA13™9ÁÁ7Éø]&­Pã€l3ÍylÉ¥Ré5©Ôö’Çï&0aUPá€<þ3sf¯Š O•ªƒœé”ŽžîôsÑÄdýî·•¦Û[nºÔä\ã.›5Ú_Ô“Û'ˆt{‘™|´éðÝ伄zÀ7û–Æå˼ÔsÇ÷ög=Ùñè^_°4¢Ë>ÊO”×ùòèáÖñ¸W?Ó–1l«ýImU›ãgê| ?׃xÁÀÐm,ß\±ùožÿÒ#¦¬õædôp›À3€;à2Rû¦ëü·7.( þ}4°ò]p"·‡ÛÄ #Œ”á½ÒÎL‹`ÅíœyF98Ñ ÌÃV·…FôÊ?‘°$Sÿ“x†Ÿ3IÝw·°äˆ,žÀmYSýeµ¶zõâ5‚2vÁM!“¸%Ãu’ù%¨§\xü9›äÓkÏ­]²VãŒ*ÿÝ<ƦX3°rè2­(<à÷l¯Ûökùþ K7ðÞ°ã(º9½Êæs$ötû€xÜÊ®šÛJ\·e=¥³Õƒ€xÀ­ôßü1ÛA9‡V×·L¢¡u‚ßÖ†¬Ù媰X%1Õo.(‹ó ÁR=†-›÷W¥®¹ðµë 7š 5ÿçtòl«öˡۑª2g±oHÈdG(†ƒÔ‹ã”D¯ ¼Ï>›vòÐ' íç^êó½3½*þ·/íøÞ¬¹.ž‹þçòpÞ&Jrz uŒ†0±‹È0ÜOžòÛúƒèTi4ÒˆþòÂÇŠ¬–osŸ/¦¹p½Ü¶$,e…1÷W^)p‹øq„b8H½8NI Z¿ŽþÌ\üÏ¿¨üÉ ˜,ÊÕÓòp.a©t´£4Ô‡h¨IB§î®–•½ºóüˆÎÚ™û_™ñ–U¼…ƒžMñÙþ3§Vá»m{Ÿ”ç–ퟵæÊj¿ÿ ƒë¥ã’0;q×-Òth7+0Œ ‹´ÚK6ZÜŽKiÞÞ­_`“¯Æ`ÛÝÜè„•2Ùáâ’½öªrG¨Ç)‰A+ÑkpD¥ÎTÞ6ŸæTÿ± lÃYì¾eëÞÔ°;¹þÒÄ  I82jägåGJK÷Ù±¡¶¸‰£W–á†ZlŸ†Še£Å툾¬²òX™l'ìÔÒ´æRCÈÐË}™ ÕåóÎW$ø…F1oú Þ+qní„ñ¶öШZxúÕ EƧñi§A8¥¾fÏ©Šï\W¤ÓÄï¼÷±SÌv”G,8`刊—ÛW¨±`à€•ãè±yöpŒzqœ’`ÁÀ+‡›×éŽò9È>{ŠÐÉ]·~Ô{ÑŽëëžÕ±:³X0pÀÊqâä[ŽÐP±rÜXÈÖ.`ÁÀ+GG ÙÞ+$ÓK6¶åÒq`ó¸ÂvwÏ®éçÞÞ-ÊQTP¸ úÝ$ãäe.W‡VŽ0`åp÷9 ×K%éäæv”ÇöØÑá¸{ÝÇ9f½8NIxN²»ÈEÐ|ÕŒ'u;p,-””¦:H½9FC-+Ûß™»#ùÏóxã`Ö8 Ç^ÖN<¸•UÚÐPYZðñ†Íÿ$æšš +SóÊmë*ÚËáèFWn'‹(G8Oì|8ˆÅe凡R/ŽS’ެ0ºÌÀMòú§´\•ËÏÛà œró·SâæÝ’IEHKMÖ#×ã´S9"¸HC(ÔWª¨8ê( Uæ µ²êXgîŽ2ürA!ØgO[Q\üÏtEÂXi›~¤âbÚ_2ÞT˜«þ´"^l[Ý]PTÔÕ|{Q×KÇ%©º@O§mª.rß:aWVï™þÔ"–eê7¡dÑSºº¤¬YBÚÍñ#ØY4ÕŸ¨J&í¾‡vñ#T^`ë.Æj¸¨á$ ܘÈ5ÐS’S[a½){z1¿HΖVF|9n³Û6­Êsß~¶¢¶aè°ÜÝâôt²Ï¦ý!MÐ4ýýKÓ߀½F­ßÎóCZâëÁÐ]ƒÊ2ì“i£‚9 Y]K nž5§µj—”¬Jk<õ ={ݦCÆßæëB‚EÅX9ò?YLq8`9°74© ›P£'˜¢ë!ùÏÆx}t6/éÅâ»ÌæJ"¬‹K—šÕ†|“í—1<Åõü^yECt4ö9@9@<À”ƒ¨G{ S¡çƒ5ìÐÓoù”ÖwzªŒ• Š¿Èl,tk˜³|èD_'›N`µPŽˆCxÀÝ":s&`Ý·h4ç%Ù‹/(ãâ:ßç@â]´5T†"øÄ…=i´4n¯;¢<ÂjÇžóî¨P–2z”ÅÃܘñÂw‡-ãßø1„Óqb§!öðiÞk\}ÉŽÖ$cÉëkRCoä`…~ùâÄkì®8ÿ×W®j>®$=fåÍTJE®øì%?“Jüc”±áÕšñ=ã~úLŸÌo‰;çåõ}{þÕåK;U?È*Ús7²Œ!ëûT9¿^Íó„ “¨êàŽ;7û¯SÚ›ß7¯L»Òv­‘ºò¤}¿©Ñk|¢6'Ååóˆ»QQ-ÜoÑȉhšÄPK‰®3‡žÒï¬Ûñ}í÷}ØñDé‚”ˆðiá]?qÁ¤<7ãËÝæé ÷Gpq%ì]¿`zIëŸF=÷É¡ˆî¹,ˆÃŠmªXššá78D{§ÄΤîz Rÿ*ôÍÍ$Nðêyo4ǬÞé?ü­¡ŸŒÝE&°_Ãßf¶K³Ÿå¬›WYŠ€ûÃý†[R°r¿âqcª.ª¤Ú&ìrÏ ŽqöQ‚æwÇãydWÔ—vUÒ¬.wJìÜìßhn~Û7?SșÃE‰ “Å’´Ÿgž\<ÆÏxç}±/XMdí_I«š¢8Ï0ŒõrJPÍ(á&kwÔý¼½î§ÞºÁϤ}òK(½dxh?®_>–6–~ôÓYi\„æfýóF=÷ÝU3]µÈÛâ'»s¨Aæþ¤I€>©ãš¹J†ÑûaSPZ\pìݬ_âÝãÞªý,î㈕O—­ç+ⲺÞfTÃ;·ç™ó9cǼGlìÒŃ «ÏíÜí<ªÓZ³Ok¿™unçº[»nMö@F¯5b»ZÌPJV;¡íɼäó„dŒùûïÌ#@Eî]` s^ŽD•£“aèpot0•§' V ŽâE–øJÀJèõb#§X`›îjˆ´¦\§»zƒòB¬+ÛŸÀž¿ŸFÉi®æV_v¹\T6T;ýË%ëÃ÷ºüðBõ[)þLÒ>~úñ-_¸LKr­<¤±Ho¤Ol]À¦ß-ìÅqO/êçÞ-}ÇJnÒïUÄïHp!LYª …¿¾£èÿõï»ÔÒ‡eÊšú>©°ó’)d¨Eƒ¶þçO¬›Å™»Âzåc æÞ;²_èû¶í™‡Àˆ&\µ…«Ÿ-* ì•¡»|±ñâwE[ˆbbˆvH”(zPŸÁ®7°ØƒøËCš½Ï/íCDç÷âÒPàT%Ì2‘¦¨ú¨ÙçgÇšŸ#ôU½·1÷OUçM×Ûô,zó_BÝãåú&S«xp'Ï]nÂײE›ŸhÖÎoWû¼ùŽ£ûի㉇é‚ÑTS¼/nEÛgF –Mâõ—2²¯Tdÿ>ñ!]Õo’º²Qr×S .vþÐ Ë“bM‰¦ :e.½x“íE4{GwuùÒ€õù¥¥º  ÙÜ”Ãb]JðNL@‰ˆF•×*/5]8*?ºœú¯›É­Õ7Â3²oPß ^0Ù¼AÎ = .¹ÙB*¤Nr±zÈåGÙj$¯ŽcôÖZ—ÁÐ*lWÍÝ òq õ –÷¦Êcmt¹ õ`™Íá2™‡ª¡Î͵00ÐÌü“žŠ"¨R^i®s®Œ'‹¨˜sdNâ™DZPï[¯–ª]›ˆËÏ4Äïv/¢³­ÛõXrñ&o[ÄÿmkM¸º`l»Çã$SÙgÌÛg.~_oñèœá¡ÉN®Î}í•fçî×m«¿‰zÝ&!ï×´y|7»ì~ß­0ÛÛ3êªÀÞO¨y½-#ëY[.Q/ù[ÖžÃi.î[?nû„œ@’Þ¦ ©È@Ë2eù²¼«WvVíPˆ½¬½û¹÷s2r©µø1)%­ÀÊ11uØþ¤³¸É˜nY¾Æg3eçFˆ%™¹|ß±ò»ï?h¤G‚cVŽ˜Ùàz§¼¾µµ³vïQº¸È=Ü{•–N>~|Krrµgë{–VŠբœY~MxͯÞoòÁÉ_|\箫“ÔŸp^å©¢+}'ìñ([¨‹Lä—ô×I>æ— {èkÞ,^ajvŽö®ÿ÷ª¸ß?$§Œ%E'VÉ…“E¬îÙ iOÛT]Ä ö™‚«{µ¿m’¢U5䊦p¤TÓµÚÑ6U…Î$ÐÌ–Y¹NÔ¢eÔŒi¼·ä(8ÉüÃ<³zøw3D@l ãТ–0\Ôå–æärÎX÷ÁR·F7‘F:LkùrÖ5wZ`¹çUÈð-v¯òr††:Wׂ€€?½Å¾nÌÊEUdpÛÜÜ?Mì›SuQØ×«Ú&첋‡ÎÜwð£5­ÏàÍ“îfª•í–ç'³»íCµÈN^ŸLXÉ;+Ç¡¸¸K}"[R¢rrSöì]ôÂS5HUÂ+ÉóÌ « ‹Ï‹ŸS?‡X38Ø~N5׿‰û%*pkV]¦û“ŽÂÍ©ºla`JÒì¿wG·ÃáŃ3þ©Œ¿«ÄNÂ6U·KiÞWZ–â`¸ÿš2·ëϾmаm9©›_Ò÷H0+7#ÀО4g"oŠDG“¤áp@éùÕÅÛc.•J®™¹Õ¸[=Ý>&‘¯ÑÝÝä΢:º«ô«­›šª ñ-vïÒ²)'NnJJªò?@[fåÞMbÇ—^óTÝ?úàüÀ]3^ÞuoûÒ?ͪ¼ûܽÊd*¡°E9(+ÕhhÜJ-Ž2”‹6÷+UõdÞ“:O.BW‚þü¤41YcŸCHÑòÓæsØ]9¸“ç.™|3ÞâŽtwGz¸gDõ¢ ó ½v„—û¢/ÖLø.éB…¤®ži¨c_¯áÔsk)—\ÄV0-BÑKh‰L.žfg_³³«Eм:‘í+ÇÁØØ‹‘-{ÎÍ›µ/õ¿))ìtcÌ&ÅÚXÖVÑéz^b*zU…÷ªïõNFowäv'&M`’“.“å„„ôKª™êjNm »¾†]§æÖ°$¦¡e$Û2¼~T¤ÑƒG3 Š“?­Äã¶\ËÝô·EÙ[7ì6òíàÐ1]äS:,\º½‚<ÇNPÏÛ0vŒЧ´l|zúªÐÛ?þôkLLN\3Žˆ.‹¾6OL™lƒù6ýHB¶ÙVÒŠXˆ#‹ØÌ`– tó­5AU±4µ,µ´!ë‚”uÑí²‰]O’M®Zwû•©&‘>Oo¡yˆÇb²pP6u‡7²e/1I©EÒztf¥Ô¹ÖK5øâý4¿²² éé^J¥B$:€›_à}6?§ôŸëÈ¿mI¥r?§±&&K…’­T²”ul¥œ¥R±kišE$NFoõ€aõ‰}ô¬ù›6Ƽԧõ;"ÑWs\›š ºQóWŸÉ½º‰ÑW+âF{¿WäD‡H~ξ-릶™>sç)SŸÙÒúÁ=xÈc欖8;#Óã/)רb/ýèSZúòžÖAýŠ—÷ìY›œŒ ¯v8ú¼ÉS)‚ O¶þÄúÑ^9:@H“B“0Â$ì+7ŽÈÈüêɤæÿ(#e1YçïÌúUÑÌz6öWT*¾Jî&GiDÎ&g¾…ÏA&Éd2˜\ŠË³òøV>×ÊE¼¤ÏãS'¤aýÀÊ‘tÀ¿¿æ÷ÊÞ›Íï•={¾NN¾ý JXÜÿ\Àoâ+jïÒFƒ…íI -näÕ3).Ûäi1yô¡n¢f×`ŠåK˜Xm_£YhKò””={¢r®Ê=<|ê®c娒œÜ†òjªOŸ9Ѽ»U–_Üüͳ^Úõèé‡Õö9nI9{ryˆ‡ÍçøCнÄûLɘ}õ#È5ÿä'£sólÏïþžo]Ù‡ÍtÏ#&~-?ífÝœÚå|µ"»xíSü¤þúæCï7™ûRÑ…‹7:kÛ•4tˆ!ý´]¬ÁG^ø˜ ¸ÐŽõrû6,Içcù‡J ¨ðpë˜Ñ)<Þý•D )¼¬¬Ãø×†Ð­Å>Ø)ͯ…û3ȹ­e¨¹HÏnðG/¼¿"uÇò ]VŽw¾×- â@+¢Œwë’щã?è‚ãšÞz\ó‡ØËU +àñ¬“'™ß~oÑ})‡mœç\ î¦ÑZQòêx‹ã¶ŽÛ®Í¯E9¼HÝ{ue]Œ‰G¯È‰³^Ú%ñ‚]<¼õòîðˆñ]p\뤉ÆÔ]ØÛ@NNxkÜ·Û:a¼½ŒàP…º æ|jó6lÛµ"ùÉû6?.@g©;r£+Ãñ®ìʺ¦£‡e-é‚Ѫ[®ÄU [ð|Tl»A [gý¬›ß”¯¶ÿù Eê¦úÃ?¾fÿõÍÓê9ÂB¾ˆâ€x ˆ€x ˆâ€xˆâ€x ˆ<4ñ(Ìe8ÂY9H1À `¨0È£jN²B‡pe¤`0Ô äQ5Ù‰»>´›…#xkGµtb€AÀ P/`GÛ ¶†y`…ÞûØvk)w=R 0ê òh¤“}¢°H«#xXR 0ê ò¨¤“Å ”#œ§ƒ zƒ<ª©ºÀ=â€x ˆâ€xÀÝðÿ'‹¶ endstream endobj 410 0 obj <> stream xÚ•T»n1ìóü£÷É`\$’ÎÀuA ;²:#ðÿ7Y¾îNR¤XQäîìp8K÷îÐ}ÐEr1dŸ²ûýæÞqö11µ] žT‘‚ú(ÑM¨ì³R ~øþ†è¾üqOîó⾑Ë> n9:öˆÁ¢£úÝrøù@@žm$ 6xN¶,ažH²ÍPàh¿€/ó¯å‡ûº\bK4†éœ ˱ Uà‰ vî%mGu› pQ•ŒìwûŽÔþÚÔ£ þ¸pœ'f.<Ž-¢V kí9G/VÃÿù®9XÏËæ)”$éÇ–2V(mñqÛ5¨p8ì)ÔÜNlsJ§†}éÇôJÖ&#¶j5£Ë9±fÕ+Wkv‹b¾ šßø¨âRòÔM£×˜†ÙèŠÙPɉÅçì%‡»ý–oú sðÁPÏá¹ [üÑDšã üÍ'›¶›òHm˜¦åŠ5ß#[ô2dã+²MìMµ@àÕ:þ^Õžow)zÖt~Ö¦ éJ1ñ?”bÈW•šÊepojë×>ïEJ«tí§²äöþ¬ó¼’-¢'¥µÇ–yØÇîü°8lê6z‡êˆj2J­ërªKEZUØpÖ.ËM<Œä&?½-V¹h°Wíý×~U¡ØÀ¡Äú|ìë¶æ]7Õ6_w!ø ‹‰¨˜§Z:E++£¬T±{ÚÓ§¿ùÜs endstream endobj 10 0 obj <
> stream xÚÕ]ks¹uýž_ÑUù².—ÐÀÅ;åR•¤µÊ®¼Ž¤u’Rm¥†d“œ˜œaÈ¡µÎ¯Ï9èža‹ ©–ªx½fÏL‹s¸€s§;#]”ÎØÎÄÔ×IòñÍø2t.çÎä.hß ^ÄËb»„oÄuYB'xY[Ûáѧ;‰¨ÐEÔ‚*=¾GqtgäCì¬A­ÑuVˆg:5)¥Î:ÀäÐYàßQµÍ¢*+(Ÿ€ˆJ-=~$Tp®sÞtNØðÜ9B?Y}çГ¤s¨Z²îÐ4ksêªòšýzíÑCTeëƒ.8Ê<ª2øÒ£jágTaùìþë|H]@SB ]dL¶ (Ÿ²é‚ãPb = tìª 3šê-†E½Ãà„ (t2¢ Çù„Ê¢$~Äñ;ª0˜±‰)ÃWÁs<~Üÿåb}ðfؼëÿòý^ÿvømÓ¿<[ÏÆ?OÇ?/}üøŸPÁÛœý“Õj½éß\íoøé§åêoýÓõÅápñN£Nýkÿìž È›þÅúíºÿþ;ý ½6ïBR´|R¾,eŠÖÐ*ÇÐÉì’W3 ¥ª2f£¯"AðQ9‰  ¤‚²F9ŠŒde‹Ž´ ²ÛÊVP&ªÄ5žÐHc°Z¶”« ´S–ŠÏà%@Õ¤Sþ¦Pø˜––°Ÿ³UYÛPáf§|@g"W{T9ÑüÑÊ4Š{#eY+ª p¶òÞ5€J”ÅRs:N¡‚qÚ*ï `(Ú—èM€ºï0g´+±’¥Ô¢‚2¢¨ûÁÐJB;ÌoµÊeÐR&[+MKÕL] Z:¨Ê”Q¡p(;c!Ç´tXAEÐRa@­<ÈÖ%,+i±‚‡ äšéº W46xÝ6!‹£ ¼^´¥Ë*ÐAòÈ& ht…vM´ ö“±7@c*(»PõÛ–tI´¦–TXÚªbŒ&}c0;L±Xö&LehȈUƒEÛ‚p«°bPô5E´:Ê Ë95ÁòV°Jçb4+8æÀõÚj“±jbÃÇlUé.o &árŒ>A5‹iA†®R^Ä`ZŒ”]`Á¡ºý:š–eê,¦Ï•È£ˆ´À:¨¢„ yr¡0Ì/“=ß„ ë`Üý’ua÷2·¢ÑÄŸtCLAeæâÀÖ( ÒÄ›tGu( ξ+9F%ɬ‚ÐÄ›ôUæ‡ñv!3Æ``ï¬Ú9]Û˜Ó.Ô´ >}‹H“77¿‹4E)Õ.Òä¥Â ÒL¦ƒ—Cî"t¢k²Z½­£?º=—¥Ãt¼h#ܹ&XU„3:Åú+&XK6´X­¾ px6™b‘YÍŒP­’i±Z}„ 𨘈ѯ†&¾•¯‚!‚ Ói8`Ùd¹¦:ø7ŽùÐ W&¦2SË4Ùíñù¶T-Ãô8aÆŒ6tc ßÊ/êT­1δÁfa&¿w˜iêU³0“?¸+Ì$à‡†a&xw˜)—…Ü.Ì䇻ÂLâ``¦†Q&Tg†Q&v‹Ú·]”)TÈm”‰ù‚16Œ2S§†MQ¦q²ÚE™B„ 33w7‚p@B)ÔñGxŽ•`‘ž<œÓÄJ ®ŽhÁ‰sözºtT¾‰•|Ò2ÊÓ³¢–ÔØpâšdB†:¤'Ž{µbŠ¥îàý¸&žUˆuHËA‹Œ!z;ÞOn²Ÿê$¸"»rì¦Äp¼Ûd??ÔHˆ_IΞì'Û-5ÙÏuÒÀvig@9p½4ÙÏuRÃfvÓdÔ8#°ša¥»l *ÒÅšô¤ÍÖ@6¬t—p:F¤˜€ìa 4Aª4—õY…²ŸŸŠÃhá9è&ûù¡R]Öe´ìV²e’ýG÷óÒ£šmI8kK¦’§ÌAÏòÀU ®¥i~¹‡ï wŒRÙäöX2žÐ¦ÑwÊ<·¸a§äHó%~Á·îào~yý’ÿ~w²ÙœÿKß+õ~ù·åùp¸\¨õÅqÏOeŠÿëd¹Ú,WÇ×4tž‡j¨RÊñ&‹-å2Sàš5ê­:þ>œ®Ï‡ µ8??ÔÁú¬?B›.û·W!½ކ‹au09§ôA¾uy¤VÃfÖ)]"0>2é‚!.½÷\~_Þ¿¯ØŒÓÅþN aÝmÖýôý£ËÍÕár}Ý8˜5)ç]ã,¸.Çt£qMÈ÷uò6jÖ~ÆÜy úÄùr0+n<´•²kœ³ây7æÖGî z=Fq³ð0Ð]cuƒvËBŸ¯îÿøyÿ¿ƒÂ/ÏxÂQ?ôª¿6ɸA£ ÜêçYëI a]Æ”›BmÕO—ð§ÎL©î¼Éªõ!”ÊA -wÆ™Õ j–XMã‰'3·Xª,[iˆuÍÐtƒ„ÆTfò],“ÆæÜóŠM̲Ÿ˜"ÎÓò†n •²Ê©®@{E_Kü-ëâÛ¨¸ÅÌè*'šJ¶_rf+íL4”&Û¬3,˜.PÙþòtèφ‹Íÿr¤úÍÅ€‹ËÍpÑï½üó“ŸúWüíÑÓõéÌÜå9?š»±iç‰îqé{6ÿn¡·»4{É„-¯¼<£=¸–Ÿ®³è”w»¹qš{k¾õÜ`jPj}~²œ­Õúpè ÔÓ,öfä¥2°0¼³ £‹åìd¶ñ Çýá8éÚJ„Ö÷@ gX‡ÓñÁìÆ=盞šu`9h noÔ)Q‚ÎqãÚIÛSŸ â™ñÅ<„GÞ„µV”ýdßìÍÐ⇖j‹Âoʵùžå)*>.j3’ýBn­*ŸUY‰ôƒ;Y—“7{©Ž×ëãiÍ^ž˳aEμX¾›“áb&ô¡|/¡2,_ EŠv\¾>5>‹ ?ŒÃeSð\ƒ£g)xsÎå˜Ê4–Ÿ2±ß¯¥ó¾¹:.!²·¿¼Ø_/ ±öÅ=²ýép¶?\«óÃúBàî oâ 0ÇA3ýán;üýpyp±”¶@gpk ë|ЩÝXóÓ?]\åëÛ;¶¼¸Ü<;Y\@LúŸÓsÌ7†§\üCax¾:X.WÇý¿/WOV—ËÙçÃÍÉå;^\ÕúÉqö)jùµ»þeµòÀ[Æà¶‰}ñúÕë^üñÉÅrqúêí|JËWÛiÄ8\Ï#³ÑY)ç yóTîíÓ˜µŸM£1óiD©{¦±¤lß;Säõz&oöäö9”j­þ¤9üúãÅOü7–Ãa2~6˜;z“òáüY¹îüÝ1àÛÍÆ½3îD†ñ•3^²ôð&Î̯Œ¶Ìõ C­Ì¸}Æ~æ •À˜:”Æ;Aw_èAKc#Çy;!IÙ…RR(›ÚÞ9O¸X;î§·Ùü°æSîMT)ÀÔ1ã¹?çŠáø¶[d,~|dŽË$‘ jO±ÞÏæõô\NNÏL_ßZMŒ½…&†ÓÌZâqÿí3VK°Ó3³‡§~0^¶CûCžžÑ8•Þ¤9••rÅåôŒÄ©,ïHŠSY)WLϼb`[6”û<ÇgÞʹ- Ü´-ËŒí©¬%ÿOe™œ—·a2™ôBËÁ²<í$u‡-3å§Yâ°ž&ØF§g^%:ͰM”¥é™rµ5b5ž§²¼nw ›WŽMe¯™”í­9Ù–evþ¶,ïÝ–åmYàÚmYîZLey—¨Êr¯Ê¦¯Äç¿m^¼Ù,6žÿóìIgúƒEg—ÿ´»-ÒUθ3}š€yòBx}Ÿ¡M}§ƒ5Ÿ¾Ú ¾uíÞP-‘ÛñMlÆ×°_Ê_Ýš9åÌxbG>ŸË_ß ýÌôYDÔ>ѾxN޳FÌirÞã[)³eïïâÞUÌyøwçÞ–MH¼aƒ¾\´lDµòE÷]ŽÚßÿõ—ÿõÿ…n·$ðIøí»Õ{3¢oºo¼wök]ðQó?Ä?L;p ^‘^®5w=8 ¼hrbórc:oëîxO¯×ã™iÞ¨;®WhÇe=wm Ÿèö¿}õäùëçúËϧ`02JSÊöó… …>"Kù3déŽn}²0eÝ@˜ìC S™mP9n®)<Ü™öÅ0»÷|¡PWÒzæOR©l£Gp,?¡,7Æ»Aª“ºÚ¿Zm®þ kDó:jf©Æ°ÝGçMo ˜_ÿlOY2™ D6åâ#áÕeŸ}(öþôÁÅéf½:[,Ž?ÀçEl¼s~ÛF¨Ëaµ¶-¸/ÛŒ7e…rŠ5)ϫړV™©t‘w¹ëɹÛô‘Í̽3^þEŠz/{dÓŽ(l§íïªÿ }›?q‹Ì<Í´ýÀÿï‰|{3> ñÿï$4« endstream endobj 413 0 obj <>/Filter/FlateDecode/Length 29046>> stream xÚì|ÇÛÇgÏ/—‹^Ü]°Á!¸CI‘ŠjH[êH‹”h¡}ëÔ[ x¡ý‡à!@€Aâî.9ßÝwî.@"Éíåîù~î3Ì—}fæÙ›ß>³2D­B÷ql/wø5bˆ/V­ý`å‡LYg°íÌv»ÙZ‡n‡†Ñ/¼(gúAÖE¯Å1ÙÎB` ⑞Äfª= š6gëÐíÐpèvs³Þ&â‘“ÎX@àis¶Ý ‡n77ë¬Vßõ±½\¤›Y3°B2hÚœ­C·C·C·›§uNëð ð‡‘‹Q š6gëÐíÐíÐíæi½M" €P’©¨ŠAÓælºÝnnÖÛD<°@1Õ6M›³uèvh8t»¹Y‡[u€ÇÄñ@<ÄñÄñ@<ñ@<Ä0a89鬗ÃÕ/WËaa+íe²Sl;ƒ¦ÍÙ:t;4Üx¬·uÅZkÿýÊ´÷ï‘erõ|±jíû+–2eýø>žoh2#¦³’B†ŽW2Õðûù :rÞQ™›ÇõNgªáú¶3åtf&­ÿ¢Mb½M+ÖŠ ‡i+Äñ@<Ä@<Äñ@<Äñ@<ÄîÂ1⺩ªâ¦ü´O=qÅ¡®€®Î;óÆÞã{JexcàôµÑå­…t¿Àvòm®gî•MµâÆjðöæñÙ‹ ’–t®^úeÑxwÚ­—îÚMÑ-ñ¡¨ŠÖXëKiâò·üés2Õôà%Š]‘ö ÿO]ÏÚþqßwu(W’£ÊÖ¬ªè"F´L°ÿ;—¯wZªîª2¼e¿²s•t§Éê_7¨{Ù ºŽµuoÙoì|5í?\óõoª±.à7Àd#×µ}Ü_’2{Õßqž}BœˆÆMÍ¥é[ÏrûÎ/üøÿ”«¿jY92žÆ´õx¥Ü»=ªÁªIaÃUçÕ1ŠO'ݼ”¶*H¼úÿD ÜAU™c«u¢õx9©¨¯ÚMÚ4)T&qç¬'æk¨ÉVŒ½Ä_G4m{2c§­áñ'çÉ^w™sÄ*giNb©Üñ•Žoÿ(T`ß°‹±¬ÚpüžBÔöN×UFóoº¬6K9­Œ;m KŽPýUN¬§údQCCb¹„óòv}+ííÜé ZO‡no;ñÈIÚÝR5;ÿ·'5|Æ"[ymãi>™™pæ†÷įº¹I8ăMg´vÏrlT>"ð9?‚rð"-q£9my´·#§3gÝlÞÌ:§Õw­—¦c{¹ÞT@(ù;!è¢Ó[Z?»¿»MÁñzµ»¾T“/ó¯OXóÇ%•ÍÐA3¶öµ#î1ÍÎHÖš>¾ç@ú‡­Ó$~pÙ—|&è€ÉÜÎ¥ÿl’ó[Aôg YI!6’J;Dz6qÀ´Kæn¿J¾äEìØÌÊfkÇ¡vÉÔ…'öó½ýI¿!¦§÷øSXo%§Ó2áÖÍÜnóåÿUh§Óõ¬¿#ú.¥,u›ºÙTm#½US‚¶<ÚÛ‡Ó³n¶ oÑz+‹Þ©~uuœ>aÛ¨•|q÷Í#üm ²¼¢Nuç?(MYƒÛWo–ÿÚ@ò®¯K5ÍL“ÞÑ~§­ù[ÒäØ/ÛA}ðwrBlÆ"ûwð[Z=¾¡É8ƒÓ¶R­’uTÿ¶}!²îÈw }X†cèx%ÎàÔÊÑ:*ë­átZ&Øþ®×¡ŽE«†iîü hE …p:-cý8]°«»òÇ ´Þ®v6UÑ MU,BÜ—~d©ÚòhoNg̺Ù6¼Eëm2KþT S]VªŠ“w‡®ÜÝXøáíµq¶ƒÄ.Ü3<Ü’OˆÂ_v8¾¹Fƒœï«¾«÷©<Ç2ߣjB¡™0Yùã¿<Å%·åï¶¡l4¢,“ç-Ó^9?8ÕâZ/ºÉ…ÃÊF«yü©y*§Óµ6ÿ{Îç¤mѶ•µ¬;çþÂßÞôÞé|O!j{§Óµ¬õ“¿z¨NOº4’"Ø›|}µa !ñÚìho?NgÐzt{[L[ÝѨ§˜™oióñû+–jóŠý|ú}ßåúkãÁüªÎÄ_ñííUÿG…e?Û–êŽÏÁ[¹1õº¡Û®»U÷¾Ò Öõø¬´$¦*s)µàOù‚?ÁW€±˜ @Ûc\ÓV©I‡N]-•Þøé›CF, m»ìƒ‡yŸ¬&’Sè`§‘£P_&]rWf¾2ªiÆŒ†ÃÔ´=Þ´2ªËȱàq"Ç!%ñà_¿EäÅÓ´ª0/~Ëï‘©I‡ ñÓ=pH0>’u9ž¨¯ÇiïÕãħÏ0¦qež½SœÇZ‡© {Ü9þ@ÓÊà<Öðâñà˜£yIôjØÅ'}ÍJœ¾ÿ‘©NÀ1Ç–¦äñ «þ³z`„Ñ´UyYjó’ÒØ%Rí?ß)»‰N†2Ó ¯è>:èyºZ%§ÀajÊÿn<€x< ŽNÁyñ÷–„À.L\Žoúë•ug—á{ +)düš,]eîŒkTh¦¦êqŒÇØmÒ/7õ8 ÚF4m5dä²ûJ–À®jEs»e ß`ªT+>j^²r¦&ìñ”çWÞçñåà#Äã1 3ëÕ(wÏÁÃé¬W÷†Œ4€]rìhÅþ(ªgíi~ÏqËÖE `ª4cpeþGê*ƒSÅ(rÔH8LMØã¥ác›VFq`/9<´ŒëV]¬øóŪµóÞ^jàÑD>v4ú•/‹-ÝÇóEÉ vÖíí¹¿ äÎÂjoZp ‘â ˆâ1œ;Ëš7ãØ^.Su [y|3¦ïÓ.µ“•ÄØSZ'öó[Ì~§óÍÍãMÎH0ètf7£µÞÖk­ýs¼¨û×5Ä{ׯuÎ_¬Z»pÉ{ Þ„"FÕDZŒŠšÃHÃ##7öZݸ± ÝÍ„ó'lt:>äpç››ÇõNï?¢V›û 5f Hl´SNgvaÒú/Úä!ÖÛ´b­Øp˜¶@<Äñ@<Äñ@<Ä@<Äñ@<Ä06ñhq][ÃÆc°7;t˜Â õÜ !S¦ô¸9;='Ï`Ùu:ƒÖͶáͬ³Úæ˜f, ÉÏbr àõÂ\s£“!¬Ù:½ ›Iñ`Öé Z7Û†7³Îjõ]ëWWÇ© 1G,q§†? ¹é–¤ lhÙÈœ?a‹tëçf |01åqsv:–Øh+¤[„Üðñ³NgкÙ6¼EëœÖ5à@á#‹Ë{øªð"£ê /Èiiñ"QQs oÝÍ[?X9ú­6°i=nÎNw÷QâVŽþ#j ßpfΠu³mx‹ÖÛ$ %™Šª|U Æt‰‰»´îå/glê†9›³Ó½” 6œY§3hÝlÞÌ:«mŽiŠ©¶áóP{6=ýƒÖݼÌbƒ 7[§ãàƒÁ†3ët­›mÛY‡[u€ÇÄñ@<ÄñÄñ@<ñ@<Äñ€»prÒY-®¥®_ëœÂÂVÆaÆtÌKœFFndªíçOض˜7 :ýNç››Ç1±ÑVÍ2fâtf7£µÞÖk­ýsôËšß¿wFÖX×óŪµ —¼Ç€áM(bT=M¢¢æ0Òp<„õZݸ± ÝÍJ·t:>äpç››ÇõNï?¢V›û 5f «[L9ÙA†Ië¿h“‡XoÓŠµbÃaÚ ñ@<ÄñÄñ@<ñ@<Äñ€6—&4 Ùi<{³C‡) ZÏÍ2ešA›³ÓsÒù 6œY§3hÝlÞÌ:«mŽiÆšü,&Ç‘€€1 Z/Ì07Š1š­Ó ²™fΠu³mx3ë¬Vßµ~\œX!ñ¢_§†? «_§¡¡“ -9ý‚ç8ÍÍø`bÊãæìt,úÏqjøøƒY§3hÝlÞ¢uNëЯˆÎÈúÀ¾*üÁƒKa#”–vð ÂÈjØnÞ üÁÊaàeÏ™õ¸9;ÝÝG‰?X9 ¿ì9ãNgкÙ6¼Eëm„’LEU>*cºÄÄÝ Z÷ò—36uÜÇÍÙéÞJάÓ´n¶ ofÕ6Ç4ÅTÛðy(ƒ=›ž~ˆAën^ æF1ŠÁ†›­ÓqðÁ`Ùu:ƒÖͶáͬíºÀcâ€xmºÌZ|õÒûo®&m\ü–òm£ŠœÑKÅhsnKL=â@;FYú[2ï•—gþ-¡¯Å{î¯ø~KúuãRù—¢§Ä×,˜ó¼«OÜùv]îþ×n:þüÁkaÅQƒÿÝ?êíiúˆÀûð× ´òÉuèõöL[€Ù#pÿjFgÝ,D|Qßž!Á*i%‰Y»óte¿Iýgº5U„Ô)‰YÖÝ´xz‘Ÿõ¿25ô D˜3´úÚÙ„<ïð.|ŽHã¤넃ÖÛx,™9|±¯@{²I–WÈíº‹µÁ["’onÀJÃ…¾ñÀ¸tMÊõ«F§ÄÔ6NÞïMì7׃ÇRæMXuâ\ã7\¶¬5šß †’ÏEOMpüú _Gm¨A“y©ûˆk“-óâŽGî¼>nQ¯N0` Ð>P•oLãΞ9e‹}#îÌŒ }Þî†Ë.[·†f4*‡êêÉÃÏ[þß›Ç[éf©ØvN½ÂùÈ!<4äXJiŃí V•שˆGÖ%7ýDlpˆÌÁÞ¹TôñÜ<%ÝáYÙß*zXkKù.ëž³gošn½Dm}õËÀØœÊVĘVž;¼ÊÛÞ<ÑæöuP®í?ù—ñe{‹óâ“R,]¼ô£7¸ƒOÍžÓÑÝ#ÊNoVøþîsV 0ˆ Z¬Øu³ÎäüüªxÖ:ÍÕµí+’iâÂË?Üå#ë³/ßÊ÷ ëÌÃáþ¿¸j#…Ø^~ÁËŸíi÷çÿÊâÕÇʤ¨læªÔ™Úm§_?™8]Ìí3¦_×M‡|¢d<{Ÿ³º„4Žb¯ñ?wüsÎú¥•Þï„Æf>þÉÐÝ[uQÌÙo?;{÷ö_Ä€'¤áÏõõÌéäw{ n£`·åÂtÅŽÏŠ_yùÛD‡õoz98ñÜ»zŽ6dÕDŸ:óö6aÇüŸX>ôwÐÞ ‰ÜW¾>{å}å,ñ¨ÑoÖå³3Îlß4í…Ù;I?šbêí°ˆ˜(tç— ¬Þ‹HBõׄs~¦þo×ÅœoæÓÓgöé*nzÛ,Á·°7¨ÓÏ×2³5O!Ùë£,kVøïιï-K×xÀ”rÈÙ¿ÎïéÖ=Ž¢Kxï¾Å™úÛ eÜ´KªZdoÍjöa²îô¹Äd±——¡~ʇ.Ÿ;›úÈcâÔ_Œ²3ðä<⦥uœ¯¦‰ÿpoˆþJåÌFµW[¯s·öPþ ÎÝ#篾jìTnþí[uÙΞ~«§u xü°ãË5—l9žÃ'øè7íɸx£dÙ'ýôýÔ¤C'®.+Mqt 2rYP¨výÝ‚¼øÿœ³Ú;7Á)¦÷toýfܶœ’˜јmÞŸ-?9Lj‡Éûf×G–Ÿü©»÷&²á‡¯åáº{oÊO‰^˜kWAõ^X·c¹J·I>ìKú.ú}B¹²ÁÖ{_ß¾Çx´*oñö“Áº¡ú»F]3àâ¶ÜO'ˆwÖû^å®á¬ÆÖʤÿW{Ð*è'Eê?¬ôÛž{×6_¾É¹'O²3³H?õ!´ð?®DwïàôjÌñ =ƒ‡OöÇÊ1ûä©MC?èË)‰·üþ¬>ã¯ß"g½…õcÀ÷þ³]X9ÐkUqaýÀÊóοÚÕ CµOλë³Ú'çOgVÂóŒ æ€à˜X¾ýºÔ_Ãùe®õìõêËk4ÂzîŠ7ùßTýÓ™³t¬xùðªŸúÑÐSO?Zœº4gù•…Þ)gž¹žölžçºÙ³–=I®Œðó+º"Ü¡Û ¯Ï>¦tzÔYΛ–/̤¼½Èî±ãK>ªßö—¦s§‡üÉàH¯¥©üÙ'¿•TömI"V¬"ú2Ž9î/Ñÿ‰V3ð?¯Uí‹“:þI¢_ípɱ½† éš<9´–x䤳Z\K]¿Ö9#„…­Œ9ÂŒé˜#–8ŒÜÈTÛÏŸ°½“ž¶U ü!<_í_³'õ¸m'½óqÛ’§¤^æ±Â_´6:éð¸êÖ;5fÐéw:ßÀyþ3œŽöý›¨Þ¬x{ψÑË,tÿ!Û+ÙûM¯q½,Ú¼±ÑÑÄ¡¨{Ïîyyà4´yŠ{@ü¤” ~ëÅëSWåÒÝj;yœÞ4qÎÙo®“<á¯5h”eÊš$>]ƒ*¥s­,µêëdÝÒÂêâKS×e¶ÒÉTHàâ´Ì/™rz ßû)é_Úªa£ÁDEÍð¹v8ºóΣsjõË*/HrñÀœ¶ž¶ÂN?}æ]m.5ftXÇw­s® Üóëq±ƒ´ÇÕwÒ)#£ˆ«ÚB\Cg®‘ˆ.ç(Ë… cC¥‡b\w²sê•ÜZ §Žf×!¶‚MZpH ¾vVK`Ç ªTÊ;V‹Rlø".%²`;ŠÃUsùUÚ çÙ´öä’ÃŽâМÛêFHE8hÈ 8¯d+Õ,µþ£`+ðGΩRp‹äy·¡ž[/ãÈ„*Ë›|¯—z‹z&u¶(·êôk@PE—j÷’ ¿Š ÿ •¨å…„¹jµoF†mUU•½}¶ŸŸšûø£A5¶(è±6JaZÜÛÅ;.ëžË̱~@§ï`Ûtìmű¦­Œµäüö‰×Ý£çwh  7ÚèÌTæ–ræÍlû-£½j¦“±rŒ=Ðçà8„õ+‡.ážQ‘"h%­Ô(etC¼eÎá‘(¢Ìº¬Âª’¤…\µMu¸F¤,Sþ2w;…DcaC äÝ ! å.»-E3¤R¡}aÏB·¬­&•Ôâ|˃0Õ‹Ã>xgGM/6­>ùç/ìb>çCþ}´Ê-õFhº°–Þ1dK­¥Ô¶Á* ( Cb:;=åFU{VÓ¬Fr..ž¼cg­m¹“£ZúðÃGþ™ú|‰‹Ëcucnƒp›’š`£ìÀ‚ùÝÖž¶‚.0b”.§ÿšg}l^dšX7÷ÍU eöu$²`³ëÊ„‰n<|êN¶ù߸E·øÛF÷¹*dF:B³³G^¸ðÍ*ôÎöíGûôIòÑÞþ„5+ÖŒ3=ì_ ºÐ÷¦ª”j*e–e…¶…ùù\’ë$u²¯·÷¢ù=òUÖìž‚Z>‡Ç%mCìÙs¦[×Däû »U Ë¥~Có8ßá<ÖŒI•¨Fe%D-‹M{kȱlVïYZújTÔo‘‘7||sØdFÀõ³³®:¨ª¶LÏsÊÅ"á\ë,QHl5¶užCdCy¨qNg¡~ébÆQ¢ >$D_Ò#)ɦ®.ÍÓóam÷Hê:?ïxã&Ö)Gýð~‚6Vu½ÔtSãš[åšËB³Hüi¼¦¯FìŠ"ŸÂëªQQuüªCÓyJ¾sIµ•½5‹ËÂ*Òåê5ŸÌÌ´ààG5ÌÒÌ‘ÔÁAâav 8‘/@ù‘kõÓÜ—/¸)æç”ºyׂå2¹×€ý/ú¨ ›žŽþÇó¹è¯»õ[¿??æ;ÿö­º(xû¦¶¾a7hçª;ùó~è¢7:êíË'X ûZàÜ.¾Ëû;ŸKîVF¸ßžj¾—»qܸÙ`Í(±·w©¨ÀʱiÜ85§=ýÀ%¤D‚$¹]°„\8•‡ÊNø×\³¸–éÅR{º+œƒ¬¼*+á ñþƒíë?o!· :ùúŠ“Ð;­ÄŽ/Öë.˜7½EBw«®¡°,h|«=O›öÍDóc4¼1WிÎA9æ§…U=³o€6ûúùý98|1sf`^žCu58ð§})Góã\äül\NCxŸÞ¨OCú"+;…›¾bP¢”ŸÎWI•Ã)/g6\Æñs¥Þ#Ä&ý2ÎȹH¨» ¦ÌÞŽƒhq‰äŽZè¯hï¶z°x`°Z$úúšF·dùû;r´sB°0â¡߉kè:}Ù[SÏ 2­Ž\æTsê;ºÉ;vÑøúñhÖÝ[F‰SJ÷^@ycX–î È·¡†¤ÃÁâ¦CÊó+{¯‡3ÂÛ÷OéÓ§Òðk÷œ‰»ç?\9L 5—»gÚÔÉ;vv¾v­ÜÉɱ¤ÔJ*Å%.,çÉ*g¤êWî¹ÂM¾i}ˆ]CH{ëºÒ¾\ä¸× þ»Ë©ç®cýÀÊј‡C ÄÃäñKNéüøÒЋßÿ;lXfH0ôItrr¿cÇ—|„f}÷}î‹¡ Ö¤4|ìo‘‘#ãâœ*+Kííôîìí ÒöŒ³ó¯o¼î“™eWY‘íë—íçÛô>+Òf(Ùg¨¢O»âšðêU›ŸÓ4âÖ¬dBBtK»†@„ŸÚoZí ó¤ó­Xô5ÇR:lØ>þDHªC×_{ód0k‘‡©cW^v÷÷ð³þß„–ÂvÉ$b®å% ±L-i¾”r•JáØ3 lH›Á 3>Šúô»y¿ü9zí¾~½»ia¿oÜ|>¡Ânóñ0]*]ò±Z4Þ¸‰)öðØüæë0m>ï¶šõÝ÷.ù÷\|.´¶†cÏdàØœLí+îл*äº aù¼åvÕü»08#8mXŦ ‹Z˜¶2.b‡ kVrvÄ0è–ÖåÜðæ]uû€ @N×_ç`!VWE··êßè$\cÿÉêÒ_~Tvxès?ªšÝÂSÇnQ™i7_>r«ÿ+á½Íòf.Ì 'Êiuèå[•«¦W¿õê¸sÞÛÀâiƒñ?ÿ:Í{=ÿØá‡Å<ÉG#$ø_šRqY,gÅ6Ónl“k-®kk²Ó˜<èÐa ƒÖ%™2-±`°á’ótº¯ï8à?Aë.ÎCžæÏ D¼‚Übw=á\5ù¯‰YÉ™¸°nÒD«‹ELìÃÿ¶4»nú—Q_y¸nò¸àPÃŽv Ž®Í¬·‰xä¤3v>?‹Iñàu{»ÞL™¶³éÉdÃm{™§Ó==†0Øpoïጞ1ô}Ê=psr}ºl›³k¼Íø‰)?¼ð;.T…s³³þ‡å•·½™ºpĦ^èÏÃYY†½õ—Áѵ™uV«ïZ¿º:N ¬X6bŽXâ N ŽŒÔ¾ñ§¡¡“ /!‹‘îY Çv¶½ýÞGº5$ö /Á íEï 0ètOÏ¡ƒ~…38õõkpÙ1|Ø8ƒSÿg a;ôíÜQûœ'Nž\>ÕÞÞ¼”T‚Ì™üÊÿõØUþÛýóÈäDµï_S^b}+^»~"N+Ê]û…ùúÕ•çj 7p35º¶h½•ÅÃ;€Ò¯®ŽÓ€PÒmóðUEŒªÇœúz‘¤´´ƒú5!pš”´ÇÀÖ+«â’ÓÖá NË*ÎÒtUõEý£…8­¨ ,M©¨Œa°á†— #qzVÖžž±—AëO#zh¡°ôןœæ.ïþGäš’WD½¼,raÚKKÖ~1œËnéÜšk=Ö)iÉŸY)J–£«ç’ñ~¾†Fbptmf½MÄkSmÃñ“?§ôC ZÇñS¦«j.1Ùðê‹æéô¼|&—”ÌÉ9Æä©Rùù§ß‰24$ÿØa‹³±Ü¬lyÿ¾²ý?ü²v~–´èÊßoý<ò9_;ËæCpúì|``g¦ÎàèÚÌ:ܪ fͪ$lNÓ–ùˆøýò¡0‚Õ™¦DÔ²¢YV¥ˆ "”*@É8ÄEë‹ íORƒ(šˆlûqw_~Í(ýb°µ,×Ý,bYè£Ý&*Y’³„u!ApiYgª´'­1ηYÐAý¯«™é;ÕÓÒù­+ïLŒªZ>ùùÎÞpÈ´ˆ´§ážzU]îim}”°É¤‘ÕŽ&jõ+ïMuF…Ï„«“Û' v.š G$¼@ˆ$dî34)gIö’btÙ‹Å£©Yj,-¬cöeZÓŸ¦}4ýk:I‚õ7‡è ß£Š°&4)Öm]&êîdÖxDT³°$d‰[ûé6öþcî¥×~K²8“Ý}툮6Bx©{sàÝV`ôÜî_'ðˆÏ¾H[ë^ÜÏ»‚¬TtÉkDáxÄ;CóÕº;Å`¢&€ ¹HêÜÁñ:1°Bú‚&hÄ&ÔäN’=)Ú!Kš¡‘”¸g',BMQ.øo(Âò‹JUY!Ýø¿²þd¢ØˆfÓ4‡P·»¡·«m·{ü$µû/Î÷ש½ïfÞÜ[qçq>fi¾™• `üÜî]é;Ä•ë¦ Jº¡´@¤Ñ @UÐd]­£jµL#eJZÁöþã¿…Í"«$w¿§&Ðu‚ ¾g®¸I  Šæ Ŀ²±¤ÊBhv5ÑD_Ë(NÀŽßv/„¬vh‡n×ãÛn?\ ×ÏÈ?À-¶z_“U®Wœ·í-4󃦭À8 U.)ç&ž»á_G)m¼ÎqØÇ×,YîØý‡‡Éë]Ã·ŽˆŠk‘ÔQ+8"î-Ä÷@d-mY‚hÙã™#* É–2§*ÎB»Í½É²áQù/Qê:–ËA–•?Yc£-׬£l–£FãÛTÌV>¢'â%‹åTN¤Iñjrº»ÿúHM…8…,çh–µ/YmÛ}ÒWÒoMçÏ—ÝøàÅ»þ°*|é×#—²Cv k¿ätš È#@]Ú«Ðêøäùï¿9÷»ÞÂÑg}µóP*ߨè®vÃ?YðÊ.Û´çbëO!ÕB®îU݉zD;ÿB»žB¤ˆÇ‰9J‘ã?4õR—!¾úÙ*‚—O¨C(¥kUcCXÔhw§"XØ„€"Ò÷ì>—…l(Ê Â,~6ËûgmážIXb»gMÌ µUcKXHÿ£rDµBøY¥0EÝD™R°©J¼¢BüYµà¼† ™sËP§a¯¼ùÁÍ,¼0®¶×_⢉Pˆ<ÀhàyD óÐEÉb«…B9p5U ùŸñ®æq3ºõì»ïæTÒqÇRª™HàÓ}ZA;þE+­U=X…ÈqÒ #*ûñY÷ÛÒ ÍKfñ<(M˺ŠVZÒJ‚ØÏaÙhÈ!4Ýô,“"ˆÝÄr¢ /Òoÿ–Ql›.dîn+áE×—ª³Cœ"–u5-³~ØðO(4¼Ý ª7ïö´ž¬¢{XÕ¿À&ŠüíuüUŠbï«cu·R²ëùChÆŠõ/ý ½ø9§iÏLÌZ˜–þÖ†/ZöqÍðjë÷57‘¹ëˆ |¿ ï¼ÍRÕ\9<3:áÆÔe÷ ÷‚*$ÜK{¤•#PI(a±‡vЭw¯ @ecУ?H!›Läêsƒ~¥шÖ]9ž¬lòµ;wå6ÃŽÒÌi¡X…ÔßQºtª¦ô¿ëB³bêxV–²n,Ö šh®HŽ<¸5• Á°g¤—” {®Y*šu†7¨×ðžµªŽ“£ f}´‚x€QAP<ëÔ°®¥ ‰M2¶°\ pj¨›,±e©|þPvnÑ\Úoc“ê…E|ùó\DÐDE»ß«erÁ%5Κ´dº¢k´3Š_W· ~îî¹ÿÚ½(ò>gîKÃs0Tcb“µãØÝpUöºšc£ª ¹š(tó/mé|§VwÌÌtå N¹M»i2ž¨d¥Ô‹VUˆWTZ$QœíUw®™56ÊèQÖÊm$õíjÛíeßWß‘¾…:ªÝJ3?`!òã€ëpS|kêÆ£®*¶Ô%tïØ®¥Ú÷^ó² OØwxåEƒK÷­Ï¸ß?b¹•—Ï>p ÊʪÄÞ>$'gBL̦qã š?Yaߵι‚ro|´Uà!.v@-½¿Ÿ rجËQMÓ¶$Õƒ¦½ïÿNqqˆ ¯Vh_¨ß”WºÕ¨¬\\’óÜU3GRw[H8«y}leÁºÚÜá6%5ÁFÙÁh”CÏË~¯ž¯8·åÅ-3?šÉ{A€Øæ{À‚x+ФVüå©ÍùþóÉké‚f…÷–OØÉ‰Ó–oöD‹& çï^uížÇ )‡´“+/SLqÍ0Güü.£¾è2ê¾áí›:Ÿ~¸Ot@=®6‹9°ríÝ;>$D_žœüâ_Ìœ©æÜóëÆ»{ ÏÁqëÞ•.¡Eåà°ÞΗἆ{¿~`åøÇÚjR%Âú•C›—Ö6‡4šà¼|©´ÌÆ:ÅãY}‘pNÊØ ÄÞUÅÕm“ídaÆ1KB bm—Ï'œ×7¤o‡ýx‘|ÀÈ„n_ÿ¹V->»wQL¡ï?KA3Z«“;ìøb}°[`ÐìyÍþGXvm^šè˜»†ÁW˜>Êp”›[-ßQ’ c;úfÝ´+ONóôT²”èÎ3þ¥N+r*üšœêàµ}Êʹ¸”Ì’qdlúîù3—u‰sï¹>ŽB4dsñÀš•kÆðñ1 •ãN¢Ç½¢â•ÃG*­¬ŠíìBóò&Æžûcô¨‰äaQˆ½¦…ˆÄøp¸, ^ºrâÊÍßmæMà#ÂL= pß8Ö5û‚ôÌà^äÅ8Ïw±f`åÀšqª—ýà‹»Ç]¬r/“#a5·®ŠWYË«Rpê=xÙ_u–¥8î¤Øõˆ]Ï!9B•p×\¥X~™DÉ"¹¨©0 gtaf”’§Ü4HSÏ׎Ô‹ö"5"î^&á2Õ½mfÓe"ù}ž¯âóÕ|±\,P ø|'{7â+­:ñmÕ|'µÀYÍ“hx8æÀÊq¨gKAAú?왚úò‘£k§>ÿñ‡3Écò‘âC›ºozãÔBî3}g"ˆG{C™5qÅqkü{™<*Ù<ØÚóêŠñ1IÕ½Fœ5LTPYmo14;{ä… NUU¥vvGûôIòi\•«âº×³kŵ~¹ôâ™?ßðK¢ùÅ$¯ŒMZU–J{;ÒÒ·ÖmxrîÁÞ£lH¾­FÀÒ/سçL·n‰¾¾ÍEQ¾œî•6èb b°85½U·qD`ï&ˆ²¦%䨠ךհ4B£b«ÔlµŒ´¹Áb…•Ô'ÙÖ"Na‘¸&“S¯áâˆtª±*œLßtå¹+¤> 1—fa霜ŸÓÇÇ4Ž“UV?S6fÌæ1ACBA<ãŸf ÝþùçÑœ†2¿“;Gÿu®ôÍUlè—Öƒ–w»xÁËoàÎ:ƒGÙõ¯ë5Äanƒˆøm9zë×Þ¾EqYAëšÖñùÇì<²´øÀ{™ÔÂ>ÏöÄc™µììþ[Úr÷¥&õú¯“ª[ñ^O點ôªž÷ýu:xåqÿö!l[½­µŽwuÿº†xïúµÎá‹Uk.yÛPĨz¬QQsi8-w¿ë÷ÕçðYõŸëœ{Ÿ’" ¬¬µv,¾Îm¥#­ ³K@§4¦œž~3Ð;è#¦s®¡ uÊÅsôwUEÍž}û|8oñž¤èÉÞ×¢Ûðx[¢Ïà¡, Lûy-ž%åpYÜà “Þµ Þ ¡Z4B¤Ç–÷qÿ5gåÌXÁ©S¢ô òÅ×”ƒw ´r/ýGèþ½]®Ý$6á_zvƙ훦½0{‡¿þW?B÷¹C CÁð }›þ×ð >¸w¿9|p÷{£k7ifNÇáÊXô,gs=gMì‰ï¾Û~kÏBn¯^õ½F÷›Õí+âÚȤŽÇ%7_/tèšÝ |¼ÅŒeuõë ©‘Ö´J¹³A'Kû8!R¹új™òvɃñ§¦¤­z÷Dƒ¿ _ùã¦KbMQ•D’ ùϤ•¾Ç8À¶éØÛŠc;L[+õ§û¼-ÖeÅ}Âðpæ…ßkÐB®ºËøüÿ›©àBO=u§üz.ÔŸ¢oß„Z¸a·íýìb“~g¾‡hÝ=_šð)Kë×Ñß…4ý¦VEžoy9>Z(PýÄuØ»û YCÅï†7-8tшq«ŸpÊ=»øS¦²7o¡;v nÞbåç+wïì×¥s¿QÃÖ©¿ØtþÏ/®/³ì#˜ydÆÑÁ!{<öpFªädi‰9Ùu Þ×·È¢€ªLT^ç㓚6äÀ¨3Ê\]ÍbÚ #ÅrPÚÍ„ûJ[,žñàÌä›9©[Ž5yžë^ðlë*¤<¿²÷ê{.>È–-5p7L˜òÃíÈc`kí“êÒY~ý ûøIVZ9t9l6®ždÉ¿1ð-Ë#‘5Ç÷þ>q#¡Pž<ùB0'Á£^¾£IõÞ4™Ý ¹[ü:|¸jõ³[¶*Ç [6$Ž]ý mCw¸z5rë¶?ßy[Ã5ýÓ:x= 0IiøØºÿÖ„w×ÅÝëþ·[=b¸ë€5+G~ÞåVÞ¯PHŽ«~ïœÞQ=qÛr‚¿­ ò^í·l01©\òϪ¢µÛKSôO˜p”J÷øøÝ㯰Uªû¤ƒŠÏ®Ëv°~ÞŠ h²XÍØ#èÞiiR[[i‡ˆ.].×hçÜ»u«µ±ñNO7‡C"`Õ¨‘øƒþ²–ÆœdªX?Z1ìøoÉŒ©©yËÁ¡k6Î ëp¹ÛÙÒ˜ý¿=[¼N>tÆw¿×;:J=Ü]®wݲ5ö·«½›\ܦÔGËÕÉå•/Þ¾îÒ¥êw{Úv7øm‡¶••å.Î83À"â ·ÿs•‡º"\bWQâ0€uÌY—Ÿ~feË}}ŠçÏ“F €>iu¬ÎÄ8møI™¥ðó•Oø:ÄÀLø%ìØ^î+äN=¨É¨ÿX:ü›²­+xŸ]š1´×\ýƒÛ>1gûóÍ¡õëHÞí‹Qlþ²>·—»Õ^—îÆ€r`ªí%¾)©ºKh§ê²‹ˆ}t(.Éõó7'´•‘)Ç™ÿ×ßÝJdÉd8Åy¬%Ð-­¬§ÏøÌ{Ýâæ-ÜÉ8í½z\—‚èÆ‚ yazm÷Éœ[òI’¼fG Ùۻܸùß…äBéôK5ÉÕW—J§_¨¾B¶m…s¬jª;\Õ¾mìy:¢LtÑöêE«ššœ€–Å£JÆý¤Ät®…@äa\¸þôs³…@ðÑºà˜£ù‰pBÂuwwèÆ—–:Zÿê8ýÛò½ßÔ~üJ✞Ý{W{zŠKJZþ…ôà·‘5—5sf䖭⯔;;gwf§hŽFÍ|µ¥«å„BÅÞ!£ûòÑq -dç4kwE$ 3ùFo0ëMÞÇ¡¿;ÖU*…cϨsvr¹–ÀAì÷&–—öÿÁêûëñ×Í/«íØÑ8+\æâòç;o{§gØU”¦†½=øèsUŽ]îûEÿÖ žö$»Æt†\ãBîë#º•Øt\kèÔ1eûV˜6Ÿ‡ž›fqóVS….´¶†cÏ(éÔ©ë–m>1g³#889.s\q,î›aÓÒÎp¡‘q¾¿Ç¡!iÊq#“÷Ó7;Ðaœ¦U¥‰SÕlkkM8 ES¦ã,¸æa\Ïoþnðâó¡[Z—Ò×›wiTXt‹Q Ä|~ì»owü÷ß!Ÿ®é¾ù¯Q«×ý´«h®jöZß/ãÿwIú«uùå»3B8_ºUdTõ¢é­±>w¡éÓí4q«†[h¡ŧ D”ƒxm„4b@Ɔïq´¡92~üAÚ¿tKëR;0"ûç ²Îp§qËÞ„ FCµ—סõëRÇŒ–ÙÛ§ŒƒóÞ!CWº¬ú§÷?±’mÝ¿s/¿ÄÕ+G§ n¬ •QU>HÄãÖÔ5PwBÖy9‘TÃû¨ˆ¿¤˜{‹Ô¹ISðL[£~h¯Ÿ 3Ìl•Ùêþ 3Òwm/MíˆòwCŸ$Wؽ[Óµ¥$lÉ2—ßüz™ó‡Ÿþðiâ@i§³¶Ú7bõPUÍqlÑWÝëšÝùÕSž±Ö­’B¯¹ÞÖ šýk)+ ¡^&ñ&lˆ<hˆÑ"û%ê.Ê×–Ì ±¼8¢ÔØ”COwU¸Ttýº‚*טøƒ ´8ˆó\ÒÛþÙ~3–Íïrúžëƃ˜»’.!öɇjï›×ÁQˆ³ÚdÜâ@û@wÃ}˜ãtoWÉìEïvøÉÅ8õ£³¦‹Z|­LCd(My€ñ }@¥òt×94¯‰^³”(_|g¥:ù!/ЧËʪç^ª¾zûŠ¥Vî¸U>ýBéü[u ª6|bGuÇ4NÊkÅÁZeºîñ }à4£Aƒ…XZ¿'uIÜ:p÷ƒÞ¿+«kø¡”=Ò†uûÊš[gaõ]OÉ+Šï³Š”mVOKÚÒtã¤Wu̳¾"k¼8®Hµ£¢}LÉm"-®kk²Óx öf‡S´.­taÊtE‰„Á†W—;›§ÓsÒù 6œÁŸ9ƆÛgmýóùìmÊó{-*+óÁbÛœ\ýÿ6. r éÆsмTÇè̳g³»8[ˆ¤éeO{8HþûõÚ ÿËKö…”$Úá +Ç€íU^ÒöÞíM­³Úæ˜f, ÉÏbR<Æ0h½®Æ‘¹áÛŽIÕ¬’˜§Ó ²™æÆë¥¯vD–ö÷¼*nÖŒ“Ë>¼5ibÿo¾ÁñÇí¥¢¬ñèâ;×§i²„$\¹Ú8„Ãe‹55 OjÚޮ׋-¹uö…[«„TDû`åÀyAPU{ïö¦ÖY­¾kýêê85°BbÙˆ9¢]駆?ÇFFnDºuÈCC'^6 2µ/ÔÁ©´Ê ñ–ô›H÷~ÃÇÒ*‡œTí•8­.w2§cÙˆÖ®…SÃÇ þÌ1\vˆˆ?Õ1!ZáÔaT¯ŸùHôMyºûþÝm·T”½]ïàÀE8ƒÓ‡ÇΤ‹’PÊC2cäÍ<á{!"÷镃Ùn¿ßz+‹‡w¥_]§¡}ŒÒÃW1ªgpêhèçNÓÒê—2ÅiRÒ[Û”¹û]ÇœZÛÒ´­C•þX8•8z k»rý±pjëPj>Nw÷QöQ‹38õP¸á þÌ1j2¹A¹ST’YáÎWkn,´z5>R[©í íûw‹ –«¯fU¾¨{=û%•ê«Kºw³lg6]¤Óš¬ãØ<Á‹M*«âRÒÖã NË+Î<üËþÿ¤ŠÂg=q°Ó'ÆK‘j×®»ý~ëm¾aw0¼l4%1‘É•­í‹™2mxÙ¸WÀJÍÓ醗 #ù™cj96yù8*tW8ö`Ö~í‘—Wëæ±¬Ó6ý§§M‡×¸È ‹ÝCLŸ)QU’äYƒµ¿ã“>Ã÷Ÿ²¡Ç³ KCUéÙ´'78°½ãÓëãÝÞÔ:«mŽiÆîOÃñƒ=›ž~ˆAë8þ`nø®b°á8þ0O§ãøƒÁ†3ø3Çv°UTøè–J<"Ö%ÖâÐa‹ÊÊ’Nzy;ì%î)“.¼Tñ‹Lðº¯ÛOöUV]|”¯ù¦w¾z]?[…S¬¼\ëöÞíM­Ã»­hèß¿Ûÿëo|ÎÄH==^²åGÓÿòßYvwµZtïRQøL™ËŸÞÑqº./â)m\CÇÞªz~B-×ojU$¨Ê”\ÏyÐ.iúþÝÞ‘;ÂÙµU¾ÆS=n¤[»ÐTû"Ú+Mß¿TxýÖÍ¡;ÒlÚHªçF¹° Lµó!òÀJp,ô„õ)+ý¦1,…#"Vˆ€ñÒÑ*ì–Û îÿø,9ËH–Šr *Xå¦Úá0m€)àÎò, ¼êy5ð³naÙWþÂ!_^V;wI{qîn¶4¢¹™‡ú|»Ë½””w|öêâç P%{Ê®‚UЙi‹{6–ù.ùÄÀ˜³9<,fèúÁ2ï“ùïοbûŠuÜ–?o+ùîRvAȆ(ÿ•ˆNüÔ{ûùKƒQ[&ZÈEÜ ëZ•ï¿Kç¦ ôÅ‹M£·aÚ Á%­s å«YšÒ7ó¬(‹äpH±ŠºÜ¾Ö=c ¯Bh]90B}k½A–er ò*L²·!òÀ(¿ÌñKßïׯÈì–׫sF¿/{¡ÏÄÜÚëk>ªÖ¾“ɾʲÀïlvɉ(ö´M©›åj€ZÙSöùŽ(+ëÙ‹ Ä•ú÷Zò>ˆ€Ñ@¥òRæ–9sœòù%½»ŸãWŸKü ³hyßæ¯y¦–ë™§Ô ƒŸ˜W‰«Ü‘B„Fä”6x B;E*Sèp¸æ€éàÀr@¬Œ.;bì¤*–¼ÜùèkÛàú;¯,¡5üœ˜ð?“kŸ™Qm—š[Ð5–5£­²Ò'6gd"Z$±v¬_פì’it5L[`:ˆ KÄn0žúhA½°Þ$»ÄÓAÄÂâ!3žú°[ÃÖ˜dWƒx`"¸^½6~õ76êÊ‘.ÃyÆëã—œ2ý·Í$·tÖ÷ß㼉õ6''ÕâZêúµÎ!,leÌfLDZÄidäF¦Ú^٥żaH¿Èౘ“Ú‘)£ zmÕ,cHü¥‹øS[qoÎñz­[/"š@ö™™ƒÖ­[v 4|샾¸¨M[§­ÏÆÅ¸>*rÉ/˜¼qcc}J?¼ÛÛÚ#­µŽwuÿº†xïúµÎá‹Uk.yÛPĨz¬QQsi8Âú­nÜØ†îæ Âù¶ :r¸óÍÍãz§÷Q«Íý…3†Õ-¦œŽ=.kņìÖ*ÔÀ¿["Üò]±Šºá·’Ö¶i{nü§5RÜ«=7Í;a1é2H··©GZql‡i+LQ^>N¹$+K,óò¬}¹öeì|VÏôHÊÊL©ÃA<0ê=µRÔó‘êö4|½—'ƒõ©ptÄ)E ©ðž#"sÖ œ*¸Hpû榌g1XŸ³C‡à´Np7Š6ÄÀ¸(ïÝëêšOKC|EJBtuíꊞ=¬OFPЮg•¸ºÒ¹»ã|f` )u8ŽAàó~šË³±0È2æR–il%lÊS@[´¥îÅ[&z€x`"$ÉÇÛ<£Íiêο3,‹Ù¼ü´¨/tµ^|6ãYøÍRv©édJÝÞÔ:§Õw­—¦c{¹ÞT@(iÈDsÄÒÃWå¨2dŸŽ ŒtKR§¥LJÚcPÙÈäfjÃŽó'lݼ^~rCLLyÜœŽeCvÄF[¹û(½”At:– }Ø¡¨Îáåpøéúòsõ±ï9} Ï÷Ⱦ:Y”­!ìmm^ ·×Mñ§t±[w-ç¹[4Gh9%¨»sÑ™Ç5í é㤠;:†~X^q¡´ìÔÿ_Æ.u$M£Ûï·ÞÊâwŠ?­¸Æú£ƒÇüÁƒHĨzà 2;ð"QQs o þ`åè;´ÚÀ¦ô¸9; þ`åè?¢Öð gÖéZÁàå`åˆÝ)ÌP¦«hU  qµ¥ן|š=*HXÙ;¬æ ßPÔ n=¶i,øƒ•ãVÒÚÿü2q¯xØînÜPý¦2]"ȳ¡‡f´Ón¿ßz›D@–ĦøÜ³‰‰»´îå/gÊ4ƒ7g§8à0*§ß 8ô‘i5Š@†¸é?ŽF}ò”Ök*m²‚ôÊ1hgg…gM{ïö¦ÖYmsL3ö >e°gÓÓ1hÝÍKÁÜ(ÆäSOfët|0ØpfŽƒ;y9%©n5Â0¦qðñ(_£ ÊíÊžÝ6:k`¶ ».˜ÐÎÐКÏJÖŒ·~FVë3ÿFæ`7ëE]ݸƒîyBP{Í#‚™êIY52JæSësÙ+ÄÀXø¾ì[!!*Íx´¢xiw÷ŽvFU½^jïäÞ9¹¦í0ØÛ‰>þ“[ –Ù…|;`êúðÐÙƒê× ˜£{ip—–¾²VNÚ8y¿7±ß\žÙÎ8o­Ú’,ËVfÏ··gý4ÐOÈ1ºžHÑ$ÏNš]>²ÄC 8ç.ß÷îõâ ÒM‹Ö\ûf·QGøƒª¥ýk·V„ü6äù)s½èqgfìLèóvÏ0®¨©RiÅ¢¨HææVѽÅçÿU¹å@å)vÁïtðêédi„u®fUU°+\ËPˆ† aÃBœ~ìkÏÞ'DöֈLjøÖl„ø¶¾\±«³PÅG½ºžÍJHˆ[y2õœ”²´w{e\ÿ%AZœpeIô#6Z#sãOΈeý9rÜX¾*éÊÅ÷&ÆÔP–ÏyÏYBò6¾òöö°:²Î&ø‡ïúïœ=V€UÍúúuÞÚ=¬*¼‡Êšc¤õã·“Öš[v!ñ–’Š,Ÿéà:ˉþ³pl£nXýé§|~õ§rgçzo/É¥ø€_~™¶8ð(Jí®Xünÿ +Û8˜"Oš4´¼c¹É® `4Ô´r~AQp¼?z~ÁÚ}5-Õ©éo”Ö\¿p+ßÃûFçW^ØcE¦Ýº4uÏåAïì*·åX>R¡n©ÚÜk¯^³#´“>ªòÍYâ^i¯5™zýÜÄ熾ÅvÎuËôk‡Œ;ðÁ’÷Oª4³I¤!6Mçï >^¨ sxò7ØêÌM›û¹ý‰¼âÒå ¥Ý†ºuÑ-«odnZÖ§ÕÏ­^–9kFÑða¸¨ž”­—›naÀ†á¡ÞÆìëWçÑói ‡°[+«AuyÜo_ùô@MÄd÷黓Æ-èÔ¸à*M¦\<5ë¦ÃúW»ŒºŠË¾pœW?ëüH…i¤™ïFIgÎè³1^ûŠm¾ÛºçÜt_SðØl¡H`mÓGµÁ;þ“ë½ØÄã#‰„ÆC…*“óÕ êûš®vOÕL¹c{¹l‚àŸÇ¶lªC¤òP5ŸLV:9ê•ãRMúêâOÅ"ÿk»-+ÄÅe¾F'\µÚ'#î²òœz xþ<‘&´‚x€QA ±—zÞ\êçí}:O ¸œ‘£Ñ‹•}.:2Ñòó×úh•C™7aÕ‰sÚ_°ãÝèäÑ ieå×»’\Çœnݰ@}ûÕŠœÑKÅh¿æüñ;ÏtÁ[yâÛÏæ‡}†K|¾\ô£S9‰›Í*²D»Ÿ>s‰p¦Þ¾U=àIUD‘³ìô¡[8ò˜=À˯É”¬º*–m½¸êz¯¯†Ò컵ÍvçÁô÷}Ÿ¥|¶(,46‡9OÚ¶½ÆÎ®ÂÑñtÐÍÅ' V—‚R „ÅŠªWû¬¹’÷µŸl‡^¼‘”*öô¿Q…¦VSõùUËuoö›`­»¹ˆï¹wí²þÿÛ;¸&ŽöO²¹CH È}ã*Š(ˆŠx_TQ[µ·öRßÞö°§ÚZkµ·ý¿m­õmµž¨ˆ7 XD Ü7áÎIŽMvÿ‚Šhµ*dƒÌ÷³Ÿ0™ ûìÎì>¿}vfwÒÎ¥¼`ŽN—ù‚äðßy¡ÑÛ¼T]s­þú2Ëóèæ— :eÊ™“Oÿyyö«ÃüžõÇŸiWV?{bÅ®ß"mí†,ÃiAèí÷—2ŸÝl¼ò)ö`Ó¨³<×F¯¢³“rKk7\j)r3™Â ¹å*»'ár¥üÌʬ—]Õ®[=~t`šWVÖbm1¡i'^ Q¨WøE+Eã£þÜùß•+ ôG|HíÆÌ´Ý ‚J²¶)$äÃÔcä˜N=f¿1gÎ6²ö=ý´ÝÓ–ÄF¿Qùý­ÅAÇ<äæD¦òïÐоh§5¸„=ãxè’Ób÷F?_ØñëŸëg€õ¾s^|å S¼2"~ƒ€-M?̱¹àÈ Û7Oâ»fuNÈi¹š³Ïù@ççß9ôNäc£:KÚãúÇÆ‚}é×ÿ×¾6¶é‡áuõ{¹ò„#[E£k“)@´l¬t[É~ºô!±@5Ó‚E×ò‚JÅ$‡s˜®à@‹*Ê#ä½ÖíÑåoä=å1ÿÿBÑ*[òvfƒºÎÿ £’Ý#Õ>(øÝ‡_‰ó…ã€ü‰ÝƒøùÂ㳚ž¦,ý+™­ •uçÿ‘¾w÷s­·OÞZ?Í<3íík'eš\3?^¿rõë$þ DMQÞ„”yÈÍ.ìæ$ä OHNh‰NrÑSÕ–¶º FÏå&}¬Ÿ6ukVΦ” 8åäyê5æ|W {¤€*ðõkº– Z㊳YëÕL# Vém*Œhs^NN?«£Ü33?gŽ-˜c^ÆHбr©¹×6ÅzG ¥JÇ#Š5eàŸ“å n «<Î'0YƒÏS  Î';^÷¿çN†ò—°™n™WÖ4<ÈÍ ÓVÅX]yá½ZLXŽkªÓÓÌm_ƒ0Jù§Ë ¦_™þ¦ú™…){dé'êE"çæ&RõãÌuÞï‘j¹ÉÃÿêïÇ1ýo<Ä•X•DQsÆ51qÐãU"ÇÍÆô÷þñ0}Üå\ëÕÓ°};¼mô5(†„{XeÓˆ¢áh…÷•y Tn¢šg.6‘­Rœòy—'|w(PÔ9|kz„;W#ŒÊñ“j÷î^}Be´ó;=7¼áý‡ÉÜ·™ßW]l(ª(ª’±[-í²ÊYU¥Æ©¦4¬´\Œ}é±Ä¿²Ê¡­­ØÝ½ÈÃ¥Y¿Ò¹»óRӈ̲½˜“ަ»lI‘jÔÈGþ0„âô9pgºj]õ ™×¡ê׎}ìbv®¹Øó·cÖ…Íø_،ΛY@gîÇ9ž§–þçTOlÿ–ð·SÒ^×"Ú"›¢Ý¼|]1ëâ¬MG7æÏ+/E£]óñ¶ºêG›Ÿß–g~kÇ Ï+¬ÈÚÿs‰]úþ°Ã¦ºJ8H—J•£¡x@ ÞÅ¿¸84ÑaíFðÂÏ¿$‹*òó3–ŠÙµvøè˾eeö­m-öö¥Þ^è#Ô‹RРڄ÷ª9ÕžjÏØâØÅ»7h>» e Ö¾õtÑ—M4«`iö…çyŸñ¥/¯*âÉø…]TL(GÅ–M“ùÈ·P< 2g%ÎÞ¹K †iÛ:ç%;wý½Úó°kã=±õ§6;A£ƒƒ_iÉ”“'ÿš÷X½X|W†¢ÿFcþe±^ —Þ@o(g••1Ëêuíc¼Õ>SꦎJéYèyaÒ…Zïº>ÖxFå¾" M;\ÅHG_Eë›Tᣈ˜£?(„dv}L|ò@6ñY6ˆÁ/CScÍÏXubë™qQ¹C†˜‹…\¾³ùßlîß9 ¶9:úŸY¸go7i)¯qiC|¤7JzI•~q{±:}¸."Æ21§ÖÞS|pBjšCss“H”)ñó{˜½ÓP5 Ä¥8½¡žQWI­aÙ^¸[˜j¤§ÎÓK¿\{„[%ù`×mkã€á™)ynZŠÆ$S$A¤5T­–jú4}¥jÍ!2¢à`¾Q 0ð‰ÏšA1ƒ€rãX®:Â!Q9!ÕQ¼ÔîŒÓ±‡Úyí}´á°öæíMz9kÛtÛuB6б(… > _;C †W7L”¾Í“fí"žÿí®ý¯¿-‹J€*±Z ­¡ªffLÈÉô’º)u‰—\EªkͺÁ#å' CƒÒ:û™¿|  ^‹ÿ~8…e@¾ŸD8oFÅ”¬O»ÚÝøBÁkµÈaÆS±¯¦›2·Wʺ<ôg×NÄRó€].ÏÈF.0²M ”HLiƒ-@EµSâ4%5wÙ[CåÈê×R¼¯4>ŸÖ~n{Ÿm7¼¾¬&ßù/ªlìŠIýóÐ…âIÈé;- It y_îTŸµ¨ÒVíÈXuHrù2"ÐÕpæ^*—­— >8ò\DÙØtïSq9ƒ )á™·-¹åžÉÓ;v¤•DÅìf.Y;ò·1U'º‹ÿk{zØp•ûߟš3F–‡gz‘»,í« 2i×b5..[Ÿ}æû@€I,²{î¬éæX¦Û‘‰…‘é>’ e}¸Ù°ö§)¼†yޝöϰŠB>E~~E¯'ÝtM­;—Î^¸gohÞåG§ÆF¾\±#üUB9Ì=§Ä²Ž>ýdù)³Æ˜ÿ14/(Y"ˆ_o”œ¼!Ÿ¶¿[1—&U­!:z³þd\â-ͰGgîŽÌUTöc×mK×có€›»UÌ}'ŲI_(1s¯é‹MV©kε?¬Xñô\Ÿ~{ÜBñ€@¬©“Ó÷Ë—y——‹ZZK½¼Ê¼¼(>f= ~5©B\»Öi×üyÝ4†È¡9t-y<H$¯=–ºñöb’U½£áÐã²9µ‘;¶ŽOMslnn‰LøúöÔqjíÍÊa6G˜¶ùÛAÑÅÅÑ÷ Wàó¼CûmØÅ±b'E§Küý%7¾Gt}ƒ)¡ z©t×ÓNÝKVû€ïÑ;s¶¨6ûz1o©ŽðéÀï!‡çþºÈ[ÞÀêî]Œ~ßÛeSéF>"ºV²>Þ£?ŸP< GKc®䟸¸¶™7œ! M¾ Ë7|:¤Ý¦l“Bø¾¨ßVrOåhý?ÉW’¯>ðù²ú6ÿg1‘#Ü » šW8«ßüõ]‰˜ñÉ)—ƵÆÀ©¶P< ò´¡mË/?»ÜÙ@z„ÛafæbyÄTÇ~^'ð¶Ü -¦]uõ•IüɓޘåšÁ(œ­ÜÇ-<ª€âÑóÜq^[ËP^Dæ]Èç“h½²„M–i[œ LBf£Ì%Ëô×I$îø×X­{{N·¤rꃞ}öyæP±^?àõàÆµFÇ÷RôƒÜs­«õ^ŠbÒšê22ýˆŸß4­×V²È2Mb‹T•‘9Ñ…÷d²L‹"IÜqg1™ÖÝÜ&XÀŠÆ¨YyõeÇjÇ7ß|£:X[¹õŸe+oNµ%ôC™­ïoçZWë´_µYšN¤{úa~ÁFKʆ9ìH=fãæ­÷ò·h»úûOž:æ!/*:’Ÿ¿×¢²QÁª,5…é§í\=µ>KLdµ¸Y6ÌaÇÙ£\woÔ;À¢îã=% À4ø´©[KËŽI$ –” sØ1bØ'õÒ´Úº“–•(³õ°áŸÖKSkj-jÝÝm‚WGØ1.rSUuryÅ‘^2¤6ªW\zÉ3Ïó½3ï!ÑýœYòV‡Ê"'S”_4HÖ8µÁÂŽ›Äsívë=,ÄJ‰¥çX¿+o=±Ê5EeyA&ƒXåHHxÚòÖ Á B9"&¶YØ4‰-nò#Þ(±Ê=Umyë„` ¡IG_°°iiC±Ê‘•óåwœ b!”ãböÍêdb!”#%íõÞ³"Ce¯d¼00càÛôÕÔítÐq·†oßD,„rxø_µüŽ“{®Ýn½WF[YX»bဣ×®í!Ѻ‡¯†,Ó$¶8ÁÃ\¦Ílf—žž™×yËu)Ê\t1ß_…iùng"Ærçbÿ¼‰äY;náKþÛ¬Ÿ ÑzYù‘Þ[y…ª|Åù—¦žŸúBìËÔðî} v¢wœÜs­«õ^B ÈÚ7"ø ±f‹‹“H´îê¡%Ë4‰-nŽ?üÖ„Nuvß© §^º™…6•Ú$Í|òkŽQ\v~ÅÙŒ‚E%ô»ÄÇÉÚq"ø ±Úë¥dZ¯®I¾WŠÅlê…ôƒ©ÍÑÃí}ÍT­–—~žYU¥óð0Ï ›YšñnÉê¹+g¿ìï°^[û&wœÜs­«uøœr+t—ÝQ.&߃錢g±Úá€ö> óÆQëãÖ{1Òì~k va¡çª×ô\µ¾¾¼´s.6~¶lò·¬ý_ŒxkäY¬ wŠrúŠ×·÷'ˆSÂÜÕ¬‘>näÜ41:§à€F1°qÐUˆ˜ƒPކ—_l5“øÚ®i߸ײríöíî»LóƒõŹž›–/§¢ÊÀ¼ÓÏž½zinˆ} :ŠªÞ‹¹t¼¹W48Üú;ïïtÔÅŬ%’â7 ^† ;u’¡t®•(}[<ômÿù:kõÁÖÝ3{ ‹×Ñ}*þæñ)—Ìݧúª·ÿL¼YaŒÏ·Èsž}‡±ŠÚCº/ÑÁdôï^³ù2ÖvÛO£ó ’^+r0„Hïòø…—ÈPgJµÇj+=ñÎëÚ6Ä!nWK¡01Å0´~†Á» vn—q“"]N5(0á!£?¢´ëò3³ºZàáØ›Ù?dÊw½Ecæ’9xíÌÊJ‹¹¸ÖŒù?Dû0)ˆðfÚÿ¼ó‘ûÞ«ÄÑ6nñg'ƒXÖ]¿Vsê*×îË02@M¹GfO¢Ô*S÷ŸxªËÈK†û†§ž2;×ÜCo(Ê-õDšLÙ I‚à­]ò ÈÏØþä >\¤"¡7ê ÐúÙ9ÊÜ!Þµ4ßµ«Î滟%¸r†¦À$!Ì®½«ì| Ò—Äb”fºóq†ƒXÛýÊÒËÐ+:ªã ›ª`Ü6p‹xèÜÝë²NŒ?³€8µ¿º-LdŠ6Ø’"Õ¨‘rqåÿuÞ-"HuóåǨ8þÓã{ȵ±SbÍ"X×–ö#h¢J2ЉÈÚ‘T…èºrHXÒküé΢ó¾ùF|™ÖÏ]TL(GÅ–M“ÙëºfÌ:»ã;~\âpAÍI•Áíæ žL·­v~ÏM^°v°Ðªï[Y_? &ÕkK‡ý:Ñ[@16µ(õæLÉÁUÝ3-Š6(¿NáïSOòÀ è©C6´ÖKÚ^Á8/}GÓA'aÕçWÍõM;U±aeXÇ!U¯"U+‘ÆpŠ©ÏIESÿétê¨øhõ¥”ñ ‹•$ìk^²u7-]L¤5ذæâåu#~õµ£oz3ÖÌg7™Ò¯MŸâr6aÛ·ÍF«®^ë‹<ôuúzÉþ¡ëöwf|4mÁê—3sr+rnÍü()ÀRÂLm¯i²Mç‘Üš4£ûptQ(fCÁ-5lüƒJˆz +UŽ&Ú€cˆaŒNê‰[ðÎÆØ¡âuôù¢ñ6 ê?gÞ-Æ-zö‹Ý^¦”Ço-)¸~ŒQÔe±{"«ÛÕn£÷Ä/áÜsE¸ÎÈ9¤åa€‡hæ°ÛÝIê¨ÓQuç첯ò¯pe£7N|l웊é#Dœ!má©•æÈv}°»óëÕw&uí§qƒƼžžõg ú¦ÈЇ‰[Ÿx°fÚ>Z¹ºã­5Ú#¿oø~ÔÛ&‘ø\y=¸™i±ÓQXYà*t‰Cv5Û_7¦•³3}ÚºówÄ!ƒÊñ`ÇýÑc¬µŸç€Í˜qNS>î ˆ”ævŒ¦ÒÕ{ã–½§MÕ/±m1©…šuÌ»ÀôÿeÍû& ùæB×+;ÏäÄÁÂ9¹œø}îißofzÜ#ôÅé´l=]þ&×ó’tô¥,ÔÂ/¾F©è%þ¥L»\9dTå²QF éMB¢ñÎ7DiÿòÉ7Ü2° Ó••¤|#µiO·î“ú‘®˜‡êþù¸1`SDHÔa.*Ëtׇ꺫ýõQ¹\ôƒµ†%‹„ï4âžSÚ{ÉÅãþ¡'åÌí˜yå9€de‡gÍÈš:õŠ»û®îæP]PÇ ê° 8Yt¶°O±ø¿h¢µþx¯8´y`%3gœ‰¨Â‡êþ*t@=jîáਵ¸1”Žr…CײÛÍ8êÒ›ç‘íÅP•Sæ^cò̈ö2(Ëu><í«^ž†RƒõVïõ¡ºkV±õ\2ãÉÿˆ¬ûéTëÖô¥NÿW™=„i¨î1›îoÆ¥ ÎY`ù½7 Õ½a”:©P “ˆ9neFVÖƒ‹‡y¨îm‡Ò2û8˜Z¨eWؘ\šÑFÔ®ËãÞû5K˜˜‚äèž4L޲ê0¼½—·‘PŽi‰£wÍKʘXÀ•ŒÏžèÛð–PBQR¬ph;kæ³ëgÞLoÖ¯ÜÂX·YÕ'y@úT‰ÄœÈû”uŒ‚2Pågâ°rzŠ!œ¥= áoÖWºžKé]޼4(uù_9ÕÁU‘Ûÿúä§Hé0·b«8ú,P< ý,0ÉÊ&þ Çdz‚sÞÌ󞇅o½¯‹ÜŵgÑX¾Óª›êr[XG•°DÕÌaÚ©ÿÅhM6Òþ¸ oàƒíOFƒ wÔCIS^³½vÍöª ]suÒìc›\š„;¢%CÜ à£´ýB<$ùIÉÇ×Êå—þîð¸˜wü-4Á'ýèqÖ:S÷)oltïtŸÞŒã'¸ŸmÏ»è‰êwÞÖOŽ…‡iÏ¢}ÿîÓ´,D”š„1VHu§ ­AÓÊl+æ;su\¯F/µ#p4ËxKW³Ã•Ñr©^\ÞÙjR/A£¸qÈùG¹âè¢|wm\Fiv¬Ø9#å>³é_öèâ cÔ2™mÿò¹$:ŠTV‰d²&;A‘‡J»³§jGÚK8Å¥¬ÒfVËø+Ñ?œþAˆ ùí9?)²`öß$‡sÿ‡•PS•J|¦¥ñJÊ'L~? xZß=¬H< ¯Ùñó\sº®&{çoó=µ×úAO:f×Ù}Jëè>͈‰É0€å8vœ?‘)õ< e_âÏ[(ß» êGÏb˜:E°—µîsjAtqÊÇW™\gÒYÎÀÙYá&‰kq5P·°Z*¥Î¥LÓ¥ÍÕ^cÏ\ž‘Gw¬;} úA(ÇÜãĦXG`ucT.¨T ;Çæ‚;eÞ%n¸9Tx}±öú€]FùÄéWw|ó Mû€ð=ñî÷~ÊgþÏl—bdÈçÒ±ód™kc㓇[ù¶R¡(°¢|öÙ”í3gÔ::Þ( ªF¬±„W\a_u9ê™Òg\P×—–ÜYyx½ó´Äчf§š‘$6õ$Í8o%úQS•rúØ+ ªšª¬ßÿ;géó }W?¬H<ˆ˜£[NÊ©Ï, ìuÝ»Ogçæ’%ÜϾ¸-gÞÐÕÔ)ætÃQ.8z¨»Ó£à€  w¹{dSCÉÐbšVVk .×õR«oBRÈ/ƒKt¶±%‚?g$!öxù‚¢¾eeö­m-öö¥Þ^(ýáFhšGåv玙ÿŒy¨îíZÀõ=öôëÇþýz(ºÅ<ÝýÖ¡'F‡g›sFäç/M<òåãKdz]5³êšÓ55S=¬|Ø„Ú N@,ËÚFÈÚ€Ì\ضÁá†Z˜ôcÆy©ƒÂ:Ä#7ûÇÛ^ßJrZJêé3Ö°)rùz¿åÑq …Áç¿ÛÛvßY¿ž¡7Ù¥lµ®¶Á;^™¡g0>{÷]±&¸­\–”%ÓÊЖaåßù-vÕÄ55×à @Œ"W£ÐÍ(í(÷šQH,•ÆïÞÝ&49::46 d²=ññR±¸ßÖm`aáÈ ~òI“÷7`2¹¬¯•²Ž_rCÝ[¼¶ôƼyv<ŒŽõ¹]3»¸-à?…ÿèâ>ê oD£ÆŽ&–n¹¤Ì±þãæD"”»%zuú⫽î7iGÁŬÎÚtÈŽ Ó^øÛòATûÌuaÔ‹·T-d蛾kë–otk°N˜Ž™õ /¼Éø£’²¼Uú4²b½±t¢©Îkº&i+ªÕ”]E/ë¨u€¦`±îáÎõñá{ }CÅÜýØ´ëç´·ßÆÏ×Ù,Œ·17÷®ÝÏmØØz> gYâ!ØóÉöáã[I©öŒ3ö·W{£Jžµé­ÿ ÷¸¯Õâ”Æ`fP+biѸ1ÂQ¬Þî)ë§1¬ÓÅÊÑ«ç{žhVtÛjÂä÷ÿ9§¬±€]ôÃ÷™3n±‹~´†¬J°ªÜS9ðŸìg?á‘^écJ»¼ðÄÍë0†•·¶¥×äæšEr®þÜÁÊÝj¬Á@•!˜-—ê$¤»„¶°Ñ¸!ˆ=¤.?ÄÑ—EchƳþø“‘|V7mÊ}mÏñÿ‰Æð†Ïw6ÍÞSßô·rÊÿûÝ/æñÜÏ¿ IŠ þêÕoéè–é‰WM3l^çÆäì­o:§œ|ÛÆ´Ôé5—ÏVæd7\.U5éËQ¤Å‘/ˆj3ŽpŒ}ËcÅ,ÿ1<‡(ÉŠ™ŒÎdìãÇ Y.®·.»­gS‚§-}>!ùøºÚê &výG­AŸS_|©A’ßRl¨J<æg¸teƒoT9¿o¯µwW9d®³):!bˆœØN"žƒÈÎA,;89r¹ÿô.SÂY3W¨²A=¡„ri‡oy÷­ÇŽ ¨B.”5lnÕÔ*ÚvÈ55ç=¢g9jµ —êàm;dŠ0N(þbœ¯ ŸÛ½‚8@·g3~í÷Ø Ô+W åÐíÞ ØÂ‹‰MÝãi 2RIâ-âGS< ~…qÒDÎK«»vkÆ#â<ÀÙ+5…[¨iÝöÑû<”:¥¢Q®lQªZ”mmm*…R©R©[T ­B¦kSU5^*Mk{Ñxu•\wÜæA̳—á×F@½µ§ÁünWªP0°ü–_Ø(`¡WŒ;BMš§cÑÃÀ¸Z.‚!œbÓnc£µ±Ñ˜"“XD"Ík百j¸|µ`ßhuÛãÈ ±Ý g{âÓ–Õù^ÄŒ3ö.ü;w5aC‡hr³SÉÔ¢btÂSÌÁ†¯´‡â@n^es.¾½7rCëφ  Z~>RS+ÿ}Û?õ–ó˜<ž¸Ýyeæ»UuKË ûÖæFÿÇ]èÖan?>†žs©ktxhkòÉسœ½ÿ;O·ÀfØhçûû6Û8sº!P< È‘{m=ŸÆ8s))ÕDGéÇG?Ø8+³rš;ß9;¬þFÿÇ}­D½ú-Aü¢[rÞyNfå 6fÒ<眎1÷Àæ†â@z B-t=,¢ùo¥èÛÎÑV¦>s`mîSBÖþhº?[ïÏÕ^BžõªR‰;N®õx´“m½WÄ£¢˜´€†DÓýÙz¿®öÒNæÚJ‰;^WÅêŸÕL¯ˆ±ê“¦É”L3åZX!I4ÝŸ­÷ïjGN2ÍNA|–XÔ:!ç“íAÇ;Õ-ÔU²2Θ¬ŸUeœþSíÐÉtµÞÃ/FôôÈ¥çXï¦û³õþ]íFb!\XÌ,½…M»zh‰…PŽÑZ-¿ã.Zb!”£ë\ ý¡Ú¡“éj½W" ¿`Ò&q!Ñt¶ÞŸ«Ý—<ëî>í$î8¹Ö}áÑN¶õ^B ÈÚ7M÷gëýºÚ}I;™‰àƒÄwq×öÏj‡N¦Å@ 6P< Å@ P< Å@ P< Å@ (â@ ëàÿõ5<ñ endstream endobj 414 0 obj <>/Filter/FlateDecode/Length 29165>> stream xÚì@Ç÷Çg¯ÃÝÑ{ïÕ‚¢¨ˆØ bÁDKìFM3ÅýÅÄhLÿ'ÑT[ìQ½ Æ†XÁ‚Hï½Üq×wÿs*¢1áö¸{Ÿ\Ö¹ánß̼½ùî›Ý!(%zˆûÙCǪM|³ìó÷–þ.ë4ÖÞf7YëÐìPq}Â_ÃÙçDý“u>ÁydŸl€g 0ñÈJgÒUM›²uhv¨84»©YoñÈÏ¢- ¡Ñ´)[‡f‡ŠC³›šuF›ïúÄ~6jYÓ³BÒhÚ”­C³C³C³›¦uVÛðò'ñ‹–‹Q4š6eëÐìÐìÐì¦i½]" ÿ ]Q¦MÙ:4;TšÝÔ¬·‹x`¢«n4š6eëÐìPqhvS³·êO ˆðÔ°  î#>ȳz~¬6Õ_!:¡±Ôå*ˆí ¹ïüƨРÇõw[•“½õVFëÂPDÒJΤ¥Ì5h±âÏ%¤-Èÿ3@IÛ?‰|{yœ‚ê<^µîu/+]&ûÃ5Ì‚™ú*Lk»”„±íc·kE*Êo˜zå:U¬3ø €ÈÃÀ°-§”û·ï#[ö’óœ7’«Óe²jÙ¯™oþ)Ñ_aE=PE:kú×èÕ“²ú|EìÎÇ ðÚ³ ¹Â:j‘¿8_&ÉSL®dOüŒ!kÎTïÍz S_…imWz•uÎ]uº¬±±Xñ±-kÖL)¸ ñè°mIGÂ4Ah_N~›¾ÂÈó•Áêi=(¡#9muf!=ƒ”Û>.õq¢®äŒéTC6¡jÎÔt{0S_…imW8@¹ö¯b²‡‹ìÜ(, 8ÿ ^WÕ¶—x½Í”q"TWŽ“< ãNÚÜfý~œíAlßÄÌcªqÿbNzf()ãçUDäÿHÁ¿eê¿0÷0y½U—âé<ü"§@•Åž»†úê‚LR,ÿJÈš³š¡¤¯0ÜNêß^EßD™ C9Év´¿M:ëFÆ/S¸„+K1›IKa´˜ŠÆúLÅûˆ5óg:?€Èã)hÌdäú¨_ §õÒ,jÅ&BöâÐ&öT¿Åi¯œzw­ç¡ÏÚY×[íÀ=çª<û“Æ™y/“ñõxî·2õR˜°K ¡—æõרŸ·²÷è;ü"§8Ùw#­o³vÜ ª;6Öa—öþNIÜØÊ~ýùöú‘g¬c|ï®<»FãÎn™É]íö@¦¾ ÓÚ®ä{ñ6F… I ˜?ÿD¸DQ0J @äapÜ¿Uq­8wï‘í¬^ÿ*gz?³Jä9Lµå= :ß¿U·EaÐÝL«PÍÿö(gºƒÓž I"gE%!-Mï#”e j3m&’¸Ûîg:1ôS˜ÖvºhÜ7pf1ê9TŸ©ª?Àéâax4Ýûмc ªÿGŠüh)ÌC¹ÌÚÖã45ò£=nI¾ºQþêFð`hÀ°â´?0l¥…yø{Ù Æí 28Èqø'hì0)ŒjéMìHpx ò0¼~äÐaî¨8FR2’Jñ¶÷ŠQøÇl …Ái ×NɇÀãˆG‡ŸôýkŽi<®w.V~ã‘Ëáê–«¥…°°¥'öëÏ\ì­;: %VßËKFkhº#rNÓ« j¾vK¦fèÍ4:]ŸÖ ËãïÞOêßãô:ÝDŽ·§µÞÞk«ý³t+Ó>¼wZ–ÉÕñͲÏ,Z¨?{QòÕ–¿Þ\;»OGÒÅãâ6Æ~ÚuõúýZh@äà:=X¿pÒšF§ãC.z„ÔÔ<Žùþ|šUVÒï5¬^?Ö[Ðåtz;:­¯Ñnc½] Ö†‡a+$ÿpq«œ}aat¦añ­sþ·|dÄÏxqi«œÆ%‹ÁG€áâT1Ã¥{w«{†ã4Þ^úèpª›]…Q&Þ½SÞ][˜ðîâ¿þP>2bWôˆ•ìùSÝ£©0=Â%{w©†  ¦7‘œ;ƒ´3 ©§ùFI¬ugþÆ ¼UB?b 1\œp 'ð{¼€x â€x ˆâ€xˆâ€x ˆ<–—MY—4yýaÕ˜EûyM”¨(ñÍç÷T6â7ý^üäHs>`‘Ç#×µ}J(EÁŠ¿®¸E:Í9jñÕéœg÷ž“÷¿/$ùhåÈËäÐØš¡¡h´^mF—é¶ðøÇdžŸÅ¥±âô:Fë&[ñVÖísL?ënIñŸ÷f†O\h%«§tYšÜ”s©c¿éêbÇ"þñ‹E¹tö#þþt® QR@[ öìLÖéÅytнN§ÑºÉV¼•uV›ïZ'M'ö³½üIÿÍØ A•žÛqÐb̾0ËâÓ jW]®*¿¸^ÀMyî›ÍÉJËAý&mŠö²&ìAtg  ñw¥w€RŸm25­Cž™y8=}·^e#ŸW£ ;.œ´võ’{úÊôy0=»ÇŸE6LÓéX6taGâq 7o…—¿BÏ=N§ÑºÉVü‘ÖÛXÄðNu««ãí¬Y®”,ï¾a°¡©ª‘Üë(R]Ùàú¯-Ë™ÕOse÷ªJõßÃ}Gô)Nà­ž; î;ö훉x«gåÀ`Áˆ\‡x«Oåh?&ët,QÃêqoõ¬´;Fë&[ñGZo— æÏT1e’BYvgO×Ïö4gÜþd¤öÚ8ÓÞκ‡[÷î|.aÞ}†Ý©mb5r|¨øúïAZ’–¶‹Fëž~2ºLëÿP§7ýž4Vœ^§ÓhÝd+ÞÊ:«}Žiò¿™7Z`õÉ‚E µiùá-_ýÜëݵñÀ ïÚÄk×½{º‹®mªô±b=úT”Æ–ÍÊ:B£uWO9}½IcÅMÖé8þ ±âô:Fë&[ñVÖ ùVÝVð݇á²í…oU0mbNzþ•À¸0ì˜;miì½w óþçf§Ð +ãxÄãqà˜£UÎÙ¿¿€x<ŽªÊ;­rª+3ÀC ÃÁ1¨UŽýC9ˆÇ ¾¤UNÿ!ÿ€x<ŽÀ‘Ó^ÞçæÑ“ 8®îá“fþå8 <`€Ö­ºX?ðë›eŸÏ~m!ø"ÄñÄ0$X÷–5oʼnýlºÊ¶4!žÓ ñ¼‹ÛHWÝ/œ´~dZ?Ðèô{ojÇ$·h•0§Ó{¼¬õö.X[íŸååO>¼®!Þ»n­sZøfÙçÍËÐê™M(z„÷&ûöͤ¥â¸ ‹\×üæwt?­/Ý¢ÑéøÃoj×9=jX½6µ5'ô«[t9ÞN†Nëk´›ÇXoׂµaÅaØ ñ@<ÄñÄñ@<ñ@<ÄñÀÐÄã‘ëÚꇼL­:FëÙft™¦Ñã¦ìôü,.§×é4Z7ÙŠ·²ÎhŸc𶀦(—Î~Äß$ÖK xôõbt†°&ëôâ<:Ń^§ÓhÝd+ÞÊ:£Íw­[]oõ¬¸IˆàÞêÿT4 6.n#jZ’:$d¼¾e#Ÿwá¤5jZ‡¼ ÇLÏ]7e§cÙH›²Ó½ü4Vœ^§ÓhÝd+ÞÊ:£}Ži’®ºáóP[6+ëÖ]=åôõb$7Y§ãàƒÆŠÓët­›lÅ[Y‡[u€§Äñ@<À`A€©C©n_»òîá[gê4Vξ‹^ðš'W{^I).=³àDNZ#~ãúÇcG5Mb@JOß0ã\^ßûÝf}ê'xâÖäù1‹$hS®‹û -â@FQ±î6gÎì©ÚQ×O¼°%¹ï¢¾ÝÙdÑ•ãÌ>{uæ‹.f\âÞ§%ç¦:¬~onXÙ¾{ŽxkRô“>ÜÏó:úý«Z Y~Z½£ÃV`òðܾ{©ç8Ws>—¤×hÒÔï”ÏŽˆy³,¦)—}vû¦I“gìx"ýhaˆ®u)hàìɯZÒ*sÏÎy —d@ã€x<šþƒßǯ{ou‘Çs×@Ë€x`üßgW¬YCÇzëÞžØ}9¥|Éò¨úüô#§Ž­¨¬Èpp 4|I`ÈHœY\˜ü¯cVûçÝpŒ¶ê=ÅK÷öÒïùå "þÈží^ÚvhñÈÏbdk‹Ð¢ì4„_AdcëørÕæ[L—Þ>¥—rWÕŠß´çëáxS—¯ÍâEøÎšoFæ”ĺú+"ÚaGûc¬·wÁÚjÿ,ݲæïÆkYß,û|Á¢…4Þ„¢GHqo²oßLZ*Ž»°ÈÁuÍo~G÷ÓúÒ-Ž9Üø¦æqÓ³r¿Ó¦ÌQs¢ª2ö‹ˆ, 2cSClÈ~\DPÄê"FÎÝìîd(ñÔ¦–h1õyʼnaÛþ>nGM¨o(áþ\rú>Lìl•“š:›¤^|B[Y#ÝG­Š:}!a`RС‘‰Y‘ Z•[°ª½›wˆ9ֽ˥ñ4È^U’YpÑ$>žoöXCËwh7ù­µëϰ ûv¶ÃFC\£Þöä *–›j>Τ›¶;§f¸þ͸^N!‘CXNîv#ß>ë=¨€Yä`Qa]QiUYcQSi])1“HͤsíVÁ«WH}÷´«Á› ú ‘MwÚR,D6ÍŽH±‘ÆiÌÙ´Õð‘Ê i,wcY¯ü…g:W[Iƒ*,J¹ÖˆÒc¨X‚ê¸È­Ú0lÔ8ÛæŽÖ[@8HP¥í ÿ3$B9r"I&K§JòD>™ÌŠï_®\­6³Q[UB¾šÏWññÖŠ´âj¸\—SËaûXT«iÛWh‡ºí5Tœ’¡}Ôœ$HC{>‹· ¦BÁPÈ™r³VÎ)•šKYR†l·wã‘ÑBßRo+™­‰—Ù·ßÛñ,¸.qànZ; DQ}(df†Ã‹ƒYì>êHÔÁØ‘×mI=Ç#×:!âÒ ¯’\Ù•FFC@q€Ož áêbébæjN1š•Ò¾¤dÔ†õ¶65NÎ^·oGïÝwhÖÌ*W×§m´¢:´N‚žsA`0=å *ê‰Íhœ¥½ÄOPóݵ#GjÝ3vU£šÒé›7‰mlkœ½3î ØàÀôé•®.ø3©TÉ9*¥“FòÄöJß~ȯ›&ÊAåxó†MŸ¾%äÏHŽ%¨jB§V)0ÿûòBÔ‚¸ŒP-þ4EõÒæ<‚ ÇC#I× •…6`e{nv÷^Ss VɬԵ´Æ¼ú¦ê柖hÔš ª _Ÿ·Ày憗FŒ¸Ý³‡n'ÁIÉ£6nÚúÁûOäÖ¡ß$èÔ”ÄL1渌s"[>³¨³%•T¨šôû¦ ǧ÷×å‡$_õ8þÛ§ÓCóxéÉvQt¯x1\íF´ð ëVçïpï 9Ž9Ì[ ¬åõŠ/OnùVãV$r+BH;Šeæ‹|}­}u’6JË4¥…š‚3ìCëÞ•t©ª(Ésspg±YXEB¯\Æ¡UN§NOj˜BñuH†ÐæÂæŒI¨'¨ˆ˜ˆt䉈 h¼Ù塎¤ˆÌzF§¢;õ66:娣ã©ëi½“lº4øTʺÛÎ g;0:H)0ø{ø£€÷O³DÒÊ=¡Nç9‰·x饨&¬»›£UUÕS‰î«Þpü€x€±cwuÿ #<êÔrç°‹/Œ¿æiF5>“η~[™ ™9û•\êE7²qÿV] .õ“²ZììÜXÓx©áâYŸŽ*0Z»âhZ£¥Uò‡ŽØ";»°ôÛ9£Ãº¢0±Zþ7•šÊNŽ›á(ò²—Û b…Ú³àÆ)šèšÁ»1kÉ>;Ò!ñ÷q[O”|0¦œ­½¼ñ¦æðøL«ŒPÅ wM¿æ9h©ùšæÓkЍr?ñL9o:¸qðÿ$‹¹f<ÄFN¥'¯úùwЦ( ŒÞ·?8)ùvÏ–ïyVÏ®Pþç*漞Ì=}…±[ S÷êŵsáÀâ¦ÍÉ)Ãu‰’ˆˆš³7Íš–weˆ® Û]™:3N³go«tJFqAá ëu]jžÑÌÇd‡÷Òý)4)Y(ª+è M¡âpÍš5jãÆ+WjœíÊJ…u¢C3g渌¦úVÇÌ.^f¯¼$wåÕöG!Í‘¯ùzŽâ°›Ú[ÂëvÕnÉÊrc‹áñãFá˜xÖÂkh%Š¢^ÛÎIÆÍMµEI5ew?Á©ãd•dðÚoîd>P9È›çcÓ¥¬ÿæÍݯ\¯vv²++ÇÊq`úôÿø`„aPåê²õƒ÷=îdZWUÞ¿ùØ‘rœ†âÔªQ)ì”G“©7DÑꪈÎf¬N|äê%é·%è´ ¬X9"›Ò\8¬@<À¨QÙ%n»á~ ddÕíÊ®7w;…O=àgÖ¢AÕÚ‰-ó,K ‹·tßÌ÷â#žw¸5wµ..›ß}×3wµUþþzΣëÛ)ÇQÿÐy±º“Ýñ+›‘uÆætíQqÀ5ý*âkã2ÞÜtq@QäwŠÀâFŒÜéÔÆç.X|ýù첆¨­Ýœå޾I_ÌÙž‹¾²G{òÖÉ}qKU¿šÄÈ@"ðá®6'4Ô[Íôǯ ¢ü¸ùñ"þŠþªAlÛ¾”½|ÔçF÷ P0rÜŽ®wÕáøë/ܱbš[Õ%NÍŒÚöÓáÈÒ> îE.9ïÆ\N ΀†LÒô$že~#Å‘ršªšVN”ų޿[œÉ˜s1ŠÕû¼û.Y51ÚÄŒ–¾' ¹¨pôòäÑÚwG—-8ѯhÌ)÷U/þt¤Ïî×ãÍ^ö|¯Ë††z N”ó„›oÛŸ"¾š÷e#ë¸.³g®Žã‹9/gÜ›øñ£âï¾mù6ý†uX‘hÌïæûÌK_a3ˆ*„6z’N-OX5Hò{~ª:ewç5ç>‹wã{¡ëBnÏÈÐp5Ð>m2:FëÙft™¦ÑãÆçt5…VKrwYš\öžzaMWóàºÄ—nsò[O(ngÓÆŠûúŽ¦Ñºuß'ù1‡h†¾­z'1ìüË ^îà ŠžuÁÊ¢s+Nïo­¥õvü,Úš¢\:ûÿ‘4Z/)àÑešFÓ}Òo¿´r%Nà­KÚíog í¶Žg}É|œ9ÕÜOaý`Å´µ²¶êIcÅ==†ÐhÝÊ¢ÇS( e;_õJOóˆ×_{ýrÞEë[VÏbº´ÐŒÆŠÓû[kiÕæ»ÖIÓ‰ýl/Ò?D£ÏDwš/p÷Qz(õÙ¦±!!ãQÓª¢™™‡ÓÓwëU6òy9ÚúÂIkW/¹§¯LŸ]7§;%êµ~}³BTýÅZÏc9¼ª|Ë’²|Ì·¬­"ìl¢´ÒåóNèJum¢^eÃsˆ¯6ì4pUAÁß9¹õ*–=l¬´a‡ç›"qr­èü~1BÓ+ˆÞÕ÷¤ª¤ŽuB½žZ6 ÌŠrµr~ù´­‹§ÌݧQÏ7¿µ‡­·±ˆáêÈÅ[=× ÷ºE°ñVÏ÷ºu°ñVÏÊÁ‚¡[ðoõ©ôzÜ8œ¸s™.ñå^t2 ºƒ.ýÊy¼r`°`è<Ç[=+ Æ©ÓoâÞêY90X0t‹Ÿãí“+‡ Êb6óe_[¿×ý‡í\ñ;Ò B&ã>Êÿñî‘xB.ü×±`èV>Ç[=+í¿µ‡­·ËÝVú¯Ø=ô߃´$-mÃ~2ºLÓèñŽîtAq†.1õ2ri*î“Î:^]{ŽÆŠçä¤ÑzmÝùÿüÝ~ìè(ÛV’/\]¿n:ÃÓKÄýû¤Å‡‰¶lTuþ—õBÜ}i¬8½¿µ–ÖÛE<°FÑU7|*JcËfe¡Ñº«§œ.Ó4z¼£;]êl••„eÍâQíèø„ß­%ÑXñ‚¿i´.ªO~–¯û "þžÿö·ÝNtZ;ñW{/íÄõf;ÿ´š>«úBÅû硔ª¾.é]YêIˬ˜>Læ·ÖÒ:ܪ t’ñâR]"üîåð ÇC³è»Ä¤]7û9ÄÄzóò œ#›ø‚ÆÕ•sêÌ㾦ªÝ^ xsÖ„Â&ìÀýsßÕËJm@ “б{æÌ)óðPq¹x»çå9yÁAÐ,z€™—¯ íôñ¬å‹?|á΄ÿ»ò§V:…²rr÷5Žãò1ÁÑÖl8L¦™¹¹¥©v¢ð„9ÐLnH0~A;èµ7ÿ„väíù¸Ô¶ï\}¹¨¾jë­´†è{zFQüüçg.h»OûÅs‡t2ÕN"Lå Ì¢"³Ú€ãÅ Á;úï>Züõ*‹Ù€èù&×í¯e/}8ngZ³'#ÛTg<ÈS„23«ÛºÉzÚL³í;Õ!Áqié]¥6=g5®ßóñáñŸ þmJ‡èw%7_êÇ4Åñ0`ßüñ¡`ùv¡‚ køé{Y¦{ÿ«Nó'Ï3¿TMö^ Ùñ‘ÒŽ õ,0w,Š|ýØ*Eƒµ×ÈÈöJYøÁöSM—œ~˜<â:,‘m¼¨;…V_Hàœ>ËÊÎQô¶Øÿ”¦fÀ¡!ý·2NøØÅòQÓ(+¿<+ÙÇ3˜#»x%#Sèæ ÃV€¡Á;!”m¿Y]~KüBÆ×,íSRöÇopVÖ–¤Hö ?º«:<#ÜãÂüÅùó§LøÑG>öìMO B¯f̘9yPȆ)Ä<ž"fxïâ-N»ñ]OŒâ lë‘Veoÿ°Ã㳃oæX-ìgªçoy.Òõ‹t Õ”Éê0ÔÉ2¹ç-ä ÑXpÈ×'“/dÊúªÍ ©þ;?,(Rø™~~¥iBR;—`Êx ½÷Ûw"î…]ܕçr{àÏ»KϾ'{ö…†‚ÈÃðOXkeöš¤æã0»š)¶Ö8jO‰)Ç@ª>G«(@ òÊH·sð-€³)¡«Ðm¶!×Í?´öâmhˆ<:¢rÈXëfYþ&%AèÛ«‘]3ξ‘g»5ƳÞ0Ç T!eìYdƦ†Øý¸8+ÑÎ"MEXð¨)¶¤ó©÷&¨9Ò 1‰÷&&l!a9"¤EýI“¸H T‚Ð äORƒâ"”Ë µØ—EÔ­Ï'FNĪÌGÛ¤D as–°(FɺPU½‘ºc¿ö½>îöñœ¿a›[#ù,¶'“€Abˆ<:L§&a­œhùƒ­ôз §¦Že§±¬cVhi%*î>$¨ÿ37²ÕÞQïßâîÞçš™¡öâ‚õ¶'?s#gðÑß5ŒÜaS(¡†¡KÝ53ÌÐ~1¡|ú½-vl¼BX7ͥŻ€Ìí¨¢ùdþ4¤,@¶¥D9{~b&IÍ"Q#ƒ¸ÒÔ:>$µ éõ‰lêܤ”ÙÄê®”¦¹ ^¡îA¼Få§Ô„Mi<4&û¾4Ôu°KÐîBQý·/]ÜQ|ïO×v—+Ä0PØ+ÆYýæ*_¥p»{× Y€"RÌûé$CRÂþi;£ï( \ðxÆÐ{ùèÈx÷m1}¯ð ø·À ÆÙ’]8‡Ay …šúì’êÍ'rçSærTA=õÞBœBm[{+¥±Är„û~‚BÅD*åNQ½)í‚"D… $zp/Õ¥¦3N‘HxŠ`w¢DèÞ*á²hJì´Ñ2C;¾¡ævÌåÃ?éþ©šRvî|YBX¼-;³µ@§¼7좄¦þÛîÃ`á}@×,‚w6½ —d“; TËW)'Í·u©%#^“숤 ™ž ³/®²ÐÕW›'Ƶ_ÿâÈóÌ¢»·ê¢ í› ë†]KP‡rÅ]2E¹1—H?>ªk Š4HJ5õþO³·ìÒkõ”Ä^›VFP’=„Çjí}¨2û{»¢Tˆ¸Ž¨ˆ¶R‹BÜdÂB@U„ æ%9ÞÿáXÜ–<°·“`®î»~ÈÑ?Î>c.ðžà¯¤´à]\ùüîãA<E$yÔ‚C¤'³¥Ð:m„D.Iˆè–帋öV]C,+ATÔ›Ñ8JÐÔõ÷·¡~¯f~R‡<øŽ?ˆ§ßÛF…ã”Ôô8;…°àP%sJ‚BJ¬]oR#â(ƒp$)ßûߥdˆQ@Qã)ÄÌEö•¨<iÄ©CD‹ ž£rHÄ)&ŽQ~HÔAW`·åÚ®êýã‚K¯\pæp^ñ€Í™3ÕƒL^9 [@ÇÇbbu=í@vº{aÜœK¾ìªùƃœmŽLdÃxê½Íê:Èé‚v!R… ¹9"P½%2Ó..F) âÌ(j j©MD>°²X"Ä»Ipr‘Çττs62;D¸´˜V` •;%¶&ÌĹí£ÄyŽ›µo^÷½æõþ”ç6ƵÝepH‚x@Ž<c­s"»2[Ë@ƒí¯%œ…¤ÝÓï­/÷n@©í'àâ˜¢Š°¨EJ¥ ˆ½!¤Ð`ꎂD(QaMcd8¼È]ÐüªpCòQT©ön+Ä»ˆ•ˆÐ V1Â{“Yü[™j$hIJ£š+U.E¿¡wòЇ%è¬Ñ><;"{vmaÙþUñ~?8³ì˜¼7@?`ØÊàà;Îÿâ+ô2²0¸añÊáàMÚöÑc¼Ï¾@s0j€ãˆe†^\ 2„¶–褃zÑìA«‹9Ú3@ª‹…æ%ÁŸ ¶ØÛÖ’UˆpJ•ÊpTŒr[G &%ë‰ÄvD AT TÁ t:8QÔ„&Á¨#)¢Ü)ô˜2…/!ü9T#ÄG’(ªþ±cV„\Am• ~fww¨Ad(ҘŦJ$è·Jäã†Üi½j":¯x+ò‹˜sfu›À³`ÕOcU'Ji^±î-kÞŠûÙt•),liB<=¦ⵃÉqqéª{îWç{­˜¨M½ŒXW¯[ŽŸxiɡбú±N£Óï5¾pJ>ÔkÅxmjb%_í< 鱑ÆßçýÌ·¾Ošù$üÓG>[E=øvâ¿}ÞÇS»ºF‘ñ]JÖè°¬¬3æî£uO«¼ëÝü™ åíÉYB·1>m}¢{ù´í“ØrŒ­%® 4ùµøO–EýÄ»Ô`ùv—˧Ûå·ÖÞ?öÚ?ËËŸ|x]C¼wÝZç´ðͲÏ,ZHƒáM(z„ô¡Ë§ú‹–ÓšY­{º537U=§ë11«O—Óõi}ñž=­rWÏX3j]N÷ Í «Ù³Ó‚BÃói1vÕ+#ëD'«™ [Ñã–{Î7-# ‚(®g–1H2ï›¶m£ ÿ÷J+×<í·¢Ógäú½]?¶cjeÞ)5ÿ¿Oðð˜¶]ûÞ6ìÛaØÊ°pÝ¿›žX­û· ¡5z0½¦| êF[Åõi}ÍC†\ÄpA—jàí_éôÝN~™šôŒª]òYåíÐPÍy‡×Þ·»Z«ŸSòËÛÒG]gÈåüÄóœ‚B¥—gCß¾$Û1wЏ%b•˜«§p)‚"ªHÊ= Ræ–F4ÖŽFyÙˆ=…1egã°nCí.Ú–©0åÎ Äð(³²òªÒ>ðKÝ= ÏwpørÜ8ˆ<ÚE{öèù%––ôû¾ñ–U²sõ¶‹Jnü—‹¾¹2ô݆ޚžç–Xú,Ï\Rõêä°Éㇵ(àÝÎpýM•›«Üß_˜pÎ鋯Š~\%h-ÛKË*,zpCb­toÓ‹ê“v±ämAî©+WÕÕäXÛúFôyÓÓgÐßYýãí.þÖ‘#œto/Ä—ß̬{eÁÓ®‡H\h$rÙÞ=eºUÊžæ¢ !šcŽM hŒ½:Ô¦ªôGþDÀ¦Q›Þùa¡‰‹ÜmeXîÑ£UÎÁðph–önä}aaô‹ß«|Å,©‡€b2)6‡²vb÷àÚ..PŸ5¯›}3ÁLy}”FœÈ•·Ž9°rT½ñZþæ åKãmÕ믹/x‹!W´Ú½…voÖ rà´EÏG(ù¹§í]Yž¢R5à-Nc-yøcX9Þ¼v k†N9pºkÀÓ?ÈAs]•_ê^.jÕ¬ˆÈ¯gþÖ€ÆÚ«»Þ$Çc‰¸Ö'*-*…YSþAäaX¤zxü{õªs]]™µõ¡ðð4h–vmäòyS‹vDÉ$'½º¿ÎÇ nXåî.A¼tu]Øb‹Ûêl÷r«?öbýß1ÖƒÃì‚sçU®.¢¸1÷rpÚjÏ^þùó’ÁD 8æHGZ͸t³Ò{'·æ çd§µ.BÒ…•­rpòpðcŽU¨;ÖŒy9¾kÄ9«ºw¿…Ü6™Ìì\";?_åíÝØ/Šâñž´(âx=C†Ðïåº'û© NªpƒQkdMôÿaÒªÿýŸÄßtØñ0Ä®-C>ˆxçg¥ %üõï¹}°­~÷œá|åÇ”×vþ’þ¹;вÏÊ«¿^wì0‡B¼bd–‹8•ŠLYœ´êxOD¨ãn´1ÿ |hÿ¸÷þ¾)Ñ«i«ûÀáÖ]#ºBà€£ÁÛÔ•¿÷b«ÙL’i%µÂ/k‰µm½-NDÚ¢¯­2Ý^)ÖËJ³`{ ÆÝ©g¹iéNó^Uy¸+üÍÏ$Ø-ÿ¬|õÏŠÐÇE!ÎdˈğaİeŽŸ”ŠKY ¬g¹lâ@[AP|7éÔ—ÛöqäsnýɱWJä½¥s®xÄE2*û:Zˆ/Úsí{XGøòe„uÙ¾þÛŸ¹L.ŸÉ×íÂkÚÌšÓ$ƒ¶Úµn´*o¢¢EäÑún«]¿­,OÑ¥I)ÈÁ!tèóëT¤RMij•5uʺjE5N¤f­Ís2¯/fýXÉú¥Ì‰TØû |£Ã'»÷Šœ÷jíÛoJžo¾\'ük¯Ó+¯?úñ‡ÃAÜXÆèU/®úøâR“½òâ†AC²Ã¯%’#äfÕüm[¹Ž3÷Š]¿òÍ÷•xø\Y>1é”â¯À(ŸÇ™„,±ã4?Nΰ“û~y°êH⽑+«=ûØee ‘‘T¬½cÒ»jÓéHÄñj]Šˆ>oÚ;»yç8ÂÑ è> xÍCRÞüæç/.Ä—o¼qm]÷·#G8áô‚”³¯vªCª.V¤íªøyCéÂN/q(á•¡·8/ú÷·â °ŠXìÚm~.±aèãpWo¢÷ »c¥…% SíEA<À00 ”8ïrºˆ'e«»Å•>7[]:–<>½÷ŒO¢NÝUâýŽÛ”žj&y¼¢ŸV¹¿ñ–ÕÞ}r^f&VŽ¢W>|·n}²}Ñ|·•îú‡ön«»âQRt©²üf·žó<}÷[ÒÅjk²mlýzF¾éé=àá¦dÕݻη? þÚ»­bFÎ Ðþ•½ö—3¢«¿²kò~ø)÷ýÈÒÞ£-ǼèáÇÎËÓ}ý܇ÅrÝ}JOžaÃ)°` Ïï@îb ÆNÌúëf½kšW>@<À@z#¡lÊW9S¾Ò¦UH9[ž:åÚŠžËÉÛwÕ®¤íö¨ïɃ‚rîç_¸ÀÉËoˆìcŽG>çÑ{©cË·Z‰Eº æX9â¾6bôϺ?aýxäí¹-™ÿÆwåbýhyÁœãåÿÂé }}¦-q}üù#»jþ\ÖóÊ ìnÃ~öŒî=À*‚gù^Õ¹É6¼ Z¬ý¶‡ž›œÖáÆ³zÛŸ(M(ú[šà ≤‹ë¿øÕå€ËË‚?ícùïßàq¾Âñäœý{‰\V»ïÏI-3»G¼Ò§ßûÿm‡²~QvŸ~.ük¯v´ÊÒâ…‘gïb«6­~ð5?|yû‹)g_ê8nÐÖ΢ úw×*GPmÇ“{Ĉaܸýµ†7Lð²9ˆÅ_½ñ¦_°ÿ_Áû,}åjVr%cGÉ%šuÖÝà‹%¤\„Ø¿}UzÀó`Df7[é‘»vŸ7·ÚÝÄ€öÅ)ùÇŠæyY®6¦¾œúãÕ^zTŽ{úцʡ«EÃÁ ~øO©û«üŸ%sr\gUè¾þñråü¼çc<-˜Oºr©!öˆˆ SÄ$éê=•Êá«×&Ž÷™ßÁÖ±æ^ü€K—‡­Y÷çÒL!þ€éI€Nw6¯&’àžŸ‡¶mD“63úZ‹®Èï¼iÏ ªµ%mg3§D‹âò|·ÍÚrC­¡’­Rù§¥EœMðKOg©5,Eœ®eXZjz0QIÛBîéé[›‚ˆÈ!UCO7j'qÉìÝKjcí–~Û] Aqó\ã{ÃЉ•hÈmÄÍÎ1úZ÷ûÌÍ¥·Ï½·]ß£Þ c¸ýa±êtõ¹Yß~×ýü¡Xžx~Öwß;”–¶Rަ¹x5#¸Ö*’¶e-ªªjÜ´wÀõqŠ<å{¶B­½açXVšÄcƒ @'R÷æ{^WF]J´ …ŸŸ ¶1ÇkΩŸž)<2pžõ†¹3OŽóÇÜ—Ï·uÛƒñ‡v.ÞtûÃ΢Rö- cK);©·w°)ÖúŒgÎj‚þ]ÄiÛâb±£#ˆíKÆ‹K[åT.xÝd[cD†ôÀvÏ;‹Ï¹?¦“ÚióÓ»×[YyeeµÐŽš‹Wß… kk.]Æé1œþ™ìDŸóµuÅÁÁ¦à¬vG®k«ò294¶fhè­Ž3AÓ´[F§Wôˆ-\·ZÖ¥ Nãmáú5Òþýžð»5ö4V¼¢ÄºÍ÷i]S#·u]¨™.ï÷oMivÀªÊÙÙ¦ªºÕ'íí¢[™b¬ÕÆ"¬\’ØRÊYTÒ^ህ@7¯$Rs8ÇæÏëqèðèïV¾ñ×uOI]ã­ýÇæÏm׫å4ö®­¬·‹xägÑÐåÒ)þþ#i´îã3ÜMÓnýÙ.Ð?÷¯?po%ý£Ÿü‹uÕ¶4V¼º¼í«®³³µ//É爯U¼²Ãã÷ìŒL‡Ò²Z{»VŸ´µîÕ…8ß ;ZF$ÚW{…#óû«¿Ô¸¹ý¹ô£Ô!ƒ¤6Ö}e='¿è[îêÖ®ÍNcïÚÊ:£Íw­[]oõ¬X6âµOTá­þ ظ¸¨iIêñzï=GÄÄh­ÅÛÀÀ81M»uŽe#;M» Þê?þÀ²‘vÕ 5­CÞ¶ñG~@€E(ôê5œ¶±¶«žÊ{ÏÏ]*Ê;µ” ÿ÷PÓ:äˆ?Ú,.ópoïÇlv~—.7‡íêñœJ~VÔðߦªEÊ÷2þûTó4ö®´ÞÆÏyxù“øÕ†k¬?9î>JüÂÊ=‚†IÊ23ãîDö훩ë¹¹ñøEË:²4š¦Ý:N·¶«Á/¬~¡ú¯¸“¿°r´šÎýÙQ±Ùû¦NÛºµóÕä*''û²òé*3_ØûæõhÑ€:ß:íÉ~ÝeüÂÊ‘‘õž+.m¼_X9J+×<üW>âû €cŠëƒ¨(ÆCA¬Q³¡Ž h½~J‡è]i½]" ÿ ]Q•wkȤ¥Ñ¹¦Ð;{MÐ4íÖitº­cwt­kÝVº8oxçíä¨(‰¥Ur¿¨ó¾Äž›‘x¡&ÑsM˜<ÃF÷±ªêœ&yé¿âõÒËÿô§(f8!¼qEܺ$Õšíed_W–Ý3?ÐHcïÚÊz»ˆ(ºê†ƒ[6+ëÖss™ iÚ­Óèt|ÐXq|´ÓžÕlvvHÈ•þÑx‹Óf”ù4rÆ‘þGÏ…¾©«:U;LWr1«ßöP¥g½þ+ŽƒúSg¢‹’—_'iy©ž"Éøbµ•'’*žyúD{×VÖaz >ÅŸ#ù×?ó)« [G_ìSÜóº“ÎÅËC¼PFp¡ õ¦$2LØtY‚¢n–© -9/óARjÊhœâ@À’²œ*ŸöËÈo…R§˜ÓG†åæ,îá(¼Úêü±â^÷Ä㌘Ì+Þ(»ÿ™Ë4Ä@?¸jÜbr_úuÈg…œ‚Ý%¨!Dè6æVKJ™ÑÀ â3ƒñVÈÝe®Hre–:¡^Lcp˜7t£Ux‹õƒ™knL.€ æSóUõÁ©©.æ^UàÀ6Ží<¾š1£9­,ü`wúññ#àn+$? `à¡Ã¡W¯¥…wïaÞs­ÅêÉI¤…H”ïp¡ŠÈmd(jþä­Rö4í’´v ¢’Ôž0kH$aY ˆŠv-¡Ooþa²ðÞ[­Š×eè{ •wål\Ó|c.º—É;îÒ¥BÇgoä5ÚUá‚¶oB¸a0ÔñÁ5#¢âãû¦ÎTs˜s]cm93ÊI·˜9Ê!vK=-É £ÁÒω¸Ó®%´Cv$Q"…±ºÄÃ`O›nÕmÍ#3gj䘘Õ^GG!“= ‘ Ýšƒ^YY6UÕÒ^k{6ŽvvÑ^Üø¼-Õj˜_”±Ì9šw}\y¢v@ GäX†ÊŒV<ò³\K]·Ö9-„…-Mˆ§ÇtB¼öŠV\ÜFºêŽ;2“µN£Ç1ÙiA­ú$íª]ò¯ ö‚ê §$« ÝÞ*ßÊêåÓòß´ú,ZxïC»Ÿ‡ùŠÏË88áÒÒVùüÇw°íÝ÷¶ÕþYºeÍÞ;-k¬ëøfÙç -¤Áð&=BŠõãÑç¡zé‚»åÒÕì·¯û„G•Óeýj¢Sçž…´˜NMò Ëã:§G kZKu jNè‘ÄãtýÒq'cïv¹ wQÜ35{˰çcžäÃUŽ’¯}ÜÞudJ¯0ÖNC?>`«é)ÆÇ4{»z¤ ûv¶28ø§NÛ®ü“­ôó«ykAàÐ&mŽùÉSÖß­dge«üý*G} bôñ¼uaÄÍ‘dWC™‹ÐVm[l^l¬ ×[ L9Nžr9‡w3…ÑЈ·8µš¥•ãï“NÓfroÜd44àmC³tt„;:]ò¿Blm~›ówcÊ74ßÝd©±3Å €^NUVþð¯9À3‚cŽV9coÜ€féè¸ÛÛÖØf”gEV×eæün4÷o–+1Sd¬ ÃV†'§yÞMâþÅãtÔWOæwÓZùƒú2ôÊý$Õ4#¢‹X Ç^GÇwˆ¹ç… ×Ç÷}\‹ÍK–6âz‹dFšiM#¯Ähw”~~¼›)-û5yX×Âý{ô`Út.˜»ÆŽáÞ¸ÙR¡K,-áØ3"ÂN÷»2铯¾T×yˆÐŠ„ƒ2ã¼[Äð¨ykëÌ9ä¼ý&4KÛR÷Î[NÓ¸½j_X4‹ Lõ-%¶5ïOçC ¼EW4î½Ë.)Œ²£ÅLßáÿ¿Õ6ÅjeÏ™I zêK<,ËmNÌZ¾Þ»9ÃsÅj#imâaÐÀ’ëmWýˆÐMshï¶Ðš¥mi<¨|ËFëïW!tCÑ-ìú¨ÏR‹vA³ttrþn _XþMÙŽÎ ïËŠSV]ø´ºõSðòEû—‰Yy.K73'¬NçÄÝ»¼Óö §z"=LZf¡VZ‰Ïsû‚i·yº¼O£ÁႹ!ê‡nœ o€i'ý(9´'ð¶"|$4ˆ1üpnK”ŽfŽˆoÕøKLþ'2éMÉâVj&BŠ2a­wEl°ÊÜF«ºµÛ^/Ï·ðH3±®y*]ÞÕNá™íYÄ©DÒ„1‹Þ×^È:йpó „‡Ë<Ç£â8gnüA« >©‘+sÒ\Ìo@Š‚I_J vw÷€xNgÜE#AtZòE¢±ÌrëRÿOvÕlš*cû•|4!àÃÙ=¿åKGF*8,ýʃ#z~é¬åŸ6ݪ˔¸u™ŽÊ$FÑï‚x`<ð™ÄTJ',½1aéÐ^¹tïR_“™qHŽŒÃÜðñG-ò®GSðƃ‹CfH=,CÍTeSƒx`d‘‡a‰É A< ëÄóÝ_yÛB)í2mNÓ^ž€¬¬ù›v*¸Uó×ÿ†Ó ÿÎ#×µÕy™tÞÇ:Fë•¥6t™.ɧsºòb+Ótz~—ÆŠÓø3Ç4ˆÝ[+ǹóÁo-äß¹C $HOÇévÒ7סOò±À̬©;v:——#D¹––ât›è½ÍÞÒ:£}ŽiÚš¢\:ÅÃߟΉ.j*hëCË‹ù4V¼ªÌÂ4^œG§xÐø3Ç4J\Z帯[·rTÏ»›³ö·ö0íäØïI>60á,Þò¨á®—MèèÍÞÒ:£Íw­[]oõ¬X6âµóà­þ ظ¸¨iIêñú—Û×}PÓ´êzŽ?°l\MtBMsªë?þÀ²‘šäšÖ!×üA£Ó±l$×J&Þê?þ ñg®“ªâ^¨iò–ñ‡Y~>Ò>ˆ¬d÷ròÚ\6zt_Žxëêò/ñ‡}u Þ²H$”ßË©î¸Íþ°õ6/R·º:Þú‡hôY7weôíª“xë ï'833ïÛ§åoÓÓõ½¦’­£(¸[.Nà­ƒK­>M;¹5èVÁ[W/‰ž+nï\¯[oÜD¦ãt7oEÔ0í£gxëå¯ÐsÅiü™cÌ…¥önÚGíð–oYt/_æ¥}”BÆFröÝoï6>Uª8—|ícœÀÛ’Òÿrfcg§KÔÝ]’ªÒÞ®ã6ûÃÖÛ%ÒÅî¡ÙhIZ3{ëY6Z¢ÙxPÀD¦étýˆü̵ÃA-d£yìaîl¼U²çî±Eó^n—°¯äÄ“|ìTÿh¼•ðîG§ú÷ïèÍÞÒ:£}ŽiÚnMÃñ-›•u„Fë8þ ¯ûn ±â8þ0M§ãøƒÆŠÓø3×Å­rê¢úÞ^ùmy‚††Ü^õ]]dŸö0ã' Lýý·NšXìâDP¨ØÕeë¤IY~~½Ù[Z‡'Ì0°~”Gø’g^IÙ¼Áʃõ#5À£žûÚٳ¯µá9Œ‡M_Æ7œò¨"9FÙÔ JÍ$™TBƒ(¦Q65ˆƃœ”›)Ì §<$þÏH»YŒ‘ZdÙ`i8åQ2ˆäx4ÕÊj‘ƒá”GA(‘†k”M â€ñP¥ª²Ùx@äÐÄCYe'¶3œò(,fFÙÔ ÕªJ§:'CŠ<äyt€Èð†­´×<ŒS<à sŒH< ìšG#£ipyÅJó# n%… º¬AC;~SC䀑P¡¬à1Ì2!‰GÒÅ*Á a^·H¨§½—Q<5‑ÙxÇßÜß Š$aJÚâ–‚åaÖЕI²ãim¶ÀhÄ#3Ð<'róò¿»^q½‘2Zïá;Ç•ÍDTi~þ'ÉirÄà †zuÓK÷'eJ±xQ$Oeñm#KÉÐ.‰AxY™#lcpâP%gúÐ+ÍÉü‚w/ôŒóëŽ$¿&‰üz‡}ïÊ•¼vá¼y·ÐÀh@j!E1˜âWx”X%Ø€Pi ­ ÃV w´ÃV8± —KO!“I,‚Áår¸Ÿc0]yA ¬øÅæX™·y4H£}ÎC#°a¨»±Õ|‚tfk—`©6ŠÐ"Œ±ZÔ¨ipáºhߨê^ÿãÎuíé±pÞÈàíI2F”ý‚£7†j'*L p¼ßÞE’0%R F(˜EœW±=Ù±J;U‰ƒQ\ù`åg1¹–ºn­sZ [šOé„xí}qqéªûíë>L뇫‰t>]•šäA—Q=ŽI¼®!Þ»n­sZøfÙç -¤Áð&=BŠõcß¾™´Twa‘ƒëšßüŽî§õÂ…“Ö4:r¸ñMÍã:§‡õ.Ѧö¡æ„¹qÉ5<ª‚–Š_Mt,,ù¹-5˜ñ—%ÄûtC½ïíÙ†AÚÉÊS‹/“ˆºÔ éMî—#.I9ˉԲËT;Ûg s–Hû›*«94À pâ TüZÓ¸Ùc~kíú3lþ®y` Ü!2Q .}¨š,Ò IÝQåLÂŽ¡í°Ýè’„j ¨" YIJ·jÿ±£jTe‡ìŒµÁášžZT[$îTóÈgW6õ{¾º”$,yÄ8g†#Î"ˆÁŽŒ-åäâ*ŠÉ"^èî*OiïRU¢Joäc¬mâ@‡'…HéLunº—J‹»%sÑC+Bñͯx7§=¬x%åí[$é~ÇŠáµö¼æ¹RêS„Œ\sA\…Ñ´9 [`âq³+ÕՠФñ–Š˜UÜ[^:åˆØèGú4Bä`(Ô¡º2¢4 2¨RɺäÖQ¿ušQqÅýÊÌl‹.cjvˆ<èØ\!.w§Â•Ý%·„÷2qºñ€3¥*BE\—ýÊß9ë“<¸ÔÈ”Ä€Ž …¨KŒ‹½©>oiïM:ýÀ[œÖøHi,ûr¿^§]*\zœt©O‚x ·ˆT!eáN¹ ;I.ÍÈÄš3ñ§q+– Ü©¨k'^™™±ÑÏÈôÄ€Ìâô@j .Õâdt …PÒ z•SÊ)`\Râ'±è"ÁúÁÈ57¦–ñ £’GäÕµ]©0ÝÛ›ÉÂA ®cò{žrmyýCÿT£j‡Õ%Ï­²_•.ë‡1ݧ â@æ q †Œa4õc/ 'í 855ÓnT¹nüŠFýÈAÙþêë[VÕ½«µñA<èÜ!2$D}O*BM¡MåË~â´L§®ÚÑ*Ýõf.mëÑf¡ìn9auDj¾ÚXÛžó ã¡AšÝŒÝcÈ8¹†±¾LcÁBÊ[.òª½æAße,”õê߯T¯4b@ä@Çã4qÊž²sQvþ¾XãÅ#f81 gyp1+4rÏ*O‰ŸÄˆ]â@£‚¨8É8ÙG6~e±º¿1ÆÎ°ú1vt)êRÕ¯Ú¸½â@GBƒ4[ˆÍÝå±;K¬&:0£, ®ËPßî›Ü׈/•ƒxÐñ8È8 Q[¤÷™ç åÜ‚®$"ÓÈ´.š®F|©¼Åã‘ëÚꇼL­:FëÙf´ÅéôyÜ”^ZhAcÅKòi¸—)‰HºD¦¨J¦|ÔÓƒGrX{?毹(שƉ 'ò·ÖÒz»ˆG~mMQ.ýˆ¿ÿH:Ì<ºLÓèqSvze)ÏÁ•óÛÛK©ôIIévò¤wJ*K¥ÊAù;©½v³º}í"骸ßí1ÍeôËè×~—Êéý­µ´Îjó]ë¤éÄ~¶—?é¢Ñg¢;Mˆ¸û(½”úlÓ€€Øñ¨iIêÌÌÃéé»õ{È+ÈцNZ»zÉ=}eú<˜èò¸ñ9½ë#›/¶òJÕ¤÷ɧߊ‡8RõÇf7ô©ÊÜÕx7Ò¨(–5…7.¹:ºHœ=êõ,º°ãj¢£“[ƒ«W»Ì?h_\³n}½m­³³gzºõù?ßš¯ðÍXä;ÚÎR«®¯ÕK®‰ê/êS6ta‡«Ó+’†ëõ’K&…HÌl|¿µ‡­·±xàâW®±þä྿p'=‚†©4qß_¸Ù·o¦þ­cÁÀ/¬‘ƒëôlšFŸÓ—]Å{®'ÖÜܲvåsçÎû=ï‘ý–3ëZtÿá»õ{¾T’–ön bÂgºH°f`åë]¢ÿŠcÁÀ/¬áQí5ߎ9°r\‰™ߦ«K·Rßÿü'[õœ£ôz¡ô:VŽÂ’Ÿõ\q,ø…•£¤ü×G˪¬œÔh„¡B5RÙoíaëíéY[¢çsÏV¤¥í¢Ñº§ŸŒ.Ó4zܘœ^÷óå.êe‚ ý}Ü—ôåì9œrWN)© ýÇĦ¿».T¾jú­¦®ÉE¿ÇC§,í(Ø·3$¶6:帤Ì]Ãú±‹z∠'÷Ûºè3àhÅÖ:ï›)a'þÎÎ;6°°_»^*§÷·ÖÒz»T³ÙÆ}´Âs`P”M·7¼+P‰~éŽ~;œsÿTO“yíÒÜ ›Oc‚?ØÏŠÅbl&“gfÖØü„™xG’ÂÅÇ$“Æ9ª•ÚÝs–Æõ³bãq˜ ž¹™…e_Ñ×S“¬ÍH& q8”­3‰;vU¾ù¯iŠ/?kèü Êq×\˜‡IhÏ^ñ?f-÷FRÄDQÇ—Ææ×ÈSÞ%ßÓ)GðåË‚ºº¢ ÃZ¨Ü=ý¶ÔÆ+N')®ômˆÂi©µµÛíÛF¤B䆂Õg»çŽR™Uq7nà8 èå뻩°@èÛ4Ö“Ÿœ8éŽùò—ºHQ:ñû Ú¡w¦í{ÓïF'O–I)ë~:å44ú‹Æ÷UdmEÉ ßœÓ^F`Ú½?{`'üݺ³?}ùN÷/q'áýõ;ß[ÈÈQÌBn¹€Ü?ÙeÊ5†Kÿúµkê{[ýǪ*J–œÙyK«•Ä(†[ ñË©k‚dûàôܱŸœ9+µY]ëâl[Zúÿí \åÿÇŸ™½—]X`¹O¹ñDS1E%MEÓÌòÊ̬¦ydýÊ´Ò´,»­,³Ì²<òDð>PD•û¾å\Øsfwþ³‹*ì€|߯絯gŸ}v¾ó<óÌó™ï3ÏÌC+GÔüùírÞB&«r6 ¯ÉtñÎW&Sè8"©¨|ì›+ˆt”N1Ö!K¸uÿ©Uß=æzr;?Âí9Kã¯ÁÏÇU¡Ù »•ôžã_oOÕi•±—/-ŽÌŸãë‰?Xâ,·¬cWnô¼Ù•ƒkÕ%Ú[÷?yN»Þ{N§U\ˆ»¸è@æS/ù{IŸ·­šQÒXˆ¹ð] 3·ðŸ¡—ªe¬>ßW|êÌúýUé›UçÿG<Ú36<§µ#ç}—Y§û­\ßÏ·3&ËPå6ÖßR„–G}LG=1Ä%=]RYYäëKûp ¨ÞÖÖ5%…ŽìÖžQ}¹BCuH‹KJ|}A<0Ú¹_•ÍùüzÒ•g Óžµsr{÷¹9õÿ7O~Û{ Ù¼!«Ï=ùŒÆâ ‡ðôL4z'¼›i#Q)þõFmÜ(ïè›?]Üxj늑cxMÙ̆y{&äþ^<ãšÈM÷êì·ß†ÖVæ#i kíôÓMŸI|ñKˆÿð€&Ž#? Ì®ŽªÒ#s\u¾DÅ=wzÞÕH]D Âqòúôé̇¬ÈßoÈž½ž—/¦ÆÌ$Þ Sü.ÆÑNR±¿ßcß\A< 3±ûôÝàÝ×éï¡™ÈT}[x=ØÙ£¾t%;KäèÊiJTŒm3QÔlSšÒ§¿)|óÍ¡c0ÙÆSŠðA.†l ™Y"'7MœÅ§Eª…Œ½åG$ö:/‘N»«BjÅ'«g;³ÿÞÁ‘Ò=Ú; ´²çnÈ×SÙuTW™Æ>¿‹ hèÿç—íŸ\"ê"‡‹är¾òrIÂ7ARý²„óÖ%†áµ£ æ?öwËA<  ‘ŒµÈ]±%>]ƒ¼“oÃðÔƒ'¶´Áp‹œe›ãÒèlÎ=VMñõ)Tv?Éû-òÒ²J­œõÜóÓü¾nùRUX[/·hÑ;yðÄfÍÚ¡Á¼ º;ï8øX`ó÷ý™klå/@ÅÆ/Ëo'[ ­?p­þ¿•WX®z—Þq2õá!ÔPý{>1ÞÎÑNi¯fôpkìÑÕ_¢þ†ZÏñóŸÔ³{µ[`û„ökçT Ù%s“’mgΩÜñ[\CŸš8åÈ5v‚³çØyù¤GUèpŠÏïê…M®M:X´ÿ`Ñkžõ`ÎKÁ<ŠçvÀÕêšå¥)jkM×(†žú2“¸ý<#êqЩqœÐºÛ5]`ß¿> ?…È0c§ŠQ"ùîAQ¥¯ÅÒ"Ç'_ ]] _Áé3–k>”ýô£¶w¯ü•êA4æ³µ;æjÍ•˜Ê³‡ŠÒ_'¹NÞ9|——Ø;ñ¼]qÕ÷^Û=¹õœëËSHa×YýÇ–øÝ°;Õ¿—bMôë†MĘDTlxY­QŸûœ“.±A»jåÓÈ ú±_¼]·l©bÚ3MÙÌvïUM9”ºVÒçY§›Wñû*iïdì,…Íü÷hÌÑfVƒ„ý&ÛÞΉŽ$»¾æþl*{MàЛoVOú§¢:¶qüØ<óO?ãdf>Þò·–«G‡=B¡´z--±•ç/Êb¯Õ&ûYø¶ ™÷nPß €žM“rQå™ßßúê<©‹Òõl}Wæ>#F-ô}ÍKìÍgÝ;,f(dЋQùîûÙE£Ee“.uݧ¡ÔX‡±ò¹£œXݳé‚x“T¯ÜñùÞ¡ÊüWmÝ¿ÇÖM¬–óÝûx¤LÞô5AM—Ës®Ê²¯îú> ÙJÙxjBQD|-(Ó 'êw‡hÙZ5÷Ö;•g"¤º`¸œÿÂø5°©çFhÿÝïymÊæŽÐ&ã׆YPháß¹$2Ó"\ŸR}иT¢N€èêÌ)F¤9Ò™#R„È@ÃWªâ"tÜD†û7)ÿVÞÁŽK÷y…“¬…~¨äd×=pQ(Z¯ðqÅ=ÄÝT;@<€iTa£NŸð´$´œü%P?„nh‡º¿÷5¶{/í"ðÙœáÎ~ãb¯[\ÅýB?~BÍÔ¹le5nâ†®Š·n«ØýWó­ÙM._0?NÑö< 9w°Dsbû¦üÓb¶½©Ã}¿–Ϥš<1ßÏá^MjžM;  òXT{•Ô08¶E•º€ Íeä"—.+ù¨"Åje+ÃXݶ݂xó<¹Á½ù×ÞÓ]½±yùѮ݄Ÿ/'-]Zzîù¯„+)Z3FL¶M`¸çqyƒÿØâb3£Æ4ý‘ÎOç¼\×S´R{;'ké苳ù~%S~%9Å.)ÈxCâ¥ù¯¾Þ|Oäo­hOåX¢¢%ªÉœïbYÜ\±¸wCW<^»Ñ.›ê1å”yo!Öm-ûöÊ´÷pücI¬>ÍŒésц×"DDlcªì±'-[Œ›úíÊïnG×!o)Ù‰µ!Å&ù„¨4³1t’¬_XœÅ–ŽIq98e,Î%NÖž_¼?xý4꧃ n½Í ®ó«ŠÎ¿µ/÷Ù Ûkû즕iïß:#Ëä6±ñƒßx{†EÃÃéÞ„‘uÈ›º°;‹ÿL¼ 9­U tºÉ=9ÞäËènE´ÑÓ‘‚Ëñï2UðÁëŽy¥µô™.ËD'#[„jPRóu íQJ*Ú>Ì¿¤ÄNv©ÂÁ"-h‘º¹…œ>(Ö£…lãÿx$ªÙ”"Ch$Ý!ûÄʃ(ê`»Õ¡Z”tk lÜS?dH?ËÈ>ÍHµûz-.{„?V¨Êw{ó‡!;æmÏý~v?‰àá7²ËðÑʹ֡§a;öí0l]‚;ææÖ^Ù€V µ<á͹Þónü%nw® XI mN,Ëþd÷æ*uÕ"ÿ%$fª¶=¾,Äh UHåù7 ëW'Õzf üÖàÒ³î\!0lÐJR¹I´rµÄw‰cÔ¨ü'z¨¾ôŸêžð¯,‹_$ ^1maC6ý]þ ºn® mðsÖ–¼ÆÜµ}×gÏ(v<…çM%Ýÿd]ÝSâ´Ì…ʘïÒ¾ÙÒkkÙHï„®j÷‰-ª/‚%ªn®pÏ eÒëÓ^{m‹ÃÏü œ ‘†ÜÌï?Í0ZÕªÃUTVuQ¦‚xÍ(S•Ήyá#bëLgñz‰íaó_ ÷<¦vëúñ¸—ZmíÌs3^Ê™?p{å^)§7êÄ 5ê´uÏœ:üÒ°©×¦JŽKq+¸7 âÐ*r¢þ¹è©g—Š–‹wK ªÄàn0•Šwú,;/—ôðÐ<9BÎÒ>»ÿ™~çû­ ]#¸û&â`€sý†åÜy:WWÒßwâ”bÃ{sðà´a½¼nr€x@k˜q„“š„Üv,!gL¢´v7ÎL8s¥‡\¯±ôˆ3þ„—X5Õ©Q±vÖá…:„³¨`‰n¢€bßísÐÊÑøÖ åôiô×ì⬙ÑO/8K½¸þ#Ì”£màFЭQÊîÏã7K"Ê‚ŠÌÏÌ|óý•‹· ö?|Ê] õÔ¡ð¨ZÌAB~èL,·¤2jñ|ê®ßy§Îè\\š”#>þÒ”ã_kX¹¢® ùTxððpÝ"Ç×½Ðéu,!¨à«+‚QÖ,¤Ä «p`b³Ð=+ƲóóÈ^=éȪ؟öä}¶É|ÓS/Ž'«òع¹PyŒy-®kkò2™ô7{õšÆ õ‚lS¦<â49éí½l§&sþº×møbÉ¡ª+ÃÊZ½ÄrqËTÁ}}§0Xí¾¾“´nc=¼M×c”•¾¬Šý~ ç“j,ÐJïx÷Ïd*5eÜÁW·|¹1ä·§žoP””TÒÓ³õíç1ù&vfϵæÖ;D<ò³»T+ÊeR<¼½Ç1h½¤€Ï”i8MaN{;Ð<ŸŸß}gՊ׶… ''ØèZËëà0œ©‚{zŽe°Ú==˜´ne9°-í@kqž„\åH,’P±µxÕÝ¿§ ð3ø²ª,áÜøÓO{ ¦S„;ÿf•”hF„¶¾á²"&ga1{®5·În÷M7IÓñwo½wO)e£Éí8-rñÐöð1é@µÏøž= /+ˆˆØ–™™šºÇ¤²‘Ï/È1¸±'-ÜÕnž*S6&¦Ž¸ÁÙÊaçÝŽÓ‘7OÒïÆô\IvP,áº"cµ(¡.Îcqò²²³EÅÇL(áMþãÆý˜“‘±Ï´²A[@ÆuÈsriëûM+ƒl¬‡!ã:ä5µ—dÕ1ÿ6¬’ERÁB$‘HHI嘌BÒ[#WÇê÷þxúåaN£®•AE¿Fúû±SÓhå¨Ý¶•âó[‘&·#þœƒ‹Ò¹‡ÂÄ7ƒçÚýÖÛY<èÒ¡×XphÁ ­ÃÃM/È´`ÐVŽýû_4½uZ0è@+ÇQµ&6Íà§¡ƒ´r<9¾ýôR[8úB}ê@ÿrŽÂ=!ÁVì]ó/g -t8à¥Å1‡ –SÍj}n^öb2踖ŸOa|\=”ÛÌ¢°ö+8-t •ãÈ‘WL_í´`ÐVŽ#Q Mo :ÐÊ‘‘ýY«êO9àx‚y™¡:%^SÆ@"òw<:³!ùu¯u+N«žªæ9ËÎÉÑ Fû­(‡árÁEIZ9‚‡ËL_pfϵû­wÈ sKbsLìpÜCJÊn­»y©˜2Íà7\ÿ‡£iª®¡å|ö1jš°ËµK5Ošòý!{ KîÔ'jr°¬ÕA梲¬Ì*âý¡l>šÁ¹¢ÓàUMÅñrR¼Gcæ"ll÷Ń22þa°ÚMìî܃¬ºÍ9QÔKjg ûÃ:ÄbQ#­ôtý—âå?sv›,.Ï(1dâóÕá7þfb‡£SkÍ­wˆxÐÅTÙhçƒÁšÍÊ: u'75S¦<â4®žä#ÿWA(iÇårü»ÍÒx%¿ œø€[(+k©ôcyMMQçÂR[<%E'¶·s”ÁjÏÉeÒzMíå6óyº—nvv""9'cÙ—¤µrô{Óôh¦içƒÁ‚3{®5·Su #¡°rRP+í1¨ æœ$VÆ^Þ>µÒu`ÍŠ‰b!L½n@< •CFšïÑ‘á|ÔTãUÑܨ\¬DWúì3\¯~ð®øOíþH4ï£uh>2 fþA)Gi±‹Ð4ú€Ûa*tGÝ´nr_­SœâžLÄ®öOÀ5›9Û wà€rtñÐÖÆ?ÿs$1ñí¾üÖÛ 1_l|Ó‘ý×χ_mzbD[¸òÏS~w*Ìmãô'S9¦(¿Dle´3T^rPc~+U_Çùv©è³ýìÚû~°ÑGF #ž1Äæ#VBâà„§3§?›áåÕ®Fð"Âb7©{JÐàQ&-&>,p)5Ä”cTùîÔ¿'¶vòå/ÛvÔ8sÌqó‹’o==…«Š#Ž[®n°øeÌÀTA›ªˆiq«3\i>† õÕ£42‡Žî5ÜäA{<¾z}s¬S”ŸlàŽ¯÷üVºÈ½ZˆS°‹«‰›¶ùñÌê#þto¦>´õC³|÷MººCg®?îÏïÜçQ§uø5k÷^vè«ÀÚHlOÔ çþ9é;·ÙD®ë'sç6uÛNI—Ë}ó8&ª‚º†$?"éùC³4’õÇ<óm‡25}¥\Ï>ŸãnFÆÄüñàý¡°0NÕE [„ã„]Î9‚£Fœ}J¾qNñ´ ¶¯iÆÚ©†§•©µà[·‘Ø \÷Ï_yÅ !\o–Jx]:$ }ç)©Ëѳ/¹®áÐÖ$ î5®µ–,œ¥#XŽ1áDBÙq'SÆö=¾1àbðõAsS×OŽ Þ2%-´5Þ9»¸¼þ¾è2Ä¿ñÎy,Eèìº/ºÆËÔ:©xèëwÚ—8k#~`9Õj¢é kB³ÉÄP[ƒõ¢Íã}“B|§îg ðèNAFfSäìç(Wj<¶új-¥åbözqªîƒ$vqÈÚeÜØp×..ï뫊ε'ò[ïB0N%¦ñש%ÐÕñxâ:BiÓ—}˜<†ϾÜGÙ÷ƒ«ôŽ ²®îË ì_ÝI»¸º¿öíNž÷%kïbªk6‡Î(U³óùÄýŧ¤ÓM™¾³óû{M‰@–ÄòÜdÅhi 8e"jß³Òg1§Š_¶*‡€Š<üyëçËJH¤#Áù(ÎÅx¡S>ìÛïíëí=äv¸”'R°Ðý§¶Õò³†ëxR Qh3Ú¾ýL‘RŠ—Îâ9‘´ç!‘aT»_{å±r/r.fcY¡¹#~üչإҡAØÀ;–;ö‚KŒ»áþG§s:t g~ÿÖbÊá@IññFÒåÎ ~†­$–ÞóÇN_ÛǺS[u>N_®U*ðË( ¦“U7h›3,¾7Ѥ¨ýSKå>že ¯I©GšJ¼ï'5eµ¯ë…¯}ËÖ@—öð¼êæS=™ÞD/–MXV´lrÁd»»2g«õÖífÛÏëÎgSÙuì:¨±ÿrâôÓÖbl÷íÏ 8)xàg]8á’|ö¬WJ*›há!P5¦¾Œ]úÿ:Rs8ìPØî{æ]W3ºîøôTq±øÔìëXxAÌ )Ãþè¥JïtXUY¯”mãe‰é*ïôfü /}nˆ°66ÜñÌþmßTé:õ¡í|ž‡6^£-Ëø§ßº[Ϧ­7ýíÿ»|%)ÿÊ݉kŽøšJ˜qeI˜ÌüÔ`1ÃG“m£s $fô׋0ýŒÙäÆ?pZ­ÆŒN lJ镘8~ÇïæÌH¥²âãÜåîCK‡ÍâÎVyªu^ºTÒüבּÍW&0¨Hç¶ AÝ|C”úÐÖ¿òþ]«ôšÜì³_—›O°âtîæýHsš¦êÒøýù+º=aW/’¡H vl4­vÜšª‹8NV·fåšï¯%gͰ~§’rWþú âÑÁ4Z5ÒŽ8QNþ•þ¶mÉ:²”WzÍçÚS¾)²Î«­ûˆzƽqÜ^$”R ÅÃšà’¤q±­\^ia‘êäD°ÿÛYygV.*ô¼97µ”ØJ?~gª.òÙöã­ »œ¬Áï=½a›Za×wëXõƒì ßÙ`—ÒxEa:¢M_Å=#£ÞÒ²I9H-Y"+Žr.¿¶²Î¹fŸÚзŠßf;°)[ª)·¦vkªîª·ûš»ÏzzÎiç¾éÜâÁ?{õøJl' Su£E÷¾—ˆ˜núÒ¦êÞõpÅ‘ôÇî¼éPUoWOC—¨Ã†”‰8a}é֬|ó¨ ×%)z^º–[¡Çµ–Z[;ÒÆ‰°±%ll¾¾5Ù"/éý={ªÄâRKË^EES/^Ü2zt‘µõØQã¬ÜûšvK‰­šqªîý>¸ÀuOÄœ=µ3ª´‡»€«©:ÒGô :YÈÎÒóKûÖ÷î«ì÷îA‚enÚϰID=>­Š?á¥'܉¡}ãKîº/»Ä¾ƒçß?³¨j—êJ’3&Þ+3@÷áß3ÿžt¥Ô­º^ϪƴUÜŠlNE ¯§Q¼r–ž/ÒÚIk)ii¯“8ê,,I Ü8W…CÁŸLÝçíÝ´åÁYY Nœøð™gþ«ÿÑ¥ ™_¥ sðÜÆ1YnÕ˜‚’<¡Bº‹l ó§½£Î$zú@Ãñ€.Ïû=ÊÙ×N¿7j‹ÒZéµþ rV+c5T°«j85iœš«ül’[ØõlR" ¬}eHJs“ت¶!›Âh ÉÈèYR’ìæöx»q¥df2;9£#_Ϊ ´¶æZwO"p˜ròêo~ˆmŸxS-z'$˜×ÕåßÒWÄ£2Rœ:º¶¾þÚÏß {ÇÛÏDë\r¢Žò×­Gó‘x舎zÓу=f¶þô2²1JñÎJíØ1ÐL;!ÂRëÛjaÐÉñ†ÙV·&_!ã,x LgÁBnH€HC0>ã G¨¡¼¾‚]ïR“˜àÈJ¶½Apk0V½e£ÄºÁ:ÿ½¥"Wsxƒqp. ,ªño›!õÒ ­}îÍVTî!‘ÙUö¹ø°åêSXøtB‚C]]™Dr8(身ë#TŽÍõz›r­}Þ­éÁnd÷?Qϯ«TÓ¡FPëbßt–ììÌŒrDµ˜6Ã{±¯ZL}®~Ï_ Í)Í»sZ?š+G+ÐÝ£ô}´þ5ê±kßìi¼G‘:2(?2ÙÁ®Ñ‚’ñdµfµUæUU’*‘J$QJÄj1OÇãè9QÁq:Î#y|’O« ­“‡îhý •Ã?û°…ê[PðÑÑMqw™ìõ¨¨oŸzê¡ôC‡é¹•~|³íã½rk¬ êYJ…§D„9®±Õh=Õ#m•VOyEX‘§lx-ÜÀ¨ttܶl©{V–¥LVàíEû‡rädû篙ÈétÅ… ÛŠ˜ýòþ®«H»¿ÓëºâŠ9{îäéΰ+õõSÔ]Žc×Ââm÷?æj v±:×±¡Œ¯gÔr¹ëÿ÷?<¦ØWTLÛµ«Þ¢ÒÖÖ¶¢ÂB.ßýì³åvvmŸºzL êÂ:!ýÉ‘s-¡QêÔœÆùç¼Ê®F¸Æ0±TƸaCÜðá·T‚Žc†Õ%¥šƒÔ·®òiᘉé8_˧ƒ™ÚÌLe&Ð è¸X)–4J,, Ÿ–Örk:NbÍ^ØI»?ŽÈ- ÉñæR\×ÍuS÷¥Z’þ¯]Ü#]Ãó44„÷¤2²Æú÷_¦]¹æ)N.ý^}³ÃûMväaŸp»³¦Ñ V_º`úƒAWû„uÁxü]•Àè·bõÿLcÝô½3Xg¼àüÏ7˜8圙©÷ñÑ…œ%<Ú¦âþÈG j*ç±VÿÒm±ü‚ûÖ?pÈ=ÍO?0èÑÎ…Û;3ãW4?àþé†ííAº8Z9:ô|oÇ‚w¢w[ûÞ=)£ÂW™À.±ú^»ÄšULUB§ÚÀDº ã‰eoÒŸè¿)­¿éGÒqC Cͯ]væñƒ©.®ƒèDâáÛsÜì—÷;»Ó®ý9{ÁÿpØÕ§9¼Ÿö6HDÆ­ŠÔ=ÎT%ܳ3šÈ î Ð…¨8WwÛÛ0|n±*?WÇTók—yühêâè‹%2e×Qc6­ré°ñƒM0ZuÏ9C‡›íþ‡¾Þb°šï < “~ hþÕÐe¿ÀXók¯y,õÅ aò{ =ÄñÄñ@<Ä@<Äñ@<€ ñÈJe1UMwgëPíPp¨öîf½CÄ#?‹1‡†AÓÝÙ:T;ª½»YÇÛ}ÓÇ ‹)VÊ5±B2hº;[‡j‡j‡jïžÖÛy%Awo=Y\žAÓÝÙ:T;T;T{÷´Þ!wOS^ƒ¦»³u¨v(8T{w³Þ!âA SecÐtw¶Õ‡jïnÖaª.ðЀx ˆâ€x â€xƒÿÇe„ã endstream endobj 418 0 obj <> stream xÚ­XÉŽ#7 ½ç+ê¬ÑF©}² ¹Mз wìÎiLþÿ‰‹DU•íž S]¢(ê‘|$kùº¸ÅÖnÉ~É©˜µ,~Y¾.>G“c²+-¯ÖdˆËºŸ`9¹ ¸ÜD?ýòÅÅ凿—ÏË÷¯Ë§ŸüRLI>-¯ï‹‹Åäªâä ˜`y½þ~¶Ögkã¥þVk!Õ_xYëë˜^N>–ú䢵ö½þïëÏÕßÛ˯¿.?¾Qб.ìŽM_ýÕ£À ÛPÏÍ&{­R`«DZ7Þ‹oѬz¸—Ô„J³V,|](Îxî@w &T\OÑYkøOÈù‡ÈE0¥¸Ý ÞÄ´Ÿ|ðA+¤#´pï1Z§àóÙx×¢¨ ‘Úxãg>b7Æ£iù¬·¢Xs4h±xxE> ÷2†UÝð*ZÇ rÀÀßè¦nUÏEt¡=͆n!®;%ëçÛ^ëä„v÷,wo®µ5ô) ‘߯}c@"ƒRZ| ó ]±ž(Wôr=yÛd(o†KÛß=ð”®Õ¬rîà0‘]-L‚ó³ xÁ‹¨i^añt½’ÙlNVæÜº<"Úe”oÑ_ã25ŽÝ$ÂwÆŠ ¾›e9Pá$ û>Çã@€d«™#WÔ¢¥åГ“-˜ÝOÑHKyc$­¬ê4®!&oÉ[4)©üRÛcé‚Ï󔄉QÝz¢æFæ J8ÅVêÑ4—V×$1|—nšWðnA%ÔJ†V®;E¿žGÝÀÄjωãÏYͼ ,9V$pµ¨UŠ Äh Êxu–ã=50c&m®AuO³¯êŸ¯vù[¿SÙÛýeU1‹(~ Køtp#Pø¦ï7GxÞ¡-6J¬A¿)ú—Í\wC°$k »óÈbdêFÖclâÅkÛžNÑÎÜx\œxAäwÐ’–{Ðâ*¦µç«¬ªöÑ^ÔÛØ†¬®ÞÉ¥®w ,Éi`Iî#ÀVÙø ÜöNïÚ;žéžCݺ Õ#<Ü{\"Œ{à‚=—¬@A"¹Çõ>1Ö#Ž ‰•h*¦-C¢= ZçôÍX®6²&Ää5cA³fáêÞwåšõX7|d¼=¨½¥ô+ãwa« ÚÛ¬Ø0fE?XãüÑ@µ|(à)'zq“ŠºDʹz„Ú\ã@Ê2ŠÙòâÜ–ûp1õ »Ò0Ú $T#½¤9R¥¦w÷Z@Z#þRð¼ªzNåtâÔnÅizn{óq!‡¡~ð»¨÷qb.¬,YÞ¾À6ŠŸÙ€Ô|ãÇç ¡ì$Vkf½bn…ÙGgM„øRœ7¶ÖaQxŒ“ ð .åÛ¨nh“Є}YèxÄ‘j4S.ìÓUvôÏ×þæƒeÏ>n\”GZ ga‰¤ZWûŒÊ²kØFaÜÛJeÓ+bägûÀ\aÈi>Æ4¼ß?Ó´«ÿ$½»x_.s#¯l¾ìlâ¤ANíÊÈ^9t캂ç#ÉÖ·\u*rw„+ßV›XãZmN¡˜uÕ^{HŒiÿa÷yŽÖ›Ëö°^‡KƒÆOôÉ1“w èÝoÞ[ímZ³)•*Fkï²lûüÝ¿h¹åZ endstream endobj 421 0 obj <]/Type/XObject/Subtype/Image/Width 486/Height 72/BitsPerComponent 8/Filter/FlateDecode/Length 841>> stream xÚíœ[Ob1FEQDQÀ‚ð‚ øÿŸ;ó%_ö´@˜—ÉÌa­sRzÑ®&›Ýö8™4ŠÓÓÓƒ_œœœL§Ó(¹¼¼<<<|||Œçv»­O_^^T¿. nnnºÝîççg<ßßß¿¾¾ªŽû‰>=Êóó³+x\ÿƒÁ`Ë@€eÀòÞvÎÏϯ®®Æãñ×××l6‹ŸÇÇǽ^/ìÄÌK«Õ%ÑI´]­V···²ÝÝÝiÁˆðþööæQTÍk,$Fè ±*4Û" Ë€å='&ÓqÐÏyί¯¯³¦¼é÷ûGGG£Ñȯøà»¾°êW ¤õûûûO/¬ú €›ÔVë·°Œe,c¹©–¿ä .ÜñÂjQ¢(œ_ì ùÂêÃÃCN‹4Šcº»õ*šTG3¾‹•Où±Œe,cyŸÙÅrÞתRT~zzšü~aU6s"¦UQüÇz—û¡ØÃ2–ËPÜí¯_1ÈSÐét>>>ŠãâŠT±å%wέ‹‹B/¶üœã>²° XÞsòåR§9[.¬æ’b;Ë.üoÊòù²%’X~ó×ï)l° XØÂ?YO endstream endobj 422 0 obj <]/Type/XObject/Subtype/Image/Width 486/Height 72/BitsPerComponent 8/Filter/FlateDecode/Length 601>> stream xÚíš×nÃ0 Eãì½÷žÿÿ‹%Jà‚°4OEìœóP¤2%µ:ÊZ­JE³Ù¬üÒh4¶Û­µôûýjµº^¯ís­Vó§ûýÞã³-Æt:mµZ·ÛÍ>/‹Ãáà1ÇÆÔ,›ÍFšWÆp8|1`°üµ˜N§3—Ëåý~ßívö³^¯w»]³c+ï –m±A¬ïãñ˜ÍfnÙÍçsß0Žy?šÅôÇL¢uñ`»Â'R_da°üåØb*ês\óÉd5Åíá1êhiô™e)Ëî1ÌZ6û1A{jŽ_âà©ìŸÊãÖ=Û ËXÆ2–‹XFEËʹ2˜«É«wêIÙ6@´lUU,‹,¾×ëyõÇQ—ØË[b^¶ŽoZ–h ›ÛËXÆ2–Ë——_,”/¾'PW eï-ŠI¦ééétR>•}øÙW’$çóù}˾©¼…* ËXÆr‰Ï¾|1£ev)“úNðFÖ«ˆE9Ë"gñ)Úíöår‰yÿ}Ëþ¿ ýGXÆ2–±\šÔœz¿,)z$ƒ¾€¹¯}•—sc²³¤ª3½MŽÔ³ARdÕ{]–{à†e,cËð?ò¼¬ýÀ©–Ëðá–=§_¯Wûz “=‹qaËXÆ2–?IJ×qzí"+.¬bËXÆò‡YÖËåì¯Åº°Še,cËå¶lK”$I*¯©±XV±Œe,cùË7I.¬–ËßL±.¬–ˤæ¢\X,–þä°…| endstream endobj 423 0 obj <]/Type/XObject/Subtype/Image/Width 486/Height 72/BitsPerComponent 8/Filter/FlateDecode/Length 762>> stream xÚíœëN"AFEQÀ (*r‘‹Àû¿ßV¶’/e÷0;Ùìn\8ç‡Á¡/Ò§“¢¦kœLNŠ›››‹Ÿ\__¿¿¿Û•ûûûËËË××W{}uuåï. oŸ_1[­Ön·³×OOOËåÒÛhS³¼½½©æÕŸÑív+&,–ϳÓétz½Þóóó~¿ŸÏçö³ÙlÞÞÞš[yW fùÄú‡ápè–í­ÑhäÆ1ïšÅ›i™Dëâ3ªí ŸH}‘…eÀò™c‹©8¨×qÍûý~Ô·‡·QG £Ç,KY¾Ç¼enÙìÇí¡9~aˆƒ'Ñ?‰ãÖ=ï…e,cËÿc-+æÊ`©&ÏzÜ©eÛѲeU1-²öwwwž=ÅqÔ%öò+1.[Çš–%ZÖvÁ2–±ŒåÓ‹Ë å‹ïÔH™µ÷+j“ÜLÓ»«ÕJñTöÕÀï}5ÍfSß²o*¿B†e,cù„ï}ùbF˺٥Hê;Á°( ëuˆI9Ó"gñ)Úíöv»q¿¾eÿ,úDXÆ2–±|2¡99_–½%ƒ¾€¥Ç¾ŠË¥mòY’ìL§É1:6HB®Þó²ÒnXÆ2–± ÿfCÖ‰ËÚÜõÂ2`¾¹e韟Ÿöõ@wöË€eøn–=Ó±‹žpòG t´‘'€1›‹»%aW?b`W^^^’G ¦Ó©&:65–±Œe,ŸƒeYËMMüƒÙlæÇÜù!K»Ý.Šbòµ„ÕÅ×ëõ±‚Õ8Ëx< ÉíAuÉ1ÈŸJÀ2–±ŒåSµlËØh4’ ]¬Y°K•&_ Veê7 VcñUR°ªãõxÊe,cËçL˪;c1ªPQ°¿ ¨ü)©kJ V•IÅ‚UÀ2`ùœ)-%MÑqÿ¬Æ„«º`•L Ë€e8vZñ7 VKÿ…š^Ç.«€eÀ2À/ùYµ  endstream endobj 425 0 obj <> stream xÚÍÉŽë¸ñž¯ðXû>™ ’Ûïä n·ç4&ÿ’µ°(Qn½‡7@Ð0lITU±ö…}ùý¢/ªüéK4—ò’òåý·Ë_¿^¾ül.Z-Ye}ùú¼\íbµ«_eá×Ç¿oJ9§”Wåû£|ëû5ÜðúY>¾}¹áÝýj\ºÁ•Ëåcêïz7ÞðÊÞÛÏPo6@—®*Àûµ­à×|ÄWêÛ{ª*D÷€_ù…„+ÚÆnïW­w$Üï°ØkØQ4”]>ïWkm¹2¶]¶@ ýmw üA¼áÞ©Ž¿R5qˆ‰q‰öP2> ÷{ãª1wmpeåDãg¼' Ä¸º”Ñù€û $Á°÷9ßÿóõŸES®Ú.ÞeÐBÃçx}F!7Ñ8©üt·IdQÐ[¦¼†²´í Ö®ÿÉr"a)̆Ê6ý¥W÷ˆ¾‹B4$í'Âlä)á ÌQë}ÚSnŽùƒ{˜âNSûж*±ÝûDðð*7(kž«ÃŽw¸!¯¾Õ¬‰ü&ÛCÍEaxàW1÷ÛY*«÷RdüÄR±†$wR›ð<ïcÐ…,kþpe_P‘å#çÅ›ˆ 6 5õÑ—ŸtÅå§3¾¼€nXÁǼ!+ßUù ì0Blý6pðíQ/AÙ”0XÐøµ²ô9Nü~|å÷ƒ›xx0‹ÜÙØ˜%=|{•RR]DzÐTÈ k¦ °4*ºçy$;!–Ñ0ju ±¾o_ÒB0w{"5IÌŠuVV­*™k2‹2ikl[»mþ~Ð0ˆ7i¿…wÔz®†Æ6µG‘µUÎ"ƒDàßFQÃz311@åf…˜yÕÊ: ŽÐðwÕHš AÄŠ"ç+ÖCmÉ{[H<ˆ³)‘>çT˜:amõÚEO¬ª÷›*M–ý”2k|rǾvmAµa¨¼Íš²#„›^f½ æ´æ›ì žöÉ-tT6Z¥oÂ%fÝ x  =Q®üNÝ}ŒÁ”,ò,í-gæõâS÷ކÉ0g·TjKÏT¾ëæQbß'Û¬­­mÇGýbë¤`Þ!½4e“¡|b!!zø®)¿í ï8]×Îöš‹ã¶‘4õeN;ˆ+Wçìâ¼;r)u/¦Hme…ª¾Ê*±o6ÓýB{V)Lo¬šÁ=T·ÁXÚ41€'ž|´"C NÒÒdß!“ìem«p0Ûü pê. UúuXÕÝ-ƒ{¡hZ¹ ^°kꟄ›…Môj(¨5’ôžÌˆåÇè‹UcƒªT槯—ß/&º%–—c«Z¢²Ú\RZLð‹u¦‹_þñ›—¿ý÷ò ÕyÉÁY6ê–HùLì>âU ˜xéæ0Ë·©öX>oD؃óK.Ö°ÅÐ9Bîe—ñ;Æ«M˜™ë­< Bðt ÏÁ&ˆ2'ó]ÊâF 5 ¼™þ\˜¬‘ÊCº1$ FÍ23VÇQl4ªçÏÂՓ é .SSK&¯Úå]U\/¹ëø÷¥¿`ðKÌa—ýZÕÒ5*=ÝéÕÒX^XNæ*yT«ì'9±U~ç⮤8B»DJB°Åê¤>‡-F÷yžŒ«TÞ+6+¡í>Ul^$†-íêÜâʤdÙ)Ói‰ºI6Ô;i¦§Â.Zð.*éZóÃXÁÊË„¼æ2ÕS;½~tÐïR(þÝü1j§xë­lrú‘(AÈv-'X÷Yº'9Aq„³å‡ˆ+2$§8­¨B›à‰KLikçRâ aº|\iZ¡¬Ð[zpT¯kÜ“®þ“HŠd{a¯5R?™¶‚ÃßD³l¹‰ï¥ËAiq6l×Ç&f Ûñ“°m²]‚ ß¶Ý©°=`ÈþIàÌ´ÇddW¯ý¡h¶ZÌö¹ 8’ÀyfÐ:-Öº?Õ Uξ4ÒÖd®[0O™êÚw}Ѷ¿S9Œ3¯rxúèfÚ4ퟬ"­|87”¢ÎîæµV|ÎÚ‰{oòÁq» ƒœÿµß†’´eCíOŸh¿-¢ …ÆïÑ~Jû÷x’÷­¶±óN8×¶š{\v’dQˆ$w›7¡ã. À£â†kya/Qµ.&ëóÌÀ$/ŒZ‚,ØÏ&‚&/FT×?"”t×âßló  Øâž"kKÜÊ¢§(®2õÔs(òU)òm͉ݩms¢³…8®>Ê^ᩯê¯LÒΈ籃‡®ï&»ÅvŠÃ±y ú9æÝÞPÂ* lÂ6nÝ$RyÂMžâÂnOþ“61àß4W©r—éξӊá ùV÷K]ì6{Ð")[7³/zuàM‚áÖNCÓüZÜŽD«>ñú!gRI¾:'l‚öLôvÖç†÷g}n?) p9Ü€­èZv6ÏDŒBZI‹9 ìšrB$ªÃØ0‘ï©\W^‚Ðlç%Õ‘¢>¶˜ü0=›ãç®×£w'`¾ª^N yØC•AæìIÆ_]j³Åº`dˆwQ/‘0Gð’b¹\XžÒ*¨ oo0qWÔ!÷srÆO¥òèÙÂÛ;‰Ðìw1éëM±j1õBίLåu„pœ-@ÌœšÅÇ c$rÎüëïøã¿NŽhí—¤ Ó½ªC.·ÉùØVE¾-"µ#ØÄ4t ;)•Š)Y/%~nð«•àrëŒú¨ÑS ­æŒè Ö'e/­š¾{ª¥ÄŠjbχû–>èì·3‚Cl&ët¶ÈÎGÅï^×r›“¸Ëž®qÀªI¢ h¡ê³ļ:cbÇ&Â*áS më&^÷u#Wà¥$¨Þxi9µ%0=nrç  õ³EÄøI¸ä·¦ëÇl:À¤Úq ÊA'sdè´m_8ëy»^î9¦ yhN£hv5Õ:9UÜMøá½‰–à“MÌÎêÌl:·ã"q·Çu=\ q ž?%DÒƒ3Üž7Ø~æ¬74ó†7Ýuàhﳑq+%{ µ4/ëï ñ«¬³7g²’¾M}Ì’öá´Äì$‹åì Î)¨³&r¦>S„ÝÂ>ÞÈ’©í»‰»ÖOMkÂ7ŽQ­ê éxЯ…@GÑñ±°RÀ_m;8`^뀣²v×êô±%çÌIð—Æ>+¼˜RêéÔIMCذ¼ö8ÒRýbÜ5S;ž’#cUÏ]·2ñ{™x9æ¥Ù§q¬¤â˜ßºi~kdP·_·Ö<ög‡á<[]-OYÂð›ë†B71^?ŒÍ2âÓcs?·‡Sjâ ê6ØøÝyÖ‰írAg'ûý¤ õ0]öšO€+xu:m|ä]&Qx¥Ç¾”èR» 0üë$Kù‹!i‡7,›ÍóÝ’¥žÜz;~èØŸ©Í<ú€ÜÅÊÔNÊ#dÔ¾·7Ûlü«¹q ›"]ºC&ùÝôÍ9µ-ÔñØéhXÞzà¨NÚ56yÞ àµHXMøÜxzÎlŽÇB÷´“úÙ)™¶JeQ„#qÒ÷Á¾>vó\d¢žf<êÓ¤M Nž»°ë†ÉÓŒ¡À±íä4\ŒHãHŠësî.ä2M©Tbš ÉZ‘FÕgE0Õª´µIë÷´ö ÖDt9ö9=Uj}o†©>L Ónp’E&àECœ†¾¢y*Õ†O~Éî̳÷Þx¸ÍÆzƒÿ"÷„P ÝþoDÚY´Üqù[+Àd£í‰ ÿó¡OëþŸƒâ¼e„1î:nÓ «Odå„e|ÌþãeVVÒ÷O\†§ÍÑxåã3ãLI¢4jñuÌR\²w¢©¥½öË_þDPÔ endstream endobj 429 0 obj <> stream xÚí[»Ž,¹ Íýõ]«÷ht`ÀkÀÙÚ“j¦§xƒuâß·$’¥RÕԬ팋AwWIEñqHê.¿,réŸ\¼Z¼‹kˆËÇÏËïß–~T‹kQ.o¯å¦W-MþHßž½ ¡ÔCªôiÍã¦TþfTú{Õ_îáòëˆ/>Ów™>Ÿå•éxæÁþNOÓ+ÜóÙ5é—È„óÓô¹¥?‹£u¥ù¨²Êã–iæß4Ö•f€톂Sð½|>A¬úÆx4[ýÂúí™U³Šâ¼Šü=u±½™TY- •›ŒaU* *›N$¿M"uÚV¢ÆÂÂ!ù^#«+:1š-y‚*æCa…˜4þv²’/27)A(Ê$¡8Š¥ÝO]ùÿÅ4ÑppSÑ;æj€¸nJv5iÑÿñ¾õÌ”\gJªˆ‚™’¶«ŒnâýK –Kê¹÷†¹ó_©Q¬ÆøßP#>óß Ó #uXub¹kztä¯ SKŸ'jö‹6éxoQ§Š ¬‚ÉìâKP•9fª¾vÁ’ÁÙ H¿B`'½1LÖZOäQšO¤Öìœûj­ÍÆ4Ø82R!é£à¹äCmˆP¿†Ã‰Ÿ\þsøÈvt‡mdø?Lmá§²Å2œ>8à˜Òî6:ÃÀݱUNÑd©cäy@ñ„Z4•'X¯-¨{M %–I¤³¸!íêC‹—zòzNμ²)¬»ÖÓüØ„Íp¹Â >[’…Ðû&\Ê®0®VþÔÜÁ@êŸÄ ·§<˜ÔÌ®7½èŠö6ÿ¤Á÷T*›õMyp5@Ûl•êDÝÝo@ T¼P8b8ä"‹B¯ÛëR<\¾Û2×t|Òå­MpÀj±‚¡¥î]pq»¢¸]J5†íc¸äų«Þ; ÔAw§À,NÆÿ …Ù_úA`HÄ™&ù{KÂÙ™\Ý©c% Xƨ*ÃL©ˆÏ¦Rýi†i¨+ˆŠØ´Õ½yÕU{shN,àÖáñÑÒÌ ŽYEg³Ëù)in,( σ•rT.QäcÐ;ù•šI0¿ &ZqÓfÒÏÉ¡pT 쬪$_­NI¾c(rÔ;i â.‚YXðW›l‚ò.b£Ð~aL°uSq¬¹ŸŠYWCÊ;°€úN;Êñ°£ÚöI²aMp¼Cð–É6¡QnÍß÷2™`)9qg,yÊ¡ÄÌïNÙRÕK I¦Í¡wÛ-C-¸c^ò‚'8®è£¨³‡8ÆRFP\X6³!ˆ®‹+?«Ê !~$¨àRÌoòÔÒ'AV§?¯f¡}RÓžõñLdR⺑Ré„N† A£"£!pR¾8K–x\ÛõÇØÇTÚ–Y†­tU'_:èÃ?¬è ˜Î˜RzV±lV2;¥W¾e¬ù3C ögIÚ>ë®ØŠ券Ã?ÅYQ å¾%‘•‹L™²qªkI¹j(w60S¦£2ièð€ÔR³(¹"½ a‘öc,ÖžÚOÏ>P"ø…•)¨R¸JiLÜI2š« ^L‡2jœ¼šì4—ïÆðqŽÙ3ª¯Êzuý¢_IaØï®2”8~šóíuš,¬L$Øëïs'ÔvÇñĈ¸&­ãÉVãÉ¡¸).wÅtÆ”Òù{Á:&{ÿ1z|1«¸â›év*y^”qxd½®ˆÜp ö€ÓÝ~] 7µ)‡C*u–*i¢›ëZ€ÏrêN+–δ ¦_ÕkÉú츀iúWÙø C€²Ý<ÙsÖü¤é’Òí¬­[P Æ›Á‹Ö‘­áÀîìòMï@ÛPa#ÜdðTuÈycÙ ´‰'qT´°ÛóLQ¡¤MÅͨ ‚Ñ¥z¥5s¢á } t p-éÏÄ/ÿüû¤ƒ’›Î.øä)¼Z2tÚfÈÜwLH¶L^aJÜ$À-ÔH\`èB’$yüÖ]àèî8¡ôËûjQ\ðûD“•ôKª:EÌÐ…8…IåŸÃ/ç •é‰!Ð f,õŸì Ç`¹8¬QN{‰#\ ¬fçXí“ßİTä›Á)A%<øFy¾u]1 %áÈxópxÏÖí(7œØU]%iÀ„"ìŠeá«H µË3¤Ùv5Aš€uæFP& L©Ðï’ø÷õ®0«“½‹îŸ³ý|Ê_¸"Tê5÷mùõ2ü.¶Õ¾B±ú{ï+j¦+Ôö°¸ïšJŸ(Nî¹0û¬ìËDÛ·bF·Ýrbû HÞ‚ð©‘vŸ3àC–1²\l¨%]W~yn¢¨PWbŒ´¼68“U<B“& ¢5{øä· +·_rÖZp«@ëÛ¸SqVpëûÉÍŽ˜n´ê:+âlè ´áiO«¡‘;p‡×q|Ñ©Z|¶°¦Õ•ö⬳¬xùaISg¹ó´‰:ˆ*I&Òéц潮nlŠ·EàÕ—±u„6x žk8‹H0·jvuþ¬ŽÐΚ?lЍäB¿n‘¤¿Ë«è&°n~¿†ü0ä¨Õ{ŸÓ¸ªðýC+²Jñ»~î(€ûsÖSB®BwÍ»³x¦ v·Üô´Â\çÏò6\«Þ«Oº­Ž—j´m2–¬`˺3ib轿G\{¤¥ÆÀ{¤¡z¢p+]Õ.4èøU~£gÿNì³»2¹7s›ü`5o(Rååx®?É_M‘ EQ¶Î¸»àÇ‹ UrUÊÑ\QÙà.[Yå~¨Û;k s• ]™`'J»?õ¾Ä€ã 0fÔ:“‡fXÑUhÀ¡^ÐoyóÆ.Î<è›9ÝEÄùeÔÁ*€úÌ*²àYY9œ”•U8¹¢‚œžœ”œCm(bpí®ÔIqÏHÍ|T˜•|aè¤~ĆW’ÆóuÿÂP¤Tv®õ"³@sÿ+÷#•>@1øý…%;½WÝ”úA‡Må¯íZl1Wq. Ï]ŽºOÓ(»Ð‚ XµÕ—r¢DÇWÓ”sŒ2¿¢@!xNÇ}µ¦ð=  Ó·Ívu^Vn‚>Š¥ë:@2Š9é§£+‚¬÷Cûsì~L@%uŽÇêAÃÿÓ|ß5\Á/ÙÜI5þŠPë:Š^`¼0×¶áfÍ|çöaª}:(VëòÿHp;ZÊ߭hõÓïþ €+Õ/ endstream endobj 435 0 obj <> stream xÚÍ[ÉŽ3¹ ¾ç)üÖh_Ç2’Ó$} rp·»s˜ÌarÉëG )‘*•]îƒàGÃv•’âò‘Ôúí¤N2ÿS§ OÁ'Óéã×Óo§~Ò'%E’IÞ¾Ng#Œ²å#|»ÿý"¥¾IiÔÕ¥ò]K)ï׳¶å—‹RÚ”ÿòkËw|SŸ|å.úüiòçg{îÊ('/ð6ÏÏÒ•ù¾Ï·°²†¹º=£ë9Ëè¸áz¸zÝ_’½Ë÷oî`ëÉéÁ›Yžô±ÀUå¦Që7 d-“šPã)/ÜC1·…+ñ×pAÙEÊ·»þãíÏùÐÏÊgg!©ëÙä€Â¸¡ˆÚŸ»õ]¥ FàL×GÝ@í—ÂïòÍ›Ô`ÉL¼žÕ¥ÆÙe„q×Ê¥»q6`Û#u;ç§íûñã|ÔéEP?üd©%hï„26˯ÉÍç%ý½±à5Ì`¶£uùÚ'ȯ:è¬cYò1$a´#VeC!§r û·ˆâ/üUáûûI‡4—Žt uÄÃa‘‡Æàû6³S¸ÆK_9‚¸=ž}[À€¾fš2¡±I'þ ئ¦Ð©›tšý¥\ÖŽÍÓc3–Ÿ[Õ!b–ÈØ~tâ׬-ÔÂç¯ÞSµ8£‹ pâàøp{Ž¢kIU%+ˆÁÍMŽñò mÔÞéÀMÜ ËH^$¥†¼î ©ùÓìÆ_Î×Ä°ãØÆæÌ7ØaÓhÈ0r¥Ä›¯ˆã³Àüýfâm…ly}N$‚ró(ÎjµÄí'?bØ›G+tæjȲ¬Ev©  ²‰Z-\úö óŸÝýÍ5)¥#F©;(žÇ§îxjt¡õ̧¥4 X¥49ˆ“©‹oK3AÑ¥«ë–åW˜j[Ÿ†»¢Kmk@à@pá0ÆtùÅ ìQgñ$÷Åöxæ:K§» 5ÄErš¼°ì¤Å‘z2)Õ㎞¹Ÿã_eV d²0b…Sz±l&” ˆØ|Tù­ßáœd‹„åw ŸV†Ÿ)’š~õÇ7£ý|ù÷?XT3 Ah«)|ñ t–ëôÄ5ÈD™rÈùÓ§D”ýW[k…•zÚÔ¥Eu­DPžGõ¡BÊ\À(,‰Êõ)S e‰¹8ˆ×í)C‹ŒË¾>úOO÷²@AÕ©Ãñ¼‘¸!Í:;¹u6'à¹ãtt/ßs©ë–Y5”ß»(ŒÿwêÚè­Ï“L>–œÇ}EW÷} /õœ~h¿ñZþGÙ²QÌÓvïZG¨ "~Eé ÎÆÿÝè.Üù­ÿjƒ©Ëq¾ õÑ}ˆ¶k™öûr;ìÂŒ³"*ó?ù°>ähÞW~ìŒ[ñƒÍ…ôem„÷î;ó;į̂ﺳ …µqÞ£ŸSåøtO)•4@™ŽàK%Ÿèh[g2.˜×“õöd¢.ñkH æ@ì‡qà)ù2ÅDܸF9Ø>>±wž ž3•ÜB«@‚ÁëÙ•lЭ·`‚ ¡|Bf0Y†+ç= £(zð°ã¡;áMèÀI.VVZèHL.6ò©ÖVŽ'ÅJ)¡ƒ†ðé‘P}­Ád ÁšKêDêa·n#{²`yNiô³eÂuoDà…×é•üÇe012@Ô¡™Ãçñ!=Dœi® ¹QOky8n#Ñ2Ö7¨YÇ¡*úRÀøXVXlF‡šcP“mØi»k~ê`ŒW+!»P «á²:8LmQ´4Ù[«|tûšQʦ*ÕÃã(¿‘Œ­ŽßÆÀuŽ_M¤´ Zipê[ˆ­-»‡Ø\MoCßÌ“LhWÅuFÞöµ¿8®âu„VÇåvƒ„ÉK¶üHÁsíe oÔf;ûJw”f ”*çÂØìŠIù[Ë$RŒÀMµy¶Ê¾Ã¦T+”¯V'õÓêäB²mšl'q€ŽZŽ?× ‰,qw9äT ƺU85MÙtÇ ­9ð—þí—†ÈùN–ȹZm@ Á¶ï€¡ ÁË0ÿ=Ä8*æˆâÃL`õé M˜'Ô °žǰ/ädµB_ðÓT*Üh|x Æ å-‡-,Ð é†g4·âõòßG‘Âì½s;ÂÊÐN±}j^°ëesì3Á  €2$EÄ,ÆØ) 5é¶êWólq¡•õEË´Î& ÜI;•>†„YÍÎÓLó¨òAuÌUˑձ=QŸs9ýM‹ï4,Xâ„€¯wQÖ¥þ–rõ$»1º©§o‚í¥¹òߥ•ÕøæÁE¹Ý6f=j‘?óÅSùGøRëÖÉåÌÉB\ÿôû3rv“\œfHíHMÓ*J}ýµ }Ü”œu—„¦>×›Úz7ú‹•Ú{väø´Ô?‡Vq–¬ã¡7»·VÌv×^NX6¾’pƽâ|\ž:€b@äºq¬wU E¢.S]ùa mzìŒù(D6òBÑçˆ`.8 î…8L!Wc¨ÌRGº‘˜˜ð‚·SÃp§‘µ¶_w’3FâL×#/<¯¬ÀJõ{×ç}Nø–â.Ó]©ó|ò¤/„€Z‘.A]ÀxÒض*Eïc­Ï…‰ëçÆÎZN…–Ç*Þ³È(³æ#êHuê<·eJªti8ÕhAÆShë=úFçeˆ¿? rIýšçdÈ£"y“cœwî :°©r˜ê,ñRˆ#d˜›L)ôpŒ»âÓŽ÷S˜Œª*h ]XØáƒ q>g b1Ô9a$K¬X?ºíô´ÝDiªGÕ¹hvÖŸ<Ó¨NÎ^Î×‰í¨¢o÷D´¹Js]Ǩq˜òs}ˆaFa¶·zÜb^^X’ÓTLbüÕER ¡Ã>¼Ó°¯µnÇ[Õ»ŠÜØð©n£FG‚AD¹ «c·Ü€’-žñó@ns5ˆ6ãk=Ùד‰ŒBßt¨íªi¥ aÏE’#ÎD-”q/@86cãz4Ç.ûÀÀ§—}¢ŠtÜõñBkK›S¦Ùö}v7AZ‚2iâ€Í™eWÿ†3-K¯¥O/«÷Ñ«>3PAKæÒ²êIhô”fØyFÏõÚ?W°l/kaL˜2»pep›rÖQ/¼íÒf¢¡ñ Î\¶÷yÝf¬L‘uÜoŠB䨹nIÿªm‡AI·Áv®÷¤ÖôÌ·0«[•#£Á»,Ë»í>Ë#núªˆ0£ÙG˜ ¯QÜXÊ“ÝÊE…Í%É€¨‘ú™K·mc`4Ä E”ë•Áˇ´Š†°g_ ÛôS×´‡´6>² ‚VÛ–À6«VòÆç¢¢¤³ë‰2ŽäÉŽlf¯Ü:I=é«„èÀB*¬,ň´*F„m‹e4ázŽžËíý¤ „’~θnä *{íà/vÉÖ³2+ÞnL£YµÌĤèDк4¼0¶GÌ6T&Zöð÷Žå­ïU|Ž]Q=tíöy[ls×_Ã<Šó·“ˆA‡ÓNÊaRößÖk£=ýz2*ä·i<ú×éo§ŸW° Ï NDëIÅm·šÊnWë?•¬U»qò«€¹­"g6œÍQ‡²‘GÞ‘±¼˜5(ú20Y{«W£ÞÛçºlc }Ýäià'%&¢3–”nDwVá[AÜô|úDnÇÈY»> stream xÚ­[¹Ž#½ÎýzáOo@˜À€vdc2Ãf4r`8°ß?0*²ÈfKÝ»‹Å`¥b]üêèË/ê"Ó?uñpñ.Š/_ÿ¹üñãòÛïpQRDÕåãqQJH­.oZ¤÷\¥T ¥|¼ÿóã/—?},¦€цaŠN3Ì#ý¹÷7°2=±ù‰oßÒW‡ßMú–þlšjnéUF¹û=ÿÆG•¹€ëãg«ßý5MM¼Ö¥Ê€K.Ÿ'¸ú¬/k¾Ó7GË·§úýM•ʲœÇå•掟5~î#ó¯ýó_ )+ZÜOáÞ˶ÏxNbJ¼ãHPú˜ ø¤hÇÉ"æ.ÙU$V‡ZYÿóÈ;Ì>%šB„ääeM*ó¾©t±ÝÙF 7ZIr˧aºøÉÇ&¾~ ZšÆùV4eIĺrö÷00MFLµÃ¿ÿ?üï_ Qi¯…Rv0mﮌe7"–ÈQ&«Aþ¿ï˜7[í“HÒO:!å­)Ò›I¿èi«hîh,þÝfºð÷{mð—ïª4E`7T XœÊAµ0Š‰Þ¼Ô^œ®#éé*ª’Ùª9"ܲ^óIÜBó!ËáB]¸KͲŒÐVx Î÷™ÄÖ¬¹7~øWgÊýíw3h€6"F›ô]w"Ö%©¸¯,eœ1èÌMySZXqb>{9S¢S;M¬»£ÊötKgýá9!]/VdO!3¹+2Á‰.$š°Q1ˤ–:jù`ƒoÈiú?dbÍ•=<ÒZÙ¹ËÈö$ Ñ"­nUõ1e¼Ù1ªFS1Ö7çóš°ÝÅUEk¬ŽnšÂõRŒÐ¾±Ô¥åÊ×R•µv›’¿@+ºý]çN¿-–Øí}× ëšÜ µš]@Û—Xןn¥7ìüÛs¶‚5"X·ákâÃ_Á ±Mxuk/ø)? Þ¸êºÇǪ" Íµë#W¤â…§·^Ò8ëØÙ/¬îAAìÁAŸ©æ"êø E¬ÝËÊççð¥_Åí¦Qàƒ²‹XŸ2#«cÝCsÀñ<«O ëV}ò,zÁ“ž÷•¸çç—u¹6 Ù¤YÈ ÀÅ /\l=-é=Q1Ÿ•l¤À©ó%\w±O…Œ¨(ÇG± ªX'­pí¼Yϯª8‰¢<ìñã3÷Ò0uÚ¾rãˆÝ{2Mn…¸òõ!¾†™Ác{hŸÏ¨Ò]àbáÑgJzzeß¡¿ „Ynƒ(Ôz´3)÷––3¬d2¹¢ÍD­…9÷PÌQm’4«l‡^2$-ë_¾‹t"F{dѽUX%+ô„Ïô¿ì9hW,ŒIoéôT†XeÈœ—•Nx˜zL¿PçmºXSºÿ·¯ÓÆ*E%!‘>m^òÆ H3m`¿sKhß֛̖P1 •SÔ#>š¨˜¾yèÔÞN\ËdmŸþ½8}p!),v%i…Ó½žÃjÂçžj)Bè°lsÛzŠŒì 9ƒ­l¼9ʨSá€=ä‡6E(uQIÓƒ’Ô"Ý6é”.ªtʦ|ÿ’ˈYlÚÔ„&äë&o ì%Ç”n‘îÂÒžLÜ…üåœöØÈ vÏ!1Mr’_'ß=™Ñç—M¿s°u)o4ú9^fŒr9d*«éVÜ*†Ù—¢W¦@î´j8¹´S §™«8nYÞ(´­¨‘ßË iïÔ‚È‚³Ê/óÅ™¼ü°×’]³Ës´£Ü†‡õaOsO…=#YÆž”Ö3FÈ%#Çðã-©£ª× ÍÓ.ÿ-QƒÎ÷¬ *ÜbÙ$PÉÊ=}Õt™~îà#ݳrNÆÑ|ºüë7–®J7O´zHJoÑUUÅ ¿øʵèx_90çŠq{G’ àS¦êëFN~?í0‰÷ %O, ^ÙîÛ ̲±ƒMú³ÂŸ¥ádÖr(êJ% ˜4j•ŽÍ²À_б™1rÓI¾få‡fL‘µXˆrê,–Ƶ'ãºR…¶®œ$—HPc3úÁ%£Nˆ!¡‹¸…ŸHú'e¹*ÔÌÇÈÐ3CÒu¦ÓköGa¦%œT“¬P&¥Ð)'ëñ™M°¾Á q…A3 Я1“‹ÂńĒ[ €5Ú.ÄÛpynât„«æî·SÅ u§<C¶÷»´Å‘ßiÍß複+nH“¹šŽ«<ñä f¡4Ý^ ÊxÓ°áÅ4œ2¶jìÔ¤¦9ƒ)+¼Ž£ m1Ÿ=Õ\«Ð*¬Þêh5ê?æŽa ËpѹYÔÉ(“¦ðÈ 6å¾,ù~ù´–ئi4>;â²; *‘ÐW£@8 'ôu˜QÄ]2GÕ«Š–&Bi{Ÿ¾Q›žäIÎ"9@˜a&©¤´j‹mo=™ÔR9&<[N`V+åf»Ps×ÍH\ñ)Ò²zLŽÔÛE^V0+õIÆþFù]ÒŒÕKsEvIÅ‘:½4¯*ÖTQlSéˆûwhÅ1¬;Ñ Ô ®%3œGš3§³Ùɜکðþ»›D ãr§ÁV «É6 ý¹¨ÔÜnQ8#Ò]Ì×Ü7lS1TÄ>¡ÝT¿ëýÐpè«|nèùÖ”g ú0CÂwíá3*7Ê6tÅ`«VÐê"íkk¸±b?š‹·²)˜Àq÷_)Ú£uahŸ0EºV+ °èð1#°(±³ò'ÒA¸aK[óŠ ‘ÒJ‹7®€¼Ô2”€SÔx¨)6W_O,k5ªlÙWÊ«ø©{{꨾m2„ІVš$q‡µLý­ÕÛáƒ9£Þ|Fae¾Çr(¤á¨zçæµ±Û½T»Ÿ+ /z»©Eå6ç“çb·€ß÷­57‚tÁ¨¯k9ekôÞåÞŸ»*Ë+ìá˜ï^÷æÚ¢ž)Þ¶̵ xG±…UP›t·’×mßÞà´óˆ£TÍZ‚œKVã.öd(Y)¹lhêIœ{G4 å.Ý\]êEÕÎPà6¹‚âk~FžÌ¿l”¶Z~0? MŠˆ|ŠòM¡µ> Øèj9ÿ2à¼Áâ,—¤FJœÛõ^mãJª/å˜ÎçŠQÁ3¸ñ@½Õ²xCðQ±jC¶rÑ*ÿì ¤×eêön ëœ;ž€ÒAc6JEõÎìu ¹˜¤š§C%ÓÈ:¿Œ0BH‰ûQe³é ÉKXiEú×Õ<³²…#¯ËDáÀÌÅu6÷mËxââfyéa“XõJ »|õ£Ê4'½ù‰ESCÿ@V7ølØåçÕXyÏZ_E)ÅÞϹì,:äq(?»N­Jé Ôüýžâàöí ‡ >Á±)ìð[»Ù½=“eËó<ïèõ^Þ1ÿ6Ùo´QY¹d7QMõ—§éAî vût/hOtâQº×~ÌnzÑsJup¾a2ïýËRGÖa™Tç0£(€ 5ªÔß?a%’5e{ô>þp>J·|Ô÷fÖêS!†…?¼{a,´i$žî¨¯Þé3Is £“Fñ’WÓB:á~²Õ¬:Ž ì¿9uË ³<§ØÀ̇Ä|rºðDðvaŠ‘Í¬&0v£·w§ÆÕƒz•°NÑ[>CºG͆d{}TÅ ›µáv‘ε£™ZÖÕZZ¤)”qÛ‚=½UPGµ÷ÍìÓûï h¦H¨n¸× OÒ³x BŸ²/$ú¹2ô¢©+i€FõØ»ý$Í醨º7ëèר›Ù‰[¼˜ÜJôî¥{?Xp°Ë×|ûkëÀCíùµõ§¯öƒLZŸ ÆŸì€2%*§ŽMûÛþs& endstream endobj 454 0 obj <> stream xÚ[ÉŽ3¹ ¾ç)ü]£} dHNIþ[ƒ»íÎ!™Ãä’×$.¢T*/ƒ†Ñv•J E‘?²N¿ôI•?}ŠæCÞR>}ýzúãÓO?ë“v›uÁœ~|Ÿ>ìfµ«ÿJ÷œ•ÒN)õ]þ›ò±——s¹jµRÞ^bùêË}gËçV>¡|îåš»üóÇŸOúÁcè-{?Žá6§òrúN£™ké¶\ñ†ðu¸ÒÒ9¼vÅi|_>ŒWu~ ¯Ö»™®šÈ³váòà¿Kõqu(_Ò|¯®â§ŸÍI«-«¬ëüÕéÄͻˆS·¿C¯V7©DfëœePiH|‘{†ø Ë —úorúæfáÒͲè•Ö „]¾­ö¢¡wÇp¥¬fšb}ÆyTÜY—XpUœTÊkì9ãh·¡/©ÜOÑ›¯ÒÊë3i?s%¹£Ú^}_íÚ¶»ì¯¶eI5-5¢„L½vl‚>ËEñ×o‚i\>´ÂI ¦<´jóò½ƒ6C|¶É<¨ìÍ(Ch Z?ŒuãѹEívR»1›¶HV~îp Û&m¬R(Ûc¯p¶ÚÖëÔ®Þ åw(ßAM+¿£#R¥ZÛØ;\oϤþÝ^WgPg½¥bNh–uÁe=$œHš‹»Åb(¬ööáŠÍ3ÆO;Mêj¼i&‰¾Á¦ð/qÞIAÁöQ VH°õЪz.lù–ýw×DÙ!í·ìˆuo+Õˆ ˜½anx,ø\[ÄNµà)RR¤ªš·ãÑ(ö\¡+ù û7ØøaLR›Iúô‘ÒVfòE3~mûóÝ÷ˆ µå—òù×¢gktñVvêYÝšNn%o’´3Í §E“Uû0ì©{!‰‘À`6%³ÆmÁÇYÉ´8åúnÚ‘ª‚š{7'pÚ«--âT¦n²;ÃÉ+}(#ÌgÛÛLÍ÷@ &g„O>1IЊÍËuxv¯Æ™¶&dy¼ ‰ à_Äiò`^È«Éê ¿'Ü/'§àõeÚuéÛj¤¾q¦ë%ƒ)~ÂÓ¾ºî2›Ç÷“wóÕ‰û —XŸ§×o>D4&ã©Ä ÿ€3x~4±å«   Í.†[Ò:¿q§FXmºk$®ä–¬ÃC¯¤³FÍ*Ù=ÑW_˜áo7R/F²;P@Z˜ÚÎ¥³|‚”/×s›_@6€Q‘ ·¸4—åahÍ›ÊQ§NÂá*C}PÁ«"Š­øgh6mX˜iï|¶›êÆ«ûîÏ ¢ûVxÆëX²ìˆ› µÜ¨:vËÑõ°?ã§,?”§ ªò;:æsšû¸Á !¯“ØŠÜGß °³‘_MǯL(3cöVZ6Ø¥fúÈJ¦Ý.ÈøÒ:bƒ¬Äfðñcc+\l\S¼Ã%a'L~¡Ý8‹9:¨³O+È'OèhBŠÕÚ‚±önt½¬2ŽWö¢¯n[à_"{wû.ÂãLD Û'àÉi €ñD˜xcÈ|ÑœœÐ‚C£ªX‡dÓ–Œ{id¦º²:zqÀP$LÅ-^¢ ©£ *A›Ä³¹m¯D³N}-޵MyËýT2çbÍêôšP‡xµ)cÇnMÚÿátØJà>ã¶ÂKd›^Ãæ+~Ì2Ôã_ó6­ôv“ìyo› ¢$|´þ9?.(ù*·›©˜ìð¼éä zÊÝIeÂÂÕÆFâX¿2dxõé &^+ i]é¨ò„Á\¯NûH9/Á.U ôÍdŽ„ÒfÁƒô©ƒƒhöiE™Iïh¿ß’Ê´צò¼â°8¯¸6A#‘ÔŸÚÉÉîz·X¢ d¿Ïì¶‚ØRohß$Q7ÀÝÞÀú!„ñ‡öf+v¢ÊB?ÐLm8¦õŽXl®O›ØYûCÜ#$SÛØHHf¥)mÁ†Ž`rGÞÐÿíüòß%w±åOj&f ’¸fad– HÍ´jä5†Ühz´ŽŠãÚ?ÏÊš·hý£´¬Ó²d+[l¹0£Œˆmè–eTRvÙOln lyÁ /$jÍ*ªðn»à*CøõÎbÝóÅ® – ›šg>A•«J{w`°BÒ Ö°Âî,ÜLŒÀ•1Àq{ß±Ks²È­ØË!ÙädÓ¿…m›Ëk¹ð.çE(¼ÚuìS4›Öñ Ù$f9ÁÛ 7ÚLà†ÊD½aF­›H!‰ÌL¾È°¸šÒ ¢HšÑT—¸Ã5V²’UìÆêÑùR›Ôá¶®<÷ ¢Ó4;<ä,äñìˆ^+íÒbhc.âeˆ¥AŽÐ¢…¯íN¢;(Äž†«–MÝ¡M›8DØDÏ~I›µcðzïǦ®ñ‹ýܲ<…ŽcýßÂÉ›X¹›P3bÑt–”à U'ÝÑB~SVËP(È™|D—:S®•É|3C ~ÀéøN§#‡Ca:õ¨€­?Þ©Ö¾½²nœàËü¨HßqD,©%j(‹=¨×±Ô;ü!eà¶OÕ‰×"d²`Náy ”)ÿH”˜®N«÷ÄYÁlŸyf}WXñ˜­¿ý—÷ìŽ8F€_¯v ¬#V¥+áð¨#2»+®ÆÄ×MØn'zmºãóòt_Ù{Ì¥3:n)¾ë¾…¿ß»o™:ã$8ï)“ž²ú‰ýÞLX)Ž™I+øËïEÎñ?ýbºjªŽ!¦“sP^äþBOL)Ÿ±Lbô? Åæu>êh[&àÈTw 8ÔØP\ÔSzƒéFÌN2~Q¿.\æ‚qÅ8òi,Xau¾Ë–гžêGœëñÚ˜Qçy˜Á°‚çè¹ohô^U<Ʀr.ªR±¶I„QB'˜}W¨ª‰J¬WºŸÆil_T²~!ùÑÈ9ÖØN†¿6ë-d7ÃË<íÇç"VUv‚Ìmz»JQe/kÔà×È¢‰ …†9 ¤@ÿ¤ÛŒœÐ8 ç§¼LÚ¾ Áó.‰W&Ç WGÇÙó.DéS ílüQòþZv´zN(Á“w§ÝhXaýaÌME@N¤Ú†àê0{dú`Ô»Ô‚ö’Ž=|4üm,<õ ^O ’©ndÒ–Àæ©Éqºe‘ÊäÂß1ãîØXÏ97»÷ÐÝÇ/j±ÜbLºLp–˜.³"èÚε²Œ†™òº-$WŒ¼÷ŠÍÀÖ7A¦&‘P2Qzc˜Ã‰úꜵævsÆÖ(`$§¶Úâ´ž>ˆ,y®6C«|j@Ÿ÷>Ö~ÑÕJTŠH]Ÿ:Ÿ¸å¨šKp®|O¡ø„â’b&ìoâ¼ÙtõZÙl1Ø)ê¼ß¼r£Á°+*ÔP9ÀfWÔÛ‰|ŽeÍ›?†«:†úe«~ã¶ìôé£ ”ðìïá<­’uŠo8p£ PK»Á™Ï¶ö<ç_¨²v(Y‘HäöÌRvYú‘0¼ÐCÓNè%õk̘Àªç˜2çã…‹Àõ Îû:âÙzŽ´?£Ù‡"±ì]JË,“bÆJ‹~C ÚNX±ã”¹dʘUA¡±‹:2Yî¼P} ÒÌã §oØüݺ·Û 9Eãdi8}½ôþ˽ÒMžxe6æ¥4Þk˜÷nË9> À<`^`º´Ï’¿A½Hô£^Éeýˆà>ŽçÍ}ÈW(Ú6ú­ÒQÕôt¨”3zÒÜfîŒ>‹¢ ¿š©ê²ÞÞèƒú \û€Îä,@5õY–®N_B:/O3 ¶ž{H›†3‘ri–…NTÇ(,¶s{tEÞÚs¬ò9Æ ¶Alc¸ß ©àU/të*òü?¼$ßż(“gi±‹¸ /¥ãŒìÿ¨^“Ú svëÃ4‹æm© Õã\&†Ð Ô-$š—ßN›ÍÉŸþÇf%¨´0púõ¤cq=Î÷Kÿ9ýýôWrß¾`­š÷Þl¬j·ÅœvH Û§-‡àZÒw Å’•öi Šée—ÞZ´‘öïÚõšù©Ü"&U"¦?äK,ûWëòÎW˜\ÏË'ÖßÞ&TÐü4Zà 0¨g±oJÎ(¨陡Á"D€;"`»¹°ıñ$^»\üÛâ»Õäî*’l×!š®jæ6—l±\ÅwyÆH2E ~±§/g™%RE‚Î %ŸS>tŒ\ÝávSÔ#!éƒÌ`WlÑ&Ú€/|WW™»îm»ë¦Cã˜=˜Y~ ¹äâÙ\'2 çQ”Ç> stream xÚÕYËŽs5 Þó}r¿HUH€+¤Ù!íß Ä‚÷ßÇ—8§éLG¬Ð¨êœœÄv|ýìþ9؃iöÝ!§º•zøö÷ᇷÃ÷?¹ƒ5[5ÕÞÞG¿yà«m|»ý~2&FcBmŸt>:a%àjôç ¦½üƬ”ötiŸÈÇå(ìÍüïû>×>…Þ¾ÓóMvÝh¼IÈÞ¼Ÿ¾¿uÎSg{.§.G+ÓS4Öö¿šÞœ˜žp¸ÏÆ!^d5à*ðC¾r‹µJÚžà—;Þ$ZÚyQÆ­í°çc&9ûš²t :ô¨;÷es)þxû¥¹ÂÑú-†JFþ|¬t˜ètã$¨_=&}u5Â*ï%ã¥Ûmz“Ð4t$¬`Ó®i z‰™¤½v;ÐS¿@%=Ý„|!uo“Õ‹¹[Õh¡ Úeþ6ÑŒÃú®,<<Ÿ—ýŽN®/Qm˜ÆÂ†íHnvDŽÅ¹¶†©5,mÜhJµ ÚéÒ¡>‚–(ÌIYýNß7“v€lœ+„"žåËâ>•샊œH—íB@&³'UlEˆ•÷Oñ£V4ÒHM#wš‡„oNJãêvQ¥Þ¸¾Ï\'̇ub¯•PuÞ –äÓäÃ`Îߌك ›Éi0VËæL&CÛ~¨};øÿ| ”êª}ÎÆ»¸7Œ¯ø›œXz UGÂ]ì`lA%™!9íl6öfsðЯæ¹ŠX¡±(3“ æMÔåaßrvzÈIÇÄêë*g¹¬rÃÕrÖ ² rD3¿Å÷È™ƒÞ€y†¢ã­ |& H «C…Âð¢u(q_'pw¬æ‘ÖPèø´$I*Œ*ç£ =Äœ S’x¢Ì-Zè¾ò.BÔ-: ¥à…²‡$’IF ¼ñ)oà ãÍTä·ÔjÉÜ#”U¡àìæ|ÅW³ßäÒ\üyÒ@¨Ä+•uE]Nƒ˜F—õj~‡òïRì$z±önR{Õµå&@%é’ƒ9ä’¸\WFc·ð¹×ƒ˜Êgñô 3:“ö(žeLtßa"ÚÙñ—ª¤5.ÈXW: OU­™#*oo%ÅPÛÿ«ü÷–™°êùm [Šœ‹›P©âäp-]¥DŸÆÃ;–mß°ÿ»†Ós¡½DÃgpÙöÿhZäÁ»¯µ3þŠký\BZ]ÉWúÐ;Gg.|ú^0 ¬U<—É´ÂPÊÏíóç•ãLÙl­ÿgí4÷ó…´qÅœï{ï{í< 9—·ìiB÷¨ÿu b…>FfQR0ø%Eh(¼ù Z{5·ŒâÂ3»Dg“>PK9àôæa˜tOÏO8¿ÕXv'Zj8[{RÉ5à÷~—ñªÐŸfPó»AKš€|TéÞ½zûx†R9¢¸)Blnþ`jóê6irþÆ>¾ Ïð|¼ÇGAßë~_Wø°˜Í'„_2Fª[Nå+ÆÐ'žcÑ|4¿àM^'ú>£„¯ FYµ„¡özak÷S½CÞo° äÐ}bý_Ÿêݽ߾OÏ”¦@7ûý9Í=q¨Ó0ëÅ5©þ”‰ô…0.µµ"ñ+ž£OÿTÂQ ÷-a?…ô®N¦Z¦Éè%n®”ÏmNu 'Ü£mîß—6÷= „ð@0 )œÙ­¥xµªu@²^¯Í¸KÅ[JkƒÝL.ÊÃ(ƨ8Rð•4Œ›¬ ò¤Ú,1*аk‹ 㣵F±%¿ÇnU±BÕw˜ì>O‡³êwÃ<å%E™æ)L'?|’4/”“!…ºñ§çP&è\‚uªsñcb~ã.Ox¨ÑMŠŠø ~Ÿñû_–óÐÕ~†ÛRdã3¨ð8>˜ hÿEk™¶­Ý‚ÏâºþŽÝAjßÉ né§‚ï²çÏ* Z Ö¥£HRéÂ(iúi÷ØzksfŒðN pÈU¨p«êUC ±O*ïa [iB7¹E«a$öÐu7?› CYLÁeQŠHÃé±ý>ŽÆ`ƒvÛ‘yÇo~óXaÔ—áÙ‹b÷Yï5'²š[ùñ^ ,²:²òriûM}<#ÇËÜ’)øwÆËn>)e™W)U~ û]õÍ^a/áHUfçdbyî‚=?¶ffäÚ'Á#pø`¬(Œ÷ V¦"}®i¹5pÿyðRæ$/F¸èaO¶1U}> stream xÚ­ZËŽ#» Ýç+ê¬èý /$²»Iï‚, Öíé5íÆ¸6ù4í°ôÝ…²F¡¬¼)«ÚT¶fcd£aEZ¥¬ÌF”=îÀ::5òÎ)óŸ0Zº],s#îyZmŸ§ÛQ¼zL:ŠÅ£yÜÞ¨:Úµ%0½/£dþ+3“]RE>éÒ¸û'NpMÂY¤ÊgI¤Äh¢¤NÓxpOªT¬ö¬¯…s’⟓‚ØJh!áϤðÊ c½æ ¯¼Nú¦ñeVþ«wšÿDöKÐ2 Àˆ¾ê—ô¡øÉŒºün…Aw}ú\suŸ… ™(”³y!\ "ŠO‡ªxŽd\ÞÄY:þV¥6¼hè89숗lc4½7¨ÉÒü­Š>¿(T«ÛÅ_ùMnyẶÓb%:Úk·j²CYÛ‰ˆWìv$û-»!8^)°« ¤2påN ;<×ÿ>P“7¸ÌĈÃqg¿Ü¹M {E)²¸C€9:.9 oÕ•“RU#v¡Út"<4Âu耀B(x\j^¼§¼§ ÂD×ÜgXúØ(¬ëc@5*Y‹UÊòóÿ%öQjXU6XÕДÌ_<_÷òh^.][œbÍ%‡Ba‹GIÂéÀƃL»2”EeÄI¢€HÉ|5K­‰”;— ª|-f©ÍÁ¶Ç°…ÿ'JW 1æÚ¿ù{®10žŒ®þ4V˜.Ò°¬–J­Ú¹A6RúL‘_ªv"£°6¡`‡âuÁ¬¼*RÑ,Ùô(‡˳üO<¹6ð¦NÕg™_’ö^è¨f|ÇѶÅQ‡Q“×I &k¦ÖÃm£ÃˆáŸmQ.Í:”ÅPxãŸK#uY‡•o¢QEáóÚ!o¥>ñ9‚õZƒ-øçJÎÞÐBY}†ó°õè;è Fô­EÍCµãÇaMû2C™ØÔ¥íR#2ƒ_ŠQÒ2*ôRIîw Ѻ²uYº›N×1 ‘ÄÔ:ï‚ M}¼\/8¨+Î,cäŸA·Õ¦Û2B±çTL4[g^Ï„•¼­åi9Á¥ûb{D2z·» €âÒ›Dáç»Úˆ`ÏxEv]´´k—^ààò57NîUÌâ¸:^©FÇSðfÀS}ósx u-õ2Û,‘ô$ÆÂ‘MÇW°ªg¨¦­ü° &¾‚U°×n˜3À*NÆR…ï@*`©l\nþ}Hå2\²þ=¤2ßTÚÿ,¤ŠÿOHu1)ˆRQ¨jç¨lµ²7{è˜ÊŽåš ó@ØË ,˜89‡^–ï›.k?ÀçâõéŠ;öòH‹üPgÙ×2*²¤Ú q¹’x_TBF÷–…lâ ™=qdÏ:™çàB†$Ã0mŠŒäž¶X`B>eÙYÅœÔѬŪ›s¼D’©&¢¦ C+‹r5oOT¾‚îßÿŠÿù Z#Âч¬’YKÊÁ`©G»¶¯ &´m†P³ø—‘Q(Xmn¬A§ysy§p8¦/2¶eAÙ›"ŸeJZ ÷¯÷æ!ëNÆV(É„NûÂ÷ZɤÊ,Y™oãmÏ^ÀîhžLGxBÅî¢JN`¾–.Ê -Yèö,—Föº^¡· Óã•3öÊÝùݱlì[u¼ÍNõÍ^£ä‡_Ádìúª¯=Î?dÞæ€Ð­yB—U.0T8’—Mr)áÙç»öÁdW”>Ѳ¤rT LsA)ÁÅöˆ¼ÄÖÜ—¿²•ö¬ÓÉŒÉ?@ ÄàÛ;O®‡ëäÿa µª·DµBí¸E´bŸc©k£Ä3à:(OêŽ2"u¨!&ã_•z€ð挊”lÅÏŽ1@P8«ß7F:‘ŒßºÍ`~¼O3í‹1F$íFÔP(HWÖ@‰£Øu’f§˜ñ¥‹æäQîG8ß}ï¾C6³¼F=ux÷ ¾Õµ¿(©Ð_¬~Sç ÍÙØ!sÍÐZ‹Nh»²ÞÞâ7IõtAwJ©5¯œ¿UÅãöÈ·î\aƒŒe××°cV¯ç{{Sã/pìa†¦Ðdz5ÍiízËZlmí‚Cn êö4]^÷sQCóäžFu4¶ô®½»(ÀÖ„ÉÑ¥ÃÉíYxý µß–±_CU ½\¢§TLû§Fxê¹< oy‘ι0ëuÔêcòz%kÆü7¸ÜóšCà{û—!ɆûugP~ß„IÑmÿí—ú³:Êä·ß2ÔO"Z×_ý{ûÇö aW¹¯1]˜P&j'‚; „ã£HÞ[¨çùRŽò:ë½›CŽ©~Àr4ÝmÂçjš8˜ªNj'Påùªˆc@nT=’U¿QGê•»Ž92™Ãª‹ô%ô4šÓYM¹QüªÆŠ§°=fY;0«­ëwçw Ô @¹sõxG·IœNØþ¤ºE¤(æ*úAâæIdYÕÊ  ËÓ½h¡,ÀÕº‰8r¹çu:¨s˜÷Å0bΜeÕ,eiÚ/ø‡"òâ endstream endobj 474 0 obj <> stream xÚÕZË®+;óù4~»-E\ ˜ö 1ès’Üîÿ°]U®²ÛÇ!Ð9ÑNºmW¹«öéŸ'}RùŸ>EsŠ!-k:ýüÇé—¯ÓïÿèNZ-I%}úzœtZ|ò§³]òÀ¯Ûß.J™JÅ Tþ¯Üz={ãòÓ`ò禔wå{yêËXMß⪔50ËëüYiÎõ¬/4/¯XVÍë8ËËãÌVÖ?_èé5ÿþõç¼]#·{6¦|ÏûÕ‹[iÇÞ纞M(œVÎ|ùГòÞ¥2Öv¡]a~.ê('çñº´ Ì6(“:fC™ðº ùx /å톿WeR¶øö&F2eT(ü]ϱ¬`F݉ãÙUŠþùβ׳ eS%r …Äz]ëÊ×òÂGüUÖ¾ú”¿«[Y×^’' Ô_=§^î¥qóéTþ®íp¦Ò9ëj ÛNܦ,Æ Ngmï’Ð;iĺt!í²6ˆ^I¿3÷֫˱ám}£€÷:ß°Ëž‘¢®ÜW¹)PR`ááRÆ¢22[ŸÚL€ŸVñо-’m[ Õy•ªdþð…pñ×?á—ß~´èÜ'Kvq*Ã…[—è5‰]"HamÄñ¥«ñ”¿L±›Ñ±*-ÎÇŽÚÀlt$­¦@i+Ù•Ë̇Q`> Bë"Çɲ·[³¨Œ#f‰Q†5u_’P1~ lÐÚ/ràìdd¯ŸMÄemøÖà h×»õKÊÀ¯ˆ+óØ-VUàÒþ˜A¥3˪WžLÖ|ÇOÛñˆ_¹ÙSL Ã4ÍT”dŸ"Ok+¸k€`ò……ˆr ´ „­—6AƆjGW4†ÐÞlB—›„ ¹E™Vû%o¹ jÑSª‡è“v‹uÁÔ@f«]¶д&ѾùØÙ¥¢+<ß݉¢E)û¢7Æ\uU^yúåJkÜ›¿nf7Ùh­ZLÒ£Õ«`W¯^J í¿©ºz8£žÄUŸÆ¥*ôÝé) ǘÙ»õ…Èp…‰ÈðMdç€Ãùaêí!Uø2²!’Ф:Ué d´¹€ŸÈîM—Aˆs¼nÀo­îópJaô{/É[¶,€åÁ±uÊl‡ÛO°Ñ}Eʨ£ÔšƒTÌAJ‡Œ>Q*D) Ô¢Ôö:Ji—5§Í¡¦²ühA‰“b˪ÏÇÊë¯n½üP@똈# 'tq d?è.-ºÆ¯©°Â¡°’VæIëwºZ‚{!/é/ðäÞž°íD¨0$W7‘¦êPLþÁi¦PÉK|Ãø®lfÕñá¤ej®Ë ûÝ ¬]P”åÀ‹øãeN'Óx‡Ö¢”ˆ1 ÃðƒV¢ÙV «ŽÚGµ==PôE Ì‘ -[ÌØ‡ÀÖd‘÷š 5e–(ˆüÄP䨰­9C‰}¾­î±Ó,TÙì¿Þ·ì}F$-Ört”ògÈ¡“Î2´àj9J«Ç’•­0¿di!KÛ>J©5ãÌùl’¡cãìµZØÎΠou­‰½öÏ78‘ž ‹Hæ&œêuYÝÚiꕘzEÙE9ÝËãWJmÕØ ‡à×ôòÀ6k•1KÎÜæmö{¹z¦5³¤¶Ò®k˜S“h~­O+ŒÕþˇÕöD &¬‹Ë𫾥i¥»RôÝíÄsÒч‹¾¶©8²¤½£Òsa'ÀÖOŠt,zVÑ"ðÌ™W$/Ka­“gÞ©Uö°ÛÆšIÇ/Ñ´1%’Õ(^;Ìn…Ãó²ÂþóÇ.Æ@>× à¡XO5@«)ÜEèIÌö¿ºÅØØÁSMSgÕ‹ vn-°m¡wYüZø0DÊ®7)—ií^iR °Šæ=>f¾tv’œÑX ‡ïAðÈ@ΊDµN­±”.,A[ãŒ'¤q\ìŒ-*œwãfHmM©®ZMiZÚ·q¸ó9 %ó‚@ùºYJ“Ò ©ÌªQPZÁ<•¸á€ Õv/-B¦š‚l€Ï®]#°ÌÙ ej’R.úéÁiÇ`Þ}mWµ9¶m{ׂ‘­ÃEIv¢„s]Îé§õ~/aÌ Ó®Ï„f )sí9`}£½qñTÞzaJ0¶m Ƽ™pÓh¤¡>ržÖ¤ö4ý¨@ï?êäÎj~\cb˜bG¢"Þ—¾´ògå˜õù{¶®lϹTZ“Ä•€ðø²ÛZM,u‚D‰öFMërM«jRØ1P[¯yñà"Ö¢X‘UÇÈl-ÖùÁ5•nÀ+÷kmµî °Ujk-ÜY¦±q­%B°ê ½–'£×ã8Âõà.Ì£[~—¢;j‘e›wŒ[aH!ý´ìcÜ Ü@Á§¦}K¢ý)ZçfDcóçÆÞ·š¶îHæÍÌîtÖ* ‡uÐzÎÚLAÌд·±ZAs£y¹ªŽÄÅUÜŽô]wÔÝ™D—)[Í0ƒœÂ÷ü«t0ø™þÂQ^ƒŒPa:Kw j›-ÛW‹³7º:ágM¹*´Ã²8øY £OÂ9y L“²<%33‡ðh§ïsÛFÉ€]§œgxn”U M^[å8›Ã¼›†yzÃ×w†FX©8çvÈl_™ Ì™&#–øÀ;·Ì­iIT)V$ÇP¶=ˆóWDWøïokL÷áfç©@12š yÆTÝ/nfo.|K‰ÛÜôf—ŽÏnÑx3œþo¿sÖyóRò7 ÓÛI"àõ+·Ò2¶Äö26OqÏœºbÔF#Û ^îÊ«!&t Ó›‚Pt+Af…5`[Á¯1]º¬{ߪ2Böc`äæs_tÑk/ŸƒC•÷Ž¿Çkãi épa0w™ÚÞdÅ!!¦ZT˜•˜‚d-˜äát°3½ièlÈ®h¹¥Š ë­”èR»V¸o9Ò¥¿ü4¦ò™ûø 7Ë$c¿KÄÚ·üÛÞºªh×¾Ñ@É'¸Ì.Mø¨ý‚£ÇSËîT0Ì€Ân1]Æó~WuÒB{œšn ôtáÀ[Ÿx88;F*Íü³»™ãšEqb•–0ã¸Êßð®ú|”a×å>/Filter/FlateDecode/Length 63035>> stream xÚìXTKÇÏKw(!¤€ŠŠ‰­ b  `·×Bül¯b‚¢"˜(* `€…Jˆt¨HçR˲ß,ëåre÷ìïïñáYή;‡™ù¿óŸ<ƒµ WWW €N@h{( K›¹ØÀ¶°€-l` [ØÀ¶°€-l` [ظ ÙÕÕµíŸþ­ÐuH›i \\\ÚþÕmÿ0ˆ;v€º¤Á$` [ØÀ¶°€-l` [ØÀ¶°€-l` [ØÀ¶°€-l` [ØÀ¶°€-l` [ØÀ€-l` [ØÀ¶°€-l` `7dÈ޲|‡û‰RzqÐÅyzA«É§lòû×—ù .‘{ÆálG|xõ|Þ½¸„Òqq)û±{Ê@Fí!1þÝ’Û¯ŸÔôè&¿iÆXG5¡Ÿ]8í,Þ>2º™õ¿íN[%)Q` x”ã;œcØÄ-'¯ðñË2ÜV~¯ß/F½5O€C¶3êkÍü_ïXbë¤!––òÞàôµÍýD!çv°-¦rŸ½ÍIrä«Gã<8îžò³‹§³A-Kµ¸_¦OU·ÈAnâœk;Cò²‘‰ù‚ùšÀ/ÔM¹´‹ksMe‰…L•nå"ÀélÇôÕ'.Z8]‡5-è°”½½A—¯è&Y‹/ ^]2¤ï‘K«ëêÉdQ·UsÈ` €v³ÞÕãï’Z~Ai¿ ³[¿p4Û_†Þx«gñZ[d䨂ŽËã ÷zÃ'’ #p^W>ìøÓ• ¬t$’ß›˜¼Ë¦X }tqÚ_WúòÉ”Cw'íœÂGøéE€sÙ^Sš4+F*aä [€ñ.µRôŠ%‰T73)È |¨¬HL%*®Õ—"‘{ë &–\ª A¶lˆ¡dÊh“‘4jfL-½õ‹‡²=óCLæ×ÂkŽV½N­Û¶Óc\*²F :Yqa49S3,À !URMô‘…‹{Ч|Ѝ!‚Êü9Õ•éË£êvšªËi!Q‰üò}(¤/B^q:Û)f³fß?0cëÉ>k`'ØÞ%øÈÙ ™•èÅ]W÷ Rýáe¬ëGn~™0w$änÙÎG‘²îgp}}q¤¤ôzëÙ½aÅ2У)¨2Š6d׃¬¢®²ò¥•“) kñ"ÀélÀt Ưr`´týèv'Èœ³Ý ¿iLSÈ€=ˆ³GBÿ~}àt¶7!`×RȤv&vreñ›Hß´¯£‹è­Žñ7P©Xl,ÅüI¥B¶¨²lð‡(˜IÖ9æ7«ÄèWt½Õþ/¼¼°ôt¬ºšù½FW ÛÔ ÙÞe€Iv2ÔF=Ø•¸áucõ%Ÿ‘eýÊëQ#1[¸ý~¥¼»~#°Aƒ ÛP7¨²lЮJŒ5¼èÕ—JÅ¢£±E‹0‘/¢2}:æí`ÂÂí¨Ô Ù¶øÃJÌXTÀÌ_¯R}ÓÒ0UÕÿDÆØ®§§3cd;êuC¶ƒ-þ>:‘2·øÍ\žXSŽ•þ•b¥%XI1VŒ^°þ¡_©µ+­Åj+±¥4ŒVU×’ëªë*1"ãàÃêI|üÕd>Œ"ÈräÀ„1AáÿüÁ„Řÿ¸ŠÑgñC˜.…Nb¤Â2¨Ô €-à "}ÓhŽù{g¥O3ÔÔq©Ãy¼«¦¦&!!!%%%³ŒŒ Ö  ¬¬,Óˆ´Œ¶´¶´´4z)&&&ðù3^žÐ„  EXX˜ODD¤®®®¼¼¼îöír99º†FYYNG? hx‘žŸ™ÿåË—ÒÒRUUU” ú©Ò€–––žžžÈÝÎd{Ý™|¢—,ã-²£ì©dêåPP7¨[Àý¨qÂæËÈÙšN#ûGʧ5],Ãv’ÓÒÒ>|ø‹b„ºººŽŽ0Òí˜1cXJo틨TÌÓ““k:ÒH&“%I$¬¸XvÆ LèׯªªJOOÏÊÊÊhàöíÛ(~}üø±{÷îúúú†††è'º7˜Ø5gm°)«ŠŸ ¤ q€ÁFÔ êÀp/j êëk_ 2PxÓÈþXKËhÛ²í/xþüùË—/QŸÀ iÓ¦mÛ¶íe),Ì\À\…Ôt­r` flÜ–¨Ôk ÅІâÚõë×wìØ‘Ý§O“Áƒ£Ÿ(¬°3j4`rA7úK<ŸSQ$:bêu` ¸Á׈â˜UÔäîU¬¦6^dÅôò¹L~~þƒ"""P°@=###¤ºU«V!áII±éyK(@ ¼½™«P磴”¹ÉĤû—H$’VÓQHúŽÊ_½z…Ÿ———½½½„„„©©é!C,,,P¿çϲ]ᇱÜ!z¯ÆÖí-ÆæCÅ@Ý nl7¨s ‰{¶p…ôŸç£°Æ¾~äÄQwáÞ½{÷ïßOII1776l˜££cïÞ½ÉdΊ††Ìu˘Œ 6zt{¿…¨¨¨yè5ƒÁHLLDA$<<u5P7nÜØ±cÍÌÌÚø…³Oýx‘@"ô4H2Oú¶ï[÷MÝ¡r nP7¶W¢2¿­¾æ<]VDðϾaù÷¥4¬Žfk¤T{ÿÆÃ‡‘Š<ˆzœ Í@‘ÇÝJA·;;;DÞ½{‡¢äîÝ»g̘.¨¤^¬¨+?tâ镳NJÿÉl%Qˆ¨ þÉô¥EÊža pGÝ´š|Ê&¿Ì‘4E¨ìÉ£®«î™3g*höÌ•Ó,V1•7+s êæ)HÈĵñ£Ož<>|8dY‹d•ö¼hcaª&ÿgßP[[‹Uæ_>Hôu¯,)šk9éСC7n=z´ªª*‘Øù©FAD^^~èС .Œ+ õ<¤:ûý¹C>¾7…I(;"“ÄHb£ÄÒ礋˜ˆP”áY«?ÅÕÕµí¡Ôý{•,¼Ù¼ßÀú"¤îÌ+§tòʹӺ²º•e¥®Ñ{ &äݺ8ˆž‚B¨›§¤ £l ´ºÆÒóöÖ1-tT~÷ÿ"îççwãÆ }}}++«<Ù^c\ÖØKðuÙü¬©Ê¼R+Z¶ÛAˆ°¸²²\ÑzÕ¥»÷Ö¬Y3dÈÙ³gϘ1Cèw?{ ªû«§Y¥i?Öæ×ä‡ê pQÝ•ÝzioXißM Ëæg=½bÉÇškÇÿ+Hªªª ö÷÷uó` Ú ½ž1÷RÈu…¥CzÿÖ,..>þü©S§Mž7o2tJJJèúÝ-'»x–VW}æTjxŒº¨…a?Ý5·ùjoß¾"ìêÕ«mll–,YÒlQt+ˆš‹Êo“O—¬ó\‡, uàŽºËŠÞ®ù;ãZöˆ*jZ-ŸtÚÝÛÑÙa û±×®M¯¨¨uƒ-è<¬»YM£Ÿ6¼íÿåõë×&LðööŸÿ×½ÙŲµµ)“R´#´ ä'€¿º½×>‘Ôµ³”Á¨§Õ>”œ¹wR^fâ@«½FºÁt<ž}IÌ|±j‰øëºX__‚ÅÁƒóóó/^œ””$++ yø#‚J5U*˜‘º'UtgÁci=\]]·mÛ†º§OŸFÝ ‡+VÈÉɵþµŠ{ÓmÓ3ì2Ô|Ô0¾ê¦Ó+–$Rý»üâ8ÁÈì7U'Å5ôg ?¹ZQ7ꃺÁtlÂ’³w?|õxÙtq_øÙºº:__ßýû÷‹‹‹oÙ²eâĉ]a‘ÑÃ/¨b#B›‘0D122¸RLßL y‹L&Om 55ÕÍÍMOOu5Ö­[§¢òó `¦ê­úÉìÓ—Í_÷*B>xª;+.Œ&gúcMîrMEz“œÀÆçY÷ÈÍL¼BÅnŠ’AÝ` :)%Vï]?^SF¢•ÕÔÔx{{£>„ªªê‰'XÛyFð‘³2+Ñ‹»®î¤úÃ˺löžX1vö¹Pñ[Te¿f­|RCCeìöíÛ9Ò¿ÿñãÇoܸñg“ Aó¶f¢i"E•"»†jüÔ}äæ— sGBÞ"¶/Ÿ¸À+¬Û­b!qéÖ³‡ýÜ*ºÁtŠ*«Ç¾y`ÒášJ­ô!<==wíÚÕ·o_???cÖ)c­2~•2·Q)õൿq¬©œœÜž={PÈpww9räàÁƒ÷îÝ«¥¥ÕB—%kÝÓú4ü“€–€¨¹(d5€ºnw‚¼e! ¬è¿ÂÔͳÀ¹¿M->ÙëÎhmåu#Œ~ö™û÷ïO:5##ãüùók×®em1hÆ•ÅoŠËªU %›]ôM‹:™f0Iï¿«–š›û©°0½ªª˜Ÿ_„DÂo°‹Ë“ªÂZ-=éæÃ'IýcÍG¨¶5Ü :téÒ¥999vvv™™™ n;¤ÈÂ…Óf¦‰çëÆUƒs تn^“6*ûô‰yàqq1óIüÔÍ®Üuã&m°¿S@8^zÖH"¡…•-±±± ,¸víêIìÛ·O^þ§çŸ ©Ô9æV­m*ÖsAÄ—Iÿ¨"Ž’‘½ Iåå¹ÉÉáÆPÂ'uä lÂV‰7uÈ ‹+{ÿhZ‡ÏÔÔtÑ¢EQQQööö4­_¿~”ÿÆAŠ2…¢@É´Ë”œ)I#A­[ÀFuó”´™DEawî4Ä{–›‹…‡c ¦„“ºÙ› n°<Ç¡Çoƒ2î9Ná'7¯m………Ë—/ߺu«£££§§§¾¾~ë_…ô€¤ÒT0?>+ 7O——hd4GAÁPJJUNN»{w½ÔÔȺº|œjø‘'hê XžÀ×|Ôø=ÿì;…„„ÆŒceeåïï¿nÝ:))©>}úšÄzACAF #ggŽÔ)bØv©›w¤ýÝ$&bsæ0ˆ ªŠikczzXd$VSƒ3àDn€º9*mX[ðÜŠK;ò$æÅÊÙB”æùæëë‹j'ª¦Ÿ>}’hã6}0+ÖðÿÀQ[KÍÌŒ66^ÄÏÿï³ØùùE{÷žå-/o@¡ãp¨ù÷Å0¦høµžàߤ¢âçç³téÒsçÎ:uªéz¥î›º×$פ[§«ªH°« ÔÍ6uó‚´™P©Xt4¶hsâ QQæ–½½™ÏGÆCÝÊ P7‡€Ñ‚¶›S0ûBp ÝD½îRÿíjgÌ™3'$$ùV;;»¶?¬©•f,*ÀnU’<¹8rs?aCAÁ°¹a$ó——ç".**‡Ï°Æ f‡? ÈH»l>ºýž yyù… ÖÔÔ Ÿeee&&&­'^p® òe¥øqèR€ºÙ¨n®K›É§OÌùÃæêFÆŸ9›€º×r8©›s¹ê†Ñî_Q5ñì­#S‡ Rù÷!žõõõÇŽÛ³gÏêիׯ_ßžg ©ž¸üFÄ›×·9øgTWb%XyF-Ç*Ë1júÉWUˆÕÑh´E­£Ó±š* FÀ„0!"¹^˜ $B“”¤d0ILR“E¯0…Xô1¶ßàg¥RlF#×gTV°÷›‰D¢““Ó”)SV­ZÕ»wo‘#™»Å‚F Æ§¡ŸòNäÉ-“ƒªêf¯º ŒŒƒ´‚qN†½îñã Ö¯çŠ{]øþ‡ˆbyõX1«Áífu@¢‘ŸË«@ݼ Ø‚_SE«›äyËÞØ`vßû¯ééé¨zÏž=kq«LaM³‰¨ ÐR^×eãHciiéÛ·o_¿~Ÿ”””œœŒt«ªªªÝÕäåäz#—Ý­[7"±¼º:¿oßIÂÂÂüüüÈwWVV"ßL&K vÿÖ@~~þ—¯_bòbRSSÑŸþ¯fúúúFFF}úôjßãÛƒ’6†E_1ý8ÿëò·Oå(3¬ôØ[”èO¾råJpp°ƒƒƒ¹¹ù‘#GDDDHâ$Í`ÍÄA‰eŠ„¥TxP7[ÔÍ’¶p/ÁzuòÁ»ºœ›DÈÉÉIû¤Ó‚‚‚¢øTR‚ Ž‘ˆäŒ>¹°Éÿ"!¯C"!ÉK6Àz¡¨¨¨¬¬Œ¢„ŠŠJ=(lڳиžàuvžášòP¡ä‘ó´@Ý` :$ æp%TSFbëèQå[¾|ù–-[V¬XA Ú)ÁébbéDíóÚ‘i¬é·?Ÿ>} }þü9r_¾|AMõ€† fooß³gÏ­­¥¾xᩨ(׸¶€¿AARFF­‰ÉD ¥…Æõ¥233Søðáƒ2È 4hĈÚÚÚ¿ë ׌Çz&(™ó"TˆLfãTB#ãÇE½À¾}ûúúú8¢DA½Š”‰)|wø„ Cµu·SÝ,ió;KߪÓóÑ}ÞNi7R]]ýþýû7 ß$/&&¦þ¨¯,###õ¢$vñ"iÁ±f›&Mðð ÛÚb‚‚%%%Å °^ ¸‰‘‘ñõëWäPA_khhˆ^¨©©µÇ ?(¦¾¬àþ´%„HR'|¨lÇÙõðeJAIøÒ鬸€ºÑ(X<}ú4$$U»öÛgÊNiÁTÕ§:ñ? sÚ.˜ÂÂÂû÷ï#7ðèÑ#ôë¨Q£FŽÉ: ŒDúÅæœ””ÇYY/54ÌÞ¿èÝ{:?ÿ÷@jjÊß¿TU5nѰFíÔ=z4ë FCjDv™’½{÷Òéô‘  ´²KóGOÀº°vRï—f#«‘$P=-ö»Òn$''çêÕ«ÁÁÁ/^¼èÕ«Ò¸››Û€ÚòPÁaÀèíÍÜ(.Ž•–2521ÁýZݨ_Áš(œ1cFã-=nàäÉ“¨C‚ÌÁ”)S&NœØÊ Vn4mþ…(äƒ{F-®¾gRϹ•˜ î?†À`´õ¼]WWW—®“5љߦxÝ~à4µ—¼Lƒ¬¼ÿúë¯#GŽX[[³+‰¼£yÅÅÚO´±6?8 uÊoݺ…œ;ê”3fæÌ™&Lø³Iý½{uóò›]ìßž¹ùziiõŸü.è†ÃÃï_¿~ãÆ=zÌž={þüùrm[ÿ–œmãsÿÕk% Ît}}ýáÇÿþûoOOOಜ³ª?UkÝÓêROh%~#€ºIMrM¢i¢Þ;=>Åß>h5·þþþÈ© FwòäÉ#FŒk× UVbiiXEs§¢º:&Äu#‹ððáCÔ9AG 0j†§NÚö§ÂúÇ$¹Ü‹zµÆJL€êæ)iÃhAË|.©˜qþîéY#QÔ ÓéëÖ­»wï^ddäouÇ8röäè4L´…¬¬¬3gΠø…:ß×®]nßžã™3=X£ššÃ9—“|||cpwwGxñâEæ-ZdaaÑú4‡¹VUÃúκüxÙt ‰SŸH$¢ò533C]¢wïÞm>¶9}zz–S–Š— Ôýgd­Èê¾±ûïz‚'Ožœ8qµµãÆ[¹r%úù{­€|€{³Q^^~^T*588800pÓ¦MÇGÑ Iû—ó V}{F¤~q¸òèÊüñœ+kP÷ç´d¬këÌݯ/6íµp ^qq1²ÀÈ¿‡„„(*²ïyõXêÔTÙŲâ㽡öÍ›7Ë–-Û²e jP;†jy¯^½Ú¿BXJJUYy`VÖK5µÁ8ä*Ò§ªª*êú8;;WUU¹¹¹íÞ½»¶¶ý-­l¬¦œþ"óÛx]UŽÞ*\++«½{÷ß žsfNñÑ⺂:‘!"]$ts pPwI`Ié­RÕsªmž )¨dddÄÚDtóæÍåË— °Òb!°±º*o?“0Táè¡@ùŒê¹ë.×™ÇfVlªà“ã4„Øêþ Ã_QŸ29Eå¬ ¿ú¯;ú‡²¶¶¦ÑhÛ·o?xðàÀÙ6BÀ À’öÈ‘##""KHIIÑÕÕ•’’jñód"q´¶²­oˆ¹VqaP7ØeËÝçéEe~¶cC=²´´üßÿþ·~ýú¶,¸m;5É5 34oj’e~Úˆ‰‰±µµEËÑÑÑËËËÔÔ´ñè®NC÷îÝQ_ ÅÄgÏž999%''÷éÓG\¼ùð‰™<\SÉúâýqº*ÝD…8zK$ y/ÔK[à´`˜Ë0l#&b"BQ¦@ìu·‘¯._I’¤n«»ýr„àèÑ£¨ ‹š«óçÏ;;;«©©µg·3OÑ­[·ñãÇÛÛÛüøIûÍ›7šššHï?~RRH@CFÜñjèüº|dP7ØžãüË„ÓÏã8M½¸dÉ’   ‰'²9_Määä¬Zµ ¬+Vœ={¶ÿþ$Rg^7‹|ÀرcQ‰G(77ýÉÍzoÈ (Š ;„ÏC±ƒó#«¨Çclllël«k¯+¸MPÂR‚,E†Øêþ%Õ‰ÕÙ˳5‚4H"?Õl}}½§§'2Ĩo ÁâÅ‹edd:e†#£&9$ê•+W¾zõ ùþGt»Ie—{GÇ[õÕÆÁu5uƒ-hS>#Ó¾tú-?—ôë×í©´2}P]]½ÿþ  |ö÷÷4h{û1<AFŒ1wîܰ°0Ô½@¡©·é‰¡‚LR~‰Ï«ÄY}zâ;”••QwÇa£êOÈý-'e-E&Bìu·NÚ¬4Ù%²b#ºk **jÚ´i —.]Z¾|9{çyä~LLLKMMµ³³ËÏÏ8p`³åD#´”ÜŸ~(©ª6USÀá–º”ºÁü9)%–ž·}mÇÞ»pöÔ©Sááál\–ÜH+Ó(^ šJ§Ó¯_¿ÎêI`]QQÑ & ¸yá»utt444ßճlj§ ©UCÔñˆ(dϘ1c“Û¦ÉM?M™y2ø9lÛà£î"¿¢òÐr•³*b õ$//oÅŠ{öìÙ¶mÛáÇyÆW'Y|33³ùó燆†:;;£n@ÿþý'MH ‹ ì.?4Q•W–uƒ-à>¥Õ5£ÜƒÖïåsêîÝ»¨ÃªÄ‰'‘ÿdú ªªjK@ÅñãäzWCJJjöìÙZZZK—.EniðàÁ¬Õˆ(vXè¨,òØOINM\Beamm}øòá7yoú½é'5M ë¤Æ Û|ÔM/£§NIU»¨Öâ\õ;w&NœhddØ´9ìjˆˆˆLh`ß¾}ÞÞÞ&&&ã%â‚üzÝ¥‘3°í¯#Dáuƒ-à&ôzêI˜¨vϸz&...$$„CS}-N¼~ýÚÂÂBXXøÖ­[(^`À? [àèè‹~"£Š.Š P'°ñ¹oÕW›£§ 4‚º5(vø‡û… +&1ºs>m¥³ÚÜÔýeÓ~e~Yçæ“åååË—/www÷õõupp蚣€?öÔ.\X[[»`Á‚ÊÊJSSSÖò)-Y‰¼òJglŒtð1N]AÝ m"ÔÑåÈÄêÿ”””û÷ï·rŠg{`^¤ê­Ú4ËOž<‰ú»wïöóóë¬ËŽÚ)Z”9¨{wæÌ™É“'çççcMÎ8ª¥Óñ¹ !!¡ ›Aƒ%ìÝí¿žü åênFÕ‡ªâËÅŠûšŸ|Õ·o_ƒñîÝ»!C†@q4B œœœb@Ý¡øøxÖõ]ãM©µu{C_áv' n°Í9ùôýÓ´¯Ê±aïß¿»}û¶gö¿ÕcvòMž}PQQ1wî\OOÏÈÈÈéÓ§CEl}}ý/^èééõéÓçÞ½{èÊóþÝE…ÖÞŒÄíÈdòåë—…L„¬_Pò¨ Ôý/ ,ki–¼«|³C§OŸž2eÊáÇϞ=Ûú©>]EEÅ7n¬Y³ÆÜÜåÆœ($øÏw"òý“Ô/ n°\ $1s׃—fßb¢ž=E=‰öž:þsòŽç¡ŸrË¿? 99yÀ€¨µûã§¹w)øøøöîÝ{ùòeggç•+WÖÕÑÎÍŠÏ÷M"n÷@¡Pîû­&ZU¼¯€Bu³(¼XȨeÈ:ü;}PSScooòäɧOŸZZZBY´Î‚ ž©ÜJ¿|ù‚*jEERº¦¦&”E[ÐÑÑ‰ŠŠ’––îׯ_||`À€ªì´#SͦŸ»[Z]ƒÛ ðóóß~q»L¡Ìf€ JoV¯ €º–º‘ ØüEbª„PÿïÓ‰‰‰C† ™6mÚåË—Ûÿìõ.ê#†ùÜç¢ñ¼P7‹®±•ë; . ËÍ¥‡†®»ùTœXuåüãÇ9º¸éî777Tã Qà!¨jhhX[[ì­'¤¨‚ÛG,øøøfÛÏ>täPüéãø‹˜é6Ô+,<c00Nlmå<x'÷Ô]ùºòëö¯ADfÿ*::zܸq{öìqvvî²[Û‰¡¡!òUsçÎ%‘ˆ;X9„õ’—ÑÁoÏvçS7ìDøIÔHLÄ.Ä,-1dk,-DUESbÃï½uë–'‹¹éô gΜyþüyïÞ½AüíÇÒÒùÔÿýï2qßÊ+„½Æ3u!!¡¯=Á¹‘'nÖ6Ö+fC5-:J§+¨«g®4TܧH’`n®CvÕIooo[[[(–ö`bbòâÅ‹ .l[»êâœÑóý|-¥‚ºñ¤³Û*•Y3f`ÿ¬Þú::=Ë'*ÌkÆ Ã&'èq"j4NìÚµëÒ¥Kááá=zôÙ³ §OŸÞ ÒŠ}t$üMXr6žõJ.-é^øÃÝÏ®ü~Õ±éÓ™ Ì&tzucXþÙ|… =O½ ´³³CFdܸqP,íGYYI;;;ûøÆUN&zVïá¹ÈÔÝÙmAZ¦ªŠý3Éw3.íDhtmЗ.–'bééœK¹q÷ò—/_Fž ÅˆíeiDDÄ—Œ´žonÍ9wûsIžõJÛ´oÀõ€%îKžþoì@õ“õ àu×Ôå¸ä0W°»wï:;;ß»woРAP&ìBDDäæÍ›$é©›«FßüçzÕ•ÕÝF þY„\õ¾Šz4O!âÊø±NNN˜„V^Ρd§öÜP ì…B¡øûû+((”]>véÅ»à8׫.«îÎn „…±ÒR¦»Ï¯K±L Ëö”—–¨aú€¼œ<Õiª›››¹¹9èggpëÚ•~šÊÃÆO*¢røäT tt0oofzü˜ÿþ½7¶sB>Æ:†ÃE\Õž-ºüƒ³§ƒƒvNgÕa´o´œ92‡e,--g̘E€Û˜§§ç`muÏíëÞ%q<½®­îNn Ê–}Ý÷umw¿ùKOµ±Á0 ÌÑ‘CQ#ïx^=£~Yè2;;;”À gðäö I2ÖÒLƒó±ÃÁY£ê•òÆ ~A7¼vo÷ …‚ÀGÝÙ{³×È]²svždeÅiu#>¯ÿ,i'¹Ðe¡±±ñ¦M› p–ö•Ë~}å¥lÙ§–âá ºªº;³-¨I©IŸ›~~Äy! !—]»0fI£ŸœbMxêz lÛ¶ dÌ-(ÊÛÇrãÆ;.çxb¨.5©W–#‡oÞñ¿%sç¼MÍ„‚ÀAÝÞfÞr8¨Qþ¤¼"²â v¦¼¼üèÑ£P\‘vÈ­rÔ¡ó–ÔÔÑAÝ` ~z)=eRJòœä gA¾¾¾Ì…Hl§é‰ÙåÔ »Œ7Þ…]ºt‰#ÉmFVJêñ£¯úm9t çƒÍÿ·vù°‘#‡O…瓺,uÇΊ½÷úž' 3hŒìeÙI¶Iü.øûûóññA)p!!¡gBJ¢B§n݇êßÕ=efçVwç´ :#Ý:6”¶êÚª .HJJ²? ÔÌxy1¶¨®F?+É+x°9xs@@€´´4¨—ë ÐÓ>íçÿ÷Ö¿mÜÔXLÌ"CÇa‚/¨(â°×£Ùº ,uW ®ZwmŸŸ瞎ؔ¼£yù2ùË<—]¾|YNNJ‹())=¸w÷Áñý»}ðšSÝÔ’Áö«:±º;§-ø²ñK=­Þ囋­­-Gïôß“Økt-R#‡oª>¶ÙƦ_¿~ [a‘´èæ S&ùúeáy°9??ÿã»·’núÚŸôRà„ºéµôiW¬XÁÁÍMÚZrIö¾ì ÅÖ­[[xÁ:qr·³}ìÿöàlúYêN¾é׉ÕÝ mAáÅÂ’›%Ç>Ìù–ãêêÊ‘xÑô$ö†Ý×CU•–++Ãyø¼BC1m?wZmظA£ÇÕÖÖ2/âu°¹ž®ŽÛ¡C~»6{FÆ@Q°]ݦõŒú7r*™ÿŽ–Ív;¯°GAMaÍš5P<ÂJ]-k£þC®”¶ÀùiFHÝGéÄêîl¶€Mý¼îsÝ‘:×ý®—.]¢P(ìOã¿'±çÏK¢&yyæÜÅ‹8Ÿwh(&‚¨ÈóËžåÊ›߯ãu°¹³Ã¢1CMW¬^ù Jƒê.ÞU|âì ®àùïX`™àðû9=nd?>»d <.™§LÿÙ["b¢C­›H¯§-Y´pì°ÁËW­ì”êîT¶ ösmêôTEOE»mv{öìéÙ³'§jä?Ó™©¥ãÓ¶Vm=pàóéˆp>Oކb’xt-14úÜþsßß«˜üÎyIdßð?üžáÔya©[ÖCvÁæ§NRTTä\{Ó8Ȩa$9'm#ì9éá.ƒ¼Œò’é'Љ½¸w;áÉÃ5n8›~„¯·—Lñ—ñvv>uw[P_YŸ:5µÛÊngãÏÊËËÛÛÛs*¥NÌf00Ç«¡>uÔuÔçÍ›Ç| ÎÃçšlnÜSÍoíùµ[Ö&Ç%ãYL¢¢¢—ýêB¯M:á_Y[eÒ~uïØoff6yòd޶7c¹‡rÒ³6ÙÊ žÉƒ¦_YAþ¼¯÷–­ŸB?álúEDD®û_fªûøåN¦îÎb Xæ¢LA]ÁÒÉ¥‡öððà`Zÿœ˜íWùævÀ‰'˜×9y;ðÇÅÄúmè–¡«ú¯š9b&­°Ïb211±Ÿo[vÿò"ÿ‡ Ø—Ð>u'›$"ãÐÞ0Baé‰gOjž9rÏöø-Ó?g¢ÅÚI«¬,­hTÎ}³.YdWrÏ·“©»“Ø‚œ=95é5Êg”¶oß®¬¬ÌÙ9hP‰ïÞÀpÊ“”s<“Ã'±VLM6ߺEªZlÓHkœ‹içÎXNæÛÈð=^B±ü±ºåŽÉÙÙÙ;vŒ#û[jo–ø?8ý~ÿiÏÓß÷@ÂX ¯šþ­þ[Qm4߈ßÌÕÕ•¯ çÍ“ÐΤîÎ` Jn•œ.ÐÔð¼èI£Ñ–.]Êñ$÷|.Ÿüê± ßY_ŸÓ'±\LM6'=ºãg7Ò7öõý„b|ý‰°··WŽËá¯nÅ¥A±ü™º]÷ºM:ŸöÆïí§¸;×÷ï;nÜ8æu äaÓO |ûú¼¹nÿ?œM¿€€RwY°ŸGht§Qw‡·U±UYŽYê×Õó±ümÛ¶={–Häøuõ]òm²°o»Ó{öPäðIì@»œA“ƒÍ»ï]ríYûÅöeùexÞŰaÃ&[N2J{îx546§ŠåwÕó9æÂ… Çǧ½¡ú]Þâuµêeè÷é äyÓ¯øñõ™‰“æ^,×ÀùF† b5{–aRD§QwǶuùu©SS•Ü”„¯X±ÂÉÉIõÝ9L!µzUЃŒWVVV}fÌàôIì@{ùïÁæÓL7Q1Y=|5Îw±ÿþ÷QÏÉ“§zßɯ¨‚bi»ºùûòÛÛÛ£ZFFŸöæh^u÷à kÆŽUÍÈ€±ÀŽbú§ú40Îa¸ƒŽ÷<ÿîÝ»“>ÄÌ—etuw`[À¨e¤ÍN“œ%)e-öþýû¿þú ‡tWßx2F–?âþÝíÛ·ƒ0;"îáî·“n‡îÀõIh¢¢¢¨a I?Nù|493ÈX¿v-OeØhúݺ¿-{ë¿Ðç»Fµ4èøßÓõÕ:º;°-È^™M%)îR¤Óé«V­:xð ???§½÷1ãyFÎ×Û¾›7o†gtPd•dî9¸t÷ÒŠX\7O™2EYYY&ù¥¨eeà(ˆ¶¨;??×®]¸=±°ºŽ¾øJ¨ÈË{(žôëcÌ$ˆyœóØà·!ÿQ>ÎI3F___âãóN îŽj òÝó+žU¨ú¨¢¿ÀÓÓSFFÅ\N'Z^Sët-ܾ;)+3ÃÙÙDØq™¿~¾¢®¢Ëh—úÊz<ÓEÍÛ¾}ûîû,=ÇýÙ(ˆ_ªùïyóæéèèà“ôî‡/Å3c»KIL›6 ¢#2~öx“¡&Íø«®ï³7°o˜~GWw‡´åaå9{r45Hb¤’’’;v¸¹¹áî_wžê©äsxßàɪ¯[^çJνZð ÏDQó¶`Á‚ýÿs ´›°çá«°äl(ˆVÔýúõëàà`Üf뾎ˆÉ¹íàÁƒP—WNܤÝ|0ëÎ骩©999¹lÞÔÑÕÝñlAMJMú¼tµ‹jüšÌ)ƒ]»vMš4©wïÞœN÷iÚ×±©ÆÕ_%$$,--A{UUUÇeŽ(¼Pˆgº¨‘CM]IFÊE›1ó|¤”@Y´¨nƒ±|ùò={öˆ‰‰á4ëÐR³Š´ú›ššBYt\ääävÿ½{kôÖ¼“y8'½iÓ¦W¯^eÇÆthuw0[@/£§NK•ß,/jΓyækè×âk¸žwŽì,2µÈÚvPuw [@}Eý¼ú³FY–̺òöíÛ—/_.Y²„ÓI {ÓMTh®‘ö¡C‡6oÞ Jë|Lž<™_?aqÂçuŸñ\d°k×.Ô¥¨­­• ²›¸úFÄ«¬Ü.˜ÿ?ªÛÍÍmôèÑ8¤^QC[výñáñÝOœ€¡‚N†žžÞ”©S®˜^ÉZ–U›ëÿÎ;÷ïßO¥R;¢º;€- }¥¥MOS>£,ØK°ñ¢‹‹Ë_ý%((ÈѤ?å»=‰9=käíÛ·†Jë”lݺõÀÅJ+á¹È`È!:::^^^èu/y™3³FN?w÷k)µKåüê.((8~ü8n³u[ƒŸÖV~8vìX---ÐB'cÇŽ>w}HËHé6éŒ:üæø{÷î=bÄÖ35:œºyÝ0j©ÓReËHXJ4^ŒŽŽþðჽ½=G“®g0ì¯äååmll|*|H’¤¯Û¿âìHÜÜÜŠ‹‹;œºÉ\¿ƒå;ÜO”ÒЋƒ.Îë$¾ŸĨ¯=rôm¶ã 5’ôúÍÿ9ã õ$¶lÙÂ风=Ž©rl•‘‘§žubÂÖ­[wïÞù0ò々 ¥çãq²u¿~ýxêÔ©Õ«™nÚ>þýû÷ ,àè]e—»†D{ÎE$P¹®]»–L&ƒÀ:1Ó§O/** ®qMÏEÈŽ9r¤®®®Á`^V£?æ {󻪩©þ<ÈÿÝ ›ÙåûÔN:ù†ru[Lå>{›êýŽÞCWz2O«©Êò(òY¹0Cjb¯üúé}K›ªûèÑ£³gÏîÖ­÷æö8FNTȺoO$p–-:%=zô@ÍóÉK'U/¨fÌϨËÇïPä 6xxxTTTü–ºT ÏLÕ£õoN"ÔÓ+æ½)¹¤d@8]¨¤AúÏM8p`Ù²e …£÷°øjèêa}µå$srríãzŠo½G_§ÔïIäUT®»ée=šL$Òétd pØ ð‚‚‚‹-òðð@¯•Ý•©¯¨­ŸdÐâüW‹[µ…õõõ¨ÛÚxeJ÷¿-‡ZzÞ.®¬iã—ð *?®¿ï¼Ÿè&¯£y*Z|D>Œ'šºƒ.NôƒN·'v³=t—ÆÀPPN±LQú[É/ûÎ5Éw̾w†P—EO|öú½ý”W^¹zxß´´´·oßΞ=*§gíÚµ'Nœ ct5_µœ½9•o+ñI×ÈÈHKKËÏÏï·ÔÝL5Xà Bá.çòÿÍ_§Z9ãHxײ :#׎òD£ÐÆUKœLÒÒП%L¼ZÁ´ZÈî­X±‚- 5ÎqVüoždî4÷ïÏÁ\~ý±Ý ½¾ŠÌXƒƒƒqxÀ# xñâETÓˆBDÜ ®*ŠYhzqÞÝÉê³.ÓëÛ:âÙßdh‚«SíA§ÀqBÉuä‰B$ÉU"™2Úd$šSU—6+Mb²ø%ò}÷:½×V½Ð… úôéchhÈé›)ª¬F¾ÿÌì‘È÷Ÿ={vîܹPó;=}ûöEÁüîÝ»UŠò åtëôúŠÖfÙì·öCÿ?o×iH6l8xð £ÉÈmQ÷¿ª©ýwØO@@ØzôjÙG'çAxÎ|^ó™ÈOšþmãó¬²:zrjü*f#Êì{;wÎÜÜœ]DZæ8{Iðó ÛŽR©,gö oĦ¾ÿZà2öû¸Í©S§/^ Šê:(++:”5Óç"++«”””˜˜˜¦÷OÂG"®¹ñ[_UVV¸É3¬ç Y—G ª+ÓÂ’sªé´Úê;‘ˆüòråø¾ú/{½¶îMþçQÄüûï¿QôÄá®6Ü~:«VÿÝjkkQHw–-[vâÄ ôBr¦¤Èp‘¬¥¿˜%d׿1cÆðññÝ¿¿-êþQ5}(ÿúûÚªÿÃpa1]>NŠ›û«ëƒœÉϹëêþ<^þÙú:Q:ÛÈx…u»U,$.½Âzö0 ÇG=9 PÔŸ¼šl6jjIUͲëýç 3‹áëׯ/^¼9u)–7ààà€^KÏ—./ÏrÎR=¯ÊÑD) ŠYG=þ|ãE‘pyÞXc·+žQqöÆ?SÍ©þð2ìŸ]‹B‚"£û½œ¦ÎõœTE²ëAV QWYù¦ŒÕ³Pù¶éï" 'G3Bùä«÷Î 6lSÿðêù¼{q ¥5ââRöc-ö”A§|~ø)+~£-z¨¯¯ß³gO¨ó]„3f¬_¿þãǺºº=Üz|ð±È·HÊF ‡¤W¯^}ìØ±qãÆýRÝÍTsiåd «¢¦m½‹Þå㣨©¬ÁÑ»å¾-¿Ê5Rñ´"Õ7Uó¹&IœDÂýWØ6ýXXX˜   ±±1ÛMÁÙ€+×$¼5“^|%tJ/!ê ¬7üýý§NÊéƒ^cøðá¨ùêÕ«` ‹ ð9É`áÂ…šššÅÅÅ’’ÿvMÄøo;X>zMGNª±f6UMSŽïp>ÎSYI Î= ýû®îiHÝ:üŠü 7ýftwwwvvf«Õ¯5ó½c‰­“†XZÊ{ƒÓ×6÷wâ«§/¾vbúp~æIgΜeC] d¾íìì<<©ùªý¬„¼¼¼Ø?ÜÇ õócÍq†'e£nÄÞ‰¦oúøøÌ;´ÔÕ óæÍk—Âm‘ŒŒÌ„ ~Ó”‘Øž®»}ûã¬âòfo!)!AñNÖý™º³³³###­­­ÙZˆd£†¥„†åê&HÀv?|i¨ 3IŸ—322âââ¦L™¾KŒ ¯¯oe%s¤M°— ‚‹Bšu£¶…‰zö.ñ°µµEN´C¨o[ `&Yç˜ß,vDžK£¬.©Ÿ.$6Z¬ÅÿUPP>¾°°½£š@GÁÆÆæÊ•+4Ú÷]@?[d|ä,aõÑ»•uë]݉kN´r± ã{öìÙ¯ŽSب±lýýÊÚº¦QI ŠwòíÏÔb%’6›÷ˆW— 9|æÿÚ½ÎÄX2>)·èÌó¸cÓ¾+µ ¨ÇéãO^CQQÑØØøÆ¬_ee)=(_¶|ùysζ%~HÝçΫ­­å}uã=‰0ÔF=ر£á5óï¿”ÆçPÄ00¾¨û³ÿ…:îÈ׳i_âw¨ŸþzWÜ8ÇI" ŽÓUm|÷Ò¥K(T‰DRDMMMWW÷Þ½{–––¬+-.2hq$¿Å‹mUÇСt:ýéÓ§C† ùQ5«°eÂ÷½ŽL$¾G òY–ˆx„?P7Š’ÞÞÞ=bïÐëʇºrµ“ŽDrâ{Óãzòü;ÇË‹ 7ÚÖCª€®êµ_¸p¡±“©â©ò±ßGQsQñqâ-ÔÏêÕGìYâ§¥¥ehhxýúõfc<¨n2wc³=¶+$iPú‡è·ò_P¢ñ (v!,ªÏšãŒÎü6ÕûNì†ç  †¿¿ÿ­[·@B]9v\¼x±Ñ ^‘ ÕBH¢?,2@þQ<û´º¸‚££ãéÓ§›Ù–j36ŽŒ­bácuTxÐü™ºQ¿MGG™0öÞFeEb*Qq­>s™ao}#•úçùõrŽ&½Xï¾yó†F£q`¡Ð˜]wD¬º¬l4Q©éÅ   X‹ÔÅ5jTÓ#$T¢§Lu -nL"k‘'Æú¤¥¥-,,®\¹Òâ»"ü|Œ@©ës[¿T÷·oß^¾|ÙtH†]ðQd£¬û]¸.¶Þcüµ˜Á½¦öa½U__²Ù¨ä][[[Ÿ¦W"?-ù\õíà·fŸdïº?2™%®vWQ‹«—YÔÔÔܼy“-§“¢Ø"xSgpÍ#Îü`õqñfaÙxŒ2€¬aãÒ¤Æ*Äð–©Ë­{56sóÖÖÖONjQ5|t—wh»ºQ C‡ ô7Ùæ¸h‚ЏÐÃùÿ®ŽŠŠ’““ÓÒÒ‚Þe133+))‰m¼"?L’šYõy_5šÚ¬&³wݲHÝMO<äAu¹5XñôRi³¦º!!!††† lIº©3ˆ¸”&µ¶âíÖú ‹tš~&))©´´”µgèÊLœ81<<œJ¥6«B´3R¤§Õ¤…šÿ³°°øøñcvvöÏTÃìv´ª®{‚6ª›5˜Ï–t[ÜYQC;vàåª Öe,®_¿>uêT¨Þ]0cÆŒÀÀÀ¦º&•­ª¢}´L¢—Ò1ŒSëþPs&&&öìÙ3^V7‘‹Qãgøÿ¨ýÊö>È„•cQþÀsAL›}€5ƒóŽ€¸¸¸±±12¦Íß `Õ|õŽ=ˆˆB¡ >´¿¿ÿ«†<Á/ï3!!¡  €]{€[œ"ܾýñ_×Ô ÆÉÿ(p¨Þ]d  ļdhEu¯Ç%pt/Àœ9s|}}yYÝxÛ‚¯Å?æ5+Ð[Í>\YYŒl'î„¿Ž8»Ö­ÿ;w81Ù tŽØÁÒ0Û9BÎ9ÝZYY5Gø-Õp‘ߺO6îþ1’úü0á¸(Íý?«ŒcbbH$<ü 011ÉÉÉIOOoV‹êÎJ£j87ˆ5Ì^»v­ñT7Þ;~¶‹™)?Œ&Þ½{wРA222ìïÐxÉòÍ-_])œÖ´ÅðëC1 Õü¦Ïhïd¼zõJDDÄÀÀ€½_Û8EˆÙœ[˜»rã f¸sçÎäÉ“¡b÷Ʊ†­-.+æÏijwVQQÆFkß–°þàÁƒ1cÆ€`€F,,,XË pë›5kVPPPgÍUŽ9ºî¿Ž8³Oó½yyyéééƒ ‚Z ÌÍÍ?|ø€jÅ Ä/W˶Ô®¡¨òãAÈ` ~Á£G€Ùxàq[Â:**°@SFÍ:šwöi£' ÐE¶qØŒäææ¦¦¦vV[À‰^{Ó]^b«Ê›Åô‡>œ5üüü#GŽd™~œ×ýÉÉÉéèè<~ülÁïq÷îÝ &°ñ ÖQ®®®fûÀ&СAÞ4%%¥°°oe6Ì}²wöGHJJ*++ëß¿?'}ú€B€éß¿ÿ§OŸ*++ñOzøðáÆ„††â?ƒ€5¬&[üŒÁƒ¿xñ‚+I9’ÕÍs¶ ''§  ç3…âãã•••EDD@!@‹P(CCÃW¯^qÅ £Ì`0:A6rekxÃÀ¡?-xöìW’îÝ»÷·oßP«¶ 5X †Ùõ¸Õ6òöí[###Ð ÆÆÆ\‰JJJ\ÙZÍ^êëë‘¿AÝ#œÓ-++ûò勞žÔa ETUU W¶¡–ù~^›Gà9[€Ê&œ}óæ Øà—¶€+£XÃòž=>½í|üøQFFF^^u£>‰D‚: ü SSÓçÏŸs%i\^Às¶ ""‚+¶ _¿~   úöíûþý{®$Ý9–DEEqåé…HÝlþÐùl·– u£VlÁOÉÏÏÏÉÉéÕ«ž‰2ŒØØXXo´ŽººzAAAii)þI2„[1‹ ?+ü¯^½[´Ž‘‘ÑÛ·o¹’´®®n^^O^À[¶€%`œdeeIJJЉ‰6€Ö¤B$"ÃÊ•ýÍÊÊÊȼfggwôÑ®ìFálÐ:¨[ˆ:‡õõõ\ ,¨~FGGƒ-h™×¯_0çDãããa9ÐÆØÁ­y¤ n­l` ååå™™™½{÷Æ9]*•úåË---¨½@+ n¡œœë\ üAvùåË—` ~:Z€¿-HHH[´ÔªqÑðTàøi÷ë×L&ãœnbb¢¶¶6¬7Úbú¹2ˆ5‹£­Åü‡ûÀ¼?Z0pàÀ=Z…¿ãGÄÅź6ª;&&†+I›˜˜ÀhAËdggüÏ-G¶œ´ƒ?ÖÕÕq¥?ñæÍ®Ì}²…ׯ_seB||<ÎK˜-ø]ºwï.$$”’’¶ …¡®ô'¡?´$ÝnݺqåØiiinÍ}¶ŸØØX®4ϰrh#ýúõã–-@ ÓÌ;¼e ðŸA(..F?¥¤¤@@[ÐÖÖNJJâJÒwÕ!kÝŸ¦¦&Wl¾¾>Ô[à—(((ÔÔÔr%uÖV°Íyÿþ}ß¾}qN4--MMM $´---nÙCCÃzrBB²Sø¯7¬­­ýöí›ŠŠ Ô[ -èêê&&&r%i°-Çü}=²êêê  èèè|úô‰+IëééuP[À­ þŒŒ %%%üíÐAéÙ³'·ÔÚ>°Í©¨¨ÈÏÏWUUÅ9Ýôôt°@‡-@Y玘i(Þqe$?55•+3@…‹S„¨****//[ð/?~DE‚óù†,[“Àoõ'¸µîŽÜÜ\*•ÚmÎJgcÀo¡££ƒZ"î´ÄD¢®®. ò-àÊ.A°ÀoÑ£G‚‚‚ŠŠ ü“&‘HÈ”p+lµ‡„„®L"€ºß5ýÜ-ÀxiWlW >þ¬¤¤zÚnê555SSS¹’ºžž^|||ÇÊ1*•ZXXˆÿy$ˆ”” ¨´@ÑÒÒÊÈÈ Ñh\IYg™%ä![À•Ñ‚oß¾uïÞô´ee嬬,®$m``Ðál«ËN ¸búQaAÚ…BQPPÈÌÌä–é[ÐÜàêHMMMEE…¬¬,èè¶i¤ÃM"pqU/²ŠŠŠPc¶£ªªŠj,W’ÖÐÐàÖ0$/Ú–ìøò勼¼<(è(¶i$--­ce·Öý¡¨R\\,''5ø-[À­Ñ”4j’èlÁ÷æ¹{÷î|||8§ 3@DzjjjÜêÊü1¨Ä[€Ô-++ ÏN~ nÙÔ¢ö(Ë[À$##ÿ 999   £Ø‘ ±Â”]HÝ\±_¿~uȰ|ÿì Ø.Û‚nݺ€Žb Xã+öµe·Î‡MF@‡³šššÙX6Ø&ééé\±EEE222ÿgï:ÀšJ¶ð¤'$ô" ½¨(ŠŠ°+6, ØE{Yºöµ÷‚½@ ŠØEQ±£ RDzM!$oBàîS–{oó¯Ÿ_ra=ÉÌœ3ÿ)siÂoú ÙÙÙ@DL zÞŠE é'„ !B@`mü~y‰b8òóóÕÕÕ‘& ü¨TªäôJ)1mJ%uIrfüE“H$‡ƒ¿èÜÜ\MMM´\~ M›6…„ˆDD‘~”Dø›-@´¡n¸¡e„Ñ‚L©(E Ëµ]˜Žð» Ñh’2AÚmll,Ú-´ 55•¨$2u€$Z@áP¬Ú‚¬¬,¢Êwv#Ôô—"ZOOO Šåå€"!]Grss‘á@¨$[A´jJ6ÈV Z@T´Ò DP,Ò/'´€ø›ÈsrrTUUñoZ‘Ÿ•©yûxøh€¾ƒ©¯ŽÄxBDëèèäƒ|E(ûä¤%iß¿ â€A30|`¢¿º7ƒ/ÄЃÁLÂËbˆ@Z@Ôq€’ÂRöÐñÀg°e+H~Ö@e)ÅDÝæò»øöí!´€¾ægä¨ |f ˆA‹á×™7QÚ ¡ 4%5„‚xZ@ ?QTÎW5Ò$2 TDø½pK M"‘Ô:Ünb 222é/NI%å }@a€ö=@Ö= ¡u‹ð+ 0E¡ ´ §r‘D ê²".—Ë:q”U¦6˜<éÂoD *J’ É´B\D”v‹I ¯T¹X* .Zò€_¨d´täœh ¨ÝÀ! ¤(IDB¡>g¨àƒ×·Àñ `Ž;R „_ðJ‰’ GVV–B TQQ‘ŠŠ ´@¿D `Gƒ+dЦ; %¢E‹ ´@’7ZPÊ”••á‹ç÷"l/¥ÜR-í)¨tT—„ðÿ!)qç•h8…Kµ g”ÃÿHdÚg‰}Û:Ž1?ŽX’×%ùŸG¾•Yª§oìïéì¬JC‹á'¤Ÿ[B vž"$>ªFÔÉfHbÓe9ûGäôÏ{/¦é#N€ð‹PSS|.†ƒð0£œG ø€Ïá°ÅÛç¥ò /ÝÖƒ™ŸÏÞu ØöÊÛ8m{ñ¨]÷ÑJF¨ É©uaÚÍœ‚‚‚ÆN ²³³ ‰ð“N¾àáwä.twCú€ð‹PUU|aÒj^^¢ÿ‚P¢J&ƒ Å=ghÛþ•禜*¦žëfÄ¢PûtÀ*|}W3‚\‘~H ;- *ÌÈ<2ƒ¾ÝksÿM‹oYÛäj2> üªÚÀ-‡N‡{^£5¿®ÝDE X::`ñâ >öì$‘è~a° ”*_“HÔn,JÑ„šìGÂr¡PHŒt Œ¢„ш.õîS¤uEÔÞ¬0´@,âr¹l6]ÂÊA9NG‹¡Ž`°ˆÚ›åA»‰/9,))Á•”—ƒÇÁÛ·Zà¾v~Æ)›.©Êê–$ÒÇäÂþ«æ^5G~Õp@í544D´àŸ}vÞ¡í©©`Ú´‘ñ”é@MRZÈd8>\P¾þ%ÀŒ9w¸3X¨œái!}öä!Z@<-À5Z­F` HO¯ô'„ºLÆT·ÀÔÈý}~ëÓNª#÷á× ³1û¿¦n|\iŒvK ³XÀÄDãAlñ÷h0ƒeÜıû°Îƒ.<zqÿZ™J+'ÔE jø$ülô$ª¬à¡¥òë§§[¦'#E@ø= $‚¼AF»Ë@9™/XrùAQ)÷¶ÏRòü=Òç{æ8‹boM {¸>œã„Æ AÞh2PFI|£oßÖ|ûÁZ=#€Ü„ߌH ˆªvüU”–‚¤¤¶™É¥Ò×ø”Èh·ˆ•UUÖêˆÆ8µ<8wF•ÍÕ0‹ð1”\à9(£¦ÿ&a´€@(R©„íÎDG ÊL&“BÁcOšúìÿ•å5Uйk§kÜ#8‰tá7@¡òù|B$³[®£Ðk?r|þLƒÚM"I^Ã'økw%2Ó)¯O“ÐjEPí–ð~§´´”ÀoO8-àã*ÐwRÏ íð1®ª€ š!éßæ\ì´o Š_#]@ø Pi<1­ X€ÅårE"¹¼û2€øx0ipqyÚĨ¨H^Ã'11„hwñ+Ce+´X~t&9‰D¬vM *„ N Çš±å†ÚUÛn ¾Õú …m!P¶Fº€ð;´€^zã*ذAò§Xð÷ó¢Dp|?Ø´%X]¬¢¢R\\,wc]¸ý»¹*®/†NòÚÕUB°t€þI»•Û¤™ŒC¼¡®Ñ‚'/à¤>¯_³Ák«˜ÐîæëJ±vöQñL’Úõb9—kiµÑ’ò¨µãû!]@øÃAÚw‹æ)ÀSa ¥3ðý´ƒÓ·ט$%ÀáT½|? ™|þù3nÚ­Vª'ÊåCíÖ³d§ÀÆ-U¿tr·ÄÊó„`ï¶¿" Ô$ý•±À’à~! á²K~O½‘… (‡ÔÛ?~{‚G_ÀçT@£µÚ=ö…ö¼õ­ÄJt’´ö.€JEŠ€ð{ ÿ¬ä÷”Ñ€‰¤­žÝPpgà÷Œú+©,åƒþ„2“ ý Ify‹È|¤µ¹m®çUoÔÔÖá í¶+=Ôyùíž0­\„_XKŒââ"p6 óañàÒÔ›²r1x¦Ò¤Ia¿~’'$°·oLтʀI›ì/”òr€gy•ZÒ¼…€Bbªšª®]'@¨“êÀ•[+GÀO #i«]@¢ð…õi;¾ûd‘H@ ?ñs°Ù@†*éÞ’ùQAÀ¡Ši7B½€B$¿惀)ö‹¶fêMR[ Q%ìSorF ¾8FEð©U–âþÉl¯›úcn舮Ó>~}µ<ÔûAÁý zYY®*󽔯Ø*ij– „C)ßïÁÌ $'ƒ’Z—ÒIžÃŸ"íFPPIüÒLèi‡°©·ÊK$•C¸¤Þä†ÈÖ*ëPÔÕñ©U–Z Mï³C-šQ%õPš€³áî‡Ù»@y9Ò„ß´4.·Ö5k #ÀOâÊ×ârI¨€QÞj-‚F£•Óéúÿ-°·!!?ä àëÐPI0_I i7‚B€É/âe‚•ÅÜrà¿ ¤–`-I½½ž($“ÉU'pH½É-¨aàÊ+k p©U¾w&‰=õ6kX™I[ª¹çPÉÃÙ´#Ÿ^®½€4á7U‡"ÔªOfš¥r› DBðô"àØÔOaA-‚N§K¤çOü#àöߢ8z\º¤ „ÙÙ’X •Ö)R¤Ýõˆu Aóæ’‚bø‡E3æ#Ìjà~L½MR— œã“z#žÔ2pÕq¬ \ÆÝ|åÑÙÕVC øÚŽòÛ/‘& ü6>üIYû¸ÁàíU°y;xÀØžù,«*VA?ñ˜·707gN)tz¦LÁ¡l i7‚¢¢VêÇã1™LÜRoµ{=qµÊîlÁæ(PQuÃzA 1àUÙ[Ôúá÷aÚLâLÔ€ª%ð°¬Bæ3ô'ºÊúæær72JJÀÚš ÞhÝ0Î íFÀÀ_&WT|ÎõÁVVuêÍÕUàóù ¡ŸÔ›|D ˆ­U–ù÷£h_ÿ~Žóõ¯ ¯JªåOˆD"I¹2qþ„ é»?aD¥’Ùl9­ªX ®ö¬J»¿-d~zŽ´¡nÚM$aõ†¸i·Ü€¸æÇ•Žš‰ B’£2º…á7!sRf¿iIuö÷;Xáv«$÷%lÀ&êvZ“IÔµ× A»Wžá¾†KJJp½*HŽhцŽ»<^M‹ Ï©uWýD® ®Ö](Òh49- ÑétB¶g&‹ÉE´¡®Ú­œ(ógí.0™L …ÈSµäÆ»ªL" ü"djÚ… ‚F&×~Žà^Ë`0äÀ”””~Ò"FB¡–×îA‰€ðkÚ]*Õú…³vW_GÞhiüì:| •Ư# ü djݹ@¨D§K^á_ë.ª€ôASL™¨˜›ÍFá@„ºi·ˆ%}AÑnD Ø€k×ÙoN¡AëZŽ®QAøuHkÝ»têêÝo»v•<Á9žÏç[¨ü[{3! ΠRØÊÊD%(vÿínì´@ (ÅèU˜t–a¤AQ!­uŸ:5ôFFÃÿù7WhA)<2©T6ÑEÔîFO $Û³Š ®=OdÀ!.‰€Ð¢yyyÄh7q†AÑQÊØDF´Tf‰rÙ•8äO Ô \À%Ìpð¹ˆüZ€¢u…ˆ¨DuÁB´zPP‰ 'B@¨ Ðp( -ÐÒÒÊÉÉÁ_.ƒJa±éGP@ð¹jjj(Z@L$_™I£3X¨¶¡Îþ™Lú hÁÿ“Fa¡X B]QJS1n©¦¦&ŠpÙ›É$‹­„hBÝPÊ”±¾\ñ£&ØeT[€PGâ ø„.-ÒÓÓCÑÂêþÐI„:ƒx,¢n9ã•©KÎP)-ÈÍÍ%†(#Z€ €´€[¢¥¥ÕØiQÙG55¢\E‡ô'tuub”¬-PRQ%ʰ (:Ê@aueÅ(Z´µµ³³³ñ—«D£29*ˆ ÔÙp–Dà–4iÒD!F j7!{3“Jå¨k|ûö -T„:€ÈX Š@@—••…¿\…ÂVA´A GI!áþÄ/¢iÓ¦_¾|!D´Šš:Qù E¡±@-¨ô'ˆ"õU5fD¨³á ì²¢²bE‰èèèäççÒb\UCƒ0$BQ'ÊÊÊ@åcèêêE  á@´¡Î†ƒ°ãÅr}üEP(Èû¿~ýг\•ÂTQC´¡n(E„TõfddŽ á_¿ñÖ0i%ÌpÀÍ–°üÅïC___bìpÖn*…ÎQAIÅÒîÔÔTÀQ#üëËEmþ΄ğ @áŒh‚bI!Ž’² ”Azz:þr)T*‡ÃÉÏÏGk¡Ú­¡¡A -PÑ üë7êŠlUt„ ¡Ž *‰ ñ¼Ùª 4Púúú„Ð@\$‘þº!%%(ß’„xZ@£Ñ /#$`ÀQQåñx|>©2¡iÓ¦øÓ•Â+¤¥¥¡µŠð[‰DÅ ˜°$¢R˜˜˜H†g:B!—Wˆôôôˆre-¨’’’€ª¦ ”©©éçÏŸqʤQù G"(.òóó•2!7žHH¿ ¢•066NNNÆY¨V&(×××ÏÌÌDš€ð[(,,dJZæpƒ¢d‹U4Z ¡2DÀÀÀÑ„ßENNŽ ¦î%¦R Z€Pdggkb*ƒ$š"EI¿ ‹OŸ>!Z€ (€;‚  Ï X,–ä¼”QÉa%LLLˆ¢„$>_¿~%Š(\ASSS$á|"@R[ ¬€´ÿ³‘ @»5*)¬äJe"bˆTB&UˆÄzzzÈp ÔÁpâOðx<ÉY|…:‰aff†sÀ€I¥ð+iŠ Ô!Z  ´ñ—ûáÇfÍšÉÃ4^ZÀ¡ÓJPmB] !´àóçÏFFF€DR¬á277'$€Jêè(¢ÝXYY!Z@$-‚l Z@H˜Òèy+ÜpÁÏLHÕ¡ŽŽNqqqii)Z±ò¯Ýïß¿oÑ¢¢U`³ÙÊÊÊ„lφ††’âO„ß4„„ß½{''†ã·Ð¬Y³øøx<%JûH$¢ ‚₨$Ô‘æÍ›#Zð7¬¬¬ WÂ_®©©iZZZEER„ß2„„ß¾}ÛªU+….kkkøÉñ”(í[ˆ(k@Pt@G± à†Ò> hÁhÙ²%ô„ð”¨Êbrùt:][[F@ø-¤¦¦êBhÜbn¸ vCOH$á/ÚÂÂ"11­X„_t¿|ù¢ôq–[\\œŸŸ/©B´ Ð™T…~ÉÉÉø¸­B[¬Â —²²²¦¦&þ½qÕŽ è"jiiÑ ÿPA³fÍHòQM,GI¢h‰‰ ! AA‘Íd2•€ÎrSRRàæªªªªˆƒÖºuk<óÒ¾ˆô#ü.àj!¤ª÷åË—mÚ´‘“Ah¼IY„_$‘Jâ/÷Í›7Š*¨Vp·‚šµµ5¤5øË…&>33S  u‹ ÏÑ‚gÏž!ZðsÏÃÒ.‡€ Þ?ñ»xõê•âF ¡Ÿ¹4 *ø‡кE[ZPQQI?¢?÷'âââð—Û¢E ¢ò J ‰@¢C‡ŠK à¸áÖYHÚ·@úºU«V„*„ôúøñ£®®®²²2¢5agg‹¿\---ƒz"üºáÀ¿ëH~~~ff¦œôF­¨T*Üž_¼x¸ê¾€ˆ®  ‘HDHb¹Ê È-xúô)nâ”è´²ÊÚ@hÁ#‚Â!>>Ãsûöí)ŠâŽ[‡áýŽ Z€ð+HNN†^"‡ÃÁYn\\ÔnD ~¸7§§§â#ŽF!—Wˆ-@ø-äææòù|}}¼›@Ƭ¸biQÕŽ ‡÷ï߃Úmkk+?ã@•Ÿ=¡víÚAÃÑ«W/ü 2r*Ž1cÆ(Þp½›û ‡oØDo|këØØðáì•þ{ %ºÍ+føªaÒ7†A©ê[*Ï(BƒËå²X,´€þà_Õ+ž={æàà€¢?ÎyYZ€ÂŒòìOÿýû÷øw ~ðàA×®]åj(¨rõi,,,„Barr2þíb áxö왡¡!R„Á‹/ð¯¾}ûv=tÄ6¯˜¾Q(¸õäÎЭWÎuuܲqB+ïDÊj÷áÇÑêEø¼~ýºY³fL&SúV¶,f±›óSLî@‹ÅøûûË>ü©h±H°5ôúÎçi_¸åÊjí‹V86Zѽ{÷èèhœåÚÚÚ>þ|èСH=þ ©©© £I¼ïb‡´ÀËËKqÇL¥÷éÔ«d-[¶|ùò%ZÃÿ„=…~(‹QÖÄHèÝ»wkÔ-ª(™ð¬à¨gg8œF Ö­[‡ƒ 6VVþC˜qêÔ©H7þÈúob‹xõ¶HØÜÄâ°go&½†¢££œœÈd²"ŽX®ko¤òÉVFF§ç¡“€££ãá ÛºZH(ø•Uþ IѶY8|[[[HG·Dí®¥^°jß–ƒ¥yv¡;FBoܸ1dÈÚÏkˆæ–& hšIWÂÕbÒHl5/ç~›t-hÞ¼¹P(Äÿ¾Š¦M›Â¿¿|ùb``€4ᧈ‹‹›|oŸ‹©ÜÊ;*Jò?:}+³TOßxHkÛ'Oî£5ŒðSp¹Ü÷ïß׈ÉÉ–Å ^=”Fªg¡QQQ{öì©ý£¢ÅbQ¹ 7R»KÊúÁßRâ;î;×ÏfzoV=OåÑÁ-PDuaCPÔhFFf7Ÿl®Æ¤ÒûvqÌÍxœP.jä´ hê³{g~rG9|T­Ý÷ïßÇú¦ci߂ٻ®Û^y§ío/>’À¸wïZÃÿ¤ÚÖÖÖµ^U•Å”¦¼TԻИ˜###]]ÝŸïÍ2¢™,CÄ;©R)–æ­F²ÉçJ„ 9ZP»å4vòzS"ý…Î#&<è¬^ÿ„ˆD‰Å²O>|ˆª~ŠÄÄD*•*{V¥¼ôãÉ϶îF¬èG÷I@|›WaI«gžžžž››[ûHäÏŠ#î=ð‹zó¶Dlmf¶{Bï®l¼/PÐwRNɆ{¯ãX3YNêÔ–¾ÕÐа²²‚ŠÕÓ# NS‹º±H O·ìËþ…¥e©©©Ð£ÅŒPµ›xG%¬îl¦E.¿þ8šÌÐkK¯mºqãF¿~ýj?¯-šJÒ\¬Ã\ô0õDì”ø RpIý›xZ°{åŒÝ Zº·úI¯^½þðYphÕt/,Ë+”™´b^¹ì©¥Õ6ñW† üp'«q¼ø¾k« ÇÏz•Þö]-iŸi€TïB¯^½Ú·o_‰ôµ†ÏMÝ—£tjî¤fLáÁ‹ç‡û¿ú¶ïêHÈ 'eRN@=¨-Kà7º~ý:Ö´@$2XJ•#G"Q»±(¯;u½wïÞØ±cÑbF¨Ô8ìS», Z°fÍšZ|ö碗Ïäq$ªIX¾’ªæœÑîݘ’~ªΙ™ÁL}ºvÄZ–ì©§­íWVV¦¤¤„ô¡¶á¨áOtèäø®“äô0¯ôûuRý+ê•+WFŒñ+¿É`‡3–¾ßÛxÉ®\BFI–(U¾¨Á ¤´`îܹëׯÇîc0¨¾°fNǸ³¤™¢µ¤èÑ£GÇ—}X»,¦~‘ŸŸÿæÍ›Ÿ42"ý\4“Ý4pÎx|DNË› -¬·ø­¢-ð·Ù{õzA9vëAöÔ“É´±±ëé ÂOiAçÎk?/*Ê]|8ª™]?mJ=;\.7**ªÿþ¿÷¿‰E{Ï%8õ&ìúvH {æHÜŽZœTfë’’’¾}û†Ýg`R©™ÏýRV™'‹…w¸n=œ鱈 çxûö-S¤£¸ödËbê‘‘‘NNN ãW*rp†œÒÿÍ+­J¿¯™èkRæ¶«òC‘HPuêcÁnõ•§<þæèèxÿ>*WF¨‰¼¼¼´´´…ʳWú“æíÔÛp1¹©í“‘õpr[[[uõß*¬ V·»ì¤Iø  ¨âìníçT*µgÏžÐ,b*D¢Œå”¼›Ê«¨¸y'¢L¥•G‡¶YYY˜ÒEÄíÛ·íl;KB\?nÏUe1NêX •M¬ªÈÁQôÿU>ç©S§N)))yy…£ûô˜xëT¹¸o½QaÒ‹x§>tíµgÒ„Ú¡{{{ å‡44Á®\¹2pàÀß¡;“¬cGÙÈ÷«ê ŽhG%¥;ÌÞe'9«É™úõëu<Ïg÷c·TÃJõõÎΑô~èÖ­ÛÍ›7ñŠjìpãÆ éÔÉÚÿ·,¦¾Àçó¯_¿¾k×.ðË9ˆh¡á¸xñ¼Š±>[ÅŠ†A¹Iòåû©²ªäÔÇ­;>yò΃Á@Ú‚P èÚjYAu­­¨ðaÆÝ|÷¶XÐh;~™7œ<{ŽÑ6vT q%kѺˆMG¥_˜6…tjŒÛ Aƒ–,YR^^N£Ñ°øÒ¾Êf>f5èRD ª!îß¿òäI ÿ[SDÄÆÆFG§ª%‘,3°ý¢*ÜÐ8ñðáC¨eToÏ•e1L7æ . >\öIµè­ÀŠ|„HN ´`ÀÞ⟰Øâís ŒŒîŽïÊáа“^ûÔ‡³³óµk×-@¨FZZZNNŽÇ⌓q‹õ…„„Ô0ÿ®5låVâí­ˆ¨Œ»ùú?ކ¥¶Ú°)-÷s’\ïPÁøíBCCë‘@N06êæ88•Ì šHö¬ªë†&n„\ƒ‰ Ÿ€Ž{Ÿ>}j†¨bì$–——‡‡‡¯^½ºöÈb@Q„D Þ)È_¯ºTUUutt Ãè“°é´~¹ôÔwëœÜåcWÛJª´¤‡ª‘¶ Ȇ M$“ÉÒûêú ì8tgF]íÃíí'1ƒ.–Ÿr?`[{4f;Úd¶ªø:®ffcذa—.]‰ê­5$dpû‡$ z¬ª9,Q0`äýhU#TÓ‚jn*%úû&gÞZVV» °¾pçÎ33³]ö%¢½³™ÚtàÉÁN´œÒ‚ߪº3fÌÙ³g1"%T ©B$®MJììì222ÒÓÓ‘Â HYíOüßÓwõ‚§OŸÒh´êûܤ~p f Ýó:µÑ—óÑ#“HGGõYù4!»@ö¹¹¹y“&M?~\²ª™Áí°ÏeüòÚœT–\½z­jhê“““ª·¡Ø¥I–¼%:Ê:õ‹àààÍH¤¢•:°µz«uÚß;ÑrJ jø[à_#±...÷ïßÏÉÉÁ“”@§PZ—„tT^g"ëOTÓ0#dòeq¿èË-,µÕüúØMŒ¬Ñn|ذa¡¡¡õ+K:VãïÜ*‹~:>ݺu{óæMnn.ZÛ—.]0`¤àÒ] l—êîÛ#£zSȤÚ[U½€ÇãAZP¬Þ€˜ãU9¹$#£Ÿî’ œÔþÎÿ‰åp8ÎÎÎõh8~‘”À=…ªVȽ{&&&Õ?é‚Ù5áKôrFz ‰HPPPjùÌ@8³%-vß{)ûúLçΫÇ<‚,èdaÖO²´ *8ÜÐÚF¸xñ¢´y@ÆÝ|¸  Ó»´¶ÖÓ”Ý/àê—ˆØÙÙI/ì­ŠXÜͧ¯ÐP:Ï76'+‘±-×´üN$¶ÞóÕÌàEȗ柔~JJ iR„°°°ê Ñ¥œ Ú—WØŽ´xYWŒý;w Õ°°°ø©ì~[ÒH±8ø‡TBË–-555ë·ó 4ŽÔ£Ï†ãÄ×Ñ?©ÉpssƒZÛ………111ÒËŠÜØf¶ªø”[è×Ç®Æ~Q¿gOž<9a„Èñövj'[ ˜-™˜Š–wZP Uœ^Xò/¿àììüæÍ›´´´zgd¯ÜMaÍJJ´´´lmmQÀAÊjJ9Á·-JûEŽîM"aë«‘Aø‰¿[AVÄ‘üi*aܸq§OŸ®_N åLn›ÛîÎj?öîÍÚÕš xôèQ~~>ZÞÐÂ;99q8ø:·”÷Ç…;‡Ý{Ó)výÈÊÊ‚ oذa²Sg¤²íØš5ågdˆ±/R K:¢·hû–]>ÿO¿I§Óá `ñ1èrÚÏoцþDHHÒœFŽW¯^‘H$齯’€Þ~­¿Š_mvéj¨¦,K1ë1ÖWRR*›z¬±çí¼×úŒ†Sí D…@íTü¦ðûÖKd®v½Å˜S·>i=öVͱb³Ù½{÷¾xñ"ZáÕí‡!æ]¼3º}s{c]L%B } Ù«ørOä–>-•–4jZ ›ÎŸîÛáÞB>kNAÔÉÄú}OOÏÇ‹Åâúý”ˆ§rè~…÷ýÄÕƒ“wåÊ>Ÿ”§1£:õ*ÃŒ×Ô2¡Ë;ÁÎJöwê7ÖÔ½{w==½ŸîyÛ_¶0¦™ëJ›ˆŠ‚Ú©}}ý:„‡‡ÿ÷<æufÜ ™C}´Ãæè–©ñË®®®ˆ÷7fGFFJ÷«ï“&g®îÐS§NMœ8±ú-ïï‹ïÙ’‚FJ j—ø­\Ù-dZ>˜–{÷ôÏ#±,+**ªÞ?@ç=-DýX´éy÷j‰ÖÕÕµ±±Áú69ܤÝÜܤ¯|Î8ý,~ÿˆž˜J?Ô')++CfP¿åÌ „3gÎH+x–\~ا¹Q¯f†XKô÷÷Ÿ>}zu×m9,) Œü´BÙ³Åù´]ú™g?/27nÜ­[·þ»á¨MJH4RÛh+º2µðtÍôðÈ‘#à¿C*Ô8÷ŒÑ£GKÕØ7ìž“YÓ!ÖØ6*?xð ——™\S+ç6kÝúËü¼9‰þC'È ¤­þ 5R p‡>|ø±cǰ“h|иèjQAèý”&OžŒ©P¹Åׯ_ccc!/¼Ÿ”qñõ§Í.]±–éþåË—á’“¾•Ï’ÂhÁ?2z+tÒ yï>NùZû§***Æ ûï:üSRBkB³ºÜÌð•ŸøC%A“&MºvíŠ25NˆD¢ÀÀ@©?q->åz|ÊŽaÝ0•XRRTm8ªQú¸4m^šy¨9U›Ú`†·F*aÚ´iaÔÀ‚¢J1 2K™ž"HT?ìÞ½{~~þË—/Ñjol€Š&©¢Ò¼‚nîqí®ÆÂü¾\¸¼ÝÜÜÔÔÔ€—È-€°ÖÓ<5¶ß°#áÉyEµ:uêÔC‡ad8ØØú«ô?¹~•ýðïOš4 ùÑÑÑZZZ-[¶Ì/ã{Þ<:º “Žup¢[·núú?43†ÛاaŸLO™²¬Y l„eS :tÐÐÐÀ´µ¨R%=?½$÷$± ªÈ€L&O˜0)x#Ä‘#GàÔ¯ºöØF_khks¬Å …B¸yÍœ9ÈwI<Òˆ~-Œ—õíèr8¼Wó€¤ZX…+¦k+Ù*¥x¦È>8p`||ü§OŸ"56œ>}zܸqðŬó·G´µìaa€©8±X¼sçÎ3fÈ>¬(¬HtIÔ[¦§ÒO¥ápT‚4`€©D9:4=Zºßß×xxx´à>|ÈçóU-[y·Ûµ;ÃÂÂŒml$f̘ãÇ#]jT(((¸páÂøñãƒã^¤g¯Øk‰ï2 Ù ^ÅâÏã>sºr´gj7Ôq–M%Œ5êîÝ»Ø^QFÆGóÏç^.”>055µ¶¶F•Å Ðq÷ôòò ¼¹eˆ£G ‰ñÏš5 È}IüÒˆÝûóÊ+|ÃîÕx>bĈ¤¤¤˜˜¬Æ‚E65ÿºñkÉÝ¿/Nž<ùĉB¡©SãÁ™3gœ+˜ìÙ¡Ñ'ÆôeÑ0OêoÙ²eÁ‚²O¾ø~óĆ» öPW§8ÎØ±c÷ïß©8ªÕôŒiŠwŠ ­*B0gΜݻw£5ßxÿÅ‹‹ÍÚ6QVß¡0²>7lØ?Y@–ÿ’¹¦ªLF˜×à¿"ŸF%üpÚxÒ¤IÑÑщ‰‰Ø‰Vé«¢3['iäߥIsçÎõ÷÷GÕHððáC@ð‰¥YTúg_{$nÙ²ÅÇDz^éÛâ¨âÌ¿2-Â,(ª”Æ0àÕ©3sóN:=zk‰º u)Ê”Œ?%-Èd2¤#Û·oG+¿ÁC,CKžj`½¢Ÿ½‘º2_½zõüùs…()wZa¡¥vz\¿Q'¯&æü}Ú˜ÃáL:uÛ¶mØZEº4=ZÚÜ*F2|øðÏŸ?¿xñéUcÀþýûÝÆMXñè䨾4 æ òéÓ§¨¨¨ês‰üD~Ò¨$ÓÓ¦ FãóêTÂÂ… wìØÝIÅ*€Éq“¼SyE7$‡ž&NœxãÆŒŒ ´ø6®^½Z$©Z¶šÞ¥ >7nÜøÇ”–(DIЈî›wíàR^Ùß7©Ìž=;(((;;[«q̤8º8÷˜¤7*tã Ph­^5xdff^¹r%Š®¿¨W‡VºxPû­[·N›6Mz›0O˜Ð?Á`“rwåF5ìÕ©mË–ZZZõrE¿ƒªC59e’<)¹<³\EEeüøñ¨Â ÁcÍú …-;vïM&á‘›ƒŒÒÍI=&)JIbÐŽ-Ýl,FTT]u¨££3fÌÈÂ0•KQ¡˜‡š§/I/{Vßzyy]¾|îHµ6öîÝÛ²{_šg^·v8ˆKNNž;w.|-ˆ“F$©»©kzh6‘¯N%@ïjÆ 8H„ÜK{ªöçq’"__ßC‡ååå!h¨xñâEÜ»øEÓ¼›ë¨ã#qÓ¦MÓ¼¦eMÌR”’…¡ktæ0h³ÎGW?ñóó;~ü8¶g™`Z1 ÷~rû$̪©©7 6JJJü÷í§g}|t_|ü‰5kÖLŸ>úÇðuê¬T ‡¢¿V¿ÑŽ¿4•ÑÄ2''çîÝ»8HÔ]*¹wêë__ŒŒ\]]±ÎN"ˆ™~Ë5;÷YÔ§#>âBCC]“]¨¤@‘h…L ß?&åëÖèçÒ'zzzžžžýõÖ¢Õ]Õ5Ü5>•ø ,8rä¶É BqøÈQ`h¹qÜSM<Ú}üø1<<ÜÇǾÎÚšUSj`Úàü›1ªL%l¸õÌkμ+Và ޶éiÓìÙÅÑÅK–,9pà@~~>R„†‡Ø·ïbîÜ>»i•ŒÓ–÷çŸNï1öЦ@%ŠD ”èÔ+ÞCvÜyö¦êžÃE‹þükÑúI¼·Œ¥îîîÈŸh¨ …«7llÙ¸—ƒ5>W®\9oÞâž={v÷öÝQ«¤@Áh„'ÄcàÔs·^gæÀ·³fÍ‚†â¬i^P^þù|èOÞÓ[W[ ‰·nÝJŒMœÐ{‚•($-€po×ÌËÁzðá0n¹PEEÅ×××ÏϹJ¶JM×7ý4üÓÂÙ <øõëW¤o ìÐÐkº|ò|ÄݹsçùóçS&NIœ¨å¥¥î®Ž¦@’TB?{ZçþøT€ïAÁo;¾-¼èÔ©S˜6LCÀÓ‹_m_½qb±Ø×Ûw–Ê,Óý¦ LÍî/ëÓÑBKÍ;è–X,éaðöíÛ7nà Ws’¦rwåŠe^^^K—.EúÖ`Ÿ|ûÌÑã;qª©¨¨øã?¶lÞ’5;‹aÁÐ[¦‡¦ 6f;ÚhÛvù˜–~ùòe|$Ò éÆ‡ŒKf•øÌôY¸p!š‚€[Ó.ñŸÿÇ\555|$î_»_”&šqm†B× )ÞG'‘À!÷^‰9k#Ÿ0ŒmÛ¶Í;Ÿ«Œ w–g–{)yEDD ¦‡ E<ÁèE+ÛZ·ì׳><¨®®ÞõCW~"îC€„&ág†‰D:6¦Ï~à>>¸]T¦:HUÝUÝå¹ Ôn| °C© ÜcçFƧ% à#1/3oùêåÛ—mgµb)¶ö)â‡fѨá^.‡¿ zñqРAFFFøÜY@¢“ÌΙqrýFùÍ›7)^ÀÌ€k¼{—÷mÛ‚¸ÜÜÜU«V­°6çpŽE¸™EFSðO°ÔV[9}R.‰‰nB›®kJÎ"ûu“(xÅ÷jŠˆåW—ßÝ´~´…(ðéåãlîÜsEO…'å ú¹µ9¬ËÞ.\¸“òuçÎk׮ŧ£Ý€n`æ蘗•‡®UTt\z“tåÔ—þÎvvvøH„œ`ˆãÎVŽÅe ª6MÁ¿c¶£é° Kþ\QTT„D õ2³»j§JUEíËp_8v6P“,öððÀGâý¿î‡'„o»ÙN°+°³ÒZOëÀÈ^nǯpt &L˜€Oí!lj£¿Hß§ÂÇg¾Oii)Ò@Ev wê‘QÜýM7à#ñÍ›7AAãŽ3:`ÄjÍBSðÿ͉4ßK`Ô|Ñò•¸ ¥›ÐMö™,üºpÃú 8tFA¨@Süú5xüþ-(*ò<{suÇöm ×rßr箚»Âo…¶6¢ÃÅÚìníºä»hIxxø“'Oð‘«ó‡Ž“­S{ZûeË–!}TDÃ_O ŽÒŠ»5wö,„‹D¢éS§OcLk6¿™š‹š_„¥¶Ú’?W9|8ΚÌôa*Tm¸Z+—VžM=§OŸŽ¦@WÅ‘#r8þ}kÑJ­ÈàöÖ-ûô郇j—‰võÛ%2Í\1³a §Â§6}º··7ÖöpÛöí^^^¹ÆGŒ}è>ÇbbbV*œáxºb]é•‹‰ïp«9ß³{/ž7iÀ¤&>MÐlü– ëmkÛeüà¡ÕÓ'™J8¡XÂp«á8ò¸ŒwÇŽÎÈxœü83óµ@€¢ƒr©Úññ`Ò$àâºwc×eP}ûôînOO|俘übkÞÖÃÁ‡ÉäR*Ô¾Æ×î%üò×ÊF¦¦¦ëׯÇià”ȶ—lç‹ç{Žõ,/(ÀÍAøï†#Í©‡;I'íÑÕMS¦°ÙxôJNN^µdÕºfëŒ÷£Ùøm]‹‰ >ðEoWvœ>É$©„Š%#'1H–ç,§SGøÌ›ÿþ}¬PÈËÍýüøñ‘””ÇhFäÐÞÂeàæ”%w‘WˆÄž7ÕßDÏ÷™oššŠƒ5Î=‘ëwÕÏk–—­­mÃѸðèJ°Ç€—‰=¦ÎÛ»wï›7oð‘˰`L ˜Úä }Ûh<ý„ÿb8Äb09àf‹¢$C«cTTp0b±xòàÉ•&ö¸ÒƒDGçë2}M==¦¯\·Ð×· °PòN¥««DѰœ¾LÚ‹æs5Æ1Ư]uÒÔÔÑÚÚÅÞ~RVV|hèœìì43r¤$`b¾Ÿ5Øy÷7þEyÞ7ߥK%Ï1. á½ãŸ}ü‹Î—kV4¤Am A %æÕ©CÖ=úè1o¡§§'n'‹T5Þïîæ²÷ÞÓ­&¸ù1ÿÅpø?x™›™þ4ô¬ÿÁƒ8ˆý‹÷gÅg­}¸–ªŽÔ}ú¶MŸ Þ²ÝPïïé[È °œ> 4%%¦Ë´‰óûòøÒ0$ƒ¡lcãZPð% `¢X,B“#¬QUUú’ŸÄ× ”Ū¤#Jdû öKFŒ-½\‘ÅRïÙsqdäºìì„Ë—£)"Ü''ƒ’’ÜS¹W¯¼.}½ysåM‰EE’çð§õHOe ÈrOäß N¤'®Zµªá jCk²6½K›A:è8»=šÏçããÇPÔ(þ7ýŸ}|³zÛNü„ºŽo»¿}æ~^¹æìÙ³’c½Ž!®/·_^¦\¶îâ:4 ÿ}ú¤ï&›lÍ´ž5xÖÓÇ`°¹Ü*:´b¶ZÓkÔÒ}ôh±XÌåèê¶ìÓÇ/0pò­[ÑÌííEGϽôy¸¾hýÉ“'•””$¶7488¥z ÑýxŽ©ü¯ý¯æœÜÌÝ|&à “ÉlxƒÚ{¯nqq4ïÞ¯„¥ŠùÙ3?F½ƒú´}ÛV/ÿóÁ“§8¸¡¿k8„{¿¬ýàÇó[½zu«V­êßpÔBĨˆƒ)ƒïS©¨¤à¿N ‘òl…t(ìл×//øÓéÓÔ4ËËKæó«èÈ;«a3þˆKN_¾|)|êè8MŽ\ÀÁ!óŠÚZѼ9Î}ì «vé’d ·²’,›úâ2ç˜D½½í´€±sù¤ íÚµk#Úi…L:=®£ß˜3çB®\¹‚›³xÄÀžÓ|úö˜ùñ#¦~ Âo££CF€ÊµÅ檬i-ZԿᨅämÉ3ÃgîÙ¿ÇÔÜ ÿ·ûÎÚÑ£’‰‹ŽÖÉ~t¸]?ï§³±T1:mbbÿòeŸ_öÛ3¢—þÈI»ý÷¦¤€{÷vÍŸOIJº¯©iŽæ‡XF®*o¦³úÐw77S¦Ô›jÿxŽ T–øÓNêwh9Óа¡5Ì›ZT™Œ+³G‰û0irff&>~ D؆eÚ¶]{öèUÖ¶-v~ ÂïâÛîoa‚oWË3mÙRÿ†£Š®Í^6»÷°Þ£o†eüøz¤mKÏu;œÛ¸qR]b‘¾#}~üü‘“GŽ=ºÞÿqÈ?>’—÷YÚ÷ÑýãŽÏ+š·÷Ð^4øXÃnÝ¥5£]GýúO¹ëuÖà^ÊT™çñФqÑDà 0ÚodqÞb錥ýû÷/üî àÁHØÌ ‰ý}#_;)66v̘1èÔ"†œ`ΜÃmwžÑ™eÍÂZÜÛÌÜ™S§t´0Þ·wocêF-ø±a§ÍvÛ>vô¸×ÚÚøÄ‚¤†cÙýgÂ#ÂÃÃ'Mš„ FØ·oߊe+öQöõ ì…éÒ¦ÓÙÆÆöÓw/M9ºqÁœYcÇŽ…ùüâÈÈu99‰t:êX€7æ ÝEº}¢û¸¹¹ <¸¬¬ 7Ñöƺöµ÷¼ðàÒ•¡PèììŒ'/i$8uêä!‹BŒ¿ë-ÓÃZ\™@Ø}Œ‡!Yp94¤Þ –-ü؈þ=¸_Ö_ÓÌXôåË< Çô+±7"¡ÉèÛ·o^^RõúÅÆ·lÙrLÿ˜ÃŸ KÖâö¿D»îhk0p Ubbôë×—._^òðáW4„@gžŽ°@ècécllìîîŽ'ùžíhc©­¶0âqPPPëÖ­œœ>£{Õëk×®]¹råͰ›œÍãƒÆ$ k‰½¦Í¯øô6öîíÆÙ”ŒÜ(¾åIÓ§LŒYçÁðè×¹n¼^j8–\Ò±cG‡øøx¤ðõ‚òòrooïÀÀÀЉ¡LÙ:XK<ûÞåb»f-®¾}F¥2ËÊòž?ôô¼`aÑÍ! QH&‡M2ü2m8D&“'Ož,‰p“~xTﻟÒO?û°sçN//¯Î;_»v MÊWm8ááá>äᨠVã8r°ê½rý³‹1w¢T¿·=F´ âÇF„Tmªß-?‡\‡^záÆ ª ǦM›üüüÏœ9ƒ4ÿ?"??¿ÿþYYY7ß{ÉQ¬õ£äÌ)Ó¦[ÒÅçƒÏ±XÊ11G…B^xøÂI“B' ,–ædÍŒy#fffΚ5 7ÑÊ zˆÇ@ŸK÷ÞdæÎž=;88’èæ¢"Ä:#77wàÀyyyQQQìì‚ð‚¦šb-tëþÃG·mº~ÅÒԤю<¹ñZkÖöÐíV©VÎ=qÊÊÈÈÈU«VM:•Çã!P7$$$@·¬M›6Î_È™•£ç§‡uúàsnaï‘ãLE%·#¯WááŒ8<@o¹÷%—ƒúôéÓ%K–à&ÚZOsëG·ãWŠù‚®]»Béׯ_wqqÉÉÉAóò»ˆíر#TíóçÏ+Q•R¦¤í1¢¨b›æ?´x¡ïšC'téØ˜ŸÜ˜¿¼J?•­¶Z¤Xôï׿ª"ކ£mÛ¶péCgZ”P¨‹Ÿ9‡ÎÇÇgÛ¶m¹þ¹ð ÖéƒB¿ãÐQ:¥Ùoߪ£Ó¼´4gïÞ—//A“B¼Ec’§ÍJãÎÕ«WáÆ¼p!~—–M°³r2oêxSBPôô ›ÛªU+›°°045¿Ž={ö 4hëÖ­[¶l¡P(™k3™-™jCÕ0záÂ…)3fðÛèç>¸‘?eåÊ•¿ø«wîÜéÞ½¡ùCìŽlÛdÛ¸¸¸½a{GŒÁ``^ªfÓTûUfNp\ˆ¶–P܈’Æ‹'N$‘Höööd2…ÿ 7sæÌ'N\ºtiÀ€ü~ò¤d‹KT-*vB+DbëA#© ïž<”M:::Îrv^ ÿ4kÖ[q‡tÕªU¿n ätc:\Å7‹õFê9rõêÕïÞ½ëׯŸ¤›=öèÓÜxsÔ3A…ÈÞXni½{÷†z=}úthdzôèQmaf¯ôxéáªë1ÛÎL RjÄ÷ ß2köœÛ·£ܸåê$¹‘û†›67 j7EÃQ Ÿ0i²Îøy·VÌ¡Q”®ƒj7vZ¡ê¬jaý2ï¥ÿywwwšlËø¶C‡nnnÐå=xð`—.]´´´àÃr~6uÁah5¤ÖDÆÍéÓEjÔfãÕÓ‡ýŽ\}4dýœ©e,§7#ŒŒŒ€|öI{ª¶êlëƒìÝÆ¥¾|ö16FC]½ámC¢GΗ?¾°;°U[¨B¥Þ¸qã‹/ ƒÄPÉä>Í&œ¹îdÞÔ@MRW©§§gTT”¯¯¯©©i‹-àÃÝíV:;ÄÞ{fÒÑ øÜÔ ‡oeœØê1°§ëÄ‘~qš ºèI´{è'ÝùºÊÝ1l8mÆ ñ)7WÌÕWe#ÕF¾©¤€Ù<Ä|±p±9ɼW¯^¹¹¹XKdR)!“®¹“Ru!,47oÞ7nœ““ÓÚµk¹\.¡-Þ>WúçýȦzfÝÕ÷\‰E§31ºÙŸÔ¯]=wòû–=ÅJ›ûm÷7€qú ¢¢¢›ë¨71_>¾¯¥©TFþAQ¥î1LñNñDªªª×¯_õê•··7>-šiªÙËýÄÕÜÒª²!6›½oß¾#GŽøùùAv‚g+F…´º“½üŠB÷‡ŸÛ³Çr‹²b‰þ¶÷‰NÒòÖÂNô|}¨ŽýcÇ´q-u‘v#Z cD,Ã,ç%Ís²p‚þzrr2þ†ú13f̈…nM«V­.\¸ð7Ý‹ÈïfÒÈç(&&VxvsFüÛ§Ïb‡¹º0”š°H’«“3×ebzú€Ïç÷äóâÕãû÷Lõõ²( Ô†¨±lX™«3ák•«W¯¦§§6¬´û-‡¶6ÑÖrÜék²zöì}{{ûeË–•|ï¾Ú˜!‰Ž=Úºuk===88ÐüB`ï¹§Þíi8}Æf!ž7nÚ´ÉÞwm×¶í¬ÐtTmˆ(‰ UƒÊnÏ6Ü`¨å¡å=Ç»wïÞMš4ÁTb‹&é…¥û¾kÛ¢:´ =www› \¼x±}ûöLê¯7‡´n´ îëׯ‹-Z¹rÕæUó¯3Z¬~ðîÀ‹¼­³†;p¨X§ŠŠŠz;÷ýZ~ébgKã<È ,‰ Ç‘“:5U¥ M—F§Ó¡fEEEmÙ²eèСÐ}ÇZzOKƒCßd–:™ÿ}¬ŽB¡tîÜy„ !!!óæÍã— ­]:rSµ£££]]]?|øpòäɉ'Òh4ćB‚Ž3ÚÞdš<ö³úuõa˜äìÄbñâŋϟ??}ûÁëE—<]XIÁQmD þÄAÓ¦éøë´[Ñnìıvvv&&&ø(wÊ”)Эñòòºqù£¯Û¬v†Ðjp¹\ÈåÇç"àìÑ©IÓ&Žº0ÆÉÍŒ>t×íMðžg¼+gÒ‘={}¢¨ì޷ϵmó†=Ô ’P8ª&5ýÏt-O-™·d—´´4¸0@CÛˆ1™Drnaâ}îVÛ¦Úfš?0WeeåáÇ;;;<|4z×&e&³mÛ¶ªÉî›7o¦M›vøðáµk×nذAO¯2'®ØpHÜ*v”MaP^áåBÓ“¦$Jý«·@ ðööŽÝ{6xú•§S†6¼’D ê Jm•Ê3Ë5¯jöÙÖgÔèQp{nÕª!†ƒL&ýÐÛ{üÂàÛe[Þ½yÓºuk¬ ™ü@(ž>}zðõ¹sçFU!øà÷\ÝžF&ëêè¿ yÒæªUV§Þ¿ß»OŸrËvóøöìÐà¼AÒ©F³…œÎ’J‰Ô£G‹}ÓŽ;cRfÒ¡j?s}tûæðuŸêèèDgVô\8ïÉIIÍÜ«¬¬¬|·Ý˜˜˜Y³fmܸqôèÑÇ·¶¶þî¿ 7œ<{–f;Úä ? ùdzÆ”nTÿà999ƒ†öì¹ágo®êß©Os#¤Úˆü«&÷P.¼P¨•¢å¾×ÝÓÓ3++ Úì ˜ÿÝpd~ˆ:FqI>µêãÇS¦Lyò䉮®.Ö¶ŒXðx¼ƒB½º;w.\¸PJ†Èdú¦ë”ŒÌm4èñï^²–³ ˜ Â$}9‹!c »80²™ÔðO€4TZH€Ó…“<)YÝUªQÅ mmmán4f̸Còÿ6Îíèe¿üÂÒ7¶U§Áß)Éÿ<Üÿ¢g胣o²š·4³¨ëaH÷¹å Q±ì¬dRÄŽCÍ‚î'”‹b>|IÔjvwÓ’ˆˆˆ™3g&%%™™™AÆÐÀæA$EFFN:õðáÃ&L8v옣££l€¤´ä}¯€w_Ó“W_!/+x¡)°ªþCtñññ={ötvvÞ¿ÿ¬‹÷šªrV:; ÕF´àÿ™2ImˆZæªLmŽöÔ½SwìØ$$$íVˆ·«‹Š2'3+9$]uQWc>7ÅýÚççÞ=•Èd3có]áWì:Së¸H¨þþâëoRT,X-šü¼w&éñÞ$ëÁúUŸ“͆\ÿMš4Ì`öìÙÐø@fùqýû¥¥àÃðù3ÈϨï~-eeeaaaË—/÷õõm򫎠 à³±±©îØ4õY~ϸÍ…"®èÓûôÖÂæ“ëùúHM|||àt<øÝ×¼1§®5ì’‚ÿ¢ÚT€ð3Ð èf!fŸ†~²¼a¹}ûööíÛCu…vìØqñ–ƒŽ\¹è9XÚ‹¡!ýÊËú%¨ô—œJ¨~Îáp7oÞÜܪUiÏ‘Œ–NgºÃç<îË@‰$Õ8j7%Š[áøš÷Ð\â-Z]ñ¸ÍN­ê*"¨ÚÂ)Ùúk:4mp% Ï;íd«=zô4hÐÀ«ªóþ#?Ož ¢¾}·oƒŽ%7Éýg]¾|944422jÓÈ‘#?ǹöoBí†_ÿtŠdtüéÈ÷âÜ ÕqõYD?’——×çÏŸ=zdbbR&Ž8qeËGԥтºx†; %ZÅZÁ}×ÊÊ n½·nÝ‚F‹ÈÞoPÙ:mY%àZèÙ³'t5\\\ áèÚµk=T5cf8Þ½{ÙÀùóçsrr\]];Ö©S§_´=Þ“Ê•NÔ³>Ÿ>}zS»÷è°-`ǰnÒ” ÒËÓæ¤™3û‘‘“.\UfìØ1méÙã7Ò¯YïÒá†+y¹7˜ÏŒ Ü?ŒI¥HU›zP»&ñ•dÉÞ•ÈÏÏ¿víZxxø¢E‹LMMœœàg®cüªv|<˜4 ü½3‡â ãø»k­u¬ûÊ}å–[I¥[¡C‡TJøë¾KéR)*J¥Tº#]*JHTR¨$©Ü÷¹vífW’ûXºÞ¯ùìgvvvvæ5ó¾¿÷yŸ÷yˆßCVUK—ÐÞÉðá}8^CCCBBƒbbb^¾|‰ô …ÄÇÇ×m™´~ÆŸlÇY_ÀÓE™ô–ׯ_#•Œ©©)Òý ×Û‹#btÅ…`”( ú-O}Výû ïåÈëèè¼xñÂÕÕY9{öì°aÃ~‡ŠÁ€†¿¿jj*Rq Í[NNRq 'Rw¨««÷E"0ºâøöí¢¨ZyEÞN:õðáÃÈiw‘¢ƒZcÏ{–3µ ~ÜÆ³Vk = äŠÔeHçf¨’ò¨€K õUm5åáÍÿ÷1dý·êo˯•sOj›tÇÐÐ05õÅ¢E.uÁWì”'É‹5ÔÝ©¥6  RÉê(‹Y™ò€/s^<÷fh íÉ£ý£"âá±§A&“‘øñãÇÁÁÁ ,FÎ\CCCUUyÒ{4S©¦$&GGк<æÓ¦4ï|Œ‚ %++ëdH¯iÔ¨QëÖ­1bDÏ'S´~ư¬«htæ0r•eÔüäÉ“ˆÚ»wï¬Y³è[BŸ½}ö¹àÙ {ø8@YЪdíúÌúONŸ¤OK#âHÏÒÂÂbÕªUîîПŠ9-6lÈÏÏôèQ\\ÜñãÇóòòŠÙŽÔˆ”‘““ë>#*Žêêj¤ÊH¡ñìÙ3ä”Á>zôhä)UPPèc­á]NžÍ>b¥£ üÉ“'sæÌ7nr†뜰ÛrüÜk-ôàmÿWBO®øqÖG¢)±%Eo}íÇ¥ ä͆2ül„Ù‹ç_ªâ]2ftÁÚµ3Ù±3bs#ŒDãâ¢j9UL‘¶¹Ÿï‘)6.Ƚ\Œ èCŸ‡ÃÑ4ßþôôôøøxDÔ^¸pé#í±ššš¬¬¬T+ÚZ²³Q`{«>ò€#Û?~-3¿+äáÍn"ßE ½ÂñòòBj˜–„¢}«ô¨ŽÅÌ Pf18¢ÈÿuUUÕ²eËè6 eeåf;e~©çµ¸GKlØð°áƒ² ?`R•dÊú¶õÛuè¨ÞìÙ³EŒ¼FGG‡„„ˆˆˆ0Vô³â@@žX[€æÞ4~H ŸÂÂBD×# ³ŒŒ ReHÓ@.á'‡¦^Vuuuˆø@ê‹ßÉÈÈøòå‹ŠŠ Rk eµ|ùrD‘ô-9dëZ3¯’1¦?¤×µeËD6Y[[#[¶ÜIz_\þÀmoú¿.k®/>_$Ž4ûöX%Í)1F[ïä6`•$$Îïר^¹páÂúº*|}×uN‰³ËLu,8&*À0S°øÙeÏg?ïÿu€²4ÛäÊ¿eÍþ¾¼¯¢At>Èÿ¾U‚J.ÀʼnŽr"+<€Â ˜Á)VÀЏ %p•=ýreHyQ[ÀŒ uˆ\u5èBªlDÀÅ÷c‘2:S?à ¸XÀíLtéÚy\{ò\c°1dnQllì¼yóÌÍ͹ßâÖ]  ,`h'ƒ+wCî­Î[‚<Çõ›EšR¤;¾cÇMMÍM›69;;30!2Ã+1 †,Ömüj@͇¤Ÿ“>#uG2HFj d¥#uà¡W< ‰0#˜óŠƒBRQŒVX&ÐØj«A]5¨¯T*`çBë n~ÀÅ®èM<‚‰Xl"*ÑkÁ›G<ê­ArbgHîƒÄÄDä_&!!ñüùsDB![ΧfOxìaÏÊ Ÿˆ¿Q_Ñ7ªoªí«‰@ÓýX[ sdiµ‹ÒŠܰaúeËþ[æB ÊËš‡ƒÈÔ÷ÆØO\ú’’’òׯÔÕ‘þ4ò²ƒ>úp¡~Ž>699nnn><œ/-“£EXZ™ vAAlÊäeJÒ„åë?§& M_¬³j [cCÞçlË ÂMÔVâ¹€ ,`@1 àänʽó/…gÎN·æ­[·nÚ´i...§NB:jjjDÅa:èúTTT•Ð(OK«ÎÍE*Žšš‰ÔRqÖ¬,¤âàVV&‰4øùù4¼|ÛZC¸_µFeeåš5k._¾¼wï^º5U Ÿò—_ytÇuŠ+¼Õÿz"¼_ˆOçøäôI饖€m}§µLùÁ`0®®®&LX´h‘ŽŽòtë÷ÛÙ¶«P¿™¬»p8AÍïÍÌÀñã`æÌ¶æÀÊJpâprƒf‘±e’ššj:ÑVG[+ùÃÛ7Ù©VÇï8o›LOEúìí®˜ä0C‚õ+5¨  ,`¬j¬AÙ6Ù OðbÍs|•••cccƒƒƒÍÍÍ¡ÀÊÊúÇU€æóŒ 'G¶9ò7©8[ W®\Y¶lÙ¸qãÒÓÓ‘þ}c^yµÍÉÈ £Õ†ðÛü_@Ä„§Á¹¨FíÛæo¢ÛE[ßim¦üˆ‰‰Ý¼yóüùóvvv†††~~~¢¢¢ ¹“AGµ­ ‚çAâKPÓÄåÁ$KÔÞ bSAˆÉƒ©ã@ßÜ?|8ˆˆ@]…Z;_¾ŒÎ3úuš »2銺ººÍ›7‡„„ùû#ÿ,jŸ‹e#6σhq)ØpnÎ)øt gÔ  äýòß¾¹|ææA0º¯ŸƒƒR}¬]»V\\\II‰!‰ä0ž<)²ymôc`¡6‰²²€…å§ŠCSHKÿªZ£Ïòþýûùóç_¼x144ÔÍÍ­e~i-‰lvø’‹¡Ú|=å¼"ø»Ãµ†~‘ŽWRêy¬¸™…™»žò£ªªêää„HIggg‰¤««Û‡1…„€l®%|mŽO?“¯±e-ጚ©ÏYÀj<¡ ¾Æƒ4EAC.8sL ÆŽ oALèsú411P_nÞ ?¼| bbÐG»O“ŒúLïʤs"##­­­999ݯ¯¯ïµéÈØë aï©¡î–J&ä·¼¼ÉÊ`¸@ñ¿™ŠF9p8 9jSkKCKyfð`°?Üc888¦M›†‚uëÖ>}ZYY¹Ã8}ƒð0†ß â`H{yyyzz"}ˆ“'OJ·Ò4”&êŒÐ(AžãGÀþÁ¿# èwÑg)åRué­Šl¾Z²K7£ux<ÞÌÌÌÖÖöĉÈÎÏÏh…^ÍBBn×…,²±ƒ;ÇdD àð€¿ <¯Ç‚ªxðVX¨, ƒ»W€¾!Àbúþ€†Î7njÂÂÀÜ|Ðä~ˤ#¾|ùâèèˆhýÀÀ@ä1§{Ž1Õ]o®¥Ï^l{*Ý{”⢠÷è‰nŸ~£n±H–>ÚÝzÄ!‰wVï¾®ý*º£­EÑÂÂbôèѧNB!¤W±cÇŽf³|h‰cØ´¶šõ+®S_­8²³Au5àçG® nn·~H]]ݾ}ûüýýííí‘®R•·ÙamT|uCãÅy¦ð–þAíÕT@[Š›_NöȃGBBâòå˱±±kÖ¬ñõõݼyó”)S0;q¥ Dg;t•U Ô^yú`xñhh \?º¾Èãüó”¢?‰tðàA¤‚]²d Ò k_‹Ã[ŒnŒ8¸5á =J…R½(£&|œƒeÁÀ€Ácd.Êd Ï (øæµ ã…ÅbçÍ›‡t,öïß?bÄa)åWêf€ÓoÃbOîŸl)¯h_ËݲÞu-þ7½Ô?³â “ÉHMá¾Â³JPŒsÛ¸žÿ{Ég¤¿Xt#ùIq‘(o½ìðÿR’{ÈÏO2hÀ5áš°{¤œaþ¨#.¤#!¤*Ì×u¸¸[·n­[·nûöí[¶l±²²˜ó£‚èS€ÓèÐ-A Œ®žõ 3ÌïÿÍ•J _¿~½¢¢b||¼¼üÈc?BP`o'<Äàn>Ž]ŠF)øø2¦QÐ!Á' ,€tRj¼¸¡·†ffà¥ðDSbûXYYW­Zåää´mÛ¶¼Sû‰RÊ¥9V@ãÇ\Sùalt¥ :Å2’úúú???™;Ñ‘úúúÖkZï°.µÖwá¬ÚÒ‚i!7ë°Â¼lXhÿ&Íþ!õMÔe.”DÉÆ§”oã^f—T¨áC%‚¸ òª$ÄËÔ‘¡‘–––W®\ñööFš(äuêÔ©LŒ”˜p3`5Àx­Û4ÌС. ¼`nöCü—xøð¡…B9vìXûíÖ!(Äʼnä­cš£ì¿öeüìÑ𶇲``a‘c‘ —ù8û£ÂCd½Ã}øùù÷íÛ·zõjÃ),ŒrÇŽAîiU¤ÿM¥¬8t×qþì÷§CaI2„ªªª#GŽ ¥=|øp¤31¼ˆ‹³ ß—›ž½¿ÙXtcœzðok‚–.XŒ¾s‘ÑQ‘o‹Rcj^Ñó¼Â{YŸ}ï'­¨QåoQ ò<-ƒ ‘“'O¾yó&¢D‘G{åÊ•óæÍcëÿX• ®…¼.§ÙÁ§ÕEàÊm :¡ïŽ ¯_¿^³fMZZÒѲ³³ëxì¦UŠygï~á–Äþë]ámeÁ`@4#Y3äýÄ÷ŠO[b©¶G@@@a¤õÜsgðç‚-,,ËÒX+Eiv²‡ ,Ä~óåË—ÀÀÀ   ¤lïÞ½«Úå¨GE}ƒ¾ï© Õë ËYokXzP€vóâŒdD…þQe= ‘ɹ7Ò?®¿•PRS¯%& #!¤+.¤-.(ÃÇ…Åb'҈߽{7=¸B¿ÒצƒŒRnƒW·i]Q°bºrh/¨&(ë ¹A*¯÷Éàa(­üb`Ì FsÙK{¿• €“ŸjdQ¸ßùòåæÍ›‘âõòòºxñ"¾U莓¬°×7ã^ý®¨qðn‡²à à*PŸUŸm“--‡aêJ¼ˆœžÞÞË–- :²kÙ®“ÒÜçör!Õ5Â2ìMMMwîÜAÔ@ll¬½½ýÓ§Oee»É°Bi¢Úœˆšc¤±ÇZÿ~Ò£É{"'lžÌ Cÿc|-i7 Úx³rð£äÄ…þ¶´¶>ùsaòç‚s)™+¯ÅÕ66ê ú@LPWBHGyØåË—333444 ]\\¬¬¬ú2²À®|Ô;ؾÄã”×Û0màÄ×·@D$X>PIàV°]ĹAîsÌ…0 º Às”””´mÛ¶”””•+Wž>}º½¦Ã$«éê›Ä^Y˜øÊ‚_†Øn±“?|^úYâ°D·;sm…F;÷¬¯Ù+‚ÂÀÇôÑ‘›}ŸNK²‡†„„;vŒ——©y‘ú¢ÃlîíYzù!™i÷Dc,CwTN%QôX Ò¿Ef¸ð²Æ(H ýmAUí³Ü‚çy…Á‰é‹.Æ [P}0~Öѹ‹ò’â¶nÝêææ¶páBIIÉ?µ¼&Œ¤Ép2`ÂvÚ¸÷#’ ×=Ú¹sgzzº··÷ùóç;Kdß>üQÌ©÷<U/×E*ðV‡²à—aÂHŸ‘Î4Î, (pë>ý¹Š‰-õ{ôá‰+w5ò€«\T7àíììlmm‡ ‹´Cª««oܸÔ±±±Ó¦MCVtttzþõ€Ç/cßçhk /$5Ñ•±,C4ðP@úŽ‘ÍZEYèoóÊ«“? BaûÝÄW… dƒ™5¥ç“^íÙ§¥¤¤8ÚØð*F$‹„ãââ]h9v‡ÞŸãÚ°T‘A, e,°NrÀq‚9óõ;õõõaaa‡jhhX¹råÕ«W[t« P•D¸–ñ±‚7'”¿&.&¹ër,r,œcJ0µÿØøOµÈJä¦ÃÞ¦¦½KZŠge×ssŠZãáÂ…‘#G2ÄÞÞ~úôép÷‚¡ÔÕÕEFF""àîÝ»ÆÆÆ3fÌ8uêTO²¸þ\òX!ÂS÷é‰)ÉF[ÐsåqŸ„‡#Æ!ÆÍ,Vr¸W$ÂÉE*̵e»®Þ|8¢Ž=Ú«dn-%ÿú[‰ÙáKW'HñqKµÍ•0VÉShšž[x4>XfN]bc¸î°”¦Féã[áW¢š>¼ŽV6i5~ü]MM1v<óo}UL,@ÃÜÞHPŸ°b@Žæf(7`ã@M#àD»õ-qAÄ…†øØX:K£Þ¯“ŸÎŽz•^IV’;îh®ÏúÃDG¡Pnß¾¨888û5r£E†Æ+5œÀOÛ:9[`±ØQ4:„<'H£8sæÌòòòÑ£G[YY3F@@`0®¤¦ nˆ¼²³À>HáBI$R||<¢)››kjjЍ¢ƒ¶PØžÎ|’o…dÞËÜ·ËD_RÞ¢A…Úpá‰9ÚyÅ`±7kîýŒÄ_êç<‰åÉ­ˆ+Ww»ÌÞÃÎÕ(¡(¦¦¹µü›4/—7ÇNvö÷ˆhRÿ¼$¡K/ï¼(À3Œ =ÙE@’䤶%‚=.ˆ..îÙ=zÆú¼áá/ºÚÏ”d‹y|{BÀó"O=dÏ´´´ÐÐÐsçÎIJJΛ7ïĉD"±Ó‚¤PIIˆ@—Ìzº ’©yA‰__Û˜^ÝÅÓ$ÈÄçZGÌ„Ür¿5ÕYàq`Æv¿Ê‚A€¸€‡4¿$ÕøÎ+5Ìw u‡ÉÙºù¯àp4öîÝ›““ƒ4“W®\Yºt©´´ôˆ# W ‰¹†„”¤¤''(,==ÐגּQUU•HãéÓ§?–——G¤@@@€žž^¯\¸;ôI~xæ~Iç ŽYÚŠðæ„ ²(8qþ"nŠ •B®yð±û<{WEîw/ ƒoelµtÞ즦&äæ¿yûΗ/†ròë’EŒ†HΜ­õ[Äß$ÈÊm H " æLG72 qÃÁí³´ Š`¼CKcsq¶!M‘ñ¸æ†µUXv…²hÂÒ1#ŒKÎÚàŸy:ôÛ·osæÌ¹ÿ¾¢bÛg“RA©Ï¢)€·õ Y ¨=àC³3Aìºì¼³xY•Yq‚¸ïµk.X`=Óàeý]¡€³Q`Š#¸~ô§Û·Š àýnÉ>¸µñбt|P ô@ëØy¥I£_SM’î-RRR‹hÉ䤤$¤ù¼xñ¢‡‡ƒÑ××GôÒ‚ªªªöÊÀÞ•&ÈÈóçÿ”qõÒ%ÔߘAI’H$RfffJJJ|||BBBvv¶¦¦&"tO:ÅËËÛ÷’ÿÙ')ù&çâ³N%Ç·Ž‡w&dp%Åÿ\øIŒj²:½Á¬­Îø€]©‚Ú½ÔU´G`Ÿž©n\ÅÇb±4Vó)]°öÞ§÷¾Ø„àŒçkwÝ œ2ÅZñ—ËY,0´B—6¨š KGxm:²»œÄÂÊwÖÛyËÆ!ßXµï‰%1:4ô53ûöä)Û¶m377Gu åè½ÿfK@F}Su‹< A<¶<¨P `X:He`j濇§ç¬5þÙô³” rx@nµqéJÀÎ ­ƒ¢ fËÄ5–…¥ vo'ú© Ú˜ i¬\¹y›››ûäÉD%DDD¤§§srr*++#ú€þª¤¤ÄÅÅÕ»¨©‰‰ÀÑ´žï‡èƒiÓ@Hš¡÷£ tð†r’ÈëÇ%%%µ´´ªÐÉÉI]]½ij»UNE‡f9ã7ý !ƒª Ⱦ§Î^`ÑH¶ÖÒß'°I15$î[â"Ïõ>3-¶ëÇF«{›@ùÕò‚=ÕÕØÞúã%y¸×è™ÍPScefþ¯ÞoƒëN2‰D~¦bäõk²Q'½ŽxQeÔô,]-†1»šMU‹'}:ñ©!³¡>«Ç£7ü¬j¬<6<, ,x±žæˆéUŠ‚Ê·à-˜ßÎ?#ôØàndJÚø3^Ì—y\M%¸—S.×àN h• aooO›““óöíÛׯ_?~ü8(((##inéû Ͱ¸¸8}]PP‡‡é”wàÆ˜Ž´€(dûÇ¥Mª¨¨(+++**úòå˧OŸ½ò™²^RR"++«LcúôéÈ«‚‚B·“Žú© è>É;f|<±ËúA™šêÌU/Êx€K|€¼e! ©ß1ƒ/`¯5'â’WYŸ—½­ì-``º¥vkOÎ]îks´DDþèË/--‰‰¹};º!üʘ£ìcÌÖʯ×ÕlÌj$nÌ`¯Q$UE÷$nÔ OÀ²÷Ý‹â·Ë:ûËÉz ¿‚©Íoï3isߘ‰àBˆÚ†?6?HˆÊk«6Nˆ°Ò˜/¦ž™ÂÔ„u¿û<ùÆ þ2ðh#d ®¦¬ªìeu9xý <}ªÊ@U9¨«õµèÂB,lH/]XÐ'AJ#r7|]·‹þv\½ˆÀëæ'¶|¤,ðV‚J´â5ÈJ¨B^‘… °qNnÀ-…°ÒZVÀjÂø1o1à-—hÆ@Jizý´@hLLTG}e1nx+Bv¢ u_±tTu SuСwr!¹0 0m|‡>G¾g¾w7W×7´´´~—kèåTÉêÒê'WŸÜ½yãʓDže´Xµôêõ‚p#TÔÙhó¯Hh­Ûzïz´ðè·v2ð&(t@K0ÿ=`þR> ëÇüR]Ù0Ç6|T`S.>ÜUeA;ß nJ¬ÿp‡ÑŠÂh¹¥Šndcå°ÐÒNš ŸÇA· ý±ÍÞQrL¨MñÀ”…@™÷jxøÞRé»kÜTX+Ážãm¾eÁ@µLÍŽo¿«ÿ 7 ™VgUSŽ3g¶G¨¬'N''ÐÿÔp°ä!΂i3ÿ¨:¾º`gAuBµÀ"ÕLÕ/u_̦™‰‹‹¿xñbf÷ *…J)¥ :€TLJM~”ö*-=/=«)ë-xÛ€iГÕ323š?vþpëá„Îs”ܸø ¼K÷•Íö0w ³ oÐz–e¹GÎ Ž&JµÃóò‹[ U˜ê@ü@T…²`ðZ&ðgyƲ³£Ó ""PÃÖ3._F'(þQš@ŸdÈ`Ñá,˜æ»Ñ^¦ü2êQØXØ(ä!$}Nˆ‹‹³³³óöövwwÿ¯+õë×+×ÒÞ+Ê–f’Kˆœ'ÕÔ4Æi¸ºhjj:´ÙL2£{3 ä×ò£êðçC ßMÀuÅ÷Ý“4ÙÞ]W+áZ¼j”ÇïKO‚úrqŠ ÔÓÐÀ€Q³aÉCþzeh+¸CŠ•Ä× ¯™™…V qOæ4G›7o:::ž9sÆÂ¢Wýö¨¸'«c^§WSUed:˜±£#wÕeíBÞÿV3DDò°£¥%W_&/ Fþ t »ß†ÅžÜÍG(ø’{?=ï {M¶@mfQ ž™g”…¥ÃlDZ#9 øž›I ¿–êò,äõÅR¯¬G»ãuGÑÿ…™c»ö¨ñã-OJ{6>êê#7óVÑ'¡,`$ƒg,¢ † Cg%TW~~€T^¿·àï)yÈŸ¯ ¨ŽÅ*`ÏAð©ªÔ§J…Jqþ’»|ù²››[TT”¶vïzÒ u¹GŠÙN»Ï—'^½4õð«B/M´E? FŽ/5‰‹‹šqàqùº¾$b¥ù­×´l!“+^~¨¯µœ›ùCNÖù<6]¡†}µ «fxs ¨™s[à0]Gµ+3 ´Ï &»ˆ~z…ÎJ`÷ð|ä[›|rgg Ô²ÅÎH“™Ù~ú4d),,  :°}ù¹£uÊÓX;:¢ç\>Ô¿µ1'eÇq-Ö/µž#x­”…}ÅÌ)#¾m ,€@ FhZGùyò d¥µiD"͘1cÍš5fffýûŸò, ,¬§©8œ<»°˜7Êü‘üýLPPpÓúuëV¯ºzõêž½ûnÅE SæZƒqÌ·€=XxGü¨$jÙ“JÞQ·=²ÞI’¥Ù/„À.ì7ºqÆXOY«}X( „1š€¾¥Í ûªU«$%%]]]ûWë·Í³@`k¨»SKl@¥’ÕQ³2,‚ˆŽñcÔ&Qóý)Κ­ƒ#ãp8¡­ç ï„+Ÿ;™{|ö™YM‰vÚ‘j,r,ðÆd²ÆÆ†~J$k ‘°c&Ë·Ê=ûé[Sø¶¸ý›GÓî%ò§×!ùLºÃ•5;<”Òwºžó\ñùÙ³gÓÓÓû§ :ȳÀÂ*9‹£qFln„‘h\\T-§Š ÁÅ*+KÖŸˆ‘×+À„éBi³|Ö¢”””e ½Ã^„9«¹,Úî,â.̓IÞ›²LréŽñ ¼ ˜ßÄo®kl”ãE§„×õ‰³ËLúvð¨ýÇÆªEV"7öÆ05íEæÓg-vš°™DKKëqʽÀ—Žmñ=åêyl¥Óu'h64îdd’”qÓ‘ÿ$š@jØ-§È!w8w ùèa1«½¬œÂò5ô=™ðêææê] Ê"""˜˜˜úyœÎò,ye¢Vö×ÅoÜr'j»= MØ¡™dÑÆi*C5ï„Ý>šv$T9Ô×ÝwôÎÑÐl0°øørH‘›ã¦üçœZ 1Û3üÃ{; 'Ï'“óÆÑªü=?”Âxššš¶nݺsçNLïs{÷<ÏÂÏV…4âòÊÎdd:Ì„ÞÇ#÷ÒLb<Ëu#Å9`k€í6ÛQgFù_÷ÑéùIBzKqdñÓ¦§ÇÆ£¿ªÌc]O ËÎd¦%¬©¦Ry{~B@ ŒçÖ­[x<ÞÊʪßm –ݦåFšðtü„Œ†%­¯G_‘ud CŽÜ'˜˜˜–mXö>ÿ=Ÿ"Ÿº¾úá9‡ASOOÒ["ÏD*H)ˆÐ²rS(Ï-$î)îÖ1 ÔD'¿¤Œ‘J6G¶Ck >TðüH|pÜÍØÔ‘+ ÀÞ­ºc๼‹NY¯"kF˜?ÿ§l&—. ¦MäòAMÈÍËø ÐኃãNj׎w³“]½¸Û“ì‚”‡W´¯ånYïJ ËØðÏü ×HH‰˜»c.ýmNNÂý'¹Û?°®—­-½^ê@òkŠŽê—OŸedŒ µ@&r)(cÿf>9>ÿ›íX9p> ðBh0Zúb)Ä,º­z‘Fº9þAXv7-wM HL66?š[d}Ú4T. ŸöùÈ ÂpŠaÚ焑⺻|·Ï;ØDnêö$;¤¦òÃØèJü²CÃ?k.ݹ(P‹jwàñ¿yËåÇä?¥<1oýíµ¨çˆ&X-[§£Ê¤REB¶lËÀ"Ê ?¿§Óa ,€@ †AÁñs½k1ÑãÆg3U5Åm÷ˆÍ§Ž‘íÉ¡èí7Õ±Yºj¹³³ÑÜfmò¡Ó]dûÇ}?2ãÀåånÜîwõþU-^­”¨”nO²]§˜²âÐ]ÇùÓ™››-zøç #%X™phøçŠ´¸zÊ?xËö?m2Ô„>Û%*"kc•® PÅ …*°œ_¡—Tzó¦OOˆÙ¸q#|’!œ4`90 $˹7r—Ÿ9sFKKk,¥š“O5]äG²1¦†/ÃSËâõ{šs¤ñƒàØóÚ¸&ÌÒÉéÏÅ*:ÜGÿ[B~(&×|©C¬5Ë"HiÌ5@­Óã3Qf¤Ê*|Å p±ˆååáÈä))L&çRÎ…w—DôtíF211IæäPp¸<1±®ð¥ž#’ÚàÌÚx¡‚K˜Xi‚¥64±î®Æ¬á¬¥ïQÉÅÏQiŠ¥þk·Ü‰­'&ZLäŽÆ¾ÌÈaçz&ÀÝ,³îÕ’ýo:8è2±+5Ëqîäæîþ1Çmذ¡‡¿½iÓ¦žï @þ,YŸnÆ”ä ÿU«Vùùù·EÄëñZ6­?¾tŒŸj1B¨'‡B-ü;‹b,ä‘,~ç•Útë333?~œ˜˜˜“û:77—PRR__žmùa2`g6l˜¦¦¦¶¶vú­rúØAqMݼåjGø·m%ÇÏ=€å’–†Z5&M¢µ%À1Í{â,‡}ÇOž;}ÚZ£ÈÊvž­ºþüòåËíÛ·''¥pÖõÍG;òØŽbšÌ–ïâŒq¬Šœê¢²ÔX‹ÃŒ ˆ‰AÓµÓ;F¨)¼H˜½nÇäIg)+EGºüö§W©Ÿ¾æ³{¼jW´ÁWE0üóŸÂŽ;5[4‚¤¤~IINEÅ—–-¬\\¢’’=õ넲@HSüÑýF*†m5ÂûhÀgXºoºèš€Å‹—5¨N2U`€ÑLé-‰Q§Ô 4¸¸-Œ—––þñAA‰ºïµvò¿|èës #‹’’Ò#'ån/-dz½gÏ{{ûQ£F _4nMJ0ñ㥗ïCìÍÄlÀÎŽN7ˆˆh9Iî³,•€™t*LPUý™Ӗf¦}[ÅÄ–ú=Š£ÍÚ•Í ‚:üóorääæÌôÙz#³¶¶}NÎÓüü7Tšû šÚhyyc,¶§Í=”Â0˜ó_§}4’’¾¾è{Q°â{Àùûy`BÂ|-=(À¹£V,P‚Y˜ùîÝ»ÞÞÞÌÌÌ®žkDËUìÖé´ý‚¾>ú‚ºïqqŠ Ô‰ÏÀ ýÄ?zh¹³íV^^^W®\9qâÄnæ7ºÍŒí ö_X;Fo@̤æ˜ÑïVý7cíŽñ“&OœfsöÈAVVÖž’!áŸÿ\þûï¿E¸EüãÛÚŸ #cŒ,ÏÏUp]QqTLŒŸ„„.*Mß?ÌÍM23ó†²@ƒFf‘ ff'0bDÛϯøù=5*îÉê˜×éÕTU™ÃÓ >šš§nncæòØ«¢g $iÆäâârçÎýû÷Oœ8±«€‰H£;l:~_] øù…`ck¿W›Ð„\\\óhdggŸ:u*ÈÓUSKûDmQ[³£Bvt’,\ó]{sú$ûÎCd‡ž?sjl—¨#¶ºµ¬3$üóÊõë×Ë Ë' NÄKuîNÑÐì‰h‚“'§#+Èë¼y»>2SÏÝ=zdjj {äïcÓ¦Mp&cJòvbýë6l`ï®íl¨Ëõ~E°³gŒšà½s±A1£¥9“±8ÿŠ7EÜñ·vð¸-))yõêUuuõîƒ(33££ bbè+sïûððð Õ»››[Cmmlè‘Ê´gþ/>³ò êIaÁÍ›´æ‚ €• º›8hù–Æ_‹G „C_Ûð»yÿÕ‹gco<_–’{àce§¤¹h³v‘ZºÀ!¾¤~«—ÇÓääš›\uuXÉam/Æ…e'd«NùÇo3‰dcc³Úpµ‚²—W§wcØUž€<Ú¼¼RzŸ>%Κ*'×M;­Ò+A#–'=Ý#éÞÁòrŒ ¤¥¸®*XVÉS$ѵ„Ôñ6–ÎÒlP@ ãHH k„2™—>¨lILFÝE¡Ïþpç[^˜Æœ4MQ`QÌ»˜-U[ôì—Ši£žƒªª¿äšðxü ‹y¢¢žO6;L µœyh§¼ o³2 ‡&ìí¹a°iî?³‚Ü„Ã÷-Ÿ‰ëh`„ŸõÖNaæÆ¾Gwl_yí~ØbûU¼«pPÚðÁÂ… ·mÛFÌ$ÖêÔbÙ±ÝZ ¨ûÜ[ÛlÖ¥Öú.œ¥Ëƒ‹{vÏêøçm“¡,€@ Æ‘þ#Ú<¹‰(”÷ ¨l¯¾Ô40bGûÇÔ&Ҟ˷ýS>çÕ5¹µ*7Ól” —¯ÜaQJ¶SGj÷´oÅ7ïÝÞ[¼æfÔÍ-ד¸¸P‹ý/¤¦†CH(pÿ>·…ŽSfϧj8×ß|§9:ë›»çF!W<øØ}ž½«"÷»Œ—†#&m%ŽëØgb–¶âÈk›=ÿ3` ¾³0qÂt›ùþS·Â{ÍÓÓSTTtÁ‚yîyœc9»Ù»Õ Bk.Î6¤Ý“d<ËFäkó)”Ò?Z5fÕ|O1Ì3Fhóãšß¾™røU¡—&²ýjxøÞRé»>cU8¿ûSɾ§Î¦°©†Ëã°PQß0%èrMòŽ#AG†®'³TTI¡_y]ìì¨!jªªïR“CüBì×ÙO87a÷­Ý¼å´Ð„½¤¶:ãVt¥ :¡N]E{öé™êÆUÜ:Ò‹qs,6Ö¡’È*=tóöÍ8Ü?Úr;w.::úÙ³g ¦òv¥ÌÅîl'¥…}âµéÈîr +ßYo[( „¡‰i&é«Ù8A)¼0­Z5µÄj+J•&JµÃóò‹[ UZ…á«©Î\õ¢Œ½±À#òiðÝÌZ—Ò«›Æf¦lye˜þœ¤z¹£gf«UTýe×Õ*4!Ò9z;Nš7ÉÍÚm˜†Ú}ó©·ôöx6)¦†ÄýoK\ä¹Þg¦Å6`ýغjƒâ²).E¸`Á*¾Ë6½'dö<ä·Éo×Á]&ˆ×E›ÄÍK7>TÑ~˜ï†¤p“{TÿQÁó‡ ñ%¨iâò`’%še»Ïç–’âîî~÷î]..®”ðE_ø¯ˆ1­¥}Ô¡¯@ee%¨«îìh~\w’I÷“MÞ9aóäVa¡,€@ ~¢¢‚úÒ@j×&*-[•ñg2 5ÔÕd“˜ù²#op'~ưs/´ë§/ÈNT¡îSA÷LHs9z}UeQVÚKiD"‘J÷öwøoÿðá¿òºÚ…&ää?ÿøΧÃNÊÚ:*¬-ÜÙ·£öÿ 7¹é°7†©iïf¼@‚½ÖœˆK^e <<|^ö¶êxlš µa#î4tßœ“iwcWÎXé+áëäg8ʰí×úb¡}âæö“)º¡: <®ßs<‚úPÆf/,dpÿ,še{nßþïß¿?~üñãÇÕÕÕ‘ó:ï€æuHøª†D<üšw`ø‚$š#!•ÚÔH*9ù@(ÜÀJÖ AïÈ…±ê®æß-'ðŸï‰“ò×ïž=‹øüy1 Í¥¶¡ Ç,œñvÿÖåã—kèip90ãÐ ÐQã>n¹Sûl†ª:†©:†ÝþlûyÈJÒÎ:)5O–´ ô´1·Ñªµ3p§Š©Jó×@Rzªœœ ° ± §×| ÝÒœ¸yöûÓ¡}-, 8¦8‚ëG¿›G¤ù÷Õ2àLqߎ›——gffæëë;qâDúyNmõ\îE‹ù¢C_/^~‘ö² ¾öãÒòfC~lã턇X–!øŸ‚FCY@ ýƒ™ØÛƒ§OÁ›7L€©©¦ëêvê;&ÌÔ¢7—Vq¤Ò^®/ÍâRœT`;öB5™. nÏXMz29›MÚfδ›ÛyŒÂ_¦ Ú…&d èaÐÔÓS¯^½p'àÎÁlžö3þklY›èŠÝBÒÜæhte€|d$ãäí’é²Ëe—Éh“Q£6ùmR« O!’î_MQ›¬ÀaÓç‚zzÈZég 6è `Зïß¿·´´ôðð˜;w.ý<_*Œ]¼»ââ¼r…V»µ÷xùò%ß'(¶Øl¬’攣­wr°JgÜ'ávú„²@ú Œ‘¥q‘L^íõJ6Ï솵tÁpx>AÂE ¦EA|yÓÃ&P#‰hÝûðÌÖeåq^õΞ ƨ©ý¦W‡h”Žæ"Ž3öÍ„7Ncœô4ô¶Ž÷';“ãhw›Nu&#ЃÏj^çRàÚöp›ç7Ï wÛY³Jy®;¢FàøÑÆõ8ÄBuyÖŒTÞ7žÒ}/¢Ê·à-˜/ס!DŸœ†@‡¿·G}öìÙäÉ“7oÞìèèØržÉúE²õuläÖ{¶÷HMMrè„ê>÷ŸŠÁÚZ˜#K§÷2|œ!„QpÎêêêÔĸÄÈ[Âú3•õK­çÇLþT†ŸJœ­Œ½ô iA›œ‹Ã[©Ö š˜ü‘™~8¹9Ï'Üèºq¶·Àjƒ…&-Ê`pñ áÙ¹kUÜ$ßÕ»MÖZZn¶üÏí?5/5?®Yô ÄB‡‰›oÉö&XSÖ3PøìLm~{x/˜¹Hp # 7CVŒ×êí¥]¾|ÙÕÕõøñã¾Gµ¢ŸçÏ €—jÈm΋׆òØÞ¤’(Š 5YYYÀpfl6P@ ã¬ÇÍÉ™½Þ‡ç§xþvÑðeÍ©ã†eS‹‘^Ü™1‘²œc¼{M› êÈ47uFú®‹V/Ò·ÔŸf9-•’ì:Yõ½Ì „<ÌL;·¸{©ÛñߎÑFëGŽ[1}Ë K!"[OB,t’¸¹7è8€–Ä–þ{Àü¥èL*\ x]0N³W«¯¯÷ôôŒŽŽŽŠŠÒÖÖnsžouߊï/ˆ¥Ÿgk_…L6±æâ§Ç¼ººº1LL}°Ù@Y@ }ç¼Ëó6cêbbbyyy¯£ÊºîŸ± J+}5U·ÝÏz¤X³›:ã|× -Ô÷© ì,~à¼Ýa;?³0.dƒÒB,ðóóï Þã½Ý{Öm¡+æ‡î’o;ó¸’$¯šrߎÚ~2Eï¾_›2J¸ ^ݦýË[eÙîœçÏŸ;::***¦¤¤pr¶ XD.&7|h`΢¿+Ο}Öi¨—¢0³k¦¦¦1´hF½ÕgP@ HßA4Rí¶S—––Ž<ùtx z‡ý³fÓz°n6SÍ1ò¸‡k‹ÄT ³Êσtd› 1¤bÑá3OŠd9‹N6 êÝ?¥(6,"*bÙìuóÃæ­¦¬ã/65´ßnbAHH(ðÐݾ۞<µ{¿¿Ì×/jã§îZãi 1¬'Gj¸¹ÃÉÝã¾ò»XQ>ê=ÿ^yyùêÕ«¯\¹²k×®9s:•w*‰#‰fÌólç+ÇšýÂ!Þ@cv^ýs¤™ï¥ÍÊé;t÷øÖÊ€…Ä›w(cDˆy‡nù-]·ç³Ÿ‡.mhÜýêàÚm‚9‘Û±ÃÑöù>ûjÛŠ=¹•úTi 8劵ÊFÍ5þn¼2¨Àe»Ö`üp» sçxp°=$Q…. hsЩàÖ "—J´¼ôT-è2kø$CC}‹¼•¹òF§•ƒ€¡£ ÀÀÀtøðgǯåUîƒwœðݱc¨Œ´¦´±îBõ¦&ÊÈ9ýKÜü=¡6ê¾€È4àDob3:tÈÜÜüÞ½{j?ÏFik‹¢¢²à‹&™¼²¤‹ó¼{÷®êPm–L<® Û‡‚„²@£ hŽ„LŠ«†?ÚÕ~Ÿösñoß¾e­­À¥«{éU“ñš¯4Šÿ¬y/k„ÕÕÏxÿ1Æ‚6¢GXX8ým’‰ÁÄÞ.õ û–®5HÊ ]ˆ…æö•›xqÝò‚åξw“B®F²ÖæÇòû•ÏõÒ8d0yæX##£ê7œM‹J{goo•P¥¼¼ç µ®_¿kccóäÉ“¡C‡vk‹ªK«# iuI×çyl؈L–a„&i¸ˆþkà üH8êa¹7oÞÉäï}š'ØÊ5&yP'AŸ\À N=Ùx~$žÈZ¹QAaƺִ}Qßu÷YTž7«NÅ,ÚN˜°Ó†ó\x{ÑÃÊÊš”zg˜…k·ÎäÒ9ç0Æt0Σ“ t„ˆlû¦šúXèí¼Ÿª`d[ÎÅ{<ó1éÀîÃ_¾**õÂðC£ ÒeWVVFο›ßj•Pû'Ô¦R©wi j@OOoÖ¬YgΜáààè¡-Šùf=µˆŒ;Ù•&xtú]üãû‹¹³ÝêœVBdAß( d°úÊÁgR³¦yððIKKÓÔ¤:™\€¹IÕ$3-©«üCÝX’° ¶sš}×Ia˜¤ì¡Ô:›Š+©¤)­ãÕÿ¶t8ÎÁ`nÞ öÙµoþÔIÅG‚<æØý§Šˆƒ½“Mþ­ƒˆƒÇe”­—­UGpL’…¯^½Š‰‰ñ÷÷GÚoQQQ qqqäUŒ‘ l«„Ú-4Q©Ïž•ÒÒÒüüü‚‚‚¯_¿¾~ý:†   ™™™ƒƒChh(//oomQØF,Ùƒ³‹¹Sœî‰HIÈÞã÷ǰ ŠwT WÊÊa„& õ•9L‰ÞE÷ÕϪï¾x(Œ& : Œ_Dß×ÕîY°+y–&¶ì8ƒfê«Çp.Õ›¼ómç^Ÿ‡VÇrÄ3ýéåãë½bˆ˜¸‡³c~^Þ®Už¿ÉYÑÅÁ­ÒLêå <+¼ˆ €Àh0Y„ˆòåׂ àøö¼.…Õ ºÔÔ‚Zäµ TQAÓ0ÂÃÕ¯Z XX;'`ã\€Wˆjõ U,¬8ÿÄŸîÕÙjçqíJ, (1wm³I0Kž@²d%²rYqµVÈG-"¡,€@ ÁÐÈ[MQF]?U÷ÙÙkqãÚŒéþ?”q,c‚69Ÿá¯ ”DÇŸ¡ÍA·N[뛄ߗsqÉWê†𘿡”ÜgÚð Í›aS\X²Ï¯?yû¿#,-Ç iI˜z|)0°%¡öOððßcG‹èç‰öûY:í÷O?¢é%~×®Î_^ßç_„²@úNû1õ©Ãd½®Ç)ªãšTô}?)€¥Ñž8â»ïú'P>iOûZ([RœÕ?QØK¸?? e0ëb¨ùI÷üùóh’›ïñI³¹¨ŽùY“‹ä5ÐÝŠ@­zMmáµ¢¿Å÷4ʆÖÿk¨©1.-¾;nÖc‹±1Q7ÙÙÙ»Ís¸tãáC¨ã…߆ŞÜèÈzcCÞçlËX,K±ß"žÞLÑï:qsOíí­jƒÊJÔø¡¢‚jÃÖ^gUIÕÍ7SΤÐ= ¡,€@ ßgU¿›âo.Ÿª««cmÊ¢Æ7 P5±.B5 ðÈ«|)¹¼ïØñ•ɲbL"`ßéžÌÿ³ÉÎRR£uÔnݸ6Þv–ž‘IÜý»¨C~—yn\|ë5?šc–dÁO#ÌSTyz¶§'‰›{Ö„6'Ô ëÕyžp9¡'¨'g/×ÏÅÂ@ ?;ëT} !y•‹/ÒãûÐA[Þ’˺Yé¢_YùŠ«WN·ápLŒ:Ðî+ÿ*SÍZ€ÆÀL^2êÂ99 6Bkĺ¾y;dSTÁ)xË‘>‘N]?å´Á©ÿ‡‚²@Ïcõ2½}û÷ÿ´•H”× ñM}VvIŸ¿^¾F3 y‹no—(ïï„ILcÔPñ3ûŽ-;Ê`Ô·oßP—~Z.ƒ^QYšr•2d«Þo1Ž1y„¼) ¦@Y@ ¿#š¢JzÅU>ü±µ•ºU¤ ®¢ýö¿ÔG¯ººY#™·ÜÜbUjeªgR–†~ÚK^y©ljÌôÏßl·*‚“ƒÝ<Üš½8¡,€@ ß_ßïM8xw»º"ëÍ‹¾~ÁÕBD–¬òv!ð¶1½ øÜcš:˜Nø¿ØZ@Ïsø}¼QÛ.øL*”4=|<¿²²W£PªeÔì3áýÇo4j5mIÚ=Ê=×%® 9 ”2 ¨ ó©ð‹¾.(ˆýø‘¾%îÂçšÜÈ~fvÀ\Ï_QýF<Ht›YçïA_(*¢ó®]"¯Yç7î_cQ1ÑPÛðÇ=?Rîë˜FAC¿n,È÷Ëd‹œ8u"???”òû‚Å` ¤E¦*iøDGSÈyQJv.ÂNe±P@:Í€#‹qƒiĦ+µqaÙÿP¹ ÊÀÉ ÈÊ}uvfsµ-rÛœÊ9&ú&/^¼h³{Ôþc˜þ‘µd¯M‡±‡Z¶ï¿öeü4…ñƪ©iih¢¦´4RFÙ7ÿoa¥aË—/gÔááE(ô$„0Lì§,ìªU´ ~à<@:EbR3xsz5Wþï ]žC¢)Ñó†'÷$î±fcÏEœ333kùhÜr'jGÇð_ïú/ÞRˆHJBçsÒbDV®½˜4¬NŽ*ל— ÊùaÇ3›ÊŠ&/YÒüÞÇõ0ø) ^)mXVˆ2Xxm!ëXŽ“l·íÞêòsZ¸°lD>½Ûi¥ â8°}ïA¡cªŠêk«7 ;>ê_×àGŒH„/Õ?ÅX~`9Îbee=ê[ŒHh-€@ ÈŸ¡ È«¹Ü\<ÊW®Å{¿(„eÒ:Fäú[ ©ãj6ܼ~ýzô}ŸbDBY@ ?Š®×dŒíæ<:mÚ´âââºD¾ÇˆLÏ/‰|ó‘%//¦è¬¬D·Ë0Ìše@~/èþM'øŠ³O‘å”_VIàÔÐиsçÎ?m- ÅˆÜqo¶[Ø©ÐÇ£c—/£¡ ØØõ;з@ ¿&hñ1ŒcË^çŽÎåÄ2gÞ|»é6¾¾¾¬¬¬ÿbÑèë§ä ?}îEl€››pb"êih`ÀØàÙÐZ@ ßT +ÌÇ\N Y£4Çy]x|Š’ªZllì?X8T*Xô¹æAcÅ83³©ô‘ O¨e@~¾Æ–µŸ‹ˆ¼E6rf€×ë7ì¨Ö³7Õf®“KãÜïÿ.¾|÷íþµÆÊÒ='N ªª ;h"@ äw¡³8†¨P Å‡^\9}*âzbüS>ŸÕ;N¥R¿'\DôÁ´i¨ ¡ùš(ÕÏËC ;ÕObb¢õ„‰£]=L›°âÐ]ÇùÓ™°í†ÖüÙÌå³ ð÷þV±qûæ}ûöÚ·gÆ„qÍÊ€ž/àç<Î=§®&›ÄÌ—yƒ;ñ3†{¡åX?}Áž~ùøA@@TX[¾ªŠŒ{Ñ;;2ybÍò¤ûWS”Ç&+pØ daBY@ ?œš&nî=“'oœoï°Á×m¦ãIQM¿0?mÀÍÝŸ|TjS#©ä®ÀˆO;&~ÊÐ;ra¬º«9+S÷ß\º}m¨ ×Áé»Àm|~='ùQlpÜÈ¥ë†iisQ¿ŽHå}ã)=Ðe e@þpØÙAAj à¯ì\_¹pù®Ù»LôLÆŒ÷]`&¢§ÓçXÅm°ÓP‚ ‡å’U™ÁþèB5¹G²€ 0ž w² ®®ÎÍÍíó‹xÛs×n<|6ZçSÒ•O_óÙ=^Ñw¸´ùÈ“% oÉ2~ª”ùÑ‘11 ºšžw˜s(çÖÄ­n±ng­VuZì8ÕyUÐz^^Þ¾´‘x>AÂñ¹¡#Ä >eœ¯׈½i7IÕàé@ìÝFrròܹsµ´´ ç®|’ùmµ¹.'¯bbK5iÞÁfm€ÆJ'8@ N¬´|¨á÷™C49‚¶Œô̵Z»ÿ’Œ°Ììé³½¶{IJJvq˜¨ýÇÆªEV"7öÆ05í]‚¬¯_j=/8Fèzß2{Û‘„v¦‚SÁWšWcÀ^€Áÿ/3Ñ´²„²@ >ôø!!¨!šƒ˜–/`è¼áá«§§û¥ïÛ±Oó’¦Õ8+¯õ^·²ã–;QÛm$°‹†/›ÓÕO;,m»…Uøøôêô©TêÅ‹½½½ SSSEDDvPÁðýឣ´gh m³sÄV7( éN †F9¬®üüÀ‚ƒÃ¨®R=¶ôØ›þ;|ø°õ}kaYaG'GB’²œ¹x›@Ë€–—áklYgñNSS“—åÞë™!\l¡¡¡#Gޤo¿øòØ[fêÛJptPKÊü- : “¹ˆX¬¼Ÿü®¥»Ü7ºß½q7òxdL†ÁÃÑ)SÝ·Í!-š€ì\$rT ›jlD#"¤§£ÓˆD ¢‚f2Äõ®I-++;yòdPP–L˜_°ÐhÛ$“‘²ôHJÈþçÞ¤™ñ rBY@ ¼^:DzvêlSÓbñâñ[áþA[ŽxŒ³¶šÀ' „‘EhNÓ%$Ó3&ð €= ùëÌŒA;L#ÕJIêW• ”ùwAõ—QCQC?g¥î Q‚öðð—~‰sŽæíÈî\GÈ6†ƒ ª& µÄô¸et¿›öXEõ1ìpû Ÿ ” „&?ûýuÕëë£óÚxŠŠ¢‘ùL ,€@ „!|-i7d@o‘À¬Î¿ÉÌ ìíÁÓ§àÍPY 89Q;¢p¸Á>( aÅ1D›çn[bD£Ë/?Fƒ…w@ ( @Y@ Ê@ P@þo·Žù[ObgQZh €Zhp ÔP÷ endstream endobj 481 0 obj <> stream xÚÝYË®$5 ÝóõÉû!µz`°ÝbÑs»›BhøÿNb'NUªlÐ誧ª;vü<^>/j‘ðO-A/Á'ÓòþÇòõÛòá£Z”É9½¼Ý–ƒFÙü ß.¿¥TNJyc¿út°)Ám¥´ þ4üÁáÏŸÚÉüÖÛ³”Μ±~ðù69ú$óFÚPž=…oΕxÞã`¯¼4:oÔ’S•zÙ‘ÔVšüÖã¯øÿFóôëÛË·oUzQR$™TÖ†6 ˜ÚB{ú0ïeÇž/õ«¬ãºÆ®0ñé+3L¸`e‚ˆÎ5æ:c’„1±3ÉÒ\€`Ö¤*WÁá~Ë÷[-@kŒÀì$®>ôƒ¼Ï£ík@Ù$öSÉT*j&œö2#ê…ê˼ü'g3]Æ|6PйíOk‘ÔKŠwªšòÖ<§7«„—æÁ¡Góqnvˆ(,³|ó`Ç,¾Ü:ðOêZ}$Û·›[€ÞøFD_3Ê.V¤ŒÕÛÉžŸc褈ª›Šó3 ñ Æ9ˆSÙý¼ÞÕ¯ÉÝj,1Ê«7;ê÷ä÷äm•?•ûJ .¸ ƒ… §x$ªöˆÞ„Ñ¥P¼’ˆøkØeâ*òÊ4øè}÷Ð^{-±tªM‘Ûæ$ϸ¯]½2TÑF<©#ð3*&5Y:J{cN%ƒòóSÿz”Ï?.ô0\•†Áßñ½ Bx‚÷þ2u AÑ{óJ¼ò—Ëpºã¹ÃE'¡¬y%ðd&6[LÎEÆ”ÜEâW«¢‘å¨N‰fm! ›–ƒ2ÂÁ/¹üÊ› «L@f[–…ä™Äb÷ÆÔld r‰¾ä·‘¿mëZ¢"Ÿ‘ÕS"c‰u–*Ìã‘#–¡å|I:FZáLŽ^QŠ :׉5hš•° 5cº±8îÈæqŽ3¢ kv+Å{¬õXV‹í±(@é3Ä߂ʫÑõz8IG†¢5Ôß¾ŠúÏc÷`Í ‹Ï‹Vøàk•‘’e·Ä( j…@!ƒˆ©Œ5>|ÿ‡JË7.?‘î²7d?諃КªzŒ@¿]¼?àïÓjbЩ[%L Ô{Ë+õÝ~Ã[Èò´çåëพc_™+w]IÍ‘¸ºs×e7‘ 7`¤ªOz|´çbt±×ï·Þ¸í^Mdó œ TÈÚŽ°‚âöÌëö‘wýb¢oHy½žÐÞ ,Õ ã•#šL%Äç§’kÐzY†õÈ'Lb$JpîE°©ð æöü…`<%½Ð2mK+~éR¨òɉ®uïa°µ˜Ý¶85ÅÉ!ÒMá[é½`¥q‚2GoA¤ih^“ŸA¤yÍóÙ6ù'QPœeÝCAë飠30o ‰ú $jÍA¢É¼¢Ø­)?‘µ5 52[ŒnÛÛñ"[³¹•5ÜÀ·/w¼¹hzò«Y|=µãé:¾„ÒDwýéýk²\ ß2É ™mÝÂÅ4cKª±˜Ó¬¤* ª4ÝÚ÷t+‘1×\dLÍE iÎ?‹¹–“5ÌÕ=¹: MXX3Ê)««ÝKï…rA¸¨´hÙµš';%K¬ †ÑThÛNauxlF >0®ùÍ1<3¬ÄÖI^ÉA¤v4£»`»M#ÜÒ{¶î6r|_Ywáôq÷Ùö@H’ím(îßœdÝ®L«Ìeg¤Ñy­{ýIy­¥p¹É÷1@ÝfYc >/Filter/FlateDecode/Length 77264>> stream xÚì|EûÇgv¯_zï½'@H ôR¥ (EA@Š‚•W¥Äòª€/" (Ê_:‘*½†–„Bzï=¹\¿ÛýϤ„@r—rÏ—ý,›¹òì>;û»ßÌlÁ,Ë¢¹dÉÔDDE¡#Œ.´1G‡´Œq­>à ˜}‹mª ‘è°á­2ú}…i,‘¡@  `hÀЀ¡Àè MBBS†7ÚèvØpH;D‡ ‡´CôF M¥¤4åömtH;l8¤¢Ã†CÚ!z#†Ö 9EE5±"áI\#Œn´i‡´CÚaÃ!í]¡9ä¿&¹¯¯njª›5at£ÝpH;¤¢Ã†CÚ!ºþBSAA¨ 1ÚèvØpH;D‡ ‡´CôF MkÓ„mtH;l8¤¢Ã†CÚ!z#††Ë¶hñ€¡ 04€¡C† `hÀЀ¡C04`hÀÐ`¼p¢¢ôùÐÐ% ü†Ò„ÑvÃ!íÆý~Ä&ÜpˆÞZ£?®á¡9#F4èó‘‘‘K–,iÂÔ7pý[bèÚèC‡jš*úÁƒœaôMúÀš„¦iÚ8wºá£ß‹¸¡)7DDD¦µF®1D†œhñ€¡ 04€¡C† `hÀЀ¡C04`hÀÐ`Ć&!¡)Ãmô¦ÝðÄĦ4²wîPPß ¶CtˆÞ¸¡©””¦Ü~£Þ´ž–F5it õ j;D‘‘èZW碢šÀX‘ð$®FoÚ '*sð ‡,¹á›P©©øÀš,¹£m}3æÚi‘úfTµ]WíFŒh?åë«›È[ô¦Ýpoo†LDh†Õ>ºëã£%B3l˜êÔvˆ""Ñ14„š£Þ´À4aôÀ@êÔvˆ""Ñ74‡X›&Ä8£¿³tÝUj²°|Éœ\² V–ðn»ÿŠâ—.Ÿe©·îRÒ~j´{{³Í$í„›W£§ŽO¨Rš›[M4ðë¨í°á­ zâíë³öÇ\(UºÚ;.;h¦§èi… 2úN{-q§÷†Ge±xög–<¨íz ÍA€ÁY³t΄†}ºö~ —oË®œ︸«\ˆ%\P¯ÿ´³ŒªçŸ1KgMžím–žz#dÃÎO:Ì6…Ì-ŸE×dßLŸØÑ’sîêñÁ›ŽÎüjäÓ }§ ­Nx¤:˜â¢_ ¿ÍŽÈCE“Çz@ Æœp‘îüA¬[Æ|‘½CV€ÖÀÎI];Û)ŒyJdj]G! ï´#VûÞÇÞœ:&€ ?¸úzhšÕåqû´Ž5öH…A µcV÷ößÿþž†ápLW¾û ÐZø0rýŠJ_h½í£ñuzMû•ûâ‚Æø›Œ…쀡1*Nï½Ô{ ‰0Z¤×šóóßxuv€EJâ®kvør¢+˜ U°|Éìo5ªWÎŒüîàËŸäâ§úK»²*yÜ5«„ž=`Íé÷U[3+Qº²§¤Â0ÈjÓ(ç‚mD4§]px7ªò÷5¤h=úÎá èÒO-ͺ¦ÒÖ]è)íY7¯eåß¿¿ ¿·j·T³èóõƒÓ¤"==4Íˆìø“j»®=ÐAc "Zyùû;eoù™§&Ý:«¤–‹àˆZ< YÆ;—4Ÿwõ²¡Ô_:MñCyô !WúN;¯çx¶ç½7Œýlmè3ôz•ÀÐú~ãÐ,Y8¹î#L3ÿ{»¶üû¨¼¡“úA~ –v.ÏöÒ«a“wíþ°Biiiýá«ãÛÁe@+pêB÷þÚ“Ý¿<š­¤ÝÜ~Ÿ?‚‡zb! ï´`hZ7CÞñÄ›$¬Z<’cà´‡tèz­CWHЪÀÔøýÉôìB@ßiˆ]_Î…$éhêíoÅžû#ýñrRH^j1›!•âøx|ù2™ÓJ)¤ ¶ƒÈ€È€¡1.œzZjf–]ÊOà½[qÎ$½ÇTè@d@d@dÀÐ/TãwÏ®`CøKvFO:7¾)”’ÃûJñ•„Ê„„Š„BY¡¿… E`°eðë~¯{šx’ÖŒÀ¦¾_'³Ôž=ÌèÑ÷å†#—à={PçÎ÷…†@´éž<="CDéˆÞá#køsÒÏDþH{«VwÂlÂ:Ùu"Â×øBs—Î]ÎçÍ(?ÇE=&Ü 2 2 2­ ¼o YÐ+Y[b“dm²¿m?žO?pù—ÒÕ îÓÂøýZ¤ÉTßHTG'ª.&«/IÙªn?n'7Nˆ7Äö¢PCŸØb™|É2ù²ÌÖC#6çH«ÄÅåþ]*ü:5J~J´Y9š;Ùšøõ•$õ%5«ðçv àu%›àÃí(ÀâN;7ÀÒ©ó¿4kXÓnIxjvy8ÔÌg2rä=}Yˆ÷9€P€È€È€ÈèEaKd8#F4èó‘‘‘K–,iªtDE¡>}ª›$ô©Sf$ôÎ;Ÿ]é{kÏU|ê,’Tü*y¨œç£›JK¯¿@t›7‹Ù±ŠØXel‚2Á–¶ à„ _3ûȉã„Ñý'ˆ$ÞJUªñtæp)rsAIèL:€”Y’I3„‚ÉÄqÌqC±åLy²&9E}þ7ùÏYÚ,/Ú+”J&wÚlŸ?N©ÜQUUõ̯ÑÍ‹‹O.‘³-ÏìÉ?}Dw^¼ÃûwDÛáv<Ä{®o“H ‡ú¬öIü4Q+„[GÆ+2)8¹gЕ8&Î;ÈÛŸ+˜°ÐÝ¢Vd&ÓØDÆ"7L¢yã+¯ôL:úªøêØÝþÈ¿#îØµ}‘)Rà»Æ÷Î'w@dÀдlv)µ,ïÀÏ–¡²³ÌÙ Ì3lÖ wZÌYü{.ßÛGljÄùTk”gUèÿ\Ý’?Ü´óù;m_÷Gt#EÿÁüAYV»®LóQ×®žšûŠƒJTù7ów4AEÔ`CëÒ¿;—]ž›ý® ºS¦Tr8¾Oéj·FÖ£ñè¡x(QœUÌ*ìA–Ý‘ûS÷š¥*}vº×Z¯T›T¹³R ¡È”W+´|¾eÔ††¦9ÃÔ¯ùÙoY²Å2mŒÏáü«Õô°ÈŒÂ£† !çйÕìjäAÚNu‹LÚ¬4ïuÞJ%ˆ š©ø[ò¤Í4Èæc«å¨ü0sø s¥ÕísÎçæ¨®›yßJ“®’ëÎ&»™T³ ¡!&F›ái!–«SN¼‘&1çS3<Ÿ1$ÇGüx@oÜû<{~=³Þ ;[ãžÜ&õ”æŽÏõ^ãôI’ÚL •0*‘!+dÚºÂÏdþSê¹·ÒÊyÜבW·Ã#"Óõï…{]@~dtBNÄÖÔ%2ãr}Öø$~’"†¦¹s¨DUªb?òªë¦2$;À¸À\èMõþ’óeí5ØuÓÆ[¼ ’{!Ÿ¿8|r=ï\ qûà>=pK쥟™Ÿ]°Ë<æ‰ÃÞ+øÅ|¯µ^)¤0<² È^õCzuŠÁá-h_ß;ߙިwwÜý2ºü3û³+rG?QdÊ;–óKøÞ뼓ßO‘Ѥ Q¸.Ñœ)WÏqpžbèÄœbN}ªù”È i0¢F=Qh*öXWÜ=¡ü†¨r·µ7J«UÔÔdVU%ÕÔd‘eG?v\›zó å¤ðB´à9m;‡ÈM$éƒ|¾e¾ÝÎn¯AO¸háB¥ÒýWw×W 2†iR+fYYVÉÉdN+ }º‚mââ˜'ôu‘ª½¶Ï+2ÝP·Hé½—±Ëv°;ž(2ƒ ˆÈxüê"†¦™’«`~ËSÎqZÆÓ Í¿ÞQÖëY¼2žS”ÔjDFßX%%¹Ÿ8!..¦T*2÷8~œ8C®í§ Yçüˆ§É¿”N YoÙ Š °/%"³„]r =Ad2§dòÊyNÈèÁC ˆDîÍVLpä{ŸàKQéÚ?ÊPÙhjt(}æ·Y¶“ÅMÏ ÊBædù¾ÐÜÿÓ`nF&ËurêOÓÂzkäÅÅÑäp47÷3Ì:ø´EÞ´%ö…ÌÉrmßÌò²ãZÛÚº¿øåH&Èä5üZÜg'»ó sf5)Ü•å°isÓü¿ñW8*Ê;•Cõ@dôçfLòò²úöÕï‰ G.wºx‘4V*ü $2vÔñsòˆ}!s²\Û7²®„üiá'mˆÈ¼Š_íz‘9‹ÎNÄ™Ô9©ß(@d ‡¦9¡aцEGsN„ù£ÖEì æÄWš¯|°ÏRzi}„æ¹!*Ó$B£Õ*ª«“ììºÝw3º¦ -´³ëZ]hȱ'§±¶­í§¹ëfJþcß¿ÖÜ4Gä8ÏÇÿÊüú+û« =H¯ÆT“>'Ýe‡‹8Î*@dôÓ5¢TZ¦¤äwízßÍè¶T(ÌïÒÅ*9ÙcO÷= ±2wÝŒsÒ|ÛZsÓ("3ûýLˆLÚì4×® 2ÐCÓŒø³@) ð(ûG¯¸)` È/%…¨…ôB{lÿ¼_[+7?y!„¯ÌL3¤ÐäòBÀž¦=O…xR.—‰D†[™Ú~š¯+JˆzÿÇÚο½ŸRy½±¾¼ n³/ÙËî]Ê,%-ªö¸ý½ 8Ë3§ez­÷Jþ(Yi –@dqa¡ÌÎN#xTdˆ§!å⢢íL­§ ýÁ…¤âúÛ9î;ËåWMdP_ì»ÝÉFNÀÚ£"“15Ã{½wÒGI 2`hšžMWSeÚ½„ikæs„4›FP#zQ½ò¬ZÌbƒ‰œÅÒŸ\¶ªÑ6ƒR ^)âT!…#A´DÈ)bi™¢j‡î%¬µÖ2´’áj¹-‡Ë ¾š'–n5Q˜ØTÙXÔXXJ,mªmÈܵØÕºZ/gVºT¡—KÔ4[Ìh‚ûËH@¬LŽøùí"ºø~ÍéžÌW\]8¬ÐkÎÓÀƒå™ÆkÂÊy¬êÒ•è»—¢£¹yÁ1bÌ`¹I¢T¡Õì«Äæ5æb…!ú0|ïΉÈTªw=ˆ ±2QÇ­ìÖKèœû"S0¬@çi>L‘CӔܬÈù1îÆÛn‚‡Ÿ¤RÄmd6š#óŜŖÈò…¿¼¶Xe­Êó‘,;ðxo°Í›µÿ¾¹Š©JS§‘)O“—¯É/Ð(Y¥ÇÉŠ¶2§Ì-( Êž¯vç«ÕVæAbJÌA% s¢¡VSXƒùfh¥òP[UΔg²™•Le%[Y¤-R"¥=eO&GÚÑv÷ =œh§†¨-BÿŒ4YÙ^×È×ÈJ­ãîø7þÞôFÞ‹¨E‡ØC_1_MÄk»îKz•rž?y¦½“ÆRpMÐ EFá ¨p•=Mdfï ¿ŠUj ‰,9™ŠµÅD(ªÙj #Ñ"m#h±—ÀªVNørÏõ᱈•12®LÊp¸ ž¹‚)–°ò=&ØÄ›šP&v”-¶%s"2dnIY6JžkGšâçä¥Õ¨‡oò¸-L±k¯‘ù vþн+2èžÈó„^½RßN‘iC“€‚‚š,|ÓFOKã{{¿H__zyõªÄ£[^íYsþ~á%öÒvíöáÔð>TŸg~ƒXÜQ*½Z‡Ðw¨p*K§äÇ…V6d„›ALª*õ¦êfŠ*…ø)+õáúøp;…ðBˆ+ó¸(hµŠüü£N¿‡Ï¡Ñµ 52VI9Ywø¿’}¹lrV^ÄÜÕ/¦ðªúêvùv¢_n´›íÀ äšcÝ•N[æfýÝֺ̇“‚}0ûªú‹ŠãKoÚÛ¾hÊÄ$¢¦æÊS¬=g8Þ·!¿ (áü qs_ÕÝmÏåÿ\r&æ4¼¾¥¤p}}ÕFx¬È4O‘ÉëQê™h‘óz~vXEÃO£Q°Š M†®½¤IKU§–2å¶´5iÛØÓöÎç0~i/™a3SÊT€´RéqìXVÿþŒ:qär÷è™°BÝÍ`tr„´5l q6Ä •0%ÅLñ-Í­“ÌI"2ä%Òjò¤=ÉœLŽ”ãýæ—ÛN­¾ñ\nÆ®ƒÚ¡MÊ´ékðí9\Ÿ^DæeôrÙÄnºƒîŒÅc‰ÈäLÈñùÁÇõO×ìײAdš“’Ò”G{ÓFÏÎ~­‘(Õ“þ<9Ö­cOOÇ1º%Rnc¶¥±iïÓï»b×ú|‰PØö‰ZS+4‰csÃ÷¹¦,L!‡çã—$Ô‡ß'[½Z›Ê %òÒžÛþqgãøÚ,‹³È2¬³6;çF xž›C&âfŠŠ~ª—È Èlb7¥¢ÔI¶“ˆ§ñYçSæ "óâ¡9MØKhÚèÏÛ¼ëVúÞÛǧãÑ‹˜¥7–F1QÒ:áç¾çãÓÆ¶ùE|ûƒöµƒMõáŽêÎé‘+Ê+êð1Ùš;O,÷÷Ÿ]ÛCciÙFi×hnа¨¯™ˆDƪcO«Nÿ"û¥3¯s/^/?Î3:B-øÝ-8óTï¹óŸ÷6Juw?‚rXH-ÜÂnYÁ¬˜ã5‡?ŽïòµX;ʃ¶¡_ôÀSç±"Ó¬D†RS®¿¹æMÌcøõ}œP©¶ôˆüÈ Å 7Ž[~·Lß2¡žñ”ܧuÌ<ÚGÂçW»¹5zÚ­˜ê¼dªf«¯ª¯UÝ$ßÔ•Ûµ¯Ÿ+ýìîݮւ›eÒ­ªÎ<¤g‘ùLDæ;ö»Ù^³ù¯ð]AdšSïî=}y«&ÄÍí9´&.¯ô?G®DMh#H5Òo*¦ð˜òOéOMЋ<þZ.ÒY±,rÛâöð`ÓSÅ1çäçv×ìV²ÊA¢AÓͧ?ÞNªÓФ>¹‰cÙ†¸™êê½­öA»‹¹ÄÇ©‚©8«:û£ìGÒŠ&֕וFO=¤‡ÚrÓ³•ûŠÕ£í¸ÏZ&»ñ\ï'+3O?Œÿ—ùïœNs¬ª»dÍö8êy/réi?ç±"ÓŒD!Òd’»È«ÚÕëvÛñªøCòC·Õ·ûú|mùµíPÏè,›Ü„i×hîµṴ̀11d*eJO©N}#ûÆ[÷áõéÎë^ÇPaœ=÷ÛLåé MoËç»X*½þ‚"ÃêDÆZÒDæ…CÃeÛõ¢@"›´ýäªá]ƒì-³¥ÙÎNp¦»më³yßî}ÅöÄ›AÌöÊ‘ÒïL(v²Ùä0~X¯‹~ÜÓèÕÍ<5.e9B0b¸`øMõÍýÊýÿ'ÿ¿ÁüÁýùý…ø ¦zÓ™÷UºÂGHµ5¥õºb$½Cð'ä´ŠY¥2swXþ¬|çÍΚu0ÈòÖg¬“–>û¹l7U'¶I>‘²Ò¡Â¡óÌæ ° E§×†²yEðÊÁ˜šG•Gw(v…ÀðD…Ñý4bô– ï› ¥§rPz4Ä ;­fW+G·‘yaÀÐ<¥F;éÏ“Ó:øñw»RzeòùÉ}à›·€KU7b”ú 6+³Ùg‰,gZ® H[_ªÉÝŽÛŽL™ÚÌŠïT½3H0hØãbjBã™.ür”ÿá lxz?îCq¨ ¶ÙPóî¼ “>˜Túm©ÍB84€–%2ˆE®¿¹Œ,P›×50‘¦©©FãEC» ºáVô»J!ª=§=™r´9)ÿš'™××8›Ú;J<ê¸x¢#÷§\Õ§ž|­‘A:‘ù D ^™÷×wK“z¶;UxjÆÅ:oèçØïTj\¡©{°)›ÍÞÎl—#ùjJ°áõEh+ιíñ¶øíb¦x§|ç¼êy##ð<ÒELZN/ÛrÌU~ì)àê_r]Ë2ëK«‹‡--zgÖ;¨ùà˜ê˜=ú‚Qv\‰†=V¦iŽ"€¡©?GSr¼t{Û«}wfo[»p_Ÿ}6¥v°)ûìÇ…&†YªY*B¢HNdwª;6Ê1UÒ–úÐäÃwÅïT\TÞ7W›ûð«“yræB¥äÆ”kº§ïd†|¹ iJ’:ï™×`œ‘ÄÚµCî^ÿx "£_‘!8os.ëU¦pR<þÒ-öÖbíâ¶`1gñ jÇÈzîm(›¹¢¹Š>ŒQÇ|,ùø¦êÄïr0šáÌ;V®I“3ÍUd04Ï"©¤röÞs[Ç÷Ý•¿yEŠƒý[èá1BOlªA5´ö1ûæÒsÇQ㈧1òÝáËñý¯Ù» ^‰”Dîfw+ѽtñ(4Ë•¿·X­0ÜðiþÖž[½<¼æ~4÷æ„›Œ¤®¸8é(u k^ëÃ>½‘ѯÈvÿ sa®èÌ#å*¤ÚÊlÝÆl›BMy‹~«!‡jéxÐÿÿg¢pâÚªëåë‰ßÉŠ‹_wänÊSÕhÙf(2šgP)WMØvâË—:¯Üü{Úï÷ÿÛËÔKž8ØDLK4K¬°Õz‰ö‚ÝqÏ õmZ†åÓu— 2ú‚ã^GI°¤ÆÿA—Ñ™ÃÌáÕÚÕ£¨QÓ¨iB$„=rOLz¿}‚=±†]#A’Úòv\Ã)5Ü^ê)2šºøäÈ.M9{ÄnIÛ²¯Ï>¾~®{l°©Õ|¯ý>•M]ÄYä‹}aGÔA0^B-)Ce_1_å"ÝY5cìxR-‘ƒŽ7öéðˆá-'fo|ò“r5o¿Ë 9u— 2ú„D™"‹«ùcóï—(‘òGí7ØDgÂq8ì‹'âŽÜÿƒÿãŠ\¿d¿¼n×þXNwæªÐ$˘f%2š§ò[lòÉÔ¼—:æþ¸fßýúk6=2Ø”Ãæ|¡ù »½O¿oŠLaG<1¿…߈®dVžeÏÒÍtáŸ,×$J Ú9ûyçÏû´ïóJé+' •³z%%U×]€È諉Ï`×ß\óÇåkÅ÷жäkí×",Z@/0æ3fê÷ëHÄ#ßÄone·îfwkÆ‚ƒ§:ñ~ÎSUkØæ#2š's1»(òDì}k¾O\N„ÆE䢧@ 6ÝaïüOû¿qô¸1Ô vÊóÐwþ˜úø{êWöW1Gó¦3osžªÒ°r³¼ÿòNÆ\S™TùÈKšyï1bnÝ%ˆŒ¾ZMGm5¦šŠNµ!n¦7îý:õ:nBV?üß"¼¨•,g—W¢Ê@1Õ͂ޜ¯2ðiºuˆ †ænóE*¥oߦ¯^¥°L–[%}}û©™ý´«’¿ÜÓ{žNÐÓñïÁ¦+ì•Úsè9ÐýûbØ!»…ÔBR-c–ÙŠ+ûZq~ÊUj hi0«F­ r¹s¤¼î4‘AˆW³;b—3)§öÏ6æ'íO³èY½©Þ°_ž 1ϳÂpØ7ì7é(}¨­®Ar°Ä ý¬ŠŒTJÅÇSW®P·o#™ ö‘±"1Ü­[qVV*©ÌLôË–¯¾Ù06‚Þµx[Ïmæz¼ÝÃMG™£»´»Рङ†ÀGüxF'Üékæk_›,1w« ,7?MþÉÉÒé§ 3ç9›6qV®$sê¤ÑÀ‘1°È\w-T¬²Õg™³ÛµÛß§ß÷Ã~°_^Œhà$qJÌpr\“3iV‡ß™dÛ¶]'?KÉS]áÞe†?ÖîGlÂÃDæùx‰EbfášàXfãYiìWÖW_Xg(jT¦](œÐ„¡…Ï:^— ·ÖTM+ðØ“6¡#ç¥pkÆŠ^‡ÈX&iiµm©î ¡ŸÒ»f—ŒÝiÛÇ\§o6ÉvL†ºbÛî[K¢zF¹êžÎ”ûbëžëââÒTio`µi`èØØØú¼ù'çoÞN™w]ûßh™zœß“ÏR2¿pT;~œ½i\%÷ÉÍ /.ÞXGDkÍ ¾\w•“'B$‡DzlûíR_ò§R$ªûƒõÁÎn†áÓ~/â†&ÛãÍAdÒÓW>ï§lJ ÌËÊÒE׈Ȅ­ ‹¹!]yìå;™«étÈ”r/=óK¼¼Þ#¡ÇŽ[ÿ¸¬’-¿Üä[“Kî?D%}»»ÇNW‹PÎ lx\œkXXŽ«««qŠÌ•zœfûãÜïs¿¿è³fmªò¯¿áÑ "êÐ ,Ï´´´Ø.…,‹Å¨—ìÕ5’×Ljºs-…7$66åÅñ-Kd„k ‘1Æ!'¢&ÄÐðdªÀͧ‡œÞë¾wºjº€ð R^mm­ ²_t£›I£’Ü\°¹ÃfWœ§wD´h­ßkɪü¯ã˪žøZËhxTÝ%õ§Âémê_ä\,犤”Æ"2åå|™:ø—àSƒOíóØ7M9ížÈ”—WéGdt:³FÆ àĶý:éëm¶ÎèŒð{.ïu±ãyüôIô-5£÷„«mm‰¡á*ïÝ\~¤¨} ºÇrÍzLJÊÉ«F¾GŒÑШy¼Bn› Ò—u_6Q=Ñšµæ)•>7o’ròj£GÔfh¥?HeßÊf_Ÿ½¢íŠöíA ƒnøÁÕJ6;þ³ å.ä.m²âßOVz¼¤þ{yI-îâM±¸w‘Ó)»ko홽8·FaO“Ø£‡ÄÖ–Ô+2ÏîÖûmÑ»I‚¿w×ÜCc\K…þ[ý7¼·!]˜>A;©ÜÑ©ÐãÌÑQOÀµƒM>;\“üeð—pä7fÓÍAkcUפí2àÑEµÃíâØ8È¿±‰LÀïkß_›-ȯžXæèTàî^ª7‘ÑÙèbFú”D4åš~ìÿ1삦ø)¥Vø~îhÆÎ¸þN¦ÑðxåÎÎÅ^^dN–Ýh›7ÐŒ£¼-WdÅ`hŒŽ‚´1èüøó»vOSMã¡Æ×,“qyqqdŽ¥²ªª2ßË\Y¶r}Øz!-„þ ñ3uþÜuÕÖÒu'/o¶Ý½Ûá·ßÈÜäúu¬ÕãÓ¹; ±l,$ߨD&xSðéq§£¢¦*§r‘!D*Y,9ÿÖùªÿkû?Œ0ì…&‹¹?ÿO!Š{çÚFÃGïÌõïÉØ‚6ªŒ÷Y+Fdh0ƒýõ/ *ú_‡ÿ × ·eÿ„pâcÄþÉÉÉÁJ%™sßûM£¾<ßeþWm¾òÃi¡MÏ ;¿%iC>×üœ¢ÌB CK$ÄÐXýý7ÖÛã–ü±*ª@0êd,"°5 0¨pe‡•#Õ#­YkUWfdEzG®o¿ÞŒk{¡ 1¥M7ø¯¹Éî\—ú7-—‹ÒÒLâãÉœR( ý5þ{Úô›š=r†5Îü‘¡ñØïµxõ˜ÕŒC„6Bn†›–&?^>`€²K—Ÿ¾…W¯˜´±?ÕfˆÃ8Ô›â[·ÞTÙŒK貿š¾wé#·¸X¯§ˆ4¢Cq(tÒ ž<‰È¬³ÒqÓ„éË6=Ô ŒJeK+ÎY8Ïg^ó6° š?±û"—¯ÿ,û6ç¯Müü|J¥"sÛ¨(½‰ÌƒŠðþ4Æ,vEÉMQZc14vWí¬oYïž±;žŽ§iü»Ü‰á]»&:ôÞÍÎï^Ù½àV´mÑ—éí1<Þ½y LO'óϨp¿\‡)‡´ˆ}¸\O„¡08ư±·Ž·Þ6c[*'u´z´ž¢còP70oÎo^‰tµuê1vA3á•RÁ´Â®¯zÏè^VÑ£GéË/ 23Mnëý¤]1ÏáL+´ú}kq)šÖ‰i–©g”ç¥Y—¶™l›¤ž$dÿ\Nv¶ÖÕ•‰jÿ”ý"«âWE:F® ýžïâEtòæ-ÕÝæŽGSk$}†ýÒáÞ#$éšý Äù(¿ UAþ[·Èxýåuî­s»LvMVNæ³|}Dy¤Xbßçoµë!ïó+Ù‰° šËoªBAŒË›/}jCùO»ùim¡V$ªèÛ×$>ÞcOÈ¿Ý#Îä×£ej£K~«ßB~%?ðçÀä×’7;mî¤íäÅèåfSX&cÌî^gUJ/f”,›³l¸ÓðŽVI9Öçï%P´ÿ<,ІÏû£xØóÔ;];FûÏ#‘õqÚâ¶ÐIÓºE&hKP⫉›7÷ÖôvaôòL"2üë×eC‡2µÕX‹Š?-^2ýÛ/Û~e#º› ‚¼<¥££V(ÜÜ.²D›³4ñ—ûž†”“W °#©aNæ ó÷ ‰Ö¨’ßÊ ¥¢7æ÷Ê?Úæ¨Iié)+QÕÕº„>>wpð‰$&é#ÿtëP]Íêó÷¨?roïMj-¯¿Ä#Z¬Ó¹—~祈ÂãšÖ ­¦ƒ~ Êë™÷W›¿ÈŸ}Ô}ô匳³5..º7ÊÖô]æ6Àm8)‡nàæò£#—×6,¸Â^ËÎWý™–Pû’ÆÄ„2ˆï¤õý&²:ùkYvž’CÓJðýÓWæ Kì—øç¯ š ”Þ¶WãæFçä`©ôÏ[™ÕêêóŠ—µ]ƧøTM )×èéÞ Às" Q?ô¨îÎRçhq.)!åzŒƒsØœjT » õá÷§ŸÌ^v³ïÍcÜcã•ãõèánàì*é–êã'BNDE’?I9uw8hr¡ðþv'¯%ÕŸ}–ó™L¡ó1œšæ?ªo¬Õj¤ÐùÿÖdË«æ áÖlh\¹ Ê©ãS÷pöDh#ôÔ\ i6©ÂÂÔ{¢ÖŒu÷=9À~@ËÄÍ"å¬î@Ó,`9œòkBCµä‡¢"(ÿËf%e_"åzËAœr½» •ávÜMP.H—²·½Ÿ¦Ÿ k£W‘©í&|r"vSèòÏÛ~nÎ5Gw»™†S¦EáìÌ/( ÿé‰é1 G§²NËO-§¥RRN^5ØšôÀ=¬9Ç3ks”*ãè¦iµ†Æ*ÞÊá‚ÃiwnñnåP9ƒ5ƒõQÕ¾ýÊrÍ å鸒c‹«û mß®öõ%åp7#OCÓÄДŒ]8e 1Å\`¢Ê0@Üp‹àâíV…õmkÇhÇÛSoG ¢•XÙCÝC¯á4nnœÜ\,•îKÌIf´±ôd¯C' 'RÝÀÍF ¨ ¶zïÚšòªÁÖ#<OÉ7•üš¯4†^šÖihÄbßí¾‰Ó%æ’ÜãÕãIYßA$å±´ý¹ãͯÞ5XjÜÝ¥¯½n¦™n'1ÄÙ-!8$›Í®Apzx+™¾ SŠÍ‹qMPéqDûž‰”DO¢þúîäI¹ÙßKƒ–ÖºááÃJènNã¢ðð°Ý¿ßòìY³¸8ÇëW~Èîé~,ÕÊÚÀkbƒl^Æ/רþQ¦ÖF·þ‹žZ¡¡áÖp7¦J—¸Iös÷1A>Œ¾ƒV(TKNÝèÚöŽ—©wÿ°iºá'˜æO˜iXŒ$ÆÕqqàuö:ä¼uˆLÐ/Aé#Ò%®’ݼÝÝ5ÝÄ% ¤ ÕØUôÛL瀛…£GÅÛ·«}|T¡¡°Sš›§)1BéìÌðxdn?q愚É_Ä}Áü¾½qoæ´q‹¾Z­¹\ÕÊŸŠ@%$4eøF޵8à×€ÒÐÒ’°’<*ï&uóeÍËO{³¥e·ÆŠyêÆ@Ó¿J~]¸¨>ïÏË3oMio)Ñ«ªÀ®í¡a‘!T¦»`B Š1´·²úFi©ÀßKÛ•‡'Ð %¸¤ŸºßÓÞleÕ½C_Ì)Ù ,Mw•Î÷˜Ëòùw÷š§wçåY€È‰ÄµvdÞÞÄÙ9Yž4h’œ+?ø×A½F71yô&øµO'ñáÉnŠ…êt9ÓŠE†JIiÊj×èѽ÷xkùÚ¬¡Ydygß Í :n£gnÞ¡Q‚žÊ(ŒÉ/SZíë2¶žÏl*,4mMio)Ñ%’G›Ñ¶\[sŽyš<ÍÑ»˜ÍÎ`3dHfliom"³W'2™C25HÅ‹¥E#úio¶°èØXq•Zæ?ÇãÌÜø1' í3»‹Š@dš¢o¦ÆñÉ>S Û,\k½¶êºï±)µ{¼ÐÙõÀ=ÎswOsæ­ÏQ–¨ØÖ*2º!§¨¨&0V$<‰Û¸ÑÏ;š¦›&MJb1{“¾)òÎÚÎO³2óÉ™7°ŸFªÒ|rüÚì&§JN¼ëûn}¬Ll¬îz+27|?>ÒÞ"¢+“›NÈü‘~špÓðX‰~O׉Bíìf°8T0ø¿ÒxÒÞúê›Ó'³ ³Ä‰‰DdÎpÏ80þZÿ§Y/¯÷È™7J?ÍšK‰vI.3ÂiDÝï,*2‹‹Óõy~>ˆŒá¬LA®ƒ„Ìï÷Ó<ŒŸ£ßÁU×Wéãµ"£³/v3LLµÑCð46g’>Ì–».GÙèO¯l&"£34#F   CW;__]ÜFŒn‘bázÌ5ñÍD­@«k9q¢FªG>í4½ªª˜ÌÌUdÌ+*.4$î×çâ{¸Û¨Xû¾ßû¦œg7‰$áṺßÑð\g窖žö–ÝÔ´ÐÅEçZÈÜÜ<ïC£ïó‚e²ëÅÅÉB°Ò*Z±ÛxÒÞÊê›NdŽ»&LM "S…«NsNP=Õ[TV^MO_Iȼ¼ü|CU»L²íVZ©h÷'Ÿ<óìc{ûê°0Ý}öÈÜÉ DÆ@˜˜8:^Ñ5­¯˜š>ù>‡ÓçÇùÇÅmŒÓŸÈyMÍÕG^å!ÞX5\3ü™¬ªjК}x4öË~¡ë2V¾ï÷>éúÖÁAÒÒÓÞ£›š>^hdz3¥MÓåéúŽ.“Ý ö»ÁÞ0ª´·‘ ú%(§ÿ=‘É 2Ò©ô~š~Ïü`eåÕ†Gßv3ƒÁª‹òß? ø¤þŸ²·¯6Îüi£›˜Ôý†îVÝ]í]÷ÄïÁiX"SÇ«¯âW²¥H2Ó…—*cÎThZ™È´øË¶1‹ý÷—xI ºß«F‡9‡;i;éõ–µ©DA¶æ\³D©F:ÌiZ,a¦aú>æA; î°×E&à€jÏêünùµ%x†¨‡èé‘ÚP,U|œÔÁ²C°Y0ìŽVÀ\ï¹?ýYö¹ ) ×9t°„žãÊ?P¢¾]Óªž^Ùâ ûAwZI§¾w•J.»AÝè§í§ï¸é5%—jPdßv+’W,ð_@ÁsË[1»½¡n—Ä&) ¬d@ð8ä¡™Q÷D&N »/\n˜è‹OÝâ´§hË|ßù°/ZÞïn¶Ý¶ ÝB­4ôÇ<ä {¥•ØòðlWþÏyªÖôôÊ–ý3,:WnsÝ&ñõD–¾wÄQÎÑîÚîbV¿5!ûÿ‡Äc#-QlõiòçKö/Á!Ú aîF#DB_ì{“½ io1"sÃæÎ”; ­Ó}RIq VÆ úm9N,©²tŠ · 4 „ÝÑj˜å8koÀÞâÔb|2® 2é‡ûE±ºë‚¼„Ô8ÝEOm+y.B 64Ò«Ró͹wÞ¼£6¹wGçR\z›ºÝ[Û[ß¡OV! ž¨ƒ ZŸ¶~žÏ<ÃH ?ìyöBZ˜©È4L¸0‡â í-Ed¦&Ü™ô .â†hC ]¡Uï©À‘ý‚6en˜ïÝ3­ ®ÍÛ1ëÞ]G-§pAAàIlR.Ò]lÛÉœÓÑŒ³6[Ù:ÈÝR :_>&½rŽ›ÔQz¿ðçH/m¯:î¤×(«Ñéj4Û¯_:•^¡®xɺgZ¸Í}Úãö l‚)!í-KdÄæ¢b˜ø##ÚOÀf²'BÍCƒÌ‚`´2&ÙMŠFÑY3³ðbŒ x* ñ‡à!{Ù½µްãZsñ¯ùªV`iZ¤¡a•lÚè4›·läîí]„‹©Äžšžú Пeh²˜žâœšå5 ΞCó¼ˆÈûijñö–%2—9—-K_­!®åÈQ¡óÅ)Ã,˜Í›g{φ=ÒúÓâ±¶c·tØ‚LµÁ ¿#=p¶ ¥"ݳÐëNübs¨´Å?½’Óq¼/2 bŽsOQN1Àº1í(§¦z÷HS|cų ³ƒýÕ*o;~L˜üOò§:ãÌv0P/ q†ãáQlÔøò'Bs]ùÿÍPø'@~Ïà é‹×m–ÜóC]_™r¡«%š¬Y:g BÃ>]ûpá¾?ÿü_¹çaaO\íÆÿáWJqi•4^9^¯kU¡Ñ]ª=ÏAy¿ôûîÚîZÇdëÀç  Š O§Â…âÐÌNVñ’ß$,º&ûfúÄŽ–œsWÞttæW#•òìõ¥¢­ó§Z­/N-É3¼*ç!‘‰ãÄÙ06ÖíL56¥ØžöþóóO-ô\;«µbJ›Ž°±U±õ£%Q‘”v«áFž"pÄæ@NóFÞäO3~Ç¿*õÌ+YfÜžëÀ©-ßôùœ7M¹M›Ï3\Âhk¦ÄVþî‚7”yïõ¦DÿZ󳜳ݴÝôÝ=³£ õ6Cv\$òhå.ÈVÖIc°‹·M‰ö¸ÍÞ†´7;'uíl#¤0æq(‘©5)á Ý÷ s‹V”­­ÞËT(Ê~ÿIÎÉúÜI¯á”iÐÉj<ÆŠMR_’bé`ÇÁ°³Z1¯Ú½z´ühih);˜¥>§¡Îd¡õ~é{ä~‰3Ÿšã×oô/r+kžëÀi>pZÊ^—KÓªE¯§¾õòíÄM7¦¸¼³Ý½—°<†ŠY¨Òo;&¦I´¨ïݽ]¡¯tàËÄp4¶2C]=ÆvŒaÂ…¡°XÛµ‡Ì7F®_Q©â ­·}t¯sWqG‘ùF¦Ï_^ߟßÞ³ÿ¨ûï¼Mßæ ŽŸÖÏkµ»÷5c­9h·teu8K¯ucűh5ðÿŠÿïí·Þ¦fQ&Š‹;(tÜås ç9£{Ïë°ñ²ö®òSÔ…ù¯˜òyõ?p}»q–yx.›Ø EÓtÕ´˜CESÁ|»Ëéð\³#[&_™¶i׎ãò{½sçès!LˆkÖ($hyz? -/Dé̽ç-ÚW&ØÜËW4=H4 ÅÖgh v^0º{­S<¯FjÈ|S±|ÉlíòÙû‡ÙOþî šEÚ mêðT—.Ûrì´ìx çƒÖçIîɾê¾X¥8)–0¸—[«o¨ŽEh#`7µz&ØN8Pv@‰•ìç¬Ù®Q¶È0q¹ˆÛ÷{¸“†ð~ï°nžŽ“~ÿ[ûô'r?rà »ãMe_Α|ñúÙØïO5U&[†¡aµlÑ4Þﲉ‘¾æÚ×;xœ˜ÚQ£{…i/ÐújGk4 º F“œÐ27Ô™ƒ~.dÿi3¡Î&Èå®aM¡RH=àv…ã°•áÈsäa^–"Ë0áÌ™+vM` óMÅá èÒO-ͺ&פK·aþ;çÈ:MPÌ„v÷Å1ƒÊ`I;m;}¯ŒŒAUâqV }…s¥›`œaž®4-.|—@Qà±Êc¬#[1ÓÍs£'¥¬ë§ù·dùÌYíômEƒÆ¨zá^·ÙÛ¥¨ôáÂU£{Õ(Õþu®^ŽêÁy?øÕ}¤ÕwÔMt xË04¹ïçR|žhLáÇÑÙÕmJÚííR4ÑT7^CÇ8²Ž¬C£âPh†r¤£¨vOÝ’¡<•îRíZÎÓç»jÀÍ´N ùP'ôϨ¤Ýð(d3N¦(´j•âÀ¹£ßÑî?˜Ëþ|úWªMÌ«í8|Š{ªº¿‡ŠXWžî~Ä9_΄=e$Œ³·³d'Yw³”øKܶ¹Õýþ)þŸ‚DdúزAÕR€=qϿٿ.äÑôžiC$d¬¿pó™N(ïÁS™UJéŸÇN‰Í¹Mt¯ÙfzÍ¡ï7Í’‘…ƒ‘ë¢o;~‘p)`gè›OÚÿU!2·ž÷êø^: ¡ÓœÓ#Õ# 0:_Š¼Í‘œA»ÊÐëv¨Và¤XšB¥¼¦~ ŽÀVIÓ—«/¶5ÐÕøa8,ЉÒ` §åœÍÖ:ÝûkOvÿòh¶’ ts‹²é)ÝTæv-\QN 粮Ϝ/pT|=®X›™IeNVNnÄèùR¼­1H@±-Ø¡wOÆKUâdþÈQ÷€…D:Ñ”5õ憥£3°³ŒÎfW䮈—Æ[£ˆÜq¹_X]¶*ïTn€Ðýp¿EÌ¢Qx”=ê2ðÍÑû‡Ýþv–}}]Ÿvàü>#¹4UôÙAò*—Ë ñôÜõnŸ¦Jc3•Ñ!ïÎ¨í²ª9_“öGšO´mNÓÈùÏyÿ’•$õE Òø3þ¾KÑuZ`¦»²©yýÓï{ºÈêûr*  {hÖå­3X8sdï°wÚà6|ƒ‚©ñú“éžÈŒ&"Àwæ³+}œõß² 5¹¨ñNrdÑexÓU€ÊxY1Õ_ÄÒˆÝY†G[²ü» §hNtMØKFTm3zwéi ɘ™áû?_©§Ti÷äû‰ïN•ÿÎ 'gŒ3/¸a?ã¦È”èO4Ý÷¸ÜÇÆbë¤ã=t~Þ+~¶–8÷Š}Ø•ÍâÑÍbÈiû[±çþH¼üüêÔ„Ižxò}žl ŽÉ6uÑviôšu¦gѶ(E’äèå‡nCÇtÐv€Ã¯µâÌw¦1­È6œ…Âð\§æ+2*FuBþK#{ ¹ÒµJ£›84âRì±jìÄcƒ…ºvœKÒ©ôöZ¸ü͸a=âlÕÙF×+#w–¼\à¹Ñkž0x3ÅO¸Ò_´Æ_ø’ý1½ž Ò÷9Þyüé¼}|þŸ½ï€â8Ûßr½Ÿ¤S=õŠ„è ˆfÀ€1’8õsÜb;þœ8qâ'vŠÇqÇqþÎçØŽãnŒÁ¦›*E€$@uéTO:]/{[þsœ,§‚Êíî ÍcýÖ{s˽w3;Ï>ï;ïÌèZ“ýðOöí® ·@o}*Üê0,Mü-ùcÝ}£^ô¨™Þ,S­zú’•°–z¶…|Àþ.ä4‚<åKþ ¹=UIÝh· 5±‚« §i4è¬óÌyŠË­\¦$ÆG2Õ”*,Œb¢BùUä[:æPö“fì….tƒŽ6È ;ºIÛ÷89‡Ÿ›NM1pÅÅ©®(Rsài,6Dü§ñÃ]/ÄÐyQ"‚¢&¾UvšoB\ÅT ~kÞ†ÄÇ?Hyø'{€¡@5zèSáV‡‚íÛ'ôï Ÿ™à'\mÉ´¶‡‘ì{Œ¯^@⤂¶õ3ÿh2åI<›§ ÷ù»ïÌ­Ì‹þE«ÃM\ÜÙ¸œüïÕ……0TºvÚ@^^©ý—ÅÌ÷Óâõ¿LIy¤Œ?…ZV¦çÑz}B¦YÜ1 üÚÑÎ/çz†6}OhÍE#ˆ¾çÓvEÊ,ñš0¬ö~‹<¶8$óœéÕÛä?NÓn áÏ¡iÛJÞÚ”çšM»©ü§—ªåâ»Ós ãû†_íy÷Šß¤‰WùîÆ´GÏò¿;{6‘Gë|“ æ‹GßwýzMôqÿKçcdÌ£Uø‚EîYêÁ“”ãXÓn±H‚ ’×;‘ÄŃ«]‘Öúò?/#ßöì½k£oǶÒúì—Õèâio£ÀO˜ø§ 6N¬«>ûì³<ð@Zr¡òLŠ=ûžŸ”˜ñ'’"˜µ+‡ûO}ùêÙŸ**~Ú[êW¾£ÄßµËTw~þ¾È¿Ýn¹½‚ô•<Þzê©§øêo7òÙÛù²Îé|ë²¥ŸýrH+Àú¡C†ÜbL„ðÑO¬{F¾¬¸ø¥•+WxŸÅÿøNär~V’$sÿý¡Ø±HQHæÑkHfæ:TØ5äåUÖ*ëñ†9âuåå¿ áÏ!hqƒ§þ~Ùà{©¢UÝN:ÖXUnôí~Ü-èîÐ^F ÇË‘3f< L?ýôÓd¦ˆéuôª¿þë{ÛJ¾£!úfÕF/^üââC[¿pÉû}HDþ ê[TC˜HƱé>xð‹ØÆ¼{ŒÊæ­«-þ»2æHºûfÅYœŸý óŠú[wÄ ˆ#d "’ £iÛs¾çù“Tþˆ[ýG¨ÄSwÆ£ÃÏý:ß{Þ굈&ºü z(“¨*¤¤º*î²x:ËëtÐOÆ#74ÒT>÷½ÖR˙Š[F²ŽFiXùlcö¦XÏK$“²#n’y»áío¦|õÌ Fb´ð„#´Þ#12è©»ÿÝ IE¾;Ÿƒ)âa&X,ÝZ¥úéJèªÉ¯Y´wÊôÝÄñÓþb¿Ž“C´W‚æXrö¹^òÝ%[“-/ÊVþQ.¼ßÊüM½àŽÄð¬Àp\‡´œù9Òw{·éÝo¤|ð÷÷è-Ë>œ¤i€šyjç4arï5jšgìrSÅñŇÚqfNåU?ƒÌk>|HÆK{?mýôޤ;Xà\ê¹û¼Sñ|¯ê—(YHLýïVJ* ܰ¦,–I¾U­®ÌÏmÆ…¸Sš[–|#5e¡|Ÿnž~Ðõ&Í íY©%" ³EdX¯]F_îÌ'íâÿu9^–’yI ^§i>lùpKÒ–Ðì¡,o]ð¸6Á MÕ±÷–%½JÃÀH¦53н¡õ-;Ö£|ñÎeB°_Íì¼¥¼ZÓÅ’»ßkxoH5Ó?ÒNÂVÓ„…  T3þ>Ípšæ“–O6é7…ð ø5ͪ÷ W¾_øÂ­—Òs‚^_ÊñäÀí)‚ uÍÐõÖzÎ,ª½j©€£Nܨ‰?ŸfHMc'í;nˆßÓžDó² ƒ4ÍåËñÏ%™‚xfš š©Ž4[Z².°—O7zDE;—³§f–H¿¾½y»›r§fÀIØjš°4Ý¥Ž@5¨iÀ[Áž Mìißs«þÖ à(‰I Î&P¢MЖF¤Áž6uP_Ì蓎:±…Õ¿OR3ýšfÍ éA…·|ü5}(÷ó Ô4žºèŸÌøï¦JYFgà5¾iîi0 nK¯WGˆ)œv XŸ ygÊï7¼ßÿrãËÓ‡œÓ 7þe:4ŧ†OoÓ‡r7J¿š9x{_pPŽ0@ƒ¨!Ñ›(`àöSKâ–p¡ÑZ)%m“µÁÊçÝžîrsùê¸Õ¡ýX¿¦Yõþ̛ߟù‡[/%gkûÂÀ†ða𨓤iÛ­G¾í"8/Y2½1icIWI§g2ÖÛ$4nÊ} ãÀú„õ,©d¨yOµ¢Út"ö±)…lM6É ¶.ÂQ§pÀÞŽ½ÅÑÅ"Œ•üãÚÓ…ÁãÚÔÓ)èLö&Ãú‡ˆwÆ;«Ð¨fü#Mez 8aOÓȲåqË¿0|1ëm’ 𣯣ùšüQD¨>PlPª™@M#iÑô š "ö±©†¥qK9ž¼iͬQÖÀQ'~±»}÷Ú¸µ!ÿXoð ÷ßyÎ7®ýñŒ ázQ= CôEÐGJ£¢jN8aUÓlHܘF [Ø×±oeìÊP:LÅ5Aj¦_ÓÐË®€3nÎS, ûØ4:E"J¸ÇpRÎãÆãËc–‡öcýjæàíçýYÀA9Â>¯I\›á^Ä’ìIÍòfp¢ìŒœì×4ªÎh6L¯IXs¸ã°“tBAÃ.öwì_»ŠK‹ ˜ŽÃ3>A#„‚fê¢8¾øHû.-Fy¢pï’tÁÊçCíëØòùMtñ• 5Ó¯ièâjpÒ(lL%RaýC!ÉÑ7êă I\·§mèPа&h:ö­ŠãTÐØ1»uF“ѰkMM,‰[r°í ÇF3m™WTW`ås3¦3z™>^ϵ×$jJñ¦Àú‡A:B¢,ñD× (hX‰0]¶^^µS¢á™©â8®#4ˆ'œ¼ÍŽ.^ʽ]À3ID¬ˆ Ä;ã»%Ý^ÌË‹õÕ «÷·ï‡‚†®é:ZUÄÒâáYØœä…D3u1M;Íîµ7Û9u’| Ÿ#uâ…dnÒÝıÑ^¼—FéH*Ö?DŒ@çÖñ•F³,nÙáŽÃ“«Æ°K—ø4ßÔ$å•Ç»AZëqq+F¾ EØÂ’ á·Ú§¬õq˜.Ž/Õäí´´Ñ.™iË ù\§ÚZÑԼߚ›£¹ÌI9/X.,ˆ\À1É4‹š“‰dØÍ§2ÉŒ€XWl›t «‡§§o•é9Qsª,UÂ2‰H«áuŠhk«lô‚&äΓN7ÒÐ]‚.–V á·Ú§¬õq˜a^pRÒŠÑ š/ÜØ(œš÷Û(IæD÷‰š\ZëÑÑ‹®ãÔ±6® Iæ0ïŒS„fô$s]ˆ1ñÝ‚£]G'Éø†œ¶oçAÏ–9~ÜZÇëÆiº=Ý®Îéêm…X¦ à)pޱ±C/¢ÔŒšR‹QÈëT8_Õ>e­ÛtHò‚Ë¿ä“GÅ/&N㎡Pª[Ü*)³¿¯‹#Ç.¿÷ ™'|ýàxÝ8Í1ã±%ÑKB+efÌxœ€ãqƒÐò¶!ÉL.’q®¸vYûhÖqHN^¹lÙŸÁ 8Ž><2–Æ,=Ø~p‘ŒOÐl܈äær}Û%$8.ômŽÉÉŽ‘/.1–Ìš¡!Ëøéê*©¨ø58ÇŽŽ/‡¼¦]ÐO†~¾Cf¦¯Âùªö)k}ܦsµ¹v¯Ýà0LÄzsóC‡'àX_?ªÕ2l¡uJIñ®\éëbà˜‘ALû LQ‘/ “’ì#_|¤ëHhcÀ€dÊËNÀ±}˜5ʼ¨×„›bÈØÍ§2ÉŒ)%•‘2“ØtÝ+›šö<ø#pŽ£$™ëbôi4aB2÷7ܵ¢Ò1šËNtŸ`c~SGÇH+!¶ ÛØ4}I^«}ÊZ‡iACµóö˜XÆ·d°*”ÁkŽY&|î·ëJ3anq¶j Cn½}ÄåV;:R‡38ìæS™d®¤i“6¦®nGMh :]í®öÉB2Xf&Ÿ·p¡FsYIwÉ"Ý¢[ïê:>»­‚Öx/[‚†ßjŸ²ÖÇgº8¾8$»T67a)ñW pß{Ä=¡úíÀ…šš÷ÛhH¦¬·¬@S @C¿7dWWÉH$#lM `7‡$3’ qÆ>fL$s]`(vSÌM%%“…d&Á´maêpu„0f4`†½Œ`ˆÉ_„¦ýÇFQ á¨Äu©lvÄlîí¶ Û¼ °þ!F@´;ºKÌÛ"ó¢æê>5Yêjšó½çghgà(Î¥Q3n–ÒR1#†Ý "/"Ïì1·:Z¹ö9X˜ë1$ÎõžãEд Zã¼q°þ!F@¤'Ò,6S(?»ÌÓÍ;Ó} šPrÍ Í ŽF÷ŠƒðEP^vÞŽsŹpW¯¨6«`ælïÙÙZ® xDÇ)š‚;«@ŒœÁ5MGŸÇ„ˆ‹æ‹MLŠºš‚¦¼·|¦v&ÇF»ð.¸…D?–Æ- ÕòzcRpÔ‰ÔÙëÔBu¤˜ëµz»ñn ¥Á 6ÄÈÐytF‰‘Ór<ƒøsh ×@ô÷[·ä"Áu Š éöôÐ.H„‹–‹ùš|^ L ¥ é–tf½`VMäœÉ2Ñ)ìù<÷Ñ`'æÄLÂH`G‚èGq|ñ‚‡½g3­pÔ‰E€‡Äeëåe?‚†!F1-Q"»Ð΋õ,uV‡«ÃA:¿¢Â]ÐTš+¹wžzñ^-¥…½"Kã–^äCÐèz«Ð þ`°Vg«R¨Ôˆ4Û¥ÚŠY#¨Ø£–КD&^Lã(ž­Ê®²TAA3QT[«³•Ù\  ˆ`äGä›é.‡€k7Å7êdK‡A–pÙzyšj÷v-¸EA+à'ˆÑ ³ÈÌ—õMÎÅÞ‹PÐLNÊÙíéN’'q-h`„bpWA±éÂÅ™{Óp®{¸d½”£âa¼É„›`xbL‚f4[T²„éšé0B3QÔØjÒi¯Œ\]& ˆÁÈ/k•¶ro7Ñ™hYz(l‚£ÊZ•­ÊæÞ.4c4¨Æ«1 ùuºl¹ ÍøQm«æÞy"QÒ‹x¥´v!ˆÁÐ;õ¼œÁçŠ×Öül‚¢ÉÑ”,OæÅ´·B¯ bLPz•6‘/ë)Š”F{#4ã ÙêlM‘§pM4$ˆ‘M«¬•ÓE’ÍÛš·Á&¥ qò#h„qbN¥€M1z¨¼*×£‚¦ÁÖæU$ؾ}Bÿ¾°ð™ãÇCÿµŽ×uQj4ötiüÈW<RËe1™›cl§Fó±àš ÖÞDÀ£i~­óû÷,xë³.ÝÌ%O¨1®×xõ2ž—»¾ýá^›‹åÌèþýò îHæÄ‰Ðì‰Ñ%v#†ä‚“‘¯œ1ãéÐ’LRþ=ªîÌœñËë^ LC’™j?|Ù²?Ynqü±—nGʆ½ ´]>NWv%qps¨© ðÓ&þÉ‚'ôïŸ}öÙÍ›7‡¸F!ééL–ÓI8Ẻ<ƒá•PúßÈ‚ãÌyÝÕë×<øàƒ|õ· 6Ü$µÎû¿Xù[½:fWí#Ó=Ó9¶žŸÿäÊØ¥ÍëKô_çÐh½ï¾“´´4^ª̦M›BN2©©Žšs 5 Su#\ØÐPr’©jÿ³A’$3¤õÊÊç†|Ë-¾X+®D{†» $$Ó×å š^ñ‰ºªN-ĈdÂwÈ©ÍÓ– IàÞ®µª51 ’½É B~B¯«£WïêÜ› Thõ´ê%zîíZ‹$16¨iu/ÎÛÌíDib‹«%Ì«(|ÁmˆÇso׉8eˆ vˆáF¤5 y1½4ji¥µÒD˜`+„ŠdÄüxM*. 16h)­³ðe=F˜Ç+ð†s…u„†ç ˆ‘GÆYp‹ãa5 &YµdŸql…‰ƒdH3iÖ‰tÜ›¶#v3‚!Æ9-'PÁ^¬ã('‰k ë•#ÂWдº[ù‰Ð PÐ@ŒAyuZ½Ž:…&¯I+ägApè5AŒ¾_¼iô}GD4ãA»§—×0k FBŠ7…¯Q§â¨âó–óf¯¶Âa$Œ:¡ŽÓÀk’#rØc…‚V ÞfnG‰£z”=PÐŒ Ât1¢îM;äˆë ¾"4R\º(rÑ~ã~Ø „ÉkŠEòb ôš Æ)hp;_ÖAéUö†sý„© ¨J â~Ÿme~îÒÌý¦Ÿ(‹2° A F‚7¯4Ž:…=ÞžH!?‚ÆEôä–_$“{¦Rî¥a[@Œ¾E_yŒÐˆ¢ºÕÝPÐŒ]Ðf€ŸNHÆcΙwnyqs’0ñÜØ… EÐ$o_£NËtËΘÏXI+lˆ‰Àè5ò"hP¤ÃKÚÈ”9åË—¶ê¨Œ²FØ£„Œ–ÁÍä4FÂÄ /¦BŠ–(Q¥1ŒÙCƒÇ49./Š(:`<[a"èõöFyØïEê]8ãR«iL`MÌØêÄ4›b4¸¡á-)<”{T0‡fì0{ÍZ?<ˆ'õhÉÌ}û³.Ûšf¥Ã.1$R½©|¥Ñ¬‰^³»s7l… zM¼ÌÙf§ÀgFPšRj€–Q’pÔ btÎ #G0B3ÙM··›—|= £À±cñÊs+—×eªRJËQ؇ †B¼7ÞŒ›]˜‹ë+t+J{Kí¤6ĸa§ìJœ‡mh$Þ…SIe3Ö9"=äˆÑ‚÷¡z½½¼,á»Äˆœ4[Ño¹³j<=2 :OCöŒÇ4¥@9O;Ž:MÊ!Çy˜Ï¼&EnŽ+^˜¼äõ‘˜ÆÌBßìÉüÃ@>ZG>ÓB]¢`û@ «94¾¬û"4 ¡;|>òõ\’:)@<Ô«ÝDQ×EW;q ö"ˆ!ÁãòzÈÕ¹N{ºöÀV7ì”A¼& "þ[†`&eÏ+¯rÇç“Wc4hD¿&¸K‰¾Ñý(ˆ! a$OQa&G‚ßÉ¿á¡á%_Ï-Ð Ìõù—/Ö_m¦Oͳõ †Cª7•¯ ruÔ©ÄT⤜°!ÆéPàyu–8%@è°MÐ$£±Ç í Y¤SÒÜ0{_߆\êS‡gíÝ«òR GôB@ƒ–(=Ó›Ý.®v摜;§üðCAK 0õö*?ø@|þ|ÖMXÒæærIrÇ;7ÆÚ%YŸß9=½âÀÒK•[æw¦¦ÒT{£BŠ7¥AÔEdóúù‹ê$÷DIàiç/#úi§âÕª¶ªìó 'çe„ö øG–ë–ö"ƒHHèS3Ý_&#âãE­­îŒ nH&/½âË%'“ŒeÞÒ³° ® F@¢ÞÔŠ+ÓfK/ŸæFÍëëm[¶Ðr9ºÿ°=+ÍV´E¾Û7Ìí), «º ¯gv_¾ž±#.ƒZ€VÚââ½8î§LÖžžÕ Äè1ò¦N(Ù«óbÕ ZÅ, Óh¢]E…r$%Éí± »ä¯¿¦úï%§OƒØ(ƒ¹…V ¸I¿hÈt ”JÌÁújîd Bt' Q{—""»I+â¦ãˆËËk×5ãs ¼"íçŽ5k$çÏ‡ÛØSõ(Yy¹ö“O€#u5_Ï Îeܘ¶WÈV¿árÎ5šÞÙáTïkÇh¸“ Äh¡'õ]x—õ ù.NšiÆ?ÎÄ ˜E€©ÉÝ]@»ÈwìH9×NhŽˆê1«URV&ß¹jšà§€TŠÙ–lO-X1·Ûýd I"ü! <"’¹ÆÑZ/‚æfR¯"´)—ƒò«ƒPPÐ ¥fĽ›6Y—-;)5à\ÜÐÀv¾žŸh6ü»ÑZx@­éOBá.ú¤ÿôBÿ"ž#×FC¤Ñp ñ¹s‚NßÚíÙÛÕ}ÔÑž#Ü<‚ÐëE­­˜3x£`Üáåà]H2“R{/M9æ_MÔ‹ðRI'Kr-‹Á餕Êþ—íÓlqÚœ|‚s¹¤ùz¨W‚IüùzÒòrVƒZÖ ÊUozºfV‰cúÜkLD·ÌêÎ=Š+vÁÎ1J¤© †!ߢŒ4û×gDZMÒAÈúè«…Ö78²öÈêH„*‡ès(¥RgAzß¾@MÔŒjÿ~PNK$d &lªiÑšãK–€?“ož¿è’šÅ±'ð Æl¶þ—{w,n³qÚœ|‚Fd0x‡É×åÀbÑ·nTç•öMŸ×ãts¥vˆQ—<Œ aZ£ÊníÅZÕZ…‰b­xÈ–7ê÷ô¤Jã•Hû"ÀÃ+~8óó=iiÛ¶©TQµŒÅ¤ýôSPÊYµ Ibò‚LJ ƒ#1€a@¹71 šA_Â餂Z¿hËðnYjÉ×·+#-ý/[¿ZÄÐ"«ÞÍ£D"™Ø%ð¥ÑhÏ—.µ2ÒÌ×@Œr7§CN"…À‚!ÆB4 !:–8ñˆÅœ;ý„“†mE…£ ÁhŒføÙå¥ÅFh ÆÉ5ɵÑv¡—7®ÁH!*„-2ªžÎ ÀÑ$‚Ó"/#4c€1&f@ÄIÝ÷à6FGsN2¹@¶%ؾ}Bÿ¾°ð™ºº'1m H¬®.o4ëõ†²: ÿ'A?: ©LO°ö&MókßžŸÿdP‰?QUâ?¯«-Sc±±ËÁ¹)÷¦üi7…Öze刋ò¡¤±-©Ò”ƆEpÂþ¾jÃ’LCCˆ?S” iMC¦ UsO2BDð}*$If4$ƒæz5Gß“ôøͯn8#Ç}$ãŽL°/¾Kƒ 9%ÌÓÙ”YٞƆ¹‰“Œ`ãÆ ýûgŸ}ö›ßüfh+Ôà‘zPK^Þõ…Ò… éÕÕ/„Ð4é‰QÅ•ç$Ìu¸&;ûq`úñÇç«¿M°á&©uÞøùóÏwpšÎs\P]Í &q5é±¶·°ªT\.úüÐ>×çÏïéŠZ×Ìz~LGöYÜî;‰´à 7$óo|#´ŸiAµX–Q/‰ùÊ‹3BK2´W$dðÊšß($H2£!€r­·®fæIܤõ¤°Æ rÑ•¿ ¹óp’i$fç»fh:BÌ0!"™prR¸v’Ÿám1Šˆ Ì †Ãó Ã.äå5'%¹|iì(x ÎA 3r1"œ£Áá1ÆõD'?„€dh‰…)Vcã@,esæ˜5v…œó3ç#¤8Ì¡#ä¸ÜAñ³/¹ˆC®˜œ\ã6Ç(¡(m¤'’‚bœpHbFÌ›y4¬½¦p4¹ƒäGРA ×@Œ.‘KÄð7§óÈ2Ø £„J ²¾H†!ÆÆ·gÓq1·B¾߆o„†¯I•0B1nP8…ñا`„fŒ‚ÆêµòÐJ($ˆñƒÆh^ !ÃÃ×k Ó _@•9I–¢c NC®˜œï•áµPm%y4"”0†œb'_a`ŸÀ„Xø® ÆCN|äРþ!'(h Æ»ÔÎçð6æV •°F •@ÕëíåÅ´ˆ†3 Æ ǵ{ˆ„ k† SA£À|%Èqƒ†Ÿ¨§ob -â3=Ù jøK †94ã„Gäá‹dz‰^„ëp˜ ­Hk"L¼˜32ê‚Ýb<\#äkŒ#Bª`Œ*¡Êâå!)ó‘ŒÂ:`@Œn‘[Èð3èÓíéFHE8WN¸ ¡–—h0ðp…´Ì‰9a·RÞfTöxz &ÐŒjš—YN€d”̉B’Éð7mÛe   ;t"Ïãä£:|‚r ĸ#4“|‘ €„‘Û1;lˆÉE2¾!' 9Z‘–¯|=)­°£k &ׄ¿ónˆGuÝü9AŒ<Îrºê5Á¤àñ9O?Γ˜ˆñs _Ñà.wBÁ)Nc@Œ(¦ËÓÅ碈9AŒV¹UJó³ùÀU¯)¬—î ょE0È5àšënkÊ"×0‡f àŹŸè$$C+a„bœ$#ãMд¹Ú¯ š1C'Öñ ÆQDH)  l2_\ã 6P0‡flˆGóÂ3BZâE½BÁ&€ aø!™Vg+BBA3vD#L^~¦m È5ãç ÍO„&ügT†§ éðtðbZA+ Ò@Œf…™/¯Éà2À͸T&”ãr¾ò‚å´r Ä8à‹Ððä<µ8[ol‚1A'Òù?å(‚0¢d”Ô›b<$Ç 1zŒ*¡ aá\9XØ~3½TßêjåØ(Ž0‚¨•µÂž1Vð5¼M2d§»!5° Æ„XIl»»c£b”ñ0ˆ†ÖX0(h Æ ¥¼//³œÀã8^æõƒ]ºÄ§ùÎÎÈáÞŠ—ÄÜvý3ÝÒ !ŠxDE«Øæ~«}ÊZgÛôÈCNññ+Y²Ûîj׉uƒpMK‹rjÞo#L‚${’ñCͨ!É@’+œ˜SíPp{$ÓêlM&Œ| ï$ƒÕÔðyÛÃú”z‰Þ7bÇ&""æYÎA„†ßjŸ²ÖY5íÆÜRBŠ õŒŽ^Ä’égK¢,qäkÚÚäSó~ëîÖŽ@2l‡‡%à5±<äIæÆ3mÃlÑæè.`dÚ\m×4¼“Œ|·oçAÏÚ ÒÁ 8éBé¥zöœ§ˆˆÙÙƒpìB®÷ {õ*œ¯jŸ²Ö90íÀ‘Ö¡ƒ117>NÀ1.nÇ‚°ÌÉ“±à9v¡ø½ß€”¹x1œ€ã$š{’ñçШi#4dnT’¦H ?$Óäl ’ñ š‘Ü\®o;®7/¯œ€cLLÏ‚†=çÉd*­®~œ€£Ñx¸¿CšñEhØsž23}ÎWµOY똶cöëÐi¹ÇΟœ€c{û›nv6À5ññŽùó}syÀ11Ñ6uî·¨¨ÞéÓkÁ 8M2W#4ŒO`pG2 ñо!'öÂÀdnX’ÁíQ–(^H¦Î^—®Hs’Á¸¿á;ìßð6ËCN,ã‡EÆçL3t¹¹¼PSëb ®œ~ÉÆÃ¨4xlˆÑ0 /.S¥¥2K™%@“¢–Âý[â(>M9­ÒZYQÄ=×” ËaG‚¸.˜<å´œc»uöº(q”V¤…M0Ô76>u¼¶ÌBÆiµÉ99lF,üÕ¿w¿í À»?ýöšÿQ°>­#–Ží ×¾‚ædÏɹ‘s'K-MÙU *¨´ñ h`„b”èð“¬w¶÷l¡†gƉ—jðÿùN0ŒŸ€. ™'žx"´ŸY‰ ŸÉªž™Ÿ‰y÷>&ÄþhiÌÏNýxíZ¼ûÚ)$g±Ví~ÞµKTRJAc`DJø™Â$dç©{"¼ÁyÁ‹½.{þùçy©ö/¾Þr‹W(NM’q¹\¼Xß»W:˜CNhö))åéš'ý$ó·ª/ˆÜ·Ê˜ÒñÏó¯he6H¸j÷¿sô­µ¿MQ^C2…Ž>²u®VpìÌ[vîùë¯}íôé»ï푦üŪé*‰Ĉd&Çäò%±KþPù Æà'EÑÝÂn¡±É06Á :„±Ä€ca$åÛ ‰‘A#1Ï:‰=eX²{¨íÐr~ëÜXNµ¿ðe‹ËIÔÿû[æG!Õ–êOÿþÚM>†Ýõ›×Ÿ@q÷︨áXOl§¸s° €è#QG¦%³ÿåf±óªà@q„¢lM[©4U*„ŠeJPùßðÍ8fhR(ÀdJ_z MÙ¿}ÖüÁ¯Š¦KyÞÀrrš,uAMö¦dE2—vEŒèânQ7P6°SA Ç5‚æ tµ¤w:N7zU¸¥Jlms¶ÝÆüˆ|XÿãÆíË‹Á_`ÉŒˆêYž¸e hÚ%íÓìÓ`£@ ð¨ÉÄyã 8£JG©Û¤½,ÙÝݲ{µ~õo=þë×^4biä;?¾¼t9adý;#NP¹æû«W½0ŸŸ'¦`²4êÒØ¥G:ŽÜq7Çvã»ÿ%Šzfà>Ÿ)MhwZâdÃï>Øv°8®Cƒ‡ÿê¯X¼àä…§î{Lã,`v;þ‹ƒ/Ú™¼ÔÔ—ï^q“Ÿ‚ÍôÉËcoÒ,¼+Ø#:þ^SûQóæW||.ŠYHfË‚Fˆ0‚Œd¥nfp9êžåJ4èöÁ®1ÃhI­˜®u/GÐF¯âC—*SjÁÑÐÛÝcØóXþcC¾õÂS÷þŽ$¾<}dÓK_˜~¹‘Ah/ѳO·°áùõ]MÕ ^ûhuÁ½+øˆÖ„© yô7ÿzÕêãåß>ñýGÕ>^^»äw{_¿çu‡ÿ‚›î:4?ô›£Ã\›šœï6q[½ö+ˆÁ`¦]ÔG 8O#®¤œ¹8Ý䕃;©‰F#°Ð:h=°,~ˆçî_ž¾ï/²á©WûK<®–W»eo>ôí, ùÿ¶oÛòʎǦâÄ( f˜ûMÇ$PÓ5 ã^íÓœ+âW<]öô33Ÿaõ›`W÷r:@E XÏCa #>sd1ñx0OÐC  EÜ¢÷è‡|Z¥ lÕ‰"!ŸÏm÷ÚËŒeC’Lßm,­\°Üûñ+çj–|=æwE‰j¦NϽ]~ä; Í^úù÷_BM¿z½¿¸M??ñê“ßû®‚Å©k"à<1(à§HõZlcP!’£Nxv*ˆ!a˜D´HA)úK¾-r}æÑîdT#a,xN4CïjÙõÌìQ=wÅÒ¤ÏnKòŸ~sEÒÏÿÖ35[ è f5_Í ¯FôKœ¢è¢*sU/ÑËön€a."ô#˜[€ É˜I@Å)<±­’Ö4gìSA0ˆ 9Îkö†üÜ+^* ¤ZOÊQ”Œa$Ô<óeÛ— bHÒÁoýà`í³E©Q˜wïÉØ8®P„ ÐÈŸFK~v¢åß õMÕ8mJ~¤Å¤rJU¦ I‹¹Q°¾¯D yšñÜ%êŠB‘½ŒÛ\˜KJKaׂ¸®ó'tÜ+ôÅIFü‚ÉDBž9Ùu2V;æ|2†þû‡µ‹Wlœ²¨i”WOÕŒOñáâ…1 µÚ”²‰Ý¯‚bÄ-¼ú~v"Š8\‰‰ ˆ!Ȱ²wå5OCFø¦Kie *6JØoº9áæ¡hYI5-ù;f6-)ñí‡6ˆ®ZêÁ[¾ûÆ¡¸½2uäCwݾTÂϸ¶`µk¢+ÿ¥ó‚qý´¤äßܹt•š­ù„;)Ámâí„!X‚'pM¦3v-ˆÁÎS"‘8¸Üû«Œ®ÙѼãÖ”[Çxýã?ÒÎ9³8r*·—_Ó`?èõmsr­šñcUªýmûY4W§RC MäQØ¡ ‚Ð+èÏ 5¥,ÌÙÁ«vw5ïú|íçCiq䎕+À_P±Džðî¿Á{uM¦Ùȹãç9iÝOn}4Ù¹õ¶:?ƒ`ê5“Ú—Ü1öD¤„z·<·`ׂRÐEhö¸¢žwè^v©-˜ë{"VÖËÙÑ´c}Òú±ÜÓÔ_Þ}ïUrÚ©; àò~¦Çá\¾"~žVvós1„a_Ï{5zÇ h ƒLóÄEF%aÓ@¢Qܘbȧ†XqŠMgÃèã1.ž¦ñM»ûðþsÇþÛ8øPøá}ç­º&¿Ížßdoê¥-w,[ì°]ñ²°À‡#\Š6bÎÄß:ʽBwR‹n¶ 'æt`÷š-pWK»!7>.ë¹]ìôí|jÔYëÌóÝœQ«ò÷o¿û–wê®:՛̟7CÿS»÷çvÍcŽ’w›‚.$N2dµ†Ýï2¹ö-!}iã^棉hƒ:N× AÒäN[µmN¦/A¡3•”¸>Þ’öÕJÖ‹µÔ½Æ M^‚¸%Úp«®É4ä„£øÍ 7Úð‰Æ(Wf Y`ç« „SŒ{Ä"F]9¨Êè‰ïv{Q¯ÂÑfqsRÇ4º!Oíì<ÉZ#=7…~çÏš>[—´& p×_þµ¾É·òÍ¿þÇOQœüãû•Ÿ—÷"È!Ñ©C \,‰s>¿e*«ÿHÓ|:éëm;º=Ž"AOkõk?oþüGy?bõˬô~FiÿBá Ô½Aè[é5Õ™Ú mHq¦ÀžÑçŒ L£¤q•rÕ¾Mg€|G?ÕøÕLÿK6Í+?ðŸßôõ”cÀ"Ð4WÏûÕ þšÎÿ šëc÷+oÞÖâ[yz×oÿõswýö—³^û«½ˆRò¾ö¢ß¿ûàb¶l£H¢ÄëpÂIKªd3‚™‰ØfIsº+ö1ˆ@ç)Ñ’:˜Y膣;›v>VðØpï®}øûAë†Ê•¹Ô‹¹°±‚æ4áú‹'ýØõåÓ÷gÍåÞ˜¼ñwå¿cOІdPêÚ"¸fq} hvFï\Ö³ 6„í¢v¥PRJ$µ£_Ó€rVÕÌÙF,î¨ifÔÔ?ÃTÍ„¯ YóසƷ¥²4÷ïî³–¬²öÝ>OÉæ#‹DæÏ½ª¿zqJÎö$®qùœ'(h Q/©¿C>‡Kç©ÍÙVaªX‘З‘÷Ëg,È‹_³9#Øø¸öDe볿\ Û¨Ç̱×fÄEο#é?ÆUG1$ |iìÒoú–ÑmÔIt¡²Þؘ)u(c:}Z EúE§­3¦Û-OM®çÑžhî± ¬*RÛ Âï2¥¹û&¾áW5ÍÚ}“|ÙS3þðÌà¤x¿¦Aþ§ûEdúz˜ª$Lrh>y¨âø{ÍC9UÍŸ¡ué‰|¦1î«ê`¦/;J÷í•MD»1·E`} b0×pæ<ý§æ?ßÌüfÿË5›3ÞY¶2PÓøÕ (¶ ‰uËÒG>=fqå“7noÚBCʘέNw ¦ñ«PèÛø‘âLi”5Âvpa®Nag²§O…ûC¿ÏÝzáo›ÏÎê¼g)š<çÀ—7ó£D+dîS Ά‚æ,¼+ ý{D ¦ñ«PÞ ºxCÒ†Ò®ÒwȲ»qÝ7oŸ×¯iúÕ (tÆw8O®Ôz)tž ú æÆyj!/Û~qì5ÙcAšª™±bqjüºiÉOî* ,\­_}¼ó¸ÍkcCÓ¸ºt$ƒ V3ÈÕ4šfi3œ¼ P+­Mñ¤A¿šù×­åÕI½)-!áÐâK׿ïκ{5s¯Qž%Ùµàå,ü5]Øjšp™¶¤i†S3r|~ÍLJÊ4šÒ¾wã©@MãW3 ¼Õu‚è…RâÆþ 7ÎÓa×;w¦ß9xCJ¿¦¹óoõ¨fÆçÖ.ø¼ªéhCÛ€ø*oнéó–ÏCk¨OÓÈÅŠ V3Z뉅A€+Ò+Y®¬~zÙ~ÛÙíñÎõ"úUH8äThí¨ûÝ»3ï¬f¤«j­8þßžQ7}=%l5M­Cã×4ø½¾ÍЇS3~Ü‘zÇ{ ¡Ü_©_Óšb êÁj ÅÒ,iM{Dƒ¸!Æ#£eœ9O Âv¿³5cë׈)¸lÞx –ˆ^¾í¦û?:ì&z÷Öô­ÿ­û/KE&q ½•J–=ëŠü l”)%Ë”éò-O/k‹Ü»é̶xçB¡3ë»EýšFÖÊ…¿¯H®$ òR•×dí´íß§–Ÿ¡SßKE¿ÚdÁ¯iÚô† ¹t‰WzeˆiV„€i³Œ´®óÊ„•—Í— މ.B•”´&HÓ¬ß6ÿ;r«ß]EÉ¢‰èP:]¾Ì糇ßFçÑú÷gΓ^ó¸-¶ˆ[d¨*p.e?üy3/ÍG»dpŽp?ªªÐ©y¿UW_?qCnjA|äóûÏô—¬O\ªë”Ñmœ õää[úÏýy3ß´{~|Yñï(ÄÑ:ÄÉ™ŽÌ:y]H§ÑüpH2!GMMfà6H|.“AÏ¢‹gõ¾ô͹Âkæùª¼ÒÕDH¦B^±BúÝ Â[ÿ7WþOꇩÝ5ä 4Ííÿ˜n$ƒÕÔðyÛÕ×t9Þ õš¶ìy*ögžÝÿ®Ö¿ÁD›’7½[ÿî­ÇÇ/äûœ'µE6äõÙŽì+²Ð8Ouu| ~Gë÷ÛD‚%@Ðd»²Çê<ÅÅ-·ÑóòóË¥ßNͼt®`íÖÌMÏä墶š÷Û(ý¥[oú÷骊ö¾ä<™@¶!yÃûõïOк^_¨fü#MÞªŸœ‹ú¯R4ï @NÉ£ç»lîsãp¡œ˜³VZ»\ú¡c3õ…K³b~ê{4ž÷äg™;|w8rìBñ{¿FßµKNÀñºáŠ¥ì¹µ îûè E÷mª²5mB£Nzý²E‹^'à( Šƒ²€m‹Î=s8é½As¹}<ãȪVTOd¾øÂ'Gîã4S–d€”Ù»×SljÄi(”.SŽ+Çïcï$”þÒRf"$sAvX” ò@×­éûMò"yä÷®?°&$ãû7"¹œ/%š–F­YãÛº»ÏÖeÿâÉ…ïßÛ#ø¡eÈõiæDÍÑŠ´ç=ãÜF®­ípiéà››÷f7/+oLëZ¿mnм'%¥ŒôF6J'òÃÓÓéuë|³À1'‡æ¸Ú33}ÍÍW£óh=ð~ËÊšÐ,à<ùÇ›Fï<µ·9}úIpŽÃÞ±Z¬Wdº2•X0­”^hû»sî|OdÒk g~Ms¢²µ¿$#ƒÙ°Áw§ã´iÌÔ¹ß@£¯]ë› ŽÙÙ×ÄùÖìµTü—cåþ—ÅqÅmÎ6yy|Ö †ƒ%%ƒp¬mkʦ”uñÙç÷dZÍÚÁ‚¦N6¡Q'@2·ÜâÛÒGóÃ!É„©©äÍ7ûpÌÌôŽÿ -©‰%b} ÆðJûK!'aÎ*ÎÚ¯Ñîz±Ëkð&þ5q4Ÿ&$ƒåòº*ºÿÑÒQbœüâóËÿñ­Ö£Û†UßËúÞ^×?'b½¹y72Ôœ¦òMÇí*×ú Ö49ŽœjYõÄ8÷R&ü6:Ö'(eü=ÿ’ìR®3wLÎÓWO¸½ã³¸f–}Öà·NÉË/‘ú’õD×* i/Ì1Ë„Ïý6ú':Š"¯lZúÇCçê{¬à%†b[Ó·r½5ë_€cJJýà9MvÝ;£êÞC"—èljTÆ15òÎ~8$™>_½ü„ ò yÎÆ9dkýikúŽô d½\¨©y¿©ÑÓ"U?.žùà¶Ã Óç5p½1‘þÞÚzh¤w3[[²[|¾¹¶qò¬y” ÉLFë©©òš´¹QÜ4cõ—&B2§•§çÚçö¿$š‰¦ï4¥ü7E¨ÛÀï$Öó<£äÒ÷ï^ý“ÇO5w~W!TÜ$¹³\Y>A+®¢ÊÁsšGÙºS3ëuAΓŠT鼺:i1%œ§|Gþøœ§ñaÈðŒ§ÖÓô­¦”wSÄYbØ(¡ÅÃ7Ͱ¸çi°à–qËtçôÀBÊBÕ­¯‹ýy¬r™6JÈcè?¶,{rWi§Í ^®•Ý^už=s ÆœØp"ã\FLÓ@v°€dÙ³¹ß†Í1ÕpÀùF³€3  LY6Ó1gú’Ç ?47)ú‘èÉX{“`%®UY‰O,ŸµùÍ]Aû­¤f((EŒ-ÿ©ri¥€L;1-°0Û‘mÌt'ì{S g<;ýÉzœ9O§•§ "f LÈLÃæõ:uÔ}Q°EXBA\äwæN{ô3ßÃó${…½=¢ö̹®“ëNÎÿ|¾Ô>°Ú^ž-ïK׿a[L)\2_2ÒÍi®tnü%7æ®”UζÏö¿Tì2:Ï9“þ™4I+pr,-z_QÞ”¸ï¾ Fe?æ[æ—ªKÙsžJo+M?›Ý8 W…Œ0Û™}ȧ)ð€ò‚3çÉ…¹*äóló ?2` Ì¿9{øÅÊ9m=;.5àˆ ÀVÀj 3¹³vfmÑŽ"”î»­Ü ‚·H[`[LüëÊ¿VJ¿Wæ•sã/”ËËSÝ© Ê7ºaˆP¾ßžúQ*&›¬kŽOšïýÒ­7¹½ÔϾ8Tžå̼ß"a«Û»îSëOÍÛ9Ob—ôæÛò¡ó4ÕÐlo¾â=™íÊáÌy*S”e»²ý³7ýèz©ËqÜ‘òvJÿä,¡#n'é)°T)ªŒ`×;_p‰’G úKÖË>£>ÛbŠÀE¹Þkx/½³Á& ¥N*O.².òÝðvɼmózN§Mâ´¼I#hp }÷›7ï»ÒòÏÒk{Ft¾uþIÕIöLw¥tÕͪ[ðé‚çÉ“@2„Al€pJ9OÅÒ»ÏJnœ'/ê=£8³Àº ¿DzÊÜõ§®ôé˜îÙÄüq¿U_¢$•)®”rU9»öP¤t]ibubBMߌ¶¥Òo´JZ[ì0H3%ðqãÇó£æ¿s¥Š ¹ž‰!bb¼1…Íûd^ÃÌ÷,Õ¤®ÃÉÄŒj‰èão¯ùÝ—gÕ]“üŸgÏëwt »Ù3]UTEŠÈüÃùý*jü¡3*èþJ_î éw›$MÍöfاv4ïÈÑä|p¥‘ç pM©ª´ÈZä)±K¾¿Ðò}½|¾¶ÇNÔ2—í¡´‘žØ"â²â2Û{âz.]\¸}!Núf̲ÌzóÊ›v¯¶Å’®’§qçiùC9«¸N¾ ¿ !5zBŸT‘SS¶¡ ™üãØ“/v½$-þ··,¸õÿ¾èuzú gÙfÕÈjl¸Uç©tcéìݳåf¹ßy*°¼r :OS¯]~-YÍ™óT)¯ŒðFÄ>õŒ{ñ-h˜Ùà\‚{ÌJ‹F½Ç)å\óÜSšS,-ˆšY5v­}æßVÆ*Rµ0fá;uïÀ†¸±ñòÅ—æåÏŠ—j80nããªã‹¬‹Ôê¼/óJ·”zÅÞ 'å`üݳ³¿–Ÿ¶õ½$Ýç+KhÉ ÛŒãšã¬Ú5Å›ªUm+ò;O³m³ßªy :O7­áÆy¢Pê¨êèRËR?ñÌÚ9 <Þn€hðäÅ Ì|–Ëœ™ƒ5È8°xjÍ©hC´ì o®øÏfüì h6ÄŠ:[Ý¡¶’hjéýEÓ¹±X%«’RÒ¬Þ¬ùÏ?¿æ¼-ÊvcÔädÍ.üåÍóbá?kõ—,°,¸,»l˜Yµ[;»<] ÷ú§%±KÞ¬yvÈ/V¾(²¬øé²9Ü8OeвoŒžðm»‘{8Wf‘]³šøƒ¥ã–=”fžy~©¶”‹¤ˆ,ÙX¢yàîVÏÕͦ™öŸÚÿÀ†¸QñÜÙéÞ¢n^…¡\ôs¡«/5/»}nknk[NÛ S““UÐàúÖÖ•Wl§È¾¬)-c›sLsŒmÓgn9ÕåwžŸñø+þ§Ùy²Öí7‰¡–=°0sJœPž(¶ƒóÄ ‰úKúÒ;Jiœ† Á/ò0§aìÖÙÌÃMÆe1W¿hû"ÚF?1ã‰ß—ÿž¤IØ7:]]7~øXÁ3"ÕÜX<§8§!5ëö¬ç—–^º‘*sÏÿ” Oåo¶‘ø‡ðV%­Zün Üù¤Óº >N8‚æPH‹*»ßt¸‰6šôØ}ng7Õ®«G× O6еPZT²!nã@Ÿn4[€¤ )_\û"¾}|M-UäÔ©úÿðð¥.Tgš6][qÓÀÅ—‹|x5¶7õØÌ6X|ˆ r¬*úRÀëeìÕí›õsä-]e£…³m2~îRÅþÍæƒE[ýø´C9§‹ÁG#‘ß.\xEV£F«¬!îŽá8¦95ëÙ>A¡J¹60‚Óí;sÆÖÈs‰¶ý²’ùý÷êT2-Z¼Â!øô‡‡\Ùa¢þ¼…Ö}þ|Ňä÷än?OÓ¼ƒÞ$ ìeƒŒŸ?Öb%öÞ÷“$9;î'Ò1º“îð¼.ÈJ†ÈŲ–“~ŸÆšÙPøùÛtyk˜*DF~Ðÿ/_¾|éÒ¥ÕØì„/-ÞØR2þZ´¿8¯»ð îŸ4Z2ÚJ¢UªÖ”h™LVB5@Ç€MÌ–Óï+4–9Öçó¿èÞ½Ú–R\ªº¤Wˆ>|غÛ=Fü¤~k'AG\sæeÿ¾@0ÌÓóq•‹3†Ÿã¾Za\!ú5Ú ¹»Ç¾ñc2Yýì­ïJ‰?¶ýq*™ Ìk(^ÓôŒçƾ.ÁbDlU%“žž^ñR3•.—v h÷0p:ÁÚ Gvî\mÓè/²ªKz…è_~ùÅz".ü==‘ŽDÉ9Õ?ŠÝÇ'¶Ê%žM>K(Õ÷ê%þÇÇ22ÂlÜÓ_ˆ« %S£Žíµg"ëšù~—“¨ÒMtœxRu2Ïœg¹ÊJȾ4ú þ$“Èh|Ê à»üX&GÞÕÕ6÷æí 'Ãë/ª}ît |¨'æµû:›>ÛU°ËfBÍöfù8ùäÍ“3ñÌx"ž®…O #qª$eË;Âm#Q«ÕnÉÚ²^ÕƒjvÙÖ´ìù سÃ=ßK'ÍvE£¶8k‰„Éœ)9n܆(‡0°ÍöVºû£#؃QÀþv™Av,ÿØÔSÁÙ Fÿ'ƒ/ë¸ç´¾[ö0QŸh3¡š¦•æëã_ÿŒýlèEŸ£Q˜-IK£®°Ñ¸[®c¹œˆö·†¡u2ª•ªUÝ>uk|Q×@¾ÖÂÅ®¿Ôqî´H»Ï3Œw56 U.Är'äûf‰‘W±«tþd'ü¸þŠ;ƒßnl * k2ÖŒº>ʱ¹#Ø•>ÝàS…g„I¡Â[r7³ÓS ÜôtØ`õY’‚  êÊêžÄNÒµðñƒâ1þ7nð”JØl¦®äïWìLçìQ¸1ÔØ6?àÙ¯Ï.8_˜Þ}zm(íšé€(u rÖ<Ì™å<ç›üo´„ÖBµu´êöê¥û—7/"‹èžüÉOr¹85Õ¾ÜxúQ^ˆÃféGG 2Ã`å`pÍf>=´t±”ë)J«~ƒL&V^žó¹s³±®T—Ï90ç®ñn&žª×gkµiC6AЛ‘ÍØå奶j%¯_??(èaH½¹¾!iž×§å·mr<›9Ú¼^:Íkš×®6xQ›^ÏC3›òšnWl·ÐÂ^…î:÷¾ }wéøWŸ‚ºIM•^¿^a<ñ ðs— ä@K´‰;d‹•,9Æœi;–œ_/…é³'?Ež>Ã2©T£¶ñþJªã\Ô¢E~·nì¬,ksœ‡—Ž(u©ï.ý6)Ÿ$ÍF£²¨èÅlèJù¨Œ%Izzf£Ff (_œ·[®çúþÑmÖ$IK½kõ_ v]Ø%rEJ#kI™×XBƒ@àŠÆ>×rÔRã ÚÑÚh[H܉¹cÕiu· Wì+L¹Üm—Æ»³A^^ZëÖò ÁÁëÔ›l§±OŸ˜aé$@®Œ^9âÊß%¾‹®O°ÁÀOLÔwh7"4‚UÚ~SÞ7ªÁf¶mËOH°öÜ“Ò).HÄ÷OýƒÂãÙÙÕ‰Zy99‡ŒF:ÀôG¾R©‹1fe܇? zfz1#1’ÙŸzN½k]ñf imÒ¯m~]ÒpIí)óš¼æ™Ï€7¶ðÛó´¸gòƼzBo¡”ñ”?)CÔ¿ê—©S+æM¥×¯‹Óhãéã2ž¨ÉjÜø¹ñô£Leòøms”gŠ-豘c†\ðAÃ]Ÿ$X¹¹ŠÁtñyšºfè””üQÁi Îά<+î¯$£N—Ž´žñpVŒ&&Žˆ³¨rˆeoa6«d²]½/áãP2&veŒ†’QïºÈìxd2„°L޵•ŒiiYçe3f81œhBSCàÆe.mä}4Ö!€Qw—ÒF,¹dœTR:âÚè…~Ws‚ý³4HkÝÚ.7—æ4Ù-(ÐH$ϧK†"ÁÙP†v#ê9ÏÊÆSNNÎvõö¥ŽK!)D×ŧê¡Ñëq.(?av¸×Ø{³·çmWãjê ÆãÁ:õDJC AÌ’!%KŽ.Ù¯Ý_J–Vp¡°9Iš ÿ¤+¨ÚA©†¾ÜŠ&·ýnwêr‡œ# ‹˜¡Ó=W>V¡¼'ˆ}Ì}"OQ¤cd­*óš¯OHøÃÓS»\/½ñH÷È6¦Âè:=rú¹ÉÝ›,!àÌ,–¬Q#qj*=÷ôOœÊ(Ò CS‚ó}µX6jÍù\‹/|°p”v”Okº">]àl6¬­ÜmàÊeöâ×ïù ç7åOˆV‹s¬£œ Œ0l1ý !ê! Ïú,ÊôSE´æ::öP(Îм¼£t5U#Ê(Ó¨°R&ÂÛÂqÌ Ï£ÐQÔsê õ¼ÌѱÊFq½ž•’‰¥®Ô=ù”|zìéá6‡—ø/©me^+ ÄHqS‰³ƒjÄêœÕ&”õÀûÛôÏ›¿äÐ’'Ú'±‡œF+[Ûô§ñ– ªƒQnCƒ(Ü+ü5âÛQÌ|_a‘û£@żb0ˆÎ‰6wÜÄ j7´Oz=õœz×Jroï»}ÞëüŠÏV€ô¾¦OÝCÃb•…„ˆ¯]«ä4 @Ì"Vîšÿ}Þ÷u~ìãF‰«+EtªŠÍ032Š{÷.mÛVQÚº­ò¯«FlkÊðí,ê\ ¼¶Ex™]3uÅÇŠY••£mFw£¡‰.ìþ­a‹0¢V5ýi¼«ñ$•J/ÄÄä݉ ŠʰL6QtÓ“2ž¤R+Mo+S.ó^¶¦Î{¶=]5¥!!z//çsçDýeãr³¹ËÓþ÷Ú/ãZ÷XEbr8¾jõÃçœf”‹£¤`èæÝ:®°°ðÒ“'£µÚŠÙÐuT½àÇòûd$ù™’‘8Š–I$ÉmÛV›ôzN\\IÇŽÄßó›ø·ø™º×bKV'‡Cz}-,ðZ´&‘‹ÂëšIõ²¡û”’ ÉÖ2ý+LÿŠ—Í˜Í¡¶­ç.Ýv®5MïŠ"/©ê©Ç¦Ï7-Ëj둘æñè‘ôúuÊx*ôó³†8â±À¼`€Ë€Ž è¯Iœ&¿Gƒ›Á`P×Ü9ݾÍÍWæ_,¹h]mÆõc2]ŠŠn–”<Öh’t¥Ç0 y…-¶C§øŽíêÕÛK¥ààõtUçàj„ ¯îé²g2ó+›—ÒÏOåî^U3MÙÙ&ªáýÍfˆ‹DV\Ö·­¿]´vñbääЄ¦†Ã™ÃXÛ0‚Ìÿ|‘|™•vqSÆ}¡TêõàÁóÙ¥Aî\ïüÞ µlG½|«®l§ñN°;i÷Õ°½Ý9½œ¡ãÉÑ1¥m[+± ØùçNÈ4š.ùœÅÒúøP̆ºR÷ÄLbÕ®UÛs·ËMrks‘¨ “)A”ºz9}6X0°¤Ì{‹é{ Àèz©v0Î1±x kŒ´Š éõWqŸªÒÞ‰)X0eÁD‰œœÏ‡´ÚZXæµn×hˆw†oOM‰ïŠì5AÏMO¯òCX¨A‘2ôý®_÷ˆŽvJLô~½UþÄ#¹Ï¯ü‡ðGt?ÿÀIáìpÞá(rìÈê®vw§8(u­*º‰az•*U©Œ£®Ô= ®D]9ÕöÔšð5HïÓ®á …¤ç`Ï/ÿryöri²®ú†,–;Ål¨+ußÀmcœ¯Gvc{è#r«™Íd0Ö†®mÃj …ZIÁfC u£5ã³®ÆÿÔi“§ç@çÔX£!Êc Є¦æ££‡0’óeJAú±{ËXyyÖ8„…â4©mÛ–99YL'§ìöŸµkԌȳÓðSAG£©îFo€nÆÞL IÉYå_®TƦ¤œÔhrpÜH]S’NÞÿþüêÈÕ߆}+Bé zµX¬·®·§Ì3JecÑ\8’ÂQɦüãØqº"ª 8°¿x?ÇžÓÝÍzBLîî–ÍM:ݲ¿’Îé`ù é ›Ñj©çÔ»4¡©-˜M–~Óf§8ùT©·Æ!,”¹ÿ²é/å"‚؃76Wlz¢Q]Ƚ’{ í¯„_1FÕ~3ÅfJJ²¤ÒH6ÎÎÔUt¦õ’6ßLpÌ ¦K¾öÀ4Í´è§E÷‹ï_/»nS…S<ípùØÛØƒËøeº"ªçSÎË%òQŽ£¬º™‘`³uaa‰ûÍÔÜÎaœÿ.è;Ģ،àÏ?©çD­Ü€YûhØÿFµH‡ Abâgƒ†:O]½)Ó˜ Øä–öVX_\Ò{“q“u­ÆbOJ‚j§t&³AQRÑšFk&q&‰À*ö—`˜^©Œ÷ö•ËôLûL ‚–v÷èUGÇ¡ÞU«]k[_«vÑÕ%ä“èTtÝ®ußænÍ1Ùty¦= wsÄåÎã—¯áת«Ø““‘j¬ôj”~§,õÿÎTþÔ*·—Þ ËÉó;²¬P¸{‡v¨_¬\põ*óУ¯¯®nÝÚ©d ””êÔ5Õ"½â„Ç]â? )ì53sž†Ð69„e„'W7r64_§™^F–UW±§¥U'¡©Féj#²^°~œn\; Ê¿¼¬,‡ÏwCÊÓ[Èkäzýz¿`ŠïTÏU£É)-uªm}­ÚEW£t¼1à0æÁÌ…Ù µ„MWh†ðW¡bÁüìuüzµd?#£: MuI„?:mÜ»8s1Khu‰Ê`žs#:¥ÑÓ|f†¹µ& “‡GRëÕÅf>%cZNªbE‰?U¬ÁöÒa½^‡ú¨T­ELÞ2ïõ2Z/O^N`ýCX8;¨aVvà³u¦mÔËödâÜ9KW§®¶÷”T£t&3”äuY¡è<8û«ˆ€áÖa:­Üt_X¶:{\£¸U!«@Ä0O¹Ü2¥-“Õ·½Ÿ¦ûZ5Š®v郇bH£þgzÕ)j¿Bþm…†±‘ÍÆª;,èK;À½¡nÛYâ¢9 E&.^´ çÔÕöž’j”þV4ü²ñäv§îãÙì†V•Eä¼±°Çžö’–½Ý¤Ò<¯‰p_œÉÉÈS©œk§’± *‘‘@Hˆ­{»¿¿EnµHÇÙlŽ9C(¼AÝ7ôH\ΛÂJdmÎØL¤µa¡`¦ŽóBbSꆒKK•%¶Ì»Ÿѽ»eK'u "l\éÕ(]e¸¿2«y·G=„{­!A8f³ÅÕ§Ð'?ØwÅÿÔ÷aßs KsBQ¹‡G6uãéùØÞ>·öôµj]íÒY,¹½Ë_ª©Þ 6Ž6áÅ»•»mÈ¥âÔª}3‚»<ÊStÓO9ƒŸ¹ˆ_´™t¬sgËÄ=u °õòê’þ˜x¼K»|KÔ&‡Uê}z}´UÅý“‘ÂÜd/™ã5§rd±+ðñ‰-/X¡0¿v*ÈöýüeT‹ô燰°ÙªÛ’XfX–ž™¾[¶ÝÚ‡°T ®íì䘜ٮ9ÜrµaµŠTÙ¸lOeªWº†Ô¬×­oü q÷º£I†µ¶³òùnee9j}騛Çpño;C¢*ÎR1›µÔsÏÝöT¦ÚûZµ‹®véPC%ø¸æ—5WK¯^.µé*]{:É‹sBΛ̿‰ßü?ìÿl¹—ÛöT¦¥?"íÇöo8¹A"•”J¬î ¸SüsÁvOlCÀ†×"A88ä×f%Qì¦Q-ÒŸÂÂ%+ãÃáoï­¸‘óÇîBÜ&‹Ã»JJíQ¨8¿ÝgÈgËõËå„Ü–%àçW„ÆÆÒKÉҵƵÍcšÓ+ujÅña Å¡Ë.W(ܹ9pƒ”-­`3qq»59‚°EmëkÕ.ºÚ¥³Xró³C²ÃÚìµ?(~ˆ×ÇÛÒOãË{9±f2ç  ²ÉìmæmfÀl3OI5»-¥ß!îÀ,N]ZЫ€*v«ŠË×fÇnq§þ²Ñ×Þµ³+¨ÍJ¦–nÛ~íêêësuDZ¹;ÍÜÒܲÁ`¼7/©ÌÌ-m7ˆ1ha]Шj¨Iõãšò/N,ì]hmq[Su÷Å—G³Z;©µùùe²kýðìÙq/¯öt]ÔZ Ò¸À¼9x oÉBùÂtcº-¥w3œ˜Ð‰p&:àæŧ+¥ªp?{;>ŸÛâ§9#sHĺ>03A޽½ÞÚSwæÑåÿjoÜÒ×aÉìÁ]Ü|Ó¡Më³Ö'êmðØ08ÍÿkŽÎÉ19m§qçuì:Ý"«9DÎ*êֆÖ3¶ÌÈù2‡„­«k~Œ{vX3Êcب…ÙÙ×a˜i2•df^h×î'§º:j3ˆë5ÛÜlŠÓ”¹ò¹JLiKé£<ØÏ4Ø=ñ%úe²Ü¼<•H¥+åCë öb{£ñèÅèâ†G–…—i¬¾—mÆýÿSpݶ£b:›Mh^àµCXH{R:Qºäà’E™‹ÒŒ¶ˆçëÊ‚Gxp¿K+s!¥ Y ÏšÏþlú™>‡¥Jǯ5®í‹ö5©°G¡ÑÍhUq'Ò3ö”ÌïêÜrœÛha¥¦ž"ctôÖ¶m7Òl†Ó0¨»Þì:D4dfÖL5®¶™hNñæü’kÈ5½‘Þ#ßcßÓa÷>:@·Ù¼¹„,™Ç˜çšâÊáç÷·úâ•-IgnãÛ ‰ àøÓU@š· Ý>D“>Mfž5;svEÀ=k£‘ÑÔ¹-Cã:/g-/&ŠWëW‘Et]|®`W~4ý8•9µç¥žÔË¢.Ö-Ï;ù¹ksætpŒXä;çùÃk×¾nÛvÍfhTŒ ŒŒŒ~†~­ø­æËçëÍ„»±àA®¬2u‚ ƒÂ¡‹nà7~4ÿ¨ôtͼ+2ÉÌe¦en ÛTt* c¹ísËý"gãVz<çʾÂu«¼·4°¥«€&4o ¼1Þ¦~›Y'gQVT–)Ëû»ZvöÍÕq@Î4Ö´&H“¥ú¥1x ]ï3`ÞkÚ{»¸˜µ¸n^]ñYqÎøkÆRJTÓS¦·…® ˜ÿ<Ò¹@àe4ª/^ÿèÑ÷t¥Ð¨´—¼ ófÆZÆ8ɸVÀÙ[ršBF Ù+·0 (YÄXÄÙ‹M‹‰DºjÞ—ñ˛͛!ƒ¨ãiG£«±´u—%]+¾µ:sÙ‡UÝÜhé¿€ÐEð†A±¹ýæöØ5læg3·xmñ`xX—T‚À$þ’Dµ/i$dtA»Hai”!ê òdc`Ò5ò–È#ò~0ýày,c.ã·Ýýf‰·uäëʆÇN¬Ã÷û6déËç¶ôî}‚®oÐ-ýÍð_0ã(cú€é[ò·Pœf£çÆŠ`E6ÀP7öêÍŸ…¦b  Ã‘áO‰§»±Ýõ¡úý‘þÏCõL(¹lé4[×6=Ý¥kBl¡á×Bu®ø(Ê*ËZÔ’PY9,‡ë©Ë­» énÉݯŸÍoÌú*ä3º"hÍûÀ8ÍØåY—‰±gÊfÊMVßSÍGÀ©~üýrm®Áâ·”BÒÕìÕ&Ò4_7?a?á8>,ºˆJ½¯mEçD1çþ¤"j{MÉ‹õ‹âÕ£Ïüs‰~uG¤ãÆÊôŸcö˜º­W*”bºþ'x²Ýw‡¯±ê)t4j@À4ß„DáLxºót–?Åilv0 “½9§†t]åüH¨ÎJÆJ= _bZOTn)ÿ"Äno=»„6w+áæä“RŸõííD}Õ3¤ÙYž’€Û^7E…ÙÞŠ&ÓÕâ«3ç:©&llÒ“®šÐ¼ÁW{žê9^>~zÖôdC²µúpnœ­iezܲ‡rÆ1Ç`ŽØaܱߴßXb_Â0| ¡ˆJ'ÛN‹ÿÜÕŧ•°vW I’«³ô^dýCÉ%SÖ¤¦p[ê9;-¼&ÌcÅ@vj¬¤wôHØåÿn Ù ·áB˜Æ›˜k˜ NsžFqš¯e_W'gHÐHwö¶,¯ÜôÇØc‘±C!°?˜ ð½n·¥»ˆŸ v'§¢“‡¢CZ9rL˜…Š.‹H„,nSl=ѧ•§—¥­„s&DµìÃBèÁš&42XrIãZc䑳u³¿–­¶¶ÄÖ"fÝ™©y¾½¸\o-{-Fb_ë¾¾Ž]9ÐçÊ Cûzѵd/¼w^ìºL#¡˜JÙÀ&Ðu§kþ°|ÌÎZûÅòLy}6Þƒt'¢ñŽwŒ´'¦8M;djæÔB¬Ð6ÒØ¡ìÐYº—ÄAa««½ ¯eæe§ñÓ&ÀDWWð+KÌKÄ xc…’R ø²ÜèÈ@‹QÇSŽ9#­¸>ï@Þ(ÙvfÎÔe<lº:hBóÁ Ú0.6¶_Ò~sÕÊÜ•WJ¯X[â0®ÚLœÍ±õ€rÆ0ÇLgM¿f¾¶L¿¬"€„Îðèî¼Â‘U›k'‡ÈYoÚ€:ÞafN<ßnI*>Пƒ€ÓQ'ƒ—¡´±µ–é¥ëÓÅŽÕ-~i²„Ñ=ˆÆ»Œ_‘“” Qœf²ÓäNv&gN–™d¶‘ßß…e €³ŠWb Òî¹ ]Fõ¬¹¦¹v×1ÂXk«(Žˆ[lZü€x0Ñé–µD×s4ÌéØíg·¢NEFgk•O”<ê¸â¸§êëÎn¡í½$t¡ MÕÇMLæ5Ú"Ú²­`ÛIÕI«ŠC@à+_þ¥C\é+ó²¾ïö’.h—ï ßý`üájÆùàÖ-àÚZ)%dÉ~Óþ5Æ5áP8–2µ›[ÐOõ–û²Ž$—â \Á}AþpkÅ„ˆÕÄŽN*{ío:MÈ¢×KÒxObÒôUùÄ“Ébã #35kêSýSH·lDðb_)2&h^÷bŠ@ÑDtâttz)'iÓ¥ú»“w› s­ªš sL䟑±ƒý~sѹ^`¹#œ$/ÉË®è2w¦ðž=Z„*»Y%:"Fš–¦-½¥¾ÕXi6ÙMkèGw–w@é"øß-¬+É¡ •A?¬ùavîl%¦+k=q h’/ï‡tͲ ;1zɨ›!Í .™.ílhÄ&ªÛתº0’ºµ1߬7¬o´ÞÈÚaàQÐÜÕÎBí<íXõÌFÏý®¹crq®UbBÜ1ßñl‘;ô»&ý<ø´˜Æ‡)–ö|Fw£¦‰–ùNv„ˆpaöÂÙγ[ò[V|F–¯\—T–j"˜p7wN[®…ýMØö,}‚ž°g!Ã|8uÑ÷™ö°G¡qžœ]2ÝRuÿÚ»Ô(.Íû²I·:'SV¯]?!hÂè€Ñö ûš]#w îlˆÛðPýtnéý û#/ÆGòœLób.õd ZØå—¬¯²¬y\Cj6©:9ñà‰¢o–ßL?ܳÑëóhMUÃ4Ö°¯(¯(ï¨x]üùYb=qA<´‡3{kZ™‰x½Ï0fmnþïv:ßiÈ•!÷ îÕ†*(6¯~¼úK¥o¢:qkÅ`t0ä 0Âñ‹¥¸‰$å%†î—ýJëj4aU¿¾’ÈßÌ¿í*çN˜Ú#ÜÑŽî4ª@±Ì4!"pl¥³µ·Ñ [[÷î¯X0·;ëïËÛYW0Zþ_FeКƒ©:ÀžýC]Áp!°=ÕðÞÒCxH;s[–þ55›R:êIÉC ‹úñÉå«‘¿~ök‚:!ä·©w§>+yVój'ñóÙç;]è4î¯q½<{í§N žò›Œ˜ù˜šÈ*ÖyR’¶Mô›¯Rç[õ„òȼ•æ•Ah³yë(6³¦uˆ„àûí¡± ñ3.5²&²ÄÇÄßü6J5§¨ÉzÞbë ìâÈJÓbûeÚqÞ¯Ÿ@v!ÛܨNø¬ºM&OØólÏÈë#ív“B& ðÀ‚kહV¾%nËÔ½½z¯v¸>¾­ßáÇ+Þ‚!x©ëGYÙ/&²c–x–Â^1­êOþ3†Æe¤V˜»¸›¯SWGºCШ¢lGg™ë˜úÝz’m¡¬€Þ;ç,N1¤Læœ_á’žžN‘¨…÷`8v¶Kj¬«#á2òJ’qVüžv|'fŠ;šgèúBu„ù ö€P8²sçJ¶ôSËŸzÅ®g»:_ìì/ðì;¸Ÿw?Jí|ê埫ËÝ—²J.—ÉÁ“©LÁ |1¯ÐD&ÂØ[ÏÂ-x <·aʪ”*—OÄïÂv €tå­ž{íçAî]„t¡ ÕT“4¬7°'² wbj‹©®xÚWY_FF‡ÃáV’8΋»,©ä²ÒÐ^ò MV×ÏçRš‹p¿ªóÕäÉäüõ4jþƒùCü† • …×€Çì¼üü¾ä}··FŒŠéãÊq=wŽj±¯Ìú»;°W:°á2Øo¿_ö”l‚UŪ¦€,ØlÜìÙ£DŸQ¡"º/ШJ÷@s¿3¶1(fSñDˆ·xnÙ’¿åë¢fëù $”^0“O°Äß3ã#–;Åba Þw=õ _D»Ÿã—<â¼C/÷nú‰3…}~«xéÄvZ¾hnØÜ 9§^½°k»!¾CÚ»¶¯z;J«d¥@÷U$—Kúøœ*hy^#ALðÿ béŽ@£jašjbbÃ÷a¼qåÚ/Df»Ìþ¿œøI™“† ÖO(Ö}—¬ÝRõÝ –ê—î XB>óhKþ^´Wô˜U—Üþº“…О=©¤2ª~ËúmëÓ­£oŽníܺ«{WJQ&LJÿèÞ=ðáCN±?``еkd£FDãÆþÍÅÆâ³ò³§²NÝ*¸Õܱy_ï¾Ú`ÃoX çÜÒÎi¢÷ãq™/sÁNWD5WU¡M£ô{Ì{ ÉÂEè"1(Ž.1ßU¦í[^8óž„æÔ©úÿðð¥ø •ªµMå9œÑ*»¯³¡M˜ 0a“¤×FõÀóÏÓì÷;@®U.Í.,}ÅVår(ݧo¤=ƒóœÍnU>›&)wW¼Œ FÀªîÊdóÝ뉇¾yÜL»G0»7dv @›€U±^Jøì®0å>ÇÑûî5¢“q n¨«šV‰™’j~xÏpâ®ñ„Ô¶`õ_À¹ìÉÀµ—‚¢ABüK¥fZ צ¾/ƃŸ’„éšÌY΂6Uæ"M5 ob¿ÌžÉP RuñkëŽ@°LV¿[»íûÚs‰ÕØÍkƒ’aN*sX—Y¼5„à½p¶tå´öE|«šÊÄGúnÀ³w©ì†yÙþG8’ié5X ¾-R<\¿ÿ–Ga;à‡Ò3àzT>¶_S†b3”†qµ÷½xñßþÏŘ< œ¬?.»øËã3óî-ÃuÐÖ!ŒVÁŒ–BÈùý4 ?'#·ÙxLÊÿ]Ouxq+s=~¼ìSÐä=¾Ð@jLÅ™®Æ›®æ`Ïê3;7c ÿBx˜ƒ €TàÆ¿ZPj;-½þVÐR媦äTŠû£Ò˜)öÒvªªÒ3Ì1Õê³:ÏåoBAf®^} á×ÅaÝŠsŠk’yY܇‹F"#?èÿ—/_¾téÒj,úüýïƒHažÀ€¯Nm™ghIîÙž±}nvøªàU$ªVTݺ@œ ¼tžïÜsëæ5@ 0îlqàVœêfnÍâ þŸÿBQû •:³ëdJŠ6Fo+9 &ÔáÌð0FX#Èq_6󌗓-ïÐÜÌêÃg)S Ñ»¸Ü>A·Ôï÷…xaœ1ŽJÙ »)»éLáx)CZîñJ-O¯Àµi0!p  s/ ´„gˆÛ¯t;G΃»Ob@v•{š6í«Ç_¹ð\®6?ÿPnØ{÷ÌÐv.|et´{ÆÙîîîµ§µWJü±::Z­R2‘|y¡½äw™ÏAŸçÏŽÏHqíö>ø}æòéEÁïËI(ôxlŒ2ÜÜbÿèé3×520é…K¥@‚ÿz±ûÿÙîâë¸.Z‰»J}Ïž÷–ßpÀÞÜïn,車§`a,G­£ƒÎÁAoIlóÿÞÈİ–II/ßêÑcWb⺊çÏŒa7ާê™ÿ{‘,à X‘‹äæÁy9puuÇÝ};í°X$ PÌ/# Øöß<=lʰÇŒÀÙJG Ńöã%Ãà®sYS%~HvhCÒ†Õá«{¸ô ¡Ãº2·MsŠˆÈqss«®Öþ|á”mðBÜ~Ë=‹õAÓ—ô”ÓûÀe‘KêeCÖ¸,`9ƒðß)-E-§ÇM¿^x}AÀ‚7ú0ߟÓôpˆŠ'ÏóØÊKèä럇—­ƒ]½|ßÈf^@!Œ* ãSâÊGÆGq¦¸#š#FÒ̦˜/âëzÛAoµ²6„ÉɲŽ1ªÁý½'c³óš7÷¸t©ÌË »†h"MYæ¬tsú3Ó³xS¼ŽÐÕeÖ¥R?~?7ä­ú°[s@çÆàÌ1Å–8’¥xY(tR•Åž:,?¼>iý¬€Yü†=Î+ž}1z_Ÿæ.ô&mV†Û:·ÄðDÕq•°_åDöê€_™p<1ÏÜSìæÅôÞt"ߨ߹ÿÂ^¡³ÿLlzßèè ÜÐ3 J¤‡t±‹ÁÕ׸R6QÁjŒz™úŽG.‚$è¤q¢R`Yv£b«(~SÌ)–ÙËŠÙÅ”‰BѾ‘Ï3òø&Ë•gâQ,&_ø–Ä¥¥E|¾}=¼“‰É, íU*¥“Ó+ÞÐP•CÅTRAªb¸¸*¢’˜»à.®¸k¨)”b3(ùžñ¢êG:> 3Í(bpÐêªÙ Pb.Y¿0±4ñxóãRž´âá¢?Ší†‡û=|HwšÐØ  šì%ù&™ˆ"XS,y¸]øÙ¦g—'-ï}¯÷7¡ß„ B«PZX‡û˜rÀª;ê 0EqââÞí$°¤3§3•¨û"¼(Ñ”˜hN|hx˜…eQ&‹êåx;#ÎN°“#ìH]àë–W¡Ð9:bÿ`-§Ñ;9q ŠÓüS®šPçcù–„çç`9æ êÞq÷E}ý~½y½=P÷X~)¡ØŒ`–ÁAÒòÿ¾jM±©x~ÜüL]æ±fÇ(E“W¦wúΦΠë»8ÐMž†µ±!Ó"Óx-y¨Sù B;vuu)¿m†¾ç‚ä /.—.ßÞ»E•ÿ RÅ!ßÙLÃlƒ;=˜PU_®´W¦»¤çˆsòòóDyÙÙ¹N¹j¾ÆaN`§µh2€D$€Ã#çç£ý $ú¿œ+¢c©’Á"”ÀZK‚t–+É0;ÀìE–«Y ˜E€Ñ%„óàÑ{ÿVÅV`ÏßtŒºm˜m÷ LUNÉ]'™š–:ïFÒcàúKS§îg[žEq£{¹”Ê¡«ºÑý€&4Õ’IÏHãÂ㠈ѽ|GÂÛºñœâÜØ˜±‘ΑÓý¦W¡«†À @PºÆ}¨š¦¢t eѽ§!¸U˜P(¤¹¦¥¸¥Pº&N—+Ê¥OÏ—ˆÊ(EC%{½D«eb y…É43Q,UjÞâ- =Ue2L ¦sXÀeEƒ”+DeÑ8&‘EË˜Å€É 04LNi$œ—,ÂÍ𮻬·Z.—Ó* ¥cTÃ!÷ª™|<çøêÄÕ}Ýú~_ÿ{Ä(3š‡ÿvkJã Ž~.tk§aœÝ“äÝ”%ûRæwò•ø° JJ£ÍMú ;t ÷Àà'ƒÇ{Œê:ªº@b”ÑbX±Ú²…º)Z‰3¤Íß~ÊéxQ*ÈMí¨Ë-"3"F*`*â›ôé£Ö„Õ†åŸë8•Û ÕòøZÀƒq8f‡äpÎ+ÙGËS¹Cçaå”Ó°aOp~4•}kQïœÙ¦Ç¢‚ú‘ïo;­KR Ãn:«¯|µî^ » €ÙÙ³?/P=vss}Î×2;z10Mhª­ì$ï'žf„rƒðÊ’ìîÔ½¹Có5ÏÖt½ÓuYв¶â¶.(îl1®Ú`·ùó°²u0à‚§«*#ž€'•^~¢"Tj\­&ÔeDY)QJ%eI.©/+‘ä˜HFŠ@V8p!.¥kD…Z‚Í©'ð g;(ж@*‰`¬â™ïaY¾“åfQ4ß”+š9¦‰²b=ÍûA¦“Í‹›§6«÷7Ú_×β{ÓŒãNßmì&YŸŽ;NÃvpm-ÔSª$æ¢ýE¢¢—©°²œ €Ð·íDí–¤,¹ ¼°Ü¹”#­*6C‘˜.– èÀòò™B:½A‹bB¸&Ëî-&æhYCCxQ´g|¢±ri,Óh¬›òðIãÆf³í±°™Ù&Ý&F‰y X^R×÷ã4ѪèDö´ÆpãK­/&§$³¹•®nÊpúòôÝ•íÂ_yØo 3ÝhBS€aÎ*Žv²–œ9Wš BT¸1tãíâÛ‹ÿ–÷ÛâÀÅÆû·l†"1u{X&>âËKJ׸5³b¾„J¯ä5x]º$sÙ$Y±(¸¼étIÊ:wÆ™LÛ”yÎmÀ‹I·‘QAbbeÅzš÷à48‰ÿ˜þ#•&ûMã3+]=óÿ|ÌAáíÃéNÖh5Ô÷&hÇf|%ãÆÆÍCé/S x°<öÔÝs,ÿب¸QÝ%Ý'{Næ#üªb3@ùzŠÓ.V>íàktJ·Yö’áèØ0#ã‘Ï‹•Ñ £1 >>×ÓӌڎÍ’Eœ_^°àïõ4ïÁiJÍ¥Ÿm<—wn]غû'õ!þÉ` ¢F¶,›Ô€¿?hçëÜÎE7%‹è¸À4¡©n Pf&S3FÃ?ÆÙ/<†ÍšŸkvn[ú¶îwºéýåpá(ôÎò56”¯¦8Màê9Ácõò9#'”>2+×DP/o²í¯»(^'4¤¤0?° ˆ‡‘e\»/wb1äøªüzù…<3©åÚÅy{¨ß7rqº£…+´HNv¾wJ[˜Î4ìUªOÏ\[ÖCf÷2›y™ÓÝÕo½ëíTî©• +;8u¸ÖöštúX€cÅÇŒ9p7qRË]žh Û{6½zæb@D3˜ný4¡ùÀË"2ít-ox©U² ÖLéÌ^.½6¤l8”}h¦ßÌîÎÝßiiYñC=°ŽýœÍ<ç4ósBгe6Uå{³=ÿüS+aüT§c+ÔCu@€Í~ƒ9I•2]Ù=òßI§)º÷¶Š&E“²"aE¦.saÐÂ.Î]^~ëD¢ì瘴“ƒ?c#´z¡Q}œ†2U†×{V„ï“„„ëÿí“BT¸ÈoÑ —A«ÓVË?6ÇwN»wÖÒtøÏ]›ú>*\ûÚC×x‘'þÁZˆðÈMk^t9@B=l&/LðóÏå ¢BYô‚ËNï}ŠÓd;889ûajD/eúûÛÒ7S™Íéõ#ß°ìÚBqÞNÉdh3Æ/,4îl¸³°Á‹o†‘Öõšÿ<~$S¹óaÊÙ¡í Ð8/C¿½›€nù4¡ùXÀYÆ)U¦ÿVÏžóúª)Wº3|ç=Õ½µÉk÷ÉöÍñŸÓDø¶J§Í2·Ó5`³xÛg“¢/¥ÞÞœºÛë–ræÈ®“ùiÕP †Ò50œùiÕÚ¬zlv,÷/@ÝlvÏË#…•N¯ÔôÔùן=T›%ööZ½vg&Abú$mÕ‰›‡Ò±ñJdäa,1ñ{ü»à'—Ì„ÂR_{n„‹0ÂYØÀÙžÏx]?´µoëÐö¬òìüäù^l/ŠÖÔå×µæÏ$½²KŠ,QtqIJܴŽyÄ¡8z""È!4Ÿ(p§xÌ÷©ß75»Øú¢ ëÅI&˹þ¨÷®¹&Hêìèí÷ðõiãmñcíºZؾ{CºÙÓ„æ#³©ìAþ^~éç¥;„4AÞdt={vqìr0ûà®Ì]˜Zœ]æð"ž@¯Íq_çÒK7ªJ£rgúÎ#ÙG:Õé´ÓÿòÂ=XÈ ïî¦$ãü>´÷¯ËϤÎNÎqè3±•¨¥Vý3 [Û¬‹Wè’¬dë³w¤ï8•sª[Ÿ ­.¸²*Ûzðògvt«cƉ~Gnµpæ\.q¢ ÆGÂf*žP7GóóE‹áT ¬AûNöåžò©²4:_}üYî¢ N\f#‡†ÎöT’p˜ˆôwîßÛ©÷IÅÉ¥)Kù„ÛˆŽ¢Žï·døÍ¾YŠ;èpËCüœ¸”Š\oŠ,ý ÂJ:Cp-š@¹_|]Òº2¬li¥m%m+þ¹0SÔ˜óÏýPGö¤š®è¾ÛÕ˜Þs@šO¡@›!¬É,ÍøòMOüm² ˆáZÖ¢wøRgí…5Ék¨—ñ6qÞN{²&Ó…øÁˆ-‰Ý›¹÷rÁ塞C¯¶½*fˆÿU7@ç¨S)fâ)SðȺèhT#ro¨\_b3¨ØD]mþ^¿N…aŽvTæEä³"ÍÃ|Õù´üU·’ìYhCga#a„‹=Ekú9÷»^|ý@Îo3¾æ6¬SÌû°ßHøf%»@’[o8s1ü³²µBO“MkvQ¶Oº\ ÇŒA®°ÂÎ2×ÏÍÏðËÌã1œÉÉ÷–;s­÷nÝÞ’¼%GŸ3ÍÚçîŸCà G±™îñ¾z$»ÞZ&{‰£ˆÍ¤[;Mh> 0‡2-›ž&ky{_Ùôô÷rîÕÓ¹çïò£³ãŽð¸GÖ¥ôÑ!thÚ÷„מÎ=}0ë Ê¬¢¨ÌŠ:+þg|Žõ7ãybûÔÏ[ÜOŒsðnlj-é.A£º0ðÇ7OYöTwù7‹ùTêI±óÔb̓|ÕÕ,åÆ{É,Žp¶oä¸Ü+ª ÊØ—³o›l[{Q{ŠÖ44x¿Hþ0¦T »k±å Xæ^ µDö Iˆó28ŒÙ;Þq³Ñ†÷³,4BË‚øùÏ‚ã“-Â@I–e‡5Ê·c±Ô¹õâç:µÄ­À®®+¯oIÙRl*ž"Ò×­ï?½_ÿŒ[óð¤Âeymzé„auè¦NšO ìùlÍn¹Ž³‚ó??LiÿbWcÚH#Z¸+ÿ6àrøÆå#'žꊀt½Ë)s&ïLc‡Æsç´–´~›¨ðc3Î%çœÒ–É`´ª×Ð|ù·x3ŽÒÛ h|’ n•†„X¢¶d¨µóÕws‹¿N£^6r>Áq” ºµ*uFb½zSÌÆ}·sÊpÄá÷zoø—„º 6ÏoJ°%þH$ ‹'†!my\°üDøD•²œÄ/æ_Ü–¶Í€¾òÿª§KÏ—½2ÿÁi¨—ü9æý£ò×LnD7TšÐ|j€î·Ü²eÆFæ°ÿí]ô¯×2­^Åí¨‰?F:E…‡[ÜXÕÅ©Kw§îˆ*<´¥&![Ÿ}.ïÜ©ÜSE¦¢Áƒ/µºäÄzÛu0·dÊ-·ã‡Sf%†™®ÅÆ@¨¨ÍfhÔøØs©Ô?ÈúA^ªÎW=ÈSÝ’IÕ¦É8;kGñ£í²] ìÂ:‹;{«ýÖ<.MÓ™ùn¿¡ÓxŸJ=ïþåfÄ „›Q Ló {üЛ Iˆ™Y¿aU-OV›Õ‡e‡÷gîwe»N–NîìÔù?¨ÌkœF0ÓLݯ˜±uvSºYÒ„æÓ´–ø o'¯ìó2ÈB[½ïäÚÑ?Æä©›«{ϯ¡Ô)Ý_~"‘ Q§ÉÞ½åzù9Ź•ÏVR£uW§®=œ{„Û…葯5ù†|ŠÇœÉ;“©ÍìêÜuQð¢&MþçšÇ+ÿwvDž¥Ø/ï<µ„Xè®ÈfùrYŸŸNWì¥ünH ”.\56•ºy³f0x_HÅŠâÀ£±~ñ9}ŸâS /Ÿ¸úÔ™ïÕ#Èä8ìÒÃqþm¹¯ª˜ | \U*–Ùl@Ñ\¡0ÝчªŸýËš¶”˜ ?-0úiqó0€0Ö‰IÏ iPàÀaç„ÆÄ¨šG?lyRYÒžŒ=”ÂéìÜyWÄ®ŠãÞþ—'Àå¸9ÑŒ%cÂË$Ãa000ԛǠ Mh>Y@îwW3NÃ?ć^ ·mûwJû÷ÿŠWy„¼Ûc‚÷*eè2Î埛Ÿ0_‡éÚKÚ·µâ“ŽìZFlH€Ì0g<Я}l<”«ÌíäÔi†ÿŒ–â–o¿w£Ýòò›¼2}ïÃWçµ mä&ÜÄ=›6 Û*ÚÃ!ªYù„‘„ÛÞEßî v¶KËè|Õ†1e©kÕ§IN"éå²!éI?÷vl ø9›iœ–f¯ÓU¼ä˜LR…B¤Ñ<ðõý8 !%®PÊ .Nê1 ´ËY»!bˆþ•ÀäâX †%`ƒÁžaÔ=$@¤2ÁñXñ|s¼æá¹t^w 1õ…¯eã§ÆË-#f© `±>ˆÐ$$!Õ··£ÆKGÂY°Ñe8)>o:¼à ùùʇ©Åôm–»ýÏ/ñáøLñB¥TmêUåÕ=²=1ª™þ¨OVƒpF¸7êý®n’ Áw›ò† ®BA]qKã¤8ï_& A‰oùa®zb|mŒ~lẋøõ™Ÿ÷ç÷ÞøŒuya–¨1çµÓrrìrî'_=•3|’_Ÿ`OºµÓ¯ÁÒ‹ŠœD"Å¿é€Ã7áõ%f_ç¦vu>?–áA ø]“ß;‘7 BÆó¥îž¥nÒˆçlæ9„Z­R™êô¯3¼ÁÁý[Ñ\ÄŠ¼óˆlW‘ÄíóRIX ƒAp ñL—b-Ð¥,ù03‘J’rÉv=` CîU£%&Œ€¢Já^BS8J¦éÑŸUÈ"‘å0™§¦¿q­»¼®©¨éxŸñíÚ¿¶–‘PXR9qI*g0IÀ(ú‚¡Œ& MW‰k #ÈËÏë6—mþû¼näƒÎëþ$Z{r2ðŸòhSàÛ¥äk3ûå»*È8’’Rù¯ ÒÁ(>›P T;ŸÂOÎnÅuïb_Ê•Riœ÷¸‡±ÎOÍë©a~ƒzƒŽÐ1‚‚Áh€•2À·9²UJ5€·—+|öL˜’¢stÄ8fI‰(vwi¹âh§÷±¨H?HüOL6–lJN2%Q©/ c†5d6&æ;âx>û6Ç|Z¶MþãÄÊèÊÀï̆±ÀÜÆtk§3^³¥«Tâ!4ä±[÷/ò½Ö±x2Ü0òlÊí› rçdeˇ^åœý¢?Ç?Ò×®N²ËNo’²£æ«)¸u%‡[$7•ê?Ÿ_«q(!’ëÜMbâ ^ L©_—°^¼ø@iÊ/?¯T‘X_÷÷1™CìÌ•¶0 ‹{ÆL DD0,ÿçÏ6ëL%gY’˜y¥®¡¸çîÏvW„{ µ¤9Å\Á`ÌIfê $AêÊŠdQWHøb„Î{(qãæ”³™ª9¯ûjíÿMhpè—‹D¯‘๟^~¯_â>/Í÷ßÚÊʺŒÂEoŸq ñħ(•…NœN~ ¿÷[ýÚ)ÜùùüÇ‹¿Sní¯øzp[(£[;ñš*¢2EEª‘šZG(,|•Ö¯ß; ºýÚÚ£¢_é yrÐ~¤§…ÜzzÕÓΰq\¤¸™î® ¸tˆcɹx†=vßOq4"‹c†ÇÝöj*b™Lo¶–¤]ƒ‚úR7=zìJMý=)é7+™ŠE^Tzí);dˆ¹m›Ôò{cÑ] àÚó·Î²o⑃D–µt(D$z…Ì7sâb§¤À˜oZ:´3k]Á½#Ì4¦ê™Š¢/„’@ü$ÐÂ`¸m¹Ô=ìúæinJÉdg[¶¬?|覸‘íZçu*­¢2ÉÉ:qñ"ËÇ{3­¹w ôíŠ{¿zÜϵ`µ÷{ÕÿjÀEß#ã–_Y‘—©§õ jƒtŠÓÄ›‹¿2§—u°øf(6Óyð~læ5ˆaqkvk*Q÷&Ò”nNO2'Ý3Ü;ŽÏÃó¨w+˜âE]%pJ¡Ø ž~›/‡ ar²¬cG쥩MŒÍÏkÞÜãÒ¥2//ü]¦<)ƒAOóMur‰ÙX6Ebäf9uC1ê·ù3ü»r»Îΰƒªæ4¥—9 (·šÖö‘}·$‚Ï,£[;ñ,"1T¢ØŒTúôU“‚øéêÝ‹¨ç¯­ÜŸ[ L¦2gk¸qd¹ÙÑfp6óňƒšQq¡‡½‚¸ÒåqšsñÀh÷ÎIb;ƒe°Ñ3Þì ¦H •(6söì8Û{QÑ*ÏKL\÷Ú[ÝÄú®$f@.FF¹¤&! \¿§×qÐ%»IÏ´©õㄨ9B‹pN„Ž`g=€£° ¼Ý:=gç2*Ql&""ˆpãgÞþ¼îO«µS$†J›éÜÙðfå_–%‰ðá~¯=G¦b ׂ窒Œ#!ÕµöHíã +v^ 2/…›àMì@]åR #ˆD% <<&Nâ§‘a2Š:Ü3Þ;®=®Ä•‰I`71,ÀŠîH ‰p!.•x º²À…«PXfšþÁZ06[ïäÄQ((Nóòs#iÔZ-©Õ*•e”Äb¼˜ºR©/¢> †]ÜGÄ£³^OnOwÔ Zëtë N#˜eq`.ý:ã– %»”§Æ«c6ªÊFÔ•P€¦°€t¬·$H€f€`„…ÄpMd–e(ÏÛ_Ï*)³lµ†£A- ⹬2ŽÅá¡gêËØe ñu|¾žO]y:ž½ÖÞQåªu)vqR9Q÷öûËK4• x§Ìl†É¡Þa¾ÝÚéŒ×éBaákOØl×ø±®ÿü¤T*=&•V¾0øYÿÉ’u¹x¢É ÿ"¿•¿7vS_þ—›!ù¯“\ÓÒ.XƒÍ„ÍÑ‘°ùžm7™ì9›yꉫL–íí ›`^—Ï+Ñ—d03’’ã¼â ƒ •þZÿŽòQ×AÉŸ\<6o/ÈÏC,ë‚O²îà $ýYødI7[‚L޶PM®ýõh`hØÏP'O HE®­>ºj¨¢¾ù º¿ýwÒ„Ævlæ9‰‰,/©ë‡pëa;Ðή|Ñ9ìhïõä’,ÈõùŠ`KC$;0ÅòDYHcýxOY{Îf*HÌËk„é6I£6€b3¢ÅpPò2§¡Ø õXù÷k ®ØŒL"á^0ããÖ«ÓVG²ÀII•†¥8;S©z³#V¼pÍ‚ˆjQ††j¥9ÿßÞyÀEq|q|ööz〣7©ÒDÄØ{,Ø¢æo‰‰ÑhŒ‰Æ˜MÔÄkŒ‰FMÔD5–Hì±7DÄJ•^v\oûßãP)†{_÷sîÍÝÎÛy·³ûãM“¤$)ÒÍÒ¸jÒ6gŽ¾ï…²ôØï;>NÊËãÛö{kÊ^OŽÑþ`%Ñr´ŠUK¸4MÉ-9òºŸ¿a¾dzgõ½ƒ9ªTÊ.H+ór(óðxO»ø¦ ­©=±žAÓß¡p¸“¼õVóCKxWËõõ[\ÑKÐì e_ì¿.âÌ›‹ÄýLyZåíÏæ?™â£–¯)aQ`açiò­^Í|«õðÔsÔº[:Ê@ }+sÓûM©SÎ}0W®“ï ØgB5IyýÊ¢b0˜ N`Vrf¢uáC뢇%vE¦Ù.»!þ4&«j6"ÕL÷}.»WSÓj¦*.‹C­¦Ü¼‰%$` Áã^^ºÎõ‰ðÈãÃOss B§¾ùnçÞßvK^Åš[àgÍ6Oú³ïÍ£GW-9%3M¼Cþ>$į9 ‘) ˜ðIªSqýH¯›·,7‡L>üÃÿPC+º½‘vå­]?|¾ò럌öí±¤þ¹€õgÈ£¤¦·kÇÉÏÇ •µu¡ÿÄ>ÿšŸsŸåNõ¦ë%¨™—'Rd]·šZR1 ¡í Ù-p*ñß?ŸJ·~¼Îè¸aCÕÓ«ðzͱSAÍ<_ÓX-¤’{ùÂõ'¦†©ÁÇâ´å´ê)¿I33~¦Ãj£ûƆ/'R­'³hV·h¦eÌT[ÞE‘kMTÎ\‡ñγlr)T¶VÒU‘mO¼\—ÛÊ.úßôM¡¢®ÏPdee’’uWI‘Hx6"β'œ¡Ž´*Šp)M|÷´½­,0TçîÃÀHC —ššæ‰š©¶šOÍà`¹¹UWIYvý:–‘¡}ë-D«ªÈò•¯÷®~’Šñîö¿ßn/Æ0üÂý¢ÖžÓJuÆÒ½I^nÅ)?}·µ[¿à2Ƴkú+ ÌõýŸvƒû8öƒ~Úüttge¾4 óèñí?M±Á…I‡ß÷¿‹–Á?¡Mlrd9.r]ÔE¤kß÷EÝS‘dB`éÎg™æäúV×ÙH•9Q-- 9žcYO’å¾T¶†.¿=é½—aß.9]Ò+±Á‰5+§ô¦ÐÂÄžÂ_&VÅÒîE™^ø?ðwYggih #®w¿w¥ˆ!5Óòèc3¹µt,;ß±Q(˜DÜ¥\»¦ÙTQUÍ ~w¿žiuæ“©Hg¸Òq a$Tv0)*š3Bó䎣¹ú×A×¾ÿV š TVOz¥a c»±ÉrøÏS£š·$™çfyÿ>·½Ý®:)JÖÞÓvùÎÊ ~œgaè7S°\ó]TÒêã^s+¼ýžô&ñuÒ×4‹Ån‹_vU88ªèÿxL·»Zr‹É0¨œd¤}G-¥"ÂN…Ó½òQž5z¥‘DJŒö—W@_yŠº°ÐL®,ĸñަ'ý<4L‚¦êDnÅxñUNT¬éú|¹«Ò¶ûípüó?õþwÔL ƒ%ÔY`G§ÃîÞÅÔj¢S§*ÑS³ÁlõÑ» q£# ÕÃÆ¾;ö›üÃY:?_Ášußw8¢ÑP¨#fß~~¶©ÆÝé® 3]0µ»üŠÐFijN÷wÝöš^ÿèÍ”¿²î¹–?ÎsÕŒ¡pŒ}9¹£ïOsª¼ú [³¶æ«ò—z,mœš©mŽÎ·QëÃ3ZŒ‹#µJÁèl‘‹½jþ4ŠN…Q#l]n…„ìéÔg«_ØYÇvµF›kÍÃ僊¿è‹¹™ØˆZvµÃ%šsI°Äh”lYA#©VF(‰[wÒs)\ÉJÍcʧæ4Ârs3Nd;Üõ¬®æeI{² ¿Ní-~ÚôEÉÑß­•Î<ëè¦em3GhÕå½!7±©sÇÍ4\/TVOü]AÐ1Œ d)reWtÀÿtl¦v5oAËQ¥åÙ_|ºÅðöηü´r>pÕO§Óæx˜?i¼7ü>/T3†”Zãžn•ßú+ﯿþzþ R ä!Ã5 P+›©8TL;Gù«œ~X‡ÜX!Âq½Hª'êC'è!Ê÷âñ¥›ßÞ¼éífþ5=ä‡7'Ü•™ËàÂh¡šËåbåzé¬z¤úÜãßX³|çÞlË «Y¹–CÐùœ_r%¿ù ²¼m_|º­*ußÌ’r$¿‰(oôôÑÏÚlë3Ï™²(Z"ë+à5Ÿ ÑœûÝï6ã“OÇͨÖÉTÖÀ ®ä·Ëgß}£[ê•1jþWho€ÿ2u«y‹Aa¼¿aÅbÃþ®¯8vsóû™VÝÑÊî µ\·—g!ŽU£¥¨ÖÄzM#ŽQËúÉ$-Xæ±Ì°¬ô+þ5~Ÿé’L”W”T8!Õ"[ Â*ƒ4”<„y£&˜¹ÎŽ¥žÃÒ¯d¢Ñá‹ä„'öÌ<Iæ=*ûÍÌRMO¡¥l½kWÅoÓàh㘖E`0^ó ooìúurG”Q×¥ £øó{þÝ#(œÚí6•שܑüèþÍÈ#"Ê0sõF„ \1pÀ—ZÕµ_w⿱ÐõÑï—Rò ÅùKî…y¸‰NUR‡±™Í¡ÑÝ=—ˆÐ‡so|¨Ï޶f¥~RÿQïùmç´ùÿäšØö›øñ:øià?M½Õ<á{›íùúoxG1æúõò>«KW¼'l‡_çY„.¨_©è%Î@´*mUA—0AØ««™;L·4¢x¸²¤úÏnU¸!üÓW-ͧ9hˆRÃЧ&¡r±š¥â`ÏT35{»©ÝÜÛ]IÎσ·2´Œi'ß§t¦@¨¦¹Ñ…„èûÇäæþ‹%wS8 f±uw…ãg"ûŸKã3Ý‹ÈïDÑǶsq{á{öÐÄéþV4šÝŸö­ü»¥ƒ9ÿ)-c›vèõv”-Öœ‚†¸aCDÝd†Yø´¹0:ÚÕc¤Ÿz.ÎÎÛв§1y™´æÛ‹Êá§i©²Ô“E'ÿ j‚T4Á-*!Û_i¶•±Ù»RýÌua²ìó,»ßTŽNÒ[‘ÿ²Ù&–0w©õ‚塈y+¬ôË8Ær¿p±z¦IÝ1M~vîIó‰øå#—> ’1DÖQ¡šf„FÓŽ£=xõŒ×ÁÁ˜7!hûôÁÊËÝ)”éñþŒM9‚îôñ°vw7Óyy¡äú«¹Mð²Ï‚—5Ð Ì `tlÎÜü®ý»&T“WÏŠª+}_RZÏãŒ5~ééöfŠ•u¸X¥oZ½-,’dã£ü8Ò)r¡çÂ1#ülüÔfêªV©%%¦”(‹ü|L&#Øl¸N^ùâ Š ¼Îùe-w@Ëq0ÌLƒr²$ÊB¬RJÞÆî¸ÒMM‚k šÆ[kÜa*•ìüù÷”•e,_¾;(h|Ÿ>ói4ü|Ж8uj1YÍ‘Z¾Ü­…«9ÜdšTYj¬8v…ÇŠÆnV&ÌWZÕ^@€Qà"Ùø\«{C£ŠÅä«’|ÂñùJ*µy6Çb4‚Öë  ¸èrñãܤÄI&&¶Y6ÙÙ妦¸…BPZÊÙ·O  „«å9~ÿ¸G/RÍè]OSqlѲÈRå03ÕR„¶™0 $×Ñjä€Ö®õ žð*՜ڸÍ–-}ÓÓ¯ÞŠD©§O›”tvúô3t:HZh Õœ|%«¶þEKWs¸É4=þ&ç^âß¼ßa†pUT5!u±ð·ÓRÅïN|þgRyŒ<Ûëp_TSj¦2ñBÝï»:‰¸\ΓË=óòYX¤YZ¾0Ïf]¬À„0 g…gÈ3vzîì˜éðn®ÃÝ  ƒAõꙌGu9’uü8Â0UÇŽ ÌðÞ­+ƒ.Ì›þ _ßÏC*Îû0"îj‘ÜÊÒzňžclÑItGøGÆw_òǾ³sµvó‡ TÞ:ö¯‰Mœ´ ªá¸¸8í«yc†,œ;·ªúFSÍ£G‘.¬´ Èj^7±Åª9Üdš\S¬`zØèv>%¯ z®‚ÑLÅd ê;,“掿.õ =ñÝ×{o"¯ÀøÙá+=‰Þ3ÎK.÷Bn”WÔ[íß2¼ý÷HÚÜ{Ùó¥ÞUŽRéÊ›°š7FÐÄÄì©7]š MкÕn2Í–j.õ=¯¼áÏ 0ñoÉkw|áÄ)»:4$«šúã9j†¡ÑÂ%ÆÙYA{28…Üuv&…ùé³òÌJk±Å „%âaŠÀ÷K§ž´?y¬è˜$/«ZÓhìí©YY ‰D,ÙwkܰnÔªGªJYpHJù9ÈŠIÁ»…2+ÒnªtFxÉí¹³§êeB¯êªu3>¾³¬ZÍ<‹FWslÉ’%/{LYÙRýÄÖõý | w hÕüûïµ³gë÷¿÷D³¶h5‡›Ls°¤L°DPvPpÐEé~SÃ7÷·}ØÇ•9o—F†ú6zø¾Ý=/ÅvôfÛoK’»æ¿ÙNج«m(mm11¸\®eéׄqûöwÜóaôêÕ”•Åxû á„ç^"Ñ•¨ˆ9ÉUOæÛ4©ö´˜FG¨ÈvåÒ ä‡Ýo½±SêSÃs†#ϧ97¥R¤R•<çÀFWóÆšÞ½¿HJ:ûèQdÍDgç°^½æÁýÚd5¯+hZ¬šÃM¦yÐݽùkîWÞÝ»Vã%ã*«é }êêÕ̧r6Ÿf6×ÄñîM¿œ¨=‹°“i÷úXõyÃâ9íç¸r]1™ŒõÇò^ÿ#8œ§ô“DÂÊI—÷š@°ªèVh*þ>z%=ânäÿ¢¶Ñ7ñ¼l½VxÛÙë2?äT8Ëß¡£¯™œ¢e2+¼½Í/\(îÙS[9÷ “BŸGôߦ.õŒÞGÙhÑp+¡Û{57Ùü—Ÿ¦mËŠ]u]–Þórcx}ØÁ¡¿Y.€ }ã›Õñã kk¤U›áQž11Î^KX7Ëϯa¯é¬é7žÚ‡ò2ÃhÆØSwäi?!:ö®nTWˆýÊý3þ™¡xWQ÷SRÓp¹íÉ ¡í¬†ÛàÒ¢¢3YÓ©Ó;––žš¡‘#ãi4ÖÀßÉÂ…‹áNmC5ÿj+¶par ›†›L“£¦ÙÆ;Ñ{9M*„ÔúHúö;µRbr®.üén¢ y:Ø­êçZ˜…Édßÿsm=U0úŽËhWgÛ`NôûÑ_žû²ƒ ÃÎÎ;ý~±DAQ”xÚhåÜt¬?ÿÔ:8|>&ãYY¤šQ?=gè†T¸ž8ÂJ.Â(®´ ÎBÅ‹ ‘—S¯–^È÷ÞŸ¨BScßèoÒš“ ýÉ“ —Ë™¹¹…BËb)mmµÌF*RÓÈ\]¹¹Ú<¦ÂÆ.ÉÔÐõë}Âî£ôßöÞ§ÄLÅÆ»aÏö¾Ë“Á\Lö¡£‘ÎÅKs “c]Ë»f1_0F §Ðmmðx^é§yLH82¹Ñvaéc!SžéÄvzá×Tªâ“rö“†¹Ò5ç·ýrí‹ó]ß "x¼OÃÚÏËÊ:}&Sál?Ôü;wï¬ë¸®›EUhG/G*Im!¨ñòÂ320©T×®ªGš±ýW¹Ô{&aÝ]Ã+¦ÄHbþdï?%uêf— –ã&º¹Q)/>ž— °±Ñr8´ÒRALL…··!ÜòB6=$×w|™98ðm–>ôBŠ¡{8cqÉÝì|ÇẨp¾¾÷NC裛õ³ôúFÞæº€ág¦0í0¾oE­ Å÷y”4wX¾‘_c*¤Ú¯Ú?÷æ\™ÿ‹§ðá!}K¢^ÐH“i3yòŸnn=AÐõ€i4¬;w))ŸÅÄnl/r¼—¡ øóAètó¯Ü¼¼x´˜»9²Ï½º~2 GU$cI.]»uƨïûÑ{]è}‰7("B*§gã‹€°`n0¹e«²Éýã÷ŠY¢z®Qwé%• ¬}¼è.“™_¼ˆ0Œ”5/ÌsÎàÀ9}þOì““$´3£óÇúMœà>êö²ÍYÙ!™IA³y]bdþ{tÿ$öûøƒˆiò5ñ•ÔT3!»ÜoNN†ëíê+îÚýt÷ÌÏ3_øåÈGØFqåTCžÈÇgµAÍ<Œ›~4úšHé`e3ôÀiÎ m¢€÷Ú°šáŸ8ÁŠ¥ˆÅ*º‚¯cpcïðÇžžÔ®þce2ZlÌfгoCŠä7IL\ÒØÙ{Gû­v_Ü@5Ó„ØÓí—´ûâÏö;½…ҹܥý‰wO B*›âž=yññ¸BÑ_a”öt Uþ#7*N¡?=¼*ˆÍ^Êç\2ã·¾Gw—ß{”_KÍÔ Ût®i®M)™¢Õت^øý1®v»ƒÌ¨O9úëÛ²UïW|7mG7Ö'¿üÛpë hÚ,¬;w¨UÓÉÈj3­¾­‡LaݽûÂcñŒôs¢âC{‚õ3½ÊOËãwÅÏzVûÒq]#ðÌÌÖ*” Ýf >yŸêCÜôÑÌô©s¢OÈTÕšFamÍÈÍmœü[ÚÍ>âîžž‡¢—åêFØáu\}$tŽf⥽ÿ6ß¾]üGN¢ÔŒRmSnûý¶q¶’ICPuL ²(F§RØ<ó†Ÿ49´YÉOAtA%ªžÑŒ”Ùó—’&´GÏ\¸Äp;=X?âøAQùý+I+?±ÈQD RðM0‰¤ËEQ(œ˜Î¿y<]zn]ήÄ.)Ã|‹‰p¤åñð†-ÀT N5óböPŸ·Ç{<8ýÎÚlŸ Õ´¾9p:ñ(îî¾—ou´”Em[óy¿A–]¢ùŶK¹Ë™âF ãÜá”ö/}¡ú!_™¨þ ß¼o¶¬-S1Xæ~> €(5í=¥f×UÄž¸Ôb 2åól†é™z}Cš]×îíN)ÉWi9\§[ÿkÝ¡„?¤L÷íN„!±R=åðeZ÷mo;¾ý–Ã[è£BLØ [±\Z‹Vªd0íó†Ièvæö1¥cf­ŸÕP\"QÛÚ6"O…²8㆛ ™ÅŽCqÁ´7µÄjý³ú ¨X+ìÀC¯ý~ü†¥ÄÒ7)ov&:묚”GY%Jßéáa迼ùbÒ? }æ÷{zŒf¾DK #ñ’m\~éÐQelª~X}ò]Ó‡it%¡Úw V¼Â^Ð\H×¥/a-ÉΔ:&3ÿš)T™ž[®Ø™-OVfLêPGn/nÕÙŠt¢çä¶fñŒï4ªs7/ _w|è·Ãi s*€6‹ŽÍ¦TT5…˜¦Så:l ³)NÜ,*}ïXÖÕÑúOç.ÝØUañë?7vUOa¹"owQ)G­úöÜõ_oæË<Ÿ«\3ফõ‘}|•Âgïù©º¦~åÙZåª9½/‡Â™í6ûMÅ›ë¨ëþÉ8¼òz€`v§FäI§›P4yGKŠÿg®Ë•êR´h$þÌ©ø>¯ó.÷ëï%ÑøêëÜïnµñ’Ù¥¡ô¡ÞÈ»i «PJ¤¨jœÌ‡==>DhѹėÊ“g[ÇKÕW“ÀT< ³¨Ï`5MË‹»hu1µ¬G#Ï0A›p@u`s©/ÞäZZW¨:T©í•èÆº \è(±Xº&UÒËŸo8$W÷‚fA •Þ¯KõÁM·UÚFƒ&òAÐfQº»³b«ò0ÕT& iúç™GOyº¾ÍH§SÌO‘}?ÉÍ­Æ4Á,–Ý‘ž}CC h±¾ÝO]Zn)ˤœ¹|Þ¢«EAå´xš!S¿|~‹UsGhêLïëÁôØÞ~Ýù’& ÿgÀ!ÝûîïÓz?¯ èúù¸y%úÅ‘Çc7cØ•QATœ½­“õ⻇vÝS°¨¨¯Õ{¦š©Ùoæ óaÈ.Ÿ¹‘˲)÷~éþËeêå¡ì¡vT»ZGÑ”J~q1U©Ô0b¡PM§7¨¨±õFîÀŽÎ¹wÒ^QÜ /ܪH‹:Q•1ݺ £µa_êemv¾¼qù¦êR·(·|ÌøØ³Þ‘X2¦Ä!ÅåI{Ó¬Ê1JA:ŠA}"9r‰úBöhV”æÛ0!E}:ê"…a@oè´„ hÚ,rZNŽ¡_0C+0ý#\ceõK)7¸£><£T©qÎ¥-7f³$8‡=:¨Ã1T¨”›JðïúSÍ7“;Õ4ow0Gñ"é†Ûüø†¦3C““¿§ÙîÊïL”¢ßƒ*4a”±ýú’[#Š ‚ Mk—‘›z©¸ÿ}‹Xöt4´01¦äW–Œt”rÅ>_Yvþ0ý”\G šìÈTÏMšg—\±øógߟµf^Úײt¤‚‘¹Ô3Ëp“.¿ûÿ¾™·ybÑÄo¾þFèén¶‚™Š$55 ©fìWp³¼Üp-îÐúçÖKœj•cŠÂLÃÔ׸× ¸íÜ:ECÅ+×ÞÖC*›Ô޽"#KlmŸÓöTXPZX!?UÕ‚sõRR|g·e¦/ýàÆ³“¨eÅN¥Þ²bö–oAjÿÆæšâö²yÆjcQþ2ƒ1£Þ|[\¦É5§®RìíD·4èÖ½’¤ö¦ówÆ0ÌWÈÑf–ÄÅÒƒ‚T:¤ËÓåUgUÃ@MÑ  €Q@ÕRi:ÖaŒÿwÇêþ28ΛjB[—P¼²¿Y”2ízöù5I<†:n¼Ð9ÆÖ¤ÐSfÖ‰ 3H£;‘ôØxŠ\§µuU ì­c¾Ök.r(œynó"­"¿ä|9ôÊÐ1~“Vp«5Mµš©¶i*Ø4v?»~ƒòÛ±¹<Çæ«a‘èH;K5\AÓT˜›óD¢’gÉrrr:õx¥Šeç]ÃÜ £œ^µGßGUûVG)û‡ëG9ZÁõ94÷œN/§fH9rDuä’æÒ<æêlðÙ™Ô™!JÌ:4á i˜’Å¢+•ÈóÖõä¯Ëõ!³›“~EØÉí‘ ¦Ì0Í#㜣O>xsÀ *&Š·(·Ðý[Ö·&˜IÍ( +•í¾¢Qh>„léýŠb-fË¡Íðá’j†”/?Í?íaçA ƒš¹óAVÓHö„äíÝj—šÑZ·CÁÁí`½Y‰,…ÂÂZ‰|úX¶ì_3‘Á4]ÞÕ°R?Ô…®±§utM¤$© mHçžØÁÊÕvŽÊ#´ÁŽU‰Ï 3“ëèØj3ïI¥í8œôê·¦TÓï\¾;drhÚS>ßûeTÝ£¯+šCÍðù]ÄâëOEG ~E… F³F÷B½Ž¶?‡ýsKÚÞYº°B˰¶l`Î_õy¢Z:uq?Ußw4*5éùù eØ!˜.Æ>ÝZ÷Ü>4Z¤=§>¡ŽH8„6¤îŒ;&Éä.¥:¦îcÿÇÓûbX¨ ‡Üž|)HIÊ—ÒÜLB jÆ"H‰¤MPÑ(É­º––ÑZ·CÁÁí`½Y))1\Vh(Õ¸±ÝRe©d"ùQÝCÈt³¯°Â:š Ý"ûñÒηÆÑΧjƒ;>ýEõ|JħÈÍå´¢Ûår»º‰£ÌG­q]³ă £7 L—#Q6‡i¯¶[ÄB!¯¸˜V‰1G擉ñ+uKG°¼Jy'?òÝ=›wí²*xÜ·&cWLÖU]ÝlÉÄ”­Ä ­k4ÎÍäÒDmâbùâmÌBæÂ¡´¡¤š)ÜÏ×÷}©÷®‰Ô_J&íã?'+R¾Üî;ì—Þä~•ši¢Š¦orŠˆ@îî-ýgiž”TFhÝh n·ƒÛ[LʈDú¿ûUŽf_Å£rŸAUM.l—÷޽õ†–1êU3%Ëò˲¹²³“Å7Ê/PWR¾· (è\ù””¤yTqW{q½­;±'¬¨ˆ‹£ª"4tz³³ëíÛ©;F9±«¿"xz5ÖÿݲàeïA$i¯õëIõ÷ðêá²Î, •8¼A©©fô‰sKг§!&¥ŒF£ï&£P  Râ4˜V+xð€›‘A•É4l¶ÄÉ©ÌËëù ­×#sµñÿ¨ÿ)Ò¡ ¥†V§cnÊêø îÃ`tdÅÜKîæ¿µäÎÏ[çKDˆtHgWdßäM/hÂÃ[AA“5œÜÈ306ëF[pp;¸¬· ffÅä–”äÕs’2Þ‚ eJµ¦¡ÄÚdI“ ªåYjÆá.bQЪ³oîŸNoorü{úöŽUdk„>ÃÇ_´”;xcÂìzf.!E ¹‘j&4´ åÝNŠr#ÕŒPx­ÖGÕ½€¿Zµ«p×ÔEï®üaõe„šJÓ"†ÜH5““³¹ÖG†±Ù^‘‘ææ*‹.—óŠ‹I•ök7]?ðiÈUYáiMÜ/¬Ó„ÓN§UÎa»X1<º{Ò1zµš©)qêR)b‘j†É<]%8´Z›‹¢ª¨‰ >žUP׳gC4ŒÝÐÞ¸¨¾¨@Ša´a¤”Á^+Ðr§²CL¥¦‰GéÉZ¥»Óžâ]n¤&å‹Ý¥(=irjŠŠFmÅÖe£µn‡‚ƒÛÁz³bè@C RÍ43¢uXè\¾NlÝESëËå1J´ŒQCåh{)«­º¦o p¼’+çU¶[šß¨÷©ìY/ojÂ-çy: ;ÐÔ Ì :cšÞµ|×é6ï“O>ùsîeÜ„qšêÀL]MSlkˉhJ¥\(ÌòôÔ<­!ÔmÙ õO–÷»X$LÓ]¹˜sC¹1=ÕZcï—ÕÁl‘Sg5áHÃ^°þeÍ4‚ªÕL5dŠàáÃÒÊ9 Ÿ¥câµñÑÚè8mœ/î;’>Ò÷{ÖU55}Œ ’iî|ôuRÃÈÔÜ÷愳õ3WþŠÃ¶ JJ›VÄh­ƒÛ¡ààv°ÞÜqÃŽAÓX.Ðÿ}_ºu4÷¿-¾ÝWX=qA¿õ¦ëC<Оp’ôî¦aâJÍ*º02ŠÖ/~”H¦ò”LF(É“è)¥ç®ÿxÿ»¬NªÈ‘ï!ôÌQN¶¶ÒVt;‹•]û9}¨5¦©¿ÛO»ÙoÞ.¡'¯è޼¦ŠÓ<ë#RÁ”¾éçT»äËïFçÚǯ.:’§ÉâB{š½#ÝÑžjoM³&ßZR-é½fœ¦zŸ›‘Q¯2½– )Ö§(S’UÉ1²¥éêXŠG0‰>‰ƒ½¸#”AÓmqdªñ‡C ^¨fWÁµ,µ4››HMùªß$&ª º3‘2˜j¹ú´Y±‚®VÑ4J™îÐõ"D+ÕoÔRÄÈG˜)ìõ›ÌÉFÜ!¨wúM?ä©A3e›êO•9ÈÍžûM"…qpÖqOU{ÓG¦iÓÓÐî'’¨I\‚ -S=véRfÁˆo-òWøž®ž‡æU}̰¯èRÕ=S`Ï9ªŸ”VIæ²$q1™;Þ§g(OFhké‡Ïiw;ý›6?ÿžJבNùO;ÇŒjö«ûæÙ© æ>úâ;bYgK‹×ᬲ®ê:n²Hž§w{Í4lÄöE¾äVóË¥ÚÒ"MQ¹®\¬“¯eÚ²L]¦X'Æò³Ô„RŒ«T­‚¢Ÿ´†¯¡³u4ÆìgÍ·¢ZYP½,p šƒµªÔ Å€ŠŠ=/uªú‰dŽ;ÄÎÐ÷Ö7Ñž×äd9Vœ¬Œês²Oј"‚JÔ ó ¦ˆè hãjÆÐÛ×QÅù¬ð΢…>+×( ¬µ–)$˜S( Óýû‹ÌÒ,ÅTÎÙ‘¡”kéÄÐÏô*G‘»zÿ‰/úRlh)Y™»§ï\Í`QX[Ü×ÍO]ñyæÜ•hµár¹ynîK/‹Ýtj¦¦ˆIC%uÇ=ÕÄ7%·zÒ î â릗ùú– }šäT«§Å3ˆ˜}„ë×4¤¹«¼ûYògâpqs¸Ž Í«ò-N 7ß1!;ävçý—ÿ­¥fX—›<”èJ“)bq¶y9MÆ»/W­=qzm¢héf}ÛSS1.SÛënL»ï*$æŽëNk+Ž¢ Êw® »›ù}™='ëö«cÇø"U£!_½"#­ÒÓ[ìLr£Òji"wÈ·db½óÓ<‡2//¥PX+‘L)óôl’S­¥fP>µ槩æ¶ê¶G¦‡nˆaÍâ=ˆÐ´MêŒ]BÿóqtÿênÈ5é™ÑÄÇÉ:æ¥#¼¤z¼êa¾@@uüÚQ°²q½hÑda©wª8”¯½ëcŽþªùžÂŽÓ6|…!l©Ëg룿YÌ%óXÇ-«ê>ÒÀe±› õÃÒº#´õš•(ã1ôÆKdEàx^Ïžúyh23©R©†ÃÑÏCãéù²óÐ<3ÿFÝ`LU‡˜dª/Hs­ðÚ ´A²a²fò€¶IØWµ§Õgà”ƒÝþJÄÒ-ãÅ1ŸÊG„–uþpÖ![†yi;Ǫ¯‰Y ÓÒr H‘;H^òžÐ]¯züÇHýç³}‹nÜûj­-¹ W(Ö>òþÐÛ÷Ë’…SU³ý˜úqO/\û¯GêK•£àG8ÓúV>Qµ:âãTM ©„V»ÓØ ;§ÉAÕÉÔÒ4/¥fª5M©¯/¹5‡»,ÇÖßl¤—8õ©™yI*=Õ+ØK‡tÍô ‚ 0"†¹Ûì¼›îÆ:+:;Òz$¦Ha§•™ròùGt÷T¾Uè•í˜o_¦ºpÅNdŽÙªp‰¯1x†™“£°±™nõVQ¸½ä‡iŠO:0¹èEËbq¦AhKšú‰0¢`?¹WI½‚rÍ6\vÝJ¼Õ‹è¥ë¨k> hŒ †Í q_zÇû5‚4«}ñÔö8ByÌcºÆ3\/Ø£²x†3Cï—~ÁvÕ©+­bâØZ™(§ÎhƒžQ(´} ÚBç…eÇÔÛ:æ|®qÕÇZ½,öñb"Äúª"¼?+<;‡;§yAp4€QÑÓÑšè”T‘–*K­N´nÃèAùo¯ì$[i‚gØs_uö‘jÚ·7·hY,\Z5zø=Ê_ûÞí#ý€g†\®b0^6C…Zw—À†ÒáŠC‰7M‘©­À Д|äf“áñ÷Å¥æ;v˜îßÏŽ‰QøúÚt¥™ï2;)ñl³knü‡Z++u` ‘øDikËÌË£*ªmj24^a¾Bž*â‹ëŒz!IE:kSž²ŒÆ~çýoš½Ù܆ÀÕÆ¦Ñt‹¹65Ñò 㮌PPÄbVl,ÿäIL§£ )U`ú®¬:ÂÈÜ¢e2+¼½m#Ⲫa8ÝÌ»’ ^e³:Êœ§yÉÙhtˆØ'#F 0¸Þ2®e(Lþlÿæ6}hŒ Ö;Ô‚‚Á; Lÿâ<˜\á§OŒ‹+ÉRaѶâA"0¬„ŸE7µ+( ÅƪCBŒÄ3>>ÚrÜáø>g…°,¶_q¹Å¨îG&äs=­_b—R‰NKÇÝŒ>hÀ~ÀÞë½wÉ 5»¶ƒ €qÁHN&_͘´ð<ï­¼Û†DYB>ïf©¼?aé¡_ÁQâD§WçÄK¨•sJ=B †- 5T*ùšÐµ«‰oçÏŠ>ÛÇÝ%ªg%íø,õÌdõ}-úû‘ú£ä'c΋t¾Fž!PÑå¢\»ÜÎôÎ-` "4Æåq“Ê–÷n”L7C¹ü8Î%6¡DtëòE¢®­åvҴݳ­¿‹¸ùnYë2çÓϳ”´¹¿MLüÄÒ+4´©¬+Zñjçñ&4î@~É=­£% 7¼¥KÚþæ§_ZgÒ‚´VRW±°îŸ˜“ê÷_±®QÃÃ_éøo¾ùfñâÅ­XÛ_ñüÿ‹¦Ù:¸½…©²¸µ5 7™fúk¡n•[-ªü&STTô¼/…™ÞYåóç׿͟:ÿËõw÷ÝiB+jë‘‘túÉÖr»J5(88§qÇÒ)阭ھòð±l¹ûŠîö]Çv±&ß14‚–¦ 2­{ÔsÇôûvvv¯rþÐä/‡Úc)øßÿø#VnÙ÷|¿¸Ò8#wÁfcUn‹®œ;ãpdAdž·˜XLp¹-p hà%ˆ>œÇøT.ÞÄÈ^ƒ¯\2Ï$fø¨+c7'o&a´>Ñ8:R³²0©46¯ä’lëL÷éÖLk½ÈHÈtòÓ8å/§f”ëYÁ#môoyæŒ[:ÑuƒúÇÙgwtùÙ’ii„n!ØlUÇŽ¬ãÇç©M„¥º}@&b óÄ U` ÁbµÀ9@„£fHÈåÖ×»;ÍÊÞx?Ã$äd·ýé§sHár€ªËaþ¶›˜È»Ã<}š³oŸÆÝ:-s h Aˆ¢¤5ÕLMMã‘Ãós7ÚÂ97üw|±ªÄØœ#U«>Öíj?Áß¹Á`hÛµ“ŽßbjA“4«ÝêM×Kœ‘úÝC&ÝÌé7åÊ¿£¡ <—Îô[ýL&Ã32ÈW‚ÍÖ:9‘¯mÌ9.-à3)«B¾Vcx«œh2BìlîŽÛ¹òæ‘åñ‹MÞ³§ûÞfδèhêíÛZ‚ǣѮ^Õªƒ‚ží–Ë)G:rgJw·Q̪Ö‚Ð~˜‘'it,¦Ù¡îš‡æË5äNÉБe¬ªÇ½å?‡¹ a_4(Ǖ׈2~ýó‘}&_}0|:OŸó¯)ûb$çNv;–9èRÁ¼iáŸð[z5+4Д`->½CÿIõ>ßw¬fàD˜æí·«G/c ãØ1„a ŸˆyFw·-¹ðÔ ×ã3ÿ–s–wµvbÔ )BÈæÈ¡ÚéÃFŠ™¯ôô_:}øR„Þù±ª·ÐùÂó+.oö3 ½.õ µÎ2ãЇš3ûØ›k÷ùï•\u¤¬ÿ9ýbõG¤²QBŽÆ¯|ÞB³.O5'@X¯ši1®‰®}rûSnÑôEaý—ì»5nX7jëH ˆÐ@sÑWÃ`ÿÝWæ…ß<ø|sÒÖ­aß…Z{4ÎÁÏÈÐx5ru ¥J¢Æy)9oåÈ6ÐÍfŠ£!šžþG¨A*sÛâ`9û•d@¢èôÏ) …eÓ>ê<81&ò¾Kȉv¬i­äjˆÐ@sI¥:>ÿëN“†Ýrçú¼}yØâí‹ËÊËÈt&&ä§Î™ ­Vy›mº«—ÛF?ÓS2ok^<³_á°‘á# {³Ü\au.öUŠ–Å¿t*eñ{k9Ï”éù‡zÚ´¢«!BÍÁáà"¹#`pö_•›þñòËCÿ ŠOýÔÄæâÞèœé4ý8©÷Ø Æ15éN+º¢":RÔ… 1%ÞO#ÒÓ2­ì‹»_äqoïð×îˆ[‡uÉMŽË.*q_—jøÂ‰m·Æ ÙcÏAm­“íÊL*%• ùÖ¶íOþô æÁŠKßú«~úD7oR{7¥1‚pœñß‘%›ëÀ.+_V¡Eô†öÆÅ4 ΃XÓ©vï–ß7;@œ÷iB‚,ÔÞ"ÐÆ ÙôÎ~Ü¿yÚOûL£œ í@°Ùš  ÆÑ£Ê!CªG9y·w8~]6ø›äƒÿØ2ÍiÚä°É\êóVp¼u#uq¹–ܹy9eÂŽ÷ׇvþb»>®àI*ƒ1ÌסÃÓáö¹¬‹äëèa3 O{k¦ÌvŽˆ¬TC4•ж OàK•E¡U¬KZw0ûàèÒ¡[nùé“bbeÓà×ÁÕ h 1Ì7ÃÜ»Wgo¯ãó)b1%+KÜ10ðˆfÂ?oüxñÇMy›&9Mê¨ûòY Auêìz¢N"ƚߩݳìÊú K«¥®öicÆ4¢:Bw8çðÚĵÌ:éqFH.DhÖñ›íܹ]½k}yÛÌ h mj·7žžŽÉdZ33UÏžUë5RQçIC¤!ñ[âŽùyGpûŸü‚?‚™^„C×Úw²®éT ¸ëÔ–[Ö[KhW}¿ó”ÛŸ¦fÜÍ›M«‚:±y%e—e0 Ôõuq2%!¡5Í­up;ÜÖ¡àmÏzFçY‘ Fãå¥W6^^µVŸÆ8˜ïg¾?ÙxàØõû{ìÍØûMïÉWŽº™VK͸­Ò½µÏÚö˜Vkïxâ„ËÁƒä+¹O¦4®,"•h[Ú¶®ç»^s;>uûôoD¿T«ROýºåáW‡Ý,º<)ov6¿uqJrrk^vFkÜ·ƒu(xÛ³ž“Óøšp;\1Ý«×à^;víØ´óû/ñ6úòÉiSv–íLR%e^Ó’j&åSQݰM5:•ƒíÅ‹¤ˆ¡J$H§#_É}ÛK—^JÓ”«Ë#r#¦DOéq¡Çʇ?ý|bèߦôd¦ºQhøÎï[gíu­¥w ÒD–ŸÏkÝ_\ßäÜÝ‘·wK›7H*c³n´·ƒÛÁíPð6l”2†ðLd¤…ÌÉ©‘Ìh\5e«Ê¬b¬¾Þþ™û4™–tdÚ©ïXë¥få.+¼:Ûú«T¾.t aOÇf\´Úöæ‰W¨…B‚BÁ°¢ê"‘àáÃRŸçU*R3ݑƮ¾~â^ù½.æ]Zü!àµ*C —Û¨P¯iP¡ZGt^ËN^¤úXÍRÆž‰Ž¶³±©°³·Ê/®4áá­ §ÈKÜÈ306ëF[pp;¸¬CÁÛ°uRÄ©fŠ^=7Uª$ „u’Õa··ß—>*|NÔüÄb¿ø{Š{'%'‹4EŽ4ÇvôvúWZ;!.4Ã¥z/3ÇëæÆÍȨ)hÄ:1™C‘¶([¡Î ·uŽÝ©=uð®t5ïÊÄë™?Æ iøŸª „~{¿`éÄàꬭ+ÈT3ÁÁ9­ø‹S[X>×Âh­ƒÛ¡ààv°o{Ö˜©ɇÈS82ßõTe‚6Flƒ¹õGE"#?‘‘‹‰ˆqQňZ†0ÀÆTÒ(FWS…j:GBÕaU݇Ë/^®`WH˜ò•®¡[•ZÙÛ88vÍëúNî;®9® uÕ² e¨ìYgT9 0®Æ‰>.Öu?µ··î/NuwoÍËÎh­ƒÛ¡ààv°o{ÖíìdM˜›¾ð»óõ=WV¯÷zº_­/+ %ãì!¹ª\ƒé¤¸šL!·KiYlqçn ǰ1±Ú˜ròB*Õ ç„XnG蛜dkézeó™ö6³°fT§iÝ_†mÀk‡aLSµˆIA"ý[ôÌNÁ Œajëï_÷£R{ŸR†×«œLµš1ˆ˜êþ4µ4Më‚^k5CBî¼PÓ”yz² •KGU£ Éô&T3èé>¯¦A¯ª¼îmƒ¦!?B]ëŸXÀñÜ=r32h2™šÍ–89‘j†L•“)¾)CkÙµ„‹AÓGÉPøëâ44ðzQ9p=a½Äéú¼i‚IíRêãóüAÚ/KßåíêM×Kœð×Èi¸nø¯‚4 h@Ђ 4€ A‚ Æ 5"╎XüŠ9¼"­hÝh n7ëÕ[±àp“ë­aÚ¢µ¬«TƒZÑíÑÑv­eŽÜŽ~5AþjkóÍ7‹/nÅË.<ÜèL³up{ Seqkkn2` ÞV­?1×7hrà?@Ѐ A4 h@Ђ 4€ A‚ F,hZÓ¼ÑZ·CÁÁí` nëMhš’œÜšå7Zëàv(8¸¬CÁÁí`½ M뛜""ZAX‘æI»FhÝh n·ƒÛ¡ààv°Þ|¦©äáá­ §ÜÝõyÆfÝh n·ƒu(8¸¬7ŸiŠ·7jEŒÖ:¸ nëPpp;XoBÓRÚ´"FkÜ·ƒu(8¸¬7¡i¶ À4€ A‚4 hZ—ÿR0 endstream endobj 485 0 obj <>/Filter/FlateDecode/Length 83864>> stream xÚì]xG^¹=÷$—‹ I°@\SÜB‘â´¥”)^â¥ýK(´¥¯`¥Xp,Á‰@ÜõÜïvÿ9BÑ4’“$ó>óL&³{ûÍ~3óí;ŽR…ÔK–,Y´hâ ìÝ‹ÄÆ68Ñ Y:T»=¢h¥}@×¢Ô{”£^(¾x½”þÈÂÔ–‘Áˆ:Hh ¡€€€€€€€€„ˆOhîÞu¤ø+ª¾8T;”_ªJ¯EÑØ½{Ž|ÿ+ª¾8T;”_ªJ¯EÑÖ!§½{@¬€x ·Jo°/ÕÕÕ_ªJ·høãm|‚ƒ­ÎQ›9Pzƒ}q¨v¨v(¾8T;”n;ÑXx8â@4XéPíðšڡtøâPíPz-ŠÆµq ¬t¨vøâPíP:|q¨v(½EÃeÛuÐ@@@@@@@@BáhР ìÿ¸Za¯Mž#$@Àd(¥òÇcš‰1ʾ~_Ù¦ÕpóÊ…q‡nßUñ„Þ½þ×Ú* ¢ åÎõ÷÷_=_fðq÷ødhï‰ì‹„°µÚ+‘túïȽ9Ÿ-œ4_D‡Š‚„¦þà‡Å“@þŸ®yC0ܨï§?¬ »º'5…lÆj§HcçmW¿?vR?ãþ¦kw΋šÄƒš‡¨ûXpMûå„ÑÑ"Zü•ã}~=:ñóAÿ akµh”é½+›Ð¡q±- ~Kêõ` (-’[Ö0Ê`»³P¨ˆú€cÚ·uea(J§alžK5‘¶V;BYf®>öÎÛCB øÁµ-`sAY‘´Çâ¡vgBUØ…Ñ`;ÞïØrÅo3Í$Æû~Æ($4õ.ù鹑Árùã£áÕGBØTí—OìI ïuµ1w(Ô$4 §ÿ¾Þµ?aX̪.?œ›þÖÈI¡Â{)7Úÿ°+vÙhHj ê¾^4i¹Ùxâò™A߯ X:ˆ@ÿ5Âvj7(ÒÞ¸&¾;'jÆ€=`Îô}µ¨ßOÑ|ßY UahÕ)é˜×ì&®lœÖ¢IdLþ›ÚÕQì;Þ£Ýk&Mö5£¥úH©=ûæµì‚›œY+Ñ™+ÿÒ˜,ý©OºªÈF€=4N„œÛ'M’ö™°ƒÆN`²ýqÃ¥Éåï…î§Þ:kÀ¾fÃQç¡×f~pѼ´} +f:rñ4Æðˆ ãUFB]ÙZíôÎéÎo:MÄìwá*'Hhê®X×/[ qK~üÅÉï¦VƯ؛ßoÌkP?vS;Aw»8²ÕØ]}(3ˆD.ŽÞ.C€¨Lå×Ýr²ã²£9,Ì×÷·é±tAªŒ„°µÚ! ¡©ßè;ã]ªªø• 'AåØYíM£Ú_‹j•Q¯€bÃ{tî¿#!l­ö'°kÙ¨$›¶GmŽíï%Æÿžñ|<ˆ—êÌkh4È­[ÈÅ‹ÀÇ ¨vXÚ¡‘Fš†ÏÎ"óÄÒgÊ=øD‚Ku〉Y¿ÉÌDôzàû[oj‡€€¥hdœpÈÉæè4:0A¬åþAøQ‰§ýâVùo04))ÈÛo#<^eDŽVÕ,å/E‘6m Ú! `i‡FHh¢¹AêL‰×hK—wÞA¸ÜGqfé7Ù°iÚáp Ú! `i‡FHh–¹¡Þ)³*}}Ý)ñˆ¿ÿ“†æ!@C ÄgfZÍ T;,íÐÈ@#ãpB³wo~±¨†O¨!(ýeEÜF„nÁècd‰cj4eÌAl1åLO×+8 W¡`[}kƒƒ‘FâFý·—Õ,5…RyÁÈßîYÖ[ob!åJó,ƒ/AH†5ÆÂF,„¬ôm¹ÑÂé—»=2Oð-F·ài'-Ü:\Þ"ý‘D¾842/edš áÄF¦ÒÎÈx²2A°*¦†äh™jÍ·—M4¸ôØÈÜ ‡TTXNãéô¾/›6ì7ÿÛ“ó%Q¯¾ó5‹5âèÑW_f Œ€ŠP) C|`g€}ÐÒ´:šŽB(`Øf6àH‚e0òõ”œËÇIœFY Z"H€ÏôÜÃŽLË ‚YÙ ÒˆmOÐâZ`CÀÏÙ6xÇÌ…"ƒøÀÎ`TMWºÄĬö5)0 ¦íuP}¥ÝÎ’‹« #‡œìJ6³bpªn!¥'23À¿5ä4/@\ÊYåÌŠrf9øÊ#†!ÑJ‚ŒAl“Õ²þA#Ÿ-t“©Crò…°0A<ŠìÕüËøœŠ¶ ¾I#­Š"dA-•äX+m"T¹Ü\%a¥PÀœqL±Aì¢sqÕ»ºè]„aM(ΰ™µ>7ÞËu‹4P‘†üR"jo3Ó5ÊË$D=C%›ùklÖ=‰rLñm~>ø·†œæ¥ªy »89C°< ¦ƒÚ-0Dz‘ÊJHÌ™žÍ¾¼£hs÷n02ñŒ,ЈÒÐ4:\ì  Jrº<‡“|–­’ÜHô©V þµé[[ÙÌJIêô϶ÒF­Ic5ûÞã&VhýÂÆNlfˈû)ÊÙŽÑ<°qP¥ ¹…Eì"@_‰¡“t@Äzq "0ª8 œz‰ýÎ)Érwo™ž~-(葹¡éTééYRi•lˆ¶ 8Äåy® _%Áº/¸Qz`€¹ìÊSã µÎfjfj‘r1£Íÿ‹S³EB@Ô6sqbîV¢tq ´lƦœ°ŠVI1»`p@«Ä]ë\cYãJ󂦙̪ŒL‹û÷­Fæ96( ,BDø¼yQÐ2ºLÆÝãß;ç~΂X¤:i¥“è$ŒÊñq[°Ñ̯`Ow_á~wF1ä4ÐÔC éìcÒ÷ +æû°ðz"*9 ¸„Ô¡‘1e…œÂJgÆÌ©F Œ«Î•a©i¶øí““Ëy<=ƒÁ4üŒë“Åâ¬ñ/ `㬖È( T>2‹€ß”1Ë€MLrKÿzh=À+ç¦w{ådê>ãI6c†”~’Ëú8Ðý”ˆŒ,‚%¢ÞÀ’F¿59ÿONÙ!Û“õЪWr2•ŽÔ*¡)c•åðr²øY M, h‡4’7êPÐgâ½ò3³ž02::e4úÖ‹³¥Ò—5/bƒ8DõO¦.f² /»].e–‚ö’ŸÚ8ÀojÞ1lJ¡=f3•áfQWÐwq-whH[xÒ-$4õ¦þ¥¿fê¦x3ù´§êµo¦l|øYÉd´W<ÔžjÏÈâHÐ6ªõWœ&ßÅÅU©d˜Lj «çĬ³÷këá ñ• »&MS| Ø€™¥ˆR”t¥·ÚÛ_åï§ôã˜_né¦d¸òùH’MÌÍ úÜ//]¡ ÒÁ Q?à1Js¢D§+¥úIŸª&Ö¾™Ú`3z\ŸÇ˦8ÐFòUùFGƒóRݽÿÉi þ12e,02Ùç3kþX®™ËUqƒTAȃi=…¬ÂlnöiÓ*Bå«ñ­$7l3ûÕî÷VºÕt×°XM8,% $4õ Fù1W?Ðb×ΦÌåHù êFrÅŽ»ág¤Z©¿Â?º(šgäÙüEh´±¸2ÜŒÁ¶ މ¬®ÒŒæòr3y™ Ò¾‘ï¯ô4%ÕôE<… ½~ðÊZœeša…¨(3Z¶çª†‹°ZZM™‚Ì4aZ»ÈKãUÉclgmž42Mm`d0 óÒz×¾¤½–¦Ì¸x÷x±Aªm¤lÄ´0kElŠL2K¢‹Ö™‚ §„¦aKÁ—‰u5|Ž‘_¦._¤.*(Es´yoö¬¨D¿gæÖÕ?û,4­€IÍâe}§¥ÍÏ2fu uðÁ|^í±ê–jyŽÜ{¥wö§Ù ŽsCÔm€¼.CÙ׃íͪ{nA,·Ì·.*\ Ûå¡ñ•…öÎîýüŠ: ¶™&Ø@kR©ç%ç×̦#¥¯©ÅÅx…x¥¸äÛŠ€šzãå¦Bùq땟`@ שë TB•Õ m5Œ£êÆ|ýy¬áh4­<5žÀõh¶zÇÙÑš&šoõßrQnGZǶ´¶Bô¥GÙÊ–1rÒMÒ …° BÔiœ.Õ©ÌÔZØN·˜,>fô>CèCR-©ñæø½º½AXPgZçHZ$޼ðˆ>оWè¿Ø_tL$ë!ƒZ…¨£¨0Z¶åªç‡Šðš 6Ý6ß>d«"$h( œ1&™“Ž™ýaü£;ѽ+­+}¡­:I:™;#×™¿ÁÇ  ÕB•BÔE¬ËTõtgû°_Ñ’)ã9Ó¹ÃÆÃ Ü›Þ{:k:¥7p•Š1ÏÈòÈÙ-f_Ô_ܯݿQµ±/»oV.ör{“R>Q.^).þ¾˜bÀ'Hhê&Ìòsž¡›ˆhÂ}‰%*Du–:{š<íz @4ÚÙh»¹úÖ®BèmimË&³šŽÎÑÍi·îIôôƼÿó·&‰©à½¯Õ^YK²L.púDÙRÌhäù* õ”þñÐaÃáF´Fã˜ãšÒšB}> ÁÚ3Û—nJ? =ð~Ùû]™]‡p‡ˆ°—Ø(K×NǺÈlÈ'È¡J!¡©“Ø^däÓÐ>n/:BTŽ”Ç‘q‰Tb$9Ÿá…xA¾ü0¿w阮Ÿ2ŸúJÿ•æõ:ñzRý¯4M4åý˽¿÷Î^˜MÒI¨Fˆº™‘ü#W=ï囌”ñ¸ñø>þf´f‹¹‹=0¨ÌjDML—‘²ÝšÝÓʦuguÌÌÃ^´ã\þ®Ü}ºuàÉÐ næ M]ù9Ec™À|#ST$*Óíò9þ9áBÖ|”KÄö#ú%˜ÖÖºcîƒéƒaªË…ÞÌl¦Ç:üÉù°S ¢®`c–²‡„å÷2ƒMfÄ|ÚxúoÃßAxЧœO}p¨Æ„½Ã{g{ÐNÍÎ)eSú²ûä d£ÿ½¶œä’²)2ÑjQñŠbŠž ¡©;ÈÑ“»Šú3YÿÕh’#òCä¡ËÔåÎhçÏðÏ •©íbMëDëÔžÖ>Þ¿F¿Æ ó´& ü·û ß.ôûÜÏå Ky¿r¨=ˆ:Ðp*×,Ó‚/x?…P ¦„íúí˜Çlöì@<êðà‚»¼ÏÿuÎëÛÕÛ'•NÄ4€=€†þÇgTßJohnnfu MÝ€ÚBý”«íA÷`T7%^‹hãȸ Ô…h‡¥øR8ç×vÀ¼+­kGZG@kVéWùb¾Ãéù©ÂÜÓ©üéùþ‹­„ÕÍÕPuÎ ¥‰Üš­ú¨±†¾Pbž%oƒ~ƒžÒObM ¥…BÖî¸û4Á´|sþõ–ceÇ&ò'F0"þ£;^î>ÙÄä*g‰ ¿æ"ù4àªi$§ÎÿMþÝ m©Œ‹8­­['Z§¦Ÿë?X"öù¾b“Ø”75Ïg…OÖ¢,£;\f á¼Ø¥êìÆ àü÷,=@bþ2üuÆxfsXwzw¸Î áEóš+œ›hH\«\@ŒçwÅ]ÿÕø³(ÙT™x…¸xe1É…sõl ª V°¯Äh¡Áîÿºâ1ƒÊXF.K ¦cÓGc£!›±?­éEôZÎZ®£té>:c>C!ÏŽgëBt%ÃJ¼¿÷Æ´°^@8).Uèsuæ¡^ÿ½ÞEÓÅÙêÙ*Jõ ï›ôÍØ‘ŒÈ•®+ýh~³ËgïÖì6SÿzšŠ¡™A×N'\'„J³¥‡¨1®©, róü@V•ŸA¢ø‹ü+•J‚ ‰F£¡Yq x(o_4wÔÿd_oSo³ –çï¡TÅô á/BLÁºf ÑØ½{Ž|ÇJÏÈÀkø‰ü”k,¡û?×;#Gä«ÈU'©“³ñÙƒ°A „ñäU6»…_<  §¥ûû÷pX[ŠÞ¤2˜e;Z»ÿ±þ§¥´ó´óR,)Ê›ž'8+à]­åaÁôt¬aÖµ†ldî߯µG]‘24¦7¼ÿuE$(Ì«µ«ÿÒÿõ ç“AŒA ‡î•çX#ãç×Ý!rÛ1Û}çzãžéÞ'åŸä›óŸ¿ÁØØ¨í¦ý,‚uÍ¢­vï^+ Èu”t@e¶2 à¿r? E!›ò l¬£èÙ'\ .,µ, Bƒ>Å>}f£<@eÜÜ&€ðíßOЫW¯Aø!!önBùû÷ìÑc5¿Q£v¦2<Þ~e? å¼Çxo cÌO†Ÿ¶·‘‡s-< à4ÒMRF£¶¨L\œµßþý4¬kŽ­æ—¾oŸµ{øÉÉ5í§Q›ÉYÊ÷ôlºc¾ó±úcP¤¿à~ÌèËb‘À'ˆv72={ö\À·?  211+Aøvï§ FXæ1_tå5Ö˜yój>?WO9RI˧±Ï²a]«uÑV#눮Áà`«)pˆôÀ@ p€Íôîýê»7®ˆ¿Qf"?öf=Ó1³•Ü üYØ,o´ŠÝ÷µÚÀ6SZú«ý_<3óp€Í92ÙþÒ³²ŽØÌ±cSí,Úh¼`3*ÕoÏ\j‰· a…ünü}®vîDÆÄÆxc©ЗŒ*ñ^áµ$˱ÔPzP `3ýú™T]sl5wé`3ÖÂvj›³UmÅÌÆ¼*›,ˆe»~ûyÓù÷Xï5§51fs2p€ÍètÛadŽØÌÑ£8Û2;û8p€Íœ<9ÝþÝ\,ŠìëÍnÑœñ¿òW W§ ¦ °Ç;Q„uàÉõ3WCSƒElu­EcááŽì¡r¬ôWÿºÜ’çB3ɇùäÌ™»ÔÝe–e~¨ß§Ø§U²™GÐh®8ðÅÓÒö8Pú½{{%Ú`¸VeU 6©(Õ—š/s,9_r¿¬d3`2Ýph5w¤‘IOßï8á;(c}–lIþZÿ5øN€˜âáÅÀwßî^+Òƒ‚ȆYײ‘iÔ¨¦OИÉõYÊ÷øŒç›²,YóÕóƒð 8ñÐg§|™ÍÉ52Ç(=;û¸¹Ü£ŽàcxcÆóÆ/•-=©;ù¦Âäç8ÖµZ ÷Ûxù¢…±õh¬O«.Až‹&¢ZI®L¥Rçã󣡊ê.¨àcæÇAXÐÝ‚TK*¨ùSò¹‰\ÁT„C°5G%b†ñŸÝãê¼éüÿ4ÿÉ9‚9ƒ–܉юÙîsñç»5»×*×>ZýDá”lºL°E€—âPEµX ^Óöœõñb}"²qêÞ2˲$`&6S€ÀÏ^=¨Øúwï¬6¬>`:`æ˜ófäIþ03™P9vÆ¡äìd¥qäÓƒMࣸU¿u—~×|Îü¶D[¨%ç‡7Íû+—¯*ÈŠùóeäÃL¾&Õë*ñbžY C°éJÊ¥ìâµÃºVvþÆSñkɵc±±±X,l$Õ'4Û-e-½f¹hÊ[UôV‘÷JoLa†š°tãä]'ß ä3Ÿ8ìÖ@¾Ñ|“oÉÿœû9<.»²?~ÒŠÞêÃòsÌ9•‘ªXjD¹ááĵ¸SðKàj^É‚#—N¼Ë¥Bλ:ïyä#ü# "±Ð?Ó4'MÖÀ°NO¢Aëß„p–]ÝxÚ‘¬|+ˆ×œnÛ­|E¨h.sîÆ/t_ÌŒœÉÌaº,O§†¢t¸…0„]šOéçz‡ú5%KŨ)õrÍrÀc&°&ÔV Êb1¹úøyE×EK8 µŒS¶'mÿ.,`Õé,Cðg»Úœ·‹"è0î0šÇŠ… ?lBoò°bZ…d®DßRoö„í¥šv*¼(Ê4º‘¿]ózç7¡Æ¬Y.z¥ìÊ\|®MÙ ÀÈκ&œæp˜AÎRÄýµ ¦Œ·ÅèšT­]ø>m"cb$-r±nqRlÉ£åÏ̇aœ¸—›T‘ýÕÀŽMY¶H½¨­Ù»¬wk±?Çi¶q¯tßÐE<>§3ö Ôk¯VKfíéê_»læ:2;ÎÎþZþõýð/à1Ê7”âUbžY }`!©1Ý*d`“€b]q¯Ã½Ø¨ ®gá@åØ) v*B~èãKC¨¦î<¤OµØiäy1`$}ä—†/OIÑÄkÊ×—Ã쀰)ÔÓÄí'&…tã1Îεä.Ö,îÉèùó Û÷Wž©“?½ÁªBð£(ñA“ö.6žÕÒŒÞl±xñzÕú8mœ5»ûª):ÅÛ O,†„Æ.˜ø"c ºGß•ßí×i ïÀi‚tŒ5c?Bƒ²qDW¹q/0ça8r×b?é­i­g3g¯6¼wtõÑ¢Eš ˜#¶Ãܸó]‚¼Z‰ý+ÿMµ¤~®ù|sT/z/Û Õ4WHâ VÃý(˜‰Š3÷ÿŒŒNÈßTh´,šÿ—â/imUm¥Pªâƒ Þß<"‡€…Ûb÷­Œ¿oglñÚMÙõ¾Gú.iµä£æAµ44b_ŠÏÿ\òóŽ•;²Gf›òLP'¶À™ôü=·2¾Ô¹òß»æ»ßi¾›ÌžÜžhoS¹w³uÞ¼†ýI@-ã:;âm2óëpþ±´ÂfvÕ¸án€ÓÜ6ÞþYù³Ùͬ§­¡¸ä ›!¹D6}oü¶1½îkn<6pU»U#GBµØ8¥³ ¬Êƒ*@O¶X;iì 7Üïd¿“ûð}k?^›5,‹ÔU;è­N¾úÊêVý„^Ì®:âihŒ¦ ÛŽÿ8´›ˆe펌/Š_¡]1ƒ=ã™]€k$eùUa+mГõpD¬Ë›ž¾ ñð:Èy£méã./Î1ç¬U®UwW“B’·³ÖHhl…Þ8|ë‘/ú´UaÉCO]ßiý@ßP-²5š û:/Ç‚ wŠUF‚Š;`î¢;ËýD¿—½.Ñç‹Ü)¹ÕÚªVäG‘}H ï‚žÝ ¾UÄ@@<ùÚù{ hÂ)¦ o{c:{z-ÌÖrËd* “†7è|bŒB¨Í9F-P¨Ï™Ð. ›+„…²ˆd™²Ö)×UL©à.%ÒáÀ$4µ ŠB&î<Õ­‘—‡Gî¨Ó£¶vÙÚÓ«§ý“q+CûîÍM ²3M3ñNƒžºÑÙRLŸXG4Z_Lnì°éØb†øHß#Ù-³g»Í.ZõŸÍ)ÉHAÜ["÷­>Šs™;¯ß[ñºu°érÉåÿÉ^ßÜmsZ;ˆ>”clé·ŽDZ“EDiü:Ìÿ£dEÿPi»0<6Ê^(^˜nJ_K[+ï%^)¦ °µ M­â«ÓIÅj]–ê·Ï¾½3fgi‡$£Y {]N¥û¥Iƒ^TE§Ô #ß~ßtïû0^„C7ƒáü}hÚiÆgWœTTwkÊô&Fމ©.At&ó;ÛŽÿ0¤«˜ÍL*KpxÀ4ÁÆžÞvjD½!™ÄƒŸ„†èç´;…Ìü­­×(wû-ûœf‘xÑ=Ó½ÕŸ™¼L‹ `^@BSk8––»6áÎ=YS&íî¾»­ÄNû‹Ëw»Ên°Ÿ‘à’ÝÕ`BÑr-FÑ ë¶vöEaQ˜®Ü« »_îuê´ãû6Ø4öÞ{‘ÖÈ›ûÞ4dþí6ôÄ]ê>Èí¼çc Lˆô–¼Þ,èVÅ-Àf~éüK$£¯MjÖœ’«U j€È¢ßíÝdb˜LžååÅÅÀ§›ìmdIQx^»-ƒÈì ö÷œf±xqŠéÂ7ï|S¾¥\“—RBBSÈ–©&ì<5¿¿û¬«7uÞím7ÑT6r}à3œü "Á%{*ð KAQ•uÅ4ª|.¶g„„ò/!ÿN“z- Dú»:E¹¥cô]CwÉšÈ&¬œ@jÿe‚°™B˜øÄ@4x$dþy-mÕà.yš¼þ‡ûÕö«XÿXÉÂCŒMôz†Ó€A$ÖØhÏ·(*j—œìªTÒÌfà·ONö/¶«‘QKŠûêø §)¸˜"‰pìÛ 8Íñ±ÈÝ_íÎ|3ó_­ $4/­É<â·#ãÚ —$¿»¦ýš®]í)]ÔB›øNÆ“œ¦’Í€HpÉžlEe$J’þå |1öä4,—ü!ò§8 ü¯ø8ˆ hjq’Ò¦±÷½¹/% eÚÿ¦U¹5}Å¢UÑÀ¡7[ÞÙv|åë]ÂØïP¿Iá“F7m;q’(ÓíÉùOršJ6"Á%{²w¹"bQ ŸPC>Ìxåßâz §8ø&G# ¼£W~q÷¢K£­©1Ù3gÿ·h7· ¶ê$áf TĶiÏÏ[‰0×§5"DBS ¸Úêh6^Há:š‹ F%½M4žÂ:ƒ•f¡áˆøiq=˜F¦P-«ÄÀ©E"•ȳÜS¬ÛÄâ{+v H6á$§Qwðo«XÞââþm´È)qxnökÊ_ü#½†ÚHºýëÚ#‰¬æ72ûöÙj·™´ÌN<>گˇûWÅëÎ/wIˆÛO{F4‹5ÂFÒ â¡‘Ù’­J´(ª02ôÚk? „¦Dhr«©!¢l×ò ³ ç*4`ô¬ë!:¾–{~__ž–ç&w“È%À¹Ê]¥2)ËÀ²iF›pJ`ˆ³Ò¡ßåØ>f,oÅû#§cAEÆŠRCé=ýÊ@¶&[cÖøqü|Ø>¾lßpA8p¡üÐG?5œŽËûørʆÖí¯*Ê¿ÉLà%1fLõغu«CÊ[PÐ,½~û¿]ez#s/Ï]Ș°<éd«¡Ó™X,¥·wYp0…×Â,`&sxl¬½_ù¡ÄµˆýE;‘Á°ý6zø®l™'Ûˆ ÖRnøÊõ+~âÉ«$9ˆÎζɦҪÛü6[B*‚Ô&¦™KãÒxM•OÞàã3µ{÷W_hl °3ÉòäÛ²Ûww3U™À¶xs¼¥,©'ÛÓ[å-–¹‘™4&còé| µhLsB¼Ü{µÂËÍ/·H_t[»@WP¢/ÉÓæ‰è¢^H˜ ¬1¯q? X˜Z9P/ñï"ÆLá{ֹ쒘æ4"cÈLîš5kRÞZµZ"œ® xÑÁŸD]“º†ÞÚkÈŠ®v®éÅÕ†‘i “›¥uè`zÀH,òsšÂý²£j»Ãl_˜Íøhk¹ ÄüfÙ¦*ðïóœæQn(O(M8_rðàx¯¹¨ySaÓîÝý¹þÀûòÌOŒFmbâæHI:ý).b0¨Ìæ«QÁ#ã‹ÜÛû•>/KkÑæhr³ÉÔd^“]û-ë·4Uš„!v'ZÝÚ¥u Q‹—2@€ÍL¼œðKëv]ûywE¼ó6j—çŸ;ÐÁiË•4Òå³íÝ—vøm£)ÆdÓ5×ÔTNiiNûö$W6A<… µñP¾òãVÔrÅÚ¥.K]qûíËPÉfnÅfµ9à}Áõ{lðïóœæešIñÅñÀ-: JSQÓ&Â&}½ûÎn:;TúTÝ×j‰M›Ì.=(îSFU©h7M=ßâ^pkTòä% ¡§IU¥¦(S.”]ر!]Þ\ؼ­KÛ¶®m£ÄQ¯ÖvzÄf"_—¶ Ýß/:3c%šè¯v’B2Ô}hnYîòÔå  ð4nHhªxgƒA’™™Ú±£‰ñp¸jW±Q&JÉgmIè\Úš23–¶J6“׳<ä‚Kæ²LkWP¤°™—â4³æxáñsÅçâKâó4ymÝÚvtø°É‡-Ä-@§úßffÆçç'úùu¸sgoxx,ƒÁý‡Í¨AŒO4A°ÿí·lœÊîQŒ…²di¬ µ+WæÝ˜ àRÀusïíMCi/Èf*cV¼Ý.õÓøëçgXxÒ@gœ+çrï^c=ÿrø´–ñ›“_c’ÖdUTˆïß/kÜšˆG0SÔª»%£‚XkÔ‹Þæ¿@Ø™ÍúyIZShf›ÿ¾§u˜š=9{âòâ0ë$íÔEÚe~‹ùÜj߈ͶDGã{öX zÄi›Á÷îµ´n ®>ÿ ÐÎôaû×ݽû£Ô•ò+Ë/®L]yS~³© ioÞ}=ûúqü^ÍX? :mF‹EÚÄ%3ƒÌƒÝiAÅÎPT¦†O­ž½íضƒGÀŠ Í³à—•©\\±™Ë s’!Çà½m6“Î«à••É¼¼•6ê>#eLA䯼éyöù`•œ¹Ç@ª%4Eº¢Cù‡€Y¹Xz±µkë×<^8º™¨޾hß`3Û·>| .àߤ¤­B¡/“É×ë•ry¶Oko益z :ˆ\¬wl%ÓJ¬HL(KXtkQ¦:К÷˜îÒ*Ú¦‰©¥O²™JÌm;haÒoKµã²h rs M5Ê»§žpñÛŒ…VÆCBñ$veÉE ücCs¼y Û®ÛFãY\@\<ø$/‹wÜýÊÈJNƒgr‘#4$Ež):ówÎßûr÷ë{¨Ç¡ ^Ћ'ƒŒ¶Ú–-¤¯/" – Ø õ¢F´ ºHºÂFÒx®ôÜÁ‚ƒýÏöw¡»ôñì3Ø{p0/¸ú'”]Ô¸~Ï©d3•h.¹¶öý]RpKdrBC Ä¦ §bSƒ/G¶‰„ušg{hŒ¬‡“ËXy,¯fs¯_ÞÄÆù¢¾F¶žÐë˜6É0¥ßr?Y™.X÷d¼µoæ_Ø `  yô[ÆoÉŠäî݉ÙÔa—x•Þ×ýûghµå7ö{2²E‹‘;NoÔ¨[5}3/ÓYÒ¸Ã?.Ñ—œ,>y¼èøÂ› #į{¿ÞϳŸà?ºyö¬–Uä†ÿ5áµN«ÿºªA£8NwÜ íAá!䜲ˆ÷}O®ñ¿õA¦õdB§ƒ¶â²ÕƸ¹4·õ‘‡§d5Ã(ÔÄbA[Q E­L.}-¨ø˜~ß·nßV?ðj#RŒ FI»’—úÕŠ?§þ¼?w_ï¾:nˆr‰ª…¤°Ùdxx-¾†bQâ(àæ7™¢øÄïY¿/º¹h€×€ Až ¯LœXÞ+jÒΓïqtÔY,LXxØ„ýš®¯fbðQHhþÒÕÕ3%…Ð| ÿeø/a6ÀÚŒÖëyååùµZ»^ ¬{,Ñ1Qæg™ÕodF̧u¿-<ôµ‰4 ·4b©³vHà1€Íäç'ÚИÀܧ4)A»jUêªy7æ 7Ú´£ê÷’Ш±®äo娉ÅՙаÂÇÇ55µ2ìn`{鹉‚’h¹;ˆ‡¶¢»³L†ò4þãLáL{N~¾û}säPØ‹~­oËn~óó¤ò¤I¡“–µZæÂpq~=ƒFQOiOàŠôEÛ³·;?,B1½ñtÀuþó·Ý=¼qÓ«SëÓð¹~ßLÒõ–âRÇX?æ}Ø;õÝÔjî)D ·ãÛA;jèà{Ñõs¯@kÞ xk˜Ï°Ui«ºœè21hâ´iU®¨èÇÔ¬×BiFæ,M&~ÚÝ7$gs›|ug²ÿdÄ:]Aëvö¬õ¾°°^é\O¸ïßë­®ö=<9Áë£&ÔsgÉ%ϧVeË)ù†5ü:‚>âCæ‡ “Í®gi)Ç“<\¯7W–+ Ûsiþ—•—Ì\.®Õ6ðz×P !'üñ?<åð%Æ¥QØ(gHMFóXï‘?)ÿÑ—Í—çëæáA X <0øU¨n¤Û$ý¤Ž¦Ž¿2ÝKßkBL­ØT4‡œÆädsi¢‰h8êÔÐ`ÝbQóà¨j ®&´ø½³Ik¦u¥ˆ7Û}£Eºœî~Þ=¯wÞó—Na§~ÇÓòæË i¸Ëñ\.k£×Îk2o™¬ÿúŒõO^òÀ-Í ã=Ûቴ0™4ÍÃ#ÐIo²Qã)ê‚cÊãÖŠZma³x½kÅ5£?ävÏ]ã»f,6–ƒ8Á€(‰xýìõèˆ3bÞdÜ´Ë´ksÖëÄë8Of~!D™£>Ô}¨FÕß³¾ÏÃòz HW²£Â¹Ju8žkÉURJ˜_ •ãJ4Žss×õî)é©wøïX¿:Z-ˆ×Jí=)Øû°wq‡b£ÐøÔ×±ü‰ÿy»<Ë2«·J²¢¿gÿå. ;rvìíÒc{³º0ty"ÝL86yzOOfQþOßëîÚ·¿/\£Vx½GCo7Bã½ÝÛÄ7­é±& mŽ6w†$=yÄŒ’}¡ÿBA)–2—bЦ¼8g´atwS÷uÌu§ˆSÃÄ–23rĉvŽ@„hNkžhJ„™ÕpZҲƽ_än§¾ñÅxÁxÆüÆ#!¡"4ÔÂ°ë„ f)S|C\нàÉH ¢YM[ ü™æ™"J³ìÜñ€ý÷sHÎ/n¿çÐQª/SsPÏ1:tà ”+eX˜Û™3•£K )Kšu¢U´øáÎRex8ܦþ/Û_sS¸qŸÆÝ¤n.Å—:C’ž<â Í’¶Ú°º;Ñ}1 áLÄ«u´2· °üÉø3™•ü†dÌúB‘¶bW7ø„ò¢Î§Ic”û…eú‰Ÿ©­äµ¦·Ž7Æw£wƒ9Õp i,øE°cè©|_Lh/±‹‹e¡¡ò;§ÄwŸoaL¡™ýx r*[¯Ž "XÀœztŒÞGÑÇ×èû»ËïäBôÖ, ¢™œá<„Êýf<ÒK¥fÇU£Ù|Ïol«‡½•í|Æawï:R¼­¥³rX^»¼îO¾¿…¾e86œ‰"Nw™s¹2¦S{ÓD/´T7%ÀË«‡8Ma¿~:OOP®€ï:bd0ùîùßêH^Ø vïž#mM¥ÓÔ´ÀŸsGç!¢H4òY‹ÃnaÿW®<âÀÜ®ÙaÓáíÆíŸ0?iÛ;ÙÙŽ´5ùù¶š¹HaOSÏa†aû9›xœÝP†ÉŸ>†E(¬‚²ÊKÌûóaÜElß–²ÆU~~viâó­Éøî÷ÍëG—ÿ¡E«ðU=Éž]È.6•ž•EÔ#ãeò_6>‰tHpˆDÈGç!T³˜Òݽ£^ÐÂdj³>/mÒË¢ ú2w­ÁàÛŒuªÁÞ½ V@CeÜÜ&€ðíÙO#<-dñ5ïvÛ¨šO^_&Øîyۙʜ<ÉàÛ¿ŸX™ ¬‹Bo£~€PKè4ý´löE‘÷ïëÊHýÛ#µ šÀwqylqÅ) Ð;‘ÁÔ¿ÇÔ·¦…u`M¾dØÃd§Ñš×³ºæœ¢)B„«…½{DK§÷ã|@’(Ê®[¸òù‘>>SA ¸|K.(iWRŸ‡æý@ûa 9°=iÃÑ @eŽ·ÖnàÛ¿Ÿ™„ ¿VúiÁ[eoUÐ*vŠwZK ÂÀFÉKFfUT¦S«VK@øžžÝíùÖ<Ÿã¾ôœæÌ-ý…¢«ýûiœÄÈX Ml,bÿS ‚ƒ­rm']ºOŠZЂÁÛÉí1XŒ‘•ßíSåmv£2È?G¿Qü£ËåTù'ìåÔa«ÇíOež&U;H!(b¬alæ!]µCõð(¾òòøgn£“”–†US+¢BOÌç®ùn=«kN.ÚþÒñ2œ¿…ÿó”ŸÛ°Úv¦2Oõ¸h-óåÀW ŠŸðŸúYúEö‘n*ó$j‹Ê<ÎV,Ì$™ÛÅÛ¹¸¡šóòó9ê­—…Ó[ ?dïi°FìÆ°…tfÓw«oæ¤L=Oÿ'ùç(lí_siµ7ìö¦îº< ßµû®˜*žÍœšÒJ)ik@ÊN$Aô$Û&º®:h°®Y•ËŸ¥°©»Ê¬ú˜ÚB4ÑÔ;ì9°¦×?#Ss]#Lšrœv|4o´µ¢÷òÖ(‰ºí°ä °t Ct?â?¶#ÛÙt¤éù~šzfd0$ijðþpù£%Cùoç!ŸsÔ[³p|–û´½šÍyZeÃ42õmÌ€üP0¸@ë¯=C‘¢ÒpÔñ‡ªWq°üíå…Táæx =ÑÍÜiqÐIÁÚs–¬ç¯69sÊÍh©>¦¶EXÏ@¨< ¢^‚}‚ɰUV á`Ž<-N’ 1ˆ ŠP… 1ýJû5„ éAö€TsN3P>ÐÕäú§Ëï}X2'9áIô’´Â#?º÷#Õ@3¨>Bü6ùi5åËA£ä yp6Äቪ<â`õ‡«Ó±ô9Œ9 „í‚ÑjÖ_;fgc"òìÐò.ÝJéxõ1µ̃²Ó-é0Gê%𠜿‰|Æñ"²¨?§¿#ͺ ó>ì]Ù=³ßΣxC,C`Õ Pí«è+´/¸îlFèá<„g°,`r ýüoY·!¡©Û“ÐËè¹£sAø0y¸9ÚÜ ñrpšq°{ìî³™³™(Z‡ +£·¹ù&–æÀdDÑð Êú ÁZ¢¯b-{íxþxêÈ=K=N{¨üUj_õ)ìT>š?Ê2 æNírš²$BêÜw:ÃyÏ~é.Ä#¶ÊÖh -kê¡á¦r%G%™“2)%Cdg©³±X¬ý“A3„¹¹®÷ï„]÷»&y'­k¶ncåA[à@ô%‚ZÊÞþþGIéé Q§N5OHðÊÌÄHûÐEDÁƒ*ë%Xñ,¼ßÑo‡—D1£˜š–æqÒ#g`Nšv?>Ñ2Žq×:p*ZF”xJ÷8ü<„çñŽt8—#›w'ޤÖÐS=!4ô ºÿ:ÿ¬w³Œbët×½äÞÎhg!"´s2itæ ·´7™€¶ë‚ñÚÕů/žÎœî޹C+àpŒ¡ûŒºÔ~Ç‘ûÌŒ¢˜: 4¯]Ã,û$ ÔQº²æE½2£ Lð« oFÞíŽ ‚ ŽMŒçqÏŠ’‚-ø–·ÌoÁsšl‚"FVŒ,a'³Dñg ,§J ¥}ìõA1÷¯?ïCBSÇ`=Lû§€’ž%êÆÖ¥zùHþ-êV¬ýÙŒ °0½sç¼V­ŠÃ C£+nš6é»ñÊ®AX¬ÿÎììñe´ç[}}5ƒ¯ªŒä)99v*« Gê? ´1Ú’­™­½iÞL ]Nw?ïžÕ'k¾®Ù#˜ †¹c;°IöèòÑ ñ±kDVõç!Øm8mٮǥ+tÐÔ%øüîct5–ôx¸æ>r_o¬÷3Ç6Ùœ ®ééÙ­[›þ9ïÔ}ƒû·¿ áµy‹ ®ÂÊï p-*ÂQd¸Ê¥÷åf³Z_Îç<ÜÇ¥¨Èni€£Nõ ¬ó,"›Èž{Hsh$o¤cã}Ø»¸CñnñnÊÅÖ‡@ð-ü¡²!ˆçï{,ÒÉÒ6Éý]Brôó¤ ÙPžê<¡q9çÂÉàd¿•]y¶c>’ŸN¥wE»Ú9Ü’µ››ùŸ³Z„§…;ýw{b¿©qu喖šï 0K&†¼Y.íŸÜhN›+šõbº^o·4„Ó‹,ErR³£>P%Æÿ…/Ÿ&ßaØÑ•ÕÕwu`b˜¥Lñ ñÉÞ'“Ф‘–‘0wì?£_Œº“Âsã“s}O›²š†±qñÅõÉ… ¥>ÖéÔÓïi•5•†ÐŒaÇï%D50ýÃ882!ßÏG͹,±rM#Ó~ýy8‚GWÍpÔ©>@°V ë¢ËÎ?­;ýï Ç&ÆwŸï½^÷6³7¶Œæ ˜;vC”&*ØäqFüwé\ŸÔ nÊ9å—Ü,×4„Œ¨Ã„Æ\jvù*#glŽ^ú.!EÉT²ý»g¬‰a0u¨ÒHR«2˶´ÿvœ>ŽÝI›Ãåeñ¾ù>’ŠlL5†¹cg RôáÒe°.;Uª‚A­8-£'~™”£5“õ>ê*¡¡,Tƈ MWEKţȃäÁîXw‡ì\§–H¸¥¥4½~Sކ”üE4‹À­g¦–âÕnn°Â; }}U‚Ç_è@hÊ@ ˆ·g2ZÐZÜ·Ü×RZ˜#uØtª0ÁZ|š<Ë»¬¿<˜3رéñÝï»íÍm%Xɢ;öŽàoÊË…ñ§Qçš`0Þuü%ÓþæîØê[ùÐ8)ò?ÉG T9òqƒ»)½EÝê†vsHzÌ FY£F†SÒW,¬{£Ö¬½Þ÷Êÿhn „cAâxjË–ùz‹DQ7ÒÁ‰³‘ž Þ®-{”J ½nºs¤îB°N ï 7†ÿPýËecŽÜ1V"0è ›C7²Œ_V˜;Бõ;çºSŽ'Už„gW^W¾ûéåêó… Hhœ²]2ù_ò€ßìñvF‡ÈCݰn,ÄaûÜðò_Og\ÿ\”ÕÕ/9Ó'11èÌ…—WY\³íLœá¹Ù®ÝÕnÝ€ßkšLܳ2àZ§: æe&‘B(Ç* Ì7 7{Ðò {fù»Ë[R-})_˜;D{cˆ›.h ïˆS¥j´Ëèê¸-ÅßßÌ—ÌÐØ,þ¹¸oäl¥Hã7»ö·Ÿ¸ñꛩoöRÐ\o.®FÔITR ã¨Iê‡tUIôÍÖ¬~ü–‚P¹»ßïÚ²'Gˆ%$Oµ¿ÜH"ò¦ù¦ 1Á,¨{FS ~²6QLj·zw_N_ÇiârÝåšßµ›.7û[úÃÜq8ƨ_S1 N0î:O’Ühn¸’‘#½}EßÝȃ„ÆÞøañdêûéýØO‡²gÛ¶Ÿ3E«OG·ZœøS‡'/¡Î´B[q®£¼)Gã"Ì,£¥ f —{{—5j|8Òäü¶gaYfÄÞ­>Ê÷Å}ï˜îÀ,¨sà¯çëÛêM–Š}‚c»gP•’.ºü ò xð­3€ƒÐz•½ <¬´”»—”xçåŸ09¸é2R<òoÙßo Š´ÆC9Ð8¤EýæUù–sR×|—·\ž¼¾F§ÉÓ=°ŽJ[|¹!]«/ý9Ž1ÎÎúAÔLŠéAz¤ã8;šˆ†£NuŒDã6Cù¦ÒÚÄÒì‰aÇð0{ŸÑF.Ò¬,à{Æ 6÷Ü,%¤Mɦ0wœQ”KóÜ&Gh;…2Íl~äµk€Ù80IÞtï–ì–GTqóZù®½ShM½Ô"bQ ŸP ŠÈ£ÈÞ­½1cø•ynI߀$ó'‚þ½Þò€x7· ñúm¾ÚVÍÅ ì¬; ø¹šŠmù»:†W m»¿³›ô“'yÔå… n4«ØN­-¦ä}y/ôL&sxmÉí@DRÞÁ†¾p»Âvuí?%Ú_´}ŒÌ µ¦È‡ë†PEøãÝŠü-ôÖ³ü¸ö­.×IÒǦ¢}ž~¼(õ¢èÞe­¤­YÄ'”rê±=Ÿþýû-7¼ögÏ?îÈÍl$ݪՒWþ9È£×*¤Ý=>?Ø»ë0ÑûÖ|Ô©¢þjÌ “…´ùÏŸ+]mñR± Ñgåýº¹~7ØG²ìJƲCPu¸‘yR\ÍEÓbkv"õ’%KfΜi£WýéÔ^Õoxª8 ã_üö3ÿvŸÑ¥yéݶìx{ðh*A?çŸ?ZW´Ž¿3ÇžÙЩÓ7@ôâe_´Y·p`à÷ç^|Í›c§…þû÷cæ˜6PìbcŠV©TµøLAyÇ©—¦ÆÄ,zyôè”Z›·ž&Õ¾Ð.8={®éÝÛÞgh<”¸É`8h™O?ýÔQß¶¸8Ú©S3*ÃmN¶I—"—Ê×#§Ë®—} é­;ßÚNt·n+€è¥K—>.0W®`¼4ó’¡×:¼.û^6ëí ïaíG ï[¢jù,ÞS§øÝº)ù|~Ã429¯z¾ªÓq¯VO15ø!άöm]™Ö ɰmü·oW‡ )Vu+W®]ó½pác½šPÊ\W<°…2Bir]unY4®~æ†öí—h×s‹ûÅ®’c½8êÆ“)Ç$ŸIŸß7ev/> òyîÖXOH.dêp]Æ1so§ì>åë~U¿þƒ¦xs¼ˆ:ˆ–â–…ºBàì/Ú_éŸ)È„YP' Í•zey%uLa3j¾!ºUeÏ Z-~õªyРJ6CÊÉ„Ý ‚®Lï»pæ‘3€–möñ¡Øì=ÝÉŽo&Ú-´¯¥-í+ï_J)miûx-´¥…ÒÂkËZ  ÙC‡$¶ã¬¶ãM–my·öýÞûEÆvlÙñ"Ý‘ãù¢ßÍht­3š33÷›3gÎØ°š"¬LF|±&ž¥y¦ïgOÊÃúpI«••!>ck¾yþi•ÿ ¹¹¤ÒšcŒâzªüµ8­ûú=ˆ†æWÍf¬}A Óbiüß¼mèmŸ¹ÞΰgˆX¾—ö½€xöâΤé¢ý€—õ~9û˸Ok”êJŸ¨|‚åX’à›â§[Ò•Ñ®h¬…ˆ…¶U›\Ÿüñ—?îŸÌÈ $G&:y.Ÿ”]ýaõs¸rGþË/Îÿ Eø ՄŦ¥aME|))âcÇH»=À]ÖݿÞúËž¿|oÙ´ÁàZ¶ mñ²ìY4:„Zv=eú‡/6“t%×ɦ§ˆ°Ð|üýK'·9f¢ü7ãº7t„$¸Yl¿óÿf[fó_àýlT¶B›OØž.ú™…Ï×—ÕnB'ÑÁWeo%ÿ¢ÓÍéØ&’A¸Ø%{—|¾ês¨Ð¯Šªš×7ÿ’pii¤^OØlõ=–÷›¶'È•ëÖùKhµÂ|šÈ'‘xŠŠ$Ÿ|Ò¿ºDƒ§æ?õªýÓÇo»‹‹Çöæå‘OYŠÊUå0-%ص”y§Oí¹^aAh´K•äw,Ã8Í©W[ä¿q9¿!¤ ‚þÕyÓy Ûâà;Ô÷NÖÎ Î.­VTkÄš5‰kp¾PªCãF“`O° ¬6^/ˆP¨ÞlíÒuµdôÊj“¶Í²ÌBð¤”J™… éíÛŸÝyDª;ðã‚ÿ†S)Èoè>‚ùðS¬¬»¨È—•%{çÉž=â'òm—¿vqöOœ=……‘P¼kA¬ÎI9a:›t%žƒ>ÕõQóAhݑȾp§9ùN«â‡÷­‚¢ŸÊWÞhxc•ä~ž­#=œà0«¾…ìPĉè?›ÿ3Ü{¯¬Ñ­ABh`Nµ¦6*±‘&a?f—ë;µb0þáÙ¨³ù¦|šE³XÏ,XP­åÊ_Šc¼›åô΂×_gssa>VV¤qÛ½÷úRS9‘^¿ñµ?”4”U•EBÙ$Œ$ÇžsFÑ8îjÚÜĉØë!Ìt¤8å4ð%û–Cü3m´û=¬g›~[©ä«|Ò ˆYÍ Ò¤!¼Ÿ9ß’1²U «p×½>°$vÉ9Ó9‹×¿h¼ê™`¬á!ƒé)qÿb“ð]T]œkš‹°T?èò•ÝØùÿR¾ Db6=Ýû•¯`6™à$on.d6ð*MÒü7ýßOŸ{šã¸H([‘¹¨JYÅà4!àn¦úv3j'GN÷: à4ÂoY¥ØèhzÖŽ´1Œ/Ÿ¶}š«Ì§B~†häÔ¯1‰Ï3I¯³ÑÃüzö³Qñ„g6aç·Íþ«%=Kp§½n ¦Ä7ÄÜp¸ý0ÿ¢“mÉ’N7åÆZˆ(´ÿ´]2_â¼a0`]­²6Χö¨Qé`}[µ£L!¥oZò0³p!›ŸWš¦ 6oÝL²äö¶GBa´­Ò§¼,»Ü?‘ž|Ò¹‡™ö O‘ÈÈް}KHªÆ*Û»MïÞ›~oÈE3œè ÇÜL¥Œs€hû-m×™ÕdL×Ëêe„:Ù™Œ{éõ„5º5ÚlÞ¦Y:É–Ô¤lÂ*ˆØOØMï˜ÕV¦sQç¸÷Ïøxz_¹:ñèwó¾‹7"L;$ñ_³ÿëÖ?øz}‘PžbKñå™·Ë)k/Gê¨Æ„&48¹­•üŽÅó¢â;[ÎsÏÚ‚î{ Àásl?¸))ô‡ÜR„ë6ÒX 0ù¤Ëúý‘]gü£ (*¿Uö}ÜE¯3”êJ÷¶íE":°y« BÀ¹8ÃC†Äçé˜A_™Q¶¥ÚRQ•꣋MJoeÛ·¦nÅ:šŽX5U”$êݼ …ɶgw ;Í´¹ÿÙ¸´éïõG &ëô­áH!46þ \tGby’y˜ð0ìiÛ³8f±ZNÃ/*IáWíP×på°8®Ý ¾÷Ïë ³T³XŽ­³Öñ/:Õ’Ú*oõ‘>¬…H@ûÏÛÅsĪ­WYà/©.åYòP™F|,÷ó}å ©'Î}˜&h¬£iŠÇ—>þçø?;ËÈKBqTž-ïœâÜ@Ná½5©èkoï ?ŸÉ ":ÆP6ȉ“mANs%=ìþ lIÙÖ"å´µ„å?H?ƒp |t:êt±©˜JÆcÊuˆ@Èà,EÏrÅŒ8ÆÓ"oI³¤a- …³ÂÙûzonyîÐL–`«UÕ[õÈL#oTÔÆF¹*,‡þ™ñÖÑôÅâÄÅéêô7ß~ó¡Â‡…¸0s­s?ŒÿpißÒš~[òüß57üñÈ™ïÞ8êóê g¾¹£üX·;Y«{|ëúo¤û½¸¾þÔK¯Z½Jîø£%QH~QD<•;ŽY´CØÌPNÓqÔ®Îw1.øÈy~Áóá* *8í`ÿ2a#¾p¹ê|h¥­‰aCÇÜ3¯K”êJßjxë9ßà_t`Õ ÞPsñì·vVïq'ÅÅ?~ûÚ‡Òà¸Ìí>\ÆÜG¾¼°­íCãî[µTÖÿÌi–5+½Jžoô¼Ìÿ®Z¾¸rì~•P…u7­ñÃ¥?|Øùð]¿KùmI´­ˆ5KšSý ©$AüãÞu%|w]nJž6xøòŸžqþúÁ/-Œ¢œÚó«{¿ñËþSÑÿöô7TÐþ¢ˆXrºåù¼‘f˜§¹å÷yÃ2÷¶í-ÖG‹Â*ž8Ééül†´‘Äp׈óÊó¹¶\+ÀÝòºÄÊø•e]enÁ†£tsz“²‰Ö?xªÊñ«î¶=óÀ+Ë$ßÿ»?‘Ûi¨yY–¼ î½·×MÝqçËçn¾¨º˜gÎCUÔ—N\(JVìë|ÿ‘ÜG°â¦; U…9±9ÿ€5²È S`)8¯8?4'3FõË›—|å­=^&xñÞ½oÉ 1H}„4)Uh"ªn§ß¾ó Þ–|[˜¾ÜËIpt'õ“ü;&ùŸ¬vÀu\9”îœêÜ<Ó<Ü'¯WD £rU¹Ÿw}οh…W!÷Ê2#Ö?ø×½7,Ö\—)R*÷OØÚØ5‡é¼“EbÙ}«S¶ž~ åj–5ç˜s”Óäôü©ìBñ¬æ%±K’¤IXq×Êèõ[_·þ ½ûmž-¯NZç&¯šÂ=´xŽV!}fïÉÑþêG?ÿ õÃWÐõׇd>þì+½TøâîOM^LhÆ8uÞkÜ»)yS˜¾_@Ø@¯Ù„=Ÿp ¸Î@4È>EŒ'wÈëþÍÛ(NÞU'aG<þÌß„¿¼v{×_¾¾ˆór† º_ë À±/m«_^ÚïFP«¬Mµ§Š…Rýý±s›òR?j{óÁì±Ê®¬ˆY!ŒññD|*¤„•¤9ÓªåWíÖ&ð·»×üµìüɿޠõìOñ=ûÈGµ÷?÷‰÷ŠMùoO³ûß´üüþ¤9îüÃ!d„æâE”µY_?±1¢¬³,_•# ¥HKÛ(?UH4YíêhÎXr*;ufgUg Ì!}éÊ0h•ŽPúxÚ[©®tŸq_8¤ggoû† sFø6o×ÖÒ3³½UW:mûŸ'¾îþõ×?¼9î«ØmüM'­££ï€{õýmÛ¢l_Ö¿®}Iu)ß”?9é™™·L¥ð6@ýãtÍÍó8«ÏºR»2¬£+dB‚¶¶qm¿}0ýÁ7î}Ãö¤s…r•95õ¦‰þÉëœsòsÃ2ãÒ¶®¼ÿÍOžà[/IZ¸vI©×®¯ô0ƒsþù½kVÚ-—¼“—/£lvÍÍërðIS_*éÉÉ«ìÚ®›v,ÆiÍ)_ÝQ,ÐC”£MÒ–c Ù¹®%¡A«t„Òõzá5ïY YÐloîtu†Þ“¾nì¢]ÑGt‹»ÃñÛ¨™ÙÞêëDzCÃqyÍâU)úž®»“_JóÂ;ï¼äËÿüÎ9?ëdšÌBs²c’Q4SRVO¥ðŸQ_]û‘ñ­¯f~•$&fPŸè芙 £c\®¾[¶è…úºuŽ!”ž˜¸r¢’îLïôYèá§¾l-Ⱥ!U÷øŽ£C3]ŽÆo¸lt1^kÇ‘½¤HW(XªkìÿÚwH¦Ìh4îï!Û·#à³z½èàA¿âᵡa¼šµ kCAeJ—/ÿ-L,»ïûŸßoÊiØæ¤­;ýcS…4¥yèŸÔ(j2lnªîÀÊ|ü±¿Úá•; Ôúö+¡·‘(¡tHeðÇ}†×±g®A­Œ_y°ý`h©Ìºu† xÛNŽU'HevïöÿdxåÙNƒ¶½A*³s§ÿ÷Âë0;ËÑôð¡ºÀ¸¼ó³ýOîÍ×=£$Ͼù¯×ˆ9Ÿß=‡þ¢k–¹þiÍ$'~ÌMjêšU«~ðš‘1™Uò6§©H¿¶(yGËŽ/g|9Ü£+d¦Ne*+ý§)Ãë5í4pœùZê×^¿õu×Û.¦ž •))ù˜€×ÔÔ ìÃ…m;Û‘]#«ùÑïo»qÇ…Æ=5ƒB±$u5Ó¼ü™—e?ùÇg™×½UH§½Ž|ìðu÷±×~vZöÜÆU¨4îïí›7# ±©©nø‚ýmÕªñØâhévwÏ‹ O®Áp¾ §9rä‡@vmJ„œf×&ÿQ¨wÜðü¦³³R†[´KzJ¦.:+‹ƒ/Èfn¹‹{v¶ÿD饧¦zà ²™ÒÒk;â•ÆûCßvw¨¤76î/ÈföìùÏkPKú‘„# ;†ð·gd0ðÙ̆ îÕÞ23Yø‚lfãÆáfs±$e5shÅoöÜä«ónÎŽûZ´Ývé‰*‡Å§üGz‰Äñ¶_l=æz/ß2™¸Dzý>ø‚læàÁïM®üo4/æÌŸÿ½>a½F¤™HkŸð芙©C«µÀd3EEÍã¹ÿÞä{ÿ\ÿgç÷Ô”úmõC6¶¶‚/ÈfŽ|¢;Ë6ëHô‘…æáÃŽZ"zõžµ_}{OÕÝ%¹ÂŒ òákèmYûÜ£0ñÑGÄ­·r5Nçç„ÈÌœÀ»¯Í¿Þ4Q»ë˜™—Ò ÙÌ-•@Uüô–ó…)Ãí•&É"° lÖŸ:òòPîÎE«t„ÒÇÙÞÖèÖüâì/8À…6,ìåË^óžx{¼]`· ­ "´¿='Ç73ÛÛ¬YÁfy×êRør]tÕ¯®Ïþ<ªZ¦ÈóþïU{³ vC;S¿Þ±h V¢'9Ý¢‹ñ`y«ñÃ_ý*Ü£+dB…„Ó8ïTЊõÚõ¥}tï¿îuow‹¶„À–¦×ïšÄ_¥8SÌ´yäªD÷ï:ïR§ü綃oýÇUVŸ#o6?ë»ëåâ««C«qR„HI™@—ÛkÜ’õ¦A“OËUË P"5›° FŤ¸”kÍ%CwºzVJBƒV饧¦ŽkOA’,)Ju®ï\h¥76^û (H¡Ò-é ʆÿöŒ ff¶·ÌL?¡Ùö­3ÇÞnöÇp—n«k›å¦w®ú éƒE¢[§Òñ››÷OîQw§.6‹º{ݽKã–†{tŃLí4ã¿ù¾”ûÞn}[ö+™íg ÁC¡µõÐ$þŠd–#+誓nyÔÆ?)-‡lÊf˜‡»t7Fx®!Öø´Ù¶íe½Ÿu|B૞"Íþ%§·0Ä;Ü÷tY~9×– 0f VëV‡i¯Ó5‘nÆ›·CÝr5ûHÏ0Nsê+µ¬Þ'ýú¨îÿnüw‰øNþKÛ $V@¯Öå_R]º;ý1" óTó´âdÒIÑ‘ýíK2Ë6kØæí–ß—N¿ûƒ¥¼ü»òV³m€ÍP/ÇÂ"­>§M?9Õs*S‘9¡…ä ±™]›Ê¸ÿY˜01lß“Y`¶Óögî~3ŠÐì7îG":É–Ô-îvÑ.¬…bé½iä_4C9Íñß5ßu¹ŸU.ýRZðÉ®£µÆT3O´šç¢rWÌ3K¸>‚àªUÕ÷¤ÝƒÕwãKÉ_z³ùMÙÉܻݾ*dëÂU§N¦)8§ùkì“ïgþ÷"™ÍL'BSÖY¶,nY¸Ù øÂŸf(§©—ÕgØ3P²‹7jo¬ì­´ûÌ™(ŽJ¶%7)š°ÂÇi޽Ù$þ±Åó’’G3F»ÿƒÆ6¥n¢ßçœÔ¼f{•{ŸÂ«ÈQæ`Ý]Ǹ-á¶ã=Ç{D=ò'äÖ[‹Æd¶=»Ìõï ŸBúBý5öë¯Æƒ‡º#–ÍL'Bs¼ëø’Ø%!ÿZYGìP63”ÓÈÛcM¦-w¼1%^¨Yx¤ãéþ{xÕ)lœ†øz¯ð¡>#XôÊX\a§aç­)·ò\BNÞˆ¨®Ο:_›ež…µv}CFËÖk׿×úžh³ˆPò]]¨J’kÏ=áuãqÅÃOè‹hÎ0= Ã1'»O†ƒÐØžÆf8uјp“îvq{š# w¼™†ð… ¾&R­©­²V/éÅZ׃’1¬®6¯ídçÉÒ„Rž‹u(À—œ>ÂWîþ$Ç‚Í3×?îLºóöakT<£P¾kÛÄHŠ‘ìJÖ{Ïõº{G~Xi¯Ä&à[Lh&ó¦ó Ò„°°=šdMIÎ$š£q¯›iX£[ƒÊFȵ­AaÀZ-޽ÝÄ>ÒÃý-ú;[Î3OõÁ·£Ý¹¿mÿâ¸ÅrœÏâùñ9¡.áü'®4É›² $ŒkíºÇ‚¨Ÿ¥ÚZMeRöµ1… ‘ƒâ¨¹¢U» »ƒ²™•&˜ˆXN3=MYWYIl ÑÍ’æTG*îr3ùê|‡Ï¡·é‘H÷‡ VâU§Ð³ò/š¥÷¦•'™‡ùÃî–Ýë“Öó\Â3@©n-ðo·¾¬¼¼Å+ þAâÝ-ý!‹,wé4mm“ µmü¤ù“1Ø øÓD*§™„æXç±’84„F/ÕcB3cG™UºU{{‘H‡„F¯Ô³‹r6ȹïi(ö´ìٴϺYA¨æáÓËô7ˆoÇŠ›!Ø¢Ûò‘ñ#pœ¬X[Q¼·˜d<‹„ëwv3Ü`Ì*㑾‘^ÀNcü¬šÉàD׉p8Ð\fŽ,÷·™‰Õñ« -óÊTnU›¬ k!$01 e3C9ÍÈqù|ßyš¤sÕ¼†ž: T™À¡~Ç©&y“Ö¥U’1Xq3ùÊ|!¨4UúÛj†ÑkÎ;‘7ÚÍ»=ºg= ×›L(Ý!b¨äDYâÉΓ9wý¥8èž&˜9,L0&4ãB“­I@ ’¤Iü‹ÖKõ)ÎÜÙf,Ju¥G;zY4ιxÕ)„¸ãÅÂalf€ÓÜñRѰÌOš?áy½É¨ó„r1×O­ê”uÙ–l¬µ…Í ›«N•«+³*²ä}£ºpm$lƒ¯û¨‡®Ù˜²q¤ÍtÁ4 4U}UEÑEHD$¼Þ4“¡iÒåé§{N£!48d0"ìmÝÖõ¦n"úMú‘öWp øO]øœˆšÃYäÀoêg¦IÖ”iÅ¡"f"¡áü;÷Sᬾ¡ºxÈÍ)7ïlÞ‰ M¸PÙ[’¶'VIk¢3÷´™ ÿmh6oG¹£¬ KÒ…µÀ'¬^kywùª„Uaú~Û€*¿Åéï¶rB×èz ]ÌZ¤-·ïošiH“¦i„šjOYàmíüZ±Mœ\ôæCÞøßzt÷E5r!ŽøºD»DoÓ·9¦åb÷t°ÐôVÍ‹F@h¬´ÕGøÔ^5îi3kÖìoßJzš% ixƱŽcÅ1Å*\|‚à¸8?«ñsðœÑÅœYúÀ›äMé¶t¬ˆˆuÚu§Ý;ú‰/É•¯+/6;èÍ4ÁæQ&„ü°„u7~Öö&4¡G‹£E@ â%ñü‹n·áõ& Øü–Å-;ÐŽf¯“Ö¡uSn³ÐŒÁßcø¾ŸÔ6"ª´þ'§¿˜+-ä44è(õ ûX‚qãýM3óÔó¬Ù$0 äœ]q6åRŠº3ÈBÈKŒZœd¨\™€-4áÁ™Þ3…ÑhÂ&%FK‡û“·^uâV¯õBß…Åq‹Ã' ä&à*°Nÿ°À6ði£¼¯7ÍX€˜/º¹NZ7ã‘xÎÝxnþ§ó‰/|e|@ذý¼G{šc6 B?Û™=Çä1µØ[0¡ 1ªúª £p]Â.­[‹ûÆÝšÆ@s n†%oÞæ eeÅšb1ÆÃth8¥ÒJ ðâ3"†`(iTàõ¦Åâ-C ¿IÌiä(.£*c ý6lÿPhüŠ /ý¸yÕÊ„•‡ÚM»Ú£·oŸÒß>u0 ¦©ƒ•ľ‹k$ìVŽvçòå¿ ¥àß•¾°Åw)Ö´£téƸÞùñÇÈ4÷ñÇ(Éè›Í”E+ø•9xdÿØ£O¥ç®[÷gž¯óìŠ_´æ§0½{·ˆgéù=tÙ†m¤;w‰HöºõˆŽX9ì£U«~ZÑÙÇŸo”u¹’ÚšsÏ]ñý¡;]œý¯ÿ÷åô É€èƒèlÿãðŒdÐD +ÆvKÍ7<.'ûÏ.Ôÿ£¼}½²h[¼î¾XÕ`Ël;Ñà½Ø—úÀüÐà£ü¦ hÇÊ׌‡•—þcاI_ÜZq#Ó“$4›7OéïŸ~úé»ï¾;Ä*=rs«É®“ç–g‹2¤ÕAo¬©™¥×ÿ1„’“ÀÒÀVq”tŒ/OM}~ú裢êoSTÜ4•ŽJôž£ë<ŠOAÓÜòòŸò/=-:ñ½Þ¿>kGQQ3Ï¢û%îò'RRÐ ñpyàB>È9ûóçÇ÷<žûx±f𣊊ä³gòõ)xÁ+ß$µgv¾x¶³?ó²ðr¼,¦ú\ÿ$­ àI(úÉ'ŸÄƒÌLúá’x«æíÖûs¬ý­“‚ä›ßZR“Ò!þÍåãŽ÷g¶$ß¼cÉ'›Êš¿Bé+V<·|¹„Æ<ïþã¿ ¤¯2ùgò¡Ü!1ømïùÓÑÑS:‚:¢—œ¼œ·ÃÝ‘"A0Œ¶’­‰,öÆèdžä {Zö ’žëÌ­×`-„ÆQc­)R‡8Œ'q(ÛS7,³Â-\ТÊ>š14³AØáÉÀŠ˜áHq¤¤ƒ”šM2@â’ ×ÆéâZ↲øQ˜Ê§Ê³x-mÎi&¢ Þ¡O'ÐÍ¿èV¢5Ã{¶1ú±*aUYG™‡s"‘žåÊ2ˆ NΊVœ1ÉSæ…ÜÆd^õÞ¼¡œÆÇ=µq?ú(ß•lzg½°ŒdGr³ô*[¬ŸÓÜR|ôâÝK©æ”p³pŦ$¶äX×1LhB†gCºÿ‘0&rØBƒÑ¹@>?fþyÏ!$Ò…œ0Ù\áÞ…nBróŒ_}Yï¬ÊiêªãŸÞ‘3áG·9H‡‰2%y“°"f84n—ôZ–aœæ£ÍǤvÉí. 7› `‘fQEo&4!C££1CŠ`¾ânáˆâ¢p×ÂÀ†” •d«N³œ³N¸>ÄZ/¡1Ÿ)T‡eOåPNc¯‹{àÃ9;ï¸ŠÍø‡;Acª'•VÄ lIޤ¡«NðÐ,o ¤0ªÕ1v×'¡ip4 !4ÝDw ‡[a\…uIë*ÝŸ¢’žãÊ©ôìFuî÷ A•©jž*\AÉœfí;…7½Sø§Í¢²;‡w†L/>ÃTGê°U§€ßÌöÍǾ³åLÀ·á.CQtÑ%ó%ëÁ„&d„&]‚`É©“èŒãâp§Â¸j¾¢)´²=f MÐ^+K¦óËz˰"ÂÕëÝpìN‘†w €ÈGe |#?Ò ô©žT¬ pÅÆ 5 ľê\žd† 8„’d*2Ï›ÎcB49šXhºˆ®X.w*Œ«º Aήi!;Yi±h˧ŸbE„ ¦ŠUAø¾ßS·ê½yûî>#`ˆ›¶Í¶ïÉI:!WŽ÷ÅcE`@(½J'èõ‚`{šûžxà4EQE•½•˜Ð„fŸ>B´‚ÑD'&4#Q,ÚÐ FGhÄ[övìe¿8“#´8k:&š63à<ÌG¢…nIô&bŒ$:[%­0!oéà4rcxŸS 4 Ê{Ë1¡ Œ.c‚ÍÆé¢ûÐ`ŒÄ<ÑÚFQ#*J¡£²ÔB5|îbE„gÌgæ©Ãâ@3ŒÍ€`ûžšÍ)Þ¬Œ$8ÚÅí0aYPtOÌ´, ï.¤Â¨BLhBƒVw«N„ælHaÂ[œ0F"ŠŒW1ª6!²`Së´ëvwìÆŠ98À…Ï#XÔ¢¶C{€Óˆ ý§(Lh0®šÀ¸t Bä©òÚí¯š©Âè2"!4ph³§Â= c$2\ÝhÖÇ­Çn4á€Þ¡W ”¡&,CÊÊËÃØÌ§aWÕú§Ú€m´à4CíŽvÒN'åDXŠ  ¢ ¦‘M7š%'Èf¤œ”îQ#‘éά×£’>G5ÇŸêíõX¡E­µv–b*éít»šQ‹91VÆ@èœ:£Äˆ¶ùªü æ ˜ÐLm®¶D1‚X½&¤jÜ0‚"É“ÔEw¹Hª1οêÔŽWBŒkM®"ÙX'hKòaó Æp@BÓ&A|š$4Í1¡™r'w·!Yr2ì@ƒ1*hŽNñ¤4ŠQ`½výÞνX¡Eµµ¡…¦nKðâ“ã0"”ÐT[ª1¡™r'wµéÄ™0«9l¡Á™®Ìz²EŸEÑ‹šìMдš&4#K×%êb ”‘òTyµ–Z–›Ñ""”ÐÀêëóöÅ ƒ±v)'Å} c4d¸3F£¡ º4®tOǬˆPÁÇùšÍ™24Ç0ÓEuáz#!d…rŸ¼WØ‹° rZ#ŠÑÛõ˜ÐL&ŸIM«‘„™²» Èp_ Ÿ¶ÌnºUÖk×cBBÔÙêR¤)BRˆDzÝ¡a44GcE`ŒDœ+®SÔ‰¶ ÓȆ¼ˆ´œ]]Ám0½ž^µ ìë>QQKGfÚ›œ“‡[4ÚjŸ±ÒC%Ú¿y{âFšÄĵ!‘¾9ãˆòDõ {£=Ѩ .ó;#œ¼M{Bç É0ñz½Æhd žõü–kªNÍxÅ@$%ëð+£#pP%*B¾0Ò\}R4A5׳1sÀ w™ƒÑ½]jÉ©—êÕ0¬ŒkBãÑ =¢RJKÕBµÑiŒðŠÂ>4~6“SQ‘ÐÐ r:` ŽËülÿº×߸ýb•ÖÍ྄1&&´¹y›¬;$¹H8n_Êžƒ€±3£¨Pšh_4ÖÆ5á·ÐˆzÑ–!M–Ödk„fà<¬GLò´ÒßÔ$7÷‡Þr }JjLÏìÑÅ-‘¿ZQûÆHö$w:Ü2_«Q Œ.c›³m Gtô²ûÖR–"ÆÈÁ ÃÕ/ŽG%½‡ê‰f0¡Á¸6¢=Ñh-4:‰[h&W(·Œæi½É¹3QT)xë¥XŠõû–î,Ç…ÊmÄŒ1 àIî¤&²‰ EPkâÖ|Ú9h¤!–]Õ¯Gæ`¹ N¬C%/9aŒ—и£‘ïÜŽ—Ä·»Ú1¡™D¡\¼9Ð0鶘·Z;Óo›ýqÒà[UÅ& 8ƈtØJ16ü'o#]uZ«];tÕÉþàÃ^ñUž_#s0€´V¬E%Ý¿ä„-4ã€ÎH8ÒA9–!Q’ˆ-4“Á€'ˈ<ßÜ}ÃGÊŠ;œ¦\Ý%°ûòN{¢u¿Ô¨õ gᾄ16üÑh†„×Ëy·"®É¦RÁ|Ü‹0ƃ ×XU>“ÖKUëÔ,Aöéf±žvâ•ÌuqëövìÅŠ˜pßw·kEh–œÌ¤YÉ*± 0¦ ¡Ñ‰uíNLh&T§ST[[ÐÕJ¸Ý¤5`)ª®°¥Ý±ì‡±Ü~¡Ïá‹ëŠŠ`>îEã?dðèg Œ™¡”L`• M¡ö…2Š9áóÝÜ}¼ý𯖿ù¦èÔ)˜ƒ•2Æ šBÊ‚ Æø¡òªÌB”KN: &4äÌÕ¶m‚–Ë^/LKªªø¨†IÞY›s’Ò/l"8@¹$\3Ȫ¬„ù¸aŒéît½PÏ ä.Ò>Š;}±Ø¿_XGšÍÐÀÌiÆ„ iQ1*¬ŒqÂo¡¡QZhD”HFËú}‘\K‘Bh ›66šo¿ÝVZz*>VFô°¡ArölØ™ï¡îü£Tsq·(ÎߺåÞ”ŠÁew¼^{ƸZ/+‰ñÅ´ƒ–ÄRJбPU&ŽU3œ)tG¸ +*¨vÿ´éfGö'²ËL˜#¬¬Äz¹&zÜ=±¢X$¢Í¤YÅbBƒ1îç”W…Ö)\1Òt©»0¡¹V!œNñÙ³ÖõëYÙ•ÝÚ„WDŠ`ÚºnøÌ™°®=Ù.ªíò °¿p ßBN#«0á^„1Nø7oâFÃÑQ43Ëh"!›1V­™Ù&>Amm ±Ñ‘ý©¤Žùâ°•|ŒÑ`ñZàŒ“"Ь,›)³’ÁKNã…Ò«´ lhOSŠÇö(z"¹–èíÛ§ô÷……OÕÔLYUús}ÄâvCñ@ŽÃ)©©ño™Ž-Ž#Kê¨Û§SSŠhýÁòÞeÕÚ¤~ÑgROÑ´R›SÜ%îUv Æþrøéko*@(­t´?|þüŸÍ—z޽b}t~öÏe_Hèµíj`„옾|ûý”=ï²®lßœf£º»óþÍó%ÂÉI¯¬L–“U+ Xõ•¤Z©lï[dÎð³¨vªnÄÍS‘¨Œ>p©¨ý×=#–°1É×¼³ àÉJ.‡_¸£ïtäkâ-×™™öÃW¬x.hþ›]ïÏ^ö}päƒÑn Ž5”€Ï¬µÈ,cÜ0EqSÿfzóæ)ýýÓO?}×]wM±çBíQæ\ ¼ýÉ9Ÿ͹òVj6s‚sΜ೨ÚÚ¼úú©©v9p¿Ìôö›gÊ”}>Ÿ¥·÷(W¬dŒ/ÏÌ| ~úØc¡êoSTÜ4•Žü‡Ÿ;÷ËàfÀµÆ\kR§ëàGy£Ý0uÌžýãÙ³ëFû4½Fh’›Æ¸aR¿ø¶v:++k*ßKN¬TJ}1(C¤<Å æ÷¯C… ݺÁØç"†rQý®=ññc| ‘éɬÖñ,ד;xÎ6É’iONVÊØ03fÌ‹Ålr€ƒÐ`LJVi%­( PZ¤–H®¢ˆ 4Þ¤$Ak+é×™´Ûa>ü4¬Ò))VUÿ¸F±¤ðo©…90w!Œqõ"–MÑëK/Óæ¾ãŧNÁ4Ìá‰ÐùF0o˜ã),Äz&¯IM«QI·%‡}h0&Fh,$J>¡¨-2Lh®V"q(÷ì æ « XŽ…i˜ãœ7~^éUSTÔšžî’H(Và°0]ƒãÐ`Œ›ÍÌ>{6I¯_bPžÖv‹œN˜†9üpަ·ÜâZ°€U©8‚`%b˜vÜz+ÌǪ¹¡ñ!#4nà&!¬ŒñCÁ*ÐZhT´Ê,3GrEʶmH\Üééê÷ßW8ãnt™;Õÿþ·;3>IBsvÉ’ÿ›³Ô%Â4ÌÁýc4p\Fb¤‘@ÀJœ„÷ŒéÒ¥ ¸Æ „>4p„sb¬Œ‰Âïz…ÔB#ô 1¡™0ä”ÜÆ ±k ñ’Ædá9„œ™xÂ#¡ð¼¼ð°T>4xÉ c’S}V H”>4r§/9M\m”ÔΠá¡xÉ cò*¡KÀ¡; ‡Ä„füuå’QÈbõb§`ŒI>9) Qò ¡Wˆ0¨Ê4&4NƉ¤:DœÌA8pÏÁ˜†„ûÐL ®’?á£>=cÂðûÐP( È'Šè%§‹QŠïîŽÐðàC£Ñ,®-Y¹…{ì ´Õ>c¥‡[´C<–Sp||i¸ÒclÛik‹š™í­¯O$—`)‚#o_ø¤GE-ÊÌ| &àU£Y6ô#1'·¶°Ö;¬pTÕ>c¥ó#Ú)r%4ÊÌû˜€×0Ùiz<=À'eÚ¤:s&&àÕhTÏœö©LSÓ<˜€×ávÂî=ÛJåüääoüªTK†šÁšÕ –¤-É9´µAÌr¸›ãAf\VHçhTföìü†ÏN#òˆ‚ÖƒTæÂ…,˜€Wží4C«Ý¿Ž»y3>Ý_Íää\ b;¡Õa%4}}'á ²™úúç†æSEX Mv¶ÿ«IµÏXéüˆ¶‹íA—œººŽÃd3çÎý2\MÚÓ˜à^®Z­¾ ›),ÔϨö¦RuÂd3iiUÃ?#Xš¯‹ÅR_Í šo•ÄÉ|ÉÙ«*[.s€“ûX—ÂÝ2׿px!]£XGÊà ²™ ~ŵÇÄôÁd3³g×!¬v:? DLLgÐüXal—§+ÜÒ{zŽ Ë€bea%4 ­ö+=Ü¢MrS—4Ú§ííÂ'ºËݘ±•L3³½EE‡¾%NaKKAW«Ëã†iV^;Ù||XŽ—Š!H*þì‰T/°&f»©.ÜÍñ 3BCå“ÛÑqaµkµ=h«†Ô!¢£ƒÿ~µ@]k¯ ·t“éÔÈL!+õ0£Ï ÚjŸ±ÒÃ-š\6wTÎÑu<|¢ýMf¬-Nqqæ™ÙÞTªÁY“ììYÉùóÞ„˸½Þè>pÌ _á“n±T Ëq ]^VRšx#LoMèy¬…2 üCÛÇý½­õ¥Ü­£ò(ÜÍñ 3$üÇÒð 5š¯^wwR EÚjÐmÛÑ‚è/2®§à‹á¸Õ”ð…Lª±Í©ºäÖÍñþü÷Z9 'ÿ'ºGNü½…ÅúÂV ÿbI‡CXS#=TgéŒÐ`ú‘KhL^r¼PsjiÂcÂÓq™Å¿ ¡aäX£ŽtN'$.¦µkYé^)‚iÓš5èð9@{i¯Øîœ¿wï—ÎUJiÕù±0ÓÇr§|ÜjA³àÕÇÕcJƒ1 ¡q|G‚Ÿ9£|ï=AK‹ØKyû:•ï¾ s0¡/Ôu¯·—¹HhXµ‰À„câ„FjñoC@1œ‚1 „--žÄÄ‘3ÓÀ|ak+Ÿ…ñÊäåk×þ³xyYn*sÅ<ãeMBпÝ)‹µ˜Ð`'4bž ä.†ËwØW¯æ|Iö¬4˜†9âª*LhÆ…aŒƉQ\Tч;Æ„`'í*»ŠéÝžnàSb-Œ:Wq:ù ë‰ÖAOF¡ 888&4Á(‚Ó ‰‹mÃV68_‚iÛúõèDÚÚS„†ßœ‚ëdœH“«9u'щ;Æ„`!-±æX€æ¸CÐîj¾%X £‘JE½ƒFßôã°þ ®cµº“’Âþ``˜ø¦¦h£‘´¬¯wÕÎ1@Ý·Ð~ï_I¬¬Ø_x™ƒoZ——Ö1`9‰•†”ÐðºäD77{“’új‡–B&ó&&Òƒ'''rê&r;M‚8Áè6ò,TDw`É ûÐ`LVÒkŠE%½ÕÙ ¼ÑX £!°®DްÄPv;Ì÷„™Ð@6“S^®kh9ÊKR"‹FÛk¤¦ÿ±AÓüU,ZÓK“MfÖCY˜Ð`'4|[hXÅàncÞ ?2«T’v{DÕMQB›»g¡¸€S0ö¡Á˜ üD„¦ÏÛG“4œºa-ŒúHìê}û†rÈfTûöÙçÍcÅâ°Joj’™û·Í»„ é¡>êaËÕSÞðh}?§¹+‘â¬ìë½Ü;øj"¦3£5e^-4¬TJZ­o?•®]Àü¡ëP‘€È=ñU'Öµ¹ÚˆŽæ¢{‰^Üq0&Fh(K¶ Mø‹6g[¢$ÑŒu0&ñf¢?üЛ ­”Ù Óå8æÌ ûb¼ÊØ,¤Á­Rc&f]™³™"|3‰Êª#l d;>Šc4p8Þ¤ù’“¥eep0lÕ‰´Ù--Î’’ˆª›ÈèD:þ-4H9)âc\O0“æ8šs[­‰âD¬‚ñpšÞÛow'%±@À‰„=[·†5ª^¿Ð n½và­!±¾ë´ªU…X)+q.¥I\óæÉwﺺÓòO?u†;ÐöõChD Fß>4‚srþ]*q\\Ù…ûÆøa%­Ú>-BãjM”`B3¾Z,veeÑ΋€ ÷JSLšMQ~§¥#5ðöT´¦ßJZæ±Z<È`L|Zh qñdd(·m“íÛ—bí^®S¾÷ž'+ H«™¶Ðˆ‘Yh 4¬¦›èÆ=cüè¥zºˆnq¶`B±P̱ÔÞ|DY1Èi|1|ëLªò2¸~0&JÉù 9å®»¼))^Š¥£b-wßlDºS° ¡‰c±…c"ƒ `ͤ9± «hu¶&ˆ°"ŽURãò]N£¶é„6 ‰ÿo©Æ)Ñ7Ìß»?pêäáù{÷ª¼lâ‘™ÃÁ‘p´A0ÄI$žœ£\Ji“"m¥i‘ë{¦i{¼= ÇPÅ›Pÿ.§+M%†‹©"«pßÁ'L”IÁ*hM‡Ò;ô)Òê±""”ïRTûæx‹âhîÎ{ædž=pã‰ó[µ§§³äà”Ò¼hE9®)Œk7¦þ³œd-g êû 7,kQ¸Vˆ\ MÐ±ÂØW ŸBqh¶Ð`L=TO ƒf|l“£)S–‰µÑ!’4Æ'z) p´C"kËÌÊf00Æ Š!ÒÓ¯w;)Ü„¦ ¡È”f6:‘ˆŽábzÈ$–=Œéˆ^ª7šA×®ÅÑ%ˆ’RR¬… L]¼"ëâS¢ý¬lý?œŽE/űŸj:ê½í$‹‡ŒIPcxÒªj;ó œ$ëcÚš iF½]È U¬ i0ƉªGÃhˆ®³×eɳ° &Oàå¼|²™[þÙd)ܯŠê€óÈ]Kvõ&o¿@2Ø)c‚àhàì•Gçê£p ÍiEhÒ¥é<[h§m cuFÒˆ›ÆxÐAwÄ1h‚ÐÔÙê²åÙX‚Ø#v1 zCH$ÂÄ™3hê2MM!þN5sØÃpMMãÚzšœüí©ÈÒï/·­ÜWxÛNS”2.§¸KÜ›ÔÈ)Çür(23í‡Ïžýã1>•î[%QËo¹xÅ}#hù+¾Ý#•ô Æ4÷LG[Ò…Þ¬pˆƒé ¦Fh6ožÒß?ýôÓßýîwC«ÎzV¬ð¥4Çðì'é 8|X}èÐ÷C(ºÈ:ôPǧþy•¼álÔÙäòàÓ¸•+Ÿ‡¢ûÛß"iñ;vP›61E¡êíSl6SíñxHßµKxà@Ön§ížL[å¡_Ï÷½!$(-ýÃúõAZãov]Ü:ÿ¾’88‚Þ0ôá?ý ±ÍÌ 2÷ÜsOh¿Óâ–º8ë¬Y5תs?%a+yàd__¿í·%ÑãóYúúŽ(‰1¾<=ý{ðÓï}ï{3­›G ƒð‡_¸ð«±š®:§]füp–ß+÷øQûü%-!ãRóç¹§ÎYí²Í:ƒâvúÓIS;&6¢—œ4" ÈNW'é±îØnŽ­‡qmt‹»5. *é—L—f©fa-Llàcy æá º;œŒŠ€i˜ÃR8Æ+ÆøÕ,›ÜÔT|òä½Õr« ¦ÑÄ1"|xÉiò(P`BƒÉpQ.íˆv÷/úô€¨·ˆÔ?‘io±í ìa¯ ¡)Òa-L |œ7q,I¶fdœ+)y-ÿF‹”‚i)cülfvUU’^/r:)Ø”X¦óÏžEÀiH·œ–GnEE¸"g«g×[ëy‹AÎ;ä!ïŠïwð|V;ÆôB»¤]ëÔ_4›wHU!×öÛ¼P“ªpK/ï.Ÿ¯ÁšÉ@JIŒ×Fä#±¹Yn±Ò×ï¬0› ¾‹BøDdäô‹tB#$…9Êœó¦ó|MÚ¸¡ŒẄ¥Œ´GÔƒ{Æ„&Þ9èÚI[>ðÒ€Mázœ ÊNÑ»$È)>g{2PÐ ›Ï†b¶-r7®Œñ#¶sp«¯ÐK;ý–ŘÞ]ÓO)ºãx=?Îä5&¢CANB3[å÷ vøøpß Ì¦?‚µ\ŸæÊÄZéUÒ,Ýh0‚ 3$Û“ƒÌ¨€ð8£æ:Ã×û½¬÷T÷©’¸¬…ÉAFËøÐ\v)às¶1Ƌ֔ëqŒÜ4+dý Ù0§59™Ïb˜½fÀJ#¹¢¦Á’“ˆDœè>Q_ʃ8P,ð˜ íK@ Ÿs@OŠ#Å 5hÜܯ0†4²Öy=Wpx˜L«$ ˜Ît7gaÛ¹]ÙS™¡ÈP UX “$4” ‰…N"…œÐCx$>÷c\`IòbAAbssŒß;˜`Iª%- ²žwþû Ñ„fzB(‰-)ë*ãA8À©“°™³<Àéï–ó ^bOi–5ãN…1 Á%ÆDGâÐÌlÓ£l÷Xý&Î, gšÏÚ?[®]޵0iÈ)9 €„Fì.¬Œ qCZZå¢E½`ƒM!7¤¦òÇÈâ³/9…„ÐtóAh„~Hi¸e„SD5°åÎâHi•´¢< #"a”µ=©’æÌ‘Q-ÉêŠa•~´ãèòxLh&>#ƒŽãÁÀ˜8Âÿ‰h‹×‚}hB€Å1‹Ïôžq³|X’âJO¿jã³Ý÷,w?ûÆ@ŽR Œö$ÝqÚ3i!x*@*0Ϭ\ù|sóþà8¤/;7I­l¾e‡Lµ3lÇâŽ-êY4EÑuuDuµ¿9îØAeeq³f±™s>øI%'Heæ™ÒÒ?èõûêë?žŠôCÆCEš¢qF ‰“~;;­ö- @<•f7õÍœö©LÀÅhT&`ž)/OŠ·&&š‘T»ÿɺy3ßmî ¥p­XáŸÁë063]³/tî ÚèÐ÷ýφCßoh؉ ¤/ĈZ’ ZÔ#Ù |zYi«I8Õ)$1›6ùŸ¦ðÊ3›€Ý ª•ÒJ‡$榛üx"›¨UÕfZ2ó¤›ùÝÍU݉ƘÄËÃ|„€$æÀï¼N‘Í@ìnÙ}SÒMã¿?=Ý·~½ pìå®ÚWÏ™9í ’˜Y³j`^‡±™¢Ñ=žp­:AÓØø{˜€×¡l€°Ç¡™±Ý­t~Dû-4Áœ_!‰¹páW0¯á`3þ‚»g4BIÌüù-0¯|²™aÕNòßà®~Ì8Ç3$4G.ûÌ›ËþùÙ~KCTf à4·}\ò¿çd3Àï/LäXrª•Õ!ùáyy(£Ú U:BéS§2ý„FY›kÎ`3¯Þ|úD²e× ¾ð§Éi€ñãHßÕ²kCÒ† þWÕõ¯÷£ŠÞ_=ÓÚ[P*@” *Ü«N½½G‡åÐpR'áÄÝüº”nÑ.¡KÈêC&*ã'RœïJ¤`ùXÏèD3Új'!»Aˆää xƽöèÅ)¨£ß,þN’ó+¯œ‰fø¨€€!czƒ/æYòBEh239„ÕŽVé¥gd„€ÐôŠz]”+Á‘ÓòNí»7ø Ùs3ÛIqªv€Ó(:µÃþP¯ß7uéçûÎ HA®*w"d†ùÓ{ÿ~_’slëræµ7¦w´ün4¾ð³ùtBÃòAhfl7G+=Ü¢Ý7ÍzfQwØ"Ðv¹»4¢kœÿoE[íÓfÛvÀF²N·îP÷g[o¼Áa«÷†”üf>ºåØç‹.­=X¤¨ÍyOœ+ŽäH£Ä0f0jT5Y–,âÊn¸žâò÷R¼Ë¸Þè«ÃŠ@Nc*>é»[v¯O\?6ãûíÛÛÞ óŽÝ1‡&°ö®B” ªÏÓÇ¿\!'v®ŒIÀKy)@ñ/š8Q\„W=½t¹Z·úõú×¢ iRy¦ t£óP/àæ$Ãi§pÓîÅï wzã°;gYfU+«uNîW3,Á^R]Úܼ9ðö £åÜyó’]-»~8÷‡£Ò_»ÍàŸúïúÍÿý˜ ¿zÈn¯{òœ €£òÓþµ‘Xkzj Öc†‡Û#!⤌ÉÀ!v ‰ÜéîÄ„f’ØûÊ»wµúÇå=Ï¿ùAõþôË.‡^÷¿‡éYÇÛ½ßøçC7„ƒÍôOÁW|®²Hoû¸dÛÆ—Ò<ŒÐ¼ööòN|†Î …^¦Wx£×/ŠBtÛÊ›ôgÇEÓÅ ¶Øð­û‡­dÈ䳜¿ž…Z‘¶ÃÝÁ¿\HhœÀ‰ëcp ]c,9…ÝîîQ &4“ÁÚ‡îfKSûžú LÜõÙþ{Òl«•!+¹¢#v¤ð©M‡¤ï®_~dÞÁ/5=2YéUjÚËÊËkpÇš‘8u~ŽÉ¿Q¨Ñ[Yã€ë øwÓ¿7%oQýó³_>s|Ñìøu[2†Ý¶çÆÏÏ·?ù“¬¯±+Œ½hã;0+áÁ‡㺄MbÓrZþåvº;á Â+'"|hvü úä¶ Ó\˜¹ã±áN¸[’·|hø0„ÒÍó+FîiâîèÖ}"Ê;÷ÔÜaÍ3Í«ŠªÂýj¢›1¥Æls¶Ÿq#]gÂmMÛ¶¦mx ÙÌW>;éË063ωÇúº6¡Åúc…ñ ŠFj'ì¸þ1&»8xšpÃè4Æ‹#}T‰B·DA×6ŒÓÀ·03®dø®÷Iw¶ûÂ>øhߡ͇2.f¤W_6͖検—½§pךiØãü[Ž9‡æhþ]gtªÖ\»:aõ@κ-ÿ¼qåPN`30s¤Ùc$âEñKNNì°X…MbCâCcp’¤I˜Ð\‹îHôýA>”ÓØ Ì„ »Y%P-‰]²»m7sI\‡7žx~¼a™€(è+Øåø3îZ3 NÆù©ãåy}ó®3¨3|â˜ëÝÍ©›¤`hæ0NƒÙÌ„+Œõ?E)/¡h0®KBƒÄBÓâhI–$cB3N3› `sòæí†íüÌc:zóÑeŸ,Sw«2óÍù'Ý;)<Í ¼UÿÖ,Áέ=JD:ÃŽºÞ¹#펑ùNsß@-Ìf&%ƒó;ƒ`õGdv€W0¦¡áç·ÐH°…f‚œFüm'ƒÍ@lLô¯:Ù|6~ ÖžÜ^¾¢|ÅŽbg3’0’åâ{*¢+pïš!`9ö¹sÏm<ŠÄuÂ,4w3† 'l@ÄXSE¬ˆo#n(8……°àúǘ(ìb;ÿKN®N•@%¦Ä^9‘8zh®Ý:–ñC)P–Ä–ìnÝÍ[‘g56ä7¬Ü¾’öõ﮺]ö£óêó& w°™€†‘æH“×™ªUÕ%â;)"H@­€ßÌï?›óš|éHaŒ±/Šow·ó:æ9'·6\ÿ›YÖK{Ç8ú L08 ‘¿ÞY„&à7ãú“¬ìg®Ä'|ßÖqó©w¾ÕôŸÅ;·ðœUm]öÉ2‚óo㎥R3l/\x÷±™€ßû]‘ôÎËÖþ]gÀ{ïEõŵ҇Fc3ÏUÍ]·%ãÖŸæóƸ&â„qHBÑ(9%¶Ð`LNÒ©p(ø—Ûâl‰|à"4C½€øÏ9{µ(à,{oÔe“6žë;×É4ñWD”­-£½ô‚C  z¼xáE›O³®s|Úòi—³oÛQÙò7òï:Ñ,o–ú¤itAP6óǶ¢eÚøØÇ‚`ûž0ÆF¢8±õÿ³wðM”}î’ËNÚ$MÓ¦{ÚBË({–!{(ˆ€ÊÄ×…eˆ2|EQTDADÁÅ,¤l(Ð¥¥”îݦiÓfç.ɽÚJAšÑñ|{ŸûæÝw»m›QÉ|`,÷]˜(s‚ß„úyžšåÔÈSÒRihZ(õQˆ z üææ70›µaH@.IYj(òñˆ^>\‘SÎ!Ã5£Cm‡‡dœŒŠoÈ®q¯M^w§¬×4Éé0ío–w‰¡Äñv@ FÔÐÿÇB‹jEj'”B°†æ1_P7éLΫ—õZûlaÊÁ¿] rZÀ´¿ô?’Ž}c&˜Ä‰1'¢“£Ù—¬½g–Å-ûüÆçÕÆj˜ÓÚ*{ ÷–ÔjH‡Mëæ”ÐÑu%ܒкн¹—á»ÓåÜ—‘)M§ ~D¨÷N æNÁÖkh )h­P-t¼Ýb]+âÔRÍÈÏÂÓÄÆè/ëµ®C^R^ÙCÿ«ƒkTRÌ-vô†¯;5ê”ðëB· ·P—ЉW^] sZ›ÄBZÞ8ÿ>G5úËqýœu™.™ê@†¥i7@ãMcÙœ2ß_}1/ ¦ÔãÅòr° A@’° ä‰ ªuÕ¸:Þn®67˜ M³ðváþøLÿ9;ÏäÕ<¼n6=#Ã%Ãñ'¦ðP(øõKìG‹ãÿ’ýKŽ*f¶¶ÇÇ)äuHâÄ·8˜sV=³vÞì lÚÞd®1M,’~,ewcÃdjL¼† Ûå‘<¸úä± ¢©Ýä¤5k•¸RÆ–AAÓ\ºûº/7yÇ_*ãCfþèË~®€[` bún®7âoäŽÊEoƼùÞå÷`fkcTê”+¯ønÔŠ©ÐYçPÊ)EIÔSïyŸÊ!Èâ)Å‚Ñ×)®0™š ¡¹3ÝË å¶+ uHô?äñ´ªu|§à\Mn7­`š+úÞæÍ¸Û©Ó²S§ì{Š~ k(K7î» ‹£G£Òø=y“ qAø ï;Ùæ)¾/®P²äµ/j#Wí:Ãä0ëû÷ÓœxßìÝë\ÓŽ˜†á?…¯¸#=:«':t/ràÀu޼ØUÊ1“˜«úÍ®ÿxäˆub+×o‹èº¢/8‚Øûê-68ª¹uËÆ¿é RnÝjè%4‡œ¿ tÌ¿í#ðš M»æãЙ!¾]¸ò5B¿É®è?­`L™vv^k·…ŒÓèÐáo_×Þ«Ä‘ÙÏzJJÓ¾2§ô§ÄxÇ»ñ~ÁVæ¨pJJó͘1ÍúÿåË—/[¶ÌÞ <ÒÒwØÆ=糟ŽéÓä¶ë©÷ÙVwSs¬=<æVTlTŽcú}í'ü¬ø¹Yc¿V>÷!ö!Ã!ÏZ‘hú€Nk€OJ8Ëz½éß~ûÍîrUY ûÐ Úrù÷w#ÝÝgët;W=c)½…ŸœÏ_o”ÙLåÖª UUÅš°sa4ÄçÐP>lÍ,(šYÈ,X°À¶¿Y@ïÞ }ù;¦xñ…7zÆ=ô›gÏŠSSmYÄÕYIU$r$´³‹eÄßÖäÇÅ-§LS—﬇º݉Ö~áÉÉ+hŠ¥]µ}ÿá Í$>~ÕСM[<.\½Ñ ÚñNüIðàšÃ½_Ûj ³XÍzqjs¥ÓPä÷†ïMÏûérf“C>ÀÇ ¸]Wrb$J½TÄ3$ ûÌû¤õSn´ìA~OCÝPOã~h(chc‰¬>¡._Q´'ˆæBƒÉd+ü¸~…ÚBÇÛu1»¨h°_0ä1PÓÔîJwÍªË s kþi5‹¿9Ì}³F-Üw&¹°éƒÀ ãำN̰¼Z :'zéÚKg-g‹Éb˜ëZ5¸|^{Þ…¥‡%8³ä"Õ—ˆK Œ{ç@/7æOËØÀ fÂd²!!ü,U–ãíòÍ|(h W,ÐÕ’Z‰ƒf×eCAc{"¤¢Ÿ2aË’Úûæoˆ1 ÉùÎ:1ßT°  b[Ä”Ê)[L[ÌÀ 3^ëåGyµV¼gö 8³ä8~¼Ö4LsŽêPñê\ÏÅžü|˜F¶%˜œ£qÂ(EXCy,Œ¨!®ëЧiÊUç†B  ±=Ã#ü_íÛiÜæý:Üt7È@0Љ•4oCÑKEϯy^dí6ï†y¯µ€¢ÒR÷¼0Éì"jQ̇㓫ÉuŒ9Bâ AÐÀH 4i5iÑÂèÖâ"´5¦ë÷“òkT«Ž_ºÃÌ> Ïapع'VÛ½Ökþà·6›6kUÂ’In.µ§07¶@5ãZQ‘Õ³gaÇŽåaaÙÑ焆}»rœ9÷® ˜öáûÆ3Çלð.óÊ_-'iL5;ÂÉQ;ºÕÉÅìkh ŽŠ®â›-h®×\ï(êaÒi»¦Üx>ý’âÞ’Â !¤Ö€çž›|¤¼ƒ¡Ã¸‹Ý~®ý‚«¨ªõ=sF’W?nAÐqÜ=??¿sgâÿ£®0(}~K  ê“i¤Ž:ñÜNâ'½Qï`šu¢qVKò‹¤ôÍR3v̲¯ ÉVg;Ø(õ¶­Cu°ËäqJ ͵škPÐØ™ wçôßÜþ«ÔØÐòÄÜ–PI`èráÑŽ8.ù4:«"<¼¨S§ìÞ½]ËË¡¦i9ªªÔnn³a¸µë ó˜; ÁF©ÅbꨳNÌL{ð=˜¬ª«†.û\V1·÷Æa’Ù•PAèmÕm‡¾¨À,¨¥×BÿCIÐÐÕ“£'’¸^s½“¸4v§«¯tfpßoKq¹AÓ ƒS@Š(ùêo4ºæ^]üñOkÒ5é§,Öy” « sgIn.l{j!P ³VAb•³8×kIá©YèLêƒs8˜ó’ÉÚ{õ ¢¡8êõ©—ò)¥6®øcw¬Õä„Z=m‹Ì¢z ô?äQPÒ•®&‡®vR¡¯0“f/Ž4Ž {Xg>íûRÂt§€h •4üª*››Ñ•.Ÿ'ÿò«/ ‰™–ÌzMCÅó ˜-[&&“¡×[3ŽºþìúkügÓ‘„Àºf·æÆÁ€Ø‹ïµVÏ@ºAjô1*G*ab9€pAømõmªìv€-ìÿ‚)„&¡’“òHÔÒk,h¬Õ3¢N­ÈEôÖžÆc$ôoKðß+‰ç<¬9@Â2°lVÿprΫ?‡c}8‰ì9lÒ¥×6ôül1¶Èq·¾ú 0[¶T‰ìÖ-Ìhtÿ5ðiïôdöŒF¬=ù©¢DgiD„SÎ* OòCýiâb¬+^ 'i´#ÙÙ·Þü+ã’÷r“¼:¬·;Ë=_“¿ió•Mjë”ËÿóìË»"“¨š^ Óò¯˜³–¦up“Óµêk1¢˜Vä%´µ'3õ¦3]ÆÈÕ[N)­oW<Àë zùê¯ÓÕ‡u:,ÎÃR9úSb­’TRñ‹sfKÀÄ`È£ËÚú=MB‰Œ¬W3©©TÍO滜t)]XJÒI˜Röcu†a餑¥ï<óeÖ¢ßÏG¹D¥×¦ü곊ÅS³4§¢Ð,TÒa äß©£×ñÍ|/Yx­æZ¬8 ‡ÂBÁK^ŒCÕ¦,…ú8 ½®•ƒr§œŒZ"á)wkb: è8½eüZü3P[N…9³… bEìg¨/v8±ìfWYÖm¿k×ÂΫõô”8å|öáûbè1aÅaî›Ý­Ãšpð‹}Ù<¶S!FG8\—®ÒëÒ|"“¨†ûÐ@þJø G7;¤Õ¤µ¢!NmDÐPHÈt¶¥Œ¨ÂIà Ãv]Îyõg2«‚‚üSRîjšbF_íiïÎW æÌqßãhYRÙãöÎg¿ny™1ŒÒš·úôq–š©²TÀOL&&{}æ%Ÿ!7úÃÎãŽ`Ù—¿IVí{Dùùs£]£oÔÞp€Qšuæç„&a­Îr/y8Žï@£0(”¸2XÜŠ¼Do3éÆAŸÓ¿-ÅßòcöCû'o[á Ü §À@jræŒÆÍ g³zý{UŠõ¼Q=Žo4mœKŸKoCno¥hhW[=Ÿ9_¼jZ@þÆÃèâVGÕõ¯SÇ«a9†åÿ™´ÌLœ¾~eÚ¦Óg_²699À(†‰ü_ÜÐx¥i„f!LH‹4çå绹uC@Óù<³2o¼røÚ…jÜÛ]ºpÌ ™~Öᢤ_—˜ôõµÒRÁw‰‘¿Û šæÒOH+5Z¶”á/y3ƃñ;ÁÎ÷À{¦‡c4ÒÛ›_UE7Ô|~Y‡½éع|Ÿ2ÍÔ4N†¸J,ï·|}Zh çsÛ|;Çœ³tûRBLT‡]D JÃúÇÆ›m¯¦÷',„¨pcº9ò$&IV 䟩Áj| ¾Ž´˜\•ÜÃý!ºdyš~ÅóÏtv¥K=5fkÒ̥éÈÄ»×)}¼1 ’Ïpfvnc©>QŠ,`o•)Ä2ó¸à¬311J/¯ª  jO…(òšßT:]A˜6RÀ³¨SÐÈ5+}VޱŒ‰ÁZDï}Û ÛfÜœáRàR9¯Àå Åë +‚0½|aH¢1ÔÚ¦ÖÑÝh$„¤Š^“òÏ(0…˜;ÒâEùÅxIüƒñÛ'uë&f¡ £l¾Uˆ[ÌÚ™×ê6>ß͹jÆ*hnÞt¦y›[§#`¶–¢6_V™ŸO'‚Düí,«|~¼#/–OG^ñå×¼Pg2OþJÂYnÏÍe:1Ñh݈y¯¡¯¡ÑÃÕ 5¢öîug‰³¨·u\éÂR ÃÒŠòZ«0MQPÀyh|?¢|øúß|>ݳ"Óòí‹0D»Fï:þ‹ÛŠŸéÍ˾üU²r{ó­{y þAc’È1yÛs{»µnÓBhhšGiròñj‹¸¿^s½‹¤ËC.úx çý†í«Þ0Ãú½®ÇDùGŽHï¹ú÷E—Îr;=;DF:-ííaGC^òb¬+Æç3|CY¡ûÁþñ`üC¿ÉåvR«“y½Þ,ô%Þ·ùÏ»„Ÿû”øô?ظ€ëx·1ƒ‚œÖíÔYÖ@ñe͇o=Õ3Ê)Ža‘q½qŒ†ÔìÐíøbã寗›D¦V—×Z¾iŠ’¶¿¿îÁø±}ºS[ã˜8QÜîÀÝŠ)Smh]*í]Zz¬q Ü·z“;á~‰{©í¹½ÝZ·‡éj¬ZDˆe̶LÖ¯¸øHó-¦Õ¤…º„ò輇]ýîô•&<)åüįŽU¼?œ¯9áÖí»^c¢ÃoôùaÏàèéY4Ç»Ýê ½{ g)ó”];Y÷b"S=°¥ÄÓ„‹àb)(}PÊxxÌ¥ÔÞÁõ4±nq³‚Ÿ*ËʽڼVA:TÌ2“’¬S3Qû¼ÿé±}ÛÞt×ítJÝ8»Z§üü¼öYR÷ì>—/;‚Ž hRO㬠7nÌðaž¯Ë({WöîzÓúKÎTúT `°îëëLAã0ë$ ‘Çþ"ÿúdß'–ÀÂ…@çÌAÑq¯úЭC!u!#,¨¥ äµkº¾ž¦>@ —+À*b¨=õpxPÍX¿#êr¥æÊhïѶ²^Yyö_¿c¹M¯²ù¤Ym¸loow{5VÝxˆSµ™s˜à–ˆ!z0ê:5*CÊÊN7ßÜÍÚ›,Ë—çûÐÇêÓûQ[“hÇsÛKžâm|âZ ^òÆ®T¹‡â=ÿ¶¨s£#`;Kkʬ-Æã_M¬–“r±`øŽüî2yùã«G_.žÒ‚zTÜVv9<9`²…§ˆu(õõ4ìW¬u6ªŠXQì•ê+v= MÆ7J iVSòPp×Ð5"Bt7æ´éϬ~‹]5‚n9†Û~¹Ê¤ò¤A²Aõáݯܸð[ÑCªp~+Ú½ ­¥ùªíÏÄ/¤#s½°¬¢„l2ï¸Ñ¢ÎMC^ àì«4fªhsés{¢=W+NYN5éñy\JAé*Ë*à-“/ëøKǼ—òì:"ú±@*‘oÌߊnŽPÛžþ¯^íáá×½«’$×”=e¬¯"8C}RO²Wø€€Eè"J͈/ˆ¹ÜÕu†û'w倕3„3\XL;QÍX+E8Ìø§e¿Î®zp,w/I¯³Ugí}>‡t<€éÞâ+G`ÈN-Ç“ð,ÇÊa2A¤‚Qá{<2€¦2¬Â¦ë¥$•' ” lY_OC›[ûYbD‹U3íKÐP—:KÆaULû•ÜYjZÚé 3¸ô¯ õ¦;ýg|ß÷°÷úÒú®5­ýÅü‹h›|ÿ㿪&ðnçYˆ¨Ðò¯ÉugéÇèe/#)EÈ*gyýáÕ¢ºÎξ“~×Á¥C,#–ÑŽ§ê‚¦I/àùÝ#wóKËVÒªÎß·¼yoIïdE²™´×Ì`Bâ$šf!ŸfàŒdb¸GV“ ÒbªÁj$„¤qäA‚¥! ‰æ˜]Ä$µi—Ëå'ú{ôxyK†™Ö’ÝÕ¾^ðÙ(xÕÝŸ¬îÿ­ek ìx;YÆb¢`s±žüÿÓºÚg%¶’:ÕEø¢Ds¢4 xÖR˜Ý—H˜í<·ëG@âúš›áU9o?# B€âhà·-ªë +‡u#íÆÕŽW§ð¦À2Ú)<µ&¤IÓ’€‰Í‹ØÅ-yêÓÐÆñ"¦È›ã}]yÝ~e®t„Àî´&SïÙ~Ðã^°_0ä!B«byŸŒØ6£dÁí¤ÍTÒlWCc 5×k®÷–6íáWßo†Ê$dzì# Ó0¹ì¡¥8±×|3E¥¥Òü|jOÇqç'^òeËqË~ù½™Z¸€;•6u1¶¸œ,—x÷˜ù˜ ˜Òs®‡õìFkÇùœÄ òÄË’Ký(ãò¯=†.öÆv”$pz׋ŨÓk49Ôž ÓkèäVòãç>žÏŸÏDÚ»mQÌév®HžQ©lßKÒë\Õ9‡¾kÝé¬Gõ0Q )c–ÉŒ²&‘˜zKþ[>‹YŽØòÍüºñxW·®:ç!jæ¥ÇþÔ¤04N&’KÊ8#É|TŸ¾W PЂÚGœ=랟ïôsc È«þœsJâbí}GÝ÷9ô9oÒßÌ$3ßÂßúì~/®Nab´“ȤŖř s¾e!v$OÀ@€7 F,ºs"çvÑh²åò$£Qn±àÔ¾ªü$úcÕÛóÞÇHƒ]>[lŒþz¯¨U'›VÆô–ô¶« ¡žA&#îT“)$©wn Ãe%X LHcJ˜%þÝ,žyq*ðd·ñ:»WŒ†û PÍ k\ù{L²õ2„Ž<8î '3³Z59-þÍŽ)iËBC :v¼Õ³§°¢¢%h>YàÇÙQfÈÔ4]~Ùñþý?3óMrîÑÎo§¼] )h?©¦"T‰Ú/:%vÊóÑù/#/û£~¨™<®±$(U›9gè.o'v¡ÔŒ^_.‘ô ; ‘B×ÎQ»'~9ì[7>wc,[ /Ä…dÈ•WJï[#¶‡¤Ç¥êK&ÒnëŸ#d4‚ü‰3L$ÈÇybôC/î[Ì(†)iL)³T‚ºÙÓµ‰¦¡>R‘:™-ë¡I@^6&÷¾OÐTœ­£ä‹_ &'`wa7d;š¦âLmKsW{4tw/(è5†£íþ ±©~[‚ÅÊ‹•æç·„¶'oú’/ûÛ"}‰á!æ´R>â_“‡'ó0Þ £ƒÆ%ÛS´Çh1¶á$»Uwë+oÄ싹M$oï³}%ù€¸3ìë]/ú…rã+™ºõÅ–/F”;¯ëŒÅbÔhrE¢n4«>F¼K|\z:ϧf¼6ÊÒ¦¨õ ¡oöŽ^uò¾UPD ‘/Ç×¶‹:ݳhíŒ<ÅÕ’÷¿jÑ~ŒçY[š|pŸb&4F/H4 b©éèØË5M½š¡"Q[ŽŒ+g–» îü€Æ‘㾊îèí¦9ª‘~pß\8”¦÷uL‹{¸·Ã»DPU¥‹Is6ú}|Ý&2qcL½¦¡â ELæô“ŒàÑ'ËX_êÞâòé÷uúz.œ/ráz°=–Æ,}'êÄâÄ-¹[¨çý¿ Ïú?'Žk°ŒnLîôÕ…Œ³•½ýïÙ}¥}“*“ºŠ»Ú¾vÆ:!`¢øsÜûÞ¼qïr¬Ü Ì4@ƒ‰wÚ›¼pë 4”p©×4Ôžúh5C‘ÍÎîÂÑ´ÚÆH–-(ó\ë‰ò[AõG{4˜Ñˆ³­UgmmÖfósQAnAT ZÊИËAÉ"õøA&Æý'•]ÌKÜ[5ê‹&Ê|Úïij+Ñ•lÏÛ>ïâ<­I;Â{ÄhŸÑ=$=hˆíKFD«Ò.ËI.—ô÷'9Û+³áXÙ±ß ?Yq²¿Gÿ¹!s‡y ÃP«j9ôcÊ¥ê‡XdýæÉº!Èþ8Éée±h´†s+ЙÈ"õ—óÞ~‘ý¢'ê©¢ÕRGaÝB Ay§oÇ•'¯zqèÝÈ!žC>ºñÑÛ‘oÛÄÄíÛÞŽ^èÝTm+KÄr;,ÔÚu†A2Ä&q9£œR60Q àN{“·¡áf¨×4Ãwu£ÂöP3VAÃÉËZÛ$Rñ™‚Êäâ·Ž¼Üï‚Éd«fžcÞÈúÏW²¯Þн!âˆz½J"i9§êa|{Sè—èíÑÍw%MõUvܦ*Ë×÷­IæÍñ~;êmjËReí+Þ÷þÕ÷Ku¥ý¥ýûyô£ö>\ÛÔ Ð._¦¥¤pê‘`:RU…ž>mîÒ…Úlòãš‚£eG•»Pe§õÿgÖǯ`÷]&.D_©RNç ;Þ›˜‡8)Š=áyiræÔYgP”Eò;K–ϲ«9C¾‹gÅÇcñTŒÙ¬£ÓÝaÝb×Áï‹séÇrJ7LÉ/ŽÏÕä*Œ ÄÍÿ}JÍlcЦ•ˆkJÍX#Á½‘MÖV'F14»54•÷ÍqGZ—!³K)WG¯Ó¢Ú¬+eán¤ñ¶±fCM`r«ÍÐ %Y¼²²0£‘R6ÔGi˜trêäõëßAæó««K""ZΩŠcõ)³ þ³)ôZÎàþÄÿՌ֫’)O»=ô_Âaoux‹ÚеÅII'+N~xýC.ÛWÚ·›[7J(„¹„=YÍ ¥fÐÛ·‰©S+.Ë"z«¬µ5 }ï^ëû‰4 È\uî%Å¥dEòyùù:¼.A–09`ò=h¢cî"ëh 1vYxeF^½¦©Ká÷Ýá—9°ëïäÉY,w•*7é?ÍÖs½uǸ“˜“ÑXåâ -Aõï¸2éZB°Wý‹†b=Ýzžª<%aÍÿ}JÇL«—/%b¶WÍ=5ƒ›KJФ³Ó{€0E 8‚+0…'~_¿™ÏF§1ržšœ²ÙÙÁú`¤q·Z”/(—¼/Ád4-ƒQ˜ššK°¬=¢:EU§–oöZï4…:Ú¢ÎV«¿<³`æÁb¹A¥fRg„tïN ³þG®ÏóAÏS¥2ë2OWž¦Jç/2¿(×—wvŒÅRÒ'X*ucºýëi :íÊâùçI.÷Þ Ïã™ÆŒÁ¶m³DF>JÛ“ÁlÈReݪ»Emµ””ác|JfQÛ¬àYQ¨GéýÓíi¯oS¯vÙlÕ4ÔÇ>›‚äajÃ$çO¢L/xÏíÓa9‹U½€½˜ºJÍTT6™ê¨£°ŒnÉ<æóù¹ô½7 ÇFúÕÇ ö|´âè4-ývOÓ”Špù š¡ðÅ}¹¢2l›éybŠYÅ”š¡“ô»jfç˜Ô$Oã\¦âèX£Í»ÑÜæÜ¯Ç˜r«Òb´ˆæˆZ‘Óèíó^‘X;r‡Ÿ?¯‹q6›¡×/PÐVÒ|¾ò¹øli¥‰4NžÌvS0¥+.ÏÉÇ>Þì[ÔåDºDR[C¡ºVsíjÍUJOlËÛ–£Î±–`~°7×Û“íIml/Ž—ˆ)`>ï°.<„æç[üü«™»šÆâë‹‘ÖßÇ-8õû*\UGÔU*Ëu奺Òú­P[X©¯ âQ*Ò5’RZ_Å%eIŸäÙÐQK©™î›‚èf”p!*äµ”:©–]e&Ø^Á§Ì9Z³^§+‘Ëÿòóƒ·t¨<¿¨_Ç÷^áKC¬%À`ÁÞøpªÈf5üõšf %ùA5CÁ7ó9N%VéAxÀiç² ý þ Ñ˜¦ž†>4!A£>Â6Ñ4šFÎî5-™ªLòer¿ý~­k$t}‹Á“Ó©Ó²fþB3ñð˜û¤ÿ jâtÜŠ<¶AcfñªûΪ4,®ìŸDä<çó©}M?>>õÌV0Ì耯BîD¤d7ã×<'µÝýXÇ­+ô(¬V(\Y¬s.çäBy§NËÖê˜:5GÍ5pùzf¦Y¾ZØp»çÐ*™ ½XX&T"†T3@p€˜…Ìl`a3®Àäzg ˆÞ§4€]Öÿ«àà©ë®s¥µs ¥ÕòÆKܼ{:,!8œÉwèJu~¢j=%¯žhQÑ'>>o*ozxÌðö^cëŽÏkw-:1›S…ÌÙ³Ž0Äb†9kåΪõíÎbÅ;›¸·ÜV&²Û ê•‘}]BâÒº¯R…Þq܆ÎÈ”i'zÞ¹e{»½ðøøUÔþ·ê¸¹‚Ïð…™)Y¯ iÁ#Èüó³»LAï¨m²üòd7{úÅwn¾ÅDݺĤžÝþK…±¶ZˆÖæ›{»”¹;¯0VoîÁð š1cšõÿË—/_¶l™o»!Cš3Y8ug5úÈÛóÛ°Âaý$Óc§ÿó=ʦLoÛ¶Í—Y›Æí²9(yV.¦Wfä† žrøð<{Øâ>µh€æ^$NÃ…*¹‹NuËËÚ]±_¿N]‚’ Ò=¼¤XÉçWóÝÝòu~Ê;[³2dýÑ£/3úw<à“:Ï:OeÇ>×y×Üâ1†H ˜6bÄÃ'[»YY3}Óšß¿Ú1@f­¬zë­máá‰9sŠÚ`жš›[Ÿ€‹ãM;¥E÷xaûÑ5³B4k?³‹É#®ä0dµÉ׋~¤Yf Î’¬ NzñÀ ‘OÓŽ_®Ìš³ìƒA¹ÖY‹bb–¤¥}´`Á§¸ýôiaß¾J¡P謲ÝY·\½éÊÊJ§X¿xQZZúhËi·8ò”Rp•>˜IðÃmÓÓZyÙ†{_õtPZšÜ|£'Ðu#È¥šo¼¼æS×®:¢**ÑFòC9Ž*alTÈ´Ó™‚ÿÿ±þÛtÛ–_ZþGÎ-ä”êÕ %b\c´ÔF¨eÚÈÂ03¦Gx…Y¢e p”èjt¥Ôæ®a…U˜Í˜Œcâü£š±ô2?«ˆ™[L‰j£ÔGE*ˉiT­3ŒÜ¶Éâ³acŸoÈÜOOß3eÊ6…ÓŠ´úz…I„?\lÿ?.`ÜÃNª™Í€1HŸÜOP©È¦Eî_‚•˜L‹öL6’D¡ÿ@Ÿ©³ˆè ’c—¾5 ¦ © #:¿[t–¢ùE¾ßø¢œÖ'  iJ×w»þpñ‡·O½XœØ¢ÔLà ÜM¶®ŠQàÈ3Áéô|w÷¸¼<&qo‘)ŽwÊËË—J©£Ž9 JÉ9Ò·^ÍÔÇ8]ÓfËØŸ·Ö¹}õEÏ5ãýÇß—HB««ó–-ó8xð}˜­Z ï±êøe=a•]Ý»HM½Ê†jÆúÌ@-HïÜÇCÔ4L’éaò(À `B´gn!·î* ½®1—Øë½(I‰%cò˹ݹ‚¡‚Öè7:¼uš‚€ë|ùô—ó±ùìv‚,Á™z3ÓXÍÜÕ4Y¯J§¥ O‡®íþÁÔà©ãß~;f¦ÖHiWé7çÒÞìot»;k|3­¿©s~³RÃ|‘glÜÀ¤ôUF»èÞI—^÷©mRK„å1ò‚ñ`˜í– $cÙP×K©™(*cØk¨ %h&êÃX¾úÇêÈ´ÈVê7XCó0§С_ý|ãç3OÎ<]qÚ‰g"[ÕDÍÔ#먈¹èøó¡ä˹ˆG‰NW¸¸œ‹Œt¤š¡ð{±³IVø`<¥i$“êï5gNý®|í½ÎoÌŸ3N›áçz¬9‘¢6ZgëÉœp“y³™?Qþ`w™¬ÁY}¯Éz¸êÀ‚&‡‘S¡ÝR†”¡•’Ö¢µš /ª,£Äöªž‘#r¢ &ï¨g7ÊVÊèî­µ¦ š‡Ãe ]<ôã-O;9íbÕEè»àtºÊ/ŠR6e"‘ÃZšZ&»n^[šñÂü3ßéô¼1ÚQžâ„Pßu§¬+V†3zjQm5Íök„áôÈ qÞ/~?ðcè6I›Ë„˜à5I)T8Òi'Ac}zJI aªï›H:Ü~‹ M{Dc©)CÊBÈ€] óH1j·Î3Ö®Ç|’/#eTØÿwÿÊ~•&/V«ö4ÿdßɇo×móò›[s¶B—@®T¥öOØ›?{ûˆÐm˜ÅCº}wáF-® Àêhu54»,¦‘hŠºEº¯fR‚•h-µ0Ú©øáP2”è×5Üâv|FŸGÎ÷ ­ ‡ Ó„¬JVùòÖî=(hþÍA|ÔçwÉ2É^÷½§}üåÍ/¡OÚ3g*Î Ú?,Ô<çÀ3Bo´m|\ùS;‡ï,ºŒ$Ú}uÍN†rú帔¹H²%wcè$=LÁÂTho\2ì‹"£L$Ø­°Œs£Ù¯ýG ´™Hf² Í@óÿÝ?r¾Å>ëxCAÓ²`1d›dŒŒÃoÉÞ²4u)i]ÅÒî¸hØ=öÈÓ®ÊÙǦ.Æh0ï´}%t=Yy«Î‚v2tºÎºn'+Ôƒ$cDF‡PÓ½›*Üžl€ÍÜí ƒÙpÕx$†Œ9]gñd a;ög¹„\Š&£Ù€í“èSY«V·… x= ¼Á<Ñ<‘eºåøÀãçåçŸ;ùœÔB·´( ›H$~[·€VúÒ¡)oŠ9,è“ö€”Ïê}JÏð4yb$VˆÚÉPUHU¬.øÔ½¹gBñÐkÆcfÄ S¡ýðWå_ÁXÔÌ;Rcëfß§óyä|O²'¯'¼*,[Ü6Í£âö†æ‹ß2rЕẨ¦w‰¶º¥=`¦øÆdÓPøúãfDJEÐ'퇱¾oâX+i(n>uÓ÷Š/¯ŠWÿ‘káao3nÃ$h?ì/Ûß‹õÌÁsõ`رz¦)Ä<ÄðK@Ñ„"§,µÍ#ƒÙF™!Õ Ù¨ÙÐsCÖÔþ‡úç<蘶ŠT­2¬"H(ze¬ç€á~Ð'í Ùƒ…ŸÐ1c 1Ì û­²dä³dG%FÝéÏžjW iQ-Æ•'ÀÀËj˱}€;ƒœéiééù—'áBTw®n3>„‚æqœÅ±vV¬QèÎèÆpß\ßcý7ä7É z¦­Rl)þÀðA-”¾àËdõé }ÒéÎÂóLt!ô2ye1²ìg¨¨k y_óþ¿ÝñyŒ¼:ΰ×. ÔLŒkÌ®ü¬!gO=£š4$m`õ@ÙqYþ¤ü¶äC(hÌóÚäUò| MõúòÆ~rÿ/ä/  sÚ'M'ÿküï$Æ$D1LI3ü¸Ð'í&BöbÿÒ3;:]e_µŸ!!ÓG§‡ cèÔG"ƒKa´K£8ýsÔòþ®ö}.ŸEÎv";Eïˆ.K(3º¡ i×prÅoˆÝVçZt½¼o†Õäê PÓ6ГúoŒß7Ÿù>ªŽ=Um|-ˆGG cÚ/ñL¢Ô„ºj£J饵4;NSçYW]v¬a¥åCÌŸ…Bÿ·y4&Í_•½!›Ð³gQc–ÓèéÑ£±:¬bP[{fAAó$ˆ_>¬òW¬Ó±k&2s2h ¹æ<8ÓÚÉ·ä/3,ã"Üe¬e¸ÁýÇ"íë|æ”v !û±ñS:^'C§ËìËvµu{àmI¶DX$wÆ:ݨ½Q¦/ƒIжI,M `ÆÒI^i˜] ]C®IÍÒ>ÛúäOÉ'Ѷ6ÿzó¦3Í;×zv6öÄÿ«œçgÌ4J7¬5Ý ôZˆ,šÚÓsÐã21M7‡ßŒÞ˜IIé=òÂ?žDšç³ÛmÙîDëEE¼'ø¯_‹~+.îðÁ NͬzüóN 'ž=ó¬2V©ñÓ´½BÍÎv®¤pê»xþ“/M2­„¥G¤‚LACÉ<ßCÞcæGäG™ óŸÿËíäÄ  êDëCœ'h:üÝ¡*²êã'M—²–v¥u5‘à‹\M?1³«+ÃVÖssÑö™×ÚF!C©Úlãe•—Ô$}ô¥$’žO`«"²Bïªçí­¤Â/¾ðSÞOò±gq-.fµÏû͹ÖËÊ»³]‘®(]y+Þµo¼·¤™ÖùüØ8ZˆªLª!dž*n“…Œµ„Ý»× ÂŠ2OÙu–uJÊ=j}}¡öO\Oƒycù³óý·ø3 Ëa›‚Lyyîgòç­äVÐ=TÊH¥s¨µw|= %e† Û@¨½ãëi()3dÈz*@í\OÃdF Óî¼ÁLc2c›TÌ3ûÀðA4ý>ë} b-S6j…:ÖÓ6︔”9pÀªž©½ãëiœ˜×œ›Ímn½#“ЈºÇ£´:¹»÷ЉYB¨½‡ÇÀǵ•>2¿§’]ËŽÅ 0ÁiùéÇ’2§O[[¬¨½ãëiÚX¢?–”¹xÑZgOí«žfkîs]ì’þÍDÉçÇyyͧÔ^ èþÐïœ"OMJšTôt‘™en“…Œµl3DF:ú¶ ±Úu–õ€Ó!ú;OV}HÈ“PR‡ª+žªÚ„â÷žR@‡¥ÈR&`~H~x 4]ÿE«½VYù öÍ%_x^ޑÇçQjû¶£'VÏÏ?zôèËwtäËÙÙ{iÚhLW©¶Qjo4Þ¨RAV¬4¬¼dº´„µd86œf}+ ÅÓ\®­:çYFŒ°Î_BíÃÃ-í'¯97›ÛÜ:u? do+;ÖÐjätù?Y.?—–ö ö'×–ÞU¯+ÚU_I³%wË£ÿ¯¡o_% öúvU¶;ѺL¦íÞÝZ©Fí}}µA‡z¡ú)oÇp B^s¬«Õ©¥¥ßPj¯R]|ð Õ :Óœ9¸x°2FÙV Ôñ7\cœk½9Ræ^±5@®óÕùoõo¼¾¥fžEž…ÌÚEîúžü¾4IÂñR¦1·oïv¢õìl§­Pc4¦Þ ›€i?±ÿ#ÃGÝéÝßc½çxÔÇ_«#ŽÈ ¯ñ¨8^Ê´¼Ö– ™(a!Q?M×KìGÊÂ=±-Í)»–­MÔ>ã÷Ìù™JCåc¾¶éÛçýæ\ë.eêÙ‘{XoÄVõmë•2õ$’Ƨ«hÃ… J©§J gZ°Í¤Ÿ…S Õ £MâƒAðd‰;⾜\~lã~Îÿù±þÝÇÇÐ>ï7çZ—Éo™¿Ó6 wÖ•e›¾zjuêCãëȺ+´+ýýpW¼ 2p0ª édÞÜ<÷î‚ A“CÀÆ€1ï"ï‘EKÉ¥© ºË¹”ZJ?5~ºƒØ1•1u!s¡âvï…ØD~‘«™ìÍ æÒ¡£ G(fb[xúèG¬¤iJ_%{ [¹Z9=húÖÜ­&Òýß–Ø““VMÞüo9ö6”\‘<4}¨¾»¾mû Û€ ñ¼9y[˜ræƒGÝûKÈKÓ‘éɃŸ‘Ÿƒbè1Ç£&Õ[ñ­«Œ«bi±+X+bh1šIðu¾¦³+Ö[Ä„¾‚ü3 £²jP2;Ù~K;ÝEôH³SRâÏóß_²:¿Í`!É¥W¾éï6BÈäÛÕ¡!’DI=<{€¶>;(|µš Mé˜Ò  AYïd=´y(}yÿ<8¿†øÊ¨ ÕC'ø ¹ˆUQqe¥eL0k8'¦µ:RwÔt4Ñp„PÅÅ»ÆoÚÿsvyqK©>ÛH2hˆ‹6QÆî‚ü+t“H/Öý®±®uÑw±«-šˆ&Z&R¼¡XðÓ‚U7Wõ ýß6øíF®’yji¬Ý‡G¤æ¦Æ‹âY>¬6ïRXCcK}Ú ­ÿ÷un ^ ×ì£ .tŸo’iß—‚Ò»G&óº*RÓĦRf7±û-Ã[rR¾Š÷ÁO^s:û†ü©´L r™âÍá"d…žD¡Œ„< l£F‘p–sŽvŸn•ÿ,á ñ‡âfã©ÊSÐùm=aþ0e[„Kp?Ô®†˜YÌý¡û{{ôn^…OSôl]E÷<àùOw`C ‹È€uäºäÆPB•Šâ½¼™ð™jS)£ ËXËæ0æHéƒ_{ÅŸã¦Ä ý$)Á KÈ£âM7{á¾÷ó–Ý!@ò™¤vMíÙ‚¯²¾‚Îo|sé"Lz-bž}ð8z¥äJ„) sƒ‚òØX;¿”çvÖÍ%Íå_\O2B, +‘•AHЗ䗟ë²DÙãàŠÎÍFNÊ·ãÛV“Õ””™Í˜íޏÿÝ—+æ/rÔJ²±Â23„ ½ytqŒ†ê„SœÓ°……büçùý¿ê«îVZmt~ë.£´†7sÙÆaÃìjÈå/—}w$ðÚ‰c¡ ±=„€È››çÿ“?«òßÛ,1€%€„eæ*k㘮‰KÉ¥r×SÐC7>¶”ä 󵯵>¤#ôXÍbÌú)C¡3[‡5Mòæn¾!£›©1“БGŃf6Dh,æJ]²wI‰{e%Fö3'\(´¤Zf 3Ög­‡ÎoÕü÷ô ±ÏÙWÂ^F;>‚9¥œÃÜÃÑŽîÀ È“£ ЖŒ/ ZDÓ?Òº†u* ©îR|ë yáäfáAäýEÄö2—Ø}$t¤îˆéÈ;úwþ þèBëò9ûó‰ØD1"þçÿ²àÛM8Ÿ>HÂD$JÌ1›ˆB*Èc0£:gàeÿƒnP‚pU*cSR¼JJìd a"âOÄÃW?Uq*³.:¿•’YUw¸ U…dOô™h×7ƼN¿—éŒf’À°Z3à#ä …¡Ñ}؃ ò¨x‹k;ýG*ކ©?ŽGdX'o,õö¶Ë;÷ Žh»hvÉìUé«¶õÚ“ 5²üÄÕÀà+|g°hvv$=#ÝÚ{k<-Þ•lGÏ(hìHÉÓ%!ëBd‰²²Ñ÷Õµ¤迺Ӧt#G¿ €o#švÝ`—á`ÔHdämpû"yñ 8è |)e b™ ½Ï’B2Ë’Eé˜+æ+>¨O/Z¯YŒYä߇[_ÏR~¦µVÀ\KWþJex&mY¨ C¡_‘¡©6#2.6/ŒO‡zòh`áURrµsçntp¥ê©¿¤(Aƒ3™:Ħ¤È¥RJ+Ûîx•xôÀÑ?®ü1¥:¥³¸3Lˆ–¢ÓÑ ©=Éá$‘ÌBu¹’wfkÀíg‘QË@."'Þ9±Œ\Ö®\ =½t2oN^Ī®6¶ön|”?{ãßÿ×ÜÐ}ƒ$ „…!a ®ƒë—ÈK;ÀŽpD´ŒjoÎ4#æR^éFÕËg"¶ q!¥cV°VˆÑ£ÿBÇ0áOw9ZÓç¹êׂx< ‰÷äP¼W!‹°¦¦V(¤ŒX:Bošd03:;P1T¼P©”»Û¥ãMJ“¾.uzÖJáÊ]ývÁ„héÂ7%»zÕìãCòù ªêöŸG;¬q÷$bˆìgÔÿwÿ•ÓVöCúqÈöU¸AAc_L|ÓõðšŽ?ù¥F½ì¾®¾µi\$—ã2®êß³Àº€.].Z MéidÚnE;”æ§òóUùºëÑá‹Inj5ƒ ŒF3jæ@ ¦)ò ˸en·Á´¾#óGï4ü_ÿ±ê7$Äè×t9›¢ËŒÒëœÙÏ^,¼?!OþŒãVC“A?ž<åh÷#‘Ô{Ï0ígZ0]0n踟ºÿtV~¶·{o˜-YÍÐsrô“'“\ëøÕm×röU¦‘ïŸ7|oG©&,B‹®z]]jYÚÞ;ÛUl­É„øBÓÑ«™.›ƒÈ ÝcýpãAüldöV÷Êe=L¨)É7ikÔÖcþÇÒÝÒ«ÙÕvšã+ ²²ç­[b• 3›ÝT*¿c?øWVÚÏcZL›íš}Úëôo¡¿ýú{9·<¤6dê­©csÇŽã¾%2<Ò› ¥f:nôQ¤Þ×J]™Âì¾É 1vrÁà i8ƒÁ24Èe>jQë¢tIcYTSñ8ÓžMÃ4 ýL:÷¹KR—Wf””\‘Ëo„&J‹Ñé°ÔTÃÈ‘õjFƒ›>;›.»:ɲ׵<ê¨Íd“Ñ(.+“æçS{¦Êì÷»ß'Ï2’ɬöæsXCcw\c´fg÷ÞêóyHá¢,%ëÕÌ•¹Ô¡'-Ðè2ŒÚº—uW3ÔÔ#¿œWžá–AIO­§‡ÖÃCã!6ˆf¬àJ©ÚÚóááÆÿ÷ ðí7Ýã{ëtÝR©M\dA,µÌÚ Nu!eÜ2J¨QWAmáÊp‰N‚<Ñ$nq†ës‹)MCíëëi(qûÏÆgrFõƒC™ ÍE)äå1pœR6ÔǼ>y¯ÿñú¢¹‹âT!®Je^P]­3;2{†n-Wþœ·õÏÑZmU~þ/¯ÎÞÞ]`Ò´h……f_ßz5C±þbf7Ɖê}§6W¦ÒŠŠLááͷ⑟ï^X¨‰p6›£VGÿ¦Ø5àŠž¥ïaéÑ}ƒ4͹9Ù}¿ ç—Ó³ª™j¦ |œOm¡JëüÙzº¾‚[A‰›‹²‹5ì–‰å¦wéE”¸¡|#ÿqÅÃd ËÏ5R3&6ÿjPPÏÌÌ2*=QÏG]WÍ®V°5¬šjV5¥føß]ç.ÓÊâäqB£Ð&ži¬i¨1}ÖŒ»=iì÷ ±†•øøDdddv°ö›!XÏ‹Q’k:àáÓÃN=‚ïRRr™U¹xéŠ×ç¼5§Ëû.˜ ŽknÞÜ—žþg·nsD¢@˜@-¡†ÆÚoææJsìnåÄÓÏ2Ÿugº“..ˆFc5ãZY™Ù£q§FWÈã*ݾî;iAÙ(¤]N9ƒpé¨9?=§Ïæ`é á¹¹·m¥fšÀ6±ê¨ Ü ¤bª(Ý@)†laöÙJîp%k¨½5€óFë³ümá+Q©|¾ñÒ™Š©æóÝÔjJÓüÃù˜³Š¡R3ÔÔF¬aLMurn7Jfyi¼b1"ƒˆFÚ¥GK½¦é¼Á—È’±·&%t80b#êÇfwJM­su50™ ׬~}æÍ]u£Xö¬$]iiJlì´Ð`@ò€•~+?éò ƒÁ‹Œ•uxïÞy/¾xA`w'Cr8¨BQV®öêWî=5Ⱥ¢RYüüšùûŽ»döìY¯f ðKÀWó¿òÅBúg™"œ`0Ú›Ïé{›·Òg§NËöîuæ=Êv¢i©tΣ¿L’gÀ4 ú{%‘’Ù¼¹€3×Ö£UWîlõC¬Pc VSƒ)V8ÕÀ¥Ô‡Ì\`æ3˜xwÂw6’‚inH†µvα°_+Šî|–¦>øs4'š‰0,‚Žzë˜:ÍTÇ­«åÕRû:^C@ÉSFjYµLV"‹®Ž–)dTØKá%T?iÌ7)3À ðÍã?häY'oQL3ýÀg¾8>¯ÝµèÄlîôB&&fÉß„Q'©È£4fˆ\úÝÆoÅ›Ÿç/±•éÓ¬¬ Ñ” ‘F£7p/\{kjÄðu/`Òé3•ÊwìøÙÛûÕæ[?}ZØ®îöûM7·=fäù¾^Ää‚:Ì}WÅ¢µŸ`¾•{5ªP¯ò=­,ò´¹öáC¼¼æ?Êï o`¡îcê?òwWTfñIúLœ‚…\ FƒT^Q-ßíÍ5ß4}̘fýÿòåË—-[æÄÛ®™çï0Óg~É|YEn–˜X3'‚þ¤Ï”ÀráBSe¨ªÒW) j«6T×L¤I]UmÖª=Å·I@Öâµgºž<3ÔÖwW¤JÁç»Ñ]*¹—2DLQ;@Ì»±ÜÄ,ë^–¸2\îvÓœ*ÊÛT¸èœ×rÜÞ*¬7XÜèÌ wz!÷oßâÜÙxŠxeÒìg¢žy#n”'˳™¦oܤLïÛ·¯I¼ÑX@RySO…YƒXnŒ_‹ŽÅ:ÀÊËfÇäç/Öëå(ÊW«Ïº¸<á:>¯õê¥p–ÛÏs0@åÓIIÊôöíÛmP—&.s=ø²9s\âÓ©…¦ËÓTCò/¯^Íöô”×üôÐñô|©{÷GraňÅÿΗKê´»+ö,X7Gúâ¨p&%I¬è"yܾxQêàœ~Ïœ- Øääî>V럦g >Rûæ<\mãQ[?à!Ç´Z°i˜0ðx÷=YûªÀ–-`ÒlÀá@·C ÿ+>ó}ž9ÿÌgŸ}ý©Œ ÓlnèaŒôP…éè9ú¹Þ¦Þ‹žN—º¸ V(~åó{àx!L'RÀT0ƒ3“6OÙ:¯dP°"CP]] ÷÷oþ7nÒZò×UÁSyWŒWÖ†¬6jÒjÀvVG?VÁ*õÑúpý%¯¥Ÿ=— âãÁŸµúž Ö«Á®] {÷V¤fZ™Û!­l 6#sFrYòåÚËö2‰M¦‹¥aª›ÄEþì~Úáj²‚Š×ëo Ù”âQ©þâp:Áq.Œ«}?|©Â‹ôŒÁƒUÉÍÞ½å6ùe³Ÿ­¨ÑjOä•g*äðõk:­aÓØˆFCÅ›¡ Øƒ²Óʘê®Ô¡Vp”p ›7[kfNž¤ö~ÇV¡Ý<€h¡èõ?__vs™™4Ûã÷„Ádúét×ë5 Uˆ?'Ðjúî ÿDÅóù})C§»’¤…Íî“ÙÜZUíÞàƒcXÓ*jd2“í:ê’ѹ3}ß¾Õ·Fœê-éÕß½?¥fXû÷Sñ$›Ý›œìΤ_oÅú¬ÒJ®Ò411 /h4ÀÍ­`Èà¨xt;òðR5–>„>db϶âm/ú¾h”pÖÞÁÉtºEYb‹á)5ó¨ÀœÆ‘w5ûq¹© &„Ó‘%Ê^óê0r˜Øe¡".ngZÞàªý¿Ö$ŸG¿d>L+.¦Ô ß>kh ‡¢¢¬Ê&*ÊÌ„‹A ÿ{!{á· ×筯«ìdâNeLw:]Œ µïâÞ­|a7=±©ƒþo ð³ùÆ` L”Ôi«,ôÌXãµÏšýýõS§¶[5 ØZ-¸cðø’ñßþØ~V„Á`xRʆڳPÆ$® QöÛÆøÙ,0 œœ¢mºi˜öds? Kþº~:^ÒmP—DçΦððöÙÒ ØÖk¬é_O¿\}ù|ÍyÇXŒ`ƒPÝ rœ~úß¹Òÿòß!ô!îÀ^‹ŸÈ+¿^›Rd9³"zt84b·²UŠºLpYriÉ{7ßÓ™´rä!ÀK§¦ŸËCáP>çA‚ó•çµnÚ`€,àfË{ÇÏ™<¶}Òé›O÷ @îƒ5—Õõ®ÝéÝ?ÉþÄ1y40ŠÇçTNþ™ñ³ëo;‡š¬ší=¶¿À~µÛv}r&.ùm¸WÂP¡ÐáPÐ@ ˆ}Akëµí¯¯:ž¬LvŒÑxp1D¸é;ý‚ý;Ó8ƒÅðµÇ×/*_#b;™(©Ó~}óg¯âƒ¨ Ã¡ @ GÀšÆb§²?d|ønÆ»z³Þ1F'ŠÈ²’Qz`:€€IàHH@î¨ÛÑ£ G¨W¨ý¬¼ù×!Ò}÷ñß±h,ès(h Ä!0ûuv×µ]» »~šó©clJ0ÐO€0Ê^L£¥]¦]†‰à0’,Ijz”Ë(û™8–[|ѼöÝÈ·"ÐáPÐ@ ˆã`Œe*òÊwËŸ©>ã£@…sz×ÍÞ‡í+DáŠNŽ d7ÿäû†ƒLàfË+?ˆ{Ïž 8`¿ÅÆÖ`k#×¾“ñŽwÄÖ4L“IUÒ§S¶0¶Ô 50ìJ%¨üü°zójs?³ý¬¼qf‹›üs¯ ö›Û ü-Ø@  ±'c'zM\˜¾¤Œú3A4d)"›o`nP#j˜vB4ë‘õ3oÌ ¤ê¼í5¸ìBEÆÎêÕ:o3ÅÐçPÐ@ ˆs`¿ËÖ®Åë£Åø]ÁwŽ1:•Ì4m¯xSüÆ=¢‡ asLÀ´ ÙÔ™èüìOÏ–Ž*µ“Y÷üÅéC\g?åÓ ú qôX:-šFüL¬Z»¹póµºk0ÊBÁ!ù{5ÒŸHˆ°DldlÄÓ†X€e ²…8óÎSvTÜíÒ{†ääÓsÞ÷ûþoAŸÿ“ ¹yÓ™æÛ­uèvxáÐííÁzEŽe–Ù Ù†ï ¸ÇÊÈ•¯ÝxíìXÇßÇg÷öúwGçè½)ÝŠ]Qb5Ö{£1Ý$jÔ˜W£1‰ÆcKbŒ½÷‚Š ‚ô^ŽÎ®—ÝwC@ÀJûGæóì³ÌÎ.óÛ™ÝÙùÞT‰NÒ¦¦ÍÍûû.,`K¤È(Ý(!.ÜEßÕ>š&/ÝÉž•Eo+¤ÎØ‹ìUõ<Ù<›6¢"Ò“ËíÑê†~Iß_‘±¹ûåuùùœÎü‘A32:2·wZë0ÙaÄa²wëååõÓÒSÜ)´Á4õvõ«!‘Ö‘‹ˆ6ì@Êã…™ã̉[rPªt̳ôjDÝÖ/,ìÈUóóÛ\Ðjæ/ä¯*P5˜çxÖ±²{¥V`TŠNpëºQ~ccêæÞ”χ¹;?ób‘ˆÝ™?2F¹wìX+Ò”g D ýùÑXÌ&fc#}X…,n·t`i«Ûú:ñk…Aá®ëmÅäfÿ9‚@Ú—š+UÿW[‡1ße~?lA®kS³XÍzÿŠ5^ëãŒ;/Ö,N $ì§í‡SÔ<…l½Y@L%¦¢ÊMûö¢HNÃ[×Ö¶Ìm·+n¯öÙü[LΪÁÁ0ñ¡ @ ÿ]L+Vê.×*˜å>Ë9ç³äÏÚzUw:ðe€S’ú•€xo¡f!P606¢…ðÑ4帱Ù>˜ "ëQâdsX…¬ò>å­këœrûîœÝzX{-sN7¯gö†<&Ù[‘|ãÓS—-‘ëíÜÆŽŸ¹Ã•mlYÔˆOîùíƒôâb3aÄÄYúÀ§ü—i6›ÿ»‚%5vB½¼z ¿ÍGŠ^ºáØ…áËd®AsÿãÏCêN!(ÿÛ齃ègžš+Uß«¨ý©¤›‚P6uÝôöý·¿Mûö+ï¯ÚÔò(±V„„²‹=™ êÚ7îSîï í¤T•7ð†€¼ŸVtüžÖ™_{-ÐD怜ÑÒÅGËÍ·´B&ò†êNöÇí‹FXk Ðh}JqùÔ C)Å ­\º}LïN˜æ ³9y(º·tÿ™¥R)ƒç×3rÏÈîOùß×ÐÙ·*l§/ÊZ»*­‡àîo[¶š¼ÿ<„n_³¶jRþÇÏŸÂòùOÓl6¿¢zãFÂÕS¨ieG¶Íµ¥Qkõ=˜4mÚ¾˜ÔÏÌmÓI͘dDÍŠ•Ú£µ =T”º5pë­ª[¿äüÒ¦v™(kn\ÁðxYlþPóa"%±Ìmërq†uòw>ä~‡|§ú%†ÔÖo9Óò ö¦Û f©f4)­²Ge+š‹qG‘£ß.Ø1¿º÷B}_ùx6'ðêM­í>åÆÿ}_½ð™—ÿî«Á‰¶4ˆûì×—ØñÃ.lÈ0mµ±Ã¼^u.¦šýfÿ!T Ó«ÿAªt{¶¶ÎB ÿašfóv…ÐÝ<«çÛWl¨Ô¦'ÏžŽ ›0ü¿˜ª¦+Á£9\Œ»;d÷Ñ‘¹;ÛÔn 0pYÖØ_@ÞÓ¼çnpß@ßPÊ¿‚úÎù¶ë ýIääVdë(bÔ[Ä[l”ù®5ÅŠô´@õ:Âḃ±zmµê™Dx9¸Xhyÿr'ÅÛŠ×û7ÉæÂtd+Ò‰ +ŒŠ m)hêoEuðûkÍŒ9€VcAXLz†J Èþ‹SŸÍÛ“üK‘~{FzÛ7=¥®ZŸhè5ÜÆü¿˜œ¦+Õ{ë?Ötëýaûÿ*úë×¼_ÛÔôD âš )×5-Ð}Ä"Í")+iÇ×âªâ:Û;ž­»?äü<·”XB½Zb˜Xn‰è‘ªªÖ²˜ ’÷"{ ì}¹Z¶ó^zçì ÜL6G°7篻º£ëÇÑ×îØ8zþÁ§×ö– Áoê/X:§Ÿ?üæC ¯(“Í "i÷}ß…cF4{6óÈ/¶Öÿw«æM+V²úßú6tRÓ(gŽÇ3ªÙ«$eæü!ùg¶óéÁ§}x>5k[6î^tN¤‹E)K­1‡­ö93rZÅôupýrn1±ØØÖÜ 8X¦ŸïÓ¿ö6±q#Ñ(›´¯¡š×R{{yT¤mËÒ`£YŒ¶¬¡ÁœŒOàÝî¼k ŽÑûûïŒk¡ÿ`ß¿Ïýü¸ˆ'Œ˜ñÁX@ ÿišÍæÉ?ÚíÌ36F$Ã=0~ø¡½g»¿vì†ßôÿõ´­[±’õ«¡¿%ÅñJÿ#®L8ŒW‡"ãkÊ9‚,öbôÄwfÞfUŒdã„ÛË–€Bš±zæ°™iYßæ•R vh²„Ùô÷7Z¶tŠ ÃfmÐÚw=ßý>åûng»wO*WŽë:Ùµ¸ö¯œ¿Ö'¯wb;ýØíÇ>Ö}žx¥Áp´šLýÅ(K=[¹Tn-ÕÐçÁù($j ±ÄX˜|.TìhHˆ¹ ¥ðƒc‚B Z<å“ý‡KX‚®§D iÔ¶4hÈÆÇšzÓÍÇÌýh |È+öã©!~‹‹7¶ïm¼µú±¥j^_&}5’—1!"¥gÑ)îU•XÒ,]sß¿n³ëãŒéä[o@0 A{4ÿždàÀ­?é‡ñˆu"$E|5yùÚ€pu]lZ4»g¶óæ°Í%ê’ß²~~ux7‹ns=æ†[…#à?6`¾L]v ûÀÎŒ><Ÿ½vö°ìñôëiÊVo ªC»þá”9/s“s‹Ô ˆãÈñxÿñQ]7*qYløÂ™ ?5²¹]ØêÃV?ç?b0í ¤c©[±’³µq–×íh£ˆyÛ°}û ;¼Ðw( •gý1œu˜j_½È>ôÊD}æhékß7^oЖa»ÔéŸ%ó~™ðeµ®z‚ÓróâzµZj(•fy‰”{e›M¸¸,V«‹ø•’+»³v_/½>ÆqÌþ¾ûƒÌƒš½òć)R‡×õ±•«­¯[Kê’x· ‰ë€n²G$³A}Ï߃eúAŠ9y¡%¼¤ Ñj•—/¯‰Ù'‘ä}ûíÞÐÐiƒN¥2a‚B ¯gÏ.'³9°ß~ëÑÎÙ¼³}d3ÒÝRý}=Üø³Œ!è{ÄŒ4Gämš‹ÏÖZ€˜*i2 œÒ"»zçê1û| ^O=Ë’ŽÔVüÈ“yûʵ?>qög…1Óu&¹¥HSHe3áÆk†õ믵êÉmÑšËXL õþ}–ÜñÀòrôúuCX¹µDÇÜ©¸sªðÔÑ‚£t‹·ÜßÚÚc+‡ú´‰­mÂÍìÞ÷¸÷vf¦¡¨)6§í48À#‹^úNªAõ6d›°ZD,¾x±–˜-¤tÂ/L]6o• örw°uëÜÜÛ¦ÃŠŠ¬sçV¦§_œ?ÿÆ䕸Ð{2k¬Ú;›wÆÌ£+¹×vyÖês–ƉüpãùT9J‘Žëù¾‰±Ñ“3ój·9HV5ÐQ÷–ýªçøIoMOyŸï²‘©aGšQÍôÞç›¶Èjâ¸gwþõåù.ïºüë._G•G(:ñFÔ¤ç ÛAƒl °À¤¼XÉDª,3S=eJI‚‹ocÏ\D.ÇŽ{5¼¨¦‘ëä7Ëož.:}ºð4)¶F9Žú»ßßþüçšq ûû­±±Ý~¯×4üŽ@ƒÞ™—Ö¨Úæù)Å[-½@¯×ˆ×6Ò™úO²Æ°NY;SŸÍ[ã#ó2‚æÒ¥ÿ«ûÐÔ‘“sëÊ•ï‡ [Kä€ÌæM=Û-›wÎ m,Mý«ZwYGdìKA£8‡k¾!bØÐÀt["Pß×·Ûc¿—UñyA_ÌhédMšfå>ß5hªÀŒ Õ yصgORI>g(‚ö³îGn¤;U–z±äâάóïÍ÷àx„Y„ ‚CÌC<¹žOïmƒ(•Ô¸8õ´i»¾-†àpôcÆP÷îÅýüžÙöT¬*Ž.¾]~›Ü²åÙ¤ÑaÂa".¸p\^4MHáBª“¦ÁÔ”°«[Ó2_Zͤ€”ß‘ß'ºƒîN™úû³;éȦÖÍæ/#hbc÷5ë³ äÕ c³y'ýÈ<¾b%@ÐÝ Ź /ñÀ=kí2ß*(˜¨ˆµR?H“¦ùzqFŸ3“É×ÊÇ̇ÜÞ÷z_‹kHÄUÅ]-½º!eC¥¶’Ô4n7ÓÞãnÇ´³ [Ô©Jn®ÁÉ©¡š©Ó4¸“’›KøÕO8¤Ô+IùR (H‘¦*]šNîQ€v·ìÞÛº÷Dç‰AæAT´E}lMš¦×.Oš-òÓÂÅ/ˆ‹àâ%äÒQ2Q§¶>©bäÕ÷a*C1'°•ÒúFñ_ÆDçùÈòÃô…i­ ¶|ù ë Õ«ÿ¨¬lff!++·¥KÛõÇÓ±c`L ï@ÓÙ:LövƒÌætX6û³õsË韘wûÍö­?ß:q%MßËY«—¯ÃGõjxñ0gwÞîÍY›¿ôùrœp\ M'œ¨ ­H×ë{8ŸÍŽ¡'OÎi‹h¢uÅ]]K\A À\©ÉMEUq°*äY"Äàé?Ï;Ó¿æz†ž+”ªôt«jÀgXl›£çЈ&c§±jãÖbzõú¿Û·?çw’N‹ùÛA¥±éï½´«$¼k—á/ Sä)‹’õ³è÷¹Çç‚-º˜¾¶›K—“–8û¶nýŒn×óË]¢RNLîC£ ÙÉwÞÊt|{´0%ÅkÔ(¼£>2'N ýûKÚSÐ4ëÿÒÙüeª+ÃÂfÔvl$fC§Áߵȫ™Íè°lÞ9?2}§¹Ý@3·óc–o.ž6¤Ä1É‹ÀQ–.Fò¶óÛ½Ì{-LXUµÒo%{Éú £ši`%Óe·C”QeéXäT€®·é“šåí®¡RGvÿì¶´¶‰‡®Õ†=Ôß Ô)Ú¯iƨf–É`1IÀxHîŸSÓ*>´>ký ¯‘Ö‘&ŸŸ†‡µ„JA,®Ö€•òe_Ó¼À›ïJÇŒŸfó—©Z4è3W×Þ¿E¡ÁO6üï`êŒýfuïaö&Ãß”²7ão‘þý]l8[‡;Y±¨Í·Íiæ6^¯¸þEÒ=Í{~éó¥€*hÝ{C r' –àé«@qGQVHvå%/+Ò³WAE²»§ˆ…YTä‡f•]ò²i‘˜Ã0™s—|‘ð¿òÈâeñŸ%`p¬Û13¬™Ù5š²UÉø"kŰ-* ”OCj›óD¹õ|¯n4¸èAkÈ#˜ò¿¥fvXõæVÅÔ€ìÉsÀˆuBNÆÕœÒÝñÙ‹ÏÆÙ ¹Ú>©Ú¦Ÿe¿ó}ίÏXq#b‘Ç¢©ŽS)H«Í©S¸±ö¦ºJ‘5×;SmtéÅÆ/dÓIw……*JeáÖJ´S”ÐJƒrSΦ¥'–y-j5ôI—ÑéV½ñ‡Sö?éŒc^ß6¥¶‰é[Uwo>4òjª“é8.×tÚUÏå>+Ä]©ÓßÌ/¿šWöû‘,ð„j…µÌgÙxáøU©«öäïùÊç«þ–ý[ûf çBi•ñ> ÕçÙ+¬‹Y˜yU1écAМ+?÷]Æw==w?nN5êµÈðÐ.ä¶56+©\ú¡¿m݉/§GÀ7 y¥] ¨£,@EÕU#V¨X„»¹‘î,±ü)Õ6þfþuÿë\é¹åÉËYΤ¬ñäx¶Ö­:fØÑ¬oZ;oâîm{óÀ¼ô.zPin§@e¯üÜpyª¼•é+Ë4eü7„òB›^µ²„FoÔ­XT­Š=^9…°‘ðe‡‚@^]&omÖß8iT3þ¤v!·§WÛ ³6ÈjÐîüÝ“ïN&ÝﺽëÈtlÙmÎùˆùMGË:á"³Þ°0vyAõÒ¡Uh啲£ÆÕ;òvì/Ú?ßyþL‡™OjÎ#ÕLÓykvìÌ\qÌS²¾éPÐ@ ¤9žYm3ÇeÎDû‰¿åþ6æö˜ÁVƒßsÏ…åòR¦p·¼t;ÔꦣE3ʼnNí™W¨8iÛ¥¹‰%.ñÊ/â© &7ßÕCÄ5†â”ø–²µ=Yìà‘mÕjk³ÃÑ’£›s7™ïv܆þ´ŽÏ¦1Þ 5ͱý³öØW®&‡›Ã7 <ƒ§VÛL9Ûëí?‹öŒßϲßB÷…nì›:¢—xK4¾VUhT7ö¹.¤Ã/9ÑY‡(ÔJ¾õm{³ö‰©K¥.Û;@FGùåÙiY¢0@‚²‹r}‹ÌèLYi·Ô‡y–Ý ­¡®.V\ܘ½Ñ‚j±Ñ#)hžç_jN„|ÏŽûD1f¤#|E¡ @ È‹T`4WmVd6ÛePåâ¤;“xo9¿ÕײoÝ’×Ϩ¥ÀÌÏ6SÁì×5¹Ý#˜ìQ#GœZ3— ‚Vc¨qUˆšè­Jœ}NÏ)".¢í‰I‚PãzIåîI=« æˆê5ªLˆ4Óù'F³>k½Ú þÜãó¾æ}_èMšÆòs2\dû[+¦u…¯%4yyšVÛ\Kð§#ß(Ó¾’}‹R´o9¿9Á~ÂK¯ÕQ¸ÅÝsÒpŒ•à_ã$û8…>|àJËô¨S(7 Èj¹BøÿèøAô* íÕ³‡P+üPCžHÇþ€&oø=ɽù;r”9‹\°¾ÈJA„ŒÀSqCŠÁò…©z ˆpµï!4iˆ;Ó~ˆÉÍP^övs{{VŠ|.çôˆ©ŠY]z|kMÕc„û;ƒ×CPpÜ­¬L(3t:5•*²­­ hÇ÷üÍé–å¹]3*B}\”œ_äÙUÄg0%%ÁÉ+CÔ5ÈÇRb…!0Ä@ºuAT¨žt»Rd*½•ÈÆkˆLV攸)Uºª9NsÆØŽ¡"Ïžª˜(&Hù‚§à¦=QE Þ¨„¥ÇðÒ%@gK8/£&ÑÅ/´^7 4ƒVS±OJÿñ¡®4ÃkQ+/–ÇMw'È¹ëæŠ±£5òÜ‹òÃG >¾P†  >®S3ݳ²øJ¥é¥Õz”–ZÈå÷ÜÜþ4 @)b74çÇ@( åL„[ 0v– „2¤ÐZçÓj"]ÑÚÞ%HA£M­ ©@m øI¸Â5äÌHÕ“K"nòŸZ~ÅRÇ¥VO¬•ÁžƒåK²Üðdœ ŽâKA}Qê*ú1Š:¡IghÊÖ>Z¯{±õº!PÐ@ ¤yht«]ý­jœÔqÝlÖ”c·Jõ¶·šaïœ_è4üdѤùÙÒã'ÑîT?Pì9*«S3u ×òòL›kFAõbÏ2<ÇF Cpó²\‚ÂQPð C¡ƒD)â1˜ÒRžÉj0€| ­d@ò f‡µ‚Å´* ¢™Ž©Nê-ÏÀ‘*bX$ßDYëøïpwª2. ‹ö˜=50¤ÕWÀà8bò…âG¡Í¢‘R±|¬RÒiqÓõº{‚@A@ Bì¹XÔ½›iµgä—qþÃÿº¼Ò€cæ×o |ÓŠ¶ ¿kóý©9‚œ_{§üLíRhÑ=ß,¨„A{Ô-Å^,î@Aƒc|1‘|?‹a@”^²¿±—/…ç.ôÉIv×ôtV»¿üñe2@¸ R°-E€6i;1Þ,>—™«–¿Qúº³Ö&È5â6¸DTuòŸ/Â)îÔ5ÖÁŒ¢’{„ý´nÔ’ XC‰õº_yÐØÃ´ùºY︴†žÆ§W­-Z›`ÉÉÀϯÃâÖi­Ãd‡‡É­·)"‘@(7«fþ¼|í”™÷©`ãøjƒA=ùŸ‡ïŒ0Ý…››=¡óÚQ…ZeAnC©­T±BÅÁ°‚-\e`1gPºe`¡Õ>ź¯ïø””Û2~H™½¹5òUX:ÆZ::9EæçŸ­óÔúE=Ò‡¢a$7C=UÞå&%p0ë" aŠfj¥hïJ¿Œoq%kdÊHÅV…±ƇBéC¡Í¡¡èsþü/+³´¶®è³Ì¶Ù³OY¯»UHIA|};l¢æìl¦››êiW(2©Ñ2C›zËVÈhXFFGæöNk&;Œ8Lvh½M)+3kNÐ࿟¿úp=9ÔÕTª¨UùyˆÅ7£¸ñuó CRލ ïrêKo†ÒrB”¹‡£dãÈ;J&âSÂõ-1®O©¢ÑžbÝÝ=²ÍÓ°·ÐPÐ`„Æðöëø2DÍæÞ·äÅüÆùUù ¼µÈ95اœåSÎ4½ÄF,±‘(YÜ 90ùÃÉ/gº²Òœ4ñÌÌŽ4ô§ öÏÃÈÈ™Ý =i6P .õ‚fÓ ÐÕº#ç€ ‹çÏhÆ·öØ1àéÙÞ¹Ž4Ÿ\3qAg³Þi#“&;Löö¡´”W\l¬»w¶±‘ÚÙIUͶž¹r’ê~"µnÆ~:݆¢Ký-W6Õ‰—Ÿ{G‡.¥×œ$€k®k`b Š5{ê‰÷…á—\(DmS‹HÐ|G×||Æ‘Ž‘#wffžIM=ÜŠQCqÜI$²)/§kµ:½ÔÒ2_(ÄôM&¥Œ““q©¤^½þ¯¨èªIÖèQ=ƈq¤edò2} »DD½1ôöPœ‰“òEb]!ñ’\´–hXSf=g(n+^NÊ”•YÖT“xYXTµ³¬!¥LJŠñÑœ8zxí,kòó99Æ…½®]ã;9©]]ÕÍ<»{GP×H­3§á˜1ôú6ªÄ]ïö¸8^ø`S_"£͘1 åÈNnät6ë6â0Ùa²Cëí)bÈT3AAy ý•ªÂµérÜ&‡4šyú»ý0*ïH„LJ—o®©Ö™q¹ó"úùèúoµí/I8ê»n꺻îwG'Ù/¹æŒáõ½FÄlvŽ•ÕJÖ3äFª™“'ç´n¼H5”œl&¯-†©V» ¤Ò_ß:MCŠr¦M¬$îbœŠ jEŠEÊÇþ¹þéKr¿:NYϤóóϨ†VÖ‘ç^¿]1µç‚åÁ¹ÆÔ–—}x&ùv•ÆÊÂjÅðÀ¾,J›>tRÄ©fFÂÛÿm'E ¹‘j¦I³ ÕéXš¹nšk#ÚŸYÚÏV‚³»[%£aXKÒi­Ãd‡‡É­·)Ba㢅ÅrÎ]ìÜôJo_¿Ó¾ÆÅ+qõµxŸ Án/©ú†ú޹Ò||ÒxŽ–žkU&”HZ­šFñùYÖÖøSÇl·E{“sQQš©ƒW]í$åÙ;rÄ~ŸWÆ+¥”Æ[oö¾o“ßµ¸‹§Ìs@êÜ ÇÍìœrœÎ¹‹«ZýÞTÊÒwbTž±¬4ù¬:’‚ïvÄ&Æ/:œ3Ý¿z¶7‘<­½)3­(¡ÿôÀtDÙµ`Ô»*ý5ÿf,˜6ìܲbvÍd;7^K;.¥vðª°î&[Þ÷93æéÙ‘¹½ÓZ‡É#“ZoS¬­¥W–˜wcë~œ„UwTWׯ+dÈ6¨~UiNjè#é¼x{){7¦m ËuRPakKnÏo=+ëlë×NϘÎ\†“>N“§­³ˆ¾wwÍÿTth ÆU©ËÍ3¸Êènñ®¥™¶Utƒ…­ÆÁUm?£|)hjªn©fL"†…r¬Ø£XG×=)|šNg.‘Ò¢mËËQ• g2Ÿç®ŠrrE•’Àmù¦Ãs{/ÄŽ´ÅÒB«IP€‚Àïjð©4 |›ò•Ôïμž²¥QµÇª4lýæn•zùwY>bx’ |ðáF‡¼7„ù\© ¼úš†ÿ±!€~0æ°Õ†h¹¸Xhý÷_ePÍŽ›Â!ÕÌ‹[@ ¨6÷¨ Š Ò^j‘-aìÉ¡C¸—™v"cäáêBâÅFß\ÐÚÆÕ H+éŽÌ 1±¦TªR„…è¼Pµ@MC©f ßPY}e9E^B/1n´ûÉgFt[m+sê7ܵÒ}ð®ÁÕ¶ÕÞM•“HäX\,63£èÔ¤¬1ûçu` ¹=ó>=»öJëZëþà÷ó¾-0ÎâCÅ4,J¬ø¹‹yLâ}5Ë¡[Ë:ÐÄ];ÚíxÁʯæ})0Žpþ`å¶_¤Æû_÷õüøÔxTwÿWrÁ‚ 3šqh~ì5äNPâ„£'IŠº–¿o ·/ 8/úrñÔyT ×—>tòTT…DA1· ;"bD€Õ¿x¥i•i€Aš>ûíbߟ}â«ÿû?ù¾Ôµ YT4XyqÀ­”ƒr=4ið¹ÇQB xÿð(n >HøÀža¿ÜwùKkœT7@Î#TšëE†Åt•±6è6Ëhógè¥T§KLÛ™Êkñ‰ •DpHSßY‡2>ðèõ^yBϪR•šrãùÛrÍCc¬…2p<”î)ýLýfäîi%´’‡]²ï¢WNýÚ¾Z˜Øëf/{½ÌIfR6¤š±ª¬ŒéÚUC£ñº H®>Û{üxιsdhÏ£išeÙëA‹Ï%…ÞÖX[XnxÝ·%N!Ë~í\µ?­>š?/›ÿ3£¾ÞúbÉÓÁM) > G $lbú<@׃Ë"Ý–=ZøŽ)åùã¯Ê}L&ôzÚ¿ÿÞ»;ÖÛYÈ@ó‹ó÷ï>4B]ª?¾NÓˆ—¿Iî“£7‡çR­vfÀþÜšñÙ­ü?Âíc¯¥\Õ¢'¹Ï+T  @ WS¿ÉzlåµÄu§|“ŠÝ÷ôSæORtKмL-T}4ºÅS'¿Ç ›TN0¼©S`€°×Ph¾% Ø´h ŽŽ`(Š“Ý=';P6k¬æÒKšÝ¯á˜&®žKnž5žßo Ú;õßB·ø_½-bYÈ,‚Óƒ=ÅNåå©Áš•(8›-6Œ÷ï¿Z/¯çl{2ꌷ‡Ö¹Ù\ëZ£c aX²åâ;oMÍÜ··eÀŸgÀØwÀ‰µ W0¸¶§ÒÓì¯háúä­.Ý}sƤ1Ù‡³)b÷î¡ÅÅ»ØÏà8T-*¢ïÞ (ä[Sm¼æöm}·nµà‘oíºl}¬ŠÎf8õõþŒçm­ƒ‚@^q5cì<Ê26KJ:{ŠªŒú»ðORQjËÍ%ÓÌìt¹ÆÂáP€«U0¸ DbjŠzi¨@m øI¸Â5äÌHõ‘G ¤™0YÅMÇ4‘‡WF|¦©^ªœV^ìZ|Çîê^ó|œ¸çSâ#Ô m«cˆšÛ&5ÎÞžZP ñòjNÔÊ~½éŠÙI§ OöYnÛºOðîåã÷}‡ÞõâLla@Ñ·‘„+·9ÑŠƒ³i ×dвnÓ±7/&xö½âÎzÓ¤tSRLþ¢âo© ÆßÝ’”´ZCXX­¹sÍÏGŒÍ‘Æ&*“ÐbÛ~?X÷!Ò·»_È Il(h äÕW3&ŸF㞪õÕŸ$~²¾ëz šEËÍ¥ÒݳAùë:ME‡‚h¦cª“zË3pAe„þ¤_‰Í„¤¦Q>R9@¬µÖäæ$²Âr,ªÕ%”’µ%“ËœE‡nÜìoÞwÓÎA©l©føKA7Ô4¤š!=ÁzëFY.Éx#^´Ä¥¥ÉR@Šñ–{³õ*ȹ½€×‹µl‰ QÈrÞNâÝ™çÐàîkgAààŸF¿[eY¶)AõI©ÊÿØÃA‹‹ ‹@׺ÛÑç%ýVBéÖÃ/øEï y5©º§ëO¬gÒ4UwT`X“¶f°õàp‹ð›B’n„x¬ºÊTXQ…õ©©¤A‹âZaÎ7[Šl6EF:ôã-pGZ!L-•ÊQ(Ø(›ÍgÛÛwÜNþyï ¹8Zte?H`KÍÝ}"m†LpîÍ¢«HCª™†šÆ¤f$k@Ój›’—Ÿ'*á~œh:<¼zûÍwß9íÎ~á€Òc2Xw¿öpëFdê{„#ÇØuj‚á!-¼Õ‚””‚ÒrcߎÿxÀšMŸ‹©t¹ºod—Ž÷ËìM8|1¦Àz Í©»ÖØ¥,¾_ ½¥‚&êÆ¦‘£¾6èf”Vpî¢È؇ Åì ˜ tj®tlÖß(qF$YÒ¥²K—û^n¹šI`xd•c5Uu?½) ÚP.QÙCtŠª£ž·°½©!‹ÒñÌ)bV«È>>ß=/¦ÕjkÖ§S0o‚òN¯wPÅTúÁ¿wvž’DmÌ]½&¯B`èÊ °í=rhP¨6icÍó©T©¤"J%Áb韧kŽ߉†G3åN\¶5èÃY¦QN/LØ "ìÑÓúùðÖûÆQN„9þ; …¯·<}z ?êRüæ÷ûºÎüNrLÅ_'Þe\,—Ÿ•L—ç‹ß¸ŽË¼è¿¸HЗ˜ëoDÏâ¼Y.Ž?ЧïBã›C 2ä%;bCA@ ‘oS¿]챘ƒqZŽåßÃèwQ…5u3Ê·Ù¤£·²ð2Óþ:ÆÆåƒÔ%/l–ÖúA©qØ^Ägtc¦±ÜT€» Š™˜€VXL@K¥…]ÓÒ’¼½5´Z¹€*œsç´¡aÓý¦ãòÝy ÑßyoVÝY•óÏ×ÙJæðEðŒ_úzyU­Až©f˜ññôô8‡ƒVU1££ŸsXx³œùy×ÈC(úõï¾L(ÊdZÀyäÁyã!ÍxÌlÅìhuÙRŸ¿zHm&ž ݥɵ43›àjoK§ûWô˜õÒk…,©u±ˆÏ;w¢uÒsñ,ÿ•W'í)ÊúÁsk$Ç µIEª« .1 2™+ "µÌåÆw'‰…Lïí ò¡ @ È‹³-gÛ×9/7#°ÍÃÞËMv#z©¿Â®ÔÿfÓ¡ëõ–2¹×`X…™™Þ3L"OÈY*{=hë!5M±••…DâBeTñùÒI“žÒ$äÄFä øÍPÉ ×KE—“F¤¢úFò zõ+ñë¢íâÏñïbßÅÚdzÔ0\=y¢W¯Ú+ôzê¡ÊîŸWh«Q`œÄ9‡-.Ť2z¬¡@ È “¥ÈJ‘¥ì ÞùrÿN*qêRÍÔx^iz½[Y™kyy‡£¦Ñ¸*•OqqŽ•U¶µõ3ìŸN¦]’EG¥–XY‰½{–T}z—Ç{ ’(¼îKÃM‡"•èA¢¤½ª½)D öó.²÷“Y¸îcyÙxy{xÓ½è€Z«iš §ú óÊ£h¨iH5CzÚm·zñ(éÀ;ÈÇÆI_¸\Âßôì °Ö)÷I5ƒ-’ßEA㬢+¢Ï=˜wÐ]ëÿæö™3û9î·göi’†–ÕÝñþÁ}6R %=þäñ0ë.Ê2(h òÂ*:4Î~ÜKOÑȾÏ7]  @ ÈóBPoÇ?€Ô4¤¿euu‘@ÐT'‘a"ç+N½Þ¶j¦éâ—$e8gñíùÛ{£&v üȇÛôû,k~.`£ÄÞ\E‰£#+:U*q‹ŠPx~äjúóþý·`ìÈ‹’Œèò‡É²´»UÉñ-+öI ˆœ³žïlc.³°Ùäâç•“aÏ£ñØ›Oç“{6•ÍÁ8¤û)«U[šžàO44jƒZ¦•äñâB™N&ÖˆE*Q¢€Ü)‹ •…•šJ®‡ϯ« k„]¹·¤×ÌoÔÜEŠH)CÁ:ýij†$6¥üKWƒƒ‰—³ Js‹cÔ6 ;^¥>ŒŸ"æf…ÆÑÆîó ‘s]Ÿwx>vìX‹Þ‰  å- ¡…t õNq˜ìÇzÅŒx§ÿÈ8·Vh}UQ\ï½N6žèÔ¤L½ùæÊì!ÝŒá÷ 5]@ËÙo_”óÀY§Ë;£b-OˆéÏgþ{P6ænÆî¨#k.[õ‹ßÍ#éTQt6v¶%hº],çñRÑz±'³§)²,ÓE(*'-…]³Ul3¥™ÌFÇ“ÓØylž‚GnÂJ¡°BÈV×ÒQˆl†»¯×è`sgi“.4½ÅÅ9te/ºQr„vÚõmS&FòÍJ¥ ¯Þˆ/`¶†qOÅý=^Ôk¼žY«0UµðÖ¿"ÇQâ¢Þ §7™x,SEˆ!O^ž!/.{qE-åVU¥”¥ŸL¿É¿)gÊUt¹WÒ•*šJMWËX2†–ÁÔ0YšfŠ| ƒšÉ iz †PKXòZñ£’-_Õ_‡ª@N7n,€3€ô 3:лzn @Sø×ø?ù Á¨¤ÐBÞà‹hÚhN‘Á\{b:ôè1D"¡gg׫!Çu¨[øåÜÛ¤ûÚ5¾És]ŠrŒË´E>XrÉÅ…[ÎÛôû¼‚f̘=§o¾ùfùòå˜Û[xÿÿEÓÙ:Löv¦ÖâöŽŒx'ÿÈ$%%µV€†«Ìq¬ '>sýÌÊCk~2qìÇ´Yt<þº;ßhñ+jHÿþÒÑ-ÈvÿïÅýû»Ö]¶åáÖSÊ<_Úõ%M©~¶n£¯þ'ŽËHêÅâ‹7Ên$ˆr幞fž®¸¹³Šoߥ¿ÊGå™QÍ0«ÖU‹µbIìµ*>­Šgk²+µ•ùŠ|ò_0=Í>×ÁÕÕ—Yæ×÷OáJÕvÛsc½íÇyÛ» šŸ/Ç8[]A¢R=ÿlu áÜ&l<³ü8¦Ñ^DÀ]”,õýü²âßÀP Êûmés¨Àͳ;x\fn®a0èj5§²2ÍÅ¥„*9·^éêº8óæ z‰ëÂóý5Jƒ±çÇ“(k¶èQ½Õ‘[S£Ý33™:]Í5¸ÃÙZ;SuŽ’F»ç^¿ §Ñ 4RŽî×^ÛVQ±ë…¢&N`…œr½7×X?ò«kœÅŸ‚@åÓ* ƒV›©×KjßIH©ŽQÖô !MÏš5«æ³ÓÛx%®·‰CX<„MNÒYP”9ªœnWÆ™CºÀÈÇ”<‘†[Wò_ˆÀ=‘;(¬%9Ù4Å-îâb¬A9VÌY¢Æ,1׳ŽeVe?8¼žwªôXé ÇýmúÏ÷šïÇó£¢Tò_h{öh‡N#ØÍÖTWÓŠEÚˆ™Dƒ‘ÌwÉ—ä®.#‚Ëϧ¤ÿòþ¡|}– êtKëõ÷E[',p’·O¤»^߀ňgoy÷ïçdÅJH µx¶º†àõ´#©£ü§|^¹÷ð™ŸJ‘®¿õÚ»HCjš§_#ŠÎn¨fHHÇÓ5Í«…ll,ärBñ˜a³s0ßZj†„t<§¦a³=É €½Öì`6âIE£k¾_¾`­^{éîµ±NZ9–ú|O é,$U'K™ à)éç÷Xƒ+9…*Y¿‡0l;z")[·ÍF£3­NŽ…²±ßl¿Ý÷Äoïž§Š?ðý`oŸ½t”ÂŒCËnUƒ ׄ…‘Å mß>Üɉ03Cd24?Ÿô4„†6¼¬ìvµõOÍÒF2Â&PÙÑ^}—¿¯#t±’Ø eWÏ•îx?c#36à‹^è”Ôý˜f«3;t¨ÑluωJU” ÆXX2P± \"C(íú€t©â†j¦¡¦á•Ù–¿ˆ 1 è=ww·ÒR;±˜©Ó©¨ÔbsólkkE[ç^³˜M…‹IÓ ™LðÔ†§:¬ÁÕŠÑ"z ÖÚt_kèN®Ç tð‚¬«¡h˜¤_£¶4? ðBu´GEÿ›¼?ÝÊùë¶~쌺#}ž>mFÁ' ng¸Ç®qùv¼ÇT©/rdB3VòÅÏÍËC ÜÂB?`@ú#7ø4{Ç]G˜ƒ5Hµ§ '¹}íýyº"ýŸøß~`]­Lºe{àLçIã<½MMQ¤¦Ñ7™­î9¡3¬PmƉªJ7ÜP¬B² `t+¶9=Îo…&ŸifÂCRÓ¼š©}Þ(šig—ù¬j¡—C0®²yRÊ<Ÿš!±BϨVæ,ŒÖ¯ìíf‰êÎE_EévA´ç•PÐ@ H§€ª+)ДMª¨´ÜUÓñ“j]>s”é3ºD; OƒºŠ’½åâ®)ÉÓ¤•ÇJÑéV%Ÿ×ÄiÎ|pæýw>Sh=G\»)ºxâÏÏû[ߨöäëÛZñb{­b¿±š:î¦7õçôÝëËf\I _P8­Çè¨j03CŠgríßKsJ5¤ãêžsë4mA$†™ý3ØuaÔ¿»ÕL dAøÖ´`윕Eü¤’›|æ$ÉgÀ`:1\î³ú|¾õurÚ·h í¹Ÿ4Ò)ÐQ…9½Y¿yåôÆ?Ùåo<¶Ì2“%<:`è`Ö Ñèû…Îé´‚øS—v}°js¯ cÇb]oMßqq!¥²2„7xw·`™^v$ûÈ þ ,›thÒ ®9s¨÷3Cè?~pzS©äå½Q?ÒÏ/ãÔ©Sð…iSÒ còwugÿZs8[vv©iÖDÐÉCÈí%„‚@: •ÚJ šESÿèï*xÁ4ßÈÇ¿lvÚ±ÒÔéù“ðq‡ñ.{þî÷w˜E˜±Ð‘JqW׎gŽŽÌÛ·M³Õ™afoz½9ÓkæŠ;{c~ßbˆŽ<>rŠÓ ïÑÞÈ£idn|SÌ£°'ñT•$FÓw¹|7Úña à®2u»1 šZÿðo…ðQ˜Äò ƒèõì¸8óƒ?H8ÇÀQÁý$Ä`ht ©f,–QRÎÊzÞ¹ÏÔíp‰c—ìzp•îÙ×çZ5S]æçãÎÎ)œÉTqΞEµ.!éÍìºW9ìœðG~¸å,î¬éû¦ŸÜyR'2ÎÅBªþR£|i¤fHOò|IÚ wUȯ®Fù@‘V§fHÏV ÖÐ@ È«¬fxgÎPËŒ«kèj ƒuÿ>µ¨HúÚkDƒu”|#ÍR€Ì¨i€ÌTO#ŠÎöþI{rT¼™"Þ`{áÿ×ô²2N®Ûì ëÁ46ÛìßõB¡Ë¥TWcEE¤Êá~.$žM;»?mÿ†[Þ,|sRßIYkÔFMªLõ4&5#YšVÛ@ÚˆºqÝçßVz*Aƒ±ßPÐ@ äi°Lj†DOÁ™„q(éÃLLT7¼²¡¦!½Rlx#Ïv°G)ñç¸J—)YDAÔ“]w ¦Ñzyg V*u2<¼n´6†`#}F’[|yüö{Û·‹¶O}0µÿ䱿KÙ¤¦!/€j¦5MIÖÃóÞ7À™úIkZ£C4òÊBÏÊjÖŸ‘™ÙHÐÔi›¯ŒåÂׯg›äda›¸9Möûø“xè)ƒ®;RÁ<}„vUÐÖá[3å™;9;g«ÇÒŒž´j On^¾–€j¦£4Í)Ïßý¼–4OŸ‚ Ô‚6ÀÜ[Í‹Q£û²+õ@`ƵM„Ð}f ÂðÇí¤}YâR­I±= \iz´—•ÇÛÝìCOMø³ïŸTÏàËûO§ƒÇcíÀµÅšâ ê­ÓÂ&‰´ñÔó¾$íL‘…Ÿ<ßV yeÁÙlJuµÉmŸÎ¬ŠÔóuP𻕒wN^Ý‘ô¿|ãîžjËã»h¯+,–QJWëÝ>¡ýUÿe×µáŽá‚ÀW&5*.Ò­XüúwoýÝs÷9Âó{†½×î(÷õn>\„ܨi.mO ¬)Q 8òqAý¤füÖ0ßF§Ä—'_|a@ž¹N‹Éw˜¸òª¢ñð¨ÿýŠ£jIC)Ì£¯ºfB3×,ÍT­Šð0©™Ê•S§à”Eæ'ĆNe’¢®pøp·Ÿ_[¹ýÝ¥JúeƤÈÓëÒ*Þ…*•–ÅÅvyy䞪Õ>=ØqöÄFg¯AYJA>¦í `Æ  š©#=Uš¦z0²r¸qáLSaÓ¸'(h òD”ºG‹²5Tj,žIŸ]~h “Qñ¨ËuûÞáØ·óbF¿ÚµvâQpŠ-ßÉ}‘íÝCE¯’š©ë73dx×÷|Wnøeƒ¸;6fÔ¼kû¤ãoAZ´Ù¡Cf••ŽÜûGGÛæå½´Ý³;ê<‚.‰•WÇÄÃ}´åå Á¸§V 69A È+ aÒáÃY ô¬,†V®¦àŠà ý ÝàpÐ߸B½^Wåú‹‡erÊ™{q‡î@v¿âø›Aãô?qš®7ù_D£kO¬Wsè·,f“xîƒU©ëÂ/Y¥0¸ÐQöÎøì«WM×Ð4„ÒQòâóî¨õH"ÖRákXKE‰äføõ}û÷Í©WÉ&MÓ*á£ÉɽNk&;Œ8Lvh½M©¬´­Õ4Š"$¤jâD­|NE½]®=@8üÝ×ÁT?O§ ÈKV-t äû––!ð³E(ÐÞÁ/—nŒZyõuÁåÑJÜTFzÊÈ_Z­Þ´íüîÕS¬gg3;0ÙËÊ,ùô]n×ì˜&Ò“<5ÚnØ­g§8öZÅün¤í…[’ú¨iéôÌÀ@»¼¼g¶=™07¯_+³ ØšíÙâíýz&;›Ýíé\ ücfԌʙ•Äã«~¶¼)£¡™Û;­u˜ì0â0Ù¡õ¶­“4.Ô)8…†³Ž œ¿û9Ôí¡P8³xÔR«ðøQFÑ1:p@®™‹ C'¬Ü|º»ðÓŠ{3ö¤š.þ6IµbÊè’/ÞØÜñÅŸ7Ÿb½  #§ß­¨¼è¿PêJú¨³Ô/h–Ù³ÌøU"ëë5ÌÜܬ²òyÂáñÂLRþ£&ÆšµkÄÝ܆u`²3™O9››™+BDÁ=‚ LCe4£vKn¤š9sf~û'»J•@n¤š©¨ØÕLí—˜z9ã²y˜¹À§M3æç×T ÓZ‡É#“ZoS,,J›®¡íÊtÍQ夜•Iã´=—ÖW` J¥Ë­;LèUÌC­È"þÓ§ã­ºþä†âN­üpê ½îZüÝi;®F~4„Š<©Â@ÕÉnm]ñÿeZÁG³ qá|ÉmûÛK¦/ÛwA:«`¬w³ÿåk66•]Uer¼nßCµÓÒŽt`²+÷È=¦Ñ˜•—cZ­ŽN¯¶´$p–ææè´£_±¾j댆zzvdnï´Öa²ÃˆÃd‡ÖÛºž¦éÚn,·ø¬tÒ“Bkx1ÎbÕÍ¿Gr‚ŸÇB¸ÛŽžØ¥÷ü©«Âá4¼ŨC{é•EtOì áè¨éÀd·´¿Ä™VðÞ:dš^h¸!ü+õbÌ6{ü䱉©X%¦>ã OnfÒdÒSsÚtH¥1ñììsh]¥z`•åÅ©¨ ètÜòrïQ[$ßLøf s ðÚ:£ÁaÛòjÒt m$ÞF$É®›=¯­ƒûÎT©Ä­Ó”TŸ`1øê@!uÿ퀤FUøé}ýÒPGsT9îJ³êJ}ÕÖ PVçT:üû¯{q±†Á «Õf••ö.^€sÉóÒiúé×­¦Û?>zZ*ÇOÚPÍôÞç{kz ½s¿o¤šá•”¤‡‡ëµ}§œÿ°ØÑo…7j‚„´Ã @A@ BÓ¸zð2/Ñ÷E®½iM+'T¼ ¤&Ms_¡âf^ûhBйMüÏWK>Ngûë£#Ž*Ô¢^BáöYChÈ+˜bb¯ž2W–dÿ~šV+a³ó½¼t4š“x“Jd%ÿßÞ‡7qÞyg43’,[²|`Y¶åC>ð°9 ›R®×$q’Ú?”t³yÚåÙmžäÙmhè“<}²mž%iÚÐ]š&]Òl)r¬9BX æ>jð|ÈÆ‡la[’e4ÒìÈÆŽ1¤a}‰ ïçÑ#ä×’óþÆ–¾Hs|lüøÐó¶|ô¬ƒ„eš‘43:â!†ç£k =ò[¹.úHôQÍéS&Ë{e‹[ñ‚|Êó ÀƒŸi†Î¡mÛFÏTgT:*óÔycîæÌõïs«Ý¿ß£×ì=kó~‘àyÚ;ox§Š~té"éòÀwLŠwÖØØ;ÇujÝqËš;¿ý¦Ú^Ðüp|¿ifˆº«Ë5’f4ÕXj,o=óÖ Ì >m{XwwO\ L7#:!7,·Ü^>*Ј\Õù뤉¡åË2k×Q]íB;¥h)gêÛûw—:¡ÑoïàçÚ‚øâ>î¤Ù³éYol=)Q?Sÿ|÷ó ÍXº+õFz׿•É)ªi(]¦Ì¨<ÒJ«Æ$Žl¥M—³ú«ŒªŸÐ¬hÝè²Ü–e+®$ þ{Ödç6²·Žð—]q%A¸õðÞø™g¢Æ³kýû5ŽÏý'Š g„®<2Ãón¥ÿhŠÍÖŸµ{Ÿm¥ÿôý72c¨·²—u¹¦¡E4²êƒ¶¡shnîz|{ÌŒW3Ïè?Ý·q8æ´)l!=ëJ„WˆEw0Ûi}$§½BN9åå+_±ÿÄ©Ü|<ºÆLFM={Æ&2A}@W”KŸñÁö½û–þygÑkF1coE´=¥EÔ,&¤TqÛžÏlòÚ¾ÖÕ¦ý"âŒZõ9¹Õ„ä]-3^‘ÛÊNh ®Ï]OÈÕý##…BÙÕÅ Â뢌v½»âõUìÒYÔ,é[ÜÀ€-:zÖ NN ð€§™¡­€Ÿü^ÂKÅu…?›ñæe·8| .ÎV“RÕ½“펷\òŸdG¤•Ý^Î÷gGtæVqŽ$×Ëì9â][â î@ã¨Ò,Ü=óä÷j4†Y{^ÚçlMø9ûÆëôï©Öé\ ‘bŽ1Üßñ]wM3ÓÌÚݽïZÅñ²„:YÚÃôÃÒ8ërIãöi 4x‡àÁO3Ò—QJÎøÍÐÒhG’9é£Ó%+–¾sæê0ËåFÙÞ•Õ‹m:»<¼¡Gýí³ÚÕÔ+õä‘nýøü~:yµ;14˜Ï·8f+àrʼëÍÿyýŠS¿¶+\ˆ]ã[>Ÿ2Þù@ÖíÖX­Òµ‡ãú"#¥ë .‰—„y‰ËÆÆ¿#SâÎÚ „{úd'ýZE–8TêƒÁÊMN6äòËÚ8}óyÙCg4I³O¥™¤‹-F£ÀMǧ“4¦¾Ën²ý¶ë=›¸®îÌÒ˜yç,§JÈè@#*Ë>ÊXœjNXÌ¿2ß(Šl*ÌÒýàEï¡ß3¾±²œ,ÒQöZ¦&³!9˜[zç>MÒ éË’ÿš­ÿ®œÏX¼_¸øAÈïC»—¯‘eˆw‹mjŠ1›mn…Bi·Ç×Õu$&Žã Þ£‰"å#ŠV_ËOë€L½KLjãÈWЯ2'·Rʦ^ÎÒ<§®õ³lät†÷[µ 7óÈwÚ êꌔÚDÿ½KJJWò4ýÎ Ð<˜ ^{2£(%WœÛ-f_ËøÍ¨aŸòøÑ»4‹ …ñÑþ³tÚMSs]ÿ ÿÕ{„¬"õ—èîùŽ+C‘íú5]ò}O¼*¨ZÊ4‡Ý¹OÓP¦a›Â¤›e aþ§Þ+‘Nw-)–Í›cîÐZ,Uùùîá€8žO-÷oÚ2‘L##ýÒj*ð:8ézûŒ¢î:Elj÷têGŸŒm‰ŸÕy"†‰ÒX$â¯û޹ã>qw<þ¾=+Em mã+’£ÖeeMÏ{34AÇÿ&ÍÞ6.ÃÙ4Д¤L"¢Wyl¿‚Íî-̬Þ|˜.þrÞÜž÷/©ôÙR¢Êô¿hÍùŽkέ¾ý+߆-A¸—“bÍÝ·’ñGœá”ÃPT1c*öš.ú±e¯q¥ó3Œ³ŠŒ:‹”lêM¦ì³g­±±ãþì‰&üÑwF¦zÈëi®²šÜëÆ4´×ciõ²“p®È^ÒûÿN›Òþcú…ŒÄX’H~SÍéRUkYJ˜æ¸‰?o€à1ø&þœwÔztSü&Êu=´Qz%>åûäó¹GèþÕ‘3V?QZÖ¢R›cßú¥pŒÓ¤ëÅìBômòè”<’BµÔ¤Îì ûã‘ÉçÉòfP¡C™Æ¡¶ZïzÌ›;™åi¥´ÿ%Û¬È8C|Ï ÔøKð­Ç¸Ø÷8–ùOS¬x[>‰®­ÈsúCEtå•tBšm¢…Þ•MÒˆ—¢ûUšËi ã›ÚÕëý;DBy®tÞqœë]ö¼º(… p¢@ .Oç&îý4ýy©hDezצtÿæÃ;eÖWom>,CÛÚ¾QÄüÈ!ü0tAÉØC¢y~ðÚxtÌ&¡`•ðÝSÞëÇèsÿΙՖ?Ÿ¤Kâ•JŽ¿×“^øºgÎoò׿ì!]é9oñ1ágÏžø¤2òõ¾¥¾RI57ÿó†ºåqâï3Ch`ÊE)¹Ç ÷ ¼_Û_›®J'wÛ|X"å˜sä†å”” gãç‘ËCþ3x/’£·ßÛàj8rú]î݇|Æ…öùJíSŒý¨(úê¾è·®qÌ8ב¬±èºrOOçzöEã€Öä”n[‰õ¤ïd™¯Ì@Ö×ÿ“çÜÌ™ßêšv_d € ³1+¾ì“äÿé{mQçbŸJµ|UªÓd"‚r劼¾^E*dµ½ŒÖ´`Ý|R‡vMD_ddB]ËóC§Éei†´4’æ¶ßìt–þÎxÔÂþ)¿1?‹ÊŠ‹ý¢ÕRšYwxÙ‡+ÉèL#¥™ÁÁ㣜ÌçKîìÔ÷ô(<˶iµ 11>zbûfrßIØý£½— Ÿ5‰M é…[e[åå©y»’ÿãñº‘÷Ë^ü4Á…ãÿýa‹î§1‡·û dv{ÈåË\K‹ÿ%¡»{ð.¢ÌíbΞ¥Íf÷c¯ãçá¸öÄÄ´òòz“iô^NYÕõ7c–$„%ÚܶFyã öÄ5ŵ¬KF1a!²ˆXŸ”fFgš‘4sçÛ6£ÓÌüúúp§sèË·;µ³3Òá¸`4zÇ•iìÄ^)VVäTüôçU©M©³Z–=—ôC˜žò9»’w{ÖÁ+r—Kmµ¶'% «9µIo2“Çåq‰qç]Tê*Í3Ìz½þlê¡5e+š”õ@ÄW¦IrgçHš¡íïO¶Xêuº{1fÑ\'ÖUˆÑ’IeæP9*¥øø¹o%_Úì_€¹ÿ™üjqíº¥nšºN¹Ž@\ä×ý›‘ªXÙê®Ôß…_ 42«•Ühü™¦ºš ÐLF¦±ÆÆJ9†s»{U*szú{k³r6}æú–‰m‰3.ÌàÞ¢²”.ü¸)溋síÍß©åá®p ¯‘.¡îPÖ7ö³}OÏ]«ÇÞ¼ùe†—ñýl¯¢×ª´^ìY{]8å&neH¡Rž ŸH¥Ré‘S$™œRšYðÛ‘—Ö]+ZæQʨûªÉÌzüìÙÛ&ø&(€Õƒvâh{ðT©À‰ý“LΤÿXÊ\JùB¤OQË‹R_ÿ¼‹gE™†ñ5¿÷ïåÛ‘â1ÒÐà?³H õÇçîUUij»T:9ù§îçKmUùw׬yû‹4éô®øca‡ÃªéÙZòÙµ¸&¢´M áþJ˜"ʈN›Û&]÷œ=ÖÇ÷öQ.eû€² Pþ \´>e«R¥†…±ajN­e´óTóâCã ¡†8U\8>ºzÑ—ÏýäîaK—´ ÒíB鯼†Ñ 3¡g˜Iz’ÁGNA&;›”• Ý|ÃYtk°©É”të] !QÃw†@ C¹á$!Ò—ÒõHŒÐʵÒ%'bÔ{xöE#kö6K–ø/S¹0÷€ SPà/7nŒ”ttÜ6GòóѰ€§2¾:FÜuÍNx%Žsah`j±,yê)rú4©ª"6Q«ýoà šáAO¨š,Ä>ÛÐv¢GûL#1BúÙðÿ\³[‰ã\˜úç~†ú/c 6 ¦%hSÀ<¹3ï®ãþT±a\k6 3½hüÞÀ× Ð Ð Ð    Ð Ð Ð Ð@Pšªª@–Úêh;&޶£:&޶£ú$–¦ëê9ÿ ­Ž¶câh;ªcâh;ªObiÿGN XI奺AX=h'޶£íh;&޶£úÔ•f¤Š‹§ÒÒüi ‚­zÐNmGÛQGÛQ}êJÓYY$€‚¶:ÚŽ‰£í¨Ž‰£í¨>‰¥i)ÚPÐVGÛ1q´Õ1q´Õ'±4vÛ€¯=@ @ @ €Àú?nËI¼ endstream endobj 486 0 obj <> stream xÚÍYËŽë6 Ý÷+üñH"õ‚,Šöíî³+ºÈL’ÝEqÿSêA‰räItQ Œql‰/‘‡/?½(úÓ‹7‹wq qùü±ü\ŒÇÕ£S¾¼qu:8XBX³ËA³BHkßþøaÔòÛ?Ë÷å×÷åí›YâqËûm9À —ƒQzõ*,ï—¿ŽJ¯žé JYGœ=Fw:Œt§­RêFÿ®Óßï.¿¿ßSG½‚ êÑÞ*)DÊ"ý2t]åÓÄ/ô–¤°šîcY©.´ÂÞ—žª“K?Ó†[ÚÇBÐZ&¦M‘Ôê²46.p:h•5£Ë'bYYÏÊb±Zã–ˆöû$£"–`4­‚Oº4ÑKÂ%Ñ3MSÍÄì±›5›qËâ`!UOÁVÂÌ¿[«J•X¥U•ðA»ÄéY1²íׄ§+v'“|5P¢X”° ‰ÙÔÉy^£µÕ2KO›¬ši}ã.ÉtŠþÓ[ýÉë›PY±FeüeÚ¡1È•YÅüËx6A¡lÚiWÉ\ãÄ‘_†7ÌãV¯æw2·=`O:ʽî”#ˆžçÿŧƒ;Ê]ù@ÔŠ¥ÌÇ`S4¦øƒ+ÇÞc@@V@Lj  ‚_‡—ŸB„‘:¸&Ò 9ªøÈŠãÔ§Ñš®9¼\÷ùM¤f‡ÊÎ’v‘›e±Þ¾¡H4A$ó¬$w'áLòCkR(8ÃWÝ.õÚÌÒ7Ï&»®‚D¸ê$O†c”p¬þÚã‡QGâåe³OØ.Èîsmhªe,;iãf*Ûå.1Ÿe¨§2¢È³Æ~ëþ…ú.v'ì³iÌ꽯0âø8fÀšÃT›ƒ‘ð5p­j^„#£F~c«ãðZŸ~n½U²0 ˜ð§ŽžÂ8¨yB¨GËRfš‰v¬º\¤’™ˆ‘HVî•I©)Q³QK3“±vœAG‡µûzcuè¦lùù8T õÉ´`TçR aFsNs½ À’S½`i”9&-²6Ðä “-{‰å—( ŽkÛH•Fì–ê1~7ìžæ±§j•#ÿÔ-2°ñÛß7 iª…²À~Š Í<íÄý²¤uC­Èç[(N3ÒˆÛ¾vçPXß&Ìj~¿s _6pœÙsèÒRº¡öDI¹!»¤¼öÈ·Š,ç°®£½o’òæ)A*Ìô# 2`G Jýǹ†EÙt€Hî Ü6¸{×U=E)‡CÅ}WO³…2N ÕùnQhošΘ½—hWû !d]0–^­”Ã.£«ö&¯”°^ŠŒ,°-ÕŽˆ†Èõs«£ ·b EcEÖ·²ç1®ÖÕ벎›Bôkq­èH¢.ù†„¢bÜZ¿Æ¹ÿln!ÖZjàM;r»)?Dy›ÇˆýàÖˆ=oÕÆeÃįVð¸GtÁ§•òb;ªÕ(hÜTRÄ„.Ç猬!t:‰¹#A 1‡ÛŒ¦1éV(G›.3ÂnÕ]Áz4ÿ‰|œÌæ:ßÉ÷Ðø²õû\fWÜ¡Gò»Êû—”OÜŠÀï ¬üŒÚênßdDÈE$í€Ô AOQÄ“Ñ^T.#®e©Ú§„öÅÆÍĨûk™N%ŸH´ …¬ [ ’ßmܯ·:]¬©‡áлci`Ø©àÛHc ©n߆T¬~~ހˀáÉÀðTë¨÷¯çRÀ![àá»cÉQ„ÈöûbÑUŽQ±¢2”g&ŒƒñÀ[MÚW?T×/ÚGC…oú²äõE'«=oûþ˿Ɵ; endstream endobj 489 0 obj <>/Filter/FlateDecode/Length 78954>> stream xÚì]XGžÝ»½ÊÑîè½JQDDì ¢±`Kl±ÄØ5j쓘hÔhԨѨ1ö+,ÄÞ;Ò{/wp½ìþsž?!X¢wÌû̳ìÍíñÍ~;óîûÍÎÌbEj`É’%‹-±c *ªÁ™nÈÖ‘Ûõ Ãtü€mƨq”¡N‘ ²ŽN¼^Z¯`˜š" Ôq Aƒ€€€€€€€ 4HÐ 4xAóì™!Í7XëÈíèđۑutâÈíÈz šÆ yþ Ö:r;:qävd8r;²^ƒ¦µœŽ3€°‚æ¡Ýh½Áž8r;r;r;:qävd½öLÓáƒ,ããå¥M†ZDÈ€Öì‰#·#·#ëèđۑõÚ3ûù¢ÁZGnG'ŽÜެ£GnGÖkÐ4¥Ñ`­#·£GnGÖщ#·#ë5hMÛF@@@@@@¨ó@‚ CƒŽ\ |¹ø—õ"ÜùaÑÄ™æÜQ) söü#3qfÑã-Ú¬e·C<º}møé'ÏD 33Ë1]#¿  G!ÔÄ?}0þø«E '»9ý»~îÆy[&Bm»]‡{—ŽËX¶pÂ| r4õ?/žø3=¾ÞP‘C0­¨Ÿ¦¼j׆ßkŒÔŒÜN‘Êv{ï,?l‚‡iJÒÃÆ›Ìk1‡ºáÖ.Pq¡¬äÞQ؆…\¡EƒïߦٚÝÓÔ$Îûiê:4õ³–lüQ¨d²ù{f|w&B­ºýÖ…£÷ü"ï42鼃MƒÂ¥#ý:ô !GèuyûŸÿžòÙà >æ‰ñÃ~>µ<Ú ‰„zMø^­¼përïU'{.íM`oÍD¨=·+D ŸÞ·|6Ó yF@=`ÆtÕˆÇÇK~jg‰\¡HÅñɸà ‡FoêÔî«[ê¿Ó­:«$é÷•šwg"Ô’ÛÓÝOÏyľ›¶öD½`éÆnÉä¢Zê¡1"d<‰UY‡µc¡=Åq¥)n®y^<ÎÛ,éÅã+ üjuriê—7ÔKÃܸ*æÆ%œiÈ ½1ùª¶ÝÎh7j÷ê€þó7΋f9!AS¯pjÍ–îéR¸srÉ/³1¹z’.ͱìîC;#ÿèÍíÃêÆàæÃšUª°°àÏ<°)š†€P”:Û%\ÛfùÙ îëì¼{Jà™µív$hê7>™:–zSþÚ…sôìöÆ-Âî·CÎA¨WÀðá0ýw&Bm»½.ÿ9©VâÑZǾqwãþHy=f¯êÌiH$àñcpãÜÒävTÛÉ ’A‚¦aÁ¾…úóÂ*õ~„™ð«ºqb¶m©©@.‡[—sÛ´9Èí¨¶#’A$c4@œjm£ÝãÐÖû—û5žþ«•îc šøx0r$àñtÒò&ñ‡†–-‘ÛPmG$ƒH š†H7àåN©ñ ¸yŒ LL*òÔlèÞüöhÜp¹Èí¨¶#’A$ƒMâjt‘ÖéÛêNOI®®•‰æ` óSSµtƒÜŽ€€j;"D24ÇŽUë÷‹ªùª ZÿPÓ9O€ ÎZzwhµ†Œ9PCÎä ¹ˆ+™ˆDíVp0HšR¾ê–˜-¦0*Ë ±IÓú÷..S_ÆSL­ÉÔæh8@än[› -\ú°Ãƒ²ÌV_††–«)1©ÃõÍ Ö+,ðÄÉÔ'’‘1eB®°Œ[&4–sÊaŽŠý‚ÂTïG2Üx‘L½¨í•ÍUß4=*ªZ¿_²dÉ¢E‹ èú®]1}æ šÞµk×{_ú´Í}Qï„&<¼ÏžwG§X4•~´u+«111?î·BRÎ(/c”Á-LbB,%¤rš\AÓz’¥a1ÕL¸e©µï“2“‘…º„Çch˜öŽ Üܺ¤¦5áË ‚ÉÊQáÚÕuáÓåºÿCb$ü9ü'l5›§âñ”ˆÿE»IÌÊD£ çd²¿r·¹hA塚‰Po€§° IºÀÎs`U4¦_j Ø* 8^ò¸yPÇÀX6OG±c`a …Üâƒb$ý Œ‹`òyêr47d2L2nØh—·$Ã'˜ ûèbD2HÐ48¨znM•}áÈ2¥ÿ«Ùhûfª¡f Ådð2ÒÍÒá– ;±½Ø>(?È\a^ã§é&›Ï”•1U*±™YZ—ÏÓ®$ÕÔ?‡…·‘ÚÀä_â^ñÉáä@ê„¡ ³ iº–»º”¹pÕö\Üz`Ùë™$‡Ì™›áñKV²Hæ!C•¡~@Ø­`w†bš“C«B2’ê¨!S˜nšT3|Š˜ÆE#$Õ“ôL2°À:ùP^>ˆ‡ “ÃÍyÄ$£ËœÄN®e®.å., ‘ 4o…’¿dÊ{YœšY”¹?¤>/ÙÿÌï²­ÔÖUäœÌSòjýDèôKKÝ~&§ö ÁàÏKäx90“—™ÊK½n{ÝTi IÇ]u¯º'b¯Ì“ëð³CÚâ4µ¹UQ„ºŽr µ1SmÇp`Öɨ:Jx ?+\Yî‘c‰€ÂW¼>À®î’ $˜•6‚ûRº4—žb–rÅþŠ@.€á“Ÿú"$hÞ€9 gÞÁ’¨n„·¨[7¨"J€tåLoq×… ‰úí=0y ½`"12“—ÆK[-"òÉNS¦µ¦·vÂ>îߊ›‰…BǵŽé_§St ÕR„º 56g*ÂÌéÍxÕzîC*$@†¹OÝ·¶M±¦³Í$ÄþZïÈQs|K}aÒ`šl“l>-.í¢ò.ËQæ´!ÚXcÖˆd AÐâ|±*WA~åÆþèÿ ŠÔƒëÔõ4*­9Ö|6È ÷ÂfÅêCžk8žÄ)\×cÑdýþ+ÑÉ*ù*̤ ½M(=Ôûà§lE½Š˜LÛ¶0B¡îâ`¾’EÃzZ}|l“²nR7a¼Ä¼–XË(<Êh”5˜ÐÕØ!—ê`%³êÉè9˜1ø±æñßê¿÷)÷ùÑü:Ð;Ð>`1"$hê„*ê×,ÅH&Ÿø0ªQõ]êîy꼌’µÇÛ÷Çûð ùóM\ùÐ|`Rå=õ½sês{”{‰pH:&Ø{-ÕI2ÈÌ©™®Ë]N ©¹¡n!UFÎWÍrc±ñ#™Þ4ïwÿJâ/)îQìø“cúÂtN!7"Ô‰ic–¢9=àýB&7©›§¨SÀé„u ƒèˆù? ^¸—Ó«„*9¯:¿X¶Ø÷ŽbD¹ánˆd ©Ÿ¸&TÇK4óÜXï7•€’Sä)(eÚcí¿¡}cL« SÌ4ŠˆêNt¿®¾¾Y±Ù·éËèë‰{¾ë*t-a¥³ì¶ØeOÌFbÆ?ó”ft¬û{„LPÊÜ n@)cY Ň6÷ªKÌòSƧ½½¯¨®¬‘¯qÅ]!ÉÀ€ ‘ 4õ rò`¾r–+‹Mû:+ÂÓäé[Ô­vX»e´eHÊÔtµ¦·¥· £‡Å©ã6È78àqÜq÷·Ÿ;2×åþ)~q÷bä=cF\©:YJÎù¯I4:)ÃÇø#ð^À ¹®fÁŒp"¼=Ñþ¢êâ*ù*Ü’Ì;Ö’@$ƒM]‚X»¼•<ÚŽa÷Îå­¤@z’8d H(É0|zÀ¤70#’ˆìHtŒQÅ,–/†„Ó‹Ñ‹Xˆdô ¹ FðWRC¾6Œ·B¥,'—_§®OÁ§DãÑHÍè_Ö@Æùžý½Œ’͖;¬¾ õe•cdÞ²‚Ž?9âRÔ.Œ º¹“,éo›;)â=ÔžµäÚ 4ŸÔŒAdMO¢ç·ìoE”h¶tvœ:‘ŒÞy¡Ú¸_®¹.TÏwg¿±†Š€èyèõ¢Þ/ F“± ÆÅÕ™ìü»ò÷ ª ÙëŒv²ÒXö¿ÚgMÉB ÁxðG®’O`‘‚7 &KÅž¦N‡b¡ËðeÀAî2 Ì1ó±Ì±IdÒŠ?bU±ÑÌhD2zþì™!ÍÖzBB è¹<¹+G1Á‰Å£¿¡n^¥®.Ñ,±–KiKC° 5ÃåðĽ½{к—W”¡L3™ÍÀË Þ X ºÝÖÉ×íRîREåcò‡åÓÄ4«#V5n=>o˜m ‘L5[¢N—“ŸÙ¿aEà\»’\ù<ü ÿj6 ²š11 A$c(’"f!{a'¢$™ÝÊÝJ D$£Óxb¢![»a­§¤Ðªù$ؘ©èkÍp}­wF„ëÈu0ršA›ÑïÍÌÊßr8M xânn] hÝÕ5ÂP¦ ÝT–­è­¾e+¥¤ó¤óâ5ñÇPt FNfWÌxwjø±`r2Þ0ÛZC&™ÔÔê š)yºH5щYå%*$ OR'$ æcÓ­AÕEÞÉœdÚÒÛB’Sâ¹Ò¹ˆdô`ZÛØŽƒzøùéÛ¼NRÄ:”2ºÈé̦»»ÆÛûcÞðNQ`G¶Âƒ·±¨ÊYרkɃñÎݰnø¿*A–ÑuÏXY‘JJ$·õË2‘ÞÞÚØ%2ò—ÔÔ˜„„cúe™.^^½àNDÄúÔÔ³IIé“et‘7T©|ªP܇û\Œ;Ž9î¾æþFÅÆô@; JÃÓ@ºqZ头U*5Â2ºÈéäIº‡éãC6¶fØfnXëPÊèH&&†åæ¦þ8’ɉ·d)F90ÿ~‰J&ÈÜAî0ÃÌæãó-€ÅkR&ÐÄDK2ÖÖc¥Òb1"C’ÌxæxH2¿(~Ñ‘Œ.¸E$S¦µç¥ï¦´]‚Z»†²EL×®Ú:·G4kâ©Èh;f•Ž™ŸÉŸ/P¦ãÓ»cÝñ׆]CSX¸îÀ­žÕÌK’‰‰™ø’d'ê™h ÒÒΞ;7 îÀ­>‰òKyùn¸·:¢©@3Z³ì2J£¨šºL¹›¼`HãGš„V}ë_ºw×V3¸Õ3Ѷ­¶™Ö:1‘‘ò—÷uùÇ‘ŒB£°3&’OøriU:fÖk"°ˆÉØä×ÕÌK’yPP°îÀ­žÕ "™·‘Ì·ìoå”’Ì3Í3D2µd×;¯ ÃZÿh)ñX˜Í'Vå‘3ϨgË5Ë]0—¯ñ¯±w½KHÿR¦2ŽÐzbâ1C™®Â2€QÔçÌχ1‡mPl8ª:ª›› ‰ƒÄ@ ‘ƒþYÆHÚ"™ÃÆ„ ¾6áü:€Ë@ÙOÔO/À‹Eø¢P,ôÝ?‹o!’16’Á±I±éòù’VÉÔ¬iÜË  HÖº»»æã~˜%¯~vzç pËÿ÷Ã[à êÄvrûX|l/¬þ_óá¥Ò‡<ñÔÔ³´ž–vÎP¦aõŽoiËØËžkžÿ ÿ¡œ*‡9ùóáÖfŸMX‡!TÃlk ™dÜÜ>RÐüü÷£LiÉú>íþ/‘Ë}€Ï4lš)0ýÏÿ€HÆI¦)­)$™2á{ù÷"J„H¦fM£©ð^_5ä ]g£œš·÷°×唃òµäÚÔ‹ù´ù0´üC†föë+Üclöñ²¿È6¹kbv ½—AˆMÊ^uåáÜÆ=8„¶{FóǨc;©£ñÑݱîh釺N2sXs|i¾dk#’©A uh>“^q±àEñƒÀË龉TâVrkÖï‰#X÷/b?F?oš÷zÅúH"²;·{ÖÔ,çïœv €ÜƒPû½ ¥å£÷Çî.Mà ‡ñÒ&rc|䬀’´7ÑÛ÷Þ¤ØÔžÞ¾·"™bo„ÁŽÛñ7Óó7è  ‘⨸Íäæaø°(< ©™ú„&´&KÙKïkîCYSîXž÷YžãZG\¤FžA¨UHUêOwÆÌêЬ­›üø¤ôÉ r…/æ;›ŒÔL=ƒÍo9{y"™¸J¾ªÔ¡‘Lõzh>w² Äܼ0.Ê„AP€œwg^ 3›6ûõ j&HbUÚÞÜ.Dƒö¿ p—ßÙ~ŸðØÿ¼ì3^£v;Þ-0‹¹¬¹¿)~[![1-h+ƒÅÿ>™êïŽ1P‡?B­€àóƒ—š9&†5†o+Ž9;ªÖ¯Ö¢öŒjHrB¼¼rçÁO~ì¼Ø0~4áøAÂsÃÝbƒ½¥IízÂ3Íš½[¹{™|Ùô éˆdª{ñ ÞEÙàÝg7ôiçme.QK¾ö¿]t{.mn­ªˆÁÞÜ-þܺà a l:Q¥Œ´Ä6¼êEïÓ?g~DZ,[|/êÉ£gOËF¡–°úòƒŒÒòu½ÛÂýŸžü´©lâÑÎGkUÍ@ÐpüW?Ž.-µÃ͸DC~uB Íé˜Ô¼§*eW¿¶ÕÌÿïÁøpÆðÎôÎKdK®F]E$ƒM­CCRC÷œnîÝËß-_–y&’ƒ™ìr’ ¸È9zº€ó³œœé€jlÃ#TòJ?¦{=3§øîüñ’8Iñ¶bt9jg2¹öäÏè.®wuÜþ´ý+-¯ ‚ôY†ã…d¨]à ž(@?3¾ô³úž+N„cŽ[«X{hb"$hjóÏÜ hø‚ðàgÂgmO¶íåÜk²ÙvÎ@žÑŸ Á84 Ó-bˆàKÏ4ú³B™Áš±^1îìú³y ò$×$èŠ Ô ’‹Ec\Ü=$Ü‚‹õ»ÐO¨žïzžOsÔgä*õ ïÝ€v¨—ŠüÔã[èžã ÿ,Òëp–&´&_³¾Þ«\¾kõ®Ü¹ˆd ©~œräIÊïƒ:?*}ðIÌ'Kš/™0¹¥¡ÁwÿÎòꦂMû×îOœ®ÊR!Ÿ ÔʪOwÅ,îìgÇîq®‡=Ç~O‡=\º¾{_ä©ìøŒ†}KÀ4€ù€8B¼Äu)CôT£Wóö¸ýJþXiìºÕëÒ†¤!’A‚¦†ñ¼ tʱ¸½C#“$zëµ®ÕºÁ[ô%Ó¶î•'¼.m'žaEs‰íûí¯Í_mNFÊÞÙ/-¾‡¯\©Më6b7ÒßœƒÐà+óØCm{6DÆD¶´ØÔz Ówå&)j·˜h٠ǢҀ^öÎ @Ùš°ZÒ±›*JÏe0Å1ÝbRLS–~µ4i`Ò 4ï‘\9pWÌŠn¡åøóþ±ý·µÝÖ˹r‹¸FâMá?dehö4¿\I0}h _¶Í…în9ÜZÑmEæ™ï:Ô¤99{69{5°=vå¼c¼!¡ÁãÛ wóÅÒYng"º;u_¼Ò ëæ•”+5L†Þ  ”A€ú='C °<±â¦„bb)à<®ôTNí55ùËdÔF ©‰È‰Ÿ¸ØÑÓÁÎ.sÈ¥!»ÚïêâÐEÿÅxœ"ûTòH$H>Ú Ÿª¶Óä“ù¶žÛJÀÄFŽmÉ´Œù$&½Yú «yëòþëp ¤Ä›fàŸ[Åë9 §âӷߎ_ÙÛ»ÛÙ.#½F.\`¨’œÏ×4±Es)A°:‡(ŒûðX’*ëâjf¨ ‚Mcïï¼ß*Èj¤óÈÔŸSÑuA‚¦ºXyé^¾XÑL<òÊÈ´·mob4qçlñçêÒ¯þ zRƒ/ 9^•ø“//РCM ÓÝNHZIF¥ÅŠÞuh| ö'‡vzWBƒDB¡pÜÁKkúûGÿÝ{vÀì)þS X˜A^œ‘¤°µ¶g66^•´±‰y?KC*<'vvÞÙ¤e“þ%ýsÎç KƒÍÇã\BææëO¿ìžt}Âáðá֡ú±+<,(}ø†Å`&üJïnPaX1†åcX‰vY;ý"7ÏWVìðz>̼xÉðÌË¡sŽõ:BÀˆ¿F(Ro; »ðŒú´¨罞ƒÐ!’+ìŠù*Âë«GC¡”é5R¦@’ᾉd¸ð+=û©R9»åçÛ—”0Tú&Ë!ô—×óafá^SƒWÉü%´qhï¸ÞÂd!j5HÐ| ÒKËǸ8¿‡Íô;Ÿïh·#X¬7Ó”‡4h›{M?ÂLø•>u ŽÇcX¹vÆ4Vör?_Ÿ0'Ê™›VÑ4/î'ÀLWQÔ[Î8Øÿ`©阵cHé[Æî©)À¢ýGBÀ¨}±mž_^Nh4‚²²Öññ0GŸ(³Îïu¦mM“s#f/…1T `ëû­÷qð鵫—´\ŠÚ4©J=hwÌðVæKžÝ¶¡ƒ]}Z·h*½;:¥²¦Ñ©˜ ¿Ò§šÁ°R’ô!IWв‡[¸sô©iØüì~Âi¸ómþy˜éÖXc$µ…Cçü5â¯x·øÉßNoãKM™N±éïÎAhhXvîN©Bø_ÑÕ±ëW_éÙºESÉQ)•5NÍÀLø•>ÕŒMié5ŸG®® ööp ÷aŽ«5Ú>ý¯®q•5 Üi´¶fZ)Œ¤¶@M³}ìvGÐ{Co¥F‰š4€)Gãœê?‹§ü]§ú/@eMc5óòIS>IzPyˆ?s^ ýu WÖ40Á¹6á0Ó¨*ŒÃìô¨ÓÍ..X÷†øO«0‰êÝ9 Çž¦îºÿXãðkK«eÍ—¤ •5AÔ C¥‚Â徇‡‚ø‡dà>ÌBGŸÏž*k˜à΋)V0Ó¨ê £í›²—á7 ÔPÔˆ y/üzãéÜÔ'Œ¥3Ï0àz3:MÓr‹GË-žzW3ÃÊ0ý·šy¥ià½|¥?è4Í~KLp§Q3o#¬6ž ¦ÌÕž5ÖTùŠœ6ƒâïÎA¨ÏH°'Oð[·°§OTú4¿dòÑËnxš¹­j¹Ê€åÒišÐ­¡[=õ¬f ¬ÊÊŠMM+«™ MSÌã ÊõJ2:MÓçT;˜àŽ}¨»Ö#‚IúüPiNéˆ?GP­øðfЫÖïUó?TgÎ0?^öÊ%Üü¸Õ°¸[÷§ò²Ïnð=·‡PCÝÒ§žIÿoÓVVcj«“Ä$£Šè$¾/Oy—þ:׬ÌF5¤i•€(t ‰µ‰.áÐr)šL†eL 0ÒQE牴#Xé: ¨á6ádKÉ2›[–[­…ØÂ¢Ü¾ØÞ²Ì²6\q×Q´¿çsäz†Ãë XßNž|ÛÓ"ץę¹éË~u rè_[Á½ÞÛZ…E6sƒ“LL ë#Eˉ·¤Ö®jŽ)]šMÏ»¼H#tl•!i¦àÛÏÆ0ÞÇ´µõØÚº‘ó^‘Ìþ|åÝg¯EMÏjŽd0`Z9 —¿ä‰UI“r²®¨B2©i$ýòk$c^nnWb'Õâ°eâ»D1ɘʹ:²àEçè-ó†[.®|óÒ0¹u”d*›«¾izTTµ~¿dÉ’E‹êÂÃó/,Üúq¿µNI᧦Š)‹Å˹W‹.¶va×ÌIZg™c¡ì?þ-”2Ð4‹Åªó*¼ËlºÙ™2#Ó›–¬<éóp\f•º<ÞÐN>&ˆI§?*}ôDø$¹<ÓÊTe.&.vl;KÀgÚð™|¦RM(ä®N¡:‡À ºÉ«ÖNªž§^`q­^¤98yä•(K …‰ŠDÝNº$]¢–¸p]œ8NÎg?3?˜|L}*~þq¸t2ë«[ñ¿…„Ýÿ˜zw9u’Ý®]» Rß<<¦ËåûÞö-Ë̽5w!sÌ÷÷b›ç¨™LÅf—9:yyQ´Ìb ¬fký¼²¸èß´ñL^Þæø¡MJ ™Ÿ»Y3+€\€í*ÒQS JžæåoÿÏÿ`k;šær¹µF2N¤9™Ñ¸¼fI&K’u¿äþ3ѳ”ò”Tq*$¡Rèjâj µ˚ϴâ³|¬Kš JXPˆ $ŒÎ#x$#»zAicu½ÄÁÙ#¿XY\¤(Ò‘ ÜÉd”©Ë\¹®aœ¹ÎÞwNéTÿÄëh­ Ã…2û{…Åžž0Uß:›=HÏ-ýs5A2 tp"T3æyy ­[«^* 6%ˆ±?(MþpÆ×Y©³ ÑHIM˜@=¢èaãrøñuºyO+Н^¿Zpê˜ qX46on)&[¶m•Ÿ(•Ò»w²nÏ`üK‹(åjõ^ƒãòlÂ\ _·%ÕH!ã@e“*I½_zwÚî„òk¦5T6Á–Á!ü¦M?èžPÍ|~ëú¯!­:twì³¶K¿Ï¾ä{¢µÑÖ+Û þ²}áK[ïÞ®êdCr‰àÅ naaFXIC3›èJ¥uZZ,yȦ³›˜7ijÙ´½Mûž# ÉÀx© ©bR)ñûï*‹Ž”É¿H+/'rî¨"ã7ÞL2r2Lº4n¡fÚ—±/¡,Á’i •M y`¨ ´™E3íâÌ 5Ó¢¯] `÷“äAç5à†»Âh«–À:ióé^ÃûQ[uô'ü´•M.wºySËö5¡iêv»kˆç¬PX§¦¾hÓ¦‚kæ+K-â3,Óv^oWB©™&š¬.ÅÞ×ø©Ëµ DBŠDóAt#QKÎçžÿ;ÿ︂8-…Z…¶¶n=ˤ †Å»›š—}×Å¥õÓ§Çüü¢˜L“ÿ«1Ìqr &ÎÛ~Ë¡q|L}`ªÈÑPš4IÚá“Û%·ç=œ—,N†Z*”ÚѦc0?Ffï©ft9kF¶zñ£jÔƒ«S5<[÷r#¬ZüÄÄFlFö-¿ÉÍâ~Þ™EjO]Rb™”TÔ¨@h00-,,çó+æn¹æ–Ýí»›ÿ¬Î9cz³7\;œvhLç¶ëÝ‘`-¸F7ÔŸþ²òLrfQàxçØ ®¿L в¶L`¼Ä~9U‡.¦»mvûaÖÄ–X‹s2Y™••!If`™ÃFqS±¸™ø=IFA*Neú#åë…סˆéáØc]ËuÿÙÝû>š†ô÷ÇÒÒ0‰„äó5;¾£oæ=Á¢±Z[µ†i†Ï ¡Rx!ÿ¹¼sËž,óäyösê×Û±·%㟹 ]Wz¾‘dV,hºö@{1fb\$CS(T/o^SM@x@ËäO¾e¬úÆtÐU\®ao^HÐjÈ5eeÚÊ!¥¹lrùaƤvxëf˜ööÉJ Ë5‚ãÚ¾Š¢žEïsðÕ‚«PÇœÌ:ÙÚºõ$ŸI]ì»|DœT={®Ñõи¹µ­uVeYrŒ¨ ãÊ<4ÿÑü¶VmaN„mÄ;z•øæh+rC>nA'=˜ÆE70N"¤ÚÙ"˜)¹43äÓ 3_¤5Á)LõÐ@iÄáÅ †LéºÍ{}ôz¥©²è¥e¹œW\œåëkÀ²™^3e¥±´›ÞO…O!ÉH;àkæ;ÌcØ®¶»Ø´š¬ÌPÁP~~µt¦æ s(b`R‘ªË—gþîéwÁüà¾N}{:ô|Çx>S&1ÖJóKÍš =‰d ð^Þ¼´*ÓEáÉëpNüè7ڮϹ#!óˆ­­‘ ix\#ØÇÇr…óV¿_þª0Sôĵ}•ÄK®É®µÖõŸ`'²-ÎYh‰æË©ú’l÷ÂÓ?ÀV:ÜcøÒÀ¥ïóÐú}u T3ÙÙwõ h*GT\`*S•Ì9¹îźyç wímÅ|óyYÓ©arw1þ…µF`LUXää$xñB·o£à8ÈMîš mx?pCŒšŒ|7· -©§ÝŠÏúœý|2ŒÛýûùîîð[CŒ("lþ°Éœ™I2Èwé @ÝWÄütáÛäòäh÷ès]ι™¸ÕÝË#½pÛp˜¤ééœÓ2,|´pˆëÏÜ>sà¼y€$–h>¹³ŸhMÚÆ¢i$ÖÖ6OžÐårõËé,¡–촜ѧä˨Kà dù#AÓ{h ÜÜKºdU~ÂïÄ×øÿ¹æî]r MJsØè;:Wm¡~Û12JvA}á¬ê¬ ÑbIë%ì:Õø„,(eô©fþ¦ƒ]ÃôDôdGÊŽ6çÚt°î0É{Ró&¯ æSr[mе†e4ËC{yq Ù%%ºŠbYqß’?û BSÐ"Gž¸²ëÒIÝ<ɆLã%¨r \] V&Øo¶/éZ"w{ë³ ÐÜTß<¥:¦óC&÷uî[Í~_£‡ÆÑõÙ¤ˆS ÉtŠí*ýÜãóÖVo˜;éÁ¤zY¿á_ÚhLŒƒdàÍ ’ŒÓÍ›™-[ê4Í@{A΋Û,ðÇiØ#‚Aƒ¶-—–æg}óÙüy)‘>dC–Ê+**ðð(t3Xbû›­8°êSí (òœêÜiÕéÆ´Æ³X³üÌæv²+¯¯W§±Yã›ý¸°ñÂ=é{†]ækê;ÍgZ?¤Êaa&TšÚQŒnE‰¤!i´ô°0Ab¢iV!“µ•xé|>Ê·5…£%¹8ëcÖ#–ÌŠÄ»;rü5 E™‰I–¯¯ûf ø'ùZÙݽøm½2PÊT´Ä,0´6_ÙÙU\_/»‰ûÒ€¥süçÌ88ëÁ,K†å Ÿm:V9,ˆC婨íEøD+’†EÉus³Ý/]’*‡J7Œ“¶Ÿîz`-ÕŒ‰¡YN ÌB¦ÓïNc–,iÍèäÆ ÔqM¶ŸŸ¹Æü’9#—‘6.í ’¨/©.ý¥úË‹æ55Ï·o —É”0ï9~´ûè?Óÿœtg’=Û~¶ßlþµôR/srG~¤ïgAI±)­ÐÇ&ÝG¼ìj •îÜBÃaU1Ýs“çÂé ­«ö ¢Ä8š,+•eyÆ2mIÚŸh?Õ<ݧ܇l$c¤?ͼ|'bý×4Îp·áC]‡Ë>¶èñ¢ïŸ}?Ýwº ˆ®|Lw3rg1¾·æ É@M#rrâÐår…M~“&c0úô‚õ?à¿Î7û š\‰»ýâ¶æ‹5€ ºá½J :3s˜Öû­Óç§S¯=©}¦yö»òw&˜Ášá‚»4À Jàdœ!®CŽd™zwª@½uMùœ®&C,Éõx\9Ö–gŒï7 &‚ï¨î¸Ñ i(ÀԘǯ§úœz x0Ì7ÞsØä¯T}ïcU°S±3ŸÊ@ ¦7SÕ9ÞDZO”CÔéÜÓß>ý“m]]:¯òƒ-É_ ðseX„©±ŒšÉ¬<2Ï€ÙæcVÈ–\èËíŒMCóNçÍœq>³_ˆÁ»91f¿Á¾àÓ…ý¿&L )áåž$MÒ0æ°f´f =äÅèœôvì=ÿÂÞ¾q}Ý™î‘ÊHSJ;Ç›…ƒ1Väš|š%ôg¦iA´Ø*Û:€5Ýéœ9Y­ ^7Œg–‘”ÊzµÜU^Vö¯›"PŸV†©'Ñs1ôbÖPÖt·ïÞÍ®Ûòؓï·cÚuWv· ´SÓ ŒhI†O'›sŒôÅ~&ÜЉûß5cø»¶ ô"6¨³µ>o ÁŠOV Æ›3c(’ÍŸ6J;¥°ƒ°"‡T¬:vžlž5fýç;¤f*@àDwúÕˆ«lнн*ŽˆÓ½uÖœ¦¥›ƒ¥x®Êè‚K/ºWU–Oæ£Ë× ¸&à=ã-¾¬-hëŒå¥Í&÷MLšäÈ«œ™D&--HÔ$.e/íFtkàj¦²¬ gºÞå:Ÿâ¯f¯>GœÓí§<š6p:.Ä3”ÆÛƒÅw÷Uu_.üYE‘ ôò5œS5I4±>cýã”0§X £($š&y£þ!!%\%_uEuekAF` Š©3¬‡²Ç$ù¤'´'kÙk³ð,˜éÌ zš“Û q±‘5d `-è-î¨î  WïÁMå:qÜ2sK­ìð‰‘”Š.¢Ûm·Ë—S±ò8¼CRZ+_Û‡è35]€ е«z)éÜnÊnÓeÓ3h?±ÊÀ3`¦Aõ9é©Dm¼%ŸkÝ‹Kó÷#AS¯ƒ{!áú«ë™/ÎÜdÞ‚1 ¢)¥Ûm³Ëž]A4·Ô·æËæ{Ð<°ØávˆVÞ+Òj‚|BU›­¬­ÇÇT@ÕœCs)¨iTFÖ%LßVÝF—¬ž3Láñ«Çµ±×ŽðŽŒ#¥ÃƒdDmDR©.£€*X.[žB¦,g/¡‡  ÷XP£å£;«:ÿÆú ’ŒSú³©pS­¦‘k ÃYLJaÄþYø šú L¹mrË ÏÜà¼a>Œ ¸†/ 69T¼â@ Ô;”;ª€ †M¨û÷=ÑBÝb–l–Ã(* ÏŠ4#t°¿Ä¸jµá—©É,£ÊÐõªÇ ã±Ù£ mÁ:ïu½@/`c,·äX º^Ø÷Õk«o¨o,‘- ¥‡ÎdÍ4ÃÌÐ…{4S7›-›-Ãd?²~ÌÄ3Û˜PnL°³7Ú‡:tþPÖˆ“Øæ‡eâ†v±„ qÜç¨2UmˆØàƒù`ÆP¤Ê¯8(¥JWÈWˆ(ÑRÖRwÜ1ÈKq£Ñáªð-¬-‰‹,5Ej#2¢ŠM"€pWu]¬ú ç½ÎavuÛÅì6 ‘”Š‘Ã°:d•=>›¢S ö)÷ÁikN$Ù§2UŠ3H1¨‡ªÇVÖÖKÄ¥>/‰8Rj¼wÏnœÖ¾„ûOÂ?òä$hê,¯YšÄ›\uáõh >ÐФ{Å$èþMÂ"Ù¢@ZàdædÆBÜñqh®n>U6õ9íùVöÆO­…·%Ø=éP6®È ‰…©Å•«né%oÌ©)„0BÐS§ú «¿­LRLî~v7‹†‰VÀÔ˜Ã&‡Â~…J{¥Œ’­–¯N!S³;áè-‰u$™'´'[Y¿öˆRào±ñêÂ)¦£h¦¾M{(ÕP çáÏžÒ|m[gg°:$MLÚÉØ ÕL•Y”\n°þOY÷Šƒ¢ñµ…úºúú:źÑÌѽˆ^úäÁädC®&™ž^+ü,(‹ ò žϭܵ]í’ß8Ïÿç­$ÓñV§N0=jæa•ü ÞSS¤Æ«ãÕ4ÏzÜÖŒÓtm[7I6q8æ4!i'sgÐÅ T}û×Ò02ë°iÉ)íTZ@,–/à‚Ù¬Ù&˜ "™j’ÌDùDgÒy#wMW›ôóeøSÙ»HFÿ ˆ¦¯j&f2Š;TjýçÏÉ%$ÕPHOL4$×Ôªuº˜î¾Ñ=3:ó„í `„U9€ÃiªÿSÖ½â@ݪÉÕ™}Ê}sXsšÒšê½µròTv6§¶¢R€uQu pœ»ÝßîÊoE¸ðß®ææo°ìâ5ÏA½+§ºÂc{ѽiRëk[3ZÓµjQÊpßâžúYjœU\9(á¯Ãåêÿ”9ñ³¿ÍD_6Τ2¿‘}AÁ¡ç‘yõ•dp€wUví«è{€»5Ìþöë«E¼‘dô:ýŸ¹·&Z{0¹ìs{3Å „d´œŽ3€°‚æ¡ÝÚ³Ž‘˜ËVa0%(å yf0>¸Š”±²£c¬Æè³ŸÆü’9+ÏT2¶ãöòqäƒåfûqG=³Ll,îÀ­þC(È2×®iCX¸­¥ ÂGã3Y>9sÃÂñ-E¤n>‚…Eˆ‡Çt¸·|þ?£˜ùñž9ØÓ /êí95Â2­Ùo*޲Xéô€zÖÖŒÓtm[×­\б Û?û 88 ­²P'”2¶¶ã´1Œí8}öÓhû€u~áó”{{¥bíî×áD8"™š…¿Æ‚|ÂöG‡¿¶båšw‘ŒÞ¤ ›=H>±UôÓŒf’˜ÅÞ(ϺR$o$£mQQÀÏOß\ã奵[{Ömÿ²Å4XNßœ}ä¾Nx'k`]ù[©ôaaáV¸·‰ž7è^q91yUYÇDÕíyŒ/MT¹zv»‹‹²S'í[-áÖÃC¡gëÒ°0í„ ¸uq‘Ôž!>ɇšÆ‚PÊ6ï* ¤)-½•œ¼h{ÂWÿ]q¤}b~^3_޽#§úP«Ÿ`Ô]Åi‰|Zý¨žµ5ã4]ÛÖ]ö¸(,y]òC! ÄT}3‰Dò /o3ÜÛòò›z;kÛßmËJÏ{.ÿ¶´Ï8ÆgÍ)kD2µâgÒvª|ªŠ™ÉpÚ¶­˜TQo%ý’ŒL¶îÀ­JõP—i…[õfF™;ü#£X‘HèíL‰"Âæ›³“ÏnÖlžÎšîLbˆdj4@‹VD7¡Ù&Xo8R.}#É蹟¦Jð1ì1×h"ìð„ŠÚ!lp’©oÓ¶qî¶Ñ-§oŽÔUz™ºl‹Ùúa~/•îßü>—ÊÉš‰^h OtT·í­ìk¶ùoMÚëßú_¾hõï¨åõœšB BûÝû§ê(´·º§ŽLU·Ám¡ Ô(JFûÍöW^]m±zs’'î‰.–ÞÐOÙ' ø]·üùŠBh„Ås§¹7¡7Q˜ŸsfÓ7&—Õcª_‚†.;\$î’â6Å2 ;Ežê‡÷3x¡t¯8X?k}2ž<“9óÁB-¡5Õ¤‡tèQîö» ¥ÊWOÛw,dÐÞSS°Ãí8'Y“Œ®H]¥K%î¹Ñ3/2¯Ì§L ”GÁÑOÁ§F²ð ÿ$?E²¸ÅâñÌñ>4t±ôŒžªÈöšVÇyªDFX¼AÌA±ÊØÞ®Š¥æp¶¤Þ¶Ðút2Öç¬EŒÌèL¸†<€8ƒ‡M›;|ÁüÂ Ö ´tž¡Ð÷êT>|/ë÷Gx‚‹L£UÖ]¸üá"³“åwÖ¾;ý,8ëÜ=€‡1Œ•ÊR_Wψž1”1´ ­ ºRAw²]KU«ÝœÍ£{ç€nÑÙmŸbÏLoó‹²›%òzy ê 1yab}Ö:uB*E§JAéêJ¥ÿbÐ óÌLARÜÂ}ÁqÁ=Ç{[šl™ÉœÉÃx¨ÍŸÍJGþÁØSPx©éõë-.^ ¸~Ý!5'õ÷V–D ´dp…Ív.;=:îC†¹.ö}‚Ä•8æ´™™ÃèaèJý©>ÊfX›J( ¡T rsíÒÓáî¼l=˜=’5ÉÙØ ¨i¶¥–§IÔõÏÿõDÐ0J®[\ÓÆ¦)-µõæy¬ÖΘë¹PÇx^¾lRXHS©àÖ÷à5åý;‹û,žÂšbƒÛ Önp e8 ¹¶Á.&‰•ƒSK&ƒ‚¦Ñýû¸FOoŒ1TaÔdûì™6j*R” þæ{Á­.jÊó÷G×ÔHzh`€äõèQb@€®?ÆÝÇÝ/Íë4}·µË'ð[c(¤+ÍÕ“æyNy®;³;üØNÀÊ’ª×$Š–6#ëôs›:)hJ–  }nû<ûûŸEÇO“§;â 2õ@‡‡®'Óò‚KÒzº`© ©”[TÕL‘š³mLšdzÝÜ`Ò}ôÄsž‰V*;=C7× bÁ}éwc¢ƒ-èq·ÏwÛzöóoz+d‹8»&dLOôÍè%Ë.ÖÇŸçÚv†êž©ˆšÀåëw}3|˜ö!ô5'r]\àÖÿÖ­2 %›ÍÉšq'*ψK³‘²?³ÿ·Òo#™‘ºùqƒœLV%·$^îû_Þß €1 ÙV®Ò6`øÕ0 $hþÁ—‹Y/Òzç‡Egš¿bŠT®:sølÑ’?|ç ×ÜåÿSx1ߣî-Ç—ªÀJ’ú9¹Ü$øQÑÚÅ´™F./·±ÉmܱŒ‘Ã[ã}ƒ~£ªžíA»e»U@eÀdÇ¡a/YEÍ ãî3Ù.Çû¸ä.Í-+¤Z$¤‹+ÑCðp)XjØ2':»ý‘“ xÏ1ŒÇxŽ¢&cÖ4Evvf%%„B!2¼½ËZüäð“{¶»©ƒ©1”ЉæäŒ;ÿ­ü»£üˆcà O³%ϳ7^}4¡uÀEºü­K'Žæ˜ÍŒTÐü¼xâÏôøzCåÌ£{÷nÊvßÉÍeƒÝÝÏø•¿ºL]nŽ57&†*ðŽ ß<5›?“ýÐ=Ì®3ðÒxíeìUµž—ñ0ÅLiÎOUO‰@t …YK6þ(T2Ùü=³¾.'DE[‹|nz¯<×.¼OÅ‘± 6„p×€¥%)°)µ¼ éħ ¾;ŠšŒ*£¨ÒlƒÑ·¸ï.Ó]SJ¦¨-bnOfϲííu/Xåа¹{,;w°‘µE'/§÷Œuæ‘©¸#<“l+ˆ`ðÿ­fàÝèyi:mº¡ÊW¬H–Ê)×?‡3‡d>'ÂGƒE±ìH»dZr#M#=›&‚o«n#Ac@ü°hÂ÷jå…[—{¯:ÙsioM‚`|¯Ý+žQÅUpu˜cØÒÏ“‰Øwx„º-;\舡ËWçàË÷}"~r=óz(7TÃÔ¼<þt:F¿¯¾ßœÞ\—cÇ6ß9ì˜Ë“ú{ Ìß?€˜ýý–ñ àçê¶2:<ÒÜ0]5ôcǪõûÀÀEÕüï@¾<= ޽ ?äÊ”·½…™Ÿ¸ÝSÏ1‹püÌNûxÛÊjLœ|¯³´y€å=ûš†ÛLIÉÞìƒmüòK°Ðöæ«õf=6Ö¯º¼vÍÊ€¦=”aj„dèQÕ{#õ’%K¦M›VK¾Þxx„•w4Õv#•œ™>0Û½ÉôI·è¬äŽ;÷ìM]·ˆ‹›¹ÇiOHIHÜÓ™ú¬ñmÛþM/^¾¢åš“ {¹¯Hš{¿ï}G®ž¦½?Ž÷ìIâ¸a†£Ãj hº¼¼¼ÿ§Yq›I7'uê´è}øýìÙ/jÐ4ÍK½ëï¶Ò÷Z§K— ]»ê{ý«Wwhw˜z´IæË/¿¬Ùÿ©e}õ@3·¹“%®Š½›`XEìJf|Bœ 8q›ás³§ ¼ZÑõJœù¡’%=r{\‘ÏÐó‰·k·êÊ•?üðƒP¦˜¶úLxë§\nç™íC ÉÔ-’©, Yë§©¦½ÙÔqž£HæÝ 12ÍçÎîg¬¥Ö:’‰Œ”GoòXþ®¢S†u¥áoí ìJµþæë-Ö%-˜³DiÝ”akïïÔ¥ñ~}ˆÐÜ«½ßµû¬ê­>P7&h©2TÂiŒùŸÄÏèæ`J§y¸z÷á`‡%Ú.»\V®Œ&ófL܇/µp¶¹#ßöeã/¹Ž¡¢™e³\Y.Lú7íZæšj–Š.þÁdÙ·Wç|²~¯ãG–?×·’=G¸ìYÙ£·¬—íâ/Ûe¿ò <òžâ Gñ•Û°´ã^lÓˆy¥øÐ·ÁߢkW×éÙʻժœUâ£bƒ§ðÀÂÀ‚UòìÑZ¦Ò,ˆ¹Y%_.KŸx%%O®Q)§®]Ä™6ŒÖ¼P*¤.þÍåyz"ZÆÐP2*wh®å4~R±èvΦ`»‚¬äÃRð§ MéÆü^ 0ðßSŠ›‘‘¿a¨ÛðKW·´Û‚jŽál;]Ƚ0Ô}¨žM»—¹Ç8Ç´Êm…®‚¾á}Ú¶‚ îJNHJV—XÇÚÓÌiÅ <«#Ý 0`I·Ý|šPPÚ(ðødɶ[téêV´ZZÚcE6m˜M <¦Û·Ä÷¶Ím)]ÊQs*2 þÇðv¿õ·±Œnî]‘Ïb9uRÇuúáb¦÷qtØ>þdÒTËegµ¿"~.Î{&¶1Ô¹© 9»eï€,횘1«viÎ5ìçn>Ñü+i§ ^÷<+bóÌÇ÷îцI;N–¤rSà Âõ_ÂLIÉeÒü戮ãnF- ^Æ¡sP+­»èl×Ù ‚F YÂ*±”[¢«P«853Áª/¸_Õ‡îýœÍû^é|ÒžÆÃâŠ9²œçª«Ÿ•1T±K1ïäõ_¢=¦Þ‰ÛÖ~+ºŽõ6,›¹sWÍXå>ÈÝù²3M@3`a’ðz>·|TT9ß’ÃÚ?,2rË_^³g›ŠH §ö0U>’Íq“};Îk¤‚¦ËØAº7ˆ¶‰D˜Èæg­7YÛí£ûT>ìŠüOw‰;“Ô·ÂUl峓íqá3I¬ŠT õŠšhF'»N_ßÿš¤HÓ÷CX·2·TÓT$hjPÍSÅ·AneMswwŽù…dƒÙôͲ;uwÖ@Èø)³’Ôœ$ù+º·ÚœÏSí~ïc4ÅÊ´)„óùÊç6÷gH&¼0bˆ i|±œá_t¾-‡ÑðÈc¿Qpœæý¾`©S[Lª§¼¾•‚/D~ ²AHhÖʹžoÖWhˆ`N–±ÍÕö•’¯`%ÞL êå¹/¿÷B@èü^'Ú‹Iñ¤HƒÒeKäG3Ö¥ÿàƒÂï>»ß†³öÑžôÅI‰Öª AhÒnU‘ÙpšS6(~áõ|C,Ìî]´^´3Ý9n¾3I_båí¬è›Å+ª•ÕÉ’äUY«pç¼ °"ƒ £á_n¦+Ó!t8…N¬>9 |)¿ífK¨)oj@öšöfI³òh|ÐVzÚܸš°<_õü󳟬Á›í†L™;_7ÿç?ôžôZÿhE{1S-S/%_Ь_pñÍ“oç<óì6ŒÍ¯iàG˜ÐDÁ¼{²˜W¯ã4'ßiS>ãöÝ.œùãA›ìï _.}ˆçÑ3+<Ä$ÝFš…qB{âG³„»åÍU«xç:rUx†?N#}ÌÙŒPCnÍb[Ò·›ÞþR>šÙd' v³ÚïN^×!kêñõÜ•ÖÝM‰ÌøÁk ¯Éþ&³¼dqr#¼’"kQ»¼ÝL¢ræ÷I¾®ûÉOŽ&2›‰³l;œÓÀ—üQ'3M0ãͼÁÎ÷3þ-Í[VHÿÏ‹ b“¼”´&Þ·å´|yærÜ'o,Ð-¸`½`ØùgðH–°K58[ÀVÑYq{öíü_Ëmµ›<“pLRgœH>ñìÌgùíÂà…ÊÂÍúÍ¿uü6ýéíßh4P]I(4x'zàù¢/亣\û’‚ú¦5aÙ H¨<4!N#zÔ!{Ä)Ð &mÏbðe—qW©ª4Šyú¢‘Mz‹Îú5ý7F; ®g£I'üS  Ø-®ÿY`Æ«moH(Éü”ù‡Úñ/ZïÔwJ;}”k!Þ8õ¾Iø¤Óóªü±;./ºûãi"±Í°mYÚ2¥AªÜ“,·yá<Â~ÅÄ)pÞWpVÜMŒïOûþßþfgÕ>­5~ÁHxTW2Ù2ùçƒ}ª @ˆ‚ Í­ñâ óä|TDª‡º¶w›ÞýBþb.šfÅgYzezœ2Mâ­ô5s YIöÀr½¼^N$é=zÜo&¬ÊXµ¿}?ÿrŒ ۙݤjÂ*àÍ~£˜{wFe¶m@ŒðliÙrOÎ=ü_¤‘Ÿa•ëI3ôæÞsýlžeŽž¹¹‘.MÿjÑWuñWIßH’Ì“h}ãÁÚÂâ×D%¡×¤(VW¢óèH‚:Ý}:ò£ÐLýIBš€øšù%[ÚÈÇìþ×”Ðyb_pF]÷‚;è>Ð~`Sö¦˜_Exï$)€¡=…ôA_<òµÐn<Tj*o—wÅ› +2Vì1îA":´x«€6ª‰\÷ÔvOûùžó«3VÇébºØ¤¿1Ù¿aô`Ò°×=ø¹ƒM^CX€6‹ÌMó“퓱înz<:éÑš?èðv¤þ*•tgœuÃY¨}Ô__w1þ^ÉÉßix'*›éŸi‚…„å4‰BhBl†yU5ïž,è< ˆ€ÝÆÝ·¤Ü’$Šçš1œ¡¥Ù·Gxè èÝlÁ)pΗà0½› “Ô“–©sÔñ/:מۦh ’A¬…xqˆãŽp6ÎiºŽ ܵçƒÖ6dmÅÎ÷½Þ´ﲪ©DÇc¤á~ÂuŠMóƒÐò°‡Õæž‚Ë)Z¥©Z'ûÅRXw7=’ÅÉ÷åÝ÷¿Wÿ—æÿ(,ºZ”WŸ‡äJ–H¿ø^Ó{4KÆf@hÝS¢rš„ 4ál&T¹î)¶~xGÎq½¤ólZ a¿“äLèLè£ÓšÓ³¬³(€ÇoB¬ÌX¹ß„`ÖIBKR<)…« NØðbIdšà§ÙðRɀʸÎ7,›Ê±š^nü–{sUô°‚%·|×Cyjµëd`ÅM<>ùñ¿ÖýÕp0jÁÞõ{Z¨í*Ùæ1AáÿŠŠÞf´Ä4`<ƒ*ÒËõMûkÚØ"£€Cœ¦½Âšh͘„¦ãèul&œÓt¸êÄK{á#gcÖÆøÍT1iç€ëK„“¸>tÂ!p´J[§Ù§áxSÏ:a´¸ZÚÜm‹SÇK6ÖJ&ã&ç-Vµ„è& n‹ƒ#lÒFÒ,èe9çÕç‹Å*2«c‚ÒˆU«Þ¨{–-)–cK­Ú±J≾õôò@íWu_÷7•3‚]]l¯äþ‚ûßi¼6ëtç«Ó£®i‚•‰–&8QÍm¿ž<€ÍôsšÛ~3p >of%ÏÒŠã”*ž8Éf\‚l†tB+3 tâ¢êb©³U*tŒxcYú²ã]Ç} ‚Gù¶ü&Uûù† ;;×f®¥ˆxÍõ°€z—UÏ"Ú#[$‡Ù´@~Â$/"¬ZÀ 3s.éܬžYX ONyòµêׂ,ÓTØTWZ·rçJ’ôM`1Ý T±]uoÞ½ÛZ¶yiïxlÃñ—Þà£ÖîÔß§/°² VÐÉj^¦õ/Ñú7™´þЙ^KÄ^P_(³–á¾w³B#Ò”ªK?ëúŒÑÊ€RP˜ä&¬Ąƴs]ƺø}Èm„o6á‡n’سÁNV­!‚Ó‰¾lÑõòú¤@R²?ëbBajÒÔUÉg¾­¡·Uóª¼A“ƒÐ„ ŽJ²ŽØ>ÅÓ¤i3´3˜`Bw@×yiÏ&ý¦8}¿p=Mµ†^S ×ÂÝ:Ñ oP•)~<|3ƒ[¼"Œ„fp†=¤°ìU–ªåéqL˜)‚•V±Â º²•Vºš°ôŸpQ}qºm:ÖÅÄÃÅïrÿoÿÛë§v¤N¾pÝ4EP„lÿI˜w–¬ vÄü26doØÞº}\šË—QН¯ÙFÙÇ;OQOIdžRäåmTœ*'Z¢Ìvu´,8UÜ:Âyõù¶ØÌ^¹‚r?K´JG(}8÷ÛŠŒ{M{ã!½¸xóÐ'Ø âFSS#˜˜÷[cã6©ÞÛ¾wAÊ)%IÍßáD¾@Ø.±i¿côï2r 0›³ôÍ8“ÄTì(ÆFæ&62ƒacöÆÖàe«¸/Ø6 ì]¿·¬ª,£íZ<»€u†l?⯻/؞ò#22ÃÁm9·í0ìÅô7r#CÖÖ¢¼íZZF¦{ø¤Y‘¾"VÒõúå®´®õÛ à4î–œß>K˜a†iÔM¹Rc‰£$&¢ëêPÚ´JG(½¹ùÆ qç$Ïiqµtzc¿ÿm~þš¡OÐzµKtKºãñÛ¨‰y¿ ’៼˸kCÖ†J×ë£Ø«Âöo¤á ²E˜y„#“ð…ÏLrL°ldnb#3D¤h¥ô+á›D:TŽ3ùKw­PÚ&­s“ÏÝ2R#3( TBÕYóÙ‘;´禜¶nEÀg››Åp¾á±¡a¸´šÕ™«cbe/~=øÝϲ…s¦%ûîíóþº©J–sÝ"û«Ê«Î!+»•Ù¶kvxäß…‚ZßÚ;E‹Dé¥C+³?gàqhŠ"¨eéË´Çr Z™5k~ ð8´ Y'Hevîä~2<òìB¡½ßZ[%Üêxljºñ8M€ ìkß·:=6ùô ‘Y²ä%XÈmøbŠkM´Ë+Úpº`qm!'ô‰/©.}¾ ™72C`ì5I5á)©ê‹ê Z°êãõ€0œÍl޵Ħk…‘ÖX‘~ã¶Öm#¢2»vqž<"42ÜM¿y3˜2…ïÛ.7×·|9דᱠ`X‹J nC·¯»LS K·¿¢â™^K÷ŒY±gǦã!N_·Ïÿõ¦ói9 G´”—¡ç4vÑEEìm·qÃËð8y2ßKZŠ‹9u£R:Bé¹¹þ+¸üiðXXxƒûmEzŒo76îÞ½ûÛ°µµ[o@hb=ëTP@¯[Çýdx,) NœûM¯÷.^ÌŦÀc^Þ·2>e>•§ÈK—¦ÇˆNí?|øiXh¾å-5Ñšþ©£5ï‘í3…Æpºa”EŒHçÓa#sÓ™ÁJåé<ºðP‚™Íïm<(wË–m_Îf¶®= ?…‘&¡ÙaØ1Ÿ-¸v-·0 ’ÿ.#Òú^#7ßÃg?ésŒrÚ §¹íã…›>^øã— sŽWZ…V»ÐžëÉ•hþ­L8Ð*¡ôaÞo«2Vh?óÔµµÝðœtWºKèrˆ1ÿí<[™Ä¹ßòóÝÃ<³¢³biêÒØJ‡F†Õ>Ýt|t™>ç4t«þþísÿ¾é´HÝ0pµ²:&^62‰od†zB[‹k’jÂk8N³áPFGÊœ}Ë£²™™áàÝ-—¾Æ—‘!‹‹QÞv99#ÐýÓž˜Ì7]ò1\7­{¿8HM%\ˆ'Ùå•RG)ÉÆŒKA a³£U:BéÐ…ÎiÙòlHs¡çB¬Ÿm7õ!‘oÏoP5Äü·Ðó~ËÎnF#]G¥.Š­ôÖVnÅ\8§¯Û¶Ïÿí¦sZýuCq ÁÔ(k ÁFf"™¡ºª­À$7y©ëî[_vãk+¦×äÝ·}ù`lf˜Ff8 jmÖÚm;Gè<Ñj|Ü,Û0Çc|ÝS¤%kýöÛo?&¤‰{¶Ï‹\÷T«¨-u–Œ ƒ•+ã´ÖéÆFÁ†o#€‡öœë97?e~œ¾?Äinÿxám/üÉÆKyúÃÀ-²–$’: Æº˜à2Âlgvƒz W㼆·göòŒå‡Û¯¦7„æ”ùT¡²0YûdS!6³cÓq6‡Û7ª?ž¦ÿ›Ðæ¸2=™¸§M(B³Ï´͈‚3»[Òíx±øÄñ®ãeš².ØŽNkz‡§.AÄ0ðUåÕÎ7aŒkp³NšëfB3Mïm<øØ—`¾÷5,I_rÐtp|å.7„æxçñ˜G²ðyÊgÙ°"â³Ï쥽R4”¢[Ü-Ê%´+c0dº2Û(gf§ÌÆSN±ÁYËÙrm9Ñ&)öœ08 ÜyàY§8áð èÆ^ÆÐÈrf¡M̷߯ú­6ÿ8p«Мë9¿ žC€l—¨+Í—†»ƪŒUûMûQMcØ ðâí8[õ$Õ$TÒR#ž×Æ©îÔNY' Qª.Ûn ¶nÓÿ——?wà@ì/ëÀU¨°¿çò*éúUƒ¹xñ‹±üReè Á+:ëö·¾2ĹðÌmÛinÛ6”dtŒ·Í˜Eó¼)ñtà—ÿuws®`úš5¿çù÷Yÿ®ôy«~Ë;wŠy–Þ/‘ÑáF¦"»žWTp{Ãí·7ê³CåÁ°dÉK±üreÿþ«kÛ#/ç¦!™‰ad®!ÒÈlïÜ3såè(.YÑk_‰«Úµ+ʨÊ5í½£µ6Ù²ìANˆ‰¸±³`óæ1ýÿóÏ?ÿý÷ǸE‚ÒÒêP±ëä…ÅÅâYuÔ¯^ÔÜüÛJη†¾°Š¬J¥dC|ynîãðÓÇU£âÆ©tT¢wYãWîMÓ++È¿ô#ª)'a¥ÇJ4·x{äƒ4YY«c"}qÊâ*k•#èÑIó~3›Ó¢Ö;ƒN¹ î®KT#ã"\rVŽ»962#…ŠQ Mhbed¢ûr¢ä¡GhŒF Úf'kkQÞvKô<怙‡•*ÕìÈJOÀ\z¹aö¾ýÓOTé¬þ8‰FÛìVz¬Ds‹·GF“ž¾8&Òe”laòÂ}ûFô_ª‰y¿õôD·$NÚ© âîºD52Ðkâa™›O´’VáP³Nii‹â'=EœbQµÌª³±‘ᦜ¶nEÀg!•¹zu,Àcä8MO '®#4jõœÜÜÇa“’†ä§=îüY•Ë—6é…ús—âÑî°ÁQ5û„•[ÑùÞüqKŸÊÌžýcX€Ç˜¸P«SWÖ R™3gr`y§A{¿A*SW7à1rœÆE»âJh†02_×Ô‹ÐkšZyQdp7ÇFf˜PÐ @9¡2‹gÍzà13sU<¤k…ÚEÏ FF}öl.,À£É„ÌÈp„fóf0e ß·Vk.-­†xÔé&´,qMa³nnþ-,À£Õzì:#( ’5A,I°¢ØÛ»âb®ÁQ5û„•[ÑbVœHk wg“ööŠÊÊÂ<¶µÅ`ÑõªÔU‡»û™a ¦¥ÙgÎlxÌÌ´NœûM£é.*â|xLNîˆ$42JÆ¿‘!@;í·õ3Ï,_bÐÑŕ͸›c#3ÜF „¶A(EEUÕs°FãÞ¸t(‘Æ.·bdlååÜ ÈŒ Éÿ ŽH*ÓGhür^õô¬ô¾‚ã§ óTzÕÙ8³ N¢Ñ6û„•CÑÜâí¦ Ž •éóDÚ©ª©GÌG†ÿ/Në¬Ð6û„•CѾ‚‘†Ñ´·WÄð·¬I[3¢}ÒÒìó~Óh¢­G#˜’qÏÕidXç }ï^fŸj^l®c«ìuòÁì3Mììwsld¢€›r’Ðtt‰ë¯“ø$nÚ=ا©©6´Íž Ë¶ù ŽMÒо0´à5«À›:™ ˜å400"}¦ƒr8(ª àRwìa¾?GÒ×ù¦!À‚LŸˆ~Ùrî…3…n­ìÛ¿ø} äÄÏs‰ûäÄ›F«#Ü”“Àð¸Ú•¸Ý:1/ r@9… ŒW\/a„; ôB]pNç%@©]‰{F\†=t;ogK³Ó%é•=•X£²|>–8EC2A‚©½uås–}V ³”UHp*þ]M 0I „AP™*FäŒPˆ Í#4˜Ð JhøO©RÞrùÐsŸ™caNÌ™‰%ŒÁ0ºl41Äš´58ÃÞ¸ƒ[ì– ,Îiç«}Sƒ€„F@è³7E¨Å„#\b=ʃ’Ðx‡Š¡AAb^–#èà!^/^‘öë… Á£Si-jîEQQè+ܧÞÇIJkÐ;ëôͪo>;éÙÐ[ÂuAùfo˜ŽX៹Â;+;²k­„_BJHvI\JWpóëÿ[—®¼2¹/iÅÊ3æÔp,ưxy"ﲇBV"*ð¹Wî :1¡¡ƒh„&HM<–³ìœâÞ3`²<"Áý# ”´RA+LBSf ÉLVNfXæªãj©²¾eåÓíN‡É®ZÅ–í¾òoF©!‰ ®5Òã 3º[}–©”ç ðˆ=„L»õ‘Gš?ÜOçê{" Á®ËWä“Sqùëh°ˆÂ= #h™—ô i4„O9’ÐðCCÒtfCÃô£GSÀ¶tÆÿ"Ûôj.[F‚z³Œ!€v£JÐ;H±Ö‰ Zê™”iàw‰¬™ ;§ùà¡Á fh"€eéùóü{MÈV ¡™M¿ÚYš%šmÀ/…î^Q ÔC ›uD^Ú‹ ͈ o#4Í”TUAB#öÀ»„!X¶ðð¾5ûû]—Ï¥ùhÜ}0†À(²ÑÄ‘‹·ÉºƒÒË„û®[ÙÁk&,›56öÜy§cùòSéY„R Ëâ†~8M¸×D9\[ŽÔ¶ÂÀ>ÙØ§–{3 ÖÁþ½‡Ýãeb:ƒ1¡Q¸Idc$RŸÔC{¶msʉõ3üÍp§75)l}«ç=¢ ’™ò &¸@jZ^%<³x*îAƒAï×w;|„OÌŠ‘\ÀÍ“×dô3¥}Ó^â#µ¾;¿ÌPמˆ‘5¤Ç#½p¡ç®»Y¯§Dø¥¤–íkÖh>øÀW\×¹§×²3@‰öÞF…»­FÏe}FX,ßÌ"еÀ‘ Úñ|Æ „Fê%½¸¢w´„¼(»àö1˜O²ÄgDýoC1œÝ·w¹/-¤|&ì(a !+Ìöe7‰›P]EP«RWíêÜöìd1yýÓt`Í„È`ðgeõ±™0Àf&ü4®FFqÐÛï5¹E ͶK*Þ¢Àcd`dH áv‹ª«…ÀLutž¤ILBãå-€†Îw¦œ¸ÝÑ™zÛ’Å-ñ‡oÕU›’ÁQZœ—mc nçm¤³N«ÓV‡Ï:¹¾ú̀云×Èš‰èº¹ÝŒâ{xÖXrí¡RÁOãjdJv,î72AŠ…^|+5”%‰kpÂ!¡„¶Å•·]Z|ô¨ž—¸qU•âw­­P<ÕcQüë_â3g0¡&äo¬bŠ­{þǪª{Cæ¦2©Kè N>í×fü49É]?wî>CƒËF–^¯ðÔ heà+;ÌÐP>ËÔs•·;>ïÜ?ÆhqÊâKöKÖ@ß.*Š?ýŸÈ}Ý6à‘5Ò­•‘ÎkËMó^›Ñ&ŽÈ‘›Øû¬÷ú ç5¹ihd@æÙœžsöî¦>uxÎÞ½ê“]q ¿#âV–úé7Ooõºy ó‡lFØÐàºï>÷êÕD0ËYRËÂúzñÙ³‰Ö6‰é·1‚¿ óÍ Øýœ¹FG­ýô•9"ej’± À.ÁSÙ7€.¨£ Ú"°hƒÜvªõsç×0õ³ãáç^¨™“ŽÏP©MÕ“/4›ËMO%¤äÖä[÷vî½'ëøÖùõo8!²fŸ-ÿì3nœæzîBº\¢¶6ׂñ}$ä¶ÛAŸ‘©S _n¯‘IöÊô. c›»ä4ÖÆ Á „³àB]û¤™Ò«qONx<âsçœ÷ßê8¢€ÈÇø¹Ü½~½âÝwý¥¥,ï‰ÆÛ é—RüµQ{n.QÜ MRåÓšWÝÊÔ&§Z ëqßÁæ ÍUAkZ€ªÎHb²'cãoWÓ1žÉ\“ºfOǬˆ!ÝZ©{Æ ÕîÝá³Kͨöìq—•1’ø.A0gd@«2ÀÈÀzKz:V ƈý}g‡B[Ü”$âAš°¹9˜%øL.‡õ‚––Äâ‰u5 ÖÔÌèj#|>’¯°#†¢êÊËOÇ|¤c÷‰‚n¿DR7s&¬Ç}c8(ô‘†¤m4¥¢CcÃi¥ˆ¤`,ÓÚÁà†6í±öƒ¢?þ^ñˆO‚5X)‘ð̘á+(Ð|ðrÿ~u°ž±™¹õMžéÓyðš\J¥ÆaLe>„FFp©,Xƒ½&Œ‘BðËì…<-?â·›Q*ûßš&û¯=:U*è`BÒ³gÕ[¶ô缂eé¹s|4Më?©)9I5Ïm"X@y¥l (:sÖã΃1äûò›EÍ4à†ÜEöñÇ©§/Ïò¦ïÕ‘6$4°sšÁ8MÏ=÷ôzQ@悞{ï…5üˆöeº7ç3ÎÈø¤¾ ðJŒ‘?(v?ëXxŒ ÔK 2y§OLµùã'Ž•ËIǵí0w):¯=:ívF.O¨ÆIBÙŒ¨±Ñv×]Î+N¥g TZXñ’óJ}°{ʪeV·8•[ çSrªR„µ¾ôæfÜy0†u÷2Ò”`ŠA}é/C©(ÚN…f™X&‰f­±ÛÂ]TUEµ·ÃÂwñ§òÚP%¬%ä„D#‘x‹‹= ˜‹â=Ót‘9*lšmđE0©¶@PçÇFc¤p(K©ÚŠ[o…¯nÙ4gþ%uçž99ƒ!r$†t:a}0'šˆ‹ðx$çÏ;Ö®í£{D@LŠaÙ±fäìÙ¸Î=9/«çíö³N¸o!§‘WYqçÁ&¸ÅÛƒ„ѰM§€žd²’͘ª ašM3×\XÓ·îw£»x—´Žþ|»æþz äÀF#¦c&¢àOšTê+/—íØÎi`ÖøfÎL¨ˆ`ÁÖ­cúÿòòç®^ëE¨š/ô·´·Îê¯q{¤W¯rK¦ÓÁ]!´çº|:7÷ñ±ˆn>PiYT–Ý'úlî)@•V2«KbQu ‡þrøé[o,@(­t´?|öìG­—ù¾îx|vñå^Í´¸@ÚJ`‚.Aí]ÏpýrmÆñ½ÓZœ´úþ·6Ï–ŽÒ£:sf ?TT#$˜¤Þb’J©Øæê™gã–P±íTÝ™8OýaÕ 42uu1ÿÖ‹~Ÿ¤®nXyÀ±‘ÁF†OÌšõüPŸþ¦Z]2+¯÷œY ]L¥Ÿ=×Eäj˜š_ïqëòrØÇI£­vwcéâp 8Kq°<Æ•à‚Í›ÇôÿÏ?ÿü}÷Ý7ÆŸ$õ\"’üª’+¡·?ø°äÓGJzßÊl6VxÁS=>·¦fr}ýËc’½¸ÕÒ–>Ï鸪'´[,G€xuÒ!¾¼°ð)øéSO=…ª¿QqãT:ò~áÂO£û1€mK¹|âÒÿ“§ÈAJu|~þ¹Tà \u/ŒNúôé?(/8C¡¼èïŸáÖ•Í™µwȹhAF­V”Ç`:£OâN®‹(‚™x ¶ßYë‘æI“nìUW—b#ƒL"™Ïm asÔ\0ü4Ò¡‘™5«5ÉÊ"<ëu--¾ÃA}QRÒÔRi>h{ûüK>åÊz½~,ß–SNŒLF……å…异õñ;êÎÈè/‹iÊKõ…všñŠJŒaƒD¡¿°NTdz\iéµÎÌìçSNþ’¬”! ŠüŒŸ7qŒŒ‡ b#ƒ1²G5Ãä47Ï>uê —/‰\fX†5|^+•JK;d &==Ñfš‹Ð²³…mm‘ÙÇI— ÖÃOã*Ý”“ãP«ûøC î.5¦ wÂHp[³¢V`ë96ëÔ)>mæÌ`ÄCÖøË˱^†€8 ö1>ÞÄ 024Áb#ƒ1" 3õüùìæf±ÇC† X†5²[[•vû€JX“ÕÚŠ'á $.¾üü¤ÞœW)¾F¯­3éý÷}……üd‰`HÚ—ó ¼1íV¯X˰ß#²5in‰Ò/¬Orðlk wñÍëøâ?ËLÏ^ Ë,~LÞKdùËÖÓodþ<}‘Œ‘@×ÑæA‘4Ù7³¬ëìDÐs@âæOJ 9õž{üz=„¬Phå1çU?D¬ØKxqÿÁ­™Ó‘|:ÍŒÌÖ`ŒRJê¡=üË•°/ÀFc$&ÿµx¯•†¤þ@O±ÏÇ÷¥>…@ Íðœ©Ô×›óŠ‹aG¸V‰1R[³âLAeª™­Á d”ÌM»ù—K@àÐŒÀ/º–è!«ýÚF>±˜wÊà‡š@˜Ñ#ñáŒÑÚšIÕ=b?2[ƒ1"&JŠøŒ 32¢áÇí1|t¥¥õ—½Â ˜î›SîJMåýöåuëè›Ðˆb/ƒŒUP€ ¼ÆhlKÈl ÆH ¤”NÚ‰€Ð@ÈŠ|ÀÃ. z½C¥ê󠌀á¢X`MÛØ²¶ŒŠ2ø%”$a G¥]Ï¥HVÌJq Æèl M²½ rÙÊ›ÈÓÛ GhJ{ÐŽÀȽF‡Ñ`  I^š1Ûëå"1–"[ssa ‚¸rÒ ;NÂ6T"®í”ø%¨Fh..X ‚ŌؚìÖÖ. ¸ÏÖ@6ƒÀÖA1…繆 µPmØ‘ˆ÷5«ÆZÀ¾iÉÍ…/ÝU[QÙŠ(m7 zÊ) Ô'E¬wÍÖ`ç cT¶&­:Í¥8ÐÖ$r¼^¢ÕM¯‘‘zVÆ(àyE¬™x"€chFØÛâ ¤Y²>¡ÁÝcp‹ÝbÝ éÄføP TH€è52Øk qPðÈjE¥˜B;OãÔÖ$ôô6&4ý„FÈJ°‘Áµ×„j„†eÀyhF¥@²ìÄhpÜ ·ˆ2%™m¾6$FFÃh°‘Á)h‚ö üV‚DºÉkM"·O‚š$a’œW}Γd%°­Á9¡‘Ù¥ š\½7\Q‰‰,IV›· ‰h «±¬ŒÁE¸4N4”ºL* °LhFŒQ çq"´5x4c͆t©]jTp± AÖÂ8"4ØÈ`ŒØe¢ì©=©HD·yÚÒ¥é Þ> Jh$$7¤†d÷nÊ Ð`ŒÔÖvM‡J:¯‡ Íx 4"øñ¼6ƨ`#m©V4„Æä5eH20¡%2%™&Ÿ‰g¡bøBSNØÖ`ŒÒ¡³"#4\¼^@‹µ0"¤ŠS­«Ÿñójs ÀôÆÐàŒQxMé4Ã$F:˜ÐŒ–Ј3>#ÏB °,¡Á¥­AEhz=R1ÖÂÍ™!Î@2ë¤eµ8†c¤°QÈFhŒ^c†ÐŒ’ Ø‚HDc[ƒ1BCÙ‘Ùè&4£54b4†ÛŒÑÛ+²x½Ä NLäJs›Ý¼î!%XËEާ²©]dVƈŒLzš)§&WS¡¼šQ"SœÉ­zçØÖ`ŒÒ‘Ö“††ÐxÛðÍèP +hp7 ­ctD'VÆðÑ-èÖwêù—dƒ!O–‡ Í(j(8„d&¹›èÆýcø°P–ÌîL$¢¡­Á„ftÈ—å#$4Ý$62Ã…‡ô°€Õ8ä¡iq·À'²bB3JpAÁ^d„&•Á#4#iËêFÃ*Ú…†V9A¤°)]&4Ã…•²*¥€F“F³ÙÝœ#ËÁZ ßÙìqÑ.Þ$†òЀÐ Æ6,”%™NF"ºÖY›ø4 Mh„@'Ò¼>…†òÐ*p/¦ó„ÊÖÜP#£dX £CM\° §Á³NÃD'Õ© ¢ÉtUã¬)VcB36C#+¨wÕ#-bEjFi0†ï<¡ ®sÕ)а Æâ8ÕºjyÚm;„L&³lÃ*À:é4‚5Ûб¯vTOQMÁ„fLÈ—åóŠzBL$ÂÂÙ³hÚ™êêØ™êêÒPYÄ(/XØÿ–#Óú¹‘qùËÞqþ¤P 62702µ“9öO˦ÿ€Ê¸™ªªynŽzg1súë#Oˆ•8X®ª¡Ù¼yLÿÿüóÏ?ñımÐz–.å¶RšæË|áÓË¡rT:”tðàwc(ºÈ;ì`Ç.Xv(ÎkÎë+½QÏ\¶ì×Pô‹/¾ˆäŽß¾Ú´‰¦( Uoãm3FÑ~¿‰ô;Dû÷G¹Û]—¿Ðyæàϧƒ‡¢ž¬XñÊÚµQîÆ_ì¸|÷ì¦zÁAõ„± ï ßä ‰I³C#óôÓOÇö;¯°re*pÕ¾&/¨É”EYú¾oŸ¢¢â™XVÖÅJ+º÷²‡òÔåìû/~~ôË_þ™ edŠBp/¨/H¤ÞCŸz<õ„˜`éҗׯøÃUV®¡¦¯/ï­?"O ®}Û_¸²H$Ë·%ô”S²8™d§M2MO×-Æ‹*1nŒnIw²7•ô+Ö+“Ô“°Æ‚šçzÎñ#KX? Be)-1"›Ð†U€q##îNö¡12gÍgË’ËÆE+ üúJT%uŽºTI*_ÍÁ?·5Ê€2@  îNCÛšš5ÛF·QL‰µb-ÖÂHQsõһΟ°ø³t©¥Ó§·œ_Ÿµþ™_½ùvnõOŸùò긘ÇÏs]õ!Ûa’˜Ô5ÖÆh—¶;Єʳœ+×–cBLVO¾d½´P·q`éÏ Dš7­CÒ‘çÊÃÝ c(B#éÖ»ôHDWš+Ç‹­I4üä‚çÇ_ºs–ZpìlÅæ J4‹ zñ{_~€{ÿçMÞ.#Ó“i”'9ðÆ ÁnQ7|…ÞZ€j«2R |s‰îé Žég;<4KgÉÇÇÎ*d‚__™¶Œ·¡àHdx2LR¼Ð ãF}^Ú‘æA³-åó™Ù)³± F¿Ý3g®VB@D‘2aùY3O1Ï·öš×”áÍ0JñB'Œ¡Ð%îJö' Ù¾­”ޱÔ"Âô8aXC0ÙøÎCì:9Ž,L¢ÐÌHšñzíë M•¶ w'Œ!ॼn[ëë›ô1Í.Be! ëZÉv§6Þ„æá’‡±F‡¼øÖ+¶€X¢yã;·?¹÷©6w[–,°ða`_šEh þÇÆ´KÛÓ½×2Ðl"zà‘ XAœ3Mï<¾0uáxi¨D¡™š4µÞQ諒üˆ\okà=Ô!é`ãüLÂï¶&Í“F|~Û¼CªËYã#LË­€ÚFÆ=0¢²»rv2¡%~úÌC¶çzwMÊ×ÿ°ïÝü]'ø¿Š¥t~´3XƒÁ$5õÏ7…p˜Íù ›³ˆVñ(?ÖqlAêLhbäÍ¢UÉEëEžŒ `Ã7;Ð-3‹Í¸Ga å6=ߦÚV‘D“k’AjÀÁˆ ›ÐƬƯPO6˜ 錛©2WMNš,Œ›}≉åÚrج|JdYRΩw1#¿:Ý:÷+ŒH0Ó!íHo»Fhîe»É¬},ÐK‘,â6e ûÅÌä™X £Ãò aõˇ ~¢4+ëõo¬— jì5Ûþø—/¶r£´;_|ó¿ ÊþãƒÍe,y0‘ r‰n¡{ª!óÝ °¬Œh‘µèÝ×-¢ÜÃÊ)K6 ü:€øpšãÇç§ÎGm5úO™¦ì¯õåG–‹¡!ëAFpߺ’kw'¿£kÅ #*:%Ê€2QjÌqç`½` @«¬5×}Ý–&9@ò›ì„xÖñËå|¬ó؃…¨¼zåÂw>­:fög§¦}ïŽÕ_Ëã¬Ëøóñ¾W϶µyJuY÷¡‰#„fªš‹ vÝ< |…¼é]@¸‘íIî弪€JÀÌb3ª, mkä­Q3Ðøè‘’ÄvÆ/'c€ œê>5Ž  ÅÇO^N]¨š_ö€úï:Úne*,/Ð-8Þu|)„&IîÜi &4‘0È ‹º…×”–R`‰·\†eŽwÿÝ‚ß ¨ÿÑ9÷Oÿýþ9IÔÑʃ·½¹ïkÏmâú×–÷Ó“»ãé•S”"„m5bhÄ”x†fƉnž °€b€ßF¤ýäþdV1´2#ã~…‰6y[¶ëºgä!2ï·dÁëd†Xïg]ñ}Æ|¦@Y á ³Ãd3äc6H_°X™zk_.K_v ý@¼¯DH°A8Ð;É^S±Gß,kÆj³È,òÊ“§FyxôªS³âjaÒ¤i²Œõÿ|à–[’%$A¤LÁ¥«`h×Ãglzè´lŒ‹ˆ…º…ÐsZ‘¾"Þ‚BYÉi ja;BñO^æÊiQ_)ïÁùX1®MÐ&©iƒ{CxåR¦iiø 7n?¼8m1ÖÂ01ÿ¾lèqœ¦·ÜÏf˜WÕýÃ6 Rœï9ï 8BE| ÁNÄvVzámcSÀUæÍ<*êñR^ -ÁÊÂèG“¢)ÇZ¼aû‚O7&»5œÍôVÆ1Œ}Ÿqßʬ•Q?úÏÿùó¯m~±TûÖwï‚o=î&¿PÛ¸kGê©6B¦þÊê•¿˜§Ã#4Cšn> ô漂”†]DxÄHÎ.Œ&§MÚÆ î]á0ÉLiæ\iKaäG”AŸT5'®ÒtYœŽ ÍÈ8 ¤/ýã4Ø „”’ÎIžs¤ó³’´°¬æw´~7 6R6’%õn}£¬« #òÆ| ƒÄÒHb°™pŠsìmÛ»*sUÔ~ñ__õüì«®KýÊ+»\¢6&à·ìM™Qûü׎~¡ì/}¸ßC#i®ñAhnI¹å¬å¬ññ#n.`°R? ¬@Qˆi´XPãôäm¢1ÇV¸iÇ"Ê Àf`¥#5Ž©Òh–>ÑubQÚ"¬…QpÑ£vXÀfBX‘±"Þ³N¡@=ṋ4=Iµ~ì*è/rÕ)ê°Ž0ú᥼’NÈt!q ç4<°WÐuÆ|f—‰ˆVÞ²4àn=ë§%â,xSÿÏ-ÙjUT0ù¹ÅDÒbãƒÐÈòRUéËžøè¤íA¡Í+t6(pÃGƒ²!LÞ¾þH8§ ±XIÇÓÜœ5ŸÕËõx“íQÃ/`{²ökoÖb•©´ß¾÷®% I‹ ._S¦ SXƒ´ À3œ3è¼Q÷Fl¥ljhØ®®œåHë ^!`ƒŸ;O¤A¯lOµÍ©„å_ K°1\¼}å 9y2² ´JG(ýêUª´46pƒ²¡ÀÑgkBœæŽO¸áÙ!ØLaámõõÛb"ýpûá+ú·Èú§~þÆìXøù>ü¤:´Ù!»óØgϾrÉ ¦åç¾ü…¥ eÔ„ºßêêDEE~p}ð&ó!ã®'¿CôÇ÷õz‚\‘¾bwÛî/}9&Òóò665}yÌ!úÒ™.Lí¼Æf\žpŠSä,ª“×ÅŠÐ`#3® MÐÍòæ¥]KûŸG¶/xî¶‹Y„ï«1Âjc—¾§mϋ߈êôß»b| ¨–È3ÿþ­bh`G§q²¶%mmG­ÿþËÿÐ<ÿ&|½j[”ºèéˆæÇ¯‡êמ¶]zN ÙÌÆO’ׇAÀ·°Ò‘Þ>HS¯¨Õ¯¯'6;Z¥#”Þгgy£¢1ß‘?"ç)7wULD{hÏÑŽ£+2¢,ú{ùÿ=ìùù7×K¯¼ú¼m²Èþü­ÿµð¡‡’ºîýòD»ßš›E bM“€$ŸþþœŸÞU¹–{Cö†O ŸÄJº^¿Ú—M›8eÃ#φöp¨nTJG(ö±õë¹yx{g«Q×Ú I–ìg3/m8×eJɪ#üù ÁÞýûŸ€xû¬ÓNÃÎõÙë‡~~~píZ/`™Ú®š%+§Mœû-/Ï¿r¥àñ?NŽ\Óô£Õs¶*ÚRŸN ¯„¾ÓÜ”¹ûMûÇ(’˜ŠŠg`!› ÿHD“Rgt¶4Ù1ùŠò 62ÜÈÈ@³¼¹ØYÌíµ§|¸éÄ{YuD·øó­TB1 “.ü¡vèÐS½cO…Í@|ÔüÑæœÍ¡2ä1Ä´§ù|œ&Äf`e8ʼn­µÆI„Óœ½­àþÉÐTÔ~¤ûÙ?½yxŸ=«ÂÂçCœæÎm µmJ$›ÜÔ!Qb/©VUÇä‡#œÛ†@«t„ÒcÕÓjT5¥¶Ò~6óç §OèíËÙnðyÔû70‚ÏCBœFÙ™6à››÷Ž]úÅž‹BRXª. ™¡÷ÞûHKŽÞ=œx÷[n®ˆOo›’[ U½räüu„&{Ãζ4ƒ»Å`8ÎfB3MôÔê'®¨þ®ºL×RÉhY†'#&ázØÈŒ_#sEu%4ßq’å&—ç¶áückëXG?nþx½~=42á•!NC~£ç¥m“c3±úícÑøøÈCÓ?F²&cÍÁîÃw/™ïvÖbÚ[Cq3ßvô³yWV˜©¬)Š<'Õ›J²¤IjWÕW‹ìEDïj8ó¬Ê÷r‹X‹\÷Ô„œÆ:ët<¤ï4ì\›µv$l&øâ?·üœ|ôžik/ ^Ú´ð÷Ç.5X®­3ÐËõðu¬óX¬DD®irÎ=û§Sÿ¥”:;Ò:N±˜u¿p œ&‰©ØÁ=¢@|(×ݼõ]n¾)wsô§$ D4•ÈM'_š^™±òoõoiZódŠBaì4Ü’ÝzÚ#Ú´ó–„´/`&òIöIÕªjèBá^71ÁÌõ•Í-}þ‘’Æú&³Þ.`‡aÇ3ÓŸ”î¼öÖ­Ü4îŽ_¼ñ_åþŸ¯¹\uÿ}Á ÀÅi.MŽX’f}î¬Çpd«åß_VþÄÖ£e}¿Q¹3çΚ?ˆÕnYf¯âàlY|ò‡»_È´´kè8¬š‰‰KêK¥ŽR+ðr'›²š0+O#Æ|ÆzfuÖêõ\ÜÌ#qŠÈ¿I#Œ Í °çõwïkãìòî_ÿã9‚²üðK^wsƯÒ ŠŽµ¾ñæ×b–a/rMÓÕ¥Ÿ©í²;·-ÜrÌi@hþ™÷ÏÅx Šfy³2  ¥#ºB(;ñLoÒ;<—­—£.ØaÝ£ ˆJ“+&y~> +nh|ó–)ûçÙº/–÷ ÍÞ“wÏÒK_˜óBL¾?7'Êž Åt/=ñå·×\Y›&7õ× á$Ǥ ê °b&XÀ\T_¼½ívXÞË&çOðð&ý¨÷½5Yk¤”t ›ù–E6Sš\ªÈ~5ûØ­Í Ëi”ЬþÚ}V—Jd¹=Ïq©®î;¼ï<çJUÌ®\Ù¡‹Œ>µé ìݵ‹+Ê|±%|ËdU@•æI«UÕ®Â=oBâ¢æâ4+·PÈDGíÝŒIø‹Tx¿éýMúMbª/{ÓOvlÞÔô5w 8m÷G Ÿ]lÿï,Äú&(’xåöEwÿm׺½VÆ5oŽ<§XU¼ß´_\ŸÌWqGŲ-ËIs†¹¿¾ÌV¶%k X5 ç|{C9£/E¬%ºù”~Ðó·_ýG$›߯Tœf3_æ!l&19MBÄÐlºúä–(n.¬ÜþÔÀ Ü;ôw|ÔúQ ¥ÛfWE®ib öÈÝ{ÅT`ú©é>*³–ÓœÃo¢›n5ÉLŶâ >%S#Cgâ-M[îλö|…læË‡Bú2€ÍÀÊ[¦¥c}å™É÷—>»ó³þšûòï{·éÝx˵¦XO®9¹øãÅ2ǵ…ÜÉþdM@sÂûÖËDÃ÷kÓ­Ó-@x„Õl ºùô—¬Bk;]?`‡íö#Vêÿ©åÛ9oç²>Š6UX­õ‚Ф.P žpà4ð-¬L]¨pòÆì‡:¹‚®x_UP<¸ù`Áå‚üêëÂæ9ó<”§6p ÷½‰†Ýž?•ØJ¬€ÿЙª±Õ¬Ì\Ù_³æŽ‚7—, ç4!6+#‡m0nˆgW̪h4nì‹ú¿3çÎ]Æ]^6î¦ÆX`¼2çÊÒ–R*ÜqÚéþVÊ„B½½¾:p¼Ø>åS6eÑ£åwˆ®ZU½Xò€€¼nö㎟O×¾Ìx9C\r]ZÈiîþ}&4Q0à+ŠpNb3°~4àdµP½@·`§q'æ•zm:4ûÐìôÖkþ.ˆ=3v¸»ß„‚‡öìrÿ_YOY(t&”u†Oõ¾»9wó€å”8 f3c\$|qÓÂ'>>ê r1˜ÉâdhjNú¶ò úêì«Ý™Ý·~r+ÁöÍp»ŠÛ‚W»Ä]X/¿»ü»ÕÒ¯gtœœÄi¬àò`63F¬+ÕOKÓ¾t¸oNùþüû÷¹ÿÂèÊ•‚€`Æ‘}¦™%o—÷¤æ$VÊÕo…F&Ý·¾HWfž¥›¤& P…ÂÙá•æÿ3ûj|™¿Ê/m˜@yhBœFòn€w6±1‹›ury"°íúöÊ¥•K·/•x$¡)-],y J[…;áÃ2/_xyôq$¡36‘­›n]’¾dˆsÄ4‰55v¼°qþŸOV_íâân×ßÞ›ŸPðçKÓCë„D°<þxåðªBÓÐn‚ßsÚ5¸—]ð¨(Ã_ë¯d+ Y6mæÛ[ׄ^ •qeSjMYü`1]#ÕfܼøþŠnŽz{Q’2óLÙn»°Ö’5<Ëu‹+Ë“õ)f•4= úóš&.“±jqË µR¯¤æ¼õWµ$µÄ°4‹ŸeëŒP­×5»ÍŽyŽâ€Á>ƒ—?ZN7Ëj œÀgÜœÏS÷ÞØ¯-UyˆÇùh|Xø›übŠ5åLÈñøÕƒéʤkêc€ËDÖöj¾-é A0”4x(±éªF"оõqÊrRmU}Sû›+9WžÒÊ«!Æœ[Š˜]w÷KIêÄ*H­UúÂLûõé¢þ"QOÑ'Z˜Uz§›˜¿gP» D¥½}]IwÌsñsÛgL%WOõlÙÍB„.8t YL·Ìê‡U¶(K¡ÈÁ³xLjv=³N¶‹­UüæxV„eÎtZåÄmÂ¥«éã!ÌÏ-@$¿…‹ê—ÖO$ÚØõÎC®÷¹ž¿<Dƒyõçͽ7—®‘j†»Šô?Û~ ÛÀa ”dà©ä©¿ÆŸ[½‡<u˜ü‡Ox×”ªî¸¢™‡laÇÐ!‡.©Moñüц;4ŸnDŒÛ&’gMŸ¥ôJ±7ÙϬ;sÞ½ytã¬fÈ×/²tNíeÁNvTåAÁSÀìlxmvYòD½E’aºš>6Æú¶‰!øZ‹(@ðDlk‰V¢õ<è™>4}cD¦632#’®‘j£ëùM+i—n>M(É€²‚&´(”<—*¤Aƒ gzCLèÓ-RFÄûyÜ­_ñµk7‹ž qGßoû­uz¿1œ‚ÏŒ¡¾]ùßÚ¾ì\¾š¬Ú‘UÚ>Ýá×ëKBV½Z—ÕÑf©Ÿ<‰PøÜDDP›´-Æw¿Ê˜&ƒš7Ô >sæUd‡ly³+Šû|Æ^ÙÁs|ÙÇs笮%[3Z†ªµ8÷Ñ©§,ÅÊ'¶I2—.Qö¼‰Y`t`狹Ͽôþ}qçé!Y튢uë5WKˆ›±cÖˆU›&^ovì̆x4ÉT’Ù˜òk1/j4#ñÌ™×ÒjÛv­mnó¼~G°©}ÿæ{aµÅi\ñLOÌ‘U™îl€Ê÷þF9¼‹ éÓç½~¿dÉ’Å‹?úlµžx›®ÛŽß€¢×ôiýÆc×Âྫྷl¢áöµ6Éåóò¶÷c{nö´û1k踾›‹‡.e.eÙä]ko?º}{5U­ýÊU©—%ýÛo¿}ô¹:'›{fò½R¹£"R&¯×²yWÄ›¯Na÷/K”ÇB¶Ö‚-YÚÀˆØ©r~ØÞ“(ª>ÉüÍ»­…øÙ¥œâÇŠ;nÇó¥Ó:°:Ø&i²ÆÉª7Eõs²sËUÜ“_;ïU ˆ ¤IæS'™§,líµGU‘ÊJñ$Éàø1Ü&ˆcºÅ_оıcŽëdºÖf}ýdô³qK•܇ ™OÃW:C‡¿è“ú˽¸7.¹wGàø<¢$cLdNÊd)Ya§Â¼!ïØ @ãÓG® ?]a*'Ç1ŸéÂêRY"k.kr—åú÷EÄ]M6©Çz WèÚÁ=O™Oá6wKO"¯ÎƧ›…Eå9t¥|Ò(±»Jóy¹½à®Tåá¶é¶†0CDGE *Z¼Þ2›¿ØñØ'ÆõúöDÔŒ7lt/‚‹Te gáéÓÓíoØOz<)Î"²èæúIÃŒƒu%7Åu?f…ÙК»èÝ0Ö«<0rMi#Ò¼÷y³ýØt5Ù®\F˜Œ{'Û]‰n¡·¨ê;¹Å¸ K¶×²—QEãü2ÏÑùï£àa À *úˆþ¼þìçlái¡j† T‹à>¥›v²ß3´ó€Ý§²K^sÎ[ÔÕm Ìñ”EhIŸš¼/xXþ°Ý–ÝÀèFûéb²Pçp|2ó Pi¹h¾Ø„ÙD ˪vX™â¼ÀYØAH×%èãÌËÔ[ê[ú5¥DO}§´oÒFîÉÖ±ÏbgéùTÀ4™ì Yj*yd˜ÍgUh¡èlâ S•¥sŒ×534s\ïXøU!f_MÞYŸ˜*ëì5½Mý~»NêÍ–ŠH@@ 4$ŒnF²ÿ4rõH{£ý1ì݆?Q®¹UbyÎ?Ònî <)Ì•XHAÓÕ­¢Oçü“³)D ,¥«Œ²G†Æz /§» (2Ò@íÐÌ©™Ë7,?žÏ$2éJ©ú ¹%ðÆ ¡J… (yt¼|=7íŽQtë3h0…¹úM÷[^RÍh;jõŒÕ¦´?=3Ó¬ ƒìÆþz¨ä"¸h‘ •{µÁÚÜ!¹Ë×-¿e¹õN·äOŽkœ¯^¿Ÿu–ÇËî ÷¦6cWÍW=OW¸ÜÛ¤ôW)d†JÇ»ÓUF-BD¬!Ó¾´ÇQÓQ‚Š]½Hè}ôX웣߄›ÃM¸ÖhÌÖëSÈ#Ž›è ª‚ #ÉËKhÑ"£^½ÜÀÀ¸Úu§y4Pœ]ØZ (Û÷ñ©ùi ^ÒëD/ò¼tpiu*ðOrÜlÇgaiEêïVİ»5h}Pl†-iV‚5À¾ÿíû]–]:S]v¶4%…<2L4×Tu®IªSo²w`†ÿùÙù]™€Jß»`9a>ÑŸÝ¿ì£(J$¸'ÈžK ]k”c˜‡ >ß‹Eo¢7)ä™&Ü&^iòýºÍ&“ ÇQòXX¥×Ó;’V!0ÌfYZZZÆ(§|ÿþ\3ì%ä; }*$¯R•±ƒºƒ#T#ÄÅ…_V©3Ÿ¶ a3££{n»sWõª‡°‡àa(¢6oÊžÊZÆZýn7Ù_²ž¯*(ëúDEISi®©Ú\“g,vÿ- éØ:ÎD!×€æ7ØÍñ#Ï9Éé©b¦Ð³ª x¨»ÀœßíwÓï(@©ÊFjç›C[¤™5ñB“@$×wphe4æ*ŒÆlºšªDGG”]>…?ºÄ’ 2UüèáŒQò*%¹ºoºZо«ûª¾Va’êÆ*ŸªùA}¤  ç—f‡°ûà>…Fkן÷‚kìQËPËgw¿ÞbÙ®$¬¾­­]£‘nçUŠkœ9Ï1¯»E¨…\S†+æ+ž°§âãpÔYÈÌŸO×T•EOgRØíŠùºWÚ8iac˜¾ìÜàa¨íÚ=Cí2x¡uô¤¦ñð˜XZú®#Š{M,–ÒÇ'èlLQrÖŽv;&Á“X€E2Œ÷Çdu™u«B~HͽϸoLìqº8r> ·7øTºàF#Ê+ïòNpwï÷Ùõž²®gtãÀcíëÀ9#6£?'Ét5Q‚;)w"ƒ"§¦p—Úœ0÷3×…­ç<H4±±T&ÿÁSg@`¼+ó»§Æ‚‘ Ò þÒ˪PØÔ–7KöŸ¦y‹Ò¿(µ`;ˆ_)ô›ž’¦°Ò)LÝÄt[ÍXÝCÝ£¹¤9ä¬÷çÈh4ÖÃýööS|«ÀYø'ÔÖ>‰¤?^ê‡ùr=£”Œ/îg(4D›£­]i=ã[+ý£¢žˆÑSP—?d³e+…óij,É<0g–œþýV `.Õª8çÝâíqÜÓ@Ò „Rí[zYÒp¥†É‘º&¹²Ž(-ÀèN‚“õM>¿¾íûO“Üùi#q`·]SæßÓöÈ̤’k¨J]TË‹& ŠÔا15½%æ›´¢%´‡ô‡æo›ŸûM®ÅÞòɵµªŸôÇK]+“ /-1ê.êygæÔÔòÈxLöW•ntvdÕ†ëº•Ì ·„߯oÓ$c3ÜÀo3„ÿ=ONÍ„ (ïÛç2g—_.^ZzYÒÖ!§ˆ „™<™îGJÝ• —3·)ÐΖ·ÁmPüYÊÈåÉòhc;MÇÐq~Ýr’{pz¯ÄÖª›úÎÈ`_¹""OÈcjª­Û<…©—rì6˜¶Ž¼>¦c·u­ ùVãñ†XûL¼!•»ìµ»ÜéâØÖÑègüDÛZ•Múc§na³U~~wï–kû ]í} o3O^ý«J·8œºSkM`}›:ŠG^À.Ð$c\e>?g¼¼éÄ^§¾lO2¤”á~Ö'$k%ËÆ,%%€Õ»¥WNÚ*húô!6ïEøû[Óýx©×Àm$È~§Ñë 8øÆì`îq^Þ6`u¾M£¹cË7ŸÖaÞj/‰KðjK´\iY™F¤Ù,uOOSûöÖ]<È£­×S•z2H^¦7ñQmÃææ—îÔjïÙøÆQ4V¯?DžG}RkŽSÇ +¦n­þ¤ÛZÕLÚ©úù•º¸ø^½êöà,6V–ë«TŽ‚0ô,ø«J·ɨK~™ÒýInQ˜vúuüú~l?0šd>È÷ËâÈuíÛü‰÷E[eÁÛ“ A$â¸u#ò(Ù•»¯Ó>{±}+N«jßÒ+' ‡P`}…šzW†JÍkFžGƒè?ÁÆR¦2zHa ŽËn6¹Á²! ²eê¾¾Tº9±qꉇ[ð-K,©ç]¯Øî)…7^ù­†tOÁž¯o|­¨­m­Ê&ý±S'5MJûö™ g±Ècü—-æžøa¿f QòçJ·1`4æ/Þ©î`óœ"¢h ºF44É|pJq7±;Oß±v‡¹‹¹”óØÆ7Ë0Eö‰‰ä6ÞçEóòró~kðÛᄚÓÒË’†IuC!>jê#åÌ<á]úù pB Þìët©ºq“ñÙw® Ïsç0æœÇÎï¶ì¶Ù4a*¹Æf©“ݦóÄù߈ßþwâÁxpaóB½þ …7NvÙ+ÎÏÄŸñÏö÷îém³…†¶ôjL2àÅØS©»»ÊÏ<¢<–¤¤ïõ¾;5;ˬ•+ÝÆ0Ÿ9±áIÜÝ™øçø—pàRti‘A“Ì©×ëŒÀ¸úØj†#£¨I‘IÆ>!ÁóÒ%¾RYî«ú÷Î;3NZ8T0TŠHkNK/Kºš;®eÁ`’ó~,ÀÜâwð{•ÊS=¹ :K\‘ýæ30¯DW–mcIã°90n'¶ß#î­z´ªÎ£:YòªNÞT‰ª³â³C¼‡à<œ®©êöàyé ôçÌçªB~‚Œ^2ö¦tCÐg2d-ºö"v‘*]Õ i m9¾<ÎN˜-»/Ë–iã jF PdtèÛ¸±ªví¼ºMôw>Û2r·=†tâvª5Rý=ñÛ1 ‰®Ì„̰$"õxV¥òÆE ¯½y'òMqjd"cb ¸Å2tÙ5üM7ï P¬ÀW€`±rq½õR'¥~ÔÑÿ P>ô3öóPÓPL@×TµDiÿÒe–Eè"Ò±ôªŸö¬ >ck¦¡>:Ÿ9ÿ~g½e})QJ×Ôûàqc3¾y(4´¯¡¯×¯ŒQϦû¯!&“]RRN‹n¹·»v'ýZ;vEL†ÉL šê o.°%@1Hat6V•ö¦‡Ï<<#áIZyµ¢kªº‚`ð`xÖ‘Y›õ›D•xö†¸XýâÊ1Ê I2Þ÷Ë’‡øCº²Þz ßAì¸@\˜Ϫ Õõ8àQÒ DdëKøyyz™ÌòÒãÿ*ŸH!–v]:^4gçÉÏϯUè!÷ÙLŒ(L5 NªTÞ|xÈ7î¦týB¾3ÓysA$¹Ø²x2 ܪò> Ž)dÀU«ãó´…Ã$5{¿ËìRt—Ò’k!¸ ¨‘“¡Px@M¨gÂ3]€‹ûw—®°y•ÙLª?T§:ŸZ&[F¿ª7 A†f·šÝN¾½;h÷dîdê•4&ypW¤è®šÛ;°ú"}kõÃ-áwð;C!è5pâÔ—¬Óù6üÐpÄW"]›$ž¡Ç Ñ ä`Ÿd”l5b¦ý]{n67cA†í³dõUÍç—+ô(–žÿvC+ 9»9ÊÎ0h MuF?C^Ú#É’wÜ®jy«/bôvb¯OÓ0p¤Ï ÆŒëØõèŠLâÕ¸,ûêŠÈp¼Ýô{½årÏf5\ͱZ¶pál æuqx•»ÌxÏ…ç’jÆá–?_¥¦Îðç/o¿|ŒÝ1$¦ßÕª!ª™ûg¦ëÓ¯ WªB~¸4Í‹©4Åi­.ý ¿¥Ì¥rH¾]| »Ty˜{X°•d1h)S Ž]3ƒÞHÛÀý,oøgÐg¤ša³\»¦MÇ™Œh[}U묮Y-±6¾ðt—sXÆ Ç’1d|Å8-hªí­ŽsáqòFüJüQŠªZöÈnS Ÿ±9Ã`yA,Ç<æ¼6H›µ–µ°ö)¼êRÁg=Üj8Ñ@òd5œ»™Ø͸ÀÈù²7èI*BN.Çõˆk•š:#ŠmwÚ^K\««ý†¨ À9¸z¤zíOk3þ–ˆ%V…,ÉXð$ÞÖLC¾ÉÚ.X€Õé7‡9ç~oº,‘H¤kíí¶iæôd+¼È ™s1í o¼ðÜíYб@ï¡§$W:¹œ§T2ŒÆýi¥B~Á]ƾYâY|ˆÏ0Èx“-hª9¸0˜.ó" ÛmÅ÷VÁ‰·C\8lìÊ2/ßÖ­áÖË™ËɬÎ5ÏÄ"M |-¢Þøð&[(e×p¢ÑCz¹wä9Æêؼ ‚äÙƒœ|aÀfØg«O•š:ÃIæ<{úìQ½GÃÃè×CÍ®žÎAê0çæœúEx•èDð‘ÁΜuézVN€ÎówÌï:#wXvl´lÌ!r芫Œ<·ŽXw†83ÿøânÛßÑj»’]’A(¿ eSU06»8 Àrñú£Ü¥ã¶‚> R͸޺UH^¥Mõ‡”MävQ˜Ñì<Ód²W(œÒÒÈ#ÃLýœð²qn¥?©|åDøÃ‘á ˜ r‰Ü9èœ Ø °Ä$? lÑ©Á,ƒô2qy!¾ð®ÖÐË´d³¼Ë7æéÆbP>uÇMz}–V›LÉsFƒØK¬ºjŠp ªé´¦¡`DA‡È=4=ÖÖQ¸me´´c61~i .ë;5…›®d® „W[Vï¶ì.$ éº+%ˆ«ñÕõ@½ùð|?à•g¼ÏbL³‡¹ ®üŒ’yR‰¹B´"Ú.sI<µ¹ÍÔ¡óžBîˆçÛÁvt«¹‚FTP qp 8ì¹ÌÞóÍÂ‰È ,ëf¤¦!ãE*U‘‹ å™ 0†¸p6gèçûò…Œ×úFCƒ„öb¾œ+_TwÑwµ¿‹ÌŠÜ²{Æý<|îõy¨ChµéK©Qõ‰¬¿¦ÿš¬Ní7úN;±·üØ«Á«å®bæB1“<ñÜí |ôN1•l¶´BÍïóó¶~¹uÇ’C^åñÜiÆ©™°H,C ü·ùÏù~Îãò ÔÑò\Ù1ᩞ<’df°^ë8ÕõîÀÞ~ô‹m«Ç“1wUw÷¤ìitªQ;y»Ï¼>ë ïÀyùœêPèGÒ$CžO ˜Þ"üöu'gîkÿ±Æöë»1"Áûƒ²FgY„ óŒâÄš¤dØmïTÑÔfݾj´ ašLækôE2· û¿Um_G_2†Œg«ÊÒ˜f¦ø´ôT¦¦G Ùª|)çvjdDA¯õÁl˜=Ðs ²õÙSN¾=YgÑõpëÑÛ½wsisúðó†!N”‘ÜS|>áåEðx^`Æ 9g¾šw•$Љþ»ºveÂVÕrfσ»…oI‘ó›3ç™(iÕs ë ÇRž·t½…ÈÔlœ<{w”3ì¬FJÈ«4ÝÔd¨Û¨E7EÁgƒgtŸ±Z¿zo–âGy®|xÈ—Ý/½ ™7:N$Cž7qlBu¨úŒ?~Nø™ä™NÎúzô sûÊÆ$Sl.>­8ýkÚ¯ÏKž÷rïµ¾ñú¦Ò¦]ÁÈo⊹|»zo:Ëýì¥âšKëPìÆ}gzn‘ÓÏŸ z7f7¦[VM4(›ÍÕ”»©d‰f$|µÉeÓ ý {ž=Ë`PK«MUlš°NìÝ«4…¸¡áøfQåoºñÜfמM†u‰¬óÍ'{íœÚµ•·%îüc@îÝC<à•A~ ¨ ¾~kÔˆ 䟧kÓÏ眿{áVÁ­PûÐA^ƒ~jú“ˆùÚm2ƒìàiÅ£_ãôª}ƒËÎw‡¤3)õ:ÃU¾0,á?&ò:ooÊiÚ”Ù”ŒÁ0=ƒ!£é¦†#o\žç|ÏF!¥×ë×ÏæÍö@<(Ï•$È´0<`5œ8 cü-Éq´ßh2 "³#·%n›t{Ùqj/oO†`qpÕ'™Ø’Øs9çHžyZò´ƒ¼Ãxÿñ]\»üy°Þ©¥ÈyªÏý1©•y†yLî” º>!YDi}Ý-Ò\ellͫݓדnS´ ¤dqMH`šLè‹•úNNCùÉç§ï )ÂÂÂìàઓU‡†ãÒ¿ ؉$wj‡¾$¯„éÒaßú“@Qà¬Z³È¥Ëº’wåjÞÕ¥O–òü6NmÈ>)Åïf¹!‰NLD‡Ï»çÜÊj’…´ZFD„õ…ýNtC"E“rWu÷ŽêÎMåÍRsi˜KØï!;[ì|CÇTÀ¥™îojT‰kJÛòŒëËlG±ŸG¦V?7[ k’ |·_eLþgìÏ^¨ƒÉT צ馆Ãâh)Pè´Ý)tQ(ÊAWéWÍãÏsƒÝ('™GãÒg…la$õhoù7$#åHÇø!C±¹8*?êrÞeRܘ0S[§¶‘$SÇ® fU’Á,®4îvÁm’g¢•ÑL˜ÙÙ¥ó·µ¾m)kù7¶¥&]·>|Ôh×+žÑÝ·:ëò`@†¨¡†ÂÊ*6[Ö–lö '‹ÇÓ Š4/h…ÅÊ÷ööyø0µAôÅÎ^µë×.|˜»Ëõ'¹ï0Êg¿É ÷ƦÝé÷;3Å—‡Dóp\º³f¤0ûûºóÝGúŽ$©È&}=ÿúµükëãÖçrëÙÕk`߀”>~"¿Q€#Ûñ³éõÈýûèÈ‘ÄËÝC¬ŠD °ôéÃÜ· ù7fa#fLP'Ä—Æ“áyÉs’b„La™5{œß¸ÚvµÿÍìŸÊ\C~lî« Ô?Ë¥¼¦`˜-øO¼n´Ëåp §r·Cª™¼¼³K)=#˜‰’N%Â[BÉIÓÎMq€¯Ð­˜ÏŸï »V…ŽÓäpÿƒŒä`ãß“ŒË®·{o2€Ö(eÔƒÂ{Sö’•qH=ûzäÑ_äO’Œ3×Ù6$£Eµ$ÉÄ–Æ&”&Ä”ÄÜ/¼ïÂu!¦µSëïjç+ôý—eBê’a*x¦í/>éTpg*W6ÌÉÙ&ä-vX˜nM´ )GÙÚì ›75f.—e0LU!Ë÷Mî·‡Ÿª6©Ö)Ôp“Hû<Ülò÷&¤’ìóŸ~NÞI+d(7P¡êÇE="õľÔ}ÉšdœÀý„~n|7’tÈ çÊ]y®öl{S$dÅ,ëÆCpZîéY™h*è÷ð€ÒÓ‰ëÿ7ãfòÿ«ÍêR´4ߘŸ«ÏUèe!C—‘oÈ' …d·I©´65ÝäÄyÿÜe\Ó,Ü—Á¨ÍŸšZEjêªÆåûŽ‘{kšy¸KÖa½>[©¼äéI;¦QÞó'ä»ï® Õ6wlNjš•º•óøó\`Š"§[cÒG†û¿Éðx‘a„ÏòÜ€H’!Ùo9žyœTdŒ•dxn.<RaÈyròœÔCd—†ä’dHšú—$cÂM$ÃXyU+J’[²õÙ õH’ŒÊ¨ ‰‚‚ÅÁS§„:„þ›Û?òŒÞÁT2–âá~ÈÛ«f&l—­¢ýsþ¥ yaÌ{wÔ¯¿ø=ÿÃ{B.Ÿø®¿E¡z~^*רÅ8‚Âv>ãò òÛ]A“‡º¯ù¸Iÿw…ä;[ÅÂàö›Ê\@>Hzÿæ œÉPñ±”_š!ÏȳËS‰U v 7Ä7”vÊR^©Ž«Ó³õž†oä ,&†à›¾-·r%#ùìòÑeŽùñ! 3€0€sÆ8`€J€EòâÐVÀìàŽZWÀéwR ÖCÃ|ëä’SûKÝZج"x¼!ué~aZ¤ú'àrg¥]´ gfþÏÝ}¦J5S.ãæ¶úƒ¤nû¶V‘"…Íœr’ù›Jøm¿<—]vªïý;! V“UÚ‹íκ3BÞšôG˜k ’qŽa Œ eIÉpÊPJ”ùvù)’”Û’Û䉚§&IFÇÑ‘'$ÉðL¶…ñW$C(é¡À¨uÛz+½¼ ‹à%ÃØ´@ÛÔá1€—çBñ"¼#ÉTæ™ô¾NRyKÛT ¿ÅSÑ΢ïŸZî®–F‹>¶iò6f˜’4£OŸ÷úý’%K/^LÑ÷ß¹óûl’YÙå¸ÇëšÑµ­ÔgtƒÑÿËóç¹dÒûöí³Ám–<å7Úå{g\ yNžÜ“ØiØÙ³“?FZB $ƒ·Öh_Eš³Z)Ö«ã]­ãýmÛþp-z!L”Û<ƒ²³Š…ÂB¡# g1ð¿±ù¿ï…Î:þK?V»z§ÜN¶îC^o›ûÁcÇP[¬!‰Fôèñöåš±ùE£Ãw#ž{w<ÔÞÅúfš5k_PT*…ÇŽ]Ã`‘ç©SïÛZßå)n¶OºêLïÞؽ=Ñ]–м8°Hå0Ê¡7Ñ8ùövÇ?:ýÑÜ©yå¯8‘IŸ;wη™uÜà8Ë:¤âû£CÊÌBY£î‘‘ã>FZLÀt..%. ä5’qÔŠô¥q®Ö¸ŽWÞ¼½"ÊåYY¥Ba©HŽàƒø’Ѽï…öí×_¹òuÇŽ·@À)YÜ ëLÿ€õX¢Cœkó^8ÞëÏmmýÓÍçr¶mhüëÔf]ÍtïnÓ :^%·ËzÎd2ßK ÒFªÊðêëµO¿oÉÝ%G’T‘,•©RÄHêêÈ@žsnÛt……±P¶<(“ê¸"³È ñ‘˜$ä dZN`†1]xÞߪ™FާUÄLÌ"E Èò£ê!•^1 õÆžûÂq÷-ÛZÿÜÞ¥}E|LÌñaÃöÁ0B·,¯u¤çÏœ¹9hž•͇ú ÝÕvW¿óýÎd¡$?¤š)1î-a2'äGÛ“Œ‰% Êǵ¡Ih%³DŒŠÉà¤ãåYp– cÿ­šù°ª™õ²Ä¯•¤ˆ!yB~$#m= {ÞYÚ]°jj³¶tÛ¡ÍCã9wÞÞ9ûÚìȬÈ*¥fÊbÊ4Mà†V®M·h03i2Yhj*}¥ß9fsýÔÔ4''òªm²A’lŸsmÊÔLY åšÅð¾û÷–:nZßbu¯þñRi@aaêâÅòÓ§çÓÍŠÆàÖç:ŒwÈšZ>-£«{׈.c®Ž9|€B5SS¦iH’áäûÚ2'&#U*m”žÎ©D2l³¹nrrº\n~¿¾û{/f»W¨™2P¥i¶ÆnukžjÆÞACèVóÏÝ]ºþÔ{í7´ß8pãæn7Ì…J'åp*¯²š©Ð4 Ó¥¢ëN*g›î¦I òØ">^.‹ðW(¸f³ƒFCF¦;9Ù,h|qD—ëB_[1Q¦iˆ$6¥ÀyÝ„cGŸ"?¬iöýp¿á•ãgÏ~N7&çùÎq ãJ~/‘ ”›Êš^êy©û™î9ºœYõfÙNF<‡+«™ M“`‘J®:ç9¥Ø²LReVwM­åw"ü²³I’±/-MwvÎËm™ aþkj敦J4Í1ÛdcíÓµžmÓ%â°è&C šw’"¸Ëæ.ëF¯Ë»¯Ã¾6ò6TåDÔ·à­ñ.Í|ž–¬¶}~Hù¢ppÊ}-‰ —ïîn3ÛLÖZì¼/¸4â¼—¡Ýox«©ž$™+l_,¤¦É¶·w"I&ÕJ2 $ÉØÐ6S†Ò†5ïøçx«Ä±•šYöpÙþ¤ýî¥s»6¯ßÌSN·—õà­`°º,è²j÷ªWGÜ.¸MHH£ö¬M*›{{«™ª†£±=ÿbJ­±ßÕŸA?4Þüæ|»AvÙ3²+bÜøn×{_7ZŒNv(Æó=6Œ õ:æ÷²õa^Ùw¶ÜÍÎNG:úOs«îTW’I—Ësl¯fªæÝ÷[Êoí6 ¸ýÜ0zZм7„Ý„aíÃVœ\1øòà˹—é¡QQ™1âzø|u‹%tiÐxg¸üࢋ֩ϾraÇcð…êêÞuVa“9]ØA<†Ø,«÷Õ]2Aó¼ø,jàåÊ2–ÄXº« p€MŠšt.ëÜú†G£3÷ ë‚À],´ ùΕ¶ÅÚny¸etÔèãÇé¡Q†ûʘ.ç:ösµ£Ã*º4h¼óam™“31Í«± RÁ, ]8V¸¾û™î ìë~>qNœiz#«õ¢g2yì—_«Ã„ž ´ ©&0ÆåŽ34§º\˜òëÝMýÛyØ éb¡Í\¶»] :¨?8óÞ̽É{é"¡q¿àa»È­„ãöXF—÷‡°£PÔI”37çøæœþWz])t¾Ù>ôøÜ°úVm‹©Æ(ÂŠæ¨æ8À®‘]#çŸ|ØÊÇeP}ºXhAóA H»v—.–FÈ"V=]µ1v#]&5QyQOv À&œ´”.  ®«]K"J´QÚ7âƒ%Áœ7p`îNø ”˜‚,Eõ¦W @þÜ7m4rw¢ ç@û¡ù·pœáh|l4Í2þùôôÛÓçæ¶ Õ¦‹¥&À,áæðl,d|³çó~!Nöt™ÐøpßàW7În©l¬Ÿ!ø³N%ø«ÀzŠ×Sû®xÞ°ÚÖ {A€¶Í|ÂÐúuÅëJñÒ5ŽkëŒï#Å$˜Õ¡!]8ïÚBó¯—m.ƇFí6í–[Úq†·;Ó.¤ÒS½¡&Ô+Œ+PÂ2§õunß=Ø“. G>Õ`eŒÍ ^_¸”uOÞ^FBPQÿµòµ×t×¾Ëÿ.Ï’GÚ'Š,KÖÌ‚™¤ŽYAþ½P3 ¥¦SÙêéAaˆÖ©´ ±Aañ¬„U«Uú(}þÌŸšÿô3ñóp‡.™jK:xÖ÷Æïk#u€â 6·¯;Ýs¢ñáÜÚδ§T‹XòVæUV3¾?:°k½š[ãÊt]#_Ó‚Ûâ뼯÷•ì3fºè>-D¢æªæ š$žÄ€¬ã$z þc¬òË G¶€.Ÿw=äôßÀôbº†»fÌF– ;ºv™ÍØBlIɃ¡ÁL@ÏáªV¸j¹ú;úûÖˆeÝbÀ§Ë„ÆGEëaÞQä»mBANJ¾Ý;¸QÒÞØ9² €úŠú¶â· /Ÿ3~¢Ýļ6É#!Uå ,„†/Šõp/~1%YXœW/¯P€â:¾ø™—{ BÛÞaØVº-Áœ°Ôa©Ó§"~k¢ª=·©#ÇéBz£]ÿü|‡Ž+Sp=î\æCóÀ¸’ »T´ù·úÎϦŸ/Z.Îgχ5 ®š¾öÐKIhØFÓÀÛ¥F£%¦_bîÍTlbÁŸÕLÇ9Žsf:Ìü¥ä—ùÊù™hæGa`Z3ã‰_ÐùÀl¦!4UUÙ®™m­&“Llì;ZöLLhÃõÇÛâ•×ó4J#ú7_F ¤¯¨o¸K¸O˶½x»W[,óÎìÒb™Ôú¶fˆaK‰«Î ¸C‘µ›ç€ÁÁ(,v_ß^T%MÁoÄ(,йª¹Ñ¦„¹öë6ìõ•²ã©Ut2Ö±öÞAbÎX‡Ÿƒ8öGôi?í ÿL•нÃðÿþ«ÍoDZåˆÚüž7'%Q+)(í‹§½û"‚m ìtÎI'*‹qÎó ylÀþø!ÄýýÏùüúÞ¸O S÷öîL ©õW— ˆ‚ÿ™þwÛr{gQc¤±…ëS´mØ%¬•zJ \3ÛZM&™ääÿü“¨iØÄb§ãý’/÷»º$ñ®æª¿¾9üZÊŠ'9Ç3ŠãKâ-}y,%µÕe«…°ŒSŒ;Pú‹×|¤ûòÈNvfÉî;rÊÌ67Ýì}3;ÅÄz›„:ÈêxÔϯ…ÅîáÑ‘:AãWqNVÄošßæ¨æ´å¶Ýë±¼1ß‘T,L°Yå¬òkZ z»‹¥šÚr?õ§ýŸ)N›ß(Lä-‘âÆ­oôˆ²Ó BBlÍ2e’Š’ÔI)Sfž9žëímñ÷GßáŸ0ݘiãӼýf'˜­¾È™€9 ö<ßO샠A<Àû³”)3Ï89MÐékµwm,eÊÌ3]»nIM=—˜hÓ7I)SfžéÜù§´´óII6”2µÙìä‰H4ÂdŠ1™U6Ì\´\<ŽïÁèÑ…ÙÖÆ¶+CgÇ„û:s?T;/3Ïœ:ÅðõŃ‚ðÒÖ¨mæ”§gíqŸ8‘©ÿ«á„25ƒl“¶æ]|bÔLõgòÜÛÁyz4¶ÄWb¸ (ÍÑ£>Bv°„"áK8vìW}3;Än¢xM/ë°ö‡1ŠMy}ˆÛKÒøÊöÊJrö7Ü+nImïrÝÞÅj+ÂJ‡@µìûìÄèÕ+<9ùL\ܶ,vOÏ0ŸžäIûöë32.¦¦ž´¥”)3Ïàx/JNB#6•n’"ÒuÒuŽˆ#¿ûfú1#Îd0¿mêF~|^b<Ÿ£^ßÄÍ`,¹ƒs¿Ÿ%˜Ú§¤¸2óÌéÓL’â±·} ƒ~=ƒ÷ÜQ9^µ`>@ô2bÓ@÷òÜu<¨ïðïoÜÚ úP1@–8ÈP’:)bÈ@ª™Î ïó4š¼ny¾[|ã¿‹ÇYåo©Z Ö"hÑ1âØRbéçÐçõÁkÆRÄT3ùùÛm㤈!©fΞL…Iì<H5sþü—6Nú…ˆ‰!ÕŒZ½¯r|‘n ·nnÌY(‡äe‘§óYFËÂчšL¶p2j¦GKjkÔ6ó*:Aª™Þ½ÿí̈Êj¦,†< Oˆ·.t…î-™r³ƒ‹•øžXj$õÍ9EÉúçF>±ãŠ9¤Ä!…‚¤ºóÀTdç(F‡cêcSs§6á5$äÁôxïÛÂ}2’œaÇîoyÍ0Pc@†"“ívýÔxRÍDF޳}±“"† ¤š¹råk'MŠ2jÆ Ù§Þmˆ'ךۺ⠣[xÂñ'¹…Ëïæïl&[«œ,µc!wŸªÝ=œàOùi/£8RÍtïþ—ÖèöȧîõÚÀte\âû¾nŸ6ð™ïpã ë¸7@mêïf˜yÊöJ^&Ïk¯Wê¸Ô ¿lÀ&¥L#Ðèâ—{àÞ`h°ˆ_³±ÙÖ0óQ˜zRÒqª’6™Vœ[€å,zöŒåL?f¿ŽŒŽNW—¢ç”ÆÅA"ü×5ÙØ0SuÚZM&™ÿ0Ï37ªØ¹’š)ƒ{K˜T3¦ç0hù*’ƒÀuíyd°ÈÖ™ãJ ñ%Æ3Y¥ùFÔ_Ä ‘pE7Bì$ãìÆ}.þü”æÔÜü¹>,Ÿî‚îMyMáw]‚XJKŒd‚ÝŠ²­I#ü³µ­#,!±1ž(†!ÌB;éÍ’ËÆ†™? ")I—D”qÍ>Íê:ì:›e›…°ðÍ—: ×wqÄÒÖ$4qä7ràá„å§"lv-V5xÚÿÂ0SÖû‡âð/|ß,}IØÂÿƒNíø 7Îð§trjS÷öþ0ÝåŒakåçåy]^[¹íüB OƒÓKˆ%aPX'ЩÂWN÷˜ÂOM=Oaêii¨4ÏËNžbO÷›÷Ë`ÙÎGȱâ #¶#Cû¯Ðžùáç»=˜šÙÖj2Éøùý‡/ÞúöIëÖ…N-ÿÚ0@~Ï"CgWk¯IgÁã^ŒLEfÅ­‰1HØŒ`17Ä®Ëq èîÞ‚_W`°’î ÓWu‚j½Ø©;-Gµ&©$ӄ󨬮~Σ]Ù•ư?Sï-[ĆÔ~c6jrò ‹=3ó’íM0'„«ÃÉ“Yv³Y•/™Qýöb˜+OrTÌ,Ò¡ B¬ûp`<ûZÈsµOûßQ\â} ÌW¿ëߺ2Åúô2…àÈÏé×ï€þ`ùÏë}1ÝzuǺëN”2º¨dÕ‹[ÿ˧ë}UÎ R'¦­ Ò»éÕµÔ•/‘ ¦èÓj~”8º, ¡t‰Q®8„*$ ‡³†×EêV¾¤µëS´CÜx~|º]ÐøTÁgÀÈ®¿£Õ$A€ ‰7±ÅÆ?Ò Å&w&ãëÎ¥FÙÕ'–…sSƒ¾sïÖˆÓpVLáðFÞ=ì˜yÅÅïg~îâÏ¥½.ý`{Õ{ãÍñ#E#[s[ÿy-ƒ[/üî–²ƒä|ÆgÕv.³ŸH65 ©;Œ6Ž¿t´o^F~‰CÖƒ°­«tÚ´®<³^ö%ð€i3üezhý+ykRÀ—­ÿ}"4q˜íÌ©R­“ifÇ›d¦7®Ê€l4)$&_WCƒÝ;]h6††ÐEÞÅîögöoÇhW6ù÷Uד›Ó´ %ÌVölº¬hT@ð°ÉÐÍ: ¨ÍX|©!®D›;Ö„™ùO¶0êõl—Z ¬aíkAL&çσŽû(•®%%³ÙÀbåH$©2ÓΙ€WÕ½¤¿Ô‹ßë+ÉW,ˆõW5ÑÚÛ‘ ‚øîANO;O~ù7Ç·ðª¡e—xß*nVÿߥë>«So/µrtÀG‚cÚ‘JŽ,æË(?†Ѓ4@ë«UôQš&Ọó–¡Ä0šÜ\n2é}@a—îÞ_Ÿù”YdZž÷ñãtgÒ]¤=¡?o9i<‡ªÕS°ò² •[jÚ­0$™9rÁ.<º¸hTWˆXH©€ € Þ7ßõnÇèþT÷>Y~R]i4÷kkÄœø Ve5Ó$5U¢Ó•}ä™L~ùùŽZí]Ÿ—šÊb9ÝgÚ—À¥´¹QáôbU9 ¯ð\r`Ó¶0d¹ÿmÈõ*äùäÅ\ŸVDFCPþÛB`w‹ ÈŽÐ÷+yÞ&;WbÂŒ~º§B`%S¡*;$GÅ7c'ÇÅ'Ù‘û‘ SƒkŽiÓŸkÍm½QºÑ±«|5} Æ\›¿ù«“' ]SœÂ¾®Ño^|ê7e6Æ‘ uov8þ*(€A—bf°¯l[³ðÖóN¥mëÜ-iACT­Uü ¾×¯”‰)àm‚PKв³Ñ5ñµÞÏw€Z »+p-»j²` ºÛóA¥Ì9˹‹–‹õz+ß; ÖªŠ+á÷b|°¯8]m>§Ï30-#iԜ˼Áµß($Ÿ÷ž¸`ʤ·Ó0>œ} ½|S¿÷VÖ¾)ÄŠæs8nf<4/³BÍT€Œñ)(Hr²zÅ€ ²´3$ˆ(ís‘ë0LoÝáߘ3†›uù,ÏË<ù]ÎÊd;"£' W p~…ÄíE e©º˜ä_KÍ‚ìTõ“Ò 5ÌÈKõ¯%dñ4Í’âÓ`ºQëpÝqÝñ3º3Í9Í×K×K‘·,‰'ÕLÀzY"PVÖ4÷/£C÷{>–OÓL¾+©óôë6ªQåŸ Œ5›gÞ̨U{qî1véúe÷_­i§ÍFæç™kœO9çöÌý«ï°»3èŸÞñ¹·Øà |{@=Ü·#æ–nœ…‘.Æ(eê#õsË ·ROóâÆjÐÈ<ÃP'ÆB—j‚8“qo¬eWöZ5™Õ¹€;Üj› è'˜)Ñ·™¢¿uKwóY­›Àè’ÁáÔeñB”<;ãá( Ê×m¹— h:™Ê=øù™µ÷¸ì2•“ °‘f®æL„’åʉ÷òíohkëêTP¸É§ÞDº„Àq˜/,1¬F`kÇñE‡’@xøÕÅxñIíÉsúsM8M~”þè„8ýÕ7ICª™Êš&5šh³Íåꄜ&­jÒ6Æ( ݽ =4 !!DÓ¦€ñJxdæÆH¾‹ÌNœú~Eøí©ã"¬Z¥ÝÿÓxL¸þb»›q‡µZÐPD "uRjЊ ½‡¾´îßy?„ –?6i{ \ÛHltD]5öí—òël§ ñý $”Ñ‹ÑXt(ú7R¦ ù&l}²ÆH€myД`]z4ª7?~’~a·©¶¤ÂÌd `¬ð¸ÊÔÝ•SXò ƒÆrì}ø=?m>~jtž ‰=½šý‹D¬p¬•íà§¶æ XÌ5¿ÅQ},[$7§Y ,@€UͼˆÆ‘ `9ÀÞ'÷  Ã,”K6°'µŠã“GíP G¸1µ‚^|zàÖ4îyA+18äCmŽ”f׿k¼ÛšÛzt‘ÿãO*kòcíM²ýÃÓûwä×(5> Š—z°ºqJOÇ&»²8óÿ¬kžF­k”¾Ÿ7n±”,þç»›™{[º>¸wÕ Ÿ2þõBãƒW¢M˜ê÷“_¬£Ó?˜[˜€šc­•ܵ“F."ް$-å  ôdŽÿHÕ€ˆÁb.X.¤â©mm~àüàýƒ‹I=f]Öô™¿ƒ#ëy¡~}œv[!B›ƒiTSÍêÝù¤ Éï¡È·’ƒ{¢£a¯«m¿:6+Ü€ ¸¬µ=|^¶GBSB{Þ“9p¯ÕN[4øÆVù>*^ûDÇNñR3óÍéó ¿4BÙ5}¤ü#À0ˆÐœ‡\/ÀIïi½†ŽÚfÕ‹M)¨@àæFñÙ™¾Á 1‡[ªlŸPP?ÄøÉ$«<2=:¦=–mÉîÁï±U¶õÏ®eþQÓ„¬•Z10qRQzÞ ;w^©™ deÁááA¬6ò;7nXm6¯cÑ´ž£v^–E±ùüo†ökËù·¶sZÐ|è¼uÙý³}òŸqÿ¹SRªÚÂFdÜ4`• Í¿6žÆlç\èÂüGè }u ½Ä8aŒ°iìiþ~þ8¶¦kƒ„ŒŽR+/×vàa™ÅáÑŠ†Fõ‡%>ÓEüçx/ÇŸ\_“ùˆè|îÓCph±)²Ñq•ÀÔ.ÉáÛKÞ.¥œ²ï¤ÛUž =çø&¢>Æ"¨\ é0àjÐ # œ  `ðü09¢D°?ñÀ›lÇ0R$õ„21B‡r A¦ÄÚÔJä¥BnÁÓYÖ×a1]‚$¹ÆÆ  ö [Qå)Æa@%¯ :¥xéý•súslˆÝ›ß» · ú·¯KX3 F¶5pŸ1¸fÄ‚€ör!£†Íуþ¼U&ŽCOŸ%7.ÿÎ › äb}6æ½Ü8ׯîˆ~µnúŸŠŒ4 …- y™<ï]ÞÉS’Á?Õ‰‹={[¹·ªm‰ÞRo“µ‘Ø(‚fP³F ‘Hè"}`y‚=¹a¹‹ÇÖ…ëŽg÷‡ÿƒW©Ã9zF Lf „ñL¥ƒ†­fhT#$oìZ¸Õ/ßä¸é9ì7áOo ÄŽbs.q,D× Ý:hë¥K,ŒÙï‰[‡x.L¼j%|~ª´b2,ô„ëŸF¨*ÔÌ kŠÆ—@.3ùQ]ËÃB¿çšÊ0Ö] 1°0VâÈ1C¸CA&@øZ" 1Às_`’`M6ÉYÊ?¯{ªÎÐh*Èz]Þu‹?DÜÈ.õ³Ýâ¢P¤=Ê>Ž KFÌ®<¤qÓÿ5AZÐ|DdÌößàïé’Óûµéý1é†M/¶z–l8 ÀÖà7r€¸;èÕê™o·OƒÓÀƒT6 @6¨é^RHÆIÀHs»ï»·DZŽcãAÿÈ/×r“’ÁƒQ\Ï~VÌÁ€Ž/Ž °öñaÞ=/y­Œ3†²¸^ÁÿßÞy€Eq´q|öözƒ£½wAì]cT4±ÆÄØb4úÅ$FMµ$v“XbObL¢Ñƒ‰]lˆDA¤wŽÎ×û}{" *¢€zïïÙgÙ›Ýwç½›Ù?S¥w+E†ÖÖë†#iQ£.Æ *íçj¶eŠ4ÞMîòµï×LÒƒ¥ IN‹qB²P )dQ»à¥¸ÞJ¯uÒj\4jµ¼·\ëªÕ[Ÿ¥øò]ow{^™IÄdàåÇ=½äp8H$"þjJ5¿ÛÞr¦X^ïžÿ^d?‘Âï©1.ñ!/¾|½@'³ Í™3ß ´P§¹YF|YÇO Ž}Nvê×ç-4ÏÁ«—lÈ™‘°"@î"uÕ‡»3¶?ü®w}ëô †0?äç‡ùiæ&ºyÕpu/ÚëüC°~úáææL¦+foÏŽ ø§æ:f}™fÕü:úñ~5ýÛ*Ӯ˖|àÅfS°>“Øà· ¼”˜Öj¨iêÕŒé#9LèÚyšÎE§ì¯”Ì•h˜š=5{ŽVÈZ£¼}Å4\HG"e:8[Óo}õ4IuãpŠ^'_ÀØ(m⽆å:ô±7Vüaù¨lÂì”]pZ|“ù΃iæ¥iˆ&5ãîM¡ýN£Ÿ5ö†QöQŠ6ˆtöÆ>%¥ÚÒUe«,I–[ù[™Ú ÿ¢¦×ÐuHí.².UÚg?N/ó²¬ä—]h¢ÑjmÅbªVK •ŽŠLnfœ¤"n™(<áé]ÑÓ×a…Èú_ÌÎÏȶH°ääÆSÄIçâAÞÅÝúT+…«øœWÓ_åmãé¹z“dѺi•Ý”ÄΦ¹£´4wð†j¦¡¦Ñ¤â(Jg¿=C×®X^*.¾¥,qSZ° TD£ §:ûÖDîÿ+—b‹>G1ûò³Æ{xûvóx&Aд:âN"íu[÷õ>Kn똺z5Óy§×õ©ÙO ±"PDac7õ—Œ× ¸g\Ï(ÉJG©#_ÊçËøV + =ûV²2÷òò*GI¥r ·“?¹ Ëòìí[Éc2ŠŒ/%¬b#Ž]%®>"Ÿ~…ýè:ú ¯ù'”³› ¡f:nw¹ùnaCMS–@‹üÑ5ÿœP ü2³Ò4~k­‘«( ùÇ /ÄU½TâÄZÿ{ ô¦¨RVT¬ËÍ&ŠÕ×î%”Çk±}ÿîêBÍÔži|½Wy¹{EQ€((®Ré/äÚÚæØÙ=6NBÍ ;Òý¿¡ñõ!¸^ïVZʯª¢©ÕDqTjmçà oÞ" :L'` òYçKp“u*êøîå·#nGXV[ÒôžçUÈxbe„å%×Ka#à ô–wúqŸÚ´d1JóP3µÿ‹SôãÆaW®\¿z¥³Æñx†þýQM†^ÕTüSjœÖÄÇMlë(ÕøZÍ €eÙ¥w2{l÷uYç“ÿiºd¨W3Ä©–ʼn#2!bˆ-R)¡JŒï~vÉm›ÛÄëŸ52©ƒµÒšª{KÒjÆA$ºèﯺ;s€kï)?ÄÏJÓè1½ˆ&*e– !¤Œ–¤%RAlþB[¹mË$¡c5ÓPÓT&Ò;ípÙ>&kxoü,ó£èIœš|¬\ÝYý@ÙA~asõæ…6 C顈Єòh¨?êÕLã*BÍ8ÔÔÄûú*ï t&œøÇÃt+n"Îz5£w.¬W3aéé að¬Äâ¾¾[XФ#†bjÅM^Z‘ý·r÷WzLIt“ÙJy’«š´Ni•<Å)7T>É`¬D·ê9¥úLõÓ¨ Ä ëû]ämì5ðm}‡wFƒöí-¹~L¢ª!!ãë)‡%*! ³)yPCó"išø™½¶ùZïpËêVñ”jæ8j±ù }‰cYQÊ*%ÄÍeÇËÕŒjº–n£°±RXâ†8à¨8O*¨Z­Gyy|5C epnxyu»sG`e¥¦´¤ªCN–W1ª*é•Õôê*z¡f8ŽÜÎQæVÆSñž‰gjâc‡í.kGeŒëý~óÂÔo&}~åö´ò5‡²uJò}¯ÿxyüÖê­+ìVxP›[óßPµcÈk»ÓȈìjŽ7È‚ÂáÙ£HV¤û¤ÏãÏ3ÕÙäE¹]¾a‘ C#¬Ä_#ô;‡Cµ î$+Aó"aÑQzqJVÏÞöɼøw3ž•šy†–áQãAl¨v4˜&&t¡2y™—/r‡«æ²†ØÔ®Ê¸§è*JlÅbcƒw#ÕB„Tq86 ¡iñ<:L'¦Š%T ±ÆcŠ„x*âál”6„Ìr’:u¨ì`¥´Â ­Ò£Å¤i·ºöåÈ´q d˜ ˜Ÿš1õNÖŒ{º©¼¹©zÓr»åÍW3 õǘ“ýˆã?žn¬fê 6»qBh"œ(@Šï›Ìæ^œØÉʆݧføUU÷ª› MI£ÉitŸcéÀè&àÒ]ÒÏûœOé™B×ÐÝjÜø*þ«•¯Zhj§Þ±G6(ÍóþÇhØÅÔL+QžXžÇËëhU×Ï7ædòW(ð“á2M ýwÂÁ[‘Îù„$CÏb erLÌSݺø)cxJNœ`´£i{ûÍ¿^`›£¤TâzÒþ2MÂÅSÙ¾³Ñý›WêÔn¦!V$U5¥ºšR‰(ÕˆY…,Šé˜ÈÉ:Òqމ´ìÚãÚÍ€ûPdTì6¯vý=ヂð ¸äÈîf £qé2ÉYN“kqm «FÄûvÝ-TQUUŽUŽŽEŽ!U!Ž•ŽÄ±S¥OÒÒ:˜- SÑT´å‰ïÓà†AŽ¡ÎVžòK?|¸=ÿhû¼Vo±³y»2‡aíjzH‹o\ÎñÛP‘>×Ö±s„Ê8oº]ç¡éssü¾EéZ[ÇHÏ2]ió-ÿq2ôV5šàwøð?éD%YOºLç'pš-)Í£[jÏrÝIHŠOóB#Χ‹!N9(rX ®Rßña–ìУ{ßûæõ­ÅôuPÒÓÓr©e©~•é®Õ·íË$Œ}^ä0Ozx7ÊûïP{I~-¡øó»{6~`MªÐmjø£ÓÕ·ïz½ÞŒ²yCŽyÆý Ó®^ðë{ܸ°LúŒeUhKÁ&SÒÓk«lH8ñqe. £M›¾ôô\õT‚&:ú©žuéÒ¥‹/nÇ/þ)Ÿ¿ÍLÇíÉán¬0ì´Õ"´vFy‡mωžÏIÂ¥i…²¢BQQ©¬$¶*e•é@kÐJ*ªt2 ß:À "µ(®ËÙ¸×3 ¸ÛYb•Ž Ù¢ŒEaQIT+š•ÃÚfmC·±¦÷¶ [Kªe»»];£‚ð6qÜ8Ïy~ÜþBX¯³¸½=næ…LJJJ‹c¨Ø_Yõµç9Bµ‘œE^^)^^èŽµŽ’Xàö†øÓ[o¼ëþö¾uÝ ÈÎŽŒ,{Dä‰Ëü6(p?ªÚ­9 úŽ6ê^§º[¢['KO¦'¦JÓé¤:N· XüÞá×}#HúÚæ±¼RŽ4.,WO¶§7Û;Ò&2Ê&*ó_9í#Ub6x›ìoRÌ”IÎõ•ªG!.‘¨0ÝŸ¼;‡f$0Ku˜Þ¹’7"=ÊuÀ½œ­YSEoIF¤Ì~©¶Ì²ÈwÀ½ü3NÉü6ÐÊ«œ5fª¨(œ¸@ßNŠF è2xp»­O|ü8Ë=ólãL¡žcùš¢Í¯¬~ϪÂÓ¹òžÁEžùï°¿E¨ `õ‡>  ±6 þµjz›Æ!D|$öOór}†°)lbóà4Uá,“¡D¯OClö}ål/1úùg4îÄd‚Ûàù$òS›&ÆpÑ´¥`‹Õî þ-ˆ™P3„ò@“hì3$»Ív7þ-'>&¢2ÛÁê9;ÿüG#Ñóð»øL&ìlœ}ß2F˜TÊØ»·æ±yúò,iV¦$󧜟f^~Ï­À½ów½?25˜–o}æµåök9³§¹™”ŠÂË‹”D3àoV›WžgžfåïïxI_‘¹,½s8³ÿ+.n½œ­“MC#ö&MC¨â#¡fJ ÕQ£v7fðëš2F¿nUUåP]]ùÀU¾®Rô,:aƒ ië×*ª}¡¾0/W ED Ð믧}4ýhô÷ß(2òR3/˜Û •ÉQäüQúÇÐ-V3ªU þ½åfKŒŒ…²?‚ÿ¼²-;?ÙwÒo‘¿ùsëÚÄ)ÂDòá£Êaà ,V½š¡ÿ÷Ÿ&<œÂ²ðA>ŸWø¯ô¸=Ž´@œ´&#Ã+~à™.(lt×Þ¤Åï.uY®Ìš9ÕÕ•ËÓJy¹)K}DÏ+´îUa¯Êo¬8'š—Qî¿2¥[n×^6ê/ô.K„¦!.5Ó.¨rT¹ü\ν<^€\^ªTÖiflá¢Ómâ˜AÓêÎ 50™^®Ä)4ñùÿ//Ҹ߹¹»# TSãv*½…-‘ n€…õyë§;O·¥Ú¶àÞÊ+2›ïX^·èºî:Z$MgÐmÍÚº¾mPäë«®í{mä}¿5aaÆ÷Öï¿ë\\ \.&ã……„š1…ßçîäQ¯"ôê’à%ߟ¿|´j}†í†!+ÆEœ0ýÄ­¥Ý|£yÕƒ³’“99¸Tªc³žž²„ã]¹]‰Mª“ž¬>ù;k_šæßRÁ8蕉N³»"ªx©ÔLÛ“,H¦S°{ýrH$²³s¿êêT‰$øˆ“hV–ÁVV(s%š€qÛ›î€f|×¾(¯UBÓtè€rrTŠllò Ž`‚ÛàEÃ@M½Êº•~ ²’7¸¯®UU¶¿þsïŒZ5å-ý#»AZå©IÕT.ª´?kŸ'Ë›“0‡Efès‘áˆF6q=¡]´x~>&“éÝÝÕ½{ŒÆqÖSIÔîô1ãœ=³Y;Kv±·/ëµ¥—µoø»O t’††[“ÆÆÙ£lG´yM|mOÙžJö?ÂÒh%uGÁ´¸FFàÐÖ\Ð]ˆ4D>ˆa¸µu±!´ŽÇ °¶ ÉÊúÃt*+ëlAÁÕ~ý€ Z&›uÙàxñÀµÕt±ƒdø¸ 'Wu±9–]5*Q¬+¦M«{¤ææøé;¨Ë€„ …Ü…ÜD,qÊù)ù}4Ùsò£ç¸"ŒÖßÿIØ›á½ÂsEž2o‡`É뿃¥¯g»-Šô¡âš˜xS…Mì™ä#…»Ç­~mDÕøiËÇ‹3µÜïɪiÚ =ÒÇÛÄO`LxÔo3ö޲´ôCµ«íÚ5fòä?[l‘N0tdkqdp1ExU’0<øUL!|ðß–„Ju7—ÇÆ#Ûcì•r±ÿÅÉW&o ß8Ås Öš“¸¸ÓÝ Y³Ìó+²ÝÑÊšI±§ÊåêÇÞ•qJÖyQÀ»î‹¶…lø¦ünÔ)‹ÿÔ¯éQ*üÚˆ4I¯†gïù¨ åé˜qA1c•›íB¨oï>-¶54fıŠcý¬úZ]h:Þ7à IšLÕÛUYÒß‚ÉåÆ#¹ÜÀdj8.âÕ’ôŸÓçßœ¿;rw(/´m;Œ¶/hï¾ò}ÛðUc/$­ïôn¨­qÆ<’BA+.&özCå䤯m̺L“÷*¯U©©«Æ}·¯bïûæöèÑ ½ éµ:——zç÷FÍÖ'ýúýò4jA €Yq´òèÈ2K»cMÐ}ó[R.§ê‚»6Â$éò@M ©à²×Pj/ [¿wÙ7?TÚ_&Ûq ZCÆ;cÞXZQÕÑí&“ËÛ+8†â0íWÁ°Ÿý®Œ¸±N¨ªëR£c2Eýû³’“IЇÎjBÁ(“ø“ö†ï-èS0¦fÌ¥=—î® FV/ý2±')•ðsyNˆO¼’ôŠÞ÷1.³Il4À“AÑ”¦Jr"+6?ýdKl¿þ[Šq¹TåUÿQ­®>ª`néüÙÄAѶò©{3‰@éiâð‹Ö~’ò‘"'g¼  ÓB+.³éÓiŸž™6ü꜔»ëVšFíèH}»-ÅÖ²`¸¸òõ%öË?ý}©D 1µ^U%&mM:ðÅï±.ÛrìøuøÍ´ ­A{Z|zøÉá:OÝ£¯„à‰ÑPozÒúL¨˜6͸M^J:~’ÄáÞäRTªÕÞa^˜·²å Õ‹åÇË3¾éþÍ÷aß“ d%דJÛ1-$…BÇf[S¬þ û9˜gûEò{%±%uš†Ã!5£öhÁkQgÇ¿í[ý±Ö–9þÎk篫>l¨†Ïôù‚/gDL‹Î»HN¹ÝüGJ¿“Úõ÷‹;euu ™ðã =ö]yìÎ%…ά~iWeW]t.,D}̕϶ s!GžãÍônæÅ&“ÔìÞvÔ|Êßn Â%}³WeÁµs×Ù[ò¯t¼ôÉÙT¹iô“–É<Ü—’Ü̶'…¢úÉJOò½¡SkOf ¯Ø±Ÿº>?‘oV?³câc¯”>¦½Io0ž…&' ¹`Z-+1Ñjÿþb«U•ž·˜®Y:7×'NÅÒ­¸¸9Úoݩ̽‚Ýñ:A£Q‹Ž(I+ý-i$RWš¢4Ic0“ß[¹¦&Â1âgê¦Tïçd†¾_>wmnT´ÚÖ+›6gü»âï.†ýèeuë#Þ¬y§RFyr,›Ñzuûvjš“ï¯ÔOêõ–¦†Jµ ›¾D £’®©õ¡µk†¿ôìîÌÌJe)‡<ªr«B[Aì7žHùGY[‘Ó`é´ÛI3ÿ½_©r±ç2zÈ æÖ·A ÀK óæÍúå©å45]Mà¾Â›;§âæGŠLá§ã®þ*dn½gò´þwÕŒþ¯Ô=û1ïµÿ‹>j`ôË>\"Mz·,€vìcïÞ|k‡âŽÚ=i²à`¥‡‡õ¡C–çÎqˆ}§“ {¾Î ‘ÏŸ+¿ÔÜAX*ÓÔz¥T–qåérQ"¶ÿ ìCGæÕ[ÕbÝãZ¯òÊÏò;Âxðc#ê¥'%'G³Gãø£{—iʈýûƒ‚OèI¹OŠ|yC¾júDåê;{2æþxjhD˾oé5 ÙÆ86›4Tó¡Âø×ëUŸe)¾{ÓÛ‹z¯ÿ‡BQú[…U\wºeéC ®šgó:•ξ{ŒŠ-·rA›|…‘JŽmwM£ðö6Î,—kÅ$:}= _›¸vº`ú†ß7ؾñøåÄ«¨É×q¹œJµÂ5…I ü@÷/¾ºzø´õæý"›@þú#o/),)Izý^Z§c.ßÐåK µ:S‰ݸò•>Q­M5‹êƒ#5G¢XQöùö:WÝ£{ 4‰öç›ÝjEµ–J&19ÖO hRSQ``»%Þl­ƒÛ!áàv°ÞªTU9X[—’d²únJ‹½é%cH¾]>ÉØ*£RVhȬÂë7£2ª1óõ° y~ÓñŸ>ƒ"#Ë>=‘ 7T×ÝžÒõg …žÓ<ëlW×¶¥§Ó^^ CHˆ4Ókã?ÜS §®_³Þë¯&߬ñǮ̭4ÎùváHb\©~omëÕ®nNŸ$üµ+YéH¶]-zc³[Üà;“Vx~Õö°ðô ¹êWwüÉ_—ÝzDϲ+CÈòšþÓtÑj‹iJ†}'J[,µ‘Aöõնׯ]¬t< <°Âi~ì 4¥šÒGœ¿të7"5aýû‚qÍÏh¤ÌÌöTsfkÜ ·ƒõVE$²1¾ïY÷¦ÿwMcŠIjBͤä%Z:m2ž2 ƒV+;rÕb“CØÞ¾®]¼~Y]÷*J«¨É9&T¥é4’Ky²ùB‚ö\ÕZ"qxÛûíÙA³guŸucñ TÞÄ5݇D\³‡iÛôñDSëUxAÞolßtgí]î«ÝÂö ØAš2/kágéßi Í *™CÝ+y¯!7»ïWVä¡e=Ú&á¹¹íÙêò—ð`#Ä›ægàîüXA³vñ,ÝÚYÿ³ëÛÃÍéNmÊhÆJ°˜£ºiû|NØ5Cëf›pp;¸ÜÞVRÆ6;Û8÷?±¯°ëRNÑáLw#·è¦ûÖ.¦&G¨šÉ~V.‹(ò$ö`:v\Q'h6m¼µè ÷U·ã\Ç5ß:!e._6.°Lì Úzh7!eŠŠŒk2û(Ú´å–/Œ^xaù…ôOd§dMTiœ’%¬­Aµ­W•#Gªœu:±¯9RD!ak:½¾Öå§ U©C'Þ‘e=´TÊ?êcéT ‹XìÌdñÖ Ÿ3$°;³ÕÛ›)sü¸±qŒØgd´µ¬Q©Ü¢Ž‡dß¡oW©Üøô€ x9±èDµ^„7Ô4ÞLïs×naM4 W§Ê–i):,|‹ø·“ÿöµëûÒxƒOåo÷ßþG§Ýô=€ëIUŠ–¿D£=\w XÔ1Þ)ÑŸÊ&-É6[5S©­ÜY¹s¾Ã|Ò]9ñˆÁŒ`ƒÛKB¾ä¨r¼h^õj†A<”€!ܪ¯t 5e¾{é,"8Õ¤š©?•>×6%å²k^èËäÉyîúå[ý˲E¿¬aß>ÑòŽ>vLê4§nÛ¾Ýy'j }Ö†¬ ÄÜ~`:ƒnYɲ×y¯»Qï.ì¥FèìÞ›š¿@DÈ—4a–IÐ˜Ô øLžçéwRã>ýc©TË÷ùú¤,cçp•ð¿_w¾ŸQRÂu8fÚ^ .ðâÒd6ÿk çBñ•0b±¤¯e«Ð-:;èÛ˜“C‰ò8:Õ?¹7×F²\¾¶šAÂà›j¬iî £R!öžˆÖi[à·ïÿг¡š1PS¯‰÷ÝêôŽurê3È8ÙÒ{Ÿž”>æò_f‰—ü¦Ûð+¯qeÑáýÇÆŠs;éêµ;¢:X¾@®¸Û ØêÇŽÛg¦Ï\2—´äë $Y žPƒ~3Ý¥£.ôÓˆcÃÆNãOå: ÇžýšMIG.Z¼pÊ'–ƪµVîÜ*6~Q+?™ú¥ùñ`×ÿÄÏæëg¼¯çñ°Äó¤kɘ\opöÖô¤OõCå ã «7êCð\î èwìÖÔAo2Œ~((«\w»"E®³c3'tpÖ›š• õ•úKÆîG&5C”ÑD6'> ®}¶çèe55t‹ÀÈ!¿ëÚ¡5kh 9+Þœ›½úëôÞÕ[¶š‚ÿÞø ß¾buõØ0ý/@±/4Mfó×—HÖ­32Ûb‘Bµøà¶cyÔº²§u"L›¶OÇöâz~jæÑõ4ö_ÿ}µžæ]Aˆ´ þ!V èbfyhÒWíºË¸GïÔ¾n I¸Á’—ýÉÎT «¬µ¯Tž¼MŠX8ý¯÷âk ¿ùóT3Æ~3N4§õ>ëÓ}öÎçØäü4ÍT3¾ý™žÑ ñ|æû>Y}üû /¼ÿÆù¢óÏöáe’¼a§$ OøîÓ©Š•ï¾ÂxÂ* Y&~Ql¨_8I™‰Xú7¦kß›¦ç”’öß|¢ÈÎIÎÅIã>sø C÷²žþ¶æœ…´~Õq‚Ÿ‹µïDø8߃¼éJ¡ñš®Å˜³Ï*ãÄujæ!ÙÜ —|¿ou× q«ÖJþ7~Òé?zªô†Ö4˜×ôQñ-yd:¿ó€ÁjÉm"L«8~]Âz»÷ Îðí½ŸR³=G©†b^\gó6Å úgÓ´È)gì)Mü3zìÈõΣ‡ÂwôxQH6HÕ†0nØUÑÕ{¡T'qdpè"GÿaöªŽÎ˜Bh|å NÙ==:[uêüf‡[¬4gÈŒ>ÔZÃÆôfÐ2J(Mà…§A6oK b‡þ:ÌÏ©ñ)eõ7ɺ¨¡öVðå<ôÝs·«ïþ9%Ëhž¥âEñM~»ô ¹šŽÁ¦9ŒÒ|kËfáìóXÿº6üzÌ7õÖû¼R6iø ä„ð-hZ f¯ðZ–¶í›NñJþ ª9’´Ç4‰ÀšLMäÛ‘{ºî\1xÞyK.Í/Ë7]ÀNN¶=tˆ*`*­¸Ø6&†P6Í1wýÜ‘þý–ù´û¦%HËʵªäE5ŠfÛÉÛýÿMù(YñqdíÒ7»Œw7êHSaÓe¢¬…fsŒüöÌ5gw„|<¶zǺ3÷?ºöY ý¥‘I¼ÏÞ鿤´O67RvÝø_ô«MžÍ:¸Ù¡Ï70ºáÑjÆÔÕ÷­ÉnË_˼ºß©ÒÓ:Ãõ+Fü!»cMÏô9ÓËÆµçèsɧ…6»;›¨0i&-ÓjðÚwË»Þvq^˜¦}ÁÓ…Óå …U6›–\½Úü»:Íã69¦‰ìô±±sn7òÏ?Ýn樂ûå±/K/§ççW.êÕKNì‰cz^ûöc*;¥5ÙoñN u{Ê”b’4<ÍZ×Ç«ÉF:¹³ˆÐ…Ù4'ªBuá‚âïÛ½ÁŠh®PˆVæÓÝÊ){ÏtjXЊƊsùÙgÕYšë~^ö·ŒMÕ¦>Â&Ms­Øõl®×nú~aïÉ×W#›7ùÿ~ß[¤}T½à³XñÁ >¿·ëUìyãg›Ä™ÑG«˜¢6¨f0ȳªî :”,ð"×Í<˜ÍÛÐòeaMÑÂê:îÜüŠ›3§ø]/Gcy§+þ3­tÒÄ@ø~«fˆTœ4lÿ7¼œ_èø×©scö«q0ÎÅÐI~¢^÷<)Ц˿OQë£Cÿm݃Ð,ûVYÊž»›„Ù1‚£Îí­ÈëÊwç¼Ð.ÀçT¸³`å_Ùë_÷z–KH2l“_›<®rÜÁÓL§¯ ¦„Oûø1ëæÖ1™Â~ýl’߿̤Ü*()·þ¬N÷ü³úçK3ÞŠñxâ!↌¬¢„ümR¾Ù±7SçÂ&;ºÃ:è†4ku‹4eÚ"Á¢63z±{=pª¬¤’›ƒgXJ'»E|<òvJ÷ÀUÖuƒDÂÃÝœµ·’‹þª!}Dލr7êž*㸧À’Óz‚Fûk‡´¹ŸUÿO™1$œ-ýåü©)=zfÇÕp§yÑ©P¸À‹KãlÞfhÓ×­Xl:ÞõËi^©iø(å]Ý2(^FÍ 5úŠÚp„ö »?‚Šœ4QgÄÇÇ¢ZAcÐ1ΤS‚D=ôjPË’øŠ"7½M½v±Œsë)|£¶œ=8mèûXÿ¬¯]èJѽîxÂ×?uüß[¦QNOLøDíÝ– |ózÃ[ïG9´¤ÿ~Å(aº!ÍœAza]Ùºí?ŽbG5>ëîé½ÝŠwÆOè°äX²wïÀ7¸Z#Þ˜o˜âε@úkŘ‘ûÎ¥0ËŽ´54å{Jt­öÆZMCŒqºoß¾ ³¹Ný IµäÜän¾Þ•éÛ²UäLzkÖÐèoý—”ŽÐ{ó®¼gŒŽÞmíJcëìëïïþåçŸX8|ëýo¡d€š&³yêzþùÆ9æS—rþÅèß}§hã§:øæðí<ŒÈO›hDø4Êoê‰R­ÛŸrœ‰31e6;·¡‹6§)v“†«hû HqògI‡]*œZeá0u ÍPóJañžK›Ä?a‘U…[v ¼,ŽZæóÙ[Š÷ß½µäH÷ož½"W(pÞø°þ¯U½v(öм܅dýLç·_µï©åpp¹¼qÛòë¨Bcv;ºjçg._1½%O&¿CJ¯Fè9å”ñ#ÕùMmú=ô{«÷Zå¼ê~3 iÕ…á¬+’eɦ³ù».ýQÐ8"ðàœ[mìAwPtpNÁœ^ì^ߺ|û€š©_˜©Ž»sÄ©&#,Ré´:Ïžš¾šÖxàÖШÕòÓ§W_¿¾[$Ê_¾ü·ðð‰ýûB¡0 ¤€—‰cÇÙÙ¢å˽Û8›C!ÓzXÒ(s}o.ÛŸ³ªoµ½žÅò²ä£E3´•QÒSÌ7¹ÙÙòòv0búÛ~Ç6·x3]¿pYº2wöÔ¿Çø:ëX,Zu5÷úuYP48¸ÅÑêétYp0ïôia¿~:f]^®Z½J@‘º­üŽ~Ä\ªù‚K%EÛµî84p¶Ã%„¢Æ¹6T3†÷„[xOl[£!]½Š¥¦bR©Ã1è#"ùñï}=ÒŸ“œû¹êg{²ýF—ÎTçÆ×Ô-Ì„êfÆÃsp«.ïÒ£–2¸(»Ø#¯‡:Zî6étʬ¬}……'‘+Š}S¥šþ4ٜܲ‚fëÖyy—L++³ÿ*#ãÔÌ™'©T&ð@dsbOdíÚ*Û:›C!Óª`Zí;9·²r]×{Ÿí§ƒK$TIáð"—/‘Þë*n£3µl!²ø³˜ÝýGæ+‹ÍÇ3ã+-r}ÇxÄþ×y‡lœÒ —Ë -‚0LÔòÙ LzÈæÐ!5Ÿ¯e³ÉR)µ¤D¢ z ¡7½ƒÏWoϸðgÍUœ?Û·Õã»DèNùŸÉ7©l ¯¡Äi¦šÁÿüê¾t‘»t ËÏ׃(퉢Ð+ÎIÏý%ü‹ŠQ?´û°󡣟ê(™4 ž×p´÷–2hŠ+5W&ÅNRz¯^çâÅ…ÂTÓ±L&xÊlÞA»ª¾ ©'7÷â™3k^ …¼Ù¼q`›es(dZæÍ›ÔŠŠ¹†NC¨·“¨å¡jc'¿ŠKJG‰"+¼eKœ(ÌjÕ/Ï W+÷íSLžln!)¬””q]öžª05iéŸW f¯nަ‘{{ÓŠ‹q…BiiYQ†¡>ÎV}œG$”÷ù!Q"@é ¯²s7mÑ® "šÿMÿ€G÷T­b[Ñž`IcÝÌ]5sOË ¤k×ôݺ=®5h¯”_Ù"Þ©bo0=xºÍô¦™y¬¦q>Gc¤3?>LÍHt’ EF¨C¨Áâ^‡¼z5óL²yKMBÂî&ï_ß e ¼´o6‡B¦U¡e»Å¸sXƒòýVX]Ú¯6à TŠVí­Ïô®ñ”0è•VöÆÿ¤©W¯š‰ !Ô†ÚÑQKgï ]5,qüêô?úAÍ_ÝóèÂí¸üýùŠ¿=—$¾ó¾À¦øöW¹"ïÜ/¿L¥áîkáëgáçÃõqb:9±œìöÄ“ÜD}–šÚ¤cx­ ª„âŒk×Δœ‰/÷àxtÀÇïtÛiM¶n~¢LšÆk¡&eO«y˜š!¸*¾Ú%½ 6 3 ããlq6Ç–,Yò¤÷ˆD__qSgpKË/¡°€—"›¯_¯û v<ÄzôAZ›fs(dZ•nññ$ƒñ¥"ÄõS†^šÇ'!Ì®¬Œ‘ã<ŠÌþŠ w.õ½Dc›‹Ã~Ÿ8ÑÜâ\TDÖjóÜ݉ã;¤òÿ¸»çÌbpý9Üòòtdr‘³s›=LM¦CôPªŽDÕÞ»#äsù¹ùvùùöù–å¼òJ‹ÊrËr\‡ó¤<¶‚ÍR²Œ›‚ÅT1(ƒ­¤àzãh¢®2›«R“u²ŽØ§ÛQµÂØUFc‡ÎHî‹äÞH×ÂÕ‹,¾ý7€xÔ£cqßÒ‡]vÔp4òV$¯ã½ž@„üøàgRÈ/~b´lÙ/UU¹Ãmm=?û¬MÿyЉAÑí46¼M›³up{›Ads„Ú-›C!Óº¦·m#4£éªq¾ãZ^û¶T©e¹Ð…bWój)¯sB€%Kmã¨CÖÖ-xM¼nONF99FËÑ(66Öû"ïÛ_6o°`XØ’H >ßÝãµA*íâÄl²À-úxÇ¿_9G„Dï3ø¼Ö1¿áe\Ä%6/¹’#T‚T¸Ê´iH5G­±ÐT“ª½jC\«gޝ148MKÅ0ZÆßBmÁÐ6ì{kX>hÐfëÔ=p~œÖã0/k¡qMÓ>kCsç Ýz6Ñò£Õk×¥®[¹€öø© [œÍ[ÒäÔ¹ó[u]iáf¡âÀ ²9Bí–Í¡i]‚‚P|Ýú”#4ÄFTÞÂtIT>eeüêjºZ­¤RK¬¬rííõ¤g3¡®ò6ָɨiP™‚¡ž÷UùªËN—gùÌjIDÄêìì}ÁiB˱XŽ=z¼ó4ÙœÜÒìÀ2d)±|þ9 :€—S6ÿb;öùç™mþÎ…B¦5!“QϞƭ–~ïÞ Ÿ=Û¸!”ƒœ£‘qaÄ·ÍË1BßH4°ƒâ÷ßq¥RÁå*–\ôžð=gžswËîO•\^o`þÇÁ›‹Ûäðô;‡šæ‰ÔŒ B»dóùÄÖŽò›ÙtºŒ§ç}!.„»„s¨M,eŠã4_ß·‰myöÀ>}~0`ÀSý¨!_À=˜Liƒþ¿ýèk¶¯™KŸkC·ñ£û5?š¤ÛB7OW3_`«ÁŽsŽrÕ¶`-'xΓ¿8ôÅ×y_Wh+šy‹Þ Y_¡™åA3s× O ss»Øti[ hàQh†ð á£OŽþ<ÿs™^Öœ[ÊK‹ulûd̬§E±U±}è}ÈX[4 €Ç sÓõÛ)¡Ó’â%ZýQKœµ£rG½šq_cI1€ša † ©ˆŠvì˜Xæ,pÐ .°°HKAÏn=ÉÙ E¸œöÝò‰²Ä]Õ»Lj&o¨É5ŒÌ\©$„KYÏž:†q‰(<ßï¾?ÚndEÏ^„Ð!΂ €çKÓd|*´,¶XõÆ3åâ’þ5CÀ()QØÛ›Ô ôˆ4.$îËWˆ"œQZ ‚ž;M“¶ ÚõŠÝ¶/·xôrð_à\©ÔÞ]:ªF­Ûâ½·7»7›d\æSËfãr9xîÐS‘Š¢·–XÌ]|L|lwõn3wˆŽN'Ëêfèù§ ä´ÇáÑv£MÉR©ŽÉAϦ~3Ÿ ã畾¾%(2aÑ9éùª~0gŸ(ø|FY®Phõ†ƒÂ#!ôGŠ£QÍÈåD¸ÂÁ .îBN±Æòôd›ñD .—ÛÅÅÕgÛBФ¦¶§ ÌÖ:¸nëðÎzã1MÞ}¨ù j>ßßÑþÌG7¥Y+K¶6œG¸ññ‰nG·Wx —º¸$ÝÜ äF¥«l/^t:vLææF¶ùÆI™™íù³3[ëàvH8¸¬CÂ_8ëʬñ˜&âcÞ‚š‘5.ŠÜwÄŸ >“ëåí’pAíèvÆý˜µíñ¬Ùoê©T…£cñСm fê¿qã·CÈ:ØÖ?8“¤27ëf›pp;¸Ü Ñ­ûÍ› '4 ?Âë[Y¿õin9ªm³5ó×:/µ!Û´¥”1UÏ ´97÷DffLKµÚ›8ØVzÈ›ÝÕÉ£WM{|ãÆ>4ÑÑmý›CÆš1£]3´n¶ ·ƒÛÁíð—Ø:•šÏçÅÍx»ªÜfÁÿòÔymf1'NÌ&ˆ}« %Å:uC’XFÿ÷SçIíõ“Ûuý,³µn‡„ƒÛÁ:$üå³N£e¿éc÷•×Tmé«s >Œ“^hKë™™ÿ´W ȰY<5œíHuh¯oœD¨›vÄl­ƒÛ!áàv° ù¬S©ùÄ>ÔšõcØ8çê¹+wTülú„+•ìÜ\‹;wˆ}+-›{²½#<.ÔVÏw؎߸¹ÏÖ Ï:es—Þ[Ò–—¦Èú^:Ú!=ϸ8‹E yIIbÿš€€—#±ÅšâŸªèfXÀ£RÚñ1@ÐÀ³ǰÿø†–®Ü™¹| L¬­EKÆÁâŠdä{e_ì¯þÛÔü¤c0Ê{µÝ2Ô­ÊæÊ͸Ö& tcÓÚ÷I †Z FI ÅÕi[DÔÚÛ!»J¿¿*KX下s M£tp ÎJ=<šOÕ;¹¶¢›:+éï“’p‡[8KŠ0 ª~G]Ùðÿä$WñÊŒàЮA­…‚ϧ—–Ö×Äè]õÁó‚w]Ý•zëÖLòŽB;j‹cÖbl=R‰ÉŽ?R|~¢¸]$5·ñÈçέ7’¢2s­Õ-TBg¥g7WnöÌÂ4޹e_G "0-;?ÓÎyºM» tA­…ŽNØ?¯u‰‚Ø ¿ä Œ¼ùnþ‡gÅg[µé­P/š¤É­Þ!;¡Ç·õ¤†„žéÛ!(Ÿ¥í˜^س‰þÚ^µ}µãj¦Ú)¹ z¸›™„)”5Ë´uœvt5ô¡€VÄ4ߌãÑ£J-‹E–É襥5½FØ ÙõÊÊî+OÚŸüŸÓÿ(O6Ç.Žä„¨‰Ò˨Qõb/ƒ]Fr6èšs¯§”8¸•¦bÈÍÐl‹ZƒvcåÆ UÆF§¶d[-JÍ-—, 2vë)+­*“(†©6]w:ív”ß «6Õ h Õ5ÔÃQR‚+• .·:,LG§rÄýC÷ÿúñÀµ³Ío7~¹wóã$!u˜A‰Äꯗ+HÜ, ŠtͽW§±/+ÔQ¬š¯fŠ4E«ÊVÙ‘íÖ9®cŒ]ÊôÈÞcA5v™qw÷<é^wåW'S½zøÁ('x !L#´1¤­1ºÿÖþ+Ç®<æÐ)ˆëê.vo|{>Ùó0ÉøÊΧz_Dú÷ÔYÄq­ –lÿ3™B6¨;hóï—'6éÉa2ñ %É‘N†…’´¢·rˆ= —±,nú¹6çÉ ÈpD|äçêŸß¶z{w†°«ñ韋´ÆsÑ A͉WŸƒ €vÕ:¾:‹6o¸¤¸±føW‰v‰¥NR§†×¸isÞkt#nP Òä=,ÚJ¿÷‡èÉ–'žèÙ2T›*7"æ;Çï\©u¨kw¿E¢Ó‚š•]Ýß²h`ûè4ÐÎùÇòc,ê°sÔÎB°-¸Å~.¬AW_²À͢¡ªã•6x¤BMá^áÞŠCnNêÍàêtoø’¡?²+'Ëùé[u~³ðçć hà¹@ÞƒwªìßѧF}Ù÷ò®a;ãã‚«‚„T•P3ÑÇ{Å >ÿˆp½Þ½¬Ì±ºš¦V+©Ô+«\{{=éÉF4§©Òþý¤Hжˆžc3§¢€ê±–—‹„n=ë4CB…Ô'—Ýëo‡ÜùÂçÇ{ hàyAÊ‘‰>Òéz§áW†¼zùÕMoüšäòºýu÷²Àñ‰Î Eö‚G¨™ðÌLË»óø1U*¯’k±8ÁÇG× M#Ô—ýu\r\mPçÿÈö#zíÜ6n=¡fjš+'ŸþíM¨™z‰‚€û0 ‰]΂Þ'ú}°{ò¡º˜]¥úyØ®R^ž“ÌÉ]ìî sà©xÜèQVV¯fê!BÜËʲùü&mé0]£¢˜]œËÍý­òHVØ›9!Œìþ)máR¯i„*íœ?<²?zô¤ìyLšÆg5Ï€°?¦¼ÖËòyó9&æ©î ]ü”1<%íhÝln7ëõÛ1áPÈ€õö0Ý¿½¬´¹áGmŽÃ7Ud)žl—@¥ƒd!ÈT ƒK ùôdQ…(¹ˆ,üݧ†¢ÃÉ:Y‡3udªÓc¦‘ܘ”–,b‰XJOÂsªrrÉwéVÚͧÈ'  €®®_3á&B¼G<›éœ7ø°Bd2¿§O¬L6 áñS~éäè觺éÒ¥‹/nÇŸÝS>ÿ‹hÚœ­ƒÛÛ˜:‹ÛÛ3áPÈ€u³MxÜžîÆ Ý.[âxíŒòÛž=q»vÛ‰¤Li”È8IŒžj ™ZŽ,,X“¦[Ó¬É$r‹ÓN<ŒvFñ Æ3ˆƒŽ9~˜'(ažQ!MNðÜQ/ Lº!ŽÐ+3*ˆý#d9(„/æ­àÔ1ìÛøaÚ4ð\«T+/#"#Q^*.¾/ÐÉ ED´ÃÀ 3Gp^èØ¨É$#ˆShâCn£PЄ èÒ%”šŠÄbÄ墠 £Ê!“Ûáa@Ѐ™3n{x“áFUñhAh—ž=Ûóð0m ~7¼è€  4€ A‚ h@Ѐ xA“šÚžæÍÖ:¸nëpp;X†¦I™™í™~³µn‡„ƒÛÁ:$ÜÖŸ¡ic“SLL;+Â> stream xÚ½[ËŽ,9Ýóù•ã÷CjÕÁŒ€ÕÀÝ!Õ]],à ~;vØéª®BbtÕº™v8ŽÇ‰÷ö˦7Uþé-š-†¼§¼}|ß~ÙLt{tAEüœòt vKi7Áo'ÌnSûþ³ýî_ÛÏÛo¿m?üh¶¼ç`Âöí¶ìnµÛNFé=ª´}»þõM)•r—ò“”ò¡üØs*¯]8ŸŒËå7í•R7ü_¿ŸÿöíÛï¿©;½[ŸfêÖŸƒ)ÿ{u>ùJîâËz>—'¯ëûBÔe\ŽÞhà!¤òÁ–ŸkP~>Ë‹ëùTV¬_ ‚™À¨sDË”ŸîHÐ=¬ä<îœV«‘ñü©rpk$êS쌞OË .é=Յж "¨OáúÑö”ˬp½6–Êný¥ÍªGb‰ßWq©7í·«øúJp^?üèÄIÙ¤÷ä‹"áÁzƽ¡Àlž-G2Ì<Ñà“Ö{öž¦„²µDZ*V» šIÃÆœõe†ÊghKm;…ZçëH7“³0ÇÐE_ëïE¼êÂÔY¼øT…‚3á(ͨWW^Ð ’0%®z € ãù-¤ktÞm1F¯-J«?P¸š>ÔýÕÝÜHàïåݵ %UÇE×c”uv»v±­£ {)U;0欛~OjC2V÷¶î)ML{2]i*÷ÁÉ)³Ç¨'ù•ö :fœZO¹j‹è PÃhŸYš+:ãÌèP :Tξ+§q`£ŽùÜô»HÒXðHtZà‘Ò@ºrå˜HÕXZ€}R®ŒWÁuFÙ/´mÀúÐ…ÉÂ"ŸD¡·ö|Ò A)TúâÜOÖT¾­#‡[RŸxÊ$öñas¡û>Óµ©ÓÊÿ¶ –º ñ°ÉÓWÞ:;°ïK£i”¥}9&ƒ1Þuá>ÛÛÁå´·ª…»F©“Q •;’²AÑ碟Å}Þ‹+æA^0c0ú$aM¦ƒæÕYElµŸ+rÑ"À‡ÕôvG|ö¯¤/õ€Õt´ÏžN²S,ônŒX]Z´ºGg…®ÈHÛaä¤"=¾Êä“Ç`>„od¦²&Â9ˆ¨IîMìw|~6"Mßx8ó ˜™Õñ€É¦òlS5€ªÙè ›NùÑré¾#TFÚ™j»yé†#l͆Øñ_ç¡t\Äþˆ9Ú!c¿÷1F »ÄE¬x]À1f§;2tïirAŽ>¬( ¨¹g,^ÍFygðÆ°¶É·õ¤XݦÙ$b#¸.h*«¬ì^ÜpÒÍýº®¾àª>ÐIJŠRŠ?µßþ± nâîSœ©' 78dzMˆéá„ýEº…jš}YœZÓ³LZãñ§òó÷_ÚšÝ~æmKÛ„EÁ.Õè àCÓ|ÒC„­†f ÂT¾Ë [-.‡ù¬áÍl_’™€x*9zC”BÒA(K>1ª;î`ʆÝøáæ­ £b2”“Çíîln`®Â­*š ÅLdöÖ`—TAgrI7KЧí^2.'8tSŸÝ ØpðÒn£•‰™ÈÆ(^Eµë´é"pœµÚçE(•bܱ.â«7{IÚºh‘=!kgµË Žæ¸–›pR5€}àÌÉÎõ^²äq¯¡cy˜á ²¢$DIupPJÏk@ævcKú~‘®h„çLiªü¥ ±Ù ÷X«°“&0ˆ°Ó6)2YÓJ¨å;ú? ‹CÜuÎóâ²BèGÂÂcMÐú¢{v6ø¡|–y Bm8¨¨ÛJ÷j|É{‘ÓËÅἋ¼í¢’[*^ÙƒÊÝD„\AÈ‚ µPñË «Ø,œ£(æi EM«§âÇ‹‰À}C ¥Òf…˜à­¬b"9YÖáXåÇxÐ VÿG„>Ç‚$ÉÙ¯ F¨Q‚OP×PØ!È‚|1Žâ¯×¹Vo©@+YÃ'ëVœôoŠZ§äv«2j#g‘P`®Eh2mÑõ˜5î1ŠJ{jäb`ñnѵqq©#~&‰ê5ö1h³ZNiÛî„ZÆðáß‹îñð/!lS†•3dÈP“¢9dÇ>;ôm‹Ü<¸w“f„ª%<Û˜Êé2XÝŽÝŠQ@â0fÀ." –ìžÞ¸U>€Ý‚’›jfÜ/vK…¨§M‚ó›|éK.ý¯òDt¶wj5»EUn…B½z…6v.ûô”J0V+¯mwô–\@V?4Rè©ÃÔ±%õêt›‰ç ÞÖµØÌ1\·¾[ØKqɘð|\ÊÞýoqÉ[ý>;påÅJtM¯8Ù6sg–ÞØc·¿Øß/Ô ª@Cc‡O>×!ƒx>ß=ûåè÷àEáGõÆû0Ùê³á`G=˜=[?™³­Â‰$¤€d­ýB@de‹ŽÚ°îh{O€÷¼kÑØ^º˜Öø”àCnf¥õ/¼Î#àO“bÐÓ£ÂÙ"\,™¸"Að¤ƒÐ²|¾Ž|†áòøTµ2&,0½k&LV𶏩tjâÛ½p­«Û4=8ª~zÙTB—`T÷Á0ø}:K¥Æ-™öÛT¹záWž}ïà°ª­ÐqÃ-'Ç3_QÆê©ZÝjF¶QÄ2!Ú~[½±½‰Š£k\ÐS°©µ%CÑκÞmhO"²šÞs¤(ÆXI”¿¬‹wB5¼ôbCh.’STBW±Ý*Â7–ˌ̚©þzÈD€Ã¢ù=ïà@ 6"jI¹ø6D¸ÜåôÈèq¤»m3ºmmîæÑèÆhsí¸ÕƒkX;«º,Ž·Ys/aözyiÍ)Z?µ`>‡–äE`·æÑ ­²÷›“ðÝ]®qÒõÈÆlk³ÉÞõÂ×èQ¾v±{­îAÖ!³¾Ëà¶_ó}b» tÏß½kÙxuæò¹kïìž_kÔï© ]`ª4kj Y-jòWmïxÊæ:8Á<ƒð”ËѤ˜éZT%•ÚD£y@­<׿:¼¹,k±ÆÔß Q{ ÌIãu´¤%“ýú É¿Ð,y‹Žya)r½í2ÔЉÑàÇ•Eùw“ÝÓ/ö9‹\°, ‹¶ÛcÂbQëwâ‹ò’áͪ—Ò)áãöq8ž}>¼;òqt²#|“[kOw:‰t¢úèÞçêcÕ É'ãîbxTT‰5ã&z¢©ò‹šCÇ{÷éFz^¸Hy$×#šw†™MU{Ï oÒ~ѱRùÁEãã×{÷~:[Oß™QùMб[½¨ÀÐfobÕ”èp˜~‡;rLpkO\Ø}éLq«{ñ‹AÕ|ÁÚñ–Ù×·VŒß]¶3¥Þ5úe«eb¿ý§uxBÉ0´·Û÷M—4-9ß_ýsûK¿Ì_Œ¯cF´Û“ò‡¦O{Áa¼©ã‹§)+RÒÉÕ_q¹Ž3ˆŽ‡„•—³O\1Óé"žn£š†9Œa,è:˜‘]}Yÿ$aÎGÂÙ=ì׬²w @T/+Ù¸À zÜT³‚A­Wøï˜˜Êc­^öÝT¤2zØô–çÌèn¦ Ãñ* á9åÖ¾©1×Ô2dNåùñ Yòò‚ÿÞÏÎ<…«Þ¹Ý¥Úò)¦àÛ€UѦÛØ6Šò0> ͯ²l‹L—­†›ˆ8‚•ŸÌ,¢´‚ñ«…+´FÞC°iº××)OÍÙEvÔw¹l‘Ï"”Æ £ðÄ’Y¾eôä¥Ç°Vƒ«x=õIÅõIðóÌÝ0ÜI”÷&¹BâjÕUÄê9Zw“ܤ€&ÕR€ 571ý†ÌCp¹ŒFZ‘ÉÍùòƒ‹›Æ8YÿF+¤Õ[òÔõnpâi?ÿ濬}ò endstream endobj 499 0 obj <>/Filter/FlateDecode/Length 78965>> stream xÚì]XGžÝ»½ÊÑîè½JQDDì ¢±`Kl±ÄØ5j쓘hÔhԨѨ1ö+,ÄÞ;Ò{/wp½ìþsž?!X¢wÌû̳ìÍíñÍ~;óîûÍÎÌbEj`É’%‹-±c *ªÁ™nÈÖ‘Ûõ Ãtü€mƨq”¡N‘ ²ŽN¼^Z¯`˜š" Ôq Aƒ€€€€€€€ 4HÐ 4xAóì™!Í7XëÈíèđۑutâÈíÈz šÆ yþ Ö:r;:qävd8r;²^ƒ¦µœŽ3€°‚æ¡Ýh½Áž8r;r;r;:qävd½öLÓáƒ,ããå¥M†ZDÈ€Öì‰#·#·#ëèđۑõÚ3ûù¢ÁZGnG'ŽÜެ£GnGÖkÐ4¥Ñ`­#·£GnGÖщ#·#ë5hMÛF@@@@@@¨ó@‚ CƒŽ\ |¹ø—õ"ÜùaÑÄ™æÜQ) söü#3qfÑã-Ú¬e·C<º}møé'ÏD 33Ë1]#¿  G!ÔÄ?}0þø«E '»9ý»~îÆy[&Bm»]‡{—ŽËX¶pÂ| r4õ?/žø3=¾ÞP‘C0­¨Ÿ¦¼j׆ßkŒÔŒÜN‘Êv{ï,?l‚‡iJÒÃÆ›Ìk1‡ºáÖ.Pq¡¬äÞQ؆…\¡EƒïߦٚÝÓÔ$Îûiê:4õ³–lüQ¨d²ù{f|w&B­ºýÖ…£÷ü"ï42鼃MƒÂ¥#ý:ô !GèuyûŸÿžòÙà >æ‰ñÃ~>µ<Ú ‰„zMø^­¼përïU'{.íM`oÍD¨=·+D ŸÞ·|6Ó yF@=`ÆtÕˆÇÇK~jg‰\¡HÅñɸà ‡FoêÔî«[ê¿Ó­:«$é÷•šwg"Ô’ÛÓÝOÏyľ›¶öD½`éÆnÉä¢Zê¡1"d<‰UY‡µc¡=Åq¥)n®y^<ÎÛ,éÅã+ üjuriê—7ÔKÃܸ*æÆ%œiÈ ½1ùª¶ÝÎh7j÷ê€þó7΋f9!AS¯pjÍ–îéR¸srÉ/³1¹z’.ͱìîC;#ÿèÍíÃêÆàæÃšUª°°àÏ<°)š†€P”:Û%\ÛfùÙ îëì¼{Jà™µív$hê7>™:–zSþÚ…sôìöÆ-Âî·CÎA¨WÀðá0ýw&Bm»½.ÿ9©VâÑZǾqwãþHy=f¯êÌiH$àñcpãÜÒävTÛÉ ’A‚¦aÁ¾…úóÂ*õ~„™ð«ºqb¶m©©@.‡[—sÛ´9Èí¨¶#’A$c4@œjm£ÝãÐÖû—û5žþ«•îc šøx0r$àñtÒò&ñ‡†–-‘ÛPmG$ƒH š†H7àåN©ñ ¸yŒ LL*òÔlèÞüöhÜp¹Èí¨¶#’A$ƒMâjt‘ÖéÛêNOI®®•‰æ` óSSµtƒÜŽ€€j;"D24ÇŽUë÷‹ªùª ZÿPÓ9O€ ÎZzwhµ†Œ9PCÎä ¹ˆ+™ˆDíVp0HšR¾ê–˜-¦0*Ë ±IÓú÷..S_ÆSL­ÉÔæh8@än[› -\ú°Ãƒ²ÌV_††–«)1©ÃõÍ Ö+,ðÄÉÔ'’‘1eB®°Œ[&4–sÊaŽŠý‚ÂTïG2Üx‘L½¨í•ÍUß4=*ªZ¿_²dÉ¢E‹ èú®]1}æ šÞµk×{_ú´Í}Qï„&<¼ÏžwG§X4•~´u+«111?î·BRÎ(/c”Á-LbB,%¤rš\AÓz’¥a1ÕL¸e©µï“2“‘…º„Çch˜öŽ Üܺ¤¦5áË ‚ÉÊQáÚÕuáÓåºÿCb$ü9ü'l5›§âñ”ˆÿE»IÌÊD£ çd²¿r·¹hA塚‰Po€§° IºÀÎs`U4¦_j Ø* 8^ò¸yPÇÀX6OG±c`a …Üâƒb$ý Œ‹`òyêr47d2L2nØh—·$Ã'˜ ûèbD2HÐ48¨znM•}áÈ2¥ÿ«Ùhûfª¡f Ådð2ÒÍÒá– ;±½Ø>(?È\a^ã§é&›Ï”•1U*±™YZ—ÏÓ®$ÕÔ?‡…·‘ÚÀä_â^ñÉáä@ê„¡ ³ iº–»º”¹pÕö\Üz`Ùë™$‡Ì™›áñKV²Hæ!C•¡~@Ø­`w†bš“C«B2’ê¨!S˜nšT3|Š˜ÆE#$Õ“ôL2°À:ùP^>ˆ‡ “ÃÍyÄ$£ËœÄN®e®.å., ‘ 4o…’¿dÊ{YœšY”¹?¤>/ÙÿÌï²­ÔÖUäœÌSòjýDèôKKÝ~&§ö ÁàÏKäx90“—™ÊK½n{ÝTi IÇ]u¯º'b¯Ì“ëð³CÚâ4µ¹UQ„ºŽr µ1SmÇp`Öɨ:Jx ?+\Yî‘c‰€ÂW¼>À®î’ $˜•6‚ûRº4—žb–rÅþŠ@.€á“Ÿú"$hÞ€9 gÞÁ’¨n„·¨[7¨"J€tåLoq×… ‰úí=0y ½`"12“—ÆK[-"òÉNS¦µ¦·vÂ>îߊ›‰…BǵŽé_§St ÕR„º 56g*ÂÌéÍxÕzîC*$@†¹OÝ·¶M±¦³Í$ÄþZïÈQs|K}aÒ`šl“l>-.í¢ò.ËQæ´!ÚXcÖˆd AÐâ|±*WA~åÆþèÿ ŠÔƒëÔõ4*­9Ö|6È ÷ÂfÅêCžk8žÄ)\×cÑdýþ+ÑÉ*ù*̤ ½M(=Ôûà§lE½Š˜LÛ¶0B¡îâ`¾’EÃzZ}|l“²nR7a¼Ä¼–XË(<Êh”5˜ÐÕØ!—ê`%³êÉè9˜1ø±æñßê¿÷)÷ùÑü:Ð;Ð>`1"$hê„*ê×,ÅH&Ÿø0ªQõ]êîy꼌’µÇÛ÷Çûð ùóM\ùÐ|`Rå=õ½sês{”{‰pH:&Ø{-ÕI2ÈÌ©™®Ë]N ©¹¡n!UFÎWÍrc±ñ#™Þ4ïwÿJâ/)îQìø“cúÂtN!7"Ô‰ic–¢9=àýB&7©›§¨SÀé„u ƒèˆù? ^¸—Ó«„*9¯:¿X¶Ø÷ŽbD¹ánˆd ©Ÿ¸&TÇK4óÜXï7•€’Sä)(eÚcí¿¡}cL« SÌ4ŠˆêNt¿®¾¾Y±Ù·éËèë‰{¾ë*t-a¥³ì¶ØeOÌFbÆ?ó”ft¬û{„LPÊÜ n@)cY Ň6÷ªKÌòSƧ½½¯¨®¬‘¯qÅ]!ÉÀ€ ‘ 4õ rò`¾r–+‹Mû:+ÂÓäé[Ô­vX»e´eHÊÔtµ¦·¥· £‡Å©ã6È78àqÜq÷·Ÿ;2×åþ)~q÷bä=cF\©:YJÎù¯I4:)ÃÇø#ð^À ¹®fÁŒp"¼=Ñþ¢êâ*ù*Ü’Ì;Ö’@$ƒM]‚X»¼•<ÚŽa÷Îå­¤@z’8d H(É0|zÀ¤70#’ˆìHtŒQÅ,–/†„Ó‹Ñ‹Xˆdô ¹ FðWRC¾6Œ·B¥,'—_§®OÁ§DãÑHÍè_Ö@Æùžý½Œ’͖;¬¾ õe•cdÞ²‚Ž?9âRÔ.Œ º¹“,éo›;)â=ÔžµäÚ 4ŸÔŒAdMO¢ç·ìoE”h¶tvœ:‘ŒÞy¡Ú¸_®¹.TÏwg¿±†Š€èyèõ¢Þ/ F“± ÆÅÕ™ìü»ò÷ ª ÙëŒv²ÒXö¿ÚgMÉB ÁxðG®’O`‘‚7 &KÅž¦N‡b¡ËðeÀAî2 Ì1ó±Ì±IdÒŠ?bU±ÑÌhD2zþì™!ÍÖzBB è¹<¹+G1Á‰Å£¿¡n^¥®.Ñ,±–KiKC° 5ÃåðĽ½{к—W”¡L3™ÍÀË Þ X ºÝÖÉ×íRîREåcò‡åÓÄ4«#V5n=>o˜m ‘L5[¢N—“ŸÙ¿aEà\»’\ù<ü ÿj6 ²š11 A$c(’"f!{a'¢$™ÝÊÝJ D$£Óxb¢![»a­§¤Ðªù$ؘ©èkÍp}­wF„ëÈu0ršA›ÑïÍÌÊßr8M xânn] hÝÕ5ÂP¦ ÝT–­è­¾e+¥¤ó¤óâ5ñÇPt FNfWÌxwjø±`r2Þ0ÛZC&™ÔÔê š)yºH5щYå%*$ OR'$ æcÓ­AÕEÞÉœdÚÒÛB’Sâ¹Ò¹ˆdô`ZÛØŽƒzøùéÛ¼NRÄ:”2ºÈé̦»»ÆÛûcÞðNQ`G¶Âƒ·±¨ÊYרkɃñÎݰnø¿*A–ÑuÏXY‘JJ$·õË2‘ÞÞÚØ%2ò—ÔÔ˜„„cúe™.^^½àNDÄúÔÔ³IIé“et‘7T©|ªP܇û\Œ;Ž9î¾æþFÅÆô@; JÃÓ@ºqZ头U*5Â2ºÈéäIº‡éãC6¶fØfnXëPÊèH&&†åæ¦þ8’ɉ·d)F90ÿ~‰J&ÈÜAî0ÃÌæãó-€ÅkR&ÐÄDK2ÖÖc¥Òb1"C’ÌxæxH2¿(~Ñ‘Œ.¸E$S¦µç¥ï¦´]‚Z»†²EL×®Ú:·G4kâ©Èh;f•Ž™ŸÉŸ/P¦ãÓ»cÝñ׆]CSX¸îÀ­žÕÌK’‰‰™ø’d'ê™h ÒÒΞ;7 îÀ­>‰òKyùn¸·:¢©@3Z³ì2J£¨šºL¹›¼`HãGš„V}ë_ºw×V3¸Õ3Ѷ­¶™Ö:1‘‘ò—÷uùÇ‘ŒB£°3&’OøriU:fÖk"°ˆÉØä×ÕÌK’yPP°îÀ­žÕ "™·‘Ì·ìoå”’Ì3Í3D2µd×;¯ ÃZÿh)ñX˜Í'Vå‘3ϨgË5Ë]0—¯ñ¯±w½KHÿR¦2ŽÐzbâ1C™®Â2€QÔçÌχ1‡mPl8ª:ª›› ‰ƒÄ@ ‘ƒþYÆHÚ"™ÃÆ„ ¾6áü:€Ë@ÙOÔO/À‹Eø¢P,ôÝ?‹o!’16’Á±I±éòù’VÉÔ¬iÜË  HÖº»»æã~˜%¯~vzç pËÿ÷Ã[à êÄvrûX|l/¬þ_óá¥Ò‡<ñÔÔ³´ž–vÎP¦aõŽoiËØËžkžÿ ÿ¡œ*‡9ùóáÖfŸMX‡!TÃlk ™dÜÜ>RÐüü÷£LiÉú>íþ/‘Ë}€Ï4lš)0ýÏÿ€HÆI¦)­)$™2á{ù÷"J„H¦fM£©ð^_5ä ]g£œš·÷°×唃òµäÚÔ‹ù´ù0´üC†föë+Üclöñ²¿È6¹kbv ½—AˆMÊ^uåáÜÆ=8„¶{FóǨc;©£ñÑݱîh釺N2sXs|i¾dk#’©A uh>“^q±àEñƒÀË龉TâVrkÖï‰#X÷/b?F?oš÷zÅúH"²;·{ÖÔ,çïœv €ÜƒPû½ ¥å£÷Çî.Mà ‡ñÒ&rc|䬀’´7ÑÛ÷Þ¤ØÔžÞ¾·"™bo„ÁŽÛñ7Óó7è  ‘⨸Íäæaø°(< ©™ú„&´&KÙKïkîCYSîXž÷YžãZG\¤FžA¨UHUêOwÆÌêЬ­›üø¤ôÉ r…/æ;›ŒÔL=ƒÍo9{y"™¸J¾ªÔ¡‘Lõzh>w² Äܼ0.Ê„AP€œwg^ 3›6ûõ j&HbUÚÞÜ.Dƒö¿ p—ßÙ~ŸðØÿ¼ì3^£v;Þ-0‹¹¬¹¿)~[![1-h+ƒÅÿ>™êïŽ1P‡?B­€àóƒ—š9&†5†o+Ž9;ªÖ¯Ö¢öŒjHrB¼¼rçÁO~ì¼Ø0~4áøAÂsÃÝbƒ½¥IízÂ3Íš½[¹{™|Ùô éˆdª{ñ ÞEÙàÝg7ôiçme.QK¾ö¿]t{.mn­ªˆÁÞÜ-þܺà a l:Q¥Œ´Ä6¼êEïÓ?g~DZ,[|/êÉ£gOËF¡–°úòƒŒÒòu½ÛÂýŸžü´©lâÑÎGkUÍ@ÐpüW?Ž.-µÃ͸DC~uB Íé˜Ô¼§*eW¿¶ÕÌÿïÁøpÆðÎôÎKdK®F]E$ƒM­CCRC÷œnîÝËß-_–y&’ƒ™ìr’ ¸È9zº€ó³œœé€jlÃ#TòJ?¦{=3§øîüñ’8Iñ¶bt9jg2¹öäÏè.®wuÜþ´ý+-¯ ‚ôY†ã…d¨]à ž(@?3¾ô³úž+N„cŽ[«X{hb"$hjóÏÜ hø‚ðàgÂgmO¶íåÜk²ÙvÎ@žÑŸ Á84 Ó-bˆàKÏ4ú³B™Áš±^1îìú³y ò$×$èŠ Ô ’‹Ec\Ü=$Ü‚‹õ»ÐO¨žïzžOsÔgä*õ ïÝ€v¨—ŠüÔã[èžã ÿ,Òëp–&´&_³¾Þ«\¾kõ®Ü¹ˆd ©~œräIÊïƒ:?*}ðIÌ'Kš/™0¹¥¡ÁwÿÎòꦂMû×îOœ®ÊR!Ÿ ÔʪOwÅ,îìgÇîq®‡=Ç~O‡=\º¾{_ä©ìøŒ†}KÀ4€ù€8B¼Äu)CôT£Wóö¸ýJþXiìºÕëÒ†¤!’A‚¦†ñ¼ tʱ¸½C#“$zëµ®ÕºÁ[ô%Ó¶î•'¼.m'žaEs‰íûí¯Í_mNFÊÞÙ/-¾‡¯\©Më6b7ÒßœƒÐà+óØCm{6DÆD¶´ØÔz Ówå&)j·˜h٠ǢҀ^öÎ @Ùš°ZÒ±›*JÏe0Å1ÝbRLS–~µ4i`Ò 4ï‘\9pWÌŠn¡åøóþ±ý·µÝÖ˹r‹¸FâMá?dehö4¿\I0}h _¶Í…în9ÜZÑmEæ™ï:Ô¤99{69{5°=vå¼c¼!¡ÁãÛ wóÅÒYng"º;u_¼Ò ëæ•”+5L†Þ  ”A€ú='C °<±â¦„bb)à<®ôTNí55ùËdÔF ©‰È‰Ÿ¸ØÑÓÁÎ.sÈ¥!»ÚïêâÐEÿÅxœ"ûTòH$H>Ú Ÿª¶Óä“ù¶žÛJÀÄFŽmÉ´Œù$&½Yú «yëòþëp ¤Ä›fàŸ[Åë9 §âӷߎ_ÙÛ»ÛÙ.#½F.\`¨’œÏ×4±Es)A°:‡(ŒûðX’*ëâjf¨ ‚Mcïï¼ß*Èj¤óÈÔŸSÑuA‚¦ºXyé^¾XÑL<òÊÈ´·mob4qçlñçêÒ¯þ zRƒ/ 9^•ø“//РCM ÓÝNHZIF¥ÅŠÞuh| ö'‡vzWBƒDB¡pÜÁKkúûGÿÝ{vÀì)þS X˜A^œ‘¤°µ¶g66^•´±‰y?KC*<'vvÞÙ¤e“þ%ýsÎç KƒÍÇã\BææëO¿ìžt}Âáðá֡ú±+<,(}ø†Å`&üJïnPaX1†åcX‰vY;ý"7ÏWVìðz>̼xÉðÌË¡sŽõ:BÀˆ¿F(Ro; »ðŒú´¨罞ƒÐ!’+ìŠù*Âë«GC¡”é5R¦@’ᾉd¸ð+=û©R9»åçÛ—”0Tú&Ë!ô—×óafá^SƒWÉü%´qhï¸ÞÂd!j5HÐ| ÒKËǸ8¿‡Íô;Ÿïh·#X¬7Ó”‡4h›{M?ÂLø•>u ŽÇcX¹vÆ4Vör?_Ÿ0'Ê™›VÑ4/î'ÀLWQÔ[Î8Øÿ`©阵cHé[Æî©)À¢ýGBÀ¨}±mž_^Nh4‚²²Öññ0GŸ(³Îïu¦mM“s#f/…1T `ëû­÷qð鵫—´\ŠÚ4©J=hwÌðVæKžÝ¶¡ƒ]}Z·h*½;:¥²¦Ñ©˜ ¿Ò§šÁ°R’ô!IWв‡[¸sô©iØüì~Âi¸ómþy˜éÖXc$µ…Cçü5â¯x·øÉßNoãKM™N±éïÎAhhXvîN©Bø_ÑÕ±ëW_éÙºESÉQ)•5NÍÀLø•>ÕŒMié5ŸG®® ööp ÷aŽ«5Ú>ý¯®q•5 Üi´¶fZ)Œ¤¶@M³}ìvGÐ{Co¥F‰š4€)Gãœê?‹§ü]§ú/@eMc5óòIS>IzPyˆ?s^ ýu WÖ40Á¹6á0Ó¨*ŒÃìô¨ÓÍ..X÷†øO«0‰êÝ9 Çž¦îºÿXãðkK«eÍ—¤ •5AÔ C¥‚Â徇‡‚ø‡dà>ÌBGŸÏž*k˜à΋)V0Ó¨ê £í›²—á7 ÔPÔˆ y/üzãéÜÔ'Œ¥3Ï0àz3:MÓr‹GË-žzW3ÃÊ0ý·šy¥ià½|¥?è4Í~KLp§Q3o#¬6ž ¦ÌÕž5ÖTùŠœ6ƒâïÎA¨ÏH°'Oð[·°§OTú4¿dòÑËnxš¹­j¹Ê€åÒišÐ­¡[=õ¬f ¬ÊÊŠMM+«™ MSÌã ÊõJ2:MÓçT;˜àŽ}¨»Ö#‚IúüPiNéˆ?GP­øðfЫÖïUó?TgÎ0?^öÊ%Üü¸Õ°¸[÷§ò²Ïnð=·‡PCÝÒ§žIÿoÓVVcj«“Ä$£Šè$¾/Oy—þ:׬ÌF5¤i•€(t ‰µ‰.áÐr)šL†eL 0ÒQE牴#Xé: ¨á6ádKÉ2›[–[­…ØÂ¢Ü¾ØÞ²Ì²6\q×Q´¿çsäz†Ãë XßNž|ÛÓ"ץę¹éË~u rè_[Á½ÞÛZ…E6sƒ“LL ë#Eˉ·¤Ö®jŽ)]šMÏ»¼H#tl•!i¦àÛÏÆ0ÞÇ´µõØÚº‘ó^‘Ìþ|åÝg¯EMÏjŽd0`Z9 —¿ä‰UI“r²®¨B2©i$ýòk$c^nnWb'Õâ°eâ»D1ɘʹ:²àEçè-ó†[.®|óÒ0¹u”d*›«¾izTTµ~¿dÉ’E‹êÂÃó/,Üúq¿µNI᧦Š)‹Å˹W‹.¶va×ÌIZg™c¡ì?þ-”2Ð4‹Åªó*¼ËlºÙ™2#Ó›–¬<éóp\f•º<ÞÐN>&ˆI§?*}ôDø$¹<ÓÊTe.&.vl;KÀgÚð™|¦RM(ä®N¡:‡À ºÉ«ÖNªž§^`q­^¤98yä•(K …‰ŠDÝNº$]¢–¸p]œ8NÎg?3?˜|L}*~þq¸t2ë«[ñ¿…„Ýÿ˜zw9u’Ý®]» Rß<<¦ËåûÞö-Ë̽5w!sÌ÷÷b›ç¨™LÅf—9:yyQ´Ìb ¬fký¼²¸èß´ñL^Þæø¡MJ ™Ÿ»Y3+€\€í*ÒQS JžæåoÿÏÿ`k;šær¹µF2N¤9™Ñ¸¼fI&K’u¿äþ3ѳ”ò”Tq*$¡Rèjâj µ˚ϴâ³|¬Kš JXPˆ $ŒÎ#x$#»zAicu½ÄÁÙ#¿XY\¤(Ò‘ ÜÉd”©Ë\¹®aœ¹ÎÞwNéTÿÄëh­ Ã…2û{…Åžž0Uß:›=HÏ-ýs5A2 tp"T3æyy ­[«^* 6%ˆ±?(MþpÆ×Y©³ ÑHIM˜@=¢èaãrøñuºyO+Н^¿Zpê˜ qX46on)&[¶m•Ÿ(•Ò»w²nÏ`üK‹(åjõ^ƒãòlÂ\ _·%ÕH!ã@e“*I½_zwÚî„òk¦5T6Á–Á!ü¦M?èžPÍ|~ëú¯!­:twì³¶K¿Ï¾ä{¢µÑÖ+Û þ²}áK[ïÞ®êdCr‰àÅ naaFXIC3›èJ¥uZZ,yȦ³›˜7ijÙ´½Mûž# ÉÀx© ©bR)ñûï*‹Ž”É¿H+/'rî¨"ã7ÞL2r2Lº4n¡fÚ—±/¡,Á’i •M y`¨ ´™E3íâÌ 5Ó¢¯] `÷“äAç5à†»Âh«–À:ióé^ÃûQ[uô'ü´•M.wºySËö5¡iêv»kˆç¬PX§¦¾hÓ¦‚kæ+K-â3,Óv^oWB©™&š¬.ÅÞ×ø©Ëµ DBŠDóAt#QKÎçžÿ;ÿ︂8-…Z…¶¶n=ˤ †Å»›š—}×Å¥õÓ§Çüü¢˜L“ÿ«1Ìqr &ÎÛ~Ë¡q|L}`ªÈÑPš4IÚá“Û%·ç=œ—,N†Z*”ÚѦc0?Ffï©ft9kF¶zñ£jÔƒ«S5<[÷r#¬ZüÄÄFlFö-¿ÉÍâ~Þ™EjO]Rb™”TÔ¨@h00-,,çó+æn¹æ–Ýí»›ÿ¬Î9cz³7\;œvhLç¶ëÝ‘`-¸F7ÔŸþ²òLrfQàxçØ ®¿L в¶L`¼Ä~9U‡.¦»mvûaÖÄ–X‹s2Y™••!If`™ÃFqS±¸™ø=IFA*Neú#åë…סˆéáØc]ËuÿÙÝû>š†ô÷ÇÒÒ0‰„äó5;¾£oæ=Á¢±Z[µ†i†Ï ¡Rx!ÿ¹¼sËž,óäyösê×Û±·%㟹 ]Wz¾‘dV,hºö@{1fb\$CS(T/o^SM@x@ËäO¾e¬úÆtÐU\®ao^HÐjÈ5eeÚÊ!¥¹lrùaƤvxëf˜ööÉJ Ë5‚ãÚ¾Š¢žEïsðÕ‚«PÇœÌ:ÙÚºõ$ŸI]ì»|DœT={®Ñõи¹µ­uVeYrŒ¨ ãÊ<4ÿÑü¶VmaN„mÄ;z•øæh+rC>nA'=˜ÆE70N"¤ÚÙ"˜)¹43äÓ 3_¤5Á)LõÐ@iÄáÅ †LéºÍ{}ôz¥©²è¥e¹œW\œåëkÀ²™^3e¥±´›ÞO…O!ÉH;àkæ;ÌcØ®¶»Ø´š¬ÌPÁP~~µt¦æ s(b`R‘ªË—gþîéwÁüà¾N}{:ô|Çx>S&1ÖJóKÍš =‰d ð^Þ¼´*ÓEáÉëpNüè7ڮϹ#!óˆ­­‘ ix\#ØÇÇr…óV¿_þª0Sôĵ}•ÄK®É®µÖõŸ`'²-ÎYh‰æË©ú’l÷ÂÓ?ÀV:ÜcøÒÀ¥ïóÐú}u T3ÙÙwõ h*GT\`*S•Ì9¹îźyç wímÅ|óyYÓ©arw1þ…µF`LUXää$xñB·o£à8ÈMîš mx?pCŒšŒ|7· -©§ÝŠÏúœý|2ŒÛýûùîîð[CŒ("lþ°Éœ™I2Èwé @ÝWÄütáÛäòäh÷ès]ι™¸ÕÝË#½pÛp˜¤ééœÓ2,|´pˆëÏÜ>sà¼y€$–h>¹³ŸhMÚÆ¢i$ÖÖ6OžÐårõËé,¡–촜ѧä˨Kà dù#AÓ{h ÜÜKºdU~ÂïÄ×øÿ¹æî]r MJsØè;:Wm¡~Û12JvA}á¬ê¬ ÑbIë%ì:Õø„,(eô©fþ¦ƒ]ÃôDôdGÊŽ6çÚt°î0É{Ró&¯ æSr[mе†e4ËC{yq Ù%%ºŠbYqß’?û BSÐ"Gž¸²ëÒIÝ<ɆLã%¨r \] V&Øo¶/éZ"w{ë³ ÐÜTß<¥:¦óC&÷uî[Í~_£‡ÆÑõÙ¤ˆS ÉtŠí*ýÜãóÖVo˜;éÁ¤zY¿á_ÚhLŒƒdàÍ ’ŒÓÍ›™-[ê4Í@{A΋Û,ðÇiØ#‚Aƒ¶-—–æg}óÙüy)‘>dC–Ê+**ðð(t3Xbû›­8°êSí (òœêÜiÕéÆ´Æ³X³üÌæv²+¯¯W§±Yã›ý¸°ñÂ=é{†]ækê;ÍgZ?¤Êaa&TšÚQŒnE‰¤!i´ô°0Ab¢iV!“µ•xé|>Ê·5…£%¹8ëcÖ#–ÌŠÄ»;rü5 E™‰I–¯¯ûf ø'ùZÙݽøm½2PÊT´Ä,0´6_ÙÙU\_/»‰ûÒ€¥süçÌ88ëÁ,K†å Ÿm:V9,ˆC婨íEøD+’†EÉus³Ý/]’*‡J7Œ“¶Ÿîz`-ÕŒ‰¡YN ÌB¦ÓïNc–,iÍèäÆ ÔqM¶ŸŸ¹Æü’9#—‘6.í ’¨/©.ý¥úË‹æ55Ï·o —É”0ï9~´ûè?Óÿœtg’=Û~¶ßlþµôR/srG~¤ïgAI±)­ÐÇ&ÝG¼ìj •îÜBÃaU1Ýs“çÂé ­«ö ¢Ä8š,+•eyÆ2mIÚŸh?Õ<ݧ܇l$c¤?ͼ|'bý×4Îp·áC]‡Ë>¶èñ¢ïŸ}?Ýwº ˆ®|Lw3rg1¾·æ É@M#rrâÐår…M~“&c0úô‚õ?à¿Î7û š\‰»ýâ¶æ‹5€ ºá½J :3s˜Öû­Óç§S¯=©}¦yö»òw&˜Ášá‚»4À Jàdœ!®CŽd™zwª@½uMùœ®&C,Éõx\9Ö–gŒï7 &‚ï¨î¸Ñ i(ÀԘǯ§úœz x0Ì7ÞsØä¯T}ïcU°S±3ŸÊ@ ¦7SÕ9ÞDZO”CÔéÜÓß>ý“m]]:¯òƒ-É_ ðseX„©±ŒšÉ¬<2Ï€ÙæcVÈ–\èËíŒMCóNçÍœq>³_ˆÁ»91f¿Á¾àÓ…ý¿&L )áåž$MÒ0æ°f´f =äÅèœôvì=ÿÂÞ¾q}Ý™î‘ÊHSJ;Ç›…ƒ1Väš|š%ôg¦iA´Ø*Û:€5Ýéœ9Y­ ^7Œg–‘”ÊzµÜU^Vö¯›"PŸV†©'Ñs1ôbÖPÖt·ïÞÍ®Ûòؓï·cÚuWv· ´SÓ ŒhI†O'›sŒôÅ~&ÜЉûß5cø»¶ ô"6¨³µ>o ÁŠOV Æ›3c(’ÍŸ6J;¥°ƒ°"‡T¬:vžlž5fýç;¤f*@àDwúÕˆ«lнн*ŽˆÓ½uÖœ¦¥›ƒ¥x®Êè‚K/ºWU–Oæ£Ë× ¸&à=ã-¾¬-hëŒå¥Í&÷MLšäÈ«œ™D&--HÔ$.e/íFtkàj¦²¬ gºÞå:Ÿâ¯f¯>GœÓí§<š6p:.Ä3”ÆÛƒÅw÷Uu_.üYE‘ ôò5œS5I4±>cýã”0§X £($š&y£þ!!%\%_uEuekAF` Š©3¬‡²Ç$ù¤'´'kÙk³ð,˜éÌ zš“Û q±‘5d `-è-î¨î  WïÁMå:qÜ2sK­ìð‰‘”Š.¢Ûm·Ë—S±ò8¼CRZ+_Û‡è35]€ е«z)éÜnÊnÓeÓ3h?±ÊÀ3`¦Aõ9é©Dm¼%ŸkÝ‹Kó÷#AS¯ƒ{!áú«ë™/ÎÜdÞ‚1 ¢)¥Ûm³Ëž]A4·Ô·æËæ{Ð<°ØávˆVÞ+Òj‚|BU›­¬­ÇÇT@ÕœCs)¨iTFÖ%LßVÝF—¬ž3Láñ«Çµ±×ŽðŽŒ#¥ÃƒdDmDR©.£€*X.[žB¦,g/¡‡  ÷XP£å£;«:ÿÆú ’ŒSú³©pS­¦‘k ÃYLJaÄþYø šú L¹mrË ÏÜà¼a>Œ ¸†/ 69T¼â@ Ô;”;ª€ †M¨û÷=ÑBÝb–l–Ã(* ÏŠ4#t°¿Ä¸jµá—©É,£ÊÐõªÇ ã±Ù£ mÁ:ïu½@/`c,·äX º^Ø÷Õk«o¨o,‘- ¥‡ÎdÍ4ÃÌÐ…{4S7›-›-Ãd?²~ÌÄ3Û˜PnL°³7Ú‡:tþPÖˆ“Øæ‡eâ†v±„ qÜç¨2UmˆØàƒù`ÆP¤Ê¯8(¥JWÈWˆ(ÑRÖRwÜ1ÈKq£Ñáªð-¬-‰‹,5Ej#2¢ŠM"€pWu]¬ú ç½ÎavuÛÅì6 ‘”Š‘Ã°:d•=>›¢S ö)÷ÁikN$Ù§2UŠ3H1¨‡ªÇVÖÖKÄ¥>/‰8Rj¼wÏnœÖ¾„ûOÂ?òä$hê,¯YšÄ›\uáõh >ÐФ{Å$èþMÂ"Ù¢@ZàdædÆBÜñqh®n>U6õ9íùVöÆO­…·%Ø=éP6®È ‰…©Å•«né%oÌ©)„0BÐS§ú «¿­LRLî~v7‹†‰VÀÔ˜Ã&‡Â~…J{¥Œ’­–¯N!S³;áè-‰u$™'´'[Y¿öˆRào±ñêÂ)¦£h¦¾M{(ÕP çáÏžÒ|m[gg°:$MLÚÉØ ÕL•Y”\n°þOY÷Šƒ¢ñµ…úºúú:źÑÌѽˆ^úäÁädC®&™ž^+ü,(‹ ò žϭܵ]í’ß8Ïÿç­$ÓñV§N0=jæa•ü ÞSS¤Æ«ãÕ4ÏzÜÖŒÓtm[7I6q8æ4!i'sgÐÅ T}û×Ò02ë°iÉ)íTZ@,–/à‚Ù¬Ù&˜ "™j’ÌDùDgÒy#wMW›ôóeøSÙ»HFÿ ˆ¦¯j&f2Š;TjýçÏÉ%$ÕPHOL4$×Ôªuº˜î¾Ñ=3:ó„í `„U9€ÃiªÿSÖ½â@ݪÉÕ™}Ê}sXsšÒšê½µròTv6§¶¢R€uQu pœ»ÝßîÊoE¸ðß®ææo°ìâ5ÏA½+§ºÂc{ѽiRëk[3ZÓµjQÊpßâžúYjœU\9(á¯Ãåêÿ”9ñ³¿ÍD_6Τ2¿‘}AÁ¡ç‘yõ•dp€wUví«è{€»5Ìþöë«E¼‘dô:ýŸ¹·&Z{0¹ìs{3Å „d´œŽ3€°‚æ¡ÝÚ³Ž‘˜ËVa0%(å yf0>¸Š”±²£c¬Æè³ŸÆü’9+ÏT2¶ãöòqäƒåfûqG=³Ll,îÀ­þC(È2×®iCX¸­¥ ÂGã3Y>9sÃÂñ-E¤n>‚…Eˆ‡Çt¸·|þ?£˜ùñž9ØÓ /êí95Â2­Ùo*޲Xéô€zÖÖŒÓtm[×­\б Û?û 88 ­²P'”2¶¶ã´1Œí8}öÓhû€u~áó”{{¥bíî×áD8"™š…¿Æ‚|ÂöG‡¿¶båšw‘ŒÞ¤ ›=H>±UôÓŒf’˜ÅÞ(ϺR$o$£mQQÀÏOß\ã奵[{Ömÿ²Å4XNßœ}ä¾Nx'k`]ù[©ôaaáV¸·‰ž7è^q91yUYÇDÕíyŒ/MT¹zv»‹‹²S'í[-áÖÃC¡gëÒ°0í„ ¸uq‘Ôž!>ɇšÆ‚PÊ6ï* ¤)-½•œ¼h{ÂWÿ]q¤}b~^3_޽#§úP«Ÿ`Ô]Åi‰|Zý¨žµ5ã4]ÛÖ]ö¸(,y]òC! ÄT}3‰Dò /o3ÜÛòò›z;kÛßmËJÏ{.ÿ¶´Ï8ÆgÍ)kD2µâgÒvª|ªŠ™ÉpÚ¶­˜TQo%ý’ŒL¶îÀ­JõP—i…[õfF™;ü#£X‘HèíL‰"Âæ›³“ÏnÖlžÎšîLbˆdj4@‹VD7¡Ù&Xo8R.}#É蹟¦Jð1ì1×h"ìð„ŠÚ!lp’©oÓ¶qî¶Ñ-§oŽÔUz™ºl‹Ùúa~/•îßü>—ÊÉš‰^h OtT·í­ìk¶ùoMÚëßú_¾hõï¨åõœšB BûÝû§ê(´·º§ŽLU·Ám¡ Ô(JFûÍöW^]m±zs’'î‰.–ÞÐOÙ' ø]·üùŠBh„Ås§¹7¡7Q˜ŸsfÓ7&—Õcª_‚†.;\$î’â6Å2 ;Ežê‡÷3x¡t¯8X?k}2ž<“9óÁB-¡5Õ¤‡tèQîö» ¥ÊWOÛw,dÐÞSS°Ãí8'Y“Œ®H]¥K%î¹Ñ3/2¯Ì§L ”GÁÑOÁ§F²ð ÿ$?E²¸ÅâñÌñ>4t±ôŒžªÈöšVÇyªDFX¼AÌA±ÊØÞ®Š¥æp¶¤Þ¶Ðút2Öç¬EŒÌèL¸†<€8ƒ‡M›;|ÁüÂ Ö ´tž¡Ð÷êT>|/ë÷Gx‚‹L£UÖ]¸üá"³“åwÖ¾;ý,8ëÜ=€‡1Œ•ÊR_Wψž1”1´ ­ ºRAw²]KU«ÝœÍ£{ç€nÑÙmŸbÏLoó‹²›%òzy ê 1yab}Ö:uB*E§JAéêJ¥ÿbÐ óÌLARÜÂ}ÁqÁ=Ç{[šl™ÉœÉÃx¨ÍŸÍJGþÁØSPx©éõë-.^ ¸~Ý!5'õ÷V–D ´dp…Ív.;=:îC†¹.ö}‚Ä•8æ´™™ÃèaèJý©>ÊfX›J( ¡T rsíÒÓáî¼l=˜=’5ÉÙØ ¨i¶¥–§IÔõÏÿõDÐ0J®[\ÓÆ¦)-µõæy¬ÖΘë¹PÇx^¾lRXHS©àÖ÷à5åý;‹û,žÂšbƒÛ Önp e8 ¹¶Á.&‰•ƒSK&ƒ‚¦Ñýû¸FOoŒ1TaÔdûì™6j*R” þæ{Á­.jÊó÷G×ÔHzh`€äõèQb@€®?ÆÝÇÝ/Íë4}·µË'ð[c(¤+ÍÕ“æyNy®;³;üØNÀÊ’ª×$Š–6#ëôs›:)hJ–  }nû<ûûŸEÇO“§;â 2õ@‡‡®'Óò‚KÒzº`© ©”[TÕL‘š³mLšdzÝÜ`Ò}ôÄsž‰V*;=C7× bÁ}éwc¢ƒ-èq·ÏwÛzöóoz+d‹8»&dLOôÍè%Ë.ÖÇŸçÚv†êž©ˆšÀåëw}3|˜ö!ô5'r]\àÖÿÖ­2 %›ÍÉšq'*ψK³‘²?³ÿ·Òo#™‘ºùqƒœLV%·$^îû_Þß €1 ÙV®Ò6`øÕ0 $hþÁ—‹Y/Òzç‡Egš¿bŠT®:sølÑ’?|ç ×ÜåÿSx1ߣî-Ç—ªÀJ’ú9¹Ü$øQÑÚÅ´™F./·±ÉmܱŒ‘Ã[ã}ƒ~£ªžíA»e»U@eÀdÇ¡a/YEÍ ãî3Ù.Çû¸ä.Í-+¤Z$¤‹+ÑCðp)XjØ2':»ý‘“ xÏ1ŒÇxŽ¢&cÖ4Evvf%%„B!2¼½ËZüäð“{¶»©ƒ©1”ЉæäŒ;ÿ­ü»£üˆcà O³%ϳ7^}4¡uÀEºü­K'Žæ˜ÍŒTÐü¼xâÏôøzCåÌ£{÷nÊvßÉÍeƒÝÝÏø•¿ºL]nŽ57&†*ðŽ ß<5›?“ýÐ=Ì®3ðÒxíeìUµž—ñ0ÅLiÎOUO‰@t …YK6þ(T2Ùü=³¾.'DE[‹|nz¯<×.¼OÅ‘± 6„p×€¥%)°)µ¼ éħ ¾;ŠšŒ*£¨ÒlƒÑ·¸ï.Ó]SJ¦¨-bnOfϲííu/Xåа¹{,;w°‘µE'/§÷Œuæ‘©¸#<“l+ˆ`ðÿ­fàÝèyi:mº¡ÊW¬H–Ê)×?‡3‡d>'ÂGƒE±ìH»dZr#M#=›&‚o«n#Ac@ü°hÂ÷jå…[—{¯:ÙsioM‚`|¯Ý+žQÅUpu˜cØÒÏ“‰Øwx„º-;\舡ËWçàË÷}"~r=óz(7TÃÔ¼<þt:F¿¯¾ßœÞ\—cÇ6ß9ì˜Ë“ú{ Ìß?€˜ýý–ñ àçê¶2:<ÒÜ0]5ôcǪõûÀÀEÕüï@¾<= ޽ ?äÊ”·½…™Ÿ¸ÝSÏ1‹püÌNûxÛÊjLœ|¯³´y€å=ûš†ÛLIÉÞìƒmüòK°Ðöæ«õf=6Ö¯º¼vÍÊ€¦=”aj„dèQÕ{#õ’%K¦M›VK¾Þxx„•w4Õv#•œ™>0Û½ÉôI·è¬äŽ;÷ìM]·ˆ‹›¹ÇiOHIHÜÓ™ú¬ñmÛþM/^¾¢åš“ {¹¯Hš{¿ï}G®ž¦½?Ž÷ìIâ¸a†£Ãj hº¼¼¼ÿ§Yq›I7'uê´è}øýìÙ/jÐ4ÍK½ëï¶Ò÷Z§K— ]»ê{ý«Wwhw˜z´IæË/¿¬Ùÿ©e}õ@3·¹“%®Š½›`XEìJf|Bœ 8q›ás³§ ¼ZÑõJœù¡’%=r{\‘ÏÐó‰·k·êÊ•?üðƒP¦˜¶úLxë§\nç™íC ÉÔ-’©, Yë§©¦½ÙÔqž£HæÝ 12ÍçÎîg¬¥Ö:’‰Œ”GoòXþ®¢S†u¥áoí ìJµþæë-Ö%-˜³DiÝ”akïïÔ¥ñ~}ˆÐÜ«½ßµû¬ê­>P7&h©2TÂiŒùŸÄÏèæ`J§y¸z÷á`‡%Ú.»\V®Œ&ófL܇/µp¶¹#ßöeã/¹Ž¡¢™e³\Y.Lú7íZæšj–Š.þÁdÙ·Wç|²~¯ãG–?×·’=G¸ìYÙ£·¬—íâ/Ûe¿ò <òžâ Gñ•Û°´ã^lÓˆy¥øÐ·ÁߢkW×éÙʻժœUâ£bƒ§ðÀÂÀ‚UòìÑZ¦Ò,ˆ¹Y%_.KŸx%%O®Q)§®]Ä™6ŒÖ¼P*¤.þÍåyz"ZÆÐP2*wh®å4~R±èvΦ`»‚¬äÃRð§ MéÆü^ 0ðßSŠ›‘‘¿a¨ÛðKW·´Û‚jŽál;]Ƚ0Ô}¨žM»—¹Ç8Ç´Êm…®‚¾á}Ú¶‚ îJNHJV—XÇÚÓÌiÅ <«#Ý 0`I·Ý|šPPÚ(ðødɶ[téêV´ZZÚcE6m˜M <¦Û·Ä÷¶Ím)]ÊQs*2 þÇðv¿õ·±Œnî]‘Ïb9uRÇuúáb¦÷qtØ>þdÒTËegµ¿"~.Î{&¶1Ô¹© 9»eï€,횘1«viÎ5ìçn>Ñü+i§ ^÷<+bóÌÇ÷îцI;N–¤rSà Âõ_ÂLIÉeÒü戮ãnF- ^Æ¡sP+­»èl×Ù ‚F YÂ*±”[¢«P«853Áª/¸_Õ‡îýœÍû^é|ÒžÆÃâŠ9²œçª«Ÿ•1T±K1ïäõ_¢=¦Þ‰ÛÖ~+ºŽõ6,›¹sWÍXå>ÈÝù²3M@3`a’ðz>·|TT9ß’ÃÚ?,2rË_^³g›ŠH §ö0U>’Íq“};Îk¤‚¦ËØAº7ˆ¶‰D˜Èæg­7YÛí£ûT>ìŠüOw‰;“Ô·ÂUl峓íqá3I¬ŠT õŠšhF'»N_ßÿš¤HÓ÷CX·2·TÓT$hjPÍSÅ·AneMswwŽù…dƒÙôͲ;uwÖ@Èø)³’Ôœ$ù+º·ÚœÏSí~ïc4ÅÊ´)„óùÊç6÷gH&¼0bˆ i|±œá_t¾-‡ÑðÈc¿Qpœæý¾`©S[Lª§¼¾•‚/D~ ²AHhÖʹžoÖWhˆ`N–±ÍÕö•’¯`%ÞL êå¹/¿÷B@èü^'Ú‹Iñ¤HƒÒeKäG3Ö¥ÿàƒÂï>»ß†³öÑžôÅI‰Öª AhÒnU‘ÙpšS6(~áõ|C,Ìî]´^´3Ý9n¾3I_båí¬è›Å+ª•ÕÉ’äUY«pç¼ °"ƒ £á_n¦+Ó!t8…N¬>9 |)¿ífK¨)oj@öšöfI³òh|ÐVzÚܸš°<_õü󳟬Á›í†L™;_7ÿç?ôžôZÿhE{1S-S/%_Ь_pñÍ“oç<óì6ŒÍ¯iàG˜ÐDÁ¼{²˜W¯ã4'ßiS>ãöÝ.œùãA›ìï _.}ˆçÑ3+<Ä$ÝFš…qB{âG³„»åÍU«xç:rUx†?N#}ÌÙŒPCnÍb[Ò·›ÞþR>šÙd' v³ÚïN^×!kêñõÜ•ÖÝM‰ÌøÁk ¯Éþ&³¼dqr#¼’"kQ»¼ÝL¢ræ÷I¾®ûÉOŽ&2›‰³l;œÓÀ—üQ'3M0ãͼÁÎ÷3þ-Í[VHÿÏ‹ b“¼”´&Þ·å´|yærÜ'o,Ð-¸`½`ØùgðH–°K58[ÀVÑYq{öíü_Ëmµ›<“pLRgœH>ñìÌgùíÂà…ÊÂÍúÍ¿uü6ýéíßh4P]I(4x'zàù¢/亣\û’‚ú¦5aÙ H¨<4!N#zÔ!{Ä)Ð &mÏbðe—qW©ª4Šyú¢‘Mz‹Îú5ý7F; ®g£I'üS  Ø-®ÿY`Æ«moH(Éü”ù‡Úñ/ZïÔwJ;}”k!Þ8õ¾Iø¤Óóªü±;./ºûãi"±Í°mYÚ2¥AªÜ“,·yá<Â~ÅÄ)pÞWpVÜMŒïOûþßþfgÕ>­5~ÁHxTW2Ù2ùçƒ}ª @ˆ‚ Í­ñâ óä|TDª‡º¶w›ÞýBþb.šfÅgYzezœ2Mâ­ô5s YIöÀr½¼^N$é=zÜo&¬ÊXµ¿}?ÿrŒ ۙݤjÂ*àÍ~£˜{wFe¶m@ŒðliÙrOÎ=ü_¤‘Ÿa•ëI3ôæÞsýlžeŽž¹¹‘.MÿjÑWuñWIßH’Ì“h}ãÁÚÂâ×D%¡×¤(VW¢óèH‚:Ý}:ò£ÐLýIBš€øšù%[ÚÈÇìþ×”Ðyb_pF]÷‚;è>Ð~`Sö¦˜_Exï$)€¡=…ôA_<òµÐn<Tj*o—wÅ› +2Vì1îA":´x«€6ª‰\÷ÔvOûùžó«3VÇébºØ¤¿1Ù¿aô`Ò°×=ø¹ƒM^CX€6‹ÌMó“퓱înz<:éÑš?èðv¤þ*•tgœuÃY¨}Ô__w1þ^ÉÉßix'*›éŸi‚…„å4‰BhBl†yU5ïž,è< ˆ€ÝÆÝ·¤Ü’$Šçš1œ¡¥Ù·Gxè èÝlÁ)pΗà0½› “Ô“–©sÔñ/:מۦh ’A¬…xqˆãŽp6ÎiºŽ ܵçƒÖ6dmÅÎ÷½Þ´ﲪ©DÇc¤á~ÂuŠMóƒÐò°‡Õæž‚Ë)Z¥©Z'ûÅRXw7=’ÅÉ÷åÝ÷¿Wÿ—æÿ(,ºZ”WŸ‡äJ–H¿ø^Ó{4KÆf@hÝS¢rš„ 4ál&T¹î)¶~xGÎq½¤ólZ a¿“äLèLè£ÓšÓ³¬³(€ÇoB¬ÌX¹ß„`ÖIBKR<)…« NØðbIdšà§ÙðRɀʸÎ7,›Ê±š^nü–{sUô°‚%·|×Cyjµëd`ÅM<>ùñ¿ÖýÕp0jÁÞõ{Z¨í*Ùæ1AáÿŠŠÞf´Ä4`<ƒ*ÒËõMûkÚØ"£€Cœ¦½Âšh͘„¦ãèul&œÓt¸êÄK{á#gcÖÆøÍT1iç€ëK„“¸>tÂ!p´J[§Ù§áxSÏ:a´¸ZÚÜm‹SÇK6ÖJ&ã&ç-Vµ„è& n‹ƒ#lÒFÒ,èe9çÕç‹Å*2«c‚ÒˆU«Þ¨{–-)–cK­Ú±J≾õôò@íWu_÷7•3‚]]l¯äþ‚ûßi¼6ëtç«Ó£®i‚•‰–&8QÍm¿ž<€ÍôsšÛ~3p >of%ÏÒŠã”*ž8Éf\‚l†tB+3 tâ¢êb©³U*tŒxcYú²ã]Ç} ‚Gù¶ü&Uûù† ;;×f®¥ˆxÍõ°€z—UÏ"Ú#[$‡Ù´@~Â$/"¬ZÀ 3s.éܬžYX ONyòµêׂ,ÓTØTWZ·rçJ’ôM`1Ý T±]uoÞ½ÛZ¶yiïxlÃñ—Þà£ÖîÔß§/°² VÐÉj^¦õ/Ñú7™´þЙ^KÄ^P_(³–á¾w³B#Ò”ªK?ëúŒÑÊ€RP˜ä&¬Ąƴs]ƺø}Èm„o6á‡n’سÁNV­!‚Ó‰¾lÑõòú¤@R²?ëbBajÒÔUÉg¾­¡·Uóª¼A“ƒÐ„ ŽJ²ŽØ>ÅÓ¤i3´3˜`Bw@×yiÏ&ý¦8}¿p=Mµ†^S ×ÂÝ:Ñ oP•)~<|3ƒ[¼"Œ„fp†=¤°ìU–ªåéqL˜)‚•V±Â º²•Vºš°ôŸpQ}qºm:ÖÅÄÃÅïrÿoÿÛë§v¤N¾pÝ4EP„lÿI˜w–¬ vÄü26doØÞº}\šË—QН¯ÙFÙÇ;OQOIdžRäåmTœ*'Z¢Ìvu´,8UÜ:Âyõù¶ØÌ^¹‚r?K´JG(}8÷ÛŠŒ{M{ã!½¸xóÐ'Ø âFSS#˜˜÷[cã6©ÞÛ¾wAÊ)%IÍßáD¾@Ø.±i¿côï2r 0›³ôÍ8“ÄTì(ÆFæ&62ƒacöÆÖàe«¸/Ø6 ì]¿·¬ª,£íZ<»€u†l?⯻/؞ò#22ÃÁm9·í0ìÅô7r#CÖÖ¢¼íZZF¦{ø¤Y‘¾"VÒõúå®´®õÛ à4î–œß>K˜a†iÔM¹Rc‰£$&¢ëêPÚ´JG(½¹ùÆ qç$Ïiqµtzc¿ÿm~þš¡OÐzµKtKºãñÛ¨‰y¿ ’៼˸kCÖ†J×ë£Ø«Âöo¤á ²E˜y„#“ð…ÏLrL°ldnb#3D¤h¥ô+á›D:TŽ3ùKw­PÚ&­s“ÏÝ2R#3( TBÕYóÙ‘;´禜¶nEÀg››Åp¾á±¡a¸´šÕ™«cbe/~=øÝϲ…s¦%ûîíóþº©J–sÝ"û«Ê«Î!+»•Ù¶kvxäß…‚ZßÚ;E‹Dé¥C+³?gàqhŠ"¨eéË´Çr Z™5k~ ð8´ Y'Hevîä~2<òìB¡½ßZ[%Üêxljºñ8M€ ìkß·:=6ùô ‘Y²ä%XÈmøbŠkM´Ë+Úpº`qm!'ô‰/©.}¾ ™72C`ì5I5á)©ê‹ê Z°êãõ€0œÍl޵Ħk…‘ÖX‘~ã¶Öm#¢2»vqž<"42ÜM¿y3˜2…ïÛ.7×·|9דᱠ`X‹J nC·¯»LS K·¿¢â™^K÷ŒY±gǦã!N_·Ïÿõ¦ói9 G´”—¡ç4vÑEEìm·qÃËð8y2ßKZŠ‹9u£R:Bé¹¹þ+¸üiðXXxƒûmEzŒo76îÞ½ûÛ°µµ[o@hb=ëTP@¯[Çýdx,) NœûM¯÷.^ÌŦÀc^Þ·2>e>•§ÈK—¦ÇˆNí?|øiXh¾å-5Ñšþ©£5ï‘í3…Æpºa”EŒHçÓa#sÓ™ÁJåé<ºðP‚™Íïm<(wË–m_Îf¶®= ?…‘&¡ÙaØ1Ÿ-¸v-·0 ’ÿ.#Òú^#7ßÃg?ésŒrÚ §¹íã…›>^øã— sŽWZ…V»ÐžëÉ•hþ­L8Ð*¡ôaÞo«2Vh?óÔµµÝðœtWºKèrˆ1ÿí<[™Ä¹ßòóÝÃ<³¢³biêÒØJ‡F†Õ>Ýt|t™>ç4t«þþísÿ¾é´HÝ0pµ²:&^62‰od†zB[‹k’jÂk8N³áPFGÊœ}Ë£²™™áàÝ-—¾Æ—‘!‹‹QÞv99#ÐýÓž˜Ì7]ò1\7­{¿8HM%\ˆ'Ùå•RG)ÉÆŒKA a³£U:BéÐ…ÎiÙòlHs¡çB¬Ÿm7õ!‘oÏoP5Äü·Ðó~ËÎnF#]G¥.Š­ôÖVnÅ\8§¯Û¶Ïÿí¦sZýuCq ÁÔ(k ÁFf"™¡ºª­À$7y©ëî[_vãk+¦×äÝ·}ù`lf˜Ff8 jmÖÚm;Gè<Ñj|Ü,Û0Çc|ÝS¤%kýöÛo?&¤‰{¶Ï‹\÷T«¨-u–Œ ƒ•+ã´ÖéÆFÁ†o#€‡öœë97?e~œ¾?Äinÿxám/üÉÆKyúÃÀ-²–$’: Æº˜à2Âlgvƒz W㼆·göòŒå‡Û¯¦7„æ”ùT¡²0YûdS!6³cÓq6‡Û7ª?ž¦ÿ›Ðæ¸2=™¸§M(B³Ï´͈‚3»[Òíx±øÄñ®ãeš².ØŽNkz‡§.AÄ0ðUåÕÎ7aŒkp³NšëfB3Mïm<øØ—`¾÷5,I_rÐtp|å.7„æxçñ˜G²ðyÊgÙ°"â³Ï쥽R4”¢[Ü-Ê%´+c0dº2Û(gf§ÌÆSN±ÁYËÙrm9Ñ&)öœ08 ÜyàY§8áð èÆ^ÆÐÈrf¡M̷߯ú­6ÿ8p«Мë9¿ žC€l—¨+Í—†»ƪŒUûMûQMcØ ðâí8[õ$Õ$TÒR#ž×Æ©îÔNY' Qª.Ûn ¶nÓÿ——?wà@ì/ëÀU¨°¿çò*éúUƒ¹xñ‹±üReè Á+:ëö·¾2ĹðÌmÛinÛ6”dtŒ·Í˜Eó¼)ñtà—ÿuws®`úš5¿çù÷Yÿ®ôy«~Ë;wŠy–Þ/‘ÑáF¦"»žWTp{Ãí·7ê³CåÁ°dÉK±üreÿþ«kÛ#/ç¦!™‰ad®!ÒÈlïÜ3såè(.YÑk_‰«Úµ+ʨÊ5í½£µ6Ù²ìANˆ‰¸±³`óæ1ýÿóÏ?ÿý÷ǸE‚ÒÒêP±ëä…ÅÅâYuÔ¯^ÔÜüÛJη†¾°Š¬J¥dC|ynîãðÓÇU£âÆ©tT¢wYãWîMÓ++È¿ô#ª)'a¥ÇJ4·x{äƒ4YY«c"}qÊâ*k•#èÑIó~3›Ó¢Ö;ƒN¹ î®KT#ã"\rVŽ»962#…ŠQ Mhbed¢ûr¢ä¡GhŒF Úf'kkQÞvKô<怙‡•*ÕìÈJOÀ\z¹aö¾ýÓOTé¬þ8‰FÛìVz¬Ds‹·GF“ž¾8&Òe”laòÂ}ûFô_ª‰y¿õôD·$NÚ© âîºD52Ðkâa™›O´’VáP³Nii‹â'=EœbQµÌª³±‘ᦜ¶nEÀg!•¹zu,Àcä8MO '®#4jõœÜÜÇa“’†ä§=îüY•Ë—6é…ús—âÑî°ÁQ5û„•[ÑùÞüqKŸÊÌžýcX€Ç˜¸P«SWÖ R™3gr`y§A{¿A*SW7à1rœÆE»âJh†02_×Ô‹ÐkšZyQdp7ÇFf˜PÐ @9¡2‹gÍzà13sU<¤k…ÚEÏ FF}öl.,À£É„ÌÈp„fóf0e ß·Vk.-­†xÔé&´,qMa³nnþ-,À£Õzì:#( ’5A,I°¢ØÛ»âb®ÁQ5û„•[ÑbVœHk wg“ööŠÊÊÂ<¶µÅ`ÑõªÔU‡»û™a ¦¥ÙgÎlxÌÌ´NœûM£é.*â|xLNîˆ$42JÆ¿‘!@;í·õ3Ï,_bÐÑŕ͸›c#3ÜF „¶A(EEUÕs°FãÞ¸t(‘Æ.·bdlååÜ ÈŒ Éÿ ŽH*ÓGhür^õô¬ô¾‚ã§ óTzÕÙ8³ N¢Ñ6û„•CÑÜâí¦ Ž •éóDÚ©ª©GÌG†ÿ/Në¬Ð6û„•CѾ‚‘†Ñ´·WÄð·¬I[3¢}ÒÒìó~Óh¢­G#˜’qÏÕidXç }ï^fŸj^l®c«ìuòÁì3Mììwsld¢€›r’Ðtt‰ë¯“ø$nÚ=ا©©6´Íž Ë¶ù ŽMÒо0´à5«À›:™ ˜å400"}¦ƒr8(ª àRwìa¾?GÒ×ù¦!À‚LŸˆ~Ùrî…3…n­ìÛ¿ø} äÄÏs‰ûäÄ›F«#Ü”“Àð¸Ú•¸Ý:1/ r@9… ŒW\/a„; ôB]pNç%@©]‰{F\†=t;ogK³Ó%é•=•X£²|>–8EC2A‚©½uås–}V ³”UHp*þ]M 0I „AP™*FäŒPˆ Í#4˜Ð JhøO©RÞrùÐsŸ™caNÌ™‰%ŒÁ0ºl41Äš´58ÃÞ¸ƒ[ì– ,Îiç«}Sƒ€„F@è³7E¨Å„#\b=ʃ’Ðx‡Š¡AAb^–#èà!^/^‘öë… Á£Si-jîEQQè+ܧÞÇIJkÐ;ëôͪo>;éÙÐ[ÂuAùfo˜ŽX៹Â;+;²k­„_BJHvI\JWpóëÿ[—®¼2¹/iÅÊ3æÔp,ưxy"ﲇBV"*ð¹Wî :1¡¡ƒh„&HM<–³ìœâÞ3`²<"Áý# ”´RA+LBSf ÉLVNfXæªãj©²¾eåÓíN‡É®ZÅ–í¾òoF©!‰ ®5Òã 3º[}–©”ç ðˆ=„L»õ‘Gš?ÜOçê{" Á®ËWä“Sqùëh°ˆÂ= #h™—ô i4„O9’ÐðCCÒtfCÃô£GSÀ¶tÆÿ"Ûôj.[F‚z³Œ!€v£JÐ;H±Ö‰ Zê™”iàw‰¬™ ;§ùà¡Á fh"€eéùóü{MÈV ¡™M¿ÚYš%šmÀ/…î^Q ÔC ›uD^Ú‹ ͈ o#4Í”TUAB#öÀ»„!X¶ðð¾5ûû]—Ï¥ùhÜ}0†À(²ÑÄ‘‹·ÉºƒÒË„û®[ÙÁk&,›56öÜy§cùòSéY„R Ëâ†~8M¸×D9\[ŽÔ¶ÂÀ>ÙØ§–{3 ÖÁþ½‡Ýãeb:ƒ1¡Q¸Idc$RŸÔC{¶msʉõ3üÍp§75)l}«ç=¢ ’™ò &¸@jZ^%<³x*îAƒAï×w;|„OÌŠ‘\ÀÍ“×dô3¥}Ó^â#µ¾;¿ÌPמˆ‘5¤Ç#½p¡ç®»Y¯§Dø¥¤–íkÖh>øÀW\×¹§×²3@‰öÞF…»­FÏe}FX,ßÌ"еÀ‘ Úñ|Æ „Fê%½¸¢w´„¼(»àö1˜O²ÄgDýoC1œÝ·w¹/-¤|&ì(a !+Ìöe7‰›P]EP«RWíêÜöìd1yýÓt`Í„È`ðgeõ±™0Àf&ü4®FFqÐÛï5¹E ͶK*Þ¢Àcd`dH áv‹ª«…ÀLutž¤ILBãå-€†Îw¦œ¸ÝÑ™zÛ’Å-ñ‡oÕU›’ÁQZœ—mc nçm¤³N«ÓV‡Ï:¹¾ú̀云×Èš‰èº¹ÝŒâ{xÖXrí¡RÁOãjdJv,î72AŠ…^|+5”%‰kpÂ!¡„¶Å•·]Z|ô¨ž—¸qU•âw­­P<ÕcQüë_â3g0¡&äo¬bŠ­{þǪª{Cæ¦2©Kè N>í×fü49É]?wî>CƒËF–^¯ðÔ heà+;ÌÐP>ËÔs•·;>ïÜ?ÆhqÊâKöKÖ@ß.*Š?ýŸÈ}Ý6à‘5Ò­•‘ÎkËMó^›Ñ&ŽÈ‘›Øû¬÷ú ç5¹ihd@æÙœžsöî¦>uxÎÞ½ê“]q ¿#âV–úé7Ooõºy ó‡lFØÐàºï>÷êÕD0ËYRËÂúzñÙ³‰Ö6‰é·1‚¿ óÍ Øýœ¹FG­ýô•9"ej’± À.ÁSÙ7€.¨£ Ú"°hƒÜvªõsç×0õ³ãáç^¨™“ŽÏP©MÕ“/4›ËMO%¤äÖä[÷vî½'ëøÖùõo8!²fŸ-ÿì3nœæzîBº\¢¶6ׂñ}$ä¶ÛAŸ‘©S _n¯‘IöÊô. c›»ä4ÖÆ Á „³àB]û¤™Ò«qONx<âsçœ÷ßê8¢€ÈÇø¹Ü½~½âÝwý¥¥,ï‰ÆÛ é—RüµQ{n.QÜ MRåÓšWÝÊÔ&§Z ëqßÁæ ÍUAkZ€ªÎHb²'cãoWÓ1žÉ\“ºfOǬˆ!ÝZ©{Æ ÕîÝá³Kͨöìq—•1’ø.A0gd@«2ÀÈÀzKz:V ƈý}g‡B[Ü”$âAš°¹9˜%øL.‡õ‚––Äâ‰u5 ÖÔÌèj#|>’¯°#†¢êÊËOÇ|¤c÷‰‚n¿DR7s&¬Ç}c8(ô‘†¤m4¥¢CcÃi¥ˆ¤`,ÓÚÁà†6í±öƒ¢?þ^ñˆO‚5X)‘ð̘á+(Ð|ðrÿ~u°ž±™¹õMžéÓyðš\J¥ÆaLe>„FFp©,Xƒ½&Œ‘BðËì…<-?â·›Q*ûßš&û¯=:U*è`BÒ³gÕ[¶ô缂eé¹s|4Më?©)9I5Ïm"X@y¥l (:sÖã΃1äûò›EÍ4à†ÜEöñÇ©§/Ïò¦ïÕ‘6$4°sšÁ8MÏ=÷ôzQ@悞{ï…5üˆöeº7ç3ÎÈø¤¾ ðJŒ‘?(v?ëXxŒ ÔK 2y§OLµùã'Ž•ËIǵí0w):¯=:ívF.O¨ÆIBÙŒ¨±Ñv×]Î+N¥g TZXñ’óJ}°{ʪeV·8•[ çSrªR„µ¾ôæfÜy0†u÷2Ò”`ŠA}é/C©(ÚN…f™X&‰f­±ÛÂ]TUEµ·ÃÂwñ§òÚP%¬%ä„D#‘x‹‹= ˜‹â=Ót‘9*lšmđE0©¶@PçÇFc¤p(K©ÚŠ[o…¯nÙ4gþ%uçž99ƒ!r$†t:a}0'šˆ‹ðx$çÏ;Ö®í£{D@LŠaÙ±fäìÙ¸Î=9/«çíö³N¸o!§‘WYqçÁ&¸ÅÛƒ„ѰM§€žd²’͘ª ašM3×\XÓ·îw£»x—´Žþ|»æþz äÀF#¦c&¢àOšTê+/—íØÎi`ÖøfÎL¨ˆ`ÁÖ­cúÿòòç®^ëE¨š/ô·´·Îê¯q{¤W¯rK¦ÓÁ]!´çº|:7÷ñ±ˆn>PiYT–Ý'úlî)@•V2«KbQu ‡þrøé[o,@(­t´?|öìG­—ù¾îx|vñå^Í´¸@ÚJ`‚.Aí]ÏpýrmÆñ½ÓZœ´úþ·6Ï–ŽÒ£:sf ?TT#$˜¤Þb’J©Øæê™gã–P±íTÝ™8OýaÕ 42uu1ÿÖ‹~Ÿ¤®nXyÀ±‘ÁF†OÌšõüPŸþ¦Z]2+¯÷œY ]L¥Ÿ=×Eäj˜š_ïqëòrØÇI£­vwcéâp 8Kq°<Æ•à‚Í›ÇôÿÏ?ÿü}÷Ý7ÆŸ$õ\"’üª’+¡·?ø°äÓGJzßÊl6VxÁS=>·¦fr}ýËc’½¸ÕÒ–>Ï鸪'´[,G€xuÒ!¾¼°ð)øéSO=…ª¿QqãT:ò~áÂO£û1€mK¹|âÒÿ“§ÈAJu|~þ¹Tà \u/ŒNúôé?(/8C¡¼èïŸáÖ•Í™µwȹhAF­V”Ç`:£OâN®‹(‚™x ¶ßYë‘æI“nìUW—b#ƒL"™Ïm asÔ\0ü4Ò¡‘™5«5ÉÊ"<ëu--¾ÃA}QRÒÔRi>h{ûüK>åÊz½~,ß–SNŒLF……å…异õñ;êÎÈè/‹iÊKõ…všñŠJŒaƒD¡¿°NTdz\iéµÎÌìçSNþ’¬”! ŠüŒŸ7qŒŒ‡ b#ƒ1²G5Ãä47Ï>uê —/‰\fX†5|^+•JK;d &==Ñfš‹Ð²³…mm‘ÙÇI— ÖÃOã*Ý”“ãP«ûøC î.5¦ wÂHp[³¢V`ë96ëÔ)>mæÌ`ÄCÖøË˱^†€8 ö1>ÞÄ 024Áb#ƒ1" 3õüùìæf±ÇC† X†5²[[•vû€JX“ÕÚŠ'á $.¾üü¤ÞœW)¾F¯­3éý÷}……üd‰`HÚ—ó ¼1íV¯X˰ß#²5in‰Ò/¬Orðlk wñÍëøâ?ËLÏ^ Ë,~LÞKdùËÖÓodþ<}‘Œ‘@×ÑæA‘4Ù7³¬ëìDÐs@âæOJ 9õž{üz=„¬Phå1çU?D¬ØKxqÿÁ­™Ó‘|:ÍŒÌÖ`ŒRJê¡=üË•°/ÀFc$&ÿµx¯•†¤þ@O±ÏÇ÷¥>…@ Íðœ©Ô×›óŠ‹aG¸V‰1R[³âLAeª™­Á d”ÌM»ù—K@àÐŒÀ/º–è!«ýÚF>±˜wÊà‡š@˜Ñ#ñáŒÑÚšIÕ=b?2[ƒ1"&JŠøŒ 32¢áÇí1|t¥¥õ—½Â ˜î›SîJMåýöåuëè›Ðˆb/ƒŒUP€ ¼ÆhlKÈl ÆH ¤”NÚ‰€Ð@ÈŠ|ÀÃ. z½C¥ê󠌀á¢X`MÛØ²¶ŒŠ2ø%”$a G¥]Ï¥HVÌJq Æèl M²½ rÙÊ›ÈÓÛ GhJ{ÐŽÀȽF‡Ñ`  I^š1Ûëå"1–"[ssa ‚¸rÒ ;NÂ6T"®í”ø%¨Fh..X ‚ŌؚìÖÖ. ¸ÏÖ@6ƒÀÖA1…繆 µPmØ‘ˆ÷5«ÆZÀ¾iÉÍ…/ÝU[QÙŠ(m7 zÊ) Ô'E¬wÍÖ`ç cT¶&­:Í¥8ÐÖ$r¼^¢ÕM¯‘‘zVÆ(àyE¬™x"€chFØÛâ ¤Y²>¡ÁÝcp‹ÝbÝ éÄføP TH€è52Øk qPðÈjE¥˜B;OãÔÖ$ôô6&4ý„FÈJ°‘Áµ×„j„†eÀyhF¥@²ìÄhpÜ ·ˆ2%™m¾6$FFÃh°‘Á)h‚ö üV‚DºÉkM"·O‚š$a’œW}Γd%°­Á9¡‘Ù¥ š\½7\Q‰‰,IV›· ‰h «±¬ŒÁE¸4N4”ºL* °LhFŒQ çq"´5x4c͆t©]jTp± AÖÂ8"4ØÈ`ŒØe¢ì©=©HD·yÚÒ¥é Þ> Jh$$7¤†d÷nÊ Ð`ŒÔÖvM‡J:¯‡ Íx 4"øñ¼6ƨ`#m©V4„Æä5eH20¡%2%™&Ÿ‰g¡bøBSNØÖ`ŒÒ¡³"#4\¼^@‹µ0"¤ŠS­«Ÿñójs ÀôÆÐàŒQxMé4Ã$F:˜ÐŒ–Ј3>#ÏB °,¡Á¥­AEhz=R1ÖÂÍ™!Î@2ë¤eµ8†c¤°QÈFhŒ^c†ÐŒ’ Ø‚HDc[ƒ1BCÙ‘Ùè&4£54b4†ÛŒÑÛ+²x½Ä NLäJs›Ý¼î!%XËEާ²©]dVƈŒLzš)§&WS¡¼šQ"SœÉ­zçØÖ`ŒÒ‘Ö“††ÐxÛðÍèP +hp7 ­ctD'VÆðÑ-èÖwêù—dƒ!O–‡ Í(j(8„d&¹›èÆýcø°P–ÌîL$¢¡­Á„ftÈ—å#$4Ý$62Ã…‡ô°€Õ8ä¡iq·À'²bB3JpAÁ^d„&•Á#4#iËêFÃ*Ú…†V9A¤°)]&4Ã…•²*¥€F“F³ÙÝœ#ËÁZ ßÙìqÑ.Þ$†òЀÐ Æ6,”%™NF"ºÖY›ø4 Mh„@'Ò¼>…†òÐ*p/¦ó„ÊÖÜP#£dX £CM\° §Á³NÃD'Õ© ¢ÉtUã¬)VcB36C#+¨wÕ#-bEjFi0†ï<¡ ®sÕ)а Æâ8ÕºjyÚm;„L&³lÃ*À:é4‚5Ûб¯vTOQMÁ„fLÈ—åóŠzBL$ÂÂÙ³hÚ™êêØ™êêÒPYÄ(/XØÿ–#Óú¹‘qùËÞqþ¤P 62702µ“9öO˦ÿ€Ê¸™ªªynŽzg1súë#Oˆ•8X®ª¡Ù¼yLÿÿüóÏ?ñımÐz–.å¶RšæË|áÓË¡rT:”tðàwc(ºÈ;ì`Ç.Xv(ÎkÎë+½QÏ\¶ì×Pô‹/¾ˆäŽß¾Ú´‰¦( Uoãm3FÑ~¿‰ô;Dû÷G¹Û]—¿Ðyæàϧƒ‡¢ž¬XñÊÚµQîÆ_ì¸|÷ì¦zÁAõ„± ï ßä ‰I³C#óôÓOÇö;¯°re*pÕ¾&/¨É”EYú¾oŸ¢¢â™XVÖÅJ+º÷²‡òÔåìû/~~ôË_þ™ edŠBp/¨/H¤ÞCŸz<õ„˜`éҗׯøÃUV®¡¦¯/ï­?"O ®}Û_¸²H$Ë·%ô”S²8™d§M2MO×-Æ‹*1nŒnIw²7•ô+Ö+“Ô“°Æ‚šçzÎñ#KX? Be)-1"›Ð†U€q##îNö¡12gÍgË’ËÆE+ üúJT%uŽºTI*_ÍÁ?·5Ê€2@  îNCÛšš5ÛF·QL‰µb-ÖÂHQsõһΟ°ø³t©¥Ó§·œ_Ÿµþ™_½ùvnõOŸùò긘ÇÏs]õ!Ûa’˜Ô5ÖÆh—¶;Єʳœ+×–cBLVO¾d½´P·q`éÏ Dš7­CÒ‘çÊÃÝ c(B#éÖ»ôHDWš+Ç‹­I4üä‚çÇ_ºs–ZpìlÅæ J4‹ zñ{_~€{ÿçMÞ.#Ó“i”'9ðÆ ÁnQ7|…ÞZ€j«2R |s‰îé Žég;<4KgÉÇÇÎ*d‚__™¶Œ·¡àHdx2LR¼Ð ãF}^Ú‘æA³-åó™Ù)³± F¿Ý3g®VB@D‘2aùY3O1Ï·öš×”áÍ0JñB'Œ¡Ð%îJö' Ù¾­”ޱÔ"Âô8aXC0ÙøÎCì:9Ž,L¢ÐÌHšñzíë M•¶ w'Œ!ॼn[ëë›ô1Í.Be! ëZÉv§6Þ„æá’‡±F‡¼øÖ+¶€X¢yã;·?¹÷©6w[–,°ða`_šEh þÇÆ´KÛÓ½×2Ðl"zà‘ XAœ3Mï<¾0uáxi¨D¡™š4µÞQ諒üˆ\okà=Ô!é`ãüLÂï¶&Í“F|~Û¼CªËYã#LË­€ÚFÆ=0¢²»rv2¡%~úÌC¶çzwMÊ×ÿ°ïÝü]'ø¿Š¥t~´3XƒÁ$5õÏ7…p˜Íù ›³ˆVñ(?ÖqlAêLhbäÍ¢UÉEëEžŒ `Ã7;Ð-3‹Í¸Ga å6=ߦÚV‘D“k’AjÀÁˆ ›ÐƬƯPO6˜ 錛©2WMNš,Œ›}≉åÚrج|JdYRΩw1#¿:Ý:÷+ŒH0Ó!íHo»Fhîe»É¬},ÐK‘,â6e ûÅÌä™X £Ãò aõˇ ~¢4+ëõo¬— jì5Ûþø—/¶r£´;_|ó¿ ÊþãƒÍe,y0‘ r‰n¡{ª!óÝ °¬Œh‘µèÝ×-¢ÜÃÊ)K6 ü:€øpšãÇç§ÎGm5úO™¦ì¯õåG–‹¡!ëAFpߺ’kw'¿£kÅ #*:%Ê€2QjÌqç`½` @«¬5×}Ý–&9@ò›ì„xÖñËå|¬ó؃…¨¼zåÂw>­:fög§¦}ïŽÕ_Ëã¬Ëøóñ¾W϶µyJuY÷¡‰#„fªš‹ vÝ< |…¼é]@¸‘íIî弪€JÀÌb3ª, mkä­Q3Ðøè‘’ÄvÆ/'c€ œê>5Ž  ÅÇO^N]¨š_ö€úï:Úne*,/Ð-8Þu|)„&IîÜi &4‘0È ‹º…×”–R`‰·\†eŽwÿÝ‚ß ¨ÿÑ9÷Oÿýþ9IÔÑʃ·½¹ïkÏmâú×–÷Ó“»ãé•S”"„m5bhÄ”x†fƉnž °€b€ßF¤ýäþdV1´2#ã~…‰6y[¶ëºgä!2ï·dÁëd†Xïg]ñ}Æ|¦@Y á ³Ãd3äc6H_°X™zk_.K_v ý@¼¯DH°A8Ð;É^S±Gß,kÆj³È,òÊ“§FyxôªS³âjaÒ¤i²Œõÿ|à–[’%$A¤LÁ¥«`h×Ãglzè´lŒ‹ˆ…º…ÐsZ‘¾"Þ‚BYÉi ja;BñO^æÊiQ_)ïÁùX1®MÐ&©iƒ{CxåR¦iiø 7n?¼8m1ÖÂ01ÿ¾lèqœ¦·ÜÏf˜WÕýÃ6 Rœï9ï 8BE| ÁNÄvVzámcSÀUæÍ<*êñR^ -ÁÊÂèG“¢)ÇZ¼aû‚O7&»5œÍôVÆ1Œ}Ÿqßʬ•Q?úÏÿùó¯m~±TûÖwï‚o=î&¿PÛ¸kGê©6B¦þÊê•¿˜§Ã#4Cšn> ô漂”†]DxÄHÎ.Œ&§MÚÆ î]á0ÉLiæ\iKaäG”AŸT5'®ÒtYœŽ ÍÈ8 ¤/ýã4Ø „”’ÎIžs¤ó³’´°¬æw´~7 6R6’%õn}£¬« #òÆ| ƒÄÒHb°™pŠsìmÛ»*sUÔ~ñ__õüì«®KýÊ+»\¢6&à·ìM™Qûü׎~¡ì/}¸ßC#i®ñAhnI¹å¬å¬ññ#n.`°R? ¬@Qˆi´XPãôäm¢1ÇV¸iÇ"Ê Àf`¥#5Ž©Òh–>ÑubQÚ"¬…QpÑ£vXÀfBX‘±"Þ³N¡@=ṋ4=Iµ~ì*è/rÕ)ê°Ž0ú᥼’NÈt!q ç4<°WÐuÆ|f—‰ˆVÞ²4àn=ë§%â,xSÿÏ-ÙjUT0ù¹ÅDÒbãƒÐÈòRUéËžøè¤íA¡Í+t6(pÃGƒ²!LÞ¾þH8§ ±XIÇÓÜœ5ŸÕËõx“íQÃ/`{²ökoÖb•©´ß¾÷®% I‹ ._S¦ SXƒ´ À3œ3è¼Q÷Fl¥ljhØ®®œåHë ^!`ƒŸ;O¤A¯lOµÍ©„å_ K°1\¼}å 9y2² ´JG(ýêUª´46pƒ²¡ÀÑgkBœæŽO¸áÙ!ØLaámõõÛb"ýpûá+ú·Èú§~þÆìXøù>ü¤:´Ù!»óØgϾrÉ ¦åç¾ü…¥ eÔ„ºßêêDEE~p}ð&ó!ã®'¿CôÇ÷õz‚\‘¾bwÛî/}9&Òóò665}yÌ!úÒ™.Lí¼Æf\žpŠSä,ª“×ÅŠÐ`#3® MÐÍòæ¥]KûŸG¶/xî¶‹Y„ï«1Âjc—¾§mϋ߈êôß»b| ¨–È3ÿþ­bh`G§q²¶%mmG­ÿþËÿÐ<ÿ&|½j[”ºèéˆæÇ¯‡êמ¶]zN ÙÌÆO’ׇAÀ·°Ò‘Þ>HS¯¨Õ¯¯'6;Z¥#”Þгgy£¢1ß‘?"ç)7wULD{hÏÑŽ£+2¢,ú{ùÿ=ìùù7×K¯¼ú¼m²Èþü­ÿµð¡‡’ºîýòD»ßš›E bM“€$ŸþþœŸÞU¹–{Cö†O ŸÄJº^¿Ú—M›8eÃ#φöp¨nTJG(ö±õë¹yx{g«Q×Ú I–ìg3/m8×eJɪ#üù ÁÞýûŸ€xû¬ÓNÃÎõÙë‡~~~píZ/`™Ú®š%+§Mœû-/Ï¿r¥àñ?NŽ\Óô£Õs¶*ÚRŸN ¯„¾ÓÜ”¹ûMûÇ(’˜ŠŠg`!› ÿHD“Rgt¶4Ù1ùŠò 62ÜÈÈ@³¼¹ØYÌíµ§|¸éÄ{YuD·øó­TB1 “.ü¡vèÐS½cO…Í@|ÔüÑæœÍ¡2ä1Ä´§ù|œ&Äf`e8ʼn­µÆI„Óœ½­àþÉÐTÔ~¤ûÙ?½yxŸ=«ÂÂçCœæÎm µmJ$›ÜÔ!Qb/©VUÇä‡#œÛ†@«t„ÒcÕÓjT5¥¶Ò~6óç §OèíËÙnðyÔû70‚ÏCBœFÙ™6à››÷Ž]úÅž‹BRXª. ™¡÷ÞûHKŽÞ=œx÷[n®ˆOo›’[ U½räüu„&{Ãζ4ƒ»Å`8ÎfB3MôÔê'®¨þ®ºL×RÉhY†'#&ázØÈŒ_#sEu%4ßq’å&—ç¶áückëXG?nþx½~=42á•!NC~£ç¥m“c3±úícÑøøÈCÓ?F²&cÍÁîÃw/™ïvÖbÚ[Cq3ßvô³yWV˜©¬)Š<'Õ›J²¤IjWÕW‹ìEDïj8ó¬Ê÷r‹X‹\÷Ô„œÆ:ët<¤ï4ì\›µv$l&øâ?·üœ|ôžik/ ^Ú´ð÷Ç.5X®­3ÐËõðu¬óX¬DD®irÎ=û§Sÿ¥”:;Ò:N±˜u¿p œ&‰©ØÁ=¢@|(×ݼõ]n¾)wsô§$ D4•ÈM'_š^™±òoõoiZódŠBaì4Ü’ÝzÚ#Ú´ó–„´/`&òIöIÕªjèBá^71ÁÌõ•Í-}þ‘’Æú&³Þ.`‡aÇ3ÓŸ”î¼öÖ­Ü4îŽ_¼ñ_åþŸ¯¹\uÿ}Á ÀÅi.MŽX’f}î¬Çpd«åß_VþÄÖ£e}¿Q¹3çΚ?ˆÕnYf¯âàlY|ò‡»_È´´kè8¬š‰‰KêK¥ŽR+ðr'›²š0+O#Æ|ÆzfuÖêõ\ÜÌ#qŠÈ¿I#Œ Í °çõwïkãìòî_ÿã9‚²üðK^wsƯÒ ŠŽµ¾ñæ×b–a/rMÓÕ¥Ÿ©í²;·-ÜrÌi@hþ™÷ÏÅx Šfy³2  ¥#ºB(;ñLoÒ;<—­—£.ØaÝ£ ˆJ“+&y~> +nh|ó–)ûçÙº/–÷ ÍÞ“wÏÒK_˜óBL¾?7'Êž Åt/=ñå·×\Y›&7õ× á$Ǥ ê °b&XÀ\T_¼½ívXÞË&çOðð&ý¨÷½5Yk¤”t ›ù–E6Sš\ªÈ~5ûØ­Í Ëi”ЬþÚ}V—Jd¹=Ïq©®î;¼ï<çJUÌ®\Ù¡‹Œ>µé ìݵ‹+Ê|±%|ËdU@•æI«UÕ®Â=oBâ¢æâ4+·PÈDGíÝŒIø‹Tx¿éýMúMbª/{ÓOvlÞÔô5w 8m÷G Ÿ]lÿï,Äú&(’xåöEwÿm׺½VÆ5oŽ<§XU¼ß´_\ŸÌWqGŲ-ËIs†¹¿¾ÌV¶%k X5 ç|{C9£/E¬%ºù”~Ðó·_ýG$›߯Tœf3_æ!l&19MBÄÐlºúä–(n.¬ÜþÔÀ Ü;ôw|ÔúQ ¥ÛfWE®ib öÈÝ{ÅT`ú©é>*³–ÓœÃo¢›n5ÉLŶâ >%S#Cgâ-M[îλö|…læË‡Bú2€ÍÀÊ[¦¥c}å™É÷—>»ó³þšûòï{·éÝx˵¦XO®9¹øãÅ2ǵ…ÜÉþdM@sÂûÖËDÃ÷kÓ­Ó-@x„Õl ºùô—¬Bk;]?`‡íö#Vêÿ©åÛ9oç²>Š6UX­õ‚Ф.P žpà4ð-¬L]¨pòÆì‡:¹‚®x_UP<¸ù`Áå‚üêëÂæ9ó<”§6p ÷½‰†Ýž?•ØJ¬€ÿЙª±Õ¬Ì\Ù_³æŽ‚7—, ç4!6+#‡m0nˆgW̪h4nì‹ú¿3çÎ]Æ]^6î¦ÆX`¼2çÊÒ–R*ÜqÚéþVÊ„B½½¾:p¼Ø>åS6eÑ£åwˆ®ZU½Xò€€¼nö㎟O×¾Ìx9C\r]ZÈiîþ}&4Q0à+ŠpNb3°~4àdµP½@·`§q'æ•zm:4ûÐìôÖkþ.ˆ=3v¸»ß„‚‡öìrÿ_YOY(t&”u†Oõ¾»9wó€å”8 f3c\$|qÓÂ'>>ê r1˜ÉâdhjNú¶ò úêì«Ý™Ý·~r+ÁöÍp»ŠÛ‚W»Ä]X/¿»ü»ÕÒ¯gtœœÄi¬àò`63F¬+ÕOKÓ¾t¸oNùþüû÷¹ÿÂèÊ•‚€`Æ‘}¦™%o—÷¤æ$VÊÕo…F&Ý·¾HWfž¥›¤& P…ÂÙá•æÿ3ûj|™¿Ê/m˜@yhBœFòn€w6±1‹›ury"°íúöÊ¥•K·/•x$¡)-],y J[…;áÃ2/_xyôq$¡36‘­›n]’¾dˆsÄ4‰55v¼°qþŸOV_íâân×ßÞíÊ\ž®ïwÚSU†$qR€>€…¿È/ÖDkþ„|ŸŸ|˜žLº¥Þ¸LdeŸ–SÏ#ª,êŽÄ©« ˆ(ù<À5×µhCÑgõ?;—î~1 ¼bÌÉ…ˆÍs{¿±”X7#æ AF½ò'`ÈVg‰ŠD½E5´2«õ:O/1ÇàöÇg”¼|]I wÌ#ñ#ç¬È­¨ô#ßö±íí¹öyÑóö¤îIÓ¥Ñ=³öaÙíõšr(vÈ “š]ÏÓ¥‰õJ_|Þ„•`9Cr\—¹r›qéfz{ˆ ò ¹]ÅEÊ¥Rœz ç!û],\\.9æÌ¾9›n‘Z†ª¬ýª?Ƭá0J ð@ò XÌÆQ€#nGÀFÌ훼kJu\ÑÂGùeçè¡ûÎè¬/‰üÑŽ;,‹ŸeA,Ûf’‡Í¦÷I—YeÓNŸssÝ9k M¥‹ï/œUQ¸«”ª2¨x*˜€ÝÍÏÍÎ#ìDîð\Q_‘d¸„n¦·±í¾…Bî‹í#1H ¾{}³†edŒÌ1äÄfÇÒ-Rk`A±±ŸµQtëÐŒ’ J šè’hò\¡R„Ý +žî1¡š[¥ŒÃ¯q·Q£ù.¼Ý"ú‚¦!Ó€MWç5èû pZ ÞµDvçîüºóødrÑæÜòŽYÁ_N]]±äÀù†¬ÎN³þûï…¿›Ã‡©5íŒç»Ÿd¬„Z6Ö9~üYf§Nkœy±KJû½Ë^ÚÉw|ÅË“'¡%rFQ[pò­SO…Ū'ÎI2gÎPö{³ÀèЮ§ }0âëÒ®ŸFœfAÎ«Š¶mWœ/ü¡^–ι#—­xv¼MÞ• ñh’©$ó]úO¥¼øÑŒ”ãÇŸ³Õ¾ýJç\fœis¸µãÀ–;aêº;©tº/&gU¥;' êµ¿P¯"húõ{­ï/X°`þü·>[­7Þ®ûÆC—¡K+úµ}ág×Êì½,m¦çÃÎõ6¹¹MT«7–`û®ó•~›;l\ÿu¥Ã2²œr¯•ÉFw쨣ª·Ÿ;'¢Êz…éŸþù­ßÈuùyÜ㋯5šÍ•™Jåx“iŸóÜ3¸ê±íüöÀ £<ÞP²·j×kµ¹†ÐË¡ˆØ©§ü°¼&QT’ù›{[+ñÃ3ù¥÷T×½ò¸ò;±:9Ç4ÙâdÓ[,–’FÀ=ͽõ2îïSÝw „ ¢I¦¦“Ì=v lèu´Åjªä“$ƒãp™ ç(úÇÊW)mm¦Fi0àäžþÌÜ› ™š+¡_Þïy8!ãÇ›I/¼å ¼å@~Ü¥¤`LäLÊaiX1Gcü!ÿ#Ø@£æ£ÀŠ‚~‰Ýä0•“ãŽÛŽwcu«*‘õgõ‹ "b„n&§TŽcý„¿©ŒàÞGmGq§‡¥'¡¨ÆÙø§?Çâó‰|ºQj4ÊPb[ù=>¯ ܪ2\³^ÂÂf„耲BeÃjCÔû³ù‹”Ç>2®ÏçGâ¯g¿`£3è|œ¦ª`8 Ïú4KvY6éÞ¤Kø¥\"—î®56¬*»"æè0c(,†žÐ߰߈a=+£Àš92Ó—?;ˆM7““áÉeÄ(¹×ó¼Eèªý*Uc'¯¯á©Ãw¢;)U4ÞÌ-€-ùFàöÛðp`PUŒÃ¦ÃyÙØÂc¢iE VlW“."ÜU¶cX×w¶Í+{.8oCÐÐ ™€²ÀS¨Íú(+|WøðÂáÛÑíÀèN[s±CSlt94™ù>¨ô‚œ¶nÆl&„„O;ª vYšî>Ï]ØIH·%èçÎË1¡Ð~¬(ÑäØ)ó³ÌQ[G±ìØ ºEj ˜V«L¥RfdG†Ív¢È^,:„CáT)Á–`Ä-Ì-ä«åÅŸc²ZrϪaª¬g¸ß§í Øö»É†VfBê:Qè¤!añ²ã§QËGÉ,²ƒØAº×P®¹Z†>âÿÚné |), PRÐô`õ¨Ó¹ïn(&+è&£ì§Ccý„g³¼9iHØ¥öœr¯YgË!rèF©þ ¹%ôòeaQb·“GùÙ‹™×-¢«ïBC(,ÕÏÆŸò’jÆÐÙ`‰´ÔšÚ®yn¦‡»JÇþtЍ"¸h• ’‹•{ ᆂ¡‹W-¾Š^}„?¢{rã÷óoåžàñòúÃ}©-ØyÛy_Ä×~mRñ“²Aåã½é&£"V„)+ïuÀz€ bW/¦Ö ûìÀg[l[¬¸ÁbÉ3™ÒÉ#Ž[骆 #Q«“[µÊŽŒ, MªßðcŸ(MÈÑÑÅmÅ€²}Ø”áe}Žô!Ïˇ”צ ¯‘ÏÍ6¿“Y¢[rúFe°Û‚¶'ÅnزeXöõÏ_oC·­Zi^ž"=<2¬4×Tw®Im9Ù?4;8nfaw& 2ö. Ð#¶#Ù+^ŠâE‚›‚‚O ¢[r ÷<.ôcÂ+ö+òL3n3¿L·ÝÆuVkŽÛÉcqq¼ÉDïHZÀ°Ù”™™™Û9O×ùï.°ÁÞñB¾ë°Bò]ª ¶×¸wdÑHñiqñÔâÚ1u¦f 690º÷Æ+ 7ŠžuàsÜ)%Ô–MÓ[SÏRoÀµf»ËVó‹´CÿøxEÍ5Õ›kÔ–RïŸcÎm“¬r xâžñ‚½‚ òœ“ÆQìQ¨¦«0=1«Z@À€‡y l…=~³þfvªŠ‘Ñõʰ”V™6ýc¡U ‹¹¸´±X Tª=KÝLÕ"­V/—ÛÙO§ð_*Cs@NÿÒÆzò]JJuËzËŽÚû/ï_4µ“Ô6V©©òÌCÌß?º×)gTÖ§Ž_>àW' €€¥ÃùÏã"m6ÅŠÉê°°œFRÛ´‘К¦Úrcê û”’º2ûPÈ5î™C¶Cï°ßq¨®†Ç*õDµÍËF7YõA9Ç eÚÝNÙNQR·šLœ®õ–ü¶tŸy_ÅÊJæH$1Ì’•µà t3Q?j²Zmܧ;“° Ùa¥ûÞ!Ð` Øx<&n{ûŒû&ÅN2ô0XëÕÂç5ØßÔÔÇulP» *›{ªiº€.·ÁíRPJíXž~÷ó e?.O0$\Àq”íNVãÆŠôtúÙS5äN‡w¿Œ^…L×Tºg|aß@$¶Áž+l=b$(h›MËbɇ‰ Af쟱޸ÞŒšF,ŽæóCsr6^PðÝXe³YfÇæ_ùmó;Ýt³?ìÝjNæù•£)gâªõ*§˜ÓJÕJ7PW+ë¼f?@k« m,D6«ì(Q]œ4B­Ö —[% ÍdÍwk¿‹µÄ&áIš†ÌÑý¼Zq ©$»%?5ÿv4ô¾H)äÇØÛ;Ü3p]ïjõ¶–ö.¥«•ƒô’ùqLZ)XÒˆaVqì~`—Úƒ:…æ6[cÝX±’œÌ—ÉáÔÕêß´ÚctKQBA>9:r;êv¸Ùá×”Ð2Ÿi±ùä»ÎþÙì§âŸ¦˜Rüi1¨¥óñjüŒ ~ ¿>}˜bn[:iCÞ®‘ÙÑaè»7¦®G7iGlkÇÐßb¡ûyµâ÷}îsFÎiÅnÕj@!×Tàœíœ/쀸pa3 ÇÒ-UmÑÛ‡÷8g»¨Á5N6 l 3Uœ›}Ìõ={f› m¶=O´Ž‰Ô4>>ËËïÐmDñ¨‰ÅÒ„H(IËÝÜaó$x °H†ñ¿s‡Ì'ßuryNhOø¦ùô ÀEµ6*c4¤ÐíÁJ7ãJó›@д9(š8†þ¦§\c 01£Ýð¾+ì+K‰R2¿r *êÀ5 ~NÞ²Q ½¡Þj†*®qÜ™óaëáAìAÂëBñy±êsÁ è–ª¶`@Ð$PÒa¯q$7Wž–FóL™ÅRØlE8þttÔXÄê…Ž¹eO>l?Læ“RæÑ£Ol6 ù1º™¨E‘G í~Èì±3?Ëi™\ê{ï^èåËeîî'—Do×ï7íkk ¯ÍÓjÚ- &y²Ž£É&‡ðìºÝ÷ @%…Ñ+rèÿ‡'¦‘ˆñ¯µ½´ùJÛ· ¬@¯ )¦Ú8i8ῳô×êŸØÔ#9…B®©ÀÛ‘†Œ†¡¹¡ÊmJDz&½¬©º#DÀšaLJ4Ü€m6¾FpîœKZÚ[gm˜Íç–•Ý®Ô4}↥ãâì§fW×> n#SXØÿÑmD-'mnÊk×Õc2Iþܶ-% ³ÿþþ.é]$Ý$µ»ÂkÉ"t íÁÜžo×ÚàuÝ€Tyh´~·oWjšŽ.¬vÆŽ®9‚ioYX0ÝÉ«ÅïÞçŸË_=àðîg¸Ì“Z®!¡Åµgmg‡Ú‡z~ë©£±úÑ“Çkä©©ï¢PüîRÏKªˆ`UãÆ:ˆóó ix¼ǽ¸8¾¼ü®Áð˜<¾ÃN (´>MGõ¬&=­ˆ\!‘Iz2ú•xzjÈ#%ÞßÂ{…—d—ú5íj{(«Ús åÁ=\T6 Úƒöj ~ Sss  úÁññ>wïº=~Lç¤ÝŒÐöɃÄÑ(@é®N9Œ'K,Ìž,czRË5ØgÝ×ѽþŠúåÊõÍõtU0¬V—ôô–͇ºµ6›ÜYŽ8Æ3NN³fò´4'<{"5‹K{6[ ÃLò¨pi?Á»¯`Ü÷öMÉD2Ý@ÿ<ôŒcÚc%¾%££ JuCÃØnÜ>ÂòjÿHµ6]L{)È…·çÛÀîû© ONjš”öíõJ¥cè¯T¦vhߦE„X3:ßj§5 å°ßµ/h¿`$c¤?ð¯åIÁRÒ°´Ñ»FÛ]ìÅ‹éªh4…‚T0-]8þ†!Ǭ'Õ¸ºBÓ ¾Æ3…a˜Åáxòxä‘<2 inõ¬µÿJ¤ÒmD!n>¸y1úâþ ÷Ó&¡PÂá—¦³oçºPíµí ÈW¦‡µhˆböUp•ª’ÃýROOm``é“¡? †¦ú QÕè";Jk aÐ{/î‡÷kÈlXÊCjî]–]cLj³Ä…“ ½½AM‚[,vÞÓ!ïoïîIïîÐí¨xIázF/Éç7rþøi’· 0s¤+ì+*â{:99Tr UÖ‹@Ñâ’ ƒnДšÑóEZ1†}¦}s7Î-ø¬•¡5®¯UÓoϺA©hµŒ?<1ºnº9ÇçìÕï5šÕd¾Q©ü«FwºÊYõá†^e³¶ [®á×h’q.ã—š·|ýøkž5V (ä騾€¡:¡:ÛôìɈºÐÓ+L;9>L°"Í“vß’uO64¹Qes \SÕŸ¥Œ›ÛDò„<:ÙO%Ô#?­w§ïRleáÔØÁÙÙìsçDä yÌÈpvŸ§Ðz9GºÆºaÔÅ1{¬œ-hÈ»7Ô1fâ ­:dßkØÛíz7y{¹%ÈRCûZµ5ý¶­£lvQPÏO5 „ý…ƒÏ÷Ý£^Gæ“ïþU£;NÃêM`X›Y¾?€ÇžÂNÑ$ãœg>:i9»öÈN×þœO2¤”áŽ_"<¶×“¬”,³èñHP»{zUÓAÓ¯ˆpú("8Øa÷íYo(€ÛIÝ*N/¢Ï^°÷…ÙÁFã=µz#pߨ×_wæ…[,0¯vt‹HJökO´^Š.Í$2fÝ××Ú±£còàìµÁTYOi‹ ã&îÿ }ÌìÂò­ÃM'_¸Ýžh2í#OÈ£Ý~¿"3Ñ–˜¤K^6\×VW£ûZõ4íëÅAAåçÏ{ݾ­LLT^ý$ƒ£"¬¿ûjÿªÑF2º²gFô¼_Pcøô"~q7¶M2o äýåWâ׋†ý›¾ýž÷~{v³óI† Rpܱy”l+ØÕe—L,kÃiSë{zUÓpÑgx«Ö»»0\˜P†ºy~ \úóœ,eª¢—V²à¤¼#‘QkÐ5ñx¼3­RæÄÉÖïwÖãëìYéY*}@á…W½«Ù}‡vÇÔËS ƒ µ ¯U[ÓoÛ:©iÒ;vÔ+•8‹EØjö‘ovëw—ent'¶'|æÇ;šÏb›UB”¬°¯Ð=M2o¤RÜNlϳ6¯Ülëf+çÜsòÅ2,Qv¶,%…<–[¼K°|ÑžE‡‡³°¬êPžŽ.¬0>cC޹=—9÷:~}5ººœ(§[êup™¸¼_7 ÖßÜßo‡_öÙÏ©û¯!V«455¿U+”û4Út«ôNÓÔŸê'.IˆbXm´ ©ðçƒ<¢`Øn°Ç Õªl2&ü±o[ž9ÄŠ1³™³/`hºy\".­ÄWö„zŽ´ Y¢¬²¸[ªK3ÁÇï—ð$müÚÐ-U[A°x<ã×ëLë,Dµøí õpÄÅÙ—oQBJ’dü!ÿè‚;øº±^&`ÚLl>EœšÏh5ôÙãSU¦söŽ%|µÚ¤T¢D<âŸçéÄÂî Ç‹&ð¤¾üÂÂ:Ø4Œ:r-ĈÊrGßxpïD0¡Z•-€‡Œñâ®Í2}ÌwgºÏc΋Åbç£óßAÞi·©º†ãã*ÙpÞø<óËá’º½ße^¹}›-@ .jâj.îѺéðtàá½ÇÛèg,nYm6ÀAÑþ¢£].R.¢ï µæ0s‹«-®¥]Û¶}2w2õJ“|¸KÒçŠm]Xý‘þõáú[Ð-×ñëC‘¡è¹p{’tgÓùÖ|Óxä'"Ýš$–ØÛóQÈE–jQìmE}ÀLÙ 7›=/ÛùErĪæó+ÎU&;–mû|M+¤%»¥ÿˆa6ÓšÚŒJ†[y¯TT} \«nek$bôue¯Î4™1p?¤ß4Æ´‹ØÅ%ö%9ijç² ok("Ó¡ŸÞìëææÛ¢Ž«‚ –«ì­<8kÃyݼïœç.òþ³áÙ¤šq¹êÂÏâW«©3üßø‹;.##†Äô¢Ö£hhÑôÝÓ³LYçìçªCy¸ô±/VcM28B8AA ™ Ý ·ùöùg°3UswL-ežű 60ÒizØ(Ûƒ©G¼ ½KªV)ËóϬ±Y8“‚'ÚŽXÕFGhV” V>.>ÖíämÖí±Â±d™_ùŠ4µöRÇyð8ê‘?ûK@Iu+9l å3Öe›Ñ'ÄâùÌaÎi‡´[‰®ÜƒíùsLáeg´ïöòªãDÈ—tpÁ:bÍ%Æ)Fþ‡}AoRr 8ž¿zV«©3¢xÑ&×MõÄõ¢XQô¢.çàºQº•߯üÙòs –RФdÁ“|xrÌ…VG¿`ÖdÀ,欛øÍEöE)D Ýj/÷…ÀH ×ûà¯lu13<‰ÆKßí¾ÚÎZ“‰’RÝÜx ÃbÙY.äko0vÍÏàC|†ÙLæ]]iASËÁ…Á§J?¢¸Ã|g5œx;ԃÆÁ¶\3ñÇݺ-Üv1s1YÔÙ¶Ù±X¬<]‹h²Ü9Š)¿T°ë8ј “›ìIÆòDu˜6mæ`×@° ØP­¦ÎpÒ8<¼yw¸`8}{¨;0F].³®ÌúÎô] ^-Q!|dˆ;gU–Ɉ=%@wÈý æ]‘®›ÑÍß¡ßåùtÃU…¨W«ŽÇÇÃãßïßÈg˾+å%„B…Ý(›ª‚±Ù¥!!èé‹w ò5ò##¤šñ¼zµ$4”|—4µ 4‘ÛMe³Æâ˜V«L¥rÍÌ$ õsÂ+žskløïšgAø€?19¯€(˜eŸu ;…4!í~h«fHf;°Ÿ%Î~‰yÃ`îc]°Î­Ûq/J3ÆÙºÊYUßâÞ@d`¤ÇRÛ©7§Ê"? ÿ¤µ²uÕå–µY†¬múñ¿ïˆQ à" ªÈ?¡²Þ‚™s=0GÜmoû½)§žÎ^D`x–'c[õ7;!Œ]qáÔMÁq«ÁþLÍàrÀå´ëÙ ï’íq¾†éçMušÑßÙ¾s›Ì%›%„„1¬ʋĂ¡Ïüyߤ]Ypäók³¤éW›ÈñPÔ&Nr+×8ÆÛFŽæ?LÁQÔÖ6º¤¹´>yý5íµöŒqW{^½xäbå[V = #ÇH¶Ie¶(•hÉ%i΂ÇÔ–6Çhß«~yï™'ž+…¥t«»‚F¤Õê]\{6³ï\Ûš-Dì–c³NRÓù¢¢¢Ê .` õà¬Ë6Í ä φ… eb¾×í«†_}Qÿ‹ØÜØíéÛ§ÝšöŽï;ïù½í]kÆR:»îH²~JÓ¥}½×õÄ«ÁQ2] x¶ÃSÌüRÌ$O|·û‚…Sg, ›­¨T3ÂëBuŠzǾâÅAóÉwyw™Ì0)ü±¶tôs\c?/‹:ë~ch“Ò¨30̱Û5OKø·©Å¼®›šsš7g6's0ÌÄ`(iº©ãPSûÎõh1Q1qµiõLÞLćòRI¬_n Y§¼ƒ1þ–dÈÎ8:h4™´ml^ìÆ”“®M"NÝ:’)\^ýI&±,ñdþI’g”=èäÖi|ðønžÝþü°ÞµµÈý£€[c2ªò ó ›k²èâ„4¥íu£Džñ][^ýÞ¼ÞtŸ¢ %‹gr2Ójµ?Y©ïê:ôÎÐï¾ÿš",.Î ¯>Eu‰2ß—õÉ–­HZ—ö?ˆÆ/ùSÅðAò—~%T:£Þ 2åsÏ©ÏWŸ_x!ŸÁoçÚŽc‘B!Tújž’hà”ûˆê›ám.YÈ``>ì¸a¿Ý€H×§ß(ºq½èúÍ•r[yŒGÌPÿ¡[[m}AÇT£ElmR…kÊo ÛíóMêTÀì@qœG©Ó=²¡æ©f¾×OJ&ÿ]ö»OÔŒÙjÕŠÅõiº©ã@åhñ;Å®›\£¿Š¶sìËLËæðçxÁ^”“ÌÝqY3¶„¬g¤öêˆþ’Qpc‚Æ©ÔV_V}–7VÌÚÞµ}y’dH°`Vu ŒÀ’Ê“®i¯‘UDC^×®¯³I:ä`—gà†ú¹{v÷öŠ€ÑQ£ÿþ›qq\Òô®]»œp™eøM¶^—Nž“'·Æ¤‡v~âÄä·aK„dò7øóLb“ê4b“î±§ãyûöß\¸ô%L<õy†åå– …ÅB9 g1ð¿ñù•>I¯…®]¿‹û0ˆÕ!ò¨÷ÉŽ}È#7zßÜ“G;c ‘H4²W¯—/×L,,½e;â»ã—Îû:z8îL3fì S(ðØ±‹`ø ,òpé F6MC>¿Öy—ý-][VýØ‘#i:..Î —™{ ]#Kᘈð­,cz‰¢IØØqoÃ0=€‡G™({Ždäúb‘©<ÉÓñ®sç¥W®-„ˆ§ÎòÜÜr¡°\ä†àƒø’Ñ?I¯…ŽWŸ;7µsçΪ« ä¨2išc¦Èj,Å%ɳå[oïóç¾¶úÁº“ù×4ýé£o]Í8¹§?3÷&H†~÷üúûí2íZpcÁ¯i¿V“"U¨RÄHÉDž/ó¯9õ! cÙÙnajLaäŠl"W$@b•'dR8¡j czðPÞߪ™7F¾¯CÄLÌ%E ™ÈòeÑ*£b›,½wmÁ½×olûCGŽ•ù ‡†ßÃݳh<7b@¾›}ógçÛÕŽ™þ†mk¿m@Ü€ã¹Ç))©f*DŒw˜Lä ùÒù$ce) 1¹#´ $c“ˆíb2¹¹ajgy°1öߪ™7 ‡šY­L™ª!E ™Èò%™é|ìHÞñåõ…=Ë>jÑžî;´ ùoh:«éÖk[g^˜›[­ÔLEN…¦ ]£e8u‹ƒ‘©TFgd°íÏ6™âØl222]]ÉwS ’dûlW¡f*r(×4v ï¿{g¹|íêVËú ¬ÌW(BŠ‹3æÏw;vl.Ý­h¼n#®Ëx—ÜžNËèîÝýp·ÃcÎÙ“¶‡B5S‘S¡iH’á:³$V#C¡h’•Å©B2l›­aZZ–››ÉtÞ}1Ï»RÍT€*M³!qÃŒ«s¤EÓvJ÷šîÒUð§Ñ踦ãwƒ¾›ÂœÂáÆxP¤ÎàUU3•š&ùS…è¢k‘»SwÓ$… ylõø±›òp°JŵÙ\ôz23ËÕÕie°?.=Üíb“èçVLTh"• ¢)^7áàÈ7+Z|="hDÕü™3щÆßÀ}®{R㤲ßÊ$ƒ$äËæÊægzŸéy¼g¾1Fä çɈD¨ªš©Ô4ɨBrÞ]íšîÌ:ÉP:Â5µIIq»~8(/$Yyy–»{¶››3‹!,|NÍ<Ó4@cOD@KÌ9ÅXù`嚇kAöÇ¿|ðˆÃ¢» -h^IFˆàn뺭½j,cì®N»Ú¹µ£ª$¢þÚ—æ{´xP¶Üùå!å‹ÊÅEሦ0ЏÜÇÞÞNóÍTÀ÷ƒÆÉqÛxq ¨ÃaC…šYá—Ò©_56>lÝqhü·¡Ûñà)cH† “€!sô£iÄ¥~—úŸìÿ¨ôÑÆ¶à<~toF|Z¢Sð¹C"©lòe2'«™ê†‰÷¾zôþ”zc¿h4þaÐxð[ò¥ƒ¥yÓò*s¼ø^û^´ –N¿w*ÅÕ_Ý3mìÛ%xš/cçÁ–~¸ž<Ü~ þØXz]S[I&ËÍ­ÀÅÅùj¦:`Î9?§ÿ}r&ç`úgÏ2 }ýåXáêžÇ{λõc“)_$Z§6qˆ³¡&&“Çþãc ™Ð=;-hj ,„eqißl}öÑn§¦ütcíÀ>R!]-´ yC€€Ç&°Óa{M{§ßœ¾3m']%4niïtˆíÔF8~o¯EtmÐx}; E]Dù³ó_ÈoÉx®Ï¹"+ž þwEEûbj1J°’YE³\`ÏØî±s¿Ó&Àcp£`ºZhAóF+H{ÿâ­˜¯8¬<¼ìÁ²ï¿£ë¤.#^ßù÷î!Ø„£ƒÒµAãMÁs¹gÙá2C¼á…üpIø÷5\˜»Z„B)é8Ábðìv“õÉ» ؉H&ýH¢Æ#Ûž=³hfn›)âMd^ÊÈ_3€Ž:C š·V Ëc‹k ëD£ÛS·uç+Ð¥ºˆk–ƒýO’”Ž?5b¡û7DŒø|ï“=.7ã•™64sÂÙT#Æš"ù°ÖóÙðÈx„Áäub‹³Œ6œ¸›•geK0hAS³qÇzg^ñ¼Q¢Qƒƒ´ýÇÎïÙMÀfÒ5C š·Al² ŸîtúŠæÊ°óÃ,„‘®–ºRÂÆÚc7”„¨&>Ý…Ç¡ë„Æ›…¸¯˜×˜W°àÙ¾ñ,Ä·3–3ýbJ¿3é7ÕM§ÈW]2^øBýÅ ¦‘¯x*eM>˜ÕBIW]&–_ô¿¬-[;G6§·N€ÕO~Ö>ª‰·+]9¯:Í¿…|šÜrÏba=öñO¯}:» M´ñºZêP€n±mÉà @ög;Þá*£ë„ÆÛ€÷句IÒÁRRÙ8^Cð»]:K‰g“…ûˆ¿=¨;8³töˆú#Šú@€öÍÔ`˜ÓªÒUåxù ù Ä…Ìù5»3:5¦+çÕ@{hþ5 à±ÑÃrÇbØhXßj}ΈÇ;d€ ºbj7t„n‰e‰@AÎÇýÝ;ö ÷¥ë„Æ[Â/ÞaeÍ&ž_¸”{ OÛHÒ¨Þ÷asû{Ó#'oîm¥ÖåU/UWU3ßÊØõžIO¦ç ÷­x­¦LÝU¶ËJX骫Yˆ7ÇÏ.š=X0x’xr<'1¡ø·‰šÃä.l]?¯ ú‘ÓÓé¹Å3oT²XØÙ³Û4hÚzb}H azW­ÂyôüoößF²Fæk–ÚísBøtÐx«h;Ü?ž¼·MÐæ§Jß‘Àß“ùÂΑ€4@4 -¯íæÒÍãUã'É&‘úÆ)e$EêPm‰%ô|Q¢wé“)ÉÂRu¤ºX`Ç|ñC?ï2„ö1¼f¼±|c²-y¡ËÂf@eþ†”¢(·¹œãt%½†Ó®‚ÿ ~'¾Ë4ùÒtÜ„{¹Ð\ °,%È!•š®œZC:?X8žžËž ë£.[§ è¥$4œ£iàM ‹MRp%›¨ý³š©„œ!Ÿ­˜ý¹üó¥;çÎͱç¼õfð±1î…ÅE„æ1ÍÑE™-s‹²|‚N5ˆx,§kèv|)Hó©öSrè»J±ªªš¹PhH×[ǹÐUD  àò±‹Ý›Sð±ã6pÆBc;C—˯€+tåÔtdâ™ó-óù>g¾Í¢Ü‘cü,@(bÐ=…†ó4 ¾Õ…H·G®,F6*þJÍT¢!§á?4á6™¡ž±ºxµ}‹zG„·=z&‚#Ì|¥A;Â"h`Hòøl BŠ\ÜY–BN¶xÀ6îœ]ø&§÷½”tw>ŠÙúžÍ Ó·4¹Fû‹ÙºÚ^SÐ$&RižZë©©¯þ¨t²¯5ÉêzúéâºÖ õçÐ秈SÛˆmðÏÛ> Í(¼ðþZîG•i6;úoÞ%‡Æ­´®Ìü>ë}3ЬÊÐàÃ÷å!oÄúãÇpÝìku™d_ѳgeâ@k.ÞÛøXsQ­Ó˜íóaBˆlõÜ*†Åå´©d“Ó¡hÈÛ¼2Â'¯¼T©pÜ­b-ó4Ú`w)q ó\p"<ü «=0°U¦ "ü…ªš]4û’5y¶lõÆ}>ñB6?pˆNÂ:ØÑ?LÌìòCG&‘ º¯½–i85•ZIAéX<óÕ§lÇaד®¢$QEŽ;pŸÍaö7Ä7I éï¿Îç7¢ðºQhÝß¿+u‚¦Þ_½¥%´ÿ³þïzí+ÎWM‘¦(V§Ú»°›JXoÊzz:\7ûZ]&™´´ÿü•ø=™ØD-±U~kšäÃÝžî)ÜóúO¯e?Ÿ¶øžê`VÉã23J¼d,/€£¥£7znD:V5vwÙN=®K×å“—æÎRÞ’s*Ü6W¼dÙ)]ý­B#ä<ÔƒÂj÷ñéL  ªÓ‹òÌd«Ü±Ð€ ˜Ã¡áÀ£ÝÄî2̼?K™ ÷Œ«ë£ñžÁpÃÉR¦Â=Ó½ûúŒŒ“))NÝq“”2î™®]¿ÏÌŒKM=ìD)SŸÍŽ"OD¢‘Vk‚Õz·ªcæ4zúýP/F¯nÌnpøc¶e¥L¸¿;÷X'¥L…{æèQF` †×‘¾Fm7§ÜzR’cÄ}äDZÿW*Ô ²QÑv¸éˆÑ~gˆš^âÝ.0Ù“ỂeæSªò|“=@È—pëI¹äQÊ~66“"Ò ¢å½Ù¬_ ߌÎ[ۙפ£‚¡xƒ·l¿ÜTO »ì-¯¼$Ìã¢ÌÃá+ÂʇBõdý¶bôé³%-íxRÒ~gV»¯oL@@oò¤cÇÕÙÙ§32~w¦”©pÏàxJKµ^[¾V(V)VÉÇÆ¢Û¯d´àLóóæ^äËGe–¸|Ýêf^fKÙuœóËëy‚ël_«jÚÑ úQñ€¼f2‘% Ä:)bÈDª™®]ͯóô!zuuàúÀÇ_<ÆYOïRõ@½¯ ¯ ߃ÞkžsÆ"†L¤š),Üäü 'E ™H5sâÄd*\bqd"ÕL\܇N6ýDÄ$jF§ÛU5_M¨·X·867æ|é¹Ud+´äZÐ/CDoj0)bÈDª™^½Ð:ÕרíæÕÀ:Aª™¾}ÿí̈ªj¦"‡<ÙšœìXèJ¼Û0ÝyÌN—°ÃSÊ-JÍ'òÊW%¨L˜”5¡bn„”K #Ó‡>B¶Žfv>¨;øaþ‡ÍyÍ‹û0}^û²ð€ìTwX~Ùû%3XvKH¶*‡íuñèxRÍÄÆŽs~µ“"†L¤š9wnª“M“"†L¤š±A¿îÒíºd¾4N<®-·måF·òûÇï/¾Q¸µ…rU¢æãp…”…Üx óöq…é¾öÚ¦NÖq/€Zë¯æ˜yšŽ^Ïo§_ƸŒÊ¸lÀ&¥LÐäGâÇ›àæhˆˆ«~ËÉŽ™’rBë©©‡¨2mµÞ© ʘo~¾K` ^7ûZ]&™  ÿðá!^>iݱЩÍ_;ð°ÈÔÕÓ1j2¢xR™™L±¹I+Ì6#B —t[(é• ÝØ¯Ûÿ}ñ÷=„=º »W<ùOÀ²ã‘/Ùú#1¢þ óAÓÒŽSXí99gœo4Ù–¼E·…<™!Ê ­ú–ÍnÚ”O ÷ä !ân~3KŒöyŽ}¸´Z-Æ“Õ{C‘{êl_«0MÖ{ªœAdLÌ[fò2éê骾E*˜~ _K¨åâÀWà«ÁÐàhM×…Páª}ö}ÅDñÖˆ†HêoPbuºa¨/ˆO÷ 5|Ü„úËq d­‰¥}³?Ë\fõ Om)+N5^8¤›Ü€S?FÓ”Û”±èz{h1íNÝÎǶǣD£ÚrÛþy-ƒ‰qU£Å 7>‡ ã3ê»Wø€¤Y›DÐ;Œ¾ÐÄýf`“Ú2&d8&ÓÌ|lU¾‰\ ”“ I) åâ—sàÜhˆ7ð¦+ÍÉÐúö7°™;0:TLþ}6ô$ÀºLCc ³ŒM×Ú~6™zzKÈ—:›ªŽÍä–£Ý!¤S¢ËÃñ~#²*Œˆ*,ŒÔ–òØœÁ£=_ìŽh4žee›ÍÌbåK$J%ÓÁ™€×08c:Ó‡ßçÉ') !¨­¿œL(A|q;¿w€Ô—ÿô“ã[ùÑÕH šjC AÕOEjšä/’1öç„€¹ÐÜ+àÊrûZ«)w{ÇÛ¿ëó¡prJ¬‹ ñ~AœžL:0탉0Å¡q±–“v](še ÷BþB”[·«Ì©V‚…@r2ăGWÚ .dI¹KÛ¸{1ðßçì)‰æÒã®àŠù"a(ËX“_2Âû(»Ê™¬ªj¦YF†Äh¬xɳZƒ åÀj5 ¿¬0,O-±b?Ë7@%p©°(/"¿ˆoÃP'ß# MÎ}KÖõ¸þ áàIÓɶܶß)¾“"ÒªïfmC˜á˜gË¿õûïæîé®1Sé;/-hª=ŠÚñ³ù~;üÒ'¦ƒ— @­Aë&Ì&Äó~¸Ž„Ô==gÅ»V[£%<èaÏ•2'Ñ“§ÑÓ‘HäÁ×®BוE¥U?ð[)>$Pœ¥³S›Ôf¦e$Ú &“¿ ¼bK2¸K§ëç«ìGHfCø¾/ÀsO•Ÿ%±#s·ñ­P<ŸÃñ²áÑêœJ5S 2'@«Muu¥ðrJì©Áõt,HZ”Ý(5S¬q¶:#¸~®ÅÓk[¤>Ît‰ÂÞt§6âÆCÆCÇÇ[rZ®V¬V /YOª™ÕÊ ©ªinµÛíûàãBšfhAS3ó^NÈÊ÷£î½ þê3lÀî º>ÎjŽÜ\C¬ ½ ^^„ׯٶÖ^­ÊBWã”2Fó9ó•ÐËŸRìÇMÔÛcÕæa®ŒE]o4ê"6Aß ðɃošÓDùáµ-N p—)-Æ·â•ÿ^rùªñÊÃzW€Å#›ÃiÈâEhxR;ÆÃí0xºnË£´”ZAó0Àëɵà8 aÌ'žÖ!°càød@I <üj‡R¼ôwÃï'M'›qš}«øÖùËË'u ©fªjšŒKD»ç'ä7kCocL ššB "cRFØ’0“©¼aùß|&XÁx̤ýpá;â;¹ÝS/ë¸ß`]‰¯ ¡9m?} »Dÿ”©@¡[¦·`£š. kF]ÀñÄìx®Ë÷¾Ž¹28nŸqCÓ?ʯ·œ¥Ò–~v#§e'ÿ”}Þ³¬;tt´Z fbNGçý(1…æËäºéÐÐB ƒ¹6åtÿŽŸÇnB½°'ÐïæIB‚€X)áojs¤l{ö!ã¡–m¹mW(V¸!nÿø•ªš†|Y­r÷ˆ¬ùôÏ45 v‘=cbFÐ÷AÉ3’-®ÿànaf ˆi‰µýªì†Tûñ+KÒÚ ´€žÌñ¥$ °„Sè© <££Ý7œo\ ؽք9–5½ëÅï$g=*6­N2ll Dhw0Zí›9”u HÖÖ—VüÒ­6]ལpˆ›¥¬ОµáïrO¾ñÔyö½äÊÌ<õƒ¸=mŠxî»·Ì”šYÔ¯J‹ŒNÇ1iqndbº¶QÛš<ÎË W‰9ÜrMÓÇÉÚF–×xL²Ê]ë݃†ƒyh^/~¯ Ê -óš&b¥’Ð’A)“z‰è -hjŒþƼyß>žýãbÿøùr07!àfi|4÷š½éÇÌÀƒ®Ì„‰0Åcñgìg8'†ó1ûãÊx?œ² aBFç'T^ß…‡å”fDD+µøÏ÷².2¥¤š©œªÇdòa¬è ÖÒSÎÊ/.{ˆAã*V$ + 2!RiJÙ³mG›RÊ,8Z¯àé=_*­ FJ¾Pöm!F±b$È‘8Fƒ‰[9¤rCñ,–ãQr)$–¦@[8h¹HOa I S (rÏ:åxù9Ó¹“¦“lˆÝ—ß··ú··KX3T Fž#q2¸6E@G7!ƒž£G šŠâVżžÿ6ÿ´)iàŸ~Æ2öƧѪ"6¦ø+ü­LfüwÄw hµhšH€„®Ò€ô>vÿ2z9Ol7Ï ÿ‡¸N¿ä›¬ag2Ë0 „ˆ‡EFaøÐj†Fí…Ŧß^h °g^¡CÊ0¸±1¾ „³ºËòÄÜ-f\Àe jàˆÂìãlÉþy°ÓÁÍö»é YqAþÅÏÜÆe|~†BAáµÀhYh‘¡Û ÜE›¾H ð|ŸrsžˆÍÓi%8”ÂxªÜ®BŒ6„Ê* ?Éë…àü‰;ªPËŠ#xQFâž5î˜ç±­š­Í9Í?•|Æ û[‰…Oµ‹CÄ<Ñ1¤XB=PÔ-ÁPY6óÑx­U‚5[ë–ÂÒüyÝ ZÐÔ ä Ê ^ìë‘ß7¿j~B–yí“-¤¦™°!üÅ…… î úô†z§€”kĵcà˜ð!•Mˆbƒº%…dœd<™Ô1·°[Þ°wk¤õ8Ö8ôÏOèî'—~ktŒÀî%”þ€+™"zTd^ôÈPŒA|æäP!ƒÖ34j/8,ñ‰îâ?çûyÈ¿÷pD †Ë`N,‡s”ƒ†¡yS]æÚ©ÄªVÙ­üJ<1†ÆÄ.ãVÄ¡‘JÓ•JœRõ3Ä%Dv“‡™ ùâ„°Gn˜wÓÏ­^vr° ³³¸Ù~á†?œ"=‰’'ì!€`ôɈHC=àØÇ›Yì Â钥ᲯÉû›oxð‹¬›`D…’…™Ëdä;´ ¢FpŽz¢vo»-ØfjoB}P\ì(‹ê*Y­|4½°BĤ š?¯{ª‹¸ñ8›¦L"Ös™À(é¹LZÐT¯[/ƒÈ˜¾$Üäm*‹*«Ì¯ïÇÝø×ßšòTß@ ¡¡P¨Øïƒû7ˆûÀ¾0ÖjÐ ïS×*ƒ0•@µQ÷a|ø.©MJê˜EœE2HöïÿCd¨ôÇ''iFtUº~j @À„š»óÈDÿViÔJ¤m"Ø„cç„ç‘{ ·>‚‚&>S$HÂ=Àe_d[ÛYËW”'+“¿)!-` LÈĘ RÝÜÈT.*t÷#Ó ¹Ïë.ž/ýB<äwÇ!hì݉ü'7?#”w˜9¨(1I” †b]@Ÿ¼>CZî9÷`*9FB4ÈS¿KÞÓ[`R» ^Ždnkvœ{¢ó%3+ÔLÊÔgòåÏëžê" )àR9xac™ŠÌ71[š4o¨½Vù£¯ÕÕjöxngï²|(' ýÇÂÌ& I¨‰@ÂâÁÁ¢úÜÄWçë£óQšœ6›m·Ëõz–Ýne2«Ñy¿¦![”-ÌÎççË-ò.H»Þ™½{6êù_Ôþ,†‚­òè'eçÜd©îóÆ&<9ô"mµ¤šùc§n¸ªšqdN/y² `&2¹¿p–^–Ò-¥¸3Äm+Ü6Q¸¥èÚñÚTm‰¬6Ê.±Rޤ¤‹oK„™—™:BßÐKÕ5HÕªC‰9¢T(»œÑ+¹—tƒá’õE-­,ä &Çþ¥-{RUÍTÕ4öD´Äêäï{cÁ‘MÏe.Y °ðGÆÚoñ}£»\hAS ‹*Co)üV§|ýãa•j¦É¶À[cÒÿÓ¿â~sм9Ô\®³3åQÎ9Ÿs†ÅÃàánpw7ºËÌ2¼y?°a¡ŸFS,ZX,¡Ùì{j«_iaÖ[ AadIùRÀ/ yî£÷ . î”Û‰ƒqºΈ³|ø¯†oÁÖÈÞ÷'æVÕ4…·Ù-¶ødËh$¦CAШý¨Ø©»ª¦©T3Þ­aÖew?.ƒÍÍúÙz‚íð4ì)ÛsÆpf¹ÛröN,¨v‚Áq_µÚ½¸˜m³‘t¤vqÉrsÃÿ]Àb ÂòyùÙü‹€ŸÿdŒÊ‹œxíýæšKJ$l3'CjA¤Z£Tgi.¹ês5º4ÁyõEß~c^.Y§Žª®þüÿíxEÇgËõ’\zï é Ð{hB@¤¨"Š*(EDAQAEQAD"½—H€„ôžžK½^÷ÛËÅ @ ¸÷÷ì³™›Ý›wçÍÎÎÿf§ ϧû­ÃÄN|‰j¼‘×­ošæ-@¼‡yDƒ ép̃e±/gõÛìã¼Þ»àý §šÔ }è!K5"iCo‘%‘¦ÄP÷óKS¬RèꟖ5v2;;©¥Ò’©k‡q•´š±«­½àë«b4Þa.gÚ}CÚKÓè1}-«¶Œ[Fg„–2Z\Kç‚Þ|k|­åÖ'ÑhC«™æšF|…Ý}‹óæ‰ÙcRp[&¨ièt ÿ­jïZ.g6Go®W<£P÷Q£ÆQMÔ·Õߦ)Ó>·ÿ\Dˆ”^µK«™°Œ ³f‹0x””XÔ×_õñ¹Û" ¸§T1³2Q”^d›æZáÖ/®ßÌŒHW™µT$©³¨Kïž.)Ž „ùxÅ ”¡Ý¢ÿÌê“ÕmQ3@K¿ìÓPš%šyÇêó?e¡eëÐþö™ M'išó¯d øÎÇr‹kvŸÊ6ª™Û¨ôæSãC‡¤¢ŒWF‹›‹«9Õl-ÛJae¡° Å ¨*˜Z­{EÅùfj†FË\õôì“–Vba¡f<ŒŽ–“ò*N•˜-®fWW±«h5#Ðlä62‡°Š0‘ª}†ƒ6×4ôÇàÍÎë&dN ý~SÔ4>ë,0 «‹P}g¥õÕJß‘jü5ÍOû±æÇLUæZ»µœóhfĵ´ÔìÎE¤Rײ²\à l9Û¬ÚLP+"i¡°0Ë6+Ñ-QëŠzæöé–üRqıºØýº72ôÛ=…¹&"‰Hªæ9JŽ<:ŒÌ˨¢­¹Úøñ›/ÐÔ7 †íÞ„.œEcšEný ©rôDOz n h: ³é…™Ùý·yÙ^5³½ÔÌmp´÷:wz3þÞªgÕÓºV Y¢¬X‡XZîÕBZÖÐ{C@-ª {†þ®¢Äº¾^,¨îP-tL•@`%‘Кæ×£ÃtõÌz SBotÀfHè«¢/ÎJiEË,G©c°8ØBiAPңŨi¿u¡öÁøôÉÃ(f& Fêq†¯û¬Nçt{óËÞú½qЏ5¶kY5Cc_Uu33ÆR²Xr[Á¶Ï5·ãô)”d8gœñ>“Ü?™­a»Ö¹Ú«ìLjǘivÙ"+”îqk‚ƒ¨‚AÍü·HÒãÔã¿ð†ÏÑÌy5ô¸ø~íøÜyétpÕ´7–:óѼ”^½~wÌ¿ÿÄ„lý÷ûÓë—õoí-þ÷ßаÖI”\Ì úBLèñy㓜êºà pbT#†Ø°gVÝ Ó7”އt¤ã"-¿!ܰQ„wu=S§O¹fœÒsæ…Ÿ3()WÊÆ2%lw’³äZB[Ç««å×Òû:~c †_£bªìªìª7±aï(vI:{J. A{“40îÃÖ3~|ãóa|ö·<(ã'O· •oYÿ}fí?:àyKÍž¤>¾¾vúg–—- §G9#^­ÃôR,##½/Ou¯Îp©N±-—p'æÁ÷bô `ì(eøŠn˦ÑšÔ×YápWt¥0ýçsÕyÒ’ßG¿óbÊóŸhuÕ{o䯘öÇw²R;OÃHº‹é;6+ÝWvór𧬧=@ Mtt›®lÅŠË–-ë*¿ÄÄ 6^§™>»3W¸±’Úf­EhÝ+~äëþÓ<‘ŒK5ÒJee¥¢R¬Ó[•²ÊÐRZIe•N&±·Ì¤U«®=ÛóÔÙgPm-r³1Ç*ÅiVÎcð˜8Ó‚eáÎq·dYZ±­,Ù†½5ÇÚœiÞån×¾RI{›÷¥ṎÛ ë7weÆMü!“””Ô–DÒHºm Å+µ}£¤¯o¯£Ý>¬[–úF5öͬTWnLznß§=„ôo›ê¦/æå«T»»Êí,Ö¤ªªm·EZë¯3år5®ûÇ¡àà„×Í«tå$L c="dpÔRË)Ù!µ37pƒÛÙ%‹PyÓ׫¯qöº]y)¿ª*ñ¦--gѦƒ‚‚ºF}–ô1¢ËÖ'>|˜mk{±£­èg÷e +"wC7‰ú×~úoÂ`Žá•ŕМÍCìô:éô3µ{> qíêèÿ ¥^9uMÕª±6=‹ý‘Þ·¥rmGø >½¹ Ü[8&“¡­[Ñ3³ŸËsv@=Ú¾M~q¹àvx4¡ÕŒÕ‡5Ó$_è@:2DÒ{cäŠÜÏÙ?×SØóÑÏN££mVSO<]äAoõ uœeÅy˲½=âuTÞOe½ºézE „!B’Ö1´p1Ê£¦iR3Í%ÐõOé³g®±ªæÉÿë[£ÈЮýæ­øBÍŒ“sÔVçü‚Ÿ/ÝØ×Í#Z­¢† õ±©\y<öìAÏ<ƒÏDR!A{÷¢ÈÈÇH͸ŸxòŒ5ƒ`j´rB¬†I>SµTT{Ô6n¬U†vV;§ …wU3M½€-ÓbN'ï·ñ{òÛ¼}ó<½=*£*a"½ŽFÇå Àа·zËr«¤DÑ ÁÕí½©d‰ZÐüw/i ’·•=#ü»?°ä§˜§jNyr<=8í5Öú;KKÔLS‡ÉêÇ ¾,UýÏŽ•VZ£brýˆvS ­þ賂#¸K’Xû¶1Mî˜ûbógªSÖLùÜMìøÆö7tuZn†ŽCîá!H4Lù£)ÖŸ}ãÛQguIïÈ{‹¯*/ó,2,¨®¹žU‰Å) '-mgdd¤N“’U^Ðác%‡éHœt2èy4@ ü[ùïXë±í•šJ£ø­ŠVõS*ê R†`üÒËŠÌ }™Q7£@/â2ß >h²IÙÒ ÃüÔIé’?Úd|nËÍ$ðsæRû»Ö_¢gª[ŒàÐu;n~üu§×Ÿ=ûì`·Áj_5Ü„4 €UZʬ¨¸H–tSX 8ΨŸs•õ³‘¾²}¶™ô9âzŸKÒªaÎn«òó3Œ× ˜!Æ…<œE4&D¶.A’°Ú{u{%ÈbpwõnaØ#‡Åz?Øæ¡“ öâÿpG¤q,w[ 9‚Ñ‹ÛkoÄÞƒšƒ¯Ÿ}ݱ¯#…”©R *+Eâ‹zU1îí­g³áni IV .8–r8ðÒ0…»N(¬ëÕËR*X¨>œPõßyÚµOR6ÎÒN0̯],‚ 0•*†•z99'&’mã|4A2¨¯†M m•ÍŽ˜›§`LñŒéú{¾*ù…KtSÛö¼ý}MùeR—Át˜ÞB—[Z+ðÊËé½–Å’ÙÚÒûV¦Y}‹esDÏVµ¯#D˜h¶hv†,ãÿoBC£Ý¢« ­òò¤VV„­’–5Ö11²€éC;‡¼áBRr8¬hCè†r–+¦ÕZ;怕 ÔbÇ¥†ålÊY¶’?”Òæpð8€)@h«ÙÎ1¬§ÿ¿ÒìPzƒÖ°¬˜5˸U÷µÓÙöÖ߯¯ ­<69Ðòå65CGÒ‡î<ß2+ËýÄ ^E¡ÑÐ{:LÇ´&Mcß^ÊKÑAéÆëöÅ„9ñ¡îýô¢«Yýú††ŠöcDzóóù)PÍf¤¥öúõÂ6Yãd…¬æíƒ ý~(-Vaºců\5g˜»²\QC›xØà,U5Cªoë”àJ\ógæh[ hLiY+»i9@ìˆ)jn;— Võ¹ÿ‚Û¶=µ)sKšë£š¡#ïlb¡µ‹ ¸8oðà’=*üýé=¦c,³³ïf笾ÄÂXFr-âkŸäŠwK5ë¸Üš!CxׯãÊV-©PTÏ»®ô oŠÁuG3‘»çñIï»QKŽ˜è=§@ÿØü3Ú~tSDeMÚÊr†û(íPÃâ”ðEé7øryàkÄ Â•íÂ9Ÿ¯ ¹å} .½ÎÔÛÈÌY­I§¹þ¸‡š!U*‹¬¬¢ÈHm³þ(t˜Ž±È̤Þ-Í’‹¹¶ú’ ²ÒÅÊ{‰ùvuv+¥+ÏÿÔ¤iÔöö¬ââV¤A­?–5n@ Û#¹4êÚ•ø'¾æ,ïåëËR”]ÓP&x¿©Tg‚ÏDYG5Å\¼RümµÃ‹’n®†ÿl(·†þ˜QÐ>Sσ 0’¥ÉüÎù},~H­¿yóCŒ‹iºÀ^­¯uú#ä+ǯœZT34¼òr™öŽÞµtŒÜƆWQq·4Ö‹;m-I†J¥æpµ(oѯòUË«´†qRZàæìpw'%%5ÝÑç ;æÍŠ\SÇdš³!<Œ‰_VëMð~;rãH¸2Üœl¼Ó®ž—|%5©K¡†þHkšv1‚L… YzP5ÁÑûÔô¿e\ ¦—ó‹õÌø7±#(ì§üúmÝG#K‹Yzõi* ‘† ÖÞ,tê~ќԒ8…+" ×JáyÛWŒŸ5•-×õD1û†Íü·äE˜ÅûÜó¾8îÚs ]¾ e¨ïýu…\¼¸€³k´î®Û õ«Í¯ï9¼×“V(›gUãé|‹F¤ÅÍT² ÐjôÅùçah5s[K ^x™…k˜Ðf_~™ üÚãQùýjÖðmj¤Ñ"m¶6;E›’¡Í(ð)ªÂê, 3!&Äö':4„ÔRZ=Ò«•µ5¤‚Ä™6„nçEzù>¼«ÞA›œé¤dT·‰ßx~¡ÌÒ_#bt¬ª‘XY9¤¥1”JMCK’3Çf­åăؠOóÖ]–[-±ßpïÑÛ¥7JKk%~-3~<s1qXÏÏÌÍÔê,%BlC½®¿¢Ö?Ë4¹÷!ç²Ï ”‚îž7'ü:Å®²Ò©²òæ˜5&Æ0j¤iA“šŠüý»,Ã&kÜ·ƒõ¥ºÚÞ¢´y CSV¬{–WXgl3ü€fØT>ÿ”ñ'®L=¨ï©™€MŽz;­2HIL¯Kñ•ù}cÿ÷;‡ÝŽ'h ÇæÀ‘¬‘ΤUÏ“IEƒ‡ÝöÖ‰¡P¸;™;th SU¡«(Ñ—di³ŽÕœ®qªtùØ«ŸUϾü>WÔ×ÿ·Õg™&Ã?Biþ`ëCq¹=äòøVž¬e±*<<ÜòÃÚÇÐÏȹ^˜mvrDÚ «=Vö…ÝíëÝ‚.uk /úó¢k¿è96å™béßϨ]ãmv53]ɱíÎ茥23IŸ.›þX*uáó ›>þVùÛ”ê)·ce “•6õ&ú½p¹6¨® ™•Õ•¥Ýd­ƒÛ!ãàv°Þ¡ÔÕYß&h4 ‡3-·ß«LëÛ«¢ÉÏ·>ec/`Y Ü\E–N­Ò!]zÈékþ´(7)îÿµ÷L>Æg±&©T»I¼TN/6ïL*NqqU>>:KˆXBRè…¼º%Y¸Éáʼœòàkqê¸ßÅvAï X¸qÊ—xÉÕn’çØ|²µš€Ã n½ ¡©ô0¬ásîœÄÒ’cwŠWvÕ*%…¼Óï¹%‰{d/"µÒçM»ÿ; •ÌŽöx7ÊgñÙœÁW4V"áªáîóOÏËëJA#“94 š8I\­ºv°ÛàÛÎÁ0ÒÕu¸Xœ\WgX‹› XÖV!VV(iEÛ šá߃¼½;»ÔÑæiIe‚ÖM6ãàvp;¸½³¤ŒMuµ]Cõln^!•5ªÑÔˆmíí¡Ë`–­s¿lVüqñÝ•_¤¿˜afoZ¼.*Ô%2Íü\H2˜>Ö4:]z•·á+î'OÊ­­5\.C.çUTÐj¦ÚËë¶4Sæ–¸„3\PÏžŒž$kÂ9ñÂóŽç'¯XÜ›ä„-Ëv|Ñ‘, ï+e¸ÜtÀÒr–B‘ÔzYCkš''Ae%“Á–ØØT¤g³­íþÌÙ²žKrW޾2mƒïÇ~<¯»·OØ¿Ù{()éÉç— …èË‘áöO§¥Lf¦Á9‡³Ýݵ,kh)#•ºÄny$WÂãl*Þ4÷¯¹è“NÆ0ÂÚ:„ÞZãdN šö*h†üGGw”£K8½ÑW`jÖM6ãàvp;XïÌÌ*èV3îîI†úC«å&%±sræ%%ìð!Í®&ÉCB(‚¸w" Åçv”i1gëUWN÷*Ã<¿{r¤?s-ÌDÛb‚s—eŸ&O{™ûr#ÈðžZz£E ½5¶Ð4Påí]ë⯨ •J•­mYP‚o›_˜@Œ@,0¬'êÏ»Ÿ?£ÿ‘o&Ü^>,´>p²=›ßµ©†1ôF«™ªªmê7-“Yãèˆ[FÖT¥:5{GÖßÎåÕæù×¶ÍL{eŒèé‘û¦š³}†Þ>Ò¸$.Gv5ÃvêP‡Ë¿Ñ"†Þh53b„²ó­D ¯„V3¶¶é‡jsåÜúZÎ}tíXÐÈ.lŒ¥1YëàvÈ8¸¬w(eF5c~è£a€´š©´Ð²y×®1KJjGŽ¤È»¶v¨Õ5‚7‚lí }þ™„š ¥¼PG-—;ÍJ÷ZQºbÄÎWãw W„`!ë„ëXX S×hµI·4À°XuÎΑ !ŽÂGÀGÄëãÿ±?pEsàjÉð9¢ˆn¼Æ‹7.ÀÄP«5,–ÄÊʸ¨Â½oj \’ØÒãå7}R°öläñå[>@È·¹¦É<.·_É.ýP)uáýÖ…ï›hŒï›¤:éw¥ß­NX­¼ÿHuÎkÇ‚Fz{wei7YëàvÈ8¸¬wt;¡&NJbü7Ý‹–г)ƒ c¸×¯Ëºw¿Ûw™LÑR¯`•*Û2+×U[=Þ?2¼‡­á€94?¾y»ç‘ÙœY}™wíG¬Ó¥·c^p„÷Â{õÄ{&áI»¬÷}®9&~ú%Ë ‡ÜãL‡]_oŸ–VéáAo EÒ}Ó4.ÜM3ÉW0â¿>ÇEµê2·ÜP+¹×¢ƒ|æzÜÒ 3ÆÙ»¯Í·ï\Ù½è•%ƒ¯öÆ^bÛ\Í4HœÒ.¼ßÜÝ»RÐðx%ôþëÒ¯ûûÖm¸ÿ‚ ‹v,h0là‰…}ë 7ãsrî!hš?,²²6Ø:Û5Ö:–¿Z^p»º|äÑw“û…EöèäÊCXÌ >C\ÚEìü ’¿TZÓo˜æ¿×C ¥Ò-!ý×É÷ÞîÞ*mŠ¡(êÓª©!/ôÒÿ%²¶|îäõ™îÜ[ßn™³È­½§ÆäõÛî´%Ž˜1ùÌk}5Û©S'^'‰û•ó«ÁŸ®÷Ÿ¦qÿ¹’7ëâ !ß›‘é)×^Û^¬r¶µ_ôìÈWÜ[ëX˜)à‰o6Ñm¥_×8›-.•Þÿwyy¬ž}Jh¹ÈÞЂÁ¿ÀÏ/É_ùÔJ÷²—­˜wÎóÛi²f ñ þá¨2óùÁGWj÷*¨Æ%he“n“›{Û¢ ­OÙÄæò£†1X|Ö]úêD»»löaHÁ‚cµl(_xmy¨š:mÝê«:-ä]àQ}[5éôüaýc'Gô½u’ž®Ê?}išrÍ+ÛúsÞÚz¤õ-4O,z.—øO»8dqêõÊ_“òª´ˆ´±ñPQÝjlŠÒí¸˜º3·¦\­ãñœ/LjÈCé.唥°Ì?ñàÑ'ÊµÒ’Š /½óÿµãJ'·ŠT(º0_¢Êêéú~ä‹ëU¿ÏW-žˆOÆìeÔ4KKX\s¿~[T4¯¹±>Jú彞À5ÿr«6\ælÇ>ö+ý=`÷r÷9ã²ÇÎrŸ% ¦{§!ý²ÂeC͇F "ñ‹¸~â}:ÐPÈ xšVEhÎÓûNÐk™$ÎXv¦ ¡RϾwàÄÖ2©ÖÞcü3/lqçZÿT5ÿìØöffi©ÐaøÄÙ¿ùšñàÉ/-ó?— ÎÕ*ËqË$ƒÍù} E§¢>9:úÃúá"NuõE7ç:Ãpó×Usp þS·¡ôòâ]»f 3t¸QQ¾®"‚ú‡É}ûPÑ©hCGÝ“çâ–Zm~Úß“ÓTƒëÿLÝYÁ2["”bH®£¾È¨Â‡|3Š;ª£ÇqTƕ˵v]˜/ãLN Ágæ/ï®M;¥û#K0Ívšª¹\†òaFúè)ýš\娀i½¨}BK‹ÙÇ’<j{—×MýfúJ' _õø-“Â&ͶŸ=ÁeBÛGîÜɵsz(Z¶pæ"sCÛÿ>Ùöm½¡Ð'‹fÍ7{€Y±ø?ˆSúWÞÔ ét(ìÊüòuL®§œ¼ôOEµå (ûACiæØÏÉJÌtMôݽL;½áPAIÙšÄÒ$©ÖVÈ!Ü+Úªñjk´†ÅÞñ;^‹9.üâ‹zœÅ±ü~Dòº•O—×Õ±Íü#GîxªWpG *÷‚8tú[9Öleì߃·}óíGï¾MGïÝ8 üsuÿ~¹g'þ¸ñ½O>ØOx|¹ ¶»³˜?³\ò Bß/éŒÆvuý_ßÊ·c6> V÷õëÛ´+b~såeP3-"f–”û³Õ$ƒ©·bâ› ~^ÊC²†ßÁª%9ŠÏ¦zx2o:P!/ÿ¹²†§eÿyíêr+“ãíz’É ]²"'KK…jeAJΛmÎ]–¯¦˜è‹žlî7U¼âDÞ‰UìU33\j‰µõÃÜcZm%FD[ZUU!oGÇTxP©ŸÁÅï¡fŒoš2ùÔü‹ÆVNÚæóõ7þ˜ë6w€Ó€v̬L’ÿÔ1‰³÷2_¼?ë „ž^ùÃ&”E\¨§ÿ¥£,Àjyú©/QLvr¾;Ùõ}¸+ÛÕʺß±&ÙK4œÆŽM[ µ¯÷òçâ×òsß>›=¡±³L‘ªèÅ4˜çKþgo."Ùö=†PKRè8­âp¼„÷âÀa ‚ã3p7£ns®R Ox|¹³˜w*”êï¯gGÎÌ4[AȲY•=|KÊòÜçùí|î\€‰ÆÉÓl[Üð–éËkÞ¸ñ†uà½Úi’²¥†F¾¤tÉm 8±Ä™¹=óÏíJ…šÞ;È»¥Åd×´wŽi¢?f"¹ìª6òÈU;÷Û¿ mAÏ«=g„Ípµ5(?þõë¼ÔT•½½ŽÇcUW ããeÒÀÀûæ4þô¿W}‡\ðæMi£Ëâö`£tnü–Þ‡é±Ã™Tij¨òS•Ä~rã“]X.©iiö^AW‰ÃckÌÐÍ7’_ïß)×1œ•£ï!hªÓæÓÅ|®³ú] %Pé4jåá‹§Ž0§l }G«ÅIç ó¯Þ»¶½>vOä5ÑâwÀãžPº¦˜STòWý½3¦Å£Ùm²ô ×lU „–Á%¸[Ïž<‚yÿÖÏÉX5°Xæ´_ìfáò!C¼ÁÆŽ(õFA“‹Ùæ´y~|™>¼~¤©ï6Ïo—Ð|&㢠±¸ÂÓs‚ÇŸÒ”µNk£ÏEô¨³jy6”`/þ/lÍ™ë= ³ ÝÍn÷Âã g¨!@Xã'!±ëÌ®W3^¥eÍ\³~Uñر:n£ "ärщô/~iÀ½J“´.gZ’èê¼¶6†a’t<ÝR÷‚g‹% ?º3‹Ð…Y¡Ã–ìÁšƒ›J6­s_çÍñV(ª–rvùÚÆ*,fÍN{cl¹zíå¼Â…‡3û÷5ÊŽ|e>½¿pìÊ‚ªÆ…¶ÿLâ~ûÅ&¢lþûÛžÓpüœ¹o ]ƒfÄ÷ñõ§oÚðÕÀÀU‰æ$Ñ‘‚†RŸù­×%ìåÏÍ5–’3H«˜©¦(&†Q”<[¡êËaÃÓçŸù·óN´|±¦®háÿ¾5~L\)Ì}£øUOƒÂÒÿ‘^öÂ4øÿ´\ÃùçìíëÔ$ ‚?KÈØç¤1_ðïjþK}ÕÐ5¸èBNÏÍN»¦ç'xì™Ì™"5s•>zÙiZ€‰¡R)mlJ´Lë€û€¥ú¥?{ýœP“ðfò›ø¼ú/å©´•ßÞ*p‹esDÏVµûµq¬83žž1Y<ù¯»^bÈŸYïÝÛ¸07­lj† ±Ú·Oîé©gßµ~,LN*,­°\Üø’÷ï5Ûc_y>Æý{­Q™ Xe)ùyc÷plËFlòk:g>}!ØÁ_0,X7²ûƒ¦¹£bGLUÌ&¯M®,ƒÞ*»QVV+ý~édË>©ÒŸÜŸ4$l½uã;b '{yºk.ej)ÿ†v¯B•aZá>ÃÂbN舄èÜÂÿ5Þ˜~hÁ„7ŠgXþ´tm¿A†ÅžÞuÇ?Œ—ʇ™ :NÐhï¾ÊzëÏÍi*!$gd8_úÓ™c3ûõÏ9;I#œí ï›àqæÎbÞyu0ë¥õ«—Ã?.å9.(.j|¢Õ&¿ª³Y—ÖS#ÖT_ë¾Ý0âšÉ4»<Í0Rìµ1Kg¾Z!cŒç[Êõ¦†î±?7Õ:»€¥¢”–vå=º+˜ô»> aCC<(/Ç}9øò`+Ÿ™á[Ý^Ê3jš&5sg³M;+r…‚°=6ô骧÷ß· o!YbûšÓ‹clûkBþ0Ö}³c Cq;øé¶Å!_ýÒÃ\™< ϨFè™|¬á>p@ÝfÝ÷KW¥WWÞX9Ølð*×U ìÖNú „¥búú¦WW´hî©Ëõ@N™s³4›céîò7›’K#2¼Ø^)(ŨfVqÑúlÌÐùSÞݹgȾšZ®(hð”‹LFG ;éÙŠ1k3þü8ïËõ76¼!é5Ñe|+ÓùíƒÙMᑯ¿ðпtsç7†xAÚwní*tÏ>4uÚºM¥›b%±ï;½ßGا9Sþâ Õã{6©Êaîôv³1†ÓòeóÇW‚]ƒiAcT3%Kåw+æö=V½ÓcUkõ”y€'ZÍX}HÒò妠ḦeÓ‘Âð~éÒgÒ‡ÊViH£ù˜âË‘ÌH•·®ª§R ›¢ /‡A1Øõ>6ÆÈÇ.â¾Îz=Ø&xÖû/^èqfÀ&/ZÖtŽš¡Q9:²JJšZb¬9œu¡ÓõØ= Ÿþ»ê\DÍœ÷2W_—]7-ø1!vWá‰Ð‘½‘ÔUTSê?Ä<—ñŸàïòÝeT3‰ëe†WEÍÀ.búH=™ø…ìnIy áÐòåF^šU®ýѨfèÈv¹Î‡l¡Q«å'N¬‰ÿ¥¶¶àãŸ6tè"ƒOx’8th]Ì‘5úøc¯N.æði;¾Q‚tdÐ(ôÞØNƒ_v(DYâ•ÚæÍ6ÍÕŒñæ]Íñ’lÉUíÅ‘¿UfO f<§¸F¶µ@–¡ÔÌÍ4Ôüñq†°(<Ê‹åµfÊšdûë¯î½B­ïœ±þz6[(:q¢fȦQNBµúÓ†Ôõ“ïÙè璘غ¥B&m=Ú2d´ÿ\»X„zOvi®f¨×kì¾yðÉu4üÒ%,5“J)€òóÓGD òê}¹^¾W¼÷÷Êßý¹þßx~ãξÙÖ Ái9’nÊì<–?E~g‹Ëš&ùjò;Ë}…PÑ’jµÍž#'tàÀ³µµ³ÛRÌɇ{Ð|ûí°ü|cßd$ç>¼23óØk¯e2a.x ‹9½§‹vÃÊÎ.æðéMã‰Ø>Øc_Âp B‚»©cÌ¿^d6'ûÄWDn_¿Ùr|KCän±~ª¯eô³J{¯IJÝÏ›7Ì·ýöËâ…ïOé=ãË5ëãPµo/e'Ø5Î7cµoŸÚÞ^Ëç“R)³´T¤ x¡é^§‹«7gžû£îaÿîwŸW÷8ß3B7ü¥ñOÛsíjûFÔ\â´RÍü•”4ªÚZ,6+(ÐMœˆ÷Y-BTŠ<å@õ“µ'#„=7z°=îÔ%´šiÒ4X¦S!ËÍìû¶¸ÜPÝ`!¶u­a– ÌºwdâÔF/I‹ÛXÌFÐ?þiÓƒ¦‰¼¼ 'O®1bÒ²Bå¥Ô4N¸ö¶7Otå´r=hÁ,~Ìz,4õ^`1÷oÝß³?xa݆/Ò»Ó4ÜË‹U\L(Js󺈈¦ÑÚ†9Y r—P1èû+’”Áñ,?}uß7ÚÕLÄòMôõÛØãÙAQÕ*¾ë• m3ÿ©™›-U%%øåËú>}Zþ!A)ã$q—¥—OÕž"1rŒÅ˜_ºýbŰºG[K“¦±<Ç2—â%+îÿþèPB\Hzˆª»Å!™&µ‹ùÚ„„_ZŒÿž5ðdеÅ2š¤djm?àºôz”eÓJ„+5~¤{QBé¹JõÕ° „´âó FT«shùÌh8Qg*9ßüS2}Ö…šOžŸô8ª™†~3Øb‚ÇiþÛsßÛ±89wަ¡Ì=FhÓ„Û탇Ú~úZ}RxÌ›Þ%VÅ)+ój½ò>¸òAzm:>f>Ý̺y ½¹ŽŽ­É”QÓ¸¬ä±5xéTÅ}ÕLö EjY\OÇA¢?î:þü¡‹9¶|ùòýNmíGµ8÷"anþ<5à €.æ_~©›ß0âK_4?½S‹9Û<ûÍÙw¾¿ÀjO¿k¼•¶<íº>ÙcÖüñ#*‰šeóF5œ¢C[¾BÃg£}›dáë¾Õ‹EtPÞÇŽÕ·gŠw©ËЉÚUV´?ú‡Áž†Õ:÷ïÇiÓ{öìé’:‹5éС9ÌR÷è#!{Gž¦c¢ ˆ‰:£¶¿¥8ðŸÞÜ¥îHŠP1R*zSjzÓð4j¡ZŒ‹}J”Jv½3HNZy+Na\ ¡%ޏOÓ§áq5·4팹Ç÷?ÐÇ"Ÿ6iÿ3(Å_†fºW8ö¾ëÉù׈ïœè†ûxez•WŽN¶|ÚCó‡y Ú£Çó-Ë´ðiðcž º¶˜ÃC¦]0¨™¹µh“yä$CUmËçtÚáÐiPjÈÖ¿öÞqº;’Iõ2L(+áJ4”Vq&/¡è±l7 6Ì$«”ç½óõ†ZçÑGF|NÆ´ e»‹œxNñÏ^èæ"óÏ3Dzò…KjP3"†Þèý‘޼— Ò±„j¡•ÂÊAêàZïê]ãí_åï[0>ÙþéëMý1*ÃÆ§Æß­ÎÍZn}›šy jæK›ÌùCot€þX{×óÝférÝ/÷¿Ò_:AJqïÚ¸÷ÐÅüaÍ! ÝÝoïRDÇ ü.ƒ­‘OÉWGœ;Ê]²}g µlÎX&ö$xÉœi~aÂñÞnöcEÎÊ6DÉdf……–YYôžT©:óbJ.æÞÖ$ÓJMs'y¶¶µ<Þm‘tL¾M»\js5c侚†BÔ%é¥!g†ÈÆ4NTcfæÛŽÅüa:3™Ü9sŽ?þiB¯bqž••;­§† [D’°%õza2û=¥Ç1ãoZ~p'Fù£ºL"½”þ\dQ¬·?Â,$]ÂÐÊ—ÑÆ ge%„[¡ Ô0MŸ¥úsšúrá?Žb¬#ãö>õÏ”èÃ㾪Z‰å—ò**´\.«®Î&%¥ÚË«ÊÛ»s®D“^sç ¦Mƒ„•¶bûhCÒáøe//òrûš¶Z­d2KE¢\[[=Þ>ÃÓ4iDs5sSÓ  M*z·Ð.E"ª™1—1M÷î« ö”•F¨”ñ0à•¶ó‡œXÁàŒ¹‚Þh–,Aðdb,æK7cK–du²ixÈtó„„™il{I|)Ò:Ò¸Baâv3"¬&„Sj<§Z ·­Q`˜}v!£,ê³~Sb{¼€zü—ʆÏÑÌyHøä, J`ħ~Ÿôó˜Òy®ýÔçä6Ö‘J¥Óŋ꼼:á2\g„§Úzg<­iHÍ¡µK¶½=½uÄ¥ºÍj±Û¾AÓ´¨fhN•œ?FöüÍy„qœéî>•ÞPɸ޽79¶-—K˜ÆF:l_á>Ãg9ýC»ÆJpÍzíÁšÝ‰ ‰t\=§Ü¶¢Nqô„ÕŸû‚KÏ£z±)x—+öÔŽr³:îü´Äz©1RËfEFZdfvò»§'%¥Œ¥bûyökû’wƒ/˜ó„„nr/@߯ […ó‚4 ‚èŸðø·%M«òóBŠw.ň¸^½ØrâeŸpzwÆíI¼µà ôKn.ææööÖ&ôÌÚœ/¡ABŽQÓÈmlxuÎÎw~i{BÙ!µ¡ëô0»±,C¯"N;õReÓ †ÿaËÃLý®‹O©a `u $…² `RØò93‚PᩲSM‘ž}æÑqµ1ÙIœ< ±ò\é>¡j$šŠ_d2ÊÌ CØ1¿{ò de7Ö¾j.—T´¼¾õÌp»]½íÃÈ›‚… H:Ƹ}áÁ „ f…NÔl>u¤+@Иo÷ °ÊpÜqp9cýzò‡ð ôݺyÊúþÎÙ[á+¦¸ç½ÍÒ‘^LÅ)|>VWGÿ%qr‰Ù|eõ–ü-D¡ah:C.×rfÅÄ=74ð;â²1²æZ!ãl¹n<×b¼a²àz7–êÎuè) ~‹ûS¥¬òRÒSº­uºíM~ä)<Òï-"Dm F9˜XC Íó&ïÍ ÞR•jwçg<7÷0½ÑjæÐ¡9oòöJ«¤¦jw®ž¸Lü>YðŒЇH¹œ[^^Ú ÷éﺓµn‡ŒƒÛÁz ɺÝÏêh5ÓÔo&•,Y¶Éo5šRì¹–ú,Z_õ3C]3Apfæ_]ås›]ÛÍÖþÂ…÷l•‹Š ‚±5£PØÇÆVûú>ÄJXq¿‘´´éBLÖ:¸2n늛›ÆdÝîåÕQ‚æ65CCè‹7ùì0©·û×iÇ5Ö‰·øó„˜°ó3ž›{¤ Ý^ëËK‘ ÙßZþ´]U:£¡m¦Æ×·Öǧsî7˜‡ZבÁ¼s„¶QÓø”ò×z…Ô-È©t˜_ûn²6ÅÔœC«È…f'½8~z&SfgW0bDMÇ«™&`ŽhÓ[î–d8•ƒ¿æ)Š’NÿºÔçÝÆ~Œ/›M&ÿ«gI•ŠW^Nïµ,–ÌÖVÛÁoa:Ÿ-凔̜÷6H0N—\´Ð@»áÁg|îÝwµò‚¤àUñ{)ê\:Ò2+ËýÄ ^E¡ÑÐ{:lÙµCÛÛ›uþAÍŽ9üw¹]¤f´Ð@û‚!4ÚÚv°îý åG?ª_=¨&ô£ÿ¼Áƒ›æ#•J§‹†Uyyµ2ÍslŸä†6ˆÞªÌªi žHÚ'‘<ÂTÕlUeó¯ø%'ºh gf†ä1Û/’4_¯uö‹³z˜ |7ŸÏ; 2tTšÙÇ}ëĈW¸Ë¦ uòÎ),};[1­Ûdvg·˜€ €ö‡C`‹¢²jwj×í–ó¼Ê~8ÛÏxˆV6E‘‘î'NÔ9;·òÝS?ef?„²º5Ìc¸%b’§T¥T ÃÔÓCÒ KJ¼->%0¤ˆÑ&µñj_÷WZy6ËõòåU+´Õ}ßv¡TË–åi]ˆ®ä¯œ £èQ¯Ý"›>Œ½M³þÍ’oo(%MšFncë¨xè”)ŒùÑÓ®Yú·wæüÊGLJ hà‘@íÅ= hà‘V3¨A:Ü_FDF¢ü|T\|K¤£#Šˆè‚‹A&NÉ™‡;^0e}M»Ë× 4e ŠE©©¨¾ …( À rH² . ˜8“7‡·oP÷´véßß°= Ó¹àpßð¸‚4 h@Ђ 4€ A‚ -‚&5µ+Í›¬up;dÜÖ!ãàv°Þަñ¬¬®Ì¿ÉZ·CÆÁí`2nëíhÚðÊ)&¦ „mž¶k‚ÖM6ãàvp;¸2nëgš¤ÿDGwžòö6lô˜šu“Í8¸ÜÖ!ãàv°Þq¦qÔ…˜¬up;dÜÖ!ãàv°ÞަqZÚt!&kÜ·ƒuÈ8¸¬·£i¶ Àc@Ѐ A4 h@Ђ 4€ A‚ ¦ Ӧ.kc m¤ ­›lÆÁí¦c½Ébf2`2þ¤Zon®í¦Éèè6}ÅŠË–-ëB×·ñúGÓ¦lÜÞÉ4ZÜÜ•‡‡ X‡Œ?©Öošk‡ ¼rà± h@Ѐ  4 hA‚ @Ѐ A‚4©©]iÞd­ƒÛ!ãàv°·ƒõv4geueþMÖ:¸2nëqp;XoGÓ†WN11] ¬hó´]´n²·ƒÛÁíqp;Xï8Ó$ý':º ô”··a£¯ÀÔ¬›lÆÁíàv°·ƒõŽ3ûû£.Äd­ƒÛ!ãàv°·ƒõv4ÓÒ¦ 1YëàvÈ8¸¬CÆÁí`½Mðm{@Ђ @Ѐ èZþ)GÒú endstream endobj 500 0 obj <> stream xÚWÍŽ1 ¾óyÎÆ‰ó'z@°ÜVê q˜ÝnoñþÇÉx¦ShUm“ø÷³ý%5¿ K`’3)–)óöÃü2.á”0ÚÔŽs™"äèMΓ‹Áœ|È“/¡ ?}ùá¼ùôÓ¼˜óôìL™JtÑ\n$7y@ú—Ò”Hêrý6[ë’µ¸Ð'["}ü9Ó6ÆóÉa¡o¬µ7úO‡ðzþ~ùj>_î­#LÇuO2ýÜ|T_¡û¼Õ½zŠtÈqÝv¬ÈkûNk8ŸRßý†46Iöò.ß7@Pú ÝøVšÍà%¾×Õ7GåèsíYÉóåÓ̧çÔñkI£¸ À0‹'”t±×˜¸Ì”äai¨e0rÍM¾Z8,*dÙ:ër±­9L%))‡´èâ4U$çP`^ƒm+]V(®ž{‘éi\U;´.;y[Ãò^‚‘r‚g<¶ÎÞ7ֆϥUà‘ÖQMÖ™Ê*3S-uR ·MÜ+l}hÖ.!®èÓÉᤧN}‚ L‡,½.HSsˆy(k”àD§âóF§çQƒ¦3¬ 6¹¶ÆK2izòŠ”oÚï@¾­p•k:ê®i“íÈ·Õ#ä9ÒA­y´õ’ë‘X]oæ‹]‘ÜsÁaüºs$®ÁQ¬èG*Ò(˰>bîjß%7k\Xiáj õ÷ª÷j¸4n²¢&@¸¯n®ï&ß³¼zŠsïÅ-bBÊ «?Ýr,qxË5×ýÝ1Rå`ÂîÝÑdÝÖ£\g¨šrxÜ_.¼ûˆ®ÃTJ9 ëúš©!y¢_Ó”ÍSSµœˆ9&²41Kšk}wõ`ÂöÙ“î ·OÝ_հϳìBBxÿà7E‹ÖPÒŸuü¢"è:,·^°uÇƓﳖËpp3Êc ¿¹ÐéTå;.Òza ¼³™8èÿ¾>‚¸ÑÚ雪ñðû•úÓï]ïöHÇëRwdÓë#qÈ©Ý\y¼«.f¸ú¨Ÿkú =²Dé»ÿ2°Ap{Àë¢×R^B^o–’] hÓûtð¨è¨ DéE‡³z–æÃÝœ;žr¹°èfû¬ä‡ÁþÊkÔû`çM®ØVÞÚG?j6-}å–Ùþp;[ ò ]_S¨¿#c&f (Æêï>(]íåÃo$+® endstream endobj 507 0 obj <> stream xÚÅYKã6 ¾÷WøD•(ê r(Ðè­ÅÜŠ2“dO=tÿÿ¡¤D½Oâ™Îv±ðŽ-[|‹üÈ,ÿ,fÑôÏ,–à“Šiyý{ùéyùñ³€VÞƒ[ž¯ËÁ*kp9xTÑÁò|þóIkãLéIÇxÒé œ¦uçÊ…. {/kšž]üõ•×ê ¯¬¡¿§ã_Ï¿sXŒVI'ÃÌ5±OÊ%,|“»ãsÄŸï…ûI8^ëW˜e¾"¹ðÂ;«<M'Òú¶bd¥ë,z´ïY['”ne˜(óJx“Or°ÏvÆÇ§A’ÊYÙeé­câ§‘M&‹Â­|^¾Š"t~ÛT;­Ã 2£Ìü,&YÝoº¹f—“UÎIhA£M!‚é©+žijQõ"ê®Ü]‚*kEjYa=óM?m¨dì1ÈG~ ¨s±§|ìüÒ%1Í`€üqåÐb< ^(g9/U³!Jðãü`âC¨Å2>•Ë9óJ÷çòÌÁi¯Ý+y-òÚÖ‘ A™h „¼Ùõ Èž\gø#Ë+ûù¹æ ƒÊ¢‡1Oç•3¦% ÞEAF>ìÍÌr²ì1>•Z­ž_¡\ZD* ã2˜»5T 뎘I²Om~ð«ø $ÐzvªùAòÔv–‚¤lð¢´ÅêhÉ%Œ¾õ|çÀjÜ\èNÌoýtPÈìZ¤ÿ0Ï?~¿~)N™B¨:49%ÔìÍ]J0Už–œä9Ô(|Ì ý% ,kaøp—õzoOå=çdþ¶®Y²·y*ïòÑ5%18à´dmÓe!–/׉Дó]tâwÁ6ˆBHŸ¦—µÊ‡o¢V=ÓÝâ#SáÃáY¡ô©j`P𱈫béx‚SF~gÊ=lW¹z‡÷eo]ªj¹2ϵ²à°)¸´6•£k;þäû1ñØ1›×„#UdNšš ÇÖ36›rx¬¦´›ÅHh¨A›³›õÖsÎêâ¹þ¸é9åôš]/*›œx§È¯äã“§Ëåê½ÝJ©U€À™Kùø¶3zrž èì…± OµÄµ’=Q$„®£¡¡@œ ’jHä4ÔñËH9ú§V@߀¨Ÿ –ÊOò5Úê2æûòØm  «D @c:, ·\êMy¶’VòÙ4å,ÂEÞ]zæd¥áÒÏ1ŸóL‹¾ó¯Cæ -»b½CÝë ã"åm±PŽîie3ÀM 3¹Hšº t‹Pmd"a±è×[᜷ ¡*‡þÚ‰CÚ¿öªTÓ{Ò?]{ý7+5U}©£(v$“LÉóÖf¥h;ãýÏ4RÝÏA”OW®}ŸfÊI9AڈʸøŽðiG,t-îZú» ©Ñz*¥°†Ô¶Bj¸ÛlÕ””·ûÈ^ÏÌ‹$a;ò7Hz¦ØÁU9£¤BvOMñ^Ï™×6S{%;ƒf (>×QÉÜÛÂÒW¡åy]ŸÚÝ#c”Ýf(âåOèY¿õ®QµÒ6Þµq—÷뮸ö¬±K(\Í8Bx£‹ÝÔ°SGm—¥6.½ÞÕ‘€‹‘P$B§Ô»§ÂæÁôaèí[Ft¾–FiÎ!Žæ<«S¹†´Ç£ÑgʾQµYŠSë¯:õ: Çi@aôÿšìVß®¢RÓŽMF:Ò—s7¶<3Î0Ú:*.©à±*ݸt94‹0e¦´!ˆ¥sÜt|sõr„ïÎ6gFéù@%'‰²ÐÍ×-|Í5!g¤2l°&ÁG¼¢dKz;€<*ÑÚ¬éæ¾©Ï_ÇZ®Tô¥^·ŠÞuüù{ñçôÃ@ñ”ßSÅxÏf,˜Ä·}n³Ç¤žÆ¬_3>¥Í’§8BÙ›ÜCÁ‹‹0@aÇ% ¹üÞÉŠ¶ #è`YB +F9BJkqwÈÙ ;,ÚïCå ŒSê6÷ÉâŸ$¿\{´8?Íû¬s˜Zž†±Ñu²&ÞÔõ蛾¦z©ÜT–®²$Ÿž‡ÙÖ ¢;Ì _Jâ˜kÿV(X:…Éô»@ŠNë~s@ÉoÇå–ð•wææ„ÁU€’ßž–¢SqÌx§Ïhל5*%û¿5ô3¿ ÍwVþú»Ò‘¾JŽ:ÜèÙµ ?‚+îè@ý}'T0$,ùÍ! ngmC”b{Ù7Ï0\@ñ5–xŠwt’tëZºÂï‰â³õµÄ|‚÷ˆ;¼G7䬲¡®?ʲ{7‚ª‚à:ï …ÿ/Þà׺ùg &žo/ï€öf¡Ç@˜t^ý¦·‘!õ‘ÅÇ[¼PºÜ¡ÚLú.^¥hW À¿òz㇠ÀÁtªl+F’â <†±”§øž) óðçÙLô&ðrùO›}Qºé‹ÊŠJäÞþ(íhd0ª€q'@%ÈŒïÔI‰Zãwˆ‘§&âPý`•6g¬ê‘ª’…o†U AËŒUgF{±ê0ºNÙ÷S¯0Þ× ,Dë/èa Pïÿîdæ=ÙÁÝür<p]g cPÉa­´Íœê¶ßøÃq endstream endobj 510 0 obj <> stream xÚÅZKoã6¾÷Wø˜Ë÷r(Ðè­EnEÎÊöÿ:$‡Ã¡D)NâÝb¡uLIÃy~ó OÿœÔIÂ?u ú|1¾þ}úñåôåg}RR$™Ôéåv:a”ÍðàËòÇ“Lî&¥õÏgmÓ“”η \®|GÚƒËÃežÃ8?è,|s¿Y—ï×WókeÍV2viO‚’¾Y|Vã–åïç³zê[º¶¥¶Ò/KÙöÏ—_A<ËÅSÑ m4h¢È&M¸‘Fç ߢð&Ð 6TQ ¶Ë°Ö˜ %»‘ì åÖ]À{½{q!K_47cZZá"<Ðð@OßÐ ð] ›ÛLëDT‘H`MÖzÉ~!¬…ÿ”9ýþËðõß¿ª‹˜™‹hªt'à'øj«¬ÌÌ[QjèÛdÚaç+uY¶c_ÛvƒôV '×Û¾¤S(úm½Å–¹u!Z$’mïKzS¯ðy~=w¶¶T éWtuG›¾Sž…ÑzÅÊ{åQÊ‹äâŠJ& # ‘õ¦Q+TÔIYa¬×\+Q šjU~¬§ ¤lÂÂøÄËà÷¼þ5ë}Îpâ ¸u©;-S²3ÈHl^»Â}»6JŸ9õw8)t^ª:`о`Â!Ûù©xO@ZHõˆìè¾"(*/Æòµ<‹AQ`°òuÁÝB}8kÃ^;’öÝ)J¿üìLRIhi:(Ù†¿HMv°ui è¡ø~Ä]âwc×£è½Hüa;z… =£ï…^çšy>ûfRK¥L Þ\È`X¤ò †>—€9•í|{ ‚€kƘÓYáljÒ^ÐrÊòU¿ÝP–¸²GÓ̳Êh.s¦Ò9ÿÔœD¯Z©ÖÍ7MKšï–Bž:S*êËí9‚òJXã»!oèÌWt‚Ybº² Q”7nà™»­IKã¤MbôPtG™O¹-^˜óËLUuí¦Œ´€ªŽØVs.¦gc—¬‹QØôè6*@¾µk·±TÔƒJ&¥ûmmZ^Þ4oè%‚ |Ëeˆ/{¦—À^N‡ (ÁH!3ÐB¥4‚È@šµÂËÊ!ä‡t«Þ<ÂïÚB²Ø¡íʬTÔR7Ñí/ãžU)A Ù«èÖkiZ¼c†˜ÌÙ‹\yah3{Ù<hžCâH¥cirõjt Ñ Í˜v#s4Í^TÚÙÝ‘­¦±WÕv{ÅËM.…Ã)©ØŸÛ®ÞC×\û¢¾ ‘°AŒºÒ}¥·h`æ‘ w‡ë@ÓRe.,^IFL8 ®ge5$Ac†%_¥ð¸æ”R \L•BåÖyòÓ¤”Š™\3Í·Dïçôü“ÎB¢Ó*ʨZ9•ëZµž™nej®¨r@›^S®Ž.ÿÙÛÐ?tOOU-3¯Œ8ê?°$WW4ZÊ/_YåxëYØüDtZ@ƒ¹FÚßÉéu_E{Q_X°âŠŸºáw]›&¡F•5kVÍ4ç,•#6›ª ñ×õ–žîEn¬âQíˆéܱªdÚ­z-ldÝêeR“æB­œ¨N$TGº3ha§='¡«¦J ¶Ì 0‘/H—zU׃LéK¡ÛõÐ}·ÆtØowu¥¹NÕ2´¥ïï˜>Û¦*¥ ßVkæŠw¢AÍë*4¨Ñ‡5™Ì_W†_­ÀRzù<ßA‹à>Ï÷HfA7 ~­¤ÉÃnÕà?za¤ÿ4ÿ™™Þ½®s0‹Éî¼'ØÝ¹Oó>’Yé~Í÷ƒôn YùáÁŒ„m×T4€¥ÓsÖ[œƒ T©~Þ;Æ1Ο6sÿÍæ8¼qª{Ô{g7|tS3Õ[£Ê›I²F7NôìC%ðñYͦOëÛžÝlðlE0ÛL7­X<èe·Õ¤wú±%oÔ¬AÙ+ì©]8[“Ù5|ìÓ„xc €y˦à©^ޝÅS‰²µ³ê£©¹Ês«ÇÙsH½iÑ+pÚYE5YzÇ¿"uÐm äXU ko0‹ŸPI“q«×uzGw´ªgG6Í«W3(»îõA†®èQ;ÿ!6Ù@ôJç3õ†ç´¡»}<÷zÅÏÝf§ÐŠ[7yÄ1ˆM6gKit¼^}9ž—sŸ«ºÒÊ0’œ¢OéòSñ™7A¨&Jì†~q:2TBñîqš©@*]õèºø*6™z©—\8â2Çí-ËngBsÀfl{`OšZ.ÝòÅlp×㈣žÚ4o|4NSžqVR™7Ê­uÂqŠ"ÚÈûw쪕ðJ6§c\# ºi~ž…122·áƒo¶jˆšâk|âÜÒ>‰ºþbB\Ý; ]p'׸"™cÆŽ}ýnö;ööT¹‡OÄ£C{BíúÐ0[Ù×x¨ ³ïÂÈz>ª›Ùä³[;„™Ñ†…Y7èý£°³Ò:Å8™qó_±o ¶27›É{ÜHD«#Hw1K)è§¥ßQ×4Q;‘L‘H[ŽDŸ»¨>~áB$*ëoÎHTä(¤â\eíMEú¡27УâÞ¡Dåw8”@Æßq·{ö˜B™vlÁjÔÌ| ­s3ª¹¥Š7Zçê,e[ÙÐ,ú½ydv‚uwN9˜v¹šoÆ‚c”œ u7íBÖôTW Þå÷Q¤þ|&§!êÙdÒmY+4Ój^­ížPî‚Dd3ãï¯8ÞžjÚ(€ê=SÍð§šXküO“M§ÐÎ·Éæ¸ßGsãLQº£ÝÜ5Gh8ùÖ»mÔ2kø>>JVÈ\G;§…q–ÍÓšÔŸe}V÷JGaáöd#ÓæBòŽ9Ô€ågF+2‡ÚiSµöû¡ÖBçAÕ4çóq“iÞ»t­å}Ê$uN«>£E %,›¾g8¯|Ä(ID¦=N% #h¬ÓßÁ»6}Ì»F2ä]k-=@3É ó4³ÙècšÉÌãÎbì=DCP3 çÔgQ8’y0î˜V% ÎAhú`GËÆÕJµ×~ûá?|½‹: endstream endobj 519 0 obj <> stream xڽɎk;qÏWäbì*R” Á twˆEîí ÄþAy(OÇ'c¿V«•œ»f×èÃê éOœ ‡ïÿþðãðû?©ƒÒµ…Ãëáˆ•Ž´ðÇÇ?NR*+¥¼Ò§;uô´”èÿ£ücyŽïÑÊŸçþø Æt"˜@Dd°ÖÇ…ôùI›T„NJ£ò;$´¶ EPdP‰ÖñˆR@(`ÎG0p*ÔìRYWE”„J_ó/ÆÐç…>e|Wá)¿5²îa(ñŸöš¸Oó¯q§AÞ©?óN¿Ø 祮/X –_#%¾‡˜ßö´è1¡è^(€A„`«˜#çŠt¢IÔ+1‚–4Äx(âúÈ ª_•(Ó–ÉÄ•À-³½fD7U}4!%ñ©*fo£¢ùWVFSÄÙÆwö'^›pK<8*ư¤*é+¹ÒJýœXÑûb%2Á¢Î(V%IX&Úu²›¸Ç³%Yy1®Ø‹m&×ôK'PÂÃÇ/R’¾Í6ÿsùò¿eß3JL“VŽÚ cYnºãnu>“ «ò aĵD@hF4òRÕá‹øM±¥¢¤lKùÜ-ScÙð:SÏ@†¬™â ÒÛjÎ|p²6WæŸ×ëâwÆÝù0dS†\5fSÖ¡·¶B+èÀÔÊÅáÔ Œdãƒõ-òk}CÜ)y*ÈÒ+ã«)lâm»PÚxbg,7+ï::E¶¦=>éèÐÝ:‘‰ :sy³‚ Ðv$ç 8†QNN•“cÿŸ=<Âé<›AF pÝiùX!&7âZÔÔ}¨’ÅÍ8î Aú¤~mÖy‰L¶<—£r!yÎáž:fEh²kÓh¸– ŸàÔJH×TÔƒgÇFjÝ|F¬çðdFLï²—-¡&ZÊIM9ï…µ×U‚r¦çŒÔß6RF8„ :I1J¤¬"ý}û6ŽÍ9Ï|äC—¼ yxa¤™¼IDNJ¢ôNbäj*³bè ßòÂsRà©%Õêêºð(.ôN%CÝç, ·`¦X[¥gÅ…{×E¾.ÛÉŒ%Ä}žRòª gcLë×iaeƒÃ€®o®=›u'”Ý+(©‹ècd‡Õ?F95rå%g#0®'é+è•-Túù¼e¯Ø§_Ê;¡c•±‰YÙù›­óO=×0­ßþ½Šî†‚{4`Êwêe³¶)4g½äßl a†Å_w´XYýî¼þP/ØÞ7ä§Û ­pž dSYøˆûIZÏrjñ‹å#¿m9gCwY¥ùÃÊR#± Çhù¤¼XŽxÛmj²o9CgôŸµÕw—ðc|+Fr¥ ~¶È&ÓÍY_úÈVòg¡­J¾*'¹Çâ–î/™¥êNïåVâða°£¬Ëβ‹ÍÓI°‹“°‰ÈLÖ¦B4ìW]}ºN^ûeÍrêšÜrvЦÏp¹Ðž3¡1XÔÑšØÝ|*ãÚK6+£ÕM°S¾’í~´BQ(=×á„ÞqÛ@w­ƒCW*¯×ÿŸw ÒÉ©6žŠGO)먠U¡û³fë%»˜"O5–˜VtÕx²—†÷ÁiªëkXËÚŸŽg+¿Ó–¨Ò9NF¡Ô®™U§®o‘Ÿ8+ÀÊ[¢8ý8…Îþj aõxŽ‹l¤ G• …šžçÏÄðÏ*$Wðå-œê¤i9´¨9*g ¦e[äµûmçU­M~UuŽõnduCq½_Æ“:úêÿé¢J…¾¨:+ujÆR³,+÷ôÉA_®ºª+¤2‹Œ¶Šž•ƒîÚ94ÌúÕn4Ó·ÔP-f ÊÀ¥ ,%G®úÈñ ‡TÍ€FŠclá1vºr bI—?ÑÍÁHÆng/¾î‘ñ Á[ƒ0rƒoŠÏs°ÓKŠÆÙ.ˆÆsû܈{­ë“Üx/`¦…áÇ.wä :’$ß• BŠöÖmBNu£ò1Q*§ ÚÈRçp•2©ÐÉOæú1ɶX|¼-;G«À|³ìF¤oÉn…ÐÙ–Ê2bëÆ¯—GaþfÙHß’ÝŠm®Êªô,ðgæá‹e\¾}¯ìF¤oÉn5öw¾ZVHïœÃï•Õ„ôYYŸ£Í (…1©CYç²HÌw'ø}©N_¾WjÒ膢Ԓ+—H HP[0rOj_ %Ê|¼ãÊÙÉÖ!ÛJeA°Rù8Œ`2±¦K-ú$®-¸ÅϘXdd7î¯8O­š¯°øo½ÂòÚ }¼Ö¢ú{-Ö2ƒ.¼L3膖/VªhoÖÎ9ÑÞLZß¼Y\a»‘¾-÷^ôñ²ÜÊat*oNåC£S¼3:5¡ŽNÕƒ£Ó´åÑÑ©|utÊýŒ—ÆI¢¼¥ò:ï¬ß3‘´wg^ÊÚ/*TúyxZKÚ~x:ÔÏ»ÃÓz›lèß1(%s^ã· JG|¯ J×>9(½Ÿ$¾;ÝæÎ÷æíð˜¡Ad‡R@ë­»°Þö·ßýÔÑ7Î endstream endobj 527 0 obj <> stream xÚÅZËŽ+=Þóy»|—¢,à—`:;Ä"3IX ðþ |)—ËnwÒ3‡4ЦӱËu¯ÏeŸþuR'™þÔÉÃÉ»(B<}þóô»§ßþA”Ú88ýxžÎZheò¿4ðÇý¯)•“R>Óÿx=›ÓðRÚôÖ¤·Æ¤g›þßÒYß©ëß~ü1‘Öœt¡lâ¡Ru¡~t¢ãiÎgúOŸ˜è¨ô>Ó†ô)QFUX­ÏZ ˆHUë4ÃáL{=Cð—ü­=i{UY«Qw5±¾/ÿm–B]ÏîR~K³B~ò]¶,«¼§_¢/t®eLê‘•¯Ö_@RùŸ¨'¦³¢Ã@5ò`ëôBÜÂõÙr¾dl4š|e^äc´©ö‚4F£ ø`¨‹f5g)¬AU®jž€Œ—È^¡ÍŒiBÒØ‚¬N{£}%¬?+?E4ÐHÄÝR^¨œ`²k± eìj °BEÕÏ 'Wö. q„ñÛ‹µÎFƒ°ÑŸÎJ k›ÆCuZÜ@7ç®OÏîiÙ£¾ãñ`6ßÈLñ岇¹.§«²ùit_V¢‹×oÜÅQU´üK{hm¬¬WFù}Š%ÁµÐ&ݘðRo…•;.§Ñ\É8ªæ‰³²eÚÕ†æjà‘—œðæ$*ÅdõÓ2\ˉù“ˆ¡rãPy\T+›{”'ž«NCq ›ôÛÆµ”Ü„@%ÖXvCÎHIúÌ{ö[çEm„Õ†&³Øol±ä‘ÉÆÒªiü›EÊ^&/dÛF½½iI6Ñõh)vHÞ©U WM{î*S\±•ž5Wå÷›E¿+"Œvªel¡oˆJDë7úÆø8c„tS”3HáY­™ó¸‰ö‰žêÂ×à°P—!W€s”êP¹ŒÂL S\LS¢´¥Þµ¬yêGwE µ…¥1G3|PWç©Î…aÔÖaÑæÞe<‘’d½UW+3o¨LÓ=Ÿð”‡–­\'M7…Æ}˜g´ß” ª×J1vû·ÆXUÀ˜ïmu«<„2avÞJ †éºÄ 7ð\×pZ¯2•á6ÁX,¡¤€eÝ:‘¬žaÑ_´!Á|›IâOnL´dOEu®±Ll>0QÜY\)–‡*–,ç43.Eª÷^ò­]ó˜6wŠÝU!ÜÏc¹ÊD5 `Œ;=ĸl® J{Û\2—¤:VÇPá›|!¹€ó8¹¾|0Pãu¿.Î6¦WÙx}#Rüª Ÿ½¦ud»°Q·'p‰ç²N.òXŒü¥‡x!­ ÛAˆ·¦Œeå1”ÀÓíò œÆùÙšq×ì•—“ás‚¸ˆÒØxwÿœ²)ÉW¼¢Ä^-•±"í‹ç…r„Wb„—PÖv^QÞ"ÖÒ©  ½i‰é¡ý×ß4<µ÷{Ûh•où¯adÕS!ºo‰ùuæVÄÃÝmÒ—ëTÂC?/=Ö`-Œ‡Es·o=÷5b%ë`ö˜w¶m{Á í¦YaR%DÔkUÞo«ù²ãï…d‡…¯s2ṁ^Æ6ËÚ¸„Øñj;³ÍŸïàŽ¤baêPŽjgn£Žžôu”ÔÃÄ9žŽ¼ú.âð^ø G5¼Ã §òldà 0¹i™’‹ |mÔY†¬õmTnÛ¡ÏÛª=È ‡ÖŠéá¼]`w_¦Zjíý!ón—1<=36ÙÙQ.J;„:|*»øöXÙÅÁºéÒ¼-»Ê%—2k\ýý‚¿éàà\¾­“<Ï!{¾}Wp‹ _)¸:™Œ’¤µ×—FA>#á‰Æ´ÜÙ­YwíC§¤¼ÏAÛO¶y)ÒÎÞ¶š_S7¯zÔP¥ªg"¯z{¿“ Ç—nAìEÍ×VˆËªŸ}ëKU?†¸­úÿ'ùTøð¾Âû´Pãu¤^`–ÇÇV8pG+{4Q éԜӾZí—Mt£]rNØk¢kj¢§Õòù¹–ï„q lîž thýu ñ)·øÀÁ4ð^‡:Jâ^×Ó›c"$`ßMê0«úÚ€ƒ¥wk•LĤù"ÀúöÑ\1@ç}kÚZ‡® ‘.TkUÑ/«Ûˆ@a5Ÿèm®S MÜú†ŸîÏÇ Èà$ÇpNˆu½^z}nY¢@ÉX2ÑØ—=z”ÙÂ~ìù-ŒŸª™n¼ksÿòG¥@µüŽÈÛ ±Y<ê\öeðØô %ï÷õG· ÜÕlø òA×([«ÝA¹N™˜2øK¾«[îïʽ˜rV¥·1eéznámÕêé\G®wÅŸ¬Ðiÿf®£y«à²Ë«¾Ù± —Àƒ‰¥æu5„ ê ÎW«é´ð®ÀI޵qƳ @ÏÛdxwƒÀÊ_%ìTzNN²}Q5&¶Ë‡âͺ¤ëŸSôëðs1Uú8„Ÿd7ô—)䎷Ør—½uXÂ,÷¡op×·˜µIEN·˜«m©?ºº:†»wDYŽSvdšf/ƒJ®ÃºQjøFp©’ÿ÷™=áeÝNÛì«ÈI(ÜîVíØþuVW‘ßaÆoÇ\̧@ _ÅCinÕ&w#¯Ì *'3BþöñÚˆ3’¥Z;z.ºÂDt%õ&çWõ¾ÅDÈÒ|'Deü1@äEЛ#—_ýDß× ðz/v¦v–Ö¥½¾ >ù=¿äÓOßþü›ÿ*ß=b endstream endobj 532 0 obj <> stream xÚÍZËnì6 Ý÷+æ¢Jõ‚, ´ºk‘]ÑÅäΤ«.Úÿ_”’¨—_‘“ÜÛ"0b{d‰¤öåHúSgƒðáòå¯ËÏ—ï‹’"È .ϯ—-´Âø>ß~”Ò()íŽ %J)Açkíøº–O<ÿrùñ9O ý” E0þò œxR€§LÓ?=¸øŸ¦Æ+¯tNhé¿®£â¯®^Ñ¥¹¶gѦåº8/PE½yÉ’•&W_¢¼t~pX[áe¨¦ÕdY«äH†0V^éXJåæ‚x^Ç#ëQ4„Nc\=kãúÇ5’ªœ×YÝ8«|}zÐéxͳ°…ò“ÖÚ°й5¦i=µíù7ôùo[æôR(uâNÀ{VFÞÓc(­ÆT´0zó[6×-æJêk™³qPÈöM?Fû`¶­qOþ±3ÄžHfÞ2D@ÎîÚ!êžDI:oé‹Fxåú’Áð†€V •¤×•U–îZ6¶èš” é)Sçc§ì$yÛûym¯‡ZžãÎsÜy‚´J¬_p*ÇB¾2òG•Ò†+”.6}Ý» ]¶†ât×­}£¹‚oû÷)b+â2a“÷βiàekïŒ"AL¿w=¯mR¥ÕĦøq¯9$Oç¢îÉÓÈòÌ£ y9OžAÝ8ÐBc™í=ë¸M ƒTÍ;ؤw ­™DË/ M/ô½lyü­áDñó ;6gØ%Ù<ÿšê/¾­á<Ù¢# áI²Ý,EU§O6X\ ÅÅ#6Óµße»ã O÷Œê£¼öv¨Ú»n“ø™) z#š¿ê¸?*“V»ñàip϶jF– MGžM#æ4’¾²T4Ô½¨Ê¸àÏ¥[·8(²lËÊ vŒæ1~ûPº,³HóÁ’Ux3XÒ†{¡Í’Âß‚Õ<¾×ÉCŠ|ûAMA³ÆÑ“ïÚå{plýLLpÊú…d(^‘ìß~æ“þÜð…J(­cè#{SBv £ZpxN™¶L\asrä ‹©å•Lp«DæZ`ߥBÌ~×穦iL%¹:÷•u›ÅÕê˜Bþ×Dí·ë Ê}“áÅdðq0¾QÐXaê¸ÎJ?ÁuVõÉÊ0ÍuÁ~¨hªbQh2³I%úÖÙò-ª-Úf‰êÙFÓ¤îëÿF³=já’<è„H.¦Nd‚ ¦ ð<6S)©E<ª­'¨œÝc¾îÁ¹ºG)ª¾ÂºæRƒ%¾¼pàOå& ƒpè>ßü‡ž tÁöž ~'Aå_Š÷¼÷z—bÕqJ½™¯ Ð¶å+’ÜÃ>H“YÆŽÙ³œ-MSdÖ¢ê´óô›ÓA”Ÿ:ȯÚðEe™Êþl¾QZr mc…®]µZšv°ÕPJÓ±d=“€‘zh¡/¦«fp§ûœ5_ÍÁéΧàNn¤àYÖ>O’¬Rð,ßA ž'Z©3NÛ?èª-ücç%XÆÃV¯`²ô'›™øÙ.Cb5ºì‹ïèÎsaÑpY lŠkóá’+å„•vÀþ³`"1\#»I¸Ï{`PÂjwʵjéû "z¢¦xjZ(‹AEϔ¤UOÆùj.=´á3³Ã€ë.x«:›Ùazȵ›ÉÇgm½3í«,×F_\a0ïI ‰¸mXxÖÇà3•"*¤õìÿ8Eü@ûx<ÕHå 请ÇÞKLëŽìnOó]]X%dWðLõ2~´³ú®®ê´ÓvÝýÏì³*O%.~í0dÏ׃°á,PEÄ{'@JÐç•Úë§Ú Jsâp·@ÂtüQ ¢ôñ¹AC„*‡íží }([o=#7.µ4ݤÐ^›µÖþÁKˆkß磌fjwQáœ9»»·Žñe.ÍGBöô“ª¤¾ìÜÛÉ­÷Ò®vêÔÂ¥rÈ]:Ëvp«½Kk–Ü5¿<¬ã 5¬Ÿr'wÜîîxîÛ6mê®5)^»Èèvqjˆç¹øU(Ž+@o¹"m «)£¿õ’o"Ì-º±qÇ寛o6ÚV0¶Tè5fóùˆå—Ú|µ fH˜kîÕË‹µéæ¶–¤¨Þí¬9ÒTRøya6ðùˆá(^Çû †Cv0ö”ìÙA«™Î4*U³:ÑÛa`DcDDLP")ÇD¿˜†4jÕȹ·.@;àqi—Ö_(°5*¦&^À€ØlZ¬#¯9ÓÚ³mæƒëÈÜYŠÔôP¡û”c‘uüñ×ý¨ÒÈ»­Æ¾žX9{Oî7xa,)«±zTÒÖ×: $,¡Z•P]Ý'ÄæQ¾‘D÷ìÒ0=¹ç CnÌ”7kõƒ®tV)œsÝF‹uÕ[q΂ó/%¤6YúÜhüˆ—VÎVB\T—ÛV‹åW”®NSâCoòë×AY¢Ñί¼/fÐÝwVÉ Ž3$QCfIQîÂ-] òÚžB\‰Lo`¿{Çy¢ìnÌe{Æ¢p>ÛyLi΄ø‚ï) ‚ ÿÝçA®4Ò! ¿ÓôUCQ:‚¦íÀðxÑø]Ô0|¤3î¨*N¹W“,Ö_×$ß™“ˆ NxY\±Ôu¥•‘~|]R²—·‘d)ÇÒí}IÊtà ’ü€$?$/)47P”, ´:¢%á!óÊ^ssÞ‹Ðõ¡[~_?Eóò¨nòù®‚Mwtz'Oè!ˆð¿Ç´³üÜ—0õÌeãþÚj€s¾Û>LRé>_ÖÂ4D¦‹-1T½\W*~.Íò#L^¶s€ö1ÊJ-û†.¾>¹öU]}ìÞܼsÛ>å;Ý×05Û©æAéˆ&p'ÀŽ^¿®ÆÂºq3:Ha,YÈzGn‚]µ¡jþÿëwÿ¼†O endstream endobj 542 0 obj <> stream xÚÍ[ËŽ4« Þç)ú†€Á\¤Ñ,Ž”DÊ.Ñ¿‹²èz:«,’÷_. E]fΜ(µ¦ªšۘϟ }ûÏMÝdüS77gƒðáöþïÛ/?nü³¹))‚ êöãy{ÑB+“þņ?ÿx•Rƒ”V–ªòßÄü”R½Çk_> Ë}znìÛ?üõö§eàC€ýíE96Ð o/ ÌkâíÅ¥ÿi˜{ü<ã5¦.ãZaýÖµ»x‹÷þ. ?éæ¼ˆÒG+”!m”YEYíGÔQmuÌÏã…}ÄI/êtÐÆYáBhÊP/æþû_èâ¿ÿZ˜By2™{°š¬Á‹MšÒþN:?«Î*ÉøLÿûˆi°Õ8^`˜Ç‘±Oùˆý¢Q™ýÊCsàŠ}ë|_¥0ЮR[(¦ÊM÷éù{k•z²ÔË®n¹•äó]f??©ÎQ¾L.c>¨!ãy%=“Ïl¢FXm£´@Cfø$Lìφo/êu!hiYGAzßÉ•)ª9±¶Hªdc¦÷Cz¿½µR’4fvØwke°^ ~>Ùw?ÊšL>lCñmýìÒÙ°ôi%¬Ó­Ã8l¶y `³ê‹:-Þ;-Æ¢šMÓÓ;:RéÁí0´)K]’5²}ËRàöi3_î¶ß'éd½ƒ4SÉE’1àQ>Ñç‹;è 4šÑHˆøÊ¿3áŠË—.Î\Kä;´Šç4/–QÞ \…gÖ”u…íxÇy½–«Ù·H«¼Šû‘A® ©•ж¿Ô^™Q˧nÎ̀˘ ¿„ªžHŸIÉhœÓ„Ú °ï/À>bÌ$a§%ÔÞ|%¡võéꌸ+¨ÏZIî{¨/?jr”’@JŽ¡Õ"$¼hiNáßDÎÃpìð¶—àßOÈ–QI"[ôtwæ¥Èõ©THâÄ#‹–§!¥¼·?ù” Ïã£ïéõ:t¸kc}‘8ÎXé„ó¬ÓÐSFRø>esÛÜ/{ŒŽ=Üpù–£Š{ó¯ „ · Y©«c  ê3“Ö¤;Œ”4î)É•-«jhë(—Qc¨=àP›Øû~HQ>(•‹˜oÿÈ+¹Á稷ð1Þ™¿–RGÙc|Á‹IõœÀ~)¹uøJr­·ÉõTú¿I®k0pCñì[2jVÁ=ö'Dè„èYJ5Égl/ûF*ô47®ÿMUsлzJË$ôŽ¥O0A1ˆò¹¡ÁMY“i­ Ìb1G„|Seî¨&©Z>÷uhµBʧ- Ñj®f7Z8’ÇÖ*bëձڢݔ;›”Jm¼EÝ”Š#'ßàR^XYѧq¿@ÿ1‘Š„{à{¼àдY‚0ùÁÆòš–üֳϽZ*FU*>µ{^ê¤2¨$Ĥgi¤ç)h’Ô§«@£NöÄ‚hÓ'þ®)|]ÙJg«‡ÖÇGG°L×ò{lߣ5¬lS¯âÀV4âýGëkáØ$ŸÝÂ1I×é|ݶ0HÝ¢ ›‡‡Ö©¯áÝvg±˜Ò€nã6Å. ´»Q „÷f½»[yÒ{y^¯õøÒ³´­Ï4ñ¨l§ÜvÉ—Òf*Û&û\¦ªÑÅom¨®¦ªä*\Áyªj¤ÂN°³[zr¬ò|t¦çN?t*c„ñýMƒ0`—йsjãÓð©"þ™˜¥Nƒ]…Oƒ‰zÂÅÕ˜]úê³á\Z¸¡kýxÅnz’XÁ%q™àrsL¥=ÚËéTÈ àxšc.W';†ÔífNÂeÊø’ñä÷Æ·S¸\¥zé€ù摤›—Â[Üßw‹9,ìÍE@¿"£å½¥ KÀß^ºKiw” yÍÙbïWQ âQkqC%).½´–×°ýQ‚°§ Õ’Gu*+ ²êšÙò2­évoõ’2vœä\MïÒß›ʽ髃¥­ú-ÕÏ*wœj—­û™jkàT»¼uFµÁŸÉ1ÜX)ÿ3ñ"©:µ¶~¹`ŒP_ݲF¸Œ½ÄÕÿlóO­b`Ðn†Â‹äUŸº‰êBÜüt—«}:Ÿü»C/†FdïTí)R”=ï„qaækc6ä0ø¥º ¦ )Næ—}…ÇçáâA,L%~g÷ÀšJÆJ~Ž›®†JáùôœGUÔAà\ 4¸Z¯ÆžÅÚÖ¢·¦¼2rYTØô:9Zß.ùm·ÈÇ íC î\Ümé[.ßîVj% ;šïBnájÃ%Ë Z³<=<×`ïo¦Ô9£A`„ØŒÂ>Ãù$ Ž8\¤ÁˆStsy³;Aˆ2ŸØìV ”uó@ ërV­‹ ­‡]mű¯Ù»[_©*Ô!Î ïÌÛAhk»óέßݸw§–€í6÷‹ò^€Ü èÕ‹¸»`É7ú«uéAjÄʬØá^4û‹_tÞäxSÍŒ›R¶Ù3nÎìм5Á!f!òÍ Ã”ê»V VÐlâP¸ÔñÏᩜ9®5fî§k´’¾öjkhÖe>¥Pj^ûÖN)–ê¡tÚ~þ0ÿ˜ ´CÆ!§ŒBwaû/Êò¿>ÜÞ0Ǧi!ÂhÚ)™‹äå îp:3x4Ëo*ц©ÖÉ՜R·r̺í¸ÁE'ƒ;€¿,ÙžwŸ#EgMϡݜFã6aŠsïË¡³—m¶"wbåW*[•NõV‹å­wZƒù%ì0[¾~”íÖœ,G_t¤nâiW8—…t,ÚÏ• yÊ®r 2owóÑÌü} ÍÐ]‚ UÚy²ò“’Îû •û1ÍaË/ØVá«ôV]XÚÙ¥; _ü½>¥½t̬ö޼ ŠìºÙð臹Æ7ê!úRÈÊÇçåØ?†°Ã[3„Ð3¹H‡–Ÿ/«ã)ž¹ÓiÅ.ÒOƒÂ»~| +]=ˆm–®†å ú´žÑkÙ~;ÖGÁpvõ±:Æ|ªc0ïhЄOkÙ' …¶=!Ó'ɵÛ㨞n‡Óû R`ª|YŸŽ™¶q¯°¾ö·?ü &µ’Á endstream endobj 546 0 obj <> stream xÚí[;o$¹Îý+æLß@Pp€Ï€3›F«Gìÿ‹UEÙì™ÑB{V`,´R³ù(Öóc±úôŸ“>©òOŸ¢9Å·”Oßÿ}úõÛé—ßÌI«-«¬Oßn'c·ìÓél·ÒñÛû?^Tö7¥\x=›^”ò¡ü8l‰åÙùöƾÖêàUùû”w¡¶¨-® ‡>™—â™Üµ ¹Ò’ÐÿM-8_íy˜M -u´Ç™ô÷ò6z1¦Ïs^©Åñ,û¹—t·ÝÄÝÞ´-?ºü”¾ºôõ~ˆ¼Ë²›li±‚Å÷Ö`z*—/Oâë?¿ýµÈû¬íæ]FIŽ,Žö¥ ©J1º—¾Ì°Q|SóZ鉯é…ç1/‚…µg%~ Íä›*—˜td¬Œ«Ù—Nƒó¤R’]¢élLÀuTe?-÷ÍŠY…HØØÿYM.ÿ½Ã qò‰´ÙP¤DW~ÀÁž­­:Šá½ûš®aœaÉ»î¨ZÂûwˆ¨Ò#¼¿ó•_µ~Ù»>u}ÕõýesWŒ¶…p‡P¥šŸ2¤¤7ÒG IŽøTCö2&0*èccÄ>æº4¨ 6ÜhP¶”($sëÎ0¬¹ã1qŒô˜Ô2k¿]j¿}Vûǵ„žv¢šÔ¡$ö"-brՕ̈X´€ØâœÒàKVÒ›´§:ëw¢*«'}=‚¶P‹®þì¼cëdsÂÉïBR´ŽbGE+¡ÞY–ßø“΢¹ÅÈyu‘è-Qö”g6t†ÒЂ~÷5 ,ßÎ1 Cc‰º´e”´÷ô®Âm%Ì“+÷;ÂüŽ°æ€‚<¡#‘èˆYŸÙtÝjpØ3~Ș¸Ål?à‡†Ÿê‡x¼¿ŠÒÛË:˜ÛM'3øA„¶ôT%á„ÉE¶ï¦ÇFÅœ«Ãá\Ÿœá¶LΉfÙa-x“ö.GçÀ’¥“ʘè®âˆ€§â}Ÿ‡b=òr浪j!¶…Á@®0 g&’yu‘2½9rÍVÄÓ•ú8Š‹>ó›%Øæ¤D.GèÍDj»y†|•H¡ õ=¦TÄ—[#OÂJôjfèÁÑ‹–#î(¨ežçàh%Î÷VDûãæßìÃs8ݹÁ‰ðaؤ°ÙÈNľaBAƒ“ Á`2¡&Þ°-ä öúî†í«kl·æØé5–ó– ŸI¬[+UÄ8ôœ$ Ú/üµîü¿y|œåµ$Î¥±‰úBÌ‹­?мÏííë7Ð\ðƒb î¸âÐ õÝw½=È4/ä¿Üi‘bÿDn¡5§Þé `ò¨·ì:&WyÊ1³¹5éªÄ<Hs˜àdz`ÀÙZ·%7¯ F@&ùŒžƒÐûu:‘â.·0â ‡WœÌæ£ðw†“‘ ³`KàëÀ‚/ÿ‰2N´þLŸh½Û´Îð‰.éÉ'º´Ê€PëÂ'â ÏøDœCúDl1eL‘S}<›á[hþÆÞË5uOzÌ¢R¾N7爉ÀKOë”ß;öT†± l’9Gv¨DXìG;ÛN–»”Ÿ/ÏœNs’ÃqëtXô¼üM€ 9{Xe­çt%¶Tþà.BoÐ68RZ5Î0%ëÝWPïKÇ•:Ûáî^å"G᳸ñ;¢™ÀBÅ7À ÷~‘ûé¢EúÚF‚Xs\¿·Á0U–Ââ &Q{0îTGñ¦é)ˆû ¸™Åë½&Ö·éc½¹ëqü£XobÞ¬±?%zþŒ`v&mÆþÌX÷9‰8p>±/ƒ· ›qæ§ðÿAÛë-¥tˆXh#O–lC÷uõèg‹\]žÓoÿ“ðïLÙf`^2~¡Øï¬ß\!óùØ•ã¥yXåãÑyû?ûUµÅx¨†‚Skú '%òžþfÄ<|ýÃü ï?þÁŸ¸y?æ`%ÂåçɈoSߦšdñ"'¸õ^Ô—³<ŽúÔûƒQ¿î㓾a´¦'G—ëýÕX­ñ0ÈÖÕÌäq¬,kY$Ë–¨îcwÁg$É>ä‡$·1ÆQD”?+gÀš'úºG€i9 DéÿÃò¦â§†Üc”‘Ó¦D¹Ï×I tˆÄx¡¬»™ôà‚W…Þ  ìª"ÓÑAt½Ë*€,ƒ­Èà1ð:lQ3<1_t4÷íÚ'rV…é.Q×Ê5TÕÃPu‘f<òr=žaÈ^áèÅñ ûÂÑ ûðÑ ŸöTØÞgåhÀ¡n Ÿ$€‰õ9îP»Æ˜kÇ;ËV1d¸(B·§;v_ÕÇ—„‡Í“ž£LcKP8 —Ýð6.îfh̵ɜñ"v/™o¼@œØ½ld«» ôw¨nÙ±û)À4›¸Â™æ[‚˜ûÒ׫ó+BŸm®ŸÂ§‚ZÖ€îõ*^8À €5ÚMåD­F±®‹®Cº¶†Å]kU–…žÏ+ë> ¬àbÝÏeÖ8ÏîÒ‰øžÇò`Z4 ¬éfR¦zõ ðwS€“ÎTïãWIS±¼´âš ç¨÷, hCÚ%ùÙ§ ®Ž;½¾s‘{iUIí}_¶R¨—ì¼Ì½K5 n4ˆ.jQd– ŸªH“…NDpŽIŽîêêe`uÔV‰·,w…Ö‹g’Þå\CŸn·}-×e_ÏAÎ^Ò¨;È¢ÏM]¹gK¬Zã@€`‡ Àí×wºÃ†hñ·%(cì… FZÂK8¶1qDÅ&þþúã¿ÿZÄX§Ì¦’/A¶n½¬¢–Í» œ’•¦/ «-Xjó¼()Ômy†¯ ŽK /UßÌP†²/¸®K…û×nNËÒàw/ø„qéåWu©‹¼€®*Ü«a†À±®rŸ«gÚ‘{¨hìóõN”û»v^9ã륡Çà.¹ÍµÃù}àÐs?°-ry,²§ñçbÉ©r1>×o…'rA»j™*¨Çß&ϰf,03ÂbIM;.C6iaÏIm)ôÔy“WôtöÆÓ` §ÉŒZ~_6ÚlMA©› ­ä‡3êDPaù­ÁP>¦Švi"®‡EÒT‹Dê'læpß-ø;Ô«]åöšÖ¢Fe¿ * [6yö h¦OQŽJdÚ'5ýÛ–}ßþñÌ á‡ˆ˜]8K•*\„ý¸nçÌ훚+><Ê«&Ñõ^yr(8»,kQ&yÙß½8åØœ¢û s†™C1bßñ¾´â'4–0„ 8tÛ[PÅ·{Ѝ „y –Ϩž&Ëv›Q¥AôsjEÅøEÐaWþ`OD…fŽ œœ(ܾ¬˜™•JTu?@g8`Ö@g5f¤“O±(ÌÙ ­ÙbjƒÞ|Ö Wo+*R½Xø<ýzÀ2ò@ BŠ©¨>Axö9J -…O$‹ì¹¡n°5¥]¥Ùʹn»D`9SúÂ.KuÑÂ÷õKVïÚ×uænèqè½½>ú˜*'šÿ3Œ–ú™Ž†ZÆpv‡§Ý xÛ§ºi‚öˆîom $î—“±¥a;! „ƒ@/ö/Á:b‘8}؈™ì÷ˆµùPô?¤"iïÄ'ƒº•gÿíO¿aÐ,é endstream endobj 549 0 obj <> stream xÚí[ÍŽ$· ¾ç)úº,‰ú}|3°· ‡žéé›yÿK$‘¢(µªº×»qì`±XÌ”~)ŠüH‘œÓ¿Oú¤ò?} æ|Úb:}üvúû—ÓO?›“V[RIŸ¾ÜO¶äâé [øåöÏ7¥\PÊšüÿ–÷ùgþï¬Rêv9›d˸„·Þáôåìë÷å\ÛK›Ë?¯e1Z×»^\Êßê~9çaù7ˆ¹'Ñ`'%*,.l¢{£Q¶|Õ ïùK•y­¥Ì,clÄÞüûµžÇÒjwÜE\Π,Í(§,‡àCAž©]ÑOË4XlµŸôß 4ÁIv#©.ØÔ9Nr·Ñiû©@´ÆÆ£Ë¿¾ü’¯ø¬as6Ñå‚\caY ´Âå¬U#©6µ‹ ÓÅ1ÇZ[_¤â>~7º< 3Dw,ÌÛxîvÏÐ¥Lé1¶}ü¥²  >I4nµ«ª² Ÿ«¥vL¾^G,ì4Öýô³4!ÀfTÊ%5È;ø<ÃäÕ±MTóvÞ¶VG·*ó·Î¡• z3×­ã½GËW2P»ªØz5*eÙñ Ön6¤I´'îTúu¾bû*§Ðס/ï©õC‹f”c*uE¯´PišºÜI2H°œégjjÙ "¶[5,j!é8s [X……l\'®#Q9Q‰êÞŸrueõše$¦-id¤v}ï:l:,Ua€ÉO¼q"r\$IVeÞÑŽ*Õ¬³§ˆÌÇ€í¦’›„Ù%‘Ö©Æ*'¿ê¸]mÀäîà ÒjKBëæ÷Uzׯá"±ßw¯J{å±k5¦^•V—¥“ߌzç¢ôfíÕt‰šôõq{¾N&õðšè¨Ö,Ý”fS(Læw¡ù_Ð|gÌv´=]Èré‰þ`ú…™;.\Ú¼Ai5ïDÕ;n ³¨xÂWÓLMÄŸ¥=ø€¥ÿ1ÎúF€!…ÍkÉ{¦Û¥…ýh6Ÿí´yãx׸ä亅íØßÀ tƒR«±Á!Jh?1¹;ׯ/ s™„÷~1 ‰åÊlÓ‰>?^³òD!ÙÞjí¬ð®r“`Ä53s€4h!ÿ`³P€c±ö7 »xèwl+"ÔæÓJG|V¦Ð•I8)‹­ÏVÛÍÁÐfEùÄ_£"˜Í&¿;ö¬«°€`D7ƒ>[é´úàp„Þ¹LìmÏ èŒ¥^ud/³|>“ÏÛû÷ÝÆo>t„a†æÉêdhõÆZ‰´«€WSZ½Të¤:àŒ$œnM­©Ø\ Ï8§«g³ƒ´¢•+2ÃÌ0fÁ³Q~ËïÙ+M³ÂKÁ®&16ëOØ”š~€ÿº÷•]÷(Ô&u•z`Ç%è`RÏûpéVÞ£t˜ûé ÷ˆ¢ïÆÑý`uÊ­->J"\â[GF]÷|83ZšFsý8‚Ÿ4NзBÞøâeñƾz“/2mÜæ}{ŠB'…*xò¾É*•öæ¾”q²¯‚µ5kX,aí»?·fR†¯F…qÂ@O/7ÛbÂù,†Z—' óÍiû‚ê´;À5\Cë6N>±E›6ªJuà'm¨cè¡GrÂk´nµ•ë§>[(ÇÛüLÛyIêñÁítpõ¹|á ~¬7‚Ú¬ŠãÝùÛ 4,/×,ð£¶ÅŽLmOE!—"h=p)¯Äl®/6µgVýí»„©ž#VH[tI –!ï¿ùÚåÄ‘ªŸ­šODùQ-A½“¨ö§A5÷Ôþo@Í–T²Ý±—ÏNw#Íuð3`3WùÝ'`ú“Ÿ±å½æ~ßwîò};ò9¾ ÆçÖ+ÀçÿzÀ§K|89g$ðŠ›‡(ó,ù"t¢Ÿ™½6•µÀ¶™xä;÷Cp… ®Î;®óU  ÞPûjäVõZ!¥eá(ˆvŽ`ã¦5ïÂÑ¥½;Ø “ w¾¬í£½9šD 8šu1ôˆ˜[ˆÅ2\'FFܯ'á³mÛÇ–)º\£Óp¡9Kx`3Ôè#V‚»Øø6«Ñ:„ö9æ²Ô‰š}¶^·JΆ!Ê,’ie×1Œ4æ„xÞ³­×C8{EoÃZ¿S\üà‡`˜L.‚6S”žÖzª¥ —§æW蹑!§’f蘕þ× Z:'F=M£ÜΡhînT›¸…1«V`ˆ“H»Y¶Œfà{ ¼”`dñ“ù]å¦DÒB¾È*Å‘2@†‘–›ð#Í‹´T롇Ôl§e¡º•«tO½™"pж°0^)/­ŽDìíÅ+¼óPϡܪÂ!ÉzØTœó¾\˱—‰M"éÙ«5°qñ¶—w q˸ҞDŽº°[å»ðîýÜÇv Û‹w@ÿìäµ™Ð3C¯<^lIㄸ!òêK.b"´|×wŒÿ6kÞŒNÂÄ:§Llö5¾ÂÄâh~àÜÉÄRëטX$ñ5‹äMxÅáјùò…Ä ÍÙÑΉýøëÓòU2¨ƒ"Rv°÷H…¤¦OiH'~ðDÎÚáÃí{N›òwŸâÝz„Îf/«|¨ÕXE¼k&-Â!¯ñf­ö¢Îe‚çîeî:¥Â¦Gs˜D³`4 ĵªXáÏ|—_£Ù<δHÄ lRöËÖ°ði°_dWÂô̪¬,•->.ê}·Ïw(+™p—öb¿µÅ’,ª/+#lQÒG¶÷Þ³E¸ƒ´EØ2Ø¢ Ö¶h !íö¯íNµdÄuù}b‰´ßœ¨øŸZ¢L¶ß¢÷ù—˜Ç†)µB9ïìŽæúhÑm.êïãǹö$Ð%5úVõŒÔ3«¹@}ïVüž™æþ±ž”V7Fq÷=^‚<¤+}ËrÛƒ4ZnfÚÞËø™$ 8æÓ!ªà:zzz}Š2{ùüz©FØdHh¹ºZ‡é1¯VšCPǺýàVºa¥ëµõP×y^ÕõúUu¢ÔuuåRNWÿJ¢•Ôõ?îY/(’}¥‘£Ç-K`y?Ã4õ ç3¢õåÂJ܃+“' ÀÓˆPaÃJ4@I¹¤º@'E˜‡‡X‚|è÷•—Ç+½8Aí=}A7œœüÚ‚¯XPsudì(†ãdU'óx›!xk‹%tõ± Z&#à!VÛÉò£qæüé\¼ ÚÎÁYü×߈ÙU%I•ßô,€bàßMœµ9¢R—Ü\F‹ëB’íØ2g2¯Ýö4Ðc½6-øäs™ŠÒT |áÛ ò&â/8–‘›¤™Ýð ä'˜£ÛIîö¬í3Ññka:ɺø¦(z~ŒcKûà.> stream xÚ½[ËŽ+¹ Ýç+ü®èýŒ^ HVî.ÈÂݶgd1ÿ¿ %’¥RÙnäÎà¢q«TzP$E’òé·“>)ø§OÑœbÈ[ʧ¯ÿž~ùqúó_ÝI«-«¬O?§³Ý¬vå?èøãö¯‹R6*¥¿”r ÿŒÅwó ïþ”RÁÀ_†¾ð¿ûĶXžáÏ<èÛããß?þ~úË\ÖÈeݲO§³Ž› ™v¸€÷gÕ¥ÊÇpa ´QŠ'¨“?hÏSÇ‹Üpk¹cdI#X¥+“;¦MYÍĶÁ;Í¡³~;^ˆ*Òò$Ðz¸t§×¸Ìœõß–‡!yh)Í‘ôb”c”ÀÓ$Ú¥ÔÚìØ ^‘Ìvâ«—ã•íÎÀЩƒ©ºB—/øX¸ãLnæW˜†:M%mr¾Ú&p»(FJ‹W=jñº•…‰Fþ†`ÚÀv¤‘ö•%ÝVt¸°ÙäÛl?L¤kPA­C§@§ß©¯ü†¯lÀâ…ÝP%ÉˆÏ A“ºØêÙÚ`ÈÌ'áÍ-—÷ ˜à²ÍÕHÇÆtðx‰r¼„íjÔ€4p “7²iã6«"-RŒ]ÑCéÿú˜Ë\åx dH#a”‚pmh­åúKÈr3Öó&a&ûIÑÈ¥ªª?³Ò0+7Yüd.‚y5€«ÉñùnþSí<¡^b=«Ñ“`p.ÇȬҦoxD¯V ·/ZfµþÃUq•ÀìÃØÒ¯˜ rºV»Ë²i+VÊãb…rƒÖn°©¦xel(²€YÃçJSMØœê¨aCÛl7£88iµÑ·!±}žíÀ²fí/t€Qж›®¸]Ôp^ʶà$ÁN¼žŽõЉï®{4<”f4jˬ5ÔÏ —í¸¿eTƒ}@@^æÊ+>A¬^裙ڛYÅHÝu Þ6ðY½0#¢ëîS ®9¸/ÔèÈé7XQT–·,Q¸}!Y AAê§ _²o PŠOoãï$ Ý8I$ãgÒQ8X&öôãn­²²á»²Â-Ì’òäÃtÞA¥¤ CâŠÆ‹q~_@u,fºu5"¨wL#0Rò2D›"Ž2ÐtMC¬ÓsCزò\û‡çt@¬8«ÓϵãJÉð¶=BBô&™Üã.ÖÍÏmn/hÚ,ý$ð¡Ã °û5ÁùÁrSSª¬uô›©võïîÍ¢ˆã*Tr™)«úU¢ƒ Ej rñ`±Š>‡ð=¾oNíÍ> a‡¤ÅÛ1°±qÓBÙJðXb…%³ëÓ?FX¨£8›à·¥83ì= Ð褦ÓJ-$zóýÌVû›ž°¾êËÜW&cÆ6üÔÚD6f.Y=he>8v‘ï -é !‹žR+m•'‰ Lhô³@†<…9Þˆ>ØÈD„ˆíxNê?¥iÓŽAð VÀLœb ýd‘ˉ1eÊ dÍ`F`¶zlRc˜†çô3­pÔ[Š"ñâ„£OirS¤´«lh¿ú–«ø¦¥«Æuëñd©HË’vf[îté0SšàuÅP) *©Rî18MvÖn z6àt¤WB4›Uáõ¤ÕUQNïҘ•¸ 1C´ˆC$gªž`×¹:&e†®rE–c…{eÏ´w¶ýûM®ò|C²ØU=SƒO-z—ÁJ- û¤7eílë¯K':xŒ#¾ò.²è#²þ¢èsTCxDÉ~UùgÌÐË/R%K§ïÕW®,ø¬?p6…ü=È/þ³d¦ZØG2Rg©“ˆ…îuïX=ûHCÚ¤+„Uqóp¦§"ƒ4%…©Á¯’7a™”áK1lÖGI¹g<""vÜÀVNb<šOÝ¥Z†{8L·ñû¬…¸s;T$œ°×RÅIƒ8™¢LÖ HÌ2T—…ÈT×Snœ«šP2°yŸ¥•ŒÖå6—äñm^á¼2›öî8¯±òaËæ§*½Tö¡†¶<+k°³!5vf0Ú¤’óҜߧk^&RlR0}û ¿÷4yb³Ý’vkk¼«¯Œ»mÉ“÷Ž?1W*x¯]Ï~¬à9³š¿—ðRf·à¨,IY}{_´«¹ ïßTê©5xOæPP4šKm”Þ-ô”Ð;ׄ@HyàթWÙS'K(Ø¿ ë*S¿«cšD¥âœÞ¸:5Vºj¤Znr˜ZvLx88âØ¾°µ­«²¨²[ylÈ®¥ÑÉJbBë1gׄçÖ ü/ÂTï~Ê#7AÕ v_HåM†4rÌçD(=«¢S²\`(¿°\“c:ÅÍ»ÂÛº‘Õkxs}+wšßõ­ÖuY¨²×R7¥k}”Æ,ïþ™{ÙУŽü‰ª3+iž¦*#ÉØÈÛ<¦×ûˆ ›£¤…‘©z“°ÒÈØ¹•ˆ¸`ÓVZ£Ö˜-É`”ª›Í€Á»½bPSh(<Šv¥çí¨æã6Ç-™‡è â2¡1ð'{¼‡zö(sê´!ò¾ ávH›¹%·|J8ôQŽo“ 9È>tõmúkËGp¿áÖÍ’ ¬:ß«p&´î …½Z³Õ¦7‹Ú´d[cÑ@£:÷õ¡äŠÚF²äðîZÜÑM¥V|taNSv1ŠîÅþ£=ýgáv²Ú|«iFø2UŒ±RºŒ÷Ô¦¿Nø¬'Hƒ‰½¼f¡Nƒ¿_ÄhTŽ39ïܶäÍÑ ‘Ì7D¬^Ϋ|ínŒd¹-Dk€kŽDT¸‡×¾\PVcb×ÉvLñJªE¹]¥´ˆél”öÎFs™¼ã¼î.DYz§ öudÛoï>Z76¢Ê@_ä=S¤pyT£ ÑS‚ÆQšªvµ†‡'¼(–šð"’ô ömt°·,ÞÌÁnI=ÞPŸ7cãZwÜRwäˆ)j%ØÏ~í¨^ê¢6¾Žä>›ã[1µ©VéÊU8—7ÝaâÿCQiž@ô܃ئîWŠÍ"Åæ.îà`ºˆ´©H{aßÁÅ`_™Èã|…K»yù’õqZ"Î$Œs½šÈµP`§ÙÝâi)‚©Vm*úœ5±]áøœ<½¯b%.ýöqì·ÛÄŽŒÎtà¼}*×Q‡Û´úð†«évËû>×̉a:Lɤêuõî:É‹óÔà¶ÒOQä㣕ãfƒ“دJÝ™§zW")§œLð^»í£/^ÞdA6;åEhÖ~@x ûçbŽÅ,™ûø1BH”:ê[A+šùèÊEOªÑôýø­¦!ƒ[¿³Œ´Ò[Œ~wy•X²ƒÐx2b5æQl1‹R·t•Qi¸wzöºyR·g©×VP…o³¸E¿§ÕÎoÁûßÙ|ïµþìcZÜ]&’o“›2xÄ+ÇHM¥–… ù׿²ñZï/Ĭ.Pg7ÀŽc}ôçÚå@Ò½ƒ¥ÛœGQ, tŠê–ËúøBâ‚Z€Ì6öƒ%A#Ì Œ°ƒ«t+ÑÀç"Ïw‡©…W—%̤±,˜ÄÕ©a.qÆpt=!VöÝÿ$„ƾ—`]Y û¬ÁÈheñt›kÙÅþáU1¯·s ê­{ïwgÞ¾üÝœ ü„²qÉá¢܈vLÊ7·2¬ä¾µ{t Æ´Þ~ûw"SOVBÓŽºoïçU®ØÇ¸)og?ìqUeø1Î:4jóhÏ!EöN¨:ñ°þé„@~À endstream endobj 558 0 obj <> stream xÚÍZËŽ,· Ýû+êZÖû4z ]‚ÙYôLu{å…ýÿ‹©W«3žu{ªJ¢(Š:‰˜¶ß¶¿½m?ÿ¢7%E’Imo×MYáƒÛF@÷ý?Gé/þôß·n[4×F$ûæÉi)m€ ~‡ËÁ%á>Áu†ëŠÏNíåîlii¯üÄ)¸Ì)àŸòtðÜEY¼j×3 ¯O =6w‘ä¹t,cW=ÿ]…èÚ9r:0ë ºÚÚ%ä\JKíÕ±k·Ãßç^9šb46I(}²YþÅö5R ç ,U¶¦4W²H÷hAè©ß‹4ûN&¿½.í°Á_MÒ‡åŠQªð¬J³ç•u£Iòv0I £¶ƒ2ÂÙDBd:)Ïs4ÐU›~þÚ²åY-?AaËåËSW=¯-8´ðû>´²}_²Ï™Ö|lqAëyY?ÛܦÓ%òê‘]™¥¼ÕÃØ´xIh/aLƒo’»v-m÷Î_ÎM×É ¸5µÊÚ¤y¾Ùzš<-Ú3¿ciö_÷4P¸Ær醄†- 2„SŽ–ÚÃÀ œÎ_h‹ƒ±´.÷þÅ“©¯ØþtpY‰¾'¶=ò•]Wf dñ«~,¼Œ/½ÔüÒ&À^óÆ ”’°à?…›èßÿnÿøµ`Ø0× „²ÛÁaŒ¥ÑëÛËÖò©Jß@äöë§GQÒ 'WãàLòìä<ÆBŠŽÂ “ÉvÎ c *4Ïát@ Âyè½ìd‡Ëk¦Œ¸Y/4»€_ap0Öëì 0>ZMÉ H*®)NpÐ&D_}¡e²ªÕ;yžéG):øë½ ûÏG¹GæR<ÐÒ3OÛÙê…4Æ ]S†§¬[òþYR0_-)`>?˜Å(ŒOSIÁkIAk ’I̓å’B3÷_¡¤é8¤ûa9ì˜Þ•¤g‘¿îÍõé¶Âþz^k°È«ÄV×Äö¡—ßËpnûôô8d¹Ù0vø>D.šnˆgúTêš^I]sØ®¡þ<ñ@bŒ€Bs:ž^@h¥Žsç[²ZûïõmlQ¢!góøt—†Øñƒ`¦c¥}s©áòcbxÕ¸¹~°6õË%âý`K³mPª•ó8åÉýÚü £ÉÛïÿB3¸j óö s‡ÌÇïÿBóD¶ÙœªP;翬.vn E0—u>­D¸ÚQŠñ[>éÛˆX ãVi@ó›ÖOÁkHòZèªN¤‡DÐöÕ S:Þ+=ÑW$J†d€¡I‘ܸË'Ê>]2›âC<éeT÷KL“ÆF@:K®3Ì(Ó²¦A3³dÔ§\ kê.z¥ºá‡ôÏq·'èÐ%[Eæ$Ná%ËÕ㱃|[Øs“1Nç>~£„¼9%;3ç}ÂÏqýXtÔ) ˆºúfFÅY°Dd.DíZ¹9ä“bÏ–V)QrOŽ‡Ø¦ZkѤgC.‰~+¸˜²kŸO3åšÒ¸9$‘ꟈ×é™—ôN« 1!„ªXí4¢â”ÆNL¥’ª{'`¬ -W£N¶ËÎÖßH‡“\V÷nRîžì¶2ΓX̲ž•ê3ï×4uE¿XïJu² ´ån„TÒfÊfµçRíÍÃé˜Z«ß4èÕ›áH–í{?ÀZdv7”„Ý¿|¯Ptäí­[iªÒ$'[!윇öã'ˆk:°Š^'W­Ð”9Šå$üt¨5:w¿öúÜj4¬¦sO"bW&47E*>Ú“í„ûæ2œ‚;çòoä–·oºº:†#––û½²~y±ÙJtÔ0¼p2+ÿÒËÑ@ö½8’Mêm—¨îUO.¿ð¼yã”;]mɨª&›ÎŽò K›ùô*ö-ï)0”ò¨.º”Ï› ‹Qÿ¡­9±“à ¬qEÀy’Û?¥ñ,Õ åxSoó^Óî‡ËH)L]JN«Qn¾H6¦öO2Ñõáa§æp 1ˆäl—c«Z„ù×OÿË— endstream endobj 561 0 obj <> stream xÚÅVÍŽÔ0 ¾óy†8±“FÍ ¸æ†8t~º'ðþìÄé4³evøÑ(“6±?v»æ›ãø&y“b¶c6§¯æÍÁ¼~ç 8›]s˜Íl”‰çÏ;ç(ìGž0ò#ñ9ðûÌ3îyWw0‹¯“Ô_ Ò®nF™© á™ÇÄ#(h€aZ°’êW©ÍZl³ÐpóþËỂkWœ¼·¤~ÄÑ98ò|a­Äœó¾¾~NÊAPiù‚úö`œ¥ÈóÓûîõûC bg9E;ÆÄæ£õ¡™O ÕE?/ІñÌÈrÙ¦W>ȱò†ÏØ+x˜«Ô5‘ÃAüä9z1T¢—úm¦ñ†ßÕöók–0u^ÎôX=C¬L…¹?ßÍ”8¢á.¦BcÚþ ÓÈ 4†{˜vÂ4jH6â£LŒ ÍBAhF¿NGpÉBjÈ °œsÀHÀ÷³Ÿ*žÜÍr†ÔßW8ê} k 9[òÈŽýT—}Y+²îª™¾*›!8ëe©p a«r•Êé¶ÊJ&¯¥Æ«> stream xÚ­ZÉŽ· ½ç+êZ‘D­À`böÉÉÜ‚zzÉ!ñÁ¾ø÷MŠÔRªêm&ôt•ªDQ\©^~[Ì¢ñÏ,Ñ.1d•òrúuùÛÇò×Ìbµ Áúåãº@qË!xC\>ÎÿzÓÚÄ÷ƒË¯¬ÓÚk­Ý¿ ~ñsÆÅ{Ï÷åùõý`½~ã'îŠ_Gì‘G¼“9VhìÓù÷ÇOȤ]ŒVYgCLêåà,n! `ÞƼ ‰ d]ã¢Ñâïñ­?,ÜDšRVËëG;!ïÊúÿ(²# þÜ®þËâs#g))cQ|F'iþIê¤uÀïPžŸxO«ÄNýGüü‡)®öjÀ(“ì†dëK ¯•GÅ>Í!Êïá“— ù1ÇÖåa#QI¤ xA†@ fñ7eÑГ¦;]DUïf…±!­ÐõÜ”oäÎë÷CyâÇ©x‹²ë]ÛQˆC™ì×Wn¶Ýf?kÐå\B™€ò®Ú-mù"¶|"÷ˆ²?bÖúÔXßq¸PßXɃF²·¢<+2ñB#Ìû¶ÂYF·ÂòGy"~—)D’xF[VdÃo%ÙU+/!#(:›ªš¨èâ".*êà å­ -ü»ÔHÙz(Ü€ÇAòM)a†ö=IÔõ­q`êk­¼N³>}UçM]•Íz  úZHb¯q \°cì51(ݨšH³ðÛÖ UB$Ö,R«Z<ÕèíÛ[›E «îFŒ­,ÝÙ_™0¸B/ Š B‹–wô†{ÝKp ¢¯î\øöíijS<5v>»…øú:rf[D%MÀhH®î ^pæ‡c )[bËdºÂuÏc÷ÂôJúà ÆPƒC²šèŠ ‡`8+æyºïé­+¬úSMØ,Kã« kؓͲ$ë¡Ó»>¿¶Ájë%0æjë–ÃGmñ·+Îíß].‰å-ÏŠÂ!¶1~^è$l¢¥ ˆçyù&¿Êz ß=” ¾—_ËÙkœJ&aåž,Éf­x˜'gø|"Ok¢fvD6h¬ˆÄÉ·ùžh0Ï4ÏUþ·‚¾ #Û|‰ôÅÅOr°«tz‚—T Êj?¥êUº«à‚çïæOk+F@&Tp2‚Þjê^Þ çÓH·Â%‰ßhŽá|®D»¼ÍÛ"/6G‰'‘8èí«ŒÜ]Oàqâ0#ÍÀÈvÿñ£\üÞL-ª5[ …#›•K-³Ù'Œý7¢¶Ê9WÁdÝǺ¾È»;ë~’Ë.›Ý~I–E#²Í?ÂFLoÆFetÀFl~Î) ¤È¨5®CqTx6ÂeèÊd¸ƒoÉ(ùgŒÒd÷„Q2ñÝáWŒ’˜]sz •à f¯-á&ëvqÇ"®€tì`+,Ågl¥jD$WHöØS% Ô½éË.ؼN`˜vþ$~¡} ¸o]Áj•|ÂÕ$É|ŠyáÂT ¼§: ìxôhÑ"×Ã",pÿ 0ŒST˜Á0´ŽÄ…ð\¼i RA\ï)˜[jˆÜ)Á¢xˆ A¼­­¾M;Ò6«{Û%2HÔæ$bμ.\»‡–±Ä€0º[jÈx™M#>ቋˆóK|î0œ¸‡ð˜'j ˜Á6ÄKªÀ]ðuP¬mt§¡V«~îMÞxÕଘ#´ºo xAJDLqÀçîiB¯Û_Bv˜Ü"z4ám"¼ˆò±FHÁ̳_EâõáíLÅîÅåï!ñœT&°a÷>|[¯,)lÚÁ7á± QØ(‡ªHŸr­ˆRéA1ÛËÐa¬um3Ž–u|}lÝô‘Vå¶A³n–¤4¥~Ç]÷¥ª4¼ÖN[eæ^Ù:BY½V‡0*©z d„eyFËz¹üx/ú"ÎÚíêÐúyG)é[´ÇÿÚžùSrþŽó\]ðkÕÿ{«úÒFlIøvã.pëÕéµlês3Ä.7vff–Ê"SgèQòÏÊÛ8wÏç\d0±_Ù6úZÏ~ÛÅÓkk}Í?Á+—)F›ØKß‚¥´‘žðÉè”Ny&ÕŒ6 ßëÎâ EPkg‘Áºó^±ðÃãp ±NãÆë×_k§O» =;>ƒœIJCž’`CIz…™òSÀ¨b™$Eyiχ`jß û£Îâ<…z¶1®ãÁ+x‹'oñVo[ïi)ZL˜é gWKAiÛ5.‰€÷‡ì |ÛÝQ±tj̓.ˆù€Šl ˆâËu+ º,EŠf˶èkï¯4âæD…FŠ?ê¢KQ I¥4¥šhV‚)ñˆB.úÚËCü'BL¾£¬šLs©¼j9ÑŸ?%‰n³í9ôsª—‚£õY%ƒàÅDs1ñ½ú@1  IŒ·uV:Ú™8Ë UÀb%áŒÅ$+ë•Äçr»«¯K'EíŒUÂÚÞ[…sñØ¡Dwo«œ;”â-ÿÞO¦~hÛØuÀé-ý…C “G” 4î„7ycç€t/œ¯LþE3–òl©ˆ ÇåoÖŠ{L$«¬Já™4•yMXqh_Ge}éÜ%gå°ÇÔéT®Í–¯´UN[!îùvÇn=êôäq†EÃEwñXF{í60á·EAN~ù£ÿ’mÝ`¦úóBû>ô¿åŸË/u¯rŒ¡Ä$‘&b]=lšµò>Vs!¸RAª@d°èTMVç…&5ŒdÛc­^8EiÌIg™GVœ±b÷~hb¦9ƒÉÈýS æªþ°à&7ö §4Þ¶öèü\h­Öz½¼®ÉËðyIŒÏ1JïBcÁ„)ßÊs¿ÂÈ+Ðå;N¦P2†ä•Æ-Ü“äŸh£;?ÑxF“d“N¹ôsôر-¿áBñkâ¾N&?æmK¿£!_J—uú6¦Nûå/{À- endstream endobj 584 0 obj <> stream xÚÍVË®Ô0 Ýóù†<ì<¤«. VH³C,ª;Sˆÿ¿ÁNœ&íÝA „FѤ©ãÛ'U?”U†~VE§bÈ:eõü]½¹¨×ï¬rF‡àP]V5yí-¨) Ž!ªËõó“16ÍäL3çfïé 42ýžÌ_.È¡SÖèl²e‡FMàè¸,¾È;Gv´ÔÍ@ÿÄ!Γ>.dš¡adc- W‡¹ÖR³†²(o/%düã6ûV£Þ´uŽQMÖ$¢"VŸæT\¹¶yè®un|ðLûGóÔQ¼§ñõìälµµéx²YËÖÉfÐàM¼Fhz;°Ž•<~f|”…†­3þ¦1hç-äœv[Upäc© » |-Žê€kµ/Á—iv.hëÂñØF³sYT–ñŸ“ŒD¨§€Ð3vnÙP7[Ç.…X¸5gH 5 å~Nbˆfž8 `†ó¬Jf´Ç³7VMÖ˜«X£“Òθ —Ä¡wtô‚Qx…1îÞ· i%³Ú”\ÄÍFÄh󑑣޲SäªìÉ’žµy+á_eÕK+3“Å’ÕÙÈ\ɼ7Ô^sp“MËàZ]×Õb×Ub3 RÔ´%ÃQ·š˜ö†PVÆÎ­wÀrßS[‡òôƒŒo¾FLÕO—¼;¦9Ëfß5ˆƒþÝÆN)í° -ÎðËôÔòbåÃX}ÁkȬÙ!é¶þÒÛ62.žg*ûå16IJG—fݺ½6h‹EÀ¡ªBŸCjÖ( &O=çY*Ëý*Ý¥ŒÇf¼‰MsÓaKÑ®ÅnéÒöÉà”þùN$°HܹÃ|Tÿzù‘¼ds¼üš^)v”¯Øë½6‰²üPMª€?Wlß> stream xÚÅX¹Ž9Í÷+øâ’E@P`Àœ VÙbi¤‰ìÀÑþþVÉnö¨[njڋAC6YÇ«W¥~)« ýYAÅuÊêõ§ú²W~³ ŒPíßÔÆig½ÚÔ1Dµ?ý½5ÆæÝÆçLßÀã3=` ºòéi ‘>¯í6€†vºööžTßúÝ?û樂5:›lY¥QdP®Ú ÒNSe9ØVé¬5´Ùãvq[Cùô‰ãγ©x Çïè ÛVÃCÉJ̹Š>S'ŽÈ “wÖn;gߨÎ,,®•ýy_¼Ôô^‹¡ïæÄ§ÄB¨®…ÓkÝcʧXXÁD?ñåf0HÚ©Aƺ+E’h8×½8µÐ§ ðY öçÅwS¼ô§†ŒèªöÓ~8EØ:¾Eظ¹…EØBÂ"†Vâ¶w£þÃNÇ¡íÿcÕílYÅã_á]…º¼m¼©ÄôvI´TG꫉¥E– O=7{ö÷pŠ”bíô?v³.;p„²ÃôÒ¼LÛgÅÉSKˆb—y“À|Ý—0ÉG‹¨s²349\ƒÆy•Z¸TÈŠPú¤·öXÓÜ÷b=jL@\¨5…h­6çê ..r@ôÞ‘­ì³¿”N¢úWYŸµLN£]Hê§r4ø0.ýP©—Y€¢‰7Fª–®tWm,lº¨»M™ƒ8ÒO»J[µ;ŸÐ#N|Š™Ö&.••ΣIlƓȣ–§‘¼‰lÙêl)²–çâÅEÜæ!^æ<Ç‚ =µsE#@\˜S€  ›á0@-Ì-kÑóµP礣… .ui1ÔÄZi#Õ5Ð=– î¹¹0º~³?”Äÿhn$R,NSð¢v«Ýðÿ"X)“•@û¾€{$/je¾È‹K’ÆÑˆ’tÖÕ…E’'c";í á\9˜ùY$yºƒäxäy Æô 5mí¼« ËE©VmgÁ€1Õ?ÀT Ya¬ûíU;ñŠÐq”4hq&Š%Ž+Kðd«üØ8r([|5©d§üÉ’=8DµÍ‚ïª+KlNI;$^¸àur­q?^«Ö.jþö‘jÝ„»pµRÇ®RwVt¼ŸS¸ÉÄ7 ãt^œ(ö¥E¬ã•ÿ¼W•âÎ×ñßÖ©«Î•mà.×€aऱ¬„ Àþç1Êõ©ŸêÅ<¹Q7¿…¾³–­dV¡ƒ??vrñ(å°»rÂE­h·á¹ËÜÙÄ[¨þIÐp4~´ðÿ€Öµ¬)`ÖPwˆy±Ö·ù¹1ý~n0x"r2ÈÀôvêÏSȤ óéáf PoŠvl‹|W·fÛ]v›¢ò3/KÞ¶J0N×[¸w4•û¾…·•›³¸„u|pÇçN8¿o:êóž¾äÌó 5|Œ0¬ÜœÆ}Î2­3WóÐmôöµ¥åy¼¥‰5»Þƒ‹#Œ4¼$爚L¾6z`ÉÕÕ¬ÁñÇ“û¬ákÄОmMwŸXƒ ûWé(3Â+`À•¬aápxКù²þŒ@Ùá¶z'm¤ÿ¯i{Ð{\Ñ8ßiŒ¾ŒÍakÞÍÕWSªM¶ü„ã Cšç± –¦=¹1‡©øÖ #ÿ²Õ޽üñdÚ£y endstream endobj 590 0 obj <> stream xÚÍXM“Û6 ½÷Wð!ñÁI½eê[¦o²>5‡œú÷ H¤,9’µJ¬´³ã¥&HàñáZ÷Íçõ'¸„.ʏÏ_Ý79arÿ¸#$O.BÖß_Fѹýß»?ÝG÷ûÙ½û€.x(¾w¾ªWHèBtç/ŸŽÞ#{ÏE?è½P?²ÚDtŒf;PüqôíU?Ù¾=ýuþý?[\Â"£¸bEÖ,£Øx[õDÑàr.idI£!„‚÷‘ÍÖí{—%°'_ýk4Ù$æ †ËÚ*£‰²'6²ÚÚMØ“7áe‰ñ²c0uñ ö<¨0­;1U‰Š@9NU«7-Jª”tbô€!Õ­INœU/M7¿tzy@.j ˜WUŸ&‰°€d2 Ÿ5zõá[jUÍHipàªÕÂã}yUëÍc »³K DÖpH<øt³,âã‰NÌ °lê:]Ì3]G)Åi“¹:ÛÔ‹Ž¡.dφÚu¦Q )•ž—£”ªe±S5Wýäï ËFÒ@ãå§[Gå¶8‘ÑznqÖ˜B±üÚcÕÁxiÎm|ÐKBF~P¨Ýšh>9»ÉâüÆì¬´ìĘNÁˆã¯§ûÚWB¥ãˆ. £Ém"¦ž0 0­…z÷ñå„´ §Î»<¨T-A5ݨÖ,‹Õ£:ÀÉ\U]¼ämê’ž«.ñ¦.×VXv¾3jÓaöÃj3ÜU[B’±7Óê Un¥}/¹¨JAœ&VÓê5—T<Ç¥ú¶­_ŸÜÇ‹S|<é]]ÂäöÞL«}¬DeQó¢*©}4}(¿¾ rEsÔjäÔ²G@=ÅÁ´ŒO‚˜mb"`~NÌÅÿlRJZ82ɨ·,yð,¨ Ý÷ “p{Æ:ÎwBFÈ#9ßÒ+ÆX«ï†‚ ØŒúÅ)²¡™NyÔ :”ð¡ï½dí‹8¨šVå› KÚVå¹Uñëä[7î’V%Hýÿ’ºVÅ›¥@Ò‡}Ä»…U±GáUòt7Ï”!qX!ä¼|wŒÏ?$ß Œ_? -›[vÕ°*à²Â°QÁ/oä*RÏW»jÄÿàEF’èÅKˆÀÇ`ð”Ø5¶Á´ªà¢4VRþoÞd†œTìx’S5-RzðUîëKÅã‚’ôãÓ_eÚâÝÛù›^e~v3C-p ÀÝkÝ ŒjZ:`­+PÜ!êݱH;àî=péãoÿ± ‚ endstream endobj 593 0 obj <> stream xÚÍXÉnÜ8½ÏW𺆬$ø`æ0·`úäÐíå”rÊ裡¦Ô”GK˶ìA°]b‹¯D¹Ÿ.8oÁEtQ3¤ìî¸ÏG÷çß肇ìspÇ'!³; ‹;>|ýä=Égë­‘µkzwÀβ÷þÉz{‚µóÝ·ã?—Û¸âA… Á%$Z˜poaÎÞëCuA¥88°Í þÒûÇŠÃfn±pù/×'uD±‰”Q›p7Ý_G÷ÓAŠÝ/’BôäAÝ‡Ê –«ÞòÝýë¾Lå+eÃiã0!÷Ë[ÅaˆÅjžÚº8uk¹¢iÑ‘€·èª¥AÇctÕ“QE Yä²S–|CDZlS›@ʯ~üãÔÖ*paÌTpÁ…” [¯í¢ªe6åBÀFÎCb`j8šnã(.rTF%¼„¢ó,GõÊÑçœìvøÅœ,ih ô6c ’¡¬ !_Mó)Š Im` ‹§[hÙ%l‚–‡@*%H?˜«sz²>Ô@§þ¤N0yXzðIFkª¦Y.¾„’<ã[éÙ„èÕdæÿy®¥Mg“ [EË’¤!•G|ZÚhÊ€’FI©¦Ù®r4ANa»`ÓÁ¾á0¼¿`'V)v5­JvÈ Ó¾šž»¼4{Óªjcˆ¦pºÀôª¬o'ÛÁL ¾ˆ‰õœgЂ§Ð4ÁGhæDO;¦¦§¼%5æ€;¢©ÁoCC¦ÓzÞ‹6%øiá¼bLàÇå¾7­Ö{òâ >o(øZôÍñéã >a€ÄÚÖÞ´Zð‰’Ïÿ»‚OÀ‡QmëM«ŸŒ)Äg”C«\Žâž6|ÑšmKËÒ«ómsq±¬•y²Ò•o/ó²¡Ìßp޽̳•LO­jTËj‘g»ÀåLûyF|†¯šÖ¯f¤&¸@À7WëQð%µfãÅÑÛUoZUkŽhÓv¹Ö[åú\¿!”c÷÷3Îà1—»µ†’$ò峉^M«rÍ9Cˆémä:eÿZ¹î×$^€Rl×Ô›f =ø†Æ  Îõ-ÎJ¶‘+5ªºU²ûVj´l‹‘’¯”h3Î÷—wÆ…Í´s y”˜jZo1ùÇDÛÅ;Þ*Þ·ˆ÷o›8–Ùå”rWVÅ[Rè¾¾í#Þ=¼MÚB¯楻zÚœ¦…áåLO/–ïv‚ZLL‰f^ÿ['-ßæxGTz½"MSBÑfºæ¼7ÌQÂn€ v©?¨mN–þ¨;ë֗?~Ôè† endstream endobj 596 0 obj <> stream xÚÝX¹Žä6Íýü¦IÖE‹ س…'3h®Èläßw•DêØ»Gžî™…1¤©KUõê ûê¢ ú$'\|.îñ‹ûåÞýü[r1øJt÷/.xDr§ä“ÞîŸþüÐf½cÒ ôzÒ‹ïN ‹Jc !¼è]Y¯‡»¿îWŸVLÁ3‘š0©Lúâ㤊S]°±$‘gàyÁø]ýaý6“Ú¥þRß0‘½5ÉGõ¿Þ»¯ÎgIâþqž“;Eö à¾8Ík’¿Ýîó<ž°(:Å4xÒE#š¹ó¯ æÉ‘Œ¦¤½Œu±½:è=VEöléÊBµyöÈkoªdåÍfOê:Ì«3¢Žˆ}_Í„Rÿ/{âí©mPxÞÛvö—]_+gõ†õxO9ê>Ä2/®  a ™€cÛjÐŽ›Ð µ{Ål’Ío¬ »˜ÇÝVËŸÚ0{‡ôO+ u£pÏïSVŽ% (#f\˜Ì¹ ¸¦Ü0û€Û”7ÊBªQMÆÊdlåœ}b^ó¢Jz,Ÿ“`eÏ‚å`d#öûgÁˆÅ‡¤é,ÆèQ¡Rˆ‚%~^D}ŒËl/&ô˜å°Ý\˜Kxc.\|ÅhãSõòá²5`/%Ú3Û®=ô˜‹Éç¹úÌÅ]涤ç{)yEg‰!\¡½pòÌfëC²¦Š."Jö9ËqF º¬B„÷gDOÑ-àÕ )/Q$P"h=¥@¾0¿Ê„OWíf¿RL> ­ýj¢.+æµÊô"´WˇsŒxu-Ûg„)u-›Ñž•Z‰ðqUÖ¸_°±S°Í9+oÖ°\Ýɦܮ+:¹.±\Ã$6’êõ¼R¢3THˆ:.È&dªèb¾HZ‚‹ÌúKŒòÅè™zÉåý󡂇Œ R*:#IJˆ.VP m†\§‚Ó[sEó BñD¼ö©‰º¹b^›’ú6WŒ…m˜ÚÓ«ÓhV~$WŒmê <·É²—”7€TQw“µ(h“˜h…Í+"”×!%%‚,Dxi!`0ïc²ð¿#³-–'ô)ŽAÄèIÒ"êb¦©˜Á^Ì¢•)_cÌþ>Êgµ¬CΫ¨åm-öqn‡¾ ÄØ Ä7Lwë(§txÔ²NÜ«äbÒFŒžñxΆ#9§©ç#rvk„‘²vÒ›F¸‰.æl”èCüá†Ô 7mæ¸*¹8ò¨ýêPéL$S¾áÈc˜½WŽ<Ô šÝ6fqP³ÙbSEA¨:L <@ áz?`ìQ 4C2¿ Ž­žöúvTÒDý©§(˜Š/i•,A~”3ÑÙ%Ž>FÙ¸TEý§.µæ5ò7;Fë­F›òc=̰šþÛAÚÒË:™ È·ô.O5ìÞUƘpa1ÃÄ`±œñ\‹ËǤ£™ÀãyíqLlVµ“{¸E|4åøü˜è{ÐÏŒœÔàui¢^fÔq^Û­ñ´YtEk¨¢è57¤ŸúOè endstream endobj 599 0 obj <> stream xÚÅX;“ã6 îó+øÌð€äŒÇEf’"ÝMÜeRxoí*[\•¿€‰ÒJ¶Û›¹ÓÈ ‘àoõCYeøŸUÁ©@IǤ¾¨_Žêçßœ²F'“¬:^”§¨ÓPßÿÜãñ‰ßàøñü¼óC‡ËT›Œ1~ó‹ü¼þ:þÎ|¡ç‹F#(,Ý›1ŒáÿbÝ0âP“ÃàД·9WŒ¡ÇòWª_ê ¡!ʪBCÈÇýzT?”ŽÁõ²‘t0^ílÔÁFõ¡FÖU£ü­þPß–ôãäuÞjж‰w#F³ï¾^DY–bι·\!tØ`Š­îåóº‚-0®åíåatZºæ.¿Ú˜óÒÅ’‹Ãš%æPöíÀk4Äå7ÌÑ„ã{õVhOF30'y>£ÁÙzËë ËS×?ÌÀ–Á|RMÛY=/B“™ÓÏHý ·½BXó‹×Þr±ŽýÃÅrjÂË`ÿq_×Ú7G9„ˆûâÛÙçÏ“¥Û|¼­>‰oÉ_Â;¯I=7—wä'†Î]uÇvÈ©Ê+NõXsØeØ8YÃäðU@o_¸E”˜P¤FöÌä˜*Ï©®Å~]¨ÚÌ€+´u¯X@ó «âüÚœ2V133ÔQ«ÙÙk,ƪœçf"ϨTã¢í”ÑÂ|mò±Ór[y1ôþ>?hP]Ì9gg÷ó`¼Ù$ã5_YÈ è5pöÜY ÚYߥѸ-ÒÕ4:z±ã žÙ1X¹Ãµ4Jc§Í,÷N›ž‹ŸÓ¦ÕüþPžÓ¥‡‘²š6=êH’^h—ü3ò&%Áp‹ëŸçRb!Õ6‰˜5‡d׋ÔH«évØËÞá]H‰âHùïÇ2,æ[aN,›sKÌ8 §Ñr6ǽ ;.z¢ƒ•|5Ár~‘ >®iq*(O½•·²ÙAþMÅ|J¿)/^Aô`uå^qù«Å]¿Þ\ ½J^X«¼¾\^)å·sC)ûfôl4ómhd2€îEhÊØáv“߯°L¹ÆïQM|Ñ4f`÷˜ vö³kšÛ'%¼špªM.2Žš·ô‘¢‘VYk!F}¼¿Œw4‚äÊ<•Ò×7‚´qI&œîˆ$A!ÓHZWRÐe¡EÚ¨h[¸/ƒ†¥V0&óh+8È䜶>Ndª¤Õ1ìõÀ…C˜ÙºqBºž'¸rˆ}åwGÕŸÅJ fíÌ*©qÖÒ_ðÚ·úv¢žB¹éP[°÷»EÚèR‘ÈŸ+Âÿa>ÚeӿЯa6!K:¥‘²> ‘ÑëˆD©î9Ná žT‰ÈD ¾¨Ö‡#m£Â.-lë…žÞSdæ§íMeiÚh²jC´SªwwL €ä™—I×Mð’®Ú¼‡ÖGÖ¯ïmÀ;¶McXølÀÜÑj$1`n×ÓåðÜÏ„¶íÛOÿó ( endstream endobj 602 0 obj <> stream xÚÅXËn+7 Ý÷+æÌŠâCxQ ]twQïŠ.œÄYõ._r,͌ݑÇNŠ``…£yÄÃÇ ?‚ýáâ´@.ÃË÷á—Ýðóo<`€ »·‰!f66s÷úçS©ØÃ!èsñ‘˶í~·Õq¹šø(Ô…áP'¡ÀÈÓœóÍÇtmsV ,Ó¨!ˆ„À¶ïmlç ÇÌÛM”Ðf•:ÓÆüfÏ8ÞnÒ“×TÜdC(ò°Aár¦*ºª±þÿhÚæŽÇ—â0ªIêsãx쯻áÇ9Å4ü3ûE$PŽÃ÷P¡”Ið÷ðÇðíèP'Ú"G(†¤$àDUg’-?Õ eó&~=jG)šžÁôC{ƒ{‡d >  2ãGŽ™-$7,®á”Ò´Àp£ý7ª¶‰ðR抬¿©3\Öpt™ð ^Y!6 AŠÁ•AŒRUÐ…ËÏ>Ïáz òTaÜ7XСêÌ/õjA~ô ­¾l+Ãþ’—”lÁŠN­¢«Tж [½™JñTbýz*ÅÝPÎvbv,’EÅIÔ§R€Ì†fT´ýð*€ÍT2 ==–N“]šá̬£¤K¦ie6óRé8¼W8/›&ªî{©ç¼lºMÛHDzãÓÔ¼CÓo+u™u©´”Nü)•eÛüøû`ˆlöÛÑüÑçjà}o5Ð4±9C\:[] 4d¥©Ýhè†@ãvã‹ÿ‡@# Ñ[2A@L#HIfI?Î0 r &FÞ™²s.wǘfR²š#—¥IUÒÏØQ¬Ì£LŒòš“ï?“A§%èÙæb‰“Ó)ƒ^+„¹âQÃCÈy5L`0;íÆÖ[Pw„ÍÌž©ÖzåEqkמtü„r!Çm‹œç¸@ˆñ„Jöž‚ue¬³¨UõÏS"lOwÔËDW½‰n²É }=±©ŠºÞ=­µ~»ˆv*^ÿ&¢û‹Þ]î*©Ç.åb Г0ÖŠ‹/’|ñ²Ë 0UÔ»ìˆ14[ù(­ÅD«Á1·£¾ýô/êèí endstream endobj 605 0 obj <> stream xÚÍX=oÛ0Ýû+øÌ’÷E2h‡nA½ìØ™š!Sÿ~)K‰>¬ÖJ‹@ |!Ow¼wO2/ƧÞ0A’É<>›O{óñ ïlrÉ›ý“ñŒ–ˆÍ,è°?}¿sùž¢Žz¡^'½ä~”Ôê“sîIGÒKô:ÞÿØUÇÔwÌÎ ³†P\Ó¹¡qÕ.Dl¥[ÐÅÒˇ†ù´ u{BI&h"ÚQô™ÒÜm‘úÎwu‹ÜylãÅ’¿ìûkç(ùsNbѧn!ÄÆæ*frׂEÝQ¨¨rµä]É€õ$‹qµ" ï>*¢éU¬ mœÍï[QßÈg(]_ J;;Ü5MÖCÐ*쟟b™®°‰8G–˜z„‘®#Œ0K´–0Â…0žj¹ä !6Â?%(68ÔÄA#ÐÇ>²ÜJ1Mb¦§M0OD´éò–ºðÈYïѵ–IBèV2dã )tûvkRè9ß‘V¤“‰ÊìXD!ÁÍ(*;WDSKt„óF<¹ ÀšhGSXëÊhÎ[Fs†§8×oLv¾ š6ƒ-Û‹Ÿá1åå‡UÓ$uZ1(ù»¸^-Æ5jñÔ¢¸÷W‹L6pÐD“Så ¤$–µ+w¦i‚•¨{mì:äUtß6¡ùocÍIÏ©UÆíçTM“=¢[ `£àqúcKœ©—h”•ç«ôR–AÇ!Ú-@3›,è™êSLKjÀ°^ ¥5jh¹ Þ] aȲq 7ªiQ aE™¶ÕC˜òû,¦EEDÞ[˜9í¥1ßVƒTçr­"Ê  rØ(šžóÙ>ÛÍ?lM#Ap 4[¢ç×E“e‚·:6Ùùa¦^)€>úåPM‹]ŸÛ¸¾ëVvýüÚ'§×õµæUÞ„~#¨¦Å®ÏÈÃ×ôYß÷9¤AJÅ´ØôYo0ĉ#wƒ$ÓM?¿®jú 8ç" úsM_'êSLKMŸ“VPÄuM_wÊû•M¡Þ½é‹öE'Ò'‘jZlúdlüDЩl‹ƒ‹i±é‹²¸¾þÏœöÍ:[óâXóz ¢¶aË¢L,1ØÔ½Z4ŸÔR]öðá7¸$(× endstream endobj 608 0 obj <> stream xÚÍW=oÜ0 Ýû+ô¬Jü’7h‡nEo+:\ÒÜÔ ú÷KÚ²c'öÙ—Äm\ìã‰4I=>=»_.º Ñ%pIŠÏÅÝ=¸_ÎçÉýv1‹Oø¬ÿyÖµÝ÷Ÿî«ûâ>ÝûOàbð%”èŽgõ*^\#>Š;þøvPTô!0vWR³^Ål‡8ÜŒ~=ë'Û¯‡ïÇÏîãÑòbbåÕDð(e”YoåFÓܪ'°&—kvI3KÔ]ãmrÒŒOísŸÔ†ÉÛ]¨Žá¾.š¸Qä¶Ú /ÛðM„0Ü„ó¡AD›žØVžnFh‘P†’n!X¸Ôá¥ÅÑ}; „¡Â¬³,N/¤G[`Ÿ%ŽØ¥lc¼È.t-»¤Gv9÷seû;Ã6]†/e›áL¥¥Ž!÷¦U­hÍ‹ûÊPžPóë,äJÔôÊâØE"XðvÀdã¡Ü:œöÌFƒËí6õԯDzc2U!loО­¡ ÙŒ9ãNœ< >?­¨RãD>õ¦Uý„Æë|½~¢úÉf<ÞÕ‰†¿¯Ÿ˜|â¤uJð$¦Ÿ HÛšÁ´Ü£ä%ëÖcÒfÁUú©mØ‚~â×ê§¡¦d”[&5UÓ" ¾<áSýdb½ÓN¯ÖOô Ï}p¹Ýª1î‘+ùT{Yúî‚ótiËKö9ÆI{ªiíà'=ÄàúƒŸ7üÇâ¯ü¤[xB%½iõà'.>ÁÎ? û‚q’`5­ý”²Ox•ÂoLáãàU³/ô=³¾ÎबjZ¥pŽúž‡t=‡ËnaÀïþ‡³½Çòd {Ó*‡³¢XuùÇá¬ï±8©©šV9œøªfDL+§p‚Ë 8¼íá¹Þó@| ›¢Ç“ÆTÓÒf«XòÚ×HN¾p?Qß-ãpP|y÷Vt¦þ endstream endobj 611 0 obj <> stream xÚÍXÁnÛ0 ½ï+ôá$Ф$ èaÀvØ­XnÃišžÖCOûýQŽäÈ­Ûm= …à”é§Gú‘±y6ÎXýs&  ’ &s|2_öæó74ÎB²É™ý£q„ÈìØì~ÞXëù–’^ uy]ºäv‡Õ%kí£^YWÐuûkÿ]ãR—-“"8‡$9‡Áìx, È >\t£Þ »ÚSÁ¡x˜Z,”ÿK囲#ۘϷÌ6¦îv_÷æÙ@ Ìã¢@°Þ윀4O…€•«jùm~˜»1¾bRœºx¤‚gq(b¶7Í·z.ŠÝY.蘘[tž=µèŠ¥AGCtÅ“"xï º È¯xÐüfVp, >@þT“`Oc© Çýž+Áwä­(§z¥4ဘ¯¡i‚/GãeC4%øB4º„·Bs >@ÃWöo—¨¼N+¨ñNÑßoUÄ9øášn ñP8ŠiR9Ø©Æî³JLjÄ6.ÛxUly ¶>ë˽žÂNŠ­\^Šk'UoW&²”& $™¤$À.]LÓ$˜s3›i¾v„è«Ö‘pR7SqÎ[5ÙìJ Cm9#’ÜŸ)FM^{¦bšåê‹ÖI|Qs¬h…ÎÂÒ» š^t\¦d´ßé)ª# Ó§žÙé£ ɵdTÓd‚ë¼AVcÄõGZ1q,xþùÄJ^ Ü*G5ÍÏ¢ä*äM‡ –Â`1ÍŽ¨"ÉDbwý`Énƒ/j ½Ã½u$ør4tÚ Í©og Ñœz2·AS‚?":¹B”AVÓlsõ¢A"­o®‡·4Wü÷Í•txàLRÔ;*EÞ2$ì Óºcf2e&ýGhHn¬ôÞÆZÏ£~`¶'ª¦IÙé}f~Fê-·±<Ì]m¬ ©_Ð[w;W÷˜ë¯ïH‹-ûñP¾Q«ëˆ·çº½Z äR÷¾e¯˜¦EfµeëÐ Np]+VÜÎ-mÅyp=æz#HaêÇ­gQR]ÀÛQ¥šfgQ ™I÷ßÍ¢ºœ_Žt¶ÌN¢”T Æ~çåge“A´¾x}(Û+YeK Zì Õ4-„ 1wÖÓðÊF‘«—6ŠUU?7|¾ï)¨•Ù)Fi;k5ÍŸ¬âÒ¶Ã' Ó`1ÍŸ½f>N^ž7yéõ"øüÛ‹êàÓ†h¿ôêº÷v[¡9ÌŒ{âòM9¯¦©¢Ô‹Ž{¤þ)îÞ¸z«»Oôò× endstream endobj 614 0 obj <> stream xÚÍZÍŽã6 ¾÷)ôQ%Š’%`Ãí¡·EçVôàdNÝÞúúKêÇÖ$¶c'Vv00œ‘ešüÄ?Q?„Šþ´è@t.HÄÛwñåUüþ'­dPA‹×w¡­‘ˆV@Ý^Oÿ¼(eì=Ýè2tèrÇ` Q”RïtwtÑSýíøïë_DkÂVIg-±H¢§‰oJ¹Àäò 8+qã &}ßbþ¶U<Êÿ…ü$Ïà1kyV³Éÿñ*~é;èÄÿƒDåÅA;iˆïÂ8/½Gþ‹¯ø-•C‚'H˜yƒ›\¬ÒÓãA3ïï –F{Ï¡¼€™Oïé®31þ­øÕJ$‹„ë(’±Ò¬EÊ#•HVÆ{© ­8ziŒÉ"u$N‡ùN—ûÆ÷©u2ä_eÔyjõDÜ+âôÛ¸)â$2¼µôŒQQ8å'%B(?Q!AmU­4 Å4Ÿ–§{ÉC§²R—šÅŸTý”l‡@øZMªch-ÂŒŒº%€LÏk¼‚‰?H €c—UN[gòùAû„à4˜I¸ ®;÷s ¨X6wFíýò2K&4”ט_!¯]à¨Ùò·Îù "›¾!ì7×a@r}´>­hvãSò—Ð<ØÞ/;ÛýtXÛAv8¯”=FD=fuÅÚÑzpN°¬9ÍèmWå~cŠâT`;ÈM·:Ũ𕣕q|.§èú†N‘‰;»(o7B‘òœ·$Ej¥À!—ï«Í@ÉåË8æg§Z†-ÄÛ²rÀ Z¬\:›ÎîhÕÄÉ|:´V»åûpå/6ÑÂBÜͦ±¸ø÷a4ºèSìÕÆèA} ¶œÝs³8òu䆆­Å#nè¦¼Ø &ÕÄ׸¡ýåµ35IÁ qv Cµè¹ú¾m·{·¶@ÿ0|v¾µAú¹á–Ørò³ƒ+žÆ6fVî‘ÝÁlv|† †pLÚm‡üñ¢Ü7 ¾­T¸k„V!~#}ªÐò®ª–¥!ß–¹†ÿ‡Éè]XìP‹›Çbmù$YeÙ˜c,°×‚.>R_Ì—<¡ j•½qLØêåkž§ñ€ô[ö)¨¹#רz¢Ç)^ÄÞÇIƒóâX•N607Þ“¡ uc¿Eá)P©z¬3¦æ³^„—«-g—%šÙù¾D/&¥y‹ÔDæH3ß}Üm.Æ<‚Îm|vÂ`«4JvK}¡YÐ`â« ‘ë‰g w9»Æg nŸ‚d›Ø¾A¸Ä¹Ó‘ à,laÿ÷L“¨YÚ=TÖÄ?‰ (u×7RqÈqôYnß=€mˆÁZ3š³ú4rû5qg׬9ä W‡Å”æ@6­å×¾þö ´N¡ endstream endobj 617 0 obj <> stream xÚÍYÍŽã6 ¾÷)ôQõCRäP =ô¶hnE™Ìi÷°§¾~IYr”ÄvœM=´D“Ÿ¨GýPVþ±*8(é˜Ô×ïê‡Ò1¸ þU6’Æ+Ò‘WŽ@#þþ¦þR_Ôo{õëNY£“IVí?xVÒäÚ¶¤öïoq` $¾œ1è‡;° ‘ï$²ÝÆ¡Ù6o?øŠòv÷ÏþOõû^ìB@lìÚX§=¥Æ²*ilƒsÛÊL‡l\,Ö¶,Àp§7¶V¾Ìß½ðÍ-O¦L4uÐÙGHƒÅqÌ•ò£1~pj^£!¶šï83Þ[¾b'cnψ¯gÍöÞ gµÊWaòX†í}ÔÄ5GÍcì–•wØ{™í ű,òn¸£Úbì_·•¿£›ð8 Ý»¸püi™g”Ì–±CÐ*ÿŸéx²¿€4¤ØÆ«èf}ÔÞßß‚ w´`DÉõþù-0°ŸèØaiX¸Dy±FÑ> stream xÚÍ»ŽÛ0lïWè¬J|I ´C·C³’æ2µC§þ~)KöÙw~ĽóµÙ Ió)’2¿Œ7NÞ0A’É|ÿi>ÍûO`¼³É%oŽWã-›,èv¼|½sù@Qw]¨ë¢K PR¨Oι«î¢+ê:¾?+c2fg…YE(,é¬K‘ƒäçJ0’Ø Ê#–ï3Õo³ËÐü–ê?#Ø3V1µì?Í/cc€`~«šdÓøhƒæ§$–}ê!?Ìs?i `%ŠiÐëî«t°*Gg­þßk1@ÖÅ£pfÒ!S%Ψ'Ý}e”Ÿ]&(ĤV(„!ûv O Ô¡±:•.ûGñŠ:AU Tvx¨ïiÊKÊ=?u^rS¾Kžzœ§ÌEŸQ¦˜“XT:ŒܚîR }¿Ó£ÕmN`h˜ ™u4MdšäÔ~4È„t[&¤ÅL ­™ ®]d{OdF‘ðo3#Š 5\°(’-&dYÏ4k²˜TÒŒÎ"¤-ÉѦóDr<ô^@PGb XA³ÑÞÓb²ˆq!Ü^î<îæ ¡e'YÕn.ù°Ýw’&3G¿AQ§Éy'iZæ§¥  `£û¼‚æ쮢9±BÛKÚiCI+I¬J¸·/iZHCº@ë=ªôð´QOŽ4k#$MìL‹bU‰ÿ¦ªõ:éa ‘G:UÐl®÷´ÌÖEzr ]Y{qi{ÏszØPÚúrv-„ÅêSmôœÀ%SùÉ·ý¹~×ï XÏ\^®X ȱ‘ƒªÅâBá®<ç2ë¦xvheqóÊçÊ.¶h™ÓÛ‒qaé ˆQ#CFùRAkýXŒa[Ãtù Ï çä›7<ÚØ8êw*dµÝAö„°o»ƒ­CÉWA«ímbÑÏœRrÞ¡Á號úÔ[n0†¯Þ`Œ˜ÓFiüžÒTæ#ixWGÝÔ v¨‹¸“4™yç6Hã÷² o bÚa‚2Ç-Ò î˜Ræ7qÆÇ¸§0¼Ñ4»¥Ô€ù²4ÞíÕm3Á|]š®±ÓŽ],z¬³|¾‚Ô»´:걸Ás㬗{¸uÖ»ÔZž‡ÿï®/9õ Ç×Z´zÉ1Xß§éÿsƒÉ uå‘N´z‹):ã{¡‰ë…o;]c–àÖ1àêä¢ñßÐvnÁÁâÁ²öÂct 98Ëj¬FÔÁ‰;c´Wó},Ý¿û;a3j endstream endobj 623 0 obj <> stream xÚÍX»ŽÜ6íóüaÈû" [pŠtF¶ Rx_•]¸ÊïçP"g¤±4y3ÞÅ‚ ö yuçˆ÷ÝEð]"—¬ø\Üã7÷ñÞýþ¹| %ºû…|w O¢îþéï!°ÞIA/„ÆhOhvw %„ð‚>¡á×øp÷ÏýŸ°+S»¼©ÀƒÑäh"µµ 3GH½q:MÀ4Œ}xn~À•©/Rÿ+í—6¢bªíu\g ¯ûtï¾;Ÿ%÷¯‹Ù| ìÑ<¹oŽL¼"WùêþrŸ—ò• üÄ8*žIš·´é<Öðaò+â’<ÄròNEuê«W–©w ™x'sïÚLÉž™›w ž%{CÏ(ÑR8ùúÔ‹ž—Jk^¢Çü`ár¾rô6 ª!«)WörrFðiBÒ|Iå"IO¡TrÖšÐñ.K$µIÏI9”ø§IYó   4ˆ)*æ5–´ž£ä-F¸m/‡„-ðòÙ´郥M®C¿4-k{¤º@åcL}&›ÅÔ U2ç²x#=#œÂ[úRÉV±W±Y~`s7>2zɸà;(úD® xêÙ<æ&ä±ö—Ê-°Zò,5 Ú”DL‚–ýšÐš°0€_~½&¤ø@5#‘Êu­²´© `þ4‘Kx­&zL²1OcêЪ&Žs `L ´­Ï•º¶¨ ,ùyBݽºè/ದ %ìœiM;@T®DÕVúQ#5•(@”<úi¶FdS%dÑãk³_%¶G%0ÇX9˜ÞN%”@ù ³5h[%%xµw¨|SJ³˜´©[ [!q%0Ñ U2*d‡J†DÑÂÎð¼ÐŒe¾ÈL ÚTÃHÊûÅvŠA †øøvb`c{fÄéЦ8™Ïöî´À™}°yÙ´­…¢)_¢*ßX ña¯žOùÔº>Ð…zË’8MN‡65!l>à,²[ùJQTAD¬röT÷Sow¶øEÓ­æl B œhôîÎb8‡§yD Ú> stream xÚÍXÍŽÛ8 ¾ïSèŠúŠ9Ø=ì­ØÜ{˜i2§öÐS_¿”-¹rkÇñ4™Y‚F¤HŠ?)î«Cçíƒ.’‹!CÊîÓ÷áèÞýE=dŸÑŸ*ƒˆºÙãxú÷½÷¬’ì)dƒmœl„‡I6)fïý³=£GOÿÿ6ÃÒVAÕ\M3ÅEé“÷‘ªÂÌR&…a]SR©k«/Òò-×_êŒ"S-³F™Ê`þÏ£ûê EŠî›CÉà)»à@î‹c_"“ä³ûÇ}\LP„le`’êmúѲ5ýjÁKcÁ”K0Ô&KU.S-¡ŠÕPy÷Eµ HŲÚÄ ÊÒT%]@³™4%3×€¢‹4¾s©¼/í•$ÌÓ^ùóR”iÎÒÁ¾sXZ@ ,5“2÷éŽcfƤ^Øjˆ>ô™©’õ­®XH >Ç}`°\!îÃ`îT@ñú`(yÐè9Q©ÊÔ6´I6Á€H€)Þ ôwÑÐ"B´¢Î¡©‰Vñ0é2fý©^˓ζO¼ŽPÞ^†ÉxX‚Xwê6á±æ/ÿ¨"¡ ی框4KJ­n´!@²‰oЊñp µ6|*ïwò¦§ó…2²LÙK—å&Ú$W±{fÞÏ®z-»æñ¯ y*õòv74‰LØÝ›hóŽ&I€ÿïîhæ…xSmÞÑÔ3P¦¥ãÝóŽF{îh}+?×ûÚéÂ&«·î´OHm‘ˆm„äÃ~ ×’Èu@xuQK¦Y÷h¢MQ»ÔâmÎë$¢‘UgVÑ&‰¨½Xu\¨òû܈.ˆ®Ìß<ñÕÏþºyKk„«ïŒí´x¾S†:ãË¥ÐêŒf4ÑZiš]Pƒû!¤òKÛù©m©|ƽ6 endstream endobj 629 0 obj <> stream xÚ͘;oÛ0Ç÷~ ~_IÞƒ$d(ÐÝ‚z+:8OÉ©_¿G‰TÄT«­’Â(ŸÉÓŸÇ;þD›gãŒÕ3Á› b2wOæÓÑ|üâ³lræx6ŽˆØ¯û}€L9'] ƒ%bª‰xª!ÅÐǦ‹/,vn]ǦXf›<$2‡5„qJÄr5ÄÅj ­Õ^ªá\S!G|¢:z…ZQ XÔZ°$tÙ$¬{Ç`š YLª4wtYrÜR ]IOÈïÙ>ô¢®ÌX`1Íæû0 „Â\Nú¿NxžOøçB`+YŽÎ.- ÛÕàf5´§ܨÝžjd‹š¼Iû½Ô¼8Ÿ)ØÄàû-n¨‡bšZ%¾Í6»Ü…ÌO˜¾¯j¹?æ{]HFVÓ:õYÀmÛÕÞû^¼Ò»a[5­‚ßGò*çr›ó­ûþ¯É_ ]N~Á«>P9Yú8²,-tt](ÆA)¦5â£Ò ÙmGþiò/(†7G>ê.@¡!j5­"5xDn_䣾§JóJR,«ÀGq*/í—ç<›ç#çË ã´ÔªsœQà ý…÷熆wxjœŸêƒlj[,«|%­´n_3[ݾžû“ù÷ã+qŽqâjZå+‰«ÿ?¼’"’˧j=VÇ©\F·#\³óKášø<©V5éø&Å´Söz~N¸ ¦9óý˜®gþ›Ã”5Á¦ñnQM«0eVÉ:bW˜²"1Fß,¦UœrÐóstsÉ·Ç9hÂù:3êL;ª)iz™šŽ§´“LÛÃtRŠòÊq³æÕ4—”z ÖW¬ƒÄ‰ëŸ„ý?¾õQ7~ÊÑ¿ endstream endobj 632 0 obj <> stream xÚÍS=oÜ0 Ýû+øÌ’II@qCvèÄ[Ñáò55C¦þýRgɰ‘K.¤0ÉOäÉGÂ0P| Y {ÅRáö¾Îðù»Vª ó°%T5˜%¶ùîç¢d-±«ÄJ±îbùa­r%¢‡eç¸å›Ã¯ùGë–ØÝ,BX(=ŒS^¨ÒpØE"†ž|u8½ï›ö·Úþj¿é 3kV fz¢ÿ6Ã`É’áO¤©˜-ÃijTx©ŽÆuE~Ã5\-PF/Sbô*=:¹ǨÖzÓ²äÂÉ­‘ cíÎÍô;w¢v¦æºIÈ4ªºI(å•· ud“îêž¡PîéäH%G~QÝÇ~lØ9•‚¼†JtN{Ge]mž‘Ç9ù9ruL‘­mxªÁÑr/ŸôÖW¹(§m=:ò²À}jÃôßG@ß8‘ñm§”2$ٵ̀.s4WÑÿn X¹îdÐÅ9ˆ8°®“=º•£[Séÿï= Üm™³·B>8v<¾&®&Œºî Ñ¡—Ä!´¸Ÿ¼„¸6ÄåÒÖxêêÓ_#FZ8 endstream endobj 635 0 obj <> stream xÚÍZ»Ž,7Íýý]Öû4*0°6[`²…ƒšéîÌÿ?±$’"U¥W_Ø€q1¸3zPyøT]þ¸è‹*ÿô%šK yIùòõûå—ËÏ¿ê‹QKÆ_>ž—«]¬v—kðK ñòqÿÿM)½­W—sùÍd¥Ü¦”wåÇ—U~ìzÕ¾Lúmýíã¿—ÿ|]íë‚‘tµ¶‹ònÙþ,ÿ¢oãëÿ.TºpN;¯,tÏõj\Õ÷eÞo¼*3ªŒè²OkXÕV< ߟe¿©4àošW#Ëæ¢Õ’UÖ•åÂ}ˆ¾°ì ïNÏá^ï0vÉ>ív(SïQîãr¹ùXF*§ŸëÕZ{SÙ?ëåŸu’¦KýM±r_˜w÷*,¸”-c¡ü]ÎPÖ ‘1ïm'Ò¤ê@ÂMººj“dØfò\È:ßäîw¹ªh=6E­× 6¹Bnd?a6X#·ë@ªeÔß}Sç %»«÷ ²? ¢—àI÷ˆxÏ w@¦`>ó€†ÊTx»&ôÊ ™ * Þê^˜Büþ…â7hŸ(‚†ý{Õa]©olÁUHîÑG¯Tá0:Ú=ªQ(ØÓªç¹>R=‚º ©’|›6HBÊÕ£9˜æfžpMë?ñBÄúƒ(ãe;àšÞ½*¬ì„37i.+]Æw 4-XJ³P¯*0µ‹w™Lî“ð'mÂk¸}37B©—hEŸ`YÅ:¤ÃØðÎ`¶Ã_ív¤˜nu& 7¬.U£ñk3 ¿[8GäPìíî|dä ˜ðb òŽ×@¦Ê @"šÝª >p\QµHm zR5 …Ìy‚Ï:¼ó'sûtaÉ9½cŸrG³O«ÛÁ ÝÐP)Wï;óõ%è¦î¤+õ×Ì›¾³ö¼PزñÊþpzCqa»m‰í’v‘Má_ØÏ¾Ñ·õIúª ÷H;ÄщËA>'.hKà1w»ÓȦx§lÎMož#†€W•ÿ5©%j¿7ir·ˆìÀØ·!Id'öÂ^8ôÊ•'@z± ›+S&AØ1Ñ2N(«ºÚoì6äªVê/6ý=°Âê~BJ;÷ôšr»´!ø©DÚ•ß² ëÕ¢³ÌÃ~NÍC/ÎóB–B÷‰Š?ãUD´âôöè×ÑÓtˆb°¼ý)w”Kzcì;îHîPvî8 Â]ÕO®w…k¾óÁκ ªÝvAPÌæãüÏ>2Èœ|ºôc¸îÁ‰¼„î­þ æéTßGGØÓÇ‹^|†EWýAì‹©iK(¤ìs†K«[ª¯à¯vJ„Â©Ô p\OìšÐÿrhò2ÌhUй2çÍ%ÙN×Õ¸›zxŠZŽêwLBšêªå·Ú}Æ×«s¡¹„r ™‡¤tü‹ÐGŽÆÎ^›m—L>P]c èÐ]æ{UÂ5m¯ˆÊ](Þ '“˜ æ$]GL9 ˆÑ=ñ&r»Œ(ÞvAàÞ+hõÊÑ™8:.Ê"ÓƒdtH×ÌȼCId<ÁK‰`O¦Œîûˆ×ã ¬iÜ kSP÷éúª’ÈÉäjìMÚ@7y°•Ý.ãnrݼBªjdjÚ.y§`(f—'ËÞ ïtG„òL¯‡Z'Au3ƽ“—;X¢¶X§ˆï“ìÑ©WŽýí˜ÎàèÎGÃà΋H8Ë$W›`ëÛ„æ:÷úCs¬©÷Øãh·¸(çY¢+…Dj:ÒN™6ŒðlöC΢e*ÍÅ!Õ¸à…Ø=FÈnA†ÓnïeÆ4¯ ¥%HÒ“eÒâMú;šFæ/šF˜ÞGÇ1"H8Î]2Ò[ óâ±ïìIE„¢7l*ÚÅ÷ŽMÉ-=†€Ð\Oõ:ø›LÏ×T‡(ë5öâ:„ïÊ6œž¶Mˆ*ylþ‹‡»¿·‘Ö}™!Ié%ENuB‚[X µö…0Ê€ûdPÇꚨ ûW¡0U8ÎÓ÷°ØÀÍJÊöÊU'üé´ûO±óu¬­U¼÷EåQL&Ø K–¤¹¬­íÞ 'åÂÞ˨{™€)‹á~ãníY#(±ryÇÄú™`Š4-å°®R"©˜h1êâ¯üjq¦‰B0çxl‘°ÉÓ¯;%J}ß©œÜ"™Ö–¦C+×Í &ຽA(ðÀ#¤™â(¨“Ó—P Zܨ#¢ëϹ}Q€À­Y}2ýa‚Ëx–‹Ì$[ÛZ›Ü&ÇÅÇ%¹ìrÚ^ÎâuV2˜æÞÅU2û-ÒR/«ì9ÚßÌ,â¾óùPjš,Hzm›¤;YËtöy—ŽI{Læ³:‘ÕøDÝ ÆêSó£…Ô¶]«B¾’äIãwZôkaN´õÒcì°±<{©)[ ]¯æôå+Lk–6¶Ã€l1ÀH–³9£Ù—“°ËIJÙ¸s*wJ˜5S ˜GmÐмM"‰ô"»–ÀýâGxPo$€"„æèùuh׌]ÊÖžµúíÙ8ƒLˆÜe›¥²ËÚv9…u›Ô°VÀG¤?D6µ)uÛ)+ ‘GÙ ®#\R§c×Û¤â(=.ªº©°v‚î!oÎ;›™qqat2´'µèWù­›w¹ãï½%}Ó¢lxL‚Y©_“æÈg* 8‰$QÇ q¢0´&xcGô^u¼Iñ‰Íº³{"¬•)`/¤>ǹlqì\C°„Í¢47ÄyŽ9–d8æC{o,Ä­so5àÅËŽóø|‰§:JÞÿEʘæÜ"÷Qý#ŽMzßêÁLEcÐ_ hú£*K¿ÅAŸ×Š’üjê«ÑDsâ»U/ìeéLK¿³ÇúÞ³j­ælO?‘zSpH·8U3 ;Î|Ó01øx»ÿ"åU;[ôüÞhgé黃ã;ûÎÅË÷ÈTBä~¤í-ý]û—UD/ˆÒñÞòã+VŒ-H·¯ûcì·»ç>¶ñ!.ÊæýÇ6î?¶Ißl³ÚêÖÝ1øÁM]Ï}pãs\ì;hr¼Ÿ…1Oìh¨)ìá F ׺gÁwN[s¬6žëŠàv8‘mÓç°X´I‘ãlÍì`¶º"Ë©tÉde¢3=ÿö=½I)s»RÅ&º?vÁ”¬?’´S€Þ¦wuO{ÿÂ~ùHcŸ28×[)‡ôÈqs¾[öqáY"Ýè.QÈŒòÀBzvï÷Lâ™h;pC¤ÓØ8ž¬øZ›# ÇÿF;÷‘ºXŸX†a?«áõ‚« f»GLRÚJ{8ÇÊ'0úÈö÷6Ë{ø>tí‡G a|ªÝº¢gj´ò݈ª=×?â'¼­¬ ão}•— {B> stream xÚ­Z»Ž3» îó~£ uÀp §H`» …wmw§Èû7‘Ä‹(Íx=^?ü{­%Š×Ôœþ{²'SþÙSr§×%¯§ï¿Nÿ<ýñ§;Y³¬fµ§ÏÇÉùe ùôá—2ñóöï³1îaL0åSþƒxùp>žé×Z>®þ]G“2Ëp¤þ™ ¾|n8CÍÿÂÝà¡GÔn¿ëò„c˜7¸—ϵ|2Ruþ@ÎÒ¹¸|XsX¨,-~¥å2k—ïÖ2ËÛBèÎ8\yh¼Á°¿´-*ƒeväµýÀ€#¶®"Z+¤M^íq×笻³‘=jä?Ÿÿ, ÿ°~ °²*ëÁ°@ÛÎ4r ©­òüJË+ÿ6®-üÏÛ±°ÄŠíÄÅÛŒ[Æ{|N ƦŒŸ¤ÆÐùãOÐäÞ/9ºrH$¬ÜÕ/±ß¤ýòq»/’a™ËÑc‘•¯"øÂ±äP$ÕÞÛ3Þt<¤ó}ÇfM—¦Š\$+þ•”¢á›4ÖBâ'"èG·ws'³Ñ±m¶ 7!I¤J©-OÈJÉ0êŽæ&{»aj@Ûaï d]MBîí‰æšÇkҰø˜ÞP¼&0>\l —˜Ðø.ã(Økw£æc9SiO4¿ ÎÆQ+7ä~BŽè/S„Âٞܲî´‡¢oó#‰ÞÏ]YjB;Ù2 *pp q4»©=ÅýšCX䯇Ò'îw§' ¹ØÙ¤+˜'¹BêAx¼j ­ìÌ䑎2ôRŸè)$^•ÅÂ1cÊiYc|Ø4qN Í)óHÈÄQ ˜Ã¼#†4ø rdÒmS„V¨Ý:}fU£t[š‚¾µƒDnÿj7Œõc@ƒ%‡#‚­šóPrÑIÁÞB± —ïI'öZ‰Êw±Ïf&Å™r;äµ§—ÃÆçÃ’óúŽñiŠàUž#¦繂ÿË£mšY©ãJN¥”:VÌ|/Ï…%¹´É&½Ü‘šÖj vÑ?©¯âí&Qâ?»’‚l3~|15ûµÇ£ Kôqà±Ì÷<×NSµD ƒÃX«™ëAXVÿ–Æ5ºë”´kì€Ø% ´£?)X„:=© é@Ë%å(7’µ~à[èv@öpCd×°¹´Û:W?½ œù*Ëè|ßDC©ÓÛØúDzÿDÐTb"«˾ QÔÄQ"í§lMM†I¸ô T{ç6#ê4L›Vz²3ãnÃåô㉥z|¡1\ç‰Æv<ÌÚu ÊÅn´P° w]\ O{49ž{WO"Áµ£(:Çl º³œaB—¢Í ‹÷½à,mÊÖÝ–y­Ø™ÏmR\{ÿá“ð©/é5C,v9LSBY a ÙNKÔÈÔÇ$†^f†©;‰O†ª…L­ƒ±9tÁ{JJx+£ìU#âÀ^U‹5 …³†ÿÇC·wvqÐc·w½¬hM°Ý{#—äÈ'c\\öo]¤)Š–<†Î·´qKq‚Úi]ŽÃ›«,{?¡—Í’YƒÃ­ñØØ~¨’hˆŠàv»”ER:8¬l®ã WíøGéqÝÓRIËTZÞ)vŽ´½¡$Ýiî{Ç_ö½ã˾÷—ê•pÓ;kzC)è!¾Ó(^÷ŸžDǽ˜»Ô1XˆHs£v[‚êq'v;sÛ6©¶/]­¬SùœäÛ:)v²„·Ä¦Z’b¨ qŸÒý¦X¦#…Ý’:³ë'ijˆTžºíÁ¦Ú4}§U0Pü"q?};aÿª}|wcçŽLå¥ ìÚ¿cóÔK´ñ ŒV·DóÎËÅ£!mb´Ã`»‰à¬ÜR $}7ÁïÀP¥ß8œÊ“)ÐjÄÑœ)ê `àIŒÙ‘±hž7“mŒÆ'çm‚¬fWŒg~‡ˆº¢2÷èõ- •ðPvnºWE)¹ûg–.ÍÎÝÂp[´M“È"wï„Æú½‡¾ï÷%ó*ÌIôÜNPañ6¼:ò2“¿­ýgÀR7ÿá§kïCo–¸°8óÖ«%šâ r2lùŽø¤Uý ú>vÿ8Ÿ¡ïõµJªõýhÏWú*xnïõ^K`qánÉ@1HÜ;?Iüñ› 8š+×süž‹F„ÞAo–‰^Ô+Lƒs?ÔbtïäÁ< ;´ùU±uÕô&ÇËÕù˜ì_ûè-çB endstream endobj 641 0 obj <> stream xÚ­[9·îó+ü<Ñ}†‹$Eºl÷bvmw)òÿ›§ƒ¤(Æ;³ ‹µgtP*¡ê"ÅE”™ÐD³ó6j!+¥îéöÇ+½DºñBç=ódþ½_ý­ž¡œ‰¨6ŸÂ“hÓ©ŒÊg¦1ù[~J³Ô£>µŸ.™ºzá–¬'ÎÏÅëû“Z½XíO•OøéY …&fYÓÉœ!ŸÎbÌw§]ÑÐGQ­þžÿdÓ΃óßú2ŒêRÈQ+cÓ€‰g‘±¸\eÒUA’eèÚxXÎø@ Ó‰gRÝ€4âÚ´¦ŒJÁad“Iâ•yÞù¦LjZ݆2õ^6ë1Ý•Â-òŒîò e7 šS~]cZѶâQ·^¦è+±œÙ­{|Á À "q°Ú¢îžÅãZ}*yîáÒêUYiJÙàî2%FÔv:èx£:€|m¢í¤Q(ÉW«mkšÀ}Só¯åtÐ}òVösP’ƒÞV*»8wÆÝv3²D¯ÚÉîLL‚‡ƒ‹Ö–G„\48NgFÉ3ÚþÚ{ñmópéó“æÔ —õÌÂ/“Œ®c?A†¦Ê±EwgzîKVì ´p ÕÎÝÐ6hôŽÖ2êªÅL 2vwØ䪋÷Òà,UTnuß—XÜ ½5í.öS†#o E4´.´bD)úª@Æk³‡þúÙ¿­ÒIˆé+ÔÕViŽç‘dª÷lªÒéïþ´«ƒÀ€ IÚ ÍÚ77!ÈõÖDyŒDÆù._ÓzIA  +ánºÒC‰†æ¤®Z»”…QsоÑöyhèì~ãV§U¥†Õr,Ä Ìw…‚ìQQ+©Pà ”u‹QêDèfõu—þ|ë¨Á+FËut\4›r ÷Éè;÷Œ[;¦Flû†­`ê, W*$§F<¨ÁŽyX5Ѱ5»¼×ï_;”æ¡þª ×õz÷”¹7î3عŸ‰AH´h3Éj•u9G÷™m+•?^A…%ðßÃÂvI‹]®l\VëL¯.HawýЂ?¶¾ïÖÇÜWA*åÄ?]¿§¿(¨lÞõ ýîGü9„¦~¾¾7Ù_WÞ›·2ÖÉù93ì‘ü×$É‘ˆYD4ý¶îð¶n‰éi |³`”Ps½„ýxô•š«Ð‰å ¡ûhèG ù¯.—õOM)”r1¶Óçk¦˜Ù­™Ö»Ú‚XäWµuP«žv¯» ¤}²w£Õ1K(ÄcFóè5e>ž@©ÙèÉg”rˆr~[‡ïârîdXT.´ÄÊ}›XÍLÉɤ§3;™"‡kP–%IpÒÚJ%˜À8¥:IÌ21ZÈøë›“éìÄk.ÌÅPb^FuÅ]G¸£Uh ô”Q-6úzªL{‰Ü®–pµU˜3ŽÅ S™àoM0šç:Oîy[‘ZûpcxÖ*óKQ”p/$8¾®Ѻ[W¼²5)LGvãâE²:wš©BiªŒ‘•Òê–×ýz òm+ %±º{ÁÐéyù[Ë`ÍßÎ)+•Y^’G$È GÕBáoÉùïÒµ²yBk‘5Ÿ¨T‹Ý%fÜõÞÖ.Ñ›–ýñl¬÷WjñR1û»ófÉ%2Ä¿cæúÂw}y©U¦Al(†ëð†óJç=x0èò–;2Šœ}#£«keýó”Iž 꾺:Q‰#"'œ)>Ó‰å3þÅþd:v­ý:–ò‡š&Ô„óŸô(µµ‹³gŽÉ&`ñª4Ç'sG/8ky ‹.ª«ácÕj~muôë]‹%¿®mRÏê àûöM·¶žˆ ªðT‚%ê_;U¤¨@£ÇÖ©¦r¾WÞ šš7$†u§ÉzqŠy’à°ѧ•eÃ`€åiê£\Œˆ‹pv,¸hˆÚU{m °ÈöêühDdxºZ,c÷ÜWUõ¬×2GËzÅk@¬®<1CٽܨԴjgiš«Íá7ÿæ\3çË/Ϊ–C—ï‡ Üª%;»Uµ Œ¤KÃ9\ä˜,&¸ˆ*öZ"ô]»P˪õ›àKIá¸æºèa1 M²- ñ“ÔïÑ4¼o`æy¾GYœÔkpM¡J§[ã·æRȪ¡¿Túê¯r€ßŽØeòŸµë ãÅj9Ñ€z_ Ý.6Ší†w QÁ¤€šXC o'Êνò=6ü¦¡Üé›Ýt" ³ìZÁ¬ˆ‚|ê,Šö“ «&wÙ¬:&âÞÓ«)b|Y©ÙÌ:]Dž<žƒÍê1‡r­ƒ‹…\¬8ƒŽº-©ÝO+¨Ø¡™Rgc·7ž È>„]$ëº÷E+¨–²‘’|‚_ƒ;*ùÒpþ^:ËnZQJ;É<ãÌžÎyM’Ž]}ÚÜh$èc; í{ðüœxi3(}v']:Oº¶.½8ç#7lB>šñfÀúÛz÷f€}ó/oX¯ÎÜÝíf4ïºë|nvC¶<<†Gb‡â‘.É&ª¸é…\®vþ®ÒRª;ª¢ø]l´¬4î1atŠ PÍî¾ôÛænØôÂ=ÔcÎwFJ#`ëx'ÙgŠújï¦(Ë©·7EÉ„)ë wù; ß^Å~ÿ?ÃMÑÏÑ€»Ž³óIÅ]J€%"÷ùÆ(Œ¯FÑÍh7Úmà :CTv®íüg %¿Šš6³»á»«w¾öX|~jÂ4åÓw†i|Fýך®á·$ÆæŸ³ uNÙ碸êÅþÀmrXÕƒls'LF–©«£Ûû5«±›Re‹Ö'7É76kXˆþ©ã\»ã»QâùbsáÖ…, Y9ÐHœöß_þrÑ£ endstream endobj 644 0 obj <> stream xÚ¥ZÉŽó8¾ÏSäâÖF-@ÃÓ‡¹ P·F\e×­ýþ—ÖFŠ’å”ó A%²DQ—¤oßäMÄ?ysêælX|¸}ýuû÷Çí·ßÕMŠ%ˆ oß7¥—þv×Kœø±ýñBËç]ªøÅlñcãG &}ÞˆGûåÝ(Ä_˜8¢Î‹k QÛ+ÕïºBÕÿkš›Æiµ+# iDqʉJæ$QÖ•‚<¥¦ÊžŽÔ2•½ÎI§Þø™×ù¿hûàLñýüóã¿QÒwP¶ÊP­|ë‰`Leog—c‰½2±Ö1Û D?“4ËÙ iÁ$š $îMxTÎû›S¥3üö»áš!ƒZ´ ñhåHF”ú,‹6ÊVŠÆ—çÚÕãÄßZUÊÎy•¾a¨JRϸU¦¿*@åI‡ ‡ \Á¡º>Ó¹ë­üçc¢ñÒ,ÖÁínÔâœ.<ØÝž/@á „® eYÊ¢á¨ÙÖzÔ`­å£]j^gq®ìPç‚gÖaª ¡RxÚ£ªZ^@•]ó:¦·|mSévlQTù‰;fµu´?SÛ¼—ݾâ*ÿ„ð9CnÔÙù„r•ƒrF¥½N%$‹‚>mú—(ªPφägOèUÌû]õ_Ãp´R½@Têªy²·'_í;Épª%Üc"ɽ÷Y™òq|M+ýƒHgÓôÌDmÛÈÑ"î+ʈ` 0±æ§Ú(AÓè™æ‚É!æ'm^˜î;SÕúÄqDÐU—9¦wR\ÎÉ·08©™yï¡2«ì¡\aü⪨3=C£;‹D…rYËõfêË VY ŒiÔ1%-¿È£)7 ‚æ«ÒúcïUÎqEI— àÁˆ»aB库·ªÜ6i︪X)N…G/K$OJ¡f÷è‚ű͡QDÏWnâ'¯PÏ+'º2e<‡É—Œ7€1ê×î ÐYŬÌn…Ò•€%•ZŒ3oD¬nEtÜìÖS 5l’G*æÈbJ²Öá-Ü`‘ °!ÁùUÍ3~”.¿œÈ’ˆs¬*B'ù~–1§ŠœÕw}ö=ƒé¤>°]W¼_Á­“·Q¦ÇpS/(]¥fþÅtª`î6Sô 5œ©JŽÀW“ì4ê››é/‹á‰$„»’~‰¤{5Ÿ€ØÜÜ#iªìËÔÐk•¹}ÔL’³ k`ƒØfâ5&6Û3lgÝö£È¨;7þ®v4¾bW$¼kfÅ¥žRâe§SyÃï`¥8;1c"¢„ƒ©d³ø.b°[3 2‘­˜þ,¦ä*Ê×ÉD¦ˆ[ »(Á̃gVÞ²oã©L'R*mWfP 6´ïúsÆ s X8¦™7†QŠïµœõ³T-£©+S|˜MP¿È¼r}‚oÆ]9µÈvØC³¾Ð§c‚›Í"옹ËACH•Fe–^52óò~˜âaÑîJX‚¡×–ãýb']3¾¢(9‹4Á¼¥‰Ñ C8jbNJ‹8u,›•~•˜:¹„‰è H7’|Q°5!L)ŽJ©X¢¦‰ä[,™ÅÍ(™˜^âîÖ—OÂrj3ÊFCT'ìv®1À«4"Ø™ãL9”p ŸO‚XŒc²A(cŒ)™aBÅj æÒ0„-hõ¡SZR‘ñ chc…ƒ‹¼ÒˆŽBÐÞ²ˆ. e>ÏÄMêv‚SE¸’ …·S¡øeÍ6“äÄFŸç«¯¡ƒõh'gî¹>$×’•ŸŽ~ûpç%ÇåÓ]¹£DEòYÜPÉ,PÖCŸŽ ÒÖzBs©•6/«uôs5ÀQ>^®ó`"#Uéò²ËŠT7ñ¬Ì±‘x,j¢áè².¯V\µ B*òqe¯œ¨Áꂢѕ*¿ºB²Ž9õÈ]Á…¥dQ1!»¹ÞJ¯Á†¸åz€éV$pvW6—C̽ն giV®x£Ñy6ð)ÕãL¥š+P½¬Gïcå Pú; $–èöUªCV/Zxòóõi7 °¸LÊÖ˜lµ!brc¢òœÑ,ž•V VŸfÏY]¡•¦ ¹•'Ü\‰+ƒvÙüƱcÞƒåPÎsŽÞoü¬m^.Þ¹w´¯(ÚVì…ôˆ¨!t‰‹ÂÊå¡çÁâÃŽ¸M9fp˜q=/H£@»•gcOrõ†¡ìù:,ÄPäû-†-û"ü¡KƒŽî °Ê³u]Œ®]«ãúmi!#Þ)àw+ Šr¢0ä­ÛL6„Lò¯„öêe$ê¸Y…ò³©8öÖÑØ‚Vë’‘n­ A™¢”bœvžž%°Á. fM¹_ ز¬et^û™¶ˆÌùiо!'\ij[¥þO.êœï2Vò…i¢]ŽPóTZS’iö¡NRþ¹Éë*zmÌ£Õ>ÓŸÆMô}rðºÖXCí$Ñ{£ òs˱嗬ÀJþWvÅÖÓlGg¬Â¤ií>à ŰI–M”À~Á¾À,ñ’ß10¾B(Ö²…µójÐ*Ñ‘ïR+Ø:þWv¿º¬tÖ³þY¹Ž-ö‰Û‘IÚX•yCšø/˜E gr-•‘ Ê ér¸pŠ¢ñ iMY‹Œ§”I&‹“•bÕ"e ^éw~žLv½ÒÂ&àÝ[=\¶âÇ&îi€;˜‰b­Çî õáÔJe˜“’ì¥Îµ1‹”ï4ºÙñ:¡&b§}¬xÞ˜äÙV«(œ¼ÑA­Ì3[kþ¥°åfåñ²ìPo©¡–+ùr#ŠZ±cg¦OÒý¤+PjØ2a™£¡‡ûðNB¡³“¶ÐÛ1Ç:  ?`ɸ¦}jͶç}„ëˆÂ8·ÈðŽÊ°s¬”ÝÀ JŠĨßÄUÁwðÉŸw(p“BµZy9*ÕÔ_cêÒŸõƒ\ø©ÉÁýŽ3…C´;Jpõ¥šÈõ¢ì;µ[Q^¹ŒŒ› Ÿo-Éö¶Z]§ú ?¬½]&u刧Êì¢Öö^ÑÚ†ÍvêSÞs¦ jÅ9bö£óQ;Ëà«ûì‹¢u‹£wª²b練¾•iºN¥CíÄ’‹³\]wÿÖôoðÌߨ‹çå9%Ë gžÀHÞy vÀƘHˆ®;êÁŽ,@é"àÑðÔ9WD€¦Ã[æÅWä½'¯Ñµ0zcuá%‹Ã[Œß,0í¯^ÂϼpÿÚÎ¥¤{lS°bäøvˆ D!ª†¿ÅZpy@Í ¨wr÷n…ЗÛ_Z/Þª®ýuÒýzƒ¼ŒI}TI€þWŠt­°ÅàÚW‹¯„£bŠžú»wë]<4Q²±Õeÿû×? LƒÓ endstream endobj 647 0 obj <> stream xÚ­[»Ž+¹Íýúé壸¼Áf ÜÌpÐ3Òdøÿ“¬*²Èfk$Û¸Fêæ£ÞuªÈ{ù÷E_Tþ§/Á\‚O[L—¯¿.ÿuùíw}ѰYðæòëûòa7«¡üÉÝÿyUJïJ©ïü×ä½}@Jù© ·Pþ‚WÊÙüü=ty0|ß> ”·eN«ñãì-”IP^ñ •ÊÂ4¨lRÖx(e.×÷1ßoÿúõÇå¿~sÑjK*éBfÅ—é·[r9ð>ÁàÀa‚*:}ûÄ d¬»A̿ݎï|}wû°ªŽbZ3ý.Óï|g¶ *2ª/t_¾ðZåW¾d¹¹229CKšáH² ¥\r®¬[Hª¿Ô­PäbÛÌ“Rê_Zª‹x~bmcqKciîgù´-î´±¥‘uÆíC»*¹|¦„'¤­þ½“è>±¹.20m^h«L?Oú¢Ðß~©JuùÐvsX‹y;ŸEí¿2W†fŒÊwÙ|žˆQS˜¬ û[µÏ¬P¶¨å›Œ<ËÓ¸vÖ*{¬`'Ó”A‡ý;DQ™¼D!=ó;m}ƒA{°½|+¿oxlhÆIÛr\æ;ƒžið> 6í[hû–©¸7¬”emÜRÒMö¦ØEþè/1㨬ðLYZmÝ 1I“é/Ë}ؤ¶a²’<¯jä’ò„SCT÷ÜZÔr ÒOYÑSÍ¿Û/ÀºÙð›²JÕ‹ÆQÙè ÑŦÓئ-éæ.ÇQEÉ„ö_ltué²)ÌÑÇVCô-”ð̃îÖJ1~¡UmÓ¦]÷¨²[ù˜@MɨaG»ö ß{ƒà±åÝÊ RÎUú0\udº“ ¬Yu$Jg}¥Ž(‰‰ß²“¿ª¯¯šŒx‡¥-4Q·p<+k6S“SQ¶Î)–½‘‘È že¤ÁÆž&R]ÈpöL:ÌPæÑ¸kñ&ê)pÕP-‡’h®P`hYÇU‡t"Ÿ–“štë6UO2Å‘îœc/n[s`Çíú¢D`˪&ÏÆÙOÃHL1ÍÆX¦ûû×äÓ;oÉñÒ¼&r™ ûó‚åLÃÍÔÔÍÀµîøìÞB‘0ÉJ²U8,{:™÷]ybÙ×vR䎄ë´Jv}•,c«çdK«ì]° àŸPÝž¹ÇáRÊ´À“ÔKs(õVâæt&ÖVé¦õUó¢ßí ËÄ®s4®Í´ hTš¶œîºnüL3´4tœ"dƶ¶šÁTÃ$\ÌÑŽ3¿Ìn?y!®'DÕbZ稒±Ëp‚®õJ$ójÓÆ½Éä Œdžy)´ ´€#…T"l'v¬*º1Y¢™1eöö8*´ˆe‹J4OËúâ'ËÅu’á¯çWÛ°ÂZ#¿)c5`mUk¬D…šžò̓GKËwº9cΘ°èS;«ýu0hV"¡ð³2Ï;×Ùö‚±Ùg:à §ÀÒ„¥¯’Y²òò̪<,7füÖí^T%΋ժæÖ@ýEãLvÓðNÁ:̨UÛl/Ò”%ïSÉQ²ÙP Çõ lËɌɱ&·LžvìUpÔByÛ#$­BS"ž|Ž!˜Ã*UŠŒ„[˜bFåäT=Ää†ýŒs%'d±{й7¢@/+£3€ ÃÖê!MÕ K= ûj€9JèDÞŒD`Ô8‹lçôF®‰™à£Ca.v¥é-›C™Ó-F·êÁ›ý!Ms÷ÒÚar ! †èsÑÚ_ë ™r8Ê3r ÿ~àKTrñ h³.½Øòu$¹wÅN4vpŠi§V¯TãçQÒ_h^Ü™óm-mJìŽÜÒhˆÓŸãìs¹U?Êų8$ì[ÌH¦{ƒH.-E«¸oޏN1¶—[mc™^MŸœð…oMê=Ì.§€’qéEèbó3 þv¦œAÕã+¼… \ê÷ìÉ‹:<“‚(ô礕-š/Ù†tWîõÁõ¨èÚñ#2Ä9½·ì;  ôVU+¸bX^Ó·y'½Z¦ÀJ_„÷NÉ…"rÃïàã®ÜCœqÝ“æK&c3ÖN¹ã[ r¶RÉ;p•m…ŸWôCFZûà¡/T,ÙúB2Õ~PQ½OT!UÄøW~›OÑü=ô…< ÝÁl,+Rt¦Ä(y¾ãÛ]ª0Pó’CÆs>½ããr†²nOÅÁŽ1z®¸€´à(x2?|Âeþr³µö†!oÃÜ8C¡Öìú1õ–‰˜Ka\N¶að‰ ‹„…½ƒÓªN,ˆ¢b ÏgR)‘Æ…é•G•G#!:@Dêä1¢Ç"ûXús…ø,ôâm¿H>63=µQ¸'6‹j‚í œ¨ö ‘såÜ‘6æEÙÌ¥ÂY%'Jíó@œC´8+Xè8@#lB°)MPO¨¸Ž4ùžxÔ Ð\ë0’¿ò^«~ ‡bp~Uý¸ÿ¡ú Ï«Ÿ›­~an®£E ^+²ž6Ÿà$3ÌxHüy8ú$wû“ˆ¥ä_€€_žÕ½û‚Ð÷Є¹Þ™ `5Á­h#”Ïæ^b°à†²Wa®0ºfÐÇ-˜½u9{ŽŠ?žz Rô×cGX,ýãýj鋞ҡÖéäN ½yIpW"å×;Eõ‡­°+pmÔU\Šü;×xd§GÄguZQ£Ä7IÚ5erp\c¦ìˆ5:ôÙ¡AqHw✠SîòÂ\½ÔÙ/|i¾ê%`ß/Ö͇û2èÔŠ¢ïø<¢·ûl¯Ÿ¡ z†n÷ôÖJnåÅ[zÜÄ‚n~Îqk–ŸgEâ$Ôi©Æ„ëãõóC<ÕcïÕŠLýx-;{6§Þ9f¬¯$øñ¬¹Œš»Úôäìö9®ÊA}üïbK%N¢ê‚C]1—,é,•¦á²ý\™¦ùœ¯0… ›¬EëH¾ÿÛ%/\O'Åâ“;”HÇ] º¡;‚ÆeßW²lyýZSóÅì'-yñ UØs³µ9kÞ1K9cm–­™üÔ,–û¼S³›Åfh ‹}ÿM…»ˆ |µK\×r!ýdÎs‰¼¾7öüR™ ±ßoç˜æ¹s¢Ûœ/Œ!+†KìzËÏò´?ÿöŠ;Y endstream endobj 650 0 obj <> stream xÚåZ=ó6 Þû+òâJõ<è;t+p[Ñ!wI¶ýÿK%Q”(älÐÅ!ˆcK´H‘Rwùû¢/*ý鋇‹wq ñòù×å—÷ËÏ?ôEãdÐÁåýy¹šÉhÌ_iàûý7¥ôM)õLß>n¾bŒé®ñ³Ïß蔲&}0]§‘6 Æç|ÌOµ®so4¬JwUL¿ =-RÓ\õP ÒäåßåyH×·ùÏ÷ß.¿¾Ó‚á¢ÕUÔyÁiíÎÛ´`œ”¦»‡ÛfŠ6 ã<³³K—6¤EšðFŠØ´kŲàŸ iqòÞ%ë’´¬Lþd©&icž¤Þ•r± Ö„aB£›€üF«ò:² ³aËSס³q­ðfãWàŸc¤ø¬°É U–¥QE×¼‘¶Í ´µøì[\¶Æv™Ú»—Œ›¯Ï¾0_I/ˆöY—еmp^m¿Xn[f¹ž¯>?·ÅÎW­Ìʧ 3YËäëË ;$‹a[Ò]-dh™‘#3° Uµ9÷UµKPcÝbR‡§—˜¹$QÜ•”õÁ¦’@ÀÉ¡/)y«—^Ĉò5eàénË=)/!¨ qòf µœhú³Ÿm¨ä_i÷Ýý³"lz =(f­kDbËÝïMpøRžÀú yXaçj^¤©"·"h5¿O¢‚¾blÇè»J„é-+y2‰ÜSGpf QcöÆlXÎø]=¤¨Y¶IÑþ`\ú¬ë™nÜsÞ÷˜æYYO/á¾Ó5ÖV9µÜñËìÔ³êÅD¬³¾†¢@&>Фf ž"Ü~¾j|4`Û‡º{,ý@¢NàŸœ’‹HŠ÷­ ’=ñ a ¸æ£éÛT^šmd>èw?UòN€Ø6¿ÞËcË| YDóuÃàÉj8ØL¯§ C[™JáëtÙ¯Êüñst”¢úÁÀbC•Q~f.ÊÃr'RŠkQ<ì8!859‡ËHÁº,xéÓkn‰/ê4ÒÕ:Úhú@&&cÓÙ™N›7"*íM¾Žº‘öÜ"c-ªŸ#)kŒ‚Þ?Ô [>Áæëÿ,ëT¯ Ç:·Æ¥*ø fü¯¸¸@UN²U ÓãÌô|[Ä=EMuƒOÔ°U;ßàÀøÎ_“­ñpå'ôþLëAÎX`ãô9œdÙuïaVŒË¦õ!ö0ÚCR˯zÆÿZú(¯yô«N"Ød¢Š«¤~í͈§k£C…ÃJ1 €wÉ\–ëΪ{DñÌVc^‹K²×Þ²”4x¯Q“¿Ì¯˜Ø@p*¾›u>ÊÝØÑ/S½8Yðjê™é"€cX‡‘Ö·tVF èŤMro“¶SÎ(hÅue{ óöÚ@Ujœ²§Ÿ<Õn®¶øÙŒZàÅ8Y¢ëÏ܇B™,IBe@’¾XúB‘Ú´k5Z¹»Þ…–Dvª2Úƒä}ÓxÄ´ªwí0­N¬}á›¶S fc%D›Êµ!W`Ü]mÉ4"·%^®8Ú˜Tú®Œu·ÚQ—‡ºãÆ›ÉA<ƒár†ßMÑYWq:ÇlQšŒá€}~G<êyALi3Œg½ëöÎeiøe+<ô\„{´é!:jq{Ìˣ̻ì—]å?%Uô‹³WY…çþyŒßúg“\îô6'‚´åx+7JßFzw¤çðšÝ¨ÉºŒãÁ'xnÿŠK ½Nûý§ш˜E endstream endobj 653 0 obj <> stream xÚ¥Y;#7 îó+üV'Q¢Àb‹¹"]€í‚޵ݥÈÿoBI¤3òÚ³‡ÃÜŽ5¢DŠäLJNÿÌIÓ?s p >©˜NŸÿž~?ýø '£UÒÉœÞo'ã”xz±Š&¾_þ~ÕþêßþyÿóôÇûb:X•0ŽÓ5ÀÛ‹uHoîFóôŠ1º<èè—¦¿W~€'b#»Ðsnä<šiÐЃõkYãV8ûñÓM"X’!‘°•§ë´œ¥ÍÀjíi ûÁÄ“@Ϊˆ¾ëTù(»wi Ìû™9Îï–ß×.0­å‘„PG˾ÊSdI]ê<‘X¤ï@cúÜN¡Ìn¿òyØ‘®} o!oïëÖ&Ÿ<¶Uò'ÜÈ@|2,GóbBTè<½Xú›ä@™:K›%p‘ÑéP¿#íºÎg=Ò·ÉÊL¶DëXÈ[ý]¾‡¢’»N!>ÙÒ'æ'dãçƒtE¢Òv~4ÁW}ÉÄ,ò¹ ÍãD³Ó²‰×ržŒ¥¼±çs+Ÿ²/Ž›lgÒ~#E|”¹Y ú"úh@ðyÏŒ°/ lø¦ñCÒ•?©˜Ñ‹µðÚµ©ýÄ‚ìt“/«`|Ý™àR§FeC8 Õ‰¢ Ð€‰â!lC¯t´;ló$QÈŠø¨ø–£ó[á[¢°- xÅy ±.yÄ (qcûn¸›˜¹¸Êh10Ï:õw)-šèçUFWK2·Áí…MγÙÖ}G.€ƒJ¥Ï'v‚¶Æ<¹Á-,¯2¬J‚WhÔ¨Œ34úËçØjàòïfá:½/ Ô»*áìx^:#]ÙBÜV€ Ibþ™;겚?ö­»Çß±=Ùoˆ_݉2ÂN„ÁBtÙI(Ûlf'a kšG#kùÌvœê¦Oy§ÓÊ¡=â#…†kãQpŽ•ƒ†:6Á«Àc÷‘õ)ê´CCì0êÏŽ†­>ïd±²þŒ;·)#–Ž òܰ×Û|̳@d¦“’\—£Âä.ž9\QÑeÈ'¶Ø.fWØñžÒ'&•âuÚ> «UN5¶°šOÍ~°9ÒBÄ}I!ó·|Jù=eØÍs=?¢2‡ U ÃŽC$¶É‰m ¯s6pc›¸ÎA]‡~•'k£„CRË{‘4±ôPÓ$Ÿž’´‚ÐCX¶Æìò0ßn0[ÂF^(Z·ÍI'{Ÿ‡¯ìza)×$\ŸåŽ 8Ü(ÇcsNV‘±ç‘¢øxÑøP?-M »Àì0´swÅálÌ&ä]G–Tz—7†-L>H¬:â`É?Z@X¯JŒ/*Š­YÌ9G ,ðc[Z žïI5tÐ`Pa0¬š/TãBUÍD±+ߦÀ|–Ç2oz(s >˜¯5„!wt½Ö1À ?›ªd-)$eàˆ ÁC9[ñ.‰ NrI…õë²- Ð(o8ØDq$b8¥ƒYbg>‚‚‡Œ•æ³â¥`hpõ¯å†„àmþíÓjŒ سöÚ‘èE„ÛbÎo„öv]¤ðØa ÷„ 6®2™5e5aÊ0½ÌÙ›½|)Eôµ—ï<_p«þÚ9´ì4PôøFɪË~çÌÛ.ÍX`N9Ö]¤½6ë¨S̸g^{– pÕä€o69ÒÃ&ǵë¼éžs9K¹SðG\n¢(9è6ÜÙ[Ô‡ªähl›à–ŽåšE5wÙî¦ù"…UÜ™}ÉGÍp©T¥eÙUR±1ÀWÊ]gCææÒ ”¹•xmóïUÓ±7‘Ú\é±ôF˜ÃM›&´¢ÚTOLA‹$›>Ùjíÿt§)õ%ƒc×ÂÍí¹¬ÒAÝ¡nøH‘âÆ¦à áýº;7V¹)Á›s“][ÒBm›¯, ¿ ImH,2¯’ÇŽ„­5!eûç®á2˜Ú•wëC)ï§z¶wª~Â[œ b·‹í <{û~}&?%î6Fª Ò)žlúçæVáÝNmÏ1³f£vB:õý¡®ÿt[¾QŒ-‡ºÑê˽5,›Áõë³F[½çb/,îñ(²©ç£;Ûa³ËÇ•sNáTŸÛŸ[8Ñàš`ÿÜÕݹñ74üZ×´géuèO×rwJœ$(·/:€èi§¸Ô:rúóµÀäÚéAëoåW¹xP}Ï·¾®Š—s @/¯uì73žø0ã ý«]ëøç2@WÀ`¢(¤•»~Ç÷í™Úåî;rÉÓSÙU¯{N[#¦›–°õWÁ¤viaëÍÆªýxÕö…m­±È–› \v7’Ýó¾s‡š=ÓÅ'- ¨°4H÷Mƒ üž¹o´m†iŸ3LtVé#ÝÒ‘ i΄v£r]Þ²õÐ, câh»-»ÌFg¦”—i¦L¡êõpœlÖ<{y5оr-Zõ£o;-ÓÝá;[¥i¹l“C.ÑÇMéãýùmšqîÈ<\ì®Ó\Gîì±&Ùû·¡Cd£yÅp‹> stream xÚ½X»ŽëF íóúÏá¼…Š¹Eºî‚ÚµÕÝ"ÿß„Ãyqd­-¹‚ÖÉáãð¥éßIMÿÔäaò.Ч¯_Óï×éÇO5)#´q0]×颅V&ÝðzûûCJµH)W¼k¼ì|11âSígŸîÆIiñ5ø?RZ$6ë|“Þ*Ux=>±ŸÈX$áù’w)ñ-Êš/>É4ùÑ¡|¹Ìÿ\ÿœþ¸f…aRRDURuwÞ¢ÂFH•5vw÷==hmè% Þϳ*Ù2'¬Ì7?‡¬˜Kw[Í0h†djzŠ×-›O¿C¥"g4Ó“Yô„ŽÊ¦¦ßÍuÅ…:d©vÉŠ¥¥\_;Ãjaµ?á Î0¸ƒìrù7Ýפ'·œf‡à§ã~ü4ü Â:`>ÁÕ…nk Г` E=®Ç'é’ BqX˜^»}ß51ù;¶è"-°h¦(߆¸·ó¸T£ç‹’E5ã«À¢mÓ¬b`%pù—DJ&¾ ¥áÞ ð@‹‡$†#øðZHgNàƒ3PªÜíÆñ@ªØ!O` õ€eÀ@ºd ^zÙƒXáŸt–®mþ]xÆåWoC± á[{`X.%qãû‚L7¸Â³@Ûca‰˜$ñLã bÖRµ”¦”",cZ|ö}WXK ý[_Þ+þ R¡¤É€ÉæSËY=ô›’˜½™j«L¿ZoKJ4“z>ÕÕäªAfÛ®÷‘(B©p"‡MçE v=®û¦{MbRÀkÙ3”§d>+¼ºÄzíÅ7GhHÅuHÅ¡ýžç%QßeoXfˆú£ÅT´=ŒU–Cø!7]¾›Ôvµs \rÃtƒ¶ÏÊçnÀw'eAö†÷æ°ã^;Tl2ì}™u‰?6ë`‡.Æ3åRëÞÌ[~èo˜•g7’I=äû¶†f³B¯*-½y } ûm÷ñVÛq‹8ïóc!¦”s® öx5 ÀðôÀQÝF„‡jÈ2éY0²µc àðDza(QÚQe0 I§Vù—o—V+lq”;žA`° )·—AþÍ ²¯2(Á°Â§­ áXú€ä™ñxàˆ¶ŽJPí²òCjÔ¥ËQÒçÆÂàŠK‚®-/a“/$¤åKúån_3T^ÄF`Ý¿h &‘ÝöÀZBcA\¦b;Ë8N.è‰ê…[h‹ ÔÔ«ÿÙ@hXn‚é¥:‘D\ñÞÚ˜ïÃqi¸)ÒË!®;¦VñÆYÖ%Y¯a³6‰÷la¸O N8³›*áÍT1/SÅYŠušåàVmˆ§6Ƀš;é÷çâ¡Â× ×Ãv±D½¿öãô8»°=©Oí;«ˆ²^8eÛj¡?³6ÞQ$¾ÛEÜó]¤ï™0¨ò¸`lªÇÓÙ‰çQÁ¹ìñ-ŠüquÙDÍkÖrJxôØþüÀã›×/§©Ï^Wàpà<ö®3ãþÀ±ð£ý S»2É8:¨tÝ÷Btc]=þ¡1âÙX …u¨¡ ®tT¤¥¥°ýõÛ™{¼v endstream endobj 416 0 obj <
> stream xÚí\moǵþ®_±@¿ˆ2œ×sf’&MšÔ­qÓ4p\ ­+Š’Ø+‘º%ùõ}žÙ•¸²H;vÖ²/ g_fÎËœ÷9ëèRc›è´q¶à·4Þå&úØ„À_ibÄŸÏM*x/ØF Þ ¾Ñìðšœñ^ˆM) ¿Ò8¹qW1”Æ…±Œm\L׸¤X$úÆIV Bã”Óñž+6V˜Þ:¾œå#`æ&&Û`aÜI®ñQyÇ7>e¼œB㥭”¯x%m|Î@<å&ØÈAi‚·ˆ‰¸%4ØEÑ p"V€i‚âvLÏ j›P]Æ:ïº ’žÐ•è„’¶ÂGcñ"QQ2èfÁé/|ö¦ºX"ùŒ•‹oRàtü¥d_l’dix‘²Å• ܘ„AlĺˆAjÄyLµÒˆÇ†%› ؇ä\#1`ª $03a‚à˜•¹ªÃ¬bù²6jñ¿yPçÂÛF=v>auï0’‚yÑT€ÞS%>HH$)¼˜€J¶¸€Avw =œOX+â ‰ÉàMNÄ‚”RÀ‹¬ØÏ„ 9cg)0;€bÁ±SSœòmŠ'£ -%@ؘ^¸ç)AT»“’`€}HX´(ÙÙ(â’i-6,aó1*X›î¬ÏØÎR´’Pm’ w#­3 ð6{¬YÁ†‚’aqxïAZœs„ qq.`o¤ˆJÃ{€áˆ!×tN¹! L  <Îî(TÏyË÷°’󎜇B㨨ÀÑùXïQ ¹B*œ!¸ZœW²Òä|¦˜€Mb¹J³÷öS,UØB W9P#<ôU ØLŠxÇ)(=K<`n«o¸d‘#`.4A¡iRÍD¯„V!"ÁnºH+Àýǘ ”ÞÁZa=Pï"ô#À€‚]À,³{àm% Ž=k‘¦*k‘¦)W‘v'W‘ö&”ú ±ÕˆøúráC}б®n„Xa(•©®Ž ÷7r¤Â•\¨XÑÒI…Q¨‡…8È…BŸ]²_%w¡wP*r2Ѫ¨ç½yáÞa‰ÓjJ)5 ³å!)8ó j Ñœ*åê m¥„ ʉU„ÊíÄÈãZ ï‘~¥”m­r÷…&H°—ªá0$%bʹ ´©ã\¡pœ‹1ŽHŒðZ=׃ÕÀ¾eŽ ÕJoäÁ«Š_¦\Q:á0Ãòi©”så9ƒ«T®Ñ¯¨%•ܵ)Mt(–¢”qÌ€”aDÇêHh²„#hŠR•»¬Âõ¼†rDnÀn8 ´v´ X<€SmÀEé:é*0JÜ-®ÉSJ„Ò¾þþ÷Óç?]Χ_,—«Íô»ë£ ¯¾^,ÿwúÇÕúx¾~aáŠí÷Ó/_¸nð¦|7ýóêùjúÕ¡‹“Ï>›>›Ï6/¼/F(Y ½<›‰Ä¶³÷ýgŸüJ`^ï€A Í?Œ†¡šCÌ -*”Ô€½=°üíè?x£§Øÿi°Í3^Àâ.°à“Õ’¯<Á&ÔÇO`ߺA„òö/}»^;›o^L¿ýêÉôùüÇ ViOç_v?ì~žŽ@䀣äd† yI†ÖÙK0p^ÕÀÀõ°`‹ôô‰Pëï‘„•ïñ„A”»å ¸#Õ_0Ì M{r[Ú5†a¾D£¤ÝhK©R‹úzâ·?úÇ]°Jój—ùbM´4¦¿nTPêL©*Æð>&V;–LQ}CP°»õ÷gOùwx¶Ù\~<ÞÜܘ‹Ål½ºZlÌlu1Å:«Óu{yöÓtµ¹ºœÏ¶»lhíÔž!q15Z2ˆXÞRpm½Ýš™ÍsôdÉà×X¥ƒ€{X–•lºàÎÖ ôå]ÞäGÜȳv}rtýóÏfµ>Ý‚OÙ0²€3‡µFc-HE\™‚ IÇ5lpÜPf¤PeðíÅ$&pÁÀç «@˜PÁn0®@œfèÅáaDð^ÉA\byx£ÌÌ ú/ÅĪc+(†ñ›gô2ý2ŒqF•IÉ^%Œ‹åÉbÙž/6?™å|sG\HÞxޢŠÔDø 1Œ LA1"Çóÿ´?\tF]ÝÓÄ]¦fbÉ,„|FªˆÌ¡†“q7. ñK`Æ ÍèÜ^`* ·gã(b:ˆ)ÌXaÉÁÆ£&Án€úþ°tkA+5h)¦Ëסú…*{ãÆp…C&fSà'›Œ\0˜•R#BxI#ªñ>Ô`=¿\AúÌìçéfsÒ^oVg‹åÆœ.6SxÚ‹Åæxqr2=vq¦3»58Beï Ó¤_ÁT0e¡IxtüŽ’õ~v\àGçÂtö?ü"é ¿+ x¾¸‚þ.WËÓå5ÕxzÑ.Î/Úe}#³šž¬çs.¾¡uf} ØÈ?Âk&ñ.IÝ> ú~³ƒ­f…(àÉR„Ù:1Ìc£ò¯1<¶——£L²ž¹25 ±¸7"2nfçÀÊ-!ëˆãÓA–‘Á;lyOsM]k²y-"¯µú>„a¨ÒvGË"H6,4‡ì KDh ý¸ÂಞŒj]j†Ï:4â)¨{Wè¤jq¯F"qDXîè^U¡°Ä®ˆG™ƒ0 {áHJzÙƒlC©‡¶áN2Õ8ÌÙD2µÖκ&`°¼Ê41 R°±ÒÂÓÕêô|^sÂGM™ ..æËé_Úóv9ëÈX–øá R=RA æzî1gXA@H.ƒØ+„Ëž%Græ.1~SݾW=­E\ø›<\Åó¸%öeOYKûêRZìþÊŠÀì|ޮ뺛õuu¼wwL{uùã6A+ÒXÁóÈ©=OØù2ÅäQʆêÎ~,×B,œ ÔA)Æ€ûÆuÐLg» Ü9t±½ã9¥…:fðs<ÿa~¾ºœ¯M{yyOŸƒ÷ñѳùÉ|=_Îæýµ]^·çÓgµiúåY{™ÌÙæâüwOÿþí@uÔ°”à;4†]–3Âh¿K†ynXÞHlyÜXÒ¯VžC¾ðcÚàp2(Ñæ†š†X–72¼‰uˆd,ø9F$G¨ ÏHXzHå۪ū|À£G,ÕS®fWæò§ÍÙjY«az¾8Z·kÄ+\ñªúÂAŠmk±8y¦ØÊŽ"r>F¯a\£ê¡¨Ø¾z’ÉcþàXñT6ä 5-#‹ZÃŽ—Ö4ÖÓµ lV*FË(2Ô‚.,Ê^$+Fkm¦\B-Á»8²rhwˆR Æ pÈÐ’ˆ”ÎB‚?T‘ݙɜ êš %°o9¯ƒOCö©Ǩó„mì‘ !á–9ž¶BðEˆƒ¸ä_œÿ>ªïÛ¡‘/ì6S`Ïj-v© µÐ8rÀ•¨§Ì°üH-Oy–);R}8uŸôÔ³@©ÅôàaêÙš…ˆ©ÌÀò ‚¼™=†%ÞCëŠV‰ Ì;1l; Çü®¶8°Ï–ÏÀ( ,@cØÄ™d!‡Ú¡Âã¹qYü ÀØ äÛ`xàOʺ¦gÙ6赤¡@€]y¬G<•caË%Ô‹¯<£K¿¸ãWPòþú<^M¬ç—ëÕñõlqt>ÿèèzq~\§ƒPÅìjˆ¬"D<&ª¤=í :^a–Zó,’³Ë ·FEãÂò5IMPFç JÍûð»ß@ȶ®üŠÛÛ§“c¤^§‹¹jh—ËöÌÜxáæÍühú‡ËOqQ-ç>i?=:_ýûò¼],?9ùáïôé7ß=ÿâë¯?9;úô/ú⫬Zã<»YÕ(ÏD(´ìÀfaÎê»9L¼ypœ¸ÅwJô>¾Å—góÞ°ÏùלºëÑqý¿Y¬¾1Ô¸™M:Yj> µ•ékìía彎„ÛÓTª ›]a™)$í1¿ë!:´Ì~ˆ¼‡¦ò¼ñíÀï,Ô†­«¶XÜÕN{S¡a1ùݧðÎö×Ñ03æ¡|…Ú»Ž}vu£ßýþº`k³Ëtdiì9úî°‚«¯ºg…-¤ñ¡_,–§7÷EËvæÀx–í,ú1e¥ŒÙÇp´žß˜«³AHŽ©BB«õÜÔ"jcM%¼£½éêêÇûU‡¨Î°ùÖ³["¹ÛºHÉú^Pê-¯e;~,‚´0uò¤³† ›ÕÇ7çŸ÷ò^_uáa(Èañƒ}ŽG@ÝTF„}Üþ0ÿüz‰÷¯6íòrßµ™ÍV÷ÚÌØ#jÆ>‚-Ǫ%\[瘨Ǧ=n/>ßÜ´kDg÷q°’ËBò¢¯¦½Kfaþ4¿7×ÿåß¾ýçÓoþ<0ÉÔÏÍJ× Î&q~NIJ«{‡^ïnÅßzýBò¢ßxôÛB¿-ôȆ魋¿älö* ý¿ö Õê¼uîÀ‡tàźƒä¼;.Ä zàK:p¿?@Ty-þËÄäëÅÅbsõâÐNøÇ÷ÓoÚ‹y½ä—™ÀãÐaTºnŠí†¸+®z }7 4ÕaİŠXOñ-—&l¼„kéæ†Ú Ã~ưG L4vÃã ?úØj6aƒÚÔl–†:çx¯LëpŽaÀ † J;øTwmg\L²ÝÉ{@*[H¸æ§ ux’;žxð¤k=;ô ºk¨Ž»Ä8•Éá@Šq©©cIKRÇ’–¤>ˆN=|zø :õðAtêà“¤{öLn·›ßû×í®ÿí·?íBW u2À×Ú[n7{Ë-àWo¹üê-·€_å>ð«3+\Me—Ö ´NZ‡kí-·€›½å0¬·Ü†õ–[À0íôG Ó]B,Ð:X-\ko¹ìì-7à÷–[Auo¹Tw–›í©ÚÙF.¦y— çÉáÉÈèÍ6¨è­6ˆè6hèm6HèM6(è,ö!Pì 0ÔâöìÕÉÝ6K¯ÍÚksî·½ Ñì @/ ¾5õQîŒÇ‹ÔÕé?þù¯†5¥úïn°á`y}~þý®ç!%K²÷9K‡0ÚwÏËKÏaPMØÿሑít÷òòØDãÂþçÑ}÷¼ÂöÎï”mH~æÆ·Ï]göÎwrí}î;C¿÷y”×Ðg_ó¼SÉýϵ¼úy~5}ÒÙåýÏãËðCSÒþçüG)Ò๼!}Â/zËþù)òcÐýó#ÛUuÿü­ÑýÓƒò‹èíôòö¼ü!¯ qÿó䨨¶_|YhS¿>ÏÝD÷Ïüz¼¼b>Øko·ç¿·ÓÔ¡ endstream endobj 795 0 obj <
> stream xÚ•[ksã¶ýÞ_ÉLLãýètÒq³8Ó}ÌÚIÚ¦™Z¢m¶²ä¡¨Äþ÷=—”,ˆ˜í‡ÔX8çâÞ{.’uR0Μ”LIüQÌjü±,XüqLH¿ž ‹AÖ20Êz&%†ÙÀ¤Á8Ç™ôç@0ÎÌ`œSLyŒsšiAã,ÓÚá¯cÚæ¼aF`¼·ÌhÉ,° Æ:ï˜åÿ†5 ¸À¶à°}\àߘ«Ð lÀ¸A0[-lõøÏZü›ìW {=gìõ‚²×K&8 ¶& ‹­ÃJ9L¶ A6 jh V 8%àX8LH ;<ùÉ40XqX …R8p™‚_œÁÍŒÁ­`5h„¶0BƒÐiübÀã´AÂBcº¡eÃmÂJPÀ‡ÂšEA…7…“D =X¯ ç:S½ {Ðå5܆E õ[Z{d<؃&ãÁ 6LrdÄErÁ0ErDÓZÅ$<…†FCa0rB $‚ÅJ¤ä4˜²¾±”)vRÂŽ@E€ŠB„pKE1âhh Ð¥¦(!¤¦0qL7”W@—†‹cº¡Ì‚C¥¥0T@J¶xšå°dO³üð fCùâ™â0ÃT ăTa=h8¦(‚žcŒ¢„‚#”F„=2&c°@š[êB(Ч”èð †~1Ls¤•‡qZŒ¤ÇÂÐðL+¥Ñ„ç±6m°\(j÷{üªÉ7‚Ô¤;×hoh0)^"5|X ‚pà #¥D`Ù#”…zd•¡ÔòÈ^ci¥ˆ¡4÷P’!ixØd<‚æá8¯3Ò…§H E O—FðÙLù18Ь!IO’0ô `£¦$@jyIéåh .ñT8‚æ)xùì •#×Ãkn@¦kê2ØÒtR>yÞ ²Îסa)ä4‹b&Ç“g±dЇB<ý`‚ï‘Øà£uCž–MúòDCrñä}²nÈ¡ hºg j °<*M€1%F!©]4$Š…úSÉ4Üð‹A Q‡@¡$-sNŽFðG-ªIð¤k®Èk°TpMîjØàv2RŽZ4×-¥Ê6´ˆ#B¡ÚƇV rG­@eN-p5´$Õ@ÊTdTEÉ£( Aú#L*ŒX;È*"'û¨¢d 8P!Èwàx‘JèТbj†8¤Zšê*bI˜Ø‰†8dZŽŠíТ²+†Õ]IÑ§Š§$UU²Eià+ú‹PÙƒê ]PuF„~1P gŸÎÿñÏ!C+€½Þ­V¿þéqœökú#^úõ´é]¹ã|$Ðd¾ó?Î7bÒ¢[AÅ~éM…Ú÷[dê„_© É\ì×ÞVB”û•Ÿ™/a¿Žæ›)¿s]ìÇÎ^y]î‡ÇèO±_[]Ùr· ª ~¦_ªê…]XxWT(s‡~hwnutª™ô3;ˆŠ›ò|”»J¿˜OçŽ >æÏÐ+ë*«ÊÓQÞ+Êó±KÇæ'ó5–ÊÝm”µ'ÕV8z?$Þ•ð¾Ë™·£0ã(TÉ—ùÚÊi¿Áüãò¼ÏÍq±jv¾PSû2•9®/Ñ6iߨr?ÊQ}œùf³Ë¤Ú€¶çú ÿXzì4<8áEÒ×jZZ°F¥I«iv©£ìÊ$ÿ©8ÌÔ}8ØWüèã“ì •˜§¥å…r¿Vü¨m›Tnë¼v¦Ÿ»Ê¸r?î>•ˆæ»¤r«˜>Ñ&¼Ï_¢#Eâ]樰&ó!—(¹d†ÞUúX85ŸŽÒÉÆÃuåly¾¾9ÎOk ’Sëò|‰å¸¾t>®•|ñÉÆƒÚ£ŽÙ%yRÙQ\ä±?)­.T^•û•—•åâDëJsÒûU´ñЇ“Òžô¤§™™¯¨vÏtþ¸¯âþ–œ tåm¹ß…?íWWJ–û%ÜÇ£þ´öɸø8;_<’~\:¢ôÑ^ͦW¼7ìÓ[b}ºÜ¯°~~Ü{lHä…sQ(÷ãvT¹ÿ_þrþªÙö[œB?}û-ýtÝö«æ«Ÿïëž5Oõ¢_=³ºkØ}»î·ýúüC®Îßn®7篾_ûíùGt¯ûáâJdï›§~¸àæ»ÍͪyزE½l»mØïmÏ®»]sýü8Ò´ë»)‘Ì}ìšß†+uÄ*RÖgÖ÷·õ®ßôW•p÷ 8àÊ)îÕÃf»÷æNPu51ðrÝw›ånÑ·›õ†Ì›¶Ûö/Ëü{½}1çü»ÍgúHåb›Õ”ê»zµ‚±±?&Œ62|p@3_€ööÇË  Ëî=¡ct› oÈ/+v¹ÞöÝè-{Ó®š A8!°1¦ŸbþmµkØ¿6ë†}jnLY4ìÍ&qBÜÛ|âß0Åÿ.`WMÏ>Õ뻆½k×íÃîá6ý½~¢ß'¬7eÖXW"ÑÕ«þ_`ѵӵ,ʨ±nD’–oÝ›zñß<ì²+bÙ™s%ÍßÛ‡v Ú”AE šäõû¾iïî{$Ë¢kjÔ”üm^Æðºµ®Éú×O‹æqHÉi=äe’XM”ýÝ7ìçvÙßO±E;Ö’H´ôs»^n~ß²ï6ußÞ´«¶ž¢Ë2º‰ÑÝýbùŸŠÒÕîænõüxŸ¸D•c¹ Ÿ•Ù¼Ù¶}“àê2n,S‘Èôêùá•%£|aʘ±eF„™j*l.VŸLÔÕT$õíf ìŠÀ2ÖŸ”i°–ìúúÍŀʮ뛤  _ÆŽe(UšÂ- W»ÛÛöiŠʨ±úd¢¾¨T×øŸËõ²IÀË[ƪ“‰êŽbcõzÉ>R¦AÖ¤ñw›eâšr–±e¢ÀwívѬVõºÙì’D.×èÔàÙ²ã…Ã5FKÉ [±™Ë?rÌìobvSNØÕô˜²?¿+©.WÍÝ&m3^/ïÒ:p²mÈXú2‘þ›¦îw8Ì^¬ëÕó¶M°n3XûPÄf*^ž—<[Æ‹·WåRÅ7ëáf´ÏÝÙ•‘ãýU%ûëÕ›÷×ã`ú2f,02·™¦«‡ã:ê*Êê›®.vS†“’­b%èÌi±éºfѳ×íu™}w_KÓá0ý8…¾É@ÆëX:Ç%Hîv«ºSmìKœ³(ãÇRщT^µõÝ•'A\–#?îoÐSŒUáý:Ç*<Ú‘\'aË›N´øú©oÖËÉmo¼¹¯›ßÙ6ŸóM9‹’Äùξwl\•þºYÜ#ÖõнjúºM\&–Ñr÷µy¿\/WäwÓ»­6™¢ö€ ¾z^÷õ{ Ó4}vpRÚu,cîcýó ûÎpV΂‰ Ø>bk?s†™—eøXÑ: ¤F—ÖW- d½¹Å9‰}Ã.º¾½m-Âtا§¼'õYÇ:7‰Î\oqIÎ0MAMt\Œ‰ndzL_õuùú¦l8ÝŸ‡1ãr¥¨‰idö\4 ‹ÿ’G"SÉÝÆUÀƲ³Œö'’8ŒJKOóØmÍv»¡Â»è6È*îËæ­á„¶Þ%¥Iì&&VžIïÁ»õü!òM÷gv}ñùbµÚ,>S×:d ÷‹·ic¿ˆ‡6«,M]¦‰eo\î!]ëx”î;làÛ,ÅM™"Ö¿ñ³¯»nÓeñeü“¨‡Y|º6fá—eøxk±üáq ë³M™#.,6‘ê»æaÓ=#e×õÝPʧÏkO*¹wq›¨àòüÃtºÈL ³ñ×êÔ°í&·›ƒ'¦úѲ ‹É&bzÛ¬q[±ÃS·üíQ«2~,"kKOó.Vw§ïék]†Ž…cÝ—£µ)ãÅ*±þÿ¹k[FµaCúpâ¡îÒ€¹2ž/¢?Ós™Ï…çò*®ëûœëº=©ë>/ïŠ.‘àXÊ.~¼þðýåûëÏï.~øðé›ÓŸ.ßOúôú§Ë«Ëï§ðE¥žˆË‰¬)§–üôúSŽ¢\ùÝÉjå—9üóoM·M_Áèråw'+QÿÍglá™÷FåM ]ÝãÓøÅÇéƒåâHüdÆÜ „ÌNŽ´N§ÇµöélÕþ·aWu»éRùŸì ..&.}FvÅöª§(Meï• ]&›Ø‡+ö)àmÐæžo´X¨JÓé …ºÎ¼¯Ó‹Èß{Óöþvü$ìôdä’Bq±ëï7ÝÔ9†Ÿ¼kŒñNý;ØïïÐÃk©X”ãÝ'åä§1Å™¨|%Ø¿¿’\ø³êõÿþzÊr²÷øX¹^ΰîìU³8SX÷±l½*s¸ÇÅîîLڔÔ9â]ßë2‡9ìÙûÍogÒ¥¶Ìg‹7esà Hr¸2GœAÞ–9ô!Ðæìâ?™•ø2K,bïfXbžYI(sħïËêÀ1$l&êu™#>+øPæ#‡בá¸)sÄÒ 3ÒŽwõó7)Ǣ̦ƒ(sp~$éÎ$OI–E’K=È9’nñ²˜7ÍÍÏ$WSæ‰åŠrçUØë] Zä!%¹-“Äzz†ÄH¨¨dBoy™$|03$æ@Baɸˊ2I¬ø`gHöb”céJÝee™$|p3$ê@2(%C¢Ê$±âƒŸ!‘’!&w•7““nB˜!’v+¸R’òn¿! œÏ9²µË–w“ø+ªÀE™Ã8ɧ;¯-î&!þ¢*pYæpŽAîií²¾Ì!b޹Ûêªô™ˆ„2‹ŒYfô¾—»Î)2³’ºÌ¡b޹›ÇP·2Q¿)sè˜cFíúÀA:ÌœSì¢Ìabޱ«ÇUó˜Õú²ÌacŽ­ËÇ Â GSæp1ÇŒÔÅ‘c}¦ÒMÑÞ–92ßÀlûM7ýXÇÈ袱?нa//üCá™ø¾0~‡²7jD ã¸OÍv³ëÍ–ôÜèwÍ"ˆÃcíuOÃÅì_Æ6~ÅÆ¯•ØøY?bã1lü„Ÿm°ñ« 6~ÁÆØøš/}Øø¯½Ùø®šo–Ùø˜/lÙøž•/EÙø“ï½Øø>ŠïÍØøïÞØøþŒï•Øx'fã³u6¾;aã³z6>cgã³~6¾1`ãÃ~6^î~=õäþáñ»r¼¼ÿz~±^oúíðÿø?-|úv endstream endobj 993 0 obj <> stream xÚ]’]‹£0†ïý¹œÍµº-¡µ aÚ½bÊ@ŸùàÀRÿû–6rp´ÕÊ TPîj€š±î¤ ¬Á:©€¥:Þàãmû¤]ûƒ1FßÏû¤ ´XøìƒI:óawºú:ýAµš¬×!ñ›ïspöJ6®áqÒ^lVª yx¯NA9ÆtÐû^‹Ê2¤Kp§B70.Àruhí{`%YïýSF šoÿU·â·Á½ònÆÒehƒ´ ”²@Ù>P¶ ”oBÞ9CqËw/¿ ¶Ýi…™R$ ŠèÌÑ™e(b[yĆçè,0<ÏnýLŸŸéÜ6R|Ûg±-¼-eIVÚ"-‘*¤°ëåæ _)ü_Ýê~­PÉîʬÞÏd:õiò¾OŒÖú» ã¦bº@?7_l´™¢ÂúÖ4 endstream endobj 994 0 obj <> stream xÚe“ÝŽ›0…ïy _n¥ºüL"¤)R¶­6Y©w“ZcS5o_3Ã&«- ïxŽgÆûű<*i‰ÿÝ ü,,i¥jŒ‡ÉpAjq•Ê #ÒHn‚/ï+íùÅs¥¿V½ >FC»W­+þ{Òô"~œäAŸ«Ñ C­øÛ·´‘£¥í ìH-”½iAõTw’ÓNÖÂX©=IuzƒŸ/_Û~‚€¾^!#h1ïÅyI´ð±<ß\šþ¨Úl6!þ‹+s´æFž¶ÍP‹O³öÍ4ÂHu%O¯Å”ó¤u'zW ¼<‡íBl”uÅ…©ÔUxWC“ÍÁ=¹'Tóa=\luËUÂ#î¾aÄ Õ()âéäę҈e@Û (ÅÈ]´F*²¨L¶èÛ£o‡k‡J_j\½UüèMî­Áa«~1¶£˜ìàÇÂeßå,؇³`åœ? ÂUT ­‘J$¨”íK ´Eb3¥; („µ,Æžsï¢îJƒ’`™iüP0&q ƒüY,.¤ð±+(Û„ý§¼Ëœ¡²~(*Ù;Æ=N~ŸùÝ/ŸŒqC× Æ{žD7ÿ÷›¨=»àýÃþ endstream endobj 995 0 obj <> stream xÚ]“A›0…ïü w¥º@Ì®!¥d#Eê¶U“•zc²¨`[ÆTÍ¿¯ñí¡>žÇof§õùxÖƒgégäEyÖºsj6‹“еê6è$ß°nž(¾åÔØ$­_û­™Kù2;>ÙŒ¼mäïÅò«úõuø£øk3{å¸W§žwÃìyo´Ÿ¹±Jû»UÜ.í8H>Nឌ6£Ï3Þš±ûl|ÿ)Ë2þv=å‚uª‡ã5D± ñùx¹ƒé¬{Ãöû„±ôgHpöîÎiÕãúí»ë”ô=¼Õ—øå²X;ª)$Á²¤ªâv9J”¦S³m¤r¾©drÈ*¶?…«J”îþÓ·am/ß·.Ï¿„åY¶Ë«Hu$Ú@[Ð ´‹´ÍW€6Ј4*¡ • r zö"?ÐŽüžAäG´…v=A«Aäw‘ªÝ½€ŽÐ@Eí‚» ‚_Xi©$BÖÅ&’À.%v)ÐOJ"d] »¡°¨!ÏÝȳ$BÏ d&Ƚ.É¥|ŽƒA°ŽÈz>>އ\œ ƒQáuÚ­>Ι5vŠÏ?ÇÒì“ endstream endobj 996 0 obj <> stream xÚ]•]kÛ0†ïó+tÙÁ´Ø’%¥mÒB`ÝÊ’Ân[ÎÌâd{¬ÿ~¶Þ—^¬¤ÇŽ|ÞGçDYï‡c[býºâäGQÕmüÐM¡ðââ¯u»J•(ëb$Å÷¢ÉûÕzÿ’÷ßòÆ‹µœ† o]‘ßä%/~O½<ûŸ_ë?^¾äÃèƒýߦ’e=Œ²êÚq]ïÛñ½÷²Ÿ.·º·f~5]Û¥‰ þ:Ýòð¥«ÏI’È·ósjEé+”<ÏË„"§÷¹Bsl«Nl·+!Ö?æ„ÃÞÅÝCÙ]ü§åÚ÷PúP·Wq÷¶?Å+§©ïo¾™SˆdµÛÅÇ¥p,ºÒ}^ø·W¿ÚÎ’Ø>Ï»•oËÿîo,–]ªâW–§óÇ“$Kw‘ö‘,éIÙH*=€R¬K@ ¤@O!e‘Ìd"9’=‚èÚ`ï݃xïõ4–Íœt`½'¬Ë@ÏXÒ42 YŒô#,vIÃÁ’à ù8hÖ£ƒÑ„Ôú ÄÔ¬ÎÔ Œ]A–Œ÷ :àa_28X,ö:ƒC†=Ëà`It ÑÕé@B28d0²$i&ƒ‘Bÿ Œæ‹‘`dI0Ò˜O#ƒ40r$Ì™Â.ø)Ô3ðS芟B2#à 0r$ÎæÚ µY¤v$¤60²HíHœ%ìµå,¡ï©5¦Ç25Ü-¿˜‹>8RkV@jÍ,胭…ƒ#¡†h„êŽF$!§£‰}À^;ö#ƒwü¾“Ѓtðs$ÎYìfºYH©TÅC§×r¼-‡ûÇÙ^L!̇düˆÇïrRÖ­ÿø‘è»~Yÿÿ©ÍuW endstream endobj 997 0 obj <> stream xÚ]‘Qkà Çßó)|Ü`.6MÓ=„@×®h·Ñ´°·aôÒÉcÆúíg4íÃF~zÿÿÝyñºÜ”RX¿Å*°¨’èÕ` ÎBF³qÁìDþÏ:ª£x½§ú•v€b<ô·ŠÑ×”}ác'~ïioÁ` ¿]ƒ¹è-n”´=V¤½hÀz¨[Áp+j0VHÀ;!wWø<<—Ê6„|:ngâЄÌG§FÉÄ妺¸D])…ò¸B{k.ènÅU ÷ãÙ›á`„<£»Óºò'Õ u +‘¨(¼Ý,´Ê‡^S†Ê3D¹«(ߺ¯ˆ@ò÷iPÕ û¢fŒN–.š4+FJSOÙ<Ð6Ћ§ |'‡äêwKŸ>ÃUˆ^íÜÓ"óÛ2™,‚h¬rÕmRl0Æõêçé_qlØ=ômäZéQå× ©» endstream endobj 998 0 obj <> stream xÚ]’Q‹£0…ßýyœÍ­M+¡k§ tv‡iömÐxí†Õ$ĸlÿýÆÜ¶³Œ ðï¹9Wo\V»JIGâ«Åé¤j-Œz²Hg©¢$%­îJá)†ÚDqù\›ïõ$¦Óhi¯EÝÓ¦¿'COðó ÿ}®G–:ø;t´•££Vn¤Ú€rÔLM/íeÖIô Õáï¯ÕWíº/Œ1úvÚ'œ´ÐáÁ'o&é•«ÝñâÏ*Õi²ÙD„į>çèì…> stream xÚ]’Ñnƒ †ï} .·dLÛµIcâ´&½X·Ìö¨-Iƒ˜¥o?…N’™ áƒÿÀ9çóCq ðK«ºƒ!¹†AºtVÈ &ˆ‹Ú•ñqh\ÌÓ½DëCQÝÝA6 ívBá$ƒÑwô”quç™}jZÈ=óÊ’jìût Š‚4µáb—D­8 =«A3ÙB°›Þ¥hWN_€äÿöã•“]šúÊ´=þ>/64+Šˆ¤–ì=YYÇžlYy’;²ñ¤t¤XHœ8Rz²¶„PO2G¼Š8õ·w;%žlñ*êT‰WQ§JÞ<Ù;²]HÙr=êBþª´T•Î O“A\Þ µ‰/Í¡œxnÂì±Åbõ¨õÔJkDk’¹ŸBÂâÕ^õ³ÊŽ_æäËé endstream endobj 1000 0 obj <> stream xÚ]‘ßjƒ0Æï}Š\v°Ìhíº®"x±nÌöbr´šHŒŒ¾ýÌIéÅ üNÎ÷qþć¦j´r$þ¶F´àH¯´´0›Å  JGIJ¤îNøŠ‘OQ|øäÓ‘@bz1#Ðß+”£Ú8C{£ÝL}QÚ¤Ç5Ör=—–wJЖ+·/ÎõÏŒ1z>ÕÉ+‘ÐÓÓm’Þ¹©ÚÛì`ltoHžG„Ä«\ÍÎÞȦ”¦ƒ'û²¬ÒÙœ-FÚeš®0‚v„EEvIèB óÄX®ˆòµV¼^O–ÿþd]/.Übú~Mg¯é¾@ªí¶oJ¤lèé½ TyJ²i‹.É.èV¹§2CʶHuÐe™§m<3†ÅÞ«òeûµ<¶"k׿qw8V?¥á±ÞÉL^…÷ms›" endstream endobj 1001 0 obj <> stream xÚ]“Ñn£0Eßù ?v¥R ÈC„”’FÊö«Ò~X 62FUþ~/íJ‹ÒÆ÷Î CTg%-‹þÝÖdY/UghÖ‹i‰]h*ˆÖÉÖnäŸíØLATýn¦×f$…W=Røu iC¥­{­ì.ê*•¥.|u±ºQóÁŒ¤d£Âw–[cž¬í9çáçÇ)ÎYG=d?î±dãó±¾Ï–Ƴê5ÛïÆ"w\ÎÖÜÙáÓúµÆÞLGFª=|VµÔË4ÝÈ9Zƃ²ôr1úhuGóÔ´d5P°w5ð’íOî*RÝï“Ç.}{mÌšç.g"-= :€ Ð3hç)á #(@™§,Á!ƒC²ežRdæÁ=‡_ŠÌ~)ÜógPª@/ O••*4 hºV<¡#ÍšêܡΠír?âm–â{²ÿ¾„XÓ8GWiŒZcLS”Œ ðãã.æ–ù>ÜA˜ñÍ òë§]—÷gwÛÅ· ~Ãýê­["ýü“žÖSþþ +ðÙ\ endstream endobj 1002 0 obj <> stream xÚ]‘KjÃ0†÷>Å,S¨ê$ta ‰MÀ‹¦¥N KcG„,·äö•åÇùç—uU“rY-tÐ)’G=YÐb¯(J3J¸‡^1pÅå7'> Äìªd¿7Ö+ÇH;Í:Mnd]9”ìäYÃiÜÿàè8±oì§·oÎu¯I’°Ëù˜î@b·D=ß Bö°ëª¹‡š: yÄ^®Fgï°ÙKÝâËÌ>­D«¨‡Í¥li&cn8 9H¢¢áÒ¥ ¡%ކ ´œzŒr_CR@~ô§ˆä¿ÿí¢j;qå6x¼wõždÕÑ )W’’®>éâ“mW²_Èn%‡ù‘c®aòsÆb²Öw6f4·£ŸË2Ú̪pÿ1’› endstream endobj 1003 0 obj <> stream xÚ]Ò_kƒ0ðw?E;X柮vü3Á‡uc¶ MN¨Iˆ‘Ño?Í•>LPøwG.IXµu«¤#á·Õ¼Gz©„…IÏ–9à U'DHîîò_>2„Õ'36 éE@¯tŽ*í4íµrÕE*‚–XÇÔT²qé ó•Ùçúç(ŠèéØÄ)ÐcÏãÍIînëî69[Õk’e!áR.'godS}†§5öeX©²9Ut³1WA9yîÛÅ8×&Ã8X¦²e QN²fyò”ø÷?ÞaÙ¹çf}zº¤i‘ä^%jªPo^qŒªQ{¯r‹*P©W‚™%f&;¯*FaÏ {&5êÝkÛxÕ¥×+굋Pj‹jP8C“ø‘ﳭïgû8Z>[»l¡¿þpÖ}” wÄh³Vù÷?ªa endstream endobj 1004 0 obj <> stream xÚ]’Ýjƒ0Çï}Š\n°Ìhíˆ`m/ÖÙ>@jŽ6P‰‘Ñ·Ÿæ¸2*DøœóÏùò³b_(i‰ÿetU‚%µTÂ@¯S¹@#•„DÈÊÎäþUË;ÏÏ>xwä-Ÿ^u ôçFi©ÒVÓZ+ÛÓA]¥² èq´•\õ;P ¿Iú ÍpãæÝÚú1Fϧ> stream xÚ]‘ßjƒ0Æï}Š\v°Ìh×?:»‚ëÆl Mލ'!FFß~š¸&(ü¾œï󜜸(÷%*GâO«EŽÔ ¥…^V¹@£0JR"•p3ù¯è¸‰ââ›#ï€Ä´ÕÐï+m”£¨¦µF×Ó[…$=ŽZűZ%é4ÕÛ'çêGÆ=ŸÉšH¨Cæéf€¤3—ûêÖ;èJ¬5ɲˆx´«ÞÙY줾Àä}X VaCç¢òJ5s…Ðå¹KÂBKè `96ec,'Ùa|òPþ;_×¥-·¾z3V'›g–{z ”ÚZ*­í­ý_æ¼ô7ý¯™ÃXÆX² Õ[ïMVAÜñmަ©çi%÷ˆÁÚqr¿7§Óø á¾Z£Íäòï ìžM endstream endobj 1006 0 obj <> stream xÚ]’ßjà Æïó^n0Mÿ¬…Ø ¹X7–ö¬ž$²Fƒ1Œ¾ýŒv LPñçùô;ã¼,J%-Š?æXTK% z4Щ"š !¹½¯üÈ;ÖGqþÎú#ëŸÕàŸ+n¤ÅJ[k­ì€GÕJeAà£cSCÞ²ïŽá/hÆ+3ÏÖÖO„|>è ¨Ã¡§[(¹¯Ë¢º ºRÕ¥i„Pìär°æ†^…¾ÀãÄ>Œ#UƒÎyåI5öý:P‘(Ëüq4dÁµ€¡g S D©ó@2”\Ë"Pâßþ.¨.5o™ñÑ]ìȺ(È*›¥ Ù²YÈ>EEƒ*yYÈ[ û…ž¬ÈL’u Ë]ÉÆû½;£>ç´’Ä…ºiñB·wEˆ™’Š9גƸ'ó÷ŘÞM*˜?E¯ûIåû/Ó`«Œ endstream endobj 1007 0 obj <> stream xÚ}“ÁŽ›0†ï<…[©Û $+EH`ƒ”C·UÙ}Lb)ØÈ8Zåí 3i´›C‘BôÙ3ãù<‰ØË½5$¿½ëZÈ`lïõì.¾Óä ÆFŒ“ÞtáFðîF5E‰ø©¦W5j’Ä'7êøãMˆ­ .œ s|±'cƒîã×e­UvʪÞ([œ7K!uŽÿèãå¬ü†ï”Òøý­a9éõ€¼]'Mø÷²½ÎA{;8²ÛE„$Kº™ƒ¿’§²wým]ûå{í=’§wÑÂJ{™¦³µ „FEå*ê\¯çIuÚ+{ÔÑnéd×,OiÛ?ìsŠi‡¡;)áÕÎRÊ ‰ô Ä·@¬F@œ=§H%P–¥ óRÌÛd@yô²ÚJ Š• ‘F ¬RaQ Š„½ìEÔH)DEIT$Q‘l2 O—xzŠd ÆÝbÿüºû[®å—?¬[²[4î¿<ØËØú5XFóZË´¶¬¥¸Wˆ¬J‘$h”Õ`o&ˆÏjÏš-R6e ý¯ˆÅ«UKñÌ”‘=ˆàm QÎAyÎÁQŽ"rÁñ{nÑQ^q¤íçfÖK¹à}þº‹÷ËÕ†)…¡Yï·±ú>È“›Ö,øýr $ endstream endobj 1008 0 obj <> stream xÚ]’Ñjà †ïó^n0Ónk!Ð$ äbÝXÚ°z’ c}ûÍ*LPðó?GÿsŒ‹º¬¥0(þÒŠ5`P+$×0ªI3@g脌’â‚™eçVÖÓ!Š‹:h(ÆÕþ¹âN,•Q¸UÒŒx’! p|°¬¡r,¨Tâoè¦+ÕÏÆ´O„|:VÉâÐú¤ÇÛhµìë²¹úZ¶ ¥i„PlÃÅhô =ì¸:ÃãÌ>5-d‡NEãH3 Ãz‘(Ë\ºÄ»`ŠÃ8PšÊ¢Ô¾d(­ìÈ"üßyB|عeª|cåå–r¿[gŽälI^ï$O< š|Ñl=Ù²sdE)> stream xÚ]’ÝŽ›0…ïy _n¥¥üdÃ!R.º­ÊîˆÕ`#c´ÊÛ|h.Šd¤Ïã33ö¯¸”) ó~iÕÖdX/d§iV‹n‰]iÒ BÖ‰ÖìdÿíØLŽWüh¦÷f$æ¹75’ûuwa\©Œr{%Íì.ò&¤¡Î}_÷êFÎÅ´úCäþ¦a¹7ú»1ý«ïûîçGD¬£i?±pçKY?fCãEöŠNcÞ*³ÑöÂ;u¥oÛÞOÝ‘r`/ŸEmwêešî4’4Ìw²Ì¦ pVu4OMKº‘9§µ?c§jý2‡d÷_<Œ!»öí­Ñöx²ü-³ÄA‘¥À ÊRž[ cKÅ”‚Ž d)å€X‰ØtgèŽç•x£z䃠‹ t¡zÐY”€Î–bn)õA(• TObP ‚ŽC— ³ý]’ „;¤È’# G×9ºæès%ž‚*Þ¥Jìhöÿ&òœ`¼[kèF|›éæÚ§iÛEëÕÖÚÖs›=„¤§û'5m*»þ$Û– endstream endobj 1010 0 obj <> stream xÚ]’Mnƒ0…÷œÂËVªËO$B"&‘²hZ•äÄ ÄR°-cTåö…1Í¢H}ÏófÆ|v,RXâÅ+°¤²10¨Ñp Wè„ôˆ4‚Û…ðÍûZ{>û¨õ©îøô¦z ?wÚ K¥²Š¶JÚŽò&¤…†ž&­ªåÀ”¶‚ÓoèÆ{mÞ­mß‚  —ó!LH­Kz~h ÑÂDzz ú£lÉ2²‹Ášy)u…×Yû4 !;òra*Õ¨õz–^žcºÐ‚«]s0µìÀ˦‚œd‡éÉ=Í¿ýÔ¹®-¿ÕfŽŽçèˆqŽ:Z;bH»)IXá(u´CJc¤rãhíh‹,µâ¿ÊÏF£Í6}JŒÞ0ô® WNÜî]1†b²wy]?©³§;'²¥˜K?Ÿ|žìs°|4fº??Nf¾D!áù‡h¥g®_œY® endstream endobj 1011 0 obj <> stream xÚ]ÒQkƒ0àwE7Xf¢kׂ­®àú1ÛšÓjbdøï§Ii`‚B¾ä.grqQ••ÅßF55XÔ É j4   tBF4A\4ö>rߦg:Š‹O¦¬ã«êÿÞp',–Ê*Ü*i<Ê«8>ÎV39“6BYüÝxcæÕÚö…‚ϧ]#­Ïzš4 ä>®Êz,ô•lʲ¡xƒ5zÚquçž #d‡žÎEí¤µ¾AÒ"å¹KGýo4ŠÃ Y†É¢l®ä(;ÌOäÿæçÚ\Ø¥m®Ì¸åïóòrC’² iîddåedãedçå#Hé„’ /ô!󤓷 ~wê¡k/awºõRÙ;IBžÄçIBžÄçI“‡¤ÔKˆJ}Tº²rx?©å(—^y´J33_ˆk(wÕË­ žÓJ/QîýÏ2»ž endstream endobj 1012 0 obj <> stream xÚ}•Ýn›@…ïý\¦R©÷—Ý•,K°`ÉM«:yk)„±ª¼}aŽ›:\4R}ãÝ9gfÖ»k¿Ï÷m3FëŸCW›¶Â¥»Uˆ^©iW\DuS7¢¿Õ¹ìWkÿ½ìËsˆÖñkwñï·øÔŒqÛ]|ìÚñ_ÛצC?N±CÙ^â_át}+‡oãxüÊ‹ŸŸv<‰êpDº§÷>DâÆûüð~Ãyß»h³YEÑzÚÞ\Æá=zHëî%|™c?†: M{Šžý"‡kß¿…shLj­¶[JÇá¿êêpéË* e{ «Íäm£ÍnúÙ®B[/>çÛ^ŽÕk9Ì˹œ–3&Ùv&‘) ² Ê@´y")@;"Ò”ƒR"œ9µ%Dû2Ò x1PÏ•uó¯þVóQ½D*{2©‚þ%H?¹£%ØBEò±71¤lÑ<žPbé¨%<É@ȃ¨%ÅÈÔYC”e ò j¬ôd;RDi:“┨QcyÆ@d@p–YœeÈ)Ós*ò (AAB!‡‚„B}ÊÞ'Yއk*Ž'½sCÝæ-Ê`Ħæ¹£cÆVúFÈ$ÏQ‡„×Ü#Ëóy¾$_ RÐÙ·S)„Qi öDÆ@;YW–$Hƒ¨y*¥Ó, ¬LñYA+5Ÿsò\R­Z0)Yy"Å@È¢E:PÊ@;PA¤É‹VDýÓ   )RC4Ôc˱jIóÔRCÓ@…z¯5‚ó·înË º%¦ž³{%¾T2Šn”¤ÕŽ}žë"©•ó©ÞPiŽàÿ-Æå4aG'z’ #á ‰ FÐ}Ò]^ª)]‡‚YÚ›Òu8‘!…µÿ-4¥ÙN«V.t¾Øç'ëãŪ®Ã0=ô®ÑÃ3¿M>ž¾¾ëç]ôûÚvÊà endstream endobj 1013 0 obj <> stream xÚ]’Ënƒ0E÷|…—­TÛ¤‘"¤Š”E*í80KÁFÆ´ÊßfÒ,ŠÒ¹xî<> stream xÚ]ÒÑjƒ0à{Ÿ"—,Ó¨[[¡Ó ^¬³}€Ôm &!FFß~š"ä3HŽ',ê²Ü ð[˶ƒ:.˜†QNºtž‹€ÄˆñÖ> stream xÚ]‘KjÃ0†÷>…–-Tõ+I»0†ÔNÀ‹¦¥N Hc[KB–)¹}å‘É¢ ¾™F󈫦n”t$þ¶š·àH'•°0éÙr W襊ҌÉÝJøò‘™(®>™9±HL=ý½Ñ^:ª´Ó´ÓÊMtVƒT=y[ËÔtpƒÔFrúý|cöÕ¹î%Iz9ÓÐ…´ç»’­ÜÔí}r06ªÓ¤("Bb.'gïäi/ôžÛ—`¥êÉÓ¥jÑÒÎÆÜ`åH•%¦KC\ ˜ ã`™ê!*| IIŠ£?eJüóû`صã³(¯½<Í|ÔBi(´ ô¨BJƒ2Ûú@Ê·HÙi—#킲ʪ ¬ÞêÕw„?¤>™§< ´ÁZòm‚¬/--K{ìŒÏÖúÁàfqäËt¤‚Çò6KÞ?.¸¡a endstream endobj 1016 0 obj <> stream xÚ]“Ûnœ0†ïy _¦R)Ç@"­C´M£’< ki±‘1Šöí þi* Ð7Ìüs`ì•g~–Â0ïM«®!Ã!{M‹ZuGìB£N²^tæ ûì¦vv¼òg;¿¶1Ͻª‰ÜÏ›; ãJe”;(iw•W! õîëfkZ¹¼Ò£h¥û›ÆõÖêÆ ß}ßw?Þë a= }¿Ïăϼ¹/†¦³;Ƽ-\,FßÙCÞ« }Ûm¿tOZÈ‘=|”µ4ë<ßh"i˜ïd™• ÐG§zZæ¶#ÝÊ‘œÓVƒŸ±S½]™C²ÿï{!ì2t×V[÷jsü<Ï,Õ ÂRðh©@)(å ÄAÏ hÐ }P *-qßRMŽ|Ñ3ˆƒ Pm)†gÏø ͵TjdHöBî#.I@ˆKž@ˆKrKÁW€Ð{ •*i âvÄÇ,“¿“ý÷'vùí…zòýWÖÅh.D«ÜcÌ»BÎÇ“E˜À3PþE Ï”[ce¡} ö5ÿÚònÕz[%{ì’îû$$}—YÍ{”½ÿ˜ã¤ endstream endobj 1017 0 obj <> stream xÚ]’Ñn£0Eßù ?v¥õ6¤ª!%¤]å¡ÝUi?À1±62F«ü}Á7êÃ"é sï žIëóélM`é_ïtCuƶžf·xMìB½±I.Xkt¸S|ëQMIZ¿ªéMÄR~u#ñïMàÖÇ;gÃÌ{56PËßÖX£ìü{P½L0š¿S¿ Êÿ ¡û™eÿüxÉw¬¥Æ·‰˜¸óùÔÜæ@ãÙvŽí÷ cé*7sð7öphÝ…~l±?¾%olÏ>ë&FšešÉ–%Uírü‰v-Í“Òä•í)Ù¯=dÛ¿¬O•mÿû.d—N_•éÇ5]Ô™¨"@èTFÊ%è*@Gt9t9t9tâô :Dy$ OO OO‰L‰Îd B‰z ‚KO —ººººrBgåS¤íàYÂsÏò/õ~{Ûõn+ô½Azñ~Rܳ8þmRÆÒ÷*NnÚTñ|ûä¾ÿ endstream endobj 1018 0 obj <> stream xÚ]‘Qkƒ0Çßýyì`™Ñ–Ò:m‡ëÆl?@šœ¨—#£ß~š” $p¿Üÿ»\Te…Ê‘øÛjQƒ#BiaУ@®Ð*Œ’”H%Ü#ò¯è¹‰ââ“›ïÄ´Ó=Ðßm•£¨¦F7Ð;…$=M¬æ8|h×)A oܾ9×¼2Æèå|L¶DBšžïHúˆ«²¾ú M²,"$žÊÕàì¬öR_áef_V‚UØ’Õ¥¨=©GcnÐ:¢<÷í’0…ÐÃXŽ-DÙ¤å$;N'å¿ÿ]¨º6¢ãÖgï§ìrÇXy\§¹'ÅB6²õ$Ù.äÈîI6,÷…¬Y:oBç”-dçõ>”ÍÊggžÆˆÑÚi~oŸßì¼…ðtØh3Wùû-²\ endstream endobj 1019 0 obj <> stream xÚ]’ao‚0†¿ó+úqKÖQ@&†«.~˜[†þ€ v‘–”’Å?¸s. $ÏËÝñ¾ôB¹[ïŒö,üp¶ÈÁ³J›ÒAg{W;A­MŬԅ¿>‹FµA(ßT»W °ŸmüûÂkí¹±ÞòÊßñÞœµñPòý åÊt¯ý—rÊkþ uQîÙûêIÁ‡m4c%T4öpmÅ7Þ­ókç¡Ù™Ê²å2`,ÚuçÝ•=d¥=Á㨽»œ65{8Ê•¼oÛ 4`<Ašâ¸ˆr¶„®U8ej–ƒ‘²åv¸ÒLùï}”PÛ©*ÎÊaùb(Ùü%EʈæHÑ i±"’D)ž e¢9õÅ[¤•@JQL4%¢Êdƒ$"ê“4sš mÖD£—x*%ƺùŸþ¦ùK&… ¹óŒœÏPŒÈäbF"–ˆ˜Ü-6äó‹„¢®¶(Nhæ„Ümf7ôÍñ[t_¢¢wn8)\5Üñ¸´û6¶¶»ðþúSÄ endstream endobj 1020 0 obj <> stream xÚ]’Ûjƒ@†ï}нL¡[wÕ˜‚RrÑ´Ô䌎fiÜ•u¥äí«3ö@…oüç<~ºßîµrÌ·¦ÈÀ±JéÒBgz[;C­´'VªÂM„ߢÉ[ÏO_óö7À|~1 ð¯+¯•ãÚ8Ã+£]Ç{}QÚAɃ-Ëu÷ÒÛ¦ÿ¼(þuÍí“sÕ£‚ŸŽ;³* {¼µÀ‚‰÷ÛìÖ9höº2l½öówÕ9{c³MiÎð0ÚÞl VéšÍNi†–¬oÛ+4 ^’`8I}¦„®Í °¹®Á[5ˆ„­wÓx Ë»ÿrAn窸äå‹A.6bž m‰vD;$"IIDÊÁˆ´ š­ˆb¢ Ñ’(%J‘¢ˆˆb3xF I’2\EDTgHÙ#RF¤x‹4'¿Eˆã˜ú~¦ð7µÕ(‚r ª ÂzDDíÄñbåÝ$¥3ó4ýŸi\Áxd¿7VôÖ‹ÄKÄ·©4ükkÚÑ ßo ëÌw endstream endobj 1021 0 obj <> stream xÚ]’Ýjà Çïó^n0—®]!Ð6 Ëź±´`ô$c(}û%ž‹ ¿ãùøá¡ÌK% ¬æ8ÒH%,ôz°H ­TAœ!¹›ÉŸ¼c&_ÌœX$¤Wݽßh+UÚiÚhåz:¨«T=¶Š©þj wú ípcöÕ¹æ%Š"z9ñ†h0éùa€$3—yõèt¥j4IÓ€p —½³ò´º†çÉömX©Zòt9TÞR ÆÜ åHd™Oc\ è ã`™j!HG QFÒb\YJü»ç°ºáWf½{1ºGë<Î&Šc¤R‚ô†´FzGÚ m‘¶H;¤¤=Ò)GÊ‘ $¬~Äê V?®¼ôYã¢xé0YMnQ‚zŽëÙï§ž§™.#僵ãËùÁû™LÏ',Ãh3EùýI׫٠endstream endobj 1022 0 obj <> stream xÚ]Ò_kƒ0ðw?E7X¦IÿDhµÙÖÙ~€TO Ô$ÄÈðÛOs¥~1wIî¦y–+éHømuY€#µT•…^¶r…Fª€qRÉÒÝå¿e'L¦ŸÂœD$¤­î€þÞh#UÚiZkåz:¨V*=Mc…Pý»Eû!é4ÃMØWçê—(Šèå|dkRAYÏ£Âïγbìt¹ª5‰ã€p —½³#yÚUú ÏóØ—­ÀJÕ§KZø‘b0æ(G¢ I|:†Ç(u½%X¡âiQBâãô$¨êß¶Á°k]¶ÂúéëiúîmŠòÚ jZ¡¨­c¨=jÊP+Ô…9æd;Ô•¢Ö(\á œ£RÔu@aNŽ9ùŽÇ1n;ã™/ÇýÜsaæÎ?_ÖNåõ×Ã7n®±Tð¸AF›9Ê¿’Þ¯” endstream endobj 1023 0 obj <> stream xÚ]ÒQkƒ0àwE;Xf´µkAk-ÈX7fûÒä´šHŒŒþûi®ôa‚ÂwÞ^ΰ¨ö•VŽ„ßÖˆi”–3Zä­ÒA©„{È?EÇû ,>yä^Mô÷F[å¨6ÎÐÆh7ÐQ_•v éqŠÕ\\k.9ýv¼qûæ\óÊ£çÓ!Z v=Ý{ ñÃÕ¾¾ºJ7†¤i@H8•«ÁÙ;YäÒ\àeŽ}Y Vé–,ÎEí#õØ÷7è@;‚,óí"C CÏX®[ÒéXFÒÃtehùï}´Â²K#®Üúôõ”ΊM’ymP卑EíP9ªD•^óÚ2¯8öÊ—(ì’^KÌÜŨ- »¬°g¹öJ0³Ü V(ì’$¨½ò1Í<î¼Ïç:Åhíth~é~óÉ) Ïÿ¢7ý\åï? ·§¯ endstream endobj 1024 0 obj <> stream xÚe“ÑŽ›0Eßù ?n¥R0Kq‚UÝVÍî¤`qTåïk|Ù¤ÙF"è\Æã¹O ÷Û½j ~é¾:aM«jMcÕ±#ZåñˆÕmefrÿUW^ ”ÃkÙ üsß‘ÿçâŸZã«Þô~Ó+3úWun•¡ÚµÚ¡Tã÷sGÚÿM§ë¥Ôߌi¾†aè¿¿Â97²}n>OœAàÉ䎊ãøÅ.IGE *@ÎOW–¢…”ÿ™îÞ4Z÷ɪ®ZÛìæÏÍÆt[E÷úaZåž¿4þO endstream endobj 1025 0 obj <> stream xÚ]’ÑŽ›0Eßù ?n¥ºØÎn6+EH)R»­Êî80KÁFƨÊß|iŠÒæÞ'-ÎåÙšÀÒ_ÞÕÖÛxÝäkbêŒM¤b©ÃJñ[÷zHÒâ‡ÞuO,åW×ÿsã ܺàxëlùd¯Æjøû«´¿kÇS7Ý´ÿBûUÁ??NrËjáøqˆ©•ÏeuõgÛ:¶ß'Œ¥³ÜŒÁßÙSÞ¸ }Yb?}CÞØŽ=}UŒTÓ0ܨ'˜H²,ÚI¡v ƒ®ÉkÛQ²Ÿ{ÛŸæ'KÈ6ÿý—;È.m}Õ>¦¿Îéâ¸{Í"½rP*A‡HoÏ ´$:)AÐù:P/¡^Ž^$*ä«î:FR*ÒAžAÈTЕ"Òç+Ðçf g‚ú7“Ç åvIrÍ–ðNB¡åB­-£^öè±Fõäý|aqÙâ*,·f,=öqpâŠï_~9Ã\ endstream endobj 1026 0 obj <> stream xÚ]‘Qkà Çßó)|la.1mW !P’[7–öX½¤B£b £ß~‰—õa‚Êï¼ÿÝyUYiåIü匨Á“Fié 7ƒ@®Ð*±”H%üLá·Q\|p{â˜ÞLôçN[å©6ÞÐÆhßÓAß”ö éi´Õ\÷ïªè7´Ã»Wï›—$Ièå|doDBƒ!Ï $¹*ëGï¡«tcH–E„Ä£\õÞ=Èb/Í–“íÓIpJ·dq)ê`©kïÐö$‰ò<„cøa$ô– p\·ec IN²ã¸ò´ü÷¾EÕµ7î&o6yï×å&´C:  ©DJ¥)Òi´CBÝ‘… æ\é_æg¡l3º×sîQ{ÆÃ«9ЦÿLÓzK Î] # ýžZ£4<§nTaÿï]¤ endstream endobj 1027 0 obj <> stream xÚ]‘Ýjƒ0Çï}Š\n°L£k»¥àE»1ÛH“£ hbdøöÓéÅ'ð;ÉùŸ¯øP+­<‰¿5xÒ(- ftÈ Z¥#–©„_)Ü¢ç6Š'nϼÓ»éþv´Užjã mŒöõ]i’žg_ÍõpâŸfëé´cÇÝ«÷ÍK’$ôz)Ù–HhP÷2Y éÊÕ±ž}¥Cò<"$žÃÕàÝDžöÒÜàyñ}9 Né–<]uðÔ£µô =I¢¢r FÂ`¹Çu Q>×$/çSD å¿w¶†ÝqçnùÎØü=9²´´CzGú@Ú#}"•He 4 ”¾!m¶H;$TIQ%Ke ³g˜=Û mCékKËžk£só(Â2×y( }[c—¨`«ŸT endstream endobj 1028 0 obj <> stream xÚ]’ÝŽ›0…ïy _n¥º`ó“DŠvÉFÊÅn«²û  lË8ªòöŸ4ª ÌgÏÌÏL\'=xÿr¦©É³nЭ£Ù\]CìLý #!Y;4þNáÛLÊFqõ¦ì»šˆÅüb&âFÞžkã ïŒö3W£½(Þ93q;XMüª/ƒöÔrï;>+=ó÷Å¡^~ÞnJOÊñßÔ_Gå~,ß“$áŸGQ°–:H~Ü,1yçÓ¡¾Íž¦“î Ûï#ÆâÅ}˜½»±§çÖœéÛº÷Óµäݳ§Ïª;õÕÚ‘&Òž%QY†pwlLK³U 9¥{ŠöKIÉöÇå)#Òí—s™ÀíÜ5å‚y¾˜‹$e $A[P:€v WÐs !A¯ Dˆ"v ôÚ’tÁRÂRV -êêò(­¥Y  zé„()î øeÐË žåð+òP¸{…Ä¿z=ê›®Xä“íîÖ8O¿”W”/«„Ø@Py±]Ó–yUý/¸ölØÇÀ6Wç–·±3µ¶ÎÇä[cW¯ðþ´߯ endstream endobj 1029 0 obj <> stream xÚ]’okà ÆßçSø²ƒ¹˜lë.i!Œuci?€ÕK*4*Æ0úí—xY_LPø÷ÏyÆEUVZy9#jð¤QZ:èÍà3´JGIJ¤~¦pŠŽÛ(.>¸=ðHL/¦ús¥­òTohc´ïé /J{ô0Æj®ûû¡ßÐWîž¼ocôtÜ'K"¡ÁŠÇ›’Î\•õ­÷ÐUº1$Ë"BâQ®zïnd±•æ SìÓIpJ·dq*ê©k¯Ðö„EyÊ%Ø‚0zË8®[ˆ²ÑËI¶W–ÿî7¨:7âÂ]È^ÙlU°|¢$AÚ =#½!m•)Òi(eHk$Ô•¨K_ ¤2Ðî5¸›}¤®îM$Ë)%³»jW!˜n°à~.¢©×i÷9ŠÁ¹ñÅ´Ã,¦gSîÂ;©Âþú&© endstream endobj 1030 0 obj <> stream xÚ]Q]kà }ϯ¸Ì%v´0-¥‡µci€Ñ›D–¨Ã迟Ѭƒ çÞsŽ÷#-«C¥¤ƒôÃj^£ƒV*aqÒ³å vR%t Br·¢ðò‘™$-ß™9±!%½‘|¤“Ž(í4iµr™U/•CAN>V35‡²—_’|b7Ì>9×>fYF®—#݃À6º^na»âêPß&‡c¥Z yž¤^.'go°yºÁ‡%v¶­Tl®e"õlÌ€#*YRÁŽÆ6¸8ÆÑ2Õa’û²ò£?E‚JüË?GUÓòžÙ…MwžMË=-ÚG´è%¢]pZ5ô×áïã§y6 ìÝÛÊŽù¥„eÆ÷óÙZßHXDÑÒTxß•ÑfQ…ûºÿ•‹ endstream endobj 1031 0 obj <> stream xÚ]‘Ýjƒ0Çï}ŠsÙÁ2?ÆÚD蔂kÇl MŽ6LOBŒŒ¾ý4 $p~9ÿóæeQ’r~Y-*tP+’{=XpÁFQ' •pwË¿¢ã&óOn¼CÙUwÈ~[Ö(ÇH;ÍjM®g]9”ì0²ŠSlåi°?J°ol†–Ûçêç(ŠØù´× ±žãžn!¹ÛeQÝz‡]Iµ†4 ÂQ®zgo°ÚI}Á§‰­D«¨Õ9¯<©cZìDA–ùpñ܈Ð{ÃZN éXC”AºO Éÿo³êR‹+·Þ»½‹môZäÑ{6‘øc!ñf&ùƒl=Iv IÖ3y¨’Ï|Ï1Õ0y™²¬;ñ»ð3šÚQ„˺Œ6“Êß?š“o endstream endobj 1032 0 obj <> stream xÚ]’ߊ£0Æï}Š\ÎÂf5Õv-¡5 ½Ø™ey€T6P‰‘¡o?š¸A%¿“|çO¾0¿ò«’–„®+°¤•ª10êÉÔ@nÐI°idmוûÖ½‚0ÿ#†WÑ é]÷@?´“–*m5mµ²#Ô]* }Y%Ôø6Šè?覇0¿¬mFQD?ÞKv ´^óý9Ù­ë+¯ž£…þªZMN§€p>.GkžäåÜèüXØ›iÀHÕ‘—¼r¤š†á=(K¢ ËœóMÔºq5¡:Ns QFNåüd¨æ[œ¥þØ­­ï¸íçy;O#ÆóK”9R"Ù;Âb$GOòä;Gv’ƒ'¿‘pOR$…'¨ÃWŽ$ö¤@’:c.~ö„!¹x‚5sŸ=Æz æH‚:…×I$¾Â䲑ÒO#ÁšËƒò:Íøÿl·»`ûyëü;âüÖêŽ.c³…o6)\`ý”éšÃ«.wºXvsl=3;ÃùÚyn±‡T°YÐÃrʽ_kÍÜ‘ endstream endobj 1033 0 obj <> stream xÚ]’Ýjà Çïó^v0—˜m%…h“r±v,íX=I…FÅFÞ~‰v&¨øóüçø¬«Z ‹â/£XµBrƒ tNȈ¤ˆ fï'·²žê(.?©>ÐPŒ¯ªüsðX*«p«¤ð(¯BZàø0³†Êá8ôTNC7Þ¨y±¶}N’ŸO{²FZïõ4i@éý\WÍ4XèkÙ*”çBñ,ƒ5Zm¹ºÀÓÂŽ†ƒ²C«sÙ8ÒŒZß iQ…sG|Lq4e`¨ì Êç’åûyHþïž$^viÙ•gþ6›WYBª2K GÖ¤žlY;B‚jãU$¨6^EÊ@2OöìIÓÙz?é{ ¯žìÙ¸¤îÑ“¿\BîË“óöâÍî o³Tdiù£ãl4f®«û®cKq…„Ç×ÑJ/*7b¿´ endstream endobj 1034 0 obj <> stream xÚ]’Ýjà Çïó^v0—–.…HÓr±n,íX=I„FE £o?£Y/&(üÎÿsŽqÝÁ-Š¿´¤-XÔqÁ49i è=Qš!Æ©]È¿t$*Šë¢ÎdãAŽ€î¸ç i%ObàÂÃggk‰0-™41ƒÕC?݉~³¶{M’_/§t‹t¡ðå¡e 7‡öa,Œè$*Š¡Ø¥scõ­*&oð2Û>5ÍEV׺õ–vRê#‹’¨,}¹4tB%£MDQá4$%*Nî”öÏ¿ Y·ŽDûè­‹®ò<+gJ³@Ç@Á·[|U ­§,÷TmÕrOëwOûu c ÊÓfïéxu‹ŽôOÕ³‰ôäÂ\Ý g·_¢ƒnk^ÝsstÒÚ Çï×}žðüJª9Ëß_õ3¨t endstream endobj 1035 0 obj <> stream xÚ]QÑj„0|÷+òx…¦Fíõ,ˆÐ*>ôZêÝä’Ugbl¹¿oŒ¢Ð@vfg6Ù ‹ª¬¤°(ü2ŠÕ`Q#$70¨Ñ0@Wh… ¢qÁìù“õTañAõ‰ö€BÜ©ðï ·Âb©¬Â’vÀ£ì„´ÀñÉa5•CÝÑA%þ†v¼QódmóHÁ—ó1zAšÙõ|×€â%®Êú>Xè+Ù(”eB¡“‹Áš;Ú½qu…‡ û4Œ-Ú]ŠÚ#õ¨õ z‘ Ͻ]4ƒ)ƒ¦ •-™{ÉQvt+@ò|2«® ë¨ñÙ¥Ë.S•Åþ5Ÿ(ÙãŒVä%ñ®‹~uÛŠ§.Õ]ï›Ç³÷ˆ÷žˆÓ•8D3Qx"!‘.5f×éÓ”Ö!±Ñ× ?Jßä©BÂ:m­ô¤òû§w£Á endstream endobj 1036 0 obj <> stream xÚ]’[kƒ0Çßýyì`™Q»^@/-ø°nÌö¤zÔ€&#£ß~šãú0!Âï\þ9—¸ižåRâ~iU`H-d¥aT“.Ü¡Òñ|R‰Ò¬dÿeÏÇM?øpá=—¶ªúÓÑF*•Q´VÒŒt’­*z™m—c!dË;N¿¡™:®ßŒ©_côv={;RAª×ÇÄ_9ÏŠÇh Ïe­H:„¸sº~M\©;¼,¶O]²!›[ZXK1 C=HC˜EVÎÃ6JUÁ8ð4— 8á\‹Hxž¿ÈYýó{[L»×e˵ çp–Ž‘¥)±äù–ŽÒ;Òé€#%H™%ŸYŠ}$Ì‹÷–ô%’‡„šÁ 5¼!ÁZ‚#Þ°E•tg›\»ñþz{ηí0ÿ„œÖhô/ÓYÖÿÜ~9i=ÏØ¾»½eÐBÂó jX²ìù“µE endstream endobj 1037 0 obj <> stream xÚ]ÒQkƒ0àwE;X¦q®kA„ª+ø°nÌö¤Éi5 12úï§¹Ò‡ ß™»x9㪩­<‰¿-xÒ)-ŒfrÈz¥#–©„¿+<ÅÀmWŸÜø$¦3ý½Ò^yª7´3ÚtÒ¥=Hz˜c-×c;iÉ5Œ@ Ÿ®Ü½xß='IBOÇ=[ Ö=Þ,ôî¦no£‡¡Ñ!yÏéjôîFV;iÎð´Ä¾œ§tOV§ª ‘v²ö hO’¨(B9†#a´\€ãº‡(Ÿ¿!)H¾Ÿ¯"-ÿ½g¦;qá.,ßÌËY¹ÉŠ jªPTÚ¢ö¨2ˆa•-Va[ÔªD½¥)ê#èµ»+ *“ ,AU(†ªQa¿ªÊB“÷n–v—‰>*&çæC cãXNNixüÖØ%+ܦ-¨{ endstream endobj 1038 0 obj <> stream xÚ]Ò_kƒ0ðw?E7X¦ÑµkAk'ôaݘíH“Ó4 12úí§¹Ò‡ ¿Kîò猫Ãþ •'ñ·3¢OZ¥¥ƒÑLN¹@§tÄR"•ðw…¯¸âê“Û#€Äôj ¿=í”§ÚxC[£ýH'}UÚƒ¤Ç9Öp=žø zúÝÔs÷ê}û’$ =Ÿj¶&Z¬yºY é݇}s= Ý’ç!ñœ®Fïnä©”æÏKìËIpJwäé\5!ÒLÖö0€ö$‰Š"”cxa$Œ– p\wåó’‚äõühùoœe˜viÅ•»0};OOv›MT¢¶¨:h›±•¡RÔ •¡0½¡JÔ;ªFUA%Ž¥XsÇP …ë¥+Ô:(Ã*ëp¬ûþ—.ý{´OLÎÍך°Ü•Òðø¬±KVxÿW‘£¯ endstream endobj 1039 0 obj <> stream xÚ]‘ËjÃ0E÷þŠY¦PÕ–4cp¼hZê¤{E;{$d™’¿¯-…,*àŒæÎ3®ê]MÊAüeµhÐA«HZõdÂ;EQšTÂÝÈ¿bà&Š«n|@ˆÙEÈ~{Ö)ÇH;ÍZMnd]9”ì0ÛNã‘«…Ž}c7õÜ>9×>&IÂNÇ}º‰mˆz¼„ìÆõ®¹Ž‡šZ yij\Î^aUJ}ƇÅöi%ZE¬NUã-ÍdL’ƒ$* . m-q4\ åÔa”Ï5$äûù’ü÷ÿTçV\¸õÞåì]–›uáihë)]{Úf6^Ý6è²½§òÍÓsèÝWp˵Բ û>k1Y;wä7âgµ´¥ïK3Ú,*ÿ<” endstream endobj 1040 0 obj <> stream xÚ]’Ánƒ0 †ïë«Ò~ô¾²ÒÓ ú¹›ù7ts_ÙgçÚ'!?Ÿ2a ´TôtmV.öåmr0º5,MÆBŸ®&goìaט <.¾OÛ€Uºcç¼DO9chÇDeXNRµi`«l¥;R‘±ôà¿,Ýü‹ËˆÒ.m}­,Ê·^.rgHoD[¢w¢IÆH’”’”Þ íˆvD”çÍB›É¤R$"A$‰^‰öH1í—Ðî1Åjk=¿üëæÞý –±$u²ª)¾Ìc¹ïûu׳µ~ªø(ð¾–Ñ* ÷w3šqÉÂõ â ± endstream endobj 1041 0 obj <> stream xÚ]‘KjÃ0†÷>Å,[¨êGâÒ‚1$N^4-urEÛ‚x$d™’Û×–BHðæŸg\Õ»š”ƒøÛjÑ ƒV‘´8êÉ „ vŠ¢4©„»“ÅÀMWŸÜù€³^È~¯¬SŽ‘všµšÜÈ&ê9”ì8ÛNãIÍ x׳ì¦+·¯Îµ/I’°óé¾Ä6„=Ý Bvçz×ÜF‡CM­†¢ˆâY®Fgoð´‘ú‚Ï‹íËJ´Š:x:W·4“1W$QYúpièCh‰£á-§£b®!)¡8̧Œä¿ÿ÷ º´¢çÖ{ogïl·ÊKO‡@žÒ,På)[{Zïm<åë@A—Ý* ´ tùÞ×sϼT¶Ìþ1z1Y;÷çä'·4©;4Ú,*ÿjG–Ü endstream endobj 1042 0 obj <> stream xÚ]’ÝŠ¤0…ï}Š\ÎÂf1Ý»пÐÓ³¬=ÖÒ´‰ÄÈÒo?š#s1‚ÂW©:ubUº?ÎÖ–þõ®*)°ÆØÚÓàF_»Qkl’IV›*,¿U§û$Ý¿éþ¢;b)¿»ŽøÿoMàÖÇgÃÀG{76PÍ/S¬Ôv¸Þµáÿ¨Úÿ ¡ù)„à×S¶f55¼>{bráó¡|º³mÛlÆÒ©Ü Á?Ù˶v7ú1ÇÞ}MÞØ–½|ìË)ǾPG60‘E”Ëp‡ÊÕ4ôº"¯mKÉfò ¶9MO‘­¿Ë5ÊnMu×>¦«)]EVDúI*Ð+h Ú!ó:€N‘² tˆ$Q— д@»H¹@‡WT¤åÈ„fŸú勳ål ‚³>óE>Õ „î κ+Ü]¡»ÂÝ•å xQМÄfZ-*kТò„º2%†±üõy,óÒ}í\5z? 7nf\›yÂÆÒ×òö®Ÿ«âû CòÇe endstream endobj 1043 0 obj <> stream xÚ]ÑQkƒ0àwE;Xft«[A«-ø°nÌvïirÚ@MBŒŒþûé¥ìaB„ï.r¹¸jêF+OâOgD žtJK£™œr†^é(I‰TÂß…1pÅÕ;·>‰éÅ @®´Wžjã íŒö#ôEi’æXËõøÍý‚~ºr÷ä}÷È£§ã>Ɉ„.œx¼Y éÝMÝÞFC£;Cò<"$žËÕèݬJiÎð°Ä>œ§tOV§ªÅH;Y{…´',* <. -#a´\€ãº‡(ŸïÀ ’ï篈@Ëù¹},;wâÂnßÌÛË5[¨2(Ce*KQ%Cmª $¨FmßPÛTrUÈíRT½[”$¯‹²ä9¨ Ê‚ê  *eA6r¿ñÒÒ2¯¿q‰É¹ùap¨øäËë( s·Æ.U¸~¢8 ~ endstream endobj 1044 0 obj <> stream xÚ]‘ßKÃ0ÇßûWäq‚±í榃RÐBÁ©Ø |M“K ¶I¸¦âþ{“tìÁ>—ûñÍ]º«÷µVޤïhxŽH¥Âh&ä@Zè”Nò%Š» Å›Ì&éîÀì+€¤t‘ö†³ž¶ŒO–áóEý=°ÑR¿ƒ¤BŽJ£ÝHíΨÚ^qÚ~F›-E覞áqò6Ë2z:Vù†sÅ£"Ë ×ûæì µ–†EBHúáŽÏdñ$L 7Áö†PéŽ,N»&ZšÉÚ/‚dIYÆtùüEnŒ–q@¦;H ¯!+IQùU& Å¿÷õÕJþÅ0x/Ÿ½w–mVe U5Óc¤u>Si³ôp?Ó~¦u¬rÉê…f_{Í'D¯:N$ö#HW®C³Æ†¨xþ·˜ endstream endobj 1046 0 obj <> stream xÚµ| |LWÛø13dŒ :ûN˜ØKu´)ŠZJI®¤!!HÄ: Ùæd•„LľF„0R±DÕÚê-JiÕö¦jת3zSç{ž3“Týú¿ß߯NïÜ{î9ϾžKEªW'*•ªÁØ÷ýÆŽÜÞ?$Ì?drPĬ° ¡¯ã?GÇËÔÝà0‡Qåð®æhêæ¨_½­»›Í½ú³SÊ·M6þ•ª_&DuµŒÕ¢ê5©1Ò½\¾ñ•{ ¼îÞ’h«©Cê“&¤©ª¯j„*ð[½>9hp`PجYÑÝ:uéä ÏgÏñ®šâ=9Ú{XpÈÔéÓ½uò>uj‡šC§…yû…‡Íòžá=2(bÚLïpÙ[†ÇáQ!aS¼ý"‚‚¼G„˳¢&EÁrAa3ƒfö®9p˜¿w›AaA“¦z›=yjH@åÓ¶ÞQ!³‚a°YƒæMŸæ=),Ð{¨¼ôû¦•ó;Õ|#"hÒ¬ @ç‹øÌ/5ð/w ü©Aj’ÚÄh_—Ô#žD<Гä%Òx‘F¤1ñ&ÍHsÒ‚´$­HkÒ†´%íH{Ò‘t"‰éBLÄ—t#ÝIÒ“ô"}Èëä ò&@üÈ@2ˆ &o‘·‰?y‡ !CÉ0ò.AF’÷È(2šŒ!cÉûš5û5$KwkŒp!€?ƒÈ ‡!„’“ª8ÕVÕçª+ÕÆU;çöTí®Þ¥‰ÐNÒƒ¢kì¬9¼VŸZwÜçÕööhW§Q/ëfÖ}Ro|½_uúú=ê?ÔÞàë†ÍóÚßh]Ae¸á]ËûaÓ™Í6ßÙ¢o«­ýZßn³®]÷v›:vLë4²óVŸý]ÝL }ßí6 ûÕžçz÷ï=±O£>çûì·§ÿ‰Q´Ôq·Tc‹R·RÇ#=ë§d*ðW?®Y&þV+ÞìøE+–ª•ñðCÁG·¨º¢ço½#ñé°ŠD‡«ŒŒTí`Z·,CO'¤+³Y”2FÊ/P‡îP´¬eyð«Áåo— ÕÊKŠº…ÒŸ*oIøòèHë o³–¦§%ñl¶ÅÆHÓBÕS˜ViD•<øO©¡4š,mQ³—˜ú'ÖŸ2|ýs¥ÏVÖŒÕV±zçÝXu¦ÓÏ9¿`&œÿh&FÁI}›‰óö2Ntþeœ+&'µñªøÔá_FgSÎÿc&c8ßk&qþ+¼ÂÆÙ*/+ç¿À+¤–W.̆ÕI‹r™ ÞkoÍå¤!Îk‚œ>ƒnâc3ÑíÒwœ_1“ÝœŸ4ƒ‡2š…^RídÛÝØFª_·¾$gÙâìp£2^1y®9'f½ð‹aFÕÖÊíÀ1}PÁ4›­°`ç®Ðü€€Ð@X#&…rc‡ŸöÓûS%æ·'©Ú#0¦Ø±­X•Ïš³¾¬™ËqØõœ´²ÛT“/çŸÀŠWuïd Øç>¿ˆðB¸,³~WY¾6c|Å×úû¬Á%Ëɼµò†?,²Âß®è[)Õ•ñJÏKJ ÖÊè˜TèÉZE©X kàæpczö›öPæQjÈYœkˆ¡sf™‡„œé;…‚<ˆ!x`͵Æ|ºnGŠ•J9 cJ™–ö—021&ŽÎÎŽ£”éSlÔFK,ßY²3èÚ˜Œ‘©ãÒèÉ#^r,ÜíYú ]?¨D÷°Ôñ¾>b]ØŽ-[Ön5Ðô¤¥‰Y‰K3é2ºŽ“fö²½À“‰®¡ !H‚Ç^9œx"Yn•sRÇÔ•ó»ˆj-¼wÅßNƒé ¤ÞyÄþ ¼_fó•º÷VUP2’@(ø}nzå&N—ÒB ¨ZwkùÎåg–]˜›6‹Î6}•”šÔNj¢Œ4BáôF2˜L'½íeŸªu9‰‚-È4¨ÖȾ†² Ð~à• c{áÂ×™r~’Ær0çßÊr!ˆ®¦³æp~Ôæ »5÷ëøŽEƒ­¶±èbÏÏp’s"½r}˜^ç`ÉBLÚáŽõm€û¸ì—²l½°!JGP2ãÕzT¯;^¹–šHhLÊ¢Œ%k2–§äRI÷ø“sówE;0B6ÒÈ ó̹s×Êt*žAçÒÈeóךwDZx€ž¡—·•žòw¬ÙKÒ³ãOöȲ[s3W[só$•ª+"%;ùB Ö\º‹î™yJ1LËá×$À÷ª,‡q~Aº‹4yŠW7é…tAú¬mt]¾.£¨Z zyÛ5ÖÍ+§J(°¬Á>GKX+«ëƬŽ$½R¢økK9a&ßr’h&‡ÎJ,B)Ñ·u´ì¢r˜‰7ç#p§B–àðÒ§¯”'€©“¹8Ã,åF«ÓãÓ’ÖS‰ ÐОAÏK´$$ºà9‰B‰¶}¯µæ®ZžaFÆíaG0ÍÝî{² ¬‰îŒÃômƒGŒ4DÑ9«çmX¸:b•L§ÐùÂ’ÝG=P»~Dä…Úõ^µB{wEêUزÎö2€Ìë:S1÷o|­Ô4N¥þKfÆ-ý$cFAAâWIÅÀÙ‹;èÊ”ÏÒ$Ý­U×Ôº‹³r@°__"Ç ¥“ihÆð4‰ó‹&“rw{Ùbõ¹M+—–Riߎ±­þ]lW)›¸[µ‡y²×X#7ö*+F³„û¿„C=ª™ÉJ*³q¾¡;j& }ÊØ‘»ØëFPÝ ÉË$ðÛôÈ?ÀÐuðˆ+Ñᕍ†5Gi L0“þÓ_åü .dC¬┫hù—Ùí´½¤|ÄjNzÈ|Žq²7f™àü;ü1_Wnf23toül&S怱2“³œ4Eýy·ìŒ°´ò·ß&ëh*UV¤cé#Õ °íþŽxÔ䦕' ‡T¥eù”¾œO•ÏXô([}нú)kÇôlƒ—¥Ü êš”–H-”&ZÆ™Û--mOT¯½\¸t nŒÍQ¼Ý³ÕéÌê°ÖLêÀêê.‚µ?«ÿ2}äd#¸dBh”4v#§S(ú^h¹ÊEs“/Ý*íËÜõ…h«?7ê¸äfCßèk ÃÁ#¢Ô|‡öd0JÍ7`áÖ˜Õº›ÆGûIÍoŽb:æsþÎE=.Qï…¶â’£™¿]±M}<ïÐú…¤Œ«¡5ióM#ÍOüêÌ~éÓ0õÙ ¥AtœÔ~È܉@b7›XÊvíR•°F žnìgö…vEjßÂá¾Ð-3‰¦Ò»œ @–ô1F ì(=¨€\˜i„Å,) ȯ@úþŒU…¬¾‹WZDé 8µ¦œT7“¯7]àä5\ÈÑ| §Ñ”†€C¸#±”šÅ­Ÿw9ÅÍ7£\¼¸áL|M@Põõ©`1ñ†»™ìX%´é ðè öã–g–ol¦aãüb‡'B¸RJ™‘ù€K?.ýãõéÊþêãçë@àp‹d­wxn|ÇZyÛ?cZݦsœÒoÞ¾~'=‘/•Ë£ß5бQrðÔ7ߢÃédi¾v6'j3Yn¦*<dm0ähéÙí›6¯.-:¹—ž§?¼ù™¢¡Cè ¦E„„Ï™Eƒ¥ mQëó×­Ø` ›b3èIw;®"ë0@£ fôÃýŽZ`F7²úÙt Æ [$tKoÿ=ÒXSŽNìÝrY‰Q+9ÊDý!fT§çd¤¡uN(=ÔÖÉÎ`„TGCz‡ knÌŒ¸¢äÛÉ»ènzÄRdÉ{—FtCž\Aç ,%e²ãŒz~ìPt‰ î`Z›|+²Ô3Þáüš™Äs~ÎL+])=üÜ¢—Pgª¡M?#Ü…,¯Ø-yƒ3ê yD3”ûN2ójËl¾LÒ§÷“6à-—ÍÙ—üŸä|ÐcN:Úí`%šš|]q`*†V<¹¡IÿÕÎb8Øί›|½ ÆTl¾Ÿ¦çœNsN—”’”áÃâ©2Ð1L™”¢vnp&!ò¤?¼v¡\®ð×~E8zå.‚Œ³\Ÿ\¼ž®§',ù®ý§Ã\tÄ/c£FçÜü D5&“£`¡'G­¹1jÀã¤"{‡M2h<¯îÉ ï‹~Jl¶cc UC“™Äñdn¥S©nÎÓZ hüW[à˜èͼô/—V ç¼r`<_ .ï+áø€è¿›%y‰ÔGR µð ÜLºlõOŸ“º°'örUO Y6•Ë••ôù81?$c†TÑMK»Î°Äy÷@²(^%£D4£§™¥ÔEžKç¦Òr‰•j³S²3 "ă)zb‘ãÕt¥/»QÑL­+NhŽ©öô.Äe%‰äÀe}‘ÕÎÔÖáSìø¶c ÆX{Õú'W›)r>¶\†py©Wn+¥Z7È#‡±‰?”ËW8ë•kdw›žSÚ°ÊÛÎW€‹æ<Bg-åXùHù ;ÖÚ#Ó®#ì…¦®0q=LWÞg]”Ú¬ý Àþ¯¥H=¦}‘™=Ð>ˆ«.bÉ@mÏÀ:&³}»'»Ôò:î²ûO›éuß‚ú-Z@ÿ+Sú¬»{zéšCÇNÍT<š‡}ØË0ŸF&/H¡s2Xc­I‰–õÄQ±é‹iªBÚ!mŠÐw±ùî†Ô\wSÛ€äÐ ¾‚”øõ®äað®Þn)¤º?ªsCYZ1Û]…Û€[wÇ8ÇÈ…âdù5à¬5·‡a"§9½nÍ!ƒÕ؉ ÕëÂ÷´ÿwÖMËÉPtÜ\ødŒ”Ÿzå÷~4ù‚T^Wë6m°ûÃàÌij˜ ’ÌN—t;vÌDÀâè•›9ÎZ^,)M˜¬þtí7Ÿ@¼ûBjü™ïƒt~·[µ›Õc¯B"éèõ´–~dfäªN¨£BÞŽ¡l=B›ø5LW°\vÉfšÆùMüý¥5&–Q©¿AœjV¦¤bw y× ïFÞ G™ýMR;´º×ýí{CKè0n§ìea}“iˆaõ;U>7cnü¼Ú?sÔ2ù( T­\ŽâÄâ” ¡p>(Ñõpµ¶(¢¼ÜébÅA¼êäeÅéÖ\ þç‹vóG¼Ýè:^y[sÁ8xåŽ(—Ws~ë‹¢¾Y‚vÓt8J€ôÙË á'Í«ts¿•ƒ­ è²,‰Jؽä˜änâÌnUê.6DjÂ.7G[VG飼ý"»h‡a-nÅyý–ÑUÉYiKöÆb)¡ÉI)’¨¸Å¿‘XSM?ªÔLJM¢IIÔ’0!f”y\vBže9]}y÷HMhвå!Æ ½ñ}·t$Œý…þ¾V©U–®OêÜôÊP ]Ùuð‰ÝE ž›~1õw3]j3Áx2!´™¼ ¬h¥™>áôïÊ.-mC¹‰$Ìòe$\?”Î Èìqh›ž!S:\›dg:ægdQàÐW¦Ïpî»]@ÇÉoŠœè:¸†Ñɰ78çžœ¼«c‘’ÔÅ«g`§†$­R}¾â¥ô5Œ£®-õ^•2פ\~_Ò×ÔX·ÎŠ|ª.T9Ê6=' +µ‚Q+4vûúÓˆï(W”Étd²ìag"xwT‚§è$ %U Š›™rþÐLJ”ºì)øçÇH!~-‘"àVö»v-­-°òˆª•w%³‚\.OXXE øb ’î¨Ö‰]£Ú"ûð&ÁÝBþê(ùZQê•eÉÃîD“Wëg&ާ`Êî!°¢ø~Cögļ:ÀÍù 9¸¢µps3 2“E%@ÿ¥\†œ°…WnÚ?ƒÜ ýýZg~Κ#±at->¹ƒP‰'¿Ys—Ñl¹®ˆ°üEeÉ.:LkÇU©v;ëÈŸÍ0ùŠwÙ{ønMk€ŽÖ׆rãê¨ØHp±ðþ0®;/ê’>ˆ^k´ MäàJžG!C£ƒÑÇw‚¯ã«P9 È#4:ä(Æ€Îðïø|EÍŸUÖ/çfR O/K¡ã"ˆ’ßM=Vˆá…o‘Ù$ò}ÿ².•´%_°‹ž±˜à˜±àPÞ0œâ—e0:ÝÊeàDÌæåD ¡!‚¯H®ºvûZ/ðºÈ߈6Ö A6 ¢Z\±Ò£º¿½Rˆß·Ì¢³è(æ+õ§ƒ¿ØÃæ;oþ4iú8!ߢ¥V‡3&_3 *ZèWµhºã²:Œ¼¸ ošþ#Þm‰¿U8Ô±ùqQ:À2"ó@Ú-ylœ æž(O3-169Y ¥û—)6ºr9ðaÆP$Éx‹_|œ½L‘ÕÂ(ˆþŒ“МárgEOÒæ[÷K^Yôqð¶•×ÄP—¨qÅ QGD„~ ¶4ò3IíÄ„Tù@£kò'`~µÒHº©«/ïÅžÃÍJ»pIŒTQ³b'fH †ÄýMôeÁ?-‘bÒã­ö‰F—|‘²šñ;ShJ MÎØÌ$çz†heĤÍM^D¥¨>ãF †``|Ì—N°ÇÅž{˜;çVv e„5—yê¶qUkDËÇLô. ]0“MÑ{»BG¦kж#ငµ„í±ùf‚ áJ’É´0&&a•fÇ­<`La-Ô¬E×-½^çæ7%›ÓcOÆCÂ÷LDdûå` ò†iz°æz¤ŽÞÕ–#ˆ$Š&´å|»,/àœZs_1‚ãÎþGÿ²åsÖIíbβ[˜·4f^¬†›£÷uýò¤UfC€2'ŒJý‡}ÊܙۆÇŒE47054uú¦¨*¬Û°µä½ãŠJ©Ù¼ƒÒ¡Ÿ O_EMÑòAI½,ú³(¸—ñ^G|úem w‚ž)ÞyXòÈŒ)û¨€=(f£ 7FyAÌò:k ;ÈU¢^O°—‹»ö¥³µ|¯©ÆÒÀ#@eŒƒ„B‹]„ß(—·:ÃÒo6F©#úÈò@jŒ^¶¡h à› Ñ(^A«Å!¿ÃäM!¸Öm“§HÎöÿÒdÒ;Ëqü–(‡ãÌûÀvŠ­{û"Tßx+hô¢ìÖ3Y)I«“Àf}Ž«©q‰_ð `¢G%Ǩ¿ãõBÁk õ¨Xsµ"J9Óð VŠž*jEM/*Ú‚è&Öý(Ò>8éøPÝÁá¢×¹ÔØ^F7Ñó{ÖX%·c®1“éœ"МéÜØ¶YŸ¼ÝUHh)Œ¥Õ• ;)øŠ­hÌ×DQ®åËÍ }h]˜”$±šJ+ýäIh_:®„Þ£K“ÓhºÄ–hÖ§çY¯~tKiÝLqï¤tD¹9& FÉ8‚·C¹ù¹Õaÿ7ì‚Ìyˆløž¡§·—ž£9ñ+cÀš)Ý!ƒ}\Ê"ŠUXƒrVßÍeõõ,ëšve^úrã:m†%mŽ¡ÕA k»{íZCM›¿tfVèÆˆTÚ¶~ÍÇ›¦îkjOGÌ š,„Œ¥í¥¨$mÈäøÅÆéÚ%i‰ë ¥Ê2 í5/vˆËé'—$¦‡éËÇ.G4$u^ý^òUb‹Ù«?žÛÉ"wz.cªWï·í©Ë<=ÔýLØÇl·¾}ø¢ï,>ðüÊM» ûV¾bT´J™^ç0sâ$ÍBJü†ÃI{Òç²8"¢mdë÷(9÷ä)S]í¿2¤ÍoÎfš/L' i!]·luvBNÒp$%ŽúÍ+–­š±%Èø!}÷£°ÑÙ‘)`ísh›ø×(º¿ˆ‘«l.é~"®ýþƒ\¸‰Ã76¬7Øa—÷·ŒÚ/NIºÇdª¸‡š‰†åŽ3 ÓT<7’›=®è°#KÝMNÏ…ç/0°O ˜Oœñáp:—bE 8bÐXZ¨êÊßD1x(Š‘Î73Rf:GY5êø'( ØräPhQíù7þöœ‡˜|—‚G@ƒ¨û…DOO±é €ËL¬éË×Ä«iÙ tƒD7rGF4à âìÊ»Ši}”÷æ˜0“‘ð¢Í™ÙÛVfS)‹.KK[¸2rHeeùy§ï±d¯àŸ (—>ZVm|i70Vë%ˆ^FøOˆÃvrV–ÿí¯x RÄçE)b‘"v e¹JT'¥ÎÏ‚‘;ÚÒ±ÍϦ¨ãµ{HP¨dÛ=ܨôÑÒób'?·º·,'W®Ûˤ=DÜVe*eÁæ¨_X}Õ]ÖØÍg`.OøÛµ¢²“v„–Åf,0ˆ¨‚Òf²Ø/6).%*ÙîÈÅ_Q›s€Ö—”‘€«9iHüïд¸v¸:Ç6ÖÜß¡I3§®JcG˜þ£õÙJ6îØ˜?kǤñ³B§<”8eþiG‰HÏÛ¬±RÜÎãGì”^‰ÕÒáK+K#qa<ž6WôÞ§Ñ4~©yÙ¼s6„PiîG¡áŽÌÎ7ròŽ JKYÞP´ußÎÂ㔽+±)ÚÒDVz¶:Ƕý`n£Ç íëXÈ&º¤ËíˆJ^,Κhÿ2ËúªÐùZe €y-8+PŽ+ÒwÚÍÔ•îWTUF!ã]Z€úôµHÎÑJ€kÏ O¥ó%:#%IMKR¶^Ôzƈǵ^Ãl¦ƒ½LR$ö*VÆqŽH%sF]EŠ#º[@™.x³»Hý¼Ñ5¯TlìÎ]P;w›mñ·Ì òs)ß§½ÖÁÍŸàp‡‹`°\±Ã5LC0ã?ØíQ`Jñ7$FÀœ/ñò¾Ý> Lçõ§…Êœ¤BÇãËSž—TÔ›+’cü¿Ü=öå­Ï{`\º9ÿÖo¢û–Í©Ò3Ši4d\«º¨%–Oq^‘Vxõ’8ï"»Ä¹ jŸÿwj_¼Ÿî§[«À H‹jŽÝ3W õÌLV£ ‡Ðwç8m5¨JlZ²¢ÙyÉi³…ñÅæ»yõfº<.cQö˜QI›Wj¤¥–'ôôP“mMË2nÕ¦%¦Ä”4¹P©‘5'pÁë98ëf`Àa¢æs Á|ŒG¡"˜OåÀ¹x ØÕOþ ÿ3´'vû8% ±Š Kó(‰9?¹€=(ô¼é 6t%Ž¥ÌKÏ^ÓÒïSÑõ4/aY\F´%Ê2‡bÏûþm¾É®pì`üŠ%´pÚÏfÂêÊÔl01ÎóPØÀ„`)Ç+$†´¾ú0Mˆ¯0âFÖçO{b-¹Ì‚ôE,íÂNƒ„'Otí½7iM ì­øh9Ï %ñkàZˆRÐ ›Èñ€½D§5YTsÊñ^5„ä¨Å_ê:sž¯ëH/(ìxÌÌŠtt-T±Ûà¹0&Õ‡¢C‰”·‹æ@Q¹¬¼­N@Ê—%¸>ø€€x)<:d·3?5~:!›¿}öÄÁh÷39ÏzTvoÀyåÂx ¶ ¦cªâ`'VÀ×ʃ/w1Æ®P”cÁÍYs•3êŒùyq94›®F¹‘³`†x˜$ˬÌYÁUU[–Xs¥WFÞ¡–ÙyËÉÓ];Bx:ˉ4W]+—Ù÷Ø¢GÁQ~Æ•:€6“î!«ñØ¿çôvÑ‘O´×À£gŒüEfÀŸ"è vž!q*0¾¬!hw S¾ äaŒ–Ô¿Òé¼ “ýè$ÎñÜÃ:³UÆ.r‘hA'`Ž0R¢L€AH‘n«R2×H?2zGIQ/Å–\Ù*QÆÉq6ÅD»ÊÕÇD„Ì…ß*‘ÜÔCÝ׬+NoXsT‘7Z$6ÿØ .€M’„å§D÷æ8êûd›I-ø¥m]ã\'½+œ‡ÿA3!QÑ€8¾}Nÿ9ØwÌÆ-F¤£hÜU³™â%ñ çð¡|ìûEć¸ówfârQ«“O&¾»0`}m¾–Õ.×TéÛ… ¬-l:òÄà5±—°©áê¸NEV³—¥¦I7îÙXT÷¨Âæ‹‚®[eÂ…Ý[ÑÃ…$€ÒÉÉQ.úìÓ'‰ú0Â{¥"5 ÏI݆ H!>\ñ~Ó…š¨”˨og‘ToÛíêHQéÉú°3í÷]ZQ|>ESœðÊ­Ú½¿™B’ߥg”L;o*:u*6JLx&XÔ²p¢¤¸³¢Q‹ãPÂó}è‚ý:àJ ‹O|œA>ŤJTw@WW¥Û÷ªúk^¹àhP[ÁKéÊüŸ›€éñÊ+ÖAaÄlžÔå¬ryyþeöÞF±êÖ-ù[‹\¾½pP’=É HAbAü¼)R ežÚy¸E>N;WZqFvDüD& 9±£ ÒÿN,H-´d7žÎ3­ü,½R?‡Z¦Ð:¼Š {ÐІWUò)°“é•ê¼™«¢GÓnù—„õ~Â<ïNA+ƒþ œFÓÄ´4ˆÎžA£(ž–šÈb[©^‰>~ ñ¡›PAáÒڂصÁøç»š*µEcˆº&€Á qb-QÒÄX‹.S9ÂY´>'§pyVâ2³±â5Í¢…3æÅfÌÏ2z(‡o³Ú¬ÙVÕžónì%ÇÛzŒsÛàÚ ð£Ì ™&TGÚŠï“ÜP ­uˆ0ÖRQ¹;(œbÉrÐ4QaÅÙÏÐWÔDî„´âІèäã=‘£ü Ž T•FnˆAñi9’ï4~Ò'õݵÉsŠ29Ú¸¾'m  {<òÂïIíUß“úV}Oê[õ=©ýï¾'µã÷¤ØâþS(üŸ¿'µW}Oêû7ߓګ¾'õýË÷¤ŽËÎrl7Û¡([ Éd(D1Ý!¾ûuSeMvôsel¢ðëH¦ãÂð‰šìçªÉ‚×öÊ À:Ø")ͩҔªÿé`ÏF×Áž ÿå`Ïçt_ÕÎ÷ùÛSEy öˆCF;wi8yU8*»=1ÐX1–ï‡ì{‚4vöüË~Ï Z‰cì&wÆ:1ÊÁ- í, ã)‹Fâl—Í'Ex'*Ùlÿ…•MÏÇ@é.Ì ¨°¸Ê‰Ö 6_-žÚÊq\­ar +s–z%}.j.0è"0è&ªmž¯n8s ¿¯0?ç\ýíaÎf¿è)aË ˆÖ k[¶e­AçØ†¶[TÿÄW®HÄ ^9ËC7|T¹Ë–µ»gÕÙ#F«WEY7øÞ+w%^Ø |õs»¾Cß›-Cþ¥¨²à«—P¬ñt¬¢–.Ò†Èóç:MGþÒhúcÝÐɾ–fò{dtÚüL¤·Ã ž$u}ümÎuº7;ŠáEÝàÅÅõÿ;Åu›‰ ºî4ù;ºVÒ½Myp%Ýó躹¹“ÊáETÚ¾aSIÑk›? £æ8Ùe„§þô¯ö3ñXž”t_CVxc´—½ò€îÎC~0o€@޾ðÊ/*[°ÊÌoÎ!8—Ñ]í)ÂN»”˜¤ ÿáÀ˜ÌyiXVËb´{]oIü{Å{1ÿ”†ì¸^ñ+¬"‰Ð¿h<–âÒŽÄGØÎ|7«à9N³Ê›|§Aºv…?£âÐ¥´PëÿfG]Gc÷V/BLø¯p”{ÒúŽRý¢Ç›Ö+óÌÞž·9S£ÄnÔjº™#W»×Èp¯i«iswg j±ÙÝ=þúËg endstream endobj 1048 0 obj <> stream xÚkHÿÿaÿ÷ûìÿßÀ0l“ÙZpI à endstream endobj 1050 0 obj <> stream xÚå|w|Seû÷ !É¡`ÐÆu$e*‚$ ˆàA´²g¥i ¥ƒ––RhÓÝæNGº -´ŒB ³ ‘! )CP”¥Vp€<wàTÎ{]wÒŠãçó{Ÿ÷÷~Þ?^õ¹Ÿôäœ{\ã{Í ×¶-'‘HÔïM3nò´Þ>A!>Aóý—D…øÃ/F9Ÿu>G:hœΩ•8½Û8½¥NuÛ^¤ömžòŸíü̃û²ç8NòqGÛ”>ñ¬ÇŒ]áãÄ/:tÇ+Ezpò6œ„Sr*îÎ[òšäý?¬óæ‚Ðùþcø‡DEÆ ì«ëÛ¾^ºÌ»õïù1ÞヂƒÂ¼ßéë=>48¸Ç¸0ÿïQ¡!‘ÞKCø/ñžä¿dq„w¨ÁÛ_‡F…xZâïï=1Ô=o‰?LççáñªÇèñ>Þ/Œöñ_2/Ø{üÒùÁA~-ßöòŽŠ „9B"_ò_æçâ=/d÷¸QðÐï‹¶Üß×cÄÿy‘þ \âw£B—ø{¿öêË/ãT¼Ò7ÂÐ7Ä?²—ÇD˜Õ{@¿~º>8êÙ8ƒØø ³qŽýû±±ü™6ã8ø§ 'çÚq\{®÷º#÷8÷ç ’SsOq¸Îœ÷4ÿYî9NÃi9o®+×ëÎõàzrÏs/p½¸¹Þ\î%®/÷2×ëÏ àtœžÈ â^ásC¸W¹¡ÜkÜpî î-n7’{›ÅæÞáÆpïrïq>ÜûÜXn7žû€›ÀMä&q“¹)ÜTn7›ÁÍäfsA\g䊸Jn§üœü+ù×ò&ùІv£Ûk7¡Ýœv§Úö˜â1ÕcšÇt)H üġ܌å*$>’RÉ6 ÚÔ´ùEª–¾'½Þv½ìUyùOŠ…|7~U»yO{Œó¨ó¸Õ¾OûEít¸õXr†òJÇÛß|ÂáiWéU_ªŸz¦Ó°Î³½=}噯ŸüÜ—«6¶Ë«Ý^êÚã½I=öô¸Øóàó;_ðèÕ¡WÒ‹OôVõñéóÓK‘}o¼üF¿Æþ‡ÌÐÕê÷,ôÞ+^iüÅ«]†~6¬ÃpÕðÞ¯z=üò7¾|³ä­¼·¶¿åñÚˆÙ#68ööÄQæÑ»Ç”¼»ð½ ŸÇÊÆÞ?¯Ùç¼±_c÷}Ò}Î[j:\Èà²J_øLsño™àM?d‘æ™0 þ†S ½Nd̓{FíL¿?¶9]®Ž&Üu~-iº+¥Ýï÷TG„,›¬%o[óuyÃ,ý3£Ì)Yɤ€då› 3­äh1å ®Z·ÿQȚ͔fAR±iSyù¦Må!!!åöøÍtþæ†Íôź5›%‡?¢^U¿¤«¤Î·/©l»¼×º1qêÄ…&-[Rô¡f’M=eË„c—vÒ6'ÎÎ^í÷æ¸×‡hV:‡ªcH ™\‘PRJøcEq·—M76¦U~püòN*ûTKòMù¹kŒ[Ö‘JRŸ½ÕÆ Bszõ g_çÉE«dÁó†ÇÏ#¼`:²…WW§¤Ÿ +…};/IwÒ5ñÍbéá‚̼ܬ¼…[…vTCè*øzPÍ–ZQl¶ÚDÎÃÇ!Š÷‘“7Šâ¼Æ9Bû}…¡DËÔôõKR`Lº+Æ è; IÉéIUþ´ !Â*øOð4‹DNj0ˆâ]»æÓéaf8ׯ‰:mû:J(NE_sîT/4LK"sÉŠ¢¸²•ä~\±«bAî»õÄJl…d5±Ï(ªãWg­6¯!|uMneAri˜v!‰]4;:³²ÄN6ðå+ cbâc¢4$|MXö‚9«cª‚‘»rñ–ä½Z±šŠÓy¥/ÚGÇFKhÖ>)ÍrŽV :aˆ">nÙŠ$KR¾–ކËóRòlkŠ‹4TO_Q[×ä¥å'h…‘ô yAbvRBäÊ8²¹½àUN¥×%´S½ô×ÔÁK£BµD¯¹õ¢xÏÈ­N_“Q’B"ITÀì©q$!397ùhá‘=ä44¼ÞxT@#ŽJì´PJËi„ºØº±¨ ­ •ÇÇEÆ$Xóµ°LÂ]Éá»ÒÃ;þF…ŠûOGKlt³”î¾ÿ´z>~›¼È”ÂS 5ΆIý5êMJW8ϨKȪ”"ãæð ¯áiòrºÏÊiK‡ÌHŒ!|ßúú5j:¶{—6­ùkõyÚîK¯%7#®Ì9"Šß¡Ltµ¿FrÇdòyIð  8nð”ónÆ®BÂ9‘{™ý ŠQWŸFQüÞ×Ó®#Àó§2ªœŸÎKé6ªTÓ[ rTä$>Žc0ÚõÅDäÚ²âo8‡òÓlä`±c Oâ׸ħ8ç÷>Ý|xq l[\HŸ[â^2rkDî)#g¹¹Çq:©‘‹Ò dpXêÛé))$Ê’²×,rÝ0Òé`õ—­6; ¦}&‹…”¥XÞÎZžC.áæ‰Ã©Ž¢=k<}AÇ~¶Iå<æ TG­‰)+©¹'pݧ¼l’—aÉÈÍÈMÉ'y|ÅúÚ³µû—ôÖ÷"§ŽÇ¿ù–¬×ó±3ÉxžìÏÜ¢¡#ä[vg­êNñ‚/Ì•)9q™ ËG._>JNöœ:™“Ãÿò“Lå<|pÇNrާœnç«A:jÈ8-c7µo¡±5ž gE®91V7@vý7*']ü¹ÞÈ¿ç› á¢ø¡]²Úèp| Šv¤_ ²ðv“ÏY$+É\MŠ ¯ºsøóXA&x  ÔN#‰ëâW'X㊢ µ,ÖïrØQÚþîyÚYK¨dHýøÞ” û¹ %\O«mÈõbtÔÛÀ¨áÚ$Mâ÷ÀB®³µXÀ==埾†{±çS»Nýü¼Þ WD—×dW­Ñ~zªh½† íÒà|d§üh3[-l&*DNòÀMÀÉF!æ„Z‹O‰œ¯NÏS°M=˜î’“} J¸³çñ. î@áp𙋈,hñÅê>P0r>¢XfâPaä„nY+,a•„§s_–“Ùþd®[„¶˜íæÝpÌç {Xm¦-nÑ™‘•AøïO)¬¶5 â#rÌXCOï£]OŒ=ãIÏ|«ºNÏÐÔ}¦¿=NãOâ*V”Æ•,·E~Ù²åÑó¯¦ó=õüékB[í\bHŒIæKéPY]Ú–Ô=Àªó•¤:s[6¿êdr¶Lu}BÊäÔ)Ä@2³ø a›ì@éÖìZÂ;öÏ$îÕ?®¡aë%;/Ñ€KR‘KX> Bâê®FeòÆA‚jû‰ÿymïéB›yÓgøL¨¦¯ƒô ^‰\$üÓHMJþ³@R‘k‡ØÝÇó=ƒg[¹×­¶_¨—Èõw8HQZ~RNÏÅïÏ›øîû#‚û‘×xaUø§>¢ª«WgŸžÕ„S¾ô²%‰â5¨ý¿|¨}yQÎ]ŽÂhÏý[T§èpç5-&LyM˜:ZèÃç%ŸÌ’¦ÃÒWi[ºžWÕÅÉT§–§.Mñ™š/"™1Ùp=ÝDÒµ¦™ÆqISÁø¡ð7ãþ=Ð?tœ(dpį½X•»…AÃSÏÝ'æ}FÇœžuVužÆR9ÊçÎÖ’ÉS|âùà52ŸmÉUd3¿{ËÖ£ªë¯>3ñ@¯cÆ׉.JˆçPø^Ãå¾d”ò2r±²QüÅë;n¹%KyÕ·ó–û’|3“ïÒNŸþxNCŒ¿Gj@hüwë >r‡¬aݹɧ¼0´y®Úwôæï´¤²øôÕÃ|C¨ì¸Å,2“þ徨?ñëir^²ÏÅvÉ8‡ƒîR‹âeÙ>/ãð!á&(/ßkéûh›íûö~r8H@¶‹7p—¿¡¶|‡Šò•÷Ø /jïE»æû¸ÞË*Š †ž‚—(žÐéI|vb^ê/•Ç·r?³¹‰\àéAa.tš,¨Ü=œ>«Y’Õ³É'rÏ9NˆÜcv_Xs—¾}Wrú®ô4¥5„BmÛ¿1Ž‚Ë@S¿»ž§ï†×«~ùó³¼Q{@(þ;ãÍ«®ÿûí{–^–P MRÓÓT!+¶š+WZøæ§….2˜MÕM°w± h¬nû4òΧ…®2«ÅTgEW¤Û>Êï“8ÐãêV/£ùYy«7âô^ýûo”¾ŸÁÚÎ~Ô¨N YÜJÓbk ÌOamXtø ŸF² ÷§"6?M»ÊV¦˜¯‚êÁ9ÞPå¹ûdåÝQUß_RýDåÎSêJ{ùáÃ['¼«!³V„øÞŸ:žÌåg+’óÒóòò³r5;¤Ü\^\‘_Rºj]ICõñäis´™Bæ­ H3*”øóI«Ö”­Óâ KZŸ–“a!60(•Íëÿ†Ê[€ë†íÎö€ë«h­z)IÎCíhdn)h‰@ÒÆ®·B…LØ*ÌU¤=d9Å–ìr@ârDçnŠñ5Šç— :L¡ÅS(Îàáº@ºÎ|Ð\O¶‘­¦78ý¨’R|êû„B}lׄZ˜ï<%[‘fŒøˆn®’…¿/ŠW\Š(ž5rnè_~ƒ·]gFï¨fßgªkýh«mx'È–Žˆª½¼l¼2ýQ5%Õžw¯Ðூ®ƒ¡žèlP ×]ÜcÐøÅƒ5oʃڞ’«îÐçïÿVèX¡ÏÛqëiç:ËAɾ‚ÕÀÛ‚•˜];9^’JóÍ=À»YÞêÝÔÃÎ6`ìá…ö¸›}œ§}3.:“¸E®’ß9¨¯à3hÀ ÊxáÆû Êè|NÀíƒ|äDÈ5a,†.à—(÷'ls^«“Ô59ß­’Òû êŸÈ·»O~›šŸl1’‘ÃF÷…ÝÅ 9×Ym´¡=až)H…§pÞѨßÝш°eú[mÇŽlüø©!‡¬X”’l׃$´÷qXR?LÞ“ppZޝ]èH‘‘Áã'‹â>„©C]ç‘Ík¼Às‹ìˆEtº;¢¸ØÑHi”w3ª_VKî^q*~”Ò‰—ÕÎHEMu/ þL!ô|…Ǧ ]zK·hæ:´Rö ¬ß¿§¬ú=€¦ud{Æ¿`ÿ]èØO©‰Ž^¢/ “´#ɤŒ@/ÿŒªàzZ·•¦Ûƒ«<ï\¡ïVÕW­ªQ½b¤Õô7u?úŽ|gQéGš/ä_U~kG‰\†Å(•H«6è"µCÝÖ®OݶâÇŒ<’i2§“åéI¦Ð<¹ªÖÈävÄÈý›Ýóªcù¨¹ ö¼H®ÚhÜsœPë>[cÞ~ÞPШ‹wŒm\†^ü3”ŽF^mŒ8þuX”—Ï[¹ªAKÛWHVd–¯%¥ŒX,¦õ&°yàÊaà ÍÕæòKIIáÓ'¥Ç B«ÚT`×ïôð©ªÛ¬ºIké9õfª€™žmIäºÀÉ@~a\ïšÑ=a_ àGE;5»äwIP°ˆfæer8¶E/d®!ÍMþ§ˆêØUþ!R˜C³ö›Åè&sñLÄç à€8B„»äªK‹È„Cßó>ó.²‹ìmEwAg+”ß%ÔÒ¤Zúy­¤îGg—+Rçc÷{ª…¡Â›B'!L}À{\£@€'j©¹^qòˆ1?5ò”W ët%( ›²`n m„i‰É6~‰qÿ4Pgî.Â’Ê‹|Pr˜ÒŒ-žo_xI´è”ÉÀǯÐa´3!ráFŽv¹H#§¥=ȶÁë2" îz3]£² m;ó—í±gÆj)°–>¬Ý±fWÖÑàx!Ðs}.•äœÎrQc¾išÉ6ry+žòq¸vü;=½ðÕÿáòý72´\­d÷_dæ´CÎ3UèwÔV©–Ñ^O‰ÜYÄ´]€>ŽïÁì+pX>÷O[Üñ]Ý´@p¶_‘Žu:^µ,z„a|ÂûÈĬٯuøÃÎ}aϧ½l(}L¦.²®˜gÿeçª]0LhW‡0ííÂRF4½0*5ÍS5WlSh×S^ó* ÕM醴øvvs%©EyÉáYêüqmdt:ƒÀí¶H>Ðõ¹ `Ã0°Ô;‡K»þ£ëÉl×í¼Ð)ClΖ¥%¤§e ‚¬3!3´D‰Èó 1àe¤÷ ”бˆUÏ£ql×­¹w+/óÊÉ`Á²«éÁjɯWèÒëRús¿z“­æÌ©S‘‚Jà¦ÎyQ³„øe³øAÔWý7ÞŸI°ËÛîÆÒB¯Zm­ÅaÙÙh†+Ö&—§×€öîAÚþÊÇ î ïkAgVñiLF£~‘á÷§uH•÷ÿÃ[w­vþTý?E0 ƈÜ2¼”¤*Bœú¿<„ÀyEû>u où ÿ<Û·ÜGõ1MA0mDÇ mÄžõÑ,:2?ŽÚ®#Ãr4(JT.6´c׬VŒÂ™šÍ^DÀãº#èü„O÷ÄÜÀO}ñÚwøÌ‡#LäFÁýŸíëëñË‹dKÃBK[£³ƒü}}ºÏñHO¢.ŸÆGŸÂÃ5¢n©ñ4ÃÝ)pÿ}æïàýNÇ ‹N˜µØ ÏâÚÞèB¶ÃíOÔé­à:öMçú åx¿¨¤„Í‘U´¸šî®ö‘ þ^õ­p>T;³Tðžú¢v&‘o*ªùL3¸9YM‡).ÃÉ=ÑÞÝFã¤Ä=]‡Ùï oÉT{™Sì>Eoüês«í(±‘’Ì‚WDËÉ‘Vx 4liy¾d à¢Õ€i<©A¶Ãú݇äÙ·|[@õÌ]ïgùYd^rDy³Z½þ ^ñg)ï˼ñžŒK=Ç^Gå/žRÐéª%û!îà ÿlµ]–Š“Õv¿½É> pN§_a m0Õ€wHøXˆ´Ÿ‚¼8Ùdø†¹Q"÷bâuäÛ¤Â7Mp玀YøÌá˜'ŠuŒñëpKâ!¼$i©Èù9Àé_íºl0jÈü‡(À÷P 4²‡g‡ÍøNñL“!°‚Å/±ÓõfE,º²,)Šñ#WëŽb‡±Ã¿ÎÆ…8]-.Ê„´š!<øÛ`PzžB/eâz0Dš({ÄØjƒñU´“Ü<¸´ùýRPD<9DŬ"—ŸËª!{Ò6bˆf;À+3Á=S/ɪ¦Ë®P¿j)ýz¢žŠO ¶ÖjÖB0Ù^2¼XÍùÙÉ»S÷›vsF¦‰¥ ÒÔ×?P>œ9þY`ê2ˆ)Í7aªqfAZ‘©ˆ”^ܽ¾‘ð{åuþcµÍj†pC©™ `þÖ ÌFôd7à„êæ}cÂ6t’¯]¡÷öJéÌIµåœw» ³À"œ‰ H·<û–lÆQw°C!̹$#·@ä ›ÌÛKUt”†.Ã8h¼â ©]4÷w§÷óÍ®;˜iuº[ÜŽ/’KÒÉ«¼`RmWO Ã43!±ž( WY&»É0£!ãqðÊÃùQ÷åUç$çõç©èu"îÀðƇǭ෉ó½lÍ=ó˜ðÎm28{ËpÀì¡(2üô˜‘;éÞ¥ŸÉ×Ðê’ –b!ìÎ »;˜ÊœÏåáZm£I oΗû‹ÁÌwZm¤N®@ߌgnƒƒ¡¸4Ü »Þ™ h«Â/_FÔx}ßžvý'î•›M‘$’øšç·¨·’:]G¼¿ßy´Ñ4êáû¨VÍ8³Á<ÊÈ9_•¹âbn ^îÆ\i¾º5œ›èBh^äžø@úZ0v}>8A>~Ýؘ´É¸-$,Ã*ÎbÁʉŸnyÙ€ qðñáüÜ33ær¢¤ÁÇ{¸ƒÒ Ïõ4+û5Ödºö°ö°ÀEP¯½ qïe –OÁm{¢V~H@Ç7o•¹}»_˜—‡p% =†2VÇ%ñyîqpþh/ú <Å7JÙYrrH6-ñÙ»lÞ› ðT!\Áù›—ãÜÅ EÀ»Ü˜c¶³V†!K «¾ ²êäã8è¦gˆi‘)œ„“9­6œáDz–—øió¹!W:\Q¨³æ¶Zx 0Ýí·?†‡b5ýv Y$DÖ¿d5šöOŸ£oËÜ[胛Ѣië€1sÖÖÇÑ"8&8óZ÷wø8`OžgP!®³<*(„ÐQ!G€²\)VI',‘Í2*¹Àa r¢ÜýÆÑhGFƒ0·×é¹)`€ýš»•c;®†k°­:GXŠ8˧Q˜ƒ,Á­ÜA¹G¥ïCOì@@†ÜÃyæàBó YŠ_£ÙÿÌ˶žC<Ã\»¾Åc¯3¯#ëÈv“½5šÉɲä䟽K}¨•zÐ>˜q€?ƒhƒ$ÃZžšDâIpÆb á]Ï"/æ²Ò&'LHš_žŸQˆ…Û²S[1ÁSü[y-s×R9œ”A ¯à”¦¦§¤&¿Š5AXÓCè“’”‘D’ù„œT«F”û8äÀ¹±ë!zW IÂäÊûç+%”;!¥œ0YMåpüÕ)AS˜l#×x'Uky6ú\ë:/Êñ¹I®çÆÀsæû“ÔpcI¡cî ¢ç›á9}Ò á¹×užâs¡ïN‰3Lh£n6È“’Hh^ï4ÈóòÈÆ¤<ðþ4 {fns¶¯ò¬½ôÞy:ðKU$ÝMWª…Î —’œ”J¦“¥v²™ì*Ûýùþ‚0X­ª²öZmàÝ`þEOˆkÁà?i×—–£¢wðq¤â£+ÇRGrT`fHûÄ[¨cˆ‡â¯˜¾ 1ÕïÖÒç´ë° o jü÷ I@’óyê£pdÛ‰&7-+Q³$á•~éI™±–”Ó‹rÈ+|ó Y`ŠI_™“”“VÛ“3s„ÞG;†ý,°BœåY½Û§±Ž bn)âãOøås˜ä{€ªÖ ,)›¶¿NuTÙÿ =„¦Ÿ£¿‡IåÁ¡ÀÛ¡ {Ò*IÝUúþ5©³k“:-?);Ñ4gîÒ¹„kìç´m³§±Qû1É ÌÌ ³&–¾lcñæƒì½_è2@è*¨Ï  žÚ£äÀš}_óÊ Éè­FIÏú«4ì‚j?ý™>®&ËÜþºâ6î÷WG£aÑ¢Ø%d2™ø1¡O3V»­lsÃö¬RRK*âJ#yklV2 æâC'kJÀæ"pD€xD ž³ë“A}Y{ ^äñÓ×1$/pž3rö5¯Š[»ºÆv ½)[Šå½œÄ5d/ïœþÏlžT$gd`&f~ÉB2†ÌYêç?wnøxò&¯Ú/t<ÞŸršzRWº—x ê {©5U]/Ó™ HÓõ*;_N¶’]Qä’˜Æ@רfü+a’Úàû óÊ‚÷GWÅï&Gxº&CV”k)¼¼ø;A«dƒ…>Z2Ñ:¹Ê¿Ú¯!â 9G>ª±˜^’o†e·fTQ¡žÆWK~¼@µ_IéìÏ*»®È·fçkKÙ险;,§}w—Wi*ɪxk`^LáÊ2RBÊËH))1®ŽZ¾:<ËŸð¯ô}Kè§õ›¦ˆIOÒÆ)RͦlÍ)¡LNǦMNk©’Ԁͳ“=­U’aÙ)˜QöëèÇ®m¦)›=·œšÿõ›茋«ªîéºEÝwÖ2Ã+‰Ÿ}zº¢ö æ“êÙƒµÂ8a»º0}UF1ÀÈÆ,+Ù†{SlýÒ¢•$œÑÅ¿¿Fußðʦ“ZRY±©†§gõšÕ«KË–­ Ó†“™ËÃâó–Žl¾k0dÜËZ2¹C{:€‰dËŠŠò[Þ6H Y’‘¾Â”`J%øxH u‡–”ZÊŠJÊWnL®'߯’ŸIÃÊ !•¹¥Öb’KrÓ-‰|vRqXå`‡óC |s.HéPQò\“AMXš;Ÿ¡_†ú­¬PÁ"0ŒMõ-­HOÂXæ*ÝqíÑí½áe+5×é3Eñ[°T‹y¡‚ IH›šš ÉIÁZr¤ÊTeÊޤZ&æ³É×àö*ÈAWƒ×õã:.£a>»N¾¾ÃQØp‚¥z{ÙâÆŽv5˜ŠÍ¬ Ôj» kZy féRÙ?£Ù0îè—éÒ>p‹KVE°Á­Û•M[³F.;‘‰Žp(woã¦húÄ-Ïïné.¨œß9T‡—‡—o,‡°­4íò¨ašˆÐˆ­êNSs8@ÃQ‡BäúÛõÙŸMvjV’†Õ @ÉιÄQ‰)™±™XQcN(ƒPö q/L…íÓǦ¶lµžÑqkk%‚›mtíÓy̽Á›·Âoþ› Z…µ¢:§ §kŒ$.;97¡ ~ÕR£¢cBjW®Ñ–‘³ê67lÝx†ÐÀ™Pìk=G¨Ñ¯uÿüG©…)°aå` Ó¨ :¸ŠPÆ®^^…‡C¤Ml¥7 C Ã:÷!æ»Î rSXåF…HÌrLJÖ<ŲMhº€í….CŒÁ¸…í› ±üÙ^àß<‡‘Éyü¦½Ï p¥1&AKwÍÇ\NäŒ,Rj^k.eÞl*u/Ds[qìA”/t¦ž6£¿ÛÖU»µ±Oc³Ììlþ›&Yå–š<»;Íi …ÜŸÌ‘ng÷PËM‹âWYaç F|d bƒX»Ì•{o±Ü#¦CïàùÆ£ÿ–[”Ìr8þÙ(…Ëà¼ßCzÿpAúƒ‹Þ©c[‹Æuš±YFtXóþ‹i¤YÒÉÄOeh!¹qNÄÿ¤O¦Ãéð$2“ô¬‹áÓèîöþ ¥·-+æ  5Ào3†· ÈH*ù€ õ¸ÔIi-ÑV¶?Ð{нÊGuÏ ƒÁ«y˜ˆ=ñS–|Eži"ø­#ÞÑ oÁI©“Ó\èSá&@•©Â>Ó³spb‚X‰ÕT´çÀ®âzxxíRxx$BWêÔ?=\¨àzx’ûáŠoWœÖiÐVbVè Kî°•¸É0)e:RR3`ÃH{Fn+µÂ SÉ®ä;8øíè`bÚ³=.` î®T¡ˆWNqñ¬è\mƆûM†dŒ“°ÇïD¶´3L°¡Nç"ÑÈ „´q­5&;#Ae+s¦å$üΘ¢¼ü­u»ÖÖƒ©.‹+Š,ˆÎ û«À:ÎQ süÕ¤í‰Ü¼|m0 =v€óiŒ¬·ëFóÊ~ 5ÎŽ5’mWiÖUé6:OÝ㤠£]5"÷³EýXÆÚOÔÚ/z£ Æäb8Ë~¯ó× ô1á%Xa?ödcŸS˜(^4ÌeY3L}@8°—á&2¦Ó™ê«† ÝÏwƒgu ¢žç¯•}ûVùºWE'V;e»%/PãUtk.«×oÁRac%¨,Àzp„ ÒCh«!91˜9ÒÿØdX Òáò¢1WÛÝËÆÓw]ž;‡I8VÌÏóËêÔ +Y‰Tä¼þ#–6¿®ø;LØÓŠ #]L9)vµÊ¹”ÜÁH@b²Fë{^®¼3J3;6rˆì+ÙVß°{Ãqò¹ûÆÏ=\Í"dër¡²x†åȰü;ÎÃÙ´o•/3¢ît*ª%5WéRò/DI˜Á †¸ì†Õ(}›Å ßc2`¹‚ĘRãÜ5¢ëH€_±dôf\âÑé ÿ~;íýëöÏ/jaÛLb°µnÅò Þ®9_.>ô¶Ú˜‘úGÐD9+Ö´B£†ux³¸¹@Ýmq1iéñ¬ ô$Ë1ó,±†Ý¯‚²ÿóB羟ÓîÚ Äõ¦ƒ+!øxQëXŽ-;“D¨G€Æß<.¹„éB]Ìi=Äy½þcÅŸö~«£ìr'vÿÞN”Ÿ…R UõEëŠV®ZWUDòI¾ `\»‹‰&…Õ–ÀRkࢼ²–îòu`¿½l1,Ý=O;‹ÌŸ¹ ÅÈJwyW4æÀÉæ%T9UU’ãŸÑ.ç¤{¨F=#k™WY`ÎÕBr36$oH«Ùú×rÈ4Ò§qÀ>`œ]§Y:ÄâKÎó¨Aâ’mµëªÉZr$©x%¥Ôl±dÕfÖ™«‚sfZ§þÍwf¾§%oUŸ_t)hM™KfÌŒ2Lïþ€¤|ÌÇá~ÅÈî_ºÎ¸3¥"Ų̔’[Þ’pþ\/ùö‚t‡óMõÊ´ßÃ…ä#7‡îÖì&ûÖÖïÌ`1p &ït æðèÅIá„K©<®¥–_F=êåÌCLm¥acª†u?–ëD¤(qwÿ>hZ€R¦sëÐ]‡+¯âÌî3rñ,‘›€c –YûâC`¬ÀzÐ,Ø'ú^Bý­ Ýÿi Z‹Ôõ¤¡t¯='›5úfþ!rmj\/¹"W—/„Ñ+ÌÉúõÜ£á+ïŽ_é$EeöY¢ÉJÏJÕ¤šV˜VE$ÀäöŒö¦Ç“1¼0YA–e$­Œ7,ò‡€›_<Ýú­°ðŸÝ“f5’wya’bTå;75Ê^ùQξUú¥³«ú£4—2A ¬üõ³‘u’×ú8„iàÍÝÂë ‘¸Úót¬ "r½XÿÆÎ&Œ5 /Û–=.b혹-µ€@ÓB²,fFV`¬È…yQY ¸}6.ÞjNÉ,+,)Ť€¸ê¦ÀeLù³L*ËŸ¦ ´Qæ*Èr½™ëƒ——íPŽkÅhS„)V 2/ù½´ÒÇ}à9pàß+0èy"üéÌøŠUckºõe$K¥²—î²B£—m*¬ŸØdÎÉ,+óR @Çó,¹«ø_¨é_‚ù‘kÜh¢µ˜ž–aš % Þ^¶ýY-›\jZL“y­dù"Í]‡ù¿bû«UV…²„%iøÖòq7O2ÒWÚõ4Hÿ³‘kÈ,8Ýr2?˜{‰;©‹s70åèaó³ÆtÖ…lF Ǿ-¼-‹[€…¬f… _‘äÞôCé|s­÷˜WíÉâ•]Ám–%ßeðzƒy¸# X#1¢A[»Þµ›0ÓvÒÅæp÷nªÓ7.ß8Ÿ¿&¨dX62`u¿1Vêjt…èÕñ¯œÌÝV܈T¹ÁbØ&C`†k&ŒK°Ûh£i½Œñ¥GÖ$ÇÔ î˜ÿù¤ +ˆYíQbØ»‘[S•–;2Tæª*‹§pµ[˜nˆ¶ñ Ëÿý^¨2×Bà»ÁTÞêx†=Òâm¬ HÙ+&8ñ`à_ª’¹»>e­}x £ùž¬®Aä:¹VÀnHF´ÐV¢Á·v}«‡¹›ê1£/^pz[€„ n§ƒcJ¨7`jxåPaÅEgpl® W»{ߟa…P,}?‹*ÏYmédta¯¼K†©ð8/ºÛV5°*Ëï; …ƒ°ñ-['9í)± ¦%‡#Kvi¼H‘‰¿1š#-TL’7ú4Ò20/²*nÏÓÈz¤,b© A$ÌÝJ°m©ÅÓ>­ÓI÷² «d®r,ºŒpX\æ3/[B(`:òå’Ëém|k0¬6F¯L\BV’´,#áCV,Ž‹*Ýñ»=¯öS0`¯“jú Nò™ó=µ;Z`¢ÉøSkòM LË;î„L‡V‚9£m¬¶Ò³›ñ=G%³<}2K6Z?/tÖ•I«Êz 1Z&©|r^ªMCé²¢êâs÷¹^ˆs‰õ÷Û^ñ„_"s™ñSD…­¶¥,ŒÂ&êF^ð’~ãWÚÿøm$‚¬‹¸_¸ƒX<;5+™¤’ÐŒp°Þ“‹âe–-ú•Å븗۬`Z¡l~Zˆz0(ZòÕN)}BX¡~0hÎÃA å­u[~ÚD-ënn‘TÛ›ŽÓv©ó=¬vEd,çíþ„¼çÚ€Î4ðç>ûsC…]{˜”,,™Mž9YæróÚŒºèÌåÅoìøŒ¥Â‘¸ /Ûõïc?ßEÖQ‚ïoÁÿa2Šd<‹’Ü•õ˜ºÞ‰Ã6O”„î˜ôb †Å¨ƒdGUéf^ðÀ¢L?Ú‰ª`ì't¢žB?ø·“€ÿÿ2}Jx’ö×:+ÛR-å© …%B[A#x{SÕPí=*¥ÞZ¥ð•ó¥JÚ¥RR]M;UKéLgŽ:("pþ¼ˆêšÚuµ;v•.X¨†˜Õ“vù<¸s×ÁCsvMšäë;Qóûk7_EIhÝý|_#Þi­äþ‚èó3{• bÚ×GV–hMÏÃÆØ\Ò,Æ<^èÚ<õÿ“wv|©=)¡<=)¥Çè5íH;ÖJ¡£ ¤iGÿUÖR%þ+(kjd“Ì_w_’Ûf0íeŽ@$ô+{ÍÙ®KCô$97%œë¼l„› *I/”E®e-ÐfÌ£‚¶’Sº‰z6{ýß/ øŠÜ»H…iˆÐí¶}"÷–ûo‰È]E¶Os4JÙGg'5q¿ãû$&Èvö9¯`wFz>‰ºÀö'®›ð{†x-Àõ^Ó emÙ´ºÖiþvZ+þÙèZ¦µþÍ´l24Öéî=òšÝ3¼f7‹&î•4ÒDµóyqqiQ~zžQÛü‚<~et|RVb!¨ßEgöu*-—œ­—R­3[½ymÙF|;VkäÂY})&kYær YGÊjwîeFnrî8ã3ÉÛü¸õ ìœb¡ë—úÁêûcÿ“ßH¡\&9N—IÓåjŸýÓ>ùdÿþO>™¶ßÇgÚ4’öe¿#@uw逿ÿ5ºú©¿^+ùë5ö §ú/ˆFßK¨Ç2RÐN]íyã€ÕPÕ"ã wv¹¥ø³ܨmd7ÙdÚÑÒ¬íÎlü¥ætTNûž\Wá×묱ï6ºGuîô¢ø/‡ÃœJu•@Ý¿à ºc~Ðéþ¹$ªo-‰:ZK¢¼ªÈøÇ²è‰Ö²¨ã¯eÑbV \êŽùÜÕ[Ç£ÕÛ,W7Ik MŒKç*Kmá|NÅ¡ŸvîŒ?ÔËNÈ’0µ*Ïø¿_FVšÎrô<¼@§\Pí¥#œO«é”ÿã(˜¥¡?›h×cŸ{i|Š ö:F²ûUìÕ)Özò®ÕØv3…]"‡eä ƒEn ÀeÎ+‡ˆÇÈY]I‚ĺ¼(ÄÕìæ‚xf1îKÉ0XFV%–DÛøhÛâ|BfÇF,Zì—4…èø¿)²{Óúzô"]mU®3‰æq¡+B[éFð™ÿ'4YD"‰8Àíqx­ÈÉoRü3£_ïæÞlvEöhFEéœî*S­Ï‹>íéjD5c¹RuËøçnÔ;ůk›‡¸ËzúÖ²6séÁ{Y‹Í;H=héø®÷¢Wñ#%½«¼'råMÅ?•@‹[K ¬øH ´ø¿QÝn.5ÛÁ-X ¸ôŸ–@Y ´8nìhžù „Ñ‘.’1l‡ÃNA^à{õߦ?‰¥o§Dñˆµ„½@‡þŠXeµekñ¬rÕeãÙ½ËõÿmowÖ+5ˆõJ b{„(´µWŠoi–Ji †¼©>¬ø ¿j/V‚»±æóî-¯ÖØnÚú϶DI\‡‰Ü¸¼ÚTÜ÷•žSÝt>á<¦N `oË¡¸ÿ1“Ÿà›¯ '-5–5k/î,^EŠH^FI‚-17Ö²2?º0|Ù,’mÎ4ó§šÇªiÙMEᣚÌ–“YûòÖñªKyåk¬«H%¤8$oy‘»%lŒ %Q¶(Û¢|?ÂÿØ%‹RSR“Ó’yÕÍk}7 %¡dIòÒø·üÂFAÉÏ”/{Ô<üUywЛ]ìºÖß#™ç¢ õʰÎ6Çýì&xJ‹Í¶ìEÛ-€‹²ÊÊ8å–TÆÔ åf^P}åœÈZD¾ÿ#„qä¤Ô¼ËRm=»>-)'e@®‚¨‚e_j³•n›]õ¦Ö@&, šÂ«~Š+÷­JÂHxrTü(¿…ì˜3ä1ÿCÇœùß>&ï>ç(çX—$œg/)ýŸ0%!$¡ìâ®Bµ®¬·Ð5ó{¬×{0Ó«8?:?Æ¢ Ó'|»˜%F\)* &F‹£ij5zGãî¼yAÕà\ˆ„ PÔ³’}JfšFõÕâøxÂôÃr‘ó5rÕ"7ÑÈÔ´¼ÓÕÈóæ³årp%5Bù/výf¯-+¿`¸!pþ¢Qq_ðQ>c¥´cèýìṗXK§Ÿ7#q,Ưø“Ûñ'‚W·þDR7˜£†ìj-µ¼—à&ôh…ªas^ô4­0U.&µV.à)öª@wöª@WVH{^§o ºZ#&µâ ÐeÖ©sšy ‡¹Åj± FÚZ Î-»>m©mvºOÝß^Õ.žöoÑÉMW&1.é+­ÑåÄœ¸¬¿s@Û4€úI56=ÕÆ/´Ä$¥¹s‡ìǃD‡« ,ÍïÃùS§§·¤í*!„ÝAª[…sböJv\×" ±c«P¥f] £~yç‚ê Îù¸ó8H!€ý†G7\xTR˜S…RøQ‘TŠØ¢À¼¨ü˜õ„Ï$Y$3“Wm0ÒªæqêG·°Å\e®&Õ¤ÞTûÇ-ÐeŠÊ̱ª!i2˜XëpºFu’[¿˜IÞìõú´¢JStz±ûö¥2> stream xÚ[Tÿÿÿþÿÿñ‡†F ò€‘‡I§¤ɦ1* Ê4Ìz› ÿ endstream endobj 1054 0 obj <> stream xÚ•Xy\SWÚ¾rŠX¸F§\=7Ÿc]*nS—Qk]Q¤Vqß &’°¡$aY% û&û¢(ú¶ÓÚÖj­¨·õ³D:¶v´.£=wæ0¿ßÜÐÐYþø¿Kνçž÷=ïû<ïûx˜›Æãñ&­Ü¸vËŽ ÙÁ›6)Ê`ÍÜÀ9ï)å‘Ü£õÌdfŠÉ0c(Cº0"Wf‚›Ù“‡ÞñtôtÚ>ÿ›êïµü)Æ‹Ï]?ö†c=§²ß¼yNãnô{¾…á<ÞÂ)SŸ¡1²2R. Š”(4Ñý<ÿÀÀ«”qzU´T¦Í œïÇ]‹ÞómGÄ*µêØh‘X)Úà/Úä/ QjٻѢ™J…(\"Ë£DÊ(Q¨d§(A-Q©ER•2!N=Ë_*‹V‹´JU¬ˆý«’È%bµ$R” ˆ”¨D™D´nÛÖPÑZ¥B# ŽŽ(ÔÑœ9"‘Z"É4š¸%š©¿R% ˆbç¨äÓÔÜ{sÖ¾:'8hÕš­kü5:(J©EJ4âh¹Úß¹_ŒýØdl6€ÍÅæa¿ÃÞÁ–`K±åØ l%ö¶ [mÀ6bÁØ&l3ö¶ Å`a˜ ÇdX4&Çb L‰Åa‰®[í-ì-ö›¦ÅžòÖñλ¬t)suw•»þÃm€¿ƒÿ->OÆ¿¼!8æ¾Ô½ÍÃÏÃèñŘcZÆŠÇ~å©ç2n߸Ó^ozåxµŽçß7þ;¸ÒËDߣ™IZ“Ý)¬È,M= òŽèÍ)$ò`Ìü“‡SredL’Q|˜BC¹üT1ç•–™q(ÙWÖœS ~ƫ̭ú|™™²ÝãÃé¸m!_fÔgÇøJŒÕìóÊæÜv m€{„Èÿ–ñ½ŽÐkiØOûœ$âk—°CaÖ+Róò2 ®o»‡¦ïÿí‡+¢kõ –ÖâSf`jÉ«¸Ò¯ÚœÐÊl4v»Ÿ/aXýåºí ÏâݸºÓ9dkmnkç‰PgÒŤ¢ 9ZlÊ C£šÚûþ¯N, XÃðísÍgÛcŸO™hˆ ÛdæLÝ¡u:8”¥o$—­¿|çtýKèMî0ò#ÌÕ) dc­­•"ž~ó?y{ÑÊ4e÷Ó4HÀß¶=·€áýôÑ?Ñ>Ðj7±?¼ˆ4¦„ÝØAs2)xGfiXëÆ(i³ÑBu ‰x<ªTB"—Y~HHyÈû‡Y¿œëª¬kDˆ2÷¨¡›ÀmMæN -…ó…DûÎðåk‚¶]¼ÿåg—?íÛµ °©ƒa4Ü@ûüh‡nöF{ˆø;c>+¼'¨1ÖE„Õj°åÀ0è&7ç§t’=æºê š}•aÈ nÀ‰^¨>€'˜ã{NšêjÀ€€õ6 a¸þ QÕl´RUCâÄWÎ[)Fˆ.]EÅ]Ž€zÜ„<šÇHGB™žöiwg¨ÈõëOÝÔS° ¯«6õAAÐÏhòœ5½Æ?{ N„“ûÖS át!:‚_ª8æ òÌG J(ncÛ¸_Þc;ô`76á.c` B‡g`Hàô¥vH¬vŽàÛ¸µÉÜÑ©4ë¨0¸ zàáù)]=æújÀíº>B’ûH7¼ã^6"Ž@vÓ/i\;èÊ3g…_¾“«_¼lÏ\6W SäH¥MìêPw 3&Ђ[›Y[Íz*vC7Ü™ŽcM#·.üÒù‚&š_¦l!k¬­”—†"VÑ>vø{»Ñe'& f ÛæêrÇõŠYT£ÑFµà³‰Å{ÈkŸC§Ýx|ƒ"ÜZ>I˜yœJÌ+L=Aöškk)H ˆ~›±Iš˜‘~0ÔÇHÊ"Hä9‘(¿Do±g»ªªj(}î±´$±Ú‘|( \êª X‡ú&œ3Ðu®¿éÓp=z0ðÞêëÄŒ9ÆLÖiÛ7öåû@‰>¦"ŒœýÞŠáÇck©ÃÉ J_y±¦(1¬Ýg 2ø.x±‘MèÄ—ïuéÎïh…iâê¹äZ\Ÿ˜eM¡ÒKŒ6“ožùhn!È(oIë$Ò74f4¤ÔSÇ ËóJrÝã‹j3KÈʆò6 …"L¸32b/ J±=’“gÿÐÝݶK¼—z‰ž ÃWK±Þ°º£·âXc“•*¯.2}MþbZá@Ž˜†A4ïŽn±»2æN!‡Ĉ-Nl8¢Íæ‘‹v®-0¨âWOuJQ\Î-Câ$çº;g%C1Ü‚ÄÉΕFž:œpTƒí{íRû};1Àø!ƒ ü¯Ûû‡†ktj ˆ™¯jƒÒâ ŠèìËF?„8qÑÂMÁ–ÁÅøƒ«ígúKTÛŠ>(pÀÿ[Uà,¼¢yØFÌ¢9ž À6Ö0 Qð6#~ä,jvùÑøíQ°nvÌ¢†9ñ äûÀpˆ/°Ÿ3ûG–š¯ 4Ø÷XÐrï=CÝlyw2±gx"¦XxBU«RÉcëT--uu-€¥ƒf¼hÞÕçpKºf€«–,ÖàIþX¨C“ñ+³“2#M¶xW[XêÛ˜P£ˆOŠÚðÕ®çÿø#`¦V erô®cFÂÆ¾*¾ÈßY}áØ!13j|óu⸾€¹×\™£ÂVmA,`Ä‚–Ê‚V®IQ¡ø#)ŠÃÔïm.lç7Š3'“¡ÄTfµPCbA¬6+Æ–ÛŽEÙ%äã'øYù†cååäqK‘¥ˆºKøC~ÿ:{$ìkhŸž\{20a2qޱ±Žè ¤êU9ÐÃ_)1Ä(@SRÜq9©ˆ;¬×PÄwÕ™:³ž”;òcËba·@ªc׿pq·r=:¹@JÁ¥âÜí¶¾.[QòV€”‚D£.+ÖWÚh´€ÃÓ’†§Ýnïë¬<6|÷ä⿵qèí¬‰pÄq8ææƒŸ¨ÅwGlšü ê'üûžà=l§Ó¤áiGô÷ FÂYƒÄo˜4ÎOïÀÇ¢°ðTU ¦ÕÓK¤\Üޏ[(âDÇQ6Ši¸ÅQ>åÂÎæmÓÕ•ÙDB—Ÿÿ'°¶ço Ùbµü»>j@ðÑ…þO®^X·¼–>wÛáÂÁ`û {+ 0âO¦ò±°[iJKS˜v>LËÄ}Lk:ÙÉt,½–:\«·¥–ºϰϺ¬»}¿_~y²J×ű^5¾.ò¯F£‹<ñK†Û®â–F“ª‰²éM‰_â¹!ÈtÐ b­ÍIä•ú¯{(´ >ïX‚á¶K8q»Ó»ý€³¹´„‹œi‡ ³AKe<„Õ‡ÎÌßóAÊŽ \@ˆõI„ïr €"š8Z€Ô½zTk)tæj›)b½óßC,«Õ5úúúë ®¤ÖÓp+ ÝiÞÿÞºq«üVÝ-WF— /KO¥•ðž¸ÂeÖeÖßHJd'Núž9}êò ËEˆÏ/ˬåD+„NR¨3Rã3@SÄ®1‰ø+–,XwfÝ]5ÝâøõYßêï»'bû*UX~µ„5fw+Ü+ƪH2ܤÖPH(ЙÕE¥E ¾ç“Ô‹$sãÏjñ(­¤}¾¦a6MlfÂáDáK4©&¦L·òãÆ•Ôø¢šµwYQ£\­É£´æ´ß7Z·8lgñ€TÉ*•“œ ¦æ8\*¶˜ZË€¼ÿ\N ¶üéÜ«2Vk‡¸òYê}8Jfzã’Ãé‘ÔjÁk¡Øñ!q˜À™–e£ô&#†üÑ¢òÇœa‡ËÈp’°ÊT+Ž4ªµ`›qWz"¹Þt¦Š‚ ÐOà”~×ñêaí®«– Œå-”„ϼ&ùæ›ÁÓ?p™fä4ïºư.[_·NïQTG·ðY›wïÙýÁ¹ÇÞª°ðéìp´þ_ÍÄ‘÷}ÿ§Oïÿ½¬i¥ŽM7‹ÚËl±ÝkgÛP Sì8Ï$)×þ3ØÂ(žw ½8qnÉJƒb±±À ÁkU3R;P>s þ›Î®¢ê6@ìUVmÜ §‘³‡æßá1±ÈCØaNèža ï1–Sð^ÞcÊ™^öœQðj·3:!ÖšÕf¤¦ -›Æ,ã·™­-¾ŽC× Ç&£«²;)H åðÅ%Vc Ù\eî-fo0F~gU~åeId¸Ã‹‘™:¢p§ ¯ÀýP»ÛåGKCÜÙàjqè‚nó%e5¦²ªÞÜYJAx›_;ÒÉ‘êJÌ´Oï¢ó¿ÙXˆÊgÂr~Ù¶Q‡Cz™mH\cHxS¢•kt¤9¿8ï¸/×”X¥ëû;ÂÎ?9ß,Ép³ñµyîŸ9o0¤çô)†-a/>˜¡„YT•ä—à`Œ[¨ÒÓÃä9–cÛ_“oæ>¶ü£žž×rÍæBvTYd.òÇTOøEøOÌe~ endstream endobj 1056 0 obj <> stream xÚk```L6.ØsƒñÁù&àv endstream endobj 1058 0 obj <> stream xÚz\W×þ¬°³«"*ã*Ù1wˆ5±Çƒ1 ‚Il(*ˆ²tXXv)Kï³ôÞ{WĈ[P\Ô$«Qß„41šfúwÆ\òýþ3!ÿ–]æÎ;çžòœçœYajJˆD"KG‡Ýë×9ÍwptT(_^²p›Â3ÄÏM%œÛÌMçžg͇ŽqôÎÊ„{ÁTo&«ÍLŒf¦ýNØøTù‡^ü¤VX-\he¬PXy©ÕÖ‹«C<)Už‹=ø9Á‹ý'/®[hûæÖ ìÖoܺ}ã"µVmå¡TY¹+ÔnÞ~Á‹†7¼U©òwó#øš˜N±€XH,"/K‰eÄrb%ñ ±Šx•°&Vkˆ×‰7ˆµ„ ±ŽXOl l‰MÄfÂŽ°'¶„#±•x“x‹x›ØFl'v;‰]„±›p&öû WâáF$î„‚ð ¼o‡ð%ü"€PD¡"‚ 5B„BK„‰RMxóñ?N„“`HS"‚ø_у1cž˜ø˜¼gò§)2­Ï—’Rr™M$HR$&UK»hlÅ8“qêq_Œw7ÛiV2™?á´9aîb~t✉'&™N²ÄN^?ù‹ýw({ê§ì›R:å{™½ìêTéT‡©¦‘Ój-Í-wYþïsžòqòly/½”>B÷NezÎóÌó…ÏsÈ¥3£°¢¬Ž¼ðæ fìšñtæî™§g‰fÍsÖð«{A#j€7¿ƒ7M¸ÄfYQR~tÊH a#i<«‹Óéýè€VÇà ýUbšMMdbc£äþõlú™,¯e›[4¬'Só«V’53ÅžÖÏ¿–-g~&ËêÙf¯Ý2lI¾ï‹Í ; pÛ`qÞFJË•¶ÈšUl¤[lVF<?ÉíŸãYf³ëü«"jKóÚõ(W¯¯LGúâ"6þè¢ßoLÁ÷Ì—S1¶×ínïÉi9‹¨µ~ÕçÒŽÑÕl Ç_dj6Ô= QEáž.l<íxðÈ;_¶ÃìLÆ<Æw 0Õ`ÑhÌîŠïj5Úw±Ýwº¶wSî1\7KÖÌF Åd¤Šõ÷«e˘À >+wEU¼®¹,ýé7¶»Fnýh¢,‰=;]æÈÙ^åÀÄÇ¿½%5Mª ŽðÚ/§º×¾qvýG;Zµ méÉÝWé÷š>8wXɲA©AIŒk²6*‚öPœ)ŒcªÚ*Ïä×]ƒ%–-$%µ*©TÆ~! óܳE^L»”+§NWë뫤oŽCÉýd»<<“t´Kìõ†s…g/29>Åj)5†¨vÏŠ+ –šCØ{&Ü>ð‘•Eç¥ê‘ªlÓá b º- sŠr*ä™lÓ!„'­§×ëßk’籇}|XŸ¸½]zÂÄuqž.•M 5Qa‘ڂĢDoaâ-qtBT¢FžÌG0éCqjPš]€<Žõ9|˜=œ×”ö^j=2x{TÞr“F4¤³¹teQy Ãý‚šù7Ñ©®¯»`c— §þDÖ¨dcÃSØØXä륈ñ¦11˜/ýôó/§c·Ö0é)Êrzµý ,ÆãoYßíüîØÜd!oÀÓñ$< oÆ›À?V?¿ÒÄl‡™µË¶ûÜ®ÝÿüÌ»'NŸzÛñž¡p1X|m„Hã^#uš …Õ2ãÞ›ÖèFõ©‹=ò;[{± ¡¤.ˆ·y[Ê4ôëÉïÉõl1i$¥ñµ¾ûÌËÐ!;èk7͘LRQíèÃTáwdÎîo-G˜‚P@$eúEó:açp×bƒè{#dM¸Hð“ÁÄ¥?¼°×%ÌϽ¤%1ß­¹ÕéþlRƶa+ë[ÇɸVDß c;uþFûk¼œCw$ÝW/]¿{uÝrdÎyì•å&ç§d#üùÓMâü¤ø²ZŸ›‘ÈÀçnÇfå†WÓ•%eåŒ9hn™ÀyOÙÓ7$…l›—ëþ|CÍzµµ±m…È|•Î /hS¾àH/Yñ;̃—¾ú½ïÚ»û­‹™ðŒôˆfº­ªd€‘”²uþaI± I(5™MRI}öW ›b9¶Ç[€ÿ„© ý²ïá€w~lÝ1BpŸ ç"Yc››ªI@Q‰Ú}6ôÊõ·¾>× «Þaã/}…®–®­*kº3“uÁkßÄÓ—a³ofƒ0G~(cÌY˜ v0Yû`² ÜçLeíþõ¾ •ŸŸGsP뱺–„»MÿcL¸N¸fŽ <©“Üßq=¤ö÷U4©gçèÓsP¤ã¾ˆèdilJX’FY^Öúóe#D6§3ˆzPÎ++ .Ë`ù ˜‡ŸCøàp@•0Õýº‘#8H´`+øxÂc߯ùÀŸÏé¾#AÜ…ŸÃRf0E} D­ÔÃ"[£-,šbNEqy|® buÈ…Ë&ÿ#lñR²Éç`鋿/ÀCeàIçýÞu¢¡©Q[=YÝqt‡,­ÒÓ"xEFµmwYõú†7o÷}wëæ­Ûw Uˆ\ I[ííņj-®„˜&9ÈFðQ]‹8ˆð4p%©HÝEjÙ#‚OðH1 iÿX2R€6AÍý:ÿ…p Iô½D{í£k0Å`ArîCM@»CvÆ)éµkÏÁÀ²ª‚mrËx*?.žÈPíØü§9 ˳ëИ!ÃäâîwoÑ{T³ò²nºö,Nw¡†£pjX'»gßmS…>i8ÝyEÞ»ò>Í^yÍzÛ™=ÿ BÔíµ¡[ÞZ+Ÿ÷xïY|VÁqÙ6G×uˆ:¼Îñt×Å®sÿºe¯SÌ#°­ÝöUˆÚ¶Ê®Ëh¸zýëGW¶òxçt«÷–ˆ ç,dm¼õðRçÁzyf øƒ,<̶1xi›ðd´®]Àü'dq;N°Šðýl„é¼Ux4ŠâeÚ<¢ËÃý:ŸQ®¶h*œÀ¦“k´éü©ŒQî×c€É<€8¿ÿÊ„³ã.Ë®­f#V¿¾9Ú5W2pƒ:þ?áž9#f…Z²„§[-Al$3zÀ|P™Ÿ%ï¿Ï6£ä<÷¶ÊšÒF$˜£Å+ ¢FHã£Ç¶É~zý<ÎË5!ä ‚m ¹¾zèp…$ŒU·–gfåç¢Ö†Žò«tïéuö«7¼ùŠrKî»J&++7§RÞ¤. ôs_õùF0…ÉO‚ÉÀ®÷¼Fw»zx{Qu üFNÈõFJ28)MÅ`-þCŦjä>y -²0áHFí6l̈ûƒ˜‹×µÈ°Šü,6·Ì§ ¢cF¨ç7— BäF"<~rOØ4Úyß.Úú žvÌ……Ÿür¿íºeLxzvtý_054)Æ;5{*q£±Ù,Lc;ìð+O<Æ_9Ñ\SÉ„°šAËÂk’Ú!á°k`såÝkðÆ5ÿkMWµÆmFØl ºšl|û*5‰à²9KY¶egŒsš÷~D# "¼*öÓ 7¬]y Ì§DËP""&".Ä_îU¬Ê‹FTÂ$vSŒ|Åo[a Lù­ç DÙXµ‡ßÝ€r¢Üª_¦7’ñQlz<™ÈG3ÔŒ˜˜â´jVž™^œ™R3Ž©;éGw>ìc¨¥k›ãšÂQUamf‘^˜]“O—Õ61<£2‘msuuÚévö¢nf]9uêâåûv! 0–¹®=0wîÚ“§ÊóZ[+Qi]{‡î1»‚1ç¼ [V_›ƒð— àdŠ>ŽŽÐF«µü(Ï ó:ãÿÄ1 QñZ¹º"º4/CŸWŒ ‰ó²‹r+äϸšè+#xñ–Kkt§«åÏ£ÌX‡]°¸üõì3g©ëשF¹Îø‘Y*ž§yáPÕ¨<~(}³Cð/¶¼y¼*^Wˆ$Ú}òµÍ.ÞZ-‚­ÃÝt®£Hã2²XHþRÆ6’?Þ=váR±òM„5îƒAÜ ÌZ80‹Ç©Z¥¶y Ht›Œæ©™W›€R·É¶A$òOˆL¸m¼LMp: F"…D¿£Ž Ìcæîàýã:#eàö-6zž1ê*1îÁFÁÚ¹ÁU¨%xW-k ©V*CB”ÊêÆÆêêháR ¢Û}`ËË©âî…žÝÈ’½ý‹È•¯&iã÷²õ(3+3«T^«­T©C"}ÞÛ÷cß§—¿FÜòfÉ@º4ÇZ¿ó@Aâs}`ùãF#åÙºÊ8Û!bµ”|†‰0µ!Î*‚¼"ÐUÓÑé鑌>ƒMÏ‘7ªËBÕ!ሊ{ã¶f³ˆš¢ç¾û›} âðx^áÖ°w{×vØ;e:—5¤*?¿»`"HÄm£´¿hÄÙÚI¼/ÃoƒBÚ8Zg¿Îy”ÛJΟ’ŸÜ…ñxñ`=°¡qÏŒ6`|‘…BB`•lŸD4¡<+Hät]’â†a9VŽ’£_ç1rÄ™ ÍQ¾ä9dxê0±Öè€Oå½H6ê¸w(L8¯¯eQ¹1|¼çYÿ'.È¢¸F[—’ÇçÚ^|H—(Ä;?1?Á—X!Ž+ÎHË£K+ k\ñU”,®tèú¤ ¦óT —É‹Êú"N'i­â}€Z!t Ðvò`².(ŽÙŒ]¢=ãžK#cÏ.ƒÂÔlim¬ŠÕÑÛËPM~Ul+ê×I|CY?†Ê6†$§Þ\;H/)ØïÈŒÊU)²¤ñÙ… …tQqnq.“‘ýd^’êûƒHaíQ±½#ÑÃóD‹K]0^xM™NurER{"HâMäRÿƒQîJt$R¨b}ýu!Á õisª† £}ƒ¡Š=Êà‰gè<t%~ 6I¨Î¾Ž³5Åáöë$Úaĸ÷—Iÿeʰ‘wA(Ÿq¸íüÂh|T¦‘ØKŽŽÌ¤7V:Ÿý> 99¥ž‡þ±WQiZ=Ý\˜qŒá²ë$ÕÌxòµöߣ'eleKý•A÷üð¤šþ?ðÉçüW{ ·ˆjïo¸MýÆùÂM$bãl2gž€ÉKaÌÅ‹e§ž»æÅùtœ§¾4”ÉÌÊÊ.“׆U©4áþ¾åøüjÉÇödpFk>–íØ¹m•õ®÷ï~u»ëÓjM)¢¤­îyÚ róªPxå̹+5"ˆÁÛŽ,‡9âs¨- 0 ²˜Šö¬àüHÚ/9 :‰ÄijþvôõàŸ ÃsÄÎ#ïx"›ÄÊÊëZ2š ÓQ)˜‹ùûáÓ¶;™°Ð¬±†JÌ.#4ð±ïÅ×Õp"´;bÇÐ@|Ÿ¨ Gp¨n€È6OæÈnˆÙ‰¶Ç….¥—©ªÎG3Ñدޕ÷°œAÝE-…½ô½¶¸%Lá>víVùPMyÅu²íŽÉ‹žðÕ§é¢ñdL}»ÆÀ˜o¿ d›#[ä¸ÖÆÆñÞã¯oÞ¼ýá û%%¹Ìyš˜Ä_¿u™–pe¤@ô‰ÑÑIH±Ò)F›*H MUÊUåI%ÙÇN¡~ë%’‘TŸ9¨HHæ©ü’jn­ì±ÍC,AXýO5ÈF Ý`2 Ò;óã®¶óÑ ò;ùÝIÛ]|jR`±@þ”¬Œ”å¿wy¨'M©ÅŠ¿…Æôõƒä?w}(‹‘¾Øð»±Û)+IÈ +äýùóýð˜Ê< È¿F¥9™%òܤʠ|[â<<þÌËm{кK÷¶×ÒõY•¹<å8j4ßxÊã÷?ô:îìZÛL«5ñ‘ Y) ¬Â¢¼Â^>×3˜^‚"cã“"åñÙšº&8À‡H2_Õ3z ¥föˆÚxfÿ»ÀîAÁ]‘ÝwïÚë¬x{íšw¶ŸëYÑÌ*[êêP6ÄMnÏúWø"ÿ²Æˆ#ôõÚ÷Žñû…_dÎ.o/AëÁçC’ê{tê­½# ÁÄÈ~A-á"¸ñ²Êè«vo sØŽH¨iИ‘ø)î±EÚŠG‘>¡<ë›îï` Ö—iêèêÊÒ†¡^žÅÅ›öƳF`ŒŠ›”_g[Ënxžˆ.Bæ¬)·.·t+T´•_èc÷Y0’@1UÒ˜ø™f¹ÜéÀ[¯)3!·†äiåÒ²´´r_Zh1ØRÁªš«³‹[óÿqCÄ ¤>èî~h€rƒ ç “e¿bY•oÚT(ÈÜTøŽ¼¾µåÛÏŠýƒ2P¸>=¼eP*ã Pɺ„TTåêÊji¼ZýªçâßÂé˜ÎøO¢vÉ=<|–ìÛ^p_…Ê“’ ‚å˜7 F^©¾½yv^Jm¤aiëgçþO}Ã,üì=ÿV…gÒ[YæÕ‰¢v*´‘ñÒÄ]BÄ@S°ú»Ë`ŠÌóC¹«Ñ)ã•°¢<ø3²41Œ§½Ù-ã&ì¶T4"(#± vðÆxŒ\Çú´••4¡,h‡…°ÎÐ-­,OO/– ìbL˜öðdÕâÒí ÿ‚ä9©³<ÅØ)rYãä~ÐÁ Åßô> ”Æ$e1III‰aòàrM}]eYs§çåyXÎÿNà+ÖX0]÷QAôÃç`ƃü »mëíÝ; [›^[,ï¹vþ£O/m¶úûOçÀfHBdT"¿“?mÅ il¼<¬$¼²:§¤(ÁgOmÅ9¥z6W>ÄùÞ7>⧬â’FµªhÒ'>Þ‡Y'yÖlºÏõëœFA…ͨžOh,G7¦…D'Âf)¯Û`!+g«¼|ÒBÑcÚ¶X5ý:{±Ž8X5ªu´ª—|Ö¼|uùHóêN!çàyçî§'ûÚQé7ÀÙ`qªï;¢>guºÊªš²ÆâÄü” ÔÒr›Í£?8ïéâéÂø©R=S¥Û’#Ù¹°1t†¤òŸ\ØüöÖíK½^p6ˆÉÊÊÉ®|Vv.ýþmžðMûâÑã’ÂÇm¨ŒF*…óëÕ5ì´J„ãHjR÷…ïî<.¥_ï:sã9˜Í¹‡Íñ¸×^]éÑS&V˜T—ƒÎ”œmy—îýxÿ²ÎoÛí`pÞ*Ž‹OLÒÉ…ÇLˆÊ‚G$%}ÖûçyÊ=#Äðê-{V8ËFÑü ieçä´Ëþâÿ ø¦YƒPKóýeÖOüjñ?~õ&"x2\Ht¶{F·µ§S‘#míáêÿ/¤Ü›¤:_¶Žö}=ÜŠ æ?{8œo ¾ÓÑ‘ßØŽ¨}¾ú*¶œêt›ãÕBS[þ—¦Fü'œÊ`Qx&8ü ¨¹Œá½Ï.“Ú˜×qwÔ.í ø’/©-¹,®}÷œ%u ­jHÔ[³Iêñ³² ,ûËÄŠüR¶‰n¨`Ûóø®\|T(&ÍËB¹qQ-ìé…=&\Êð#_±:3#ò8}<#ÏPÎÔ=ÐgTó’e9µã±™ñÒðÂr^îöŒÒêLæô‰›Œ5€g àˆ×£8Úðÿ-Gê—0Ô‹Q“ø(1¨ÅÕ#iyæ 1kØfžó:_ùTÖð®¢<5+5$˜áü.‡TÕ3»P)¿ò‡‹³jæìS)O0ÿ§šóëèv/¡3ÞΗøpæ½xX¼C$ž+€„ÅÇÉ‘ͳU³ ŒÍœ7~×WI‡ÇšT(o“0¿ˆ'áâC$U÷lÆz€ÐÜø&öá‰bå°Xü¹â†Q#¡Å“>œgßµ–™ct¬aUlÕsµÕ#šŽ€*^`Ü-Æ[T’o‘1°-$Ì…nqÕÃc­a+X¸¸½‹z؃7÷‚-ì¡äÿ`ë±w”GbX‚ŸÑqU ‹ Á²î…„ø©83–Maå¬ê•(¢vx¦F¦IÙ¬¼"9µ¶.¬œ<äväPç§Á² “ÅÜÞg19¨‘kF¡ðáB:dF¬­ÇèåÂÄù%lv¾üH«Eø«¿I˜ÜÛ&ŽdcåÞÕl` õÔxGu¡ƒ_^Ù!»:²¼WKà&tŠ«*õeCË?\~ÿÈòõ.Á7q§8T“–>¸<7‘¬Îf+KäCËy#¼Ã¯ Ô+[gÃ4<›Îxº»õg> stream xÚk``ùÿ¿úûïÿÿ·þûÿÿ!àÖ · endstream endobj 1062 0 obj <> stream xÚV PçÞö\éÎk:QïÖhZð¿þ4Xc…M ÑXAöà8¸;áàûávïÞûƒ»ã8þ0ˆ5(ê«5“8k’:5¦?&“¦¶“É·Íâ´ßÒÚtŒÍtwö™ýöýö}÷yÞ÷{÷“qq„D"y*uëëi_ûÑfn³&—)1jtLÆ‹é¢)ŸÍÏ™’W¼JÂÓ1üÜX~fœY³P;"‹{0C8;û‡³¾v‘sBòÙ Œ1ÓŸ¼+{ßL•ÍÇٳĴBBœŸ¿¡„É12yÿzQ´¥êKòzAÑhX“œ,ºR‹O’JÕI:Ƹ0~ öJ/]¼xÙ"—OáŠ)\9…?™ÂUS¸ZÄ%‹§pÉ" KÕ&ƒ~Q_”G§s0o |]PÒ^Ù ýÐs¸á¨»Þ]~ËYB ‰‹Š„kâLpr ÚKúÔÃÕïÁ¯áƒÑ± T-X‡ÐdIä>ï@Ò¿!iÒ—ò¯ÑºƒŠ6öºöXõÛû}VÐSÅ•{W qÙo^PÂésÑÃm”|Ap„=ZÓщ4!¾:_]½%PÛTWsë¡ÎŠƒJ …æmYÏöÆlâ`Ó:X ÙmÛ‡ŒY…U¹P•þ⣵Ô6]òÈ Ö §Ê«Äñç Øá/TðnÚÉ7ZÖvïn³wqA—"ì ûƒ-–n{/Pwï\þB%Ÿ¤?3ÔB-•Ūwî©;v\ w4A_aꌿï¼ò¤g_š*¡Å2.]GYÑ“„Ï@ŠXT~C1€–“W>¿8q@Ô¸,6 ¥–“Ž2‡ÊÁê¶yòFs?\‡kÇÞºÄÍí5°¿XSiÊÆUöµàt¡ed`ÀÚàòŽŽ<Ø›LËž£~…ÚȆc>è€N{؈c$Wìµ³6'.Pà€sscÐÉA!çA¶Šb&ͤ£ÔV¨ YÞÆùr ãjiÆ n5™ÍLDÑlAŠfɃ(‹¿§(ì.9Õ3ØÓoÌQî2j‹UŸ } ù©àHxZ!bk8”ü–’ì»êX‡Ó†ƒÛÝu^–áȰ«Þ bõÖÕí§²…\ÒatèÁ„¹Ûr¿×Ã=¤‚¦)î !QݫۇQ2z-E ù-D#VÁëH‡ÉVò çÉÐ0Öj1ùÎí³—ÿÝûê¾ ¶•% åôÁQï¨ÈÞÙŸÒÂòǰ¸|•`¦pi«Ó±ÌOZFyɨä*R  b™lG)Š¿´!ùýóÞŸ¾¶Ê,<;OW܃│¦ØÔ#H®³Á¾æO~yã@³à†úca솜š|SÒ/¶ÌƒåØkjc9zpGh%zZ~ BŠÓw{{! õu Ö ¥¹ª¨7»£=Že«öÀëêì$ŠIøN`n‘Ú)Ç¿‹Ôº´5éXÆu$k²>*z‚1E-ñݯv|ú»/Sÿ ŸàSR8μ2ð ¤ÂÜ2˜ {Oï|¡ä÷FK»t° ú²RœžâHu´z âP1PU† mÚmÝG(ñÜ­wT0–÷ÖúaJ>±?²£ÎBwOG/œ„Pn“¦¾ªÅÖŠ¬ßíw7ùº[ ÂýŸøC,¸ñ]“ ,^,ŠGñ \qbÖ5ÍÆAœï«#ãþ;ßx¡àNOý»Ø.£ÀŸ xmx×;ýœ‡Z¡S¤¯­å²¨¦Õ{Ê Ð^á(°º , upÇ6ެpÙmN›‹cMज^ð*¯KF-©·ÑØD"¿%Èó¾R°ålTâú³zêåá©uå»jÿ²¾ŽàaÜ¡Z,[àUpïµæQŒ°˜”6¯Îß•ûÁÒG Ñö†©ã¸çø»|Gpéã˜Óoë¨m*†Z¸;Ók WD §?Ú*à±ÕªÀÌUq5ØÛ2ÒZà.Ç­> stream xÚk````bއó  endstream endobj 1066 0 obj <> stream xÚµyy|SeºB9õ;U£sGmª£3ê8 *Š Pd“¥ì;]Ó½IÓ&Mš4ûv’'9ÙÓ&mºÐ}oS¤T”EA`PAÔQ”¹.÷ν2o¼‡ùÌ}OÁQgœßøûãvy?ÉyÏyžçý>ßgKø¼©Sy|>ÿ¶‹²–-\þ›å%’å%yâ*y‰D¼j)·³4qgâ.HIO¤ó"~"cJâpª>eÊ)Ic)Sÿr{üΟßñ?iÔ]<ÿÒMd²ì–;§e¤ÜC^¦ÿ1å^îÊ‚”ûx7Láñy7ñnåÝÉ»›ÿ4=¿ð‡ÚæHóÄK Äy‰¼vöŒY3'û UÆßnÉÈ«ÍÈ*.)/©¬ÌX2##KZ^þÐôU•bIÆ"©Dž¡ˆ«2Ö‰«*ª3¤……d[ª,‘e,ª‹3ÖJ åÊÜ*1—/–T‹«Ÿœ¾8kyÆý‹ÅqUnyF–"¯¼$ÿÛÝ2”%òb"C"ÿ­X•/®”—H%¹’‚ŒU‹ÈCß)ýöþÓ3«Ä¹rqÁµ¹½EÒª"qÆýÅryå“3gr¢ ¹+3ª gHÄò¦¯%R3yøáGâÖÇ&×Ù“ëã“ëï&×9“ëÜ:ëáÉuÖCdyäï±Y•±TžKNð×yägo:ïg¼T‚þ¼{x¿æ=È›É{‚÷$o.oo/“·÷oo1o o)oïyÞrÞ ÞJÞ*^o5o o-oo=oo#oo3o okrcòZˆOKŸ&J"N%?3y39÷®ä5ñ¾äÿš¿„_ÄšR›T•ô‡©“ïIþäù 4 Ø´ŸM;0ýÞégoK)Nù¯Ÿ©Sç¦öÜ4z³üæÓ·ÓžH<*¼uû­o ·=wÛ‡·›nþùÃÿ6óßþzÇì;Ÿ^ /%¾x‰OÖ{_Jz)ñ'!~† °äŸêÝA^ã÷žb3ðÉwpÕO±ÛÈ–Ûº ÔÕ9I&èo²®ÒÉ©lࣷ’0ï¶¶¹ñe¯f¡Ö&jíyÍYËnë=Ã0îÝØý¨ë|üÖ]»Ï}xÕŨ_ÍËšS±}ÃÓ%Oh¶•ÒeP ý£›Q*ëÂ"îxÂ%Tœ/8±æ0ªQS‡žj|ÖŸã+aJ ²mÛÍÛêfW>U0¯&/ç™Ç碨šúÏw_ì8p~àBÓ§Þ¦`¿eÝKD࿳?߉©OùX°/騄ª£úf[£=j‡ZnÚ¶^ï01怣ÖîK°ÉÛË+$ªòôTV…«ðñ›¸Zmˆúi¯YÄÖ&2µ™1ùED´á ÿuÌK·ü»°HVZ)kQvuõ÷v(›eÜvü ~øJÚ{˜·óâ¬Äo„‚Sß¿QÄÝ™¾ r×E‚SÜVºàÃïÄ\qôàÒ7*ùøj,n¯Üàv»¾ûݰ‹m¡ØlŽð|åoð{vÂÛ ƒ}šrÑÀý*4¦RI”hÚiC•ËA »^q@âÎ!'"Òš)/ÍØÒ.JìÑD­q43§èf:¬-˜LšJÄž¼ÚD®siÛ5Aô5A“‚^æ1œ ‘dT馪܆DÁïx(õ—ä(/޾£Ä«Ç*{Ò÷ô}Ü-ø3fñYaoØ"ƒ³9ª('í²yµ‚—¡îáã’Ä áƒW”UZ§Í³£rš²ÛiÂ5ìŠÃ(L8ÇŒ‡i¡½¨„¡ C½¯}‘0R¾îhd—õ<<îF{p‡³ÈYbØáÊvÑvZÉØÐ MÅé°ÎZR¿×8…i‚œo2¯}½Í£ êrSŒñŠÜÍ7ÅIC5äq@8´ŠrÚv‚z»ƒêw„• ¸Âü«7Qv•Ã`3˜b5#ˆµ'²ØŸíp¨(°ù~gÝZà’¡YWó(k¥JR@£*erÚh d«„k—«Úaè\ßq¤ÊM•»õͰ“‹Àuÿ7åôFýàƒ€¡A°ûê JÐê¯ ›¡‚õžf”úæu8ßûcþÅ7”Ði÷9ƒŽFºÛܽ}ÉæR>c!æ:œòoµš,fÄ>Å®¢*+r³×ÒV°98G*ÁAõ¸Ú]ÝùÎ2Æíi¡€ÆæBµnJí¶x {‚p¸áÇñR*ðûÜijÚcF—Ø,ʯõ˜À F-w %ašpÓ®d¸CpµAŒ9ã“i¡§Ç–žËÈTq”Ak Ûƒ=].ÏA_0\ðcø9j`¸«û57 ¸=ŒÈÓBœUà,u*ˆGJ\œ³g6Æá™dlƒÓk'&XÌz±°™”Ål³Ó\4yì~4/¤¬õöø!èó6¹P¿›rã&`3Í”“œV´Ã¹…PAb—Ø…hšJ5]Ç÷“³ÂQ¼Žbš<áL Z{bC ê$TòzZhÄ)™´¬œÖ LHt8„ÑCm‡[÷#‰—*Í,ÈZ@²€ÿWrÇç¥ÎcgŒóùìáÕ*°d'd@¥Î3Äíã¿û~âݤČÄsÂJFÇäÊ`ïcg±³Ö6<õè:xäävèr)‹œVÃT~Ù ƒ±±ÎWmA›_•…*‘äN“êñr7‰‘Sø ªd´Ò‹6³¥Â-³žù] ãØ¡+ñìÏD­ÐfiÖï®z¥Î1%’ö✞N%?1ãBM¼'Œ€ŸfLPiÌÔ‘,HWS´ËáIï#´ X"08Ô6º÷êvJ»¢sý%èƒxÃPû§¯†o…?ÁIíËÃ"Ø´¼89\^R,$G»…½ýÙô"°ÆO¢A|/µ÷àÄÑ}€zwÊ“ª9Ïx³}ü‹ðêSIXlžãû÷ CÆ€ ²óK7€Tms]³±Ž üÀéÏEºm¥é`u˜imwÀŠ4!MSWGKGÜþ*ËKχe²¼ì-JŸYPêÛÑ^Ú*T픚iÜ“H¾vò÷ßÃsßMÂ_â ¯5‹ •Y^;tåüëÏF;6‹@®Þ.Ù€žžj‘QÖj»ê§úâJ"ŸúI`Òj»²‹@é{%bŽ w±÷³³ÖEùX´öŽù˜´4àÿ!]œ„'’…0ëžÒgCøîƒ½/¦«Á$ø²Øg…8ò²ýŒ¢ù‹™ì‚LÒä [r1ýM8:tø¬-lõêaÍj¹i+ì€òvø¼Ðê"¥šÖ4ø,Ž üÄó&‘æåB%›lXeœ§{@ÅÎ.ZcP+uu¤7°û­!SƒªYHjR©íÕ'E»`¼¥oww¼íl¯i|·ñýèˆi"­c¢w·ÕÅ8Ü6;¯RþÑð`}WDZ]±&R Â6oG¨Ôçoe.Iae]î–â<Ù3µ¡¥4¥rZ̳“¦õà@’±ÓSG,Æ—z±q¬¢7Íÿæ ‡¶¾ùö†ã‚£<›Æì§u‡dí (Fâ’üGÙ©ëG¦Ã¾cã1$øœ‡ýx¯º¬ÃÚ–h¤#LÒ%©ŒÍkö“ʃb ‘昦Q.’ØX\†çyŠÎ²Æl`§Bö³0²›s»Èå/ U2ÉV(#È;ë6HžX«Ð“8©æ}|×§ñ¯ÒáøÖõsÛ¸a´DÚƒMÆvK7 ??ò•Hðoþm+tKV­4Ùw¦þà‰ôÝm›ITä_<|¥xá’•Ÿ¤^¿püð0´BÄ å u¨Ì%HÌ>F™ËLy UXÛK4L î9L­-È*$J#X€öNÓÛæëD£øQ*0äÝ 18RÙRacÍÌ»ÑQÜNýôàgùWõ”Mi®"GVý$';ǃ£„C£Äê/»”W>OÃÛ?4àí‰7…²6Egg[[g§¢M–.S(d¢q–ãõqhB‚‰ˆÙ¯Kœ+ƒ–mV‹Ùmð™ÐMÕ;}&"ßäÐZ¤h›GYÊŒ?ù˜©ìAvÓpbÿuSV|´ìsÁöà·„Á±Ð ¤«ˆXHä¢I­Öm–Ój•¢2ö>ªæAãòÚLÅì’ÚZ¨ïî-€tcMÙ¨f\„oxÕËØŽÁJüÉ”düýxãÐç¿¿æÈOÎLFÐ0~œ 0~R®à·xM±²ð¦–™å»`†úúYH›f¤”Ô¨ KÌØ"=¨‹k»5}ÖHigÿêÅñ®X t‚]KÂ(ÒßÜ×­ðWŠÊ`¥8óy”_B©ëj45€Î2ñÓ]Êî3I\⌿|> ÇI‘ˆÿćᅳE¼f)á¼æ­ x¥sÏ;ö—5+ŠÊzÒ°ÙIׇ ÀDƒc(Wþ\8’݆×~„gœûòýºs‚óx~[¸†uÿåã¡Q4†gSïbêÐ@?é¿}¨½³ÚR޶²Ù?ÆÐQ<‹úßïë‡fq·œs9*`gQ‚÷yæ<02¦‹Àa8Ø3xÁ´xuP-–VÖ‚ >ð¬ÝLíÅ‹(ÁyßNO‘ôzE{9,„u+W/`]1¯ÓMRÈ„e²ž%uФB“tÿ–w{œíL4G¼Ôœ¿á0÷ã ªÏ ÞJ<‡oþcôæÔÌdyÈéb‚TÃH`7™¼®kØUÛ~ŒÙfºŽ(Xûšš°á{ð?Áà¯ÿŽÓîl£IØ)Ô|6mËÂÍP útA£»Õß…vãßQþ†]$5[#°Ö”lÏbL>s:{Z¸q±žä«Â"CÙìS”EF+ˆñkúåCð.¼tì÷ÿ‡¡€2•™'ÝÿSJí#ÁšuŸX{& ¿vVX‚µ”ö²~¤J`MVñ·!` ;»»v¶6sîV²Ñ ,M²CʹilnéÝmmíÝs´ûDt¨~†Q·®¹@¢ÖU“ßmdìQ¹¯† 9…O‹7ê4EÛ´R,×ó¢8¦ iì9|ðó¡wÏEEž>Zâßê7 „‘ú–Žžáþ‰HK[ßб¢ÇULêÙ!{V¼±N©QjµÈâ¦Lûuoê^1š,1SMk̹.co”!Ú]‚K¨ºËrÜRXýÏÜÔÉð1Ûøâ–7ðѳ+^OÌÃeø˜pèþì]”±Î`ç>¿0¸Í“Çè6Rh4 Ù~§hڣ㯣SÿgS)·!?¤!mŒ7÷í·Mƒ[Vª3HÈYÌíh=ž}O¥w¶{¸†¢ZüÖF{ˆô±–"ANGeTž¾JÕ[¢Í™Ò)õ~CKÈa~^±Ìeðè–zï@c+-ä aí1ûÕ>5J]ÍêŽ&úÏò2‚÷×·µôãT¼ê‡@ÖNÉ|dNÞ¼’uçÈÄÈÊPV<ÍòÇ |³ö€®uRc.ÑhüFÚg&}omß}½,­¯Ê[’›­%EÕ`õZ|Ê€PM•²¼tÜÔDFåóÇE‚õã9ÙQì}mËÙ4AFbY"K(—ÕY5$B´žm!$¸yk Â+%=úŽeê,¿%è C랦Ð’3r&`ÔÔîc7b-lŒRÊÅÛìZÆBr“3@ûgÛHGcˆ$½.k¿ uÆnØ {1Ïê·0z¯”ؤœ¸Màš §ßÅSðÔC§;z[ZCˆûhÙð ÿ"nOÂoaƒ°š;ÜaWÐ$m[›l€Ú‡†û\šø)•-Ä+°§ãú$Ü“X&TƒšV[4–:“ÖPgÐk [´]í0:¹Tk&äµ ·Æ§ êƒúzSƒ%b‰Ò1boŒiò5ù£ÁH}$Lþ¢(Ôèoô4¹C®vHËéðÑQkÄ6×ëƒ:¿Ö¯aj‰/qƒÕF.ÿaK?ñàù¤ól¦ðÿüÃÅÿ79R·™-å¦Èè;‘‰HW´;¨'OÌÆh<5Y? ¶HSltkû*Q ””š2Y®XÌ.âÆÈZ§ù{yÜMòøÉÕl²}•nžæ!5;§h J0Â_Äù_ŸÇEç’/“À™q=_7ƒKÅÄ )ü³­R3³¯PtÃzÈÙ©!$zµwd´ùML¥¢X¥$µ’ŽÁ"žV_;ÁÃ%°œí"(Z%ŠíÆØG{w¿õ-ŠJí÷Pô¶ûûÑ1ûÅT?k±$Åqm‡¥'í›gÞ<–0‘ÉL]T·M¿±K!òÕ‡ùF[;ôC@é«ñjLê03ÇñÇq¿3i ã%Áï± „†Úšáh æoîüý.¼x7v{þ T3Pt˜’«º=ÕÖ}¿Ô6‘R;7QߎÍï_›¿Á6ËR’CøÉL$t)~jðÈnQí¶.VM†–|$mªíhëlÜ3ÿøüôu£.._¿µ|®ê·h¦¿ãèùIðel†’uæ,E©ÜWÙ7'îHùÕ]<o!÷Íô_ÒàÖÄkB}Cb^C,r9üfCo(™5…oÐ×'æÿí bõiéÓ“ õ)Ó|)ÓãÓã))go<›ò³ôéÉMIû_ 9l endstream endobj 1068 0 obj <> stream xÚkHgPTd(Øÿÿÿ†á8H×ĉ[Šø { endstream endobj 1071 0 obj <> stream xÚ­Xyl#×y3ù8â%ê ‡¤xß7uQÔ±ÒJ¢Äµ(É{kK+í®³:+Ùõ¦Aà5‚¸® ­Ón’6pÒæ¶n¤M`$H ©»Š H‘4HÜü´Nà?b£iŒ¢¦ú½7ÃK« ’´| ç½ï}ß›ßw? Q!=‹„êTöÃïýh(/À÷‰{w¯íéýc˜¿…ù‹7w·v »õW²| hÅ›@àMTÖ߃õÈÍýãgJŸÑ}ÖÿƒÜ;¼¶u÷gG¯#dý—ö·ž¹6л°þ ¬•ƒ­ýÝí|íû°þBÜ6ÒÑ/RE,BôóôEàXVŸÔU”¥f€*±´ŽÕÑ´îY¤04ê|êõªŠÐÉ óÙ“2BÌgÑë­=ºŸþ7ü6†|7 †ygð¼B>IòE $À Ùb)øÐÈpŽ·GOz¥œðÔ#¥e“=?êž_—ͲYòêûX©o8f Î S”J’út@ŠÚ³Ã]<¾Êz¦¹ÛeƒåDõ80ž.¹ÒîÆÖ}ŸOæxNä­œàÎ7ÿ+•6û‚UÝë§—뛬ÄÚöÂîÛœüŒ>Û,€ï°‚ú´âv±T<–ófU§aŸa­ƒàÐæO¹w–½Ó¥KŸñí§ÆçæAª¡Ä9¥ç£©ù9ìb¢jCÙ7{©ñ×ûBHÖoFíI'¬‚0”óSßëá.€_¡ß@c ö-ø¢XÄZh‘æ¦OO2 %ŽT7m·qô³¼‰“dIp•.M_¹çËYjÊ“À`9Áhnþ`²žrr£×~gqf{ZqPÛ'ˆF9ëð-M…Ç÷ο0pþ\²18U«û_̽ïR):·2[Tí|áämúÁÎk`g1Á‹ÛáoÁ`rÙNF„,§9T]ÀÊ$½Z; ãw½ƒÉ`ÔE3Ë»¬ßJ}×é$^byÞØ½õ'«›ÞáŠ=Ã{‡ZÒ‰:QìNÊÏÜóy ,ÏÉ‚Aìq?µzîx=%õ†>ƒÀSï½Ó»MOå6rÏéͬlÔ™Ø~Ñ"Ê¢¦ã'踉ó´rY‡“üž•0ÂÀ«ªqjáÀN$åÂŽ­ñm=üK¡ìee`jÖ=¿DÒå-H—N“ÓöÃrÒliÖÒW¿(°ÏOFƒ‹Ù±4X"Šuà ö„z3¸QK§ŽØPc«ùû­ÄÈ ‚Q†Br;•µ<µøã/O±£ãÇ~÷Ry{biºó+i5/ºNbªº`°]©z@|1ö³õÍ'ÿ¶h3É6[+ â©Ù¡ÕÆù¸¯ÒÈž ¶JýÖ‚*Xœ,š©/³´³fë·9úÍ‚š¡˜e)­÷L4µj°K‡ÚV±ŸmÅÞ'è7+t‡@; 4×àRײð©ˆd°ÓTȰÓö TˆV‡šˆÃ‘~³•ÖiH¡ºM$Ò‰îÀˆ•FãóNOÍ•Ø,–lj_Â)›£”ñ̓ŸSâùN‚ÿ+²¥êt¡éÀÖæ»œf«ÌËÑðØÌÝõêG>%Πݺ;^Þžô凛· Rhu ~~DàžDå±¶Ô/g+sü¾ö•štZ‰k5«¶‹¨*ÉÔŒÕLô¦ˆÀ2´ÅœYKd³!ÿT#ý·à¡($ˆÉiý`9AÕ+3‘ˆs€¥t:FÒ§|Ê@u,è_­~Þ4QMߘdp î­ß7è ŠáªPÓž¾·úvÛ0å²lrâP‰§¾ÁÚx‡ý|‹9É(™ ƒG¢™®„S3>Ky²áòèŒÍïXý‘DÄ0· WxaD–½s…_ø}&WQ'XÝŽÁâceGcÜ4‰ÕÏ{¯\åylÇ,€Uèy´„Qža¥V;mY³X$À5‹b£«M“d†š´a°PË~¿c½O!v3zl"¾øh<ãŠBœCǺ+U&3•Õ…Ì#!qÐÅŠ:ÿåv¦‚%­éèŠ?ï™Ê†V«!F6ÑÇD†!¹fÜ܈K–d¦Ýa¬ÇäÀØ{òUËOÒÖ´ŒÅ€¤%1koynå„ö‰þ÷âï‹]½62½‘q•<#E^vF|£ÙóõðšÒvˆÔ™]]²—ófN¶Š k¯E³+ *çîԼ˳1É.³zÕ!÷Éçæ'ú]otùƧ֢çË!»hÒë8Þ3À,ÎrNíÝÿI—@§¾×<¬q'éo2nšj ¢*Dr É®\ D7b]¨ƒcS¢2UüRšwB…„5½1óZ¹yR˜ÔÜ Ÿ|޾¸ v­°ît[^íÐ]e„T4<õ{œÑ˜_¿[xâ0çkÔ2Û·8Wæ’™+Õ©ÍØî•Q‹c NƒtîxaìÉFz°zب¿²É™DnàÂ3›ÕÑñíÑ+7 pºZuà€ež$Ts¼zQ(–´û*àÂèΪyµZ¶ xŽr8‚‡¿1™,ó&ˆá>SõR1¿‘͇"Ië`¾–þ÷Nt5<ì™J¿¿ßÁš –5©yc ÇB‚Ã-š³šå°2T *ÕS2ç°ŒŽGZnñÁí—jé´Hl«®Ñiú9õ®­6zÎCõÀé÷mí«Uv‹6^✮åÑ[Ùh}îï5̲Ýò×óÕ£½†Ë'¨¿ãm°lUx^dxZ'‰âhH©nM.¯Z0—çnÛu—F`o¸çP¸h9= °ŒOÍ®¢ÖA‚AóU·vÔÛî„3WQò•áæ· ì°½æJ>ÑHäÙm…è5Êjô VK5iñ™J¿«äÔk¡j¶Ï<“täSžø>_jBãÁë=ñüœË-3:k!5èwŠ-¢Û.è+hwÍ$64Ô öt‹LÒ¡ÞÐnWxÒsµr‰}ÅSßô‚l°erõkÉåË——“ÑÙÖs¼1îϯo'ÝÉøŸ‘¸7@züUaÁ¿ÌžË®\pû‡¦Ê>‰ú¤^o²—ú‡,fG¨š ¬Õ†8'rRfÚŸŸðZDk!” áœè7HáŠ7µ8 …¢cYÁ>dÖßѤF¾¾›D«gßàN7#{Oßê\$J=MÊaÿ‡öM 6»¤(yëÀl¸P™Ç«Û¸Aµ{X_6íÍÁÅám«$–Æg­q««ëÒ¶=<7ô ¸ü­f%·ºÙ«ÊlÒ_lþ9¾0|)0’x´îÙØ0³eµö¿MG@¯Gpë©ì}'µµfE*¼‘¶Ÿj…V#ЫƉ-ï’?1é„+›Þ:¬‰›(Ê’KŽå<]550µÚJ‘¨‘•X=û‘žû*4ˆÉ!^ÔÓÌ œÈ茸ü¾êów1ýÜ3SÉ3<§c½fðY§?ïüÿuh6ëPù Õ?þ|êæÿ¥u7ÈÇ,aÅ(1,721GÍ,«Ó›£ŽN³¬ÀP:Š2…†ŠÕÉ@jýÁqL>›&~ŽæM<ÿz=†Ÿÿò³_?ùæÉsy–\‹Ëiÿ Ù?ùf³ÎÜ#'u鋸ÿ!¿Ú‡ÞÁuPý0k9ýõΜ¬Œ.´çÚ™·e¯«4úF¯#=È{&Žh¯õ Òk8f´ýU´DhÏ¢ð™ò‘Sx/ªk: 2Ó(Ìèð½Öu8*¾v²í̱CÆ;xPëÚø <èþöxÆÕÁ\=c¼¢­»NÆ·Ø!v»kÜW7ãyî]~Æ·ùo —µØXBïŸéNùW]›Ð«ˆA”ÿ5{›™Ì)䆕:§‘¤Õ9ƒªèym®CIt_›³è&zW›s(J=¡Íy4Gµø ÿ³6Q˜jñëÑ­hs U ŽÔ¹MÐ/ks™~‰~C›Qž=F³èÝFwÑô$ºo?F x"2¨³Ø=úÚ…Õ":@×­‚¦²ϵ¶ÔYíÂsÎz~w€s¤á« Úé#"»²[hŸðß@O‘ÕxkÞ‹Ç8¼·cf­ZòéÄ)ù_þ.å÷&ÁyøWyÈÛ´3Ày²w@ÿ]ø««e¡4Ü¥2p‡ƒgv®Ãså`”a÷Ð~üOì[ð=úHì?æ¹´CxËÃ<³B´Áçܯª;Xòœy¿¿ŒsŽxûÛcVe7ûTAÛ ¡œ!¿Ó#¬É'!.q|×JÁø-2’À×Ñ ˜;ë]àMµ-Ÿzˆôþ©÷wN8ÚS€{v¤UkÎþcØ‚Çp ¶ènÛÞ{ðÄÞ= 1Œ5} æ;$N°>7 o,Xƒg¼õ çäZÏ q œŽ² àÌ úuíç1ÉÑm@u¬áSÏÜ"¿>ˆ¬ñoæ š!k¼Â8…Ù::¨7à‰×Ó}kð» ëEtŽÈÖ¢@E¨uŽH,’¹º7Oòi]‚ç2ì`|ö. R­s‡¬žËÜ!±pD0Þ!zì[X­ X×]¢á¯oWltØã“#"s ¸®N…dÔÉ­-Qçm‚pŸØ²å‘#Í~;šÿ÷‰.[ðíìã8}šÈ´³è®V pŒ¨˜Ô¬<þ¼š<ÑG€{ö6©¢I‚mžXǰ-_û_æáò; endstream endobj 1072 0 obj <> stream xÚcri`Ig‰u …ø endstream endobj 1075 0 obj <> stream xÚíX{l›Õ?÷~~ÔNã$õg;Çv§+ÓØ±ÓGHHâæÑ¤ ò¹±“0’8sÜÒL¢­DñRSbZÑâ!± ¤MšÐþX'MT¶¿*Á?ìÉ?cXkïwï÷9Oº‰Nëä{õÝ{î¹çœû;{£˜m¡3¤&ZÂ?þÝÝ¿ç|ßš™[ž¾ðлء?fgÓÉT•õÃ#DÆqðb‚Qþ+ãe¬…|Ãì|îdÝ|Ö¯Yãs™©ä…Çô.QÅ'D¦‘ùäÉEe\i rÆ!ï[HΧϟ{û=¬Sؘ Jœ=NF"þ0Ÿ€Ä6³I ³pËŒÜ`4pn8C¾^|$±£õŽö³[ˆòWŒ“W½8’HzãÕìyqU§IXûœ_„·f¢H•¿ªÑ_åŸdçóϰhþ×üâÕX„§ rçߡ˅Ÿq3™ˆ®<}FÞŸ”WØSäý@0Úkw™LÕ錄cѶ`S»ÓéPmœ=øúO¶Y‡Lѳ÷ýá·ç!»?vê’ãî…ÆD£ÝßÞÖU9ИÞën]lÞŸh«©†Ç˜‰ÊÈEd—Ö#a˜3Õ¯¡/9jkjmí÷õ™ÇjUÕëUAê3l)ä¶³´U¿Þšy YC?¡[œÐç\ñ„Š–¾ä(ĸé~‰{Ý9ÛBÖÍ{è²"7d›b±ö &ï2ƒõÄÑ…€ÚxÓÖ §ÕîéÚáªÞbµ[[›ìÁÚÊêî^ÞSL¼|çöæÐ–074ÔŒee‹j—80¾,óJ%b¿K½MÉ$B.£Èågü"Šœ#Ÿ¬†$_Ëç'às0̤°‰ÂÑ"Ÿ[ágXó'øaÔÒNq€>ÔLfx {Wİ)ZEˆÚ`³}§“{îøA¦õÞ~o³j«éö‡ºî¼ÙÂ÷=pj¦søôÐÔ´gÿwó'|½Óîzn¹±Òo5´Úªª·W±±º›'²}}‡wìˆ{Ü¢FÔÂ_ùGðÑI²EÁ!fpW/ŠÏd²lÜÖ+2Ⱦsÿë!‹;þ çvûmÛ:ŒÝzÓ¡£c½ŽºÞ†³O9Cå妃‘ü¼3ïíkÞ½ªƒµ†ú†½¬»Ë±Ë«ÅJ?›Ù¨Œ‰‘½Y¸L"VíÀTC‘Í·¢“7œ9E€¢m2dÚ®— °koÊÔ™þfGÖ¼G^º`j]áƒu¡›0W÷­»<þhó¼9z{‡ïƒ®*ÇÖ2»Ã£Öt6ìuÖmµ¨Õu{C½v_«ù²ÄF®XˆLLGU$zUç@eeæHòÛA£=Q¥¸ûO‹¦nma QÏÎ>ï`bèü2gWÿ8~.ÛíÙsXØ¥ÂßñÖ/£Ý¯ÝR+³9ì§qÌUYé2²vоYÑñ7R”ß ú½='æKõþ²ÐpõmKÜpDV¤.+ô´÷˲ û¯YâÒҚƮà=ÄFnå©¥ì^™?–÷`sû˜¢tƒ4ݯë®Sjÿ¼ñÓd-E¡ÔþŸš¢’úuȔښxeKoïuyJ^f+šԮKSqk‡)K/ÒÏñ¿ý«™®KßvÍî½aúd©ÿ—ú³›ú‹ÿ£ýÓ§ó@©—ú×ÞÛ´ß-” “›þBe~³0“c½E 1ƒô¤ü•RÐŒ|Xi4'Òi…zè6ÐnúNi–ò:m¢]lZ§ÍgOêôÚÉÞ×i äų¬ÔÃêtuò¢ý­Ô!7t9Z1é´ÚŒÏR/eh‘–ñ—òšÁé9 Q+EAõc7þ¥±¤š¢¨npæ0­h-ÉUs¶N`LArÚ9|>JPÚKR7 ú4§¤Æ ‡­$¸ahì–}?NEïU´Q´°V¿yƒ…užoƒüíö2ö]Á‚nµ’èfa)Mûô8µcÜ+ãµónìLcÞKô=Øï?óá‰?‰/'åS›—2÷‚—Á9×ÊÐ!é°³Œìj;Bs60®JŽH»‚+¤z‘Ë$¾âºßf[q™g‘y³q¬’°¾–+²ïƒË_ªŸZ§ŸÓõC²ŽrÙG-è÷ɂԪ‡!`Î@¶ë4d[VrÓr íù §¯ZXï¸ô=fõh÷Iùœ¬ ᬈˆ§Wò1'³––yÔü<:%+Ix3+eˆð0æQyêÂ:ËÃë,ìgc¶g«¼i_YJÎ9y—UNǧÙLÊ1€ÚKÈü'@ûðuK¬ ‰ã0¨qêÛ1‹u7ªs ãÖƒt@ꎂ#jeܸÔ”´¶×'ïÜ݉y;BFØN•¬\Dd²²–$Ƭôc\aíý¾¦¥‡_=®>Ä(³.'KRg RÓúk0'£"î^RV”À¹(ÎËX3²¤Ç/¥ç^ú’Ä·º/êô„Ô]X¹eËú{!jDäÝÚÜ¿‘Õ÷a ˆEfåk’Øæ0 g°/"?üïì:0 endstream endobj 1076 0 obj <> stream xÚcda Ø#CŒÉAH-``–W endstream endobj 1079 0 obj <> stream xÚW P›×•¾÷êcz°±@€xÉè—„xY H<ÄC– ¢–ÀFr‚mÖqíØ±½ÞÄiºi“ÖmºmÓ6Ûé¤Ó4ÓfÒ™¶iº[ÇMšÙt»›vvÛ¦Ó¤²»MH›±çÞÿhºmuGÿ=÷qÎ=ç;ûÿ#„²Ð$Bh`ØhŠÝ)ú$ÌÜ€ÿä\ìÌìÜ/}èU„öD£‘ðLÞÝýBy#0g¥Ù߀„<º¿"O.O~7Çã'Âã±Åépü{§Î"”Ÿ ëOÆÃË'QÝñ³0Ö.„ã‘G¿óݧ`ü3„¤ËHL.ã›H‚¹NŽÁŽ>¾ÇAdÂGa6GBÄ1!â H,ê@[¿în ïiÄõ©Ÿ"$®Ç•é5²Ü¦§!-Òþc’!Ä)Ê•eв þDêãØ’zÜ^·rdaØXÕÀ>-B’ò*‹‚S(ÕœÉÊ™•3©U*Å\¥+—I¥8zñF è÷…XžÛ;0x¨v¼ø²üÆ ¾“²GÃá)ü|Ê”ŸO†' 5m&ì¡òA¯$yP-ÌL ŽŠS©ÊTeŠÀ‹W.|Ç¿Š¿êÀ/ž½qÿµèôs'Ý©w€ ÙáñsàÍGÅ•é:P¡âT:=ÇôR)ÕÄxäʵ+çV.ߺõ›F½Ÿ àì»ãË÷ß »Ý¡hìpÁ¨äý ä2i”Y Êl $=ÿȱ‘À¥Ësõ£ÅÏG‚3s÷>tíü²tiÞàÕ r%•ÊJ ˜ÀjÔ[4jÕÚˆË@#½TJUZ°Í<Ç*R7¢CÁÑ/ÿ6KÖñ¨/õ1,ŽM™ÉլТ²“ŸœþÚqwøŸ‡J=5˜Ô·É×—/¯Ü*w>h>Ìô¥¾Éßlù†wJ§PJñ‰+xz,üæCÊXÆ?LÙ01‹Ÿw§î9 1þ®5Ò :ïG¨P"Óçï[ §RJLªã9}S|Ý`ÙëúÌOO•lÖh&ž¾¬‰Oûãï‰uå¦c8þR+gwù©WÜŽ‘ÐùU¢¢Øý¯ònÑ:)F¥_ù g2@…TmF6­”š´ÊÔ‚R"QoÖN¸âSÎ\‰ª¿e|RžUª;¤¯~Èkp–šj­\øà¹Ë\ꋤ¥¹­¯"2%î9O¥éÌyËdÁNL.þ]qq«>6µ·ûŒ14ÐÙwÄgÙS3ï6ÐçÐÎxb.ͪôÍ®òK­Q«3r€†_Iy¥ÖÙ×Ö3ª)-*.©¨,Å—SçXBàæÔO‡Éû´öŠêæb‹«§³´²¤P£×W»àüº½èU¨K€k#;• §W Î‡G•Ï/ÎÎÊ‘uç¬S+oàÉÔcØÐ¤,±îsŒ:ëÊ Mõ€KÀ?J–g»òeg¶¬nK•ß! %«‘úm•f7&y’§ ×Þ8¤„ÒØ²­h®þBS«ÑqC]Ãî’¹^Íç 9õ:è]J= "SNOn¬Ê€²VÆò¥†GºÈ©ÿ禾9_|.§¶ÖX¿4÷¡S£ÞøÞ\yžMc³t¶¶t•>îlߣ?pYY[´ m<›êø°/¡PÊårÿ%1àânp«ƒ=Ûks†¦ªø:N>åô·R Å"™²Qª¯¯e¢ñ¦ªN]Õ’‰ñûÅæ¢ê¦tÝ~‡ìœöBå¦8¥/WV·õ¦­Ã•®y[ó¼«oÖbs÷víuö:³íÉ^O¢Ã‘èíMÚ]3ÃC‘ox†R{ÓÒœÂ[¯OUÌ㜠JŠ¥\ZÈ¢[£gçl‘αŽ%ƒ-i>¾ç”í¥æv‹ã%{wg'þûѱÆ1NôÚk¢â‚~ÍAŒ÷u»§¾RíÈ­yýq¹ÑÏ0ÛämÔÄÐÞÖ·‘Hô¥_™ý5ýC?~Ýñƒ76r$‰è)àÀÿ0ýr£ßo’w`ý'’ǘ¤ÌŸ¾ƒ™¢#(@¾ÿ5d'ïÓo™¿îGžDm¢ úþ.ŒïG]ðNصO˜#-ˆÛœC“"-21}²PÛÿw–èãÈKFÁ–{£ÈËÌæFi¼ rÆÙü˜xxÛˆ‰Þ·Ðû`o*%ä…=u™<›gHx©|ÐÑ›^ÞlG>Ñg…¹ÔB.0ý•BëDSè:úâŸl¿Ä„µÃ¸³-@û2k¯9´æ]í$y˜¼m¬‰ DVÖÆE1hO@{ZJì_?ÁÚñ‰TÒ -&ù´§$ïJ³¤=Ð’Ò§XtøÐ§P6Tp²#Vøñ^ô dgd_”Æð.hïýZ„œè¦@‹‘ý«@KPËZŠã%–¡Nü…jñ¯:U“|–££Ä&Ð9¨œè\Ô qËÓ{“·:™%ב-¢“è ZBóhEQÑø:Œ¨nX]„ùŠÀÈ…Ð4¼Óh‘fbÐ{7¹l>²î‚ç ììî$üµh…;Áx—PÖ€—ÎQ®9tä…aÅ\‡‘Ã…ÝhZ7Pi9i);eÔïò眫ÝÁ3Æ4OÀê"[ýãš,’ëaç"ð."Ô,`ÖÏ&è-0ÓtÍBßÙÁ!¬NÃÜ_oË<³# ÿ$̇ápÒ='`nÎú y˜MTÎtRX¡œs sžjg'ó*õ3EeFaàÍœ¥¾ÖBŸçnþ™müIßÀ¢& {šáæ6¢»Y3À®-ý  Ñ"ì5Â8{›è?€;¾ãô- ˜; ºPïŽ7¥“íO²8¡ø%A Å3²‰v úiæ„`çi gX¬Pk¢lï0àç†~€º°M²{›„C0³3Ò@Ï–W‰f3¬O²Ì­’‚~¼L>ÂË!º†™w‡Ö¢£lLGTP#¨´…žŽí{^xöÃØ…ºïÌh¡N Àl'ãp1š_s²ÌêG~èû`…# Î-2K,LÇ%fGf)Â|µ ¶F˜…9®ZÀhq›OŒgvͲZ–O ,³Â,¢¨ž'™†q†eÚ# ¿ÁÿqfKþ[ë4Nïb¼ ›9tF¨4FxøœLþ^Ý™ Иzö$«­¦[ zjã¬SäÝÿ#9À¯ endstream endobj 1080 0 obj <> stream xÚãg`6XÖP:k϶oà endstream endobj 1083 0 obj <> stream xÚUKpSUþïÍMÚBKé4DZ(Þ<šVÚ&m^¥¯T Mš&M @B“6Œy™Ü"e#ã0ƒƒˆŒŽ Š3°pœñ‰nGW.GÜ1¸Òq\© l\¸ ñ;çÞ¦´–ç=“{¾ÿ?ÿûÿÏ DTKgHG›qº2ÿøœ ø[È.Í×¼Ó‘¾C$NgÒÉTý[?#Ò ƒçË€a¸#­€¶erÊ©ÆÙÊÐW@-Ì%ë¨îm"Éz:— ZÎ'sé÷*ßßý!‘¡H’ø±p‰ôðu^<‰°º r ûÀݬ%½$ŠÒ¸iõ ÆbAáy¢JEêYþöz„v°Yn$nY62ƒ”ó_ñ&²­!r7™›ÚÍMæ„puùŠà]þY¼yÏçSÐ3R\üMøŒiõ[ì^·ËçõºM¦mFÓ*4Xqd0Üp†Í—þ@mýàèØ¶ù—á––HÜ ŽN¼¾krGldhâ‚%Ú–Kø\.©ö%'ì÷=Ìþÿ]©ï/aó»Á‘@MwXÝŠÉÖÖHpl²¥5̽‡Îí í˜fÞ剶Ø‹bj—… «‰­²U辦&j#zÆ/öÛí^Ïíbn 5Í>Ÿ×c·Z ˆ§KèÞ80é™튺c‚®­¹Ñd½Û_:±Ûsz|Ïhæ`èÓÏÃÂUýî†ðq{G˜÷ ¿ò†hAlDz Lûu0ØÁÓÚ¢ãYViƒÐ®œ¶y=6û³/î|Öêr[#Ñk¶–#¦Î3‹åŒ'uuj•£Î¾ØÄø”cÿg_ì>›8wç²\D.G…o¨…{óš]~ÑëeùøE$Ä<ŠÖf;K‡åcZ. _ÅÏmÊ'›¬.s÷d—qd)ukS»©~[CsßÝÅ;¼cJšˆX‚#öéï®uÎNõ oÎgmƒf£µE/m 6ÿC:Ýß ß¾í¿Äö_þÚÿÓ½•­úë:#HÊ,ÓSçTÿ'Îóúëê¤Þ÷t`îô˜®ŒR‘Œô”pœUëј¡~á“å" qÃ5F纾Ý`Ý:yö”F…håÖ®{!©#AªfuQ±@P*i ÿŠ1¬C$5,‘‹niXOAÒ°BVÃ54&¼¯áZÚ-ü®á:êk5¼‰ö‰½ÞL~±¤áz¿ÔpƒxY¼£á-äÑ¿Fû©@EZ¢ Ê‚/Š‹zqïû‚8-€ŸEî2…(Osø>Ê´œ,öƒU­2§ÒØÓ°uï$£ÐVð“i†’Ð.sÝ“\Nᦳ@‹°–„ž :½| Áw +´beÅÆZ =ël<Ú§¼N㹌\ ütã(òšÝH [B-Ò4X­V/ `÷‚3œÆ¿È–kNçÀ{Ú~Ÿž$²ß~c#*E‹Oµ©Î·³5û;,Ó>N3ŠÅq(NˆúìŒÞ‹Ù;ˆwtˆÆ¹n ߇¸c\#ızà·*J³ØÃ8a2ÌvQ©Õ)qê*Sâ“Pæ1–x9pY…Õ¯Ë5Í3|òºÊ¨QaMOÊ\gRó\Ræ÷)ÏoV’O‹³È#ÌñZ®t¤¬Õ/¥õ?ÇsIâ·zÎæô$×ÍWïÐ’ö=`3¢Æ¤ÞIå1ººþ>”1ël‘S<¶,v–ãÎYå#ÿó~Ö³ endstream endobj 1084 0 obj <> stream xÚc``‹/ endstream endobj 1087 0 obj <> stream xÚ­VkLÛ×?÷úp€° Ïø6¡`À/0ñp(„`‚ (Æv +6v’EMÚ4[”öC·vM·L¨Úöaª6­öeÓ¤jÓ¾”MÓ&…uí*M“V­jûiÙºNf¿{ýç™Ð¥Ó|ô¿÷ÜsÏãwÏ9÷ÊĈh]'Q(ÜìœýõÔO yßÔÌÜås;Üßÿ1‘úÓÙD4^ü^’Hóȼ³ä-q'‘¶ ëÚÙdf±ö]ìµDltn>ug½û‰t¯bÿdtñ<-p/ÃÚ”Š&wî¼ù'¬ga3Ejþ3ö"iˆøm> þÜÌ&ÉÉ‚ê5\­Qs®ÆžŠÓæ¯7êeˆ¹¶¦nÊþX›XÄâlÄðeM°4 á¿°V‘ŽÈUl.®3›'ÙÝì«Ì“ý_^õºxœÔÔ¶ö ûHÑ3™¨Äc6hð©,6›Çíu9FC©ÖîôzÜ6«Ek(5^e‡²o³C¯‰¶_LtFÛ/ź`Ðÿ~£·w±·wõ£ŽäÀ…k> ×û&B¡ññPhB`D~øYÄ*¢o3#ŠV«cV»Íf×êö÷\{æxöuvÏ•hešùoì;°÷ÌðÓoÿ26ðXðk¡ìwÊ솿-ü”bø~ŠˆÌ£â ÐÊØ„ª¢<ûUv¯Â¤V÷oß¿4ðXúþsãä¤vïÂnDài³{ÌWqÓër[-{Yí¯°þHö‡u#õ#×}7Žÿ|©ÿ÷«ÞÆN³oʼFáã>|h(Oä™5Ø1F#¬}9‚´>7ðcn\ýPÔMèòßAW‡xm|%%±È«n ƱŒ±¦ÆXzð`©2ÃåMþåU/û~UUueeuUÕZeµ`ª+eÝÝkŸðzÄh@¯Z\d£L¦Âåô*%ÓÙK\:$Ú»^L-Ó[û»ê óF4ƒ^WØéu׸НMvî)*Ø×Táë³ö\ϯh;bõjõŽC=Ǻ3}ž`u…5Þ)±Tû'šÏ~ý4âŸÂ+ø U£2 Ò$eVÙ>!uìù²ƒ•¾>}þ¨^Ì6–ï›üítwºg|Ú°X:ëF¿Ô~é‰à ·:D®CB8Û~2оÌy3¬J'JÌP{:’¾5vj8ºa§nK®\¹yíd|lôZöGì~¶€džlðe€/Q5 ÃÌ[̾ÌÞÉÞbÏvsï`÷êò Ðuku“7ÇŠ/ÊÞË~(® Šq:¸u¸7+T.ëº%×®YWü¾£©­¼³÷ðIKGE Ü>oŽ ³/6ëüþÆV«ÏˆùN-fßSzú»ˆY ðÁc™AÜŠb—¡ô®çÍ£ ßêãÏL Yö–éWÿÜ—;“kíŸìßüyEíåEð[º£ºB¾Ùv—”±’d:nëµú]AÆ"Œ5ŽvwŒ»cgüWw­íªWñW]Ê›8;7í­uNwS‹ªP«-T;Z ú‡b–öæZïáòö–üâ¼|CÁè¼|Š6úBOv@ÝÒåÊ»Òæ’]*mäUº¾Ü7ө׿ëëæ®Ð¹p"4ù4O¬7þê݆ÉíˆÕ0{ƒ5‘é¡¥Á¾×ϦŸÍ½ƒÊsùD‘ÿ¤R} ø{+U1¯üõè[x;ƒš”Z¥v]WØåÞSÍkD«QM*÷¢nùÆûG ¬úPŸК¨ ’9ÌCVi¹J`NÀ×EŒqhÀ:ƒÏDatSJjÁ%é>¡?n’Du ® Ãˆõ‚[÷°n¿iÝ´Ãþ³c™vhHœiàŸ‡®i—è)Åg4ça»€ó'¨c#C-äÃìÄ>Aç0ûÈjÇn ²ÿÿ“{_ò(2™€¾Ðy ²yDÙ­2'åi„ŸË¨jnGXÎÀg ãgivËê‰zŠ| c%n•Šššh¦‡ØÇ·Ùg{‡ìŽ t:¨tI’Z›ø@4Ýf¬ÐmÞÈ{ó.ÖÉÑ7=¤!»,¢®Ã°Îå²GêgdoˆüeàEä3±‘í9Ì¢¶)ÙÁâœÀÇe—ˆÓÌJÝ0òwsHFMmó|b›‡FHvöX+p¶ÊûóyÅ圑7t¨2 ¾œÏ¨-¸‘aYÝ0xÑ÷]kXâ8n˜ŽõiÌbÝ…ÞÂ8€u=.mC˜ð„ í–}’ÏíõÈ[?@c˜û±#t„ïPå²³ W‹È̂섴ĸ Ï‘„Td8÷*ˆ³&ä ?^MÈÑü¶š¤¥M Z礦IÞ§”¼YQÙQçy‰0)s¹^‘´’¿¸Rÿ¤> stream xÚc’pTpáa`d`œ` endstream endobj 915 0 obj <
> stream xÚ½\[sG²~ß_Ño áU—̺œp!ÁÊË ØØ;ѱb…DHÞÿ?_VåÌ´zºDKÀ*bÔ5ÝÕYU™_^»z²¥Ît:o|—mì|¢Î×Oøžºh¹³>t‘#¾‡.ù„£ëRÎ]v¦ËÑu–p.£í,îøÇ$=pÕFƒ3 „~ô]È hx+}0ô‰¸‹\À4ØÈ€èÇAîŠr:&ô ";Œ ò) ettNŒÑ³—³ ìå ㎌Î9‚²w3XŠ3„OÀÞt®,;g2N'4’tæÎy á¬EC†#aN9 ˜Øä˜8ÀDW˜ªcЊNX‹!b–> œÀ‰ìÑO—…r΋,úEê|i@óö60¾óKñ"&—!#Pö>@`ØÖ "ðÁI?ô‘;Æñ`Ÿ–×|”Ó2LÁLÒÁLè—11cGëÎ:²w€ádq†ð…@—°p¼üÈYn'‚¸ÁHá>qÂ7' Ê`(…(4Ð9Ÿ±@Š˜3aN!½ SÂ43SG"W)—K¡ca” ÃÖI4 TÇ%aTfîØ[™aF°Ê L¨Ëhg`‡À(füË"0€€p“—KÜÀ¤Ð€,(ùŽX—ZX Ì¹œñ]0$«È]ú1Í„îÊàHp”EŸÎ0à|¹ }d¹X sÆèAæÃP¢Š8ÑHÒ™»eH0$(Cä!)¢}A”ŒÃ“è£ï¢‘5A¸Q”‘©h1V¹‹:Í`oÄq}<&•îXŽõÇÂZðc‚‘àXä2zîbÀ|KŽÑÊí Å`à˜„µÒ'enuQdXddªXdþˆ&+J '¨ {âe]À ä&ÂP— KÀ¨n! ÈBIö+€hŠÙ û»”‡`qI¬HÆ4RN",À@¡jHƉÃ?!êį…šèªôIe±†‚*,¹˜EÆ‚ ¢ÄÌE!/Ö-‚ä,+¨Êb$ƒ°Oæ’³XH#Mè&ĈEþ,¶Á]hyX±«hE™§œ#’ùË9†þÈ`­+vW ªè`y!I|±®t³i}Úbm€‚Ít–¥¯ÌÃy±”F†wŒÀºYc¹¶Ô‰>¢‰žÞ± hpqBFE._Ì8&i£%V_€“Žå[1¶*ˆ³$=#•›Äö‹_±¥?‹Wpr:šäº8*\V1cÜ% ‚?ß`Äe#þÂŒ6ÀÎâzuåº4ƒŒb„}A\”“%‡\9ÊE9Ð?Bbüeµ‘²LJ¸ÅzZ#‚ˆÂ‰mº€v=ärúËÁÖƒ«_T\¡*•P©„J%V*±R‰•J¬Tb¥+•X©ÄJ%V*±RI•JªTR¥’*•T©¤J%U*©RI•JªTr¥’+•\©äJ%W*¹RÉ•J®Tr¥’ •þ/?ü°ÿbyuññòíòJ€.g÷_}ú°Ü~üNþ].ÏW%¦ /ÎWø~µ€š”û÷ÎÏ/VWèP†|ðà/¸T'ðê‘õôõ˜ôXd­Ñ£Õ£Ó£Ò³JÏ*=«ô¬Ò³JÏ*=§ôœÒsJÏ)=§ôœÒsJÏ)=§ôœÒóJÏ+=¯ô¼Ÿb¥ç+È•žF¬ŒVzŠ×©x éTˆ§†¦8wh £¡“ ‚›Û¯pÃGÜîÆhøéôD°fC¥Õ¸™·7ÛíÍkÉVUUœÚ !LPÌfj¡ìZ Í£…²½¾ÐŠ2+ x’—g1âe…]BWQÍÏxˆj†æ QíÖ`·B­—UóeÕ~Y5`V-˜“ŒŒ-FV]L!޹Õ{µ€VM ­Æog¨<{¨4Šç3ÀÖsò·§ä Su):Ó PµâV͸M“Æ µŒkd·5êlõã!²›;D‹0m†PÇaó¤.ä8{ˆ±.ä툮:§t™–NT#¼Ê™‘NøÚ9Ó¤ãlÒ£Ux7 €ÊŠ!u·®:Ã[P#«q€]»÷:S%6XZõ SKóã¥å „úWWýë˜]ê3&hÒˆfõËvñFv ²ÎÏ&íǤÃ,Iè² 3zWÝk]ºúU§~Õ©_u¤}ÉMÍ»Ú9l®Þc0ï¸÷€`nÙÄ:¿Á §É{23)xŸobƒwêÀ¼17Ý&Qì4ÎS©–Lýžnœ‰ÝR3[j{¬ÍüZÛÖó-bõ4åy<µ¸L#Å÷4ò6øÃl $=‚ o25Ò²U‡%5úÉ¡ÂܡƱQµ‘ŸÕ€Û¤%òvË]Hc#ÒØˆÔ&é:H×A“ë ÙÒ ñ:6™%i"FZ uÄ:Ö©ðTòEM'Ëc]äQòÅa3­*’æ€ÄSõ3júҡ¨~ÆñöR£õœÂ¼¨Ì_¹Ö×<\GeÌw‰Êê&Ö†`=ß (-·’æä¤€Ô‘ŽYÙ lx œ0 ²ÃVµ`Kê°HK¶'yîq”`·CªP´æKiªàBÉÍ*²õà&NjÅ-Á nËk¤EdÒ*2i™ò$òì1Æù Yèæ!@µ"N)Ís ×›5È -{‘Öãs#ìãfá;Œ—·)ÚuЬ•nÖJ7›)D³I³Ç#z2È`;{Òƒ5Ýg-§³† ¬åtÖr:OæììZ.0Äñ˜#6e&ÖJN`?UcßÊâ(3d?*€Å-b¯üô*Zµñ¬®Õµ³Zo¦É©Ðì©Ðx*›¨‡'ŸTpóIÅ.é‘E‰~R%¸ÏHc‚[ÏÄ¢b-±0éÀm‚†I*8N.¶•Ä0^ì(5ˆ“5--G)Û “56` Xg°>Î`MYí:«ƒguð¬žõ¡,ë3 Ög'-KLsçG–%γ,qPf}Í[_´`MsX'°>NàÉÇ Ü|œ°#¬ñã„d&…•Z HvLpºŠÄÙÎ¥gV‘®ñL+àœò¼P÷šv°£’±>‡×©Ý6Ôåµ-_SÕÐ7†gZf$ù1gÁI3îÚ¥0=‡Ð¬oìRÈ -'FÆ0× fS˜Y“JƒšTÐA˜û % ža³Æ½¬U#^o’HÔXKËZ&¯eº`lË<¦‘ kx6šÉÏAüìzÇŒo Ÿæ²ÀN›Œàš&cÏgh6èÞ!çæ!¤‚Yo·ÑýD^çÔâFSÉÓx- %oV§v)4”¼tîPð %o–­RSà…<›Bš)Ó/!oo&‚æ'AwÝ ”SƒŸÔRò< o5”œZJží˜BÃTQšM!ÎãgxÃ@ë=t P²Ën(y3 ÏnL¡aªš{xv)„;°@«áæÊYÃL¬ gZ ZâÔ©5gâ¦c­™¨[C=ßµÄëg«ŠgÍ ózÃKÒ¼îéòäôøðâÿBÎò{'í÷)+釗ËãÕÅå½'ǯ–¿uÿ{ºú³û£]^.ÿè>¿ý7½¿ÿêtu¶¼·ZýqüquñçéùêþþÁÇÕŸ¸íõòò|yÙ=Y¾³¼|wÿùåÅÉÇ·ËË{¿-…žù>ã/ݯÜ^œ?:^-ï=úgl2²]vö;cÿjÌ_ï×=û°<^Ÿ]¼“>/<2>½õ '[÷Á¼r„á—ZËœãÐ{· ozO‹lú#"§(;ÈMÙ&¶ë’¼ "/Dß—¼DÞù[¢—}ÔÔ³]ÈÆg)N Då®(û{“ç©ç ƒF} ©WIî^¶èÙ>Ÿ;@–Ýp‚P6ìK,àe÷54ñg’«"cé“/Lä)‚¬Z¢'ÉHe·µCÆØ[Œ¸@zІ ©øôΦ°°Ö‡ÞùÄb¥™bßo zõÜùñͪ°üñ#ù.ÌþáñÕ²\ýý_G¿ÿúø»'§çON÷ìPú¾ütµZ¾|þÇE1 ïN¯V—Ÿîœ\¼Ÿ]ž,/OÏßÝ{|U:]}ºa>|8[¾Í2”¡-¯Þ^ž~¬ënm‘þ£×à«Ù]·t_ϯ߳põV¨¥LûrVÚ{ŽÂþKÌëWÙT }øûòôÝŸµÓÁÞ½>=â )+´EáöÊé=ïäíy‡Ç@Âû¿Ó·çïΖÙ?:;~wÕ9ÄUl@þÓÙSz~|~qµüêÁÆc’ñfð÷@)ØopQ.ž-e·>ÍÆ.Wò}SÓs —Rà`cŸË>ùÈ#n©É8Dp^Þ¯‘£ó¥ö?ç#[„ä#4Öò,Ú2—¼UŒKî-2ârƒó‘1&Ñ>/Y¤4‚$hä¼A÷«Yaø{¬ v#¹òŠÔ“Ë·SÙŸ^>~öËo×ÁöM465–í—hlÌM… aGaaÑUa­ãi… M]åtu’}CUÕJèFU·O ]\H¥Ÿžü¢b=äͦm3mšÐƒM“×Íò5–+}¤áÙr%™Í=Éoš™w:BT‹m;¯×󶜿Ò~:zñfíéÓ‹ó‹'+kö/ÎN¾Öj*XsI±Æ³°“`ÍFÅÎn±&}¶X–·X“×{Þ¤&Xãó ®ÁîÀmý—Ln­ÁÃk€£àÂ.àŠ½›’ím>¤v»ˆÝéìçì£ùÒ9]#—· ÏUÅvßÝ _<¯ÃÞJQž>ùíáák2D øxv|ùM4%îhJž§)1 4yPÕ”0´ÊÒ§©)šb% .AT˜Ö”ØT¾AIZü»¦%麖l7+x`ayHˆÿI ªDRúòäú˜Kb®Ñv([¼$€#¾”^½øñoÿEy¿…u7ÌÀõÿE®—ۮׄ,Ež=—›¡òžu[‹è,Ý)Xn°q(k}¶•õfG²EDÞú’-JŠ%ïœÛÜÃTÊAâ[z€"Íž$¸6â¥C=ã QË{Ði”¦P¶È+º’ÂÉž9_@KÔéb(¯½K?‚8”ò”_‚×Ò?Ë[ì±¾ÒnbIÿdÇLH©ì‘¨•«!Ü´ L$Ü´D”©·ª¥ ‰±yZÇnÏãçÿxôä:_¿ :wR¹ðE©\ MtúÙó>Ƭc½8€ôÙÀ'0 àåÜ“·Šäå¿ìÍÜœBþœySðCøO8¢u 9Ÿå«ÈÕ¹ í>(ïÔ£†’Ï x#;•ƒE„šzÁLJ°qTŽäÌ"% Æ„’Õ&d»»$~ÿñ§ÿûvê—ÇoNß¶1¡;ì¿ &‚ZHwÇ„õq`S¢OS (6¨H~˜mJaeOv=8©+XÛªÝ Ÿçîä¡´t@~*¯þ²½”>rê“-¼“_‹±}â²gBÌÖ­ð÷ìé/?ÿóׇ€Óãó¿¦UŠé ;90KÙO"P:míñsÉo?Vƒ¾"þæpwƒÀ|É œ›ÔòK½¸’ 6éÛÉù¿>x8˜É–W«›Äœì׳çê|’ûïŠ9 cky°'ïI9‹ýþŠržÁݵ˜“‰™†1Œ)%c `1†“\¸™H0)¾Ä!ˆ\JT#Çú€ f“YP(i¡t»H^<~v´YÆáñû7Ä'‰¿¢%@4úºþZÊ"q˜c‰Oä7hêoãð×Èg9»GÁc⦅„ÜÖÈ\¤2‹(O§Ò>·—@Ä ëÂ5¤²¥-"–pÅ”\,ÀS!“]VÑYÉÇ"\FdÙ?$ºˆ!%âÀ¬x‘ÿOÅÄ6 endstream endobj 1091 0 obj <> stream xÚíkl[ÕùÜãgœ&¶ãW~\ûú;Žíø™Ä©ÇI®íÄI'mh‹Û´vš¬y”&…X)RÇèLe0CšV&¤±6MZ Ò¶B¥­?hc“Ð6mš&Mtc[Ü}çø&iÒ°H›rŽî=ß9ç{ßù„B"„Fòþ ü%ÑiX9ÏþCs'¦Ï¿XøÀF¨zf¦4U¬ùé×.#´mÖ¢dAú¶xÌ ¾}f~ùxàÅ+Ì_¦÷Î-œªºZs!!ñ?æ§ŽÁg˜>„í€Ï.LÍ—ž™|ý0‡5é$Æo0g‘!ü< ƒ•‘)  Ó «Õ,–ˆ1ŸbNqÀÖ*ᙄo‰ž,Ï $z’9·º‡ëñ‘F@TnáK`­ ¡ÚªvXÕÖótù)¿‰/­DC¸ˆðµ«Àã‹@çFÀÕætºbz}(„œM§ÕdNg$Á†5bÕqj ©4¦•éõØR[õ3fŽ÷Ý?ïËD,Œ tûSbñLæ4W9,忊¾:›3޶÷[nç5˜)¿Ô èœðïéyê¡úo>škïLwÊ ¥ŽSqm5z›‚çWÞiŸ`­oš†~NïªgJ:3ÙKLd®]½vEgQ&N'ÇÙœ.ªŸA*%Ú‚î¡ †Ž*¦ÓJ‰¢2ŸH°«b˜´b™`a¦±Ý“îå¢"œÅ¸JQvDz«h¡üj£"·¯õÀ¾îG’¾Ä¡â^É%}|Î<ÜóŠq¦:ÜZå0Mã·½NÓœ¯i¬•lÓÈô¶j•R¥cGyÐ=:â,lÓïE|© SÕ_-·E‘Ö(WË”³;ºMk©â©}ÈÁ{/£n˜Cô:âqÐXÊÙ|xÝRb ±Tp¶Z°–`< '0sÍÕjôƒ5‘V{"åµ xåâœXÖ:àŽEZzôŠê:‡=2éœZ½LßÒ–q§ïÄËu*•ß]Ö·zªäJO¾¯>¢¯VzLñNºÁÌ”¬BÉ;”VÑ€¼+Ñœh!:‘ŸÇÇPd–(IdÆ•$rIe.âtbÁZ:%`SOCƒÏß7[xîï`óÁSÝcz¶Ù’ ìhÓrºŽÐ)œ›°4õý6_Üsù¼þ±îŒt4µ¨ÔÊ´>îrÇ *ƒ$[ÝÞbëÛ‡ûœ‰† ÓmÓõ´Äu×¥µKÍù° ”ŠEHF[uf,1c’Ë©ÔØT™j¥RuuÀ´_Î4ó…ŒkïkÓå]¢xùÇÙ{3+_ŽÙgdpæÃZãN,J3Œ£1”U–‡â3|ÕþÈ„ÕÍó.Åö;½Šöµ³áo†´»¨'!wnÈÝÍ©«&sP7¶š¯Ä‰‚Ï*æ£yû0ãð’•¼Ó´Òö°BVçp 4š,¬c›±¦Zã6Ä2ñÇ®°#¢Véf×¶A)ÑÖ­çkù;^»\ç4Zì›XÄK¤I>¾èd]zµ&cfhžRã;DO"jGÈJü›ÀĹ\$ä¼þ@BÉ€M=Ñ\êª?aç’iÜ}ʨ›äÕÿ¾Âº|-!ÖÔêd¢ßÓ•™=‹£Y{gV¦°vÖï.dGäía}¬‘÷¦ž>K{C‹‰íõò “yb/?·=ööÜ·Ãbý{Òºpۚϯ@.x`±Ö§Æ* lNTX n…¬ÀWÊ;L=-],;œ›<{WË}בÌÈdmk‡+`RéË¿Á ü÷Ûc‰*1Ø]ì¿ø‚öáó¹Ñn[D4Ö†ºžå?ñe/‚ K4ˆ0ëR‰ØõbD¼!¦ªáË+næùü#w¹‡¸ü|&‘eÙ¸³™KrRÙD*QˆFæ@>¿òÆè«OiïnÈÝïñô¹mF…¾V©á´‰ŽéTw©‹Ú0'd&Ò¡zG‰‚@ZC£§gs£QGh§3ÑçÏ8ùÅ6¨Ö gå_ns9Ûm|ÃD´-ɦ"j›ú~- À_‰ ë‡K³~¬ ³9óì—r®=•‡Ï„Ž–, N?Cyw•úköÇv[m|ùbud4\çløgC…w ~—ú®õß­Fìº\#…ØRÿ½»Òļ¼óñcÞ!ûž¥Ìèd’‹v§k売mæzmK›©;Û^ñáO†_{N{úùL>iïÔúƒ‰vC«ª^aV5Õ+ÅB±§üøèâ¬TWвº A¤>ÕáËwDÛ³Žñ”Ò®¥µjåï¤r‚ Rà>QÅÌJ™Òq¤q•3C3×¢gÄñ}'R“ÓP># —btÕÆÆƒùæF̓]zO1]Tpr2¤7µU 7èWÉ¥ºšfCçÀcçS~‚Ê>‹à݇ž{173Ï8Ü瓾ßçh!œY·ø4“{RíÁrÌBþ+÷!€4D¶ÕO-¤cë9Ð(ŒNµ´•ú{Æ›¶S;ú÷ÆgS‰é®øl’99‘s÷5ß‘é…OJ€p4j€*¦U²rá¸N„Œ¾E´v ù¤¡ÒHvÄi^º§—Ov§ú'ŠÞt4™¾w‘ëñd3\·+58šmåC¹\a(4d2÷„šû=-){GÒИNLìdW™[íÞ:®É.ÿ"æ·X¹6îuw@½í_ÌàãÍ¡Z‘`'q/g«|£cD§[}¤˜¢Ö’îq·ô° 6=רméÞóôåÝv¯vÃçHL£Ù&ó»ÒvEÍv­ª÷žQþ®ÉíuROóM¾AäžFsÌ%ŒáöªDdúAW¸i‚:-g‹„eÂhFÃÇÌWñËf³±d2‹ÉdÊÂS¾`4š2«+%ØÆØÓ6“Ð>Ofä¹u%H^•ûÉ!Úö)»>D"Ñüö韺´’.ß-ùN\üWq ]åþ.ùìg$RN×5æ"ü( Û4ÑçI V77|•Ü%aüÉlÀwÝïºØµ«xžŸ¯ãã×7Òâ½×íî¯6í¿{{YŒâÚUFAjÌ'kŒ‚Ô„Ûè<ŠÒ›æ ´Õ¶ÚVÛj[í²1»¯½Ï”·üð™·0}k7õ9èï­w& ý$ôK7vÀ§ñ¤‹ÄBÓ~@ô]¡ÿec³âÂMû›úÅJ—¨¶úVÿ¿îû·úgÞ_!¿Âð}èøýù-$Ùô›LDçJô#‰«.TVf f£Zú/E¨=*ÀbDWX‚f±K‘™`êc¾!Àräa~-ÀU¨ËXzñW£^å¿ uá·¸]´Š_‹Â’gQ -¢#è:ŠfÑ!4ƒ– úPüªf»‹°>‡J0Ë t~=²(Ië>‹ÆÖ¨–è¬c xÝ ï"`õ2<,Ê£) &X½°·TSÀa–ÒBÇžº Ðhƒìè<@«\Vyläк‰ÇÇËd7Qì¤:/ÁÎ"`±·ÐbAàÛ ˜‹@{|QBkÞ  #°Òp MÃØBÐÛa÷ ¬ý·vÌR¦àY†õ)ðl ÍSœÃ°¶’n©µˆð9Q®ìÊCÀ“H^ÇÌÂîœ@Ý K­Ø›p飑&±'þ‡Ùà_¿JâÏ¢@q3úâúeÞG3ip:‘ú=´ûkÝ6h»¸~˜—׿ÿ-¨ç7I_ç°kÇ@÷q ®øy€â/Óü!¾].Ä×¥µHh¤±[ì<p‘f±f†âæÁ·C0ŽP© 8màà…•Í9Øz¶Ñ³öi4+Òq™žæ Õ² _…ç}Ûàôæiäó“h'©®yªÇ.€ÆQ´ž€‘Ì“—cð†yõSÚXa¡vŒÀj¥ÈP¸²7@+Ä0ºÆAØ!8„w ´ªxç(Ï¥™°Du> stream xÚcX°‚y¢!cƒ€ I »°ÙOP endstream endobj 1096 0 obj <> stream xÚTklTUžsînZ¡—,Ä"jv-MˆôAwi·E‚´,­ m—t¡`bj·ÝK[ÙGÙ.…jI(ƈ&& ÁDc4c@ñ ’òˆAŒ$¨? Ø*¯¨Hã^üÎÜ»-m,÷dï™™óÍÌ7s$ˆhm#(.óí<áx–=ø·wÅ6ì<›û3ä_‰äùn#ÍûåìY"íØ*»ap^“Ÿ9¦AŸßOo]˜«½½z4–ìŒäìw¡ï…¾8ÙÚK¥´ úèžD$n¼¼ûóo¡Ÿ'Êi'‡|Kì%'rí’ëXeÍ¢|¢Ö<§t8R:¶‘âë!Ò‰õ¡P½XNTtÂQbžC¼Q³ªd"“¤6o@×ÈEäŸåUäåm¯š¯ˆ ó¸ÊTúe~HPÜt Ü…¯æ~ñ|ì¨.æÄO‰ûÖšGÄ™ Y,wd*9ð²X(¼7Pˆáuù5Ñßô{Í9]”ÖŒÃÃÁaó4sà3XæàRàPÝôë¢CGd„U\…½&«(<^·H5ºÐ;Í+@/z¾y¹:(ÞŽG™‹ÜG?_q÷k~Å3x¹|ƒ¡ø`RÐÂ§Ž¯6¯/L%eYlšâLæ¢iÂw\AÝ.»nW¡ÖóÒ›ºxVqŸÜ fž$α9ž@޼±þ¸öu«C‡ˆ9úÐAn([˽¨Å5V‹6^ÇvUAæ˜êøË™G÷»¼¿VßöÐt±úáð ó1o§ù±¬š(S{Æ9ͧ'¿â¤º µ-±×ôß⻈{C±mYZ™‹â ˜!ßÍ­U.G6tìî@¡ÛòôºÜóUë…ÇBûßý#¦Ùšøðƒ“££â9óø;óŨX&>¢lÏåõl?Ðkw¡KuEõ[<³épõêfy[õZ¼{ÕlgŸ†›Çä—¨||føÔàÜȼ¦KÍWšNè¢(tµù²Q5¬Nu|¬\âkärÚ¹xWE@Wáƒ|æ¥u+Ï_úiÚE%· e1ÏVœÌ|ŠGä%¨9Y¬ò³ïŽÀúQmĺ=·üæâ.¶Ñ?m©ºH½‰*äFµ×°QÀÁ|þ­f¥Z“?‘OÛ¤ö ˜NÈåä“Rƒ\ÆØÙF1F-­ÇHÑ^Œ7è3:M—D.F±¨"ÅLçâ Óñ’ÉI¼-=Ÿ>Á}ÜO®Á’ÝÍ’%ͤA[Öh9^)KvàŲe'uÓ_¶œCŠv[vQPdñÓ`?eËÓiÈâs©Vzl9–É[¾‹–Êý¶¡¶Íà¢öu wZõ²Žñi>ªiDQý4ƺìö6Á'XÕ¹r”O‰ª¦›±aô¯sˆ³&&Dnœ¡–Ég¬<ËùþÜ ³(Ïi¾¡`•¶ùY1#ü}72Ì»†¬Î} s 3uÖÐ#`½³ÒkpöZðm†Þ€w2Ì5µà»s3v½W”l­Õñ­o¦G1¯ÂŠÂ¨ØXYÝI±¶IñIècŽ)®#«ê°õ*¨Z ®ðÎûêA’ö¤}:ÚÀHß§߬Ÿ(ų—ƹ—Ùé³ûµ÷?εDð_Wç´Ÿ}cwhÀ~ Ô±8Yw2ývuò}ècµ³½ü†–2·fUcÖUçÿ[]X endstream endobj 1097 0 obj <> stream xÚcÌýÞ½æ endstream endobj 1100 0 obj <> stream xÚÍV[L£Ç>ÿØÆ,d¹ÛÜkŒ±Á€m|Ål° ¾p±ÁàeÙì]ÌeÆÂfU ,»¢Ñj[­Ò¤íC¥¾Tj¥V•úRUm¤ä¡êê­T©©T¥/•"5Šªª/»•ÚÅôÌü?×›ä)ÿÈ3gΜsæ›s¾ùýŰ"€hÜ`úVçß[PóÉù¥Í¹¿w÷Êÿ(z}!š-•ÎHC¨³- ¢ÈC¦q¾ƒsõÂr~Cý[âüGÜôÒÊíÔ^ëƒçWĸþßåÔF~Àm”à”™Ôrúûsþ çJŒ¿bò?î HÈ#2‰ƒüÈMƒ‰ó¡¶TBÄ1!âDÐ h`€`4äzÄù‡¨ÍÓÿò”îFEHbW‡sEÉU6UJš*›H]a€›.8BžîÛÈSÿþû¸¦ƒç¢ß-x$*Ö®P˜M6›Õ¢Ñ4«ŠŠ¤Z›ÍlRT{ö ¹¬¨¨ù#¶À5Þ\¯KT wÛFÚuÃöv¯¶8Q½{=”izÕ6dÌz½«C:§Ì\®–­ڡ³·­XìÛ,™ ×Ú}Ž¤Û“²«»¯•Å’.s½IþFtt'"/µ—:Rnw²Ûi«­Ý !f÷Ás¢"0´ÈÊBÒX-6›ÝCE$—Zl‡€¥eD.C¼¸HTµÎôg¾Ç³àéöÖy{úú3o纓ξG‡¯%tö5¬ ´)}]—ª¢¬NUßѪq5Ènåê>x W@Žx¤e¦PöûK-‹7în_­×\ ¼»þíï5o*,šaG…Vq­ÑUeŸ4GÛ¿ÏâtƒãœàK#9 ô§òDМ°ÊšÂ µÒÀV"ñ°vÓØ«ò¶U¹Uš—¾Äñ†=4FsH¹Âž™r÷3‰>¥òŸméøÑ?üxñÃB§¤UâÇiÑ¡-õãÿ³$n\×KZY¤“™Ü£ÿ[_íýLìzNÓwåñC~z~ÑCnÛ‰åàëÀMÒ`"?åõäaüÅÅñÈúUò8¾^Ï‹gû÷™ ¸´e±ýRhŸ~¾q2Ö²Ü[ÜϹϸÏ𠣎LžjÉ'_·&*éyþÁ[ð¼ïCÅî‰èW!¾{~#'¾‚ò4ÓR™Ã/ªiA&P[‚,~=ò²ÿ…þ(ÈX€‚ A7'ÈRpïr1踿òh%‡{•€´ r)xÈA~¹øA¾J¾K>ä2°HîV°n›° ‹0»ç± u¥ ®® ~ Ò8 Cnƒ¥>Ô,á8vä•c³4ŽiŒuûY´Aï<þ”‡zS+?Ú§àMXÆžzÌÃÆJ¡— =Œ¬¹pç(¶ J‡1#œôï<áeû)ÏØ'Úžb­• ÈQ;Ñr}W1 ipåÉ­¨q œ†9`ÆÖ«·Q÷ÕΰÈðSÔyÔ§0£i汊žJ´˜»°BÃì<4Î&V—_¡žó3ƒýe–VEZWš‘qœ¥Ð÷¤–ÖV ·ÐCyŽÿì)ÿ¼à¯g,É£¿ °Îš­ŽñëÑ ÚpžF[ÃQæ x/ŸÙý8Bukˆ…Vv½ù\0û<ãÍ_£Ð|¦²½„#­n†1™žs åYÆzšfÇü áe»fNE:¡5gYÖ…8»Ø=ú2ÈfÙ˜g7õ¢Ê øø˜)Ö«ðfÆYuã(+ñ-ÓǰÆŽë(CQOàHç}Ƚ1ìGp†~æE ½5QÔ˜G˜ÉüÚ»ý#pÇA\¡64vQñÙYe³ ÌÌ*cBŽa\eçXF-Í0ÿv gM³~ù¼*1G+§j’c>·ÑjŽY*Ù}ʰ›•bŒ¢8³ á2ËåaErBþf…ú/³³¤ðw¼Nyz—ùfŽîЦð6 á1ñw2ÿªzö>ä1­l–½Kõ ÛŽôŒó¸N3?ô·¼þ" endstream endobj 1101 0 obj <> stream xÚc`ta´u8À0´ endstream endobj 1104 0 obj <> stream xÚí xTÅqvß{Bä‘»ð#Â]UH0— |*ŠüË_@”ôà"‰äO8  XP!†Êa@Œ `åG@H”¿"¡@jEðÄ”ÔBð‘¼Mg÷½KB)Zh»ó½Û™Ý™ÙÙ™ÙM€@˜ @¿¸¨è›²Ždá÷Ô¨¤Œ§óä}ˆŸ¨»;!Þå®›¾Ü ´Çbp ôXÐ$¤qZ$${Ò%ª©õB_RêHW¯¾ö%€’ìJO£Û`@Ó®ÈoMq%ÇÏk³­;ÒnS•ÏÈlP7Gqæz/} óès4H¡²"S*ƒÑ¬¼uïׯ;<À*êÌÒÞ ͢ã0ß(¯œ¬a;€\WÉÃÝ„ÚT[{ü¶K=Ëóh†ö’’w¹W‚|œ‹QpWœPö#¯‚þP§ÍBìÔ­¤hÃZ³î¤ˆ)‹ÍæË(÷—•Êœ×Ú¯|¤ó·´ØœÄH•ý—çÐ%­ÉûÌÁf³YÙty‡XVŠüÑt³´\ùÆÐOÄb#’-š,½‡,-™lüšl§§èeÍÔ–6cI öÓ_²Ò³Ê‡ "¡ÆDØÃMÕ®ÆÄ:¢Ã,*8tØÐ!9‹ÿ¼z‰d%ͦMœôv”´)\·®0äqÍ&¸§.oÃ=ÙT’ÀNÒ=øm¦i™™ÚlÁ—…{ÏF> ç ¡²=¼UU‡Ò ÌÛ@U•ìéìøÙbvbºÏõÉŠµ‡†+yš›°Õ>D ¹Z ;Â~œ<+#t¢²Ñ?¨Ó†:¹ñ¨ÓŽ:[8¢eÔ)_p^µâà“¾é¤qñYÒd:C"HÉSÙEö•–BsIg2x‘­fš[Q:Ƴê¬wr­&“=œ1 ѨNÒýcæ;¥Ù¼6ì+VQzìT‰oõËó—¯Z:q%µÄ´!Ös—ˆÊΰs僥^Ù¶s妢ü™ÜÞôŠòtô‰f•Ä:ÑæúÔAUÒ( Ë«¯L~½·¯cÚÎìßÄÓ¤ïrí:$u.¿|þäÜ¡Sˆ‰_ºé*ºõ`ÌBucœ‹-@}¬G¯næøfÍ}-G¶LtÑ6&wåúEd=Ô”%º—JTÝòÚÜY¾œ>Ý{õÈ‘é¢õ+Ä´u¹GN"‹tYôM”È_°Ùy°å(_ùAi¯ÒÒ{Õ<Ϊ9ªÜ)Ýãó*-ý¹B_ÔçC*¦Jÿ’«íÁ@ÏÎôÏ/Å\l„„ÍÙÝ£;Ü+ÒÑl °Ñ¥Ú–“Ó: èØs@vÀ’—&-zèoäaºyðG†·hû`çÉ3§è:ì¾-úy3í” óX’h°˜AD3¶}{›Sö×W] vvòìQv¸CT+í.i}Á7r·Í— ;]rž“¦‡&æ;¢¼Þ/ò~²fÅ=WPÿç•ú-¶†aaþ%ÀÑÀo=®bú\»«udvøèwì±_˜z `ùü¢­ eâräO<ľ%ÍÏ—°ò …‹ó¾Ø³bÕ§ú}wØN¹‰®ßá´µŠˆàšõÐjö»é7­¢:–G¿# Ù‘JõºrÒ”Ÿ/a§¥™UÊEH6ŒE(?þÜQÍaazZJ¶ü·¶,Ê ë×{P„’ÇV•|ðá9Çöæ>ÛùÁô9ÄiÄÛ”‹ûÇ»™XU´Éî4 B÷&R;vjßû?+We¢•g§¼û–¬õг€²k YÝI ÷\ˆÍf¡Û?Û¿uá}'Ù·Ô!+RÚÚ‚7÷zIÃãTöÖX·¥¾_,(ë”ã YÒT+*+ó Qvê¸V®çhµuñFµªèO¾°¦5eeZ¹Ó°Úë¥òqÒPØläïjºó£ª»¾s³aFÚb–1ü¶ðV_¶ëßã1vø¹7³7 ÉŠ°„Oa+‡HhצCÿgΘÑåßvê;ºï3À¸L½ðÎiŽ„‘4j‰Zu6CøP-ÊÛÓfþ>mמO?ñùÉ¿mé²X ¸XJLÃE.¤Øåá~ýüè±Öõñ‹ZÏU¼xvççÒw´s¬¸Bc_a¬.äæÑz^ö| &¬¹” ¿£ž5•zta~Î •¦5ìëŠ V¬£ïæçïF=ç.²3¤a ™âõ«ôÇo æu(¿aýr=zn«¦n6€“æ §õ¸¨vÁK¦”`~Ÿ-ÕÎAe,wêz~a¾/Ce:±VTæ4XÀÍ¡Á‰…*aÏ{ýõ"‡á9äÕeùgÏ’2µ0zZ ó)y^ÖÛ«Ùü÷›ô½Î+î7qÇIß—ç¬ô´ÏK6xéßõ:â¯wu…·B(+¨ªMÁêä°Šz7Ð[²Ží`[•:eó‹+=.Í`Ù‡…²ˆ Cqa–ÈþD†‘7Ȇj:?‚; ‰Ðé/¢K½ÔVJÍ4¦™µÍ,B/ªR“j%u{•$k'ˆ™ ­*­dY-uÝ·J)i¤Å’Fâ¾Î¤i`Ô`ÓB´)\Ôàô¼^‚©iÀ·!ÿá–±ã‡Ïšê{á¥?Nñ -È~n…sDÙÜ­OÐõ¤YI;ÍÞÖ"é~2šVÌæj}p¼¹oþ¨”ƒ¯³]ì=­®)U® ùºŽ‹H~3lÄ0ÖUm-Ÿ06Öºs+hã«Ö¨fLíRiÌÎ4ÑsŽÄ´°‡Ëü¹6\‹MQØ…ÓgØе!Qd§!»ö•^ÚË:’¿`ò{Ÿ•²B¯Qï6¹GøÛ‰ðšHÞ`ñ4‘Å“Ú\I¥wfÖŽeêk#ÿÇÆ[ÍÿF³Øƒ4ÈyýU£xÓÍdý›kýÕûªÚ+r¼?eî%O<ÐÄ»"`5OÝ'ƒ;ýAuÄ+¸èð ^‰`ë½ßB°v$¨›xùò·©Þó÷qÐV®puÓ_ÈU¾+ñ7òõ5S,¸«÷¿F“¾€è+èNÐÿ'ùŸùéù_«™¬âoªÊþ×lòf~þóM ¹¹vHw€›ò¦+ó¯&ýï6úiUÑu< “¾öéÕéŸeÿ †seŸ^®>v»4úÝõŸ7ÓŽÛkoµµ€ÖŽŸ›~þßn»&O„,üÜ·ª}ת?·žøëaÀݵË]kü–>ƒÏÜ:gN º5ÞÿËMrâÛ[¯ÙaµB$B·‚§ ˜Z²olE8y£@Ânt¼NxœŒ'/0ï:a™€¿"0Âh$Âï® “r6"|.àâ/Rx­0ð‡ñRŽ´áëÿb¸(×»©[ ’®S6VƒK¿(Ín ÄÞö0Hqóÿ"ÐwaÈð$(5þ§ :6rLD|¸>Š8ŽHé8…ú0ßÀ%¼a—¸\GfÄdà&ˆ!- <º’Ç ¼ÜMr <Z“]^ž"ßxÜOûx=èD³ ü:î6ðú£ ‡‡!Ò Æ@"Œ‚ð€¢¡Ü ĺãl*Ž'AWhhƒ#µeн«?Ç2·è="—F UÃ>]§ž¿á˜oq"öqˆ[á!AsŠÛ1±AЭŒ=§»àYˆ¿}‘î Ù~8ÂÏF?í*$z \Ÿë&NI_xûÞ8Ãy¸îx´J÷ÎA¥£gƈL+l#ö‘Œ£ÜÃþ¬ŠC,þ†üjE¥^“±Bf$r=-8­â~H7…Kd·3MX˜,|éÈXÃn#þÉb/ü4TÍó</dS*OXŽ6Œ3lÒO¬ç:¢Zó<ŒE‹ydÓÄ})lKžïqÎsÏ÷ù'è? endstream endobj 1105 0 obj <> stream xÚca``èàL ,@š‘AÆeƒ¨4€)¾$À "˜8€EYÀê¤/ endstream endobj 1108 0 obj <> stream xÚUiL\U>÷¾™aÚÓ‘jU”24˜ŠeiiÙíPTJ—˜²t„)-D´¶˜Æ-Äî&ú£&š4¶?£I5uCc‰;ѸDýaÔÓyõ»÷=öº¾›7÷œsÏö¾sîbDd¦ý¤5û Ü=oÇ!yïÎîðð®êò—  R¾ê ºRÖí¯#2LBæë é2ŽÈh¿ª'ß—ó¿>ü³áXgÀþ¢müà·GûúÉKùD&/øÌh :1òÊà[ñö?ÉŽ‘ˆæ÷C£^ÛÙvr³*H—¹ÁhàÜ€3…“öˆ½¶¹¹–ÝCtýº!_ýù峈™<¿™_ѤªÂWÁ+”Dä±:¬9«ÃÍŽ¨O³Bu’_Iø yô2 \=#¥B¯8Í“fÏq(Ng®É””ñeû”ZͶ>lYi^²"µ„O$¾F6”ߺj•©Pö‡ô8Ë´HÌQŒXVGg©¥,ªŽ‹WDd§§“ŒÉüʯÿÆ'ùU²Ð­@-Ëé,öú|wzºÝf2åº}Å^gv–ÉnKgc±‰'úw××Oì~°xd``iǹXälÇÖ³±ØÙަÓcc'OŽ8ˆ|ŽÁïM"¯ðh·gÙôf Žï=zª=gë½[ÚÙ·C{'NØíe¡ò¦nµ@感Ç`k¥Û‰Å.>'§$»2'©tæóÇJª¶Xÿè¾¼Þm½}«Û.˜ëãµ #«G6÷M¾ÀL»·´õõµ•ÞW$kd'°’É.vس­?}ÎW|ÆG5<¡£‡Ž•n¡lèU(%ž´ôô¼µ™) ›&,öBwaú¶C)6Æ’—›ßvéÚ÷ÌJ±Öd¶Ž¥¶'[¦´Ô–ó—η¨nWkê’ü² ö^…ܑױÚÙæRO³®‚6gV‡ ñgë’.zcQe|„\ÅjZT›»;wìèlìÜ9¯8u–§FFΤ&ÎóMËO‚8×0_6Ý›izoÖ°×Õ fS`vY-kdy²Oæ÷§ÐäP’æ(ê—¶ÆOz?(^Øë½™­¯ ¿}ª}Jt%M¯†¿ ñÚd<³´ISJ+ÉV¹¶?ãYŸþ¤~1ú‡Ýú‹³6õyõ0{éÍÄäw"–Àn=l·bo÷xìhÙ1Ù>蟤Ü4YËþ‰ÒàÁú†ª†Ñ:ßæ;[j ëœYw¬,-ª —{ÂKŸya둯±òp4sùkÊjnK©»©¢¯²¬·Z»óúhØaY÷+)Ê·‚þàìïïŠýê7ÕocNü†nº Ö4­+ì´Ù¡œœr\›s'ûEÌ?˜Sóø¯Ƴ’Båüu ò×Ä}š£ç½½øAa#uZ¨fa å|õ’Xd*lló–W_-úzˆNÑ}}2»Øm¬ « ë\gØÅEëg}®º(OLêé)»à±ÐEt 3,s_v ¦ðvæè܇uZ¡*üãh´ é6R©:m¢<¶K§“pWÆuÚLk؇:½„VóéXK©Š¯ÖéeT©®ÑÉ´Ž?«Ó)˜‰_ét*y#TM1ê§a ^êFô82v#£"*U‹Óäa ÛDQê™T Iûæ«AÉ…°‡àk¿]Ðl‚uo&ù)k¡U JD¼°è¦=ð%dnXÊu"7cÕ‚šö1ía®}þÿ/s~›Ìv§1yzã ¢º×|hÆ`;BT6ƒS!­Å^ ÉZÐ!Ú…}-y°JqÚ Ùÿû†^™oò QDêì†,†8U¡Fù=ÂÏ0ª«ËnøŒâ÷ï4kdE]"­à°+µÍÄmÆïbû®yöqÝÞ%»$2*ÀÚ+— Z³ù»Q ºàCÐ-˜A¾à/¬# ¢Ïz„lr•m…µ†å©—ý!ð‹Ã‹À34ƒv»¨nTv²øÎ= »dŸˆ¯é‘º~à×€½YFÎóÜ0ÏC$ »¬yÉ{ô_2ë’{\öMYÅõü4ŸZwgáfúeuý 31e*e®~™Ç} Zi#²Þ‚]ð•è½Íøm¿‰ÖKÛfHÄ­i†´FZl’´v¶AÞþ&z{=N„ŽðBV:’Ûdd' ÊäwD kÓA|kH~áÇ5ÅæÕdPÚtBk—ÔÌ”÷)*oV@v”ȳ_f‘XNWdPǯK¯D~Kïì¹èÓ!i¹CÃú4=¢å¤ÝÉø¿¨êÂû0ˆŒEeûå,uÉÜÂØÅ7vã\ ßð'ƒX$ endstream endobj 1109 0 obj <> stream xÚc<"5ƒó endstream endobj 1112 0 obj <> stream xÚµW p[ÇyÞ÷€"ˆ ’ àû>€à}oʲ$ˆñ”HQ¢"‰¶,[©/9ª/%Ä“¤Ž:΄JœËq%N›tä#™ZQÒfÚq§3q“i'3‰œÊéì¿ûO[[™¾ïí¿×¿ßþ×.…£ƒPW¯Ã½,ÉýkhyÞCãÓËc3‡ž½ü!”wc"“ÝcSÊ’þÚüÐÀ&˜W ~êæ‰™Å“}NÑBùz„è¯NϤó‡ßíGHþQC3é“óèeô,BJŒ7̦g2Ÿ}åõ ž@Ht èÔSHs¥‡`D;WR›JB«DH „š@_="Œ|›»ºš)ñÒ5-ûk„6ªñ­£¯ãÕ t¤}u±°j™¼L)/“ >—Íx(}}ÍO?·ö7ô(ž†bëï Ôô/Ù+|^¿Ç­Õhè<5î;T*Ðç¶8Ûëû³ý6S½çaIi¤ºÄ\¨1ä)ÕµAw‡1ÈÌ펽é²hu²@cÈWé^oSyV·:sx›@qƒ~µy|¹ÅW¦6YÊÔžà°˜äeP6õöÒþ¤0ûÊUa8,¼Ju “.1=$v½8‘m§=ûß/nÊb$ «hC–GÍ‚µ¸R«6A[” ïÏ=ÔRÏ=ðË>Úà s‰³ë…˵+øKdß»ˆ\7`l¹yX.UÆš$…‘¹©×²Ï‹ã´8[O-åÄãtçÑÕøÚËGWïô‚-ô¨|Ë4Ú€‡# /`¥ô.7øôåÜ/ÑʛՕ‘ìmõ·j—D燱ä~ÿ›W¯}å…Ñþîd³hìp]cÓäó{ëÁlÙwÀ(Ô ¿ X•«Gë‘›\¬K¬ÓýqñËÿˆ‡ââ¯_g«GéÔÑÕÕ£kßà0S¨üçË€ÙÍùènáb§a اÁ8ÐÀyŒF[B㑈*5§4 ‘¾¡r`u<¼·:2‘üqáC?ín«ßkm÷%¢³gs“Huùç‡dÒDÔâ¶h]-Áà ëb\IÖù*½U¡=\Ká@Æ1Eðljx­–XÓ_A”æq¶âJD-?÷厧„'ÙÄ{½ôpóïOνP-+2”·Ÿ’¼¶:{å@UWHìræ8ÂÙ_=qyžqèJj¬Éýb3÷úmÆO‘y¶Ûl+ˆUãíqLÂØ¿©ÊxbùôÒ}sZiÒôÇýT„¢"¾Xã¾®þêœSÝÝ])ñ¥s^º8”hjkbóD¬*Ï_Û×yx.vb¥nz||zf,3‹÷ï_ŸúgÀñ¬åÑìŽfÍŽpD»Ã¹‚çß7*ÔT«s|æpÒý{\/©0ô;:lšj…ØSî º"×#2}ž­bBrWªY©²¦ÚäÕú(ŠÖú̱¶BgYÞªaó••åN—¢˜B¯9±°êÖoÓ!Z‹*·°âeYâí CP¤Öã÷¤ÆHéíÕ…:¥Z@ òtÕê×|oƧÄ*–f5âtâÎË:_‹ØZª.VÊD9Œ¸²‚:$t8„7å…²FþsÌg¯»zÜœïj@W߀õ w¬Ï+‹O*Ñ×;S…jFl5EÉ·kG$1gQ™Z^$Rj:Z©R‘Ý.Êþvr–“„ÏÈÜ‘ŸLù‰”ÁD‚ºæÞZ¸\‚•? võ5‘ãBj5ð•еԅM97é68U¶r“ÚãæÜ†µø7Üɤ֪ƒñøOƒ–Ï5wV7iõý¡©ùc U1êÂØR§Ã1ÅžTs¨·âE‘Ãé^ÿ€Ð&dÜîµqð |ܪ&ŸˆÒÌ.=v.?u¥ç±@v¸÷qÄÇíÌ] ¹ß²#×jwæÚÇꙥ±3ì‚<ƒÁ`Ì ä&¢¿lŸøì¨ìg P?ЖâÜ¢Žn·Ã»°’ØŠPÞ¶´0ß!ç6yÙsO±^ꦗ}ðë»8@ýíÀÅ‹Ùû.ró« çЀݵá·®Zy°œõvxÊÆ ’î/û†ÒDŽtrV'4çD"ã}žfS?ÒÚ·9y$™’Òª~ñ}CæF¥@4®³‘ý”Ædaöê¾OIäB&G•ëÚר뚲æBU¬Ê}zðݱ†^Z›}¢4¤*ð,QÔÕ«Ùõ“ú B* N¬ýöúur6Þ¦`'±9ªwœÔ»j²:>§ßu ê}¢ªxm²4æ°Õ'zžÓŒ] ùœ‘úh{»xtL<-ÖÈŽ6kl•z£^!/V×w¥Õ6[yu¥¦Èë „êIιM›aýŠíg3w4oO;ÛçšÓg£‹½Ýã¬ë{QªÖ;°o¨?Ü$±éŠJýiñ¥•ž3Í­1‘Í&2X¦&Gæ¬Fa™¢ÀXjo²ðqÖº-Þžx¯d•d] Ër ôhdޏ—¾íûYôI_eòÎ*>.þÿ–Н­#üìM·eÛ!ùÓ{‘ ’ß„Û\Éâñ{yw÷0°;œ=Ügzäôé‡Îþ54è“¿ª«ë“ÿ ïÓ5Ä^z`å™Ï<¸òÌ­Ynf6Î^OFÏJT¹£s1‹)¥Í¨sgÌ“ËL…e3²´\n…V’Áà®±yö|ð¯}U{’9ÒˆoÌ"6ËóªTB•Ucpæ3r«VQª”j]ž¡(¯ˆ•‡á™¶ðÞl8Ò™~²nMõ)­Û·g¬¿<éÂoŒ5/–Ù…¹¢pn®©²²,_c2ÖQNŽ&Ç#­·ÈÚq®g`¹.âp…Hþ0¬»éf8‹Jv— ÜxµòÍû«ÞL`j%w!˜€ŸKj¹FóÎð0Õ@‡=#é¾>·ÁÚ;5¥2ì©om¯°+2e¹µÆ± 5½ýË‚é¡`—œÒgšÂ·JÇ(bŽ–^š~ƒºª‹Ëåb…,_-ÑTÖ‡³ÿB3X÷#yæGßG 󟘿QüøA\þâ½ú·²ÊìkL>TEcñ<î¿¢°(«\× Öˆ¤íÏKðßóºË#èB1’b_GCÕOÿÿ‡¹·‡Ù{÷¹ô§¹& ÆQŒâÿ ÷öÐo¢Þ{š÷ïÜÞÿ?f„Û=Ž_¯éˆÙþ ih;Îø&Ç•éCæ×›FAêð0Gn°q£ªÄرÕN—à³k[Ÿ©hï½é‡nä°~âÃû£3[ýd­.TEÏã{(`ØIC@W·ÑÍ»E!êä]é‡w¡ÛŸ„èг„nÒ7Ęú>=ô]æsC ¸§¶ÑÛ˜„:žRÂ'ïB?!tkƒD5<}Vô;’^BƒH€j!wìÌ©ç£ïÁ‰C r€Çù‚ã)d†ÇÓHŠÎñ<qýÏ tÏñB4Aåò¼9©c<Ï¢ê‹YiÏç¢$äy ŠÑ§x~ŠÒßåù<Ðí-ž—"¯ðQTæÐ2PkE³hÙ«ƒ–i({6g-ZÊ ÈZ‚ï(ŒLÁìEx _Ò0ª‡ñxÌš‚2Cf£ã / ­n˜å$Õ»€šÛ³!e· Û.)g]î9¤wv43 w@2ËK¶ÁÈ9˜{ 4’Aa^gø† ôAKø ƒ2„<@Aè¶{ßË$ÙGÞEhOƒ†3h†Œ™‚¶9XëNë${Âr–ÁÚ\ž92gá{·‘ ĪØÎX+}PKÃÜí­ØÖtf>bþèŽù‹ü|;ñšE†ÿ$t‚Fmá·¢9ë€zÆ:6µï¸Ãì™]«oIX€¶ã€[·fsºl"㉟`ý-‚¬Ï̦¶§¡Äž%ž÷yøQb1¼› 2¶ô×eYuv‡äŽj e·§¹§‹ÄÕ'A6JÊE¹‡Õ"“™&_#Dj/±n/ð”$u\Ã8ëC-€ºJ\¯ßëo ê­¨‘Ìí‚=]ÐÚ@f´žëk"Ù …†¡l‡<ËΪEÞ³qí$hæñ„‚ñÙÇ ´b sÙï•‹ÌO®Wèhn‡MÈœ5FFH<Í’ÈJÂ8ç Â¢Ë ‹,ðúåí?Cö’†w«ûé™;»CË|FÀ>ÂaâbrñcXuw<,blÙy’[íÛ4”xãÐ5ßñf#— endstream endobj 1113 0 obj <> stream xÚcXÐÀȘÀàÀÈÀÀ4­A÷ 2KK3ßÕ endstream endobj 1116 0 obj <> stream xÚÍV TTÇþgî½ ŠX`©Ñš]VÀĈÊÓâ …à1¦u‘ÅUy JÄWb°‰ZSä( ¢I5%ˆyµ>zÐ$–ˆÇªÕ5 ¥Šø„ûÏìõ¤æôôôι÷þÿÌÿüþæ^ à+@ˆŠæ·lÌ»gpf-Þ³ç&e'~´Š– Ýà0Úb6%<¸”‹´ã`œ ²àDϾ4ùÙȲ$[çÄô¾€ü*r=)uŽ)&2úK€žV\¿ŸlZœù°À) y}Š)Ù¼6²ö=ä×hdùd=(ÊfÅ-úDyÂ]ìJ$žÆUWÛ*«åpL޵Ö˜Šá%ÁÒÊaå8êh¡ê9ƒA.âIü´®­ÖÕSã`ðöV³­ì ûœ“Yd2Câm3/ÜìÕ6±÷ÍïþÚâ*}âú/ú7¶¥cçØ-¶ðüN2‡Û·àöø èjß;0 (Hu` ô¤E…«ŠKªCš¾[ümþu¢¹Ä,ÍGÈ‹{È·M÷?Ì_½sø–Q7¾È=·Œíg ì›ØVvŒ¤@ûÙ!1웟ÎáÉ’~Qwr&ÔˆO«ˆ%ç-ÂŽUÅ·«ŸÓC<ÚÓ?ÆzBëVÕº¯¨žeFÁ0‹ÄðE©‡Ùùb¼©(; y3ÊS-§"õxíänÞZÈÀ¹LŒ…W'NdÑòVQSŽ®­p´ÍµH2‹šÙóäh$ˆZól,B6ÑÀw”ðšÒÅrD /àÌã:e„@õi"Ko«ØAñ•UÏnÓ$žž¸cbEíc‘ÖÃxÁsŽÇñ*Rq0£~ßœ‡;#Ÿ‘ȇÁ$¡…3¼Ó£pv¢Ð´}-TìÊHx ß/á —á¶Í•tÁ-FdÒE'dˆÓEÉ8ËnïªX¤Ì? W=b”Ú¥&BgJ% I½Øí)bß›DGñ8ÓD„ÉËöŠd¨ø%¨õO¹˜Änm_ç}š%tS:vX6ÎeŠ2Õ˜ì;ÖúTµû~ÈÀˆyeÓÄç+bKÂ7Ïq.®sä#þ Cïï endstream endobj 1117 0 obj <> stream xÚc`‚? 68˜ùx>v endstream endobj 1120 0 obj <> stream xÚV lS×>÷>ÇÎO;v…Ø1‰ÄNâÿü9!Îs’Ø4Éh !ÄÄNb;v0Um7èÚA»UŒukÕMtS¥M Ú •• )Z…Xú—•ÑV]a´Û¤Q´JyÙ¹×/¿…­Ý»yïž{î9çžós®ÒáŽRküzïËÈyßÞ¡ÑþÞ ùo"} íçƒá`({äúÏ”'çDFz¦ë7p½f0šÜSzR¸Žëáú¡á¾àz}ÉEÛGƒ{âP ñÀ:\ëcÁhøéÒ ×pÝ‹:qPÐ_‘ïBý6íB‰–ÔLzÀJê‘›•Fi J¸'P˜yÒ¡1h$hszZa–ÞP˜IÑÌ.Í£a§1zÐÚ¿éeŒV`Ë1ä|{È3Ò â —§œôûS? !®üœ¦ „Ô2—Z­#øgË58lÄENÖIŸÕÜüGµtßþ,™®IÖ¯“2‡t‹¨R&Ñ8¤ó¢HD·çeú&dC>€ÁX\ì°;6«6W£$­ÎétØ‹…Jâ0툔‡6FF"Òç­¢¯¥Åçkú0ѾÏwl,ñÙ>¿iÓ«}¡Á@ ^ÎR=ÜP„lÜ7«Vç*6™TFÁ¥sÙt.JI'«Ð.®[e×Ñkv_p¿]uáâÚsçÝ?¶|šFŸO ióñk$»üæÍ÷ß/ÿ-:M¸Ï#ô*󸈙α;]F¥Je"6¢2›Œ:mn­“\¯*ÅòuG섚‰à+Q+¥ˆ±'ÖwY ×t"Iöƒ%«M¾é1†/Àô=Œ¹ÀL¨“Ú V wº[ûI¤¿­›žUÒKSJú¤â¤§°ò qb ÌÂ#ñ€´\c-–V‘Æý —Eñ¢(Õ’ "údFùˆÇ ¹],éìŦaÀóCèΩ‹¶>Wú\øTÙ©ŠýÃeÑÚµô.âŽ}5ûï¯ÙפU¯Ì{ÀÓiuªKò¤ kf{ ûrë"Ÿ×™*ÛüÖ¤cS/NˆbùŽÖÈÈÑ·$oK£¯ucSc‹ØýÚöMû½vŽ|³ïõŽŽß‡ú"fÛ=}›é{ e÷ÎäœWRh\«S›”‚F'Û›]½ëÚÚ­[<ݱ'úÂë#ýAã#»½UÕÞ¬Ú¢Àº®Ó^Ï6{|û‘—ûêj½òvôäѽ±õ“Àû©1Í‚¥ FTU†\ÖÑaÈEhm*#ÞZåù¤R:_åßöüþïøýôÈ ¢VÒC¢8µ—xîÜ‘{/ç¶0;¨Ì{³S>>.­¾t “3õ;Q¤u¢œË¿á¡Ä(!ƒ²«¡ÈaË啉…ãt9ôŒô‘ô‰‡øî'>éñ6ûá==Û4Y¤„x¥W$!=Vâ¿u¦³ÉY§LùÀðãÏö¥Õ·A>fôÕg¶ìdóŸþê‡Âé_âíÇnwåŒ,ÓKýï`%„³ÜÒülj¿)=p‡þ“ÅŽ³¼Ì=Ëâ“÷®¤ö„eÈ7Ïñ÷<ú4ž:#Iñ飬ÆîýЗæöéVp×|è¯e_@@ÈC"å…vÁðà„ð:“0I2I'Çù¸ÈÇ$™¤™‹†›Ø]Ç÷p¼ˆc‚£ë‚fPÌ ÿ…g)ü«“(2îá•ÊhvÏôÈ4…%ü?F ÐË´¬pE¦Ó`(dZ 2$Ó*h OËt:¬#ïÉt¬¥é2 õ´L¦³ÀCwÉô}PM!ÓÙô)zK¦—€=í¢9 q…]Ä0‰=lÅ_ˆrŒW¸;Œü!ãªbФ6 gçöY­_…q£­Ýø ¡¤µ“øê¡‚¨Í¤¼xZœŸÇö˜ÎŒ µ ò¬¨SÆGžÀшԌ• -˜Ùøßgêilæ>'ønŒÇ7/b²]3J£î.Ä" •³h•AÎäT †~œ+À†Ã»}Èûãˆð‚ø&‘DdÃå2#oOºW¦ÚxDÌ;)µÃ4Ðf ¿ÿM²g“å—aÒ‰« êÎç²ëajèï¢Z Ÿ”õ-¼Z’(S ¥8¾Á‡¥æü· GÃ([Šë0Ê–Îb_zíè¢Óç,$7‚¾0Œ;Q;…¥Ë'y0ü’h…ážE{g–߯hçÒ!^),šA.Ûøµâà§ÆXn]`¡9‹ë¬ý,çýôU< ñ9Éëfz•”ýKÙ òo!vhÏnÒz¨çk¶b~<ˆT'4¡×_Ù­7`íµã×ëf¹n9¬sÈmàÍœNíùø-à‡‡pnÁ&Ãl‡Ñ«:»øj¯pV îã.G¹ áÔ-Áb ó¿:®zÄhxAN\§¥ú¹¤ž÷SŒwVWó3Î=Œr,g2’ñ ÉùòX‚øÎí³:ÝÍuc³=4*߬FR>¥z2ù%²º¸è1Ëlœß©îÛÎ,ÆÜgÈ·þÈËÖœ endstream endobj 1121 0 obj <> stream xÚc,:©ÁÉ Œ˜ endstream endobj 1124 0 obj <> stream xÚí| x›ÇuàÌàà qðÂIà}€(’â!‚ ‚o‚·xSâ)‘’HÉ–eË’,%qdÊm9ɺ^Û›:‘ÛušîÚÛ¦í—Ä[ËŽ›ueoÜRg¥uòm´_mÇÍš?÷ÍàHP’×îvó9YÌû€æý3oÞ¼kÞ (!ŒŠE'!gqÙœôt7`>Ÿ½ÓskSißkÑAýWi3“£Ò‡ð÷Ò•Î>ˆÄoÊ¡=íì™ù•UieÆhÃxKåÜâø¨Z)FÈýw¥.Ì®.ÅÏá_"4Týu £ó“ëiÿ æ $.GBâÂç‘!r޵Ÿx•a JDD("¼†Èf°‹P.’"Ôä÷7a@ln ¹!$,Ä9ˆ/DM.ÓÙ¼à†¶Å d•ée9z™~?Î=ŠmÜ+äò†ÝJ&àí(Œë‚~R”† É­eJEª8F¡!ð0¡m·•›ŒF™Œ¯¾zêœkOasÞ©åÿÕÿ@cçÀáó#žÖqr¹m´¶3Qkr9F÷ã‹U•UVîunÃS]ш0êÞ”’t¢†Y–ÍF±Øh0™J¥Ba”Ye©”ºŒ¤7IDéþ sEªÕ>'QoÜp[òÒRSv[¾,ˆåž¹gb«èr1ã} xçWh„Ï(Q÷qÓå‘c§@E›àkD2 †Àâ“ÛÊí]‘Ac¶Ûå1b±"UIùÀº±á:™ÐèkhÞ{üä@¥-Ï«Ï0îýŠ¢Õ‘ß0@ô=ÃÜoA^kG[¯P k(O“î‘gp¿+¬…y->ʵ­KäCjmVXà¥@ÐJÃâFAR£lT òŠ[I¿yžLôÛ®2PnTv*ó-ÎÊMæ?s´åiÌÅ{š}…:­ÞT›­Ë¶h²rrŠôKnž¥Ð$è²9rJ¤2{nEC]E®]–šoÊ.Mwd¥§ô™éYÿQš›™™™eJ¢ÒÍHy%1í¤†¤c[…æ)‘„’}ÝkËÅ3Ý«‡¹ã ímmí xjå©Àw.­<Õû·Ï]XèáõõuºþÝ@³\AéÐ0ðì;Œ4O[c2á Ë÷;VÔ•k鮚_oö_\8Е­o'§.ž>õ¸4Ñ—,éfiîé¡=8øÌâüÓƒO/žyüñ3g{,D»‡ÑN¦´cTF³ác&Ø7ýõ{ω“Ä·åä †çÿßf"Œ¬à€nrÊafg¶)yº&sx2ª#SR¥!øƒs‡ª§ Ù³»üOÝà`唳r,73'PÔàÔ8+k{ ÿzdŠ´Gš^c3–XÔú½Ê”V©rWqv‰Y¡²y`îxX¨>è³ £M¯0â†þ«DõSrÌïê¸d|ú¤ÐXÁ›#Ê`8Q}×ðésýCã½ ¸2ϑƇŽàW¹ÒÞ½Óíø5žN0>ŽÚˆ ëa¬' N†W¹‡ñ[Üø>'±·97.åÞ ó•€{*<’ú£•I è“fcŒQ&A„|𒀈TmµkGÇkÛT1)µ¿î©¯¸›È‡/ªd†¢Ï;÷ù"“|È]›ŽïÛ?ñJp]û_õ ‘a‡œ·<¸jëº-­ê u]æW[½ùÎÌŒúøÊ£#ãwUʛ㤯ŒN§$ù$ÉÀ;Ð$)Œw£ D)M+·Yƒ±Î LM&Áò‰Õµ‰š˜MIBu[iwãž¾¦¦¦xàû Eú$kò›±nCIóаtböÀÈÞýˆŸï*¤aqâ¶^¹Ó©!hÅèÁ«³6î!Ò×fõçå¶9ZWê«f]µÍ1X†kˆ¡z¾Ù60"OiM‘ÕíwºÛÝÎnO2P>I6`„Á6À:ürxSTX±÷L`xx Sk—«¤yÊ‚ü3ø W€¯äj´3 1¢øªZc_)ÈÅÜæ3~UVXp ¶ne±;Œ| S…–Ûº5¢Dסc‡[üGý íK3‡-7xÜMí/(Û´quyÅО×îR$Ƶ¯Ÿ<ñˆgv||_ï¨b~oP×ÿIÓ µ¨AÁ¢ÊéBàyI$Nï+ï]ío€½áªÅ˜›74Íý[Ü{ïä0÷Kº[ÐuÀf‚¾E~ñ+9´[ðLûRµÚT¥FS ?ËÈÊÊ Ÿ—7n+ÉæË›R~,Ä*yù–I ¶\žú•اQ)U¤›’’ur]^ÀMþ$H/ã£ûcDM"‘±”Ìn<ÚÒͯ- ”Uõ–âpXcäFs læß`¡X÷õé·nìqw/øÁ²´\«ÑÆëÜ÷kû^pm!()« †{÷ŽõB f*J$†á t&†¹w‰º9/…ìÒ 4B{oŠ·Kó™å¦ÅºS+î¥Zn¶¥£Ýëíèðà¤Sëõw÷:_¬odqqddn.¤  ;c³Ôˆd…òF-=h3tÜ5¾NÕ®cQÀ(TûJ;œ¸>PR§m"†sŸ;û`‘NV.ÿ± ¶ÙXâ–ÏÚ†«¶ÙiЃVÉkØÊ[­œlË_$±ª½ntíØXm›Z˜äºÙáÂÎ^·Ëuó)%2C uãcóGââᔩ}FFfÃòƆåÍ;Õ6yû“ ’„$]R®;?àŽ¦uƒ@Ð.¶Û¹·‰z¬ …÷çÎm÷"é³üöñüÊXE»V7PÜP­Üe+÷XûK»s4Ù¾+}·Õê6=ìkK‘¶I3ò³SuºÔTKEÓ“*uIR•F#—[vѹý o¸|{iÛÊ î$aú`ùèXß‘¾Fš<6噇¦ð÷ïNð‰#f‹øh€GYV¹†¨¨Ë­‚W^>›"Ҕ؃ï5÷]¥½L*µÚ”¸z㌥{Ò&Œ…|B.°ªV5{ã•&Îá;ëã,¾|™û-÷?Þ|“͇7¥˜ƒ1é4¿–ƒ<@Øt:ñ6Ù9xx%Y-ŠÓ%ó#׳>uvR‚VVT!Ë6þ>×­OkÏÅ%_õö‹.",Ïo¢´Íðõ§@;b¯ÃÊ­b÷?ñ÷6Vâ‹Î=ÜBPwjü¶ º™·èm޲•󩌗qÿm9779G£)M7f5æ×5WU´?a_2—šTZ½*µ(MSë(õÙZ)Mä´õ@ÓÎg¡„–¶ôa ;#ìé&w>¤±Ýœ:«¦¼¤²|×®²âÜ,­-#[ët×”äZã±e¹•ÍIɵ†\c¶ÞaÖj5 Y‘2æÌÁO ›/J¤1‡Ý!ÖÍŽ›M¯N²ïx¹.œšž§ˆSÄ™K77Cg"f6ÌõÞ æzXASCü÷Ÿûá ³q°ò0DJÙ{ ô+ô6¹\&3 °ÿíŸÿì­»“ÓbãT’{ Cœ³;È…Sx¥°+;»3{Ni›¡|æ´°6Ÿ›@{7¢çíù¤öã3J0pǬò^È`o—Yø|lº)ÆðçAj»ÔNøÿ%7‡ç¸~‡æ`Ü?ø|Üó,~yþ€ß2&3Êÿ~õ¡¼^\Y·fÙ ‚qñÌê’gˆ»ö|]À»¾oÿº··îßs׆ZÓ'N<Ùàö—>µ4vÞï;?và©R¿{ÏSãO¢p\@Œ1¢’ˆ¼<Ç*!ŠˆÅm’œ±£«sUþt±HšÐ› VËbS„±:iNqBŒªµ¼ÃUhv5Æîìçó,2K²ÒÝ–ýmš׉b³‹ ÷™OìÛ?99Ú<,/)âsŸgæGw¥ÊæŽ 3U>ÏÀн˕~] f®ÁâÌ5¶X{|{}¶|ŸÛG6ò»êÜ]‰Âø±é…)÷¡ ¦}²¤9ÓUËu¥¨¼MþfgwM5È^|`ðuš @F˜Ö±-€üR²2q$I•üÖÀe Ä1™"v?DÁ÷sz ™]C¹$…»ž^W%“V×)q¬Ír6Á†¬GÅÛw¶C+dÊ žKåAø(ŠkÇ̦œ.8ó¦W– Œž=à^¬uŒTU8§´õÆöfogùÐÚ¨ÐäfªÍ–ŒÒC½«ÇË'Üu{ëRtÞŠÆ&îÙØÌâ&ëž®¾Î†nf_ù°·ü-èÝB}r{ZÌŸI¶Ðþ¾•7ãñæG:ª=zmOÍò‚Þ®+t,TvZôúÆâµN®r–ZÒ¥­²Ô¾‹U'’T•ÂÞ’âJNõ˜B¹ùnü2Èš"ЮѾuÑJˆ‘UØâ©\ðËfu¯Ú$µÚGÆJ:çªDõ†U¼2}wÂâµ{ë-mZ­'C¢VÄɦÇ[î^˜±aLš÷ôž]è·ìªÊJ:ø;šÿ¤nå?¦[ Êš@ãV´ñMÒTW¿=¦¾’ ö™”2vžàÍÁœœ&°“ÌÒÙÀ]‡Jf{îZ}ÏÛ$Âe¢f¯Ï#à¾O\xmíÒÐkß:úÜà+'Ïœ>}fãìù‡¾¸|v€NÜ`wR–ïE$ý²?ɱ(‹“$öô‚F3ìS§KJb„ 1qYÍõøÝ* ¼iG÷)£ÜÌl+Æ *ùv†ÄúqŒ@|=CjÊOÉHH2¦Xëò—äÚX™(!K–“/mŽUȄ¸,ÙQ"iÉ/’&(ÛSÉiìB\/ŠÉ)ø¾ºj—ÜØfæ®Cìâïœ v¦c;¯c;BŽ-S²;J€v5/Z¬ŠØf vs]NYEnƒÅèÐjpú®Y§§¯³g`ožÏîÝmRvª²¥6ÛèÄke­Ö±¤~WñÙipZ­Ž†@½µ<=Aº+h™˜ÇX0Îòy,ðÚÁxM„örÐ×sBB²ÉøS° z el¬QµøóÞy7ÑîK¯ E±'pWŠÿÞdlæ.3hüòƒL,ïÓ†räP2̔ͅ"¹ˆéÄ|®7SD}÷.8÷Uýj=Ókñ76âÄT)eM…ÁÙÓuw|éÉ4õÌäôäV¼ng6’Ų°‚0·mcfš‹›*;Ï4ìûÍ}ænÎÓÙéÉ·h'&>p¯8¸o⮊朹šî¹)ÝRþ0½3Ø|h+XLØi üÝÿbËWK%ެ"_Éùf¢öpoV‰E{Äñîl5‡Ï„_9d±LE%ꘗ(‚ºÑÆòWõB–}Å™SXì+êòÔJZ޹{<‡œ•x&«ÀÚQ²›d—κš{-"œ70ÜpÄ?zwðúuaåêXûII-÷†¨tÈ5 9’JéŸ*âül6 x¡þÑ_V¬r>6üúPJNN’*.A£(Ü•#mznøŽdCš\¯%µUßÀFî_âˆô»ó^ä¾/¾a)7 D,W–’¿$¿a'v³a³5b¡ìR$€Ÿíž–J{¥Éž»¼=Þà ½%mEä7ž˜©ý‡\Î#{¦ï®]¿.¨XÀñÜ?µô˜„ä?ãfèýMÐ „"¤ Glch×pXÃW—6ëÖ&y\›YÐ]3géækº 2µýZMuiiqWYaYµFKÔ®¾¶£Îþ~çÑ6ß —ë„tÜSñÈ#5ÎñQÿ Õ%ÍåÊ!ŸIBJvû«Ð+x-Í¡-x{~ÿìá¢ÃŸ?²°××3=B/mUc‹­õ hgN¸3_£ù¬O¼+Ã;Û;d¶À‰lí>¾r_aÑRéÞñ•™©ÑýûÚꜼü¼c­ËkÄØÜ(Lìs –);Tj÷gMKSµ½Ò±[›?±3ïâù\c| ÂyY¹mS(—|=|/Êî8éGðõþ¢gõcͽÄ$Gé‡ö×Àø*X؆<Ì7¯¿ð™N&Ó²}NîþŠå?òx[©éÉËë)¹÷¤{÷ÇßKN©’[R•ƒFoCgWðs™­<˜Z>×êó´·ú=]]&~tynÿòÁÙý‡jŸø7þö6þì­9T ëÀpßa}T^î[è!„Kyy™¼B¸ÍoJyù·nÉÖô!o¤aüž¾-ºêf8ßvZb8QD¿!ÆO{„®æ®3ŒÓßé ׯÉ7c.#11»Úø)ã%gó8º‰óH :Æ©7c+¶n%Œ“ÁØz†;Æi6á::–ä‡q™0¶á ¸4ÛH祑ˆâØ þ²>’\ý>nÐú?HŽÞCŸo\oø« ܱø›B ŒÄ¡¾t\ð·ùõÆ…‡ãoo·JÜu@Ãä%‹¨›üž¥¨Ô‡é½Ü§+¤šþŽü¯SÈ*»•B —Ñ0î[uÖNÜj ’‚ýCO’ƒ¬06ÖÔ>M;÷4¬ÿrÀÓAÊ!æP2«ïL6_&Jö»z°?àÉëßMûá¯@¿«ÈÊ¿óãø~2”‚9„ñ›ô úÿ¦€ÞÔð‘Ýá]Š–h‰–ÏDaqbiD©4Î…âR(†ÝÒ?ïôn{HþñÍAŽ@¬#Dvüs”ß Æ7Ò ñ«Ÿ:Ñlþ–î ,vüÙYŒ»€áÉþ<‚샾WéßQ@ý xgÞ|Ÿü3òÃüÿ겚ùœÛ¶ðûñÞy­TVtOÛ¾ŸÜ®“"÷Öž3>†Ÿršƒ\Þ¥ç¦Û¼¿›ß–ØžÀöÖâ?ÈÊN÷‚0Ÿ÷mí%Ñò±{›>™QIDK´DK´DK´DK´|ÊŽOµˆ¯!+õð%+¦¿Q\„z;]+þ¯‘´¯uU±c-ׂçýßÉÜeŸþ:Z¢%Z¢%Z¢åŽûÊ0ý7|}ih¾@óhÞ-Ñò{XàB´DËïÒç‚ß-Ñ-ÿÂÌÜÏàË<|ƒÁ?â$/&ÇÃð¥p™¼'°ú'#xGH„EÂ+¯ ¯ˆâEE¢9€EßxIôž8ñS]¼´ ÎEáÖÅOŠ¿+~U|E|%&vdÇÜ{wÀ31ïÆ¦ÆÆ>ûzìq¦8'À}qç~w-^_0àïHByÂÒ'†‡¾Ìà)€kp#á&À‡Û!Q†=;Àpÿ6¸˜ødâ_$~;ñ%€×’„I‰ ²?ƒÐ•4…(D! ŸY8p<é\¾ôO&=÷ÿ¼Èà%^çá§<¼›ôÁ@ò'‘¤ó`(cPÃçÐ%–ÌHJî’œ–œ—\üÀ3<<ÿ/‚oG! QøDð6ƒ_I>HFÉñQøƒ…Ô(üž‚. ŸqÈK.O®p'w$~Æ`*y)ùhòý<šü$bÿž9ÞŽ.#5¦ÿOäߨÆ ”Œ^D„…qP§7¨Á:ý¿‡ù:A´Ä×ÈŽŽóu!2 ?çë"4ƒÞäëb¤Ã5|=9qˆN,ÊÃOòõ8dÁ¯òõx´¿Ç×P ±óõDTMVøzùù3¾.Aå"j@‹ÀÕ:ˆö¡i˜}éP*A¥Èµ&x»ø94 ­f´€ÆQÔê3ÏŽð¨eÖš„ç$Ð: ßÐÓ£Wà£ChF/³>Ó茅~eЧ„AÌåh‚ZhThLáŽQ·RÕíèÑøXîá½îó,ðt ¡ç"Œ=«›D•üúð½‹É¡ž%ðf ž» ÞŽî“sºq9 ŸÀ‚t&Ñ<ë3 ¸E }'i·²5P:k ©à:rh.À÷Çõt2PQ)tAkÆnÇR=éÐŒÐÝfüDÄø~|Óø ô©DÅGA¯-þ‹€£Eè[ íIè[–vñFÏï˜}‹Â2à/T›]0:(Kë¿Â¬€Êo¨PyN†¥=OªÑf•t‡ >Álƒ®f†õíùyáég³.DPöFP(ÌNË*>K™O|Î&Øs…yÝpµÂó¤9ʾ àeL»Pס=¬M[”^¨u!7pÝ OÚ®Ûë€o´›Q#ëŒ|ÜX'ÑÌêÁw.æÉ>ÔÏxCûPÚ“ÀUP:Yk$sYÂ2ãñ [Ç<`©„ƒžN×:ÉVøéåª-Fèd™‡^S¬§ŽùÓó¬QfQ”Ï%Æá<“eH#˼ü&xýϳµŒÂgë=µÓÃlìBØ‡Öø@m$ÈSÐ'W>VwúÃ2pL5»ÄâbãmžtÓðžJÞû¿QÓl¯ endstream endobj 1125 0 obj <> stream xÚc```š¨ÝÂþ¯înÀøE‚…ýïÞ= F œ˜šß9Àd$¨X[€ªKGLó¯èÒÍeù€WÚ·îð¸c±¯¤E endstream endobj 1128 0 obj <> stream xÚ½kl[ÕùÜãØNìÄŽû:±}ýŽ_ñû;/;qì¼WÓÚ·I–Ä)MZÚ1ÖÕ˜BlˆMÛ:¶±!ñ£0`Ò&$І´¡BÚÆ†Ø¯icÀgß9÷:MBËè&qî=ßùÎ÷}ç{„P-ÚD"„ Ópí£÷Jóxo)­œ?þƒ~ù5€ÿŠPýo–—Š‹uy6jxpñe@H¾»=ãal_^Ý8—1~x!…!æòÊÚ±b÷³éz„”¿†qãjñÜ)ôƒj|èÍåâêÒ·^Ê!¤‚¡ä1TƒÛ™!|Ïj„ï™fú+ãq Æ5›hÓ€“ò…BžI#ôø–h³²Œh“ùzu·à2Y€h¤}„¯€µR„š-*K›Ê¢Z`­,1Ë•Wð•­x/n}hÁ/Ûmu!Ôf•HŽX4žˆÇ#‘˜%fÑØ46@J4jV„YZ"eY-P9)! ´l$EŒ’KiiµJÛ:\y‰ù¨üœIW§44úÃG§G¸^«%¹ìëÐëÔíF…<7z[!7ŒF ®•r6Ÿÿ¦DZ϶XT£é̈¬ž•åtIƒˆ3³œ¦»½;b¶q iD›¨lßY”‰†/h¸ù>s\ͪ¬Ë£oÅ%Û¨½¿_!ë««÷Ù,½vÞÞAÜö``#öH¤Î8±8ƒ¡kµ,5`•Ãé$¶Â\Ì‚;”Mm“¬IV/O¢vY˽1‹b°AÛ t&ì|"ÒÍ%Ã5ry½ÍýÄKþ”äî±gÂîœÚ£öj›9›!̆­öìûyP¡RÂ¥íK`“lòcâm'1‹ÕþPã[µE‹3/ôp©p³£N<¤ˆÜq+á›ø¸]|Ô‰=RžÒûÚu°°Žp¾\K¦Ígl1+´U¡N‡¼¾n@VßîÀÑdK­d@OsêE¯ƒ ²Å";î¶U½ÑØT¶ùù‰zåFñþ7&fy.Wh®_)Mbgž ÇÙ|­3bô©ò[oðòød¤ 8!¹~49(çÖÀA|Am‘ãs¨rQ-±YÎ+¤—³‘«–jÔR>û$:D•˜œ,óúÍý³÷öæÛ{ÚBn³Þ$Î&&G§µU7Ÿî—×9ìæ°nˆÁË“-~J§|3—Ý|Hwò›³-Õ*fr¸(ÔªEËxç¸G&K¤?σŒU"‘ ktíý_u½q}±xyòò jLÜËk½½ÍïuÑ&vÐxHfþ€ª±Ž@lœP£@9ª-ÙÄ,°Ëˆ÷Ùå´àHÙ\°'}ãÁdéˆ7oè/øÝ1ŸËh µ•ïàrÞ¼Éo>ÐÎZ»ï[o¿½l0I@Õ`Èèk@TØ‹TÕ§GÁSßR¼ŒÇ‹¶¯‰<¯¿¨ôÂÀ¢©ªj ¤l¼)û+‰‡ Êœ¨®ò³à@fÊhl5»¬ñŽÉ–|88.Ïi“JIc¨9•îvyŒ•ûaç•ðôX v›gÜÿ`¥ò¤ÚîKN,HEC5’˜?ñ[¾ê×W@¯AÈ‘p5#ÈÞʬPb‰¯°i)n¯–Õ #+1®Ñ #~·•‹vZ&‡±J¿òt¤?|øž©âQe£'pÓ*¢(lš9¯•³É[¤‰R¼Ð“ë]ð÷Ú[Íц^ít4˜­Ëåóà 3ƒ©ò\t*£ñ5©3í]i±x Fšá̵u˜É19—c'?¤`‡™ÖÌê‰@ݧÝñ¬pd`éC‰`Z›ðæ=ñQÞ»XíÉ–Ó¸ò6Èp^iT:2¡c+;¬ÖGæ2óþ»óäÌ"kÌÁd§«ì$àUÑ Ÿ…Q YÏý©0ßWî»íb¶Ü+ñs•Wó ©¤m8À™`ç}ÆÛ†rݧ–ûo†5¶Þìî޵T g.+Ø4ë?ã¹·³ÃÉYw\8ëØžðáÊžàÏ:½ŠœuG}´³;yûÈÆõO¸ìì\.”ÍŒ[íÔ¿~Ðå¨%>R#…du^Í!]H=ç`š·¤Ž`÷$7‘8p»æÈX ­ÕÙ–b›´/ßÍt–&_667{ì¬ÞÂÉeêv½!¬™Åç4­êþžwI þ¸Íµ:½ÍM­'a¥Q§1EyIw:ò~laÉIË|bmª‘Ma¶&ßâÈJZ½U÷%¼øÜ[o¿] +½[Ý« ϶;†ÕôùdéÃ˺‘Xü@p}¡ÁÙ&7µP,|Ñ‘ÖÊ Öø^ç‰Ì‰1¸x8ôéIÃȵ½ŸzIåMX«•kO†ìÏ]zy”0Âà ¶€ÝÐä4†Ó“±9Ù¡Z8œïLEº}3¦tdºMÏ< ׄ¦çm&ΨÔ6ÎfYÛhmÁ9ÉTg$Ý~ =pÆâ<âõ6Š™“üe‚œ-üýK¹é3Û¤ª¨à>cØuw.1*z¿"üUÓÌH×DJW.MÎ4t'\(Î%[ÚšžIž¿…©ùåc¡vk‚#÷°dåï;9jiw© ‡¦pø0ž™><[¼¿«Û‘/„N†LúvM½v¬·{üÐh{¨›¶˜årõÈÒ£&r¿Õîì=­¤/}kÖ5r`~NšŠ†M¦ õ½¶ÐÛ1-î“z-V“²‰œ‘Û'y;ጔòg'#¢øƒûðb‚‡¢(Za®` %Ò"Ü(An5ÍÖX4†ê#ô¡—î‹…>²o¾b09Ž«¼c0pCg`ÒdôŒÞà[0ͼÌÁ(Ì ÏɈ¼wV1t gæÿtŽ(»þD¢¿øµ»/5“þ·îmëR嬸‚¸ŸüdUi ÿ¯$Öl]ú×=â üÙõLÁ¿×ó>áÿÂMúJ Þâê#²ô¿'¢÷À-¶£ë>¼ þ!<äÅ_‡öù½cþ0ñ¼™}tw‘z} ypû5äüùñì§èä…÷qäBÿåám&{¥’ä1•>~û$¼™ úüž(ý²h}½ŽþÆX™aæ´Ë¸Z žÙÓn¡mŸÃ¿ºÚD.¡Ý$zPô;¾Õ ªyp§½^SÙÝÄQñ]ŸhÅψ­²·Idösl'iV]„ý|²oŽ‹èX‰~J š:€x,À äÄ‚cø½W€Eh=$À5¨½-Àb´Ì°,AQæK,EYæ²×"óס,6 ° õáE–£ü}®G]øÜ€Ué(*~õ£5t G§Ñ TBËhn¡a¸µ…P  <Ì®~-Áh•Ñ1Ø)f”Ì ôS;\ët´ýÈ: ßE î xÍh›Peaî,·HW&œ%td’q8ƒ´u‚hy€ª²ª’®%Ç·OÒg]ß¼o–Z±3k¨L=r-Ê‚tP®ïiðÎJ þKÀ7Iý˜‚>3Ç¡O¢´˜=¸ÿϦÔž"¼€/‚Ç—Ð*¥¹pk°Þõ"8Fí"rÎCôù™Uºæ À—vQÃìŠÀÝë”Î Z™¯!%K3€äñÚ ŒŠ@¿KòÂŒŽǵø÷ðoü~ša@“‚Ó3€n§ÍTWmóƒ¶k@€ñÐv¢¸÷ê¾Õ¯JXÜÐ…D¸y?ç(ýÍ%âÛ B|½´‰èI”é. vžx‘æ±f™ÒNƒoG¡/ÐUË{$î‘àÌþL ž!ºoD³EÚoÐ|: Zmúñ2‹ôk…]=M#? 0‰v†ê:Mõ8Ð üiÐèÉ8y9ßq¡Ê[ŒjJ°YÊ1Da~.G+Ç8š‡~f ‘½ZñÞ9MGçÀ3§i&¬SOS;VK<ÌWbëµðÆýj­í‰É:å9TÇ)¥™îµ2ÝuEšQDÏSTÃUêËjDÖÿ- ñ_¥¶á½:Oòô,å-ïì¯óBÅ 9ÂëÄï×ÏÕýûa4&‘=Eë°Ÿê¶=±±óÄó£ÿ/*ù§ endstream endobj 1129 0 obj <> stream xÚcÈá<(‘ ËØÀL#á endstream endobj 1132 0 obj <> stream xÚU{L[×ÿα é€JyHY$` Øø‚SÆæe ¼‰ˆáÌ£øAÁPÈš‰„5ɪ4éÚiÓÖJùc[mЦnÓE“¦T‹¶)ýkRþ]'uÙ¤t]¦.f¿sîå™°-»Ÿ|Ïw¾ó=~ßã\#¢]´@:¢ÖŽëØGƒ· YÆop44?ÿÑ#'øO‰ôËcAe8ùý¤—ˆ s9Æ Htñbì¯c`,›Ëiä°¿GÄö…¢'•âŸ[î%|†óKaen’Zö‰¯coŒ(áà»o}û«Ð™$=÷°7É@Äßà½ÐhRW +«4ÉÀõ=çzœé8^À-_k«U­®ê‹ãÖb–GÚóùM°€·b¯£D"[š)á`ïÅßav~籃ûñ –fT¾ú9?ÄïÑ^*„•­âŒ¿ãè.9TWØÓjk1‹ø.Äo@üç ¹0«1v:K†³Ù2Ô¸6kÚæúÆW–#§Ot5ù_«ö*Á¬/¿<Ùè»Íïýôæµ[ýõÉú”®šî¥³ÊÝä««¬eyÌ$óu#Þ,ÿ˜’( ñÖ‚!?ƒp.2D >ûöÒë—/Ÿ[ºÏ €ÂF~xûW7®ýòöÎ_¾táü[ÕúÙàå_ð—BÙDéj©2ÒrÓà× :“ðíC5³§Ž·ó"‹6z+½œªíg¿?È2çŠÂ}MÕÇêáŠÒñú½Ã|¤›àÇ”Î.ÿF¶í”†ÿâ=/ú¥ÅS‹V›€7ScvÙm¢U6ëQîöžZn<Ñ3ú¢!­Özƒg„C¡Wúä&OÉ5íÏKO`-“7F×N]½>á,g½ï~ç»Wâ]Å%%e6KKØ`{¨b3™Ò0Xìaâ¶ÛjE¼¢Õ°ˆ—F¹ÛfgûèÈɱ—3Ãôì⫉—ìf[¨ÇîôµåºZY±ÂsΟ;ûVG½£zwª»ÈÓV_˜WTà ´Ü½+â8QóÄ‘=f뉈´6M /øúŒ?Z±8ÛqÇ'Úüþ¶cþ–²x©þ«Ç/z^ë Žƒ#ð瀗_p#%S¦ì¡:2vud´‰q»•‰Þª™S¬$jq5w³Ù–~E‰ïN_šwÁVä°¢©ð3À³×g%7•µõ>âÙ?awpw"N*å9µÙ܃0H!]N†QÑŠª¹îÓßzÏ|$i_וÞÓ¾ªN·¿¿¯¯ÿ‹ž¯5®œ‹aÎogzskáÌ™…Ÿ…'_†.9¯Ùë3acį q+‰y8ä3ZùwÒé>ü½•ÅÄúñŸj»ú—Õ¿êöb¢ñq\Óvê7N—ƒó?ëöJO›/¾™m2â#T.×%rÉõÇä¦~BÜݧȓÅ|ŠüÁV_ÐSèžAf¹æQ‘†Á¹£în1'O>ì'¢ïOÑ¿@8SŸ.ùÎ\§nÐÐÍ-t=Ø fÖ¨rGŠ®‚~·…>Û ®ßD¼²‹ t”ôk]~âI¥ñ¿ÅôÏýUy† h<§ÝòŸ\ð:ò +•ד•þ ñczO i|"yØßE…ì¾Æ?Gù.ÿÕðRO¢£|Jã“©’_×øþ6ÿTãwS¹á,ÕR”&iž¦hœFiŒbø/¶R)•¡ÃFòá4 yˆ‚Ø5P„N’\5$!¬íëVÓrÄ„¯Y¼‡¡Ùë~FêÀÔE¤–g]+ˆ3a3J3ð¦@b…M©¤#ˆÝ ò[ó²æc«‡âm>þ{Lã6‹ny2\¢Ð7î€"¢ù-†f¶S¨E*Ö«UJ‡±Ú!9 >H#Xã®Úp§Ð-ý¿ó—9(øÅ WPÙ …¥ÎdQDÚ©S~™‘ð3.«'Âr>#xÿ'M诨I'v l7KE4 ãS쇷ØÇ4{‹œ–t*¨ôª$ ´6ð[€( ÝìEeJÖk_²ƒux[ô ÓÍ‹èm'¬ÕZz¥~LΈ¨_ ^Ù‡µj‡°ŠþFd‡Dž3à‡e·D6cR·õkÆÚ*£F¶xnÞâÁ Éö9+Î2yŸžÙ°\còÆULçúTä;7´Cv·¼‘jä^ìŽpTÔ]Xž³×Žw ö T'm[!1âûÐ ©GZ4H^=óʯ@ õam‰Ð¾ƒ@¥VgJîæP™)9 Óã”Ì# ©¨°ú•¹e†Ï^W#jÝÒ“iisZ#RÓ(ïSDÞ,EN”À9)†e-×:2­ÕoXëXæ¢à·q.ætVÚFÖïмö=3¢bRïdìèêöû0 Ä¢³“ò›j‘ØBXEŽ£8•oþ7IL–, endstream endobj 1133 0 obj <> stream xÚcuhâh` óŸ endstream endobj 1136 0 obj <> stream xÚíW{l[WÿÎñ#ï4n'mflj“µŽãúÙÆ©Û8M²$­åÕÔîÜØytvÒ%ΣbVU)ctC´!¦ýØ:TÐÆH T@<Ö?XHhL*b ¨zÃïßæµ¶¬Ó@LÚùtïùÎ9ßûq®MŒˆòi‰4D‘þ&ד=ŸùvÇóÐxúÔØOÊn\þg"mr"•H߸ô"]/ö|ØÈÖ6c}ëÚ‰LvqgZ[‹õ  ÿ^zz4¡{T•¨p‚ˆŸÍ$O²Q$*†<2O%2©gÞüáKD%ÅDúEÒòËì"é@{ƒ¢'7³8¹X»E:®Õi9×.µAÀaº‘H'Ãêy‡¶Qù-t7²:R¯âW„6â€8¤ýk å¹ CÅ`‰³eåËÌ«ü”_¹ésó$1Šiæ@W-¨<>·»Âçs»L«Ác³YkôyÀ0U¢Ï}#SÑí™öêlÏL±³Ï¼à0ì8· ¸ÙåýQgeÙÍKüô¹ÓÊ9˜C °¡åÃtƒ.ÄõÖz·Ëçõجֆs݇‡F ŠwÛÍŽ±üÖ@0j¸oû}ð‘ˆûóÒ~Áiè “±¿eåEÞM]TDTé·TZklõ½Þº¥†ý£ÆXí,T¾RÔTÝ·¼l·ÙìBNtåï¼ r`®Ææ…(£I =sÏŽÅšöøcéÂ3²7”¦Áøñ>öK¥aæx½p¼%°¡ÜfózÝFSe¹›M?ËD#ÁÙål$/ñðò"³Â@iû.8ïßð5þzw¹USªÉÛUR¿w àL\;ö%[‹ÃRôù-um]¾écoxÓß>Ÿãí¯ð»¼^Ï;M¦Š +"VLèõÝOÌÅ?î…£/Ï?¦eUÊÛÚÇæ_~qøW¾ÆŽñ¡áoB–†lx AÖ6ª%7‘¥ÑòzüBŠÄ|n‹ ÉÓ0‰$Mun¿/—½XrÛÓÞŽCº&LžÉ²Ç/™_Uæ†í‡†ý\³Ã”_ä²·ä7±ímå÷ÖÆ±øÔÒçl“e‰ÛZÊ ¢}Áý‡ýåöJÛýöPµ½Vú邟Źº³H[|B¯Ö”rè•9ñÖ³ª¹GìáWl mO[uUÀÓûÀHv<ÚîÛ“<;»ÏÝj°îµ õWm{d‰VVDM#çWÿ~‚_yU¿}åÐx?tn… W•z«Õ Y‹‚êE¶§o0¹”ýÁÑ‘úþÖÀw̻ʄëô54n54Ôígv£px¤Û;àTž^ó8\ãÙ¾Íi}Ð!kð5Ô EV!*É#» ‰…êz¡Ë›ë6l˜XC8ét&ÃcÇXĨª xÃÁ`ah¾÷ç‘…PûB÷¯ºÚ{z_÷>èøøÐoã¹Úß ­-zCôŒô®!{%{…_Q~ͨ¶ÃÊ·r1ÒúAk#q/ÖgOåfþWÌzâHˆ%j˜wƒ®1DUñ<Òâý)©Oø&DZ--ïFó¶À_»Z÷31¿þ§¶ëʵ•çt=šË9‰ê5ÅÄ­%î.]R¹¦\ÓõHIëÛ»0®ùEÙÜ!7¨—vÜ}ðÂ'׊Þ]w=yÞwDßýç¡ù„¨£÷7xPÔü‡o¬ëGãû¯¿»ÞøuÜ‘¾î£\ÝëÐvQ÷Ë5Ä=e¤=Di:û.xVÂ÷Uxs#0~è½+|ò¿ç?ÔðãUø×zÀwøÿj?0p‰/*k¥W©ŒNSá¦ïkžøM:ý.f¦-—¿ÎðK1®âœJéÓ*®ÁsQŵä¡7T\G¬PÅõäd3*žGÙ³*žO;Ù[*^@ ¼LÅ )Ä÷¨xùi/¦þ’Š—ð/ò¿©x)ytðohšNÒ)š¡I§ ÊâÿŽ‹œ´_|3uâtûiJaÕES4J`­ØIcî[åš•«ædÍãeÜY> stream xÚc`éà`b`aPd‚3Á ˆ^ endstream endobj 1140 0 obj <> stream xÚ¥Y T[×™¾ïiÁhaGH „Ђ@$´f™ÅbßÁ,6ÆklœÚdmœné4Ó4{›dÚ“v&.é2mÚ¤“¶ÓNÚžö49=sÒLÛäøÌ´®ÇSËóßûž„ NNÚÑ=Ò»ï¾{ÿåû·{Ÿ…:€Î!B]½uÆÅœÜoÃÈÝð=2½pbêÑwª– ÿ„ŠNÍLÆ'²~w½¡âk˜ŒÓÿ÷Ÿ†ûÊ™Åõͧ2r§àþ_¢®/,Ç)—a}éWáyb1¾¹‚.£'*Ã÷ò¥øâäCßøÖçáþWñ7—þu?â!DïÐQ˜b®Ô2Rm0šÅ£¹<.Ms·× ÏiÄ~|]]>Ê…NÇÕ%~‰WGUÁ0Ö Ñô˘hH£ü¸ç  „L¢ QU…¨b„údâã”%ñ ýòÍ=ë°Nó`L(a&õÝÄ1ê§ô©k”çf3‡“ s²wç˜$J‹29óíþ‘ɉŸý÷ã‰g‰(ˆwëý[X#E „x •E¤´THÄü SCƒÉ(•B—¯66XÌ*¥‚/K©ŸÜùWJÍ¡ùªÃ­]K­[ý‘ÑÁC#1ÁGÏRG;_È1JmzßéîÈOçÜèèÌÂðððiÙ¦€O’€ÆŒXJ`gn0™8"¥\$¬ O€€¿zê…o~ñ¥X<ñk*‡zËùåÇ¿ð•›hCâ?@C°uhñˆž@B•x:IŸê€WøÖ5Îóð¼U°R÷Q‹~´{£åzŒz+6äêZv¸·ú°bý£ƒ÷éup{!CSeÓNw œvÝæGÝÃo¿|TÊòÃZY@2 ( ¬0'‹Rák¯µ^>ötâ>ê• Î_ê~ìéAm±sãìßw¾Ýù±ãwuõ|ê‰Þ¬ç0Ðu]k“H,5°Ôj+£Õ¹rG¬+`hUä‰;JŠ‹‚SÔ« ãÐ>¬•{äru·Þ³äblÝ|«Ÿ¾NÿU ¡¨¶H1=LŽÏÚ‚&ƒüV¥ãÓ{@’)9XU]]9û©g?÷é™:+TÆæXâ?׎[[ßÜü,MwÒtµ²´:£ý[ÿðÜ‹­y7YΆö¾w®ÜwßýÜsý†A˜ ‡{£>K|“~9q-á¢V÷2|°]Οâ”U€—,ƒUÉd´ZLàí|jväNïCsGû*#kÛÇ&#±XŸ`ðñÕ•Çbš°ú“ï|H÷¥Ä/”:Àó¯þ¹¨€H  ”J qh‰ˆAS©ûuðÊNø³îÈàÈaúåWfWûî¾@mó·¶‚lÆ[רwè¤LÉf5ñ±ˆAô´Å$–ÊÊhbe¡s²ñ¯Ë 47{u%†òh]y¡¾Ì1!ÐÇÜÒšƒ9*™«Íí1»J ,íuZWy¡ÕgpŽ˜‰Ý·ø´‚V 52írkØ5®L™n{ á¹'æ«}Ë®Ó £Q_WÇ¡úùã½ ½uúz›_qçjw8ÜÓ ÝhÝì;}!'âV×ë«3 dÎC*VßžËÆmgî ,D£³³Ñè‘Éz‹Ïq€L&Ô2éià”¡nh°Z’v’ʘPÅúcçLIƒA‘qÒ}³RÚ1 Ö´W—ÉšôÓGuƒ­®>O·ÍœjšvMŸqšÌMÍãÇh°0ÏçnóyÝm74Ί¼|gVÍ©üTè¸Çf·Ûÿdëýçë;ñØè‰PaaË@•/ ÍÍ -›ñi d®¹ÍDih&UˆÄ|ª°}Æ‘•ÑÇËôù;Ü-.G€Çíãf6Ž7mlÝhœó—šDB“40>¡ áÞ6—L•s°FêŽé/&¾·u'Ë7ø6íç›ÌJ¥ÅdÜcϤiåSÊÀb#‘DÚäánµÞçlmv¶r¹ý<ž5ÞÒrÄÚÑ¢ èšæoØÇœŒ`jo­.¬÷D] õþkv‰PX‘kî3ûÍÞX67£®§Ñ?ç›rPÄ›™C£2¤A »²ZÒ¥ÉeLêJ7a~º·y<óÍeJ«Gj0‡«e|îÈFÓÂw«µ5µÚêêgÂ>_GG»WàÚìi©àäô:5aC­Oc)åP‚KÇû·Z©„µNÛØ¨­v&B‹‡gg/²>wø\2ÿ±^Ž–DJ™ŠŠý!Päšn:=m—ðº²òXyY“Ùä<=åmkóùÚÜ‚ÖÓƒï·Ùº7Âýç½Þs]ññ@GÃÅË££ ££Ë$'YA ¡²GR€½œÁ~ëåeÇ®myiÈí•ʽç:O^¹r²óCx<ÞuΛԉÎÌ«‘©¬Jª´ˆÙ瑤¥«šÛ>1áì*äÓ\WÐ‡vŒ7Ímn­õxÚ}>¿à® ;úЬj‘Þ4Öðòy´nÕêpâç;w¦"¡٥葹”~oƒ~µIýÒBy?ÄÊ=C"³µ y€|Ÿ¨îtèŒ}z£ÝIô?´å1iµ&ÏÖ¡$ ç#Ø‚I,(¤‡8)œÚ'ÉðäCHSÙ$ýd[ dV3댾,«ª¨¾DSãÓ¶öÒœG-WTתBwÛ»·n˜‡¥5¢ }c/íwD|N¶U­iQm™ù™¹åÕµrŽ×"(/¹ùD0–-vRÑ×ÙÂÞZ¢â\ÏVtÛÚVÔÛel•‹ j¢•2yÓ‚àò6õ§™Ò…ëjšJ‡œ:·BÞañÏ72¹”þ>ý C†g}ÀŠío‚pÛÝêÕÐǘ7XùÀœ:÷ðç>q™æDy—?º2¿¾õô9ôK'oüè;Ÿ{%'_•]§+Õäüà™­/Mžz”R”Ij%?ü±X#.K¼þ™§±N5ÀW¶Ö¾O>Ä IzbÃŒ¤Äšd" vu¸Õ5ªš¾ž¿¾%‡« öîOŠq‹Ýnºãìl ¦nx$˜¸ÊÔJàíF½·¯ lRL‹gløÛy¤„Á™‹'“ÔJè>ÙNÓ½5Õß?P`Ñê+l k½Ée›hk·Z'ÚÌc¾¨ÛÕÑv´l¶K|Më(-mÔêKJoh{±à@NFKcÄ)·WÔÞzwW £ ¸ÒÒ² ¬8mvssãhÃÐX6·üNgÜNmê;õúÎzè¤êÍuT÷Aë ö¦wU棗T[Ìh ò)^t?Êhb>­ôè+²M¹¯ÝÌÁXSÄ¿pLC–ç€ØJ},Õ·‹nR±i~Ūƒéæºí‰õâ’°,/붇#â*¼Ñd tü·=©Èw-YJꇩЋmIFI93!þµ·‰|£L‹}fœ«"-êáPµL.Ê„Ñ\‰Çù©èÞp¿,V‰j4+ë¦>…ºÃÚüäÓlˆƒOªÙ\l {š´ú²›Œ“¨` Ò¡ÛMËI¤ª|óMÉ̬©Rh"µÅùJ‘4__ZÞ”Ï{µ-ÎÑ%î&CK¹_Ð||àä%’¦Ô™««4U•€ç>p°D§+© ÚO\¸˜èÚ"úú~Ëà4È¡óAÞJ¤gvâÉýV$ŽÔî+=c‹Rݶ·±ëpÃñQ¿ b˜\, äI=NOWÿ„N£µÒAK¯Áo6¶hÄ¥eJµöÄJë)•~ÉÕ×;8ô*—cÕ*ê“õ |<•¿«~™Þ¯XEÓëÓÎ=ŒÇ&ò™‚41t$šä݆4›XD{œN{½u÷Œ¸{DdL‚ùCnÖj•Þ|N~SyI]¾TX™_\Ñ(ª4<Š_Øåœ8Ñ´à ùË]užàÒ*fVb<àæ ” ƒA®6×UgUè/8Þ˜´ô×ë#6aÇ+¯*8§‹´»)aå‰&oÏ…ü>ß`›ð Þ~-×”]¡¿gð˜;2zt~B™Â1bú軓Ê„ˆ4yra6’© %9‡HÙsHr#™,¤TAp¦ßÇ)u™ƒn[È®7-·†ëËkŠ QZ_^ /³éd6ÊVÜèož˜#‰,7·Â¡´«ª2U[ "¿°PY ©’eeÖÈå†L.-Õ)ktù\® ÙÇXÛ=Û ÛdïvpU©ÔlXã’J#.­L1¥Fî>¤šo<2•›•“Ïã–Å›ãñèñÞPT’›_vï EXÖl+VåæUÉì¦á)j4ñ乡)J–¸TR+.jªï#¼#À{ òŸæ]¼Á5É¡U)2%+’ó#,ó¼œüŠÍAOÔ—Í+2“‰E…Iæ%ÕyE.ãî˜IüŽ.hjF¦Ÿ¯4I›´„7j°W!Rí©íø-’äViÊ-ÔpŽ'a¢[¹sc^˜ý$õ—VV¹›?´ÖÑ3 :Ð+¸tjò.e¹_% $ÕŽúÓ±ðÉ‹Ñå DT<ßß?NôÒE o>(ÏžÍÓµ¤ŽŒGS ÑŠ‘é›ÏÓ¾]XÌ„œ~²×ÞOcbø—~äpl`±Ó=°ÔíÄT #†3*^1¡x”<ë¿ù8›bÓk1`s°)€ F¸ÀQ\!±n,ec9ߘ0ήomüA^Þ³Òjãм†Ñ+!o8ä§+¸pé^JF «Ê>»½ÐZv(QöêäÔÀ˜paÛ¡Î=D}2.wå7íÑ;dZÚ’ˆ)~ì0h%ë5ƒVEƒv¬lÐçÍáJ{Ô¡v‹=Ø.ÀÎPkcµu¬Æƒ‰Ÿûª´¡©¨«%63p0ƒ–82ñ{/&F%"J<ÿ‘ǾH-ŒžI<ˆvÏ$‡”¦rªÉ’\z…}…ªÚ8qââÅù¿ñÅëþí6_±àžíûΛǂÏ$¾ò¡ÀøÄ÷ª£Þï›vq Ð-gßÛ˜$û2æî[œî©Å_ÿ,`‡bZµÆÇΞ­Xž6yó¥UBµv«9Ðê:<“ø=¦m9º•à·ƒ †ÉSÒ˜$ì輨?›[uÄÇʉíÎÞ]pó-kxêÇÄ|¿hm9<å›E@^õîž›I·™ð¤2bCÑ¥ vÂ|i¿yp(j±…¼>l*› OSþ5Ña„Õax2ñ;`Ï`zÈ€gþ~ž,}q|lg ¢¤[n¾Drh ªE, !øÚuñxÅl\n›çØ}ƒ¢h^A¯élÕ®ƒ `ÏŠ^ý‰¨¸¢°FC\‹N¡#gkǾ½hº1ù”z½£sÓ¤iî.ÝŠnM‡·,·R¼‡úÍ×Ocsu!à"øÜÞ±#Ñ=ax•óÖëûBðæÿ¦Þ"ñbÚÝ‹±[±÷ ™ô ÅOÙó,ì5 †Ú}àý`ò`‹G4ôkXŠMRŠ¡éÄïý=bp0|²î%ß·íÖ]ÈiåVÉú^ò­>¥<RMÛ£¡ sْٟKÌý”qÐjž4ÅRKµ²2›-·ãÃ`ù–zÚ°žÅ³0("xŠ’û.)Iv*K R^®Gßì/SÃ;Êêz  šxS^Ùê0(ƒ-&½Þí¾ùuæLr®ûßæLÂŒ‰Ô*ÿB#—;ÈïmíŒ|ùů]¾Ç¹*°4f—æI]‡æÆ¾¸xqàŒ;Í7¯ÿ?|óÏ÷ÔîÿU£¹MBÎ[¸ÿ“£\|ý÷ߺ߾5p‹ÏpâpËOý·Eá³ÈZ­ð|€+`þÕJûœ¡£ø­÷þÐçQ˜c‡o9âq@ÍÔoð9q~Âô;ø¿¢Û¬ÙÄÿÀœƒ»Ïé7˜1ÒÑß`žÑ#ø=ýÿÐäí\û‘sYé02ÒíðGeäÞ‰ßk±s‡™>§’¹Ò xG@ÆCs‡P ç0CÏšVx¦¦ƒø¼Å¬Çs“kÈÕŠ èoüÐ;¨‡¾E@g+=‡"œ' ÿOHÌù ꦾŠ÷ ì¼1x>‰k8ô_dÆ9£nŸŒqžDÝœ‡‘•ú%c:xœ|gq>…çŸfõdîStÝ0ëËÐïk*äBëè!ôYh¿¡rÒZ´-Ò>NÚsÔÏ¡ýåö6B;E¿ÆÉãLqþ‘s+'mÚÐþÈý#OÁáý?‡ßÂÿf†3ã´ÏÀ´ß·ý[¦03˜¹ùpæOR†´~Á6´ç ½•%€Ö–õ`Ög³~uõ ü ڽоǶ«ÙEÙNöÿÝ3hjjq÷ŇÜç¢Æ=.ìáHŒ0} v°#lŸF9è<Ûç /ºŸís‘½Æöyh†°}>2P«l?y¨Ï°ýHC½Éö3Q5-dûÔFÛØ~rÒ[lÿ j¢_`ûÙôGé?²ýdæíÀyq­ hÍ¢i46•CÌP=²@ÏO—a|MÂ]-¡qˆ 9j…‘¸ö¤V­‘»I¸N­cð;3;aõ:|å¨Åaõ¡9 #«°n–ŒáUÓhèÅaÔ« ¤5ÂÌ.h>è%é$©ì§¡ÛGåƒð•ï[ÓO$_ƒ§Ëäéí%Yb)ë`æ2¬]D&‘ƒÅ Ç»`瀫žLÁÕuׄlðtÆþv]f‰qø®ÃxžD‹dÎ<Œ-¯÷²XÑ Ó9Öfžà•˜çü¾ßL±*¶3F¥îâ°6}ÛZ™ùü¾{ýÄžõëìz=ñšu˜ã€Ýi:Nšfíʯ‰–anÜOÂܺúuï±zq÷] k0¶²`ëöÁjK/™¿Nüã·T0ž“)´àŠ-¼D<ë¹ý â+X›2·ð õ‹p]ÚC9¼‡‚Fö{Z=ÈYOâꯑl‚\×IäŽTë¬| MÆÃ©½Äº½Ð—£6rï°ÐëC~:W|ß ¾×¿p@ídmŒÈ!OtÁ¨‡¬>óÌK²A'„kžà9˜ö$HÅ ³Jî6™Uâ kDÆU¢Ç"Œb„™lu$þõ¸Ê£å=6Y#kÆaÖ™)'ñ´D"+N< ˹B$\$X&-²Æâ7ÁÚ‘è‡ïîsì§ÇÈÚ¥T `3öF&&&×?€U÷ÇÃHŒ-»Br«žÈ†w$L¦¨#ȇÿ-}‰G endstream endobj 1141 0 obj <> stream xÚcøÍªÖÀý3üï ùgÛ¿Ê9t endstream endobj 1144 0 obj <> stream xÚ¥W{pÅß½“%ü%Y§“¬·äHw±=-Û±lDZ?…bÇÝLb[–c;6¶â< $”Ô4@)M ¡ÐÓNšNiüA[ú 0}Ó¡eȆ†òž$-Ô—~»:ùIBnçv¿Ýýv¿ß~¯½C!tº±%:ü¡mù½ÃÈ!x{· O öÆ»€~¡<ÓPªo@ýÂñWR+`¬|®ËgãЯ†þ²¡‘É]M+¿ý^„ðááÑdßýÃ÷ #”ÿÌŸéÛ5†¶¢õiž¾s{ßHêÿðj^CÖ)˜Kø0ÊBˆ¹“ÙíéoB!\£¹YŒ"KÁ0 i`ÐìÃ4'͸¡Ë—+¤¿#¤X=0Žé¤‰9G¤…`ðWÐg‘ ¡°Î¥ó¸t®>,=ŒÒŸ˜s3åf+Ìö#Äþø¬h9*N·×Ñ••—‡Ã!Þ  Ï‘œ²È]oQ‘[ =Þ•G2ý_ ÅZm±p**L§!:3=ÍÙ6ØôzüÆ´#$§-¥P¬«f.0…iâÓ*1?# R9©ñ9R“㤱ý° ¨ ­žÍâyƒ!LkN©t°˜E6f„L8^†‰ï‚öiúwÐ8!zœ¸Œ~Ò®×ÛE«+ž†÷_B‰†ðÛ6n怨Ÿe@ÿÄÆ½n㨂—/2qæedGÈèö ž®ˆËëD*ÐØ€ú“Ú®ââ®ÀmÒ£¸'gÿ–Ð:—gùÖÊñûÛbÇsò5ñ\Ýô­‰‘=FM;Ço|dpÇ©à1àƒì  ò¢ªBkrEÊÊ+PÑBÄE5¢UD;8TÇ'gç]¡y”Lâ0¨†Sp¿É£ãB- '{Ô‘h 7´E©\ÕgÕ®ŽºÏªE\-ŠyOIÏ údhÀ©3;+ל>½f°ÒiÖ96WžÄ·»êƒÉd ÞÝÖ–Lë]îú@2ÙÞ*½ÐXe·×Á¶pü4œCž'€mÉ2ð)rv9;‡2nòxLxÄâv[ž\.21è–”Ó¡A·s tòde¯Ý™¬8¿‚º»ƒµvé,ˆO5Bpœg^A<*F"×ÇDÊj™pÈÎÉѵ‘Äg¤r¼qÂùŠF§gí-==·$æÃTOB–çñ+Û"¬ÆÆõˆU+•[×Þ´+'õ®ÕÛ5Låð;8¢jnµ½¡™•žgZsºâlz±*¸ùÐõݬõ6nèÁõøGÛ÷ì‘VÞ½wïÝpnð{&çv¦(jšóü…þo Š”KÁZà”¼j^`ð«ÉduðxÀâÔT÷Ü®0›Ü¦Ó^ú‰<¯×åÕj½.·W£ñ–?¡öx½Þ¼qO…¯uØk–:Ïø¸»Þª¶k¦ÞYëÇ’½¸Ü©Øñ¦©H£qºIý"qP‚~áÆbëø„…©_w»9®áâx°Äd*9Sb6–ž!äÌKc}¼@«ÅŒA]×kÄ ˆb@:ˆ§h{, 6ã¤Y­6KÏ‘W“ZÆ<.äÝÎâ!Ñc fN‡ÐµÜgIðàžRÓÃ¥FcéÏJZ}«7Ú°ëû 4ð™Vn›¦´wV‹I1ð=‚ ¯3«¥#•ÅÍ=Ýz›ôW§6™Õß5«!†„Ëñ/÷5Ü ?÷5ØìM¥ñYÒ°J•ˆÙÖX mkÅö‰Õk¦r4ù±¼‚õ_o¹!¦ÍiVTîèÝ…»r‡ó[ÀãW@YµànHû¹dÇ™ Áµ„ ŽEô‚Kx[®¾ÒÓcsbB%ǪX›EÚ01cÞo:lÁz¿ùHáåÃ&¿ß¼Oˆ™sys²c߾ޤW¨XsLÜ‹WTT”GB5PG+kB‘hYäŸåáH•O¾¾ ˜uÈŒŠ®p,Âçm6×Xm6ëCþÂ#f² ±BkB˜Ö˜x®¨¨(- Ö|TŽD}Ô_£ä ô_’|D »¹Üo2ÁeàŒÔóâ뇑°µ&ÕÒ’ª±†#!¶§–ië«" ÏÎv8ŽœŽÐ²Ö¯·¦uYhÀqâC¡Æ_m­k®ñùü/Ö¹ËlΈãjq3/Ëa’§qÃôÓè)5›J@¤ˆÁÏè)› ›cÔ1§¤ƒ6,Éùa#Ǥù01÷RLWÉï:lª®<~w×n>¯Kesè;~VêâuøÏ’_ÇãSR]ÐÓüw:ócØo.¿ëåü®ÇáÅù]x+ÛÀuq\Î[RçKmŠÜ,^™£øé©þÇkîÇïq&'qØýH¶N—-Ý~üøqÐ!ùÎzléB"òÓÜ>?µ§oðy©]©\”ÚmÚ«*àóšLBuÎÍÉ»s«…Âæ<¾@¹û]¬Q®®_½jcBúPQ—s`J[ÀÕyLcSSc&OW :€Ú;;¥§{;:z=/ñãßÂy`ÓZy…¼¾0­GŠ8’Òe·&N©xžE—Ÿ¯³æb³Ö¢É¾i+«Í³h‰;9ÁÁóx­; D‘ó/j—sœ¨5Ç—û}bœ_МoÎ3ÇEÞ½á‡ùùòžƒaù?Aþج©þ±ìÛ„~ùÝIûÊ…†÷¥K—»Ø_@W™á%ëÒÿY&é’tQq!ýÇ1ïÀ“;öÚ…@¾' õ£~æ^ò-°h>€âL6ÑéÕvjÌìuU¾î9öäRyKø¿™îÏ—Ï#±í­hþñóEó÷¢Füêcgö£hf¯«ò½3ÇÃüe©¼%òm(ˆß¤ò¹Ï-ýPžÿ\¹àµøÐ’ò7F\RÖÒ²Iy‘ Í+»¡œc?ÍE§âÎ%åY¦%¥Ž–±%åŒ2OöÛÔIþ˜3»‹ : Y+²ÞD³,¡1d‡M2Í |t‡L³¨ •iªD¯Ët¼L+Qþ†L«À¦§eú:TŒ/Êt6§Lç z¦E¦sQ-s§Lç¡jæ÷2­fîg2ʲ@ h¡)4ŽnD[К„/ÃüÙQPÍ0; ãÃ(½V´%áærÂßð0'Z7»j‚öRЦ`¯PgVOÂëD¨VOÐ=‡Þ£Ã°zÞ$]¹í 3ã ßH‰wJ3P™½2;}Þ>+ít­ò‹ÖuÑSLÀÜ(¬r^Ñvy÷À9 kÇa§ügô€<„¿¼*h03íJ¸qÃ`ñ à |Å3ÝHÏÓï$Œ÷ÆSh„òlƒ±Qw% ^OÏEö™ë§gF¨äa|ËU9©•‰Ý‰f:¡×kçÛ;!ʧ ^º~`ÁúIy½zÑ$ðTÁ}êG7Ó⣺Èà÷¢QàõC?¼þY ø¯°zd‘ô¹&`l`!î„Õi]6QþIê/D“° ÑgjVÛÃÔ&)j­ô9w=@ý…œfˆòv€þbÐ&¨Ôí vŽ-Ø¡F{[piœ}d´¤‘ܨ&e|é=ûhí†Èí ÖíÚ‰êiŸôޝÕ‰ZõzhI5øÞ:¨ãÐoEkèÚŒ8!o$`´‘®h¥tz®‰f‡8ꆶfÙ;EýyHÖS íÍŒSO˜ Çé9F`”h8=ÈYSô„_^¯NÐÑè›LÐ5Ià”c~˜j…DVõ(‚sŒ"¡ºÌXdBÖ߀lÿz–>Ÿ™yâ§;éÚí³14%gâ#iL阜¼«.އ @L,;Fs­b†–œq ÌÍÇþràÅ endstream endobj 1145 0 obj <> stream xÚc“`cTÐ1àar0èH endstream endobj 1148 0 obj <> stream xÚTíO›U?Ïí ¶ÊB6h)/£(m¡ÂÆK·òÚ2ÊÆdÚR¶¾Z6XÜbfÂŒY²9tàæà‡%?©ñƒYbt3Ñ}Pc²Dc¢&šL3MŒRüÝû<…ÛÜ|Nž{Ï9÷œs÷œ{.ID”I/ŠÈë³Ô…?[„æþ±ÉÈ|h´ãªüÏDìz8èdϾ¨#R-CgC¡ù.uòmÈ¥áhrNÿ‘ô+ä{ÏFâþŒúÌ."u²+ꟛ¦22C~²!æ—ßù¾ê¯‰´aR³éi°×ËlÝò,RÔm¶†©5jÆÔXkg¨…ÄçözÝøÕUµ9uñÌRÔülÄv°¾1Ð(”²[8m‘5ט[fÌ5ŽJ×RË’-õ)»µb·²üü°»?°Ê7æú¥ÅÔÇl¡oå–ˆÛ¼ú;Ç.R1‘¦¤¼ÜVo·[ëôå妭6z½µÎî(Ðj¥3¡‹ÝC¯>e¨3޵5[3¥ë©~õó¡–ОZëKY¾Å±ÈRŸ³¤Íh¶m÷„æjªš$ö)þÃÀ±8l’ÑfÌ—Œù5Ò‹©LJ‘ÞsI¿õ¹Rº>S»L{Én·ÙtÌ´m [~ž@fwXõúüîÊ·–¹;N8ãÍÎ^sV¿:³­÷®ëêàÓzsÑ¡Åñð²og¥Þe2ïKô ÄæÖb]Ë®‘·zd¼È›^%»&ü~¶ãHê ¶°rš9VnÂÆ‚Üå²ËT)rWaxlõååÿBËÁ1à”²÷GöìM4 uV¶úý¦Û÷m~ªºhÄÝå-îlÞpžÏ*Ô”6˜M{våø<-‡* JrÜ…¶ZSåN®ü`óðǘŒÆ4FRjÊýé[Vð sx½ˆO%ê{›½BÛQá½jÌ“¦­@9âtB%|«éùèb×àkcáËžÞÅ©ž°Ýîî:ÞÐ8ÕQh2–•eYz.pÅ7°41²4âiMtw&Û0v'Z?0”–—•”»ËäÛ}l{Óï¤RýÈù/nüuŒÏ_þÐþKªb5GuAõ9DmÚ–ûÉ= :—ªø;©º wÁ}_zj”ãc[y=1_£f1Çø}|„ýMÅîŽì'ø}daU”¥Ú¦(„å=€JAC Ø&ztƒ“Ĥ<…Å©ŒTÅß­t§oú¶ÓûX•Ôèq^™—ðŒ*<#UxµáÕ“y5ÕÐg ¯¡0¥^KURHá3È%]VøLª”¾Rø-´›¥÷Ê¢6¶[á³i;®ð[©‰½©ðÛØö½Âë¨^sšÚ)NÓ4O34E“Ø= Äu@TKpn¬Æ¡PR'ò3AÕàZ¡‰`î_óJ)ˆ9ˆX'1`éw¿|¨RLX¹…. Ï á1I³ˆå‡WH!Ìd5`uºÿw†)ß? ½ RTØœ€.Ž}V¡^qgÕ•W¸ç$bÆ0>ÊÒ%ªÈëÊ32Éßûµ¼¶‡‡áþ þIÅ¿ZÜ’$lœdT «uüÕ@‡­r¶–µÌ[âÝ´ûz„t³ÀÂ+; 2ÍsyPØ'ÅýàùK" Ïgp-ÛQ“ ¨’|ÎYðqO ¢fAáÝI=˜½bר†È="TA³ù–Õg­è£'AsRtê8P%|rL¿KЙ>Q]x^™VÕ'p< n€:€ú0f.·âîõcô@î¤Â× ï‚Z—ðè¼¼vPt¿‡†1wc…ÛðØA ’³3#¤9dfFÜ„„À8#Î…–gX~øYƒâ„OžWrßP“„ð™€UHéõˆÈ ï,¿¸Qç´@¹LW$¡ä/ Ô?*ÎâÇ¿¾ÎïéIá[ë¡yå5àwDÆ$÷dò1ªº¹@Ì+;-ÞÒj-‚™Ÿqë<ó=ÿýßñC endstream endobj 1149 0 obj <> stream xÚcÐbšÑcE endstream endobj 1152 0 obj <> stream xÚí8iXW¶÷ÖÒ­¨‘½ã ÝЊ„šMƒÈ.‹,Šb+;  BC@Ä®h@PD0‰Æ“c\‚&ðF³:ÆÄ,>¿¼øt4“äÍd2ÏŒÒ场ÕÝ4¨™Ì{ó}ïýðÞ¯ªÎ½uïÙÏ©s a„Ð8T‹h„â“<¼*5yÛ`æ¸Ò5…U¹S¢ÝnüBÖº¼œŒlÆ×q?B6é0盡a·ÃXžW¤«lÅö0î¤ÚÂ⬌֫; š>!æzQFe Õ€n ä4ÖKµE9Mög>1¼MD Ó‡w"!v/«„o OªåRuðœÀR ËPƒ4ªEÄÇG `„¸â9Ã@[<‡…i^6ÄœcÎñÔ/…`lÁ¾ÒŠK'+'\tÔð©<ªJ¿…}ã^tà +ÎÄsÐ44Íd®r™³Hdgeë@)Å2gWW+o__¥#«˜G¹»•ùkæXÉC,íJ·y«û7öáè·t¹¬ÓÐk±»Z‡%Á*lj{êKÏ#g5ïÝ:r8J}ðshÌCóѳ Áž±³µ—j‰Ø0Pzùúx»*Ü)o_•¸°•8Pv¶ÈÉÙ•Ÿqåï°Ü†vÁTbòM.ÿ<û@ÖQ)½ vž _+‰¯yàÎÌ@"…HD`Éu’¥ÝòÒP§Ù‹ƒ‚ãe½Š¸Ì˜^“R#sûHÖ¬k‹”.dmŠœÌs+Ý|Ôx‚ýÏ&â+öÃÕF-â)ž2Ýú´}/¼$|¹šu¾žF®À&XYeoˆSð\Á7À °9oøxõÅäúëÔYe¥¥…Þ{#O]ü-®áÖÖ.ÏYµ}sÛn¿mò?|ué kÆèÜ’¹t½ª`=ƒë³ÂØÌ1Z?tsÇ»¯_™ßtº+'uzò¼´¬ÌØÏEO»Í_‘S¹:çX¼/QÚãM¥±y­%;í›m‚ƒV8LÜe¸"&žº`Î4’ÙNà+r²1—9yÉ­÷"n%·2 ÅØÍ¿úl0¶¡zf8¬mÁ§ð”Îtuh|ó%·¦gÛÁ \ǯÎòÖtc²›¢ZŒ=¸ÖT$$¯Û¯aÏöý/'覷¬ÆÓ6úéÆ ×øåGÇ÷i„´ÕbÌuz9sù¾»ÃÆ¡…ÃÆ3W3šk’ÄË\$Œ!“3®‚†×\œf ‹Fr7m#£1óy?vNânŸHM=ÿr_kïÒ¡beÊí‹ýÿ}åÎÐß´°°Ý¸#3ye•VV—±rUzhޭ橺wËá­Ýëtß>×78ØÑôc]Êš©+uËö&Ÿmßÿa «4K3s깿¤œ¯ÌÎ))Ì=§¯#2#ò-ç}µt|†Äý°¿JŠ&F–¸V)·=²ç»Ã¿]SZÄûí+C¥s×'Œx õ©»¸§#3ï}oÐ"Çvâ'4ï'3Ñ,ä†f#¨_\$FúªæS¦L$DHü%¨‘–Ç”¾]vê–om“.Ãmyr|¹·wkg÷ñ€¢ÜÊzÿ-¥êƒg.»Ó4÷ž¨šµqóÌ›¼`úÔmÁ­ë£ÊRT RÓ‚“4žŒã}w$"¼|¼L7ñòŒÙx´©¥Í?È4-£i¯„²øÄ¤Ú×›þüÉg? ü6)ñØîM×'u íÚ²¥}…_h¢Œ™iï3wnB¬öâ†Þo¿èê·>¼°A¢?ÝZSX¡ÍK]OõýBË!¾7ÂÀê.„IÝdJƾJ§QæaiÿZ_¹½¥ø\Dz3ýxüˆ=¸ÃÔ7ŽÉ ÔïÕk_ѯ_ºs V›Yb£àž@+hM…“ ,C„ú·ÃÏsniÌ:Ê,wRÝåþAËêý ñ~s ‹ f]8]‘Âdc¾DQ˜ÂÜwŒ‘Å@M)vš@azÑÞá-3¦®Z¦Rƺlß»¹2º6ÊûðKï^³7þ¹²Å³¬¹©àÕ¸éÕkT@ˆ‡¿ã4Ƕü5Õ3œ#?8½óºoq©G‡ÎúEDŸ/YàÇ ÉïG>ÞH(yw·a.£dtÙ¾çîcË{³.l\«~—“»R”Y^œ¬Âìõ!”Þ=²|«&*Ñ?ûàñk[øŽÉ-7”¥³}¨B®‹…\ÿ>ó rá%51ÌÂÎíMuu"¿ÛáÂéŠâ˜òïƒ/Ÿÿ]yDäg'Ûÿ¼º)¹§ ¤ššçfÙiY¬IIŸ&oŒ:ÖÕ™r`iÏ`Û+Kkk r› Måƒï È,åkW‚ÖÊÛÕ¨M±T.ˆomgé䌔‡ÝNv4o >9N}áš»É}qº§î}~‡û‰RÚß¹ö%F¾©VÇT¬Ù{á|C_ ÷ùïõ‡° j–Õè:}„™'óÉ`KGбÔø|Þ±•9CB÷bǬ iþyyæûwî[ i¡N9Fh˜ÿ‹Åÿ˲xþ¾ÅÝ»ZáoÖHÙÑåÈËñøÆÚ TþâañtT!:ˆ$l JùÅ=?£Il ²gî ûÈÜm”*ºžÎà ȞއRÙÈ{m|Ýg6Nãk³G7z' b}Gï'¸ÃGüèÆËH9òßðáxaFÿ©pýsÉC›àz®.¸bǼSþâ^[ÈOOÚ“ö¤=iÿÇ òðÔ'ZøåÆÃà»ñ¤ýkÚC•a"ÇôcØú:ü 4¦o¥Þ¡-I×Ñ×é댜Yͼnèß µÕÕl»©ÿdêÃ"wQ*ôZÑÙÇöoÅRqº¸ÃÐ?Ýǹ>éOúÿºïú×/?éÿš>^4>@8sQZ”§°JôÔ˜óMÆ“ÑYbƼJ˜#9Œ˜‚õ˜FÑh§fÌÖ°È}i€EHŠ~6ÀbŠŸ6ÀãVàñh&Þl€-P:>n€' ùÔSx" ¢b ð$j7µÕ?…¼Y8·£T…JA: ÊC: ê…æÂùL P¼-†ùB”£(¤EYÈ 0SÏDÓ®22Êg઀{6¬ŒƒÝ:¸¤( eÀî2‚³NL°*Þå“]˜+$s±°ZKvU_Õ"x£•Z¸KÑ3pý¼K 'eñ¥ ‘;ÈÅKU1÷Ý=B!Ÿ`Ï€KGÞfÞ"²²æŠQîcõôeyüÊP¢K^»<ïÉ0Ê€½¡„» "ƒ¤àñè º½‡Ÿ“¢LÀ'}öìQØuìîÄ’:X€< ?Gº;¬‘Îø-†µ0εÌÅ=zwÑê#Ê`®xá-”L¤á5NÖëˆmyíê ¯í“- á™c-ñ¶lƒ6²‰½yiòÈÚ$Ðn <ã Uí(Ì1£0Ì™Gy‹'Ñê?ÃY6yêH4eW:Î rw†èI"¶OXŠBȘñ|¤” ÕS> stream xÚcÈcžÝÑØbÍÀ/ À@0ÁŒØdyÞ" endstream endobj 1156 0 obj <> stream xÚí{\TUúœû˜AE f˜qQËC¨c0Ì` ¢¼DA—‘‘‡É@ hâ3°õ1šáZ©%å»~Y˜ZY¦´kÙÊšÛ–­mm»îZ¶f>fîìwÎ\žiûøgÿÙ9¿{Ï÷óï|Ïs¾;#„¼ÐrÄ"”;&ºn·í]yž¹¥åõ%ZÏü7„§Ù¬f‹—ñw7ò‰1£ †ävÀ˵UØë–zë=À7"Ä´—W›¯]û~*B¾y€‡V˜ëâHüBŠ ®4WX×G!™7â¸ýx#ââ·ñz 8á陨„i„~Ïp<Ç0bPŸß¤ììIhB¢[>Êù&BòQl Ýw‡»Cv ºqù6€å°«à+ÄÂó.›îýñó3Ç^}Íá#âeÃB×0˜qvpWÝéòQȤG8<\£ ‘kúh¤ˆ÷Gl óöà'ü¹«ç.àíŒxE¼ Z"‘™wƒÌQ(éQ 2 #ðÉäDqC ‘YëAÂ% 4P©üF°Þ¾D P„…q[f<ÄeZÒ⼄¡;ã ²õc&=,ÓÃFmĸ˕áF>ñWxA{«ëýÌØà¼ÂœW¥>tð­ÚŒãK[¢Ls^~ËŸ±o\Ñš‘Ž‚] ¶¡ã;KF§¨p“ãn {IlX›FÝLä–mhJ@ãÁ¿ƒ$µUþJPß® ‘Éüý©½…þ¾ Î|5Øãn;}zòž•;ß¼sPá¬,³À›ŽÅ‹ßô÷NÌÆ¢eËÄ‹­\£Ç;­âBÎæ˜½ûÄ£oî7æ<`J*³M]]VL<Ôãµi #Ámw[8øŒñ¿+óÄJ/ù‘ ñî'%”!Úø+ÕrâÐQåï¯÷×RñçZÅ÷w)òHFñ<ï>§ö<±+®½Ý5CŠ-ÎvA‰[V¥—UêS0G¼øNíñf;¤Xs»Ý×]øBù(&A¦C^a>Ø3NbÆCh¶ÊËÕ Z$¾€2rzÅ!“'º@~¥LŒ| 1±à¸V/íerð–NSª…èScbt¬F¡àeÞ­-³K>9#^?ôÙýNøÚ7¾ØMÅ/¯v4¬û¶ó¢‹?X›èüSÈ{V- Œ.Ü´|=˜ýÍ¿G~vÖ㸠ï o(u¬{Õêß´ÀaÞ H‰ÈÛ$Îêì,©ÔMŽÒù¹‚´Ô?¼ä‘{4ø‡¤”`}5¥H*Eä*?5–DÆì7"…_®9zá‹WÖ~<3@éœÇ«ÏËψËRŠ'3^/¯^Ѱ îM<ä±fVT¼Ýú»sŠg¯),v8†×Gü~w±øM3ÒZRe1W•³&’ã4^†€íèüð¬bzž¹¿å^=#è¹€°ÑHãPÐú’S Z4u£\QÙÛ:ò^¶P³‰±cj¶ˆÍñíÜ çüð‹¯ÚŠ µq;Â4©Oç¼wfǺå—F¤îÈOJ®«‰+;…3¢j’'LÑÄã4‡ãûñëª-oM4-Y` ¾úñy—¿?uš."ÎàwUòÑT/…z¬Bm´AèIà/PSa!ˆ¡6a¹æ™O/ù^|#@cL]02RÇ<êôæçˆO¹6 Zúî‚Üìa°Èí5Žt<Ãý`˜®"+n¬¯t8\«?W;&¿@l"w ÷°÷/z¹Þ=»ãeÌ §gá¸û¡5´kï»»-Ìt×fº´Ew®<<ýP‘'oƒ@M­BþJN5Ä ^&™œÁ*X&ǵƒ/qí¸ˆçÅO!9:°7Nëèüí;;®4…ÛpZ6‹/swHœ¨Ž3Å'ïOÆÂ›gð;¨+þX8oQàÏÜ|z²[ÿ{­½½õž7ÖÝÂW„Z<|áN¢œï}õàÂÖÓ§ûÝ+Àø§w­¯P6ÚÉ€¼Á$g¢! $+\-É †W0úKxxër§x»îóu-ûönÚºÿ¥ \…øÃåËâ-<ðó'?_âüõë;·½~ôÙm¯±§á¾Yâ¾Æ)yélì9‡Tþ¾Ä“òcðíÖƒ¸–ùCٺݧ:®=10!^™S1Q3¶$ÍRQR”YËìLh{nË©ªu+\‡òÓ†?9¹ÚÆxOËä¡ù……¥ KžûÇÀ~]9ê9ÿº¶¥©.•`$Kfö~²¢¶ã#"››s2—/k\wxÏÁ-qG:þ޽¶‹s™™Øº¹¹¼c —œ›qìñg^L]=ãÖgÏß ‚~Eîzö ìgD±pBüd+mï{©×Þ݉JNh-[zæ%]RSSîä'×7®/3——–—çešêgÏ4oÛÞþ|ÜoþÔy½(Μæ¦ËüÖž4s ºèIƒçNN4«‡ÅÕ”uÁ„iÙ ÙŽ_f¬Œݘ»À¡»DKãÈAƨ~I ê Hp2ñ†Pä+ùWÍb¿ñ –£‹/bô­˜$~‰ëñÞ—¶T6;™õi›ó ¶ç‰o^_þP±5OÁøÕOÊæ>fvíé]K€ÕGß·–0†‚ÙÕzÿ0:œõ”±PU(zÊ ÌËe­ÏÍê®&N$â˜Î xð°'øUGZ¶›ÅÄæ“k&1ÎK(zê ÎÙ^»=ú¹"©žXbs|{íæŸŽçö¾è:“?<Ëââ_Š»+ îSøæ*CŸ³û¸@4N¸8}"¡ÞŽCðÝ‚•žBüÅ+=‡mW¯ø8¯”Ng“8"nxЈ@ñGü?ò.Š7™â]F öŒŠ?i܈@öË @SÐðá«LžŸØÞئ@ú]…凈›ç ‰ÿ ò¢_a tž!ýyÙ꺻§Ÿy'‚gÐýµ†É—ù>Ôy÷´¸Æ;Ñó…Öë—Ã%ßhN9WC|ëìè=ÉGÆ êYë¾N>Óƒ{ha¾ ¿-Ñ! ß´‰ü•§ïæ™ÖçföàÜÛ}çúÿߟŒê;Æø¹¯3~ä ýÏœ eóž8ÚðI|’ ‚Vm'´ïX´<©m•ÚïIã¼úµ¤îV)µ_qí?Ónð£x ß&µozšlâÿÛÿ´í&§öE[á.¨ƒ*¨ïYÈQ|:Õæ<›VMÆðu3[‚äƒVH0‹2ÐF æzÑðPA&Á2¨PnI°¥à¡ì…"q‘@xDsñ! „ öFñL¦f¶2OH°ŠáƒP2ªB Q=Z„æ£Rdƒ<†Ûí!…ôM‚Ù*/GVÀÒQ%*F:€a¤úœîUÕ³Bo^µð¶åXm‡'å"3¬®¦È?\÷Š–(jÕÿD2 íí4›æTvI>O3}‡@öäRß猒(N0"Ç#MGi õ è ž’ï)€§£Tº6F‚!w³a4…®H§°gn"ÍÐ)(úÉ0Cho+Hå±Î"ŠÕeÑH¨¦2.¢zTÀ(±pWTådý¯ì 6ªêã“jº¦¨J(e0ÍúJšÿfQDÎ…T jË.TKö³Hþ¯ ºlè™'qZK×VvgX=ŒÕPj$™<kÿ7¼Ú?ªAbâÙ…ô¼ÓQÙÊ¡':–Â<±|æ?õHæŽ endstream endobj 1157 0 obj <> stream xÚc, ë˜ Ðà §ÐÀ€4b|¿ endstream endobj 1160 0 obj <> stream xÚT}lS×?÷ú#!i>œÄ¡©ZÏÆ@Gˆc;|$$!MaqÄ  3}‰í˜ÛQbHÒÚiSA“P[µhh­ZµÚN«ZiZQKÿ™&*д „ÔI&ª¢ªjÙ§TU~Ùïž÷$ýò•ß=çÜsÎýÝß9÷’ ¢bzŒlDQ­©ùÔ¥:–“ø?86>›ÚôÞå?#²J'õDÉ/¯ü—È>[8 ƒó‡Ôý-è+Ó™üŒïMù+èW¡ŸÏ꥗ĈÐ2ú̵ÑÛÐÏC÷fõLòôþ÷½ÐÿFäL“]ºÄ)rÉ'äxô›³ˆS³è‚µÔ!í»”öǨØÖA^IÖ¯7íD_EíÆ‡Ø¿Q¬ZX“wË j7œPRÙ¾„n£"¢ ËçZåsùââŒqZ„Œä…B8($ȃ8‡¤ x…|®–z¿?l®u»‚nØÒ¹ð§Ôè€&=a-6jœ×–Jðù'bIC>·ß%ÚŒ‹âú>QÐ4KÚ…Ïfø”ªÌœŽ*¯Ït‰¿·GŒë“5êbâ'fîŒ1ž#•_Å"¶ Š ñ3,Lâxj4ÖùsLr" Ó?ÿ/9!c¤8^Q_Â.5µÁæp¨% ý+œE¡p8Øì‘î§Ø«ÍvņÄ÷Ø\ +ï騫î\ÓÞç/}¶¬íÄ„Xm\=47w¨a suUùîe\ÇÓÏ㪘¯š\9\*¯¢ 9]âèÊŽ¡¦ãOuMîZwCºTižžüpá ŽÇâSÄU+Ž“År-à8ýžóû†‰—ûãcmÓ{´éx:£mÿÙð®ãQðØcñèTl ŽŠUfzD#Lˆ®öÈE“®“‰µf¾’®0ÿ´ü¶ªÎyî ôµôܯûïÓÚ·úT­üàn¾.úÅ^K8âWåb€ Œ)œNwM­H ë­.Ý.6ï?º¥û‘½z¬yÛ §[+ëùùXkv­Ö<öà‰mswÆêÒ}GŽ2ž’ùJ)°GQdE}È<½UY7W*âv¾½wç_÷?ÚK%gÖ¯-ª*®½|p÷9PQøXÞÎè›Z…Ðlæù¨ÅeÆŒóÙ‚Õ‘p8 •Ë¢"׉Ÿ8¼aÍGU¬Ò±|koÛ ñ‘Ð߸ÊÚZß}­uÏw•1¢r‹(Üì}¬N\´Ü]‡f|ñ¡ ƒ±îö”& Æ÷ÿâØÌÈ#ž3]àkp¾Bj\Ü_µº6‡jë çŒ}ÒöŽñ».Bwáßÿû /™xÏü;P±ù?d³]Wò_ÎFÏ©ùò'[?ŸÌÛåE[ªsÁWÅ™÷Üvß|À(–9Óí¿z¼qúž?éQ½©Þ*‘'Õ½³ìgi—|úYöQ…¼×ò;©ú°ê©†õWÉÏs¯böÈ!›¨N!\Jø|Ý`t»3ôkŒ?Ð5º&pDQ‹Ñ‡1ñ¤xCüÑâ°ïw%ñª-æÁÔ+è÷J²/ƒ7­Þ„¸%K*§c–l£.¼þ¦l§utÉ’”&Ã’´V¤,¹ˆºÅ“–\L÷‹+–¼ŒVË…½J¨K®¶äRj—Yò]´Y¾bÉeòyÍ’Ë©Åñ0m¥MÐ,MÒAÃîy n¢õ‚Ô‹Õì㔄¶²4 æ¼Ô Ë8æ7£¦XKbN"×|ð@t/i¤#Zyõam>Išæˆ1:Œ\:,͈XÇcvŽbôBZȱáöøÆ%¾i?ïÿÝŒv §ÈÁÛ{Y+k#*w¨Lv&Y›3“Ü SŒq’Ï‘U1l¾ê¬I>áwçÕ Žr‹j2Å1£ðJ±§—ïS–o–Î¥pN0 s¹P‘)‹¿„Uÿ ŸEÇÿÖºêÓ#›½y‡f­×@õˆ‰É¼“ùoQÕ¥÷a ˆUe'ø- 0¶qÌêŒcXWÌïøp»,î endstream endobj 1161 0 obj <> stream xÚc`L»A™ endstream endobj 1164 0 obj <> stream xÚmL[×õ¼kc(`ƒÁŸ`Œ?°MüÉ·‰m á#1à˜P“:Ø !`˜²)Kš4©ªn«4­šZiÒ´K¦hÒ´©š¦ýH'Mšºtû“jÚ‡¢m?¶J›ªüÙÔ}äeç^?CIÖî]½wÏ9÷œsÏç}8¨€k ˆÅ;=¯=¸- å |_:¿¶wn$úý·þ@ùïW2©teÍÿ€?GZ` Ò³ÜÏ^@ZVÖs»N%ù-â-ˆÿdmc9åÙêú)â(«ë©ÝMˆÂ{•“ˆ›²©õÌÛ¦÷†_å@JîsoBy$c"?sKàáÂH­*#Ò2)!Òk@í5{jFc±Qî8ÀÝN©Sø€ÔÉÙp…úDGÞ§»!F` ‰ÿD\å^¥Yi3+ÍKÜ;Â78¿ð òþ“€—¤‘/ñôä±@= ž2‹‹ø}Aâõ‰Z¥ Oq»ÝjQ ®ÑpWç.E ºÐNr>64„//DâµæÓ‰á™vEóéʆ¡u>~q@§¸çׇFT]3Á©DK3œz±è~ø¹GtÐ>sq?Öoö›•V—¤°—É^µJ&³:¼ž€ß¯ Ü˧/ juÁ­…±M»„çeêN~8sÈë†FÚ¦W&Ös÷ŠEëém—Û'†:ÂíšJùÕ¨ð›UuY¥ö˜ÑíUu4û{ÕÑ–ú¢hb±+Ø””Ú¬ôª„È;D¶¢ŸæA.¿W™˜ãîÌà¼/ü $–ÍÐJci·û½ÔD³Ýç÷…Àrf±Zd2îúòÍð¬si’Pq‘ÛiaC$'|È}»¬unbvÁZÙœ\ìêêÚOöWi+3«væ©Õ`7Õj2„óö‰{[K³¨Ñ¨­¾bö0Œ´weil ï,àîñÕ|öæ§–Žñá[,‰Óõ¦gÄÌ5†zg¬ù}þÃâ`Ðúi^¨KÚnôµ˜@š´„ÉŸô^83RSFÊBø9yx)Ûc™F­­mî‹û8¹¿ý—Ñ'…7y×·úÂyݵ̇>чý𱔡3û!´b|åšÇ0¬;ÉKýª9Grz”?Vm>ͯfã¡›Ëó¹HSch{>:íª•Jü ¿`NèCÛiÞëÒkÜÓ3 Kp6±d¥´éµ¡B§#Zõð¸¡Úbvö™å%öE‹ö©­ª‚ÇÑQ×j©½XÆjnÞ^¯š»‘Ü éîÆR›Q þàä¯"a­ìå/ Æ3«´¤Õ=žŦ=7v“ê¤å-‹3¯3ƒ=Ö^­5ÕÛ­rkU‹Çlév¨M|lÔ_­ÖU«ê*ŒòÖA§;jÓÛ8us‹§O7*æíòºÄÊTZµÚª,±˜†X¦F[˵@7FÚ«DïÈÁþ:÷ÆêœoŽ6~f/°Øç“¶rRVeÔŒ¼›Žiš¥ú^j\~#©åÐ#@;ØÝØTÝ8>üj»_εvjǧ„[Çš¡ô ¨L»×ÏaᨹO÷{‚û²p›XçbÛÅW&|ØÛß¹‹½=™änž }ó=×ò<@Z|b~3ô‹ùñjÃèv° øýbb”è9­% ú›Ï 65­ ¯Ÿ¹2bXlKñ|ƉçoË´p·jmzù‚uz$1ï±6تŒc_x,7õ¹Ì¦J}äxVNLº“É_wwTÙO†…?s «[íEœkªhLŽªñ}»´¨Ÿ×ºìä¸~æR_}ÂÀóü¢U*­uMG gòòÍP<[læd+Í×c¹¹ÏÙlQƇÕZ¢ÓUŽhsr¡´»¿W´åæ4°sŽSŠeQnÿ J+Ç>[’ŸuH“C_ÌÐRžÜ¿„ËÜÕáñF¹Qß3 ¥µ*ø¸¯ —JÏ'·X˜? ¾2^56ºÊHöO«Wwoxº‚ƒÖx`qYÖ ‘“Šö™(;¶nTÚ¢îþþ ©¼ÇO‚¹W£kR¸íCîŽz³^¡?ÞÏŽ0àžðOkŸÞÁL¿o‹W-;¸«píuwÔtÄ£S/µM‡o<¦{tUÊm¶z«¡VðNL›€”è³=G£ÃBé´äTGjOkŒFª¹ùÈ]Ò:C“VÛdÐåÿõ$!8S3ðwH>¢ðÃG‹ìðá_"S‹È#Bï7²/•Ëß$¸þ5Ì1Ÿ6¼ƒ,ÁD ú¦=~Öü¿ÖÞq´Ìa¾Âó„Âã¤*“ð–8î°ñc6>O¸§q|—RãŽ+âx@H lœ|åˆñ®äcñ¾åƒûôFV¸}zjp7 pRza¤1Íô –‡ (à–À0¼)ÂRÔüP„Ë`…«a¸¸M.‡aî›"\mÜŸDøh%Õ"\ aâá*’Ë"\ ä‡",'o‘Ç"¬_Ù-ˆÀlÂlÁ8+Ãû¤ÿnèFhW7¾ÄÆ ËàB(„”5œgŠRÛ ËàœA]—ñ›FÎS(Ã×qH¡4åš@hß„'QžJ‡Ô—BIJu±Ñ»ÇpŒ"TÐSв¯ƒjpÒñYv5’™cvoãÊJ˜žaGVÔìDÎ ”ÝÂxdðl/D¬ zqö#¥á œÃ¹¼8zpuiÿ¯'˜)|sHOat3°Îx."mwzV¶N2¨ž=Ìt~…JžGYü>s˜e”æ˜Æ„G,…²¥TšgœE Óòéò9QÞÅ*&‡<}Љãe6\ȵo¿ -Ú@ÞNÄ3ÈÛYŒ}ç3¤×í¾¯ai;h Í-ÒùXŽ0þ«¿j¡ñÌ£½†3Ío–U5õsá4«êÍ ãcü&qޱ]³4OÐДÃuæF;ݬ§>ei6çXמE«r¢}y)öµ`—ÆYvã› ÌpŠQ;æâáZ=‹3ÅCX{3ø=…øÞyã̧üFp>…Yc+ί°“à,°þc> stream xÚc ÕÒl0„n endstream endobj 1168 0 obj <> stream xÚåXwXgÿ¾ÙÙA¤HñÏ,EPT”¥,éÒ MŠŠ »°» ,MQ‘`‰¥Q±± bÉÙ’hî4M²zî²fÉ7Ýcl´z_ˆo Fáâ4‡ÃêÖý®0°J‘ðâpš[¸´¦:"‘޹…Ž­°öÎqu¬myؘ—}ÚØ½•™+Ý×gï¼0ÒÔÍ:Èf»Åèi_Ï;|öôÞÕ“lírsbóŒ7Ä…D 6ГŽ(³ï«÷QËg•o"‹›Á<º_;>edñNË‚TŸÍË+×çäx¾ÛÒR’S`5ùÏÌ(Yrˆw½xl=`]|Q8Šk;óP,ÀÀ´5k[–‹ÖÚæNbcg;ž‰¹`ç,NÙIÍ/,m]p¯†‹ôÅÓ#U*}}æù æ!s&ëX>ëu‚ðËãØ__ÿ³ƒš÷¼s«V­o)8³ëñ‹>Lÿõ^X2ñÈ<ÑCjk^¹ož&Xž2þ‹Ÿ±k¼WÄzÄåv7vœåÖz"aë®ÎåóÆo©mÁºsªš˜öËW™.YÇ&œèÉú©H­©³ÁOjT~âa÷216í;c4O‡[@èƒ0Ç·ÇF"BÙ¸¯ÙÀÙ/Ú­Ç w÷û›ôõÏퟹ%Ú&!,5uÀ€ù÷V~ˆUß>·ñHYJH¬÷8GO‘^zÊœe×Om; «{ò`ú¶(ëÄ0Y†¾~áe}­®5•u»{í:—ü<ï¦eÛZ™ûù³'””8&M·_þM^sþÄÕ¶šâÁÞãÇØu˜’Þ¾í~³m«8>ÁûðÙäí`“ü"Ï|EÒôi^5çÒûXúSΊ¾Èò‹ ‘#’ '•fxŸ¸†h·ãI²VvÒÆ†Íp)Íš“]‹øMغ¦õÚöeªoVHFùO^T‚)‹º 2S•_1éÌS3HÐ O>i,¨í:náÝ8uê™MË(§„Ž1°~kô˜iáɳ°pneMU6Z‰·‰:˜Íÿ¸ü}(íJ êZÉú:pŠÁ×~È¿oNBJQį»'EÁ«¸Øb÷ºÜËÎ}úÏÏ?άñ}…bYI~]EÚüÁÍ–¤m2Äר¯ü&•ÖMO:Ìì`.3™Ÿ&+_AçÀñ+˜*ÈR–KF㙤†zUÀ#:}AD©9ìPG„ŸÐ Ñ04ÙCt±uClãb1n ¿NV6”ËË3ø½òGMá!Ì…$\Ĭ`¶^`NmÏ>^´ öHSv0üey$̧Z)õ¢k³¿= Öœe2?2íØþD݃ÒU¥K·Ÿre³±8›¦²ûŽÀ‡ž‰àw|pOi‚ˆµ´³|iýú ªJéâ²3e,M©7ž`ãu7?Ûx¤DÁÕ\IêÂÞ]¦7T3?^}ÆüÒVSRCJ÷[§î&ÂzdˆÞ„Çs ­ e›Á|vQÆF&Ô‘ƒØ ºšùåàæQu5ÖûðøÕë']¹.¬ocZ?¿Ì´ìß#.^ÁQ{~}€í±!ÖÃvÌEæóOæ2"±q!´€g7'K‰kOÑ–.Rž!dž6mé‰wwߪù V•ç!M[+œ_ZÑpµíl¼‘9Çð¼1Þwð 5ßÜÉÒÌÒÊu­TÊÿ~CÙàó×ôÀþí·í›÷l¯[±CÇ»øÄQêO]Nü¼#rq‰É ý±c$禫òÌÝéè˜À°¤D/A§ÞÚÒò5kK§-¬ÜäÖì\u²¸æŽŸÔg¨£“éël¹TqÕTœíã6Á—óÁ<§=¼¡á€Ê–µ‚Ô“ê):}¼®#âð „>Gw‡Õï*+wH‰œ$÷p7.®=Ö¸õÈ{_ÔÎy§ªÜ½¹YY/›}fªoF²GDb€ç(7ºveQQ㎺¥ç51“‚ßÀG9 1§!îLY ˜d%ùì-AX›ŸÚRk"…·83êXn…ìÒœ;ë­êîÎMU¥”SÂòeÇZ4µë4©^Àܧ×àwg/ÅŽ«U”=\¿aݪ-‚y¸óÖ㘔Øä§7Z±qPC‡Ã«û–0pŒB£‡ö‘¶v”¶†h+à0Š/, L_Wwfoü¢TOgïѾai Nãw—g®‰õ š:1IÑù—®hÚ½«YpVÉ|½ãÌMY3ãâlâÂæ¾ëå¿3ºª}Ú{ª‡…çq°CCC§KMèë€E ,V½1!5gýÀ¦‰­‹‘ÔÚÅ’jh¿}­£ãÊ·­9UÌ“];˜Ç˯\윽ÕÞqõæ¡ö[‚É×ÖÔ?[2ÿÙfÏ~Güö}‡BØ»p7kPz … <É‘ùPäNîy(ý‡è{äõoçÓ9¿7éÅôªC°†©Dð!,CjþîùÂx)œóÐÿé!†bˆZ_íO¡+Šîì3À­4ïÓ2¡CçðD|ƒm”+´ÚßoÑ MÞ§mÿM»ñºm2ßšèÛÿË&´‡–ݯ5öiOøÿ šP#ÒCÇàìŸóé¢CP÷0=äéä-Œ•1²‚'Shù'…•hªæeºÏ!¼³]âeÈxYùa^ÖEö8–— X«SÍÀͼ¬<)]^ˆ&P¼l@­¦Êyyroê,” ß›9(¥!%Ò 1|9ƒï''a6 Æ3‘zA¡)È$oObÙ³+—ôpW€®|¸Êae8ìÖÀ)FQH»ÙU!DRÃU'»' å6ì ƒµj²§PqÏTÁLñK´Ëûi×ðÚˆ5°f< ­€4XÕËÎðfÁÚ±ÐWÀÚ±¼æ,^¾[õÂÓ{5äÂX`aýMذ– ë5į¬u5 …µ¶¢Ç™pO¾šÄ™œ·†œx›e£$k£Àº¡p OU÷ÓÚOÃhyY¬8«þ'Èää®!y” ¨4<>N§Œ\­ o¢ˆï£@#Òg{,Ž) EC]ˆ€zMúÞ‘p ‡~ò'{#`D Y£~dG‘¹¹’›á(ždDYÃêV*Î:9¤W–É!‘K0æ*e-¬ª(ÿ•]Å`£¬~>É%{R`U*Y)&¯&¹/#ÅâÌ&UÄ–Zäòö“óþW.l6ôγqšOöª{2¬Æò†<—±š×ðê‹ù ˆYÏf“Jç@°eÂå˜ó¬åCÿ§Z˜ endstream endobj 1169 0 obj <> stream xÚcÚÔÀ  ÐàÀÀÔÃ\,-á endstream endobj 1172 0 obj <> stream xÚíYil[ו¾÷qµVSäwŠäã.‘wíiË’e+^´YŒ+Ò–%«ZlKò– RꎧpƒAƒL3™Ô#Ìd´¨Û ÀY 8ÓÂR8NÚ ­ÑVjZ4 ꢅg8A[Xäœ{ߣDÊ’ãvòc€Î»zï.ïžs¾sî9çÞG!Œ’£E$B¨÷€?øÅ·ÄÏÀÈÓpŒMž;vønë=hÿ¡Šðøhêhqï3×Rša,:²™úƒÐ·OÍ=<ð§Nè?‰äôäÌ‘Ôͳï|! ð`~4•:{_Â~„ô߃ùæéÔÔèW·]?ý;I¿€ÄÌwñ—‘æ^bÇÝ|£ î€Ñb #–ˆF¼ˆ^AÐÃÕÙÛÛ‰Û²ß{3ˉ½ØŽ„‹Ñ07‰4àË èë /B2„B ‹ÂnQXFðÕÌ‹˜Éd˜›«Ñ8“®n|ýŠéFå KÄÇDÂÑh,Är¬š6åÛ úsçRø¸Åa/—I*l¶8ž QH ÏðYT†X T¨¤gu8(yD±JYUå6K…!b³…´eUF|6ó¶Ý¬ð׸ü•Ì¿dÞ:X¡ÑT€ü40ÓN#AÕ‘‚ sVVSG +Y甥—Û[“ÉÅŧ´ƒÏéŒ'Oâ—/ë^Èüzh(óïósßÕÄզ̛cck<»‘!‹5R…‚aɪB š59¬B…›—‡ájéèøçå•ËCC¸bh¨ÑÝ3ßxùræîebRÊ ß^ ¯E!•‚’ #eCT ‰¹øi]]¢%Òm¯P²jK8`Lâw8g³3ì‹W””²ÚúÀê+9~T_ŦœX‚0BrŠp,w¥«ë1‚ox¸­måÊ•øøøâÅ#Øñ‚îúëù¼j /pˆÆèP+²ÔŠ‘ÇJe„‚AURÜ<5]­ÑTÏ%šˆY9÷›oº­ ‹NW Ðß7ݳ¯7*.zâ;”Ïf{Uqƒa¦·Wcli®ïØÃÛábT‹Q1xoÊZSTVV7.¦Üà/iêÝà âi+è*pteiüZf×Ê adñøêŸ°}i)³ŒíÃÃÄËóÖÔOuecÑ(ч,ѺÈ'd2~i"`•TÝ7âùÖÀ@}gg}ÀcoöŒìÛ—ò\ø| $=)O§wQ[ÚvÕ¸+¹Þ×îvÇ]ûW•vy}>oO·ÓC1€ŠúC¡ÀŽP/"KW7›ŒpV'xNzÇ@÷ì\•I^¤'QuâäZ€½ýÙPdêûKx—%Ì\þ}^¸ÝßÐ]ª­%XÔ/’âÆAÁ°154ÔKTyb…ØúÊÈ*ùXJ©µ]ñ§ô*ëNÎÛU=Ìq©ÆWã+*sÙ'NžÂx{I¼ó{ós›¬%%*}Ìóµ¯i,ëÒüæ }©2Ì\h#¹ìÂHÀ.6äh ‰h‰_labÖBBE0 ](u<ÿ‡£feY§–”WéðW3c%V×Âb¨y—Ë‹_5ß[Zú•ÅVZTÎ:¹x©´ÔãýpxxÀï D>×h2òþç¹ØÀIc)gaIDüy'à8™š•ɸ§{a1Ø`”Ku¦FkRg? –W–ñ¦Çå×–J¤¥œÃÔð˜ÓÆœúh ‘œó?Ò¡*ÞƒeQ¨YIê’ ¸³â̙Ư®,øššj zçòJ2[SCüú‹‡ºC±p³Éô[Þ»enx˜êòð—ÿª Á¼îFÔ­Y.çî•êÜr‚F®ï$ŽžüR;ïÔIâã“çK¼‹²x©§gxxÂßö$ î\V¸ll¥I¼k‰ÈMQv£ð#¬TWÒÐ?räÇ( F×!ƒV2cSÉú&v»M¥´ûƒO]à±è2­&ßÝ8ؤÏpÚZ­‹ûx·]YfuÔ¸}rv¨Ùš¬úZS“žUÛ}^_}™b»¯ƒ3«Õºq>æ˜àƒ]«y¿zX´á×R+Ëkqµ°˜‹6F ‘³´e\¡5?&²¬Ô7“Ê늨è ³9^XÌ>(ô`b­“ù§ááQÞa D3 ·…—J­ÊI¥2Æ ²G@†2ÚÔg>N™ˆìÕŠô$ûFª»vXË8'Oæ›#qHW©c1d?|>Wg^&Énk e³tÏ_œ„ak•‚Åx»¥…¼XC².ˆ >Éoš#B¨àÀ¬(ßÿA~N¼õ4ÃïòƒO@È|¸1.á²áLS.†\¦ px‰*â±°@,ßPl¹øzªkpG¬µf©l*ó|0nxé]xàê<áâyÞûSö>ÍA8F8þ ð{T Cb_ÃÜX¤·'·IÂM| =ua°Ê£o­·%ŽFß¡ݧ>‡Ú¾3æv¶ÚÝ;ª÷$é>¥æœå±»Âz–)–è_ƒ&ôhˆ¼ˆéî]bŸfLaÿVÐcŠÌÁ ®MŽÌƒ nb„ )NعÓS_Úao<1[×ùt‘$T÷Òë¯õ2¥UÉN×-Kò69†3z}I£Vî =·ÛJ%ŬYçwî=Lü"{ žo€ìa¯¤g Ø ÓfߥׂQ¾iÕÇõžL”Ú/ËdKТ7!ç@6V²d*MÄu„ÃäšùÈI«R‘…IJé@õ׿µ©túU·I­6jã•?¼fK4ÑËÜÉÚÕâùù½ ª`ùèq·K¶Éêú·•÷]®²[yÙ™>*›#–*ý’“|¿ïôi‰4}s¹8Û!èl©Á|}iÚ!V³ÊÀnl4*…¨X Uɤ2,ªÿöý?µ¶kF­H\Wï¼÷’í<_A]_^—Bž>Ÿa‡÷?sÜ093ãXÇJà¥VGÛüÀN¦Ê*ü©î¼,—¹¥*ñ`^¬Ò¬…KDÿ ù>LvrºÝ K˜?³Qa‡…SÃfr4#‹Uɺ5µ&Õ6K¥¯®%^½Aö­ÚíöŠâã•Q¶U^õû#ó›ÁÎÆ$wlCJ~÷ÓO§ðQ@Ï-Ë++ð)põöUø‹Ÿ¹}þˆ«ÙlIöbö¡”Þ–U Ûü7"ø%œ¯9:p_w™ÇSÓ}}Ç.Žåm-«gš›ßðuíîf볋?~U¼Ÿo8Ïç;b* Dúûc~wK>ãl¨Å`l FkíÕÕvü»|ÃÙžLýâ‘øKÕ"j÷·¸\­yaµ 5éôMA‘Èb·[˜kü‘1[‚¾Î?ïSŒ?Ñä[¥Îí®OFà£3š¿çJîÚ(hah á?làŸéÜÈ?¶5W=NÆú7X<.#ò7é ͵ÌÕ‚sN:óKF+.eœè+ î:’‘ß`2¿DkïD?€wbxwÞIò߉Ÿ½‹øwõW˜óPÃlϧ‹àÐáל£Ð–ïdëïP£Å8{É!]ÀóÉQ˜'G×ÑRc´HýwBÿ-t„Ö¿‹‘úíì‹´¾˜=ÄÏ϶ðôÙ!@ ?ÿoô&þD‡>SÞô‰îöq±žÔ?þMü¿îÛW÷È<â hýôGà‹’}ý¾=Û!óä~«Ê]x?s0ƒÈåHË<Òôîj¸É/ÿÛ‹yRàE>× ·C;ÀŒ!ã–óŸ ß}JË o1ÚOÁmÜ‚Ö(z¥°iAVú!2\›ŒñrÞÛšnmn‚œ›À‚fz†ùT.àÅ;¯ßQX“}–Öÿ§¯œ?ùZͮߟ֕ãµú~mÙ¶‡ÚÞ“íÄþl®BFr£ÿ¿þ¦¯µü÷ —øc:oó+÷|p\¹õ úz ÝBâ Þõ‰eÊ3QæTAùºP~ÂüD¤‚rTôB^¹-öˆ£âóåµµ’g$»(¡,=RY‘jhI@™€òPnÊåÞƒE¦’%dT¾ 塼WXäeòù´|éo¾|S~õrk‹ò3Zîl,ÛtôÿÇÑ œ‘~„Ê7œ5J詤]…oƒöaúë-icø¶=,´T†žÚ"Ô†. m1ò¡›B[‚ÆÑ…¶yðˆÐ–¡ÎÍ—Ãø;B{êÁ¹ùE¨ön¾]ŒZ˜‹B»517„v)óœ(‡­ …%Ï¡8šA'Ð9t Gc }™Qâ7€¢Ðê„·30>‰F¡×…¦á„çƒV;ŒLB½j–öF¡^§áyfîê9¸ÍèJ5™µæOÑYdþšN)èa~-- ·J'´rrôëÔÞ ô—eÞ0»ŸŽÎþ˜kÞBú´ÀÓ 3g€öè?Š ÅàYuFê¡=ŠŽA]BPêàíûkð§ØSpÏÁx ,9 4dÎgal¤lµ2{¨6„Ï9XUþ ¡žÓð\Ÿ™ xÆad¥£§A‘:Niä– +LÖœØì ôRÀ?t”rHÅfôG èçzõ 9˜Ó€üPÎÐâƒYë:úõ ÌõCæú×ÖÆ¿õÔéëfal°µ?Ô¼½wÒùsÔˆç€ ±ùèÚŠLBMÖšz9ÑsžZŒ÷¯œÕ€{ î¥R§ 8÷p¨‘~œc ²£´ž£QœTs>žgŠ>­µ¨€¶uÐ>éÐ:¾Ð‹ú &ývðÏýðÜ ý.´ƒÒöˆrF/Œ&(EmóïvÒ̰ ÑÈë¢sïQ@Å[çíËœ¢ž0K1ž¢zLÁ(±0Ÿ9ˆ®£Tÿܮf°ÑLÁšÌRš#0ëi¦17M£/E=ŠànçaU7ÆÃ, &+{‚æYÅ6 5Ñq ÞË÷ü‹´,r endstream endobj 1173 0 obj <> stream xÚc``Èc ãgaj` aÆ \ 6 ¨€™¡“¡fÔ endstream endobj 1176 0 obj <> stream xÚ•W}lZ׿ïÛ` ððø00`àcc¿`c;¶‹„Äù(I°ø+±Iš,•–MQ¥EÕTµÚ”e:mªÚJSÔ?¶îKj÷QuRUU›Úî­­&­ëº¨tÝÚýQïÜûÄq›­ñÕãž{Þ9÷üÎÇ=÷Q¡t)š™ë~ãª?çQx\Z½¼8”yãq ?DHsm¹\:ÝtâàI„šÎ¯oªW¨?ÃúYX»—×*—ú.)3°~ Öï­nœ*Íž+¼€Pó󰮬•.C3è3„ZܰæÖKkåo¾è‚µˆ3‹”tšz ©¢¯ÓE˜”fê8ŠR#ÀmRÑJ•’¦•_G/G#ùolffŒF¨û5åSÕ(Bʧ¨×}C´…~[C4 ˜¿…µ©ô}·Cï¨Çªß§ÂÕßÓ¯n÷…鳈Úyo§@ÙéjGÈìôðq“IˆöÅõ1Ë©æû„¨‰Õ™ó½yÖ:äê yÝ>—!9”\¸eÔL·„(õœÕÞ:ÜžŠU“ €CÜ)Ð6ؼPÅc.§–v9=žx,C'2t<æ}†5šÌjÌíÃL¬QK«µ4p…h†&–úÓŠgÜ®!Þ›ñöNôøF}>ÑרkÕ…— ³g¢Þ‘Y/?¶vZú2\G¯õÖËÝl'Û÷ùRžÎfm»‡ã|£k56º´³2š øSÞ®ææv·•µ™ºLư÷?qçSÚ¸C€Û‰‘%â!Zˆ±lÀgV¢H”ˆ ª\L;—ëïŠêtM.£¯Ç•°F"é}Óy±xQ³PN«”ŒU𸆼jQ©æ]·6ŒD“‰Aê|õ;Ë'0†4`ð†‚ƒ ñw‘lHFf†jÉëyô¡•«ÅñÉ…Ù쾎Ž&»F¼òÀÍo®,VH-dóåņ‘fâW òÑ{Bí©¤}–5’ 18Ñ|Âd2 }’-ê×Cö~Þ«okq»¢ ';¬µ5*ÜÅà‘³·èÆlžM ;~&£M')eB4FšCæ°ciqûŸØÖ4‰¡é¥âðìŠSäòÙâH~"[<«©,RóÕ§³ù|–Z¨þh±R×}õ~tiªÊÔu¯n€Ô0ø¾Ôr&ovç <ç] ó×ý㉈ƒoi44èMnOÐqÐô¸‹ãû#VÉf4GöSÖdZ›¡•Kõ­/„Ÿy&,ð:¹ýÆþ#nŽÃ‡[¶ìÛeûv2ï5ùqºèéž=8Ûí)N‹Ñ±V¦uL3w€z¤z9,Qת—‚:¸ýæ9ŸÝî“ö7î|Bâ*íùªíjúœK'Œ|kK[«Þ\ìî· §‹‹'‚y»Bjj`2ŒÁL½Tý®dIÜŸZ\êäl6¹öÛo­ö¿|ñ‡+—¬=¦{Tÿl~¬xª¿'Ñ¥øÂò¤ƒ´yû_¸üe¸wDëõUÊÊ^BëàC éL˜Ù:&³MÁŽèü™ˆI#êüû<£Eo>êŸÍòËWâ™õ1çÍG¼³£ÞMMhÂÏy4½ÍÅëü}®žŽf‘ü¹~ƒiܬ7síVcSc‡7Ó›? x <‚”WÉ´ÙDrKŽ’:^kWRx 9]ÌOF2ã…!-ϵÎc3¡M¯AœóçÎgÅD$¦íÖEüp›®EÃi¦Åñ±ÀƒÎK5f³&vRchöG«ƒI¿o+ŒÎ«ÒJðð€GxÜ»ãSˇÔZÕqœ4ôR†¡šFÔª‚B™ËNC…DlÁï89˜|pÜ;rNÃOÆ Mfµ^ãŽ^˜?涘¦õ–ΡõùÕ‡cä:!ùˆ’ÞÚkÇ gH‰ÉMœaJ¡¢âjF£W)ã¾g{NEÊ›ç×'¯äÅÊûùa_ÉÇ=š)h|“Û®aõjkÀüzƒÚl>8¶ïxâ«+KWâÔ¾ ©óká]u1PïÍfe©&äBµÑµsŽQ…àÚ¹SФ/\0´äôO|¯{jpàd??äæ3BÕkY{;¸t*Ñ•ðì æE¯pV³³{šm]‡ÙÜmzÏP¼§Ï7K›ÞÒî  [––æ.¾¿'8"µ‹oà£ß¶RqðrO½iã,Þ­1mKMPϹºš˜lcKj¨:õ:vTÔ¿Aoè‹r þ_ÿhVÊuv1ݬR7ä²bava 4Àgº?ç£/çY–>ã'¦n½»Ñ¨óG“±_&Ľg°/°×M›ËÔbŒ=ùUïœ@zÑλ;ŸR*E9k½V:“¤3l€£—ï)楠hv8ÌbîÉ›Kƒ+ä2¶³­-†nM8C=oåív¯­7#Ìj£Ã—VšÌpÔùÎ;`C§˜C¾š òå€ëÚõÍ ¸Ë”£ÇÑÍqÝóÁœÇ“ ²vŽÝeîiÒÏ[,6[§ÉLuu¥zl^»­»³zX6J|» vÃà[{ýéK𮄃e˜;¦þmA õaå$w™øqîD¢Y%Ö=R®íJ£Ô®òۄ̵êÅEadxrf¥.FÅÖ¯^]ÇÏl.7;36¦¹vãÆ5üä—WV–ñƒk%w¹öòÔïrµ ŸúÚ—Aý0Þ¹Îjê°útvoïwv´µµpžøÄ¾”?­W=ÂÈ-úH‡ÝmiwzlLF7–suZƒÛO‚½}`ô#¸wŒ9ô.é°×/Ò¸ §n¨Ú&ú•ŠÐÆÍPlêÛ’ádªqûmr"äïÖºô'H¡øÓo ¼þ™ÿ>úñöÍê„âºr–LMëIß¶Š··oî<¡¸.}ÝîúKQÿAºÇu~ç=Ò¾–H/Âó0J“õ ŠÕd€?BÿQžß&<#ȉDwÅé Ä×uV%þ]¶DùË;ƒ¿Ùdžeç]xÞ¡ÄÛ»eée”C_âÞBzÇâ¾{¤aÜ@¢”0úÉ(Ra¼ã}ÚD¡@ßV8ÉXTüLo*ÞTÈ8®¼©|Y·??TNÕñ&…~ŽZ¡)öÄ&Ò¡_à7ÊF #$ÓÐÇ`%Ñ4Ò¢K2­ÌÈ´ùÑodZ…–á?-‰f‡š—i5©¯ÈtòS/Êt#òRÈ´Э2Ý„2tA¦›Qš~L¦[èoӯɴÅT'Ñ(Ú@çÐe´‰Î %°^ÿ“¢(Œ"(Ô¼Ýþ**Ã*ÖÑ)¸ó8”Î*Ì…ºÖY•a.Ã^á÷4HNƒvÍ¡hc©) 6ˆìº»”@> ²a2Àæ Œ1 jÚ5]I3¸G÷Þ6¸=’ ¶-À¼rÜ=¬®ËûArt7Áç2ê¯G% •Aqऀ.£E˜Sp·§€w¿¸ÏÌ%x*À/AäÊhȬo,Ü+û‰'xŸËEé Ö\‚=×á÷IŠ$[88ó°*în.Î!‡N‚÷ú§ïÒ¯Èú!R é‡ïæ^ô!ºƒ?ˆ6@¶Öeí­Ç¼÷Úk{¬ßÙa x ÎéÃ< o° Þ» ¨¤èl’Õ%ˆÌ&©„-‚q“ø±\a© `_ËÄÃû+1Ú¸+'[DçH-IŽœ§ur²J¤¢0Îsá‰e-#[rüNËù_#¾”à¹ó×éE¢»^?C—å>€kDÂ$ÉÊ—ÈêÞó°ˆqfÏ‘ž"ØVaÆ>.Á{ù©ÿùzn¾ endstream endobj 1177 0 obj <> stream xÚc,¹þLóc6¡ endstream endobj 1180 0 obj <> stream xÚ¥TYLTWþÏ‘-  %:Ã2¨…fd­ Š,2lŠŒˆ 0Â,À êÑ †4­Bµ*Mš˜ÂK_š¶éC_úÒ4išú`LõÅ.¶15µéC¿sîiµ5½'÷œÿÿÏ¿/‡­¡qR9šò-½ÏeòþŽï˜çƒ_úf?&Ry{Ý®î8mÇ0‘úh¶^b¾’>~xV¯/4šY®zøgÀoz]®øã¡Os¸Çç ½üpƒßås_9ùe=‘Vÿ©%»H"iJâj䓵“…íuFRkÔ’¤'Ê$î¹òU:•lчKê¼ð}ØÏcÙ )MZàÖ8Hí þ \E1DE‰ÆÄlc¢±Í†¯2kø–´°h+’º!§³|œËZ”ˆ¥×=t>pH§Ï;p¿cé™Ô*}GK†Éd-¶ÙŠ,©1&Sf†VŸœRd±m×kµì¼oºÊqÝ?Øœel(¾yú´¹yë–C:çü€wîØ¶Úø´ëçgbëâã s3t–Ë:S3r¶§p-Öb®1ÆÊÕ§¤è“µÚGQÊÊ… ¢ìýD®Ì97ý<~âÐ#޵<f´ǫ̃7±Ñð»ì^ø;[!Ùê+ê9o*¶ù¯‘/ÄŠ¼<`NÇ¢ƒå/Ú8Ÿ ÛSðix‘C½ËÉJº‰z9/ZzÆž!Ž­<SŽ5ˆ)'’¨”•L¥¤n’ÖvOFV©£qSõ®¶¶2OEYçÖôì#æ½›*ÊÞhÉ›Ò%%NظӚY°%ÍØÑTÒ˜›’t0!¥4?« GŸj­.9Þ§ø&ƒoëßðgb‡‡~§3<--„¿eæE;þTøzÛqøÏù‹y õÂ3­>ñ¨§Ùœž•¼!/]ÒõvÆÕh4É…æÅ_…œÛ-ÅŽœ+‘/;²õ=Ë ßbï8–ê:0IôÊ7Ò]Øxíùn‘Ë™©1rÁ&3Ì ôO×ÔÌô ŒÒµÍ|smGç¹¶ºÙÉÉk×&'g¹Nè‡IB«¡ŠÆz¯obÊy¬ÝÕÒj?£»4Ân‡ [:zذ¥zdŸG®Æ{R$vx„lÉÞ$:§&ÚÏØ[[\íÇØí‘KûFªÃv§¡§£%\(×y¶ä>À!z־ɦ¥SõrŸðyßñxûï¤RýÌể÷ºÅùÓÞ§DKÕedÃáårò «npTuùù9ŸoB;ýOÊåóE¥ø7Kv>3Àcø<(w±ä’²©èo2?ð~ƒËAÞG/µg±¬‡ûä,Ï%ÿËÊZ^u4JocÝëzYl VVÔ*Ãò° 6Ï>WÞA mão|äUŒúâé Ü25f_äV†¥“a‰â蔫h']P`5åÒ× ¬¡^úMµ´…98†*ØY^CÛX„-xž(°ŽöHi ¼ŽvJÙX²KWx½tý*ÃqT¬é£½ £!:A=°Â;o¡*¤í€*qÝKn`Uä§.2Ú Šgã²TP`nœnè:‰½œuá7P*í\µ Ò°àîÁéÅÍlša•¯rXu`UŠÈG¤#²yQÒ/³cˆâ=,< â6Nà ,ûyà @v‘»©l97TŠÓ J)`7yp–¢Ã‹¨·] ½ºï'„ß.ü!Ð]È ›|‚§´l¼¨"E,\Ϫ)ßpÉèôcg…¨¯#ÏF30dŸ§òZ¨†ï^%RäÍ¢+Bà)£|¬±ÌàZñß àÍîoþrÖó_ 틲¾¢!Ú0|áUm†´œËý‚?$ú‚ç/-<Ÿîål{qòÊúEçò8‡w‹áÑô Þ&䯧CXõ¯Ò\»JC.(ÑV? ÅܼŠgÝâ ‰Éì„W!Å?Y§Kì˜Ä&QÝ&ÀÚ#pŽq?Z5Óx}'Çw£÷±×¯¢}BÖŠï€Ô !Q%`ùn¿˜ö:jÅYƒÎÃu»á•œ!"3C¢‚ÂÇ!‡Tžaù5౺E„¯žWrXU“ é—GpÄ<ùÅd¹DGq?„‡>‘ËHE‚Jþº•úûD,.ü+÷¼OO Yÿò )/ïÙ'y&Cÿ¡ªÑó„Ǽ²âí4 ß¼8yŒ=¸ç™¯ý 9-à endstream endobj 1181 0 obj <> stream xÚc`h÷Ñà>(Ç endstream endobj 1184 0 obj <> stream xÚíW}PT×?÷íÛ]£.°XÃì²|ˆ¨,,EЊX•@Œ°° ²» »ºh¢€hj"ŠŒuŒAš ŠJu€Ä0ÕÔ¦u:E댵“h™Nj44êî³çÞ}ˇb’Ö:¼;ïÝsν÷ÜßùºwxAHÒ2¢¢ß.«@Éf|s KÊ Îª|"ý€l§É¨7xï»9@^2 ~“F6!ù“ÙæÈ9Ä/Bþ÷q‰5_ÿè:àÝ@ªÌzÇrè"KFŽÇù*‹Þlܲ­õòsP¿/ðò•¤¤Ò©gÜr÷Ü(à*±÷‘r¼”ç8(ÆAÏì´´Ù0 @x(ësö ®>ÉSÛ€·HOÑÝP/È{K[ÐZ9€ŸZ¡ŽÃ·C’ì‘L$²OÉ„ÊuM§çnp¿[¿_øÃ—Ð×ÓÚÑ-ôÅ'nÛ°y{Ç'c¸¼Zô½Æ•Êj="ðNtq2ú;Ê>\¡!:-áþ^ìV»Ö¹˜ö—ÇvÿÞ&gïaY²#Ü÷š{û¾ó¥ã¡¾‡ûG<Ï;ü%zç=Ý#½ ó‡“{7Ð;oûUôŒúð!Mx||"=ï°OCÙô'îm„ù²¿Ò:x¼Ò‡Çóãó¿õмOzJ%îÌøÞfÔZ±}éid,™Ûߨ>f­wpãÆsébûèÿ°õ=]“¤ˆgT;t‚7Ô :Ü„ñ£ÑëHñ#^ê–òtfrnšƒQP-ÒHí"Íš#Å;ûºHËðqŠ´’HH{Á’'Ò#`<Ù,ÒÞKNˆ´$pþ"=â¹t‘~†ÛÁméQ# `…åP¥P…`þWˆ†ŸÂdü­‚Ù8jEy ‘KÆìÊÇ›Y…yY‚Méý«ÊgÄÞˆºVâ×€3Sqµ _d€WÓYó*Á·\ìÍl]!ØWŠãVœIו#2÷¾f)Ľ,øUÁ øþ0Í‹š2\IuªÐªH´-);¢öèðhx|ýÀ.El=¾6Ô¨GëŒ U),C™ žè­ï·çÉ3“˜G©)ú…ÈQTIøµ1,v”›˜›èñ¡k¨Ly¨O5ŒvÃí6Q{$‹§ çLÁßÍQ°ŠµHœ5`]$âµâÜ(ä87JÔlEjøÕæGvÐP†2;b¡1ZȬ¡žžÅæÛX|©wm¨…zÛØ‹ìó‘·°œ3ˆÞ0°ˆSkLlnz7û4¶«eˆæ”!&¡d¸|™Ì¼úŸ 3°ÞÆj*QÙD|nzö ÆÊ`±Ï@Z¿`<å(ŽL¤ÂD½{ÊOÇ*IÇo*òÉ0“­MC‰ +8 ¥IlE2£Ýc³X¦Bö¿Ä:‡ê6"*·wJç@Ï”²L(cK™f”R{²*)ãåWúÈ:$&elM>Î*`3U¬Ú,ì гŒ¢8—3„fæKODÊDÿÄø›™-´Æiž®dk-ýVŽ2;Ã`1¹+Öö¢úh=”!bÙåìÔ‹dØJ°§6â8õ|Ê¿¨uo endstream endobj 1185 0 obj <> stream xÚc`ptær8€Aƒ• endstream endobj 1188 0 obj <> stream xÚíYkl[Éuž{IJ¶$K¾ZŠoQ—Q%¾_IQâS¢(‰"%Š¢hɦގõ²+ɵd­³›,6ÁÖ›n· võ¦@4-’],mÈk#@Øüé>Ó6EÛô>,ºgæ^R”v³Y§è?ß;sÎwΜ3sDBè:B„’cû}ê/³Ðóyø]_ZÙ_üÒ¡ïý3„êÿpy¡0ß þ§?B¨á«Ðç^†ŽZõÚ@[¿¼º½ /Bû1B¢^YŸ+,Ô-Ó5Á|AÝjaoƒú*EHöŸ0ž]+¬.¼6ûƒ\†P• é¨ûH„ý = #\MÍ ;‚ÞZ- iZx„0^€ ºŒP2ÙOõ!TD¢®Çoƒì.ÁUÄ?´Œþ>–†I4Üþ ÚTƒÑ0üf¨7‹_¤\ô÷OÜôo¼EÏ“iÈùä?èUZ‹ÔȵC›Ûí°K¤n—Ó`Ði«ª¹¶¤I\UÕ*‘8ìné§¢á‘ËÑ_ o¶_tä{BKª˜êÕkùã/ÿU=íõ&eš)¿i´Æ2á3w´¶hô=y{o@Ÿ<¹;ø¶ÉÔÎ*5rD!`X -IÍ´Ëy*KçT5‰%Òwô>müîhê°_ëmutš­ãÏ„ÕÜY#K/{3÷âƒ÷Æ=ËYŸn>¹îtÂáyÖ““1ÆÉÀZ–„H«Ë̉nÒzšÊLEú²¾¥SÌ|Y‹={%0«ˆ1‰¥šÃTò ޷齎¼ß?ílñ,#_4 U ÃLd´1b‰Ccw»\Ž&±N£u1"+D  KjRÃÆÛK[|®ÜÓŸ<Œ)®¹Ü£]Ó×5:8ëÊì{÷kÒâûþ`ÐYðãcê àšöOmpòãÉÔá§+Æ¡ñ§ÃQMºIoåªë€Å'ƒx¡e*œ.FÝV4 n#·S‘mƒvë—!o×÷7¯N¯6†êë"™ÑÃînWÑÅ붺XÊëæ9E^á(d 9ømÞª‘äNÐd”)ÄLƒŠ±«m†V§ò¢RÕ¡Êgó«³#8ÐÿRëZÀ9Î6¶ˆë›±ƒU±V™D§—é»YïÈö|dN××ù…dúÞ`±–qÀbãìZaF‹Íûö*@ àGuCõ.N“¯Dl®p´¾Ê1djkKØ.Ek˜—nݹã³Å|¯ÖŒÆô~÷åƒÎ1ÐeÐhjëÕŠç.tÒž‘ÁˆÍsI$ŽX)ÞŸqܪNí"=c5MlNÅc>•OMLܰYìÆ€vð¨â$}ߨ§›‹ÌoïÌa%Uã‹n ²'p¼õHQÚ8î%æ%ÞìåN^VÔë­ò;|ÕÞŽÍàÑxwî9­bò¼TÃ}>£¸Á©Ê,a™T{ÐîŒb q·3ÊË¿ º5 æ³ÑŠ¥¶•=Ç,5’9ˆFïNLÜÆRÝ–…ÉÉe[¶&~0š<Œޤú!N¯nn̦ìåø ¯Ïi|”¿äT I§+‡Ê‡ývÄÕn例§SÖl`<-}¶`v¹póaL>åMfSÞ)yLy/3¶ï×È•ÅïùƒíƒVÂ8›ÙÑ`bø‡Ô›ë×òë‰ÉþƒTòpǶØ ”)¬9SV½ž†H$þi5· š· #æ<@OíûvÓãw"-Ý#Ö6ŸT&»Ì4Êj»Å“¹G)‘ÔÔ©,lã|&;7Ÿé3gÂwЦø‹Yê÷Æ_8HÙfÓ6k—Ú¬P(ê¥ry³ÑÖmQ¹ IM}{_\;³¹·TL.ﺧœBalw°lcÑeÁ?  ¬h;PS“Ôðñ–Äàí¥Ûc<¥h:³ÿTWìU½ŒXGµ?|(>̹½ÿÍëv{u^·>çü\J»•œzA³¹ÓfKÚud)^È¥ïDk4“!ÿ¤e9ëÖ³Ê`×È~Tú°h:67›ðîô?ð›òÈ•»®ÐT\à™öúóŽý`nàÎp»Á“pNû¯®á]*z0Þë.®óºšW@×–×ÕÁƒ¦Bržîâ·½.——Jt{rŠæc!(̾PÈ(B!?õµâÍcàÝ þ0@˘÷¼¦œOb~°ºÞÔíHÆšqgæ2áý¢)¶?B ¯L9v6è?= Ï|6ñÄñÀ{¨ïÃ\8_:³Ý—à ØOÃò¦o‡3–Œ'3—Ïx&¤u­C{ÄÝNoÂûï©Fu³ÑHnóH¨oÏܲv^¨Òõ´· ¹øèó!p«bÐÑ¿nlæf`;BÜ¿v óQÏ89Ä–g<›ª€ÊãÜfÄGEµõ(ôÅÏäî dlùÞ™µ›ó¾¼½žQ˜lÍá¤6dÑ{%=ÕêK¬®M%7ÛY‡'z¯»ýƒ×¾ÚO Džœsc¯XXÛ¶e»ëåõ ©>C¯Aβµµ]*]'Ã,‰½Xi?y ì&Ö­YŒðÞ uÚÒÉ 9=1ÎìþËo„îNç?õ846“¢¹]¯¹¤®î‘xõÖ&n±še μoaec¦/o‹ºhúÊ}êÁÄ‹ƒ±½„¹·¡¡]«êª­eYy[okoºÐwOØvVŠ…Ý GÎ#Œí1nðÞoo p–è`ò“´ìä§Ožà~jú È#ªáý'碞¢I ü öÍ12æ£Ì¯á|ÊÐVNäà#ù&…S" áK0PÙ¼»QvH.ÛÀÏÐõíÑNk°ÅÓØÚ,ëôÛ¨¼Ï¥K†Í™cêÊÀ¬4¢Ë¸úús˦÷'MiOhй÷ºôŠ:µ†”c|?Tü—ºZѭ̵¢i8Ñle›Œ$µCtÿãÔËkvm ltL8{»õ¹˜3nï{åw>Uì8þ.ÝùÜ@_Ýï~¡ºnàpò8GNþŽJPÙrq8›„ðQ5F“h! ÑÖ`8£-IV±¾§—”sLFLJ\)³ÂC¹$Ø<¼qž³{Jvü1r&YWbVÔMjj{Ïè{b» ßN÷.èͱéI“‰uˆì»!޽Pu¡ŠÍùC»ö棄ºŸµ/:ŠHë¢íW_‰(T|âÖ€¢ízÔš4÷uksj«ÒìW·o¼>]ü!¤¹8ì4:ÓÅ7¨›6¿É¤±°RƪZ)kÑ NQ‡â€Z*V߈MR5øÔ0ÄðÓ<»"IúPÒ›ð/&˜¨r6еY²¾À¬2Ê$ý™új¸ Û=íƒ ˜Ëሄ³Üñ` ±ßr{Þ"xûæ}=îPÆ1ÝSXÔõg—ëÃ÷áú \Ñ袜Þ|ò²àï!·Pò{áÙÜ¢¼×¹Ó&SúJ÷X—yÌmòz¬6ÏzÓžq93ç¤Ó9f íîxÌåˆÀíÌŠŒ´–VA´4 )hß»­õ¢~”DYt -¡u´‹î’Âé°C8ðµî\[Ã×¢ÿcûñ§:à÷«Tò?S(”(•òâ× ’ ¥¢8¤R*¨ßÀ}J ^ƒÅ¦R¥qð½À„ú[%PŒB‰+¥ÂŠ_ràçÚ å¸‚2¥1ña‘G¹R®lÄmD‘¼3„S‡k þGÁO1ýãÇïŠq}\ûó¡ÇNF.¦„Í*Ë=âïÂ_ü࿵S„SÅCmÁÝz{è·‘“~ çøÎÕg¾ÿ&Ê 3d<íûriá{@™Ÿ§²þ¿ßþèþJyeú÷Q^”ãÛ}ùþuVÒô*æMÕÃï×'¸ÃÉÞúxù¿êC¿ »à³çÙóìyöü?½]Y°Ñú™5Ù"sæ`Ô"É’xZ#‘U …qn„«Ä–¥Ùâí7ϯÿ*Ñ¥¿ÓïØOŸ's×Ê1´};É‹ÉíO°ªçãa ã•Ý » ™`[ë¸ß±å‡þß endstream endobj 1189 0 obj <> stream xÚckS pðåœëÀÀÈ@0:0pn ¼ endstream endobj 1192 0 obj <> stream xÚ•U}l[W?÷=Ûi›´‹—8-ývœØKâ8‰;±k¥Y'ÍÒ<§›Ú[—Ô‰Ö™í´ +Ð?Z©ªLebÕ€² Ö¡1†4¾þM*$ƺib0Bûc°Uhbl“@ä…ß½ï9iB;è»z÷žsÞ9çžó;çÞGŒˆ6Ði’‰"#-žë׌@ò¼G§Ó‹S‡[ÎA¿OdØ7“J$+Nnÿ‘±2ÿ ¦×Ù[àÓàëf2Å…ú×äÁ?þÅtn2QýTÕsD¦^ðc™ÄÂí¡Ÿÿxk6‘I}ýÞ«çÁ_Å»@©’=FF"鼃Ơ¶²1ò°HË’Áh$Ãi:*Ÿ&+•žþH¤Ÿu-í14«D¬Í¬bžIÛ¤—ùn$aŒAøOð2•yÍ6s½Ílc_U/2Ÿúkéå%¿WJBÏ¿ü1{z´ ÙÔ:|í~¯§ÆRm29=~_»Ã^k²T×0KñøÔÙtÓ¥'¸;ÜmºòÜ ?}éùcß|H¹pîKx}”‡@ãË1¸§»h'ÑV³ƒ;Ô=–™eÕçõ½}‚G ‡]¶†»›ÚÚšËÙãå±Pó€k<Œ•«iö‡ –ÚÎŽO׸ïðòÇRDªï{D¬%ߥpußÜy šïé?90\ÜÓ{â~ß`Cü€g¿Ë>¸iï#ÑáÅpßÂÀÈçö)¾¸?šö<°»ùpÆfLCL±øq‰©CìûKËç6L¯é:>@Š·…ÕŸ°K K)\I¢.LýÀ šl\Ëë[i™Åk‘o¶&÷löX`>/tÏ\~uè#‘ÈCvEy§|.ëè *ùMï(ì³ý»ûú‚µ:¾‡Ó!ìQű¨÷ÙkW€¶xÍv³Ýâô®V¯©ûÐLÃPçpìõøÂ—ƒun—ÃÿáÙãîû]ãÑa5ÀÏþ&nøk›<"G'¦Â÷"›¯Ý-9}6‹ ±[˜mGðh˜}QýS±xjôÜ|®KQ¦Ô¯B—;銴6[µ¬EmÕB2×—‚)ó–j‹6tm©N¨þE³×Ûú'm.«­âƒBζÝÓÉ«o*ïîéê~û…®úîÑâbŸ4ð7¢cQ¥v¯ÍÌÐݶZSìiVPÃlB}»~'›½¸´ ò}–jÒì“ô)ädäYyed$Ë5<¾Ž*Û‡×Øß_Q6WšÊ6WäÕ·¤K.×Ò“›;êì!'{„Jx™÷µÍ¼o‹Ý,ߌvÃñY÷°ç`ô‰'>ïp:­!–˜îŒ4&•YEýûÞœ«Íëò„Ö@œ½ ¿¢çìËnþýeöÌe锢,¹Uì¾*o•…É6Ùáp¢í_‰_Sÿ’gއEü.éÒÒ„‹ýJ=ËEü:f¢ž©RÃÌëÃNfÆ;…ã6ù/6¢þû;Ç€ÛÖ‹×”%?«ü9«jÒïI»yÆï }D²|ÓoüîÂùúÛ÷zË–w©7ä3;XSI—Ûi÷“ü£å]Ë»ä3Ú uÓÓ„ûnŒ>á‘v’ŸþÇ#5Ò¸X§ðŠìÅ$'µIgù9ÿ]^»Õ‡½ÇñDdÛ8.ºÍUØtkrÁ÷[ÚH.“6ëBM»zÝý×8†ñ¤ÏÓKtƒn°{ôщ‘ãû¶oàî5é£NÇÛMWxJ·úº§’~‰ÓÆ ù†§!h†®Ói ]ò–Ï96P#]Õi#ÍÐßtÚD6ªÓeÔËNéôjdWtz#ÝËþªÓ›¨Gº[§Ë©KŠêt…¤ :½YúŠôªNo¡vcR§+i»ñ"í¥ÍÑ"åi–¦Iÿ,µâníÕ¯9ÈÓ”7@Yš&Vº’4Öƒ+VÁ¥°¦àëæ$4XñZi„°æZ j;מ¦yøIÀÂíV1vc×F?¨’}ÉZ–Íëlo½Ë ¬ÕÑuzÖÛìšÕý5C3Û<²NQp—V `õA¢)¬òbtâë$dw÷¬ˆ9·yØ¥(#tŽC–÷«ÅÈ„ûYDµ/Ür>³˜?I³WÔ‹Wc—€íÍR^E+MÀÂz ûäû¢nïýP„NZ0NŠá†ÖjünD”ƒn øt[V0o¹ufÝî« Í#^Ó(¬5,û„~Qôǯ/ÏÔ Úi¬¼®Yѳ<ÏyÐIÑ!<›¡;üöcˆ]³k<ï_ãÁÉúþjCœmâÄÜIdI±Å™œ@TE=>ÍgB̵8ƒ#¢º# ­Ô#xÎñ8ƒŠÒ>D}+çïCïĬ€À ="r:ˆy/VU_8­}ëç\¡8ÖA|á:Üw Qièä·dò¢ "ƼÈ#)GX»x®)‘áãjF¹55)›IhM M«8OYq²¢£xœs"ÂŒÀ²T‘‚Ž_R¯Fä’À»ú÷é a›]9C‹ú=À{D‹I;“Åÿ£ªëÏCóÊΉ[Ó-bKcå9Nã;G~ÿíï´ÿM ]œ endstream endobj 1193 0 obj <> stream xÚch^4ó®Ó endstream endobj 1196 0 obj <> stream xÚT]LÓW?ÿÛj‘¯A©C¥@B[ZhùjK)`‘n"U™Õ–@iå˘lY¢$ËÌLŒÎdqÉ4Ë’=,ãañÅíÁ‡é‹šL–ìaqÙö°,Ù’-÷»÷ÿçC¢FýßÜÿ=çÜsÎ=÷wι$‘ŽÞ#Qx Þ>qçô×|ˆyb|zyìúú·§AÿNÄV'âÑØî‹Õ"ÕUÈ\d°Ýà_>‘H/åý$}þ?ð±é䩨æ_M3‘ú×OD—RTLÀ_oš‰&⛾ €ÿ†H›&5³KçIƒ³>`G¡’Wi”ì’ÒL SkÔŒ©±‡x•\w8Ü-y‰ö½«®[ÿ¢:©;ünÄö°Ûü4NÒ(„ÿ€WQ‘#¯4¯¢4¯tTº²~Ir®ßa·¹,½¶Ç³»ì>åÐ^"Ùbq6º\{a¡¡@«­´»œ–2³ÖPP(­$/ôô\HM} ]˜Z~'µ|zvV?r=™¸62|-™¼6Òeeåòå••+<ü.¯wÃk;ã^VU™9› ŠÁ·3g6+Û8ÔaOrØ]®&c¶J‰ží2§zý'[tCÒkæF³ç`]¾Ñö–§ÂgÛ§³ÔÖ,®7«¾¼Q]m3š3­ZKç˜þÄõÉÐÙ1½ë ƒº¸ìõ¦#ã ®ñA»ÙÙR¤Êʬ Zܾ}}Uæêª|£f'5ì<Þ%Ä[JrÄ•¡«©²ÉÂÐf”‰3ŒZm¾ÓaŽFÎÈÒ5D¼n_þÇù>·7Ò ÊÇî,¯ñ÷êo®²ÛëGoê*½Ãž`úXGnŽïxÚï]ŒumàoRüZUþ&G¶ŠÃnlÂ!eNISÜë¯)wÚsæs[;jKjªô8HŸÛ[ôúÓÇ}9¹ÇÒAϰ·RwSúü‘kUö„_üq”%w&%9›"kûíaw¹ÖÞ'Y}ëËêWEy›u¯Ô¬«pÔ—ÔT꺙a="}QÿèªÈXR]Ê\»ö×™äfr¡¿Óú©T¿qúÞWŸ¦øzÿ×@ÿ‰j]«ÝÐåvr/¨²È@™ì®Ü Û¾=è­QzÅ^ÛØgdcWɶ]ÎæiÓÆB‚ bMqp½4C§È ÊÉ4ÖC›Vs‚‹cÃ×þ1höÃ:i¢ŠÂšk……e'¬&i “[Ó<¤QXÚaÕ F NctƒÚð³á…ûØòP·ÃÇ‹œjÚaqÏa' Ó3â˜Q<×A3 ÛYà'Ï&b äÆê„Ä :NcXÝäÀhÆî)È^õ&“âQÌ4äQ §„Й‚,‰“ž•­ƒâFÜÏ22-ïpËqøœÁÿyš‘QžcŽÉapQØn—ò<›è$,LO±=aŸVì­¢bÒÐñP=Æ¢VhmÅoEDIèÖƒC·~ûúgX'vœ¾åa²yÄÂs{X`ͱ ý´¨Ž_^8žñM´§±òüΈªæ÷œ•Âo3!t€_Ÿ¨°”ÐÝî¹ï µì¬3â´‰žz™ÈbbM‹®=‰¨ÒJ|²Ï¨ø›Ñ¥"» Mä<çxG@¦D=ˆ•ó>ÔÞ!üûÁ÷R—° C»& i@Xô ZÞ Š— Ÿ†°†°Ãu¸ï8¢’љܙ•0'bœ÷H@Ê–_ ~׸¸áËãjFÉ'r2'lNAkLhšD?ÍˆÎŠŠŠâq¦D„ åFFæübJþâ.QÌ­}^§ Âvf³‡–•÷€×ˆ“Ü“éÈêÎ~˜CÄ<³)ñ®ZElÓXùDZϑïû¯sìÔ endstream endobj 1197 0 obj <> stream xÚc`<æÓ endstream endobj 1200 0 obj <> stream xÚ¥VMlUž}þIÿ’ÒÖÙ87n’†&¶;¶óÛºqâÄqÓ¸¿A8uâm\Õ?‰í¶I… ‡ŠCRQ…=pB‰KÕ[{*p+'P'B@B‚šï½]ç¯$4bŸvß̼™y3ßÌ{Z’ˆhÝ$Q4ær§¾ºx’÷ð^œO/_úâ“Ïïþ…ˆ=N©‰ä¾§Á‡D†Ï ó¥ ¨˜bÐ5ü¾)•).Uæ¥^"ã>ð+éÜ\b÷½]¿‚ÿüt&±´@4 þ/ðJ6‘Q?º÷¨ƒÈTOd¾EF6-Ý!öºÍÎC#¢ÍRœÜÒ ¤{MÌh22fÄšÑÚ3ŽH¢RÉèxþ-ü;¤fˆynÄ^eOønœ¤8„‚7P‘ç@ãæÆqéÃçHÞç_²'û<, ;wéÖ ½Äfoiñvùü³¹Ú"Ë·ÏÛÕrÔɼ^øšVm1›¥ÖÉl¯µòÊú¦Oäì@·ÒT9}°¶-t¬/¿çD.ìŸ:h9ãvDÚgÆFãNk»ëðbV¶W7M$G…°“Üde_³ûtˆŽ5Û±C×qæqó ªØQ·ïÛrÄ®…!Ý .¿éõÆ—ƒëq¿æz`(d‚ÁÜà`Öêºp#^:ßá:{#¹qÞu*°8^ Ãc‹Ž‹6³§”yrÂ¹î»æˆHØçqË2Ï­ÒjÉdïìî»0â 5Õ#Më@qjâJ÷±P[íÁÅö­ÎdàÔ´cÜáŽY^‰úÃù“ÙþÑ˧šª›å”ƒBÈív‘lÔF~ –óóùkVQ°úù–UìG€°Å:ºf-­p<ý-mƒÙ ²ÍÞÛÙ$dYQd‹¢âkÇ©‰êÆ@+4(xÎñ8Î:[)Jg0sþ$zo ßIðaü‹ÅDNSø1O¢êa±Âim-$n†Iº€9‚®Ã}«ˆJC'/¸% “P1æEH9ÂÚÍÁsUE†;ÇUF¹ 5)›9h]ÒO|Z ÂOVBtsAD˜X–+RÐñKêõψ\x×ÖyŸ^¶ÙÕ3´¬ß ¼G´˜´3Y|‰ªn>DÌ+» îY§ˆ-™ç8uŽüø?qvëk endstream endobj 1201 0 obj <> stream xÚc`a`0’M endstream endobj 1204 0 obj <> stream xÚyL›×ý½g¶ÁøÂøl.°1BÀÜ—cnš8îä$M¢´ÍÑFYš6[ÏMK+%i—­j·iGÕªýcº4ªZ©•VµšÖvU»¶ÚR©I»)ù¼ß{ßg$¶ñôùýÞïýîëû@!¤@‡‘¡ÎîB÷ƒÊÑ]€9 ÏèÄ̾ݯÜwå À_!¤ ‡Æuu%øW: î:n†ó8gMÎFV;öËî…ó³áæ™ù±Ðô7“ÿFHEeœŸ ­. I¬@Hý8œ-s¡Ùðc¿ú>œ‡lIIŸFBäŠ6aÇÃÈk«äˆ”“"…»:‚,(ö×ÔÙÙ„}E£R'ÿBR'ÎŽÝ3¹DµQ ƒ´ÁY‚äyt™ºìL]æ0~Š{ù7É¥¥2ŽhLV"?J±7Ó€•~ê1F÷“Eôù)Ò[íÞ’RÛhH’ýÖ˜žnLÊÈ ‹©ii©ôd OP½ Ãcø¤¾ž‰e6 € €×{ô6‰ÝîÉä’èPtøi­A!7jÏRKð¥‚v›­ÃÉoøÜÑTry•"ÄÙ©îRo‰Ýn³Ê IF£ÉÆÌ¡ö˜ä"Öd_·™H‰5]­ÑçXÝùJBù“§;Ÿ˜/žÊµföç/Y”ʦ‚ãjÖüirOYa ÇkÛn¯«Ëhk0¿òÜ̹&]»*ùÉc/û’KŒÓáðtñPWvöv#³-=ú9EÞCV„LV¦¶ÌÄtzÜ¥eú*Fxä`”\¢&/TT'gX»Sғ쮊¤ƒ'àãR•ÂUš´’TLÊ©²e ä¦X2 Ù-帩|¤w´”ó¿€êª‚øí…8d@%ö˜×ÔI¹Ä¦gQ‚bÒ?«¶?¸M%  SS Ц5¤µ¯ÔÔ¬´À?UÖþÑÑ~kUÿèEµäÈ‘ bmµ;¼FêH©Wm°é<:ìÁ¥n\PŒMÎVkíÆ”ÂŒ6ÿ`÷ÐZæ?”ÆKgöÎ\‘Ëü§/*øò®ÀÞáÓäÿ3Üdž#û¯ŒBÅ" ‹Ø¥´ëH)Ôj(ŠÈ9°!•€Û¬Hl±š3ÝÖÔ« 2—¤Ðµ6ÜÕÓ¢Ï×n6ÍàÐ}mµMŽÖ–—EÉ6uZVµ×S#“½»ÙTþ“äíEE–¬ERrb²P•ÑkóKÈÀbÄrîQZŒw™G&áé{ËûÇ—ûÓýMO–ŒX‹o=äßó÷¹Ñsx+Üû‡§hOn9oCíhPꚤXFeàÎZ>ññù3ÍÍg¦ik;3½oqaßþ¥¥øççgÏí¸ëÜüü¹O?þÄÇ?%Ø÷¢€:1T—D*ö†Ð2øò‘³]©‘ÁÅž¬Ì®¢ªKÝ%¶<¶u¬Öçù5æâÞRÏáÓ~$Öx*ˇ}sÿÉä:›ÎcÂfX7œõÛ0í7S¥7w›C9ts5¹ÍÜíŠõ˜3Ðíñv¹lÞ-Ç•ÆR·Vëñù?Ð>y¡O\¬Ojåe 3ð‘Ãl¢ël“HâßÄÚÁc?Å~qã0®àÿteÑ Q+Ÿ™ëUvë´Œy*_KrlÆâ‚æ¹ê†•æ­Cæ s]Q ‘H}y¹¦}kŠI­JµÛSãdÞ•‘±愆8ýÄø½¹štU—ßZ_R<âÙR¤Ë×ûòmÛ«–²b»i«7‘å9'ú-‘mY·›Ÿet~BéZ…´¨ÉYW‰1%¹E§K0¤å©‚šÜê"¢áâ$EZ–:¨Í¯‰Ë,IMnÍp˜Š J£Çþi^‹“´c·ýÓü–á]uÁ>˜o‡‹¬¿& ë .VØÌkÓPá¤sMK9’6‰©z[yU²Žo¨œEšÙHdVSäT½ñºÊY¨Ém.(hÎÕ:U¯3]½0ßä;”{ó,Ý0Jar{JÁO|}¢.š­*õ–Ä-ŽÂÊ@Í@¿Kã2ß’Ê¥c½Wä\ÇÙŠß÷ù†;†Èwü!m‰>!ßtñOxçćm½´^L‚^¨— V/d"ÕP5½Qi{\ÏÝa®ÞbÖ¦éÊÉåºZW}Gs£Þ¡¹Ùµfbu¶ÆšýÏDÔÇVO~'»p;³ÿæjÏÉ7*•æ$½±z½F1¡$¡÷o¯æ‰ýþís9MNÓ¶Ò©¬”Õø™åàsMöÙU¯£1¿¿½|¥2gJ^›­b‰o˜¬Î¦yßÑHóBõñÅ.¿?lm‹¯98xôtÍ=ƒGi™™™™æ`Yô*þÈL¡sUº±@X:1áu]Ðïv Öæ´›S;-9…†Ò@OºR™[Õ=S_ÜãÑ%´Äi3KÒ¶îh-7€LôfæBöúlõ–0y†Øhõ0=†ØR¤˜TêKñ–Á øüyWY4°Úðyè.ke•=ñ°ÙWñ~»¹ù”*cç„Jè=f'Äĺt·›©Ø}Ïä ¯©µnp6~.‚}ü‹MuµÍ¸“-2¼5Ð7‹0kà’©cÖѼÀׄ”Âv‡»|}ýûô÷ùðIYxêè}§Nq/r§NÝwtj7ÇG„8Þ,Ë Nƒp ¬ Î{è猻˜”>&1,;ùP {*Ìáwxžî<Ò™¬èuøy|ZŸóRÜÆø_áwëkù<З â?MºãMS^"Nyj~P‘às5[•-8‹Jù Ña*ìõʸç5…ÙA§ÓäÚbÀ¯Öð/r2kSyk|ž2ömK„¯îMåU$‘|Ná÷޼\ÅöÏêåü…(’dKàM¶Š´”Oøn—dóø«’lñëyý/ÿ ‹ðýèìÿ†Í¸_ÐywÓùتȂGÇöß ÊD…¶oàñ®ßÝ"ÿ#”N>@Cp•0ÑŸCéøºè"ÍЗô]w¨l­¾ñè^†Ü¤õÂcb{ú:Ù¹‘_ÜxÞ oÈêdð/Q }ðËÑëøíY˜'xÖnXÃkëçâú}Œ“p+îÃçñ%¶® ‹¤oXdU\'Èkä/°¾ <á%~qõ’äš”Hû¤«l=#®Ë7/ŽpXÜ wˆ{A¬¥ z iQ#Lîõ@ØYƒ^¢7Ò8€im0|ÏÀI€ R£",A>tB„¥0û/‰0‡&Ñw",CyxT„å¨Çè€K„ãPŽÑÇ£Zba%ÔÒ.N@•䬫ȣäCV£n Õ¡y´€ö¡%´M€öäÊP1dÔ‚šàvð3( §4‡ÆÀZ L‹XˆIŒk™Â°‡AÖ^øÊàŽÀcAÝ(Ü”ª~CÀfôh$…€Ç ôElm½°šŠIˆñ¯s;7ñßY—eu³sìŸZË÷hŸe:rx—Àÿ0¼©c*Bå°{Sp톽y`m…Û1Àý?öïa¶‡à‰>‘ £YF3 ¸yÐò}™igÞP9û «ÂÍ,Ó·ðw¤¬gÙ£ù¤ñèSxoÆÒœZÐ.à°Ü†|Däw±êˆM*„u7[. Z·ßÍm!‹KöXÜ ¿‡{v“öu Ë€[[h^{€[ˆe#£°Ú ñ‹€ÏðZ´g`§¹cLý\xœU õf’ÑvCüü¬®íÍ’ý$fsƒÅ¬þËÆÙaº ¬Šˆö 2Cì× ÙÍ²Û °fh ³µ›ÙÑPj«{a§ç¨½ üvÀ¹50ÞNÀX`t¶žq´0X¸kd]ßaoƒJCe‡Á*!:Kì´ ‘Yb•°Ìl\b~Ì–FX˜ Ô×0óð«b4¿!'ËŒg ¨v3J ë§9ÖYB§Q;˜…³,–±Œ,‹ñó?Ë| Á³~Oët/ã[ë¡}â, 5"Ø$ôdä¿Èêæ~X‹ifØ u1Ûf`§>NÀ=¼ÿ?µƒñý endstream endobj 1205 0 obj <> stream xÚcP?ÑØw±¦CúÒÀ endstream endobj 1208 0 obj <> stream xÚVoL[׿÷>Ûl°‡g;Ø`àùù6DZ1Á›€ùŸ¤1Á@Sƒ)˜:u]ÒUÓ¦©Ô´Ó"EÛ§iûÖûP-]£MÕ4uS5M«mê¤USMùØd«¶™{ß38(ÙÖùÊïž{î9çþî9¿{ßC!T…¾†8„ÒSnoþW—B ù6ü/­æ÷V~Üv¥ä‡iî¯å²ËµS‚yþÐÖ@Áÿ™ü Æÿ„ñ‰µõâ®5O R•ãä —³®á®aÿÆ ëÙÝM$¡BÕ'`,ld×s·u?» c°Ñl"9o"5Bä[d,’r/"/­NMTj!*˜ã*ÿT(žNÇq¡ý}Uoé éÅåYÒL>¤«Qy!ÚÏaÌ!!_µ®ÃZgõ⛥ïc©ôòΌvÎýǤÜGfäDHmsôù Ãá šš@hÒhx“©Ñ¨Ñ8½>¿Ã©'F6îìžZ‹˜ü÷Ø€-é²ÚÍé³Ã×3—S}‹Á”vç|ú›×|uö†„ØmêiJ4ØëâoÍM]O¦Šb/Å:/]K %NãþçäàìE'éúlù;[Ò.£ñù‚>N£u}Þ”!aÉn£Sø“[˜¨ÚF«]#ݸkÄõ Âĩ-g§žSÏðœm¢t­µÇÚÜÖ-ÔÜ©6´ ˜k2÷Œt&üÎxÏ­’_ð<.q¨ï67¶öiO®Fñn—¥Ypµ5 g`ÿùù…åI†æ=HŽ…a½ðR(}ggþ+áÌÕéÀâ¥éBð‚nâó»÷6&^¿øê{¹Ôüí¥ü«³ðx•Yöá/ ¾ x£ÄsrLÞÉV‚…øã\ÅrJ1PdA<è;a·Û½ÆöÎxg"e:͈õ¡Âi1,LO5¹Z#:wÚÓqr,ÙÙr¢®&fj숴ü‘X{¼IIIç©9C{ô¬$Êx<°ßÚ <°Ý ÈnZÏÉ¡á¤b÷×FËëož¥Ðú 4gb•BéÃí¬VÖߌJܹäXgKG=‡ÇÚ‡Æ%1äX³FÀsðôË, 60~À¢6H@¢PML•4¡Z,ÂŒ|‡“´õZ“§[¯6VÕÔµÚÃB“Í b‚;šºZxºÕÓjöšµ-R‹Š8Rº;-­øŽè´x\eT©KXoÑùÚ͉3-=õIÂn‚`£¯1teHÆIóvpOSð€ÿ|pr´±î\i©|^úØýpü™÷ÃÁ1œ]rG_¹0¹âŽÞ˜ L{šCP¦'¢›xsyïÝ5¸!®ÿt%•zs5ñâÐìwé!_Èù= œÆ`À¯ÜÀ*zc'>V4^Oìv¾|e°ŒžT\Ja\M‚R‹ÃàXˆ™ýMº¶DôX×±Óñ6]{¤ßÐmtú2ó®ÂØâËÄYÏ}‘œ´"-z8)4«%ູoQ瞨ë0â_—<ím¡(TòRb#̸Ã~ÏBÇ= òï¾7“öÿe˜ß¼ÿ€»™‚mÙ–úÉïKî³ýÇHÏÝc‘*Nü9}gþÈ}#B8Z©@Ï6ô~d!.ä!¨ùS~äSÊ=èmp‡>å‡ÿ.Ç—ßܲ-“‹ò‹ÈI+œØå xä–öC¥ÝG÷±€×ð{‡Ô@›¨h_gí]ÖÐÆE*Z^ÎêAËôIýÐO`«ªA¾H¿N˜ ÷ Œd™ =ûÊ¢2‡†Ñ늬‚üþV‘Õh «YƒDœWd ãÛŠ\…\øŠ\:I•"kÑ‘Y‡ÂdK‘kPˆ¼£ÈµämòP‘õȯ¾b¨€6ÑÚBÏ£U´†Šðä…w›AŠÃlôyøfÐ(Ú@—‘R4yè'¼¶Ù(}b]…ç2X¦À»M¡,xS«4<×ÙhžÔgí@´,øyÁGbmÖNC‹ƒTŽRŽñd„Þ#1þûšÂ†yöR á(6”¸½`Yß-ÈE dK‚/5êÍIö»ýIäƒÖ³—A÷ÿîãy¶Š»ú,d6Çü¶Ð  +ÀJϪÔY¶#gª,ÏPÏUˆ¹Ïÿd9̪IëKs’Q|+µ´ÆZá)þËOø‘±¥6ð®u£k¬‰`uˆ_D°uÃ8¶îƒÜ»Ÿá½~dõÃÛ Û,´¶ð–s9Â싌#4EˆBó™;ÈvzZß ÆhºÏ—SènÖ˜íäoœñk“ÙVF"BhŽòÌ8=ì<}dˬ/²»¨Š >9f–=mpB§Xu§@ÐÓÅ1 R%õ4ôtîMÂ3ãQt†ù¦A#Àýí0óe²<7Ânš‡> 3Ô†ÆÎ*9;[l´ ™ÙbLØf·Ø>ÖAK3,ßt¯9¶Ã/ŸWrTx¢&ÛÌç2X­0K§ v²²ŒQç&C¸ÎrY®È¶’¿e¥þël/YøÎSž^e¾ghO¹(GdLò™,þU=z¶1­ì&»SE†-=Ýã*ÌÓÌÿÉ ´8 endstream endobj 1209 0 obj <> stream xÚãÒãâTÀ endstream endobj 1212 0 obj <> stream xÚV \TUÿÎ;3¦¼)We`1ˆy0>udDÑx3ƒÈc@éúɪ<ˆDê’ÊêËÅŸ¡­•¥­aÙ¶©›µ[kö\ÓÒÝ49ìwÎDL[{ÏïÞó}çœï;ÿïuî° dqóB´ËÓ NàÈF|3VåÖ·ûø!ý-.šœgͲ(B5 ‹cay80¼×!ùLäýòŠÊ+ggÉõȯ çd%ïOjplÁù梬ÊHƒNã‘WÙ²Š¬µŸvG!Ÿ xDùBRry³\‡¼¥^vrœä‚(A„{s\œ"hŸÃ¦Þ½8´I@ÀlñºÒ™íJà5äå]h­ÀÍÇÅLjïk²è;Gò„ªÞõò®Û³òÄ+Àe[û®Ê‡É-L/цôj_µAï¯öUx¸{z)ýý ú0Ö+ ?žî 5N°O6 —kŒžÎ>*?\¦“©ÿx ý•M ç¦ë5« ‘{w*bD]z}ó'ß®ìh™>¿u犦ùžÛ½{¿§Ò^ëÙ›5ÛþñF{{Nö“st5ºxóá9u»g-8yüÜYÿù) A ¢#BiËÉS+kÃf4}_¡Ï–€âµÒW£Pûú\ŒK§5Ú)OÑŸ£Òz2ÜJöÁu~‚Aïê§ÓŠhšŸZ.ÎÀ,1êÝܽ¸ýâ°ôÌÉ9s×<Ý5ÊoäóîOƒ"m&Ó’ˆÕˆ.»¾®›¾¿÷ ™ðöb³ÆÑ¾õôý˜8\KïH š™Ó“SI¾èí½u'¡çÖZ¦J$n%,×–›sôe1Ë÷i A)5ñ/Ó»IDÇSKò“-ôïô6½N?¯õ$u *G„—Höö]kå™0B|\¸µz#³o´ÌÃ]PjÂ\ Î,l ¥‹Lk¼B²vì¸ßnX·|ñŠ‚´ †ð$ãèGÝk]×÷™‘ÕqÕ?xìø°P£,{ØÆg*×­]’3;pnÕ ï¥žY#ç‘ ÇÉ—GGÕÝ1ɾð2ÄÍž¬™6•cÊì»*RÄ ˜åcØÞßo Q0,, J_–B<~:æoAI|•,}¢,dkë¥[]=±:¶¨´*y¦ë˜CýÍÊäø•Dþ"Ñ“ WÏÓÏ2R’ÒÇL®w#NŸ5^SiÔkµ…–¢dsÌÖÝ»+z6Ö¯Y¾üéËiÝAOÓ6¥lJb„êqµ Šû®*òåU« ëŽ# 3ú÷燇»Ò'˜Á<œÝ”‚‹” ®^:¥ZOw„k$ØéÂ$ÇÊö¤mK 0>½"vMƒ7™HžùfÛ¾kKk¶<·ƒD|ø:1¶ îíÞôË †…1gFô.Œœ”49b¢ÙuÖúLm¾Åñ¹ªÄÊ©[WM™Øùcu+½ÔC¤ÿ™A%á·Éâ·^¢o^h‘óBhJnVüù£Ä}òôIáãÍÓxݦö}%.‘'‚¤ä¶«§—Z/ŸyÙÆ}Du%ÎÄ©ú»ß­=s¬éˆpxËS%¯íî8M­t¾¬K<–O_¼¹çFõНw|pe׆ÚMõíGÏ ®$#aƒ”‡©ó«s'pÃsÅ|xùà× |SI E¼I ½@?Á|¾ØL’NO„V²äÑ&º¤»H*Iì½-(5·% m¹†¶ ƒékO Q*VŒG¿-’ó•W#iâµ§’fOݼ£‰ÞÜÕEÿYŸùƪ5ë®^¬eÊÉã$¨ r¸ÂÕ–Ýí«p.ÍÚÙÜýVxÊï¹±Se¶7mywÿé†?µgù,eçPRHê„ÜÜt!ÃzRHµÐwéZB‡v:Ì^ùçcW.5¾µŸç÷Lôwæ·¦°,@ïúÙÿ’Ûí±–ÆDîZ EéýýÕnzéÐÓ ç?'pqóé‚§óó×FµØZ_|¼}>ýý‰Rz{LÓ×Ã/z'¸°úã’È'’…Iïèþ[ìæ´ŠõklÙQÕU+ÖEÔ®xýí¯De†ºLY¸´> stream xÚcbPR|ÐÁÈÄ Á endstream endobj 1216 0 obj <> stream xÚVkl[W?çúÛ‰Ó´Ž»Žã8ޝÇŽ¹vÇvœ:&~Ûqí’8‰ã4Mœ,vCÓeë`$4±Qb1$ž-û0$>@…&1øˆ}DµNB€TÁ„(´üϹ×nÚqOnÎÿÎÿùûÿϹF!Ô€žG"„’Ù>ÏEÉâ`åEx—J›ûkßüÓ¥—€¾‹ôÛëÅÂjã¹ÌŸ’}Ö|ë° ý5þð?Þ²¾U½lþ+ó6ðïÿãÍí•BÇ›ƒàà{À¯n.ï ~äAHÞ¼©\Ø*¾ò—½ üi°¿ƒÄø~Ib>ÅÌ‚Ä?ãäÁ#°ª”0b‰˜aİ'bPíaÐx29އzð@ì¸ÿ[„ÄÜ ˜î¶‰DÄßøód+CÈÛÒÙÒÝÙÒéÁ/ßÿ*vÝÿ9óÖ¿}.fôÜþŽïˆš!­ÙÊõû|~­ŠiUk4^ë·²~#pRé?Î]ìÛ˜ëtNsF·!¾xÑ«Š+EG¹dN O»|A}aùú»£žWoç?¥qû‹`ßJí³~bì:EàÊëÑheVk—YÚª6Šˆ—ë­Ö–FC¯Ñe°‡ÂöxÔæÖ©÷:OÖ÷”B*Î)õ!?7—JfÝC yL*mW³“¹b8¶êü½þw‰Ù …˜Gò·J¥-øtÞD4’î6XÛLG÷¬Â¼0úÌ?±Ï¿ñz<2 jVN+›À^3ØûØë®Ùóù¥]f3Ëi<ÄÞ!¸¨u+X7v8=òãò†–†Þt»ºWIO§ò–9â)úµ¬gq›Î2f:ìÖŽø|æ`ÔXðA¼4€’Œ ÆJý¤<<@oÐn‹žt8ô!Î28¾´=; zdšÖVMƒb´cÔ¿1ÝÂßìx<8:‹½·}Í’ðù–OðuRâEÆLò¤}ñÖelͯ *YúµRé­hœÄà2ö[¬­ƒOù²“ëRëÜ÷&†Ü¹DjŽó‡ôÊi±Ä³ s“¬º½).WÔrTâÀŸ£€,é­xÑL¥,mVJþ Ò;þ”=ÊÚO| !o«Fæñ6hîîž©g60j# ŸÙÍB~×v¶?™"ÚaÀö Ó†ZH=¡ ¹ÎÖ.Ò}Z¼Û·Ã;r+P ,î ,¦šÙ¥BÚËÔ{y“×Õr!1Çu6àâ $]:ù8fÛTL3Þta‰mN-ì-€ô"þ,èAy½ä€u‚ ¹jφîÿ?ãO÷ë'¿õå@*a^öZ˜ÇâdT€O3ê¨w^­XjÅ×h°5r!è-%kžà…H÷°Í¶°#6Û°"|0?u5¿:5ÎÚó#ÃyGïÌðHÞ.äÃ,’çH—IeuRóAû[­bÜ}yýp:XÍ-?74Q[8¿23kû{TêFcxM‘Õõ´,ŠÁ‰çÒóWÂL¦á\¡°Ì†-zo'ÆJK,ÂÖ|¯o'­Ãqµ üg8\|« «V–ãï!œŸÚéhT«†íîáÆvU“¾ea+9ܔɿÜ“¶±j4pYáŒ-ºu˜égm>Œ³Ìbf<§ðÅW £YV”EögbWãB ߀\;°ÿqÔ1 ·KIíï.îç˩ÄÓÁHerj¶wÒˆNhÅ\‹^nbv…eÌ;žPJ›d¥Áè~:0.É(Jç#Öè0²m’Á&m“¸§«Ã*®õ§¯^qN(I+ïôш^Î5Pn¤Ê§±/Îev'k:Ñɉµ' Ñ€}²wvj² >­\ Èš¤ÊĸwÌ’±]§ÄZÝ Dk3v¬l&r¾¤ÈˆÇŸÍ§÷ù{›…X> ±t‘Xê×6 ¡˺BáJ`ð–…Õêt¡G.843Äj•¢yQ£Á“¬¤rÞî‰ eZ^öåç¼Ó¥õsíí¥gÖÃ#ÕØéi/ÿÝ>o‹ÍC÷HôGBÿê»?½Kæ·ÿ…¯×%sSD®FiM–èñß?æ]àÌMþ øÈãÆ#ßÀ'?Œ d^‚÷ûð¾猘½ÎÏG"wˆ‚Ü=ø;( ¯¿†Ú˜ Šçäf¾ïï„÷‡ RQt€¾Žn£Û¸í‘‘Æ‹ï3nâ7ñ;Ìqa¤˜ëÌoD&QŽ"ç†ÁÔý¯§½¿#°XôùEBiŒÌÀñ4ƒTô—¡Eã§Z 5ø¥@KÐ: ´9ñ¦@ËPI P¾-ÐrdcZF—@+QˆÙèF4ļ.ÐM̘»­Bý’¡3hí }´‹. ZGUømäÓîF~ ÆawÖ7Q¸³¨ŒVà62¡¬lœ©kU(W„¹¶öàÿ*H&@» ¯ eQ´+”Zz4É Ñ)¡K`­zÐqÑßIã@Õ¬Ôl¶à8bãƒ}šŽhäiÌØÝ¦»¢,Øu€ä6èîE4XGË…`æ`eè"Zƒyyaœ†ÝXûó¸@s(À[…õ [D[Tæ"¬mƒ§'U*N3"vö¡ÊüÑ,Í2ü?É(­&©/Á$\t]%56¡eÐ0=Fõ~UÐwÒn©‚Ì Üá}è#t8AêaüNˆhdû€/‚l_û¾'hoñþÐBÖ.A,¤¶9Ðæ±£òUÚ¿*X!xëhoÂLê[¦Mò¼ô*í’Í:•Í~1˜“ÔkùåØ! ½°r´Ïܧ›ž§Ù*«ôÄ.CTU!>Þ&ßßf8¡YZÝ,Ð&4By‘8f€Ê¡ ˆzfÂG ÷2ð?üY4Ju“°b‚û! «Qªq–ÒüÞ½hæ)Ø!2Äv¢âÑÙ¥Üe@f—vB…ƸKóØ‚U‚0K\‹4ë 0Ú>T“ ÕY©5*i¢ç©LOVv‰s‡F¸E±¬U¤"à·*Ô‹æR€÷á>éÓ=ª[®Ÿ¡}á> =ÂÇÄŸÉêÿPգ硓ÊîÐ;ÕIcÛ„™äX‚}‚|ì?–†´f endstream endobj 1217 0 obj <> stream xÚcø"ÈÀÞßÇ endstream endobj 1220 0 obj <> stream xÚíYyl×y3³»Ãå.¹\îM-÷>xì} w¹\îE.É]Þ‡HÑÅcyˆ\’"©Ë:CÉv,KŽ¥¤I¬Är@nƒ6h'mÑjIà¨AÑ °ÑAÛ qÛÔ1ÕoÞ^$EWNÛüÍÃÎûÞ›ï½ù¾ßw½!ª@W…Pÿ°ÓSyÿŸoÀÌMøX\=¿pÝþý PmÃRvf^(|ù{I¤0X‚‰ ‚þ{g`lZÊmŸK6R°“d!úéÕõ¹™ÜÎÖŸ#Të©_äfÎm|â'iÞ~ÝÚL.ûå­¿åÂø?âÝDêñ‚1yƒŽt¾'Ž#‡Y—äp9$ɹЮR$ÒEa±Wª¿?EÀèáCŽ}öçØ 3*\¤’œg߯’è8ìökòЖJ¬sõb=ñëÝ,±´ûÂO¾óQ€|ÇûÑ—Y^ÃC+ù.¬@Ç2,¿/ðzär™”G³7ž1?É(x<™T.÷z~Ÿ•gdØÞb1JÓ3ïÙ€g•†e"$¹öéW¦OßM÷ ,G3=£Šè$ˆ/“W8Ä•+s³©Ë½ö:äˆmòÖú¸=¼Ø¬WØü„ÂÜÍä†fwbý·&§^4ZÍi‡w ¹JÆçVÖÒ*>Ь?ÂOž_‹­wسCÑ^c•Å\)Œºë½ºú޶ø„íW •,-EÒ>´“oƒÞ-q ’UÄöb…@mñÁè!“Á •duôû|V&¯quö¹asÀyãÙ>*ಈÙÛ91yê3_÷Œ7n$OuÝ1~çG¾§NGÇÎ5xmN[½ŠSAñù5<&45Ñhuë¦b§n4Œ$¸Õ4‡'©Ý as"ÍÃ(•D`0oÀ×è׳2ʤR'Š!Yó€!XëXÝVFCʤդ›ˆ±XårbaáùN—Kå®Qc”ÏÒKtDobp| T+Wl_˜»Þ¯o‡¬g¸B!©ºp/í\øC5)Õ) "ßQOYé`Æê(2î´1Mq¸Uœ`+h#©«e¬é™¶ìù¶l¯Òx«©IJaëõ¯ÍŒ|îTŒ|Íd–+Ûl5fV¿FÐ/ úM¢¬ŸµähEçÉþˆO¸@»‚ëaÏójȼuØYÚZö@*ïì4Ùë=¢éNmGãSu¥§Ý¬7iá#A‡1n[Lù|)xR&å𫨩hñ¹úœoüÅ̘®ûõ•gþf1ºñ~}ÍÄmÔ¨µŸ©ÑÙzivð…Ñ:“Xí6Z} 6AUØ£öé´©¶‘ùæÎ†z§¸JÞºÒµ}Â6Ã&ïÅõwþ±Ùk´|ïõg_I?‘×ÉLVeÞî2Àåà—Ý{qÿ¤­’)z'˜>oyE„,* ¸°Ž¹ B) ‹³<í-G²ßKj2UÜ­bÜÚª¨3Ðó :µ‘ætVu·ùÛ«™å­äÚg{Z—E%‡®©wé^:{ân»,hºúkæu¿¯Õ–[ôÙյ⹹ÑëM¼fg£ÈÚP˜â³=Z½Mg×UU7™Ú¢Á›W>òsãW’™$ˆðL˵kL€æêJËTàÝè@o`b¾R¤MYé*Ú4tex¯l˜èåPœŒÕG2 Ž)[DZ!Q™›Ì* -kä–ƒózŠ€ ’¼rqdJyÜ•é¢êž`‹ß®æ uºS ‰¤qbª5X¥ «E­v¡d¦»rkB:ΕËäõõpãÆi!ø…L? ÿƒj‚¼1„&°aò0•ü¦1Љ{* ¸dzº{£ÊþCóhœRFÜøö—wj }d8t&98MfÖÐå…ìåV©D‘IFU‰iFZR ¡”F5úMñ‘:‘Rk¬ ‡SÅ©Ü:?·ì´µŠª…r5F VjHúÇ<žÑ€Ñ#–Ö6F†¤žávi»$î#Cns#ß»}þ)1jkë$Z²rP¦Sh@oëý+È'îR¶ÄñAï­Pljt¥‘OŒÄôÊÍäÀN¯Ž‘ÒŠ&CëlÈ}òèôÕ´.4½ºÑÇ_›N¿°uÌÞ´oô˹9T’Cûã¾Gûò•öì³ýg³Ë9ÿêÆø—Î&p³òìby‘¨œ¬ËÕJ·:>³Ó«oª…üÌ 8ª‹¯¤]ó÷”$@a¬öC~~DÌÈâ…¶ÙŒÒt«©YÂfäk÷'¾¼ÇYÙ‚òî¾O@Œ%ËòK±&,8eÿÁƒi,Ä'1>u£7èTGFÛæ)ƒµ­3}Ã_÷»¥!Çò„oÚ-S8‰µæš¥GKkÌê`|R%ª¥‹Õ²BT«e…XhkîsÉ a /¡+¢‚ŠNm‹’(øÕ ˜·ýp†–TpªdÕŸºÌÆ"E]_8:ÜÀ¹‡ŒœJw,‡­–ƒ¡) —*.®¥OE"IôÅìsI¦ÁáN~:ûò}|&ÔR·AÖI”+"êgsÖ!çÁr"3 eˆ Ÿ,Å$R2þÞsb5iÞk¨ô ±Ûì4E™\oÐ…¾6Qô¥á“·Óñ$·’cõ¶tû©ELžììÓÙ›xr^¬ßÛJg>ÍÔº5ë—Tm¹Ý_ÎM9‡¼®”Ùf2ðÖ‰ Í‹˜ún¶hËGÀÙ×:tgfz'¦µ™Ûüµn•œ?8ßÕ»»àl^ˆ¯3­.^ÅÆŠm¬£ñÇ™øT“Ô«}nR‚}ϸû!i¬:ᜈ?Z!ëÀ·×_þý„5M¬7°­¯w[|µ§é=CBû¸‚æ°jwߎõHM7 •W­­«æÑÔw+y­i"‘b÷/eb-ŽßÝ©6¨csh­¨EA }áà[Ð$°ç3Hqð ©ô¿7¶ö—;:¯£Ä@3Y»Nã–Öb}‰o„¶Ïé W Å#éÄ| —w¤ÛÙT§z'¼=ÏMf²>Y°Ú¤õŒx^=;ö¥Cæë /~gÖüѿƻ¥¦ï†}5nc£^‹Ñ¨Öˆ0"1K´zsH¯õëÕ}¬+´Ò£°Kµ6C@êè8zêf¯o‚iLšëe:]ú3‹[6ci‚ZºùàùKÇw'&b1.UjUrþfÚ}H½ 6?Î~|Âø ÷gsœu à±ÈÂèÿ%DNŽøŽÐJKÓÌdÑIÇׯ†B­m¢Ñÿ1J.ÜaKmM!ÂTWñyU þP¶Ûgmå˜"äcC¨ø‡%4- €(êç,ý£pmÛÿøgIáoÚwß§ïPC^‘—]—ÿûýÃß´?î=”@ëð5wm¢e´ˆ–Ð6Ò<.äF RðtæWQFÝð<‡@Å`fú¡Òª-<ÊBŸ…½ÎÀ}8û`õ6üthÍÀê-L-µãUø±kÑiLo›ðn¶µÂ»û¡¥€*îRÜcÿö{<þº+ưÌ[À³\º‘b­°¯8×aí&`‘E¡Z ܃Ðûa&t-@D^h-ðtæþ·z,cX¹·a~Í¢æY¹uxÓÇYªkÄîs¬œ®\Äo^ÜÃÙOW «ã°b óé@*Ý!»$±¥YÛ³xÀhø÷βöסYXqØúù}ë· ëØ“¶'„œÐÎâæ®²nvx0ί³dçǬÎx{y‡-˜; ²°vÕyœ;1ÿ6öÛmØ…Å:[²Ä*ô¬í×°·³zžz{«Íæl3Ð÷ã·®íÛ9³oÌôA7È鯱öÛH6ûmͳ ÕvA¾üž3øn€èÆ–šµv Ë:Œå8 Ôê©G¡gÇ1ðË!¸÷Á¸uàµý0£ƒÜѳI¼¢Óùg8Cô¡ èÓð„åa÷΂Tyt6ñè ³‰=a ˸‰õÈÁ,‹p>ƒ°ºf±†¿=®:Àh}ŸM¶ðš9àZÀœ:kk8êf°G±rn` sË¢E¶ øÍìŸÃºÌÀ¯üœõÓ3xíZ)¾Îrë#y™òñºý ¬z0¶@bÖ²8ß:°l«Ð³:.ÂsùÌú,{« endstream endobj 1221 0 obj <> stream xÚcÐP™ÐÂwð@I€© LqÉúü endstream endobj 1224 0 obj <> stream xÚW P”×>÷ì ÊCh§3ºñµ Ë.Æš+ \,P¤V +,`ä±²‹HÕ©ÎXË£ êtkì?“eµ–Rk ¢¨Íchëh,5:Æië4Á¦%»w{îý„5Ú<þ;÷¿çÜÿœsÏùι÷î€i° D€üÂäÔ†»•a8Ó‚½´²º©býôcHßй«\Îr}^ÏMý:œ³WáD¤â@þ òñU5Þmu‘Ò-äO¯Uו9m‹Ó\àü~°Æ¹Í ߃F€rä µÎWÛè©£ÈïAûQ é–’ý ȯÈV´0GÅ+P! ‚& ’, ‚SŒ`E~þ È i­þ\¯U¸¯~yô@À6 …Ê}­ ÚiLÇ> æø~_%4ù÷Ê}ã¹UÒÜj`e#P6 !Ú*‰Qo&Â'%o6ûV“ÛdÐFé>…Ht­Ü§|Ú¦z¢îèãäÛŽLjlì¬d6@dZÔ·«^'Ìš ÆT»Ý––h6§\\OìVUÎl²f“NR}¼÷uúî]K—n(²D^Ï|i YGVîÿ«çß§ßL&WýŠU,‰ ·½™™eé©sM R3—äïK7÷»ºIiQHæËËã6¦£ í§]ùÖmm9Dz•ôÁœg–'$ZLsM骿«wdÆhFÆ ÍŠ‰µZgÅ’Ù/DÚ¬þâmiñF«^ÞMÏÒ Í]tè{ô?\ óˆ~Ûõ´…þœ&¯¯·Ë1­­/VZ²®Ðßô‘Ÿ]Y}ƒþ¨éï5ùyKaë ']©n&$ÀŽ” ®Œ” T*ÝJÌÄ*í}ØFÐ]o?§„,ùã艓#Ï’õT²Š±Q´³ï }{/½|Fœ>Ü»«ÿ¥³d;‘§s¾ÖìyÙ}¢W9Bûè%ÂR¸‚u؃xà0š‰‘h]ºüé¡ÇiÑŸøPð¹-Ë1ã÷xïS±<‚uëA+ËÈr‹õB¤Û¯ØÄù´@L@d”ñ{ —}×Q´u4aö–Nû€tÓ›p”~GØLi2’\OªWÔš”Ohk‰µ¬âeŸDÞ¿@ „jòÛ!¬`tŠcÌÖèGÙpøÖº5í‹V½Y4G›‚¸Ëô—4É&¼zí#ÛG×.Ü ¢[8ríCۇׇޣâBrWñ7*þ¡Y™$1ŽŸ„•àq*^h­j¸£Ñ:Ž»/ðäÃääK¤S8D—H§Åþî;c·†£»£ÿ°¿ñÌe˜ ]ŒVke{À§{V>3`Æ‘oM•¢&Š4•lª= +%·nû)ºHŠ.ÒîÁs´ë|GàÀzð ¿½=Ð.¼7@Š/^¤]çiçÙódÍ`;íè °?=tˆ‚ñwL»ñ„bDvLT 3žÎ,‹Ä,ò3€FL‰I:ܲ‰¶4;nà8žAÕ$+žO½Ï¥Ì[º +eÙOIÒàÙ3>,Áe§NºtމW_è\hÚãøá«Ù;V—‘ût.fÙßÓ´jå–lò»è›´#eqÖâ’oJ;ãB¶ÿ?`„žñÜU©ÙmÙò9åaXÓkdѱÚ@W²šj×rÁ ÓËËŠ—&œÕãé&Mþ+g>°Ó’$^¢ršôˆƒôo4Ãö ×?‚^²+R½@w³Zòíÿ…°ðÓ6V·a Ÿð«¸Æt˜‰Uµž‡oC6ä‚  ‰ “==6Ž#÷8~L:N댞ڤ„' H"Å}6_£Ð½4e~Ã:CŠE ¦EIsÖ¦.nÿ~Þ¯ È;äü²b2† ûZÄ÷m¾Ù¿þeóÇ'ÿ´ÑX¼qþƒƒ3o;Wa/T(wªYÑ!ò_Ÿÿ\²Ù»É±(#»¥>ëÙ,!t³ò±òEÞˆ/Fðû‡Lfeü⌥ÿ…°iü*έp³ñÝš±?õG„_Õ"Âä¦Þcá[ÆÒæð«A7{–KÃì.{ú#í`gÞĹÀ\Ý:X­{ Ñìœûÿ¼ŽèJØ‚t•jëI®T•ùªOX;CÐÎ1ØþeôB¶FBCkø–©³ÜÏØÇZ ¶c;Gfb³|¦e’Rl[ƒZçç´ëäº0ó)­V86µ‰‹yör` žö³1ÇÁ¹Tùp “ kÀì*M 9• öh´yЮÑÒíj´LàÓh=d’Ù= æ‘Ï…RÒ«Ñað¼£ÑÓa©P ÑáÂa¡M£# MއåPnh‚zØ•P^ü•Šx/+R+ðkÎWƒ ¹¨…2° µ gªq,x¤åᜠGÚÚŠïr”t ¶» Á‰ÚN5 UÎyUžéUâl5ÎÕÃ*”¯åzM虺n ~©Äµjñm€…Ø¿˜åbî5™MFeÁØlH5 ×6&,|Vr•M|'v/Zt¢”‹{U›q®*žŠÖçÇótÉLîØy_„œu3ñíå¾0«¸¯†x°›3ÀF´gx‚õò ë^ͺ…çÓ‹2K [#o”šŒÎ‚þÖ¡l2ò.”MÖ,×!õdíšÇVŸ´àÁ¹ô…娈GÃÎæò^žU†®­0´]rQcòµÚaM8×À}hÐ|Rw¬÷ dõñýàAYfÝüÔ³pߪqd1Vâw†|Þÿˆ› endstream endobj 1225 0 obj <> stream xÚcXËpAAƒá@/ endstream endobj 1228 0 obj <> stream xÚµV}l[W?ï=ÇŽ/»ñGl§þˆ;vb;þzNâ&mb'vR'NãÆöš6­—8I·|‘x¡ÁUUÕ?¦1ºª‰ D¥NBÛ´¢&!ubTð¨H€¦ ñdž(¥.çÞ÷œ/VʆxWïÝsÎ=çÞs~çÜû.0P [À¤3¾@õK¿ÿ J.â{f~qsîåkc­H¿J] Ŭ2õ òr;Êø(Ò·‘?‰¼}a©tÎwûò[Èÿxqe¦0ô›ø=Åä×– çV!ÅL ÿò–åÂRñJÏOg@ú†Ê·¹×ÐÇ"|}lqPŸtÄE-q"Âó‘Ý2Á/ú%ãEpl¢åu$Žz¶"£6( 5(rbôR)ƒ¶•‰˜oD¦"Í#z­-bŽ¥ÍR¥,7˜9V[gõ»ÜÙ«ó_{Ë®åõ¹ÑÎL0ê‹]æ…7»Z¬ Ž#wÂ-«nsªM§'dzF—R®’º6Ë4´}^›ÛW¾Ý:ÖÛ–uØ[{,n*Rè–ÕþáM‡Sïi¶ûF—{’õÊñáѼo*6°`¶ õ¶žñZãÝ-Í}þ.UóH»=¢¶4'X¶¦Y1žg7›Ôƒ1o{{'–á6vó°Ž{ ª„ #0ÿÔl„¢ÃÜ.ü8Ì’Ž8µ”éíN´4*Ã&y½ôÓÂèVÊd®ÍyMxÊl0PUÐ4·FŒN»Wek’¹û[L~µ¼'Ô ­þUèëÇóMzM´­œ9\Áµìiu©˜¶€-Po#û}ÈUã^uzc¢0nYM9¦3‚Pm$R)§áƒÁ0C‘âÃa‚½”©ê=Ýîakn*ÇδLS¯k´¶ ¦]:Æ\˜tÓå÷S=íGlÙ`Bß^ë …Æ4’Wtu¿;u\*‹)¦½íu–xJï03ù¦ôJù>¯!vÈS[¯†œ-Ü-ô×&ž+šJÂeA ÂA^L—Œž9yVrC}¤ãè¤Zy+ûðê•:à´DµY<ž’×j “)û€‘¹÷ðnRßÛî0¨æ˜‰²IÄ…½ŽëhÀˆØìÃE³n¬« nÞ¬„|©oŠ<ªÅ€‡v‡x‹’yŸWˆ‘ý6®]Eb$Qæ³ÌßXwÙ”$çž0þ}—‰ãø¢Æ,Q!ÁîVÜ; z2 îÚ¨è¤N¶½9‚z>:Ä!„,DöÁ.Õ‚ϳ=k›}áž«ù ·W¥RqœÄl0ô>êÅÉ6ç ÇàSª•YEƒÂ¢Ó™k”ò¬Öì™íÐL²üw¯|îÕŸ¥¶¦¦Íjj’hWuô66*Cçç§;Uº>¾ü¦ß×5PÕë;Ê?d&‡Óf÷´+LÎy¬Ñ·ð_ügé„LloküÒ ‘ŠÕépbDνÙÖZq[ß烙 Ç:gn“Roê²ò–?Ö—\Zȇ˜ê&ƒºËub¥ÞØkM>ujÂÑK|.o¨6´zbñrÒàpmL…Ò«%›y%NߘßÚ ô~Ýžl:иzâ€:43ÍÔë5Ù¡`§Ÿ§ÿªì£%}˜3'ð¤šÈQƒiŽ!úcÕ2꽫‰f¬UÁ¢£ŠŒg¡Ûh̪•žƒÍU£š½Ìw%²‹FcóËæ•Z].“ñÚèÁlŒ,¿©•uuJu,ŽÿèÛ/D£Ñƒ¹Á<ˆçF‡©øƒ¨ ñ1Š5ŸÆšiÀš¯TRýzYóètõE:Óîlj51 OxØŸA^ÒNî {î·"/¥»Á/QCžýø·íÞ$ûlŸb¯Œ+‚‡ûhïÜ’— Ë^€'?QúUÿ[K•Jcº˜÷˜÷Øvƒ}ƒ¶··Û]¡q‡¸kbûë“›¤YÀïKßÂ{ëëøîÅ”£|üˆP9ÒÓ‚iLÈ 4 õð¼Hsp.ˆ´¼pG¤«`þ.ÒRp3gDZq¦¢_ò_ˆ´å} °‡DºúØ/Št-bo‰tû2[ѯ‡PÕ%<V`6a ÎâaJxo @'æ4‚TGWP¾ˆw1 Ã2Ì ·èGÉ"öÛVë”+b_Ĺ6ð;‹šch]Â×( 5Ñ:ŽÔÚ-Rýyx©ÚP¿“¶(®›Æ–@ª2CÅ~ÇÚ³Ïþ?¯eÙ§¥~®ãØ êZ³ú²8§5WÐv ã/BÏ6BXÇ~£¤é"Ìaß Al]8:ƒ²OãÿYê{ßÊ ˆdmˆÎ³([ÁU—™Q ™g³*ŒËyœs¿;š#8º(Z Å:Õ³ W–™%N3Kr½LQ-Ò(vKI¾-ð4Z|œýìû’h凌SB¼Iùà³´yQk'6/z»‚º>䋨ëÛΉï1ÖKûVß™aeÏ¡/$çÇÑZÀyˆê—hÝlK8 Áº¸‰EìIÞ—iu“8ŸCz–V‰fêfÛöiºêòž™S{fè@Éþúó£Ÿ~º·>‰g³´/ÑÝû4zUýæ,Ðo îÖ Í|i’í~êk†ú‘Cê8žŸi˜ÄžðýX—øC~©m%<+Ò(S‹aJ cCôDƒ§°?Š#D‡Ì]D¯tÖ(w‘Y£•°N}\£q,¡” ,œ$Ö"ð“ãjAŒVöädÚÌ Öմн¶Lw]Vñs•z¸D±¬dd]ÄoVÌÿ¥€ïÎ8©Ó j»¼½¿6Ås‚Ôˆà“°_KÿEV÷ï‡uô˜dv•ž¯^êÛ"ö$Æy'ȧþå‹ endstream endobj 1229 0 obj <> stream xÚcHÜÉq„Wè endstream endobj 1232 0 obj <> stream xÚ­T L•UÿŸï~ß½_ÁÅYê1ämê,ÌD ¹ JR¦\¸.Ƚ¹*Å÷|àÔ4M‰ùj£t4—"¡ÍHkÕ¢•š«fn:§­˜Åf›sòÑïœïCÂÇ´ÖwvÎÿqþïÿùĈÈLµd ²åÄÆ×\_” Î&ìüâ²ê¢®Ò À;ˆ å.§Ýa<ñµ—Hž^² ŒA~óaÐÛA‡»ÜþªH2¤€nýe™·Ð<($ŸH©írÛ«Êi*w¨üŠÃê±»uµ\&2š±û‘¬üƶ‚ûÝJ©AÃ÷T$AAê¯H²"K’L÷|i6[=O¤v›ëº‘P4lîŠdXãÞ@IÔºŸÒŒlMDOŒ<*»Í~ç¸KªîZ§4ßžé’¯‘ÐÑÕ(’ÐHÆÑaO'%&''ÄÓà`‰”ˆpœøôè0cH°%!>E2„­û¼´­¦“YþPg¨WcY=ÛßÔà]?×6l;dúxCqSÚ®v\S3ÔÝÞYMÒSìµ³Wk¼%™ûªêîÕ Á½X,!ÁFî^iL¨Ñ( GÉIÜ©‰ºu¡£>oé…•[ò±!lXÊ'ÌØ¹}ÕÛùs*¤ú¬RWkÉú‹5+nì¸ÀŽÝH8ög7íkù´¹aÝŽj-7G÷9[ËMበ»ÂI¨‰ûŽBHp¨a︠œ\ßwod-xvcC+‹~÷àûAQfûÁ¼ókö®ªWoo^Öœ8/öú¾},ûÜ…vçǶ<ÝÇ-¥>"xNI‰£Ã$ƒiÈJˆjÖM½ÞMF“tqjÁº3égFŸ`»ŽŸ²eƪAQGÆEOš¶&\žÌÖ]nüLÍV$³$)€9õZÁÉ/–]rlÍ›h?¸´£z}ù&û†óÜwW£r¾cà;FNJœ"õfˆ~…µ†ö¤ià}´„*uG÷ø3£†êô}³2-=wöÔˆíÙwžaÑ{ššFÛŽ4w5æ9½kKm ûä.vŸR¨}½¨42³àÆ÷XÅåMئ^YŸµ¹íÝZ­³ÐÛ2Ä2„…7QÏ×hŠ˜" ÿ’Œh"Ø2ÅUZtà•5µŽ¶#©Ï~scù·÷ªê®ýÇú³ç oÝÙñÖŒ=ÎÈÅçý~®I=ÚZ¿C:wÈ¿À~$aVžÐ^$|$Eô>ZKh2r6õ¸7eL|Šâ!Ô­=ãbm®}gñißö¯bâ’†M5ïW/©9UÎ..?›Ø–æOËbIj¶ÕÝÙ30h¾oþ¬­sß\fžû¤51î¤z긫¥âÕì½ÙÇ£mÏ<3‰ôùc¦&Ž.8ù/êoÓÚ>sÍYϺ;¼ÝÑÕx˼dIú83>Á|Žƒæã~Ià-m’ÿñÅÉí|–ýÉ~q¯§ªGÊE%TžÒàÿùÉW)Kî(·myÀÊkõ}«ë&Ýd{•ŠÕ"*˜@Ý4 §Â÷}©ÿE&çOWÃ…ƒÒp Ú+uÜ@3i‹ŽËÿQPïŸuÜü–Ž›h³è¸™¢Ø+:@‘lµŽ÷£|vXÇûÓ)PÇi²4Sǃ¤·¥µ:>€ÑŸÈKåTMTBÅä"?þõñ4žâ¯•Òp뿌œ ÒÉC…ø+X)œ2ÀÙwµ|‚r:ak N$3¡íǶRÙ¡Í¥æ+ÌÅéÄ-×*¦JسCs¤=B«qi^ݸ)†´§•Æa?ŽÝ\‰·hEF1È‹gU‰ˆ{,ôèkÚ=º½öK„m;¶ÖìÈÊ)â© Eày©è¡Uzt&—œ&*Ékë™9¡ç×»ÈÀƒ¸¿^é¾:œg¥س>Àº£u¿n=FôÑ™‰‹µT¬Hõfƒx½Íë«[ö{°¶ûï½|àU"ÞŸ9"^ééBÞ/:Ë«ë‡^mçÝ^”‚öˆ·æÐ«áÝæÙ¸„lª›h^=},gô±-ÞÌýo%NTõßDæÐ/f©Qùõø4›vq†avrDïs€[iª 9ÅãxØš¨çr:ó1g&ètzQèÚÀ±brmàNé×ṳ̀<À—pÃe¸m'¢ÒªS!¨*T¦B¼Ÿˆ±Bäá·LLöªr€9ÿS]­¨‘·OO|B§REBÒ*fÞ#¦ß.^³\DèµìéˆO¯ŸCï¿[ä§¡÷ž¿Ó%B×swªÁ«1Tê1i댮Þ;>DÌ;[.þv1"¶2@žc1îyå3þ|xl™ endstream endobj 1233 0 obj <> stream xÚcPaZÀÀ¨‹è endstream endobj 1236 0 obj <> stream xÚ¥W XSW¾÷½—DA(";­š‚ ‚$, "²d‰`BP“€DDYE ¢Pª©µnU»huf¬ÕŠZ±­ËÔNÛYú}2ÎWmm«í´ÂËœwóÂbµËÌ»_Þ=w;÷ÿÏ9÷¼„BÃP¢JQùÉÊŠòß…žøåèôey®.ßìù.BvUùZµŸ¿S„½ú‚ò¡Ãî0¥ƒ¶ÚžùÓʂڙú‚ÅêÍÉ'rÀøõÊB´Ï‚ö hKŒjƒ¶Ápòuh?@Hˆ#ÌÄ[‘!A§§XkªåQ+ ¶PŒ€¡(qú=q))qô²áƒ^Ðõ€þº9nˆ¶0¹Ý€!…ÎÂ&v‚·@!4J:R ¿³´¢÷D>UÖ·AðÖO ùLY†Ü-W™‰´y£ h"Ìvu•Ë‚¼¼½}©À€ ¹ÌÕMäåå!»¸º¹¹ºŠ]„îžÞXz]ºgccÓ²•ëuÄö\ÿ¬[vțuì7EEí—^û²ç*û£'þ–ã̂ܤEÜp;‡xSú†Ž ;¦¨•õ‘Ó†Ù;¶¯kÛ½¿Ý‡(ËMZK·  74Œ¥AppPP°›#% aC/o\éâ5Y2!>2|é‘jû¸ÌÙ‘~iÛ³JêÇãw˜ÓIÊq²ôÔMKpã‘fÐ쨣 [€åªÐ¸qÌ&!4ž¨RÁR±qÉyÆÈ;˜A„ž—HJ»5—6 ›~ÿ½'[¥.·ëV™­7°w¯ÍÄÏâé—÷7&Ñv-sço ¯ðÙ¹-èhòŠâåUÕkßÅÃÚ|Ù#ßvý#IËÙ˜Añ`ã3€Ãý=‡ž—Ɉ%a/p‚F‹{¸sܤԢöïkj¾{éûy݃¶Ãïž;tðÜÙ#Tm©ý¾cÇ¿«ðèÛ?ÖöÖ3¿zõýÝ.¾ {PHa鎅=|P0èK¥^V÷¹ŠÔÝ“w&!èíÊÈ%ž¶-Çó‡s»¯7­îب=¤fKÙú/Ø“o*oÚ·3+ÝOìÃ2<¾07(®·;fJ¨4PÍ;•íúí…ÝkØÙËØîèÍG ¥µ-~'®}ÚS±;>¬Y55:|zD>`œa™.ŒA(üÌãsãa‰à%ò Þ67‘A™ÈÃ Ö {ñ†кÉG×ëäyWö\Šõ÷lã¨îYÿá­çÚÙ‰dižrù¨N¯×â“ÆQ_Æ\¯*)ÛP_|šŠÊÈ1½1ÿè½.ã¥v©1s\Ü’¿¨ÈÛj¶ççû›¢7o3j?‹ aפ̉ ‰ âÎÉ ‹Nø`Ÿ‰Â¹3ˆ=l8àxôcå™y|ä3#](†<Sç;EyÊð·g_ 3¯É­‘7ë¶´MËÍñ5,-?­«(7à öë—ßìJÐ%û&ÌÊ.ù-¦ «ª¢B'ÅOö/Ò›^˜“½ ­Åµ±PŸ/KËXþ—uuÇÔŸdë±·ÛìPv,OÏò™]Ó7ŽæâÐb!g½Rø€r'9ƒË=$>–«‚O€[4ŠA±(ØÑR±t€Gÿñæ3€W¿“ú)ol–Ãá’Ó´3 0Ó—º³bn¦ª¤Þ¾sXyÞ‚Ù©çisQKÐÌÖÚŽã æÂØä¤Ì q«çë{_|¿ïxŒº÷èma?oŽžæ—[¶Ò´F™˜”.¯ ÛòRÆüÌÌ—«L-!¦…F…zûùD¤-oÜnr ±Ç£ð¿8®äì®´•+%%\!E7€kR 4ÛÆõ·†ŸhpÔºÉéÁá(’ ;9¾fóKѸ˶•§Üßsdúc³†9NhþôË9…áÖØ£÷+>HïXsM4ðÞüf·D”üúØÊÅýƒÝúýè5˜ƒ²YaÔCTp`gyöj§Îç÷Vª «[KõsS%¡õóß^Õqt~¦2µûpÍ ¯W_4ܺظwÏ [ç—G)âæ,ë»E'ãóã÷w©—.OŒ‰KnMLŽHR¤èŒ [*æUIÜפW¶f䞬ý©ý!ûŸ–µÕ­l_qBhd|òÖø%y”ø”±ú{A-àâWØœÇBž·E°”çãlebõ*t9“3:(çá@.#öº| »‰±”êÀe!þ­u¯~øÝ…’æ©MÕu——q)‘}>:“K³—á…>;½±NW>ºÓç½Ê&£&0þ BÇS³&æFèØ»ÿ|Ä~djBˆ|4vaýù¦h,·”À à¾Ë àì)‡Ê —9€])±‹3uŒ½Ç^Ø„íOà‘xÛÅÞéºõÉ…®›7žÃz<å<ž¼—meo²—ØŽ=˜¹‹ØG_ßg{!i,÷™¯@ÿ³À/È9ÐIJô-øXYwr¡Dt½FÉjO]OÒϳ;œÀvØ7Iú*vތﲽwêÙ‡oÌþ3žÞyO6³Ùö²Ýç þ±€ú}Ð?M†d3).ó ŒXŽá¢ƒ‘Jñ@ŒÃjßGŸÖFf«žéܰù`×þvl·ËÌ^eûú|èµ#Gfç*¢#’ÆšWZµéNø$yeKgåÆc‡ØËožgÿÚh¦oPi)q‰‘Þ*à¸0”2ß“ûø\ªÈY›IY"l 7ÈA6QPÚçéµ33²TIa¥¯´8 ¯]5q^å6ŒØ³›ë”S³jªÍf¯¬êdÍVYàæœ”uYSÌ~sbä ùH³ç¼øàÄ©ˆÜ m{Cü`wGŠ·/rÛóx©˜ÚÛTºÐgöúfnA[ªæOʪÎ>¢j߯ÈÔäד6œz›úˆIuòK Œ›ëmv H)çŽ5K³U‹ÖOÕ\˜_—1Îl½âÝ„EÏÌxˆì‡‘Ûë• ]®¾6áŠàá‰Þ¸ÅBs8øÉú`îFËÝkÇ<<ñÃu‹õf;èQ1Ýè,3¹Ó£-7….(€9ƒâmƒBdt.¬C3[‡DŽ?ï³=œ¾ÁmÁ'HÁé²þÆÏ× wÁ÷òw<Va£ãSçœüåñÿçä! i„~h¬`;ß¹¨ÿíŠ2Q ºˆ~â N„rÀV¨CÊh¾¬¥¶ð…µZÿ”²’þbha<WIcj˜ Ö"`H™E¢cjAvh?ܬ‡Æ CÚÏ SI13äl’U9ÿ¤l^¦`e/ÓðåhàefÐä‘k¼,„Ûû}^¡h<‚—‡¡IXÉËÃÑ¼Š—íPÞÃËöh&Eñò4ƒšÅËT µš—Q€ÀE¡TˆÊPZ‚t(™ MEþHRŒ@¿i¡¥@F´ù‚=z¨SûW“–j-èZo ÌL†Õ&øI ©a57+ Æô¨Ö•\­‡Ñ"¸AÀnE`²îh€ìb„·M߯éÌ Ša §ML|O H%€Ô¶Ú¶vðÊÍKˆV5üL K \´IZ}ðïù©¶ùuOŸMìÇYÔÈsRÃÚhx›–èÏ'zL¼}‡®áú$(ôIž ]3D»‰×îK¼g‚9!ÈJ))¾0k€/à-€¹~ÐÖÂ\?^sHO^mxl÷ ÅÐWX8ï¤6œ¥cÉ|ñ)g]hᬭí÷…êÅÐ6’ÓðÖÐ_slòÉ\X7겫qˆæÄ!| çI‘âO¬ú{iHm"'(P™x|Vjòv‡£"¾W,ÿ¤«Šà˜ R|]RP:Ô\;NF*¼“¡­€{¦ŠpJ…wÔÉàuádëX,9•É¥$pW9œn- ²Z§ˆ´V‚eŠH$ŒE„‡z9 Û¢J’ö²«lT0Ä'ÅdÍb˜•GfJÈi7’§&Åá,$ Ä–6óöÓðþ7.ÜiçâtYkì?aeÐWB0”ð˜¬'Öô¼úøy(Äœg IŽó%ØôPsu0ÎY>ñ¿ë0¯þ endstream endobj 1237 0 obj <> stream xÚctbI`lh``<Òš endstream endobj 1240 0 obj <> stream xÚ¥U]L›U~¿ÓRÆÆ€ EcæèÏÆ?m¡-´È ºQøÆ@·]ˆvíWJ¤-2a1a™¹ n‰É²Ä]¢—KôbñÆ9cfÐËMMvaŒãÜÍtÑHçsÎ÷ ²Áô{súþœ÷ÿ=ç”$"ÚDÇIG$8Nåï„ä,֋ãÓÑöíïƒþ•H÷QL Eòx¥Hÿd1rË üŽX<5Uú=ó€ÿüW£Ép(ÿí­óD9_€‡¦Æ¨‹>%2¸Á›¡¸rÑp-~kŠôìižàf‡ Ñ£biˆ¤vH·ä0}Žž1ýq¢8 íÓwËr·´‹¨nF_—þ‚:‰WÁk#ö[ U™Ñ„‚×Q.Q±ÅhiÂ’.¦—äIÉ],ÂÍtd…ÁóÐÍ£|*äÚ&]±Éâ)Öåp£ +óß½»øù;Ò3—ÒW¤À%¶P›¾ž¾^['y%ï_·o|C"‡üôÀÏác BÒ/é¤ô¦X¥lAþM¾+ ýè߆~1‘Åb´-—Ñæ±]F‹Éft±Ûéûóéû—/KyóRP[úšÌjåôgR«¼xceÌ\5¦1+µxC­¡Öè¶±›ˆUMws5lg¦’f³ÚYSÉvðmÌ㶃/`­ÍÑÙ}}so³2×Ó7öªFý~%XÃq‹¬–¢}³¯j=³QÔ÷úbývGÌ×<Òo·÷ð¾fÇt­õIw£«¡ÔTb°YË×ÏàºÃbu8¬Ǻ©4[œN‹Ùé$-'v99ÈOÝD;Ý<¨ÕŽTxŠœãI”{ÜM<1OÔU^\Rêjhô¸ËmVƒ1‹–ÎUu”WuTž>!Ï…›šÂsòÌë`+Û+mEG‚µ5AÅ¿yG v{Yu•¹¬&ƒß«Úe«ì¨ì;äÎõ^¶Ü_Ó¾Ó¶«Ê]S'´úcûíÒ'e55eeÕÕ郑]ƒ—:iÿ†j0r]—Ée²™lÛ:ÕTvTˆjxÛ½áÙ¾™7´j ;'{óR3g)Cï±À£jjŽžì œˆú—kêï:¾ûܹ®É=k–%î0S¯ù …-¿“N÷3§o>qï”À?unKû´ê/èö5dt¹ö\MûÒ^ýõ5Èúêñ¶ Ñ?6Ã߃,þ$¿cê§{šßÙÿÿeûÌþt‡©u-»BÝá¿¥kB³¤6¯eÁµ Hù€„€oE'=t•Š2þ×WHãDJú<ÐCâ†qZ¢àTšQÐhþæ5ZOnúZ£s(&mÖh9¥qÎ¥Né]ÞDÕÒG•¬H£7S;ójôjcÇ4:ŸZØÞÊÞBUº€Ü9§ñ¯’¤1š¦q¡aŠ¡fj 'ÕS¨nì&!%Ü^JP˜ì vC2 |`ÉjBp °_Gñf¬SXfÀ¤Bk6Q¬$Ü–[ Ó$ü…`Ù+§þ.É€nP?/«}Ô­ò²‘¸æU6ωÌ' ‘„Žù!™$4ÏuÐLÂvQpÚ2=s’؉´‚ˆ>€ àÅn²ÿ^ˈ¨#„•‚<„+:/A–„—‡M¬WÔÄýLcÚêN\Äãq‡©Ù)¦Êçœ]T`_!å³6ÓX˜×°¬°OiövqjRÐiƃ^`‡Örþvd”„®¼]ÇR÷±Ž¯Š¾ìa²Iä§;kµ—]B?%Î ï_ ^x?•¥nó 'ÄÉæuN‚Žˆ³Â«‰ Ýô/,‹¨‰žƒ+<ÔB²ú¤Õ#Ïzq¯'³ˆÀ)qs «”–Ÿê3$~­¸©bº ÍÔ.xÎñ<‚¤²~˜ó»Å›¹gn{{„­ ‰ï„ i§°Ø+hu¯K¼}t¸;\‡ûV•ÚqÁM¡3ãâ$LˆÇEqHy‡Õׂתˆ ¿¯fô(¹b&Â&¬Ý®°˜eHœöIqòÕYŒ‰ 㢗™‰Lhý‹hó‹ZBXËûüœ¶‰¥;4­½üŒ¨9©w2µ©®¾ȘOvL¼­v‘Û(0¯qû¼óÁ‘JBÇ endstream endobj 1241 0 obj <> stream xÚcT`àPô¯£ endstream endobj 1244 0 obj <> stream xÚµW[l#W>gfb;NœÄñØã\íøž›íØß’8‰íØI6›d7ÛÄÞl²ëÝ8Év;l²KS 7(TT$ÔRTx(}@hQUÁC©JU ¢[ú@[.ðÀ µj¡…V Åá?gÆŽ6K÷yÎ?gþÿÿ¾ÿrÎØ#„TèÄ"43çñ}ù%î¬< ß k»«Õ+g@~!õ»ë¹ìJõèßG¨æw°X‡îMüBµDǶ¾¹sOø[U'à¾!<²Q¸”½þým!Í<¿±™½g mÀ:\Ìùìf?i…ûBŠ4â˜Aü5T…ó& '¤/#ŽÁjMÃUq Ã=ˆ°4£Ò'53“Â#ÙÉÙ‹Q„8;~¹ôŒ127 b`,ƒ·Á=‹”ùµZ{‡¶c?U|‹Åט›{?³‚0"hJÆÚAKìƒN¸ü>ƒA¯µjûV‹B/(ᢟ uã|`%5´>œ9‰¦6Töà‹Ãá¶«£s¢×9/>†×ãa¿3àí_DÄ÷~©ß ‡C<Þ¿üó~_PP(^nõ›Än¼È¥¢i :~Ue»ô MÝèîÌFC˜{¯0}&¶Š»#Õ ’ Œt€­.c;ƒƒß'Þ>@^‘n´hÕÊFU»ˆ«©¡ËÙ¹!àè ¨•ª(ù–¢[Á{Ål´«7¸8«å86n†èé×N dÚʸN»ù§dC(aéq½ªŒ™ ø·eC]uà ç<ÂPÛÁÛueN¸?9;§Òê ªú©¤ÇíÓŒÄoCqvrHÐX[Z ¯6õG,MþÓÿ  µ8ìºj©oN³"ðœ@¨ j'>€(Z@ö%¢”9K}c½E‡éyb)jýZ^ÁÌwÎÙMi—+jãøéwªÇ6Ð!ŽaÒ\Ò\ rç‰ÙÑà¥h°wh2³}C«×ëÃáfs§mvô9¯hp÷¼n1M{í {Æ»msc?¤'q X·µ{вÄEfYÑÙ]Vѯ'th•"á(@X~^¡®<„ ,WT+þØÔÓšxbêœgÁÕ~1¼Ü'8"]¦fÏåôó±n—W3œ= ëj,MÍÿH~°T(d›šç…©¥7¤îX]øÌè«F1l1ÄñÇË©†\ŸÚÿˆ©al¨æš¦ªœ2Ü{}5óùÄhfM½±‚—‹O?‹ãóÅï¬l  Û¿~b[ƶ÷ÇJÛ àÚli­D¨#©¢  Åó“”é­,~v=›˜ˆMx”ªqE½n232²®.¬âLñ™d"‘4:êÍ5šZ­ÆP,&„ÕÅIìÌ`¦y%茠èfä”R‚yè0€‘¥r¶{/µtôÝmæñc]CU×å²ÛuºÁ°öO…2WªÏM»ƒÍ§hõ9,Ã.¥jŒS:ÍV›f´§¯ÍÛ á|ñÉË礘çá¬íƒ|¹È‰|˜D¨ô· _0¿ƒfÄÊZÙyKÀTcÕÔ¨yE“³œÎZ/†DÁ\DZ8=û÷müÓnw£BgY£á)SÜÓ=Ø|ö¬+bòÄMøõ=+Šÿ&Øp2¶°Y¿ÐÎp éüæp8a)ÙGÎ/Z±²š«Rëã‰zAÅ)ª¹p:Ÿ^TÖ*9U­j‘±½§œ¶u.‰ï¼#.u-·áç­Kéé ‹¿!˜ƒûá}ØÇÖR–òv®ØRûcÝÆ–yã¾Ö`goÌv✗t{$½és¯©·îå=B’I¶ZΞɯ7 s BêÁtú¾˜„ðϺőao·ÃxS‹çgÎoæM }¶ŽÖÿFõhƒNÙnì Ôš7éÏŤº’Ãu ⬧u­K¯}·W´ ·ñ“þésøá>7ß0«æ“óżd·*Ù ÇÛý‚9Y6Ü{†Ø]€¼ê¥=Kß«¥ÍCŽÁ×[|æŒN¨æ«k¥×%þy1)ð; oÆý}bË8ÀÖ†ƒ c-á²ÿ!ø´±Ô\ò YtZƒzhÎï¿ï&=¾!àfG°…áCz.™ôŽìý¹„&¿‡?Â<+ÿ }$U©ˆ*RÇT ü¬ÕgV ú&cÊìÓj"ÎØ©v¾ÑPÃëkxU)ª/µZ-Í&—1ÒX=¥lr  m&cñ‹etŒª{bj)c;¬"„d% p8¨pÏ$®y L‡‚²ö;ÌI®~¨oïã²_E ‡ÿ Õ ¡ÔqRÎÒé͇Ûò×®åÉ7–JÅâɤúþÂÎîîNáþ‰»fç§§çgï"Eàø6ø²W¾ëÊN$†Ö Ö ÝµOŽÄƒ£NSUƒ²Î`KV®ßݽ¤VT¥8Efn~<Ðßåf˜xÝR*³¸{%¹5*Õ¸ã÷ê¡#GODzJï¿Ü…òï#å>פvõ¨xµZc×cíãñ6·šS{MØB»–oáð´¥é›éE–‹W)F?•ÜÞZ[…TñY]¶Ú¦w9˜sàë:\W@s¬wàkFs( ÖDë ègÁŽh¯¡kà' >ÐöÒ1¨30R •ìKÖ%ÛÞ#Ö·Ã1ѧ ·áI4ÍÇ çe½ YÛ«yEäÜá†Y„•0È9´ sùa„àé%X»sî—)ï,|w`= Ì¡MªsÖ €q\ENÒXˆŸ]¨¦ô„X®Ï<\o§™ U#uÌÓ¬åÀnóÐ*©¥] ó-ìWÙïÈönÚ; AŸ¦Ã ZüÝÀ¨º¸Ï®§œuÏ1Ö›GÐg:žNÍVÝxòÀA“|e}º%¢²fÐÍÇrË-742è=DÚ§ç33©Æ¬ù=¢Ê׉¤ØBjù$sÐ׈¶m¿i1µ¾´ïº´“¨äi¥ÙEÒ÷Yé1pìS ›"/‹`´B'iuZIÒBúžÁDb…ˆ^uh]ùw°·‹µ`˜ÛFÒ£Ò ß£4…ÁAkHOä«6W·˜«ÍSì¥ü‹ÌŸÿ¥´ò‰ì“fIKæ;iF¥_“—úi/$Ò5Y­þN9à·TI—}ÞÚÚ:_¿Ä¡¡¦¤ã6‹a—Äqæ•ýVKS‰¡¦Ö\„kŠpöc÷¨g,XSê²óŒº{½¥‹¥Þ½… MWÖ¶FlžÑü{¶þ~[k_ûPE®«°Üy 36Yñ]G¿Å™ðûÎæÃjVðáÐ}ÇP{ç'{­Ïãé+~óÏ½Þ ázn¯vìuSi ~z’¨nþõß. 7WIÅ6ë›ÀŒyLû ¨n¯¼©Økò•.Ç€ï;_9R&Â3ùø…5ªfxµµFã›Ôçê°t­È-0Û2`¿²å‰8\‡ìž,¿V&ö‡aKÁ)ßóÖÕ××=ºS¿ZuMÁEȉȿk’ÒÛÔ„¬ˆÀGjNÚ%Õ/uè€hs#¹•ÜLnó:zã<[é™ äCþàt¯²aפÜ;Ý+–Ë·ôÎüÉ6`µØl!«5ľTDòÛuÃÁÐÙÕÖæ’„‚“­¡cgè¨ÌÎ4GœÎHK ñüÍ–¨Ónn;Q^:JNˆØJä ò"‰êiZ—%æ ´m³¼¿Ÿô %Ê¢Ïk‹÷]i¯ÉSJ¶ßÝGîJú¨~¥…'ÂȤ›ˆoÅè@!ûþµ+¡åaVÒÙâ÷*áã W ¿¸À·á»n“ÏhôìòŽ´9F<;[¶±úQï–ÜããÁ†CÀWéMî`ÛlFOÂeë”[šeŸ­Mî²Y»:ËÛ&¢®Ýî m¹wОhk›7íz…¡HhÀÔXc¬Ò”hõ­­Ñ‰6öüp(ÔÛ çÐ&Ñh°ÏI©OzžªÈH6¢–¦{d5bRXÉü¾[9‹œM$çÜã²<áž~L©”ÌW/Œ=?56þ…H,3Õ?ÕÙ‰.ó‚¨ÎZ¯Ø7ƒƒ7…3·‚jÉ,N]ƒh€šÂÑP„fØ_òO°oó÷·J×)@Z‰ÿ#~‡âìµPó?UQŸØ§Yº†Áii»Ÿïp+õ`ˆ³[·³úvÇúƒó{†Ù‡::öÚ~‹Ý’ÎÆãŸüõ™ì¾S§ö Ÿ ÆRI9ÙÞŽ.õýxœß/Èv9Ó.Nƒ éR§_ÛÉç3¬b^9P‡ûÁpûàÓš¦õ¡µyÑ®ˆöoZqÏ13½He«·Þ]ÏVºŠi9Ç”øºã8£ \Â÷岊kðoò‹*®%;ý\ÅutœÞWñ²²q×SŒWñR²³ë*^F­ì]/§ˆ´MÅ+¨_Sñ-”.ªx¥tYº©âUÔ©›¦(ªæ$£%:AsØ=‡/D/þízðõbÂ?› ÚÍSÔ-Ò ¾èLÆÈ<àØšTVPiÀ4Ö:ƒ~œû!ÃkÂ?¤¤9×A`'ïÆ*)ð{Áë­{&ЭJ¯Ê*’® ²›ïaÚÀyPè–ÅL|¦Mv]T×s3Ù%Øœ¦ž5¯¸©Бnài:ØM>´.ÌÎ`ìAõ>!tNáÍa<Ï¥iAð|cì°Y$F„%|sˆ¢2Ã%ç°æ"úûqÆD´xü¸/ÆA¥ [<Êch¢iH˜î!?»N>§Ê·‹lȧ‡:ÐΊÖ®‚þíÐ(ÞÐiðv¬ù¼cé… »VÈbì4tá1‡´âËÝ‚?'r‚û/‡U¸?ÓkÞžäq]Ëí< |Vd·æ¸àMÂÀ ±ë⺕‡×­àY·>¿<ÐÓ#êåA4›0'*rZåTý”5S¢oB&Et“ÀM¸ÙÃBפÐãsÀÆi´žät¹7†~?è!Š ÙFL¨ÿFcBbHàÊÜnQåûéà>Ìp¾vZ)ÞYÔ2<³$2!+t\v,`”{X9¸­iaáƒûÕeÖÅ$+dfÀuLpšD=-ŠÊJ‰Œâzž._®F$«úoVÿ‚°%…·0ÏóôŒ]\«¡sê9ÀsDÑI©ÉÜ¿Õõ…Æ<²'Å™Ù.t›ä6Îaž{~øŸ±K” endstream endobj 1249 0 obj <> stream xÚcH`€&(}€¡ÁAÌcTi&B¨ endstream endobj 1251 0 obj <> stream xÚeS]LWža—ÙVGXY7}Ø2{ýkº»Œ-5U »¶¬±?4deïî;ì¬ó“U„b„;ËšŠFÄJµ V4DcRû@šÐ‡6m'©S|hÒÔ´I5BÒîèÓ™–¨Ñûpîùù¾œs¾ä„ÝN$ùR$\ÿAkkEsK Ÿæk|ïÁ„ÌE«ô¶þ²^ŠhFgÝKêžØôÕv…&rÚ6MÛî2fï ”ÂR‚ åbË]‰ è5¦gë¦×Y‰>z=á I§»tÍ?ú£gºcün؃i‰•öUù++7Öñ™}›HJ ª²²úUËÖ€Z?hŠv¤ø¬˜bA4M~Ðâ!>kfYPƧÁn˜ŒrqÀÇA¾d "H¼œ7øA$ÉŠ Ë )`þä`T„1 §cPR‚í;[# OK ™í€iŸB”¤Ì›€$'ü¼ÄMŒàþ‰‹çk‡"¾æÆºúPk½_Ú+8/€”¢,'ú—ö ñBW”#ÌWAl%Þ%X¢ËFVLTéÙ‰6b–\IÊäm,:¢âi•œÕ0÷·McÒýEÏüI/’2=‡»£õžM 3·¿_Ä«¼g†òžÑ~e@9ø;8v`Ä36::öëzÔfC†§Ú(š/ÃÅxíøÂioRñ÷*.PÉ;Þ¡ÙôS—Ü—3¨‡iÇYjáÃojÚ>îî„ ~ÇqùÐËl¥zy”êC§½×ÊíO"¼‰¾€.YTo;Rós““ÃâÆSŽÞ´‰º`¡ÊÿCy—¶ùNÃgÍ–,æÜØé[0 B_™á4œw˱ÛïÞÃN&ø™ûµpmmmøæ_þüãÌŸZª‹n]œ-ÁÒæ4×=}'v»'ö ¾ýÙþÔóQ‡Ìz‚hêK/Þ‹«g3ª£Î¢óqÆu3ޤ¬wóŽýÔ™²vøÝè¡Öþ’œýcæÍêVñ”ZrG»¡]×\ÜSÊÜ¢žÈS®É×·|ÊnA_3øÜóryÊ7½çÖĵc¿f\Ûºò£èsÏÜ’Öi9uýŠyÄfëTKúNêu'ñ[à Å,³GxúED/W—iË¯ŽœP”\.¯œÉ§é+çsƒÇò¹eh «ô ýܪE÷¿¾Ç‰ endstream endobj 1253 0 obj <> stream xÚk`Fé endstream endobj 1093 0 obj <
> stream xÚÅ\ÛnÛJ²}Ÿ¯àã †û~ð%¾Å‰“Ø;‰CèAÙÑØ:Û±ÛÙçäïÏZEI¤Z"'„Æ€LJ¼tu÷êêUÕUm¼-T¡UÊ…Q'ÙÎã‹÷…7‘?¸"ZÞ’s‘“+Là—¨ùK*´‰xJ+[ho5.šBÇlù“Á•æY,Œñøð´5r@ &ãLã¡Q`ÀO|?~Q…ÕYñÌÖ9>™ ë=ŸÔ®°Ñóµ:6C(Uá(~J…³Šï0Õðxe4¨G–Ÿpæ²áY,|t/ºÂ'VE›PùÔ"X‹2#~r†QýpÎ|¥©9ðµí£#¥µ¹À[QfREŒÕý©@k°Lg‹¤ÙÊÉÉjV$oØV¨bЏ`Pÿ„«ü)YYÞ†Êf#Oâ''U÷ª@á”m’Sf™è ¥¤P±”1=©•C ÛSy'×ykô9HO¡ÅŒ4Œ’êi#yUˆ%ñyy]âýWbâól;ÃR dÐFg ÌÆ0–àЇ À˜%ÐÑ|­®MæÍ·,ÊAVî«qêùƒfyènƒëx“M†¢¡¡´«DMM$(ž9C¡ÐNh>ÁYÆM.%>’\ÑÙ¾ªåõŽHqæ(«ê«æ%ª|†TVáYÊgÍ‚&z … ½&=ˆ8¶N£—ë($*òµœÉˆøu” –ù3?B¾˜ªS¼5)¾ŸÕMšcÏ` a‚—ÇiÀ»-q”¢ãû1 €4Ïçùk6¨» »l¤|V"»yŠè >ϳ¤åzàÈe†CZôš5TV®c8@WP4€¢ŽVîL^®NÄš §Va@£:8sòP©'㯨 ®ãM:[ Å‘i8špJÕaM‘øÊçbÈÙÔž·fÔÍ¡Óp&dCp§ ¼ÒZ@Z/M…“ÀËÖF*–e3¯¡ë£ÔFÎ4””äXiãøq|”ç©Y8ÆÞ.O%ÞC•ã2LÀÇcáÌò^¾âo1r >U¬\¥² ,‰ÃÔGŒ6¸ìð†ÂeãGªAÍ7ˆ¶dW)ÇY*Ë·S‡&>©}“(NöµÔÞœ©nUâ€åÛ‰“ùN4Ψö\äp¤v„F,¨N9nùeLg‰Rà X…À¬Kâ´¦§nŸÿüÈ/{ÇûüÎ f{wü0‘«Gï?ìþóõÝãÝùøöawr{5¾™n½›\}¿ßËö'ÜO¿=ÞÝW3¦*Þñeç?'_oÿ}‡âpÿôáñþÇßw¾Ü}žücûìþËä~z{õ÷ã/“ÛÇéã@Žoßn&_ñµP¿ý¶½ÿ“ßöN¨jþ΋»ÃãýWãoÛóÇ~ûíoÍÊÔ¢lï<üÁWe·ù+Ï·œJÛçê=æ•í½ñ·£Éô꺺g篫Ó/×` ¯Úݽû¿r ð(¶¬¨> 'Ü8Ú>~Dü±s{u3)ÔöÁÍøê¡xí› Dy3¾½{˜üKñϨÏÊã?Æ>†g¿¡f|ûëñ×I—¶=˜ÞL ›@/šuòÈï†ßQû2–ɤQ.¡ÙGÚ”Iè Ï}éÐõ¼¨S-§P=2ºLd Ã3B+a¾þÖŸNNNÞÕ"¿ž~y h·ÁÀt®Ààÿs0€`å Gmh›pI5àà1}lQ×X´ kÛv†°†8:]+ÎeP½uYozd.rªQPV37´àÈæ2*;r¸%å‘K%æm’# 0™¯>Îß¿º8]Ôaïzüç×ñ €¤b]ü ƒª¥Ü ÞTë‹`2‡š!‰¢FÇÌ>¨ÂXߺ3ˆžO P, LÄ0ÒVN•à±#çJ§Üțҙ8×,Aê B€ k&]ZN>øø dD^Ç1ÇÒz7-*mT8šóŽnv ÕQçÒ9\§öIG;;úÙ1UÇhJÛ„ëÎ0±•`lÅìƒïß!m(=¦m|Fh(‘Ù+^ #OÈ£eæïïLjt£Š¨ƒï©ñŽ?½¬Û||;þ2ßî|¾»Ÿ^MoÇ7?¡š6Þ`¨ŽÕHSr“jD¼FuÄC„4ÌÉôfHDwkݪݪ}ÕÔY¾Œi„U¤þ-®ÊL{@·Jm} :%GΗ°gûaâÃÞ›§û ©ï!ó³ZŽfýpZN© q³Ó`Ð5T±‚Kó ‚h ˆ†õíº@BZBBž#!•,#­0¯AÍ‹‚µ™•‹"!ú ôàˆAS œ Þ¯Ðró4˜¡Ž¹â”–f’©Ùeêd’G'’ F˜¦ƒÞv/‰uv&„©Z‘ºÜA™³ADC{Ä$ƒ*hGóÛ6—‰.J~EկѮôÅ[¡*ÃLw°°uÄÇIJù ôÛ'Ž÷ Æ˜,,èS\R…½Á‘?ð¯rü5³ ö8 ³K˜•f‚àA#þFÇ5(T wâÍ(ϱ`-ÔF•†“‘ä,‰Wò¸kÊýÝ(XŒx)ô–NÕ xV)¯é©~aM%¬Ö=§²“ý“ãÚœx^G™M4ë+öc6k¢ùdšŽJ(„-+ëaŠ3ZÔñ°ª]jÉ83 ã (Èâ92ƳKœÂýžŽ¨Š3ê+¨—ÉyéÉ„A‡#øé "G&i·âŠâü ° mÁ²_œã~C×@Eæé±’®œý™‹„:W(cÅî„í(Ï÷Bþåë£Ý½ÃEßNîî¯VºFí @ÊWÈÏÿ=×è–y¾BÈ%×0(ô»4ïúnÉ`tÍ Ô€\¿”ˆµ@¿&  ÓÄ8Ñ(÷À>HPš°²åâ ×T¨bFAq™E ½°qüDKØ’¥% LÌ)‹Ë"CñæHíçZóÁ»½³zyü ww3}\¥HÝ€´>›ŠÖ» ¯¼ø'Š”ë‰”Å’ìõ  Îx¨%~ïêÅh ª€î‹Ð#0@i2üóQ“T˜4î{aàìäh¿±âyxm¿ªÿäâ ŽUÿov¥“@Ó©må£Ì ª?ªMÖ·í¢ë—x¸Ëµi8Y'±'0?¦Iw%Q€Þ`lS0ƒÈh:|è„}ïéÓ‰ôVzhú­ 2@Ñ£#F“¡E-ŠF&L†"pVäcõg”è5Òâl‚­g¤@Î{Ñ@½°vpxñöh§nïÿ3¾?NF™WCÆ8U“–×›´ø’{â:P3‹Qm\<d«u/¿Dä½m8Â1p9 Ô ŸèíBG.õÊ·(Jó׌³ wÁu.Ìi#>ñP‚NÖ}}¶ô"ø(Ñ.¤\Þ”Fb»ó()y)z»Ž_î5jzÿõûŸ×mðr!ÅWlßû§òB'ï,DÙÀðYÕ¨ ø,‘|ß ‡’…WzÁ­zPœ:nHÚ}á”’K“ÄHÑó d0*Ê—.ÒE,Ùž8Ø?8y\Û'G“Ï÷“ÿ}~ÊòC2`_-«ùÍ2`  IY`Œl1 ˜1À)ä!á°¾mç Kô7,è¯uP'†k"ý£ÛŽvOOÞ,Š9þ1¾>]á CÍ–LÆé¨z2U$WÑÆ“Æ0èPïи‹Î]¢¢aAEC™`µ$aZ•UT?•<—OËTd(dâr 24ç°nÚè–¼æ×ÀZU½¿“ åa\ç~ˆyõqçb÷¢Q©ÛÛñ—q R† J©Bʯ8‘U(P“­s‚jZÁ¦i; ¿-f>iºèqã@YѦ €,Ö° ¬´~œ$NrQí…äLÆÉE^& ñbÈ ›E°„¤H pC^ç),ü²:úÙ1ÎŽ¹:úL%£I¬9åÿ ]ŽÌV`Æ‹ä$pÉdX›¾ñ‡Ç»Ÿ.Oêö¸þ:¹^'Å!ã~lE^ã†ã~TsÁ"£ñ¶Sš˜ÔA*4$ØÖ6îrq‰ÄƉµ˜ey}¤µÀOÔYX«©Â´+O#]†²mBA7 !¢Ê²ÆUæ’£_†ùtüØjƒQd°z‚dñ¥¾Ác¯_¾©§ÕÓñÝ ü Ó_™ØñW|Õèö} ¦=d7Õ|%>Y9Õ˜Ó˜*‘™†AÜ æa#OÖ5ísn s ÚZEʃ3ä,ÙyNÖŒ™gàe‘Ø2P/Ú$4É‹Î+Y˜ñ6ÐÆ tØEÙè€aÀª§-óîòüüccè<|ßþ¯ÀDZs|l8– 6e².ÃÃ{ài§CÓ.ð‘–ð‘f #ð¸W…„ñ2øL(¦’ôMzÆÐ|x‚b¼@ÔJ웩p’‹ àòn¿ˆïw'G§õ”y>þ~?~¸~¼ÿÙIo†L™„bDl8e2„æR3¦ÒÜXŠ[l ê½²açxXJ–4u²$-†7–ÎYIž­ËS˜Â¢\}˜ T!xÐRò*[}TOÛôüíËÓ“OµÔ×ã¿V0š!³"mÅ]̆³"Ý’÷Ë0'ÉÄÒòXß² P„%PÔîP û i$’Ý „¿¤(Z1ë?Jn¤¤Š8¡] l$ Æ…2ÁÚ¦,gá* äÖP¼rœmn1‘]’/f„CË÷~qà÷?½®cÙϧ·×ã›3Π‰“q¦_6˃³jê—L?7ð‚ýÈðµAõK‡Öãi)yÒ4’'•øK‰'n2e ‰¤”„Aðˆéx‚µ+^öL$”Üqî3î­¼ˆÃV[”h˜ÔÖsùîäôôbïU]ï·_Æ·“‡ÉÏø2iÍ 2Ã%­Ù:,ÝÅ&>£ñœlü| JJV¶ëKtõIÒóŸ˜HG5Õ£Ñ.)k¸U‰‰z&q×¥-• WÅ©ê{âàíÅ«ãÓzuàbüuzó¼®2ë,'_a!åoj½¿ýÉ>kL Üânކ>É4,Ö¶ì Kä´Î7cÐ!t€x@•ãFÈN­øÓtíuêP´ÿâìmC²éûéäñçÞ2l–Ro6œ@í“‘o½;¨·FýÞ^·ˆÐGa®Ù¬¿›¶Eˆ>*såñÝDhCe}¹zòN2Õ"Ce¹~×ènr˜9úhËÕûw“ÁµÈÐGW®Û™¶›¡EŠ>ú²}·Óne§ŸËÖ}ôäš]4; [ ©û¨ÉçvÈëVz u/ý¸v[µnr´€Q÷Q’kvïê&D u%¹nƒ¨nR´¡²ž\·WO')R,ûhÊõ[¼t“£  }4åê½FºÉÐÎ>šò¹­(º•Þ†Ê>ò¹ º•Þ‚FÓGG®Nœï$CnÁ¢é£"×$xw¢ˆ¦¦|&y¸[á-4}ÔãÊdÒn"´Àи^táÙ„Ä.XÕ£M½¸* ®›-$ÚôщϦ_u+¾…@›>ªpMzN7!Z¬:ÓG®Hé&@‹Egú¨Ã5™ „Ð-X´}´âÚhúnb´ÒöQŒ+ƒ«»‰ÐJÛG-®‰àí&D (m/ûÙˆÑnå·`ÒöÑk"; aÚ0ÙG?® kë&D"û¨Ègc§º߆Æ>*reÀN7Ú°ØKA¶‡t+¼ ˆ}”c{˜B§²m þ\¸nÁ¼›-t}T⪥Ön´`Ðõш+–õº Ђ@×K¶®Bõ^&j#­n®ÿ4¤ow endstream endobj 1254 0 obj <
]/Size 1255/W[1 3 2]/Filter/FlateDecode/Length 3000>> stream xÚ5ØwTTg€ñyaP§‰DÅÞö‚Æ‚½cÃÞ°—ÄÞ{ÃÞ°7°wìŠ-{6ɺ)&'›nºÉžlÚ¦lö~Ï÷òÏï¼ç¹ß Ìpïq¹\®¿þ q…f»ŽàaÇX׿c!.wŠëeæ“̯ˆËUÜå q¹<.—„ÿÚÇÌÎúGÁ E7†ñ §x†¹”"”³”y”¢ŽèÁH,†QÅÑ‹>ôcƒXc°$–ÂÒXc1Ëb<–ÃòX°"VÂÊXE\ªïIU^—}ªau¬5±ÖÆ:Xëa}LÄØacl‚IØ›asl-±¶Æ6ØÛa2¶Ç쀩˜†ñ%성 vÅtì†Ý±‡¸ÂÒ÷¤'ï‰=zaoìƒ}±öÇ8aÆ!8‡ápÌÄ8GáhƒcqŽÇ 8'aNÆ)8U\¾§úZ¦ñZ˜§ã œ‰³8z³z>óeæ-®˜·õyæpÔžç/£seU˜«GçrÔžùöê˜/®šéѵ×ÂBq5è¢}‘È…ßu^Ì{,Á¥¸ —ã \)’ßFµŠGÙ«i5®)(¡G׊üÚRçu¬´××zÜ€Eþ÷ª®ÙÄ{ÝmÆl ñ\rî!KO:†º“uåVÚ«r+n“Ðèózt;Gíuºwâ. { kv³Æ^¿{$´j9í{éå%4qƒ–}” mý•–Ü/îÉŸj9À{ qÉ~ó¾9.÷Ìëºæe…¸ç«å°¸–5³Ó×ázq/JÕ£G(Ľ#OËQqïüÑyÜšj9ÆÏ­Ê|OàIÌÅ<Ö\ã¼ZÈ|ƒyómfû׿Ǽ„ùóRtá2 Eçu,¯¿Ã)ÖW£Á+±®Ââ¸ý¸KàZ,…ë0×c.<ÛωûÉ Ïó¨ºâ~zSËJ=q?ë­å"¥¾¸?¦å%QÜŸ]Ðr™ÒHÜßôÒr…ÒXÜÿþSËUJqÿ|PË5J’¸ÿXK>¥©„I”–ë”Vø<7(­x+q•„EÑ£7)«%¬\†–[”5Vþ-·)k%,±ð~{GÂäë|ïá},°VoéQ»›j-aio:ïj‘:£‹ÖJÑ£9ÚFŠ6L6{ªRõŒ«Úú^×O×xXÓ…9‹aFcqô¢O<5ÞÓÇúyl:sƒXc°$–ORáë*Í£º3—ÁXŒOê'º¦,kú0Çc9,Ä“þ‘®L`e?æŠX +cñ ¼¥+í¾ns5¬.žQëôh ‰Ì8¥sMV”ÈÑç=/¶õ±cÔ)z´G3$êùZj£½뢽›ÍÆSR<6YWÖç±C¥x5çg‰wpQí‰ôáÌ °!6ÂÆâ¾\W6ae¦xÇejI¢ŒdnŠÍ°9¶À–ØJ¼ÓNë£Zó¨ÑÌm°-¶Ãdl/^ûÉèÌ)¬ÏÜSÅ»ú MãèDæŽhϺNØí9ÖÓÅ›ýµ>¶Íbî.ޜ³«}²xók±»Ð©Ì½Ä{u»öÞô™Ìöœé+Þ‡µôh?ŽÎïýµô§Ìa¶çÃ@„8‡àP†öo”‰#оó£ÄûÏúü£yþ¹Ìcp,ŽÃñâ}±®œÀÊyâý(TËDÊ|ñ>¯£ee±x¿*<³(KÄû¢·–É”¥âý¡ž–)”eâý%KËTÊrñþ¯Åî„W‰ÏUMËtÊjñ¹i™AY#¾ðÂgžIY'¾¨gZìžy½øü…×ÚlÊñÅœÓbwË›ÅW&W‹ýŸ4[|ñßhy…²E| ;´Ø]ôVñUÚ¨ee›øê–Òbwé;Å×tˆ»»Þ%¾”ñZì.k·øÒïh±{­½âTN‹ÝqíßÈh-vß•#¾‰}µ,ųü¿\c1Ûb;´WÐfæö˜‚0Ó°#Úë%›Ù^5ç™bcLÀ$´×øæØ[aklƒÕ°:ÖàQ[qÅAŒÁRX“5˜í}u;s:vÃîØ;c´×ø¼ˆÇð8žÀ“˜‹y¸OáižÇÞÉ ð!Å~S!Bß…»)¡èÆ0úæÊX«Ò÷à%¼v·pÏáe¼‚{ñ*ÏPëa}LÄhïØû˜›`S´wãk˜×ñ&Gk1çà~´{•»xïã|Ä£Š0`.ŠáŒÄbh?Ó2Gcq¬e1Ë¡ý´=Ä\½èÖÀ’Xígúa´ÿ1ß²hýÛõÄ쇽°7öÁ¾8ûãÌÂ83p0Á¡8 ‡c&ŽÀ‘8 Gã‹ãpÅcxOàIÌÅ<<…ö>`¯b{×=‡öÞhïNñ^Æ+h¯Ök˜×ñÚëîÞÆ;xïqç?„v¿g¯/»Ïw‰ÿÙkœÏٺǶ{u»`8ÚÝu1´»åhôb9 b –Âx,ƒqhw¤•±VÄ*X{aC¬ °96ÃöØ“±-Ú•ÝãuÂTìˆÑîǺ¢Ý³ÙÏÐ!h÷`}Ñî¯ã ‹Ãp ŽÀQhwãÐîˆìžÇîOìNÆ~‚Û݈Ý9Ø=†Ý3ØOüƒ¸W ýþj-nÄh¿²ßíÁýâÛÚÉü/¶½¶qgºqwwã¾ÒÆœsÆæ¯ï;ÔÙxø-ãÑ[ÆãµŒ' Œ¹óÎßñô&ãYó„ïü0ãÅTã¥/W6óÏoÌ4Þòo4ÞÝm¼?ÀXðÌøÿ5>ùŸñoæIßßë_O3þ£¨ñ)¿ç›eŒo›ïù}ïäßõß[j|¿¿ñ_ÿ1~¸Üøq´ñóýžï3žíù;Æ/º¿üÎø5?ýÛDã‹;zß÷É:ìÇ:çŠ?.Mçâï5AçÓÎü¹ÎyâÏ<£ó9ñ(¦óñ/ÎÔù¢3?Ôù¼ø×ö+Μ¯ó%ñn¢³ý>áªSö™«õBYí7ñºSf˜~½Šö;xË)kL’«ý>Þÿ«nÓ_ÿB»½ˆÿfÜ fè7rB$þæöÿ–á¼™¥GÝâôNH„ö¢攦G|ªÝƒáð47=¦@{FJ dŠéñ‹´{1Ú)æÌ Ô¾¢=€> Ô‰5=©¼ö :ežém ÏÒXÒ)æ| ŽÖ‡eœrÚôñïj/‡e%0¡‘éÓ´'`y§Ì2}î핱¢S~2=»Œvûe§Ì1}P{M¬î”,Ó¾ª½Ö’À±²¦_]¦½>ÖuйÊÚjoˆ‰N1gEàµGÚ›`# ¼n®—À³|íÍ0Iï7ýóÝÚ[bs§ü×ôŸÏkoƒ­$ðKyówùN{2¶•`h{Ó=…¯«¶w馂SÚ;bªƒæZ&¾®Îø’Sž›^c§ötì┦ן ½vsйG›<ÖÞ{J0)Îôö¿iï‡}$˜ÒÓô®OµÄþL¯bú€ íƒqSÌ#8«}qÊHÓ§þÜ8\‚3ªš>¿¯öÑ8Ò)æN\yRû8㔿Lß©}"ŽwÊPÓ÷|¨}2N’àÞ¦¦:¦}NqʦŸ«}&NwÊ=Ó¯þ½æHðZwg9×o sô™s§ý?[ïF endstream endobj startxref 1366172 %%EOF ttfautohint-1.8.1/doc/ttfautohint.txt0000644000175000001440000047226013222451117017623 0ustar00wlusers00000000000000% ttfautohint % Werner Lemberg % --- header-includes: - \hyphenation{ttf-auto-hint} --- Introduction ============ **ttfautohint** is a library written in\ C that takes a TrueType font as the input, removes its bytecode instructions (if any), and returns a new font where all glyphs are bytecode hinted using the information given by FreeType's auto-hinting module. The idea is to provide the excellent quality of the auto-hinter on platforms that don't use FreeType. The library has a central API function, `TTF_autohint`, which is described [below](#the-ttfautohint-api). Bundled with the library there are two front-end programs, [`ttfautohint` and `ttfautohintGUI`](#ttfautohint-and-ttfautohintgui), being a command line program and an application with a Graphics User Interface (GUI), respectively. What exactly are hints? ----------------------- To cite [Wikipedia](http://en.wikipedia.org/wiki/Font_hinting): > **Font hinting** (also known as **instructing**) is the use of > mathematical instructions to adjust the display of an outline font so that > it lines up with a rasterized grid. At low screen resolutions, hinting is > critical for producing a clear, legible text. It can be accompanied by > antialiasing and (on liquid crystal displays) subpixel rendering for > further clarity. and Apple's [TrueType Reference Manual](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM03/Chap3.html#features): > For optimal results, a font instructor should follow these guidelines: > > - At small sizes, chance effects should not be allowed to magnify small > differences in the original outline design of a glyph. > > - At large sizes, the subtlety of the original design should emerge. In general, there are three possible ways to hint a glyph. 1. The font contains hints (in the original sense of this word) to guide the rasterizer, telling it which shapes of the glyphs need special consideration. The hinting logic is partly in the font and partly in the rasterizer. More sophisticated rasterizers are able to produce better rendering results. This is how PostScript Type\ 1 and CFF hints work. 2. The font contains exact instructions (also called *bytecode*) on how to move the points of its outlines, depending on the resolution of the output device, and which intentionally distort the (outline) shape to produce a well-rasterized result. The hinting logic is in the font; ideally, all rasterizers simply process these instructions to get the same result on all platforms. This is how TrueType hints work. 3. The font gets auto-hinted (at run-time). The hinting logic is completely in the rasterizer. No hints in the font are used or needed; instead, the rasterizer scans and analyzes the glyphs to apply corrections by itself. This is how FreeType's auto-hinter works; see [below](#background-and-technical-details) for more. What problems can arise with TrueType hinting? ---------------------------------------------- While it is relatively easy to specify PostScript hints (either manually or by an auto-hinter that works at font creation time), creating TrueType hints is far more difficult. There are at least two reasons: - TrueType instructions form a programming language, operating at a very low level. They are comparable to assembler code, thus lacking all high-level concepts to make programming more comfortable. Here an example how such code looks like: ``` SVTCA[0] PUSHB[ ] /* 3 values pushed */ 18 1 0 CALL[ ] PUSHB[ ] /* 2 values pushed */ 15 4 MIRP[01001] PUSHB[ ] /* 3 values pushed */ 7 3 0 CALL[ ] ``` Another major obstacle is the fact that font designers usually aren't programmers. - It is very time consuming to manually hint glyphs. Given that the number of specialists for TrueType hinting is very limited, hinting a large set of glyphs for a font or font family can become very expensive. Why ttfautohint? ---------------- The ttfautohint library brings the excellent quality of FreeType rendering to platforms that don't use FreeType, yet require hinting for text to look good -- like Microsoft Windows. Roughly speaking, it converts the glyph analysis done by FreeType's auto-hinting module to TrueType bytecode. Internally, the auto-hinter's algorithm resembles PostScript hinting methods; it thus combines all three hinting methods discussed [previously](#what-exactly-are-hints). The simple interface of the front-ends (both on the command line and with the GUI) allows quick hinting of a whole font with a few mouse clicks or a single command on the prompt. As a result, you get better rendering results with web browsers, for example. Across Windows rendering environments today, fonts processed with ttfautohint look best with ClearType enabled. This is the default for Windows\ 7 and higher. Good visual results are also seen in recent MacOS\ X versions and GNU/Linux systems (including Android, ChromeOS, and other mobile operating systems) that use FreeType for rendering glyphs. 'Smooth' hinting ---------------- Fundamentally, there are two approaches to hinting. The older approach, let's call it 'sharp', popular when text was rendered in pure black-and-white, was to make all stems round to full pixels so that in a text line, all stems would be either one pixel or (at a larger point size) two pixels. When grayscale antialiasing came about, this approach actually started harming the rendering rather than helping it, because the horizontal and vertical stems would render very dark but round or diagonal stems would render very light. So a new approach was developed, let's call it 'fuzzy', where all stems and other elements are equalized so that in grayscale (or ClearType) rendering, they all are of roughly equal color. This means that stems are not rounded to full pixels but in fact to fractions of a pixel. However, with black-and-white renderers, this approach yields poor results because in black-and-white you cannot render a fraction of a pixel, so some stems become one pixel and some become two. The TrueType auto-hinters in [FontForge] and [FontLab Studio], to name two well-known font editors, take the 'sharp' approach, while the TrueType auto-hinter in ttfautohint takes the 'fuzzy' approach. In theory, a hybrid approach is possible, using TrueType conditional hints: If the rasterizer is black-and-white, 'sharp' rendering could happen, while if the rasterizer is ClearType, the 'fuzzy' rendering could be used. It is not intended to add black-and-white auto-hinting to ttfautohint. However, it is planned to develop an interface so that ttfautohint can cooperate with font editors, providing this hybrid hinting. `ttfautohint` and `ttfautohintGUI` ================================== On all supported platforms (GNU/Linux, Windows, and Mac OS\ X), the GUI looks quite similar; the used toolkit is [Qt], which in turn uses the platform's native widgets. ![`ttfautohintGUI` on GNU/Linux running KDE](img/ttfautohintGUI.png) Both the GUI and console version share the same features, to be discussed in the next subsection. **Warning: ttfautohint cannot always process a font a second time.** If the font contains composite glyphs, and option [`-c`](#hint-composites) is used, reprocessing with ttfautohint will fail. For this reason it is strongly recommended to *not* delete the original, unhinted font so that you can always rerun ttfautohint. Calling `ttfautohint` --------------------- ``` ttfautohint [OPTION]... [IN-FILE [OUT-FILE]] ``` The command-line binary, `ttfautohint`, works like a Unix filter, this is, it reads data from standard input if no input file name is given, and it sends its output to standard output if no output file name is specified. A typical call looks like the following. ``` ttfautohint -v -t -m foo-control.txt foo.ttf foo-autohinted.ttf ``` For demonstration purposes, here the same using a pipe and redirection. Note that Windows's default command line interpreter, `cmd.exe`, doesn't support piping with binary files, unfortunately. ``` cat foo.ttf | ttfautohint -v -t -m foo-control.txt > foo-autohinted.ttf ``` Calling `ttfautohintGUI` ------------------------ ``` ttfautohintGUI [OPTION]... ``` `ttfautohintGUI` doesn't send any output to a console; however, it accepts (almost) the same command line options as `ttfautohint` to provide customized default values of the GUI. The following command line options are not available in `ttfautohintGUI`: [`--control-file`](#control-instructions-file), [`--reference`](#blue-zone-reference-font), [`--reference-index`](#reference-face-index). Note, however, that the corresponding functionality can be selected interactively. Two options, namely `--ttfa-info` and `--debug`, emit information at standard output and standard error, respectively; they are thus not available in `ttfautohintGUI`, too, and there is no corresponding GUI functionality either. Options ------- Long options can be given with one or two dashes, and with and without an equal sign between option and argument. This means that the following forms are acceptable: `-foo=`*bar*, `--foo=`*bar*, `-foo`\ *bar*, and `--foo`\ *bar*. Below, the section title refers to the command's label in the GUI (if applicable), then comes the name of the corresponding long command line option and its short equivalent, followed by a description. Background and technical details on the meaning of the various options are given [afterwards](#background-and-technical-details). ### Control Instructions File `--control-file=`*file*, `-m`\ *file* : Specify the name of a control instructions file to manually tweak the hinting process. This feature can be used to correct glitches in ttfautohint's hinting algorithm. The syntax used in a control instructions file is given [below](#control-instructions). `ttfautohintGUI` doesn't have this command line option. ### Blue Zone Reference Font `--reference=`*file*, `-R`\ *file* : Derive all blue zones from the given font, which can either be a normal TrueType font or a TrueType collection – for the latter you can select the face index with a [separate option](#reference-face-index). Use this to harmonize font families, avoiding ugly height differences at small sizes. ![Fira Regular and Bold (version 4.106), auto-hinted with ttfautohint and displayed at 16px using Internet Explorer\ 11 under Windows\ 8.1. The bold series shown on the right side uses the regular variant as the reference font.](img/fira-16px-ie11-win81.png) To make this work the reference font must obviously be similar enough to the font to be hinted; in particular, it must have proper blue zone characters so that ttfautohint can derive blue zones at all. `ttfautohintGUI` doesn't have this command line option. ### Hint Set Range Minimum, Hint Set Range Maximum See '[Hint Sets](#hint-sets)' for a definition and explanation. `--hinting-range-min=`*n*, `-l`\ *n* : The minimum PPEM value (in pixels) at which hint sets are created. The default value for *n* is\ 8. `--hinting-range-max=`*n*, `-r`\ *n* : The maximum PPEM value (in pixels) at which hint sets are created. The default value for *n* is 50. Increasing the range given by `-l` and `-r` normally makes the font's bytecode larger. ### Default Script `--default-script=`*s*, `-D`\ *s* : Set default script to tag *s*, which is a string consisting of four lowercase characters like `latn` or `dflt`. It is needed to specify the OpenType default script: After applying all features that are handled specially (like small caps or superscript), ttfautohint uses this value for the remaining features. The default value is `latn`. See [below](#opentype-features) for more details. ### Fallback Script `--fallback-script=`*s*, `-f`\ *s* : Set fallback script to tag *s*, which is a string consisting of four characters like `latn` or `dflt`. It gets used for all glyphs that can't be assigned to a script automatically. The default value is `none`. See [below](#scripts) for more details. `--fallback-scaling`, `-S` : Use scaling for glyphs covered by the fallback script, not hinting. See [below](#scripts) for more details. ### Hinting Limit `--hinting-limit=`*n*, `-G`\ *n* : The *hinting limit* is the PPEM value (in pixels) where hinting gets switched off (using the `INSTCTRL` bytecode instruction, not the `gasp` table data); it does not influence the file size. The default value for *n* is 200, which means that the font is not hinted for PPEM values larger than 200. Note that hinting in the range 'hinting-range-max' up to 'hinting-limit' uses the hinting configuration for 'hinting-range-max'. To omit a hinting limit, use `--hinting-limit=0` (or check the 'No Hinting Limit' box in the GUI). Since this causes internal math overflow in the rasterizer for large pixel values (>\ 1500px approx.) it is strongly recommended to not use this except for testing purposes. ### x Height Increase Limit `--increase-x-height=`*n*, `-x`\ *n* : Normally, ttfautohint rounds the x\ height to the pixel grid, with a slight preference for rounding up (to use the terminology of TrueType's 'Super Round' bytecode instruction, the threshold is 5/8px). If this flag is set, values in the PPEM range 6 to\ *n* are much more often rounded up (setting the threshold to 13/16px). The default value for *n* is 14. Use this flag to increase the legibility of small sizes if necessary; you might get weird rendering results otherwise for glyphs like 'a' or 'e', depending on the font design. To switch off this feature, use `--increase-x-height=0` (or check the 'No x\ Height Increase' box in the GUI). To switch off rounding the x\ height to the pixel grid in general, either partially or completely, see '[x Height Snapping Exceptions](#x-height-snapping-exceptions)'. The following FontForge snapshot images use the font '[Mertz Bold](https://github.com/vernnobile/mertzFont/tree/master/FINAL/Mertz-Bold)' from Vernon Adams. ![At 17px, without option `-x` and `-a qqq`, the hole in glyph 'e' looks very grey in the FontForge snapshot, and the GDI ClearType rendering (which is the default on older Windows versions) fills it completely with black because it uses B/W rendering along the y\ axis. ttfautohint's 'smooth' stem width algorithm intentionally aligns horizontal lines to non-integer (but still discrete) values to avoid large glyph shape distortions.](img/e-17px-x14.png) ![The same, this time with option `-x 17` (and `-a qqq`).](img/e-17px-x17.png) ### x Height Snapping Exceptions `--x-height-snapping-exceptions=`*string*, `-X`\ *string* : A list of comma separated PPEM values or value ranges at which no x\ height snapping shall be applied. A value range has the form *value*~1~`-`*value*~2~, meaning *value*~1~\ <= PPEM <=\ *value*~2~. *value*~1~ or *value*~2~ (or both) can be missing; a missing value is replaced by the beginning or end of the whole interval of valid PPEM values, respectively (6\ to 32767). Whitespace is not significant; superfluous commas are ignored, and ranges must be specified in increasing order. For example, the string `"7-9, 11, 13-"` means the values 7, 8, 9, 11, 13, 14, 15, etc. Consequently, if the supplied argument is `"-"`, no x\ height snapping takes place at all. The default is the empty string (`""`), meaning no snapping exceptions. Normally, x\ height snapping means a slight increase in the overall vertical glyph size so that the height of lowercase glyphs gets aligned to the pixel grid (this is a global feature, affecting *all* glyphs of a font). However, having larger vertical glyph sizes is not always desired, especially if it is not possible to adjust the `usWinAscent` and `usWinDescent` values from the font's `OS/2` table so that they are not too tight. See '[Windows Compatibility](#windows-compatibility)' for more details. ### Fallback Stem Width `--fallback-stem-width=`*n*, `-H`\ *n* : Set the horizontal stem width (hinting) value for all scripts that lack proper standard characters in the font. The value is given in font units and must be a positive integer. If not set, ttfautohint uses a hard-coded default (50\ units at 2048 units per EM, and linearly scaled for other UPEM values, for example 24\ units at 1000 UPEM). For symbol fonts, you need option `--fallback-script` too (to set up a script at all). In the GUI, uncheck the 'Default Fallback Stem Width' box to activate this feature. ### Windows Compatibility `--windows-compatibility`, `-W` : This option makes ttfautohint add two artificial blue zones, positioned at the `usWinAscent` and `usWinDescent` values (from the font's `OS/2` table). The idea is to help ttfautohint so that the hinted glyphs stay within this horizontal stripe since older versions of Windows clip everything that lies outside. There is a general problem with tight values for `usWinAscent` and `usWinDescent`; a good description is given in the [Vertical Metrics How-To](http://typophile.com/node/13081). Additionally, there is a special problem with tight values if used in combination with ttfautohint because the auto-hinter tends to slightly increase the vertical glyph dimensions at smaller sizes to improve legibility. This enlargement can make the heights and depths of glyphs exceed the range given by `usWinAscent` and `usWinDescent`. If ttfautohint is part of the font creation tool chain, and the font designer can adjust those two values, a better solution instead of using option `-W` is to reserve some vertical space for 'padding': For the auto-hinter, the difference between a top or bottom outline point before and after hinting is less than 1px, thus a vertical padding of 2px is sufficient. Assuming a minimum hinting size of 6ppem, adding two pixels gives an increase factor of 8÷6 = 1.33. This is near to the default baseline-to-baseline distance used by TeX and other sophisticated text processing applications, namely 1.2×designsize, which gives satisfying results in most cases. It is also near to the factor 1.25 recommended in the abovementioned how-to. For example, if the vertical extension of the largest glyph is 2000 units (assuming that it approximately represents the designsize), the sum of `usWinAscent` and `usWinDescent` could be 1.25×2000 = 2500. In case ttfautohint is used as an auto-hinting tool for fonts that can be no longer modified to change the metrics, option `-W` in combination with '`-X "-"`' to suppress any vertical enlargement should prevent almost all clipping. ### Adjust Subglyphs `--adjust-subglyphs`, `-p` : *Adjusting subglyphs* makes a font's original bytecode be applied to all glyphs before it is replaced with bytecode created by ttfautohint. This makes only sense if your font already has some hints in it that modify the shape even at EM size (normally 2048px); in particular, some CJK fonts need this because the bytecode is used to scale and shift subglyphs (hence the option's long name). For most fonts, however, this is not the case. ### Hint Composites `--composites`, `-c` : By default, the components of a composite glyph get hinted separately. If this flag is set, the composite glyph itself gets hinted (and the hints of the components are ignored). Using this flag increases the bytecode size a lot, however, it *might* yield better hinting results – usually, it doesn't. If this option is used (and a font actually contains composite glyphs), ttfautohint currently cannot reprocess its own output for technical reasons, see [below](#the-.ttfautohint-glyph). ### Symbol Font `--symbol`, `-s` : Process a font that ttfautohint would refuse otherwise because it can't find a single standard character for any of the supported scripts. For all scripts that lack proper standard characters, ttfautohint uses a default (hinting) value for the standard stem width instead of deriving it from a script's set of standard characters (for the latin script, one of them is character 'o'). Use this option – usually in combination with the [`--fallback-script`](#fallback-script) and/or [`--fallback-stem-width`](#fallback-stem-width) option – to hint symbol or dingbat fonts or math glyphs, for example. ### Dehint `--dehint`, `-d` : Strip off all hints without generating new hints. Consequently, all other hinting options are ignored. This option is intended for testing purposes. ### ttfautohint Info `--no-info`, `-n` : Don't add ttfautohint version and command line information to the version string or strings (with name ID\ 5) in the font's `name` table. In the GUI, it corresponds to value 'None' in the 'ttfautohint info' combo box. This option is mutually exclusive with option `-I`. `--detailed-info`, `-I` : Add ttfautohint version and command line information to the version string or strings (with name ID\ 5) in the font's `name` table. In the GUI, it corresponds to value 'Version and Parameters' in the 'ttfautohint info' combo box. This option is mutually exclusive with option `-n`. If neither `-n` nor `-I` is set, the string '`ttfautohint (vNNN)`' gets added to the `name` table (with *NNN* the current version); this correponds to value 'Version' in the 'ttfautohint info' combo box. ### Add TTFA Info Table `--ttfa-table`, `-t` : Add an SFNT table called `TTFA` to the output font that holds a dump of all parameters; the data resembles the format of the `--debug` option's parameter listing. In particular, it lists all ttfautohint control instructions (which are *not* shown in the `name` table info). This option is mainly for archival purposes so that all information used to create a font is stored in the font itself. Note that such a `TTFA` table gets ignored by all TrueType rendering engines. Forthcoming versions of the ttfautohint front-ends will be able to use this data so that a font can be processed another time with exactly the same parameters, thus providing a means for round-tripping fonts. ### Family Suffix `--family-suffix=`*string*, `-F`\ *string* : A string that gets appended to the family name in entries with IDs 1, 4, 6, 16, and\ 21 in the font's `name` table. Allowed input is ASCII in the range 0x20-0x7E except characters `%()/<>[]{}`. Assuming an input family name 'Foo', a full name 'Foo Bold', and a family suffix '\ 1', the output family name will be 'Foo 1' and the full name 'Foo 1 Bold'. For the PostScript name in ID\ 6, ttfautohint uses the suffix with space characters removed (for example 'Foo1Bold'). This option is mainly for testing purposes, enabling the operating system to simultaneously display several instances of a font that are processed with different ttfautohint parameters. ### Reference Face Index `--reference-index=`*n*, `-Z`\ *n* : Set the face index for the [blue zone reference font](#blue-zone-reference-font) if the font is a TrueType collection (`.ttc`). For normal TrueType fonts, the value is always zero (which is also the default). `ttfautohintGUI` doesn't have this command line option. ### Stem Width and Positioning Mode `--stem-width-mode=`*string*, `-a`\ *string* : ttfautohint provides three different algorithms for computing horizontal stem widths and the positioning of blue zones. - 'natural': No adjustments to stem widths, discrete blue zone positioning. This is what FreeType uses for its 'light' (auto-)hinting mode. Essentially no glyph shape distortion, low contrast. - 'quantized': Both stem widths and blue zone positions are slightly quantized to take discrete values. For example, stem values 50, 51, 72, 76, and 100 would become 50, 74, and 100 (or something similar). More glyph shape distortion but increased contrast. - 'strong: If active, stem widths and blue zones are snapped and positioned to integer pixel values as much as possible. This gives high contrast, but glyph shape distortion can be significant. These three algorithms are mapped onto three possible rendering targets. - Grayscale rendering, with or without optimization for subpixel positioning (e.g., Android). - 'GDI ClearType' rendering: the rasterizer version, as returned by the GETINFO bytecode instruction, is in the range 36\ <= version <=\ 38 and ClearType is enabled (e.g., Windows XP). - 'DirectWrite ClearType' rendering: the rasterizer version, as returned by the GETINFO bytecode instruction, is >=\ 39, ClearType is enabled, and subpixel positioning is enabled also (e.g., Internet Explorer\ 9 running on Windows\ 7). GDI ClearType uses a mode similar to B/W rendering along the vertical axis, while DW ClearType applies grayscale rendering. Additionally, only DW ClearType provides subpixel positioning along the x\ axis. For what it's worth, the rasterizers version\ 36 and version\ 38 in Microsoft Windows are two completely different rendering engines. [Note that the GDI framework on Windows\ 10 no longer uses B/W rendering along the vertical axis; we consequently treat it as DW ClearType also. We test this by looking at bit\ 11 of the GETINFO instruction, which was introduced in rasterizer version\ 40.] The command line option expects *string* to contain exactly three letters with possible values '`n`' for natural, '`q`' for quantized, and '`s`' for strong stem width and positioning mode. The first, second, and third letter correspond to grayscale, GDI ClearType, and DW ClearType rendering, respectively. The default value is `qsq`, which means that the 'quantized' algorithm gets used for grayscale and DW ClearType, and the 'strong' algorithm for GDI ClearType. For example, to use the 'natural' algorithm for all three rendering targets, use option `-a nnn`. In the GUI, simply select the desired stem width algorithm in the three combo boxes. ![This image shows different versions of glyph 'g' of the font [Merriweather-Black](https://fonts.google.com/specimen/Merriweather) as displayed with the 'ftgrid' demo program of FreeType. Top left is unhinted, top right is hinted using ttfautohint natural stem width mode. Bottom left and right uses the quantized and strong stem width modes, respectively.](img/Merriweather-Black-g-21px-comparison.png) ### Miscellaneous Watch input files\ \ \ (`ttfautohintGUI` only) : If this checkbox is set, automatically regenerate the output file as soon as an input file (either the font, the control instructions file, or the reference font) gets modified. Pressing the 'Run' button starts watching. If an error occurs, watching stops and must be restarted with the 'Run' button. `--ignore-restrictions`, `-i` : By default, fonts that have bit\ 1 set in the 'fsType' field of the `OS/2` table are rejected. If you have a permission of the font's legal owner to modify the font, specify this command line option. If this option is not set, `ttfautohintGUI` shows a dialogue to handle such fonts if necessary. `--help`, `-h` : On the console, print a brief documentation on standard output and exit. This doesn't work with `ttfautohintGUI` on MS Windows. `--version`, `-v` : On the console, print version information on standard output and exit. This doesn't work with `ttfautohintGUI` on MS Windows. `--ttfa-info`, `-T`\ \ \ (not in `ttfautohintGUI`) : Print [`TTFA` table](#add-ttfa-info-table) of the input font on standard output if present, then exit. `--debug`\ \ \ (not in `ttfautohintGUI`) : Print *a lot* of debugging information on standard error while processing a font (you should redirect stderr to a file). To reduce the amount of debug data it is recommended to restrict the hinting process to a single PPEM value, e.g., ``` ttfautohint --debug -l 15 -r 15 ... > debug.txt 2>&1 ``` Background and Technical Details ================================ [Real-Time Grid Fitting of Typographic Outlines](http://www.tug.org/TUGboat/tb24-3/lemberg.pdf) is a scholarly paper that describes FreeType's auto-hinter in some detail. Regarding the described data structures it is slightly out of date, but the algorithm itself hasn't changed in general. The next few subsections are mainly based on this article, introducing some important concepts. Note that ttfautohint only does hinting along the vertical direction (modifying y\ coordinates only). Segments and Edges ------------------ A glyph consists of one or more *contours* (this is, closed curves). For example, glyph 'O' consists of two contours, while glyph 'I' has only one. ![The letter 'O' has two contours, an inner and an outer one, while letter 'I' has only an outer contour.](img/o-and-i) A *segment* is a series of consecutive points of a contour (including its Bézier control points) that are approximately aligned along a coordinate axis. A segment has one of three possible directions: left, right, or none (which means neither left nor right), derived from the TrueType outline directions. ttfautohint itself creates segments that contain at least two points. Using control instructions, however, it is possible to create one-point segments, which are useful for fine-tuning the hinting process. ![A serif. Contour and control points are represented by squares and circles, respectively. The bottom 'line' DE is approximately aligned along the horizontal axis, thus it forms a segment of 7\ points. Together with the two other horizontal segments, BC and FG, they form two edges (BC+FG, DE).](img/segment-edge) An *edge* corresponds to a single coordinate value (allowing for a small threshold) on the main dimension that collects one or more segments, all pointing into the same direction (either left or right, all others are ignored). While finding segments is done on the unscaled outline, finding edges is bound to the device resolution. See [below](#hint-sets) for an example. In general, segments and edges pointing into different directions 'repel' each other, thus preventing alignment on the same vertical coordinate if they are near. Note that this is a simplification, but it should help understand how to manipulate and/or create segments in control instructions files. The analysis to find segments and edges is specific to a writing system, see [below](#writing-systems). Feature Analysis ---------------- The auto-hinter analyzes a font in two steps. Right now, everything described here happens for the horizontal axis only, providing vertical hinting. * Global Analysis This affects the hinting of all glyphs, trying to give them a uniform appearance. + Compute standard horizontal stem width of the font. The value is normally taken from glyphs that resemble letter 'o'. If, for a given script, there is no glyph for at least one standard character in the input font, a fallback stem width gets used. See also option [`--fallback-stem-width`](#fallback-stem-width). The stem width(s) found by the algorithm can be overridden with the [`width`](#stem-width-adjustments) control instruction. + Compute blue zones, see [below](#blue-zones). If the stem widths of single glyphs differ by a large value, or if ttfautohint fails to find proper blue zones, hinting becomes quite poor, possibly leading even to severe shape distortions. Table: script-specific standard characters of the 'latin' writing system Script Standard characters -------- --------------------- `adlm` '𞤌', U+1E90C, ADLAM CAPITAL LETTER O '𞤮', U+1E92E, ADLAM SMALL LETTER O `arab` 'Ù€', U+0640, ARABIC TATWEEL 'Ù„', U+0644, ARABIC LETTER LAM 'Ø­', U+062D, ARABIC LETTER HAH `armn` 'Ö…', U+0585, ARMENIAN SMALL LETTER OH 'Õ•', U+0555, ARMENIAN CAPITAL LETTER OH `avst` 'ð¬š', U+10B1A, AVESTAN LETTER THE `bamu` 'ê›', U+A6C1, BAMUM LETTER YUQ 'ꛯ', U+A6EF, BAMUM LETTER KOGHOM `beng` '০', U+09E6, BENGALI DIGIT ZERO '৪', U+09EA, BENGALI DIGIT FOUR `buhd` 'á‹', U+174B, BUHID LETTER MA 'á', U+174F, BUHID LETTER WA `cakm` '𑄤', U+11124, CHAKMA LETTER WAA '𑄉', U+11109, CHAKMA LETTER GAA 'ð‘„›', U+1111B, CHAKMA LETTER PAA `cans` 'ᑌ', U+144C, CANADIAN SYLLABICS TE 'ᓚ', U+14DA, CANADIAN SYLLABICS LA `cari` 'ðŠ«', U+102AB, CARIAN LETTER O 'ð‹‰', U+102C9, CARIAN LETTER RR `cher` 'Ꭴ', U+13A4, CHEROKEE LETTER U 'á…', U+13C5, CHEROKEE LETTER NV 'ꮕ', U+AB95, CHEROKEE SMALL LETTER NV `copt` 'Ⲟ', U+2C9E, COPTIC CAPITAL LETTER O 'ⲟ', U+2C9F, COPTIC SMALL LETTER O `cprt` 'ð …', U+10805, CYPRIOT SYLLABLE JA 'ð £', U+10823, CYPRIOT SYLLABLE RA `cyrl` '\Cyrillic{}о\cyrillic{}', U+043E, CYRILLIC SMALL LETTER O '\Cyrillic{}О\cyrillic{}', U+041E, CYRILLIC CAPITAL LETTER O `deva` 'ठ', U+0920, DEVANAGARI LETTER TTHA 'व', U+0935, DEVANAGARI LETTER VA 'ट', U+091F, DEVANAGARI LETTER TTA `dsrt` 'ð„', U+10404, DESERET CAPITAL LETTER LONG O 'ð¬', U+1042C, DESERET SMALL LETTER LONG O `ethi` 'á‹', U+12D0, ETHIOPIC SYLLABLE PHARYNGEAL A `geor` 'ი', U+10D8, GEORGIAN LETTER IN 'ე', U+10D4, GEORGIAN LETTER EN 'áƒ', U+10D0, GEORGIAN LETTER AN `geok` 'á‚¶', U+10B6, GEORGIAN CAPITAL LETTER GHAN 'Ⴑ', U+10B1, GEORGIAN CAPITAL LETTER SAN 'â´™', U+2D19, GEORGIAN SMALL LETTER CHIN `glag` 'â°•', U+2C15, GLAGOLITIC CAPITAL LETTER TVRIDO 'â±…', U+2C45, GLAGOLITIC SMALL LETTER TVRIDO `goth` 'ðŒ´', U+10334, GOTHIC LETTER AIHVUS 'ðŒ¾', U+1033E, GOTHIC LETTER JER 'ðƒ', U+10343, GOTHIC LETTER SAUIL `grek` '\Greek{}ο\greek{}', U+03BF, GREEK SMALL LETTER OMICRON '\Greek{}Ο\greek{}', U+039F, GREEK CAPITAL LETTER OMICRON `gujr` 'ટ', U+0A9F, GUJARATI LETTER TTA '૦', U+0AE6, GUJARATI DIGIT ZERO `guru` 'ਠ', U+0A20, GURMUKHI LETTER TTHA 'ਰ', U+0A30, GURMUKHI LETTER RA '੦', U+0A66, GURMUKHI DIGIT ZERO `hebr` '×', U+05DD, HEBREW LETTER FINAL MEM `kali` 'ê¤', U+A90D, KAYAH LI LETTER NGA '꤀', U+A900, KAYAH LI DIGIT ZERO `knda` '೦', U+0CE6, KANNADA DIGIT ZERO 'ಬ', U+0CAC, KANNADA LETTER BA `khmr` '០', U+17E0, KHMER DIGIT ZERO `lao` 'à»', U+0ED0, LAO DIGIT ZERO `latn` '\Latin{}o\latin{}', U+006F, LATIN SMALL LETTER O '\Latin{}O\latin{}', U+004F, LATIN CAPITAL LETTER O '\Latin{}0\latin{}', U+0030, DIGIT ZERO `lisu` 'ꓳ', U+A4F3, LISU LETTER `mlym` 'à´ ', U+0D20, MALAYALAM LETTER TTHA 'à´±', U+0D31, MALAYALAM LETTER RRA `mymr` 'á€', U+101D, MYANMAR LETTER WA 'င', U+1004, MYANMAR LETTER NGA 'ဂ', U+1002, MYANMAR LETTER GA `nkoo` 'ß‹', U+07CB, NKO LETTER EE '߀', U+07C0, NKO DIGIT ZERO `olck` 'á±›', U+1C5B, OL CHIKI LETTER AT `orkh` 'ð°—', U+10C17, OLD TURKIC LETTER YENISEI AY `osge` 'ð“‚', U+104C2, OSAGE CAPITAL LETTER O 'ð“ª', U+104EA, OSAGE SMALL LETTER O `osma` 'ð’†', U+10486, OSMANYA LETTER DEEL 'ð’ ', U+104A0, OSMANYA DIGIT ZERO `saur` 'ê¢', U+A89D, SAURASHTRA LETTER TTHA 'ê£', U+A8D0, SAURASHTRA DIGIT ZERO `shaw` 'ð‘´', U+10474, SHAVIAN LETTER OAK `sinh` 'à¶§', U+0DA7, SINHALA LETTER ALPAPRAANA TTAYANNA `sund` 'á®°', U+1BB0, SUNDANESE DIGIT ZERO `taml` '௦', U+0BE6, TAMIL DIGIT ZERO `tavt` 'ꪒ', U+AA92, TAI VIET LETTER LOW DO 'ꪫ', U+AAAB, TAI VIET LETTER HIGH VO `telu` '౦', U+0C66, TELUGU DIGIT ZERO 'à±§', U+0C67, TELUGU DIGIT ONE `tfng` 'âµ”', U+2D54, TIFINAGH LETTER YAR `thai` 'า', U+0E32, THAI CHARACTER SARA AA 'ๅ', U+0E45, THAI CHARACTER LAKKHANGYAO 'à¹', U+0E50, THAI DIGIT ZERO `vaii` 'ꘓ', U+A613, VAI SYMBOL FEENG 'ê–œ', U+A59C, VAI SYLLABLE BHU 'ê–´', U+A5B4, VAI SYLLABLE KU Table: standard characters of the 'latin' writing system, special scripts Script Standard characters ---------- --------------------- `khms` 'á§¡', U+19E1, KHMER SYMBOL MUOY KOET '᧪', U+19EA, KHMER SYMBOL DAP KOET `latb` '\Latin{}â‚’\latin{}', U+2092, LATIN SUBSCRIPT SMALL LETTER O '\Latin{}â‚€\latin{}', U+2080, SUBSCRIPT ZERO `latp` '\Latin{}áµ’\latin{}', U+1D52, MODIFIER LETTER SMALL O '\Latin{}á´¼\latin{}', U+1D3C, MODIFIER LETTER CAPITAL O '\Latin{}â°\latin{}', U+2070, SUPERSCRIPT ZERO * Glyph Analysis This is a per-glyph operation. + Find segments and edges. + Link edges to set up stems and serifs. The abovementioned paper gives more details on what exactly constitutes a stem or a serif and how the algorithm works. Blue Zones ---------- ![Two blue zones relevant to the glyph 'a'. Vertical point coordinates of *all* glyphs within these zones are aligned, provided the blue zone is active (this is, its vertical size is smaller than 3/4\ pixels).](img/blue-zones) Outlines of certain characters are used to determine *blue zones*. This concept is the same as with Type\ 1 fonts: All glyph points that lie in certain small horizontal zones get aligned vertically. The tables below show the blue zone characters of all available scripts of the latin writing system; the values are hard-coded in the source code. Since the auto-hinter takes mean values it is not necessary that all characters of a zone are present. 'Round' characters in blue zones (e.g., the top and bottom of 'O' or the bottom of 'g') are used to control overshoot handling. Blue zones marked with an asterisk are x\ height blue zones, which are adjusted to be on the pixel grid (to improve rendering at small sizes) by scaling the remaining blue zones before they are adjusted to the grid. See also option [`--increase-x-height`](#x-height-increase-limit). Table: `adlm` (Adlam) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters 𞤌 𞤅 𞤈 𞤠𞤔 𞤚 2 bottom of capital letters 𞤂 𞤖 3* top of small letters 𞤬 𞤮 𞤻 𞤼 𞤾 4 bottom of small letters 𞤤 𞤨 𞤩 𞤭 𞤴 𞤸 𞤺 𞥀 Table: `arab` (Arabic) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters with vertical stroke ا Ø¥ Ù„ Ùƒ Ø· ظ 2 bottom of letters ت Ø« Ø· ظ Ùƒ 3 glyph joining Ù€ Table: `armn` (Armenian) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters Ô± Õ„ Õ’ Õ“ Ô² Ô³ Ô´ Õ• 2 bottom of capital letters Õ’ Õˆ Õ“ Õƒ Õ‡ Õ Õ Õ• 3 top of ascenders of small letters Õ¥ Õ§ Õ« Õ´ Õ¾ Öƒ Ö† Öƒ 4* top of small letters Õ¡ Õµ Ö‚ Õ½ Õ£ Õ» Ö€ Ö… 5 bottom of small letters Õ° Õ¸ Õ³ Õ¡ Õ¥ Õ® Õ½ Ö… 6 bottom of descenders of small letters Õ¢ Õ¨ Õ« Õ¬ Õ² Õº Öƒ Ö Table: `avst` (Avestan) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters 𬀠ð¬ ð¬ 𬛠2 bottom of letters 𬀠ð¬ Table: `bamu` (Bamum) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters êš§ ꚨ ê›› ꛉ ê› ê›ˆ ꛫ ꛯ 2 bottom of letters êš­ êš³ êš¶ ꛬ ꚢ êš½ ꛯ ꛲ Table: `beng` (Bengali) blue zones ID Blue zone Characters ---- ----------- ------------ 1 baseline (flat glyphs only) অ ড ত ন ব ভ ল ক 2 top of ascenders ই ট ঠ ি à§€ ৈ à§— 3* top of baseline ও ঠড ত ন ব ল ক 4 bottom of base characters অ ড ত ন ব ভ ল ক Contrary to scripts like latin, the baseline in Bengali is on the top, and we hint from top to bottom. Table: `buhd` (Buhid) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters á ሠ2 top of large letters á… áŠ áŽ 3* top of small letters Ⴀრበጠ4 bottom of letters ဠრᆠበዠá á‘ Table: `cakm` (Chakma) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters 𑄃 ð‘„… 𑄉 ð‘„™ ð‘„— 2 bottom of letters ð‘„… ð‘„› ð‘„ ð‘„— ð‘„“ 3 bottom of descenders of letters 𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢 Table: `cans` (Canadian Syllabics) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters á—œ á–´ á á’£ á‘« ᑎ ᔑ á—° 2 bottom of letters á—¶ á–µ á’§ რᑌ ᒠᔑ á—¢ 3* top of small letters á““ á“• á“€ á“‚ á“„ á•„ ᕆ ᘣ 4 bottom of small letters ᕃ á“‚ á“€ á•‚ á“— ᓚ ᕆ ᘣ 5 top of superscript letters ᪠ᙆ ᣘ ᢠᒾ ᣗ ᔆ 6 bottom of superscript letters ᙆ á—® á’» ហᔆ á’¡ á’¢ á“‘ Table: `cari` (Carian) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ðŠ§ ðŠ« ðŠ¬ ðŠ­ ðŠ± ðŠº ðŠ¼ ðŠ¿ 2 bottom of letters ðŠ£ ðŠ§ ðŠ· ð‹€ ðŠ« ðŠ¸ ð‹‰ Table: `cher` (Cherokee) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters ᆠᎻ Ꭼ რᎤ ᣠᎦ á• 2 bottom of capital letters ᆠᎻ Ꭼ რᎤ ᣠᎦ á• 3 top of ascenders of small letters ê®’ ꮤ ê®¶ ê­´ ê­¾ ê®— ê® ê®¿ 4* top of small letters ê®– ê­¼ ꮓ ê®  ꮳ ê­¶ ꮥ ê®» 5 bottom of small letters ê®– ê­¼ ꮓ ê®  ꮳ ê­¶ ꮥ ê®» 6 bottom of descenders of small letters á¸ ê® ê­¹ ê­» Table: `copt` (Coptic) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters Ⲍ Ⲏ â²  Ⳟ Ⲟ ⲠⲤ Ⳋ 2 bottom of capital letters ⳠⳘ Ⳟ Ⲏ Ⲟ ⲠⳜ â²° 3* top of small letters ⲠⲠⲡ ⳟ ⲟ ⲑ â²¥ ⳋ 4 bottom of small letters ⳑ â³™ ⳟ Ⲡⲟ ⲑ â³ â³’ Table: `cprt` (Cypriot) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ð  ð ™ ð ³ ð ± ð … ð “ ð £ ð ¦ 2 bottom of letters ð ƒ ð Š ð › ð £ ð ³ ð µ ð  3 top of small letters ð ˆ ð  ð – 4 bottom of small letters ð ˆ ð  ð – Table: `cyrl` (Cyrillic) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters \Cyrillic{}Б Ð’ Е П З О С Э\cyrillic{} 2 bottom of capital letters \Cyrillic{}Б Ð’ Е Ш З О С Э\cyrillic{} 3* top of small letters \Cyrillic{}Ñ… п н ш е з о Ñ\cyrillic{} 4 bottom of small letters \Cyrillic{}Ñ… п н ш е з о Ñ\cyrillic{} 5 bottom of descenders of small letters \Cyrillic{}Ñ€ у Ñ„\cyrillic{} Table: `deva` (Devanagari) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of ascenders ई ठओ औ ि ी ो ौ 2 top of baseline क म अ आ थ ध भ श 3* top of baseline (flat glyphs only) क न म उ छ ट ठ ड 4 bottom of base characters क न म उ छ ट ठ ड 5 bottom of descenders ॠृ Contrary to scripts like latin, the baseline in Devanagari is on the top, and we hint from top to bottom. Note that some fonts have extreme variation in the height of the round elements in Zone\ 3; for this reason we also define Zone\ 1, which must be always present. Table: `dsrt` (Deseret) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters ð‚ ð„ ð‹ ð— ð‘ 2 bottom of capital letters ð€ ð‚ ð„ ð— ð› 3* top of small letters ðª ð¬ ð³ ð¿ ð¹ 4 bottom of small letters ð¨ ðª ð¬ ð¿ 𑃠Table: `ethi` (Ethiopian) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ሀ ሃ ዘ á ማ በ á‹‹ á‹ 2 bottom of letters ለ ሠበ ዘ ሀ ሪ ዠጨ Table: `geok` (Georgian Khutsuri) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of Asomtavruli letters Ⴑ á‚§ Ⴙ Ⴜ Ⴄ á‚¥ Ⴓ Ⴚ 2 bottom of Asomtavruli letters Ⴄ á‚¥ á‚§ Ⴈ Ⴆ Ⴑ Ⴊ á‚« 3* top of Nuskhuri letters â´ â´— â´‚ â´„ â´… â´‡ â´” â´– 4 bottom of Nuskhuri letters â´ˆ â´Œ â´– â´Ž â´ƒ â´† â´‹ â´¢ 5 top of ascender Nuskhuri letters â´ â´‘ â´“ â´• â´™ â´› â´¡ â´£ 6 bottom of Nuskhuri descender letters â´„ â´… â´” â´• â´ â´‚ â´˜ â´ Georgian Asomtavruli and Nuskhuri form the old ecclesiastical script, Khutsuri. Note that fonts show a great variation in height and depth of ascender and descender letter forms. Table: `geor` (Georgian Mkhedruli) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of Mkhedruli letters გ დ ე ვ თ ი რღ 2 bottom of Mkhedruli letters რზ მ ს შ ძ ხ ჰ 3 top of ascender Mkhedruli letters ს ხ ქ ზ მ შ ჩ წ 4 bottom of descender Mkhedruli letters ე ვ ჟ ტ უ ფ ქ ყ Georgian Mkhedruli support is incomplete; it doesn't yet contain characters for Mtavruli (which are not yet encoded in Unicode), the uppercase glyph variants of Mkhedruli. Table: `glag` (Glagolitic) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters â°… â°” â°ª â°„ â°‚ â°Š â°« â°‹ 2 bottom of capital letters â°… â°„ â°‚ â°ª â°ž â°¡ â°Š â°” 3* top of small letters â°µ ⱄ ⱚ â°´ â°² â°º â±› â°» 4 bottom of small letters â°µ â°´ â°² ⱚ ⱎ ⱑ â°º ⱄ Table: `goth` (Gothic) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ðŒ² ðŒ¶ ð€ ð„ ðŒ´ ðƒ ðˆ ðŒ¾ 2 bottom of letters ðŒ¶ ðŒ´ ðƒ ðˆ Table: `grek` (Greek) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters \Greek{}Γ Î’ Ε Ζ Θ Ο Ω\greek{} 2 bottom of capital letters \Greek{}Î’ Δ Ζ Ξ Θ Ο\greek{} 3 top of 'small beta' like letters \Greek{}β θ δ ζ λ ξ\greek{} 4* top of small letters \Greek{}α ε ι ο Ï€ σ Ï„ ω\greek{} 5 bottom of small letters \Greek{}α ε ι ο Ï€ σ Ï„ ω\greek{} 6 bottom of descenders of small letters \Greek{}β γ η μ Ï Ï† χ ψ\greek{} Table: `gujr` (Gujarati) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of letters ત ન ઋ ઌ છ ટ ર ૦ 2 bottom of letters ખ ગ ઘ ઞ ઇ ઈ ઠ જ 3 top of ascenders ઈ ઊ િ à«€ લી શà«àªšàª¿ જિ સી 4 bottom of descenders ૠૃ à«„ ખૠછૃ છૄ 5 top of Gujarati digits ૦ à«§ ૨ à«© à«­ Table: `guru` (Gurmukhi) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of ascenders ਇ ਈ ਉ ਠਓ ੳ ਿ à©€ 2 top of baseline ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ 3* top of baseline (flat glyphs only) ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ 4 bottom of characters ਅ ਠਓ ਗ ਜ ਠ ਰ ਸ 5 top of Gurmukhi digits ੦ à©§ ੨ à©© à©­ Table: `hebr` (Hebrew) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ב ד ×” ×— ך ×› × ×¡ 2 bottom of letters ב ט ×› × ×¡ צ 3 bottom of descenders of letters ×§ ך ן ×£ ×¥ Table: `kali` (Kayah Li) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of letters ꤅ ê¤ ê¤ ê¤‹ ꤀ ê¤ 2 bottom of letters ꤈ ꤘ ꤀ ê¤ ê¤¢ 3 top of ascending letters ꤖ ꤡ 4 bottom of descending letters ꤑ ꤜ ꤞ 5 bottom of large descending letters ꤑ꤬ ꤜ꤭ ꤔ꤬ Table: `khmr` (Khmer) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of letters áž áž‘ áž“ áž§ áž© áž¶ 2 top of subscript cluster components ក្ក ក្ហក្គ ក្ហ3 bottom of letters ហឃ áž… áž‹ áž” ម áž™ áž² 4 bottom of descenders ážáŸ’ážš រៀ ឲ្យ អឿ 5 bottom of large descenders ន្ážáŸ’រៃ ង្ážáŸ’áž™ ក្បៀ ច្រៀ ន្ážáž¿ ល្បឿ Table: `khms` (Khmer Symbols) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of symbols for waxing á§  á§¡ 2 bottom of symbols for waning á§¶ á§¹ Khmer symbols are used for lunar dates. Table: `knda` (Kannada) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ಇ ಊ ಠಣ ಸಾ ನಾ ದಾ ರಾ 2 bottom of letters ಅ ಉ ಎ ಲ ೦ ೨ ೬ à³­ Table: `lao` (Lao) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of letters າ ດ ອ ມ ລ ວ ຣ ງ 2 bottom of letters າ ອ ບ ຠຣ ຮ ວ ຢ 3 top of ascenders ປ ຢ ຟ ຠ4 top of large ascenders ໂ ໄ ໃ 5 bottom of descenders ງ ຊ ຖ ຽ ໆ ຯ Table: `latb` (Latin Subscripts) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital characters \Latin{}â‚€ ₃ â‚… ₇ ₈\latin{} 2 bottom of capital characters \Latin{}â‚€ â‚ â‚‚ ₃ ₈\latin{} 3 top of 'small f' like characters \Latin{}áµ¢ â±¼ â‚• â‚– â‚—\latin{} 4* top of small characters \Latin{}â‚ â‚‘ â‚’ â‚“ â‚™ â‚› áµ¥ ᵤ áµ£\latin{} 5 bottom of small characters \Latin{}â‚ â‚‘ â‚’ â‚“ â‚™ â‚› áµ¥ ᵤ áµ£\latin{} 6 bottom of descenders of small characters \Latin{}ᵦ áµ§ ᵨ ᵩ ₚ\latin{} Subscript latin characters are similar to normal latin characters. Table: `latn` (Latin) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters \Latin{}T H E Z O C Q S\latin{} 2 bottom of capital letters \Latin{}H E Z L O C U S\latin{} 3 top of 'small f' like letters \Latin{}f i j k d b h\latin{} 4* top of small letters \Latin{}u v x z o e s c\latin{} 5 bottom of small letters \Latin{}n r x z o e s c\latin{} 6 bottom of descenders of small letters \Latin{}p q g j y\latin{} Table: `latp` (Latin Superscripts) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital characters \Latin{}Ⱐ³ âµ â· áµ€ á´´ á´± á´¼\latin{} 2 bottom of capital characters \Latin{}Ⱐ¹ ² ³ á´± á´¸ á´¼ áµ\latin{} 3 top of 'small f' like characters \Latin{}ᵇ ᵈ ᵠʰ ʲ á¶  â±\latin{} 4* top of small characters \Latin{}ᵉ áµ’ ʳ Ë¢ Ë£ á¶œ á¶»\latin{} 5 bottom of small characters \Latin{}ᵉ áµ’ ʳ Ë¢ Ë£ á¶œ á¶»\latin{} 6 bottom of descenders of small characters \Latin{}áµ– ʸ áµ\latin{} Superscript latin characters are similar to normal latin characters. Table: `lisu` (Lisu) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ê“¡ ê“§ ꓱ ê“¶ ê“© ꓚ ꓵ ꓳ 2 bottom of letters ê“• ꓜ ꓞ ê“¡ ê“› ê“¢ ꓳ ê“´ Table: `mlym` (Malayalam) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters à´’ à´Ÿ à´  à´± à´š à´ª à´šàµà´š à´ªàµà´ª 2 bottom of letters à´Ÿ à´  à´§ à´¶ à´˜ à´š à´¥ à´² Table: `mymr` (Myanmar) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of letters ဠဂ င ဒ ဠᥠአዠ2 bottom of letters င ဎ ဒ ပ ဗ ဠአዠ3 top of ascenders of characters ဩ ြ á á ᆠါ ိ 3 bottom of descenders of letters ဉ ည ဥ ဩ ဨ á‚ á… á‰ Table: `nkoo` (N'Ko) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ß ß‰ ß’ ߟ ß– ßœ ß  ߥ 2 bottom of letters ߀ ߘ ß¡ ß  ߥ 3* top of small letters ß ß› ß‹ 4 bottom of small letters ߎ ß ß› ß‹ Table: `olck` (Ol Chiki) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters á±› ᱜ ᱠᱡ á±¢ á±¥ 2 bottom of letters á±› ᱜ ᱠᱡ á±¢ á±¥ Table: `orkh` (Old Turkic) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ð°— ð°˜ ð°§ 2 bottom of letters ð°‰ ð°— ð°¦ ð°§ Table: `osge` (Osage) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters ð’¾ ð“ 𓒠𓓠𒻠𓂠𒵠𓆠2 bottom of capital letters ð’° ð“ 𓂠𒿠𓎠𒹠3 bottom of descenders of capital letters ð’¼ ð’½ ð’¾ 4* top of small letters 𓵠𓶠𓺠𓻠ð“ 𓣠𓪠𓮠5 bottom of small letters 𓘠𓚠𓣠𓵠𓡠𓧠𓪠𓶠6 top of ascenders of small letters 𓤠𓦠𓸠𓹠𓛠7 bottom of descenders of small letters 𓤠𓥠𓦠Table: `osma` (Osmanya) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ð’† ð’‰ ð’ ð’’ ð’˜ ð’› ð’  ð’£ 2 bottom of letters ð’€ ð’‚ ð’† ð’ˆ ð’Š ð’’ ð’  ð’© Table: `saur` (Saurashtra) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ê¢ ê¢› 2 bottom of letters ꢂ ꢨ ꢺ ꢤ ꢎ Table: `shaw` (Shavian) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ð‘• ð‘™ 2 bottom of letters 𑔠𑖠𑗠𑹠𑻠3 bottom of descenders of letters 𑟠𑣠4* top of small letters 𑱠𑲠𑳠𑴠𑸠𑺠𑼠5 bottom of small letters 𑴠𑻠𑹠Table: `sinh` (Sinhala) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ඉ à¶š à¶ à¶³ à¶´ ය à¶½ à·† 2 bottom of letters à¶‘ à¶” à¶ à¶¢ à¶§ à¶® à¶° à¶» 3 bottom of descenders of letters ද à¶³ à¶‹ à¶½ à¶­à·– à¶­à·” à¶¶à·” දු Table: `sund` (Sundanese) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ᮋ ᮞ á®® ᮽ á®° ᮈ 2 bottom of letters ᮄ á®” ᮕ á®— á®° ᮆ ᮈ ᮉ 3 bottom of descenders of letters ᮼ ᳄ Table: `taml` (Tamil) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters உ à®’ ஓ à®± ஈ க à®™ ச 2 bottom of letters க ச ல à®¶ உ à®™ ட ப Table: `tavt` (Tai Viet) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ꪆ ꪔ ꪒ ꪖ ꪫ 2 bottom of letters ꪉ ꪫ ꪮ Table: `telu` (Telugu) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters à°‡ à°Œ à°™ à°ž à°£ à°± ౯ 2 bottom of letters à°… à°• à°š à°° à°½ ౨ ౬ Table: `tfng` (Tifinagh) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters âµ” âµ™ âµ› ⵞ â´µ â´¼ â´¹ ⵎ 2 bottom of letters âµ” âµ™ âµ› ⵞ â´µ â´¼ â´¹ ⵎ Table: `thai` (Thai) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of letters บ เ ๠อ ภา 2 bottom of letters บ ป ษ ฯ อ ย ฮ 3 top of ascenders of letters ป ภฟ 4 top of large ascenders of letters โ ใ ไ 5 bottom of descenders of letters ฎ ภฤ ฦ 6 bottom of large descenders of letters ภภ7 top of Thai digits ๠๑ ๓ Table: `vaii` (Vai) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of vai letters ê— ê˜– ꘙ ꘜ ê–œ ê– ê”… ê•¢ 2 bottom of vai letters ê— ê˜– ꘙ ê—ž ê”… ê•¢ ê–œ ꔆ ![This image shows the relevant glyph terms for vertical blue zone positions.](img/glyph-terms) Grid Fitting ------------ Aligning outlines along the grid lines is called *grid fitting*. It doesn't necessarily mean that the outlines are positioned *exactly* on the grid, however, especially if you want a smooth appearance at different sizes. This is the central routine of the auto-hinter; its actions are highly dependent on the used writing system. Currently, only one writing system is available (latin), providing support for scripts like Latin or Greek. * Align edges linked to blue zones. * Fit edges to the pixel grid. * Align serif edges. * Handle remaining 'strong' points. Such points are not part of an edge but are still important for defining the shape. This roughly corresponds to the `IP` TrueType instruction. * Everything else (the 'weak' points) is handled with an 'IUP' instruction. The following images illustrate the hinting process, using glyph 'a' from the freely available font '[Ubuntu Book](http://font.ubuntu.com)'. The manual hints were added by [Dalton Maag Ltd], the used application to create the hinting debug snapshots was [FontForge]. ![Before hinting.](img/a-before-hinting.png) ![After hinting, using manual hints.](img/a-after-hinting.png) ![After hinting, using ttfautohint. Note that the hinting process doesn't change horizontal positions.](img/a-after-autohinting.png) Hint Sets --------- In ttfautohint terminology, a *hint set* is the *optimal* configuration for a given PPEM (pixel per EM) value. In the range given by the `--hinting-range-min` and `--hinting-range-max` options, ttfautohint creates hint sets for every PPEM value. For each glyph, ttfautohint automatically determines whether a new set should be emitted for a PPEM value if it finds that it differs from a previous one. For some glyphs it is possible that one set covers, say, the range 8px-1000px, while other glyphs need 10 or more such sets. In the PPEM range below `--hinting-range-min`, ttfautohint always uses just one set, in the PPEM range between `--hinting-range-max` and `--hinting-limit`, it also uses just one set. One of the hinting configuration parameters is the decision which segments form an edge. For example, let us assume that two segments get aligned on a single horizontal edge at 11px, while two edges are used at 12px. This change makes ttfautohint emit a new hint set to accomodate this situation. The next images illustrate this, using a Cyrillic letter (glyph 'afii10108') from the 'Ubuntu book' font, processed with ttfautohint. ![Before hinting, size 11px.](img/afii10108-11px-before-hinting.png) ![After hinting, size 11px. Segments 43-27-28 and 14-15 are aligned on a single edge, as are segments 26-0-1 and 20-21.](img/afii10108-11px-after-hinting.png) ![Before hinting, size 12px.](img/afii10108-12px-before-hinting.png) ![After hinting, size 12px. The segments are not aligned. While segments 43-27-28 and 20-21 now have almost the same horizontal position, they don't form an edge because the outlines passing through the segments point into different directions.](img/afii10108-12px-after-hinting.png) Obviously, the more hint sets get emitted, the larger the bytecode ttfautohint adds to the output font. To find a good value\ *n* for `--hinting-range-max`, some experimentation is necessary since *n* depends on the glyph shapes in the input font. If the value is too low, the hint set created for the PPEM value\ *n* (this hint set gets used for all larger PPEM values) might distort the outlines too much in the PPEM range given by\ *n* and the value set by `--hinting-limit` (at which hinting gets switched off). If the value is too high, the font size increases due to more hint sets without any noticeable hinting effects. Similar arguments hold for `--hinting-range-min` except that there is no lower limit at which hinting is switched off. An example. Let's assume that we have a hinting range 10\ <= ppem <=\ 100, and the hinting limit is set to 250. For a given glyph, ttfautohint finds out that four hint sets must be computed to exactly cover this hinting range: 10-15, 16-40, 41-80, and 81-100. For PPEM values below 10ppem, the hint set covering 10-15ppem is used, for PPEM values larger than 100 the hint set covering 81-100ppem is used. For PPEM values larger than 250, no hinting gets applied. Composite Glyphs ---------------- The ttfautohint library (and programs) supports two solutions for handling composite glyphs, to be controlled with option [`--composites`](#hint-composites). This section contains some general information, then covers the case where the option is off, while the next section describes how ttfautohint behaves if this option is activated. Regardless of the `--composites` option, ttfautohint performs a scan over all composite glyphs to assure that components of a composite glyph inherit its style, as described [later](#opentype-features). However, components that are shifted vertically will be skipped. For example, if the glyph 'Agrave' uses a shifted 'grave' accent glyph, the accent is ignored. On the other hand, if there is a glyph 'agrave' that uses the same 'grave' glyph vertically unshifted, 'grave' does inherit the style. If `--composites` is off, components are hinted separately, then put together. Separate hinting implies that the current style's blue zones are applied to all subglyphs in its original, unshifted positions. In case you want to shift components vertically, it is *mandatory* to set bit\ 2 (value\ 4), `ROUND_XY_TO_GRID`, in the flag variable of the composite glyph description to get visually pleasing results, as the images below demonstrate. ![Here, the subscript glyphs are composites each having a single element that is shifted down. If option `--composites` is not used, subglyphs are hinted before they are glued together (possibly applying scaling and shifting). Because the `ROUND_XY_TO_GRID` flag isn't set, the vertical translation doesn't align the subglyph to the pixel grid, causing severe distortions.](img/composite-no-round-xy-to-grid.png) ![The same as before, but with `ROUND_XY_TO_GRID` set. Now the subscript glyphs look identical to the superscripts.](img/composite-round-xy-to-grid.png) ![For comparison purposes, here the result *with* option `--composites` (and no `ROUND_XY_TO_GRID`). The composite glyphs as a whole get hinted; consequently, the subscript glyphs get separate blue zones. At the displayed size of 16ppem the vertical positions of the subscript blue zones are rounded differently if compared to the superscript zones, thus the smaller glyph height.](img/composite-no-round-xy-to-grid-option-c.png) The '\.ttfautohint' Glyph ------------------------- If option [`--composites`](#hint-composites) is used, ttfautohint doesn't hint subglyphs of composite glyphs separately. Instead, it hints the whole glyph, this is, composites get recursively expanded internally so that they form simple glyphs, then hints are applied -- this is the normal working mode of FreeType's auto-hinter. One problem, however, must be solved: Hinting for subglyphs (which usually are used as normal glyphs also) must be deactivated so that nothing but the final bytecode of the composite gets executed. The trick used by ttfautohint is to prepend a composite element called '\.ttfautohint', a dummy glyph with a single point, and which has a single job: Its bytecode increases a variable (to be more precise, it is a CVT register called `cvtl_is_subglyph` in the source code), indicating that we are within a composite glyph. The final bytecode of the composite glyph eventually decrements this variable again. As an example, let's consider composite glyph 'Agrave' ('À'), which has the subglyph 'A' as the base and 'grave' as its accent. After processing with ttfautohint it consists of three components: '\.ttfautohint', 'A', and 'grave' (in this order). Bytecode of Action ------------- -------- .ttfautohint increase `cvtl_is_subglyph` (now: 1) A do nothing because `cvtl_is_subglyph` > 0 grave do nothing because `cvtl_is_subglyph` > 0 Agrave decrease `cvtl_is_subglyph` (now: 0) apply hints because `cvtl_is_subglyph` == 0 Some technical details (which you might skip): All glyph point indices get adjusted since each '\.ttfautohint' subglyph shifts all following indices by one. This must be done for both the bytecode and one subformat of OpenType's `GPOS` anchor tables. While this approach works fine on all tested platforms, there is one single drawback: Direct rendering of the '\.ttfautohint' subglyph (this is, rendering as a stand-alone glyph) disables proper hinting of all glyphs in the font! Under normal circumstances this never happens because '\.ttfautohint' doesn't have an entry in the font's `cmap` table. (However, some test and demo programs like FreeType's `ftview` application or other glyph viewers that are able to bypass the `cmap` table might be affected.) Writing Systems --------------- In FreeType terminology, a writing system is a set of functions that provides auto-hinting for certain scripts. Right now, only two writing systems from FreeType's auto-hinter are available in ttfautohint: 'dummy' and 'latin'. The former handles the 'no-script' case; details to 'latin' follow in the next section. Scripts ------- ttfautohint needs to know which script should be used to hint a specific glyph. To do so, it checks a glyph's Unicode character code whether it belongs to a given script. See '[Character Ranges](#character-ranges)' for a complete list of all handled scripts and its ranges. This list is auto-generated from a source code file, covering the 'latin' writing system. It also covers some non-latin scripts (in the Unicode sense) that have similar typographical properties. In ttfautohint, scripts are identified by four-character tags (if there are less characters, spaces are appended). The value `none` indicates 'no script'. Each script is represented by two tables to handle 'base' and 'non-base' characters. For ttfautohint, a non-base character is something that should not be affected by blue zones, regardless of whether this is a spacing or no-spacing glyph. In other words, non-base characters are hinted using a script's default stem width without applying blue zones. Right now, there are two pseudo-scripts that are used as fallbacks: `latb` and `latp`, used for latin subscript and superscript characters, respectively. Its main usage is support of phonetic alphabets like the IPA, which intermix those characters with normal characters sitting on the baseline, and which are not specially handled in corresponding OpenType features like `sups`. If a glyph's character code is not covered by a script range, it is handled by a *fallback script*. By default, the fallback script is `none`, which indicates handling by the 'latin' writing system without applying script-specific blue zones (but aligning stems to the grid if possible). The fallback script can be changed; see option [`--fallback-script`](#fallback-script). The user can also select whether uncovered glyphs are either hinted (which is the default) or scaled only with the fallback script's scaling parameters. This can be controlled with option [`--fallback-scaling`](#fallback-script). Note that fallback scaling only makes sense if the fallback script has x\ height blue zones, e.g., `cyrl` or `latn`. As a special case, specifying `none` as a fallback script and switching on fallback scaling ('`-f none -S`'), no hinting is applied at all to uncovered glyphs – using `none` always implies a scaling factor of\ 1. OpenType Features ----------------- (Please read the [OpenType specification] for details on *features*, `GSUB`, and `GPOS` tables, and how they relate to scripts.) For modern OpenType fonts, character ranges are not sufficient to handle scripts. * Due to glyph substitution in the font (as specified in a font's `GSUB` table), which handles ligatures and similar typographic features, there is no longer a one-to-one mapping from an input Unicode character to a glyph index. Some ligatures, like 'fi', actually do have Unicode values for historical reasons, but most of them don't. While it is possible to map ligature glyphs into Unicode's Private Use Area (PUA), code values from this area are arbitrary by definition and thus unusable for ttfautohint. * Some features like `sups` (for handling superscript) completely change the appearance and even vertical position of the affected glyphs. Obviously, the blue zones for 'normal' glyphs no longer fit, thus the auto-hinter puts them into a separate group (called *style* in FreeType speak), having its own set of blue zones. Table: OpenType features handled specially by ttfautohint Feature tag Description --------------- ------------- `c2cp` petite capitals from capitals `c2sc` small capitals from capitals `ordn` ordinals `pcap` petite capitals `sinf` scientific inferiors `smcp` small capitals `subs` subscript `sups` superscript `titl` titling There are two conditions to get a valid style for a feature in a given script. 1. One of the script's standard characters must be available in the feature. 2. The feature must provide characters to form at least one blue zone; see [above](#blue-zones). An additional complication is that features from the above table might use data not only from the `GSUB` but also from the `GPOS` table, containing information for glyph positioning. For example, the `sups` feature for superscripts might use the same glyphs as the `subs` feature for subscripts, simply moved up. ttfautohint skips such vertically shifted glyphs (except for accessing standard characters) because glyph positioning happens after hinting. Continuing our example, the `sups` feature wouldn't form a style, contrary to `subs`, which holds the unshifted glyphs. The remaining OpenType features of a script are not handled specially; the affected glyphs are simply hinted together with the 'normal' glyphs of the script. Note that a font might still contain some features not covered yet: OpenType has the concept of a *default script*; its data gets used for all scripts that aren't explicitly handled in a font. By default, ttfautohint unifies all affected glyphs from default script features with the `latn` script. This can be changed with option [`--default-script`](#default-script), if necessary. ttfautohint uses the [HarfBuzz] library for handling OpenType features. SFNT Tables ----------- ttfautohint touches almost all SFNT tables within a TrueType or OpenType font. Note that only OpenType fonts with TrueType outlines are supported. OpenType fonts with a `CFF` or `CFF2` table (this is, with PostScript outlines) won't work. * `glyf`: All hints in the table are replaced with new ones. If option [`--composites`](#hint-composites) is used, one glyph gets added (namely the '\.ttfautohint' glyph) and all composites get an additional component. * `cvt`, `prep`, and `fpgm`: These tables get replaced with data necessary for the new hinting bytecode. * `gasp`: Set up to always use grayscale rendering, for all sizes, with grid-fitting for standard hinting, and symmetric grid-fitting and symmetric smoothing for horizontal subpixel hinting (ClearType). * `DSIG`: If it exists, it gets replaced with a dummy version. ttfautohint can't digitally sign a font; you have to do that afterwards. * `name`: The 'version' entries are modified to add information about the parameters that have been used for calling ttfautohint. This can be controlled with the [`--no-info`](#ttfautohint-info) option. Family name entries might also be affected by option [`--family-suffix`](#family-suffix). * `GPOS`, `hmtx`, `loca`, `head`, `maxp`, `post`: Updated to fit the additional '\.ttfautohint' glyph, the additional subglyphs in composites, and the new hinting bytecode. * `LTSH`, `hdmx`: Since ttfautohint doesn't do any horizontal hinting, those tables are superfluous and thus removed. * `VDMX`: Removed, since it depends on the original bytecode, which ttfautohint removes. A font editor might recompute the necessary data later on. Problems -------- ### Interaction With FreeType Some versions of FreeType have an experimental extension for handling subpixel hinting; it is off by default and can be activated by setting the macro `TT_CONFIG_OPTION_SUBPIXEL_HINTING` to value\ 2 or\ 3 at compile time. This code has been contributed mainly by [Infinality], being a subset of his original patch. Many GNU/Linux distributions activate this code, or provide packages to activate it. [Note that starting with FreeType version 2.7 the Infinality extension is still available but superseded by a less aggressive subpixel hinting mode, to which the explanations in this section don't apply.] This extension changes the behaviour of many bytecode instructions to get better rendering results. However, not all changes are global; some of them are specific to certain fonts. For example, it contains font-specific improvements for the '[DejaVu] Sans' font family. The list of affected fonts is hard-coded; it can be found in FreeType's source code file `ttsubpix.c`. If you are going to process such specially-handled fonts with ttfautohint, serious rendering problems might show up. Since ttfautohint (intentionally) doesn't change the font name in the `name` table, the Infinality extension has no chance to recognize that the hints are different. All such problems vanish if the font gets renamed in its `name` table (the name of the font file itself doesn't matter), for example, by using option [`--family-suffix`](#family-suffix). ### Incorrect Unicode Character Map Fonts with an incorrect Unicode `cmap` table will not be properly hinted by ttfautohint. Especially older fonts do cheat; for example, there exist Hebrew fonts that map its glyphs to character codes 'A', 'B', etc., to make them work with non-localized versions of Windows\ 98, say. Since ttfautohint needs to find both standard and blue zone characters, it relies on correct Unicode values. If you want to handle such fonts, please fix their `cmap` tables accordingly before running ttfautohint. ### Irregular Glyph Heights The central concept of ttfautohint's hinting algorithm as discussed [above](#segments-and-edges) is to identify horizontal segments at extremum positions, especially for blue zones. If such a segment is missing, it cannot be associated with a blue zone, possibly leading to irregular heights for the particular glyph. Normally, a segment has a horizontal length of at least 20\ font units (assuming 2048 units per EM)^[To be more precise, the sum of the height and length of a segment must be at least 20 font units, and the height multiplied by\ 14 must not exceed the length. Thus (19,1) is also a valid minimum (length,height) pair, while (18,2) isn't. The value\ 20 is heuristic and hard-coded, as is the value\ 14 (corresponding to a slope of approx. 4.1°).]. Using a [Control Instructions File](#control-instructions-file), however, it is possible to define additional segments at arbitrary points that help overcome this restriction, making it possible to fix (most of) such problems. ### Diagonals ttfautohint doesn't handle diagonal lines specially. For thin outlines, this might lead to strokes that look too thick at smaller sizes. A font designer might compensate this to a certain amount by slightly reducing the stroke width of diagonal lines. However, in many cases the sub-optimal appearance of a stroke with borders that don't exactly fit the pixel grid is not the outline itself but an incorrect gamma value of the monitor: People tend to not properly adjust it, and the default values of most operating systems are too low, causing too much darkening of such strokes. It is thus of vital importance to compare ttfautohint's results with similar fonts to exclude any systematic effect not related to the outlines themselves. Extending ttfautohint with new scripts -------------------------------------- Right now, adding new scripts to ttfautohint only works on the source code level, this is, you have to patch the C\ source code. The process itself isn't very complicated; it is demonstrated best by example. The following commits in ttfautohint add Ethiopian and Armenian, respectively. | [http://repo.or.cz/ttfautohint.git/commitdiff/d14c7c07](http://repo.or.cz/ttfautohint.git/commitdiff/d14c7c07) | [http://repo.or.cz/ttfautohint.git/commitdiff/b5022cd9](http://repo.or.cz/ttfautohint.git/commitdiff/b5022cd9) It shows that you have to do the following steps. * Add blue zone character data to the file `lib/tablue.dat`. * Add the proper Unicode ranges to `lib/taranges.c`, following the structure of similar entries. * Similarly, the files `lib/tastyles.h` and `lib/ttfautohint-script.h` must be updated. The latter holds the information on the used default character or characters; it also references the corresponding script tag `HB_SCRIPT_XXX` as used by the HarfBuzz library. If there are any questions, please contact the [FreeType mailing list](https://lists.nongnu.org/mailman/listinfo/freetype) for help. Note that the script data in ttfautohint are hold in sync with FreeType's auto-hinter. Control Instructions ==================== An entry in a control instructions file has various syntax forms, which are discussed here. Brackets indicate optional elements. Common Syntax Elements ---------------------- *font‑idx* gives the index of the font in a TrueType Collection, starting with value\ 0. If missing, it is set to zero. For normal TrueType fonts, only value zero is valid. A font index can be specified in decimal, octal, or hexadecimal format, the latter two indicated by the prefixes `0` and `0x`, respectively. *glyph‑id* is either a glyph's name as listed in the font's `post` SFNT table or a glyph index. A glyph name consists of characters from the set '`A-Za-z0-9._`' only and does not start with a digit or period, with the exceptions of the names '`.notdef`' and '`.null`'. A glyph index starts with value\ 0 can be specified in decimal, octal, or hexadecimal format, the latter two indicated by the prefixes `0` and `0x`, respectively. Glyph names are internally converted to glyph indices. *points* are number ranges, see '[x Height Snapping Exceptions](#x-height-snapping-exceptions)' for the syntax. Similar to the Bourne shell (`sh` or `bash`), a comment starts with character '`#`'; the rest of the line is ignored. An empty line is ignored also. Both the newline character and '`;`' can be used as a separator between exception entries. A trailing '`\`' at the end of a line continues the current line on the next one. A control instructions file is parsed line by line; later entries override earlier entries (in case there is something to override). Style Adjustments ----------------- This syntax form makes it possible to override the style assignment algorithm of ttfautohint; see '[Scripts](#scripts)' and '[OpenType Features](#opentype-features)' for more details. > *\[*\ font-idx\ *\]*\ \ script\ \ feature\ \ *`@`*\ \ glyph-ids *script* is a four-letter name^[The notable exception is the tag 'lao', which originally has a trailing space as the fourth character. However, ttfautohint ignores the space.] of one of the scripts supported by ttfautohint. *feature* is one of the four-letter names of features supported by ttfautohint. The elements of *glyph-ids* are a list of comma separated *glyph-id* values or value ranges. Note that is not necessary that elements are specified in increasing order. Assuming that a font contains superscript digits 'zero.sups' to 'nine.sups' together with the glyphs 'a.sups' and 'o.sups', use a line ``` cyrl sups @ zero.sups-nine.sups, a.sups, o.sups ``` to add those glyphs to the style handling Cyrillic superscript glyphs. However, it is still necessary that the selected script contains proper [Blue Zone characters](#blue-zones), otherwise those glyphs aren't handled at all. Use the `--debug` command line option to see how ttfautohint assigns glyph indices of a font to styles. Stem Width Adjustments ---------------------- Use the following syntax form to adjust stem width values for a given style, overriding ttfautohint's algorithm; see '[Scripts](#scripts)' and '[OpenType Features](#opentype-features)' for more details. This adjustment doesn't change the glyph shapes; it only influences the hinting process. > *\[*\ font-idx\ *\]*\ \ script\ \ feature\ \ *`w[idth]`*\ \ stem-widths *script* and *feature* are the same as with style adjustments; see above. However, *script* can additionally be the wildcard character '`*`', which indicates 'any script'. Parameter `width` can be abbreviated as '`w`'. *stem-widths* is an unsorted list of comma separated integer stem width values (in font units); the first value gives the style's default stem width. The effect of this adjustment depends [on the selected stem width algorithm](#stem-width-and-positioning-mode). For smooth stem width positioning, only the first (i.e., the default) value is used; it gets a higher preference than other discrete stem width choices. For strong stem width positioning, the stem widths are snapped to the provided values (if not differing too much) before rounding to an integer pixel value. For natural stem width positioning, this adjustment is ignored. A typical example is to reduce the default stem width of an extra-bold font, which gets better hinted if a stem width of, say, 100 is used instead of the default value 150. Let's also assume that the font further contains latin subscript and superscript characters that are hinted best with a stem width set to 80 font units. We can achieve this with the following lines in a control instructions file. ``` * dflt width 100 latb dflt width 80 latp dflt width 80 ``` Without the adjustment chances are very high that the 'eyes' in glyphs 'e' or 'a' of extra-bold fonts are filled at smaller PPEM values. Use the `--debug` command line option to see how ttfautohint assigns stem widths to styles by default. Glyph Adjustments ----------------- The following syntax forms allows adjustments of a glyph's hinting process. ### Change Direction of Points, Artificial Segments > *\[*\ font‑idx\ *\]*\ \ glyph‑id\ \ *`l`\[`eft`\]|`r`\[`ight`\]*\ \ points\ \ *\[*\ *`(`*\ left‑offset\ *`,`*\ right‑offset\ *`)`*\ *\]*\ The mutually exclusive parameters `left` and `right` (which can be abbreviated as '`l`' and '`r`', respectively) indicate that the following points have left or right 'out' direction, respectively, overriding ttfautohint's algorithm for setting point directions. The 'out direction' of a point is the direction of the outline *leaving* the point (or passing the control point). If the specified direction is identical to what ttfautohint computes, nothing special happens. Otherwise, a one-point segment with the specified direction gets created, see [above](#segments-and-edges). By default, its length is zero. Setting *left‑offset* and *right‑offset*, you can change the segment's horizontal start and end position relative to the point position. *left‑offset* and *right‑offset* are integers measured in font units. The following five images, displaying glyphs 'O' and 'Q' from the font [Halant-Regular](http://www.google.com/fonts/specimen/Halant), demonstrate how to use direction changes. ![The outlines of glyphs 'O' and 'Q', as displayed in FontForge. They are sufficiently similar to expect that ttfautohint hints them equally. However, this is not the case.](img/Halant-Regular-O-Q.png) ![The same glyphs, shown at 12px before hinting. [Please ignore the outline distortion in the upper right of glyph 'O'; this is a bug in FontForge while running the TrueType debugger.]](img/Halant-Regular-O-Q-unhinted-12px.png) ![Using only ttfautohint's '`-a sss`' parameter to force strong stem width and positioning, the hinting of glyph 'Q' is really bad, making the glyph vertically two pixels larger! Reason is that this glyph doesn't contain a horizontal segment at the baseline blue zone (*y*\ =\ 1; this corresponds to the segment 13-14 in the 'O' glyph). Normally, segment 1-2 would form a 'stem' with the baseline segment (as segment 7-8 does in glyph 'O'). Instead, it forms a stem with segment 19-20, which gets moved down (*y*\ =\ −1) because the whole glyph appears to be stretched.](img/Halant-Regular-O-good-Q-badly-hinted-12px.png) ![To fix the problem, we change the direction of point\ 38 to 'left' by writing a line '`Q left 38`' (without the quotes) to a control description file `Halant-Regular.txt`. Adding option '`-m Halant-Regular.txt`' to ttfautohint, we get the shown image as a result, which is much better: Segment 1-2 now properly forms a stem with our artificial one-point segment\ 38, and the 'O'-like shape is properly positioned. However, there is still room for improvement: Segment 19-20 is also positioned at the baseline, making the connection between the 'O' shape and the tail too thin.](img/Halant-Regular-O-good-Q-better-hinted-12px.png) ![By giving the one-point segment\ 38 a horizontal width, we can prevent that segment 19-20 gets positioned at the baseline: Replace the line in the previous image description with '`Q left 38 (−70,20)`', making the segment extend 70 font units to the left and 20 to the right of point\ 38. The exact offset values don't matter; it's only important to start left of point\ 19. Another solution to the problem is to artificially change the direction of segment 19-20 by adding a second line '`Q right 19-20`' to the control instructions file; for our 'Q' glyph, this produces almost exactly the same hinting results. Note that such direction changes only influence the hinting process; an outline's direction won't be changed at all.](img/Halant-Regular-O-good-Q-well-hinted-12px.png) ### Unset Direction of Points > *\[*\ font‑idx\ *\]*\ \ glyph‑id\ \ *`n`\[`odir`\]*\ \ points\ Parameter `nodir` (or '`n`') sets the 'out' direction of the following points to 'no direction', this is, neither left nor right. If the specified direction is identical to what ttfautohint computes, nothing special happens. Otherwise, ttfautohint no longer considers those points as part of horizontal segments, thus treating them as ['weak'](#grid-fitting) points. Modifying or adding segments doesn't directly modify the outlines; it only influences the hinting process. ### Delta Exceptions > *\[*\ font‑idx\ *\]*\ \ glyph‑id\ \ *`t`\[`ouch`\]|`p`\[`oint`\]*\ \ points\ \ *\[*\ *`x`\[`shift`\]*\ x‑shift\ *\]*\ \ *\[*\ *`y`\[`shift`\]*\ y‑shift\ *\]*\ \ *`@`*\ \ ppems\ The mutually exclusive parameters `touch` and `point` (which can be abbreviated as '`t`' and '`p`', respectively) make ttfautohint apply delta exceptions for the given points, shifting them by the given values. Delta exceptions entered with `touch` are applied before the final 'IUP' (*interpolate untouched points*) instructions in a glyph's bytecode, exceptions entered with `point` after 'IUP' (please consult Greg Hitchcock's [ClearType Whitepaper] for more on pre-IUP and post-IUP delta hints). Additionally, the `touch` parameter makes the bytecode *touch* the affected points; such points are no longer affected by 'IUP' at all. Note that in ClearType mode all deltas along the x\ axis are discarded, and deltas along the y\ axis are only executed for touched points. As a consequence, vertical delta exceptions entered with `point` should not be used in ClearType mode.^[Unfortunately, there is a bug in FreeType prior to version 2.5.4 (released in December 2014) that completely disables vertical delta exceptions if subpixel hinting is activated. For this reason you should expect that the `touch` parameter fails on older GNU/Linux distributions.] *ppems*, similar to *points*, are number ranges, see '[x Height Snapping Exceptions](#x-height-snapping-exceptions)' for the syntax. *x‑shift* and *y‑shift* represent real numbers that get rounded to multiples of 1/8 pixels. The entries for `xshift` ('`x`') and `yshift` ('`y`') are optional; if missing, the corresponding value is set to zero. If both values are zero, the delta exception entry is ignored as a whole. Values for *x‑shift* and *y‑shift* must be in the range [−1.0;1.0]. Values for *ppems* must be in the range [6;53]. Values for *points* are limited by the number of points in the glyph. Note that only character '`.`' is recognized as a decimal point, and a thousands separator is not accepted. As an example for delta instructions, let's assume that you want to shift points 2, 3, and\ 4 in glyph 'Aacute' at PPEM sizes 12 and\ 13 by a vertical amount of 0.25 pixels. This corresponds to the line ``` Aacute touch 2-4 yshift 0.25 @ 12, 13 ``` in a control instructions file. Since we use `touch` and not `point`, points 2, 3, and\ 4 are no longer subject to the final 'IUP' instruction, which interpolates weak, untouched point positions between strong, touched ones, cf. the description [here](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM05/Chap5.html#IUP). The ttfautohint API =================== This section documents the public functions of the ttfautohint library together with its callback functions. All information has been directly extracted from the `ttfautohint.h` header file. Preprocessor Macros, Typedefs, and Enums ---------------------------------------- Some default values. ```C #define TA_HINTING_RANGE_MIN 8 #define TA_HINTING_RANGE_MAX 50 #define TA_HINTING_LIMIT 200 #define TA_INCREASE_X_HEIGHT 14 ``` An error type. ```C typedef int TA_Error; ``` An enum type for stem width algorithm selection. ```C enum { TA_STEM_WIDTH_MODE_NATURAL = -1, TA_STEM_WIDTH_MODE_QUANTIZED = 0, TA_STEM_WIDTH_MODE_STRONG = 1 }; ``` Function Pointer: `TA_Alloc_Func` --------------------------------- A pointer to a function provided by the calling application to allocate memory. The ttfautohint library uses this for allocating the buffer given by the `out-buffer` field of [`TTF_autohint`](#function-ttf_autohint) and for allocating the `str` buffer in the [`TA_Info_Func`](#callback-ta_info_func) callback. The signature is identical to standard\ C's `malloc` function (in header file `stdlib.h`). ```C typedef void * (*TA_Alloc_Func)(size_t size); ``` Function Pointer: `TA_Free_Func` -------------------------------- A pointer to a function provided by the calling application to free memory allocated with [`TA_Alloc_Func`](#function-pointer-ta_alloc_func). The ttfautohint library calls this for deallocating the `str` buffers in the [`TA_Info_Func`](#callback-ta_info_func) callback after they have been used. The signature is identical to standard\ C's `free` function (in header file `stdlib.h`). ```C typedef void (*TA_Free_Func)(void *ptr); ``` Callback: `TA_Progress_Func` ---------------------------- A callback function to get progress information. *curr_idx* gives the currently processed glyph index; if it is negative, an error has occurred. *num_glyphs* holds the total number of glyphs in the font (this value can't be larger than 65535). *curr_sfnt* gives the current subfont within a TrueType Collection (TTC), and *num_sfnts* the total number of subfonts. If the return value is non-zero, `TTF_autohint` aborts with `TA_Err_Canceled`. Use this for a 'Cancel' button or similar features in interactive use. *progress_data* is a void pointer to user-supplied data. ```C typedef int (*TA_Progress_Func)(long curr_idx, long num_glyphs, long curr_sfnt, long num_sfnts, void* progress_data); ``` Callback: `TA_Error_Func` ------------------------- A callback function to get error information. *error* is the value `TTF_autohint` returns. See file `ttfautohint-errors.h` for a list. Error codes not in this list are directly taken from FreeType; see the FreeType header file `fterrdef.h` for more. *error_string*, if non-NULL, is a pointer to an error message that represents *error*. The next three parameters help identify the origin of text string parsing errors. *linenum*, if non-zero, contains the line number. *line*, if non-NULL, is a pointer to the input line that can't be processed. *errpos*, if non-NULL, holds a pointer to the position in *line* where the problem occurs. *error_data* is a void pointer to user-supplied data. ```C typedef void (*TA_Error_Func)(TA_Error error, const char* error_string, unsigned int linenum, const char* line, const char* errpos, void* error_data); ``` Callback: `TA_Info_Func` ------------------------ A callback function to access or modify strings in the `name` table; it is called in a loop that iterates over all `name` table entries. If defined, [`TA_Info_Post_Func`](#callback-ta_info_post_func) gets executed after this loop so that the collected data can be written back to the `name` table. *platform_id*, *encoding_id*, *language_id*, and *name_id* are the identifiers of a `name` table entry pointed to by *str* with a length pointed to by *str_len* (in bytes; the string has no trailing NULL byte). Please refer to the [OpenType specification of the `name` table] for a detailed description of the various parameters, in particular which encoding is used for a given platform and encoding ID. [OpenType specification of the `name` table]: http://www.microsoft.com/typography/otspec/name.htm The string *str* is allocated with the function specified by the `alloc-func` field of [`TTF_autohint`](#function-ttf_autohint); the application should reallocate the data if necessary, ensuring that the string length doesn't exceed 0xFFFF. *info_data* is a void pointer to user-supplied data. If an error occurs, return a non-zero value and don't modify *str* and *str_len* (such errors are handled as non-fatal). ```C typedef int (*TA_Info_Func)(unsigned short platform_id, unsigned short encoding_id, unsigned short language_id, unsigned short name_id, unsigned short* str_len, unsigned char** str, void* info_data); ``` Callback: `TA_Info_Post_Func` ----------------------------- A callback function, giving the application the possibility to access or modify strings in the `name` table after [`TA_Info_Func`](#callback-ta_info_func) has iterated over all `name` table entries. It is expected that `TA_Info_Func` stores pointers to the `name` table entries it wants to access or modify; the only parameter is thus *info_data*, which is a void pointer to the user-supplied data already provided to `TA_Info_Func`. Obviously, calling `TA_Info_Post_Func` with `TA_Info_Func` undefined has no effect. The `name` table strings are allocated with the function specified by the `alloc-func` field of [`TTF_autohint`](#function-ttf_autohint); the application should reallocate the data if necessary, ensuring that no string length exceeds 0xFFFF. If an error occurs, return a non-zero value and don't modify the affected string and string length (such errors are handled as non-fatal). ```C typedef int (*TA_Info_Post_Func)(void* info_data); ``` Function: `TTF_autohint` ------------------------ Read a TrueType font, remove existing bytecode (in the SFNT tables `prep`, `fpgm`, `cvt `, and `glyf`), and write a new TrueType font with new bytecode based on the autohinting of the FreeType library, optionally using a reference font to derive blue zones. It expects a format string *options* and a variable number of arguments, depending on the fields in *options*. The fields are comma separated; whitespace within the format string is not significant, a trailing comma is ignored. Fields are parsed from left to right; if a field occurs multiple times, the last field's argument wins. The same is true for fields that are mutually exclusive. Depending on the field, zero or one argument is expected. Note that fields marked as 'not implemented yet' are subject to change. ### Memory Management The next two fields are necessary on some platforms if ttfautohint is compiled as a shared library, and the application uses a different runtime library. This can happen, for example, on the MS Windows platform if your program is written in Python and communicates via [the 'ctypes' interface](https://docs.python.org/3/library/ctypes.html) with the ttfautohint DLL. `alloc-func` : A pointer of type [`TA_Alloc_Func`](#function-pointer-ta_alloc_func) specifying a memory allocation function. It gets used to allocate the buffer given by the `out-buffer` field and the data exposed by the [`TA_Info_Func`](#callback-ta_info_func) callback. If not set or set to NULL, or if `out-buffer` is not set or set to NULL, standard\ C's `malloc` function is used. `free-func` : A pointer of type [`TA_Free_Func`](#function-pointer-ta_free_func) specifying a memory deallocation function. It gets called to free the data exposed by the [`TA_Info_Func`](#callback-ta_info_func) callback after it has been used. If not set or set to NULL, or if `out_buffer` is not set or set to NULL, standard\ C's `free` function is used. ### I/O `in-file` : A pointer of type `FILE*` to the data stream of the input font, opened for binary reading. Mutually exclusive with `in-buffer`. `in-buffer` : A pointer of type `const char*` to a buffer that contains the input font. Needs `in-buffer-len`. Mutually exclusive with `in-file`. `in-buffer-len` : A value of type `size_t`, giving the length of the input buffer. Needs `in-buffer`. `out-file` : A pointer of type `FILE*` to the data stream of the output font, opened for binary writing. Mutually exclusive with `out-buffer`. `out-buffer` : A pointer of type `char**` to a buffer that contains the output font. Needs `out-buffer-len`. Mutually exclusive with `out-file`. The application should deallocate the memory with the function given by `free-func`. `out-buffer-len` : A pointer of type `size_t*` to a value giving the length of the output buffer. Needs `out-buffer`. `control-file` : A pointer of type `FILE*` to the data stream of control instructions. Mutually exclusive with `control-buffer`. See '[Control Instructions](#control-instructions)' for the syntax used in such a file or buffer. `control-buffer` : A pointer of type `const char*` to a buffer that contains control instructions. Needs `control-buffer-len`. Mutually exclusive with `control-file`. `control-buffer-len` : A value of type `size_t`, giving the length of the control instructions buffer. Needs `control-buffer`. `reference-file` : A pointer of type `FILE*` to the data stream of the reference font, opened for binary reading. Mutually exclusive with `reference-buffer`. `reference-buffer` : A pointer of type `const char*` to a buffer that contains the reference font. Needs `reference-buffer-len`. Mutually exclusive with `reference-file`. `reference-buffer-len` : A value of type `size_t`, giving the length of the reference buffer. Needs `reference-buffer`. `reference-index` : The face index to be used in the reference font. The default value is\ 0. `reference-name` : A string that specifies the name of the reference font. It is only used to emit a sensible value for the `TTFA` table if `TTFA-info` is set. ### Messages and Callbacks `progress-callback` : A pointer of type [`TA_Progress_Func`](#callback-ta_progress_func), specifying a callback function for progress reports. This function gets called after a single glyph has been processed. If this field is not set or set to NULL, no progress callback function is used. `progress-callback-data` : A pointer of type `void*` to user data that is passed to the progress callback function. `error-string` : A pointer of type `unsigned char**` to a string (in UTF-8 encoding) that verbally describes the error code. You must not change the returned value. `error-callback` : A pointer of type [`TA_Error_Func`](#callback-ta_error_func), specifying a callback function for error messages. This function gets called right before `TTF_autohint` exits. If this field is not set or set to NULL, no error callback function is used. Use it as a more sophisticated alternative to `error-string`. `error-callback-data` : A point of type `void*` to user data that is passed to the error callback function. `info-callback` : A pointer of type [`TA_Info_Func`](#callback-ta_info_func), specifying a callback function for manipulating the `name` table. This function gets called for each `name` table entry. If not set or set to NULL, `TA_Info_Func` is not called. `info-post-callback` : A pointer of type [`TA_Info_Post_Func`](#callback-ta_info_post_func), specifying a callback function for manipulating the `name` table. It is called after the function specified with `info-callback` has iterated over all `name` table entries. If not set or set to NULL, `TA_Info_Post_Func` is not called. `info-callback-data` : A pointer of type `void*` to user data that is passed to the info callback functions. `debug` : If this integer is set to\ 1, lots of debugging information is print to stderr. The default value is\ 0. ### General Hinting Options `hinting-range-min` : An integer (which must be larger than or equal to\ 2) giving the lowest PPEM value used for autohinting. If this field is not set, it defaults to [`TA_HINTING_RANGE_MIN`](#preprocessor-macros-typedefs-and-enums). `hinting-range-max` : An integer (which must be larger than or equal to the value of `hinting-range-min`) giving the highest PPEM value used for autohinting. If this field is not set, it defaults to [`TA_HINTING_RANGE_MAX`](#preprocessor-macros-typedefs-and-enums). `hinting-limit` : An integer (which must be larger than or equal to the value of `hinting-range-max`) that gives the largest PPEM value at which hinting is applied. For larger values, hinting is switched off. If this field is not set, it defaults to [`TA_HINTING_LIMIT`](#preprocessor-macros-typedefs-and-enums). If it is set to\ 0, no hinting limit is added to the bytecode. `hint-composites` : If this integer is set to\ 1, composite glyphs get separate hints. This implies adding a special glyph to the font called ['.ttfautohint'](#the-.ttfautohint-glyph). Setting it to\ 0 (which is the default), the hints of the composite glyphs' components are used. Adding hints for composite glyphs increases the size of the resulting bytecode a lot, but it might deliver better hinting results. However, this depends on the processed font and must be checked by inspection. `adjust-subglyphs` : An integer (1\ for 'on' and 0\ for 'off', which is the default) to specify whether native TrueType hinting of the *input font* shall be applied to all glyphs before passing them to the (internal) autohinter. The used resolution is the em-size in font units; for most fonts this is 2048ppem. Use this only if the old hints move or scale subglyphs independently of the output resolution, for example some exotic CJK fonts. `pre-hinting` is a deprecated alias name for this option. ### Hinting Algorithms ttfautohint provides three different algorithms for computing horizontal stem widths and the positioning of blue zones. * `TA_STEM_WIDTH_MODE_NATURAL`: No adjustments to stem widths, discrete blue zone positioning. This is what FreeType uses for its 'light' (auto-)hinting mode. * `TA_STEM_WIDTH_MODE_QUANTIZED`: Both stem widths and blue zone positions are slightly quantized to take discrete values. For example, stem values 50, 51, 72, 76, and 100 would become 50, 74, and 100 (or something similar). * `TA_STEM_WIDTH_MODE_STRONG`: If active, stem widths and blue zones are snapped and positioned to integer pixel values as much as possible. These values are arguments to ttfautohint's three different hinting mode options. `gray-stem-width-mode` : Specify the stem width algorithm for grayscale rendering. Possible integer values are `TA_STEM_WIDTH_MODE_NATURAL`, `TA_STEM_WIDTH_MODE_QUANTIZED` (the default), and `TA_STEM_WIDTH_MODE_STRONG`, as discussed above. `gdi-cleartype-stem-width-mode` : Specify the stem width algorithm for GDI ClearType rendering, this is, the rasterizer version (as returned by the GETINFO bytecode instruction) is in the range 36\ <= version <\ 38 and ClearType is enabled. Possible integer values are `TA_STEM_WIDTH_MODE_NATURAL`, `TA_STEM_WIDTH_MODE_QUANTIZED`, and `TA_STEM_WIDTH_MODE_STRONG` (the default), as discussed above. `dw-cleartype-stem-width-mode` : Specify the stem width algorithm for DW ClearType rendering, this is, the rasterizer version (as returned by the GETINFO bytecode instruction) is >=\ 38, ClearType is enabled, and subpixel positioning is enabled also. Possible integer values are `TA_STEM_WIDTH_MODE_NATURAL`, `TA_STEM_WIDTH_MODE_QUANTIZED` (the default), and `TA_STEM_WIDTH_MODE_STRONG`, as discussed above. `increase-x-height` : An integer. For PPEM values in the range 6\ <= PPEM <= `increase-x-height`, round up the font's x\ height much more often than normally (to use the terminology of TrueType's 'Super Round' bytecode instruction, the threshold gets increased from 5/8px to 13/16px). If it is set to\ 0, this feature is switched off. If this field is not set, it defaults to [`TA_INCREASE_X_HEIGHT`](#preprocessor-macros-typedefs-and-enums). Use this flag to improve the legibility of small font sizes if necessary. `x-height-snapping-exceptions` : A pointer of type `const char*` to a null-terminated string that gives a list of comma separated PPEM values or value ranges at which no x\ height snapping shall be applied. A value range has the form *value*~1~`-`*value*~2~, meaning *value*~1~ <= PPEM <= *value*~2~. *value*~1~ or *value*~2~ (or both) can be missing; a missing value is replaced by the beginning or end of the whole interval of valid PPEM values, respectively. Whitespace is not significant; superfluous commas are ignored, and ranges must be specified in increasing order. For example, the string `"3, 5-7, 9-"` means the values 3, 5, 6, 7, 9, 10, 11, 12, etc. Consequently, if the supplied argument is `"-"`, no x\ height snapping takes place at all. The default is the empty string (`""`), meaning no snapping exceptions. `windows-compatibility` : If this integer is set to\ 1, two artificial blue zones are used, positioned at the `usWinAscent` and `usWinDescent` values (from the font's `OS/2` table). The idea is to help ttfautohint so that the hinted glyphs stay within this horizontal stripe since Windows clips everything falling outside. The default is\ 0. `gray-strong-stem-width` : Deprecated. The argument values 0 and 1 of this field correspond to the argument values `TA_STEM_WIDTH_MODE_QUANTIZED` and `TA_STEM_WIDTH_MODE_STRONG` of the field 'gray-stem-width-mode', respectively. `gdi-cleartype-strong-stem-width` : Deprecated. The argument values 0 and 1 of this field correspond to the argument values `TA_STEM_WIDTH_MODE_QUANTIZED` and `TA_STEM_WIDTH_MODE_STRONG` of the field 'gdi-cleartype-stem-width-mode', respectively. `dw-cleartype-strong-stem-width` : Deprecated. The argument values 0 and 1 of this field correspond to the argument values `TA_STEM_WIDTH_MODE_QUANTIZED` and `TA_STEM_WIDTH_MODE_STRONG` of the field 'dw-cleartype-stem-width-mode', respectively. ### Scripts `default-script` : A string consisting of four lowercase characters that specifies the default script for OpenType features. After applying all features that are handled specially, use this value for the remaining features. The default value is `"latn"`; if set to `"none"`, no script is used. Valid values can be found in the header file `ttfautohint-scripts.h`. `fallback-script` : A string consisting of four lowercase characters, specifying the default script for glyphs that can't be mapped to a script automatically. By default, such glyphs are hinted; if option `fallback-scaling` is set, they are scaled only instead. Valid values can be found in the header file `ttfautohint-scripts.h`. Default value is `"none"`, which means hinting without using a script's blue zones if `fallback-scaling` isn't set. If `fallback_scaling` is set, value `"none"` implies no hinting for unmapped glyphs. `fallback-scaling` : Set this integer to\ 1 if glyphs handled by the fallback script should be scaled only with the fallback script's scaling value, instead of being hinted with the fallback script's hinting parameters. `symbol` : Set this integer to\ 1 if you want to process a font that ttfautohint would refuse otherwise because it can't find a single standard character for any of the supported scripts. ttfautohint then uses a default (hinting) value for the standard stem width instead of deriving it from a script's set of standard characters (for the latin script, one of them is character 'o'). The default value of this option is\ 0. `fallback-stem-width` : Set the horizontal stem width (hinting) value for all scripts that lack proper standard characters. The value is given in font units and must be a positive integer. If not set, or the value is zero, ttfautohint uses a hard-coded default (50\ units at 2048 units per EM, and linearly scaled for other UPEM values, for example 24\ units at 1000 UPEM). For symbol fonts (i.e., option `symbol` is given), `fallback-stem-width` has an effect only if `fallback-script` is set also. ### Miscellaneous `ignore-restrictions` : If the font has set bit\ 1 in the 'fsType' field of the `OS/2` table, the ttfautohint library refuses to process the font since a permission to do that is required from the font's legal owner. In case you have such a permission you might set the integer argument to value\ 1 to make ttfautohint handle the font. The default value is\ 0. `TTFA-info` : If set to\ 1, ttfautohint creates an SFNT table called `TTFA` and fills it with information on the parameters used while calling `TTF_autohint`. The format of the output data resembles the information at the very beginning of the dump emitted by option `debug`. The default value is\ 0. Main use of this option is for font editing purposes. For example, after a font editor has added some glyphs, a front-end to `TTF_autohint` can parse `TTFA` and feed the parameters into another call of `TTF_autohint`. The new glyphs are then hinted while hints of the old glyphs stay unchanged. If this option is not set, and the font to be processed contains a `TTFA` table, it gets removed. Note that such a `TTFA` table gets ignored by all font rendering engines. In TrueType Collections, the `TTFA` table is added to the first subfont. `dehint` : If set to\ 1, remove all hints from the font. All other hinting options are ignored. `epoch` : An integer of type `unsigned long long`, defined as the number of seconds (excluding leap seconds) since 01 Jan 1970 00:00:00 UTC. If set, or if the value is not equal to `ULLONG_MAX`, this epoch gets used instead of the current date and time for the 'modification time' field in the TTF header. Use this to get [reproducible builds](https://reproducible-builds.org/). ### Remarks * Obviously, it is necessary to have an input and an output data stream. All other options are optional. * `hinting-range-min` and `hinting-range-max` specify the range for which the autohinter generates optimized hinting code. If a PPEM value is smaller than the value of `hinting-range-min`, hinting still takes place but the configuration created for `hinting-range-min` is used. The analogous action is taken for `hinting-range-max`, only limited by the value given with `hinting-limit`. The font's `gasp` table is set up to always use grayscale rendering with grid-fitting for standard hinting, and symmetric grid-fitting and symmetric smoothing for horizontal subpixel hinting (ClearType). * ttfautohint can process its own output a second time only if option `hint-composites` is not set (or if the font doesn't contain composite glyphs at all). This limitation might change in the future. ```C TA_LIB_EXPORT TA_Error TTF_autohint(const char* options, ...); ``` Macros: `TTFAUTOHINT_MAJOR`, `TTFAUTOHINT_MINOR`, `TTFAUTOHINT_REVISION` ------------------------------------------------------------------------ These three macros give the major, minor, and revision number of the library, respectively. See function [`TTF_autohint_version`](#function-ttf_autohint_version) for more details. ```C #define TTFAUTOHINT_MAJOR 1 #define TTFAUTOHINT_MINOR 8 #define TTFAUTOHINT_REVISION 1 ``` Macro: `TTFAUTOHINT_VERSION` ---------------------------- This macro holds the ttfautohint version string. For tarball releases it has the form *X*.*Y*[.*Z*], with *X*, *Y*, and\ *Z* the major, minor, and revision numbers, respectively. If the revision number is zero, it is omitted. Examples: `2.7`, `2.7.1`. If compiling directly from the git repository, ttfautohint's bootstrap script derives the version number from the `git describe` output, appending the number of commits after a tag together with a shortened commit ID. Example: `2.7.1.23-379b`. See function [`TTF_autohint_version`](#function-ttf_autohint_version) for more details. ```C #define TTFAUTOHINT_VERSION "1.8.1" ``` Function: `TTF_autohint_version` -------------------------------- Return the ttfautohint version triplet. This function is useful when dynamically linking to the library, since the macros `TTFAUTOHINT_MAJOR`, `TTFAUTOHINT_MINOR`, and `TTFAUTOHINT_PATCH` cannot be used in that case. The returned integer triplet is _not_ the same as the shared library's version triplet (which the dynamic linker uses to resolve runtime dependencies). For example, hypothetical ttfautohint versions 2.27 and 2.27.1 might both correspond to shared library version 1.0.38 in case there are only, say, documentation or packaging differences that don't affect the library code. If the pkg-config configuration file `ttfautohint.pc` is installed in a place that pkg-config can find, a call to ``` pkg-config ttfautohint --modversion ``` returns the shared library version. ```C TA_LIB_EXPORT void TTF_autohint_version(int *major, int *minor, int *revision); ``` Function: `TTF_autohint_version_string` --------------------------------------- Return the ttfautohint version string. This function is useful when dynamically linking to the library, since the macro `TTFAUTOHINT_VERSION` cannot be used in that case. ```C TA_LIB_EXPORT const char* TTF_autohint_version_string(void); ``` Compilation and Installation ============================ Please read the files [`INSTALL`](http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;f=doc/INSTALL;hb=HEAD) and [`INSTALL.git`](http://repo.or.cz/w/ttfautohint.git/blob_plain/HEAD:/INSTALL.git) (both part of the source code bundle) for instructions how to compile the ttfautohint library together with its front-ends using a POSIX compatible shell and compiler. Unix-like Platforms ------------------- The generic instructions should work just fine. Since ttfautohint depends on [Qt] version\ 4 or newer, [FreeType] version 2.4.5 or newer, and [HarfBuzz] version 1.3.0 or newer, you should install packages for these libraries (called 'libqt4' or similar, 'libfreetype6'^[The number\ '6' indicates the version of the shared library of FreeType, which is not directly related to the source code version of FreeType.], and 'libharfbuzz0' or similar) together with its development bundles (called 'libqt4-devel', 'freetype2-devel', and 'harfbuzz-devel' or similar) before running ttfautohint's `configure` script. MS Windows ---------- Precompiled binaries `ttfautohint.exe` and `ttfautohintGUI.exe` are available, being statically linked to [Qt], [FreeType], and [HarfBuzz]. This means that the two programs are not dependent on any other program-specific DLL, and you can move them to any place you like. Hints for compilation with the [MinGW] environment are given in `INSTALL.git`. Mac OS X -------- Right now, only a precompiled binary `ttfautohint` is offered; a ready-to-run app bundle for the GUI version is not yet available; however, ttfautohint is part of [Homebrew](http://brew.sh), making compilation and installation very simple. Detailed instructions to compile both `ttfautohint` and `ttfautohintGUI` can be found on [ttfautohint's homepage](http://freetype.org/ttfautohint/osx.html). Authors ======= Copyright © 2011-2017 by [Werner Lemberg](mailto:wl@gnu.org).\ Portions Copyright © 2011-2017 by [Dave Crossland](mailto:dave@understandingfonts.com).\ Portions Copyright © 2014 by [Adam Twardoch](mailto:adam@twardoch.com). This file is part of the ttfautohint library, and may only be used, modified, and distributed under the terms given in [`COPYING`](http://repo.or.cz/w/ttfautohint.git/blob_plain/HEAD:/COPYING). By continuing to use, modify, or distribute this file you indicate that you have read `COPYING` and understand and accept it fully. The file `COPYING` mentioned in the previous paragraph is distributed with the ttfautohint library. [ClearType Whitepaper]: http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx [Dalton Maag Ltd]: https://daltonmaag.com [DejaVu]: http://dejavu-fonts.org [FontForge]: http://fontforge.sf.net [FontLab Studio]: http://www.fontlab.com/font-editor/fontlab-studio [FreeType]: http://freetype.org [HarfBuzz]: http://harfbuzz.org [Infinality]: http://infinality.net [MinGW]: http://mingw.org [OpenType specification]: http://www.microsoft.com/typography/otspec [Qt]: http://qt.io Character Ranges ================ For the FreeType auto-hinter (and thus ttfautohint), a 'non-base character' is something that should not be affected by blue zones, regardless of whether this is a spacing or no-spacing glyph. Table: `adlm` base characters Character range Description --------------------- ------------- `0x1E900` - `0x1E95F` Adlam Table: `adlm` non-base characters Character range --------------------- `0x1D944` - `0x1E94A` Table: `arab` base characters Character range Description --------------------- ------------- `0x0600` - `0x06FF` Arabic `0x0750` - `0x07FF` Arabic Supplement `0x08A0` - `0x08FF` Arabic Extended-A `0xFB50` - `0xFDFF` Arabic Presentation Forms-A `0xFE70` - `0xFEFF` Arabic Presentation Forms-B `0x1EE00` - `0x1EEFF` Arabic Mathematical Alphabetic Symbols Table: `arab` non-base characters Character range --------------------- `0x0600` - `0x0605` `0x0610` - `0x061A` `0x064B` - `0x065F` `0x0670` - `0x0670` `0x06D6` - `0x06DC` `0x06DF` - `0x06E4` `0x06E7` - `0x06E8` `0x06EA` - `0x06ED` `0x08E3` - `0x08FF` `0xFBB2` - `0xFBC1` `0xFE70` - `0xFE70` `0xFE72` - `0xFE72` `0xFE74` - `0xFE74` `0xFE76` - `0xFE76` `0xFE78` - `0xFE78` `0xFE7A` - `0xFE7A` `0xFE7C` - `0xFE7C` `0xFE7E` - `0xFE7E` Table: `armn` base characters Character range Description --------------------- ------------- `0x0530` - `0x058F` Armenian `0xFB13` - `0xFB17` Alphab. Present. Forms (Armenian) Table: `armn` non-base characters Character range --------------------- `0x0559` - `0x055F` Table: `avst` base characters Character range Description --------------------- ------------- `0x10B00` - `0x10B3F` Avestan Table: `avst` non-base characters Character range --------------------- `0x10B39` - `0x10B3F` Table: `bamu` base characters Character range Description --------------------- ------------- `0xA6A0` - `0xA6FF` Bamum Table: `bamu` non-base characters Character range --------------------- `0xA6F0` - `0xA6F1` Table: `beng` base characters Character range Description --------------------- ------------- `0x0980` - `0x09FF` Bengali Table: `beng` non-base characters Character range --------------------- `0x0981` - `0x0981` `0x09BC` - `0x09BC` `0x09C1` - `0x09C4` `0x09CD` - `0x09CD` `0x09E2` - `0x09E3` Table: `buhd` base characters Character range Description --------------------- ------------- `0x1740` - `0x175F` Buhid Table: `buhd` non-base characters Character range --------------------- `0x1752` - `0x1753` Table: `cakm` base characters Character range Description --------------------- ------------- `0x11100` - `0x1114F` Chakma Table: `cakm` non-base characters Character range --------------------- `0x11100` - `0x11102` `0x11127` - `0x11134` Table: `cans` base characters Character range Description --------------------- ------------- `0x1400` - `0x167F` Unified Canadian Aboriginal Syllabics `0x18B0` - `0x18FF` Unified Canadian Aboriginal Syllabics Extended Table: `cari` base characters Character range Description --------------------- ------------- `0x102A0` - `0x102DF` Carian Table: `cher` base characters Character range Description --------------------- ------------- `0x13A0` - `0x13FF` Cherokee `0xAB70` - `0xABBF` Cherokee Supplement Table: `copt` base characters Character range Description --------------------- ------------- `0x2C80` - `0x2CFF` Coptic Table: `copt` non-base characters Character range --------------------- `0x2CEF` - `0x2CF1` Table: `cprt` base characters Character range Description --------------------- ------------- `0x10800` - `0x1083F` Cypriot Table: `cyrl` base characters Character range Description --------------------- ------------- `0x0400` - `0x04FF` Cyrillic `0x0500` - `0x052F` Cyrillic Supplement `0x2DE0` - `0x2DFF` Cyrillic Extended-A `0xA640` - `0xA69F` Cyrillic Extended-B Table: `cyrl` non-base characters Character range --------------------- `0x0483` - `0x0489` `0x2DE0` - `0x2DFF` `0xA66F` - `0xA67F` `0xA69E` - `0xA69F` There are some characters in the Devanagari Unicode block that are generic to Indic scripts; we omit them so that their presence doesn't trigger Devanagari. Table: `deva` base characters Character range Description --------------------- ------------- `0x0900` - `0x093B` Devanagari `0x093D` - `0x0950` ... continued `0x0953` - `0x0963` ... continued `0x0966` - `0x097F` ... continued `0x20B9` - `0x20B9` (new) Rupee sign `0xA8E0` - `0xA8FF` Devanagari Extended Table: `deva` non-base characters Character range --------------------- `0x0900` - `0x0902` `0x093A` - `0x093A` `0x0941` - `0x0948` `0x094D` - `0x094D` `0x0953` - `0x0957` `0x0962` - `0x0963` `0xA8E0` - `0xA8F1` Table: `dsrt` base characters Character range Description --------------------- ------------- `0x10400` - `0x1044F` Deseret Table: `ethi` base characters Character range Description --------------------- ------------- `0x1200` - `0x137F` Ethiopic `0x1380` - `0x139F` Ethiopic Supplement `0x2D80` - `0x2DDF` Ethiopic Extended `0xAB00` - `0xAB2F` Ethiopic Extended-A Table: `ethi` non-base characters Character range --------------------- `0x135D` - `0x135F` Table: `geor` base characters Character range Description --------------------- ------------- `0x10D0` - `0x10FF` Georgian (Mkhedruli) Table: `geok` base characters Character range Description --------------------- ------------- `0x10A0` - `0x10CD` Georgian (Asomtavruli) `0x2D00` - `0x2D2D` Georgian (Nuskhuri) Table: `glag` base characters Character range Description --------------------- ------------- `0x2C00` - `0x2C5F` Glagolitic `0x1E000` - `0x1E02F` Glagolitic Supplement Table: `glag` non-base characters Character range --------------------- `0x1E000` - `0x1E02F` Table: `goth` base characters Character range Description --------------------- ------------- `0x10330` - `0x1034F` Gothic Table: `grek` base characters Character range Description --------------------- ------------- `0x0370` - `0x03FF` Greek and Coptic `0x1F00` - `0x1FFF` Greek Extended Table: `grek` non-base characters Character range --------------------- `0x037A` - `0x037A` `0x0384` - `0x0385` `0x1FBD` - `0x1FC1` `0x1FCD` - `0x1FCF` `0x1FDD` - `0x1FDF` `0x1FED` - `0x1FEF` `0x1FFD` - `0x1FFE` Table: `gujr` base characters Character range Description --------------------- ------------- `0x0A80` - `0x0AFF` Gujarati Table: `gujr` non-base characters Character range --------------------- `0x0A81` - `0x0A82` `0x0ABC` - `0x0ABC` `0x0AC1` - `0x0AC8` `0x0ACD` - `0x0ACD` `0x0AE2` - `0x0AE3` Table: `guru` base characters Character range Description --------------------- ------------- `0x0A00` - `0x0A7F` Gurmukhi Table: `guru` non-base characters Character range --------------------- `0x0A01` - `0x0A02` `0x0A3C` - `0x0A3C` `0x0A41` - `0x0A51` `0x0A70` - `0x0A71` `0x0A75` - `0x0A75` Table: `hebr` base characters Character range Description --------------------- ------------- `0x0590` - `0x05FF` Hebrew `0xFB1D` - `0xFB4F` Alphab. Present. Forms (Hebrew) Table: `hebr` non-base characters Character range --------------------- `0x0591` - `0x05BF` `0x05C1` - `0x05C2` `0x05C4` - `0x05C5` `0x05C7` - `0x05C7` `0xFB1E` - `0xFB1E` Table: `kali` base characters Character range Description --------------------- ------------- `0xA900` - `0xA92F` Kayah Li Table: `kali` non-base characters Character range --------------------- `0xA926` - `0xA92D` Table: `knda` base characters Character range Description --------------------- ------------- `0x0C80` - `0x0CFF` Kannada Table: `knda` non-base characters Character range --------------------- `0x0C81` - `0x0C81` `0x0CBC` - `0x0CBC` `0x0CBF` - `0x0CBF` `0x0CC6` - `0x0CC6` `0x0CCC` - `0x0CCD` `0x0CE2` - `0x0CE3` Table: `khmr` base characters Character range Description --------------------- ------------- `0x1780` - `0x17FF` Khmer Table: `khmr` non-base characters Character range --------------------- `0x17B7` - `0x17BD` `0x17C6` - `0x17C6` `0x17C9` - `0x17D3` `0x17DD` - `0x17DD` Table: `khms` base characters Character range Description --------------------- ------------- `0x19E0` - `0x19FF` Khmer Symbols Table: `lao` base characters Character range Description --------------------- ------------- `0x0E80` - `0x0EFF` Lao Table: `lao` non-base characters Character range --------------------- `0x0EB1` - `0x0EB1` `0x0EB4` - `0x0EBC` `0x0EC8` - `0x0ECD` Table: `latn` base characters Character range Description --------------------- ------------- `0x0020` - `0x007F` Basic Latin (no control chars) `0x00A0` - `0x00A9` Latin-1 Supplement (no control chars) `0x00AB` - `0x00B1` ... continued `0x00B4` - `0x00B8` ... continued `0x00BB` - `0x00FF` ... continued `0x0100` - `0x017F` Latin Extended-A `0x0180` - `0x024F` Latin Extended-B `0x0250` - `0x02AF` IPA Extensions `0x02B9` - `0x02DF` Spacing Modifier Letters `0x02E5` - `0x02FF` ... continued `0x0300` - `0x036F` Combining Diacritical Marks `0x1AB0` - `0x1ABE` Combining Diacritical Marks Extended `0x1D00` - `0x1D2B` Phonetic Extensions `0x1D6B` - `0x1D77` ... continued `0x1D79` - `0x1D7F` ... continued `0x1D80` - `0x1D9A` Phonetic Extensions Supplement `0x1DC0` - `0x1DFF` Combining Diacritical Marks Supplement `0x1E00` - `0x1EFF` Latin Extended Additional `0x2000` - `0x206F` General Punctuation `0x20A0` - `0x20B8` Currency Symbols ... `0x20BA` - `0x20CF` ... except new Rupee sign `0x2150` - `0x218F` Number Forms `0x2C60` - `0x2C7B` Latin Extended-C `0x2C7E` - `0x2C7F` ... continued `0x2E00` - `0x2E7F` Supplemental Punctuation `0xA720` - `0xA76F` Latin Extended-D `0xA771` - `0xA7F7` ... continued `0xA7FA` - `0xA7FF` ... continued `0xAB30` - `0xAB5B` Latin Extended-E `0xAB60` - `0xAB6F` ... continued `0xFB00` - `0xFB06` Alphab. Present. Forms (Latin Ligs) `0x1D400` - `0x1D7FF` Mathematical Alphanumeric Symbols Table: `latn` non-base characters Character range --------------------- `0x005E` - `0x0060` `0x007E` - `0x007E` `0x00A8` - `0x00A9` `0x00AE` - `0x00B0` `0x00B4` - `0x00B4` `0x00B8` - `0x00B8` `0x00BC` - `0x00BE` `0x02B9` - `0x02DF` `0x02E5` - `0x02FF` `0x0300` - `0x036F` `0x1AB0` - `0x1ABE` `0x1DC0` - `0x1DFF` `0x2017` - `0x2017` `0x203E` - `0x203E` `0xA788` - `0xA788` `0xA7F8` - `0xA7FA` Table: `latb` base characters Character range Description --------------------- ------------- `0x1D62` - `0x1D6A` some small subscript letters `0x2080` - `0x209C` subscript digits and letters `0x2C7C` - `0x2C7C` latin subscript small letter j Table: `latp` base characters Character range Description --------------------- ------------- `0x00AA` - `0x00AA` feminine ordinal indicator `0x00B2` - `0x00B3` superscript two and three `0x00B9` - `0x00BA` superscript one, masc. ord. indic. `0x02B0` - `0x02B8` some latin superscript mod. letters `0x02E0` - `0x02E4` some IPA modifier letters `0x1D2C` - `0x1D61` latin superscript modifier letters `0x1D78` - `0x1D78` modifier letter cyrillic en `0x1D9B` - `0x1DBF` more modifier letters `0x2070` - `0x207F` superscript digits and letters `0x2C7D` - `0x2C7D` modifier letter capital v `0xA770` - `0xA770` modifier letter us `0xA7F8` - `0xA7F9` more modifier letters `0xAB5C` - `0xAB5F` more modifier letters Table: `lisu` base characters Character range Description --------------------- ------------- `0xA4D0` - `0xA4FF` Lisu Table: `mlym` base characters Character range Description --------------------- ------------- `0x0D00` - `0x0D7F` Malayalam Table: `mlym` non-base characters Character range --------------------- `0x0D01` - `0x0D01` `0x0D4D` - `0x0D4E` `0x0D62` - `0x0D63` Table: `mymr` base characters Character range Description --------------------- ------------- `0x1000` - `0x109F` Myanmar `0xA9E0` - `0xA9FF` Myanmar Extended-B `0xAA60` - `0xAA7F` Myanmar Extended-A Table: `mymr` non-base characters Character range --------------------- `0x102D` - `0x1030` `0x1032` - `0x1037` `0x103A` - `0x103A` `0x103D` - `0x103E` `0x1058` - `0x1059` `0x105E` - `0x1060` `0x1071` - `0x1074` `0x1082` - `0x1082` `0x1085` - `0x1086` `0x108D` - `0x108D` `0xA9E5` - `0xA9E5` `0xAA7C` - `0xAA7C` Table: `nkoo` base characters Character range Description --------------------- ------------- `0x07C0` - `0x07FF` N'Ko Table: `nkoo` non-base characters Character range --------------------- `0x07EB` - `0x07F5` Table: `olck` base characters Character range Description --------------------- ------------- `0x1C50` - `0x1C7F` Ol Chiki Table: `orkh` base characters Character range Description --------------------- ------------- `0x10C00` - `0x10C4F` Old Turkic Table: `osge` base characters Character range Description --------------------- ------------- `0x104B0` - `0x104FF` Osage Table: `osma` base characters Character range Description --------------------- ------------- `0x10480` - `0x104AF` Osmanya Table: `saur` base characters Character range Description --------------------- ------------- `0xA880` - `0xA8DF` Saurashtra Table: `saur` non-base characters Character range --------------------- `0xA880` - `0xA881` `0xA8B4` - `0xA8C5` Table: `shaw` base characters Character range Description --------------------- ------------- `0x10450` - `0x1047F` Shavian Table: `sinh` base characters Character range Description --------------------- ------------- `0x0D80` - `0x0DFF` Sinhala Table: `sinh` non-base characters Character range --------------------- `0x0DCA` - `0x0DCA` `0x0DD2` - `0x0DD6` Table: `sund` base characters Character range Description --------------------- ------------- `0x1B80` - `0x1BBF` Sundanese `0x1CC0` - `0x1CCF` Sundanese Supplement Table: `sund` non-base characters Character range --------------------- `0x1B80` - `0x1B82` `0x1BA1` - `0x1BAD` Table: `taml` base characters Character range Description --------------------- ------------- `0x0B80` - `0x0BFF` Tamil Table: `taml` non-base characters Character range --------------------- `0x0B82` - `0x0B82` `0x0BC0` - `0x0BC2` `0x0BCD` - `0x0BCD` Table: `tavt` base characters Character range Description --------------------- ------------- `0xAA80` - `0xAADF` Tai Viet Table: `tavt` non-base characters Character range --------------------- `0xAAB0` - `0xAAB0` `0xAAB2` - `0xAAB4` `0xAAB7` - `0xAAB8` `0xAABE` - `0xAABF` `0xAAC1` - `0xAAC1` Table: `telu` base characters Character range Description --------------------- ------------- `0x0C00` - `0x0C7F` Telugu Table: `telu` non-base characters Character range --------------------- `0x0C00` - `0x0C00` `0x0C3E` - `0x0C40` `0x0C46` - `0x0C56` `0x0C62` - `0x0C63` Table: `thai` base characters Character range Description --------------------- ------------- `0x0E00` - `0x0E7F` Thai Table: `thai` non-base characters Character range --------------------- `0x0E31` - `0x0E31` `0x0E34` - `0x0E3A` `0x0E47` - `0x0E4E` Table: `tfng` base characters Character range Description --------------------- ------------- `0x2D30` - `0x2D7F` Tifinagh Table: `vaii` base characters Character range Description --------------------- ------------- `0xA500` - `0xA63F` Vai History ======= Version 1.8.1 (2018-Jan-01) --------------------------- * Bug fix: The `configure` script couldn't recognize Qt 5.10.x. Version 1.8 (2017-Dec-31) ------------------------- * A third, 'natural' stem width mode has been added: No adjustments to stem widths, discrete blue zone positioning. This is what FreeType uses for its 'light' (auto-)hinting mode. * A new option `-a` has been implemented to select the stem width mode for the three rendering targets (grayscale, GDI ClearType, DW ClearType). This supersedes option `-g`, which is now deprecated. * Stem widths for the hinting process can now be manually set using the new `width` keyword in a control instructions file. This is especially useful for extra-bold fonts, where the algorithmically derived values are often too large, causing the filling of 'eyes' in 'e' or 'a' glyphs at small sizes. * libttfautohint gets now installed as a DLL or static library (or both, depending on the parameters of the `configure` script), together with its header files. * Two functions have been added to the library: `TTF_autohint_version` and `TTF_autohint_version_string`, which do the obvious. * Two options to `TTF_autohint` have been added: `alloc-func` and `free-func`. These are necessary on some platforms if ttfautohint is compiled as a shared library, and the application uses a different runtime library. This can happen, for example, on the MS Windows platform if your program is written in Python and communicates via the 'ctypes' interface with the ttfautohint DLL. * `TTF_autohint` options `{gray,gdi-cleartype,dw-cleartype}-strong-stem-width` are now superseded by `{gray,gdi-cleartype,dw-cleartype}`-stem-width-mode` to handle the new natural stem width mode also. * Bug fix: Later control instructions now correctly overwrite earlier entries as documented. Version 1.7 (2017-Aug-26) ------------------------- * Support for Adlam, Avestan, Bamum, Buhid, Unified Canadian Syllabics, Carian, Chakma, Coptic, Cypriot, Deseret, Glagolitic, Gothic, Kayah Li, Lisu, N'Ko, Ol Chiki, Old Turkic, Osage, Osmanya, Saurashtra, Shavian, Sundanese, Tai Viet, Tifinagh, and Vai scripts. Note that the used blue zone characters might not be optimal. Please report any problems so that I can fix issues! * Option `--fallback-stem-width` now works for non-symbol fonts also, as documented. * TrueType bytecode generated by ttfautohint now correctly supports most recent MS interpreter versions. * A bug with bytecode for composite glyphs with composite subglyphs is now fixed. Version 1.6 (2016-Nov-27) ------------------------- * A new option `--reference` (and `--reference-index` to select a font within a TTC) makes ttfautohint use the blue zones from another font. This helps synchronize the ascenders and descenders of font families. * Support for Armenian, Cherokee, Ethiopic, Georgian, Gujarati, Gurmukhi, Kannada, Malayalam, Sinhala, and Tamil scripts. * New option `--ttfa-info` to display a font's `TTFA` table (if present). * Glyphs covered by the fallback script are now hinted by default. Previously, they were scaled only. The default fallback script `none` now implies hinting without script-specific blue zones (but still aligning stems to the grid if possible). * The new option `--fallback-scaling` changes the behaviour of the fallback script from hinting to scaling (as implemented in previous versions). * ttfautohint (but not ttfautohintGUI) now honours the SOURCE_DATE_EPOCH environment variable for reproducible builds. This corresponds to the new library option `epoch`. * Bug fix: Allow dehinting of fonts that contain a `.ttfautohint` glyph. Version 1.5 (2016-Jan-24) ------------------------- * Support for Khmer, Myanmar, and Bengali scripts. * Improved Devanagari hinting. * ttfautohintGUI can now be compiled with Qt5. * Bug fix: Too many delta control instructions for a single glyph caused a bytecode stack overflow, making the MS rasterizer ignore all hinting instructions for this glyph. * Bug fix: Don't create multiple `TTFA` tables in font. * Bug fix: Under certain circumstances, glyph indices used in Indic features were incorrectly assigned to the default script. Version 1.4.1 (2015-Oct-17) --------------------------- * A bug in handling control instruction files could cause severe glyph shape distortions of accent-like glyphs. All users should update. Version 1.4 (2015-Oct-04) ------------------------- * Support for Thai and Lao scripts. * Support for the Arabic script. * Better support for scripts that contain superscript-like and subscript-like glyphs, e.g., the International Phonetic Alphabet (IPA). * Accents and other `non-base' glyphs are now hinted without snapping to blue zones. * A new control instruction syntax form was added to adjust the mapping between glyphs and styles. Right now, its usage is quite limited; a forthcoming version will give much more flexibility. * The `touch` keyword in a control instructions file was buggy: If used for a point\ `P` at a ppem value\ `s`, it sometimes led to unwanted movements of\ `P` for ppem values unequal to\ `s`, thus causing outline distortions. Version 1.3 (2015-Jan-06) ------------------------- * Keywords in control instruction files can be more verbose to increase readability. You can now use `left`, `right`, `nodir`, `point`, `touch`, `xshift`, and `yshift` for `l`, `r`, `n`, `p`, `t, `x`, and `y`, respectively. * A new control instruction keyword `touch` was added to apply delta instructions before the final IUP bytecode commands, also `touching' the affected points (to use the TrueType instructions terminology). Such deltas *do* work even with ClearType if applied to the non-ClearType direction. * Support for the Telugu script. * The amount of information about ttfautohint and its parameters that gets added to the `name` table by default has been reduced. A new option `--detailed-info` restores the previous behaviour. * ttfautohintGUI crashed if not used with a control instruction file. * ttfautohintGUI now correctly switches to a horizontal two-column layout if the standard one-column layout would exceed the screen height. * A new option `--family-suffix` makes it possible to append a suffix to a font's family name in the `name` table. This can be useful during the development process: It helps the operating system to simultaneously display several instances of a font that are processed with different ttfautohint parameters. * The new library option `info-post-callback` helps in processing data from the `name` table. Version 1.2 (2014-Oct-06) ------------------------- * It is now possible to control the hinting process at a very low level using a 'control instructions' file. Right now, two modes are supported: - Adding segments and changing segment directions. - Applying delta exceptions. Note that this doesn't really work in ClearType. Please see the documentation for a description and a small tutorial. In the command-line front-end, use option `--control-file` to load such a file. * Support for input file watching in ttfautohintGUI: If the 'Watch Input File' box is checked, the program automatically regenerates the output file as soon as the input font or control instructions file gets modified. The idea is to dock ttfautohintGUI to your favourite font and text editor instead of adding a cheap text editor to ttfautohintGUI itself. * With the new option `--fallback-stem-width` it is now possible to set a default stem width for all scripts that lack proper standard characters in the font. * Add alias `--adjust-subglyphs` for option `--pre-hinting` to better describe its functionality. The short form `-p` stays unchanged. * New option `--ttfa-table` to add an SFNT table `TTFA` to the output font, containing an ASCII dump of all used ttfautohint parameters (including control instructions). Right now, this is mainly for archiving purposes. Forthcoming versions of ttfautohint will be able to re-use this data if a font gets re-processed. * A harmless buglet was fixed that made the `glyf` table too large by one byte under some circumstances. * A bug fix taken from FreeType, correcting a crash for unusual outlines. * Better handling of TTC files. * New library options `error-callback` and `error-callback-data` for improved diagnostics. [No change in the front-ends except better error messages.] * Many other, minor fixes and improvements. Version 1.1 (2014-May-05) ------------------------- * Support for the Devanagari script. * Bug fixes in the computation of strong stem widths. GDI hinting now gives much more consistent results. * Better recognition of script coverage: ttfautohint now properly scans composite glyphs to cover components also. * Improved glyph shape analysis: Non-flat local extrema are now recognized more reliably, and stem detection works better. Version 1.00 (2014-Mar-20) -------------------------- * Much less memory consumption while handling fonts with complicated glyphs. * Option `-s` was partially broken. Version 1.00rc1 (2014-Feb-07) ----------------------------- * OpenType feature support. ttfautohint now uses the HarfBuzz library to analyze data from the `GSUB` table. This allows the hinting of glyphs that don't have an entry in a font's `cmap` table, for example superscripts or small caps. Related to this, the new option `--default-script` controls the default (fallback) script used for OpenType features. * More than a single standard character is used. For example, the 'latin' script uses characters 'o', 'O', and digit '0'. This improves the hinting of fonts (and features) that have only a partial coverage of a script's character repertoire. * Much better GDI ClearType hinting in the range 30-80ppem (approx.), avoiding overly flat tops and bottoms of round glyphs. * Better handling of non-square pixels (this is, horizontal and vertical resolutions differ) in the created TrueType bytecode. Version 0.97 (2013-Nov-09) -------------------------- * Improved script support. Besides Cyrillic and Greek, which are now handled separately from Latin, ttfautohint can handle Hebrew. * Option `-f` now takes a parameter to specify the fallback script. The corresponding long option name has been renamed from `--latin-fallback` to `--fallback-script`. * Work around a bug in display environments that use FreeType 2.5.0 and earlier for rendering: Sometimes, the 'strong' stem width routine was used for DW ClearType (this is, subpixel hinting in FreeType is enabled) even if 'smooth' was selected while generating the font with ttfautohint. Version 0.96 (2013-Aug-06) -------------------------- * Option `--components` has been replaced with `--composites`: By default, the components of a composite glyph are now hinted separately, since tests has shown that this gives good results in most cases. If this option is set, however, the composite glyph itself gets hinted (and the hints of the components are ignored). An unfortunate side effect is that ttfautohint's option `-c` (which stays as a shorthand for `--composites`) now does exactly the opposite as in previous releases. * Older versions of Monotype's 'iType' bytecode interpreter have a serious bug: The DIV instruction rounds the result, while the correct operation is truncation. This caused 'exploding characters' with fonts hinted by ttfautohint. Since many printers contain this rasterizer without any possibility to update to a non-buggy version, ttfautohint now contains work-arounds to circumvent the problem. * Better support for glyphs where some points have almost the same position (for example glyph 'Oslash' in font 'Roboto-Thin'). * Better support for glyphs that use explicit 'on' points around round extrema. Version 0.95 (2013-Mar-07) -------------------------- * New option `--dehint` to strip off all hints without generating new hints. This option is intended for testing purposes. * Minor fixes to the created bytecode for compatibility. * Minor GUI improvements. Version 0.94 (2012-Nov-29) -------------------------- * New option `--windows-compatibility` that adds two artificial blue zones at vertical positions given by 'usWinAscent' and 'usWinDescent'. This helps ttfautohint's hinting algorithm reduce the possibility of clipping if those two values are very tight. * Implement option `--x-height-snapping-exceptions`, making ttfautohint avoid x-height snapping for selected PPEM values. Useful in combination with `--windows-compatibility`. * Minor fixes to the created bytecode for compatibility and robustness. Version 0.93 (2012-Oct-09) -------------------------- * New option `--components` to treat components of composite glyphs separately. This greatly reduces the bytecode size. I'm waiting for reports whether this option works for most fonts; in case this is true I'm inverting the option, making it the default (and the old behaviour optional). * Full support of TTCs, this is, all subfonts get auto-hinted now. * The upper limit of the `--increase-x-height` option has been removed. * Drag-and-drop support in the GUI. * The command-line version of ttfautohint now acts like a (Unix) filter, this is, it accepts stdin and stdout as input and output, respectively. * Less memory consumption. Version 0.92 (2012-Aug-07) -------------------------- * A serious bug in the created bytecode has been fixed, causing incorrect rounding. Version 0.91 (2012-Jul-12) -------------------------- * A new, 'strong' routine to handle stem widths and positions has been added, to be selected with the `--strong-stem-width` command line option. If it is active, stem widths and positions are snapped to the grid as much as possible. This algorithm is useful for GDI ClearType support. * A new command line option `--debug` (not available for ttfautohintGUI) to print very detailed debugging information. Version 0.9 (2012-Jun-06) ------------------------- * The created bytecode has been reduced in size, making it approx. 20% smaller. * New option `--symbol` to use standard stem height and width values instead of using character 'o' (which may be missing). Use this option for symbol fonts or math glyphs. * More documentation (in text, HTML, and PDF format). It's still incomplete, though. * Option `--ignore-permissions` has been renamed to `--ignore-restrictions`. The short form is still `-i`. * Defaults for various parameters have been set to more sensible values: - hinting-range-max: 50 (was 1000) - hinting-limit: 200 (was 1000) * Option `--increase-x-height` now has a mandatory argument (in the range 6-20 or value\ 0 to disable it, default value is 14). Version 0.8 (2012-Mar-21) ------------------------- * Implement option `-x` to increase the x height of the font for small PPEM values by rounding up far more often then rounding down. * Add option '`-G n`' to switch off hinting completely above value\ `n`. * ttfautohint now appends version information and the used parameters to the 'Version' field(s) in the 'name' table. This can be suppressed with option `-n`. Version 0.7 (2012-Feb-05) ------------------------- * A GUI has been added, using the Qt framework. The binary is called 'ttfautohintGUI'. Version 0.6.1 (2012-Jan-02) --------------------------- * The improved handling of composite glyphs in 0.6 was buggy under certain circumstances, making ttfautohint crash and FontValidator complain. * Dropout handling has been activated. Version 0.6 (2011-Dec-25) ------------------------- * Improved handling of composite glyphs. * Implement option `-p` to pre-hint glyphs with original hints before conversion takes place. * Don't add a `DSIG` table if there is none in the input font. * Human-readable error messages instead of hexadecimal error codes. * Better tests (both at runtime and compile time) to reject too old FreeType versions. Version 0.5 (2011-Nov-06) ------------------------- * Rendering on iOS is now expected to give good results. * No bad rendering at very large PPEM values. Version 0.4 (2011-Oct-27) ------------------------- * The bytecode has been changed to 'create' twilight points. This should avoid rendering artifacts on some platforms. Version 0.3 (2011-Sep-09) ------------------------- * Fix font generation; sometimes the `glyf` table was one byte too short, making the font invalid. Version 0.2 (2011-Jul-19) ------------------------- * Fix bytecode bugs that prevented correct rendering on some platforms. Version 0.1 (2011-Jun-30) ------------------------- * First release. ttfautohint-1.8.1/doc/footnote-popup.js0000644000175000001440000000635113153174711020044 0ustar00wlusers00000000000000/*! * footnote-popup.js * * JavaScript code to make pandoc footnotes pop up * * written 2014 by Werner Lemberg * based on code from http://ignorethecode.net/blog/2010/04/20/footnotes */ // This code snippet needs `jquery' (http://code.jquery.com/jquery-1.11.2.js) // Add a #footnotediv rule to the CSS code to style the pop-up window. $(document).ready(function() { Footnotes.setup(); }); var Footnotes = { footnotetimeout: false, setup: function() { /* collect all footnote links that have an ID starting with `fnref' */ var footnotelinks = $("a[id^='fnref']") /* clean-up */ footnotelinks.unbind('mouseover', Footnotes.footnoteover); footnotelinks.unbind('mouseout', Footnotes.footnoteoout); /* assign our mouse handling functions to the collected footnote links */ footnotelinks.bind('mouseover', Footnotes.footnoteover); footnotelinks.bind('mouseout', Footnotes.footnoteoout); }, footnoteover: function() { clearTimeout(Footnotes.footnotetimeout); /* clean-up */ $('#footnotediv').stop(); $('#footnotediv').remove(); /* extract position of the current footnote link and get the ID the `href' attribute is pointing to */ var id = $(this).attr('href').substr(1); var position = $(this).offset(); /* build a diversion having the ID `footnotediv' */ var div = $(document.createElement('div')); div.attr('id', 'footnotediv'); /* assign our mouse handling functions to the diversion */ div.bind('mouseover', Footnotes.divover); div.bind('mouseout', Footnotes.footnoteoout); /* get the footnote data */ var el = document.getElementById(id); div.html($(el).html()); /* pandoc inserts a `return symbol' (embedded in a hyperlink) at the very end of the footnote; it doesn't make sense to display it in a pop-up window, so we remove it */ div.find('a').last().remove(); /* finally, create some CSS data for the diversion */ div.css({ position: 'absolute', width: '20em', opacity: 0.95 }); $(document.body).append(div); /* ensure that our pop-up window gets displayed on screen */ var left = position.left; if (left + div.width() + 20 > $(window).width() + $(window).scrollLeft()) left = $(window).width() - div.width() - 20 + $(window).scrollLeft(); var top = position.top + 20; if (top + div.height() > $(window).height() + $(window).scrollTop()) top = position.top - div.height() - 15; div.css({ left: left, top: top }); }, footnoteoout: function() { /* as soon as the mouse cursor leaves the diversion, fade out and remove it eventually */ Footnotes.footnotetimeout = setTimeout(function() { $('#footnotediv').animate({ opacity: 0 }, 600, function() { $('#footnotediv').remove(); }); }, 100); }, divover: function() { clearTimeout(Footnotes.footnotetimeout); /* as soon as the mouse cursor is over the diversion (again), stop a previous animation and make it immediately visible */ $('#footnotediv').stop(); $('#footnotediv').css({ opacity: 0.95 }); } } ttfautohint-1.8.1/doc/toc-unfold.js0000644000175000001440000000153213153174711017114 0ustar00wlusers00000000000000/*! * toc-unfold.js * * JavaScript code to fold and unfold TOC entries * * written 2014 by Werner Lemberg */ // This code snippet needs `jquery' (http://code.jquery.com/jquery-1.11.2.js) $(document).ready(function() { TOC.setup(); }); var TOC = { setup: function() { /* decorate TOC's `li' elements that have children with `folded' class */ /* (pandoc doesn't do this) */ $("#TOC li").each(function(i) { if ($(this).children().length) { $(this).addClass("folded"); } }); /* fold all entries */ $(".folded").each(function(i) { $(this).children("ul:first").hide(); }); /* change class to `unfolded' if clicked */ $(".folded").click(function(e) { $(this).toggleClass("unfolded"); $(this).children("ul:first").slideToggle("300"); e.stopPropagation(); }); } } ttfautohint-1.8.1/doc/Makefile.in0000644000175000001440000013376413222450647016570 0ustar00wlusers00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Makefile.am # Copyright (C) 2011-2017 by Werner Lemberg. # # This file is part of the ttfautohint library, and may only be used, # modified, and distributed under the terms given in `COPYING'. By # continuing to use, modify, or distribute this file you indicate that you # have read `COPYING' and understand and accept it fully. # # The file `COPYING' mentioned in the previous paragraph is distributed # with the ttfautohint library. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autotroll.m4 \ $(top_srcdir)/m4/ltlize_lang.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/gnulib/m4/00gnulib.m4 \ $(top_srcdir)/gnulib/m4/absolute-header.m4 \ $(top_srcdir)/gnulib/m4/alloca.m4 \ $(top_srcdir)/gnulib/m4/asm-underscore.m4 \ $(top_srcdir)/gnulib/m4/builtin-expect.m4 \ $(top_srcdir)/gnulib/m4/dirname.m4 \ $(top_srcdir)/gnulib/m4/double-slash-root.m4 \ $(top_srcdir)/gnulib/m4/errno_h.m4 \ $(top_srcdir)/gnulib/m4/error.m4 \ $(top_srcdir)/gnulib/m4/exponentd.m4 \ $(top_srcdir)/gnulib/m4/extensions.m4 \ $(top_srcdir)/gnulib/m4/extern-inline.m4 \ $(top_srcdir)/gnulib/m4/fcntl-o.m4 \ $(top_srcdir)/gnulib/m4/fcntl_h.m4 \ $(top_srcdir)/gnulib/m4/float_h.m4 \ $(top_srcdir)/gnulib/m4/getopt.m4 \ $(top_srcdir)/gnulib/m4/getprogname.m4 \ $(top_srcdir)/gnulib/m4/gnulib-common.m4 \ $(top_srcdir)/gnulib/m4/gnulib-comp.m4 \ $(top_srcdir)/gnulib/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/gnulib/m4/include_next.m4 \ $(top_srcdir)/gnulib/m4/intmax_t.m4 \ $(top_srcdir)/gnulib/m4/inttypes_h.m4 \ $(top_srcdir)/gnulib/m4/isatty.m4 \ $(top_srcdir)/gnulib/m4/lib-ld.m4 \ $(top_srcdir)/gnulib/m4/lib-link.m4 \ $(top_srcdir)/gnulib/m4/lib-prefix.m4 \ $(top_srcdir)/gnulib/m4/libtool.m4 \ $(top_srcdir)/gnulib/m4/limits-h.m4 \ $(top_srcdir)/gnulib/m4/lock.m4 \ $(top_srcdir)/gnulib/m4/longlong.m4 \ $(top_srcdir)/gnulib/m4/ltoptions.m4 \ $(top_srcdir)/gnulib/m4/ltsugar.m4 \ $(top_srcdir)/gnulib/m4/ltversion.m4 \ $(top_srcdir)/gnulib/m4/lt~obsolete.m4 \ $(top_srcdir)/gnulib/m4/malloc.m4 \ $(top_srcdir)/gnulib/m4/memchr.m4 \ $(top_srcdir)/gnulib/m4/memmem.m4 \ $(top_srcdir)/gnulib/m4/mmap-anon.m4 \ $(top_srcdir)/gnulib/m4/msvc-inval.m4 \ $(top_srcdir)/gnulib/m4/msvc-nothrow.m4 \ $(top_srcdir)/gnulib/m4/multiarch.m4 \ $(top_srcdir)/gnulib/m4/nocrash.m4 \ $(top_srcdir)/gnulib/m4/off_t.m4 \ $(top_srcdir)/gnulib/m4/onceonly.m4 \ $(top_srcdir)/gnulib/m4/printf.m4 \ $(top_srcdir)/gnulib/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/gnulib/m4/size_max.m4 \ $(top_srcdir)/gnulib/m4/ssize_t.m4 \ $(top_srcdir)/gnulib/m4/std-gnu11.m4 \ $(top_srcdir)/gnulib/m4/stdarg.m4 \ $(top_srcdir)/gnulib/m4/stdbool.m4 \ $(top_srcdir)/gnulib/m4/stddef_h.m4 \ $(top_srcdir)/gnulib/m4/stdint.m4 \ $(top_srcdir)/gnulib/m4/stdint_h.m4 \ $(top_srcdir)/gnulib/m4/stdio_h.m4 \ $(top_srcdir)/gnulib/m4/stdlib_h.m4 \ $(top_srcdir)/gnulib/m4/strerror.m4 \ $(top_srcdir)/gnulib/m4/strerror_r.m4 \ $(top_srcdir)/gnulib/m4/string_h.m4 \ $(top_srcdir)/gnulib/m4/strndup.m4 \ $(top_srcdir)/gnulib/m4/strnlen.m4 \ $(top_srcdir)/gnulib/m4/strtok_r.m4 \ $(top_srcdir)/gnulib/m4/strtoull.m4 \ $(top_srcdir)/gnulib/m4/sys_socket_h.m4 \ $(top_srcdir)/gnulib/m4/sys_types_h.m4 \ $(top_srcdir)/gnulib/m4/threadlib.m4 \ $(top_srcdir)/gnulib/m4/unistd_h.m4 \ $(top_srcdir)/gnulib/m4/vasnprintf.m4 \ $(top_srcdir)/gnulib/m4/vasprintf.m4 \ $(top_srcdir)/gnulib/m4/warn-on-use.m4 \ $(top_srcdir)/gnulib/m4/wchar_h.m4 \ $(top_srcdir)/gnulib/m4/wchar_t.m4 \ $(top_srcdir)/gnulib/m4/wint_t.m4 \ $(top_srcdir)/gnulib/m4/xalloc.m4 \ $(top_srcdir)/gnulib/m4/xsize.m4 \ $(top_srcdir)/gnulib/m4/xstrndup.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__nobase_dist_doc_DATA_DIST) \ $(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__nobase_dist_doc_DATA_DIST = ttfautohint.html ttfautohint.pdf \ ttfautohint.txt img/ttfautohintGUI.png \ img/a-before-hinting.png img/a-after-hinting.png \ img/a-after-autohinting.png \ img/afii10108-11px-after-hinting.png \ img/afii10108-11px-before-hinting.png \ img/afii10108-12px-after-hinting.png \ img/afii10108-12px-before-hinting.png \ img/composite-no-round-xy-to-grid-option-c.png \ img/composite-no-round-xy-to-grid.png \ img/composite-round-xy-to-grid.png img/e-17px-x14.png \ img/e-17px-x17.png img/fira-16px-ie11-win81.png \ img/Halant-Regular-O-Q.png \ img/Halant-Regular-O-Q-unhinted-12px.png \ img/Halant-Regular-O-good-Q-badly-hinted-12px.png \ img/Halant-Regular-O-good-Q-better-hinted-12px.png \ img/Halant-Regular-O-good-Q-well-hinted-12px.png \ img/Merriweather-Black-g-21px-comparison.png \ img/blue-zones.svg img/glyph-terms.svg img/o-and-i.svg \ img/segment-edge.svg img/blue-zones.pdf img/glyph-terms.pdf \ img/o-and-i.pdf img/segment-edge.pdf footnote-popup.js \ jquery-1.11.2.min.js toc-unfold.js 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)$(docdir)" DATA = $(nobase_dist_doc_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@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLEX = @FLEX@ FLOAT_H = @FLOAT_H@ FREETYPE_CPPFLAGS = @FREETYPE_CPPFLAGS@ FREETYPE_LIBS = @FREETYPE_LIBS@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@ HARFBUZZ_LIBS = @HARFBUZZ_LIBS@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ IMPORT = @IMPORT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INKSCAPE = @INKSCAPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KPSEWHICH = @KPSEWHICH@ LATEX = @LATEX@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MOC = @MOC@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ 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@ PANDOC = @PANDOC@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ QMAKE = @QMAKE@ QT_CFLAGS = @QT_CFLAGS@ QT_CPPFLAGS = @QT_CPPFLAGS@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DEFINES = @QT_DEFINES@ QT_INCPATH = @QT_INCPATH@ QT_LDFLAGS = @QT_LDFLAGS@ QT_LFLAGS = @QT_LFLAGS@ QT_LIBS = @QT_LIBS@ QT_PATH = @QT_PATH@ QT_VERSION = @QT_VERSION@ QT_VERSION_MAJOR = @QT_VERSION_MAJOR@ RANLIB = @RANLIB@ RCC = @RCC@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UIC = @UIC@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ ft_config = @ft_config@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ttfautohint_major = @ttfautohint_major@ ttfautohint_minor = @ttfautohint_minor@ ttfautohint_revision = @ttfautohint_revision@ DOCSRC = ttfautohint-1.pandoc \ ttfautohint-2.pandoc \ ttfautohint-3.pandoc \ ttfautohint-4.pandoc \ ../NEWS DOCIMGSVG = img/blue-zones.svg \ img/glyph-terms.svg \ img/o-and-i.svg \ img/segment-edge.svg DOCIMGPDF = img/blue-zones.pdf \ img/glyph-terms.pdf \ img/o-and-i.pdf \ img/segment-edge.pdf DOCIMGPNG = img/ttfautohintGUI.png \ img/a-before-hinting.png \ img/a-after-hinting.png \ img/a-after-autohinting.png \ img/afii10108-11px-after-hinting.png \ img/afii10108-11px-before-hinting.png \ img/afii10108-12px-after-hinting.png \ img/afii10108-12px-before-hinting.png \ img/composite-no-round-xy-to-grid-option-c.png \ img/composite-no-round-xy-to-grid.png \ img/composite-round-xy-to-grid.png \ img/e-17px-x14.png \ img/e-17px-x17.png \ img/fira-16px-ie11-win81.png \ img/Halant-Regular-O-Q.png \ img/Halant-Regular-O-Q-unhinted-12px.png \ img/Halant-Regular-O-good-Q-badly-hinted-12px.png \ img/Halant-Regular-O-good-Q-better-hinted-12px.png \ img/Halant-Regular-O-good-Q-well-hinted-12px.png \ img/Merriweather-Black-g-21px-comparison.png DOC = ttfautohint.html \ ttfautohint.pdf \ ttfautohint.txt \ $(DOCIMGPNG) \ $(DOCIMGSVG) \ $(DOCIMGPDF) \ footnote-popup.js \ jquery-1.11.2.min.js \ toc-unfold.js EXTRA_DIST = c2pandoc.sed \ taranges.sed \ make-snapshot.sh \ strip-comments.sh \ ttfautohint-1.pandoc \ ttfautohint-2.pandoc \ ttfautohint-3.pandoc \ ttfautohint-4.pandoc \ template.html \ template.tex \ longtable-patched.sty \ fontspec-xetex.sty \ ucharclasses.sty \ ttfautohint-css.html \ ttfautohint-js.html @WITH_DOC_TRUE@nobase_dist_doc_DATA = $(DOC) all: all-am .SUFFIXES: .SUFFIXES: .pdf .svg $(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) --gnits doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits doc/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-nobase_dist_docDATA: $(nobase_dist_doc_DATA) @$(NORMAL_INSTALL) @list='$(nobase_dist_doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ $(am__nobase_list) | while read dir files; do \ xfiles=; for file in $$files; do \ if test -f "$$file"; then xfiles="$$xfiles $$file"; \ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ test -z "$$xfiles" || { \ test "x$$dir" = x. || { \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)/$$dir'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)/$$dir"; }; \ echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(docdir)/$$dir'"; \ $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(docdir)/$$dir" || exit $$?; }; \ done uninstall-nobase_dist_docDATA: @$(NORMAL_UNINSTALL) @list='$(nobase_dist_doc_DATA)'; test -n "$(docdir)" || list=; \ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ dir='$(DESTDIR)$(docdir)'; $(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)$(docdir)"; 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-nobase_dist_docDATA 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-nobase_dist_docDATA .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-nobase_dist_docDATA 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-nobase_dist_docDATA .PRECIOUS: Makefile ttfautohint-2.pandoc: $(top_builddir)/lib/ttfautohint.h $(SED) -f $(srcdir)/c2pandoc.sed < $< > $@ ttfautohint-4.pandoc: $(top_srcdir)/lib/taranges.c $(SED) -f $(srcdir)/taranges.sed < $< > $@ ttfautohint.txt: $(DOCSRC) $(SHELL) $(srcdir)/strip-comments.sh $^ > $@ @WITH_DOC_TRUE@ # suffix rules must always start in column 0 @WITH_DOC_TRUE@.svg.pdf: @WITH_DOC_TRUE@ $(INKSCAPE) --export-pdf=$@ $< @WITH_DOC_TRUE@ # build snapshot image of ttfautohintGUI: @WITH_DOC_TRUE@ # this needs X11 and ImageMagick's `import' tool @WITH_DOC_TRUE@ # (in the `make-snaphshot.sh' script) @WITH_DOC_TRUE@ img/ttfautohintGUI.png: $(top_srcdir)/frontend/maingui.cpp \ @WITH_DOC_TRUE@ $(top_srcdir)/configure.ac @WITH_DOC_TRUE@ cd $(top_builddir)/frontend \ @WITH_DOC_TRUE@ && $(MAKE) $(AM_MAKEFLAGS) ttfautohintGUI$(EXEEXT) @WITH_DOC_TRUE@ $(SHELL) $(srcdir)/make-snapshot.sh \ @WITH_DOC_TRUE@ $(top_builddir)/frontend/ttfautohintGUI$(EXEEXT) $@ @WITH_DOC_TRUE@ ttfautohint.html: ttfautohint.txt $(DOCIMGPNG) $(DOCIMGSVG) \ @WITH_DOC_TRUE@ ttfautohint-css.html ttfautohint-js.html \ @WITH_DOC_TRUE@ template.html $(top_builddir)/.version @WITH_DOC_TRUE@ $(PANDOC) --smart \ @WITH_DOC_TRUE@ --template=$(srcdir)/template.html \ @WITH_DOC_TRUE@ --default-image-extension=".svg" \ @WITH_DOC_TRUE@ --variable="version:$(VERSION)" \ @WITH_DOC_TRUE@ --toc \ @WITH_DOC_TRUE@ --include-in-header=$(srcdir)/ttfautohint-css.html \ @WITH_DOC_TRUE@ --include-in-header=$(srcdir)/ttfautohint-js.html \ @WITH_DOC_TRUE@ --standalone \ @WITH_DOC_TRUE@ --output=$@ $< @WITH_DOC_TRUE@ ttfautohint.pdf: ttfautohint.txt $(DOCIMGPNG) $(DOCIMGPDF) \ @WITH_DOC_TRUE@ template.tex $(top_builddir)/.version @WITH_DOC_TRUE@ TEXINPUTS="$(srcdir);" \ @WITH_DOC_TRUE@ $(PANDOC) --smart \ @WITH_DOC_TRUE@ --latex-engine=$(LATEX) \ @WITH_DOC_TRUE@ --template=$(srcdir)/template.tex \ @WITH_DOC_TRUE@ --default-image-extension=".pdf" \ @WITH_DOC_TRUE@ --variable="version:$(VERSION)" \ @WITH_DOC_TRUE@ --number-sections \ @WITH_DOC_TRUE@ --toc \ @WITH_DOC_TRUE@ --chapters \ @WITH_DOC_TRUE@ --standalone \ @WITH_DOC_TRUE@ --output=$@ $< @WITH_DOC_FALSE@.svg.pdf: @WITH_DOC_FALSE@ @echo 1>&2 "warning: can't generate \`$@'" @WITH_DOC_FALSE@ @echo 1>&2 " please install inkscape and reconfigure" @WITH_DOC_FALSE@ img/ttfautohintGUI.png: $(top_srcdir)/frontend/maingui.cpp \ @WITH_DOC_FALSE@ $(top_srcdir)/configure.ac @WITH_DOC_FALSE@ @echo 1>&2 "warning: can't generate \`$@'" @WITH_DOC_FALSE@ @echo 1>&2 " please install ImageMagick's \`import' tool and reconfigure" @WITH_DOC_FALSE@ ttfautohint.html: ttfautohint.txt $(DOCIMGPNG) $(DOCIMGSVG) \ @WITH_DOC_FALSE@ ttfautohint-css.html template.html $(top_builddir)/.version @WITH_DOC_FALSE@ @echo 1>&2 "warning: can't generate \`$@'" @WITH_DOC_FALSE@ @echo 1>&2 " please install pandoc and reconfigure" @WITH_DOC_FALSE@ ttfautohint.pdf: $ttfautohint.txt $(DOCIMGPNG) $(DOCIMGPDF) \ @WITH_DOC_FALSE@ template.tex $(top_builddir)/.version @WITH_DOC_FALSE@ @echo 1>&2 "warning: can't generate \`$@'" @WITH_DOC_FALSE@ @echo 1>&2 " please install pdftex and pandoc, then reconfigure" # end of Makefile.am # 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: ttfautohint-1.8.1/doc/c2pandoc.sed0000644000175000001440000000031312643432074016670 0ustar00wlusers000000000000001 i\ \ \ \ \|/\* pandoc-start \*/|,\|/\* pandoc-end \*/| !d \|/\* pandoc-start \*/|,\|/\* pandoc-end \*/| { \|^$| d \|^/\*| d \|^ \*/| d s|^ \* || s|^ \*|| } ttfautohint-1.8.1/doc/taranges.sed0000644000175000001440000000212313153174711017002 0ustar00wlusers000000000000001,/^const/ { /^const/ !d } /none.*uniranges/,$ c\ History\ =======\ /^[{}]/ d /^#if/,/^#endif/ d /^ *\/\*/ d /cans_nonbase_uniranges/ d /cari_nonbase_uniranges/ d /cher_nonbase_uniranges/ d /cprt_nonbase_uniranges/ d /dsrt_nonbase_uniranges/ d /geo[rk]_nonbase_uniranges/ d /goth_nonbase_uniranges/ d /lat[bp]_nonbase_uniranges/ d /khms_nonbase_uniranges/ d /lisu_nonbase_uniranges/ d /olck_nonbase_uniranges/ d /orkh_nonbase_uniranges/ d /osge_nonbase_uniranges/ d /osma_nonbase_uniranges/ d /shaw_nonbase_uniranges/ d /tfng_nonbase_uniranges/ d /vaii_nonbase_uniranges/ d s|.*ta_\(.*\)_nonbase_uniranges.*|Table: `\1` non-base characters\ \ Character range\ ---------------------| s|.*ta_\(.*\)_uniranges.*|Table: `\1` base characters\ \ Character range Description\ --------------------- -------------| s|.*\(0x.....\),.*\(0x.....\)).*/\* \(.*\) \*/.*| `\1` - `\2` \3| s|.*\(0x....\),.*\(0x....\)).*/\* \(.*\) \*/.*| `\1` - `\2` \3| s|.*\(0x.*\),.*\(0x.*\)).*| `\1` - `\2`| s| /\* \(.*\) \*/| (\1)| /TA_UNIRANGE_REC/ d s|/\* \(.*\) \*/|\1| ttfautohint-1.8.1/doc/make-snapshot.sh0000644000175000001440000000435313153174711017616 0ustar00wlusers00000000000000#! /bin/sh # # Copyright (C) 2013-2017 by Werner Lemberg. # # This file is part of the ttfautohint library, and may only be used, # modified, and distributed under the terms given in `COPYING'. By # continuing to use, modify, or distribute this file you indicate that you # have read `COPYING' and understand and accept it fully. # # The file `COPYING' mentioned in the previous paragraph is distributed # with the ttfautohint library. # # # make-snapshot.sh # # Make a snapshot from an application's start window and save it to a file. # This needs X11 and ImageMagick's `import' tool. # # This script is very simple. Some possible problems: # # o In case the program doesn't create a visible X11 window, you have to # abort the script with ^C. # # o It fails for intelligent applications like `firefox' in case they are # already run, since firefox replaces the process with a new window of the # already running instance. # # o It loops forever for programs like `k3b' that spawns itself, thus # having a different process ID for the visible window. # This script uses ideas from # http://blog.chewearn.com/2010/01/18/find-window-id-of-a-process-id-in-bash-script/. if [ $# -ne 2 ]; then echo "Usage: $0 application imagename" exit 1 fi find_WID() { # Get all windows with the name $APP (ignoring case). xwininfo -root -tree 2>/dev/null \ | grep -i $1 \ | while read DATA; do # Extract Window ID. WID=`echo $DATA | awk '{print $1}'` # Check whether the window's PID is matching the application's PID. if [ `xprop -id $WID _NET_WM_PID | awk '{print $3}'` -eq $PID ]; then # Check whether window is displayed actually. if [ "`xwininfo -id $WID | grep 'IsViewable'`" != '' ]; then echo $WID return fi fi done } # Start program in background and get its process ID. $1 & PID=$! sleep 1 # Get application name. APP=`ps --no-header -o comm -p $PID` if [ "$APP" == "" ]; then echo "Couldn't start application \`$1'" exit 1 fi # Loop until program has displayed a window # so that we can actually get the Windows ID. while [ "$WID" == "" ]; do WID=`find_WID $APP` sleep 1 done # Make snapshot. import -silent -window $WID $2 kill $PID # eof ttfautohint-1.8.1/doc/strip-comments.sh0000644000175000001440000000041112643432074020021 0ustar00wlusers00000000000000#! /bin/sh # # strip-comments.sh ... > result # # This simple script strips off all HTML comments except in the first file. cat $1 shift while [ $# -gt 0 ]; do cat $1 \ | sed -e '//d' \ -e '//d' shift done # eof ttfautohint-1.8.1/doc/ttfautohint-1.pandoc0000644000175000001440000027603613222241462020411 0ustar00wlusers00000000000000% ttfautohint % Werner Lemberg % --- header-includes: - \hyphenation{ttf-auto-hint} --- Introduction ============ **ttfautohint** is a library written in\ C that takes a TrueType font as the input, removes its bytecode instructions (if any), and returns a new font where all glyphs are bytecode hinted using the information given by FreeType's auto-hinting module. The idea is to provide the excellent quality of the auto-hinter on platforms that don't use FreeType. The library has a central API function, `TTF_autohint`, which is described [below](#the-ttfautohint-api). Bundled with the library there are two front-end programs, [`ttfautohint` and `ttfautohintGUI`](#ttfautohint-and-ttfautohintgui), being a command line program and an application with a Graphics User Interface (GUI), respectively. What exactly are hints? ----------------------- To cite [Wikipedia](http://en.wikipedia.org/wiki/Font_hinting): > **Font hinting** (also known as **instructing**) is the use of > mathematical instructions to adjust the display of an outline font so that > it lines up with a rasterized grid. At low screen resolutions, hinting is > critical for producing a clear, legible text. It can be accompanied by > antialiasing and (on liquid crystal displays) subpixel rendering for > further clarity. and Apple's [TrueType Reference Manual](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM03/Chap3.html#features): > For optimal results, a font instructor should follow these guidelines: > > - At small sizes, chance effects should not be allowed to magnify small > differences in the original outline design of a glyph. > > - At large sizes, the subtlety of the original design should emerge. In general, there are three possible ways to hint a glyph. 1. The font contains hints (in the original sense of this word) to guide the rasterizer, telling it which shapes of the glyphs need special consideration. The hinting logic is partly in the font and partly in the rasterizer. More sophisticated rasterizers are able to produce better rendering results. This is how PostScript Type\ 1 and CFF hints work. 2. The font contains exact instructions (also called *bytecode*) on how to move the points of its outlines, depending on the resolution of the output device, and which intentionally distort the (outline) shape to produce a well-rasterized result. The hinting logic is in the font; ideally, all rasterizers simply process these instructions to get the same result on all platforms. This is how TrueType hints work. 3. The font gets auto-hinted (at run-time). The hinting logic is completely in the rasterizer. No hints in the font are used or needed; instead, the rasterizer scans and analyzes the glyphs to apply corrections by itself. This is how FreeType's auto-hinter works; see [below](#background-and-technical-details) for more. What problems can arise with TrueType hinting? ---------------------------------------------- While it is relatively easy to specify PostScript hints (either manually or by an auto-hinter that works at font creation time), creating TrueType hints is far more difficult. There are at least two reasons: - TrueType instructions form a programming language, operating at a very low level. They are comparable to assembler code, thus lacking all high-level concepts to make programming more comfortable. Here an example how such code looks like: ``` SVTCA[0] PUSHB[ ] /* 3 values pushed */ 18 1 0 CALL[ ] PUSHB[ ] /* 2 values pushed */ 15 4 MIRP[01001] PUSHB[ ] /* 3 values pushed */ 7 3 0 CALL[ ] ``` Another major obstacle is the fact that font designers usually aren't programmers. - It is very time consuming to manually hint glyphs. Given that the number of specialists for TrueType hinting is very limited, hinting a large set of glyphs for a font or font family can become very expensive. Why ttfautohint? ---------------- The ttfautohint library brings the excellent quality of FreeType rendering to platforms that don't use FreeType, yet require hinting for text to look good -- like Microsoft Windows. Roughly speaking, it converts the glyph analysis done by FreeType's auto-hinting module to TrueType bytecode. Internally, the auto-hinter's algorithm resembles PostScript hinting methods; it thus combines all three hinting methods discussed [previously](#what-exactly-are-hints). The simple interface of the front-ends (both on the command line and with the GUI) allows quick hinting of a whole font with a few mouse clicks or a single command on the prompt. As a result, you get better rendering results with web browsers, for example. Across Windows rendering environments today, fonts processed with ttfautohint look best with ClearType enabled. This is the default for Windows\ 7 and higher. Good visual results are also seen in recent MacOS\ X versions and GNU/Linux systems (including Android, ChromeOS, and other mobile operating systems) that use FreeType for rendering glyphs. 'Smooth' hinting ---------------- Fundamentally, there are two approaches to hinting. The older approach, let's call it 'sharp', popular when text was rendered in pure black-and-white, was to make all stems round to full pixels so that in a text line, all stems would be either one pixel or (at a larger point size) two pixels. When grayscale antialiasing came about, this approach actually started harming the rendering rather than helping it, because the horizontal and vertical stems would render very dark but round or diagonal stems would render very light. So a new approach was developed, let's call it 'fuzzy', where all stems and other elements are equalized so that in grayscale (or ClearType) rendering, they all are of roughly equal color. This means that stems are not rounded to full pixels but in fact to fractions of a pixel. However, with black-and-white renderers, this approach yields poor results because in black-and-white you cannot render a fraction of a pixel, so some stems become one pixel and some become two. The TrueType auto-hinters in [FontForge] and [FontLab Studio], to name two well-known font editors, take the 'sharp' approach, while the TrueType auto-hinter in ttfautohint takes the 'fuzzy' approach. In theory, a hybrid approach is possible, using TrueType conditional hints: If the rasterizer is black-and-white, 'sharp' rendering could happen, while if the rasterizer is ClearType, the 'fuzzy' rendering could be used. It is not intended to add black-and-white auto-hinting to ttfautohint. However, it is planned to develop an interface so that ttfautohint can cooperate with font editors, providing this hybrid hinting. `ttfautohint` and `ttfautohintGUI` ================================== On all supported platforms (GNU/Linux, Windows, and Mac OS\ X), the GUI looks quite similar; the used toolkit is [Qt], which in turn uses the platform's native widgets. ![`ttfautohintGUI` on GNU/Linux running KDE](img/ttfautohintGUI.png) Both the GUI and console version share the same features, to be discussed in the next subsection. **Warning: ttfautohint cannot always process a font a second time.** If the font contains composite glyphs, and option [`-c`](#hint-composites) is used, reprocessing with ttfautohint will fail. For this reason it is strongly recommended to *not* delete the original, unhinted font so that you can always rerun ttfautohint. Calling `ttfautohint` --------------------- ``` ttfautohint [OPTION]... [IN-FILE [OUT-FILE]] ``` The command-line binary, `ttfautohint`, works like a Unix filter, this is, it reads data from standard input if no input file name is given, and it sends its output to standard output if no output file name is specified. A typical call looks like the following. ``` ttfautohint -v -t -m foo-control.txt foo.ttf foo-autohinted.ttf ``` For demonstration purposes, here the same using a pipe and redirection. Note that Windows's default command line interpreter, `cmd.exe`, doesn't support piping with binary files, unfortunately. ``` cat foo.ttf | ttfautohint -v -t -m foo-control.txt > foo-autohinted.ttf ``` Calling `ttfautohintGUI` ------------------------ ``` ttfautohintGUI [OPTION]... ``` `ttfautohintGUI` doesn't send any output to a console; however, it accepts (almost) the same command line options as `ttfautohint` to provide customized default values of the GUI. The following command line options are not available in `ttfautohintGUI`: [`--control-file`](#control-instructions-file), [`--reference`](#blue-zone-reference-font), [`--reference-index`](#reference-face-index). Note, however, that the corresponding functionality can be selected interactively. Two options, namely `--ttfa-info` and `--debug`, emit information at standard output and standard error, respectively; they are thus not available in `ttfautohintGUI`, too, and there is no corresponding GUI functionality either. Options ------- Long options can be given with one or two dashes, and with and without an equal sign between option and argument. This means that the following forms are acceptable: `-foo=`*bar*, `--foo=`*bar*, `-foo`\ *bar*, and `--foo`\ *bar*. Below, the section title refers to the command's label in the GUI (if applicable), then comes the name of the corresponding long command line option and its short equivalent, followed by a description. Background and technical details on the meaning of the various options are given [afterwards](#background-and-technical-details). ### Control Instructions File `--control-file=`*file*, `-m`\ *file* : Specify the name of a control instructions file to manually tweak the hinting process. This feature can be used to correct glitches in ttfautohint's hinting algorithm. The syntax used in a control instructions file is given [below](#control-instructions). `ttfautohintGUI` doesn't have this command line option. ### Blue Zone Reference Font `--reference=`*file*, `-R`\ *file* : Derive all blue zones from the given font, which can either be a normal TrueType font or a TrueType collection – for the latter you can select the face index with a [separate option](#reference-face-index). Use this to harmonize font families, avoiding ugly height differences at small sizes. ![Fira Regular and Bold (version 4.106), auto-hinted with ttfautohint and displayed at 16px using Internet Explorer\ 11 under Windows\ 8.1. The bold series shown on the right side uses the regular variant as the reference font.](img/fira-16px-ie11-win81.png) To make this work the reference font must obviously be similar enough to the font to be hinted; in particular, it must have proper blue zone characters so that ttfautohint can derive blue zones at all. `ttfautohintGUI` doesn't have this command line option. ### Hint Set Range Minimum, Hint Set Range Maximum See '[Hint Sets](#hint-sets)' for a definition and explanation. `--hinting-range-min=`*n*, `-l`\ *n* : The minimum PPEM value (in pixels) at which hint sets are created. The default value for *n* is\ 8. `--hinting-range-max=`*n*, `-r`\ *n* : The maximum PPEM value (in pixels) at which hint sets are created. The default value for *n* is 50. Increasing the range given by `-l` and `-r` normally makes the font's bytecode larger. ### Default Script `--default-script=`*s*, `-D`\ *s* : Set default script to tag *s*, which is a string consisting of four lowercase characters like `latn` or `dflt`. It is needed to specify the OpenType default script: After applying all features that are handled specially (like small caps or superscript), ttfautohint uses this value for the remaining features. The default value is `latn`. See [below](#opentype-features) for more details. ### Fallback Script `--fallback-script=`*s*, `-f`\ *s* : Set fallback script to tag *s*, which is a string consisting of four characters like `latn` or `dflt`. It gets used for all glyphs that can't be assigned to a script automatically. The default value is `none`. See [below](#scripts) for more details. `--fallback-scaling`, `-S` : Use scaling for glyphs covered by the fallback script, not hinting. See [below](#scripts) for more details. ### Hinting Limit `--hinting-limit=`*n*, `-G`\ *n* : The *hinting limit* is the PPEM value (in pixels) where hinting gets switched off (using the `INSTCTRL` bytecode instruction, not the `gasp` table data); it does not influence the file size. The default value for *n* is 200, which means that the font is not hinted for PPEM values larger than 200. Note that hinting in the range 'hinting-range-max' up to 'hinting-limit' uses the hinting configuration for 'hinting-range-max'. To omit a hinting limit, use `--hinting-limit=0` (or check the 'No Hinting Limit' box in the GUI). Since this causes internal math overflow in the rasterizer for large pixel values (>\ 1500px approx.) it is strongly recommended to not use this except for testing purposes. ### x Height Increase Limit `--increase-x-height=`*n*, `-x`\ *n* : Normally, ttfautohint rounds the x\ height to the pixel grid, with a slight preference for rounding up (to use the terminology of TrueType's 'Super Round' bytecode instruction, the threshold is 5/8px). If this flag is set, values in the PPEM range 6 to\ *n* are much more often rounded up (setting the threshold to 13/16px). The default value for *n* is 14. Use this flag to increase the legibility of small sizes if necessary; you might get weird rendering results otherwise for glyphs like 'a' or 'e', depending on the font design. To switch off this feature, use `--increase-x-height=0` (or check the 'No x\ Height Increase' box in the GUI). To switch off rounding the x\ height to the pixel grid in general, either partially or completely, see '[x Height Snapping Exceptions](#x-height-snapping-exceptions)'. The following FontForge snapshot images use the font '[Mertz Bold](https://github.com/vernnobile/mertzFont/tree/master/FINAL/Mertz-Bold)' from Vernon Adams. ![At 17px, without option `-x` and `-a qqq`, the hole in glyph 'e' looks very grey in the FontForge snapshot, and the GDI ClearType rendering (which is the default on older Windows versions) fills it completely with black because it uses B/W rendering along the y\ axis. ttfautohint's 'smooth' stem width algorithm intentionally aligns horizontal lines to non-integer (but still discrete) values to avoid large glyph shape distortions.](img/e-17px-x14.png) ![The same, this time with option `-x 17` (and `-a qqq`).](img/e-17px-x17.png) ### x Height Snapping Exceptions `--x-height-snapping-exceptions=`*string*, `-X`\ *string* : A list of comma separated PPEM values or value ranges at which no x\ height snapping shall be applied. A value range has the form *value*~1~`-`*value*~2~, meaning *value*~1~\ <= PPEM <=\ *value*~2~. *value*~1~ or *value*~2~ (or both) can be missing; a missing value is replaced by the beginning or end of the whole interval of valid PPEM values, respectively (6\ to 32767). Whitespace is not significant; superfluous commas are ignored, and ranges must be specified in increasing order. For example, the string `"7-9, 11, 13-"` means the values 7, 8, 9, 11, 13, 14, 15, etc. Consequently, if the supplied argument is `"-"`, no x\ height snapping takes place at all. The default is the empty string (`""`), meaning no snapping exceptions. Normally, x\ height snapping means a slight increase in the overall vertical glyph size so that the height of lowercase glyphs gets aligned to the pixel grid (this is a global feature, affecting *all* glyphs of a font). However, having larger vertical glyph sizes is not always desired, especially if it is not possible to adjust the `usWinAscent` and `usWinDescent` values from the font's `OS/2` table so that they are not too tight. See '[Windows Compatibility](#windows-compatibility)' for more details. ### Fallback Stem Width `--fallback-stem-width=`*n*, `-H`\ *n* : Set the horizontal stem width (hinting) value for all scripts that lack proper standard characters in the font. The value is given in font units and must be a positive integer. If not set, ttfautohint uses a hard-coded default (50\ units at 2048 units per EM, and linearly scaled for other UPEM values, for example 24\ units at 1000 UPEM). For symbol fonts, you need option `--fallback-script` too (to set up a script at all). In the GUI, uncheck the 'Default Fallback Stem Width' box to activate this feature. ### Windows Compatibility `--windows-compatibility`, `-W` : This option makes ttfautohint add two artificial blue zones, positioned at the `usWinAscent` and `usWinDescent` values (from the font's `OS/2` table). The idea is to help ttfautohint so that the hinted glyphs stay within this horizontal stripe since older versions of Windows clip everything that lies outside. There is a general problem with tight values for `usWinAscent` and `usWinDescent`; a good description is given in the [Vertical Metrics How-To](http://typophile.com/node/13081). Additionally, there is a special problem with tight values if used in combination with ttfautohint because the auto-hinter tends to slightly increase the vertical glyph dimensions at smaller sizes to improve legibility. This enlargement can make the heights and depths of glyphs exceed the range given by `usWinAscent` and `usWinDescent`. If ttfautohint is part of the font creation tool chain, and the font designer can adjust those two values, a better solution instead of using option `-W` is to reserve some vertical space for 'padding': For the auto-hinter, the difference between a top or bottom outline point before and after hinting is less than 1px, thus a vertical padding of 2px is sufficient. Assuming a minimum hinting size of 6ppem, adding two pixels gives an increase factor of 8÷6 = 1.33. This is near to the default baseline-to-baseline distance used by TeX and other sophisticated text processing applications, namely 1.2×designsize, which gives satisfying results in most cases. It is also near to the factor 1.25 recommended in the abovementioned how-to. For example, if the vertical extension of the largest glyph is 2000 units (assuming that it approximately represents the designsize), the sum of `usWinAscent` and `usWinDescent` could be 1.25×2000 = 2500. In case ttfautohint is used as an auto-hinting tool for fonts that can be no longer modified to change the metrics, option `-W` in combination with '`-X "-"`' to suppress any vertical enlargement should prevent almost all clipping. ### Adjust Subglyphs `--adjust-subglyphs`, `-p` : *Adjusting subglyphs* makes a font's original bytecode be applied to all glyphs before it is replaced with bytecode created by ttfautohint. This makes only sense if your font already has some hints in it that modify the shape even at EM size (normally 2048px); in particular, some CJK fonts need this because the bytecode is used to scale and shift subglyphs (hence the option's long name). For most fonts, however, this is not the case. ### Hint Composites `--composites`, `-c` : By default, the components of a composite glyph get hinted separately. If this flag is set, the composite glyph itself gets hinted (and the hints of the components are ignored). Using this flag increases the bytecode size a lot, however, it *might* yield better hinting results – usually, it doesn't. If this option is used (and a font actually contains composite glyphs), ttfautohint currently cannot reprocess its own output for technical reasons, see [below](#the-.ttfautohint-glyph). ### Symbol Font `--symbol`, `-s` : Process a font that ttfautohint would refuse otherwise because it can't find a single standard character for any of the supported scripts. For all scripts that lack proper standard characters, ttfautohint uses a default (hinting) value for the standard stem width instead of deriving it from a script's set of standard characters (for the latin script, one of them is character 'o'). Use this option – usually in combination with the [`--fallback-script`](#fallback-script) and/or [`--fallback-stem-width`](#fallback-stem-width) option – to hint symbol or dingbat fonts or math glyphs, for example. ### Dehint `--dehint`, `-d` : Strip off all hints without generating new hints. Consequently, all other hinting options are ignored. This option is intended for testing purposes. ### ttfautohint Info `--no-info`, `-n` : Don't add ttfautohint version and command line information to the version string or strings (with name ID\ 5) in the font's `name` table. In the GUI, it corresponds to value 'None' in the 'ttfautohint info' combo box. This option is mutually exclusive with option `-I`. `--detailed-info`, `-I` : Add ttfautohint version and command line information to the version string or strings (with name ID\ 5) in the font's `name` table. In the GUI, it corresponds to value 'Version and Parameters' in the 'ttfautohint info' combo box. This option is mutually exclusive with option `-n`. If neither `-n` nor `-I` is set, the string '`ttfautohint (vNNN)`' gets added to the `name` table (with *NNN* the current version); this correponds to value 'Version' in the 'ttfautohint info' combo box. ### Add TTFA Info Table `--ttfa-table`, `-t` : Add an SFNT table called `TTFA` to the output font that holds a dump of all parameters; the data resembles the format of the `--debug` option's parameter listing. In particular, it lists all ttfautohint control instructions (which are *not* shown in the `name` table info). This option is mainly for archival purposes so that all information used to create a font is stored in the font itself. Note that such a `TTFA` table gets ignored by all TrueType rendering engines. Forthcoming versions of the ttfautohint front-ends will be able to use this data so that a font can be processed another time with exactly the same parameters, thus providing a means for round-tripping fonts. ### Family Suffix `--family-suffix=`*string*, `-F`\ *string* : A string that gets appended to the family name in entries with IDs 1, 4, 6, 16, and\ 21 in the font's `name` table. Allowed input is ASCII in the range 0x20-0x7E except characters `%()/<>[]{}`. Assuming an input family name 'Foo', a full name 'Foo Bold', and a family suffix '\ 1', the output family name will be 'Foo 1' and the full name 'Foo 1 Bold'. For the PostScript name in ID\ 6, ttfautohint uses the suffix with space characters removed (for example 'Foo1Bold'). This option is mainly for testing purposes, enabling the operating system to simultaneously display several instances of a font that are processed with different ttfautohint parameters. ### Reference Face Index `--reference-index=`*n*, `-Z`\ *n* : Set the face index for the [blue zone reference font](#blue-zone-reference-font) if the font is a TrueType collection (`.ttc`). For normal TrueType fonts, the value is always zero (which is also the default). `ttfautohintGUI` doesn't have this command line option. ### Stem Width and Positioning Mode `--stem-width-mode=`*string*, `-a`\ *string* : ttfautohint provides three different algorithms for computing horizontal stem widths and the positioning of blue zones. - 'natural': No adjustments to stem widths, discrete blue zone positioning. This is what FreeType uses for its 'light' (auto-)hinting mode. Essentially no glyph shape distortion, low contrast. - 'quantized': Both stem widths and blue zone positions are slightly quantized to take discrete values. For example, stem values 50, 51, 72, 76, and 100 would become 50, 74, and 100 (or something similar). More glyph shape distortion but increased contrast. - 'strong: If active, stem widths and blue zones are snapped and positioned to integer pixel values as much as possible. This gives high contrast, but glyph shape distortion can be significant. These three algorithms are mapped onto three possible rendering targets. - Grayscale rendering, with or without optimization for subpixel positioning (e.g., Android). - 'GDI ClearType' rendering: the rasterizer version, as returned by the GETINFO bytecode instruction, is in the range 36\ <= version <=\ 38 and ClearType is enabled (e.g., Windows XP). - 'DirectWrite ClearType' rendering: the rasterizer version, as returned by the GETINFO bytecode instruction, is >=\ 39, ClearType is enabled, and subpixel positioning is enabled also (e.g., Internet Explorer\ 9 running on Windows\ 7). GDI ClearType uses a mode similar to B/W rendering along the vertical axis, while DW ClearType applies grayscale rendering. Additionally, only DW ClearType provides subpixel positioning along the x\ axis. For what it's worth, the rasterizers version\ 36 and version\ 38 in Microsoft Windows are two completely different rendering engines. [Note that the GDI framework on Windows\ 10 no longer uses B/W rendering along the vertical axis; we consequently treat it as DW ClearType also. We test this by looking at bit\ 11 of the GETINFO instruction, which was introduced in rasterizer version\ 40.] The command line option expects *string* to contain exactly three letters with possible values '`n`' for natural, '`q`' for quantized, and '`s`' for strong stem width and positioning mode. The first, second, and third letter correspond to grayscale, GDI ClearType, and DW ClearType rendering, respectively. The default value is `qsq`, which means that the 'quantized' algorithm gets used for grayscale and DW ClearType, and the 'strong' algorithm for GDI ClearType. For example, to use the 'natural' algorithm for all three rendering targets, use option `-a nnn`. In the GUI, simply select the desired stem width algorithm in the three combo boxes. ![This image shows different versions of glyph 'g' of the font [Merriweather-Black](https://fonts.google.com/specimen/Merriweather) as displayed with the 'ftgrid' demo program of FreeType. Top left is unhinted, top right is hinted using ttfautohint natural stem width mode. Bottom left and right uses the quantized and strong stem width modes, respectively.](img/Merriweather-Black-g-21px-comparison.png) ### Miscellaneous Watch input files\ \ \ (`ttfautohintGUI` only) : If this checkbox is set, automatically regenerate the output file as soon as an input file (either the font, the control instructions file, or the reference font) gets modified. Pressing the 'Run' button starts watching. If an error occurs, watching stops and must be restarted with the 'Run' button. `--ignore-restrictions`, `-i` : By default, fonts that have bit\ 1 set in the 'fsType' field of the `OS/2` table are rejected. If you have a permission of the font's legal owner to modify the font, specify this command line option. If this option is not set, `ttfautohintGUI` shows a dialogue to handle such fonts if necessary. `--help`, `-h` : On the console, print a brief documentation on standard output and exit. This doesn't work with `ttfautohintGUI` on MS Windows. `--version`, `-v` : On the console, print version information on standard output and exit. This doesn't work with `ttfautohintGUI` on MS Windows. `--ttfa-info`, `-T`\ \ \ (not in `ttfautohintGUI`) : Print [`TTFA` table](#add-ttfa-info-table) of the input font on standard output if present, then exit. `--debug`\ \ \ (not in `ttfautohintGUI`) : Print *a lot* of debugging information on standard error while processing a font (you should redirect stderr to a file). To reduce the amount of debug data it is recommended to restrict the hinting process to a single PPEM value, e.g., ``` ttfautohint --debug -l 15 -r 15 ... > debug.txt 2>&1 ``` Background and Technical Details ================================ [Real-Time Grid Fitting of Typographic Outlines](http://www.tug.org/TUGboat/tb24-3/lemberg.pdf) is a scholarly paper that describes FreeType's auto-hinter in some detail. Regarding the described data structures it is slightly out of date, but the algorithm itself hasn't changed in general. The next few subsections are mainly based on this article, introducing some important concepts. Note that ttfautohint only does hinting along the vertical direction (modifying y\ coordinates only). Segments and Edges ------------------ A glyph consists of one or more *contours* (this is, closed curves). For example, glyph 'O' consists of two contours, while glyph 'I' has only one. ![The letter 'O' has two contours, an inner and an outer one, while letter 'I' has only an outer contour.](img/o-and-i) A *segment* is a series of consecutive points of a contour (including its Bézier control points) that are approximately aligned along a coordinate axis. A segment has one of three possible directions: left, right, or none (which means neither left nor right), derived from the TrueType outline directions. ttfautohint itself creates segments that contain at least two points. Using control instructions, however, it is possible to create one-point segments, which are useful for fine-tuning the hinting process. ![A serif. Contour and control points are represented by squares and circles, respectively. The bottom 'line' DE is approximately aligned along the horizontal axis, thus it forms a segment of 7\ points. Together with the two other horizontal segments, BC and FG, they form two edges (BC+FG, DE).](img/segment-edge) An *edge* corresponds to a single coordinate value (allowing for a small threshold) on the main dimension that collects one or more segments, all pointing into the same direction (either left or right, all others are ignored). While finding segments is done on the unscaled outline, finding edges is bound to the device resolution. See [below](#hint-sets) for an example. In general, segments and edges pointing into different directions 'repel' each other, thus preventing alignment on the same vertical coordinate if they are near. Note that this is a simplification, but it should help understand how to manipulate and/or create segments in control instructions files. The analysis to find segments and edges is specific to a writing system, see [below](#writing-systems). Feature Analysis ---------------- The auto-hinter analyzes a font in two steps. Right now, everything described here happens for the horizontal axis only, providing vertical hinting. * Global Analysis This affects the hinting of all glyphs, trying to give them a uniform appearance. + Compute standard horizontal stem width of the font. The value is normally taken from glyphs that resemble letter 'o'. If, for a given script, there is no glyph for at least one standard character in the input font, a fallback stem width gets used. See also option [`--fallback-stem-width`](#fallback-stem-width). The stem width(s) found by the algorithm can be overridden with the [`width`](#stem-width-adjustments) control instruction. + Compute blue zones, see [below](#blue-zones). If the stem widths of single glyphs differ by a large value, or if ttfautohint fails to find proper blue zones, hinting becomes quite poor, possibly leading even to severe shape distortions. Table: script-specific standard characters of the 'latin' writing system Script Standard characters -------- --------------------- `adlm` '𞤌', U+1E90C, ADLAM CAPITAL LETTER O '𞤮', U+1E92E, ADLAM SMALL LETTER O `arab` 'Ù€', U+0640, ARABIC TATWEEL 'Ù„', U+0644, ARABIC LETTER LAM 'Ø­', U+062D, ARABIC LETTER HAH `armn` 'Ö…', U+0585, ARMENIAN SMALL LETTER OH 'Õ•', U+0555, ARMENIAN CAPITAL LETTER OH `avst` 'ð¬š', U+10B1A, AVESTAN LETTER THE `bamu` 'ê›', U+A6C1, BAMUM LETTER YUQ 'ꛯ', U+A6EF, BAMUM LETTER KOGHOM `beng` '০', U+09E6, BENGALI DIGIT ZERO '৪', U+09EA, BENGALI DIGIT FOUR `buhd` 'á‹', U+174B, BUHID LETTER MA 'á', U+174F, BUHID LETTER WA `cakm` '𑄤', U+11124, CHAKMA LETTER WAA '𑄉', U+11109, CHAKMA LETTER GAA 'ð‘„›', U+1111B, CHAKMA LETTER PAA `cans` 'ᑌ', U+144C, CANADIAN SYLLABICS TE 'ᓚ', U+14DA, CANADIAN SYLLABICS LA `cari` 'ðŠ«', U+102AB, CARIAN LETTER O 'ð‹‰', U+102C9, CARIAN LETTER RR `cher` 'Ꭴ', U+13A4, CHEROKEE LETTER U 'á…', U+13C5, CHEROKEE LETTER NV 'ꮕ', U+AB95, CHEROKEE SMALL LETTER NV `copt` 'Ⲟ', U+2C9E, COPTIC CAPITAL LETTER O 'ⲟ', U+2C9F, COPTIC SMALL LETTER O `cprt` 'ð …', U+10805, CYPRIOT SYLLABLE JA 'ð £', U+10823, CYPRIOT SYLLABLE RA `cyrl` '\Cyrillic{}о\cyrillic{}', U+043E, CYRILLIC SMALL LETTER O '\Cyrillic{}О\cyrillic{}', U+041E, CYRILLIC CAPITAL LETTER O `deva` 'ठ', U+0920, DEVANAGARI LETTER TTHA 'व', U+0935, DEVANAGARI LETTER VA 'ट', U+091F, DEVANAGARI LETTER TTA `dsrt` 'ð„', U+10404, DESERET CAPITAL LETTER LONG O 'ð¬', U+1042C, DESERET SMALL LETTER LONG O `ethi` 'á‹', U+12D0, ETHIOPIC SYLLABLE PHARYNGEAL A `geor` 'ი', U+10D8, GEORGIAN LETTER IN 'ე', U+10D4, GEORGIAN LETTER EN 'áƒ', U+10D0, GEORGIAN LETTER AN `geok` 'á‚¶', U+10B6, GEORGIAN CAPITAL LETTER GHAN 'Ⴑ', U+10B1, GEORGIAN CAPITAL LETTER SAN 'â´™', U+2D19, GEORGIAN SMALL LETTER CHIN `glag` 'â°•', U+2C15, GLAGOLITIC CAPITAL LETTER TVRIDO 'â±…', U+2C45, GLAGOLITIC SMALL LETTER TVRIDO `goth` 'ðŒ´', U+10334, GOTHIC LETTER AIHVUS 'ðŒ¾', U+1033E, GOTHIC LETTER JER 'ðƒ', U+10343, GOTHIC LETTER SAUIL `grek` '\Greek{}ο\greek{}', U+03BF, GREEK SMALL LETTER OMICRON '\Greek{}Ο\greek{}', U+039F, GREEK CAPITAL LETTER OMICRON `gujr` 'ટ', U+0A9F, GUJARATI LETTER TTA '૦', U+0AE6, GUJARATI DIGIT ZERO `guru` 'ਠ', U+0A20, GURMUKHI LETTER TTHA 'ਰ', U+0A30, GURMUKHI LETTER RA '੦', U+0A66, GURMUKHI DIGIT ZERO `hebr` '×', U+05DD, HEBREW LETTER FINAL MEM `kali` 'ê¤', U+A90D, KAYAH LI LETTER NGA '꤀', U+A900, KAYAH LI DIGIT ZERO `knda` '೦', U+0CE6, KANNADA DIGIT ZERO 'ಬ', U+0CAC, KANNADA LETTER BA `khmr` '០', U+17E0, KHMER DIGIT ZERO `lao` 'à»', U+0ED0, LAO DIGIT ZERO `latn` '\Latin{}o\latin{}', U+006F, LATIN SMALL LETTER O '\Latin{}O\latin{}', U+004F, LATIN CAPITAL LETTER O '\Latin{}0\latin{}', U+0030, DIGIT ZERO `lisu` 'ꓳ', U+A4F3, LISU LETTER `mlym` 'à´ ', U+0D20, MALAYALAM LETTER TTHA 'à´±', U+0D31, MALAYALAM LETTER RRA `mymr` 'á€', U+101D, MYANMAR LETTER WA 'င', U+1004, MYANMAR LETTER NGA 'ဂ', U+1002, MYANMAR LETTER GA `nkoo` 'ß‹', U+07CB, NKO LETTER EE '߀', U+07C0, NKO DIGIT ZERO `olck` 'á±›', U+1C5B, OL CHIKI LETTER AT `orkh` 'ð°—', U+10C17, OLD TURKIC LETTER YENISEI AY `osge` 'ð“‚', U+104C2, OSAGE CAPITAL LETTER O 'ð“ª', U+104EA, OSAGE SMALL LETTER O `osma` 'ð’†', U+10486, OSMANYA LETTER DEEL 'ð’ ', U+104A0, OSMANYA DIGIT ZERO `saur` 'ê¢', U+A89D, SAURASHTRA LETTER TTHA 'ê£', U+A8D0, SAURASHTRA DIGIT ZERO `shaw` 'ð‘´', U+10474, SHAVIAN LETTER OAK `sinh` 'à¶§', U+0DA7, SINHALA LETTER ALPAPRAANA TTAYANNA `sund` 'á®°', U+1BB0, SUNDANESE DIGIT ZERO `taml` '௦', U+0BE6, TAMIL DIGIT ZERO `tavt` 'ꪒ', U+AA92, TAI VIET LETTER LOW DO 'ꪫ', U+AAAB, TAI VIET LETTER HIGH VO `telu` '౦', U+0C66, TELUGU DIGIT ZERO 'à±§', U+0C67, TELUGU DIGIT ONE `tfng` 'âµ”', U+2D54, TIFINAGH LETTER YAR `thai` 'า', U+0E32, THAI CHARACTER SARA AA 'ๅ', U+0E45, THAI CHARACTER LAKKHANGYAO 'à¹', U+0E50, THAI DIGIT ZERO `vaii` 'ꘓ', U+A613, VAI SYMBOL FEENG 'ê–œ', U+A59C, VAI SYLLABLE BHU 'ê–´', U+A5B4, VAI SYLLABLE KU Table: standard characters of the 'latin' writing system, special scripts Script Standard characters ---------- --------------------- `khms` 'á§¡', U+19E1, KHMER SYMBOL MUOY KOET '᧪', U+19EA, KHMER SYMBOL DAP KOET `latb` '\Latin{}â‚’\latin{}', U+2092, LATIN SUBSCRIPT SMALL LETTER O '\Latin{}â‚€\latin{}', U+2080, SUBSCRIPT ZERO `latp` '\Latin{}áµ’\latin{}', U+1D52, MODIFIER LETTER SMALL O '\Latin{}á´¼\latin{}', U+1D3C, MODIFIER LETTER CAPITAL O '\Latin{}â°\latin{}', U+2070, SUPERSCRIPT ZERO * Glyph Analysis This is a per-glyph operation. + Find segments and edges. + Link edges to set up stems and serifs. The abovementioned paper gives more details on what exactly constitutes a stem or a serif and how the algorithm works. Blue Zones ---------- ![Two blue zones relevant to the glyph 'a'. Vertical point coordinates of *all* glyphs within these zones are aligned, provided the blue zone is active (this is, its vertical size is smaller than 3/4\ pixels).](img/blue-zones) Outlines of certain characters are used to determine *blue zones*. This concept is the same as with Type\ 1 fonts: All glyph points that lie in certain small horizontal zones get aligned vertically. The tables below show the blue zone characters of all available scripts of the latin writing system; the values are hard-coded in the source code. Since the auto-hinter takes mean values it is not necessary that all characters of a zone are present. 'Round' characters in blue zones (e.g., the top and bottom of 'O' or the bottom of 'g') are used to control overshoot handling. Blue zones marked with an asterisk are x\ height blue zones, which are adjusted to be on the pixel grid (to improve rendering at small sizes) by scaling the remaining blue zones before they are adjusted to the grid. See also option [`--increase-x-height`](#x-height-increase-limit). Table: `adlm` (Adlam) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters 𞤌 𞤅 𞤈 𞤠𞤔 𞤚 2 bottom of capital letters 𞤂 𞤖 3* top of small letters 𞤬 𞤮 𞤻 𞤼 𞤾 4 bottom of small letters 𞤤 𞤨 𞤩 𞤭 𞤴 𞤸 𞤺 𞥀 Table: `arab` (Arabic) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters with vertical stroke ا Ø¥ Ù„ Ùƒ Ø· ظ 2 bottom of letters ت Ø« Ø· ظ Ùƒ 3 glyph joining Ù€ Table: `armn` (Armenian) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters Ô± Õ„ Õ’ Õ“ Ô² Ô³ Ô´ Õ• 2 bottom of capital letters Õ’ Õˆ Õ“ Õƒ Õ‡ Õ Õ Õ• 3 top of ascenders of small letters Õ¥ Õ§ Õ« Õ´ Õ¾ Öƒ Ö† Öƒ 4* top of small letters Õ¡ Õµ Ö‚ Õ½ Õ£ Õ» Ö€ Ö… 5 bottom of small letters Õ° Õ¸ Õ³ Õ¡ Õ¥ Õ® Õ½ Ö… 6 bottom of descenders of small letters Õ¢ Õ¨ Õ« Õ¬ Õ² Õº Öƒ Ö Table: `avst` (Avestan) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters 𬀠ð¬ ð¬ 𬛠2 bottom of letters 𬀠ð¬ Table: `bamu` (Bamum) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters êš§ ꚨ ê›› ꛉ ê› ê›ˆ ꛫ ꛯ 2 bottom of letters êš­ êš³ êš¶ ꛬ ꚢ êš½ ꛯ ꛲ Table: `beng` (Bengali) blue zones ID Blue zone Characters ---- ----------- ------------ 1 baseline (flat glyphs only) অ ড ত ন ব ভ ল ক 2 top of ascenders ই ট ঠ ি à§€ ৈ à§— 3* top of baseline ও ঠড ত ন ব ল ক 4 bottom of base characters অ ড ত ন ব ভ ল ক Contrary to scripts like latin, the baseline in Bengali is on the top, and we hint from top to bottom. Table: `buhd` (Buhid) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters á ሠ2 top of large letters á… áŠ áŽ 3* top of small letters Ⴀრበጠ4 bottom of letters ဠრᆠበዠá á‘ Table: `cakm` (Chakma) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters 𑄃 ð‘„… 𑄉 ð‘„™ ð‘„— 2 bottom of letters ð‘„… ð‘„› ð‘„ ð‘„— ð‘„“ 3 bottom of descenders of letters 𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢 Table: `cans` (Canadian Syllabics) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters á—œ á–´ á á’£ á‘« ᑎ ᔑ á—° 2 bottom of letters á—¶ á–µ á’§ რᑌ ᒠᔑ á—¢ 3* top of small letters á““ á“• á“€ á“‚ á“„ á•„ ᕆ ᘣ 4 bottom of small letters ᕃ á“‚ á“€ á•‚ á“— ᓚ ᕆ ᘣ 5 top of superscript letters ᪠ᙆ ᣘ ᢠᒾ ᣗ ᔆ 6 bottom of superscript letters ᙆ á—® á’» ហᔆ á’¡ á’¢ á“‘ Table: `cari` (Carian) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ðŠ§ ðŠ« ðŠ¬ ðŠ­ ðŠ± ðŠº ðŠ¼ ðŠ¿ 2 bottom of letters ðŠ£ ðŠ§ ðŠ· ð‹€ ðŠ« ðŠ¸ ð‹‰ Table: `cher` (Cherokee) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters ᆠᎻ Ꭼ რᎤ ᣠᎦ á• 2 bottom of capital letters ᆠᎻ Ꭼ რᎤ ᣠᎦ á• 3 top of ascenders of small letters ê®’ ꮤ ê®¶ ê­´ ê­¾ ê®— ê® ê®¿ 4* top of small letters ê®– ê­¼ ꮓ ê®  ꮳ ê­¶ ꮥ ê®» 5 bottom of small letters ê®– ê­¼ ꮓ ê®  ꮳ ê­¶ ꮥ ê®» 6 bottom of descenders of small letters á¸ ê® ê­¹ ê­» Table: `copt` (Coptic) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters Ⲍ Ⲏ â²  Ⳟ Ⲟ ⲠⲤ Ⳋ 2 bottom of capital letters ⳠⳘ Ⳟ Ⲏ Ⲟ ⲠⳜ â²° 3* top of small letters ⲠⲠⲡ ⳟ ⲟ ⲑ â²¥ ⳋ 4 bottom of small letters ⳑ â³™ ⳟ Ⲡⲟ ⲑ â³ â³’ Table: `cprt` (Cypriot) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ð  ð ™ ð ³ ð ± ð … ð “ ð £ ð ¦ 2 bottom of letters ð ƒ ð Š ð › ð £ ð ³ ð µ ð  3 top of small letters ð ˆ ð  ð – 4 bottom of small letters ð ˆ ð  ð – Table: `cyrl` (Cyrillic) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters \Cyrillic{}Б Ð’ Е П З О С Э\cyrillic{} 2 bottom of capital letters \Cyrillic{}Б Ð’ Е Ш З О С Э\cyrillic{} 3* top of small letters \Cyrillic{}Ñ… п н ш е з о Ñ\cyrillic{} 4 bottom of small letters \Cyrillic{}Ñ… п н ш е з о Ñ\cyrillic{} 5 bottom of descenders of small letters \Cyrillic{}Ñ€ у Ñ„\cyrillic{} Table: `deva` (Devanagari) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of ascenders ई ठओ औ ि ी ो ौ 2 top of baseline क म अ आ थ ध भ श 3* top of baseline (flat glyphs only) क न म उ छ ट ठ ड 4 bottom of base characters क न म उ छ ट ठ ड 5 bottom of descenders ॠृ Contrary to scripts like latin, the baseline in Devanagari is on the top, and we hint from top to bottom. Note that some fonts have extreme variation in the height of the round elements in Zone\ 3; for this reason we also define Zone\ 1, which must be always present. Table: `dsrt` (Deseret) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters ð‚ ð„ ð‹ ð— ð‘ 2 bottom of capital letters ð€ ð‚ ð„ ð— ð› 3* top of small letters ðª ð¬ ð³ ð¿ ð¹ 4 bottom of small letters ð¨ ðª ð¬ ð¿ 𑃠Table: `ethi` (Ethiopian) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ሀ ሃ ዘ á ማ በ á‹‹ á‹ 2 bottom of letters ለ ሠበ ዘ ሀ ሪ ዠጨ Table: `geok` (Georgian Khutsuri) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of Asomtavruli letters Ⴑ á‚§ Ⴙ Ⴜ Ⴄ á‚¥ Ⴓ Ⴚ 2 bottom of Asomtavruli letters Ⴄ á‚¥ á‚§ Ⴈ Ⴆ Ⴑ Ⴊ á‚« 3* top of Nuskhuri letters â´ â´— â´‚ â´„ â´… â´‡ â´” â´– 4 bottom of Nuskhuri letters â´ˆ â´Œ â´– â´Ž â´ƒ â´† â´‹ â´¢ 5 top of ascender Nuskhuri letters â´ â´‘ â´“ â´• â´™ â´› â´¡ â´£ 6 bottom of Nuskhuri descender letters â´„ â´… â´” â´• â´ â´‚ â´˜ â´ Georgian Asomtavruli and Nuskhuri form the old ecclesiastical script, Khutsuri. Note that fonts show a great variation in height and depth of ascender and descender letter forms. Table: `geor` (Georgian Mkhedruli) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of Mkhedruli letters გ დ ე ვ თ ი რღ 2 bottom of Mkhedruli letters რზ მ ს შ ძ ხ ჰ 3 top of ascender Mkhedruli letters ს ხ ქ ზ მ შ ჩ წ 4 bottom of descender Mkhedruli letters ე ვ ჟ ტ უ ფ ქ ყ Georgian Mkhedruli support is incomplete; it doesn't yet contain characters for Mtavruli (which are not yet encoded in Unicode), the uppercase glyph variants of Mkhedruli. Table: `glag` (Glagolitic) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters â°… â°” â°ª â°„ â°‚ â°Š â°« â°‹ 2 bottom of capital letters â°… â°„ â°‚ â°ª â°ž â°¡ â°Š â°” 3* top of small letters â°µ ⱄ ⱚ â°´ â°² â°º â±› â°» 4 bottom of small letters â°µ â°´ â°² ⱚ ⱎ ⱑ â°º ⱄ Table: `goth` (Gothic) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ðŒ² ðŒ¶ ð€ ð„ ðŒ´ ðƒ ðˆ ðŒ¾ 2 bottom of letters ðŒ¶ ðŒ´ ðƒ ðˆ Table: `grek` (Greek) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters \Greek{}Γ Î’ Ε Ζ Θ Ο Ω\greek{} 2 bottom of capital letters \Greek{}Î’ Δ Ζ Ξ Θ Ο\greek{} 3 top of 'small beta' like letters \Greek{}β θ δ ζ λ ξ\greek{} 4* top of small letters \Greek{}α ε ι ο Ï€ σ Ï„ ω\greek{} 5 bottom of small letters \Greek{}α ε ι ο Ï€ σ Ï„ ω\greek{} 6 bottom of descenders of small letters \Greek{}β γ η μ Ï Ï† χ ψ\greek{} Table: `gujr` (Gujarati) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of letters ત ન ઋ ઌ છ ટ ર ૦ 2 bottom of letters ખ ગ ઘ ઞ ઇ ઈ ઠ જ 3 top of ascenders ઈ ઊ િ à«€ લી શà«àªšàª¿ જિ સી 4 bottom of descenders ૠૃ à«„ ખૠછૃ છૄ 5 top of Gujarati digits ૦ à«§ ૨ à«© à«­ Table: `guru` (Gurmukhi) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of ascenders ਇ ਈ ਉ ਠਓ ੳ ਿ à©€ 2 top of baseline ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ 3* top of baseline (flat glyphs only) ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ 4 bottom of characters ਅ ਠਓ ਗ ਜ ਠ ਰ ਸ 5 top of Gurmukhi digits ੦ à©§ ੨ à©© à©­ Table: `hebr` (Hebrew) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ב ד ×” ×— ך ×› × ×¡ 2 bottom of letters ב ט ×› × ×¡ צ 3 bottom of descenders of letters ×§ ך ן ×£ ×¥ Table: `kali` (Kayah Li) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of letters ꤅ ê¤ ê¤ ê¤‹ ꤀ ê¤ 2 bottom of letters ꤈ ꤘ ꤀ ê¤ ê¤¢ 3 top of ascending letters ꤖ ꤡ 4 bottom of descending letters ꤑ ꤜ ꤞ 5 bottom of large descending letters ꤑ꤬ ꤜ꤭ ꤔ꤬ Table: `khmr` (Khmer) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of letters áž áž‘ áž“ áž§ áž© áž¶ 2 top of subscript cluster components ក្ក ក្ហក្គ ក្ហ3 bottom of letters ហឃ áž… áž‹ áž” ម áž™ áž² 4 bottom of descenders ážáŸ’ážš រៀ ឲ្យ អឿ 5 bottom of large descenders ន្ážáŸ’រៃ ង្ážáŸ’áž™ ក្បៀ ច្រៀ ន្ážáž¿ ល្បឿ Table: `khms` (Khmer Symbols) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of symbols for waxing á§  á§¡ 2 bottom of symbols for waning á§¶ á§¹ Khmer symbols are used for lunar dates. Table: `knda` (Kannada) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ಇ ಊ ಠಣ ಸಾ ನಾ ದಾ ರಾ 2 bottom of letters ಅ ಉ ಎ ಲ ೦ ೨ ೬ à³­ Table: `lao` (Lao) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of letters າ ດ ອ ມ ລ ວ ຣ ງ 2 bottom of letters າ ອ ບ ຠຣ ຮ ວ ຢ 3 top of ascenders ປ ຢ ຟ ຠ4 top of large ascenders ໂ ໄ ໃ 5 bottom of descenders ງ ຊ ຖ ຽ ໆ ຯ Table: `latb` (Latin Subscripts) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital characters \Latin{}â‚€ ₃ â‚… ₇ ₈\latin{} 2 bottom of capital characters \Latin{}â‚€ â‚ â‚‚ ₃ ₈\latin{} 3 top of 'small f' like characters \Latin{}áµ¢ â±¼ â‚• â‚– â‚—\latin{} 4* top of small characters \Latin{}â‚ â‚‘ â‚’ â‚“ â‚™ â‚› áµ¥ ᵤ áµ£\latin{} 5 bottom of small characters \Latin{}â‚ â‚‘ â‚’ â‚“ â‚™ â‚› áµ¥ ᵤ áµ£\latin{} 6 bottom of descenders of small characters \Latin{}ᵦ áµ§ ᵨ ᵩ ₚ\latin{} Subscript latin characters are similar to normal latin characters. Table: `latn` (Latin) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters \Latin{}T H E Z O C Q S\latin{} 2 bottom of capital letters \Latin{}H E Z L O C U S\latin{} 3 top of 'small f' like letters \Latin{}f i j k d b h\latin{} 4* top of small letters \Latin{}u v x z o e s c\latin{} 5 bottom of small letters \Latin{}n r x z o e s c\latin{} 6 bottom of descenders of small letters \Latin{}p q g j y\latin{} Table: `latp` (Latin Superscripts) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital characters \Latin{}Ⱐ³ âµ â· áµ€ á´´ á´± á´¼\latin{} 2 bottom of capital characters \Latin{}Ⱐ¹ ² ³ á´± á´¸ á´¼ áµ\latin{} 3 top of 'small f' like characters \Latin{}ᵇ ᵈ ᵠʰ ʲ á¶  â±\latin{} 4* top of small characters \Latin{}ᵉ áµ’ ʳ Ë¢ Ë£ á¶œ á¶»\latin{} 5 bottom of small characters \Latin{}ᵉ áµ’ ʳ Ë¢ Ë£ á¶œ á¶»\latin{} 6 bottom of descenders of small characters \Latin{}áµ– ʸ áµ\latin{} Superscript latin characters are similar to normal latin characters. Table: `lisu` (Lisu) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ê“¡ ê“§ ꓱ ê“¶ ê“© ꓚ ꓵ ꓳ 2 bottom of letters ê“• ꓜ ꓞ ê“¡ ê“› ê“¢ ꓳ ê“´ Table: `mlym` (Malayalam) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters à´’ à´Ÿ à´  à´± à´š à´ª à´šàµà´š à´ªàµà´ª 2 bottom of letters à´Ÿ à´  à´§ à´¶ à´˜ à´š à´¥ à´² Table: `mymr` (Myanmar) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of letters ဠဂ င ဒ ဠᥠአዠ2 bottom of letters င ဎ ဒ ပ ဗ ဠአዠ3 top of ascenders of characters ဩ ြ á á ᆠါ ိ 3 bottom of descenders of letters ဉ ည ဥ ဩ ဨ á‚ á… á‰ Table: `nkoo` (N'Ko) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ß ß‰ ß’ ߟ ß– ßœ ß  ߥ 2 bottom of letters ߀ ߘ ß¡ ß  ߥ 3* top of small letters ß ß› ß‹ 4 bottom of small letters ߎ ß ß› ß‹ Table: `olck` (Ol Chiki) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters á±› ᱜ ᱠᱡ á±¢ á±¥ 2 bottom of letters á±› ᱜ ᱠᱡ á±¢ á±¥ Table: `orkh` (Old Turkic) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ð°— ð°˜ ð°§ 2 bottom of letters ð°‰ ð°— ð°¦ ð°§ Table: `osge` (Osage) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of capital letters ð’¾ ð“ 𓒠𓓠𒻠𓂠𒵠𓆠2 bottom of capital letters ð’° ð“ 𓂠𒿠𓎠𒹠3 bottom of descenders of capital letters ð’¼ ð’½ ð’¾ 4* top of small letters 𓵠𓶠𓺠𓻠ð“ 𓣠𓪠𓮠5 bottom of small letters 𓘠𓚠𓣠𓵠𓡠𓧠𓪠𓶠6 top of ascenders of small letters 𓤠𓦠𓸠𓹠𓛠7 bottom of descenders of small letters 𓤠𓥠𓦠Table: `osma` (Osmanya) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ð’† ð’‰ ð’ ð’’ ð’˜ ð’› ð’  ð’£ 2 bottom of letters ð’€ ð’‚ ð’† ð’ˆ ð’Š ð’’ ð’  ð’© Table: `saur` (Saurashtra) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ê¢ ê¢› 2 bottom of letters ꢂ ꢨ ꢺ ꢤ ꢎ Table: `shaw` (Shavian) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ð‘• ð‘™ 2 bottom of letters 𑔠𑖠𑗠𑹠𑻠3 bottom of descenders of letters 𑟠𑣠4* top of small letters 𑱠𑲠𑳠𑴠𑸠𑺠𑼠5 bottom of small letters 𑴠𑻠𑹠Table: `sinh` (Sinhala) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ඉ à¶š à¶ à¶³ à¶´ ය à¶½ à·† 2 bottom of letters à¶‘ à¶” à¶ à¶¢ à¶§ à¶® à¶° à¶» 3 bottom of descenders of letters ද à¶³ à¶‹ à¶½ à¶­à·– à¶­à·” à¶¶à·” දු Table: `sund` (Sundanese) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ᮋ ᮞ á®® ᮽ á®° ᮈ 2 bottom of letters ᮄ á®” ᮕ á®— á®° ᮆ ᮈ ᮉ 3 bottom of descenders of letters ᮼ ᳄ Table: `taml` (Tamil) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters உ à®’ ஓ à®± ஈ க à®™ ச 2 bottom of letters க ச ல à®¶ உ à®™ ட ப Table: `tavt` (Tai Viet) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters ꪆ ꪔ ꪒ ꪖ ꪫ 2 bottom of letters ꪉ ꪫ ꪮ Table: `telu` (Telugu) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters à°‡ à°Œ à°™ à°ž à°£ à°± ౯ 2 bottom of letters à°… à°• à°š à°° à°½ ౨ ౬ Table: `tfng` (Tifinagh) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of letters âµ” âµ™ âµ› ⵞ â´µ â´¼ â´¹ ⵎ 2 bottom of letters âµ” âµ™ âµ› ⵞ â´µ â´¼ â´¹ ⵎ Table: `thai` (Thai) blue zones ID Blue zone Characters ---- ----------- ------------ 1* top of letters บ เ ๠อ ภา 2 bottom of letters บ ป ษ ฯ อ ย ฮ 3 top of ascenders of letters ป ภฟ 4 top of large ascenders of letters โ ใ ไ 5 bottom of descenders of letters ฎ ภฤ ฦ 6 bottom of large descenders of letters ภภ7 top of Thai digits ๠๑ ๓ Table: `vaii` (Vai) blue zones ID Blue zone Characters ---- ----------- ------------ 1 top of vai letters ê— ê˜– ꘙ ꘜ ê–œ ê– ê”… ê•¢ 2 bottom of vai letters ê— ê˜– ꘙ ê—ž ê”… ê•¢ ê–œ ꔆ ![This image shows the relevant glyph terms for vertical blue zone positions.](img/glyph-terms) Grid Fitting ------------ Aligning outlines along the grid lines is called *grid fitting*. It doesn't necessarily mean that the outlines are positioned *exactly* on the grid, however, especially if you want a smooth appearance at different sizes. This is the central routine of the auto-hinter; its actions are highly dependent on the used writing system. Currently, only one writing system is available (latin), providing support for scripts like Latin or Greek. * Align edges linked to blue zones. * Fit edges to the pixel grid. * Align serif edges. * Handle remaining 'strong' points. Such points are not part of an edge but are still important for defining the shape. This roughly corresponds to the `IP` TrueType instruction. * Everything else (the 'weak' points) is handled with an 'IUP' instruction. The following images illustrate the hinting process, using glyph 'a' from the freely available font '[Ubuntu Book](http://font.ubuntu.com)'. The manual hints were added by [Dalton Maag Ltd], the used application to create the hinting debug snapshots was [FontForge]. ![Before hinting.](img/a-before-hinting.png) ![After hinting, using manual hints.](img/a-after-hinting.png) ![After hinting, using ttfautohint. Note that the hinting process doesn't change horizontal positions.](img/a-after-autohinting.png) Hint Sets --------- In ttfautohint terminology, a *hint set* is the *optimal* configuration for a given PPEM (pixel per EM) value. In the range given by the `--hinting-range-min` and `--hinting-range-max` options, ttfautohint creates hint sets for every PPEM value. For each glyph, ttfautohint automatically determines whether a new set should be emitted for a PPEM value if it finds that it differs from a previous one. For some glyphs it is possible that one set covers, say, the range 8px-1000px, while other glyphs need 10 or more such sets. In the PPEM range below `--hinting-range-min`, ttfautohint always uses just one set, in the PPEM range between `--hinting-range-max` and `--hinting-limit`, it also uses just one set. One of the hinting configuration parameters is the decision which segments form an edge. For example, let us assume that two segments get aligned on a single horizontal edge at 11px, while two edges are used at 12px. This change makes ttfautohint emit a new hint set to accomodate this situation. The next images illustrate this, using a Cyrillic letter (glyph 'afii10108') from the 'Ubuntu book' font, processed with ttfautohint. ![Before hinting, size 11px.](img/afii10108-11px-before-hinting.png) ![After hinting, size 11px. Segments 43-27-28 and 14-15 are aligned on a single edge, as are segments 26-0-1 and 20-21.](img/afii10108-11px-after-hinting.png) ![Before hinting, size 12px.](img/afii10108-12px-before-hinting.png) ![After hinting, size 12px. The segments are not aligned. While segments 43-27-28 and 20-21 now have almost the same horizontal position, they don't form an edge because the outlines passing through the segments point into different directions.](img/afii10108-12px-after-hinting.png) Obviously, the more hint sets get emitted, the larger the bytecode ttfautohint adds to the output font. To find a good value\ *n* for `--hinting-range-max`, some experimentation is necessary since *n* depends on the glyph shapes in the input font. If the value is too low, the hint set created for the PPEM value\ *n* (this hint set gets used for all larger PPEM values) might distort the outlines too much in the PPEM range given by\ *n* and the value set by `--hinting-limit` (at which hinting gets switched off). If the value is too high, the font size increases due to more hint sets without any noticeable hinting effects. Similar arguments hold for `--hinting-range-min` except that there is no lower limit at which hinting is switched off. An example. Let's assume that we have a hinting range 10\ <= ppem <=\ 100, and the hinting limit is set to 250. For a given glyph, ttfautohint finds out that four hint sets must be computed to exactly cover this hinting range: 10-15, 16-40, 41-80, and 81-100. For PPEM values below 10ppem, the hint set covering 10-15ppem is used, for PPEM values larger than 100 the hint set covering 81-100ppem is used. For PPEM values larger than 250, no hinting gets applied. Composite Glyphs ---------------- The ttfautohint library (and programs) supports two solutions for handling composite glyphs, to be controlled with option [`--composites`](#hint-composites). This section contains some general information, then covers the case where the option is off, while the next section describes how ttfautohint behaves if this option is activated. Regardless of the `--composites` option, ttfautohint performs a scan over all composite glyphs to assure that components of a composite glyph inherit its style, as described [later](#opentype-features). However, components that are shifted vertically will be skipped. For example, if the glyph 'Agrave' uses a shifted 'grave' accent glyph, the accent is ignored. On the other hand, if there is a glyph 'agrave' that uses the same 'grave' glyph vertically unshifted, 'grave' does inherit the style. If `--composites` is off, components are hinted separately, then put together. Separate hinting implies that the current style's blue zones are applied to all subglyphs in its original, unshifted positions. In case you want to shift components vertically, it is *mandatory* to set bit\ 2 (value\ 4), `ROUND_XY_TO_GRID`, in the flag variable of the composite glyph description to get visually pleasing results, as the images below demonstrate. ![Here, the subscript glyphs are composites each having a single element that is shifted down. If option `--composites` is not used, subglyphs are hinted before they are glued together (possibly applying scaling and shifting). Because the `ROUND_XY_TO_GRID` flag isn't set, the vertical translation doesn't align the subglyph to the pixel grid, causing severe distortions.](img/composite-no-round-xy-to-grid.png) ![The same as before, but with `ROUND_XY_TO_GRID` set. Now the subscript glyphs look identical to the superscripts.](img/composite-round-xy-to-grid.png) ![For comparison purposes, here the result *with* option `--composites` (and no `ROUND_XY_TO_GRID`). The composite glyphs as a whole get hinted; consequently, the subscript glyphs get separate blue zones. At the displayed size of 16ppem the vertical positions of the subscript blue zones are rounded differently if compared to the superscript zones, thus the smaller glyph height.](img/composite-no-round-xy-to-grid-option-c.png) The '\.ttfautohint' Glyph ------------------------- If option [`--composites`](#hint-composites) is used, ttfautohint doesn't hint subglyphs of composite glyphs separately. Instead, it hints the whole glyph, this is, composites get recursively expanded internally so that they form simple glyphs, then hints are applied -- this is the normal working mode of FreeType's auto-hinter. One problem, however, must be solved: Hinting for subglyphs (which usually are used as normal glyphs also) must be deactivated so that nothing but the final bytecode of the composite gets executed. The trick used by ttfautohint is to prepend a composite element called '\.ttfautohint', a dummy glyph with a single point, and which has a single job: Its bytecode increases a variable (to be more precise, it is a CVT register called `cvtl_is_subglyph` in the source code), indicating that we are within a composite glyph. The final bytecode of the composite glyph eventually decrements this variable again. As an example, let's consider composite glyph 'Agrave' ('À'), which has the subglyph 'A' as the base and 'grave' as its accent. After processing with ttfautohint it consists of three components: '\.ttfautohint', 'A', and 'grave' (in this order). Bytecode of Action ------------- -------- .ttfautohint increase `cvtl_is_subglyph` (now: 1) A do nothing because `cvtl_is_subglyph` > 0 grave do nothing because `cvtl_is_subglyph` > 0 Agrave decrease `cvtl_is_subglyph` (now: 0) apply hints because `cvtl_is_subglyph` == 0 Some technical details (which you might skip): All glyph point indices get adjusted since each '\.ttfautohint' subglyph shifts all following indices by one. This must be done for both the bytecode and one subformat of OpenType's `GPOS` anchor tables. While this approach works fine on all tested platforms, there is one single drawback: Direct rendering of the '\.ttfautohint' subglyph (this is, rendering as a stand-alone glyph) disables proper hinting of all glyphs in the font! Under normal circumstances this never happens because '\.ttfautohint' doesn't have an entry in the font's `cmap` table. (However, some test and demo programs like FreeType's `ftview` application or other glyph viewers that are able to bypass the `cmap` table might be affected.) Writing Systems --------------- In FreeType terminology, a writing system is a set of functions that provides auto-hinting for certain scripts. Right now, only two writing systems from FreeType's auto-hinter are available in ttfautohint: 'dummy' and 'latin'. The former handles the 'no-script' case; details to 'latin' follow in the next section. Scripts ------- ttfautohint needs to know which script should be used to hint a specific glyph. To do so, it checks a glyph's Unicode character code whether it belongs to a given script. See '[Character Ranges](#character-ranges)' for a complete list of all handled scripts and its ranges. This list is auto-generated from a source code file, covering the 'latin' writing system. It also covers some non-latin scripts (in the Unicode sense) that have similar typographical properties. In ttfautohint, scripts are identified by four-character tags (if there are less characters, spaces are appended). The value `none` indicates 'no script'. Each script is represented by two tables to handle 'base' and 'non-base' characters. For ttfautohint, a non-base character is something that should not be affected by blue zones, regardless of whether this is a spacing or no-spacing glyph. In other words, non-base characters are hinted using a script's default stem width without applying blue zones. Right now, there are two pseudo-scripts that are used as fallbacks: `latb` and `latp`, used for latin subscript and superscript characters, respectively. Its main usage is support of phonetic alphabets like the IPA, which intermix those characters with normal characters sitting on the baseline, and which are not specially handled in corresponding OpenType features like `sups`. If a glyph's character code is not covered by a script range, it is handled by a *fallback script*. By default, the fallback script is `none`, which indicates handling by the 'latin' writing system without applying script-specific blue zones (but aligning stems to the grid if possible). The fallback script can be changed; see option [`--fallback-script`](#fallback-script). The user can also select whether uncovered glyphs are either hinted (which is the default) or scaled only with the fallback script's scaling parameters. This can be controlled with option [`--fallback-scaling`](#fallback-script). Note that fallback scaling only makes sense if the fallback script has x\ height blue zones, e.g., `cyrl` or `latn`. As a special case, specifying `none` as a fallback script and switching on fallback scaling ('`-f none -S`'), no hinting is applied at all to uncovered glyphs – using `none` always implies a scaling factor of\ 1. OpenType Features ----------------- (Please read the [OpenType specification] for details on *features*, `GSUB`, and `GPOS` tables, and how they relate to scripts.) For modern OpenType fonts, character ranges are not sufficient to handle scripts. * Due to glyph substitution in the font (as specified in a font's `GSUB` table), which handles ligatures and similar typographic features, there is no longer a one-to-one mapping from an input Unicode character to a glyph index. Some ligatures, like 'fi', actually do have Unicode values for historical reasons, but most of them don't. While it is possible to map ligature glyphs into Unicode's Private Use Area (PUA), code values from this area are arbitrary by definition and thus unusable for ttfautohint. * Some features like `sups` (for handling superscript) completely change the appearance and even vertical position of the affected glyphs. Obviously, the blue zones for 'normal' glyphs no longer fit, thus the auto-hinter puts them into a separate group (called *style* in FreeType speak), having its own set of blue zones. Table: OpenType features handled specially by ttfautohint Feature tag Description --------------- ------------- `c2cp` petite capitals from capitals `c2sc` small capitals from capitals `ordn` ordinals `pcap` petite capitals `sinf` scientific inferiors `smcp` small capitals `subs` subscript `sups` superscript `titl` titling There are two conditions to get a valid style for a feature in a given script. 1. One of the script's standard characters must be available in the feature. 2. The feature must provide characters to form at least one blue zone; see [above](#blue-zones). An additional complication is that features from the above table might use data not only from the `GSUB` but also from the `GPOS` table, containing information for glyph positioning. For example, the `sups` feature for superscripts might use the same glyphs as the `subs` feature for subscripts, simply moved up. ttfautohint skips such vertically shifted glyphs (except for accessing standard characters) because glyph positioning happens after hinting. Continuing our example, the `sups` feature wouldn't form a style, contrary to `subs`, which holds the unshifted glyphs. The remaining OpenType features of a script are not handled specially; the affected glyphs are simply hinted together with the 'normal' glyphs of the script. Note that a font might still contain some features not covered yet: OpenType has the concept of a *default script*; its data gets used for all scripts that aren't explicitly handled in a font. By default, ttfautohint unifies all affected glyphs from default script features with the `latn` script. This can be changed with option [`--default-script`](#default-script), if necessary. ttfautohint uses the [HarfBuzz] library for handling OpenType features. SFNT Tables ----------- ttfautohint touches almost all SFNT tables within a TrueType or OpenType font. Note that only OpenType fonts with TrueType outlines are supported. OpenType fonts with a `CFF` or `CFF2` table (this is, with PostScript outlines) won't work. * `glyf`: All hints in the table are replaced with new ones. If option [`--composites`](#hint-composites) is used, one glyph gets added (namely the '\.ttfautohint' glyph) and all composites get an additional component. * `cvt`, `prep`, and `fpgm`: These tables get replaced with data necessary for the new hinting bytecode. * `gasp`: Set up to always use grayscale rendering, for all sizes, with grid-fitting for standard hinting, and symmetric grid-fitting and symmetric smoothing for horizontal subpixel hinting (ClearType). * `DSIG`: If it exists, it gets replaced with a dummy version. ttfautohint can't digitally sign a font; you have to do that afterwards. * `name`: The 'version' entries are modified to add information about the parameters that have been used for calling ttfautohint. This can be controlled with the [`--no-info`](#ttfautohint-info) option. Family name entries might also be affected by option [`--family-suffix`](#family-suffix). * `GPOS`, `hmtx`, `loca`, `head`, `maxp`, `post`: Updated to fit the additional '\.ttfautohint' glyph, the additional subglyphs in composites, and the new hinting bytecode. * `LTSH`, `hdmx`: Since ttfautohint doesn't do any horizontal hinting, those tables are superfluous and thus removed. * `VDMX`: Removed, since it depends on the original bytecode, which ttfautohint removes. A font editor might recompute the necessary data later on. Problems -------- ### Interaction With FreeType Some versions of FreeType have an experimental extension for handling subpixel hinting; it is off by default and can be activated by setting the macro `TT_CONFIG_OPTION_SUBPIXEL_HINTING` to value\ 2 or\ 3 at compile time. This code has been contributed mainly by [Infinality], being a subset of his original patch. Many GNU/Linux distributions activate this code, or provide packages to activate it. [Note that starting with FreeType version 2.7 the Infinality extension is still available but superseded by a less aggressive subpixel hinting mode, to which the explanations in this section don't apply.] This extension changes the behaviour of many bytecode instructions to get better rendering results. However, not all changes are global; some of them are specific to certain fonts. For example, it contains font-specific improvements for the '[DejaVu] Sans' font family. The list of affected fonts is hard-coded; it can be found in FreeType's source code file `ttsubpix.c`. If you are going to process such specially-handled fonts with ttfautohint, serious rendering problems might show up. Since ttfautohint (intentionally) doesn't change the font name in the `name` table, the Infinality extension has no chance to recognize that the hints are different. All such problems vanish if the font gets renamed in its `name` table (the name of the font file itself doesn't matter), for example, by using option [`--family-suffix`](#family-suffix). ### Incorrect Unicode Character Map Fonts with an incorrect Unicode `cmap` table will not be properly hinted by ttfautohint. Especially older fonts do cheat; for example, there exist Hebrew fonts that map its glyphs to character codes 'A', 'B', etc., to make them work with non-localized versions of Windows\ 98, say. Since ttfautohint needs to find both standard and blue zone characters, it relies on correct Unicode values. If you want to handle such fonts, please fix their `cmap` tables accordingly before running ttfautohint. ### Irregular Glyph Heights The central concept of ttfautohint's hinting algorithm as discussed [above](#segments-and-edges) is to identify horizontal segments at extremum positions, especially for blue zones. If such a segment is missing, it cannot be associated with a blue zone, possibly leading to irregular heights for the particular glyph. Normally, a segment has a horizontal length of at least 20\ font units (assuming 2048 units per EM)^[To be more precise, the sum of the height and length of a segment must be at least 20 font units, and the height multiplied by\ 14 must not exceed the length. Thus (19,1) is also a valid minimum (length,height) pair, while (18,2) isn't. The value\ 20 is heuristic and hard-coded, as is the value\ 14 (corresponding to a slope of approx. 4.1°).]. Using a [Control Instructions File](#control-instructions-file), however, it is possible to define additional segments at arbitrary points that help overcome this restriction, making it possible to fix (most of) such problems. ### Diagonals ttfautohint doesn't handle diagonal lines specially. For thin outlines, this might lead to strokes that look too thick at smaller sizes. A font designer might compensate this to a certain amount by slightly reducing the stroke width of diagonal lines. However, in many cases the sub-optimal appearance of a stroke with borders that don't exactly fit the pixel grid is not the outline itself but an incorrect gamma value of the monitor: People tend to not properly adjust it, and the default values of most operating systems are too low, causing too much darkening of such strokes. It is thus of vital importance to compare ttfautohint's results with similar fonts to exclude any systematic effect not related to the outlines themselves. Extending ttfautohint with new scripts -------------------------------------- Right now, adding new scripts to ttfautohint only works on the source code level, this is, you have to patch the C\ source code. The process itself isn't very complicated; it is demonstrated best by example. The following commits in ttfautohint add Ethiopian and Armenian, respectively. | [http://repo.or.cz/ttfautohint.git/commitdiff/d14c7c07](http://repo.or.cz/ttfautohint.git/commitdiff/d14c7c07) | [http://repo.or.cz/ttfautohint.git/commitdiff/b5022cd9](http://repo.or.cz/ttfautohint.git/commitdiff/b5022cd9) It shows that you have to do the following steps. * Add blue zone character data to the file `lib/tablue.dat`. * Add the proper Unicode ranges to `lib/taranges.c`, following the structure of similar entries. * Similarly, the files `lib/tastyles.h` and `lib/ttfautohint-script.h` must be updated. The latter holds the information on the used default character or characters; it also references the corresponding script tag `HB_SCRIPT_XXX` as used by the HarfBuzz library. If there are any questions, please contact the [FreeType mailing list](https://lists.nongnu.org/mailman/listinfo/freetype) for help. Note that the script data in ttfautohint are hold in sync with FreeType's auto-hinter. Control Instructions ==================== An entry in a control instructions file has various syntax forms, which are discussed here. Brackets indicate optional elements. Common Syntax Elements ---------------------- *font‑idx* gives the index of the font in a TrueType Collection, starting with value\ 0. If missing, it is set to zero. For normal TrueType fonts, only value zero is valid. A font index can be specified in decimal, octal, or hexadecimal format, the latter two indicated by the prefixes `0` and `0x`, respectively. *glyph‑id* is either a glyph's name as listed in the font's `post` SFNT table or a glyph index. A glyph name consists of characters from the set '`A-Za-z0-9._`' only and does not start with a digit or period, with the exceptions of the names '`.notdef`' and '`.null`'. A glyph index starts with value\ 0 can be specified in decimal, octal, or hexadecimal format, the latter two indicated by the prefixes `0` and `0x`, respectively. Glyph names are internally converted to glyph indices. *points* are number ranges, see '[x Height Snapping Exceptions](#x-height-snapping-exceptions)' for the syntax. Similar to the Bourne shell (`sh` or `bash`), a comment starts with character '`#`'; the rest of the line is ignored. An empty line is ignored also. Both the newline character and '`;`' can be used as a separator between exception entries. A trailing '`\`' at the end of a line continues the current line on the next one. A control instructions file is parsed line by line; later entries override earlier entries (in case there is something to override). Style Adjustments ----------------- This syntax form makes it possible to override the style assignment algorithm of ttfautohint; see '[Scripts](#scripts)' and '[OpenType Features](#opentype-features)' for more details. > *\[*\ font-idx\ *\]*\ \ script\ \ feature\ \ *`@`*\ \ glyph-ids *script* is a four-letter name^[The notable exception is the tag 'lao', which originally has a trailing space as the fourth character. However, ttfautohint ignores the space.] of one of the scripts supported by ttfautohint. *feature* is one of the four-letter names of features supported by ttfautohint. The elements of *glyph-ids* are a list of comma separated *glyph-id* values or value ranges. Note that is not necessary that elements are specified in increasing order. Assuming that a font contains superscript digits 'zero.sups' to 'nine.sups' together with the glyphs 'a.sups' and 'o.sups', use a line ``` cyrl sups @ zero.sups-nine.sups, a.sups, o.sups ``` to add those glyphs to the style handling Cyrillic superscript glyphs. However, it is still necessary that the selected script contains proper [Blue Zone characters](#blue-zones), otherwise those glyphs aren't handled at all. Use the `--debug` command line option to see how ttfautohint assigns glyph indices of a font to styles. Stem Width Adjustments ---------------------- Use the following syntax form to adjust stem width values for a given style, overriding ttfautohint's algorithm; see '[Scripts](#scripts)' and '[OpenType Features](#opentype-features)' for more details. This adjustment doesn't change the glyph shapes; it only influences the hinting process. > *\[*\ font-idx\ *\]*\ \ script\ \ feature\ \ *`w[idth]`*\ \ stem-widths *script* and *feature* are the same as with style adjustments; see above. However, *script* can additionally be the wildcard character '`*`', which indicates 'any script'. Parameter `width` can be abbreviated as '`w`'. *stem-widths* is an unsorted list of comma separated integer stem width values (in font units); the first value gives the style's default stem width. The effect of this adjustment depends [on the selected stem width algorithm](#stem-width-and-positioning-mode). For smooth stem width positioning, only the first (i.e., the default) value is used; it gets a higher preference than other discrete stem width choices. For strong stem width positioning, the stem widths are snapped to the provided values (if not differing too much) before rounding to an integer pixel value. For natural stem width positioning, this adjustment is ignored. A typical example is to reduce the default stem width of an extra-bold font, which gets better hinted if a stem width of, say, 100 is used instead of the default value 150. Let's also assume that the font further contains latin subscript and superscript characters that are hinted best with a stem width set to 80 font units. We can achieve this with the following lines in a control instructions file. ``` * dflt width 100 latb dflt width 80 latp dflt width 80 ``` Without the adjustment chances are very high that the 'eyes' in glyphs 'e' or 'a' of extra-bold fonts are filled at smaller PPEM values. Use the `--debug` command line option to see how ttfautohint assigns stem widths to styles by default. Glyph Adjustments ----------------- The following syntax forms allows adjustments of a glyph's hinting process. ### Change Direction of Points, Artificial Segments > *\[*\ font‑idx\ *\]*\ \ glyph‑id\ \ *`l`\[`eft`\]|`r`\[`ight`\]*\ \ points\ \ *\[*\ *`(`*\ left‑offset\ *`,`*\ right‑offset\ *`)`*\ *\]*\ The mutually exclusive parameters `left` and `right` (which can be abbreviated as '`l`' and '`r`', respectively) indicate that the following points have left or right 'out' direction, respectively, overriding ttfautohint's algorithm for setting point directions. The 'out direction' of a point is the direction of the outline *leaving* the point (or passing the control point). If the specified direction is identical to what ttfautohint computes, nothing special happens. Otherwise, a one-point segment with the specified direction gets created, see [above](#segments-and-edges). By default, its length is zero. Setting *left‑offset* and *right‑offset*, you can change the segment's horizontal start and end position relative to the point position. *left‑offset* and *right‑offset* are integers measured in font units. The following five images, displaying glyphs 'O' and 'Q' from the font [Halant-Regular](http://www.google.com/fonts/specimen/Halant), demonstrate how to use direction changes. ![The outlines of glyphs 'O' and 'Q', as displayed in FontForge. They are sufficiently similar to expect that ttfautohint hints them equally. However, this is not the case.](img/Halant-Regular-O-Q.png) ![The same glyphs, shown at 12px before hinting. [Please ignore the outline distortion in the upper right of glyph 'O'; this is a bug in FontForge while running the TrueType debugger.]](img/Halant-Regular-O-Q-unhinted-12px.png) ![Using only ttfautohint's '`-a sss`' parameter to force strong stem width and positioning, the hinting of glyph 'Q' is really bad, making the glyph vertically two pixels larger! Reason is that this glyph doesn't contain a horizontal segment at the baseline blue zone (*y*\ =\ 1; this corresponds to the segment 13-14 in the 'O' glyph). Normally, segment 1-2 would form a 'stem' with the baseline segment (as segment 7-8 does in glyph 'O'). Instead, it forms a stem with segment 19-20, which gets moved down (*y*\ =\ −1) because the whole glyph appears to be stretched.](img/Halant-Regular-O-good-Q-badly-hinted-12px.png) ![To fix the problem, we change the direction of point\ 38 to 'left' by writing a line '`Q left 38`' (without the quotes) to a control description file `Halant-Regular.txt`. Adding option '`-m Halant-Regular.txt`' to ttfautohint, we get the shown image as a result, which is much better: Segment 1-2 now properly forms a stem with our artificial one-point segment\ 38, and the 'O'-like shape is properly positioned. However, there is still room for improvement: Segment 19-20 is also positioned at the baseline, making the connection between the 'O' shape and the tail too thin.](img/Halant-Regular-O-good-Q-better-hinted-12px.png) ![By giving the one-point segment\ 38 a horizontal width, we can prevent that segment 19-20 gets positioned at the baseline: Replace the line in the previous image description with '`Q left 38 (−70,20)`', making the segment extend 70 font units to the left and 20 to the right of point\ 38. The exact offset values don't matter; it's only important to start left of point\ 19. Another solution to the problem is to artificially change the direction of segment 19-20 by adding a second line '`Q right 19-20`' to the control instructions file; for our 'Q' glyph, this produces almost exactly the same hinting results. Note that such direction changes only influence the hinting process; an outline's direction won't be changed at all.](img/Halant-Regular-O-good-Q-well-hinted-12px.png) ### Unset Direction of Points > *\[*\ font‑idx\ *\]*\ \ glyph‑id\ \ *`n`\[`odir`\]*\ \ points\ Parameter `nodir` (or '`n`') sets the 'out' direction of the following points to 'no direction', this is, neither left nor right. If the specified direction is identical to what ttfautohint computes, nothing special happens. Otherwise, ttfautohint no longer considers those points as part of horizontal segments, thus treating them as ['weak'](#grid-fitting) points. Modifying or adding segments doesn't directly modify the outlines; it only influences the hinting process. ### Delta Exceptions > *\[*\ font‑idx\ *\]*\ \ glyph‑id\ \ *`t`\[`ouch`\]|`p`\[`oint`\]*\ \ points\ \ *\[*\ *`x`\[`shift`\]*\ x‑shift\ *\]*\ \ *\[*\ *`y`\[`shift`\]*\ y‑shift\ *\]*\ \ *`@`*\ \ ppems\ The mutually exclusive parameters `touch` and `point` (which can be abbreviated as '`t`' and '`p`', respectively) make ttfautohint apply delta exceptions for the given points, shifting them by the given values. Delta exceptions entered with `touch` are applied before the final 'IUP' (*interpolate untouched points*) instructions in a glyph's bytecode, exceptions entered with `point` after 'IUP' (please consult Greg Hitchcock's [ClearType Whitepaper] for more on pre-IUP and post-IUP delta hints). Additionally, the `touch` parameter makes the bytecode *touch* the affected points; such points are no longer affected by 'IUP' at all. Note that in ClearType mode all deltas along the x\ axis are discarded, and deltas along the y\ axis are only executed for touched points. As a consequence, vertical delta exceptions entered with `point` should not be used in ClearType mode.^[Unfortunately, there is a bug in FreeType prior to version 2.5.4 (released in December 2014) that completely disables vertical delta exceptions if subpixel hinting is activated. For this reason you should expect that the `touch` parameter fails on older GNU/Linux distributions.] *ppems*, similar to *points*, are number ranges, see '[x Height Snapping Exceptions](#x-height-snapping-exceptions)' for the syntax. *x‑shift* and *y‑shift* represent real numbers that get rounded to multiples of 1/8 pixels. The entries for `xshift` ('`x`') and `yshift` ('`y`') are optional; if missing, the corresponding value is set to zero. If both values are zero, the delta exception entry is ignored as a whole. Values for *x‑shift* and *y‑shift* must be in the range [−1.0;1.0]. Values for *ppems* must be in the range [6;53]. Values for *points* are limited by the number of points in the glyph. Note that only character '`.`' is recognized as a decimal point, and a thousands separator is not accepted. As an example for delta instructions, let's assume that you want to shift points 2, 3, and\ 4 in glyph 'Aacute' at PPEM sizes 12 and\ 13 by a vertical amount of 0.25 pixels. This corresponds to the line ``` Aacute touch 2-4 yshift 0.25 @ 12, 13 ``` in a control instructions file. Since we use `touch` and not `point`, points 2, 3, and\ 4 are no longer subject to the final 'IUP' instruction, which interpolates weak, untouched point positions between strong, touched ones, cf. the description [here](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM05/Chap5.html#IUP). ttfautohint-1.8.1/doc/ttfautohint-2.pandoc0000644000175000001440000006353013222451117020403 0ustar00wlusers00000000000000 The ttfautohint API =================== This section documents the public functions of the ttfautohint library together with its callback functions. All information has been directly extracted from the `ttfautohint.h` header file. Preprocessor Macros, Typedefs, and Enums ---------------------------------------- Some default values. ```C #define TA_HINTING_RANGE_MIN 8 #define TA_HINTING_RANGE_MAX 50 #define TA_HINTING_LIMIT 200 #define TA_INCREASE_X_HEIGHT 14 ``` An error type. ```C typedef int TA_Error; ``` An enum type for stem width algorithm selection. ```C enum { TA_STEM_WIDTH_MODE_NATURAL = -1, TA_STEM_WIDTH_MODE_QUANTIZED = 0, TA_STEM_WIDTH_MODE_STRONG = 1 }; ``` Function Pointer: `TA_Alloc_Func` --------------------------------- A pointer to a function provided by the calling application to allocate memory. The ttfautohint library uses this for allocating the buffer given by the `out-buffer` field of [`TTF_autohint`](#function-ttf_autohint) and for allocating the `str` buffer in the [`TA_Info_Func`](#callback-ta_info_func) callback. The signature is identical to standard\ C's `malloc` function (in header file `stdlib.h`). ```C typedef void * (*TA_Alloc_Func)(size_t size); ``` Function Pointer: `TA_Free_Func` -------------------------------- A pointer to a function provided by the calling application to free memory allocated with [`TA_Alloc_Func`](#function-pointer-ta_alloc_func). The ttfautohint library calls this for deallocating the `str` buffers in the [`TA_Info_Func`](#callback-ta_info_func) callback after they have been used. The signature is identical to standard\ C's `free` function (in header file `stdlib.h`). ```C typedef void (*TA_Free_Func)(void *ptr); ``` Callback: `TA_Progress_Func` ---------------------------- A callback function to get progress information. *curr_idx* gives the currently processed glyph index; if it is negative, an error has occurred. *num_glyphs* holds the total number of glyphs in the font (this value can't be larger than 65535). *curr_sfnt* gives the current subfont within a TrueType Collection (TTC), and *num_sfnts* the total number of subfonts. If the return value is non-zero, `TTF_autohint` aborts with `TA_Err_Canceled`. Use this for a 'Cancel' button or similar features in interactive use. *progress_data* is a void pointer to user-supplied data. ```C typedef int (*TA_Progress_Func)(long curr_idx, long num_glyphs, long curr_sfnt, long num_sfnts, void* progress_data); ``` Callback: `TA_Error_Func` ------------------------- A callback function to get error information. *error* is the value `TTF_autohint` returns. See file `ttfautohint-errors.h` for a list. Error codes not in this list are directly taken from FreeType; see the FreeType header file `fterrdef.h` for more. *error_string*, if non-NULL, is a pointer to an error message that represents *error*. The next three parameters help identify the origin of text string parsing errors. *linenum*, if non-zero, contains the line number. *line*, if non-NULL, is a pointer to the input line that can't be processed. *errpos*, if non-NULL, holds a pointer to the position in *line* where the problem occurs. *error_data* is a void pointer to user-supplied data. ```C typedef void (*TA_Error_Func)(TA_Error error, const char* error_string, unsigned int linenum, const char* line, const char* errpos, void* error_data); ``` Callback: `TA_Info_Func` ------------------------ A callback function to access or modify strings in the `name` table; it is called in a loop that iterates over all `name` table entries. If defined, [`TA_Info_Post_Func`](#callback-ta_info_post_func) gets executed after this loop so that the collected data can be written back to the `name` table. *platform_id*, *encoding_id*, *language_id*, and *name_id* are the identifiers of a `name` table entry pointed to by *str* with a length pointed to by *str_len* (in bytes; the string has no trailing NULL byte). Please refer to the [OpenType specification of the `name` table] for a detailed description of the various parameters, in particular which encoding is used for a given platform and encoding ID. [OpenType specification of the `name` table]: http://www.microsoft.com/typography/otspec/name.htm The string *str* is allocated with the function specified by the `alloc-func` field of [`TTF_autohint`](#function-ttf_autohint); the application should reallocate the data if necessary, ensuring that the string length doesn't exceed 0xFFFF. *info_data* is a void pointer to user-supplied data. If an error occurs, return a non-zero value and don't modify *str* and *str_len* (such errors are handled as non-fatal). ```C typedef int (*TA_Info_Func)(unsigned short platform_id, unsigned short encoding_id, unsigned short language_id, unsigned short name_id, unsigned short* str_len, unsigned char** str, void* info_data); ``` Callback: `TA_Info_Post_Func` ----------------------------- A callback function, giving the application the possibility to access or modify strings in the `name` table after [`TA_Info_Func`](#callback-ta_info_func) has iterated over all `name` table entries. It is expected that `TA_Info_Func` stores pointers to the `name` table entries it wants to access or modify; the only parameter is thus *info_data*, which is a void pointer to the user-supplied data already provided to `TA_Info_Func`. Obviously, calling `TA_Info_Post_Func` with `TA_Info_Func` undefined has no effect. The `name` table strings are allocated with the function specified by the `alloc-func` field of [`TTF_autohint`](#function-ttf_autohint); the application should reallocate the data if necessary, ensuring that no string length exceeds 0xFFFF. If an error occurs, return a non-zero value and don't modify the affected string and string length (such errors are handled as non-fatal). ```C typedef int (*TA_Info_Post_Func)(void* info_data); ``` Function: `TTF_autohint` ------------------------ Read a TrueType font, remove existing bytecode (in the SFNT tables `prep`, `fpgm`, `cvt `, and `glyf`), and write a new TrueType font with new bytecode based on the autohinting of the FreeType library, optionally using a reference font to derive blue zones. It expects a format string *options* and a variable number of arguments, depending on the fields in *options*. The fields are comma separated; whitespace within the format string is not significant, a trailing comma is ignored. Fields are parsed from left to right; if a field occurs multiple times, the last field's argument wins. The same is true for fields that are mutually exclusive. Depending on the field, zero or one argument is expected. Note that fields marked as 'not implemented yet' are subject to change. ### Memory Management The next two fields are necessary on some platforms if ttfautohint is compiled as a shared library, and the application uses a different runtime library. This can happen, for example, on the MS Windows platform if your program is written in Python and communicates via [the 'ctypes' interface](https://docs.python.org/3/library/ctypes.html) with the ttfautohint DLL. `alloc-func` : A pointer of type [`TA_Alloc_Func`](#function-pointer-ta_alloc_func) specifying a memory allocation function. It gets used to allocate the buffer given by the `out-buffer` field and the data exposed by the [`TA_Info_Func`](#callback-ta_info_func) callback. If not set or set to NULL, or if `out-buffer` is not set or set to NULL, standard\ C's `malloc` function is used. `free-func` : A pointer of type [`TA_Free_Func`](#function-pointer-ta_free_func) specifying a memory deallocation function. It gets called to free the data exposed by the [`TA_Info_Func`](#callback-ta_info_func) callback after it has been used. If not set or set to NULL, or if `out_buffer` is not set or set to NULL, standard\ C's `free` function is used. ### I/O `in-file` : A pointer of type `FILE*` to the data stream of the input font, opened for binary reading. Mutually exclusive with `in-buffer`. `in-buffer` : A pointer of type `const char*` to a buffer that contains the input font. Needs `in-buffer-len`. Mutually exclusive with `in-file`. `in-buffer-len` : A value of type `size_t`, giving the length of the input buffer. Needs `in-buffer`. `out-file` : A pointer of type `FILE*` to the data stream of the output font, opened for binary writing. Mutually exclusive with `out-buffer`. `out-buffer` : A pointer of type `char**` to a buffer that contains the output font. Needs `out-buffer-len`. Mutually exclusive with `out-file`. The application should deallocate the memory with the function given by `free-func`. `out-buffer-len` : A pointer of type `size_t*` to a value giving the length of the output buffer. Needs `out-buffer`. `control-file` : A pointer of type `FILE*` to the data stream of control instructions. Mutually exclusive with `control-buffer`. See '[Control Instructions](#control-instructions)' for the syntax used in such a file or buffer. `control-buffer` : A pointer of type `const char*` to a buffer that contains control instructions. Needs `control-buffer-len`. Mutually exclusive with `control-file`. `control-buffer-len` : A value of type `size_t`, giving the length of the control instructions buffer. Needs `control-buffer`. `reference-file` : A pointer of type `FILE*` to the data stream of the reference font, opened for binary reading. Mutually exclusive with `reference-buffer`. `reference-buffer` : A pointer of type `const char*` to a buffer that contains the reference font. Needs `reference-buffer-len`. Mutually exclusive with `reference-file`. `reference-buffer-len` : A value of type `size_t`, giving the length of the reference buffer. Needs `reference-buffer`. `reference-index` : The face index to be used in the reference font. The default value is\ 0. `reference-name` : A string that specifies the name of the reference font. It is only used to emit a sensible value for the `TTFA` table if `TTFA-info` is set. ### Messages and Callbacks `progress-callback` : A pointer of type [`TA_Progress_Func`](#callback-ta_progress_func), specifying a callback function for progress reports. This function gets called after a single glyph has been processed. If this field is not set or set to NULL, no progress callback function is used. `progress-callback-data` : A pointer of type `void*` to user data that is passed to the progress callback function. `error-string` : A pointer of type `unsigned char**` to a string (in UTF-8 encoding) that verbally describes the error code. You must not change the returned value. `error-callback` : A pointer of type [`TA_Error_Func`](#callback-ta_error_func), specifying a callback function for error messages. This function gets called right before `TTF_autohint` exits. If this field is not set or set to NULL, no error callback function is used. Use it as a more sophisticated alternative to `error-string`. `error-callback-data` : A point of type `void*` to user data that is passed to the error callback function. `info-callback` : A pointer of type [`TA_Info_Func`](#callback-ta_info_func), specifying a callback function for manipulating the `name` table. This function gets called for each `name` table entry. If not set or set to NULL, `TA_Info_Func` is not called. `info-post-callback` : A pointer of type [`TA_Info_Post_Func`](#callback-ta_info_post_func), specifying a callback function for manipulating the `name` table. It is called after the function specified with `info-callback` has iterated over all `name` table entries. If not set or set to NULL, `TA_Info_Post_Func` is not called. `info-callback-data` : A pointer of type `void*` to user data that is passed to the info callback functions. `debug` : If this integer is set to\ 1, lots of debugging information is print to stderr. The default value is\ 0. ### General Hinting Options `hinting-range-min` : An integer (which must be larger than or equal to\ 2) giving the lowest PPEM value used for autohinting. If this field is not set, it defaults to [`TA_HINTING_RANGE_MIN`](#preprocessor-macros-typedefs-and-enums). `hinting-range-max` : An integer (which must be larger than or equal to the value of `hinting-range-min`) giving the highest PPEM value used for autohinting. If this field is not set, it defaults to [`TA_HINTING_RANGE_MAX`](#preprocessor-macros-typedefs-and-enums). `hinting-limit` : An integer (which must be larger than or equal to the value of `hinting-range-max`) that gives the largest PPEM value at which hinting is applied. For larger values, hinting is switched off. If this field is not set, it defaults to [`TA_HINTING_LIMIT`](#preprocessor-macros-typedefs-and-enums). If it is set to\ 0, no hinting limit is added to the bytecode. `hint-composites` : If this integer is set to\ 1, composite glyphs get separate hints. This implies adding a special glyph to the font called ['.ttfautohint'](#the-.ttfautohint-glyph). Setting it to\ 0 (which is the default), the hints of the composite glyphs' components are used. Adding hints for composite glyphs increases the size of the resulting bytecode a lot, but it might deliver better hinting results. However, this depends on the processed font and must be checked by inspection. `adjust-subglyphs` : An integer (1\ for 'on' and 0\ for 'off', which is the default) to specify whether native TrueType hinting of the *input font* shall be applied to all glyphs before passing them to the (internal) autohinter. The used resolution is the em-size in font units; for most fonts this is 2048ppem. Use this only if the old hints move or scale subglyphs independently of the output resolution, for example some exotic CJK fonts. `pre-hinting` is a deprecated alias name for this option. ### Hinting Algorithms ttfautohint provides three different algorithms for computing horizontal stem widths and the positioning of blue zones. * `TA_STEM_WIDTH_MODE_NATURAL`: No adjustments to stem widths, discrete blue zone positioning. This is what FreeType uses for its 'light' (auto-)hinting mode. * `TA_STEM_WIDTH_MODE_QUANTIZED`: Both stem widths and blue zone positions are slightly quantized to take discrete values. For example, stem values 50, 51, 72, 76, and 100 would become 50, 74, and 100 (or something similar). * `TA_STEM_WIDTH_MODE_STRONG`: If active, stem widths and blue zones are snapped and positioned to integer pixel values as much as possible. These values are arguments to ttfautohint's three different hinting mode options. `gray-stem-width-mode` : Specify the stem width algorithm for grayscale rendering. Possible integer values are `TA_STEM_WIDTH_MODE_NATURAL`, `TA_STEM_WIDTH_MODE_QUANTIZED` (the default), and `TA_STEM_WIDTH_MODE_STRONG`, as discussed above. `gdi-cleartype-stem-width-mode` : Specify the stem width algorithm for GDI ClearType rendering, this is, the rasterizer version (as returned by the GETINFO bytecode instruction) is in the range 36\ <= version <\ 38 and ClearType is enabled. Possible integer values are `TA_STEM_WIDTH_MODE_NATURAL`, `TA_STEM_WIDTH_MODE_QUANTIZED`, and `TA_STEM_WIDTH_MODE_STRONG` (the default), as discussed above. `dw-cleartype-stem-width-mode` : Specify the stem width algorithm for DW ClearType rendering, this is, the rasterizer version (as returned by the GETINFO bytecode instruction) is >=\ 38, ClearType is enabled, and subpixel positioning is enabled also. Possible integer values are `TA_STEM_WIDTH_MODE_NATURAL`, `TA_STEM_WIDTH_MODE_QUANTIZED` (the default), and `TA_STEM_WIDTH_MODE_STRONG`, as discussed above. `increase-x-height` : An integer. For PPEM values in the range 6\ <= PPEM <= `increase-x-height`, round up the font's x\ height much more often than normally (to use the terminology of TrueType's 'Super Round' bytecode instruction, the threshold gets increased from 5/8px to 13/16px). If it is set to\ 0, this feature is switched off. If this field is not set, it defaults to [`TA_INCREASE_X_HEIGHT`](#preprocessor-macros-typedefs-and-enums). Use this flag to improve the legibility of small font sizes if necessary. `x-height-snapping-exceptions` : A pointer of type `const char*` to a null-terminated string that gives a list of comma separated PPEM values or value ranges at which no x\ height snapping shall be applied. A value range has the form *value*~1~`-`*value*~2~, meaning *value*~1~ <= PPEM <= *value*~2~. *value*~1~ or *value*~2~ (or both) can be missing; a missing value is replaced by the beginning or end of the whole interval of valid PPEM values, respectively. Whitespace is not significant; superfluous commas are ignored, and ranges must be specified in increasing order. For example, the string `"3, 5-7, 9-"` means the values 3, 5, 6, 7, 9, 10, 11, 12, etc. Consequently, if the supplied argument is `"-"`, no x\ height snapping takes place at all. The default is the empty string (`""`), meaning no snapping exceptions. `windows-compatibility` : If this integer is set to\ 1, two artificial blue zones are used, positioned at the `usWinAscent` and `usWinDescent` values (from the font's `OS/2` table). The idea is to help ttfautohint so that the hinted glyphs stay within this horizontal stripe since Windows clips everything falling outside. The default is\ 0. `gray-strong-stem-width` : Deprecated. The argument values 0 and 1 of this field correspond to the argument values `TA_STEM_WIDTH_MODE_QUANTIZED` and `TA_STEM_WIDTH_MODE_STRONG` of the field 'gray-stem-width-mode', respectively. `gdi-cleartype-strong-stem-width` : Deprecated. The argument values 0 and 1 of this field correspond to the argument values `TA_STEM_WIDTH_MODE_QUANTIZED` and `TA_STEM_WIDTH_MODE_STRONG` of the field 'gdi-cleartype-stem-width-mode', respectively. `dw-cleartype-strong-stem-width` : Deprecated. The argument values 0 and 1 of this field correspond to the argument values `TA_STEM_WIDTH_MODE_QUANTIZED` and `TA_STEM_WIDTH_MODE_STRONG` of the field 'dw-cleartype-stem-width-mode', respectively. ### Scripts `default-script` : A string consisting of four lowercase characters that specifies the default script for OpenType features. After applying all features that are handled specially, use this value for the remaining features. The default value is `"latn"`; if set to `"none"`, no script is used. Valid values can be found in the header file `ttfautohint-scripts.h`. `fallback-script` : A string consisting of four lowercase characters, specifying the default script for glyphs that can't be mapped to a script automatically. By default, such glyphs are hinted; if option `fallback-scaling` is set, they are scaled only instead. Valid values can be found in the header file `ttfautohint-scripts.h`. Default value is `"none"`, which means hinting without using a script's blue zones if `fallback-scaling` isn't set. If `fallback_scaling` is set, value `"none"` implies no hinting for unmapped glyphs. `fallback-scaling` : Set this integer to\ 1 if glyphs handled by the fallback script should be scaled only with the fallback script's scaling value, instead of being hinted with the fallback script's hinting parameters. `symbol` : Set this integer to\ 1 if you want to process a font that ttfautohint would refuse otherwise because it can't find a single standard character for any of the supported scripts. ttfautohint then uses a default (hinting) value for the standard stem width instead of deriving it from a script's set of standard characters (for the latin script, one of them is character 'o'). The default value of this option is\ 0. `fallback-stem-width` : Set the horizontal stem width (hinting) value for all scripts that lack proper standard characters. The value is given in font units and must be a positive integer. If not set, or the value is zero, ttfautohint uses a hard-coded default (50\ units at 2048 units per EM, and linearly scaled for other UPEM values, for example 24\ units at 1000 UPEM). For symbol fonts (i.e., option `symbol` is given), `fallback-stem-width` has an effect only if `fallback-script` is set also. ### Miscellaneous `ignore-restrictions` : If the font has set bit\ 1 in the 'fsType' field of the `OS/2` table, the ttfautohint library refuses to process the font since a permission to do that is required from the font's legal owner. In case you have such a permission you might set the integer argument to value\ 1 to make ttfautohint handle the font. The default value is\ 0. `TTFA-info` : If set to\ 1, ttfautohint creates an SFNT table called `TTFA` and fills it with information on the parameters used while calling `TTF_autohint`. The format of the output data resembles the information at the very beginning of the dump emitted by option `debug`. The default value is\ 0. Main use of this option is for font editing purposes. For example, after a font editor has added some glyphs, a front-end to `TTF_autohint` can parse `TTFA` and feed the parameters into another call of `TTF_autohint`. The new glyphs are then hinted while hints of the old glyphs stay unchanged. If this option is not set, and the font to be processed contains a `TTFA` table, it gets removed. Note that such a `TTFA` table gets ignored by all font rendering engines. In TrueType Collections, the `TTFA` table is added to the first subfont. `dehint` : If set to\ 1, remove all hints from the font. All other hinting options are ignored. `epoch` : An integer of type `unsigned long long`, defined as the number of seconds (excluding leap seconds) since 01 Jan 1970 00:00:00 UTC. If set, or if the value is not equal to `ULLONG_MAX`, this epoch gets used instead of the current date and time for the 'modification time' field in the TTF header. Use this to get [reproducible builds](https://reproducible-builds.org/). ### Remarks * Obviously, it is necessary to have an input and an output data stream. All other options are optional. * `hinting-range-min` and `hinting-range-max` specify the range for which the autohinter generates optimized hinting code. If a PPEM value is smaller than the value of `hinting-range-min`, hinting still takes place but the configuration created for `hinting-range-min` is used. The analogous action is taken for `hinting-range-max`, only limited by the value given with `hinting-limit`. The font's `gasp` table is set up to always use grayscale rendering with grid-fitting for standard hinting, and symmetric grid-fitting and symmetric smoothing for horizontal subpixel hinting (ClearType). * ttfautohint can process its own output a second time only if option `hint-composites` is not set (or if the font doesn't contain composite glyphs at all). This limitation might change in the future. ```C TA_LIB_EXPORT TA_Error TTF_autohint(const char* options, ...); ``` Macros: `TTFAUTOHINT_MAJOR`, `TTFAUTOHINT_MINOR`, `TTFAUTOHINT_REVISION` ------------------------------------------------------------------------ These three macros give the major, minor, and revision number of the library, respectively. See function [`TTF_autohint_version`](#function-ttf_autohint_version) for more details. ```C #define TTFAUTOHINT_MAJOR 1 #define TTFAUTOHINT_MINOR 8 #define TTFAUTOHINT_REVISION 1 ``` Macro: `TTFAUTOHINT_VERSION` ---------------------------- This macro holds the ttfautohint version string. For tarball releases it has the form *X*.*Y*[.*Z*], with *X*, *Y*, and\ *Z* the major, minor, and revision numbers, respectively. If the revision number is zero, it is omitted. Examples: `2.7`, `2.7.1`. If compiling directly from the git repository, ttfautohint's bootstrap script derives the version number from the `git describe` output, appending the number of commits after a tag together with a shortened commit ID. Example: `2.7.1.23-379b`. See function [`TTF_autohint_version`](#function-ttf_autohint_version) for more details. ```C #define TTFAUTOHINT_VERSION "1.8.1" ``` Function: `TTF_autohint_version` -------------------------------- Return the ttfautohint version triplet. This function is useful when dynamically linking to the library, since the macros `TTFAUTOHINT_MAJOR`, `TTFAUTOHINT_MINOR`, and `TTFAUTOHINT_PATCH` cannot be used in that case. The returned integer triplet is _not_ the same as the shared library's version triplet (which the dynamic linker uses to resolve runtime dependencies). For example, hypothetical ttfautohint versions 2.27 and 2.27.1 might both correspond to shared library version 1.0.38 in case there are only, say, documentation or packaging differences that don't affect the library code. If the pkg-config configuration file `ttfautohint.pc` is installed in a place that pkg-config can find, a call to ``` pkg-config ttfautohint --modversion ``` returns the shared library version. ```C TA_LIB_EXPORT void TTF_autohint_version(int *major, int *minor, int *revision); ``` Function: `TTF_autohint_version_string` --------------------------------------- Return the ttfautohint version string. This function is useful when dynamically linking to the library, since the macro `TTFAUTOHINT_VERSION` cannot be used in that case. ```C TA_LIB_EXPORT const char* TTF_autohint_version_string(void); ``` ttfautohint-1.8.1/doc/ttfautohint-3.pandoc0000644000175000001440000000717513153174711020414 0ustar00wlusers00000000000000 Compilation and Installation ============================ Please read the files [`INSTALL`](http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;f=doc/INSTALL;hb=HEAD) and [`INSTALL.git`](http://repo.or.cz/w/ttfautohint.git/blob_plain/HEAD:/INSTALL.git) (both part of the source code bundle) for instructions how to compile the ttfautohint library together with its front-ends using a POSIX compatible shell and compiler. Unix-like Platforms ------------------- The generic instructions should work just fine. Since ttfautohint depends on [Qt] version\ 4 or newer, [FreeType] version 2.4.5 or newer, and [HarfBuzz] version 1.3.0 or newer, you should install packages for these libraries (called 'libqt4' or similar, 'libfreetype6'^[The number\ '6' indicates the version of the shared library of FreeType, which is not directly related to the source code version of FreeType.], and 'libharfbuzz0' or similar) together with its development bundles (called 'libqt4-devel', 'freetype2-devel', and 'harfbuzz-devel' or similar) before running ttfautohint's `configure` script. MS Windows ---------- Precompiled binaries `ttfautohint.exe` and `ttfautohintGUI.exe` are available, being statically linked to [Qt], [FreeType], and [HarfBuzz]. This means that the two programs are not dependent on any other program-specific DLL, and you can move them to any place you like. Hints for compilation with the [MinGW] environment are given in `INSTALL.git`. Mac OS X -------- Right now, only a precompiled binary `ttfautohint` is offered; a ready-to-run app bundle for the GUI version is not yet available; however, ttfautohint is part of [Homebrew](http://brew.sh), making compilation and installation very simple. Detailed instructions to compile both `ttfautohint` and `ttfautohintGUI` can be found on [ttfautohint's homepage](http://freetype.org/ttfautohint/osx.html). Authors ======= Copyright © 2011-2017 by [Werner Lemberg](mailto:wl@gnu.org).\ Portions Copyright © 2011-2017 by [Dave Crossland](mailto:dave@understandingfonts.com).\ Portions Copyright © 2014 by [Adam Twardoch](mailto:adam@twardoch.com). This file is part of the ttfautohint library, and may only be used, modified, and distributed under the terms given in [`COPYING`](http://repo.or.cz/w/ttfautohint.git/blob_plain/HEAD:/COPYING). By continuing to use, modify, or distribute this file you indicate that you have read `COPYING` and understand and accept it fully. The file `COPYING` mentioned in the previous paragraph is distributed with the ttfautohint library. [ClearType Whitepaper]: http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx [Dalton Maag Ltd]: https://daltonmaag.com [DejaVu]: http://dejavu-fonts.org [FontForge]: http://fontforge.sf.net [FontLab Studio]: http://www.fontlab.com/font-editor/fontlab-studio [FreeType]: http://freetype.org [HarfBuzz]: http://harfbuzz.org [Infinality]: http://infinality.net [MinGW]: http://mingw.org [OpenType specification]: http://www.microsoft.com/typography/otspec [Qt]: http://qt.io Character Ranges ================ For the FreeType auto-hinter (and thus ttfautohint), a 'non-base character' is something that should not be affected by blue zones, regardless of whether this is a spacing or no-spacing glyph. ttfautohint-1.8.1/doc/ttfautohint-4.pandoc0000644000175000001440000004014713222451117020404 0ustar00wlusers00000000000000Table: `adlm` base characters Character range Description --------------------- ------------- `0x1E900` - `0x1E95F` Adlam Table: `adlm` non-base characters Character range --------------------- `0x1D944` - `0x1E94A` Table: `arab` base characters Character range Description --------------------- ------------- `0x0600` - `0x06FF` Arabic `0x0750` - `0x07FF` Arabic Supplement `0x08A0` - `0x08FF` Arabic Extended-A `0xFB50` - `0xFDFF` Arabic Presentation Forms-A `0xFE70` - `0xFEFF` Arabic Presentation Forms-B `0x1EE00` - `0x1EEFF` Arabic Mathematical Alphabetic Symbols Table: `arab` non-base characters Character range --------------------- `0x0600` - `0x0605` `0x0610` - `0x061A` `0x064B` - `0x065F` `0x0670` - `0x0670` `0x06D6` - `0x06DC` `0x06DF` - `0x06E4` `0x06E7` - `0x06E8` `0x06EA` - `0x06ED` `0x08E3` - `0x08FF` `0xFBB2` - `0xFBC1` `0xFE70` - `0xFE70` `0xFE72` - `0xFE72` `0xFE74` - `0xFE74` `0xFE76` - `0xFE76` `0xFE78` - `0xFE78` `0xFE7A` - `0xFE7A` `0xFE7C` - `0xFE7C` `0xFE7E` - `0xFE7E` Table: `armn` base characters Character range Description --------------------- ------------- `0x0530` - `0x058F` Armenian `0xFB13` - `0xFB17` Alphab. Present. Forms (Armenian) Table: `armn` non-base characters Character range --------------------- `0x0559` - `0x055F` Table: `avst` base characters Character range Description --------------------- ------------- `0x10B00` - `0x10B3F` Avestan Table: `avst` non-base characters Character range --------------------- `0x10B39` - `0x10B3F` Table: `bamu` base characters Character range Description --------------------- ------------- `0xA6A0` - `0xA6FF` Bamum Table: `bamu` non-base characters Character range --------------------- `0xA6F0` - `0xA6F1` Table: `beng` base characters Character range Description --------------------- ------------- `0x0980` - `0x09FF` Bengali Table: `beng` non-base characters Character range --------------------- `0x0981` - `0x0981` `0x09BC` - `0x09BC` `0x09C1` - `0x09C4` `0x09CD` - `0x09CD` `0x09E2` - `0x09E3` Table: `buhd` base characters Character range Description --------------------- ------------- `0x1740` - `0x175F` Buhid Table: `buhd` non-base characters Character range --------------------- `0x1752` - `0x1753` Table: `cakm` base characters Character range Description --------------------- ------------- `0x11100` - `0x1114F` Chakma Table: `cakm` non-base characters Character range --------------------- `0x11100` - `0x11102` `0x11127` - `0x11134` Table: `cans` base characters Character range Description --------------------- ------------- `0x1400` - `0x167F` Unified Canadian Aboriginal Syllabics `0x18B0` - `0x18FF` Unified Canadian Aboriginal Syllabics Extended Table: `cari` base characters Character range Description --------------------- ------------- `0x102A0` - `0x102DF` Carian Table: `cher` base characters Character range Description --------------------- ------------- `0x13A0` - `0x13FF` Cherokee `0xAB70` - `0xABBF` Cherokee Supplement Table: `copt` base characters Character range Description --------------------- ------------- `0x2C80` - `0x2CFF` Coptic Table: `copt` non-base characters Character range --------------------- `0x2CEF` - `0x2CF1` Table: `cprt` base characters Character range Description --------------------- ------------- `0x10800` - `0x1083F` Cypriot Table: `cyrl` base characters Character range Description --------------------- ------------- `0x0400` - `0x04FF` Cyrillic `0x0500` - `0x052F` Cyrillic Supplement `0x2DE0` - `0x2DFF` Cyrillic Extended-A `0xA640` - `0xA69F` Cyrillic Extended-B Table: `cyrl` non-base characters Character range --------------------- `0x0483` - `0x0489` `0x2DE0` - `0x2DFF` `0xA66F` - `0xA67F` `0xA69E` - `0xA69F` There are some characters in the Devanagari Unicode block that are generic to Indic scripts; we omit them so that their presence doesn't trigger Devanagari. Table: `deva` base characters Character range Description --------------------- ------------- `0x0900` - `0x093B` Devanagari `0x093D` - `0x0950` ... continued `0x0953` - `0x0963` ... continued `0x0966` - `0x097F` ... continued `0x20B9` - `0x20B9` (new) Rupee sign `0xA8E0` - `0xA8FF` Devanagari Extended Table: `deva` non-base characters Character range --------------------- `0x0900` - `0x0902` `0x093A` - `0x093A` `0x0941` - `0x0948` `0x094D` - `0x094D` `0x0953` - `0x0957` `0x0962` - `0x0963` `0xA8E0` - `0xA8F1` Table: `dsrt` base characters Character range Description --------------------- ------------- `0x10400` - `0x1044F` Deseret Table: `ethi` base characters Character range Description --------------------- ------------- `0x1200` - `0x137F` Ethiopic `0x1380` - `0x139F` Ethiopic Supplement `0x2D80` - `0x2DDF` Ethiopic Extended `0xAB00` - `0xAB2F` Ethiopic Extended-A Table: `ethi` non-base characters Character range --------------------- `0x135D` - `0x135F` Table: `geor` base characters Character range Description --------------------- ------------- `0x10D0` - `0x10FF` Georgian (Mkhedruli) Table: `geok` base characters Character range Description --------------------- ------------- `0x10A0` - `0x10CD` Georgian (Asomtavruli) `0x2D00` - `0x2D2D` Georgian (Nuskhuri) Table: `glag` base characters Character range Description --------------------- ------------- `0x2C00` - `0x2C5F` Glagolitic `0x1E000` - `0x1E02F` Glagolitic Supplement Table: `glag` non-base characters Character range --------------------- `0x1E000` - `0x1E02F` Table: `goth` base characters Character range Description --------------------- ------------- `0x10330` - `0x1034F` Gothic Table: `grek` base characters Character range Description --------------------- ------------- `0x0370` - `0x03FF` Greek and Coptic `0x1F00` - `0x1FFF` Greek Extended Table: `grek` non-base characters Character range --------------------- `0x037A` - `0x037A` `0x0384` - `0x0385` `0x1FBD` - `0x1FC1` `0x1FCD` - `0x1FCF` `0x1FDD` - `0x1FDF` `0x1FED` - `0x1FEF` `0x1FFD` - `0x1FFE` Table: `gujr` base characters Character range Description --------------------- ------------- `0x0A80` - `0x0AFF` Gujarati Table: `gujr` non-base characters Character range --------------------- `0x0A81` - `0x0A82` `0x0ABC` - `0x0ABC` `0x0AC1` - `0x0AC8` `0x0ACD` - `0x0ACD` `0x0AE2` - `0x0AE3` Table: `guru` base characters Character range Description --------------------- ------------- `0x0A00` - `0x0A7F` Gurmukhi Table: `guru` non-base characters Character range --------------------- `0x0A01` - `0x0A02` `0x0A3C` - `0x0A3C` `0x0A41` - `0x0A51` `0x0A70` - `0x0A71` `0x0A75` - `0x0A75` Table: `hebr` base characters Character range Description --------------------- ------------- `0x0590` - `0x05FF` Hebrew `0xFB1D` - `0xFB4F` Alphab. Present. Forms (Hebrew) Table: `hebr` non-base characters Character range --------------------- `0x0591` - `0x05BF` `0x05C1` - `0x05C2` `0x05C4` - `0x05C5` `0x05C7` - `0x05C7` `0xFB1E` - `0xFB1E` Table: `kali` base characters Character range Description --------------------- ------------- `0xA900` - `0xA92F` Kayah Li Table: `kali` non-base characters Character range --------------------- `0xA926` - `0xA92D` Table: `knda` base characters Character range Description --------------------- ------------- `0x0C80` - `0x0CFF` Kannada Table: `knda` non-base characters Character range --------------------- `0x0C81` - `0x0C81` `0x0CBC` - `0x0CBC` `0x0CBF` - `0x0CBF` `0x0CC6` - `0x0CC6` `0x0CCC` - `0x0CCD` `0x0CE2` - `0x0CE3` Table: `khmr` base characters Character range Description --------------------- ------------- `0x1780` - `0x17FF` Khmer Table: `khmr` non-base characters Character range --------------------- `0x17B7` - `0x17BD` `0x17C6` - `0x17C6` `0x17C9` - `0x17D3` `0x17DD` - `0x17DD` Table: `khms` base characters Character range Description --------------------- ------------- `0x19E0` - `0x19FF` Khmer Symbols Table: `lao` base characters Character range Description --------------------- ------------- `0x0E80` - `0x0EFF` Lao Table: `lao` non-base characters Character range --------------------- `0x0EB1` - `0x0EB1` `0x0EB4` - `0x0EBC` `0x0EC8` - `0x0ECD` Table: `latn` base characters Character range Description --------------------- ------------- `0x0020` - `0x007F` Basic Latin (no control chars) `0x00A0` - `0x00A9` Latin-1 Supplement (no control chars) `0x00AB` - `0x00B1` ... continued `0x00B4` - `0x00B8` ... continued `0x00BB` - `0x00FF` ... continued `0x0100` - `0x017F` Latin Extended-A `0x0180` - `0x024F` Latin Extended-B `0x0250` - `0x02AF` IPA Extensions `0x02B9` - `0x02DF` Spacing Modifier Letters `0x02E5` - `0x02FF` ... continued `0x0300` - `0x036F` Combining Diacritical Marks `0x1AB0` - `0x1ABE` Combining Diacritical Marks Extended `0x1D00` - `0x1D2B` Phonetic Extensions `0x1D6B` - `0x1D77` ... continued `0x1D79` - `0x1D7F` ... continued `0x1D80` - `0x1D9A` Phonetic Extensions Supplement `0x1DC0` - `0x1DFF` Combining Diacritical Marks Supplement `0x1E00` - `0x1EFF` Latin Extended Additional `0x2000` - `0x206F` General Punctuation `0x20A0` - `0x20B8` Currency Symbols ... `0x20BA` - `0x20CF` ... except new Rupee sign `0x2150` - `0x218F` Number Forms `0x2C60` - `0x2C7B` Latin Extended-C `0x2C7E` - `0x2C7F` ... continued `0x2E00` - `0x2E7F` Supplemental Punctuation `0xA720` - `0xA76F` Latin Extended-D `0xA771` - `0xA7F7` ... continued `0xA7FA` - `0xA7FF` ... continued `0xAB30` - `0xAB5B` Latin Extended-E `0xAB60` - `0xAB6F` ... continued `0xFB00` - `0xFB06` Alphab. Present. Forms (Latin Ligs) `0x1D400` - `0x1D7FF` Mathematical Alphanumeric Symbols Table: `latn` non-base characters Character range --------------------- `0x005E` - `0x0060` `0x007E` - `0x007E` `0x00A8` - `0x00A9` `0x00AE` - `0x00B0` `0x00B4` - `0x00B4` `0x00B8` - `0x00B8` `0x00BC` - `0x00BE` `0x02B9` - `0x02DF` `0x02E5` - `0x02FF` `0x0300` - `0x036F` `0x1AB0` - `0x1ABE` `0x1DC0` - `0x1DFF` `0x2017` - `0x2017` `0x203E` - `0x203E` `0xA788` - `0xA788` `0xA7F8` - `0xA7FA` Table: `latb` base characters Character range Description --------------------- ------------- `0x1D62` - `0x1D6A` some small subscript letters `0x2080` - `0x209C` subscript digits and letters `0x2C7C` - `0x2C7C` latin subscript small letter j Table: `latp` base characters Character range Description --------------------- ------------- `0x00AA` - `0x00AA` feminine ordinal indicator `0x00B2` - `0x00B3` superscript two and three `0x00B9` - `0x00BA` superscript one, masc. ord. indic. `0x02B0` - `0x02B8` some latin superscript mod. letters `0x02E0` - `0x02E4` some IPA modifier letters `0x1D2C` - `0x1D61` latin superscript modifier letters `0x1D78` - `0x1D78` modifier letter cyrillic en `0x1D9B` - `0x1DBF` more modifier letters `0x2070` - `0x207F` superscript digits and letters `0x2C7D` - `0x2C7D` modifier letter capital v `0xA770` - `0xA770` modifier letter us `0xA7F8` - `0xA7F9` more modifier letters `0xAB5C` - `0xAB5F` more modifier letters Table: `lisu` base characters Character range Description --------------------- ------------- `0xA4D0` - `0xA4FF` Lisu Table: `mlym` base characters Character range Description --------------------- ------------- `0x0D00` - `0x0D7F` Malayalam Table: `mlym` non-base characters Character range --------------------- `0x0D01` - `0x0D01` `0x0D4D` - `0x0D4E` `0x0D62` - `0x0D63` Table: `mymr` base characters Character range Description --------------------- ------------- `0x1000` - `0x109F` Myanmar `0xA9E0` - `0xA9FF` Myanmar Extended-B `0xAA60` - `0xAA7F` Myanmar Extended-A Table: `mymr` non-base characters Character range --------------------- `0x102D` - `0x1030` `0x1032` - `0x1037` `0x103A` - `0x103A` `0x103D` - `0x103E` `0x1058` - `0x1059` `0x105E` - `0x1060` `0x1071` - `0x1074` `0x1082` - `0x1082` `0x1085` - `0x1086` `0x108D` - `0x108D` `0xA9E5` - `0xA9E5` `0xAA7C` - `0xAA7C` Table: `nkoo` base characters Character range Description --------------------- ------------- `0x07C0` - `0x07FF` N'Ko Table: `nkoo` non-base characters Character range --------------------- `0x07EB` - `0x07F5` Table: `olck` base characters Character range Description --------------------- ------------- `0x1C50` - `0x1C7F` Ol Chiki Table: `orkh` base characters Character range Description --------------------- ------------- `0x10C00` - `0x10C4F` Old Turkic Table: `osge` base characters Character range Description --------------------- ------------- `0x104B0` - `0x104FF` Osage Table: `osma` base characters Character range Description --------------------- ------------- `0x10480` - `0x104AF` Osmanya Table: `saur` base characters Character range Description --------------------- ------------- `0xA880` - `0xA8DF` Saurashtra Table: `saur` non-base characters Character range --------------------- `0xA880` - `0xA881` `0xA8B4` - `0xA8C5` Table: `shaw` base characters Character range Description --------------------- ------------- `0x10450` - `0x1047F` Shavian Table: `sinh` base characters Character range Description --------------------- ------------- `0x0D80` - `0x0DFF` Sinhala Table: `sinh` non-base characters Character range --------------------- `0x0DCA` - `0x0DCA` `0x0DD2` - `0x0DD6` Table: `sund` base characters Character range Description --------------------- ------------- `0x1B80` - `0x1BBF` Sundanese `0x1CC0` - `0x1CCF` Sundanese Supplement Table: `sund` non-base characters Character range --------------------- `0x1B80` - `0x1B82` `0x1BA1` - `0x1BAD` Table: `taml` base characters Character range Description --------------------- ------------- `0x0B80` - `0x0BFF` Tamil Table: `taml` non-base characters Character range --------------------- `0x0B82` - `0x0B82` `0x0BC0` - `0x0BC2` `0x0BCD` - `0x0BCD` Table: `tavt` base characters Character range Description --------------------- ------------- `0xAA80` - `0xAADF` Tai Viet Table: `tavt` non-base characters Character range --------------------- `0xAAB0` - `0xAAB0` `0xAAB2` - `0xAAB4` `0xAAB7` - `0xAAB8` `0xAABE` - `0xAABF` `0xAAC1` - `0xAAC1` Table: `telu` base characters Character range Description --------------------- ------------- `0x0C00` - `0x0C7F` Telugu Table: `telu` non-base characters Character range --------------------- `0x0C00` - `0x0C00` `0x0C3E` - `0x0C40` `0x0C46` - `0x0C56` `0x0C62` - `0x0C63` Table: `thai` base characters Character range Description --------------------- ------------- `0x0E00` - `0x0E7F` Thai Table: `thai` non-base characters Character range --------------------- `0x0E31` - `0x0E31` `0x0E34` - `0x0E3A` `0x0E47` - `0x0E4E` Table: `tfng` base characters Character range Description --------------------- ------------- `0x2D30` - `0x2D7F` Tifinagh Table: `vaii` base characters Character range Description --------------------- ------------- `0xA500` - `0xA63F` Vai History ======= ttfautohint-1.8.1/doc/template.html0000644000175000001440000000244612643432074017214 0ustar00wlusers00000000000000 $for(author-meta)$ $endfor$ $if(version)$ $endif$ $if(title-prefix)$$title-prefix$ - $endif$$if(pagetitle)$$pagetitle$$endif$ $for(header-includes)$ $header-includes$ $endfor$ $for(include-before)$ $include-before$ $endfor$
$if(title)$

$title$

$for(author)$

$author$

$endfor$ $if(version)$

Version $version$

$endif$
$endif$ $body$
$if(toc)$
$toc$
$endif$ $for(include-after)$ $include-after$ $endfor$ ttfautohint-1.8.1/doc/template.tex0000644000175000001440000003470613153174711017052 0ustar00wlusers00000000000000% For non-ASCII characters, this template only works with luatex or XeTeX. % Arabic, Armenian, Bengali, Cherokee, Devanagari, Ethiopic, Georgian, % Gujarati, Gurmukhi, Kannada, Khmer, Lao, Malayalam, Myanmar, Sinhala, % Tamil, Telugu, and Thai support currently works with XeTeX only. \documentclass[$if(fontsize)$$fontsize$,$endif$% $if(lang)$$lang$,$endif$% DIV=13]{scrreprt} \usepackage{ifxetex,ifluatex} \usepackage[T1]{fontenc} \usepackage{fixltx2e} \usepackage{libertine} \ifxetex % with newer releases of `fontspec', fonts should be defined before % including `ucharclasses' \newfontfamily{\adlamfont}[Script=Adlam]{NotoSansAdlam-Regular.ttf} \newfontfamily{\arabicfont}[Script=Arabic]{NotoSansArabic-Regular.ttf} \newfontfamily{\armenianfont}[Script=Armenian]{NotoSansArmenian-Regular.ttf} \newfontfamily{\avestanfont}[Script=Avestan]{NotoSansAvestan-Regular.ttf} \newfontfamily{\bamumfont}[Script=Bamum]{NotoSansBamum-Regular.ttf} \newfontfamily{\bengalifont}[Script=Bengali]{NotoSansBengali-Regular.ttf} \newfontfamily{\buhidfont}[Script=Buhid]{NotoSansBuhid-Regular.ttf} \newfontfamily{\canadianfont}[Script=Canadian Syllabics]{NotoSansCanadianAboriginal-Regular.ttf} \newfontfamily{\carianfont}[Script=Carian]{NotoSansCarian-Regular.ttf} \newfontfamily{\chakmafont}[Script=Chakma]{NotoSansChakma-Regular.ttf} \newfontfamily{\cherokeefont}[Script=Cherokee]{NotoSansCherokee-Regular.ttf} \newfontfamily{\copticfont}[Script=Coptic]{NotoSansCoptic-Regular.ttf} \newfontfamily{\cypriotfont}[Script=Cypriot Syllabary]{NotoSansCypriot-Regular.ttf} \newfontfamily{\cyrillicfont}[Script=Cyrillic]{NotoSans-Regular.ttf} \newfontfamily{\devanagarifont}[Script=Devanagari]{NotoSansDevanagari-Regular.ttf} \newfontfamily{\deseretfont}[Script=Deseret]{NotoSansDeseret-Regular.ttf} \newfontfamily{\ethiopicfont}[Script=Ethiopic]{NotoSansEthiopic-Regular.ttf} \newfontfamily{\georgianfont}[Script=Georgian]{NotoSansGeorgian-Regular.ttf} \newfontfamily{\glagoliticfont}[Script=Glagolitic]{NotoSansGlagolitic-Regular.ttf} \newfontfamily{\gothicfont}[Script=Gothic]{NotoSansGothic-Regular.ttf} \newfontfamily{\greekfont}[Script=Greek]{NotoSans-Regular.ttf} \newfontfamily{\gujaratifont}[Script=Gujarati]{NotoSansGujarati-Regular.ttf} \newfontfamily{\gurmukhifont}[Script=Gurmukhi]{NotoSansGurmukhi-Regular.ttf} \newfontfamily{\hebrewfont}[Script=Hebrew]{NotoSansHebrew-Regular.ttf} \newfontfamily{\kannadafont}[Script=Kannada]{NotoSansKannada-Regular.ttf} \newfontfamily{\kayahlifont}[Script=Kayah Li]{NotoSansKayahLi-Regular.ttf} \newfontfamily{\khmerfont}[Script=Khmer]{NotoSansKhmer-Regular.ttf} \newfontfamily{\laofont}[Script=Lao]{NotoSansLao-Regular.ttf} \newfontfamily{\latinfont}[Script=Latin]{NotoSans-Regular.ttf} \newfontfamily{\lisufont}[Script=Lisu]{NotoSansLisu-Regular.ttf} \newfontfamily{\malayalamfont}[Script=Malayalam]{NotoSansMalayalam-Regular.ttf} \newfontfamily{\myanmarfont}[Script=Myanmar]{NotoSansMyanmar-Regular.ttf} \newfontfamily{\nkofont}[Script=N'Ko]{NotoSansNKo-Regular.ttf} \newfontfamily{\olchikifont}[Script=Ol Chiki]{NotoSansOlChiki-Regular.ttf} \newfontfamily{\oldturkicfont}[Script=Old Turkic]{NotoSansOldTurkic-Regular.ttf} \newfontfamily{\osagefont}[Script=Osage]{NotoSansOsage-Regular.ttf} \newfontfamily{\osmanyafont}[Script=Osmanya]{NotoSansOsmanya-Regular.ttf} \newfontfamily{\saurashtrafont}[Script=Saurashtra]{NotoSansSaurashtra-Regular.ttf} \newfontfamily{\shavianfont}[Script=Shavian]{NotoSansShavian-Regular.ttf} \newfontfamily{\sinhalafont}[Script=Sinhala]{NotoSansSinhala-Regular.ttf} \newfontfamily{\sundanesefont}[Script=Sundanese]{NotoSansSundanese-Regular.ttf} \newfontfamily{\taivietfont}[Script=Tai Viet]{NotoSansTaiViet-Regular.ttf} \newfontfamily{\tamilfont}[Script=Tamil]{NotoSansTamil-Regular.ttf} \newfontfamily{\telugufont}[Script=Telugu]{NotoSansTelugu-Regular.ttf} \newfontfamily{\thaifont}[Script=Thai]{NotoSansThai-Regular.ttf} \newfontfamily{\tifinaghfont}[Script=Tifinagh]{NotoSansTifinagh-Regular.ttf} \newfontfamily{\vaifont}[Script=Vai]{NotoSansVai-Regular.ttf} \usepackage{ucharclasses} \setTransitionTo{Adlam}{\begingroup\adlamfont} \setTransitionFrom{Adlam}{\endgroup} \setTransitionTo{Arabic}{\begingroup\arabicfont} \setTransitionFrom{Arabic}{\endgroup} \setTransitionTo{Armenian}{\begingroup\armenianfont} \setTransitionFrom{Armenian}{\endgroup} \setTransitionTo{Avestan}{\begingroup\avestanfont} \setTransitionFrom{Avestan}{\endgroup} \setTransitionTo{Bamum}{\begingroup\bamumfont} \setTransitionFrom{Bamum}{\endgroup} \setTransitionTo{Bengali}{\begingroup\bengalifont} \setTransitionFrom{Bengali}{\endgroup} \setTransitionTo{Buhid}{\begingroup\buhidfont} \setTransitionFrom{Buhid}{\endgroup} \setTransitionsForCanadianSyllabics{\begingroup\canadianfont}{\endgroup} \setTransitionTo{Carian}{\begingroup\carianfont} \setTransitionFrom{Carian}{\endgroup} \setTransitionTo{Chakma}{\begingroup\chakmafont} \setTransitionFrom{Chakma}{\endgroup} \setTransitionsForCherokeeFull{\begingroup\cherokeefont}{\endgroup} \setTransitionTo{Coptic}{\begingroup\copticfont} \setTransitionFrom{Coptic}{\endgroup} \setTransitionTo{CypriotSyllabary}{\begingroup\cypriotfont} \setTransitionFrom{CypriotSyllabary}{\endgroup} % no transition for Cyrillic font; we do that manually \setTransitionTo{Deseret}{\begingroup\deseretfont} \setTransitionFrom{Deseret}{\endgroup} \setTransitionTo{Devanagari}{\begingroup\devanagarifont} \setTransitionFrom{Devanagari}{\endgroup} \setTransitionsForEthiopicFull{\begingroup\ethiopicfont}{\endgroup} \setTransitionsForGeorgianFull{\begingroup\georgianfont}{\endgroup} % in Noto, Glagolitic is not part of a Cyrillic font; % we thus have to set up the ranges separately \setTransitionTo{Glagolitic}{\begingroup\glagoliticfont} \setTransitionFrom{Glagolitic}{\endgroup} \setTransitionTo{GlagoliticSupplement}{\begingroup\glagoliticfont} \setTransitionFrom{GlagoliticSupplement}{\endgroup} \setTransitionTo{Gothic}{\begingroup\gothicfont} \setTransitionFrom{Gothic}{\endgroup} % no transition for Greek font; we do that manually \setTransitionTo{Gujarati}{\begingroup\gujaratifont} \setTransitionFrom{Gujarati}{\endgroup} \setTransitionTo{Gurmukhi}{\begingroup\gurmukhifont} \setTransitionFrom{Gurmukhi}{\endgroup} \setTransitionTo{Hebrew}{\begingroup\hebrewfont} \setTransitionFrom{Hebrew}{\endgroup} \setTransitionTo{Kannada}{\begingroup\kannadafont} \setTransitionFrom{Kannada}{\endgroup} \setTransitionTo{KayahLi}{\begingroup\kayahlifont} \setTransitionFrom{KayahLi}{\endgroup} \setTransitionTo{Khmer}{\begingroup\khmerfont} \setTransitionFrom{Khmer}{\endgroup} \setTransitionTo{KhmerSymbols}{\begingroup\khmerfont} \setTransitionFrom{KhmerSymbols}{\endgroup} \setTransitionTo{Lao}{\begingroup\laofont} \setTransitionFrom{Lao}{\endgroup} % no transition for Latin font; we do that manually \setTransitionTo{Lisu}{\begingroup\lisufont} \setTransitionFrom{Lisu}{\endgroup} \setTransitionTo{Malayalam}{\begingroup\malayalamfont} \setTransitionFrom{Malayalam}{\endgroup} \setTransitionsForMyanmarFull{\begingroup\myanmarfont}{\endgroup} \setTransitionTo{NKo}{\begingroup\nkofont} \setTransitionFrom{NKo}{\endgroup} \setTransitionTo{OlChiki}{\begingroup\olchikifont} \setTransitionFrom{OlChiki}{\endgroup} \setTransitionTo{OldTurkic}{\begingroup\oldturkicfont} \setTransitionFrom{OldTurkic}{\endgroup} \setTransitionTo{Osage}{\begingroup\osagefont} \setTransitionFrom{Osage}{\endgroup} \setTransitionTo{Osmanya}{\begingroup\osmanyafont} \setTransitionFrom{Osmanya}{\endgroup} \setTransitionTo{Saurashtra}{\begingroup\saurashtrafont} \setTransitionFrom{Saurashtra}{\endgroup} \setTransitionTo{Shavian}{\begingroup\shavianfont} \setTransitionFrom{Shavian}{\endgroup} \setTransitionTo{Sinhala}{\begingroup\sinhalafont} \setTransitionFrom{Sinhala}{\endgroup} \setTransitionsForSundaneseFull{\begingroup\sundanesefont}{\endgroup} \setTransitionTo{TaiViet}{\begingroup\taivietfont} \setTransitionFrom{TaiViet}{\endgroup} \setTransitionTo{Tamil}{\begingroup\tamilfont} \setTransitionFrom{Tamil}{\endgroup} \setTransitionTo{Telugu}{\begingroup\telugufont} \setTransitionFrom{Telugu}{\endgroup} \setTransitionTo{Thai}{\begingroup\thaifont} \setTransitionFrom{Thai}{\endgroup} \setTransitionTo{Tifinagh}{\begingroup\tifinaghfont} \setTransitionFrom{Tifinagh}{\endgroup} \setTransitionTo{Vai}{\begingroup\vaifont} \setTransitionFrom{Vai}{\endgroup} % the next commands are needed for manually switching fonts \def\Cyrillic{\begingroup\cyrillicfont} \def\cyrillic{\endgroup} \def\Greek{\begingroup\greekfont} \def\greek{\endgroup} \def\Latin{\begingroup\latinfont} \def\latin{\endgroup} \fi % Libertine Mono is too ugly; we use lmodern instead \renewcommand{\ttfamily}{\fontfamily{lmtt}\selectfont} \setkomafont{sectioning}{\normalfont\bfseries} \setkomafont{descriptionlabel}{\normalfont} \setkomafont{caption}{\normalfont\small} $if(highlighting-macros)$ $highlighting-macros$ $endif$ $if(verbatim-in-note)$ \usepackage{fancyvrb} $endif$ $if(fancy-enums)$ % Redefine labelwidth for lists; otherwise, the enumerate package will cause % markers to extend beyond the left margin. \makeatletter \AtBeginDocument{% \renewcommand{\@listi} {\setlength{\labelwidth}{4em}}% } \makeatother \usepackage{enumerate} $endif$ $if(tables)$ % We use a patched version of longtable until a serious clash with % floats get fixed. \usepackage{longtable-patched} \usepackage{booktabs} % pandoc inserts \addlinespace after each line... \defaultaddspace=1pt % XXX The \addlinespace macro, as used in the LaTeX code generated by % pandoc, overrides any vertical space adjustments for \toprule and friends, % which is quite unfortunate. I consider this a bug in pandoc 1.12.2.1. % It's not too difficult to fix this, but I had to redefine a lot of % booktabs commands, which I don't want. Since the layout degradation is % minor, I simply wait until it gets fixed in pandoc. % %\aboverulesep=0.3em %\belowrulesep=0.3em $endif$ $if(url)$ \usepackage{url} $endif$ $if(graphics)$ \usepackage{graphicx} % We will generate all images so they have a width 0.6\maxwidth. This means % that they will get their normal width if they fit onto the page, but are % scaled down if they would overflow this limit. \makeatletter \def\maxwidth{% \ifdim\Gin@nat@width>\linewidth \linewidth \else \Gin@nat@width \fi} \makeatother \let\Oldincludegraphics\includegraphics \renewcommand{\includegraphics}[1]{% \Oldincludegraphics[width=0.6\maxwidth]{#1}} $endif$ \ifxetex \usepackage[setpagesize=false, % page size defined by xetex unicode=false, % unicode breaks when used with xetex xetex, colorlinks=true, linkcolor=blue]{hyperref} \else \usepackage[unicode=true, colorlinks=true, linkcolor=blue]{hyperref} \usepackage{microtype} % don't apply protrusion to \texttt \UseMicrotypeSet[protrusion]{basicmath} \fi \hypersetup{breaklinks=true, pdfauthor={$author-meta$}, pdftitle={$title-meta$}, pdfborder={0 0 0}} % We want the names `section 2', `subsection 4.1', and the like in local % links, omitting the original link text. To do that, we redefine % \hyperref. \makeatletter % We transform % % \hyperref[foo]{bar} % % into % % bar (\autoref{foo}) \def\label@hyperref[#1]#2{% #2 (\autoref{#1})} % pandoc >= 1.15.2 uses \hyperlink instead. \def\hyperlink#1#2{% #2 (\autoref{#1})} \makeatother $if(subscript)$ \newcommand{\textsubscr}[1]{% \ensuremath{_{\scriptsize\textrm{#1}}}} $endif$ \setlength{\parindent}{0pt} \setlength{\parskip}{6pt plus 2pt minus 1pt} \setlength{\emergencystretch}{4em} % prevent overfull lines \providecommand{\tightlist}{% \setlength{\itemsep}{0pt}% \setlength{\parskip}{0pt}} % avoid float pages as much as possible \renewcommand{\topfraction}{.99} \renewcommand{\bottomfraction}{.99} \setcounter{topnumber}{9} \setcounter{bottomnumber}{9} \renewcommand{\textfraction}{.1} \renewcommand{\floatpagefraction}{.9} % We want a break after the description label (if there is one). \makeatletter \let\original@item\@item \def\description@item[#1]{% \if@noparitem \@donoparitem \else \if@inlabel \indent \par \fi \ifhmode \unskip\unskip \par \fi \if@newlist \if@nobreak \@nbitem \else \addpenalty\@beginparpenalty \addvspace\@topsep \addvspace{-\parskip}% \fi \else \addpenalty\@itempenalty \addvspace\itemsep \fi \global\@inlabeltrue \fi \everypar{% \@minipagefalse \global\@newlistfalse \if@inlabel \global\@inlabelfalse {\setbox\z@\lastbox \ifvoid\z@ \kern-\itemindent \fi}% \box\@labels \penalty\z@ \fi \if@nobreak \@nobreakfalse \clubpenalty \@M \else \clubpenalty \@clubpenalty \everypar{}% \fi}% \if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter\@listctr \fi \fi \sbox\@tempboxa{\makelabel{#1}}% \global\setbox\@labels\hbox{% \unhbox\@labels \hskip \itemindent \hskip -\labelwidth \hskip -\labelsep \ifdim \wd\@tempboxa >\labelwidth \box\@tempboxa \else \hbox to\labelwidth {\unhbox\@tempboxa}% \fi \hskip \labelsep}% \def\reserved@a{#1}% \def\reserved@b{\@itemlabel}% \ifx\reserved@a \reserved@b \else \leavevmode\\ \fi \ignorespaces} \renewenvironment{description}{% \list{}{\labelwidth\z@ \itemindent-\leftmargin \let\makelabel\descriptionlabel \let\@item\description@item}% }{% \let\@item\original@item \endlist } \makeatother % we want block quotes formatted as italic \renewenvironment{quote}{% \list{}{\rightmargin\leftmargin}% \item\relax \em }{% \endlist } $if(numbersections)$ \setcounter{secnumdepth}{5} $else$ \setcounter{secnumdepth}{0} $endif$ $if(verbatim-in-note)$ \VerbatimFootnotes % allows verbatim text in footnotes $endif$ $if(lang)$ \ifxetex \usepackage{polyglossia} \setmainlanguage{$mainlang$} \else \usepackage[$lang$]{babel} \fi $endif$ $for(header-includes)$ $header-includes$ $endfor$ $if(title)$ \title{$title$} $endif$ \author{$for(author)$$author$$sep$ \and $endfor$} $if(version)$ \date{Version $version$} $endif$ \begin{document} $if(title)$ \maketitle $endif$ $for(include-before)$ $include-before$ $endfor$ $if(toc)$ \tableofcontents $endif$ $body$ $for(include-after)$ $include-after$ $endfor$ \end{document} ttfautohint-1.8.1/doc/longtable-patched.sty0000644000175000001440000003061212643432074020625 0ustar00wlusers00000000000000%% This is file `longtable-patched.sty'. %% %% It is the file `longtable.sty' (from the Standard LaTeX `Tools Bundle') %% with a patch from %% %% http://www.latex-project.org/cgi-bin/ltxbugs2html?pr=tools/3512 %% %% to fix a serious layout issue with floats. This is a legal modification %% based on the LPPL license since the file name has been changed. %% %% The original source code file `longtable.dtx' can be found at %% %% http://ctan.org/pkg/longtable %% %% %% For reference, here the original copyright notice. %% %% This is file `longtable.sty', %% generated with the docstrip utility. %% %% %% The original source files were: %% %% longtable.dtx (with options: `package') %% %% This is a generated file. %% %% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 %% 2006 2008 2009 %% The LaTeX3 Project and any individual authors listed elsewhere %% in this file. %% %% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'. %% -------------------------------------------------------------------------- %% %% It may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3c %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3c or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% %% This file may only be distributed together with a copy of the LaTeX %% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle' %% without such generated files. %% %% The list of all files belonging to the LaTeX `Tools Bundle' is %% given in the file `manifest.txt'. %% %% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle \NeedsTeXFormat{LaTeX2e}[1995/06/01] \ProvidesPackage{longtable-patched} [2014/01/29 v4.11-patched Multi-page Table package (DPC)] \def\LT@err{\PackageError{longtable-patched}} \def\LT@warn{\PackageWarning{longtable-patched}} \def\LT@final@warn{% \AtEndDocument{% \LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}% \global\let\LT@final@warn\relax} \DeclareOption{errorshow}{% \def\LT@warn{\PackageInfo{longtable-patched}}} \DeclareOption{pausing}{% \def\LT@warn#1{% \LT@err{#1}{This is not really an error}}} \DeclareOption{set}{} \DeclareOption{final}{} \ProcessOptions \newskip\LTleft \LTleft=\fill \newskip\LTright \LTright=\fill \newskip\LTpre \LTpre=\bigskipamount \newskip\LTpost \LTpost=\bigskipamount \newcount\LTchunksize \LTchunksize=20 \let\c@LTchunksize\LTchunksize \newdimen\LTcapwidth \LTcapwidth=4in \newbox\LT@head \newbox\LT@firsthead \newbox\LT@foot \newbox\LT@lastfoot \newcount\LT@cols \newcount\LT@rows \newcounter{LT@tables} \newcounter{LT@chunks}[LT@tables] \ifx\c@table\undefined \newcounter{table} \def\fnum@table{\tablename~\thetable} \fi \ifx\tablename\undefined \def\tablename{Table} \fi \newtoks\LT@p@ftn \mathchardef\LT@end@pen=30000 \def\longtable{% \par \ifx\multicols\@undefined \else \ifnum\col@number>\@ne \@twocolumntrue \fi \fi \if@twocolumn \LT@err{longtable not in 1-column mode}\@ehc \fi \begingroup \@ifnextchar[\LT@array{\LT@array[x]}} \def\LT@array[#1]#2{% \refstepcounter{table}\stepcounter{LT@tables}% \if l#1% \LTleft\z@ \LTright\fill \else\if r#1% \LTleft\fill \LTright\z@ \else\if c#1% \LTleft\fill \LTright\fill \fi\fi\fi \let\LT@mcol\multicolumn \let\LT@@tabarray\@tabarray \let\LT@@hl\hline \def\@tabarray{% \let\hline\LT@@hl \LT@@tabarray}% \let\\\LT@tabularcr\let\tabularnewline\\% \def\newpage{\noalign{\break}}% \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}% \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}% \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption \@tempdima\ht\strutbox \let\@endpbox\LT@endpbox \ifx\extrarowheight\@undefined \let\@acol\@tabacol \let\@classz\@tabclassz \let\@classiv\@tabclassiv \def\@startpbox{\vtop\LT@startpbox}% \let\@@startpbox\@startpbox \let\@@endpbox\@endpbox \let\LT@LL@FM@cr\@tabularcr \else \advance\@tempdima\extrarowheight \col@sep\tabcolsep \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr \fi \setbox\@arstrutbox\hbox{\vrule \@height \arraystretch \@tempdima \@depth \arraystretch \dp \strutbox \@width \z@}% \let\@sharp##\let\protect\relax \begingroup \@mkpream{#2}% \xdef\LT@bchunk{% \global\advance\c@LT@chunks\@ne \global\LT@rows\z@\setbox\z@\vbox\bgroup \LT@setprevdepth \tabskip\LTleft \noexpand\halign to\hsize\bgroup \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}% \endgroup \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols \LT@make@row \m@th\let\par\@empty \everycr{}\lineskip\z@\baselineskip\z@ \LT@bchunk} \def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}} \def\LT@start{% \let\LT@start\endgraf \endgraf\penalty\z@\vskip\LTpre \dimen@\pagetotal \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi \advance\dimen@ \ht\LT@foot \dimen@ii\vfuzz \vfuzz\maxdimen \setbox\tw@\copy\z@ \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox \setbox\tw@\vbox{\unvbox\tw@}% \vfuzz\dimen@ii \advance\dimen@ \ht \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi \advance\dimen@\dp \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi \advance\dimen@ -\pagegoal \ifdim \dimen@>\z@\vfil\break\fi \global\@colroom\@colht \ifvoid\LT@foot\else \global\advance\vsize-\ht\LT@foot \global\advance\@colroom-\ht\LT@foot \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@ \maxdepth\z@ \fi \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak \output{\LT@output}} \def\endlongtable{% \crcr \noalign{% \let\LT@entry\LT@entry@chop \xdef\LT@save@row{\LT@save@row}}% \LT@echunk \LT@start \unvbox\z@ \LT@get@widths \if@filesw {\let\LT@entry\LT@entry@write\immediate\write\@auxout{% \gdef\expandafter\noexpand \csname LT@\romannumeral\c@LT@tables\endcsname {\LT@save@row}}}% \fi \ifx\LT@save@row\LT@@save@row \else \LT@warn{Column \@width s have changed\MessageBreak in table \thetable}% \LT@final@warn \fi \endgraf\penalty -\LT@end@pen \ifvoid\LT@foot\else \global\advance\vsize\ht\LT@foot \global\advance\@colroom\ht\LT@foot \dimen@\pagegoal\advance\dimen@\ht\LT@foot\pagegoal\dimen@ \fi \endgroup \global\@mparbottom\z@ \endgraf\penalty\z@\addvspace\LTpost \ifvoid\footins\else\insert\footins{}\fi} \def\LT@nofcols#1&{% \futurelet\@let@token\LT@n@fcols} \def\LT@n@fcols{% \advance\LT@cols\@ne \ifx\@let@token\LT@nofcols \expandafter\@gobble \else \expandafter\LT@nofcols \fi} \def\LT@tabularcr{% \relax\iffalse{\fi\ifnum0=`}\fi \@ifstar {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr \LT@t@bularcr}% {\LT@t@bularcr}} \let\LT@crcr\crcr \let\LT@setprevdepth\relax \def\LT@t@bularcr{% \global\advance\LT@rows\@ne \ifnum\LT@rows=\LTchunksize \gdef\LT@setprevdepth{% \prevdepth\z@\global \global\let\LT@setprevdepth\relax}% \expandafter\LT@xtabularcr \else \ifnum0=`{}\fi \expandafter\LT@LL@FM@cr \fi} \def\LT@xtabularcr{% \@ifnextchar[\LT@argtabularcr\LT@ntabularcr} \def\LT@ntabularcr{% \ifnum0=`{}\fi \LT@echunk \LT@start \unvbox\z@ \LT@get@widths \LT@bchunk} \def\LT@argtabularcr[#1]{% \ifnum0=`{}\fi \ifdim #1>\z@ \unskip\@xargarraycr{#1}% \else \@yargarraycr{#1}% \fi \LT@echunk \LT@start \unvbox\z@ \LT@get@widths \LT@bchunk} \def\LT@echunk{% \crcr\LT@save@row\cr\egroup \global\setbox\@ne\lastbox \unskip \egroup} \def\LT@entry#1#2{% \ifhmode\@firstofone{&}\fi\omit \ifnum#1=\c@LT@chunks \else \kern#2\relax \fi} \def\LT@entry@chop#1#2{% \noexpand\LT@entry {\ifnum#1>\c@LT@chunks 1}{0pt% \else #1}{#2% \fi}} \def\LT@entry@write{% \noexpand\LT@entry^^J% \@spaces} \def\LT@kill{% \LT@echunk \LT@get@widths \expandafter\LT@rebox\LT@bchunk} \def\LT@rebox#1\bgroup{% #1\bgroup \unvbox\z@ \unskip \setbox\z@\lastbox} \def\LT@blank@row{% \xdef\LT@save@row{\expandafter\LT@build@blank \romannumeral\number\LT@cols 001 }} \def\LT@build@blank#1{% \if#1m% \noexpand\LT@entry{1}{0pt}% \expandafter\LT@build@blank \fi} \def\LT@make@row{% \global\expandafter\let\expandafter\LT@save@row \csname LT@\romannumeral\c@LT@tables\endcsname \ifx\LT@save@row\relax \LT@blank@row \else {\let\LT@entry\or \if!% \ifcase\expandafter\expandafter\expandafter\LT@cols \expandafter\@gobble\LT@save@row \or \else \relax \fi !% \else \aftergroup\LT@blank@row \fi}% \fi} \let\setlongtables\relax \def\LT@get@widths{% \setbox\tw@\hbox{% \unhbox\@ne \let\LT@old@row\LT@save@row \global\let\LT@save@row\@empty \count@\LT@cols \loop \unskip \setbox\tw@\lastbox \ifhbox\tw@ \LT@def@row \advance\count@\m@ne \repeat}% \ifx\LT@@save@row\@undefined \let\LT@@save@row\LT@save@row \fi} \def\LT@def@row{% \let\LT@entry\or \edef\@tempa{% \ifcase\expandafter\count@\LT@old@row \else {1}{0pt}% \fi}% \let\LT@entry\relax \xdef\LT@save@row{% \LT@entry \expandafter\LT@max@sel\@tempa \LT@save@row}} \def\LT@max@sel#1#2{% {\ifdim#2=\wd\tw@ #1% \else \number\c@LT@chunks \fi}% {\the\wd\tw@}} \def\LT@hline{% \noalign{\ifnum0=`}\fi \penalty\@M \futurelet\@let@token\LT@@hline} \def\LT@@hline{% \ifx\@let@token\hline \global\let\@gtempa\@gobble \gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}% \else \global\let\@gtempa\@empty \gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}% \fi \ifnum0=`{\fi}% \multispan\LT@cols \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr \noalign{\LT@sep}% \multispan\LT@cols \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr \noalign{\penalty\@M}% \@gtempa} \def\LT@caption{% \noalign\bgroup \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n} \def\LT@c@ption#1[#2]#3{% \LT@makecaption#1\fnum@table{#3}% \def\@tempa{#2}% \ifx\@tempa\@empty\else {\let\\\space \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}% \fi} \def\LT@capti@n{% \@ifstar {\egroup\LT@c@ption\@gobble[]}% {\egroup\@xdblarg{\LT@c@ption\@firstofone}}} \def\LT@makecaption#1#2#3{% \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{% \sbox\@tempboxa{#1{#2: }#3}% \ifdim\wd\@tempboxa>\hsize #1{#2: }#3% \else \hbox to\hsize{\hfil\box\@tempboxa\hfil}% \fi \endgraf\vskip\baselineskip}% \hss}}} \def\LT@output{% \ifnum\outputpenalty <-\@Mi \ifnum\outputpenalty > -\LT@end@pen \LT@err{floats and marginpars not allowed in a longtable}\@ehc \else \setbox\z@\vbox{\unvbox\@cclv}% \ifdim \ht\LT@lastfoot>\ht\LT@foot \dimen@\pagegoal \advance\dimen@\ht\LT@foot \advance\dimen@-\ht\LT@lastfoot \ifdim\dimen@<\ht\z@ \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}% \@makecol \@outputpage \global\vsize\@colroom \setbox\z@\vbox{\box\LT@head}% \fi \fi \unvbox\z@\ifvoid\LT@lastfoot\copy\LT@foot\else\box\LT@lastfoot\fi \fi \else \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}% \@makecol \@outputpage \global\vsize\@colroom \copy\LT@head\nobreak \fi} \def\LT@end@hd@ft#1{% \LT@echunk \ifx\LT@start\endgraf \LT@err {Longtable head or foot not at start of table}% {Increase LTchunksize}% \fi \setbox#1\box\z@ \LT@get@widths \LT@bchunk} \def\endfirsthead{\LT@end@hd@ft\LT@firsthead} \def\endhead{\LT@end@hd@ft\LT@head} \def\endfoot{\LT@end@hd@ft\LT@foot} \def\endlastfoot{\LT@end@hd@ft\LT@lastfoot} \def\LT@startpbox#1{% \bgroup \let\@footnotetext\LT@p@ftntext \setlength\hsize{#1}% \@arrayparboxrestore \vrule \@height \ht\@arstrutbox \@width \z@} \def\LT@endpbox{% \@finalstrut\@arstrutbox \egroup \the\LT@p@ftn \global\LT@p@ftn{}% \hfil} \def\LT@p@ftntext#1{% \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}% \global\LT@p@ftn\expandafter{\@tempa{#1}}}% \endinput %% %% End of file `longtable-patched.sty'. ttfautohint-1.8.1/doc/fontspec-xetex.sty0000644000175000001440000044177213153174711020237 0ustar00wlusers00000000000000%% %% This is file `fontspec-xetex.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% fontspec.dtx (with options: `fontspec,xetexx') %% fontspec-vars.dtx (with options: `fontspec,xetexx') %% fontspec-msg.dtx (with options: `fontspec,xetexx') %% fontspec-opening.dtx (with options: `fontspec,xetexx') %% fontspec-fontload.dtx (with options: `fontspec,xetexx') %% fontspec-user.dtx (with options: `fontspec,xetexx') %% fontspec-api.dtx (with options: `fontspec,xetexx') %% fontspec-internal.dtx (with options: `fontspec,xetexx') %% fontspec-opentype.dtx (with options: `fontspec,xetexx') %% fontspec-graphite.dtx (with options: `fontspec,xetexx') %% fontspec-keyval.dtx (with options: `fontspec,xetexx') %% fontspec-feat-opentype.dtx (with options: `fontspec,xetexx') %% fontspec-scripts.dtx (with options: `fontspec,xetexx') %% fontspec-lang.dtx (with options: `fontspec,xetexx') %% fontspec-feat-aat.dtx (with options: `fontspec,xetexx') %% fontspec-enc.dtx (with options: `fontspec,xetexx') %% fontspec-math.dtx (with options: `fontspec,xetexx') %% fontspec-closing.dtx (with options: `fontspec,xetexx') %% fontspec-xfss.dtx (with options: `fontspec,xetexx') %% fontspec-patches.dtx (with options: `fontspec,xetexx') %% ------------------------------------------------ %% The FONTSPEC package for XeLaTeX/LuaLaTeX %% (C) 2004--2017 Will Robertson and Khaled Hosny %% License information appended. %% ------------------------------------------------ \RequirePackage{expl3} \RequirePackage{xparse} \ProvidesExplPackage{fontspec-xetex}% {2017/08/14}{2.6d}{Font selection for XeLaTeX and LuaLaTeX} \bool_new:N \l__fontspec_firsttime_bool \bool_new:N \l__fontspec_nobf_bool \bool_new:N \l__fontspec_noit_bool \bool_new:N \l__fontspec_nosc_bool \bool_new:N \l__fontspec_check_bool \cs_new:Npn \FontspecSetCheckBoolTrue { \bool_set_true:N \l__fontspec_check_bool } \cs_new:Npn \FontspecSetCheckBoolFalse { \bool_set_false:N \l__fontspec_check_bool } \bool_new:N \l__fontspec_tfm_bool \bool_new:N \l__fontspec_atsui_bool \bool_new:N \l__fontspec_ot_bool \bool_new:N \l__fontspec_mm_bool \bool_new:N \l__fontspec_graphite_bool \bool_new:N \l__fontspec_fontcfg_bool \bool_set_true:N \l__fontspec_fontcfg_bool \bool_new:N \g__fontspec_math_euler_bool \bool_new:N \g__fontspec_math_lucida_bool \bool_new:N \g__fontspec_pkg_euler_loaded_bool \bool_new:N \g__fontspec_cfg_bool \bool_new:N \g__fontspec_math_bool \bool_new:N \g__fontspec_euenc_bool \bool_new:N \l__fontspec_disable_defaults_bool \bool_new:N \l__fontspec_alias_bool \bool_new:N \l__fontspec_external_bool \bool_new:N \l__fontspec_never_check_bool \bool_new:N \l__fontspec_defining_encoding_bool \bool_new:N \l__fontspec_script_exist_bool \bool_new:N \g__fontspec_em_normalise_slant_bool \int_new:N \l__fontspec_script_int \int_new:N \l__fontspec_language_int \int_new:N \l__fontspec_strnum_int \int_new:N \l__fontspec_tmp_int \int_new:N \l__fontspec_em_int \int_new:N \l__fontspec_emdef_int \int_new:N \l__fontspec_strong_int \int_new:N \l__fontspec_strongdef_int \fp_new:N \l__fontspec_tmpa_fp \fp_new:N \l__fontspec_tmpb_fp \dim_new:N \l__fontspec_tmpa_dim \dim_new:N \l__fontspec_tmpb_dim \dim_new:N \l__fontspec_tmpc_dim \seq_new:N \g__fontspec_bf_series_seq \clist_new:N \g__fontspec_default_fontopts_clist \clist_new:N \g__fontspec_all_keyval_modules_clist \clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}} \prop_new:N \g__fontspec_fontopts_prop \prop_new:N \l__fontspec_nfss_prop \prop_new:N \l__fontspec_nfssfont_prop \prop_new:N \g__fontspec_OT_features_prop \prop_new:N \g__fontspec_all_opentype_feature_names_prop \prop_new:N \g__fontspec_em_prop \tl_new:N \g__fontspec_mathrm_tl \tl_new:N \g__fontspec_bfmathrm_tl \tl_new:N \g__fontspec_mathsf_tl \tl_new:N \g__fontspec_mathtt_tl \tl_new:N \l__fontspec_family_label_tl \tl_new:N \l__fontspec_fake_slant_tl \tl_new:N \l__fontspec_fake_embolden_tl \tl_new:N \l__fontspec_fontname_up_tl \tl_new:N \l__fontspec_fontname_bf_tl \tl_new:N \l__fontspec_fontname_it_tl \tl_new:N \l__fontspec_fontname_bfit_tl \tl_new:N \l__fontspec_fontname_sl_tl \tl_new:N \l__fontspec_fontname_bfsl_tl \tl_new:N \l__fontspec_fontname_sc_tl \tl_new:N \l__fontspec_fontfeat_up_clist \tl_new:N \l__fontspec_fontfeat_bf_clist \tl_new:N \l__fontspec_fontfeat_it_clist \tl_new:N \l__fontspec_fontfeat_bfit_clist \tl_new:N \l__fontspec_fontfeat_sl_clist \tl_new:N \l__fontspec_fontfeat_bfsl_clist \tl_new:N \l__fontspec_fontfeat_sc_clist \tl_new:N \l__fontspec_script_name_tl \tl_new:N \l_fontspec_script_tl \tl_new:N \l__fontspec_lang_name_tl \tl_new:N \l_fontspec_lang_tl \tl_new:N \l__fontspec_mapping_tl \tl_new:N \g__fontspec_hexcol_tl \tl_new:N \g__fontspec_opacity_tl \tl_set:Nn \g__fontspec_hexcol_tl {000000} \tl_set:Nn \g__fontspec_opacity_tl {FF~} \tl_set:Nn \g__fontspec_postadjust_tl { \l__fontspec_wordspace_adjust_tl \l__fontspec_punctspace_adjust_tl } \cs_new:Nn \__fontspec_keys_set_known:nnN { \keys_set_known:nnN {#1} {#2} #3 } \cs_generate_variant:Nn \__fontspec_keys_set_known:nnN {nx} \cs_set:Npn \__fontspec_head_ii:n #1 { \__fontspec_head_ii:w #1 *** \q_stop} \cs_set:Npn \__fontspec_head_ii:w #1#2#3 \q_stop { #1#2 } \cs_generate_variant:Nn \__fontspec_head_ii:n {o} \cs_new:Nn \__fontspec_int_mult_truncate:Nn { \int_set:Nn #1 { \__dim_eval:w #2 #1 \__dim_eval_end: } } \cs_generate_variant:Nn \int_set:Nn {Nv} \cs_generate_variant:Nn \keys_set:nn {nx} \cs_generate_variant:Nn \keys_set_known:nnN {nx} \cs_generate_variant:Nn \prop_put:Nnn {Nxx} \cs_generate_variant:Nn \prop_put:Nnn {NxV} \cs_generate_variant:Nn \prop_gput_if_new:Nnn {NxV} \cs_generate_variant:Nn \prop_gput:Nnn {Nxn} \cs_generate_variant:Nn \prop_get:NnNT {NxN} \cs_generate_variant:Nn \prop_get:NnNTF {NxN} \cs_generate_variant:Nn \str_if_eq:nnTF {nv} \cs_generate_variant:Nn \tl_if_empty:nTF {x} \cs_generate_variant:Nn \tl_if_empty:nF {x} \cs_generate_variant:Nn \tl_if_empty:nF {f} \cs_generate_variant:Nn \tl_if_eq:nnT {ox} \cs_generate_variant:Nn \tl_replace_all:Nnn {Nnx} \cs_new:Npn \__fontspec_error:n { \msg_error:nn {fontspec} } \cs_new:Npn \__fontspec_error:nn { \msg_error:nnn {fontspec} } \cs_new:Npn \__fontspec_error:nx { \msg_error:nnx {fontspec} } \cs_new:Npn \__fontspec_warning:n { \msg_warning:nn {fontspec} } \cs_new:Npn \__fontspec_warning:nx { \msg_warning:nnx {fontspec} } \cs_new:Npn \__fontspec_warning:nxx { \msg_warning:nnxx {fontspec} } \cs_new:Npn \__fontspec_info:n { \msg_info:nn {fontspec} } \cs_new:Npn \__fontspec_info:nx { \msg_info:nnx {fontspec} } \cs_new:Npn \__fontspec_info:nxx { \msg_info:nnxx {fontspec} } \cs_new:Npn \__fontspec_trace:n { \msg_trace:nn {fontspec} } \cs_generate_variant:Nn \msg_new:nnn {nnx} \cs_generate_variant:Nn \msg_new:nnnn {nnxx} \cs_new:Nn \__fontspec_msg_new:nnn { \msg_new:nnx {#1} {#2} { \tl_trim_spaces:n {#3} } } \cs_new:Nn \__fontspec_msg_new:nnnn { \msg_new:nnxx {#1} {#2} { \tl_trim_spaces:n {#3} } { \tl_trim_spaces:n {#4} } } \char_set_catcode_space:n {32} \__fontspec_msg_new:nnn {fontspec} {only-inside-encdef} { \exp_not:N#1can only be used in the second argument to \string\DeclareUnicodeEncoding. } \__fontspec_msg_new:nnn {fontspec} {only-import-tu} { The "\string\ImportEncoding" command can only take "TU" as an argument at this stage. } \__fontspec_msg_new:nnn {fontspec} {no-size-info} { Size information must be supplied.\\ For example, SizeFeatures={Size={8-12},...}. } \__fontspec_msg_new:nnnn {fontspec} {font-not-found} { The font "#1" cannot be found. } { A font might not be found for many reasons.\\ Check the spelling, where the font is installed etc. etc.\\\\ When in doubt, ask someone for help! } \__fontspec_msg_new:nnnn {fontspec} {rename-feature-not-exist} { The feature #1 doesn't appear to be defined. } { It looks like you're trying to rename a feature that doesn't exist. } \__fontspec_msg_new:nnn {fontspec} {no-glyph} { '\l_fontspec_fontname_tl' does not contain glyph #1. } \__fontspec_msg_new:nnnn {fontspec} {euler-too-late} { The euler package must be loaded BEFORE fontspec. } { fontspec only overwrites euler's attempt to define the maths text fonts if fontspec is loaded after euler. Type to proceed with incorrect \string\mathit, \string\mathbf, etc. } \__fontspec_msg_new:nnnn {fontspec} {no-xcolor} { Cannot load named colours without the xcolor package. } { Sorry, I can't do anything to help. Instead of loading the color package, use xcolor instead. } \__fontspec_msg_new:nnnn {fontspec} {unknown-color-model} { Error loading colour `#1'; unknown colour model. } { Sorry, I can't do anything to help. Please report this error to my developer with a minimal example that causes the problem. } \__fontspec_msg_new:nnnn {fontspec} {not-in-addfontfeatures} { The "#1" font feature cannot be used in \string\addfontfeatures. } { This is due to how TeX loads fonts; such settings are global so adding them mid-document within a group causes confusion. You'll need to define multiple font families to achieve what you want. } \__fontspec_msg_new:nnn {fontspec} {tu-clash} { I have found the tuenc.def encoding definition file but the TU encoding is not defined by the LaTeX2e kernel; attempting to correct but you really should update to the latest version of LaTeX2e. } \__fontspec_msg_new:nnn {fontspec} {tu-missing} { The TU encoding seems to be missing; please update to the latest version of LaTeX2e. } \__fontspec_msg_new:nnn {fontspec} {addfontfeatures-ignored} { \string\addfontfeature (s) ignored \msg_line_context:; it cannot be used with a font that wasn't selected by a fontspec command.\\ \\ The current font is "\use:c{font@name}".\\ \int_compare:nTF { \clist_count:n {#1} = 1 } { The requested feature is "#1". } { The requested features are "#1". } } \__fontspec_msg_new:nnn {fontspec} {feature-option-overwrite} { Option '#2' of font feature '#1' overwritten. } \__fontspec_msg_new:nnn {fontspec} {script-not-exist-latn} { Font '\l_fontspec_fontname_tl' does not contain script '#1'.\\ 'Latin' script used instead. } \__fontspec_msg_new:nnn {fontspec} {script-not-exist} { Font '\l_fontspec_fontname_tl' does not contain script '#1'. } \__fontspec_msg_new:nnn {fontspec} {aat-feature-not-exist} { '\l_keys_key_tl=\l_keys_value_tl' feature not supported for AAT font '\l_fontspec_fontname_tl'. } \__fontspec_msg_new:nnn {fontspec} {aat-feature-not-exist-in-font} { AAT feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available in font '\l_fontspec_fontname_tl'. } \__fontspec_msg_new:nnn {fontspec} {icu-feature-not-exist} { '\l_keys_key_tl=\l_keys_value_tl' feature not supported for OpenType font '\l_fontspec_fontname_tl' } \__fontspec_msg_new:nnn {fontspec} {icu-feature-not-exist-in-font} { OpenType feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available for font '\l_fontspec_fontname_tl' with script '\l__fontspec_script_name_tl' and language '\l__fontspec_lang_name_tl'. } \__fontspec_msg_new:nnn {fontspec} {no-opticals} { '\l_fontspec_fontname_tl' doesn't appear to have an Optical Size axis. } \__fontspec_msg_new:nnn {fontspec} {language-not-exist} { Language '#1' not available for font '\l_fontspec_fontname_tl' with script '\l__fontspec_script_name_tl'.\\ 'Default' language used instead. } \__fontspec_msg_new:nnn {fontspec} {only-xetex-feature} { Ignored XeTeX only feature: '#1'. } \__fontspec_msg_new:nnn {fontspec} {only-luatex-feature} { Ignored LuaTeX only feature: '#1'. } \__fontspec_msg_new:nnn {fontspec} {no-mapping} { Input mapping not (yet?) supported in LuaTeX. } \__fontspec_msg_new:nnn {fontspec} {no-mapping-ligtex} { Input mapping not (yet?) supported in LuaTeX.\\ Use "Ligatures=TeX" instead of "Mapping=tex-text". } \__fontspec_msg_new:nnn {fontspec} {cm-default-obsolete} { The "cm-default" package option is obsolete. } \__fontspec_msg_new:nnn {fontspec} {fakebold-only-xetex} { The "FakeBold" and "AutoFakeBold" options are only available with XeLaTeX.\\ Option ignored. } \__fontspec_msg_new:nnn {fontspec} {font-index-needs-ttc} { The "FontIndex" feature is only supported by TTC (TrueType Collection) fonts.\\ Feature ignored. } \__fontspec_msg_new:nnn {fontspec} {feat-cannot-remove} { The "#1" feature cannot be deactivated. Request ignored. } \__fontspec_msg_new:nnn {fontspec} {defining-font} { Font family '\l_fontspec_family_tl' created for font '#2' with options [\l__fontspec_all_features_clist].\\ \\ This font family consists of the following NFSS series/shapes:\\ \l_fontspec_defined_shapes_tl } \__fontspec_msg_new:nnn {fontspec} {no-font-shape} { Could not resolve font "#1" (it probably doesn't exist). } \__fontspec_msg_new:nnn {fontspec} {set-scale} { \l_fontspec_fontname_tl\space scale = \l__fontspec_scale_tl. } \__fontspec_msg_new:nnn {fontspec} {setup-math} { Adjusting the maths setup (use [no-math] to avoid this). } \__fontspec_msg_new:nnn {fontspec} {no-scripts} { Font "\l_fontspec_fontname_tl" does not contain any OpenType `Script' information. } \__fontspec_msg_new:nnn {fontspec} {opa-twice} { Opacity set twice, in both Colour and Opacity.\\ Using specification "Opacity=#1". } \__fontspec_msg_new:nnn {fontspec} {opa-twice-col} { Opacity set twice, in both Opacity and Colour.\\ Using an opacity specification in hex of "#1/FF". } \__fontspec_msg_new:nnn {fontspec} {bad-colour} { Bad colour declaration "#1". Colour must be one of:\\ * a named xcolor colour\\ * a six-digit hex colour RRGGBB\\ * an eight-digit hex colour RRGGBBTT with opacity } \char_set_catcode_ignore:n {32} \DeclareOption{cm-default} { \__fontspec_warning:n {cm-default-obsolete} } \DeclareOption{math}{\bool_set_true:N \g__fontspec_math_bool} \DeclareOption{no-math}{\bool_set_false:N \g__fontspec_math_bool} \DeclareOption{config}{\bool_set_true:N \g__fontspec_cfg_bool} \DeclareOption{no-config}{\bool_set_false:N \g__fontspec_cfg_bool} \DeclareOption{euenc}{\bool_set_true:N \g__fontspec_euenc_bool} \DeclareOption{tuenc}{\bool_set_false:N \g__fontspec_euenc_bool} \DeclareOption{quiet} { \msg_redirect_module:nnn { fontspec } { warning } { info } \msg_redirect_module:nnn { fontspec } { info } { none } } \DeclareOption{silent} { \msg_redirect_module:nnn { fontspec } { warning } { none } \msg_redirect_module:nnn { fontspec } { info } { none } } \ExecuteOptions{config,math,tuenc} \ProcessOptions* \bool_if:NF \g__fontspec_euenc_bool { \file_if_exist:nTF {tuenc.def} { \cs_if_exist:cF {T@TU} { \__fontspec_warning:n {tu-clash} \DeclareFontEncoding{TU}{}{} \DeclareFontSubstitution{TU}{lmr}{m}{n} } } { \__fontspec_warning:n {tu-missing} \bool_set_true:N \g__fontspec_euenc_bool } } \bool_if:NTF \g__fontspec_euenc_bool { \tl_set:Nn \g_fontspec_encoding_tl {EU1} } { \tl_set:Nn \g_fontspec_encoding_tl { TU } } \tl_set:Nn \rmdefault {lmr} \tl_set:Nn \sfdefault {lmss} \tl_set:Nn \ttdefault {lmtt} \RequirePackage[\g_fontspec_encoding_tl]{fontenc} \tl_set_eq:NN \UTFencname \g_fontspec_encoding_tl % for xunicode if needed \tl_if_in:NnT \@filelist {.cls} { \normalsize } \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl \AtBeginDocument { \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl } \bool_if:NT \g__fontspec_euenc_bool { \RequirePackage{xunicode} } \cs_set:Npn \__fontspec_primitive_font_set:Nnn #1#2#3 { \font #1 = #2 ~at~ #3 \scan_stop: } \cs_set:Npn \__fontspec_primitive_font_gset:Nnn #1#2#3 { \global \font #1 = #2 ~at~ #3 \scan_stop: } \cs_set:Npn \__fontspec_font_suppress_not_found_error: { \int_set_eq:NN \xetex_suppressfontnotfounderror:D \c_one } \prg_set_conditional:Nnn \__fontspec_primitive_font_if_null:N {p,TF,T,F} { \ifx #1 \nullfont \prg_return_true: \else \prg_return_false: \fi } \prg_set_conditional:Nnn \__fontspec_primitive_font_if_exist:n {TF,T,F} { \group_begin: \__fontspec_font_suppress_not_found_error: \__fontspec_primitive_font_set:Nnn \l__fontspec_primitive_font {#1} {10pt} \__fontspec_primitive_font_if_null:NTF \l__fontspec_primitive_font { \group_end: \prg_return_false: } { \group_end: \prg_return_true: } } \prg_new_conditional:Nnn \__fontspec_primitive_font_glyph_if_exist:Nn {p,TF,T,F} { \etex_iffontchar:D #1 #2 \scan_stop: \prg_return_true: \else: \prg_return_false: \fi: } \NewDocumentCommand \fontspec { O{} m O{} } { \__fontspec_main_fontspec:nnn {#1} {#2} {#3} } \cs_set:Nn \__fontspec_main_fontspec:nnn { \fontspec_set_family:Nnn \f@family {#1,#3} {#2} \fontencoding { \l__fontspec_nfss_enc_tl } \selectfont \ignorespaces } \DeclareDocumentCommand \setmainfont { O{} m O{} } { \__fontspec_main_setmainfont:nnn {#1} {#2} {#3} } \cs_set:Nn \__fontspec_main_setmainfont:nnn { \fontspec_set_family:Nnn \g__fontspec_rmfamily_family {#1,#3} {#2} \tl_set_eq:NN \rmdefault \g__fontspec_rmfamily_family \use:x { \exp_not:n { \DeclareRobustCommand \rmfamily } { \exp_not:N \fontencoding { \l__fontspec_nfss_enc_tl } \exp_not:N \fontfamily { \g__fontspec_rmfamily_family } \exp_not:N \selectfont } } \str_if_eq_x:nnT {\familydefault} {\rmdefault} { \tl_set_eq:NN \encodingdefault \l__fontspec_nfss_enc_tl } \normalfont \ignorespaces } \DeclareDocumentCommand \setsansfont { O{} m O{} } { \__fontspec_main_setsansfont:nnn {#1} {#2} {#3} } \cs_set:Nn \__fontspec_main_setsansfont:nnn { \fontspec_set_family:Nnn \g__fontspec_sffamily_family {#1,#3} {#2} \tl_set_eq:NN \sfdefault \g__fontspec_sffamily_family \use:x { \exp_not:n { \DeclareRobustCommand \sffamily } { \exp_not:N \fontencoding { \l__fontspec_nfss_enc_tl } \exp_not:N \fontfamily { \g__fontspec_sffamily_family } \exp_not:N \selectfont } } \str_if_eq_x:nnT {\familydefault} {\sfdefault} { \tl_set_eq:NN \encodingdefault \l__fontspec_nfss_enc_tl } \normalfont \ignorespaces } \DeclareDocumentCommand \setmonofont { O{} m O{} } { \__fontspec_main_setmonofont:nnn {#1} {#2} {#3} } \cs_set:Nn \__fontspec_main_setmonofont:nnn { \fontspec_set_family:Nnn \g__fontspec_ttfamily_family {#1,#3} {#2} \tl_set_eq:NN \ttdefault \g__fontspec_ttfamily_family \use:x { \exp_not:n { \DeclareRobustCommand \ttfamily } { \exp_not:N \fontencoding { \l__fontspec_nfss_enc_tl } \exp_not:N \fontfamily { \g__fontspec_ttfamily_family } \exp_not:N \selectfont } } \str_if_eq_x:nnT {\familydefault} {\ttdefault} { \tl_set_eq:NN \encodingdefault \l__fontspec_nfss_enc_tl } \normalfont \ignorespaces } \DeclareDocumentCommand \setromanfont { O{} m O{} } { \__fontspec_main_setmainfont:nnn {#1} {#2} {#3} } \DeclareDocumentCommand \setmathrm { O{} m O{} } { \__fontspec_main_setmathrm:nnn {#1} {#2} {#3} } \cs_set:Nn \__fontspec_main_setmathrm:nnn { \fontspec_set_family:Nnn \g__fontspec_mathrm_tl {#1} {#2} } \DeclareDocumentCommand \setboldmathrm { O{} m O{} } { \__fontspec_main_setboldmathrm:nnn {#1} {#2} {#3} } \cs_set:Nn \__fontspec_main_setboldmathrm:nnn { \fontspec_set_family:Nnn \g__fontspec_bfmathrm_tl {#1} {#2} } \DeclareDocumentCommand \setmathsf { O{} m O{} } { \__fontspec_main_setmathsf:nnn {#1} {#2} {#3} } \cs_set:Nn \__fontspec_main_setmathsf:nnn { \fontspec_set_family:Nnn \g__fontspec_mathsf_tl {#1} {#2} } \DeclareDocumentCommand \setmathtt { O{} m O{} } { \__fontspec_main_setmathtt:nnn {#1} {#2} {#3} } \cs_set:Nn \__fontspec_main_setmathtt:nnn { \fontspec_set_family:Nnn \g__fontspec_mathtt_tl {#1} {#2} } \@onlypreamble\setmathrm \@onlypreamble\setboldmathrm \@onlypreamble\setmathsf \@onlypreamble\setmathtt \tl_set:Nn \g__fontspec_mathrm_tl {\rmdefault} \tl_set:Nn \g__fontspec_mathsf_tl {\sfdefault} \tl_set:Nn \g__fontspec_mathtt_tl {\ttdefault} \DeclareDocumentCommand \newfontfamily { m O{} m O{} } { \__fontspec_main_newfontfamily:nnnn {#1} {#2} {#3} {#4} } \cs_set:Nn \__fontspec_main_newfontfamily:nnnn { \fontspec_set_family:cnn { g__fontspec_ \cs_to_str:N #1 _family } {#2,#4} {#3} \use:x { \exp_not:N \DeclareRobustCommand \exp_not:N #1 { \exp_not:N \fontfamily { \use:c {g__fontspec_ \cs_to_str:N #1 _family} } \exp_not:N \fontencoding { \l__fontspec_nfss_enc_tl } \exp_not:N \selectfont } } } \DeclareDocumentCommand \newfontface { m O{} m O{} } { \__fontspec_main_newfontface:nnnn {#1} {#2} {#3} {#4} } \cs_set:Nn \__fontspec_main_newfontface:nnnn { \newfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} } \DeclareDocumentCommand \defaultfontfeatures { t+ o m } { \IfNoValueTF {#2} { \__fontspec_set_default_features:nn {#1} {#3} } { \__fontspec_set_font_default_features:nnn {#1} {#2} {#3} } \ignorespaces } \cs_new:Nn \__fontspec_set_default_features:nn { \IfBooleanTF {#1} \clist_put_right:Nn \clist_set:Nn \g__fontspec_default_fontopts_clist {#2} } \cs_new:Nn \__fontspec_set_font_default_features:nnn { \clist_map_inline:nn {#2} { \tl_if_single:nTF {##1} { \tl_set:No \l__fontspec_tmp_tl { \cs:w g__fontspec_ \cs_to_str:N ##1 _family\cs_end: } } { \__fontspec_sanitise_fontname:Nn \l__fontspec_tmp_tl {##1} } \IfBooleanTF {#1} { \prop_get:NVNF \g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_tmpb_tl { \tl_clear:N \l__fontspec_tmpb_tl } \tl_put_right:Nn \l__fontspec_tmpb_tl {#3,} \prop_gput:NVV \g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_tmpb_tl } { \tl_if_empty:nTF {#3} { \prop_gremove:NV \g__fontspec_fontopts_prop \l__fontspec_tmp_tl } { \prop_put:NVn \g__fontspec_fontopts_prop \l__fontspec_tmp_tl {#3,} } } } } \DeclareDocumentCommand \addfontfeatures {m} { \__fontspec_main_addfontfeatures:n {#1} } \cs_set:Nn \__fontspec_main_addfontfeatures:n { \fontspec_if_fontspec_font:TF { \group_begin: \keys_set_known:nnN {fontspec-addfeatures} {#1} \l__fontspec_tmp_tl \prop_get:cnN {g__fontspec_ \f@family _prop} {options} \l__fontspec_options_tl \prop_get:cnN {g__fontspec_ \f@family _prop} {fontname} \l__fontspec_fontname_tl \bool_set_true:N \l__fontspec_disable_defaults_bool \use:x { \__fontspec_select_font_family:nn { \l__fontspec_options_tl , #1 } {\l__fontspec_fontname_tl} } \group_end: \fontfamily\l_fontspec_family_tl\selectfont } { \__fontspec_warning:nx {addfontfeatures-ignored} {#1} } \ignorespaces } \cs_set_eq:NN \addfontfeature \addfontfeatures \DeclareDocumentCommand \newfontfeature {mm} { \__fontspec_main_newfontfeature:nn {#1} {#2} } \cs_set:Nn \__fontspec_main_newfontfeature:nn { \keys_define:nn { fontspec } { #1 .code:n = { \__fontspec_update_featstr:n {#2} } } } \DeclareDocumentCommand \newAATfeature {mmmm} { \__fontspec_main_newAATfeature:nnnn {#1} {#2} {#3} {#4} } \cs_set:Nn \__fontspec_main_newAATfeature:nnnn { \keys_if_exist:nnF { fontspec } {#1} { \__fontspec_define_aat_feature_group:n {#1} } \keys_if_choice_exist:nnnT {fontspec} {#1} {#2} { \__fontspec_warning:nxx {feature-option-overwrite} {#1} {#2} } \__fontspec_define_aat_feature:nnnn {#1}{#2}{#3}{#4} } \DeclareDocumentCommand \newopentypefeature {mmm} { \__fontspec_main_newopentypefeature:nnn {#1} {#2} {#3} } \cs_set:Nn \__fontspec_main_newopentypefeature:nnn { \keys_if_exist:nnF { fontspec / options } {#1} { \__fontspec_define_opentype_feature_group:n {#1} } \keys_if_choice_exist:nnnT {fontspec} {#1} {#2} { \__fontspec_warning:nxx {feature-option-overwrite} {#1} {#2} } \exp_args:Nnnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} { \__fontspec_strip_plus_minus:n {#3} } {#3} {} } \cs_new:Nn \__fontspec_strip_plus_minus:n { \__fontspec_strip_plus_minus_aux:Nq #1 \q_nil } \cs_new:Npn \__fontspec_strip_plus_minus_aux:Nq #1#2 \q_nil { \str_case:nnF {#1} { {+} {#2} {-} {#2} } {#1#2} } \DeclareDocumentCommand \newICUfeature {mmm} { \__fontspec_main_newopentypefeature:nnn {#1} {#2} {#3} } \DeclareDocumentCommand \aliasfontfeature {mm} { \__fontspec_main_aliasfontfeature:nn {#1} {#2} } \cs_set:Nn \__fontspec_main_aliasfontfeature:nn { \bool_set_false:N \l__fontspec_alias_bool \clist_map_inline:Nn \g__fontspec_all_keyval_modules_clist { \keys_if_exist:nnT {##1} {#1} { \bool_set_true:N \l__fontspec_alias_bool \keys_define:nn {##1} { #2 .code:n = { \keys_set:nn {##1} { #1 = {####1} } } } } } \bool_if:NF \l__fontspec_alias_bool { \__fontspec_warning:nx {rename-feature-not-exist} {#1} } } \DeclareDocumentCommand \aliasfontfeatureoption {mmm} { \__fontspec_main_aliasfontfeatureoption:nnn {#1} {#2} {#3} } \cs_set:Nn \__fontspec_main_aliasfontfeatureoption:nnn { \bool_set_false:N \l__fontspec_alias_bool \clist_map_inline:Nn \g__fontspec_all_keyval_modules_clist { \keys_if_exist:nnT { ##1 / #1 } {#2} { \bool_set_true:N \l__fontspec_alias_bool \keys_define:nn { ##1 / #1 } { #3 .code:n = { \keys_set:nn {##1} { #1 = {#2} } } } } \keys_if_exist:nnT { ##1 / #1 } {#2Reset} { \keys_define:nn { ##1 / #1 } { #3Reset .code:n = { \keys_set:nn {##1} { #1 = {#2Reset} } } } } \keys_if_exist:nnT { ##1 / #1 } {#2Off} { \keys_define:nn { ##1 / #1 } { #3Off .code:n = { \keys_set:nn {##1} { #1 = {#2Off} } } } } } \bool_if:NF \l__fontspec_alias_bool { \__fontspec_warning:nx {rename-feature-not-exist} {#1/#2} } } \DeclareDocumentCommand \newfontscript {mm} { \fontspec_new_script:nn {#1} {#2} } \DeclareDocumentCommand \newfontlanguage {mm} { \fontspec_new_lang:nn {#1} {#2} } \DeclareDocumentCommand \DeclareFontsExtensions {m} { \__fontspec_main_DeclareFontsExtensions:n {#1} } \cs_set:Nn \__fontspec_main_DeclareFontsExtensions:n { \clist_set:Nn \l__fontspec_extensions_clist { #1 } \tl_remove_all:Nn \l__fontspec_extensions_clist {~} } \DeclareFontsExtensions{.otf,.ttf,.OTF,.TTF,.ttc,.TTC,.dfont} \DeclareDocumentCommand \IfFontFeatureActiveTF {mmm} { \__fontspec_main_IfFontFeatureActiveTF:nnn {#1} {#2} {#3} } \cs_set:Nn \__fontspec_main_IfFontFeatureActiveTF:nnn { \__fontspec_if_font_feature:nTF {#1} {#2} {#3} } \prg_new_conditional:Nnn \__fontspec_if_font_feature:n {TF} { \tl_gclear:N \g__fontspec_single_feat_tl \group_begin: \__fontspec_font_suppress_not_found_error: \__fontspec_init: \bool_set_true:N \l__fontspec_ot_bool \bool_set_true:N \l__fontspec_never_check_bool \bool_set_false:N \l__fontspec_firsttime_bool \clist_clear:N \l__fontspec_fontfeat_clist \__fontspec_get_features:Nn \l__fontspec_rawfeatures_sclist {#1} \group_end: \tl_if_empty:NTF \g__fontspec_single_feat_tl { \prg_return_false: } { \exp_args:NV \fontspec_if_current_feature:nTF \g__fontspec_single_feat_tl { \prg_return_true: } { \prg_return_false: } } } \prg_new_conditional:Nnn \fontspec_if_fontspec_font: {TF,T,F} { \cs_if_exist:cTF {g__fontspec_ \f@family _prop} \prg_return_true: \prg_return_false: } \prg_new_conditional:Nnn \fontspec_if_aat_feature:nn {TF,T,F} { \fontspec_if_fontspec_font:TF { \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt} \bool_if:NTF \l__fontspec_atsui_bool { \__fontspec_make_AAT_feature_string:nnTF {#1}{#2} \prg_return_true: \prg_return_false: } { \prg_return_false: } } { \prg_return_false: } } \prg_new_conditional:Nnn \fontspec_if_opentype: {TF,T,F} { \fontspec_if_fontspec_font:TF { \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt} \__fontspec_set_font_type: \bool_if:NTF \l__fontspec_ot_bool \prg_return_true: \prg_return_false: } { \prg_return_false: } } \prg_new_conditional:Nnn \fontspec_if_feature:n {TF,T,F} { \fontspec_if_fontspec_font:TF { \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt} \__fontspec_set_font_type: \bool_if:NTF \l__fontspec_ot_bool { \prop_get:cnN {g__fontspec_ \f@family _prop} {script-num} \l__fontspec_tmp_tl \int_set:Nn \l__fontspec_script_int {\l__fontspec_tmp_tl} \prop_get:cnN {g__fontspec_ \f@family _prop} {lang-num} \l__fontspec_tmp_tl \int_set:Nn \l__fontspec_language_int {\l__fontspec_tmp_tl} \prop_get:cnN {g__fontspec_ \f@family _prop} {script-tag} \l_fontspec_script_tl \prop_get:cnN {g__fontspec_ \f@family _prop} {lang-tag} \l_fontspec_lang_tl \__fontspec_check_ot_feat:nTF {#1} {\prg_return_true:} {\prg_return_false:} } { \prg_return_false: } } { \prg_return_false: } } \prg_new_conditional:Nnn \fontspec_if_feature:nnn {TF,T,F} { \fontspec_if_fontspec_font:TF { \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt} \__fontspec_set_font_type: \bool_if:NTF \l__fontspec_ot_bool { \__fontspec_iv_str_to_num:Nn \l__fontspec_script_int {#1} \__fontspec_iv_str_to_num:Nn \l__fontspec_language_int {#2} \__fontspec_check_ot_feat:nTF {#3} \prg_return_true: \prg_return_false: } { \prg_return_false: } } { \prg_return_false: } } \prg_new_conditional:Nnn \fontspec_if_script:n {TF,T,F} { \fontspec_if_fontspec_font:TF { \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt} \__fontspec_set_font_type: \bool_if:NTF \l__fontspec_ot_bool { \__fontspec_check_script:nTF {#1} \prg_return_true: \prg_return_false: } { \prg_return_false: } } { \prg_return_false: } } \prg_new_conditional:Nnn \fontspec_if_language:n {TF,T,F} { \fontspec_if_fontspec_font:TF { \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt} \__fontspec_set_font_type: \bool_if:NTF \l__fontspec_ot_bool { \prop_get:cnN {g__fontspec_ \f@family _prop} {script-num} \l__fontspec_tmp_tl \int_set:Nn \l__fontspec_script_int {\l__fontspec_tmp_tl} \prop_get:cnN {g__fontspec_ \f@family _prop} {script-tag} \l_fontspec_script_tl \__fontspec_check_lang:nTF {#1} \prg_return_true: \prg_return_false: } { \prg_return_false: } } { \prg_return_false: } } \prg_new_conditional:Nnn \fontspec_if_language:nn {TF,T,F} { \fontspec_if_fontspec_font:TF { \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt} \__fontspec_set_font_type: \bool_if:NTF \l__fontspec_ot_bool { \tl_set:Nn \l_fontspec_script_tl {#1} \__fontspec_iv_str_to_num:Nn \l__fontspec_script_int {#1} \__fontspec_check_lang:nTF {#2} \prg_return_true: \prg_return_false: } { \prg_return_false: } } { \prg_return_false: } } \prg_new_conditional:Nnn \fontspec_if_current_script:n {TF,T,F} { \fontspec_if_fontspec_font:TF { \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt} \__fontspec_set_font_type: \bool_if:NTF \l__fontspec_ot_bool { \prop_get:cnN {g__fontspec_ \f@family _prop} {script-tag} \l__fontspec_tmp_tl \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl {\prg_return_true:} {\prg_return_false:} } { \prg_return_false: } } { \prg_return_false: } } \prg_new_conditional:Nnn \fontspec_if_current_language:n {TF,T,F} { \fontspec_if_fontspec_font:TF { \prop_get:cnN {g__fontspec_ \f@family _prop} {fontdef} \l__fontspec_fontdef_tl \__fontspec_primitive_font_set:Nnn \l_fontspec_font {\l__fontspec_fontdef_tl} {\f@size pt} \__fontspec_set_font_type: \bool_if:NTF \l__fontspec_ot_bool { \prop_get:cnN {g__fontspec_ \f@family _prop} {lang-tag} \l__fontspec_tmp_tl \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl {\prg_return_true:} {\prg_return_false:} } { \prg_return_false: } } { \prg_return_false: } } \cs_new:Nn \fontspec_set_family:Nnn { \tl_set:Nn \l__fontspec_family_label_tl { #1 } \__fontspec_select_font_family:nn {#2}{#3} \tl_set_eq:NN #1 \l_fontspec_family_tl } \cs_generate_variant:Nn \fontspec_set_family:Nnn {c} \cs_new:Nn \fontspec_set_fontface:NNnn { \tl_set:Nn \l__fontspec_family_label_tl { #1 } \__fontspec_select_font_family:nn {#3}{#4} \tl_set_eq:NN #1 \l_fontspec_font \tl_set_eq:NN #2 \l_fontspec_family_tl } \prg_new_conditional:Nnn \fontspec_font_if_exist:n {TF,T,F} { \group_begin: \__fontspec_init: \__fontspec_if_detect_external:nT {#1} { \__fontspec_font_is_file: } \__fontspec_primitive_font_if_exist:nTF { \__fontspec_construct_font_call:nn {#1} {} } { \group_end: \prg_return_true: } { \group_end: \prg_return_false: } } \cs_set_eq:NN \IfFontExistsTF \fontspec_font_if_exist:nTF \prg_new_conditional:Nnn \fontspec_if_current_feature:n {TF,T,F} { \exp_args:Nxx \tl_if_in:nnTF { \fontname\font } { \tl_to_str:n {#1} } { \prg_return_true: } { \prg_return_false: } } \prg_new_conditional:Nnn \fontspec_if_small_caps: {TF,T,F} { \__fontspec_if_merge_shape:nTF {sc} { \tl_set_eq:Nc \l__fontspec_smcp_shape_tl { \__fontspec_shape_merge:nn {\f@shape} {sc} } } { \tl_set:Nn \l__fontspec_smcp_shape_tl {sc} } \cs_if_exist:cTF { \f@encoding/\f@family/\f@series/\l__fontspec_smcp_shape_tl } { \tl_if_eq:ccTF { \f@encoding/\f@family/\f@series/\l__fontspec_smcp_shape_tl } { \f@encoding/\f@family/\f@series/\updefault } { \prg_return_false: } { \prg_return_true: } } { \prg_return_false: } } \cs_new_protected:Nn \__fontspec_select_font_family:nn { \group_begin: \__fontspec_font_suppress_not_found_error: \__fontspec_init: \__fontspec_sanitise_fontname:Nn \l_fontspec_fontname_tl {#2} \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_up_tl {#2} \__fontspec_sanitise_fontname:Nn \l__fontspec_basename_tl {#2} \__fontspec_if_detect_external:nT {#2} { \keys_set:nn {fontspec-preparse-external} {Path} } \keys_set_known:nn {fontspec-preparse-cfg} {#1} \__fontspec_init_ttc:n {#2} \__fontspec_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#2} \__fontspec_extract_all_features:n {#1} \tl_set:Nx \l__fontspec_fontid_tl { \tl_to_str:N \l_fontspec_fontname_tl-:-\tl_to_str:N \l__fontspec_all_features_clist } \__fontspec_preparse_features: \__fontspec_load_font: \__fontspec_set_scriptlang: \__fontspec_get_features:Nn \l__fontspec_rawfeatures_sclist {} \bool_set_false:N \l__fontspec_firsttime_bool \__fontspec_save_family_needed:nTF {#2} { \__fontspec_save_family:nn {#1} {#2} } { } \group_end: } \cs_set_eq:NN \fontspec_select:nn \__fontspec_select_font_family:nn \cs_new:Nn \__fontspec_sanitise_fontname:Nn { \tl_set:Nx #1 {#2} \clist_map_inline:Nn \l__fontspec_extensions_clist { \tl_if_in:NnT #1 {##1} { \tl_remove_once:Nn #1 {##1} \tl_set:Nn \l__fontspec_extension_tl {##1} \clist_map_break: } } } \prg_new_conditional:Nnn \__fontspec_if_detect_external:n {T} { \clist_map_inline:Nn \l__fontspec_extensions_clist { \bool_set_false:N \l__fontspec_tmpa_bool \exp_args:Nx % <- this should be handled earlier \tl_if_in:nnT {#1 <= end_of_string} {##1 <= end_of_string} { \bool_set_true:N \l__fontspec_tmpa_bool \clist_map_break: } } \bool_if:NTF \l__fontspec_tmpa_bool \prg_return_true: \prg_return_false: } \cs_new:Nn \__fontspec_init_ttc:n { \str_if_eq_x:nnT { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} { \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_it_tl {#1} \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bf_tl {#1} \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bfit_tl {#1} } } \cs_new:Nn \__fontspec_load_external_fontoptions:Nn { \bool_if:NT \l__fontspec_fontcfg_bool { \__fontspec_sanitise_fontname:Nn #1 {#2} \tl_set:Nx \l__fontspec_ext_filename_tl {#1.fontspec} \tl_remove_all:Nn \l__fontspec_ext_filename_tl {~} \prop_if_in:NVF \g__fontspec_fontopts_prop #1 { \exp_args:No \file_if_exist:nT { \l__fontspec_ext_filename_tl } { \file_input:n { \l__fontspec_ext_filename_tl } } } } } \cs_new:Nn \__fontspec_extract_all_features:n { \bool_if:NTF \l__fontspec_disable_defaults_bool { \clist_set:Nx \l__fontspec_all_features_clist {#1} } { \prop_get:NVNF \g__fontspec_fontopts_prop \l_fontspec_fontname_tl \l__fontspec_fontopts_clist { \clist_clear:N \l__fontspec_fontopts_clist } \prop_get:NVNF \g__fontspec_fontopts_prop \l__fontspec_family_label_tl \l__fontspec_family_fontopts_clist { \clist_clear:N \l__fontspec_family_fontopts_clist } \tl_clear:N \l__fontspec_family_label_tl \clist_set:Nx \l__fontspec_all_features_clist { \g__fontspec_default_fontopts_clist, \l__fontspec_family_fontopts_clist, \l__fontspec_fontopts_clist, #1 } } } \cs_new:Nn \__fontspec_preparse_features: { \__fontspec_keys_set_known:nxN {fontspec-preparse-external} { \l__fontspec_all_features_clist } \l__fontspec_keys_leftover_clist \tl_set_eq:NN \l_fontspec_fontname_tl \l__fontspec_fontname_up_tl \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_keys_leftover_clist} \l__fontspec_keys_leftover_clist \__fontspec_keys_set_known:nxN {fontspec-preparse} {\l__fontspec_keys_leftover_clist} \l__fontspec_fontfeat_clist } \cs_new:Nn \__fontspec_load_font: { \__fontspec_primitive_font_set:Nnn \l_fontspec_font { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f@size pt} \__fontspec_primitive_font_if_null:NT \l_fontspec_font { \__fontspec_error:nx {font-not-found} {\l__fontspec_fontname_up_tl} } \__fontspec_set_font_type: \__fontspec_primitive_font_gset:Nnn \l_fontspec_font { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} } {\f@size pt} \l_fontspec_font % this is necessary for LuaLaTeX to check the scripts properly } \cs_set:Nn \__fontspec_construct_font_call:nnnnnn { " \__fontspec_fontname_wrap:n { #1 #2 #3 } #4 #5 \str_if_eq_x:nnF {#6}{} {:#6} " } \cs_set:Nn \__fontspec_construct_font_call:nn { \__fontspec_construct_font_call:nnnnnn {#1} \l__fontspec_extension_tl \l__fontspec_ttc_index_tl \l_fontspec_renderer_tl \l__fontspec_optical_size_tl {#2} } \cs_new:Nn \__fontspec_font_is_name: { \cs_set_eq:NN \__fontspec_fontname_wrap:n \use:n } \cs_new:Nn \__fontspec_font_is_file: { \cs_set:Npn \__fontspec_fontname_wrap:n ##1 { [ \l__fontspec_font_path_tl ##1 ] } } \cs_new:Nn \__fontspec_set_scriptlang: { \bool_if:NT \l__fontspec_firsttime_bool { \tl_if_empty:NTF \l__fontspec_script_name_tl { \__fontspec_check_script:nTF {latn} { \tl_set:Nn \l__fontspec_script_name_tl {Latin} \tl_if_empty:NT \l__fontspec_lang_name_tl { \tl_set:Nn \l__fontspec_lang_name_tl {Default} } \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl} \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl} } { \__fontspec_info:n {no-scripts} } } { \tl_if_empty:NT \l__fontspec_lang_name_tl { \tl_set:Nn \l__fontspec_lang_name_tl {Default} } \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl} \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl} } } } \cs_set:Nn \__fontspec_get_features:Nn { \__fontspec_init_fontface: \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_fontfeat_clist,#2} \l__fontspec_keys_leftover_clist \__fontspec_keys_set_known:nxN {fontspec} {\l__fontspec_keys_leftover_clist} \l__fontspec_keys_leftover_clist \bool_if:NTF \l__fontspec_ot_bool { % \tracingall \keys_set:nV {fontspec-opentype} \l__fontspec_keys_leftover_clist % \EROROR } { \bool_if:NT \l__fontspec_atsui_bool { \keys_set:nV {fontspec-aat} \l__fontspec_keys_leftover_clist } } \tl_if_empty:NF \l__fontspec_mapping_tl { \__fontspec_update_featstr:n { mapping = \l__fontspec_mapping_tl } } \str_if_eq_x:nnF { \l__fontspec_hexcol_tl \l__fontspec_opacity_tl } { \g__fontspec_hexcol_tl \g__fontspec_opacity_tl } { \__fontspec_update_featstr:n { color = \l__fontspec_hexcol_tl\l__fontspec_opacity_tl } } \tl_set_eq:NN #1 \l__fontspec_rawfeatures_sclist } \prg_new_conditional:Nnn \__fontspec_save_family_needed:n {TF} { \cs_if_exist:NT \l__fontspec_nfss_fam_tl { \cs_set_eq:cN {g__fontspec_UID_\l__fontspec_fontid_tl} \l__fontspec_nfss_fam_tl } \cs_if_exist:cF {g__fontspec_UID_\l__fontspec_fontid_tl} { % The font name is fully expanded, in case it's defined in terms of macros, before having its spaces zapped: \tl_set:Nx \l__fontspec_tmp_tl {#1} \tl_remove_all:Nn \l__fontspec_tmp_tl {~} \cs_if_exist:cTF {g__fontspec_family_ \l__fontspec_tmp_tl _int} { \int_gincr:c {g__fontspec_family_ \l__fontspec_tmp_tl _int} } { \int_new:c {g__fontspec_family_ \l__fontspec_tmp_tl _int} } \tl_gset:cx {g__fontspec_UID_\l__fontspec_fontid_tl} { \l__fontspec_tmp_tl ( \int_use:c {g__fontspec_family_ \l__fontspec_tmp_tl _int} ) } } \tl_gset:Nv \l_fontspec_family_tl {g__fontspec_UID_\l__fontspec_fontid_tl} \cs_if_exist:cTF {g__fontspec_ \l_fontspec_family_tl _prop} \prg_return_false: \prg_return_true: } \cs_new:Nn \__fontspec_save_family:nn { \__fontspec_save_fontinfo:n {#2} \__fontspec_find_autofonts: \DeclareFontFamily{\l__fontspec_nfss_enc_tl}{\l_fontspec_family_tl}{} \__fontspec_set_faces: \__fontspec_info:nxx {defining-font} {#1} {#2} } \cs_new:Nn \__fontspec_save_fontinfo:n { \prop_new:c {g__fontspec_ \l_fontspec_family_tl _prop} \prop_gput:cnx {g__fontspec_ \l_fontspec_family_tl _prop} {fontname} { #1 } \prop_gput:cnx {g__fontspec_ \l_fontspec_family_tl _prop} {options} { \l__fontspec_all_features_clist } \prop_gput:cnx {g__fontspec_ \l_fontspec_family_tl _prop} {fontdef} { \__fontspec_construct_font_call:nn {\l_fontspec_fontname_tl} { \l__fontspec_pre_feat_sclist \l__fontspec_rawfeatures_sclist } } \prop_gput:cnV {g__fontspec_ \l_fontspec_family_tl _prop} {script-num} \l__fontspec_script_int \prop_gput:cnV {g__fontspec_ \l_fontspec_family_tl _prop} {lang-num} \l__fontspec_language_int \prop_gput:cnV {g__fontspec_ \l_fontspec_family_tl _prop} {script-tag} \l_fontspec_script_tl \prop_gput:cnV {g__fontspec_ \l_fontspec_family_tl _prop} {lang-tag} \l_fontspec_lang_tl } \cs_new:Nn \__fontspec_find_autofonts: { \bool_if:nF {\l__fontspec_noit_bool || \l__fontspec_nobf_bool} { \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_it_tl} {/B} \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_bf_tl} {/I} \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l_fontspec_fontname_tl} {/BI} } \bool_if:NF \l__fontspec_nobf_bool { \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bf_tl {\l_fontspec_fontname_tl} {/B} } \bool_if:NF \l__fontspec_noit_bool { \__fontspec_set_autofont:Nnn \l__fontspec_fontname_it_tl {\l_fontspec_fontname_tl} {/I} } \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfsl_tl {\l__fontspec_fontname_sl_tl} {/B} } \cs_new:Nn \__fontspec_set_faces: { \__fontspec_add_nfssfont:nnnn \mddefault \updefault \l_fontspec_fontname_tl \l__fontspec_fontfeat_up_clist \__fontspec_add_nfssfont:nnnn \bfdefault \updefault \l__fontspec_fontname_bf_tl \l__fontspec_fontfeat_bf_clist \__fontspec_add_nfssfont:nnnn \mddefault \itdefault \l__fontspec_fontname_it_tl \l__fontspec_fontfeat_it_clist \__fontspec_add_nfssfont:nnnn \mddefault \sldefault \l__fontspec_fontname_sl_tl \l__fontspec_fontfeat_sl_clist \__fontspec_add_nfssfont:nnnn \bfdefault \itdefault \l__fontspec_fontname_bfit_tl \l__fontspec_fontfeat_bfit_clist \__fontspec_add_nfssfont:nnnn \bfdefault \sldefault \l__fontspec_fontname_bfsl_tl \l__fontspec_fontfeat_bfsl_clist \prop_map_inline:Nn \l__fontspec_nfssfont_prop { \__fontspec_set_faces_aux:nnnnn ##2 } } \cs_new:Nn \__fontspec_set_faces_aux:nnnnn { \fontspec_complete_fontname:Nn \l__fontspec_curr_fontname_tl {#3} \__fontspec_make_font_shapes:Nnnnn \l__fontspec_curr_fontname_tl {#1} {#2} {#4} {#5} } \cs_set:Nn \fontspec_complete_fontname:Nn { \tl_set:Nx #1 {#2} \tl_replace_all:Nnx #1 {*} {\l__fontspec_basename_tl} } \cs_new:Nn \__fontspec_add_nfssfont:nnnn { \tl_set:Nx \l__fontspec_this_font_tl {#3} \tl_if_empty:xTF {#4} { \clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}} } { \__fontspec_keys_set_known:nxN {fontspec-preparse-nested} {#4} \l__fontspec_tmp_tl } \tl_if_empty:NF \l__fontspec_this_font_tl { \prop_put:Nxx \l__fontspec_nfssfont_prop {#1/#2} { {#1}{#2}{\l__fontspec_this_font_tl}{#4}{\l__fontspec_sizefeat_clist} } } } \cs_new:Nn \__fontspec_set_font_type: { \bool_set_false:N \l__fontspec_tfm_bool \bool_set_false:N \l__fontspec_atsui_bool \bool_set_false:N \l__fontspec_ot_bool \bool_set_false:N \l__fontspec_mm_bool \bool_set_false:N \l__fontspec_graphite_bool \ifcase\XeTeXfonttype\l_fontspec_font \bool_set_true:N \l__fontspec_tfm_bool \or \bool_set_true:N \l__fontspec_atsui_bool \ifnum\XeTeXcountvariations\l_fontspec_font > \c_zero \bool_set_true:N \l__fontspec_mm_bool \fi \or \bool_set_true:N \l__fontspec_ot_bool \fi \tl_if_empty:NT \l_fontspec_renderer_tl { \bool_if:NTF \l__fontspec_atsui_bool { \tl_set:Nn \l_fontspec_renderer_tl {/AAT} } { \bool_if:NT \l__fontspec_ot_bool { \tl_set:Nn \l_fontspec_renderer_tl {/OT} } } } } \cs_new:Nn \__fontspec_set_autofont:Nnn { \bool_if:NF \l__fontspec_external_bool { \tl_if_empty:xF {#2} { \tl_if_empty:NT #1 { \__fontspec_if_autofont:nnTF {#2} {#3} { \tl_set:Nx #1 {#2#3} } { \__fontspec_info:nx {no-font-shape} {#2#3} } } } } } \prg_new_conditional:Nnn \__fontspec_if_autofont:nn {T,TF} { \__fontspec_primitive_font_set:Nnn \l_tmpa_font { \__fontspec_construct_font_call:nn {#1} {} } {\f@size pt} \__fontspec_primitive_font_set:Nnn \l_tmpb_font { \__fontspec_construct_font_call:nn {#1#2} {} } {\f@size pt} \str_if_eq_x:nnTF { \fontname \l_tmpa_font } { \fontname \l_tmpb_font } { \prg_return_false: } { \prg_return_true: } } \cs_new:Nn \__fontspec_make_font_shapes:Nnnnn { \group_begin: \__fontspec_keys_set_known:nxN {fontspec-preparse-external} { #4 } \l__fontspec_leftover_clist \__fontspec_load_fontname:n {#1} \__fontspec_declare_shape:nnxx {#2} {#3} { \l__fontspec_fontopts_clist, \l__fontspec_leftover_clist } {#5} \group_end: } \cs_new:Nn \__fontspec_load_fontname:n { \__fontspec_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#1} \prop_get:NVNF \g__fontspec_fontopts_prop \l_fontspec_fontname_tl \l__fontspec_fontopts_clist { \clist_clear:N \l__fontspec_fontopts_clist } \__fontspec_primitive_font_set:Nnn \l_fontspec_font { \__fontspec_construct_font_call:nn {\l_fontspec_fontname_tl} {} } {\f@size pt} \__fontspec_primitive_font_if_null:NT \l_fontspec_font { \__fontspec_error:nx {font-not-found} {#1} } } \cs_new:Nn \__fontspec_declare_shape:nnnn { \tl_clear:N \l__fontspec_nfss_tl \tl_clear:N \l__fontspec_nfss_sc_tl \tl_set_eq:NN \l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl \exp_args:Nx \clist_map_inline:nn {#4} { \__fontspec_setup_single_size:nn {#3} {##1} } \__fontspec_declare_shapes_normal:nn {#1} {#2} \__fontspec_declare_shapes_smcaps:nn {#1} {#2} \__fontspec_declare_shape_slanted:nn {#1} {#2} \__fontspec_declare_shape_loginfo:nn {#1} {#2} } \cs_generate_variant:Nn \__fontspec_declare_shape:nnnn {nnxx} \cs_new:Nn \__fontspec_setup_single_size:nn { \tl_clear:N \l__fontspec_size_tl \tl_set_eq:NN \l__fontspec_sizedfont_tl \l__fontspec_saved_fontname_tl % in case not spec'ed \keys_set_known:nxN {fontspec-sizing} { \exp_after:wN \use:n #2 } \l__fontspec_sizing_leftover_clist \tl_if_empty:NT \l__fontspec_size_tl { \__fontspec_error:n {no-size-info} } % "normal" \__fontspec_load_fontname:n {\l__fontspec_sizedfont_tl} \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_tl {#1} {\l__fontspec_sizing_leftover_clist} {} % small caps \clist_set_eq:NN \l__fontspec_fontfeat_curr_clist \l__fontspec_fontfeat_sc_clist \bool_if:NF \l__fontspec_nosc_bool { \tl_if_empty:NTF \l__fontspec_fontname_sc_tl { \__fontspec_make_smallcaps:TF { \clist_put_left:Nn \l__fontspec_fontfeat_curr_clist {Letters=SmallCaps} } { \bool_set_true:N \l__fontspec_nosc_bool } } { \__fontspec_load_fontname:n {\l__fontspec_fontname_sc_tl} }% local for each size } \bool_if:NF \l__fontspec_nosc_bool { \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_sc_tl {#1} {\l__fontspec_sizing_leftover_clist} {\l__fontspec_fontfeat_curr_clist} } } \cs_new:Nn \__fontspec_setup_nfss:Nnnn { \__fontspec_get_features:Nn \l__fontspec_rawfeatures_sclist { #2 , #3 , #4 } \tl_put_right:Nx #1 { <\l__fontspec_size_tl> \l__fontspec_scale_tl \__fontspec_construct_font_call:nn { \l_fontspec_fontname_tl } { \l__fontspec_pre_feat_sclist \l__fontspec_rawfeatures_sclist } } } \cs_new:Nn \__fontspec_declare_shapes_normal:nn { \__fontspec_DeclareFontShape:xxxxxx {\l__fontspec_nfss_enc_tl} {\l_fontspec_family_tl} {#1} {#2} {\l__fontspec_nfss_tl}{\l__fontspec_postadjust_tl} } \cs_new:Nn \__fontspec_declare_shapes_smcaps:nn { \tl_if_empty:NF \l__fontspec_nfss_sc_tl { \__fontspec_DeclareFontShape:xxxxxx {\l__fontspec_nfss_enc_tl} {\l_fontspec_family_tl} {#1} { \__fontspec_combo_sc_shape:n {#2} } {\l__fontspec_nfss_sc_tl} {\l__fontspec_postadjust_tl} } } \cs_new:Nn \__fontspec_combo_sc_shape:n { \tl_if_exist:cTF { \__fontspec_shape_merge:nn {#1} {\scdefault} } { \tl_use:c { \__fontspec_shape_merge:nn {#1} {\scdefault} } } { \scdefault } } \cs_new:Nn \__fontspec_DeclareFontShape:nnnnnn { \group_begin: \normalsize \cs_undefine:c {#1/#2/#3/#4/\f@size} \group_end: \DeclareFontShape{#1}{#2}{#3}{#4}{#5}{#6} } \cs_generate_variant:Nn \__fontspec_DeclareFontShape:nnnnnn {xxxxxx} \cs_new:Nn \__fontspec_declare_shape_slanted:nn { \bool_if:nT { \str_if_eq_x_p:nn {#2} {\itdefault} && !(\str_if_eq_x_p:nn {\itdefault} {\sldefault}) } { \__fontspec_DeclareFontShape:xxxxxx {\l__fontspec_nfss_enc_tl}{\l_fontspec_family_tl}{#1}{\sldefault} {<->ssub*\l_fontspec_family_tl/#1/\itdefault}{\l__fontspec_postadjust_tl} } } \cs_new:Nn \__fontspec_declare_shape_loginfo:nn { \tl_gput_right:Nx \l_fontspec_defined_shapes_tl { \exp_not:n { \\ } -~ \exp_not:N \str_case:nn {#1/#2} { {\mddefault/\updefault} {'normal'~} {\bfdefault/\updefault} {'bold'~} {\mddefault/\itdefault} {'italic'~} {\mddefault/\sldefault} {'slanted'~} {\bfdefault/\itdefault} {'bold~ italic'~} {\bfdefault/\sldefault} {'bold~ slanted'~} } (#1/#2)~ with~ NFSS~ spec.:~ \l__fontspec_nfss_tl \exp_not:n { \\ } -~ \exp_not:N \str_case:nn { #1 / \__fontspec_combo_sc_shape:n {#2} } { {\mddefault/\scdefault} {'small~ caps'~} {\bfdefault/\scdefault} {'bold~ small~ caps'~} {\mddefault/\itscdefault} {'italic~ small~ caps'~} {\bfdefault/\itscdefault} {'bold~ italic~ small~ caps'~} {\mddefault/\slscdefault} {'slanted~ small~ caps'~} {\bfdefault/\slscdefault} {'bold~ slanted~ small~ caps'~} }~( #1 / \__fontspec_combo_sc_shape:n {#2} )~ with~ NFSS~ spec.:~ \l__fontspec_nfss_sc_tl \tl_if_empty:fF {\l__fontspec_postadjust_tl} { \exp_not:N \\ and~ font~ adjustment~ code: \exp_not:N \\ \l__fontspec_postadjust_tl } } } \tl_set:Nn \l__fontspec_pre_feat_sclist { \bool_if:NT \l__fontspec_ot_bool { \tl_if_empty:NF \l_fontspec_script_tl { script = \l_fontspec_script_tl ; language = \l_fontspec_lang_tl ; } } } \cs_set:Nn \__fontspec_make_ot_smallcaps:TF { \__fontspec_check_ot_feat:nTF {smcp} {#1} {#2} } \cs_set:Nn \__fontspec_make_smallcaps:TF { \bool_if:NTF \l__fontspec_ot_bool { \__fontspec_make_ot_smallcaps:TF {#1} {#2} } { \bool_if:NT \l__fontspec_atsui_bool { \__fontspec_make_AAT_feature_string:nnTF {3}{3} {#1} {#2} } } } \cs_new:Nn \__fontspec_update_featstr:n { \bool_if:NF \l__fontspec_firsttime_bool { \tl_gset:Nx \g__fontspec_single_feat_tl { #1 } \tl_gput_right:Nx \l__fontspec_rawfeatures_sclist {#1;} } } \cs_new:Nn \__fontspec_remove_clashing_featstr:n { \clist_map_inline:nn {#1} { \tl_gremove_all:Nn \l__fontspec_rawfeatures_sclist {##1;} } } \cs_set:Npn \__fontspec_init: { \bool_set_false:N \l__fontspec_ot_bool \bool_set_true:N \l__fontspec_firsttime_bool \__fontspec_font_is_name: \tl_clear:N \l__fontspec_font_path_tl \tl_clear:N \l__fontspec_optical_size_tl \tl_clear:N \l__fontspec_ttc_index_tl \tl_clear:N \l_fontspec_renderer_tl \tl_clear:N \l_fontspec_defined_shapes_tl \tl_clear:N \g__fontspec_curr_series_tl \tl_gset_eq:NN \l__fontspec_nfss_enc_tl \g_fontspec_encoding_tl } \cs_new:Nn \__fontspec_init_fontface: { \tl_clear:N \l__fontspec_rawfeatures_sclist \tl_clear:N \l__fontspec_scale_tl \tl_set_eq:NN \l__fontspec_opacity_tl \g__fontspec_opacity_tl \tl_set_eq:NN \l__fontspec_hexcol_tl \g__fontspec_hexcol_tl \tl_set_eq:NN \l__fontspec_postadjust_tl \g__fontspec_postadjust_tl \tl_clear:N \l__fontspec_wordspace_adjust_tl \tl_clear:N \l__fontspec_punctspace_adjust_tl } \cs_set:Nn \__fontspec_iv_str_to_num:Nn { \__fontspec_strip_leading_sign:Nw #1#2 \q_nil } \cs_set:Npn \__fontspec_strip_leading_sign:Nw #1#2#3 \q_nil { \bool_if:nTF { \str_if_eq_p:nn {#2} {+} || \str_if_eq_p:nn {#2} {-} } { \__fontspec_iv_str_to_num:w #1 \q_nil #3 \c_empty_tl \c_empty_tl \q_nil } { \__fontspec_iv_str_to_num:w #1 \q_nil #2#3 \c_empty_tl \c_empty_tl \q_nil } } \cs_set:Npn \__fontspec_iv_str_to_num:w #1 \q_nil #2#3#4#5#6 \q_nil { \int_set:Nn #1 { `#2 * "1000000 + `#3 * "10000 + \ifx \c_empty_tl #4 32 \else `#4 \fi * "100 + \ifx \c_empty_tl #5 32 \else `#5 \fi } } \cs_generate_variant:Nn \__fontspec_iv_str_to_num:Nn {No} \cs_new:Nn \__fontspec_define_opentype_feature_group:n { \keys_define:nn {fontspec-opentype} { #1 .multichoice: } } \cs_new:Nn \__fontspec_feat_prop_add:nn { \tl_if_empty:nF {#1} { \prop_if_in:NnF \g__fontspec_OT_features_prop {#1} { \prop_gput:Nnn \g__fontspec_OT_features_prop {#1} {#2} } } } \cs_new:Nn \__fontspec_define_opentype_feature:nnnnn { \__fontspec_feat_prop_add:nn {#3} {#1\,=\,#2} \tl_if_empty:nTF {#4} { \keys_define:nn {fontspec-opentype} { #1/#2 .code:n = { \__fontspec_remove_clashing_featstr:n {#5} } } } { \keys_define:nn {fontspec-opentype} { #1/#2 .code:n = { \__fontspec_make_OT_feature:nnn {#3} {#4} {#5} } } } } \cs_new:Nn \__fontspec_feat_off:n {#1Off} \cs_new:Nn \__fontspec_feat_reset:n {#1Reset} \cs_new:Nn \__fontspec_define_opentype_onoffreset:nnnnn { \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {+#4} {#5} \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_off:n {#2} } {#3} {-#4} {} \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {+#4,-#4} } \cs_new:Nn \__fontspec_define_opentype_onreset:nnnnn { \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {#4} {#5} \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {#4} } \cs_new:Nn \__fontspec_make_OT_feature:nnn { \bool_set_true:N \l__fontspec_proceed_bool \bool_set_true:N \l__fontspec_check_feat_bool \tl_if_empty:nT {#1} { \bool_set_false:N \l__fontspec_check_feat_bool } \bool_if:NT \l__fontspec_check_feat_bool { \__fontspec_check_ot_feat:nF {#1} { \__fontspec_warning:nx {icu-feature-not-exist-in-font} {#1} \bool_set_false:N \l__fontspec_proceed_bool } } \bool_if:NT \l__fontspec_proceed_bool { \exp_args:Nx \__fontspec_remove_clashing_featstr:n { #2 , \__fontspec_swap_plus_minus:n {#2} , #3 } \__fontspec_update_featstr:n {#2} } } \cs_generate_variant:Nn \__fontspec_make_OT_feature:nnn {xxx} \cs_new:Nn \__fontspec_swap_plus_minus:n { \__fontspec_swap_plus_minus_aux:Nq #1 \q_nil } \cs_new:Npn \__fontspec_swap_plus_minus_aux:Nq #1#2 \q_nil { \str_case:nn {#1} { {+} {-#2} {-} {+#2} } } \prg_new_conditional:Nnn \__fontspec_check_script:n {TF} { \bool_if:NTF \l__fontspec_never_check_bool { \prg_return_true: } { \__fontspec_iv_str_to_num:Nn \l__fontspec_strnum_int {#1} \int_set:Nn \l_tmpb_int { \XeTeXOTcountscripts \l_fontspec_font } \int_zero:N \l_tmpa_int \bool_set_false:N \l__fontspec_check_bool \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } { \ifnum \XeTeXOTscripttag\l_fontspec_font \l_tmpa_int = \l__fontspec_strnum_int \bool_set_true:N \l__fontspec_check_bool \int_set:Nn \l_tmpa_int {\l_tmpb_int} \else \int_incr:N \l_tmpa_int \fi } \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: } } \prg_new_conditional:Nnn \__fontspec_check_lang:n {TF} { \bool_if:NTF \l__fontspec_never_check_bool { \prg_return_true: } { \__fontspec_iv_str_to_num:Nn \l__fontspec_strnum_int {#1} \int_set:Nn \l_tmpb_int { \XeTeXOTcountlanguages \l_fontspec_font \l__fontspec_script_int } \int_zero:N \l_tmpa_int \bool_set_false:N \l__fontspec_check_bool \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } { \ifnum\XeTeXOTlanguagetag\l_fontspec_font\l__fontspec_script_int \l_tmpa_int =\l__fontspec_strnum_int \bool_set_true:N \l__fontspec_check_bool \int_set:Nn \l_tmpa_int {\l_tmpb_int} \else \int_incr:N \l_tmpa_int \fi } \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: } } \prg_new_conditional:Nnn \__fontspec_check_ot_feat:n {TF,F} { \bool_if:NTF \l__fontspec_never_check_bool { \prg_return_true: } { \int_set:Nn \l_tmpb_int { \XeTeXOTcountfeatures \l_fontspec_font \l__fontspec_script_int \l__fontspec_language_int } \__fontspec_iv_str_to_num:Nn \l__fontspec_strnum_int {#1} \int_zero:N \l_tmpa_int \bool_set_false:N \l__fontspec_check_bool \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int } { \ifnum\XeTeXOTfeaturetag\l_fontspec_font\l__fontspec_script_int\l__fontspec_language_int \l_tmpa_int =\l__fontspec_strnum_int \bool_set_true:N \l__fontspec_check_bool \int_set:Nn \l_tmpa_int {\l_tmpb_int} \else \int_incr:N \l_tmpa_int \fi } \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: } } \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {aalt}{Access~All~Alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvf}{Above-base~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvm}{Above-base~Mark~Positioning} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvs}{Above-base~Substitutions} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {afrc}{Alternative~Fractions} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {akhn}{Akhands} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {blwf}{Below-base~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {blwm}{Below-base~Mark~Positioning} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {blws}{Below-base~Substitutions} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {calt}{Contextual~Alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {case}{Case-Sensitive~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ccmp}{Glyph~Composition~/~Decomposition} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cfar}{Conjunct~Form~After~Ro} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cjct}{Conjunct~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {clig}{Contextual~Ligatures} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cpct}{Centered~CJK~Punctuation} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cpsp}{Capital~Spacing} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cswh}{Contextual~Swash} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {curs}{Cursive~Positioning} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cvNN}{Character~Variant~$N$} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {c2pc}{Petite~Capitals~From~Capitals} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {c2sc}{Small~Capitals~From~Capitals} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dist}{Distances} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dlig}{Discretionary~Ligatures} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dnom}{Denominators} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dtls}{Dotless~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {expt}{Expert~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {falt}{Final~Glyph~on~Line~Alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fin2}{Terminal~Forms~\#2} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fin3}{Terminal~Forms~\#3} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fina}{Terminal~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {flac}{Flattened~accent~forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {frac}{Fractions} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fwid}{Full~Widths} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {half}{Half~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {haln}{Halant~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {halt}{Alternate~Half~Widths} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hist}{Historical~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hkna}{Horizontal~Kana~Alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hlig}{Historical~Ligatures} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hngl}{Hangul} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hojo}{Hojo~Kanji~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hwid}{Half~Widths} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {init}{Initial~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {isol}{Isolated~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ital}{Italics} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jalt}{Justification~Alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp78}{JIS78~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp83}{JIS83~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp90}{JIS90~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp04}{JIS2004~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {kern}{Kerning} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {lfbd}{Left~Bounds} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {liga}{Standard~Ligatures} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ljmo}{Leading~Jamo~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {lnum}{Lining~Figures} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {locl}{Localized~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ltra}{Left-to-right~alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ltrm}{Left-to-right~mirrored~forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mark}{Mark~Positioning} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {med2}{Medial~Forms~\#2} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {medi}{Medial~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mgrk}{Mathematical~Greek} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mkmk}{Mark~to~Mark~Positioning} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mset}{Mark~Positioning~via~Substitution} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {nalt}{Alternate~Annotation~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {nlck}{NLC~Kanji~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {nukt}{Nukta~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {numr}{Numerators} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {onum}{Oldstyle~Figures} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {opbd}{Optical~Bounds} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ordn}{Ordinals} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ornm}{Ornaments} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {palt}{Proportional~Alternate~Widths} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pcap}{Petite~Capitals} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pkna}{Proportional~Kana} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pnum}{Proportional~Figures} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pref}{Pre-Base~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pres}{Pre-base~Substitutions} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pstf}{Post-base~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {psts}{Post-base~Substitutions} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pwid}{Proportional~Widths} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {qwid}{Quarter~Widths} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rand}{Randomize} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rclt}{Required~Contextual~Alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rkrf}{Rakar~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rlig}{Required~Ligatures} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rphf}{Reph~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rtbd}{Right~Bounds} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rtla}{Right-to-left~alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rtlm}{Right-to-left~mirrored~forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ruby}{Ruby~Notation~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rvrn}{Required~Variation~Alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {salt}{Stylistic~Alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {sinf}{Scientific~Inferiors} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {size}{Optical~size} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {smcp}{Small~Capitals} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {smpl}{Simplified~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ssNN}{Stylistic~Set~$N$} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ssty}{Math~script~style~alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {stch}{Stretching~Glyph~Decomposition} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {subs}{Subscript} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {sups}{Superscript} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {swsh}{Swash} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {titl}{Titling} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {tjmo}{Trailing~Jamo~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {tnam}{Traditional~Name~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {tnum}{Tabular~Figures} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {trad}{Traditional~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {twid}{Third~Widths} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {unic}{Unicase} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {valt}{Alternate~Vertical~Metrics} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vatu}{Vattu~Variants} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vert}{Vertical~Writing} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vhal}{Alternate~Vertical~Half~Metrics} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vjmo}{Vowel~Jamo~Forms} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vkna}{Vertical~Kana~Alternates} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vkrn}{Vertical~Kerning} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vpal}{Proportional~Alternate~Vertical~Metrics} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vrt2}{Vertical~Alternates~and~Rotation} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vrtr}{Vertical~Alternates~for~Rotation} \prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {zero}{Slashed~Zero} \cs_new:Nn \__fontspec_define_aat_feature_group:n { \keys_define:nn {fontspec-aat} { #1 .multichoice: } } \cs_new:Nn \__fontspec_define_aat_feature:nnnn { \keys_define:nn {fontspec-aat} { #1/#2 .code:n = { \__fontspec_make_AAT_feature:nn {#3}{#4} } } } \cs_new:Nn \__fontspec_make_AAT_feature:nn { \tl_if_empty:nTF {#1} { \__fontspec_warning:n {aat-feature-not-exist} } { \__fontspec_make_AAT_feature_string:nnTF {#1}{#2} { \__fontspec_update_featstr:n {\l_fontspec_feature_string_tl} } { \__fontspec_warning:nx {aat-feature-not-exist-in-font} {#1,#2} } } } \prg_new_conditional:Nnn \__fontspec_make_AAT_feature_string:nn {TF,T,F} { \tl_set:Nx \l_tmpa_tl { \XeTeXfeaturename \l_fontspec_font #1 } \tl_if_empty:NTF \l_tmpa_tl { \prg_return_false: } { \int_compare:nTF { \XeTeXisexclusivefeature\l_fontspec_font #1 > 0 } { \tl_set:Nx \l_tmpb_tl {\XeTeXselectorname\l_fontspec_font #1\space #2} } { \int_if_even:nTF {#2} { \tl_set:Nx \l_tmpb_tl {\XeTeXselectorname\l_fontspec_font #1\space #2} } { \tl_set:Nx \l_tmpb_tl { \XeTeXselectorname\l_fontspec_font #1\space \numexpr#2-1\relax } \tl_if_empty:NF \l_tmpb_tl { \tl_put_left:Nn \l_tmpb_tl {!} } } } \tl_if_empty:NTF \l_tmpb_tl { \prg_return_false: } { \tl_set:Nx \l_fontspec_feature_string_tl { \l_tmpa_tl = \l_tmpb_tl } \prg_return_true: } } } \clist_set:Nn \g__fontspec_all_keyval_modules_clist { fontspec, fontspec-opentype, fontspec-aat, fontspec-preparse, fontspec-preparse-cfg, fontspec-preparse-external, fontspec-preparse-nested, fontspec-renderer } \cs_new:Nn \__fontspec_keys_define_code:nnn { \keys_define:nn {#1} { #2 .code:n = {#3} } } \cs_new:Nn \__fontspec_aff_error:n { \__fontspec_keys_define_code:nnn {fontspec-addfeatures} {#1} { \__fontspec_error:nx {not-in-addfontfeatures} {#1} } } \__fontspec_keys_define_code:nnn {fontspec-preparse-cfg} {IgnoreFontspecFile} { \bool_set_false:N \l__fontspec_fontcfg_bool } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {IgnoreFontspecFile} { \bool_set_false:N \l__fontspec_fontcfg_bool } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {Path} { \bool_set_true:N \l__fontspec_nobf_bool \bool_set_true:N \l__fontspec_noit_bool \bool_set_true:N \l__fontspec_external_bool \tl_set:Nn \l__fontspec_font_path_tl {#1} \__fontspec_font_is_file: \keys_set:nn {fontspec-renderer} {Renderer=OpenType} } \aliasfontfeature{Path}{ExternalLocation} \__fontspec_keys_define_code:nnn {fontspec} {Path} {} \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {Extension} { \tl_set:Nn \l__fontspec_extension_tl {#1} \bool_if:NF \l__fontspec_external_bool { \keys_set:nn {fontspec-preparse-external} {Path} } } \tl_clear:N \l__fontspec_extension_tl \__fontspec_keys_define_code:nnn {fontspec} {Extension} {} \keys_define:nn {fontspec-renderer} { Renderer .choices:nn = {AAT,ICU,OpenType,Graphite,Full,Basic} { \int_compare:nTF {\l_keys_choice_int <= 4} { \tl_set:Nv \l_fontspec_renderer_tl { g_fontspec_renderer_tag_ \l_keys_choice_tl } \tl_gset:Nx \g__fontspec_single_feat_tl { \l_fontspec_renderer_tl } } { \__fontspec_warning:nx {only-luatex-feature} {Renderer=Full/Basic} } } } \tl_set:cn {g_fontspec_renderer_tag_AAT} {/AAT} \tl_set:cn {g_fontspec_renderer_tag_ICU} {/OT} \tl_set:cn {g_fontspec_renderer_tag_OpenType} {/OT} \tl_set:cn {g_fontspec_renderer_tag_Graphite} {/GR} \tl_set:cn {g_fontspec_mode_tag_Full} {node} \tl_set:cn {g_fontspec_mode_tag_Basic} {base} \__fontspec_keys_define_code:nnn {fontspec-preparse} {Script} { \keys_set:nn {fontspec-renderer} {Renderer=OpenType} \tl_set:Nn \l__fontspec_script_name_tl {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {Language} { \keys_set:nn {fontspec-renderer} {Renderer=OpenType} \tl_set:Nn \l__fontspec_lang_name_tl {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {FontIndex} { \str_if_eq_x:nnF { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} { \__fontspec_warning:n {font-index-needs-ttc} } \tl_set:Nn \l__fontspec_ttc_index_tl {:#1} } \__fontspec_keys_define_code:nnn {fontspec} {FontIndex} { \tl_set:Nn \l__fontspec_ttc_index_tl {:#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldSeries} { \tl_gset:Nx \g__fontspec_curr_series_tl { #1 } \seq_gput_right:Nx \g__fontspec_bf_series_seq { #1 } } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {UprightFont} { \fontspec_complete_fontname:Nn \l__fontspec_fontname_up_tl {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {FontName} { \fontspec_complete_fontname:Nn \l__fontspec_fontname_up_tl {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldFont} { \tl_if_empty:nTF {#1} { \bool_set_true:N \l__fontspec_nobf_bool } { \bool_set_false:N \l__fontspec_nobf_bool \fontspec_complete_fontname:Nn \l__fontspec_curr_bfname_tl {#1} \seq_if_empty:NT \g__fontspec_bf_series_seq { \tl_gset:Nx \g__fontspec_curr_series_tl {\bfdefault} \seq_put_right:Nx \g__fontspec_bf_series_seq {\bfdefault} } \tl_if_eq:oxT \g__fontspec_curr_series_tl {\bfdefault} { \tl_set_eq:NN \l__fontspec_fontname_bf_tl \l__fontspec_curr_bfname_tl } \prop_put:NxV \l__fontspec_nfss_prop {BoldFont-\g__fontspec_curr_series_tl} \l__fontspec_curr_bfname_tl } } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {ItalicFont} { \tl_if_empty:nTF {#1} { \bool_set_true:N \l__fontspec_noit_bool } { \bool_set_false:N \l__fontspec_noit_bool \fontspec_complete_fontname:Nn \l__fontspec_fontname_it_tl {#1} } } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldItalicFont} { \fontspec_complete_fontname:Nn \l__fontspec_fontname_bfit_tl {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {SlantedFont} { \fontspec_complete_fontname:Nn \l__fontspec_fontname_sl_tl {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldSlantedFont} { \fontspec_complete_fontname:Nn \l__fontspec_fontname_bfsl_tl {#1} } \__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFont} { \tl_if_empty:nTF {#1} { \bool_set_true:N \l__fontspec_nosc_bool } { \bool_set_false:N \l__fontspec_nosc_bool \fontspec_complete_fontname:Nn \l__fontspec_fontname_sc_tl {#1} } } \__fontspec_keys_define_code:nnn {fontspec-preparse} {UprightFeatures} { \clist_set:Nn \l__fontspec_fontfeat_up_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldFeatures} { \clist_set:Nn \l__fontspec_fontfeat_bf_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {ItalicFeatures} { \clist_set:Nn \l__fontspec_fontfeat_it_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldItalicFeatures} { \clist_set:Nn \l__fontspec_fontfeat_bfit_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {SlantedFeatures} { \clist_set:Nn \l__fontspec_fontfeat_sl_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldSlantedFeatures} { \clist_set:Nn \l__fontspec_fontfeat_bfsl_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFeatures} { \bool_if:NF \l__fontspec_firsttime_bool { \clist_set:Nn \l__fontspec_fontfeat_sc_clist {#1} } } \__fontspec_keys_define_code:nnn {fontspec-preparse} {SizeFeatures} { \clist_set:Nn \l__fontspec_sizefeat_clist {#1} \clist_put_right:Nn \l__fontspec_fontfeat_up_clist { SizeFeatures = {#1} } } \__fontspec_keys_define_code:nnn {fontspec-preparse-nested} {SizeFeatures} { \clist_set:Nn \l__fontspec_sizefeat_clist {#1} \tl_if_empty:NT \l__fontspec_this_font_tl { \tl_set:Nn \l__fontspec_this_font_tl { -- } } % needs to be non-empty as a flag } \__fontspec_keys_define_code:nnn {fontspec-preparse-nested} {Font} { \tl_set:Nn \l__fontspec_this_font_tl {#1} } \__fontspec_keys_define_code:nnn {fontspec} {SizeFeatures} { % dummy } \__fontspec_keys_define_code:nnn {fontspec} {Font} { % dummy } \__fontspec_keys_define_code:nnn {fontspec-sizing} {Size} { \tl_set:Nn \l__fontspec_size_tl {#1} } \__fontspec_keys_define_code:nnn {fontspec-sizing} {Font} { \fontspec_complete_fontname:Nn \l__fontspec_sizedfont_tl {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {NFSSEncoding} { \tl_gset:Nx \l__fontspec_nfss_enc_tl { #1 } } \__fontspec_keys_define_code:nnn {fontspec-preparse} {NFSSFamily} { \tl_set:Nx \l__fontspec_nfss_fam_tl { #1 } \cs_undefine:c {g__fontspec_UID_\l__fontspec_fontid_tl} \tl_if_exist:NT \l_fontspec_family_tl { \cs_undefine:c {g__fontspec_ \l_fontspec_family_tl _prop} } } \__fontspec_keys_define_code:nnn {fontspec} {FontFace} { \tl_set:No \l__fontspec_arg_tl { \use_iii:nnn #1 } \tl_set_eq:NN \l__fontspec_this_feat_tl \l__fontspec_arg_tl \tl_clear:N \l__fontspec_this_font_tl \int_compare:nT { \clist_count:N \l__fontspec_arg_tl = 1 } { \tl_if_in:NnF \l__fontspec_arg_tl {=} { \tl_set_eq:NN \l__fontspec_this_font_tl \l__fontspec_arg_tl \tl_clear:N \l__fontspec_this_feat_tl } } \__fontspec_add_nfssfont:nnnn {\use_i:nnn #1}{\use_ii:nnn #1}{\l__fontspec_this_font_tl}{\l__fontspec_this_feat_tl} } \__fontspec_keys_define_code:nnn {fontspec} {Scale} { \str_case:nnF {#1} { {MatchLowercase} { \__fontspec_calc_scale:n {5} } {MatchUppercase} { \__fontspec_calc_scale:n {8} } } { \tl_set:Nx \l__fontspec_scale_tl {#1} } \tl_set:Nx \l__fontspec_scale_tl { s*[\l__fontspec_scale_tl] } } \cs_new:Nn \__fontspec_calc_scale:n { \group_begin: \fontencoding { \encodingdefault } \fontfamily { \rmdefault } \selectfont \__fontspec_set_font_dimen:NnN \l__fontspec_tmpa_dim {#1} \font \__fontspec_set_font_dimen:NnN \l__fontspec_tmpb_dim {#1} \l_fontspec_font \tl_gset:Nx \l__fontspec_scale_tl { \fp_eval:n { \dim_to_fp:n {\l__fontspec_tmpa_dim} / \dim_to_fp:n {\l__fontspec_tmpb_dim} } } \__fontspec_info:n {set-scale} \group_end: } \cs_new:Nn \__fontspec_set_font_dimen:NnN { \dim_set:Nn #1 { \fontdimen #2 #3 } \dim_compare:nNnT #1 = {0pt} { \settoheight #1 { \str_if_eq:nnTF {#3} {\font} \rmfamily #3 \int_case:nnF #2 { {5} {x} % x-height {8} {X} % cap-height } {?} % "else" clause; never reached. } } } \__fontspec_keys_define_code:nnn {fontspec} {WordSpace} { \bool_if:NF \l__fontspec_firsttime_bool { \_fontspec_parse_wordspace:w #1,,,\q_stop } } \__fontspec_aff_error:n {WordSpace} \cs_set:Npn \_fontspec_parse_wordspace:w #1,#2,#3,#4 \q_stop { \tl_if_empty:nTF {#4} { \tl_set:Nn \l__fontspec_wordspace_adjust_tl { \fontdimen 2 \font = #1 \fontdimen 2 \font \fontdimen 3 \font = #1 \fontdimen 3 \font \fontdimen 4 \font = #1 \fontdimen 4 \font } } { \tl_set:Nn \l__fontspec_wordspace_adjust_tl { \fontdimen 2 \font = #1 \fontdimen 2 \font \fontdimen 3 \font = #2 \fontdimen 3 \font \fontdimen 4 \font = #3 \fontdimen 4 \font } } } \__fontspec_keys_define_code:nnn {fontspec} {PunctuationSpace} { \str_case_x:nnF {#1} { {WordSpace} { \tl_set:Nn \l__fontspec_punctspace_adjust_tl { \fontdimen 7 \font = 0 \fontdimen 2 \font } } {TwiceWordSpace} { \tl_set:Nn \l__fontspec_punctspace_adjust_tl { \fontdimen 7 \font = 1 \fontdimen 2 \font } } } { \tl_set:Nn \l__fontspec_punctspace_adjust_tl { \fontdimen 7 \font = #1 \fontdimen 7 \font } } } \__fontspec_aff_error:n {PunctuationSpace} \__fontspec_keys_define_code:nnn {fontspec} {FontAdjustment} { \tl_put_right:Nx \l__fontspec_postadjust_tl {#1} } \__fontspec_keys_define_code:nnn {fontspec} {LetterSpace} { \__fontspec_update_featstr:n {letterspace=#1} } \__fontspec_keys_define_code:nnn {fontspec} {HyphenChar} { \__fontspec_warning:nx {only-xetex-feature} {HyphenChar} \str_if_eq:nnTF {#1} {None} { \tl_put_right:Nn \l__fontspec_postadjust_tl { \hyphenchar \font = -1 \relax } } { \tl_if_single:nTF {#1} { \tl_set:Nn \l_fontspec_hyphenchar_tl {`#1} } { \tl_set:Nn \l_fontspec_hyphenchar_tl { #1} } \__fontspec_primitive_font_glyph_if_exist:NnTF \l_fontspec_font {\l_fontspec_hyphenchar_tl} { \tl_put_right:Nn \l__fontspec_postadjust_tl { \hyphenchar \font = \l_fontspec_hyphenchar_tl \scan_stop: } } { \__fontspec_error:nx {no-glyph}{#1} } } } \__fontspec_aff_error:n {HyphenChar} \__fontspec_keys_define_code:nnn {fontspec} {Color} { \cs_if_exist:cTF { \token_to_str:N \color@ #1 } { \convertcolorspec{named}{#1}{HTML}\l__fontspec_hexcol_tl } { \int_compare:nTF { \tl_count:n {#1} == 6 } { \tl_set:Nn \l__fontspec_hexcol_tl {#1} } { \int_compare:nTF { \tl_count:n {#1} == 8 } { \fontspec_parse_colour:viii #1 } { \bool_if:NF \l__fontspec_firsttime_bool { \__fontspec_warning:nx {bad-colour} {#1} } } } } } \cs_set:Npn \fontspec_parse_colour:viii #1#2#3#4#5#6#7#8 { \tl_set:Nn \l__fontspec_hexcol_tl {#1#2#3#4#5#6} \tl_if_eq:NNF \l__fontspec_opacity_tl \g__fontspec_opacity_tl { \bool_if:NF \l__fontspec_firsttime_bool { \__fontspec_warning:nx {opa-twice-col} {#7#8} } } \tl_set:Nn \l__fontspec_opacity_tl {#7#8} } \aliasfontfeature{Color}{Colour} \__fontspec_keys_define_code:nnn {fontspec} {Opacity} { \int_set:Nn \l__fontspec_tmp_int {255} \__fontspec_int_mult_truncate:Nn \l__fontspec_tmp_int { #1 } \tl_if_eq:NNF \l__fontspec_opacity_tl \g__fontspec_opacity_tl { \bool_if:NF \l__fontspec_firsttime_bool { \__fontspec_warning:nx {opa-twice} {#1} } } \tl_set:Nx \l__fontspec_opacity_tl { \int_compare:nT { \l__fontspec_tmp_int <= "F } {0} % zero pad \int_to_hex:n { \l__fontspec_tmp_int } } } \__fontspec_keys_define_code:nnn {fontspec-aat} {Mapping} { \tl_set:Nn \l__fontspec_mapping_tl { #1 } } \__fontspec_keys_define_code:nnn {fontspec-opentype} {Mapping} { \tl_set:Nn \l__fontspec_mapping_tl { #1 } } \__fontspec_keys_define_code:nnn {fontspec} {Weight} { \__fontspec_update_featstr:n{weight=#1} } \__fontspec_keys_define_code:nnn {fontspec} {Width} { \__fontspec_update_featstr:n{width=#1} } \__fontspec_keys_define_code:nnn {fontspec} {OpticalSize} { \bool_if:NTF \l__fontspec_ot_bool { \tl_set:Nn \l__fontspec_optical_size_tl {/ S = #1} } { \bool_if:NT \l__fontspec_mm_bool { \__fontspec_update_featstr:n { optical size = #1 } } } \bool_if:nT { !\l__fontspec_ot_bool && !\l__fontspec_mm_bool } { \bool_if:NT \l__fontspec_firsttime_bool { \__fontspec_warning:n {no-opticals} } } } \keys_define:nn {fontspec} { FakeSlant .code:n = { \__fontspec_update_featstr:n{slant=#1} }, FakeSlant .default:n = {0.2} } \keys_define:nn {fontspec} { FakeStretch .code:n = { \__fontspec_update_featstr:n{extend=#1} }, FakeStretch .default:n = {1.2} } \keys_define:nn {fontspec} { FakeBold .code:n = { \__fontspec_update_featstr:n {embolden=#1} }, FakeBold .default:n = {1.5} } \keys_define:nn {fontspec} { AutoFakeSlant .code:n = { \bool_if:NT \l__fontspec_firsttime_bool { \tl_set:Nn \l__fontspec_fake_slant_tl {#1} \clist_put_right:Nn \l__fontspec_fontfeat_it_clist {FakeSlant=#1} \tl_set_eq:NN \l__fontspec_fontname_it_tl \l_fontspec_fontname_tl \bool_set_false:N \l__fontspec_noit_bool \tl_if_empty:NF \l__fontspec_fake_embolden_tl { \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeBold=\l__fontspec_fake_embolden_tl} \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeSlant=#1} \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl } } }, AutoFakeSlant .default:n = {0.2} } \keys_define:nn {fontspec} { AutoFakeBold .code:n = { \bool_if:NT \l__fontspec_firsttime_bool { \tl_set:Nn \l__fontspec_fake_embolden_tl {#1} \clist_put_right:Nn \l__fontspec_fontfeat_bf_clist {FakeBold=#1} \tl_set_eq:NN \l__fontspec_fontname_bf_tl \l_fontspec_fontname_tl \bool_set_false:N \l__fontspec_nobf_bool \tl_if_empty:NF \l__fontspec_fake_slant_tl { \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeSlant=\l__fontspec_fake_slant_tl} \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeBold=#1} \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl } } }, AutoFakeBold .default:n = {1.5} } \__fontspec_keys_define_code:nnn {fontspec-opentype} {RawFeature} { \__fontspec_update_featstr:n {#1} } \__fontspec_keys_define_code:nnn {fontspec-aat} {RawFeature} { \__fontspec_update_featstr:n {#1} } \__fontspec_feat_prop_add:nn {salt} { Alternate\,=\,$N$ } \__fontspec_feat_prop_add:nn {nalt} { Annotation\,=\,$N$ } \__fontspec_feat_prop_add:nn {ornm} { Ornament\,=\,$N$ } \__fontspec_feat_prop_add:nn {cvNN} { CharacterVariant\,=\,$N$:$M$ } \__fontspec_feat_prop_add:nn {ssNN} { StylisticSet\,=\,$N$ } \__fontspec_define_opentype_feature_group:n {Ligatures} \__fontspec_define_opentype_feature:nnnnn {Ligatures} {ResetAll} {} {} { +dlig,-dlig,+rlig,-rlig,+liga,-liga,+dlig,-dlig,+clig,-clig,+hlig,-hlig, mapping = tex-text } \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Required} {rlig} {rlig} {} \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Common} {liga} {liga} {} \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Rare} {dlig} {dlig} {} \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Discretionary} {dlig} {dlig} {} \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Contextual} {clig} {clig} {} \__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Historic} {hlig} {hlig} {} \keys_define:nn {fontspec-opentype} { Ligatures / TeX .code:n = { \tl_set:Nn \l__fontspec_mapping_tl {tex-text} }, Ligatures / TeXReset .code:n = { \tl_clear:N \l__fontspec_mapping_tl }, } \__fontspec_define_opentype_feature_group:n {Letters} \__fontspec_define_opentype_feature:nnnnn {Letters} {ResetAll} {} {} { +case,+smcp,+pcap,+c2sc,+c2pc,+unic,+rand, -case,-smcp,-pcap,-c2sc,-c2pc,-unic,-rand } \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Uppercase} {case} {case} {+smcp,+pcap,+c2sc,+c2pc,+unic,+rand} \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {SmallCaps} {smcp} {smcp} {+pcap,+unic,+rand} \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {PetiteCaps} {pcap} {pcap} {+smcp,+unic,+rand} \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercaseSmallCaps} {c2sc} {c2sc} {+c2pc,+unic,+rand} \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercasePetiteCaps} {c2pc} {c2pc} {+c2sc,+unic,+rand} \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Unicase} {unic} {unic} {+rand} \__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Random} {rand} {rand} {+unic} \__fontspec_define_opentype_feature_group:n {Numbers} \__fontspec_define_opentype_feature:nnnnn {Numbers} {ResetAll} {} {} { +tnum,-tnum, +pnum,-pnum, +onum,-onum, +lnum,-lnum, +zero,-zero, +anum,-anum, } \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Monospaced} {tnum} {tnum} {+pnum,-pnum} \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Proportional} {pnum} {pnum} {+tnum,-tnum} \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Lowercase} {onum} {onum} {+lnum,-lnum} \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Uppercase} {lnum} {lnum} {+onum,-onum} \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {SlashedZero} {zero} {zero} {} \aliasfontfeatureoption {Numbers} {Monospaced} {Tabular} \aliasfontfeatureoption {Numbers} {Lowercase} {OldStyle} \aliasfontfeatureoption {Numbers} {Uppercase} {Lining} \__fontspec_define_opentype_feature_group:n {VerticalPosition} \__fontspec_define_opentype_feature:nnnnn {VerticalPosition} {ResetAll} {} {} { +sups,-sups, +subs,-subs, +ordn,-ordn, +numr,-numr, +dnom,-dnom, +sinf,-sinf, } \__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Superior} {sups} {sups} {+subs,+ordn,+numr,+dnom,+sinf} \__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Inferior} {subs} {subs} {+sups,+ordn,+numr,+dnom,+sinf} \__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Ordinal} {ordn} {ordn} {+sups,+subs,+numr,+dnom,+sinf} \__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Numerator} {numr} {numr} {+sups,+subs,+ordn,+dnom,+sinf} \__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Denominator} {dnom} {dnom} {+sups,+subs,+ordn,+numr,+sinf} \__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {ScientificInferior} {sinf} {sinf} {+sups,+subs,+ordn,+numr,+dnom} \__fontspec_define_opentype_feature_group:n {Contextuals} \__fontspec_define_opentype_feature:nnnnn {Contextuals} {ResetAll} {} {} { +cswh,-cswh, +calt,-calt, +init,-init, +fina,-fina, +falt,-falt, +medi,-medi, } \__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {Swash} {cswh} {cswh} {} \__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {Alternate} {calt} {calt} {} \__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {WordInitial} {init} {init} {} \__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {WordFinal} {fina} {fina} {} \__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {LineFinal} {falt} {falt} {} \__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {Inner} {medi} {medi} {} \__fontspec_define_opentype_feature_group:n {Diacritics} \__fontspec_define_opentype_feature:nnnnn {Diacritics} {ResetAll} {} {} { +mark,-mark, +mkmk,-mkmk, +abvm,-abvm, +blwm,-blwm, } \__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToBase} {mark} {mark} {} \__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToMark} {mkmk} {mkmk} {} \__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {AboveBase} {abvm} {abvm} {} \__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {BelowBase} {blwm} {blwm} {} \__fontspec_define_opentype_feature_group:n {Kerning} \__fontspec_define_opentype_feature:nnnnn {Kerning} {ResetAll} {} {} { +cpsp,-cpsp, +kern,-kern, } \__fontspec_define_opentype_onoffreset:nnnnn {Kerning} {Uppercase} {cpsp} {cpsp} {} \__fontspec_define_opentype_feature:nnnnn {Kerning} {On} {kern} {+kern} {-kern} \__fontspec_define_opentype_feature:nnnnn {Kerning} {Off} {kern} {-kern} {+kern} \__fontspec_define_opentype_feature:nnnnn {Kerning} {Reset} {} {} {+kern,-kern} \__fontspec_define_opentype_feature_group:n {Fractions} \__fontspec_define_opentype_feature:nnnnn {Fractions} {ResetAll} {} {} { +frac,-frac, +afrc,-afrc, } \__fontspec_define_opentype_feature:nnnnn {Fractions} {On} {frac} {+frac} {} \__fontspec_define_opentype_feature:nnnnn {Fractions} {Off} {frac} {-frac} {} \__fontspec_define_opentype_feature:nnnnn {Fractions} {Reset} {} {} {+frac,-frac} \__fontspec_define_opentype_onoffreset:nnnnn {Fractions} {Alternate} {afrc} {afrc} {-frac} \__fontspec_define_opentype_feature_group:n {Style} \__fontspec_define_opentype_feature:nnnnn {Style} {ResetAll} {} {} { +salt,-salt, +ital,-ital, +ruby,-ruby, +swsh,-swsh, +hist,-hist, +titl,-titl, +hkna,-hkna, +vkna,-vkna, +ssty=0,-ssty=0, +ssty=1,-ssty=1, } \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Alternate} {salt} {salt} {} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Italic} {ital} {ital} {} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Ruby} {ruby} {ruby} {} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Swash} {swsh} {swsh} {} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Cursive} {swsh} {curs} {} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Historic} {hist} {hist} {} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {TitlingCaps} {titl} {titl} {} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {HorizontalKana} {hkna} {hkna} {+vkna,+pkna} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {VerticalKana} {vkna} {vkna} {+hkna,+pkna} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {ProportionalKana} {pkna} {pkna} {+vkna,+hkna} \__fontspec_define_opentype_feature:nnnnn {Style} {MathScript} {ssty} {+ssty=0} {+ssty=1} \__fontspec_define_opentype_feature:nnnnn {Style} {MathScriptScript} {ssty} {+ssty=1} {+ssty=0} \__fontspec_define_opentype_feature_group:n {CJKShape} \__fontspec_define_opentype_feature:nnnnn {CJKShape} {ResetAll} {} {} { +trad,-trad, +smpl,-smpl, +jp78,-jp78, +jp83,-jp83, +jp90,-jp90, +jp04,-jp04, +expt,-expt, +nlck,-nlck, } \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {Traditional} {trad} {trad} {+smpl,+jp78,+jp83,+jp90,+jp04,+expt,+nlck} \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {Simplified} {smpl} {smpl} {+trad,+jp78,+jp83,+jp90,+jp04,+expt,+nlck} \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1978} {jp78} {jp78} {+trad,+smpl,+jp83,+jp90,+jp04,+expt,+nlck} \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1983} {jp83} {jp83} {+trad,+smpl,+jp78,+jp90,+jp04,+expt,+nlck} \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1990} {jp90} {jp90} {+trad,+smpl,+jp78,+jp83,+jp04,+expt,+nlck} \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS2004} {jp04} {jp04} {+trad,+smpl,+jp78,+jp83,+jp90,+expt,+nlck} \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {Expert} {expt} {expt} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+nlck} \__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {NLC} {nlck} {nlck} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+expt} \__fontspec_define_opentype_feature_group:n {CharacterWidth} \__fontspec_define_opentype_feature:nnnnn {CharacterWidth} {ResetAll} {} {} { +pwid,-pwid, +fwid,-fwid, +hwid,-hwid, +twid,-twid, +qwid,-qwid, +palt,-palt, +halt,-halt, } \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Proportional} {pwid} {pwid} {+fwid,+hwid,+twid,+qwid,+palt,+halt} \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Full} {fwid} {fwid} {+pwid,+hwid,+twid,+qwid,+palt,+halt} \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Half} {hwid} {hwid} {+pwid,+fwid,+twid,+qwid,+palt,+halt} \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Third} {twid} {twid} {+pwid,+fwid,+hwid,+qwid,+palt,+halt} \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Quarter} {qwid} {qwid} {+pwid,+fwid,+hwid,+twid,+palt,+halt} \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateProportional} {palt} {palt} {+pwid,+fwid,+hwid,+twid,+qwid,+halt} \__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateHalf} {halt} {halt} {+pwid,+fwid,+hwid,+twid,+qwid,+palt} \__fontspec_define_opentype_feature_group:n {Vertical} \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {RotatedGlyphs} {vrt2} {vrt2} {+vrtr,+vert} \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {AlternatesForRotation} {vrtr} {vrtr} {+vrt2} \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {Alternates} {vert} {vert} {+vrt2} \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {KanaAlternates} {vkna} {vkna} {+hkna} \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {Kerning} {vkrn} {vkrn} {} \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {AlternateMetrics} {valt} {valt} {+vhal,+vpal,+kern} \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {HalfMetrics} {vhal} {vhal} {+valt,+vpal,+kern} \__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {ProportionalMetrics} {vpal} {vpal} {+valt,+vhal} \__fontspec_define_opentype_feature_group:n {Alternate} \keys_define:nn {fontspec-opentype} { Alternate .default:n = {0} , Alternate / unknown .code:n = { \clist_map_inline:nn {#1} { \__fontspec_make_OT_feature:nnn {salt}{ +salt = ##1 }{} } } } \aliasfontfeature{Alternate}{StylisticAlternates} \__fontspec_define_opentype_feature_group:n {Variant} \keys_define:nn {fontspec-opentype} { Variant .default:n = {0} , Variant / unknown .code:n = { \clist_map_inline:nn {#1} { \__fontspec_make_OT_feature:xxx { ss \two@digits {##1} } { +ss \two@digits {##1} } {} } } } \aliasfontfeature{Variant}{StylisticSet} \__fontspec_define_opentype_feature_group:n {CharacterVariant} \use:x { \cs_new:Npn \exp_not:N \fontspec_parse_cv:w ##1 \c_colon_str ##2 \c_colon_str ##3 \exp_not:N \q_nil { \__fontspec_make_OT_feature:xxx { cv \exp_not:N \two@digits {##1} } { +cv \exp_not:N \two@digits {##1} = ##2 } {} } \keys_define:nn {fontspec-opentype} { CharacterVariant / unknown .code:n = { \clist_map_inline:nn {##1} { \exp_not:N \fontspec_parse_cv:w ####1 \c_colon_str 0 \c_colon_str \exp_not:N \q_nil } } } } \__fontspec_define_opentype_feature_group:n {Annotation} \keys_define:nn {fontspec-opentype} { Annotation .default:n = {0} , Annotation / unknown .code:n = { \__fontspec_make_OT_feature:nnn {nalt} {+nalt=#1} {} } } \__fontspec_define_opentype_feature_group:n {Ornament} \keys_define:nn {fontspec-opentype} { Ornament .default:n = {0} , Ornament / unknown .code:n = { \__fontspec_make_OT_feature:nnn {ornm} { +ornm=#1 } {} } } \keys_define:nn { fontspec-opentype } { Script .choice: } \cs_new:Nn \fontspec_new_script:nn { \keys_define:nn { fontspec-opentype } { Script / #1 .code:n = \bool_set_false:N \l__fontspec_script_exist_bool \clist_map_inline:nn {#2} { \__fontspec_check_script:nTF {####1} { \tl_set:Nn \l_fontspec_script_tl {####1} \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int} \bool_set_true:N \l__fontspec_script_exist_bool \tl_gset:Nx \g__fontspec_single_feat_tl { script=####1 } \clist_map_break: } { } } \bool_if:NF \l__fontspec_script_exist_bool { \str_if_eq:nnTF {#1} {Latin} { \__fontspec_warning:nx {script-not-exist} {#1} } { \__fontspec_check_script:nTF {latn} { \__fontspec_warning:nx {script-not-exist-latn} {#1} \tl_set:Nn \l_fontspec_script_tl {latn} \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int} } { \__fontspec_warning:nx {script-not-exist} {#1} } } } } } \keys_define:nn { fontspec-opentype } { Language .choice: } \cs_new:Nn \fontspec_new_lang:nn { \keys_define:nn { fontspec-opentype } { Language / #1 .code:n = \__fontspec_check_lang:nTF {#2} { \tl_set:Nn \l_fontspec_lang_tl {#2} \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} \tl_gset:Nx \g__fontspec_single_feat_tl { language=#2 } } { \__fontspec_warning:nx {language-not-exist} {#1} \keys_set:nn { fontspec-opentype } { Language = Default } } } } \__fontspec_keys_define_code:nnn {fontspec-opentype}{ Language / Default } { \tl_set:Nn \l_fontspec_lang_tl {DFLT} \int_zero:N \l__fontspec_language_int \tl_gset:Nn \g__fontspec_single_feat_tl { language=DFLT } } \keys_define:nn {fontspec-opentype} { Language / Turkish .code:n = { \__fontspec_check_lang:nTF {TRK} { \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} \tl_set:Nn \l_fontspec_lang_tl {TRK} \tl_gset:Nn \g__fontspec_single_feat_tl { language=TRK } } { \__fontspec_check_lang:nTF {TUR} { \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} \tl_set:Nn \l_fontspec_lang_tl {TUR} \tl_gset:Nn \g__fontspec_single_feat_tl { language=TUR } } { \__fontspec_warning:nx {language-not-exist} {Turkish} \keys_set:nn {fontspec-opentype} {Language=Default} } } } } \cs_new:Nn \__fontspec_ot_compat:nn { \aliasfontfeatureoption {#1} {#2Off} {No#2} } \__fontspec_ot_compat:nn {Ligatures} {Rare} \__fontspec_ot_compat:nn {Ligatures} {Required} \__fontspec_ot_compat:nn {Ligatures} {Common} \__fontspec_ot_compat:nn {Ligatures} {Discretionary} \__fontspec_ot_compat:nn {Ligatures} {Contextual} \__fontspec_ot_compat:nn {Ligatures} {Historic} \__fontspec_ot_compat:nn {Numbers} {SlashedZero} \__fontspec_ot_compat:nn {Contextuals} {Swash} \__fontspec_ot_compat:nn {Contextuals} {Alternate} \__fontspec_ot_compat:nn {Contextuals} {WordInitial} \__fontspec_ot_compat:nn {Contextuals} {WordFinal} \__fontspec_ot_compat:nn {Contextuals} {LineFinal} \__fontspec_ot_compat:nn {Contextuals} {Inner} \__fontspec_ot_compat:nn {Diacritics} {MarkToBase} \__fontspec_ot_compat:nn {Diacritics} {MarkToMark} \__fontspec_ot_compat:nn {Diacritics} {AboveBase} \__fontspec_ot_compat:nn {Diacritics} {BelowBase} \newfontscript{Adlam}{adlm} \newfontscript{Ahom}{ahom} \newfontscript{Anatolian~Hieroglyphs}{hluw} \newfontscript{Arabic}{arab} \newfontscript{Armenian}{armn} \newfontscript{Avestan}{avst} \newfontscript{Balinese}{bali} \newfontscript{Bamum}{bamu} \newfontscript{Bassa~Vah}{bass} \newfontscript{Batak}{batk} \newfontscript{Bengali}{bng2,beng} \newfontscript{Bhaiksuki}{bhks} \newfontscript{Bopomofo}{bopo} \newfontscript{Brahmi}{brah} \newfontscript{Braille}{brai} \newfontscript{Buginese}{bugi} \newfontscript{Buhid}{buhd} \newfontscript{Byzantine~Music}{byzm} \newfontscript{Canadian~Syllabics}{cans} \newfontscript{Carian}{cari} \newfontscript{Caucasian~Albanian}{aghb} \newfontscript{Chakma}{cakm} \newfontscript{Cham}{cham} \newfontscript{Cherokee}{cher} \newfontscript{CJK~Ideographic}{hani} \newfontscript{Coptic}{copt} \newfontscript{Cypriot~Syllabary}{cprt} \newfontscript{Cyrillic}{cyrl} \newfontscript{Default}{DFLT} \newfontscript{Deseret}{dsrt} \newfontscript{Devanagari}{dev2,deva} \newfontscript{Duployan}{dupl} \newfontscript{Egyptian~Hieroglyphs}{egyp} \newfontscript{Elbasan}{elba} \newfontscript{Ethiopic}{ethi} \newfontscript{Georgian}{geor} \newfontscript{Glagolitic}{glag} \newfontscript{Gothic}{goth} \newfontscript{Grantha}{gran} \newfontscript{Greek}{grek} \newfontscript{Gujarati}{gjr2,gujr} \newfontscript{Gurmukhi}{gur2,guru} \newfontscript{Hangul~Jamo}{jamo} \newfontscript{Hangul}{hang} \newfontscript{Hanunoo}{hano} \newfontscript{Hatran}{hatr} \newfontscript{Hebrew}{hebr} \newfontscript{Hiragana~and~Katakana}{kana} \newfontscript{Imperial~Aramaic}{armi} \newfontscript{Inscriptional~Pahlavi}{phli} \newfontscript{Inscriptional~Parthian}{prti} \newfontscript{Javanese}{java} \newfontscript{Kaithi}{kthi} \newfontscript{Kannada}{knd2,knda} \newfontscript{Kayah~Li}{kali} \newfontscript{Kharosthi}{khar} \newfontscript{Khmer}{khmr} \newfontscript{Khojki}{khoj} \newfontscript{Khudawadi}{sind} \newfontscript{Lao}{lao~} \newfontscript{Latin}{latn} \newfontscript{Lepcha}{lepc} \newfontscript{Limbu}{limb} \newfontscript{Linear~A}{lina} \newfontscript{Linear~B}{linb} \newfontscript{Lisu}{lisu} \newfontscript{Lycian}{lyci} \newfontscript{Lydian}{lydi} \newfontscript{Mahajani}{mahj} \newfontscript{Malayalam}{mlm2,mlym} \newfontscript{Mandaic}{mand} \newfontscript{Manichaean}{mani} \newfontscript{Marchen}{marc} \newfontscript{Math}{math} \newfontscript{Meitei~Mayek}{mtei} \newfontscript{Mende~Kikakui}{mend} \newfontscript{Meroitic~Cursive}{merc} \newfontscript{Meroitic~Hieroglyphs}{mero} \newfontscript{Miao}{plrd} \newfontscript{Modi}{modi} \newfontscript{Mongolian}{mong} \newfontscript{Mro}{mroo} \newfontscript{Multani}{mult} \newfontscript{Musical~Symbols}{musc} \newfontscript{Myanmar}{mym2,mymr} \newfontscript{N'Ko}{nko~} \newfontscript{Nabataean}{nbat} \newfontscript{Newa}{newa} \newfontscript{Odia}{ory2,orya} \newfontscript{Ogham}{ogam} \newfontscript{Ol~Chiki}{olck} \newfontscript{Old~Italic}{ital} \newfontscript{Old~Hungarian}{hung} \newfontscript{Old~North~Arabian}{narb} \newfontscript{Old~Permic}{perm} \newfontscript{Old~Persian~Cuneiform}{xpeo} \newfontscript{Old~South~Arabian}{sarb} \newfontscript{Old~Turkic}{orkh} \newfontscript{Osage}{osge} \newfontscript{Osmanya}{osma} \newfontscript{Pahawh~Hmong}{hmng} \newfontscript{Palmyrene}{palm} \newfontscript{Pau~Cin~Hau}{pauc} \newfontscript{Phags-pa}{phag} \newfontscript{Phoenician}{phnx} \newfontscript{Psalter~Pahlavi}{phlp} \newfontscript{Rejang}{rjng} \newfontscript{Runic}{runr} \newfontscript{Samaritan}{samr} \newfontscript{Saurashtra}{saur} \newfontscript{Sharada}{shrd} \newfontscript{Shavian}{shaw} \newfontscript{Siddham}{sidd} \newfontscript{Sign~Writing}{sgnw} \newfontscript{Sinhala}{sinh} \newfontscript{Sora~Sompeng}{sora} \newfontscript{Sumero-Akkadian~Cuneiform}{xsux} \newfontscript{Sundanese}{sund} \newfontscript{Syloti~Nagri}{sylo} \newfontscript{Syriac}{syrc} \newfontscript{Tagalog}{tglg} \newfontscript{Tagbanwa}{tagb} \newfontscript{Tai~Le}{tale} \newfontscript{Tai~Lu}{talu} \newfontscript{Tai~Tham}{lana} \newfontscript{Tai~Viet}{tavt} \newfontscript{Takri}{takr} \newfontscript{Tamil}{tml2,taml} \newfontscript{Tangut}{tang} \newfontscript{Telugu}{tel2,telu} \newfontscript{Thaana}{thaa} \newfontscript{Thai}{thai} \newfontscript{Tibetan}{tibt} \newfontscript{Tifinagh}{tfng} \newfontscript{Tirhuta}{tirh} \newfontscript{Ugaritic~Cuneiform}{ugar} \newfontscript{Vai}{vai~} \newfontscript{Warang~Citi}{wara} \newfontscript{Yi}{yi~~} \newfontscript{CJK}{hani} \newfontscript{Kana}{kana} \newfontscript{Maths}{math} \newfontscript{N'ko}{nko~} \newfontscript{Oriya}{ory2,orya} \newfontlanguage{Abaza}{ABA} \newfontlanguage{Abkhazian}{ABK} \newfontlanguage{Adyghe}{ADY} \newfontlanguage{Afrikaans}{AFK} \newfontlanguage{Afar}{AFR} \newfontlanguage{Agaw}{AGW} \newfontlanguage{Altai}{ALT} \newfontlanguage{Amharic}{AMH} \newfontlanguage{Arabic}{ARA} \newfontlanguage{Aari}{ARI} \newfontlanguage{Arakanese}{ARK} \newfontlanguage{Assamese}{ASM} \newfontlanguage{Athapaskan}{ATH} \newfontlanguage{Avar}{AVR} \newfontlanguage{Awadhi}{AWA} \newfontlanguage{Aymara}{AYM} \newfontlanguage{Azeri}{AZE} \newfontlanguage{Badaga}{BAD} \newfontlanguage{Baghelkhandi}{BAG} \newfontlanguage{Balkar}{BAL} \newfontlanguage{Baule}{BAU} \newfontlanguage{Berber}{BBR} \newfontlanguage{Bench}{BCH} \newfontlanguage{Bible~Cree}{BCR} \newfontlanguage{Belarussian}{BEL} \newfontlanguage{Bemba}{BEM} \newfontlanguage{Bengali}{BEN} \newfontlanguage{Bulgarian}{BGR} \newfontlanguage{Bhili}{BHI} \newfontlanguage{Bhojpuri}{BHO} \newfontlanguage{Bikol}{BIK} \newfontlanguage{Bilen}{BIL} \newfontlanguage{Blackfoot}{BKF} \newfontlanguage{Balochi}{BLI} \newfontlanguage{Balante}{BLN} \newfontlanguage{Balti}{BLT} \newfontlanguage{Bambara}{BMB} \newfontlanguage{Bamileke}{BML} \newfontlanguage{Breton}{BRE} \newfontlanguage{Brahui}{BRH} \newfontlanguage{Braj~Bhasha}{BRI} \newfontlanguage{Burmese}{BRM} \newfontlanguage{Bashkir}{BSH} \newfontlanguage{Beti}{BTI} \newfontlanguage{Catalan}{CAT} \newfontlanguage{Cebuano}{CEB} \newfontlanguage{Chechen}{CHE} \newfontlanguage{Chaha~Gurage}{CHG} \newfontlanguage{Chattisgarhi}{CHH} \newfontlanguage{Chichewa}{CHI} \newfontlanguage{Chukchi}{CHK} \newfontlanguage{Chipewyan}{CHP} \newfontlanguage{Cherokee}{CHR} \newfontlanguage{Chuvash}{CHU} \newfontlanguage{Comorian}{CMR} \newfontlanguage{Coptic}{COP} \newfontlanguage{Cree}{CRE} \newfontlanguage{Carrier}{CRR} \newfontlanguage{Crimean~Tatar}{CRT} \newfontlanguage{Church~Slavonic}{CSL} \newfontlanguage{Czech}{CSY} \newfontlanguage{Danish}{DAN} \newfontlanguage{Dargwa}{DAR} \newfontlanguage{Woods~Cree}{DCR} \newfontlanguage{German}{DEU} \newfontlanguage{Dogri}{DGR} \newfontlanguage{Divehi}{DIV} \newfontlanguage{Djerma}{DJR} \newfontlanguage{Dangme}{DNG} \newfontlanguage{Dinka}{DNK} \newfontlanguage{Dungan}{DUN} \newfontlanguage{Dzongkha}{DZN} \newfontlanguage{Ebira}{EBI} \newfontlanguage{Eastern~Cree}{ECR} \newfontlanguage{Edo}{EDO} \newfontlanguage{Efik}{EFI} \newfontlanguage{Greek}{ELL} \newfontlanguage{English}{ENG} \newfontlanguage{Erzya}{ERZ} \newfontlanguage{Spanish}{ESP} \newfontlanguage{Estonian}{ETI} \newfontlanguage{Basque}{EUQ} \newfontlanguage{Evenki}{EVK} \newfontlanguage{Even}{EVN} \newfontlanguage{Ewe}{EWE} \newfontlanguage{French~Antillean}{FAN} \newfontlanguage{Farsi}{FAR} \newfontlanguage{Parsi}{FAR} \newfontlanguage{Persian}{FAR} \newfontlanguage{Finnish}{FIN} \newfontlanguage{Fijian}{FJI} \newfontlanguage{Flemish}{FLE} \newfontlanguage{Forest~Nenets}{FNE} \newfontlanguage{Fon}{FON} \newfontlanguage{Faroese}{FOS} \newfontlanguage{French}{FRA} \newfontlanguage{Frisian}{FRI} \newfontlanguage{Friulian}{FRL} \newfontlanguage{Futa}{FTA} \newfontlanguage{Fulani}{FUL} \newfontlanguage{Ga}{GAD} \newfontlanguage{Gaelic}{GAE} \newfontlanguage{Gagauz}{GAG} \newfontlanguage{Galician}{GAL} \newfontlanguage{Garshuni}{GAR} \newfontlanguage{Garhwali}{GAW} \newfontlanguage{Ge'ez}{GEZ} \newfontlanguage{Gilyak}{GIL} \newfontlanguage{Gumuz}{GMZ} \newfontlanguage{Gondi}{GON} \newfontlanguage{Greenlandic}{GRN} \newfontlanguage{Garo}{GRO} \newfontlanguage{Guarani}{GUA} \newfontlanguage{Gujarati}{GUJ} \newfontlanguage{Haitian}{HAI} \newfontlanguage{Halam}{HAL} \newfontlanguage{Harauti}{HAR} \newfontlanguage{Hausa}{HAU} \newfontlanguage{Hawaiin}{HAW} \newfontlanguage{Hammer-Banna}{HBN} \newfontlanguage{Hiligaynon}{HIL} \newfontlanguage{Hindi}{HIN} \newfontlanguage{High~Mari}{HMA} \newfontlanguage{Hindko}{HND} \newfontlanguage{Ho}{HO} \newfontlanguage{Harari}{HRI} \newfontlanguage{Croatian}{HRV} \newfontlanguage{Hungarian}{HUN} \newfontlanguage{Armenian}{HYE} \newfontlanguage{Igbo}{IBO} \newfontlanguage{Ijo}{IJO} \newfontlanguage{Ilokano}{ILO} \newfontlanguage{Indonesian}{IND} \newfontlanguage{Ingush}{ING} \newfontlanguage{Inuktitut}{INU} \newfontlanguage{Irish}{IRI} \newfontlanguage{Irish~Traditional}{IRT} \newfontlanguage{Icelandic}{ISL} \newfontlanguage{Inari~Sami}{ISM} \newfontlanguage{Italian}{ITA} \newfontlanguage{Hebrew}{IWR} \newfontlanguage{Javanese}{JAV} \newfontlanguage{Yiddish}{JII} \newfontlanguage{Japanese}{JAN} \newfontlanguage{Judezmo}{JUD} \newfontlanguage{Jula}{JUL} \newfontlanguage{Kabardian}{KAB} \newfontlanguage{Kachchi}{KAC} \newfontlanguage{Kalenjin}{KAL} \newfontlanguage{Kannada}{KAN} \newfontlanguage{Karachay}{KAR} \newfontlanguage{Georgian}{KAT} \newfontlanguage{Kazakh}{KAZ} \newfontlanguage{Kebena}{KEB} \newfontlanguage{Khutsuri~Georgian}{KGE} \newfontlanguage{Khakass}{KHA} \newfontlanguage{Khanty-Kazim}{KHK} \newfontlanguage{Khmer}{KHM} \newfontlanguage{Khanty-Shurishkar}{KHS} \newfontlanguage{Khanty-Vakhi}{KHV} \newfontlanguage{Khowar}{KHW} \newfontlanguage{Kikuyu}{KIK} \newfontlanguage{Kirghiz}{KIR} \newfontlanguage{Kisii}{KIS} \newfontlanguage{Kokni}{KKN} \newfontlanguage{Kalmyk}{KLM} \newfontlanguage{Kamba}{KMB} \newfontlanguage{Kumaoni}{KMN} \newfontlanguage{Komo}{KMO} \newfontlanguage{Komso}{KMS} \newfontlanguage{Kanuri}{KNR} \newfontlanguage{Kodagu}{KOD} \newfontlanguage{Korean~Old~Hangul}{KOH} \newfontlanguage{Konkani}{KOK} \newfontlanguage{Kikongo}{KON} \newfontlanguage{Komi-Permyak}{KOP} \newfontlanguage{Korean}{KOR} \newfontlanguage{Komi-Zyrian}{KOZ} \newfontlanguage{Kpelle}{KPL} \newfontlanguage{Krio}{KRI} \newfontlanguage{Karakalpak}{KRK} \newfontlanguage{Karelian}{KRL} \newfontlanguage{Karaim}{KRM} \newfontlanguage{Karen}{KRN} \newfontlanguage{Koorete}{KRT} \newfontlanguage{Kashmiri}{KSH} \newfontlanguage{Khasi}{KSI} \newfontlanguage{Kildin~Sami}{KSM} \newfontlanguage{Kui}{KUI} \newfontlanguage{Kulvi}{KUL} \newfontlanguage{Kumyk}{KUM} \newfontlanguage{Kurdish}{KUR} \newfontlanguage{Kurukh}{KUU} \newfontlanguage{Kuy}{KUY} \newfontlanguage{Koryak}{KYK} \newfontlanguage{Ladin}{LAD} \newfontlanguage{Lahuli}{LAH} \newfontlanguage{Lak}{LAK} \newfontlanguage{Lambani}{LAM} \newfontlanguage{Lao}{LAO} \newfontlanguage{Latin}{LAT} \newfontlanguage{Laz}{LAZ} \newfontlanguage{L-Cree}{LCR} \newfontlanguage{Ladakhi}{LDK} \newfontlanguage{Lezgi}{LEZ} \newfontlanguage{Lingala}{LIN} \newfontlanguage{Low~Mari}{LMA} \newfontlanguage{Limbu}{LMB} \newfontlanguage{Lomwe}{LMW} \newfontlanguage{Lower~Sorbian}{LSB} \newfontlanguage{Lule~Sami}{LSM} \newfontlanguage{Lithuanian}{LTH} \newfontlanguage{Luba}{LUB} \newfontlanguage{Luganda}{LUG} \newfontlanguage{Luhya}{LUH} \newfontlanguage{Luo}{LUO} \newfontlanguage{Latvian}{LVI} \newfontlanguage{Majang}{MAJ} \newfontlanguage{Makua}{MAK} \newfontlanguage{Malayalam~Traditional}{MAL} \newfontlanguage{Mansi}{MAN} \newfontlanguage{Marathi}{MAR} \newfontlanguage{Marwari}{MAW} \newfontlanguage{Mbundu}{MBN} \newfontlanguage{Manchu}{MCH} \newfontlanguage{Moose~Cree}{MCR} \newfontlanguage{Mende}{MDE} \newfontlanguage{Me'en}{MEN} \newfontlanguage{Mizo}{MIZ} \newfontlanguage{Macedonian}{MKD} \newfontlanguage{Male}{MLE} \newfontlanguage{Malagasy}{MLG} \newfontlanguage{Malinke}{MLN} \newfontlanguage{Malayalam~Reformed}{MLR} \newfontlanguage{Malay}{MLY} \newfontlanguage{Mandinka}{MND} \newfontlanguage{Mongolian}{MNG} \newfontlanguage{Manipuri}{MNI} \newfontlanguage{Maninka}{MNK} \newfontlanguage{Manx~Gaelic}{MNX} \newfontlanguage{Moksha}{MOK} \newfontlanguage{Moldavian}{MOL} \newfontlanguage{Mon}{MON} \newfontlanguage{Moroccan}{MOR} \newfontlanguage{Maori}{MRI} \newfontlanguage{Maithili}{MTH} \newfontlanguage{Maltese}{MTS} \newfontlanguage{Mundari}{MUN} \newfontlanguage{Naga-Assamese}{NAG} \newfontlanguage{Nanai}{NAN} \newfontlanguage{Naskapi}{NAS} \newfontlanguage{N-Cree}{NCR} \newfontlanguage{Ndebele}{NDB} \newfontlanguage{Ndonga}{NDG} \newfontlanguage{Nepali}{NEP} \newfontlanguage{Newari}{NEW} \newfontlanguage{Nagari}{NGR} \newfontlanguage{Norway~House~Cree}{NHC} \newfontlanguage{Nisi}{NIS} \newfontlanguage{Niuean}{NIU} \newfontlanguage{Nkole}{NKL} \newfontlanguage{N'ko}{NKO} \newfontlanguage{Dutch}{NLD} \newfontlanguage{Nogai}{NOG} \newfontlanguage{Norwegian}{NOR} \newfontlanguage{Northern~Sami}{NSM} \newfontlanguage{Northern~Tai}{NTA} \newfontlanguage{Esperanto}{NTO} \newfontlanguage{Nynorsk}{NYN} \newfontlanguage{Oji-Cree}{OCR} \newfontlanguage{Ojibway}{OJB} \newfontlanguage{Oriya}{ORI} \newfontlanguage{Oromo}{ORO} \newfontlanguage{Ossetian}{OSS} \newfontlanguage{Palestinian~Aramaic}{PAA} \newfontlanguage{Pali}{PAL} \newfontlanguage{Punjabi}{PAN} \newfontlanguage{Palpa}{PAP} \newfontlanguage{Pashto}{PAS} \newfontlanguage{Polytonic~Greek}{PGR} \newfontlanguage{Pilipino}{PIL} \newfontlanguage{Palaung}{PLG} \newfontlanguage{Polish}{PLK} \newfontlanguage{Provencal}{PRO} \newfontlanguage{Portuguese}{PTG} \newfontlanguage{Chin}{QIN} \newfontlanguage{Rajasthani}{RAJ} \newfontlanguage{R-Cree}{RCR} \newfontlanguage{Russian~Buriat}{RBU} \newfontlanguage{Riang}{RIA} \newfontlanguage{Rhaeto-Romanic}{RMS} \newfontlanguage{Romanian}{ROM} \newfontlanguage{Romany}{ROY} \newfontlanguage{Rusyn}{RSY} \newfontlanguage{Ruanda}{RUA} \newfontlanguage{Russian}{RUS} \newfontlanguage{Sadri}{SAD} \newfontlanguage{Sanskrit}{SAN} \newfontlanguage{Santali}{SAT} \newfontlanguage{Sayisi}{SAY} \newfontlanguage{Sekota}{SEK} \newfontlanguage{Selkup}{SEL} \newfontlanguage{Sango}{SGO} \newfontlanguage{Shan}{SHN} \newfontlanguage{Sibe}{SIB} \newfontlanguage{Sidamo}{SID} \newfontlanguage{Silte~Gurage}{SIG} \newfontlanguage{Skolt~Sami}{SKS} \newfontlanguage{Slovak}{SKY} \newfontlanguage{Slavey}{SLA} \newfontlanguage{Slovenian}{SLV} \newfontlanguage{Somali}{SML} \newfontlanguage{Samoan}{SMO} \newfontlanguage{Sena}{SNA} \newfontlanguage{Sindhi}{SND} \newfontlanguage{Sinhalese}{SNH} \newfontlanguage{Soninke}{SNK} \newfontlanguage{Sodo~Gurage}{SOG} \newfontlanguage{Sotho}{SOT} \newfontlanguage{Albanian}{SQI} \newfontlanguage{Serbian}{SRB} \newfontlanguage{Saraiki}{SRK} \newfontlanguage{Serer}{SRR} \newfontlanguage{South~Slavey}{SSL} \newfontlanguage{Southern~Sami}{SSM} \newfontlanguage{Suri}{SUR} \newfontlanguage{Svan}{SVA} \newfontlanguage{Swedish}{SVE} \newfontlanguage{Swadaya~Aramaic}{SWA} \newfontlanguage{Swahili}{SWK} \newfontlanguage{Swazi}{SWZ} \newfontlanguage{Sutu}{SXT} \newfontlanguage{Syriac}{SYR} \newfontlanguage{Tabasaran}{TAB} \newfontlanguage{Tajiki}{TAJ} \newfontlanguage{Tamil}{TAM} \newfontlanguage{Tatar}{TAT} \newfontlanguage{TH-Cree}{TCR} \newfontlanguage{Telugu}{TEL} \newfontlanguage{Tongan}{TGN} \newfontlanguage{Tigre}{TGR} \newfontlanguage{Tigrinya}{TGY} \newfontlanguage{Thai}{THA} \newfontlanguage{Tahitian}{THT} \newfontlanguage{Tibetan}{TIB} \newfontlanguage{Turkmen}{TKM} \newfontlanguage{Temne}{TMN} \newfontlanguage{Tswana}{TNA} \newfontlanguage{Tundra~Nenets}{TNE} \newfontlanguage{Tonga}{TNG} \newfontlanguage{Todo}{TOD} \newfontlanguage{Tsonga}{TSG} \newfontlanguage{Turoyo~Aramaic}{TUA} \newfontlanguage{Tulu}{TUL} \newfontlanguage{Tuvin}{TUV} \newfontlanguage{Twi}{TWI} \newfontlanguage{Udmurt}{UDM} \newfontlanguage{Ukrainian}{UKR} \newfontlanguage{Urdu}{URD} \newfontlanguage{Upper~Sorbian}{USB} \newfontlanguage{Uyghur}{UYG} \newfontlanguage{Uzbek}{UZB} \newfontlanguage{Venda}{VEN} \newfontlanguage{Vietnamese}{VIT} \newfontlanguage{Wa}{WA} \newfontlanguage{Wagdi}{WAG} \newfontlanguage{West-Cree}{WCR} \newfontlanguage{Welsh}{WEL} \newfontlanguage{Wolof}{WLF} \newfontlanguage{Tai~Lue}{XBD} \newfontlanguage{Xhosa}{XHS} \newfontlanguage{Yakut}{YAK} \newfontlanguage{Yoruba}{YBA} \newfontlanguage{Y-Cree}{YCR} \newfontlanguage{Yi~Classic}{YIC} \newfontlanguage{Yi~Modern}{YIM} \newfontlanguage{Chinese~Hong~Kong}{ZHH} \newfontlanguage{Chinese~Phonetic}{ZHP} \newfontlanguage{Chinese~Simplified}{ZHS} \newfontlanguage{Chinese~Traditional}{ZHT} \newfontlanguage{Zande}{ZND} \newfontlanguage{Zulu}{ZUL} \__fontspec_define_aat_feature_group:n {Ligatures} \__fontspec_define_aat_feature:nnnn {Ligatures} {Required} {1} {0} \__fontspec_define_aat_feature:nnnn {Ligatures} {NoRequired} {1} {1} \__fontspec_define_aat_feature:nnnn {Ligatures} {Common} {1} {2} \__fontspec_define_aat_feature:nnnn {Ligatures} {NoCommon} {1} {3} \__fontspec_define_aat_feature:nnnn {Ligatures} {Rare} {1} {4} \__fontspec_define_aat_feature:nnnn {Ligatures} {NoRare} {1} {5} \__fontspec_define_aat_feature:nnnn {Ligatures} {Discretionary} {1} {4} \__fontspec_define_aat_feature:nnnn {Ligatures} {NoDiscretionary} {1} {5} \__fontspec_define_aat_feature:nnnn {Ligatures} {Logos} {1} {6} \__fontspec_define_aat_feature:nnnn {Ligatures} {NoLogos} {1} {7} \__fontspec_define_aat_feature:nnnn {Ligatures} {Rebus} {1} {8} \__fontspec_define_aat_feature:nnnn {Ligatures} {NoRebus} {1} {9} \__fontspec_define_aat_feature:nnnn {Ligatures} {Diphthong} {1} {10} \__fontspec_define_aat_feature:nnnn {Ligatures} {NoDiphthong} {1} {11} \__fontspec_define_aat_feature:nnnn {Ligatures} {Squared} {1} {12} \__fontspec_define_aat_feature:nnnn {Ligatures} {NoSquared} {1} {13} \__fontspec_define_aat_feature:nnnn {Ligatures} {AbbrevSquared} {1} {14} \__fontspec_define_aat_feature:nnnn {Ligatures} {NoAbbrevSquared} {1} {15} \__fontspec_define_aat_feature:nnnn {Ligatures} {Icelandic} {1} {32} \__fontspec_define_aat_feature:nnnn {Ligatures} {NoIcelandic} {1} {33} \keys_define:nn {fontspec-aat} { Ligatures / TeX .code:n = { \tl_set:Nn \l__fontspec_mapping_tl { tex-text } } } \__fontspec_define_aat_feature_group:n {Letters} \__fontspec_define_aat_feature:nnnn {Letters} {Normal} {3} {0} \__fontspec_define_aat_feature:nnnn {Letters} {Uppercase} {3} {1} \__fontspec_define_aat_feature:nnnn {Letters} {Lowercase} {3} {2} \__fontspec_define_aat_feature:nnnn {Letters} {SmallCaps} {3} {3} \__fontspec_define_aat_feature:nnnn {Letters} {InitialCaps} {3} {4} \__fontspec_define_aat_feature_group:n {Numbers} \__fontspec_define_aat_feature:nnnn {Numbers} {Monospaced} {6} {0} \__fontspec_define_aat_feature:nnnn {Numbers} {Proportional} {6} {1} \__fontspec_define_aat_feature:nnnn {Numbers} {Lowercase} {21} {0} \__fontspec_define_aat_feature:nnnn {Numbers} {OldStyle} {21} {0} \__fontspec_define_aat_feature:nnnn {Numbers} {Uppercase} {21} {1} \__fontspec_define_aat_feature:nnnn {Numbers} {Lining} {21} {1} \__fontspec_define_aat_feature:nnnn {Numbers} {SlashedZero} {14} {5} \__fontspec_define_aat_feature:nnnn {Numbers} {NoSlashedZero} {14} {4} \__fontspec_define_aat_feature_group:n {Contextuals} \__fontspec_define_aat_feature:nnnn {Contextuals} {WordInitial} {8} {0} \__fontspec_define_aat_feature:nnnn {Contextuals} {NoWordInitial} {8} {1} \__fontspec_define_aat_feature:nnnn {Contextuals} {WordFinal} {8} {2} \__fontspec_define_aat_feature:nnnn {Contextuals} {NoWordFinal} {8} {3} \__fontspec_define_aat_feature:nnnn {Contextuals} {LineInitial} {8} {4} \__fontspec_define_aat_feature:nnnn {Contextuals} {NoLineInitial} {8} {5} \__fontspec_define_aat_feature:nnnn {Contextuals} {LineFinal} {8} {6} \__fontspec_define_aat_feature:nnnn {Contextuals} {NoLineFinal} {8} {7} \__fontspec_define_aat_feature:nnnn {Contextuals} {Inner} {8} {8} \__fontspec_define_aat_feature:nnnn {Contextuals} {NoInner} {8} {9} \__fontspec_define_aat_feature_group:n {Diacritics} \__fontspec_define_aat_feature:nnnn {Diacritics} {Show} {9} {0} \__fontspec_define_aat_feature:nnnn {Diacritics} {Hide} {9} {1} \__fontspec_define_aat_feature:nnnn {Diacritics} {Decompose} {9} {2} \__fontspec_define_aat_feature_group:n {VerticalPosition} \__fontspec_define_aat_feature:nnnn {VerticalPosition} {Normal} {10} {0} \__fontspec_define_aat_feature:nnnn {VerticalPosition} {Superior} {10} {1} \__fontspec_define_aat_feature:nnnn {VerticalPosition} {Inferior} {10} {2} \__fontspec_define_aat_feature:nnnn {VerticalPosition} {Ordinal} {10} {3} \__fontspec_define_aat_feature_group:n {Fractions} \__fontspec_define_aat_feature:nnnn {Fractions} {On} {11} {1} \__fontspec_define_aat_feature:nnnn {Fractions} {Off} {11} {0} \__fontspec_define_aat_feature:nnnn {Fractions} {Diagonal} {11} {2} \__fontspec_define_aat_feature_group:n { Alternate } \keys_define:nn {fontspec-aat} { Alternate .default:n = {0} , Alternate / unknown .code:n = { \clist_map_inline:nn {#1} { \__fontspec_make_AAT_feature:nn {17}{##1} } } } \__fontspec_define_aat_feature_group:n {Variant} \keys_define:nn {fontspec-aat} { Variant .default:n = {0} , Variant / unknown .code:n = { \clist_map_inline:nn {#1} { \__fontspec_make_AAT_feature:nn {18}{##1} } } } \aliasfontfeature{Variant}{StylisticSet} \__fontspec_define_aat_feature_group:n {Vertical} \keys_define:nn {fontspec-aat} { Vertical .choice: , Vertical / RotatedGlyphs .code:n = { \__fontspec_update_featstr:n {vertical} } } \__fontspec_define_aat_feature_group:n {Style} \__fontspec_define_aat_feature:nnnn {Style} {Italic} {32} {2} \__fontspec_define_aat_feature:nnnn {Style} {Ruby} {28} {2} \__fontspec_define_aat_feature:nnnn {Style} {Display} {19} {1} \__fontspec_define_aat_feature:nnnn {Style} {Engraved} {19} {2} \__fontspec_define_aat_feature:nnnn {Style} {TitlingCaps} {19} {4} \__fontspec_define_aat_feature:nnnn {Style} {TallCaps} {19} {5} \__fontspec_define_aat_feature_group:n {CJKShape} \__fontspec_define_aat_feature:nnnn {CJKShape} {Traditional} {20} {0} \__fontspec_define_aat_feature:nnnn {CJKShape} {Simplified} {20} {1} \__fontspec_define_aat_feature:nnnn {CJKShape} {JIS1978} {20} {2} \__fontspec_define_aat_feature:nnnn {CJKShape} {JIS1983} {20} {3} \__fontspec_define_aat_feature:nnnn {CJKShape} {JIS1990} {20} {4} \__fontspec_define_aat_feature:nnnn {CJKShape} {Expert} {20} {10} \__fontspec_define_aat_feature:nnnn {CJKShape} {NLC} {20} {13} \__fontspec_define_aat_feature_group:n {CharacterWidth} \__fontspec_define_aat_feature:nnnn {CharacterWidth} {Proportional} {22} {0} \__fontspec_define_aat_feature:nnnn {CharacterWidth} {Full} {22} {1} \__fontspec_define_aat_feature:nnnn {CharacterWidth} {Half} {22} {2} \__fontspec_define_aat_feature:nnnn {CharacterWidth} {Third} {22} {3} \__fontspec_define_aat_feature:nnnn {CharacterWidth} {Quarter} {22} {4} \__fontspec_define_aat_feature:nnnn {CharacterWidth} {AlternateProportional} {22} {5} \__fontspec_define_aat_feature:nnnn {CharacterWidth} {AlternateHalf} {22} {6} \__fontspec_define_aat_feature:nnnn {CharacterWidth} {Default} {22} {7} \__fontspec_define_aat_feature_group:n {Annotation} \__fontspec_define_aat_feature:nnnn {Annotation} {Off} {24} {0} \__fontspec_define_aat_feature:nnnn {Annotation} {Box} {24} {1} \__fontspec_define_aat_feature:nnnn {Annotation} {RoundedBox} {24} {2} \__fontspec_define_aat_feature:nnnn {Annotation} {Circle} {24} {3} \__fontspec_define_aat_feature:nnnn {Annotation} {BlackCircle} {24} {4} \__fontspec_define_aat_feature:nnnn {Annotation} {Parenthesis} {24} {5} \__fontspec_define_aat_feature:nnnn {Annotation} {Period} {24} {6} \__fontspec_define_aat_feature:nnnn {Annotation} {RomanNumerals} {24} {7} \__fontspec_define_aat_feature:nnnn {Annotation} {Diamond} {24} {8} \__fontspec_define_aat_feature:nnnn {Annotation} {BlackSquare} {24} {9} \__fontspec_define_aat_feature:nnnn {Annotation} {BlackRoundSquare} {24} {10} \__fontspec_define_aat_feature:nnnn {Annotation} {DoubleCircle} {24} {11} \providecommand\UnicodeFontFile[2]{"[#1]:#2"} \providecommand\UnicodeFontName[2]{"#1:#2"} \providecommand\UnicodeFontTeXLigatures{mapping=tex-text;} \providecommand\add@unicode@accent[2]{#2\char#1\relax} \providecommand\DeclareUnicodeAccent[3]{% \DeclareTextCommand{#1}{#2}{\add@unicode@accent{#3}}% } \DeclareDocumentCommand \EncodingCommand {mO{}m} { \bool_if:NF \l__fontspec_defining_encoding_bool { \__fontspec_error:nn {only-inside-encdef} \EncodingCommand } \DeclareTextCommand{#1}{\UnicodeEncodingName}[#2]{#3} } \DeclareDocumentCommand \EncodingAccent {mm} { \bool_if:NF \l__fontspec_defining_encoding_bool { \__fontspec_error:nn {only-inside-encdef} \EncodingAccent } \DeclareTextCommand{#1}{\UnicodeEncodingName}{\add@unicode@accent{#2}} } \DeclareDocumentCommand \EncodingSymbol {mm} { \bool_if:NF \l__fontspec_defining_encoding_bool { \__fontspec_error:nn {only-inside-encdef} \EncodingSymbol } \DeclareTextSymbol{#1}{\UnicodeEncodingName}{#2} } \DeclareDocumentCommand \EncodingComposite {mmm} { \bool_if:NF \l__fontspec_defining_encoding_bool { \__fontspec_error:nn {only-inside-encdef} \EncodingComposite } \DeclareTextComposite{#1}{\UnicodeEncodingName}{#2}{#3} } \DeclareDocumentCommand \EncodingCompositeCommand {mmm} { \bool_if:NF \l__fontspec_defining_encoding_bool { \__fontspec_error:nn {only-inside-encdef} \EncodingCompositeCommand } \DeclareTextCompositeCommand{#1}{\UnicodeEncodingName}{#2}{#3} } \DeclareDocumentCommand \DeclareUnicodeEncoding {mm} { \DeclareFontEncoding{#1}{}{} \DeclareErrorFont{#1}{lmr}{m}{n}{10} \DeclareFontSubstitution{#1}{lmr}{m}{n} \DeclareFontFamily{#1}{lmr}{} \DeclareFontShape{#1}{lmr}{m}{n} {<->\UnicodeFontFile{lmroman10-regular}{\UnicodeFontTeXLigatures}}{} \DeclareFontShape{#1}{lmr}{m}{it} {<->\UnicodeFontFile{lmroman10-italic}{\UnicodeFontTeXLigatures}}{} \DeclareFontShape{#1}{lmr}{m}{sc} {<->\UnicodeFontFile{lmromancaps10-regular}{\UnicodeFontTeXLigatures}}{} \DeclareFontShape{#1}{lmr}{bx}{n} {<->\UnicodeFontFile{lmroman10-bold}{\UnicodeFontTeXLigatures}}{} \DeclareFontShape{#1}{lmr}{bx}{it} {<->\UnicodeFontFile{lmroman10-bolditalic}{\UnicodeFontTeXLigatures}}{} \tl_set_eq:NN \l__fontspec_prev_unicode_name_tl \UnicodeEncodingName \tl_set:Nn \UnicodeEncodingName {#1} \bool_set_true:N \l__fontspec_defining_encoding_bool #2 \bool_set_false:N \l__fontspec_defining_encoding_bool \tl_set_eq:NN \UnicodeEncodingName \l__fontspec_prev_unicode_name_tl } \DeclareDocumentCommand \UndeclareSymbol {m} { \bool_if:NF \l__fontspec_defining_encoding_bool { \__fontspec_error:nn {only-inside-encdef} \UndeclareSymbol } \UndeclareTextCommand {#1} {\UnicodeEncodingName} } \DeclareDocumentCommand \UndeclareComposite {mm} { \bool_if:NF \l__fontspec_defining_encoding_bool { \__fontspec_error:nn {only-inside-encdef} \UndeclareComposite } \cs_undefine:c { \c_backslash_str \UnicodeEncodingName \token_to_str:N #1 - \tl_to_str:n {#2} } } \@ifpackageloaded{euler} { \bool_set_true:N \g__fontspec_pkg_euler_loaded_bool } { \bool_set_false:N \g__fontspec_pkg_euler_loaded_bool } \cs_set:Nn \fontspec_setup_maths: { \@ifpackageloaded{euler} { \bool_if:NTF \g__fontspec_pkg_euler_loaded_bool { \bool_set_true:N \g__fontspec_math_euler_bool } { \__fontspec_error:n {euler-too-late} } } {} \@ifpackageloaded{lucbmath}{\bool_set_true:N \g__fontspec_math_lucida_bool}{} \@ifpackageloaded{lucidabr}{\bool_set_true:N \g__fontspec_math_lucida_bool}{} \@ifpackageloaded{lucimatx}{\bool_set_true:N \g__fontspec_math_lucida_bool}{} \DeclareSymbolFont{legacymaths}{OT1}{cmr}{m}{n} \SetSymbolFont{legacymaths}{bold}{OT1}{cmr}{bx}{n} \DeclareMathAccent{\acute} {\mathalpha}{legacymaths}{19} \DeclareMathAccent{\grave} {\mathalpha}{legacymaths}{18} \DeclareMathAccent{\ddot} {\mathalpha}{legacymaths}{127} \DeclareMathAccent{\tilde} {\mathalpha}{legacymaths}{126} \DeclareMathAccent{\bar} {\mathalpha}{legacymaths}{22} \DeclareMathAccent{\breve} {\mathalpha}{legacymaths}{21} \DeclareMathAccent{\check} {\mathalpha}{legacymaths}{20} \DeclareMathAccent{\hat} {\mathalpha}{legacymaths}{94} % too bad, euler \DeclareMathAccent{\dot} {\mathalpha}{legacymaths}{95} \DeclareMathAccent{\mathring}{\mathalpha}{legacymaths}{23} \group_begin: \mathchardef\@tempa="603A \relax \ifx\colon\@tempa \DeclareMathSymbol{\colon}{\mathpunct}{legacymaths}{58} \fi \group_end: \bool_if:NF \g__fontspec_math_euler_bool { \DeclareMathSymbol{!}{\mathclose}{legacymaths}{33} \DeclareMathSymbol{:}{\mathrel} {legacymaths}{58} \DeclareMathSymbol{;}{\mathpunct}{legacymaths}{59} \DeclareMathSymbol{?}{\mathclose}{legacymaths}{63} \bool_if:NF \g__fontspec_math_lucida_bool { \DeclareMathSymbol{0}{\mathalpha}{legacymaths}{`0} \DeclareMathSymbol{1}{\mathalpha}{legacymaths}{`1} \DeclareMathSymbol{2}{\mathalpha}{legacymaths}{`2} \DeclareMathSymbol{3}{\mathalpha}{legacymaths}{`3} \DeclareMathSymbol{4}{\mathalpha}{legacymaths}{`4} \DeclareMathSymbol{5}{\mathalpha}{legacymaths}{`5} \DeclareMathSymbol{6}{\mathalpha}{legacymaths}{`6} \DeclareMathSymbol{7}{\mathalpha}{legacymaths}{`7} \DeclareMathSymbol{8}{\mathalpha}{legacymaths}{`8} \DeclareMathSymbol{9}{\mathalpha}{legacymaths}{`9} \DeclareMathSymbol{\Gamma}{\mathalpha}{legacymaths}{0} \DeclareMathSymbol{\Delta}{\mathalpha}{legacymaths}{1} \DeclareMathSymbol{\Theta}{\mathalpha}{legacymaths}{2} \DeclareMathSymbol{\Lambda}{\mathalpha}{legacymaths}{3} \DeclareMathSymbol{\Xi}{\mathalpha}{legacymaths}{4} \DeclareMathSymbol{\Pi}{\mathalpha}{legacymaths}{5} \DeclareMathSymbol{\Sigma}{\mathalpha}{legacymaths}{6} \DeclareMathSymbol{\Upsilon}{\mathalpha}{legacymaths}{7} \DeclareMathSymbol{\Phi}{\mathalpha}{legacymaths}{8} \DeclareMathSymbol{\Psi}{\mathalpha}{legacymaths}{9} \DeclareMathSymbol{\Omega}{\mathalpha}{legacymaths}{10} \DeclareMathSymbol{+}{\mathbin}{legacymaths}{43} \DeclareMathSymbol{=}{\mathrel}{legacymaths}{61} \DeclareMathDelimiter{(}{\mathopen} {legacymaths}{40}{largesymbols}{0} \DeclareMathDelimiter{)}{\mathclose}{legacymaths}{41}{largesymbols}{1} \DeclareMathDelimiter{[}{\mathopen} {legacymaths}{91}{largesymbols}{2} \DeclareMathDelimiter{]}{\mathclose}{legacymaths}{93}{largesymbols}{3} \DeclareMathDelimiter{/}{\mathord}{legacymaths}{47}{largesymbols}{14} \DeclareMathSymbol{\mathdollar}{\mathord}{legacymaths}{36} } } \DeclareSymbolFont{operators}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\updefault \SetSymbolFont{operators}{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\updefault \DeclareSymbolFontAlphabet\mathrm{operators} \SetMathAlphabet\mathit{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\itdefault \SetMathAlphabet\mathbf{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\updefault \SetMathAlphabet\mathsf{normal}\g_fontspec_encoding_tl\g__fontspec_mathsf_tl\mddefault\updefault \SetMathAlphabet\mathtt{normal}\g_fontspec_encoding_tl\g__fontspec_mathtt_tl\mddefault\updefault \SetSymbolFont{operators}{bold}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\updefault \tl_if_empty:NTF \g__fontspec_bfmathrm_tl { \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\itdefault } { \SetMathAlphabet\mathrm{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\mddefault\updefault \SetMathAlphabet\mathbf{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\bfdefault\updefault \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\mddefault\itdefault } \SetMathAlphabet\mathsf{bold}\g_fontspec_encoding_tl\g__fontspec_mathsf_tl\bfdefault\updefault \SetMathAlphabet\mathtt{bold}\g_fontspec_encoding_tl\g__fontspec_mathtt_tl\bfdefault\updefault } \cs_new:Nn \fontspec_maybe_setup_maths: { \@ifpackageloaded{anttor} { \ifx\define@antt@mathversions a\bool_set_false:N \g__fontspec_math_bool\fi }{} \@ifpackageloaded{arevmath}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{eulervm}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{mathdesign}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{concmath}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{cmbright}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{mathesf}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{gfsartemisia}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{gfsneohellenic}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{iwona} { \ifx\define@iwona@mathversions a\bool_set_false:N \g__fontspec_math_bool\fi }{} \@ifpackageloaded{kpfonts}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{kmath}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{kurier} { \ifx\define@kurier@mathversions a\bool_set_false:N \g__fontspec_math_bool\fi }{} \@ifpackageloaded{fouriernc}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{fourier}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{lmodern}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{mathpazo}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{mathptmx}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{MinionPro}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{unicode-math}{\bool_set_false:N \g__fontspec_math_bool}{} \@ifpackageloaded{breqn}{\bool_set_false:N \g__fontspec_math_bool}{} \bool_if:NT \g__fontspec_math_bool { \__fontspec_info:n {setup-math} \fontspec_setup_maths: } } \AtBeginDocument{\fontspec_maybe_setup_maths:} \tl_set:Nn \zf@enc { \g_fontspec_encoding_tl } \cs_set:Npn \zf@fontspec #1 #2 { \__fontspec_select_font_family:nn {#1} {#2} \tl_set:Nn \zf@family { \l_fontspec_family_tl } \tl_set:Nn \zf@basefont { \l_fontspec_font } } \bool_if:NT \g__fontspec_cfg_bool { \InputIfFileExists{fontspec.cfg} {} {\typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.}} } \providecommand*\itscdefault{\itdefault\scdefault} \providecommand*\slscdefault{\sldefault\scdefault} \DeclareRobustCommand{\sishape} { \not@math@alphabet\sishape\relax \fontshape{\itscdefault}\selectfont } \DeclareTextFontCommand{\textsi}{\sishape} \cs_new:Nn \__fontspec_shape_merge:nn { c__fontspec_shape_#1_#2_tl } \tl_const:cn { \__fontspec_shape_merge:nn \itdefault \scdefault } {\itscdefault} \tl_const:cn { \__fontspec_shape_merge:nn \sldefault \scdefault } {\slscdefault} \tl_const:cn { \__fontspec_shape_merge:nn \scdefault \itdefault } {\itscdefault} \tl_const:cn { \__fontspec_shape_merge:nn \scdefault \sldefault } {\slscdefault} \tl_const:cn { \__fontspec_shape_merge:nn \slscdefault \itdefault } {\itscdefault} \tl_const:cn { \__fontspec_shape_merge:nn \itscdefault \sldefault } {\slscdefault} \tl_const:cn { \__fontspec_shape_merge:nn \itscdefault \updefault } {\scdefault} \tl_const:cn { \__fontspec_shape_merge:nn \slscdefault \updefault } {\scdefault} \cs_new:Nn \fontspec_merge_shape:n { \__fontspec_if_merge_shape:nTF {#1} { \fontshape { \tl_use:c { \__fontspec_shape_merge:nn {\f@shape} {#1} } } \selectfont } { \fontshape {#1} \selectfont } } \prg_new_conditional:Nnn \__fontspec_if_merge_shape:n {TF} { \bool_lazy_and:nnTF { \tl_if_exist_p:c { \__fontspec_shape_merge:nn {\f@shape} {#1} } } { \cs_if_exist_p:c { \f@encoding/\f@family/\f@series/ \tl_use:c { \__fontspec_shape_merge:nn {\f@shape} {#1} } } } \prg_return_true: \prg_return_false: } \DeclareRobustCommand \itshape { \not@math@alphabet\itshape\mathit \fontspec_merge_shape:n\itdefault } \DeclareRobustCommand \slshape { \not@math@alphabet\slshape\relax \fontspec_merge_shape:n\sldefault } \DeclareRobustCommand \scshape { \not@math@alphabet\scshape\relax \fontspec_merge_shape:n\scdefault } \DeclareRobustCommand \upshape { \not@math@alphabet\upshape\relax \fontspec_merge_shape:n\updefault } \cs_new_protected:Npn \emfontdeclare #1 { \prop_clear:N \g__fontspec_em_prop \int_zero:N \l__fontspec_emdef_int \bool_set_true:N \g__fontspec_em_normalise_slant_bool \tl_if_in:nnT {#1} {\slshape} { \tl_if_in:nnT {#1} {\itshape} { \bool_set_false:N \g__fontspec_em_normalise_slant_bool } } \group_begin: \normalfont \clist_map_inline:nn {\emreset,#1} { ##1 \prop_gput_if_new:NxV \g__fontspec_em_prop { \f@shape } { \l__fontspec_emdef_int } \prop_gput:Nxn \g__fontspec_em_prop { switch-\int_use:N \l__fontspec_emdef_int } { ##1 } \int_incr:N \l__fontspec_emdef_int } \group_end: } \DeclareRobustCommand \em { \@nomath\em \tl_set:Nx \l__fontspec_emshape_query_tl { \f@shape } \bool_if:NT \g__fontspec_em_normalise_slant_bool { \tl_replace_all:Nnn \l__fontspec_emshape_query_tl {/sl} {/it} } \prop_get:NxNT \g__fontspec_em_prop { \l__fontspec_emshape_query_tl } \l__fontspec_em_tmp_tl { \int_set:Nn \l__fontspec_em_int { \l__fontspec_em_tmp_tl } } \int_incr:N \l__fontspec_em_int \prop_get:NxNTF \g__fontspec_em_prop { switch-\int_use:N \l__fontspec_em_int } \l__fontspec_em_switch_tl { \l__fontspec_em_switch_tl } { \int_zero:N \l__fontspec_em_int \emreset } } \DeclareTextFontCommand{\emph}{\em} \cs_set:Npn \emreset { \upshape } \cs_set:Npn \emshape { \itshape } \cs_set:Npn \eminnershape { \upshape } \cs_new_protected:Npn \strongfontdeclare #1 { \prop_clear:N \g__fontspec_strong_prop \int_zero:N \l__fontspec_strongdef_int \group_begin: \normalfont \clist_map_inline:nn {\strongreset,#1} { ##1 \prop_gput_if_new:NxV \g__fontspec_strong_prop { \f@series } { \l__fontspec_strongdef_int } \prop_gput:Nxn \g__fontspec_strong_prop { switch-\int_use:N \l__fontspec_strongdef_int } { ##1 } \int_incr:N \l__fontspec_strongdef_int } \group_end: } \DeclareRobustCommand \strongenv { \@nomath\strongenv \prop_get:NxNT \g__fontspec_strong_prop { \f@series } \l__fontspec_strong_tmp_tl { \int_set:Nn \l__fontspec_strong_int { \l__fontspec_strong_tmp_tl } } \int_incr:N \l__fontspec_strong_int \prop_get:NxNTF \g__fontspec_strong_prop { switch-\int_use:N \l__fontspec_strong_int } \l__fontspec_strong_switch_tl { \l__fontspec_strong_switch_tl } { \int_zero:N \l__fontspec_strong_int \strongreset } } \DeclareTextFontCommand{\strong}{\strongenv} \cs_set:Npn \strongreset {} \cs_set:Npn \reset@font { \normalfont \int_zero:N \l__fontspec_em_int \int_zero:N \l__fontspec_strong_int } \cs_new:Nn \fontspec_set_em_level:n { \int_set:Nn \l__fontspec_em_int {#1} } \cs_new:Nn \fontspec_set_strong_level:n { \int_set:Nn \l__fontspec_strong_int {#1} } \strongfontdeclare{ \bfseries } \emfontdeclare{ \emshape, \eminnershape } \DeclareRobustCommand{\-} { \discretionary { \char\ifnum\hyphenchar\font<\z@ \xlx@defaulthyphenchar \else \hyphenchar\font \fi }{}{} } \def\xlx@defaulthyphenchar{`\-} \cs_new:Nn \fontspec_visible_space: { \__fontspec_primitive_font_glyph_if_exist:NnTF \font {"2423} { \char"2423\scan_stop: } { \fontspec_visible_space_fallback: } } \cs_new:Nn \fontspec_visible_space_fallback: { { \usefont{\g_fontspec_encoding_tl}{lmtt}{\f@series}{\f@shape} \textvisiblespace } } \group_begin: \char_set_catcode_active:n{"20}% \cs_gset:Npn\fontspec_print_visible_spaces:{% \char_set_catcode_active:n{"20}% \cs_set_eq:NN^^20\fontspec_visible_space:% }% \group_end: \def\verb { \relax\ifmmode\hbox\else\leavevmode\null\fi \bgroup \verb@eol@error \let\do\@makeother \dospecials \verbatim@font\@noligs \@ifstar\__fontspecsverb\@verb } \def\__fontspecsverb{\fontspec_print_visible_spaces:\@sverb} \AtBeginDocument { \fontspec_patch_verbatim: \fontspec_patch_moreverb: \fontspec_patch_fancyvrb: \fontspec_patch_listings: } \cs_set:Npn \fontspec_patch_verbatim: { \@ifpackageloaded{verbatim} { \cs_set:cpn {verbatim*} { \group_begin: \@verbatim \fontspec_print_visible_spaces: \verbatim@start } } { \cs_set:cpn {verbatim*} { \@verbatim \fontspec_print_visible_spaces: \@sxverbatim } } } \cs_set:Npn \fontspec_patch_moreverb: { \@ifpackageloaded{moreverb}{ \cs_set:cpn {listingcont*} { \cs_set:Npn \verbatim@processline { \thelisting@line \global\advance\listing@line\c_one \the\verbatim@line\par } \@verbatim \fontspec_print_visible_spaces: \verbatim@start } }{} } \cs_set:Npn \fontspec_patch_fancyvrb: { \@ifpackageloaded{fancyvrb} { \cs_set_eq:NN \FancyVerbSpace \fontspec_visible_space: }{} } \cs_set:Npn \fontspec_patch_listings: { \@ifpackageloaded{listings} { \cs_set_eq:NN \lst@visiblespace \fontspec_visible_space: }{} } \RenewDocumentCommand \oldstylenums {m} { { \addfontfeature{Numbers=OldStyle} #1 } } \NewDocumentCommand \liningnums {m} { { \addfontfeature{Numbers=Lining} #1 } } %% ------------------------------------------------ %% Copyright 2004--2017 Will Robertson %% Copyright 2009--2013 Khaled Hosny %% %% Distributable under the LaTeX Project Public License, version 1.3c or higher. %% The latest version of this license is at: http://www.latex-project.org/lppl.txt %% %% This work is "maintained" by Will Robertson. %% It consists of the files: fontspec*.dtx, fontspec.cfg, fontspec*.tex. %% And the derived files: fontspec*.sty,fontspec.lua, fontspec.pdf. %% ------------------------------------------------ %% %% End of file `fontspec-xetex.sty'. ttfautohint-1.8.1/doc/ucharclasses.sty0000644000175000001440000007642613153174711017743 0ustar00wlusers00000000000000% ---------------------------------------------------------------------------- % This "ucharclasses" package sets up XeTeX character classes based on which % unicode block a character is found in. It then allows transition rules to be defined % when entering or leaving particular unicode blocks, the code of which gets inserted % automatically when a transition from a character from one unicode block to a % character from another unicode block is encountered by XeTeX % % Current compatibility should be Unicode 10.0. % % Credits: % v2.1-2.3: Qing Lee, Werner Lemberg % v2.0: Enrico Gregorio % v1.0: Mike "Pomax" Kamermans % % Significant updates: % v2.3: Unicode 10 support % v2.2: Unicode 8.0 and LaTeX2e support % v2.1: Uplift for the intercharclass updates introduced in XeTeX 0.99994 % v2.0: Rewritten to Vastly improve performance. % v1.0: Unicode block switching using XeTeX intercharclasses. % % License: public domain (https://www.ctan.org/license/pd) % % ---------------------------------------------------------------------------- \ProvidesPackage{ucharclasses}[2017/08/10 v2.3.0 Unicode block character classes for XeLaTeX] \newif\if@ucharclassverbose \DeclareOption{verbose}{\@ucharclassverbosetrue} % ---------------------------------------------------------------------------- % The package options allow you to selectively enable certain unicode blocks % ---------------------------------------------------------------------------- % We first define all blocks in a list together with their start and end % point. % % Starting with XeTeX version 3.14159265-2.6-0.99994, the number of % \XeTeXcharclass registers was extended from 256 to 4096 entries; some not % so important blocks are thus provided only for this and newer versions. % The boundary of character class was changed from 255 to 4095 correspondingly. % The primitive \XeTeXinterwordspaceshaping was introduced by XeTeX 0.99994; % we use it as a flag to identify this version. % % However, earlier version of LaTeX2e (before 2016/04/22 v2.0q) didn't provide % support for 4096 entries; we thus have to override the hard-coded limit. \ifdefined\e@alloc@intercharclass@top \chardef\@ucharclass@boundary=\e@alloc@intercharclass@top \else \ifdefined\XeTeXinterwordspaceshaping \chardef\@ucharclass@boundary=4095 % \def\newXeTeXintercharclass{% \e@alloc\XeTeXcharclass\chardef \xe@alloc@intercharclass\m@ne\@ucharclass@boundary} \else \chardef\@ucharclass@boundary=\@cclv \fi \fi \def\AllClasses{ % Unicode 5.1 block definitions \do{AegeanNumbers}{"010100}{"01013F} \do{AlphabeticPresentationForms}{"0FB00}{"0FB4F} \do{AncientGreekMusicalNotation}{"01D200}{"01D24F} \do{AncientGreekNumbers}{"010140}{"01018F} \do{AncientSymbols}{"010190}{"0101CF} \do{Arabic}{"0600}{"06FF} \do{ArabicPresentationFormsA}{"0FB50}{"0FDFF} \do{ArabicPresentationFormsB}{"0FE70}{"0FEFF} \do{ArabicSupplement}{"0750}{"077F} \do{Armenian}{"0530}{"058F} \do{Arrows}{"02190}{"021FF} \do{Balinese}{"01B00}{"01B7F} \do{BasicLatin}{"0020}{"007F} % 0000..007F in Unicode standard \do{Bengali}{"0980}{"09FF} \do{BlockElements}{"02580}{"0259F} \do{Bopomofo}{"03100}{"0312F} \do{BopomofoExtended}{"031A0}{"031BF} \do{BoxDrawing}{"02500}{"0257F} \do{BraillePatterns}{"02800}{"028FF} \do{Buginese}{"01A00}{"01A1F} \do{Buhid}{"01740}{"0175F} \do{ByzantineMusicalSymbols}{"01D000}{"01D0FF} % Carian (see below) \do{Cham}{"0AA00}{"0AA5F} \do{Cherokee}{"013A0}{"013FF} \do{CJKCompatibility}{"03300}{"033FF} \do{CJKCompatibilityForms}{"0FE30}{"0FE4F} \do{CJKCompatibilityIdeographs}{"0F900}{"0FAFF} \do{CJKCompatibilityIdeographsSupplement}{"02F800}{"02FA1F} \do{CJKRadicalsSupplement}{"02E80}{"02EFF} \do{CJKStrokes}{"031C0}{"031EF} \do{CJKSymbolsAndPunctuation}{"03000}{"0303F} \do{CJKUnifiedIdeographs}{"04E00}{"09FFF} \do{CJKUnifiedIdeographsExtensionA}{"03400}{"04DBF} \do{CJKUnifiedIdeographsExtensionB}{"020000}{"02A6DF} \do{CombiningDiacriticalMarks}{"0300}{"036F} \do{CombiningDiacriticalMarksForSymbols}{"020D0}{"020FF} \do{CombiningDiacriticalMarksSupplement}{"01DC0}{"01DFF} \do{CombiningHalfMarks}{"0FE20}{"0FE2F} \do{ControlPictures}{"02400}{"0243F} \do{Coptic}{"02C80}{"02CFF} \do{CountingRodNumerals}{"01D360}{"01D37F} \do{Cuneiform}{"012000}{"0123FF} \do{CuneiformNumbersAndPunctuation}{"012400}{"01247F} \do{CurrencySymbols}{"020A0}{"020CF} \do{CypriotSyllabary}{"010800}{"01083F} \do{Cyrillic}{"0400}{"04FF} \do{CyrillicExtendedA}{"02DE0}{"02DFF} \do{CyrillicExtendedB}{"0A640}{"0A69F} \do{CyrillicSupplement}{"0500}{"052F} \do{Deseret}{"010400}{"01044F} \do{Devanagari}{"0900}{"097F} \do{Dingbats}{"02700}{"027BF} \do{DominoTiles}{"01F030}{"01F09F} \do{EnclosedAlphanumerics}{"02460}{"024FF} \do{EnclosedCJKLettersAndMonths}{"03200}{"032FF} \do{Ethiopic}{"01200}{"0137F} \do{EthiopicExtended}{"02D80}{"02DDF} \do{EthiopicSupplement}{"01380}{"0139F} \do{GeneralPunctuation}{"02000}{"0206F} \do{GeometricShapes}{"025A0}{"025FF} \do{Georgian}{"010A0}{"010FF} \do{GeorgianSupplement}{"02D00}{"02D2F} \do{Glagolitic}{"02C00}{"02C5F} \do{Gothic}{"010330}{"01034F} \do{GreekAndCoptic}{"0370}{"03FF} \do{GreekExtended}{"01F00}{"01FFF} \do{Gujarati}{"0A80}{"0AFF} \do{Gurmukhi}{"0A00}{"0A7F} \do{HalfwidthAndFullwidthForms}{"0FF00}{"0FFEF} \do{HangulCompatibilityJamo}{"03130}{"0318F} \do{HangulJamo}{"01100}{"011FF} \do{HangulSyllables}{"0AC00}{"0D7AF} \do{Hanunoo}{"01720}{"0173F} \do{Hebrew}{"0590}{"05FF} \do{Hiragana}{"03040}{"0309F} \do{IdeographicDescriptionCharacters}{"02FF0}{"02FFF} \do{IPAExtensions}{"0250}{"02AF} \do{Kanbun}{"03190}{"0319F} \do{KangxiRadicals}{"02F00}{"02FDF} \do{Kannada}{"0C80}{"0CFF} \do{Katakana}{"030A0}{"030FF} \do{KatakanaPhoneticExtensions}{"031F0}{"031FF} \do{KayahLi}{"0A900}{"0A92F} \do{Kharoshthi}{"010A00}{"010A5F} \do{Khmer}{"01780}{"017FF} \do{KhmerSymbols}{"019E0}{"019FF} \do{Lao}{"0E80}{"0EFF} \do{LatinExtendedAdditional}{"01E00}{"01EFF} \do{LatinExtendedA}{"0100}{"017F} \do{LatinExtendedB}{"0180}{"024F} \do{LatinExtendedC}{"02C60}{"02C7F} \do{LatinExtendedD}{"0A720}{"0A7FF} \do{LatinSupplement}{"0080}{"00FF} \do{Lepcha}{"01C00}{"01C4F} \do{LetterlikeSymbols}{"02100}{"0214F} \do{Limbu}{"01900}{"0194F} \do{LinearBIdeograms}{"010080}{"0100FF} \do{LinearBSyllabary}{"010000}{"01007F} \do{Lycian}{"010280}{"01029F} \do{Lydian}{"010920}{"01093F} \do{MahjongTiles}{"01F000}{"01F02F} \do{Malayalam}{"0D00}{"0D7F} \do{MathematicalAlphanumericSymbols}{"01D400}{"01D7FF} \do{MathematicalOperators}{"02200}{"022FF} \do{MiscellaneousMathematicalSymbolsA}{"027C0}{"027EF} \do{MiscellaneousMathematicalSymbolsB}{"02980}{"029FF} \do{MiscellaneousSymbols}{"02600}{"026FF} \do{MiscellaneousSymbolsAndArrows}{"02B00}{"02BFF} \do{MiscellaneousTechnical}{"02300}{"023FF} \do{ModifierToneLetters}{"0A700}{"0A71F} \do{Mongolian}{"01800}{"018AF} \do{MusicalSymbols}{"01D100}{"01D1FF} \do{Myanmar}{"01000}{"0109F} \do{NewTaiLue}{"01980}{"019DF} \do{NKo}{"07C0}{"07FF} \do{NumberForms}{"02150}{"0218F} \do{Ogham}{"01680}{"0169F} \do{OlChiki}{"01C50}{"01C7F} % OldItalic (see below) \do{OldPersian}{"0103A0}{"0103DF} \do{OpticalCharacterRecognition}{"02440}{"0245F} \do{Oriya}{"0B00}{"0B7F} \do{Osmanya}{"010480}{"0104AF} \do{PhagsPa}{"0A840}{"0A87F} % PhaistosDisc (see below) \do{Phoenician}{"010900}{"01091F} \do{PhoneticExtensions}{"01D00}{"01D7F} \do{PhoneticExtensionsSupplement}{"01D80}{"01DBF} \do{PrivateUseArea}{"0E000}{"0F8FF} \do{Rejang}{"0A930}{"0A95F} \do{Runic}{"016A0}{"016FF} \do{Saurashtra}{"0A880}{"0A8DF} \do{Shavian}{"010450}{"01047F} \do{Sinhala}{"0D80}{"0DFF} \do{SmallFormVariants}{"0FE50}{"0FE6F} \do{SpacingModifierLetters}{"02B0}{"02FF} \do{Sundanese}{"01B80}{"01BBF} \do{SuperscriptsAndSubscripts}{"02070}{"0209F} \do{SupplementalArrowsA}{"027F0}{"027FF} \do{SupplementalArrowsB}{"02900}{"0297F} \do{SupplementalMathematicalOperators}{"02A00}{"02AFF} \do{SupplementalPunctuation}{"02E00}{"02E7F} % SupplementaryPrivateUseAreaA (see below) % SupplementaryPrivateUseAreaB (see below) \do{SylotiNagri}{"0A800}{"0A82F} \do{Syriac}{"0700}{"074F} \do{Tagalog}{"01700}{"0171F} \do{Tagbanwa}{"01760}{"0177F} \do{Tags}{"0E0000}{"0E007F} \do{TaiLe}{"01950}{"0197F} \do{TaiXuanJingSymbols}{"01D300}{"01D35F} \do{Tamil}{"0B80}{"0BFF} \do{Telugu}{"0C00}{"0C7F} \do{Thaana}{"0780}{"07BF} \do{Thai}{"0E00}{"0E7F} \do{Tibetan}{"0F00}{"0FFF} \do{Tifinagh}{"02D30}{"02D7F} \do{Ugaritic}{"010380}{"01039F} \do{UnifiedCanadianAboriginalSyllabics}{"01400}{"0167F} \do{Vai}{"0A500}{"0A63F} \do{VerticalForms}{"0FE10}{"0FE1F} \do{YiRadicals}{"0A490}{"0A4CF} \do{YiSyllables}{"0A000}{"0A48F} \do{YijingHexagramSymbols}{"04DC0}{"04DFF} % Unicode 5.2 additions \do{Avestan}{"010B00}{"010B3F} \do{Bamum}{"0A6A0}{"0A6FF} \do{CJKUnifiedIdeographsExtensionC}{"02A700}{"02B73F} \do{CommonIndicNumberForms}{"0A830}{"0A83F} \do{DevanagariExtended}{"0A8E0}{"0A8FF} \do{EgyptianHieroglyphs}{"013000}{"01342F} \do{EnclosedAlphanumericSupplement}{"01F100}{"01F1FF} \do{EnclosedIdeographicSupplement}{"01F200}{"01F2FF} \do{HangulJamoExtendedA}{"0A960}{"0A97F} \do{HangulJamoExtendedB}{"0D7B0}{"0D7FF} \do{ImperialAramaic}{"010840}{"01085F} \do{InscriptionalPahlavi}{"010B60}{"010B7F} \do{InscriptionalParthian}{"010B40}{"010B5F} \do{Javanese}{"0A980}{"0A9DF} \do{Kaithi}{"011080}{"0110CF} \do{Lisu}{"0A4D0}{"0A4FF} \do{MeeteiMayek}{"0ABC0}{"0ABFF} \do{MyanmarExtendedA}{"0AA60}{"0AA7F} % OldSouthArabian (see below) % OldTurkic (see below) \do{RumiNumeralSymbols}{"010E60}{"010E7F} \do{Samaritan}{"0800}{"083F} \do{TaiTham}{"01A20}{"01AAF} \do{TaiViet}{"0AA80}{"0AADF} \do{UnifiedCanadianAboriginalSyllabicsExtended}{"018B0}{"018FF} \do{VedicExtensions}{"01CD0}{"01CFF} % Unicode 6.0 additions \do{AlchemicalSymbols}{"01F700}{"01F77F} \do{BamumSupplement}{"016800}{"016A3F} \do{Batak}{"01BC0}{"01BFF} \do{Brahmi}{"011000}{"01107F} \do{CJKUnifiedIdeographsExtensionD}{"02B740}{"02B81F} \do{Emoticons}{"01F600}{"01F64F} \do{EthiopicExtendedA}{"0AB00}{"0AB2F} \do{KanaSupplement}{"01B000}{"01B0FF} \do{Mandaic}{"0840}{"085F} \do{MiscellaneousSymbolsAndPictographs}{"01F300}{"01F5FF} \do{PlayingCards}{"01F0A0}{"01F0FF} \do{TransportAndMapSymbols}{"01F680}{"01F6FF} % Unicode 6.1 additions \do{ArabicExtendedA}{"08A0}{"08FF} \do{ArabicMathematicalAlphabeticSymbols}{"01EE00}{"01EEFF} \do{Chakma}{"011100}{"01114F} \do{MeeteiMayekExtensions}{"0AAE0}{"0AAFF} \do{MeroiticCursive}{"0109A0}{"0109FF} \do{MeroiticHieroglyphs}{"010980}{"01099F} \do{Miao}{"016F00}{"016F9F} \do{Sharada}{"011180}{"0111DF} \do{SoraSompeng}{"0110D0}{"0110FF} \do{SundaneseSupplement}{"01CC0}{"01CCF} \do{Takri}{"011680}{"0116CF} % Unicode 7.0 additions \do{BassaVah}{"016AD0}{"016AFF} \do{CaucasianAlbanian}{"010530}{"01056F} \do{CombiningDiacriticalMarksExtended}{"01AB0}{"01AFF} \do{CopticEpactNumbers}{"0102E0}{"0102FF} % Duployan (see below) \do{Elbasan}{"010500}{"01052F} \do{GeometricShapesExtended}{"01F780}{"01F7FF} \do{Grantha}{"011300}{"01137F} \do{Khojki}{"011200}{"01124F} \do{Khudawadi}{"0112B0}{"0112FF} \do{LatinExtendedE}{"0AB30}{"0AB6F} \do{LinearA}{"010600}{"01077F} \do{Mahajani}{"011150}{"01117F} \do{Manichaean}{"010AC0}{"010AFF} \do{MendeKikakui}{"01E800}{"01E8DF} \do{Modi}{"011600}{"01165F} \do{Mro}{"016A40}{"016A6F} \do{MyanmarExtendedB}{"0A9E0}{"0A9FF} \do{Nabataean}{"010880}{"0108AF} % OldNorthArabian (see below) \do{OldPermic}{"010350}{"01037F} \do{OrnamentalDingbats}{"01F650}{"01F67F} \do{PahawhHmong}{"016B00}{"016B8F} \do{Palmyrene}{"010860}{"01087F} \do{PauCinHau}{"011AC0}{"011AFF} \do{PsalterPahlavi}{"010B80}{"010BAF} % ShorthandFormatControls (see below) \do{Siddham}{"011580}{"0115FF} \do{SinhalaArchaicNumbers}{"0111E0}{"0111FF} \do{SupplementalArrowsC}{"01F800}{"01F8FF} \do{Tirhuta}{"011480}{"0114DF} \do{WarangCiti}{"0118A0}{"0118FF} % Unicode 8.0 additions \do{Ahom}{"011700}{"01173F} % AnatolianHieroglyphs (see below) \do{CherokeeSupplement}{"0AB70}{"0ABBF} \do{CJKUnifiedIdeographsExtensionE}{"02B820}{"02CEAF} \do{EarlyDynasticCuneiform}{"012480}{"01254F} \do{Hatran}{"0108E0}{"0108FF} \do{Multani}{"011280}{"0112AF} \do{OldHungarian}{"010C80}{"010CFF} \do{SupplementalSymbolsAndPictographs}{"01F900}{"01F9FF} % SuttonSignWriting (see below) % Unicode 9.0 additions needed for classes \do{CyrillicExtendedC}{"01C80}{"01C8F} \do{GlagoliticSupplement}{"01E000}{"01E02F} \do{IdeographicSymbolsAndPunctuation}{"016FE0}{"016FFF} \do{MongolianSupplement}{"011660}{"01167F} % Unicode 10.0 additions needed for classes \do{CJKUnifiedIdeographsExtensionF}{"02CEB0}{"02EBEF} \do{KanaExtendedA}{"01B100}{"01B12F} \do{SyriacSupplement}{"0860}{"086F} % \ifdefined\XeTeXinterwordspaceshaping \do{AnatolianHieroglyphs}{"014400}{"01467F} \do{Carian}{"0102A0}{"0102DF} \do{Duployan}{"01BC00}{"01BC9F} \do{OldItalic}{"010300}{"01032F} \do{OldNorthArabian}{"010A80}{"010A9F} \do{OldSouthArabian}{"010A60}{"010A7F} \do{OldTurkic}{"010C00}{"010C4F} \do{PhaistosDisc}{"0101D0}{"0101FF} \do{ShorthandFormatControls}{"01BCA0}{"01BCAF} \do{SupplementaryPrivateUseAreaA}{"0F0000}{"0FFFFF} \do{SupplementaryPrivateUseAreaB}{"0100000}{"010FFFF} \do{SuttonSignWriting}{"01D800}{"01DAAF} % Unicode 9.0 additions \do{Adlam}{"01E900}{"01E95F} \do{Bhaiksuki}{"011C00}{"011C6F} \do{Marchen}{"011C70}{"011CBF} \do{Newa}{"011400}{"01147F} \do{Osage}{"0104B0}{"0104FF} \do{Tangut}{"017000}{"0187FF} \do{TangutComponents}{"018800}{"018AFF} % Unicode 10.0 additions \do{MasaramGondi}{"011D00}{"011D5F} \do{Nushu}{"01B170}{"01B2FF} \do{Soyombo}{"011A50}{"011AAF} \do{ZanabazarSquare}{"011A00}{"011A4F} \fi } % ---------------------------------------------------------------------------- % Option handling lets the user turn off "load all" and selectively enable only those blocks % they are interested in % ---------------------------------------------------------------------------- % Each option starts with \overrideClassLoading; so any specified % option will set |\if@overrideClassLoading| to true; when one has % been scanned it's not necessary to set the conditional again. Then % for block X we let \enableX to \@empty so that later on we can check % if it is defined \newif\if@overrideClassLoading \newcommand{\overrideClassLoading}{\@overrideClassLoadingtrue \let\overrideClassLoading\relax} \def\do#1#2#3{\DeclareOption{#1}% {\overrideClassLoading\expandafter\let\csname enable#1\endcsname\@empty}} % We execute the list with this definition of \do \AllClasses % informal groups % We define lists also for these groups \def\ClassGroups{ \doclass{Arabics} \doclass{CanadianSyllabics} \doclass{CherokeeFull} \doclass{Chinese} \doclass{CJK} \doclass{Cyrillics} \doclass{Diacritics} \doclass{EthiopicFull} \doclass{GeorgianFull} \doclass{Greek} \doclass{Korean} \doclass{Japanese} \doclass{Latin} \doclass{Mathematics} \doclass{MongolianFull} \doclass{MyanmarFull} \doclass{Phonetics} \doclass{Punctuation} \doclass{SundaneseFull} \doclass{Symbols} \doclass{SyriacFull} \doclass{Yi} \doclass{Other} } \def\ArabicsClasses{ \do{Arabic} \do{ArabicExtendedA} \do{ArabicPresentationFormsA} \do{ArabicPresentationFormsB} \do{ArabicSupplement} } \def\CanadianSyllabicsClasses{ \do{UnifiedCanadianAboriginalSyllabics} \do{UnifiedCanadianAboriginalSyllabicsExtended} } \def\CherokeeFullClasses{ \do{Cherokee} \do{CherokeeSupplement} } \def\ChineseClasses{ \do{Bopomofo} \do{BopomofoExtended} \do{CJKCompatibility} \do{CJKCompatibilityForms} \do{CJKCompatibilityIdeographs} \do{CJKCompatibilityIdeographsSupplement} \do{CJKRadicalsSupplement} \do{CJKStrokes} \do{CJKSymbolsAndPunctuation} \do{CJKUnifiedIdeographs} \do{CJKUnifiedIdeographsExtensionA} \do{CJKUnifiedIdeographsExtensionB} \do{CJKUnifiedIdeographsExtensionC} \do{CJKUnifiedIdeographsExtensionD} \do{CJKUnifiedIdeographsExtensionE} \do{CJKUnifiedIdeographsExtensionF} \do{EnclosedCJKLettersAndMonths} \do{EnclosedIdeographicSupplement} \do{IdeographicDescriptionCharacters} \do{IdeographicSymbolsAndPunctuation} \do{KangxiRadicals} } \def\CJKClasses{ \do{Bopomofo} \do{BopomofoExtended} \do{CJKCompatibility} \do{CJKCompatibilityForms} \do{CJKCompatibilityIdeographs} \do{CJKCompatibilityIdeographsSupplement} \do{CJKRadicalsSupplement} \do{CJKStrokes} \do{CJKSymbolsAndPunctuation} \do{CJKUnifiedIdeographs} \do{CJKUnifiedIdeographsExtensionA} \do{CJKUnifiedIdeographsExtensionB} \do{CJKUnifiedIdeographsExtensionC} \do{CJKUnifiedIdeographsExtensionD} \do{CJKUnifiedIdeographsExtensionE} \do{CJKUnifiedIdeographsExtensionF} \do{EnclosedCJKLettersAndMonths} \do{EnclosedIdeographicSupplement} \do{HalfwidthAndFullwidthForms} \do{HangulCompatibilityJamo} \do{HangulJamo} \do{HangulJamoExtendedA} \do{HangulJamoExtendedB} \do{HangulSyllables} \do{Hiragana} \do{IdeographicDescriptionCharacters} \do{IdeographicSymbolsAndPunctuation} \do{KanaSupplement} \do{KanaExtendedA} \do{Kanbun} \do{KangxiRadicals} \do{Katakana} \do{KatakanaPhoneticExtensions} } \def\CyrillicsClasses{ \do{Cyrillic} \do{CyrillicExtendedA} \do{CyrillicExtendedB} \do{CyrillicExtendedC} \do{CyrillicSupplement} \do{GlagoliticSupplement} \do{Glagolitic} } \def\DiacriticsClasses{ \do{CombiningDiacriticalMarks} \do{CombiningDiacriticalMarksExtended} \do{CombiningDiacriticalMarksForSymbols} \do{CombiningDiacriticalMarksSupplement} \do{CombiningHalfMarks} \do{ModifierToneLetters} \do{SpacingModifierLetters} } \def\EthiopicFullClasses{ \do{Ethiopic} \do{EthiopicExtended} \do{EthiopicExtendedA} \do{EthiopicSupplement} } \def\GeorgianFullClasses{ \do{Georgian} \do{GeorgianSupplement} } \def\GreekClasses{ \do{Coptic} \do{CopticEpactNumbers} \do{GreekAndCoptic} \do{GreekExtended} } \def\KoreanClasses{ \do{HangulCompatibilityJamo} \do{HangulJamo} \do{HangulJamoExtendedA} \do{HangulJamoExtendedB} \do{HangulSyllables} } \def\JapaneseClasses{ \do{CJKUnifiedIdeographs} \do{HalfwidthAndFullwidthForms} \do{Hiragana} \do{KanaSupplement} \do{KanaExtendedA} \do{Kanbun} \do{KangxiRadicals} \do{Katakana} \do{KatakanaPhoneticExtensions} } \def\LatinClasses{ \do{AlphabeticPresentationForms} \do{BasicLatin} \do{LatinExtendedAdditional} \do{LatinExtendedA} \do{LatinExtendedB} \do{LatinExtendedC} \do{LatinExtendedD} \do{LatinExtendedE} \do{LatinSupplement} } \def\MathematicsClasses{ \do{ArabicMathematicalAlphabeticSymbols} \do{MathematicalAlphanumericSymbols} \do{MathematicalOperators} \do{MiscellaneousMathematicalSymbolsA} \do{MiscellaneousMathematicalSymbolsB} \do{SupplementalMathematicalOperators} } \def\MongolianFullClasses{ \do{Mongolian} \do{MongolianSupplement} } \def\MyanmarFullClasses{ \do{Myanmar} \do{MyanmarExtendedA} \do{MyanmarExtendedB} } \def\PhoneticsClasses{ \do{IPAExtensions} \do{PhoneticExtensions} \do{PhoneticExtensionsSupplement} } \def\PunctuationClasses{ \do{GeneralPunctuation} \do{SupplementalPunctuation} } \def\SundaneseFullClasses{ \do{Sundanese} \do{SundaneseSupplement} } \def\SymbolsClasses{ \do{AlchemicalSymbols} \do{Arrows} \do{BoxDrawing} \do{ByzantineMusicalSymbols} \do{ControlPictures} \do{CurrencySymbols} \do{Dingbats} \do{Emoticons} \do{GeometricShapes} \do{GeometricShapesExtended} \do{LetterlikeSymbols} \do{MiscellaneousSymbols} \do{MiscellaneousSymbolsAndArrows} \do{MiscellaneousSymbolsAndPictographs} \do{MiscellaneousTechnical} \do{NumberForms} \do{OrnamentalDingbats} \do{SupplementalArrowsA} \do{SupplementalArrowsB} \do{SupplementalArrowsC} \do{SupplementalSymbolsAndPictographs} \do{TransportAndMapSymbols} } \def\SyriacFullClasses{ \do{Syriac} \do{SyriacSupplement} } \def\YiClasses{ \do{YiRadicals} \do{YiSyllables} } \def\OtherClasses{ \do{AegeanNumbers} \do{Ahom} % AnatolianHieroglyphs (see below) \do{AncientGreekMusicalNotation} \do{AncientGreekNumbers} \do{AncientSymbols} \do{Armenian} \do{Avestan} \do{Balinese} \do{Bamum} \do{BamumSupplement} \do{BassaVah} \do{Batak} \do{Bengali} \do{BlockElements} \do{Brahmi} \do{BraillePatterns} \do{Buginese} \do{Buhid} % Carian (see below) \do{Cham} \do{CaucasianAlbanian} \do{Chakma} \do{CommonIndicNumberForms} \do{Coptic} \do{CountingRodNumerals} \do{Cuneiform} \do{CuneiformNumbersAndPunctuation} \do{CypriotSyllabary} \do{Deseret} \do{Devanagari} \do{DominoTiles} % Duployan (see below) \do{EarlyDynasticCuneiform} \do{EgyptianHieroglyphs} \do{Elbasan} \do{EnclosedAlphanumerics} \do{EnclosedAlphanumericSupplement} \do{Gothic} \do{Grantha} \do{Gujarati} \do{Gurmukhi} \do{Hanunoo} \do{Hatran} \do{Hebrew} \do{ImperialAramaic} \do{InscriptionalPahlavi} \do{InscriptionalParthian} \do{Javanese} \do{Kaithi} \do{Kannada} \do{KayahLi} \do{Kharoshthi} \do{Khmer} \do{KhmerSymbols} \do{Khojki} \do{Khudawadi} \do{Lao} \do{Lepcha} \do{Limbu} \do{LinearA} \do{LinearBIdeograms} \do{LinearBSyllabary} \do{Lisu} \do{Lycian} \do{Lydian} \do{Mahajani} \do{MahjongTiles} \do{Malayalam} \do{Mandaic} \do{Manichaean} \do{MeeteiMayek} \do{MeeteiMayekExtensions} \do{MendeKikakui} \do{MeroiticCursive} \do{MeroiticHieroglyphs} \do{Miao} \do{Modi} \do{Mro} \do{Multani} \do{MusicalSymbols} \do{Nabataean} \do{NewTaiLue} \do{NKo} \do{Ogham} \do{OlChiki} \do{OldHungarian} % OldItalic (see below) % OldNorthArabian (see below) \do{OldPermic} \do{OldPersian} % OldSouthArabian (see below) % OldTurkic (see below) \do{OpticalCharacterRecognition} \do{Oriya} \do{Osmanya} \do{PahawhHmong} \do{Palmyrene} \do{PauCinHau} \do{PhagsPa} % PhaistosDisc (see below) \do{Phoenician} \do{PlayingCards} \do{PrivateUseArea} \do{PsalterPahlavi} \do{Rejang} \do{RumiNumeralSymbols} \do{Runic} \do{Samaritan} \do{Saurashtra} \do{Sharada} \do{Shavian} % ShorthandFormatControls (see below) \do{Siddham} \do{Sinhala} \do{SinhalaArchaicNumbers} \do{SmallFormVariants} \do{SoraSompeng} \do{SuperscriptsAndSubscripts} % SupplementaryPrivateUseAreaA (see below) % SupplementaryPrivateUseAreaB (see below) % SuttonSignWriting (see below) \do{SylotiNagri} \do{Tagalog} \do{Tagbanwa} \do{Tags} \do{TaiLe} \do{TaiTham} \do{TaiViet} \do{TaiXuanJingSymbols} \do{Takri} \do{Tamil} \do{Telugu} \do{Thaana} \do{Thai} \do{Tibetan} \do{Tifinagh} \do{Tirhuta} \do{Ugaritic} \do{Vai} \do{VedicExtensions} \do{VerticalForms} \do{WarangCiti} \do{YijingHexagramSymbols} % \ifdefined\XeTeXinterwordspaceshaping \do{Adlam} \do{AnatolianHieroglyphs} \do{Bhaiksuki} \do{Carian} \do{Duployan} \do{Marchen} \do{MasaramGondi} \do{Newa} \do{Nushu} \do{OldItalic} \do{OldNorthArabian} \do{OldSouthArabian} \do{OldTurkic} \do{Osage} \do{PhaistosDisc} \do{ShorthandFormatControls} \do{Soyombo} \do{SupplementaryPrivateUseAreaA} \do{SupplementaryPrivateUseAreaB} \do{SuttonSignWriting} \do{Tangut} \do{TangutComponents} \do{ZanabazarSquare} \fi } % For each class group Z we define the relative option % \DeclareOption{Z}{\overrideClassLoading\enableX1\enableX2...\enableXn} % where X1, X2, ..., Xn are the blocks belonging to class Z \def\do#1{% \unexpanded{\expandafter\let\csname enable#1\endcsname\@empty}} \def\doclass#1{% \begingroup\edef\x{\endgroup\noexpand\DeclareOption{#1}{% \noexpand\overrideClassLoading\csname #1Classes\endcsname}}\x} \ClassGroups \ProcessOptions\relax % If no option has been given, \if@overrideClassLoading will still be % false, and in this case we enable *all* blocks (again by defining % \enableX equal to \@empty for each block X \if@overrideClassLoading\else \def\do#1#2#3{\expandafter\let\csname enable#1\endcsname\@empty} \AllClasses \fi % ---------------------------------------------------------------------------- % After dealing with the options, make sure we have the necessary packages available % ---------------------------------------------------------------------------- % because this package relies on XeTeX's intercharclass sytem, better require XeTeX \RequirePackage{ifxetex} \RequireXeTeX % ---------------------------------------------------------------------------- % This package heavily exploits XeTeX's intercharclass system! % ---------------------------------------------------------------------------- % enable/disable commands \newcommand{\disableTransitionRules}{\XeTeXinterchartokenstate = \z@} \newcommand{\enableTransitionRules}{\XeTeXinterchartokenstate = \@ne} % shorthand commands \let\uccoff\disableTransitionRules \let\uccon\enableTransitionRules % make sure it's turned on \enableTransitionRules % ---------------------------------------------------------------------------- % And now, finally, we can start loading all the requested blocks % ---------------------------------------------------------------------------- % \message{Package ucharclasses Message: Assigning character classes per % Unicode block (this may take a while)} %% We record the last allocated class before allocating ours; %% \newXeTeXintercharclass saves in the counter %% \xe@alloc@intercharclass the last allocated class number; initially %% it's 3, but some other code might have allocated interchar classes %% before loading this package; if \enableX is defined (to \@empty, %% but that's irrelevant), an intercharclass is allocated by using the %% list \AllClasses; two cases for block X: %% %% (1) \enableX is defined: then \do{X}{a}{b} will become %% \@defineUnicodeClass{X}{a}{b} which in turn will execute %% \newXeTeXintercharclass\XClass and start a loop assigning code %% points from a to b to this class %% %% (2) \enableX is not defined: then \do{X}{a}{b} will become %% \@gobblethree{X}{a}{b} and so nothing will be performed \chardef\@classstart=\xe@alloc@intercharclass \providecommand\@gobblethree[3]{} \def\do#1{% \ifcsname enable#1\endcsname \expandafter\@defineUnicodeClass \else \expandafter\@gobblethree \fi{#1}} \def\@defineUnicodeClass#1#2#3{% \if@ucharclassverbose\typeout{Defining #1 Class}\fi \expandafter\newXeTeXintercharclass\csname #1Class\endcsname \count@=#2 \loop \if@ucharclassverbose \typeout{\XeTeXcharclass\number\count@= \expandafter\string\csname #1Class\endcsname}% \fi \XeTeXcharclass\count@=\csname #1Class\endcsname \ifnum\count@<#3 \advance\count@\@ne \repeat } \AllClasses % finally, we record the end of our charclass range \chardef\@classend=\xe@alloc@intercharclass %%% Our assigned classes go from \@classstart (excluded) to \@classend (included) % ---------------------------------------------------------------------------- % Use: \setTransitionsFor{block name}{when entering this block}{when leaving this block} % ---------------------------------------------------------------------------- \def\setTransitionsFor#1#2#3{% \ifcsname enable#1\endcsname \count@=\@classstart \loop\ifnum\count@<\@classend \advance\count@\@ne \ifnum\count@=\csname #1Class\endcsname\else \XeTeXinterchartoks\count@ \csname #1Class\endcsname={#2}% \XeTeXinterchartoks\csname #1Class\endcsname \count@={#3}% \fi \repeat \XeTeXinterchartoks\@ucharclass@boundary\csname #1Class\endcsname={#2}% \XeTeXinterchartoks\csname #1Class\endcsname\@ucharclass@boundary={#3}% \else \if@ucharclassverbose \PackageWarningNoLine{ucharclasses}{Class #1\MessageBreak not loaded}% \fi \fi } % ---------------------------------------------------------------------------- % Use: \setTransitionTo{block name}{what to do when entering this block} % ---------------------------------------------------------------------------- \def\setTransitionTo#1#2{% \ifcsname enable#1\endcsname \count@=\@classstart \loop\ifnum\count@<\@classend \advance\count@\@ne \ifnum\count@=\csname #1Class\endcsname\else \XeTeXinterchartoks\count@ \csname #1Class\endcsname={#2}% \fi \repeat \XeTeXinterchartoks\@ucharclass@boundary\csname #1Class\endcsname={#2}% \else \if@ucharclassverbose \PackageWarningNoLine{ucharclasses}{Class #1\MessageBreak not loaded}% \fi \fi } % ---------------------------------------------------------------------------- % Use: \setTransitionFrom{block name }{what to do when leaving this block} % ---------------------------------------------------------------------------- \def\setTransitionFrom#1#2{% \ifcsname enable#1\endcsname \count@=\@classstart \loop\ifnum\count@<\@classend \advance\count@\@ne \ifnum\count@=\csname #1Class\endcsname\else \XeTeXinterchartoks\csname #1Class\endcsname \count@={#2}% \fi \repeat \XeTeXinterchartoks\csname #1Class\endcsname\@ucharclass@boundary={#2}% \else \if@ucharclassverbose \PackageWarningNoLine{ucharclasses}{Class #1\MessageBreak not loaded}% \fi \fi } % ---------------------------------------------------------------------------- % Informal Block Rules - for these, to/from must always be defined % % Available informal groups are: % % - Arabics % - CanadianSyllabics % - CherokeeFull % - Chinese (including bopomofo) % - CJK (Chinese/Japanese/Korean) % - Cyrillics % - Diacritics % - EthiopicFull % - GeorgianFull % - Greek % - Japanese (it is advised to set CJK first to a catch-all, then set % Japanese for specifics) % - Korean (=Hangul) (same comment as for Japanese) % - Latin % - Mathematics % - MongolianFull % - MyanmarFull % - Phonetics % - Punctuation % - SundaneseFull % - Symbols % - SyriacFull % - Yi % - Other (I am not a fan of lump groups. I hope to un-lump most of it) % % ---------------------------------------------------------------------------- %% For each class group Z we define \setTransitionsForX as %% \newcommand\setTransitionsForZ[2]{% %% \setTransitionsFor{X1}{#1}{#2} %% \setTransitionsFor{X2}{#1}{#2} %% ... %% \setTransitionsFor{Xn}{#1}{#2}} %% where X1, X2, ..., Xn are the blocks in group Z \def\do#1{\noexpand\setTransitionsFor{#1}{####1}{####2}} \def\doclass#1{ \begingroup\edef\x{\endgroup \noexpand\newcommand \unexpanded\expandafter{\csname setTransitionsFor#1\endcsname}[2]% {\csname #1Classes\endcsname}}\x} \ClassGroups % ---------------------------------------------------------------------------- % % based on the previous informal groups, we can define a catch-all transition command % % ---------------------------------------------------------------------------- %% The following is equivalent to define %% \newcommand{\setDefaultTransitions[2]{ %% \setTransitionsForArabic{#1}{#2} %% ... %% \setTransitionsForOther{#1}{#2}} \def\doclass#1{% \expandafter\noexpand\csname setTransitionsFor#1\endcsname{####1}{####2}} \begingroup\edef\x{\endgroup \noexpand\newcommand\noexpand\setDefaultTransitions[2]{% \ClassGroups}}\x % ---------------------------------------------------------------------------- \let\do\@undefined\let\doclass\@undefined \endinput % % End of file `ucharclasses.sty'. ttfautohint-1.8.1/doc/ttfautohint-css.html0000644000175000001440000001351513153174711020535 0ustar00wlusers00000000000000 ttfautohint-1.8.1/doc/ttfautohint-js.html0000644000175000001440000000033513153174711020355 0ustar00wlusers00000000000000 ttfautohint-1.8.1/VERSION0000644000175000001440000000000613222454026014777 0ustar00wlusers000000000000001.8.1