rsyncrypto-1.12/0000755000175000017500000000000011041707174012067 5ustar sunsunrsyncrypto-1.12/redir.cpp0000644000175000017500000000456111030247151013676 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2005 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com/ */ #ifdef _WIN32 #error Win32 code is at win32/redir.cpp #else #include "precomp.h" #include "redir.h" void redir_pipe::child_redirect( int redir_type, void *plat_opaq ) { autofd *redirected; if( redir_type==STDIN_FILENO ) { redirected=&get_read(); } else { redirected=&get_write(); } dup2( redirected->get(), redir_type ); clear(); } void redir_pipe::parent_redirect( int redir_type, void *plat_opaq ) { if( redir_type==STDIN_FILENO ) { clear_read(); } else { clear_write(); } } void redir_fd::child_redirect( int redir_type, void *plat_opaq ) { dup2( get(), redir_type ); clear(); } void redir_fd::parent_redirect( int redir_type, void *plat_opaq ) { clear(); } void redir_null::child_redirect( int redir_type, void *plat_opaq ) { } void redir_null::parent_redirect( int redir_type, void *plat_opaq ) { } #endif rsyncrypto-1.12/autopipe.h0000644000175000017500000000226610242342676014100 0ustar sunsun// This is the Win32 version of this struct #if defined(_WIN32) #include "win32/autopipe.h" #else #ifndef _AUTOPIPE_H #define _AUTOPIPE_H class autopipe { autofd input, output; public: explicit autopipe(size_t pipe_size=4096) : input(-1), output(-1) { int fd[2]; if( pipe(fd)==0 ) { input=autofd(fd[0]); output=autofd(fd[1]); } else { #if defined(EXCEPT_CLASS) throw EXCEPT_CLASS("Couldn't create pipe", errno ); #endif } } // Default copy constructor and operator= do exactly what we want. //autopipe( const autopipe &that ) //autopipe &operator=( const autopipe &that ) // As does default dtor //~autopipe() autofd &get_read() { return input; } const autofd &get_read() const { return input; } autofd &get_write() { return output; } const autofd &get_write() const { return output; } void clear_read() { input.clear(); } void clear_write() { output.clear(); } void clear() { clear_read(); clear_write(); } }; #endif // _AUTOPIPE_H #endif // _WIN32 rsyncrypto-1.12/ChangeLog0000644000175000017500000002240411041706744013645 0ustar sunsunVersion 1.12 - July 23 2008 * Switch to safe creation and overwriting of files * Remove claimed bashism from the test script * Improve the Win32 reported error codes Version 1.11 - June 24 2008 * Resolve oldest reported problem - segfault when private key is needed but not available. * On Vista, identify (and ignore) symbolic links * Do not terminate as soon as an error occures. Continue at next reasonable operation. * Fix Cygwin, Mac compilation problems * Change autoconf to test for the correct stuff for mmap headers * Make the error messages in case of file open more useful * Spelling corrections in the manual page Version 1.10 - May 23 2008 * Add an option "--export-changes" that writes to a log file the files affected by the operation in a way suitable for passing to rsync's --include-from option * Windows - mkdir would still fail if last component of the path to create was a drive letter. Version 1.09 - May 15 2008 * Fix serious bug - when deleting an entire directory with --name-encrypt and --delete-keys, rsyncrypto (since 1.07) would leave a corrupt filemap behind. * Add a tool "rsyncrypto_recover", which fixes the corruption caused by the above bug. Version 1.08 - May 11 2008 * Fix bug - when a directory turns into a file with --name-encrypt and --delete, rsyncrypto would terminate with an error * Make sure that using a preexisting empty filemap does not crash rsyncrypto * Fix bug - -d with --filelist with stdin as input created erronous "need --no-archive-mode". * Fix bug (win32 only) - mkdir error really fixed this time. * Fix bug - --ne-nesting would cause --delete and --delete-keys to delete the wrong path (and thus fail) Version 1.07 - May 7 2008 * Fix bug (Win32) - trying to work cross drive to a drive that is not C: would fail the mkdir with an error (Access denied or similar) * Move the project build to Visual C 9. Removed Visual Studio 6 project files. Project now creates an MSI file as part of the build process. * Fix bug - --trim=0 combined with --name-encrypt combined with --delete: Would not detect deleted files on absolute names * Update the man page about command line options accidentally ommited. * Due to more investigation on the GPL's relationship to non-GPL libraries, remove rant at the begining of the license. * Fix bug - --noatime=1 would not correctly detect when running as root * Solve a couple of compilation warnings on gcc 4.3 * Clean out detection of hash_map class - we use std::map exclusively. * Clean out generated automake/conf files. bootstrap can generate them Version 1.06 2007-11-28 * Fix regression - setting the filemap meta data would sometimes segfault * Clarified in program help that -c also works with --filelist. Closes 1759890 * Make the library tests not depend on specific file extension. Closes 1717324 2007-11-21 * Fix segmentation fault when given the wrong file as private/public key * Fix regression - encrypting stdin stopped working in 1.05 Version 1.05 2007-11-16 * Add option --modify-window that mimics the rsync option of the same name. 2007-11-14 * Add option governing use of O_NOATIME (where applicable). * By default, auto detect whether O_NOATIME will fail, and only use where it will succeed. Version 1.04 2007-07-20 * Make sure that in tree build tests still works Version 1.03 2007-07-10 * Fix error when using stdin for filelist on Unix * Improve running tests on out of tree builds Version 1.02 2007-01-25 * Fix the stat function (on Windows) to use GetFileAttributesEx insead of FindFirstFile * Convert the utimes function (on Windows) to use "SetFileTime" instead of the posix utimes. This solves a problem where files inside daylight saving periods had their timestamp copied wrong. This is a serious anomality in FILETIME disregarding daylight saving. Version 1.01 2007-01-17 Shachar Shemesh * Implement the autofd::stat function properly (win32) * Fix the implementation of autofd::fstat (win32) to report the file type * Make sure that all *stat functions go through the wrappers Version 1.00 2007-01-12 Shachar Shemesh * Modify the "off_t" type on Windows to 64 bit to allow files greater than 4GB Version 0.19 2006-11-21 Shachar Shemesh * Implement proper write buffering while encrypting. * Implement buffering (read and write) while decrypting. 2006-11-20 Shachar Shemesh * Implement proper read buffering while encrypting. X2 speed up on linux and on Windows. Version 0.18 2006-11-15 Shachar Shemesh * Fix bug 1476034 - Make sure that -c works with file lists. * Fix bug 1476040 - Uninitialized nesting level caused crashes. 2006-11-14 Shachar Shemesh * Remove ODS calls from Windows code - 10 times speedup 2006-02-23 Shachar Shemesh * Fixed incorrect permissions when creating the plain text "filemap" file. 2006-02-09 Shachar Shemesh * Added a required DEFINE to make sure STLPort compiles on newer Platform SDKs than what comes builtin with Visual Studio 6. Version 0.17 2006-02-09 Shachar Shemesh * Add compilation instructions for Windows * Unhandled file types are now skipped with a message, rather than abort the whole process. (Fix bug #1426850) 2006-01-28 Shachar Shemesh * Add a tutorial section to the man page. 2006-01-27 Shachar Shemesh * Fix a bug with using --filelist and --trim=0 and having an absolute path in the file list Version 0.16 2005-11-04 Shachar Shemesh * Implement filename encryption. * --meta-encrypt is now called "--name-encrypt" * Added "--ne-nesting" to allow smaller loads of files on each directory. 2005-07-29 Shachar Shemesh * Use argtable to print the argument list * Add the "--meta-encrypt" option Version 0.15 2005-05-19 Shachar Shemesh * Properly handle CR+LF in text files on Windows * Forgot to initialize key size when not explicitly specified. Version 0.14 2005-05-18 Shachar Shemesh * A couple of fixes in the Win32 version resource 2005-05-17 Shachar Shemesh * Merge Win32 port into HEAD 2005-05-03 Shachar Shemesh * Move from using "getopt_long" for processing command options to using argtable. * Fix bugs in the configure script, where if --with-argtable2= was used, then you couldn't override LDFLAGS. * Add missing include for "strings.h". * rsyncrypto now compiles on Solaris. Version 0.13 2005-04-23 Shachar Shemesh * Update the license to explain author's position that the OpenSSL exception is unnecessary. * Add the "rsyncable" patch for gzip to the repository, and point to it from the README. * Fix a mmap incorrect permission bug that affects OpenBSD. Version 0.12 2005-03-27 Shachar Shemesh * Change the license to explicitly allow linking with OpenSSL * Make new file permissions adhere to umask rather than source file. * Fix bug in mkpath when trying to create rooted path * --delete no longer deletes the key, unless --delete-keys was specified Version 0.11 2005-03-11 Shachar Shemesh * Make sure encryption continues even if a file open fails with permissions denied. * Fix incorrect rscerror parameter initialization * Fix "Aborted" on entire program in case of error Version 0.10 2005-02-28 Shachar Shemesh * Fix accidental use of automake 1.4 to build the makefiles. * Fix bug where you couldn't use --trim with --filelist * Fix serious bug when --trim=0 and --delete where all encrypted files were deleted, always. * Officially announce as "Beta" Version 0.09 2005-02-27 Shachar Shemesh * Make sure that directories for key and encrypted files are created when needed. * Implement the "filelist" option 2005-02-24 Shachar Shemesh * Document no password protected private key decryption bug in the man page Version 0.08 2005-02-22 Shachar Shemesh * Fix case of sometimes returning non-zero value on success from main. Version 0.07 2005-02-20 Shachar Shemesh * Fix incorrect hyphens in manual page * Change autofd's copying method - use mutable "owner" boolean * Fix file descriptor leak in code * Fix spelling mistakes in rsyncrypto.man Version 0.06 2005-02-17 Shachar Shemesh * Add an option for only encrypting modified files * Fix error in deleted file reporting * Fix a (mostly visual) error in file delete directory - extra / at end * Change the verbosity level for deletion from 2 to 1 * Add a manual page for rsyncrypto 2005-02-13 Shachar Shemesh * Fix bug in procssing of the "gzip" option * Add a "blocksize" utility for doing tests for optimal roll parameters Version 0.05 2005-02-12 Shachar Shemesh * Implement recursive decryption of directory structure 2005-02-10 Shachar Shemesh * Implement recursive encryption of directory structures * Improve error reporting * Add "trim" to trim the begining of the path 2005-02-08 Shachar Shemesh * Implement encrypting a file from stdin. Useful for piping tar into rsyncrytpo. Version 0.04 2005-02-08 Shachar Shemesh * Add a "no-archive-mode" switch, which means file permissions and timestamp are not copied. * Add a verbosity 3 printout for block sizes used * Change default roll-win to 8192, for higher standard deviation on window sizes Version 0.03 2005-02-06 Shachar Shemesh * Fix compilation problem on *BSD * Add an autoconf test for large files access rsyncrypto-1.12/crypto.h0000644000175000017500000000435611030247151013560 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2005 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com */ #ifndef CRYPTO_H #define CRYPTO_H #include #include "crypt_key.h" #include "bufferfd.h" enum CYPHER_TYPE { CYPHER_AES }; //class key_header; //struct key_header *gen_header(int key_length, enum CYPHER_TYPE cypher); key *read_header( const autofd &headfd ); void write_header( const char *filename, const key *head ); size_t header_size( const RSA *rsa ); void encrypt_header( const struct key_header *header, RSA *rsa, unsigned char *to ); RSA *extract_public_key( const char *pem_filename ); RSA *extract_private_key( const char *key_filename ); void encrypt_file( key *header, RSA *rsa, read_bufferfd &fromfd, write_bufferfd &tofd ); key *decrypt_file( key *header, RSA *prv, read_bufferfd &fromfd, write_bufferfd &tofd ); #endif /* CRYPTO_H */ rsyncrypto-1.12/autommap.h0000644000175000017500000000531211011573377014067 0ustar sunsun/* * This file is part of rsyncrypto - rsync friendly encryption * Copyright (C) 2005 Shachar Shemesh for Lingnu Open Source Consulting (http://www.lignu.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _AUTOMMAP_H #define _AUTOMMAP_H #include // automap will auto-release mmaped areas class autommap { void *ptr; size_t size; // Disable default copy constructor autommap( const autommap & ); public: autommap() : ptr(reinterpret_cast(-1)), size(0) { } autommap(void *start, size_t length, int prot, int flags, int fd, off_t offset ) : ptr(mmap(start, length, prot, flags, fd, offset)), size(length) { if( ptr==reinterpret_cast(-1) ) { size=0; #if defined(EXCEPT_CLASS) throw EXCEPT_CLASS("mmap failed", errno); #endif } } // Map an entire file into memory autommap(file_t fd, int prot) : ptr(reinterpret_cast(-1)), size(0) { struct stat filestat; if( fstat(fd, &filestat)==0 ) { // Do nothing without an error if file is empty if( filestat.st_size!=0 ) { autommap that(NULL, filestat.st_size, prot, MAP_SHARED, fd, 0); *this=that; } } #if defined(EXCEPT_CLASS) else throw EXCEPT_CLASS("file mmap failed", errno); #endif } ~autommap() { clear(); } void *get() const { return ptr; } unsigned char *get_uc() const { return static_cast(ptr); } autommap &operator=( autommap &that ) { clear(); ptr=that.ptr; size=that.size; that.ptr=reinterpret_cast(-1); that.size=0; return *this; } void clear() { if( ptr!=reinterpret_cast(-1) ) { munmap( ptr, size ); } ptr=reinterpret_cast(-1); size=0; } size_t getsize() const { return size; } }; #endif // _AUTOMMAP_H rsyncrypto-1.12/recover.cpp0000644000175000017500000001276511030247151014243 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2008 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com/ */ // This is a quick and dirty implementation, designed to plug the corrupted // files potentially generated by rsyncrypto version 1.07 and 1.08 // The implementation is neither clean nor complete, just "good enough" #include "precomp.h" static void usage() { std::cerr<<"rsyncrypto_recover: Recover corrupted rsyncrypto file maps"< good_file"<='0' && ch<='9') || (ch>='A' && ch<='F') ) { record.crypt[line_state]=ch; // A legal hexadecimal character if( (++line_state)==32 ) { state=SPACE; } } else { std::cerr<<"Offset "<&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg 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 trap '(exit $?); exit' 1 2 13 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 starting with `-'. 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 # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: rsyncrypto-1.12/AUTHORS0000644000175000017500000000042411030247151013127 0ustar sunsunrsyncrypto - an rsync friendly single-sided file encryption rsyncrypto was written by Shachar Shemesh. The copyright is owned by Lingnu Open Source Consulting ltd - http://www.lingnu.com Support can be achieved through the project's homepage at http://rsyncrypto.lingnu.com rsyncrypto-1.12/crypto.cpp0000644000175000017500000002664311030247151014116 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2005-2008 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com/ */ #include "precomp.h" #include "rsyncrypto.h" #include "crypto.h" #include "process.h" #include "autopipe.h" #include "redir.h" /* Cyclic add and subtract */ #define MOD_ADD(a,b,mod) (((a)+(b))%(mod)) #define MOD_SUB(a,b,mod) MOD_ADD((a), (mod)-(b), (mod)) #define VERSION_MAGIC_1 0xD657EA1Cul /* Public/Private key handling */ RSA *extract_public_key( const char *pem_filename ) { BIO *in; X509 *x509; EVP_PKEY *pkey; RSA *rsa=NULL; /* We pull the public key out of the certificate. It's much like pulling teeth */ /* First, get the certificate loaded into a stream */ in=BIO_new(BIO_s_file()); /* NULL is error */ if( in==NULL ) throw rscerror( "Error allocating public key", ENOMEM ); if( BIO_read_filename(in, pem_filename)<=0 ) /* <=0 is error */ throw rscerror( "Error reading public key file", errno, pem_filename ); /* Next, extract the X509 certificate from it */ x509=PEM_read_bio_X509(in, NULL, NULL, NULL ); if( x509==NULL ) throw rscerror( "Error parsing certificate" ); /* And the public key in generic format */ pkey=X509_get_pubkey(x509); /* And finally, we get the actual RSA key */ rsa=EVP_PKEY_get1_RSA(pkey); /* Lastly, release all the resources we've allocated */ X509_free(x509); EVP_PKEY_free(pkey); BIO_free_all(in); return rsa; } RSA *extract_private_key( const char *key_filename ) { BIO *in; RSA *rsa=NULL; /* We pull the public key out of the certificate. It's much like pulling teeth */ /* First, get the certificate loaded into a stream */ in=BIO_new(BIO_s_file()); /* NULL is error */ if( in==NULL ) throw rscerror( "Error allocating private key" ); if( BIO_read_filename(in, key_filename)<=0 ) /* <=0 is error */ throw rscerror( "Error reading private key file", errno, key_filename ); /* And finally, we get the actual RSA key */ rsa=PEM_read_bio_RSAPrivateKey(in,NULL,NULL,NULL); /* Lastly, release all the resources we've allocated */ BIO_free_all(in); return rsa; } key *read_header( const autofd &headfd ) { autommap headmap( headfd, PROT_READ ); return key::read_key( headmap.get_uc() ); } void write_header( const char *filename, const key *head ) { autofd::mkpath( std::string(filename, autofd::dirpart(filename)).c_str(), 0700 ); autofd newhead(filename, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR); off_t headsize=head->exported_length(); if( newhead.lseek( headsize-1, SEEK_SET )!=headsize-1 || newhead.write( filename, 1 )!=1 ) throw rscerror("write failed", errno, filename ); autommap headfilemap( NULL, static_cast(headsize), PROT_WRITE|PROT_READ, MAP_SHARED, newhead, 0 ); head->export_key( headfilemap.get() ); } const uint32_t HEADER_ENCRYPTION_VERSION=0; size_t header_size( const RSA *rsa ) { return RSA_size(rsa)+sizeof(HEADER_ENCRYPTION_VERSION); } /* Encrypt the file's header */ void encrypt_header( const key *header, RSA *rsa, unsigned char *to ) { size_t export_size=header->exported_length(); *reinterpret_cast(to)=htonl(HEADER_ENCRYPTION_VERSION); to+=sizeof(HEADER_ENCRYPTION_VERSION); header->export_key( to ); /* Encrypt the whole thing in place */ if( RSA_public_encrypt(export_size, to, to, rsa, RSA_PKCS1_OAEP_PADDING)==-1 ) { unsigned long rsaerr=ERR_get_error(); throw rscerror(ERR_error_string(rsaerr, NULL)); } } /* Decrypt the file's header */ key *decrypt_header( file_t fromfd, RSA *prv ) { const size_t key_size=RSA_size(prv); size_t headsize=header_size(prv); autommap filemap(NULL, headsize, PROT_READ, MAP_PRIVATE, fromfd, 0); if( *static_cast(filemap.get())!=htonl(HEADER_ENCRYPTION_VERSION) ) throw rscerror("Wrong file or header encrypted with wrong encryption"); unsigned char *buff=filemap.get_uc()+sizeof(HEADER_ENCRYPTION_VERSION); auto_array decrypted(new unsigned char[headsize]); if( (prv->p==0 || prv->q==0) ) { // This is not a private key! throw rscerror("Neither AES session key nor RSA private key present - cannot decrypt using only public key"); } if( RSA_private_decrypt(key_size, buff, decrypted.get(), prv, RSA_PKCS1_OAEP_PADDING)==-1 ) { unsigned long rsaerr=ERR_get_error(); throw rscerror(ERR_error_string(rsaerr, NULL)); } std::auto_ptr ret(key::read_key( decrypted.get() )); // Let's verify that we have read the correct data from the file, by reencoding the key we got and comparing // the cyphertexts. // On second thought - let's not. You never know if we don't change encoding at some future point. return ret.release(); } // "encrypt_file" will also close the from and to file handles. void encrypt_file( key *header, RSA *rsa, read_bufferfd &fromfd, write_bufferfd &tofd ) { const size_t key_size=RSA_size(rsa); /* Skip the header. We'll only write it out once the file itself is written */ autofd::lseek(tofd, header_size(rsa), SEEK_SET); redir_pipe ipipe(8000); redir_fd redir_from(fromfd); process_ctl gzip_process( const_cast(FILENAME(gzip)), &redir_from, &ipipe, NULL, "--rsyncable", NULL ); // Run through gzip's output, and encrypt it const size_t block_size=header->block_size(); // Let's cache the block size auto_array buffer(new unsigned char [block_size]); unsigned int i=0; int numread=1; bool new_block=true; read_bufferfd *readfd=new read_bufferfd(ipipe.get_read()); while( (numread=readfd->read(buffer.get()+i, 1))!=0 ) { if( new_block ) { header->init_encrypt(); new_block=false; } new_block=header->calc_boundry( buffer[i] ); i+=numread; if( i>=block_size || new_block ) { header->encrypt_block( buffer.get(), i ); tofd.write( buffer.get(), block_size ); i=0; } } delete readfd; if( i>0 ) { // Still some leftover bytes to encrypt header->encrypt_block( buffer.get(), i ); tofd.write( buffer.get(), block_size ); } // Report how many bytes of last block are relevant. bzero( buffer.get(), block_size ); buffer[0]=i; header->init_encrypt(); header->encrypt_block( buffer.get(), 1 ); tofd.write( buffer.get(), block_size ); tofd.flush(); // Wait for gzip to return, and check whether it succeeded int childstatus=gzip_process.wait(); if( childstatus==0 ) { /* gzip was successful - write out the header, encrypted */ autommap buffer( NULL, key_size, PROT_READ|PROT_WRITE, MAP_SHARED, tofd, 0 ); encrypt_header( header, rsa, buffer.get_uc() ); } else { throw rscerror("Error in running gzip"); } tofd.clear(); } // "decrypt_file" will also close the from and to file handles. key *decrypt_file( key *header, RSA *prv, read_bufferfd &fromfd, write_bufferfd &tofd ) { std::auto_ptr new_header; if( header==NULL ) { /* Need to reconstruct the header from the encrypted file */ new_header=std::auto_ptr(decrypt_header( fromfd, prv )); header=new_header.get(); } /* If file does not contain a valid header - abort */ if( header==NULL ) throw rscerror("Couldn't extract encryption header"); struct stat filestat; off_t currpos; filestat=fromfd.fstat(); /* Skip the header */ currpos=fromfd.lseek(header_size(prv), SEEK_SET); redir_pipe opipe; redir_fd redir_to(tofd); process_ctl gzip_process( const_cast(FILENAME(gzip)), &opipe, &redir_to, NULL, "-d", NULL ); size_t numread; const size_t block_size=header->block_size(); auto_array buffer(new unsigned char [block_size]); bool done=false; bool new_block=true; write_bufferfd *writefd=new write_bufferfd(opipe.get_write()); /* Read the file one AES_BLOCK_SIZE at a time, decrypt and write to the pipe */ while( !done && (numread=fromfd.read( buffer.get(), block_size))!=0 ) { currpos+=numread; if( numread>0 && numreadinit_encrypt(); new_block=false; } header->decrypt_block( buffer.get(), block_size ); unsigned int i; for( i=0; icalc_boundry(buffer[i]); } if( currpos>=filestat.st_size-block_size ) { done=true; // Oops - file is not a whole multiple of block size if( currpos>filestat.st_size-block_size ) throw rscerror("Uneven file end"); } else { writefd->write( buffer.get(), i ); } // If this was not a full block, the remaining bytes should be zero for( ; i buffer2(new unsigned char [block_size]); if( fromfd.read( buffer2.get(), block_size)!=static_cast(block_size) ) throw rscerror("Unexcpeted end of file past sanity checks"); header->init_encrypt(); header->decrypt_block( buffer2.get(), block_size ); for( unsigned int i=1; i=block_size ) throw rscerror("Error in encrypted stream (trailer 2)"); if( buffer2[0]==0 ) buffer2[0]=block_size; writefd->write( buffer.get(), buffer2[0] ); writefd->flush(); delete writefd; opipe.clear(); int child_status=gzip_process.wait(); if( child_status!=0 ) throw rscerror("gunzip failed to run"); new_header.release(); fromfd.clear(); return header; } rsyncrypto-1.12/Makefile.in0000644000175000017500000005274611041707163014150 0ustar sunsun# Makefile.in generated by automake 1.10.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = rsyncrypto$(EXEEXT) rsyncrypto_recover$(EXEEXT) noinst_PROGRAMS = blocksizes$(EXEEXT) subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_blocksizes_OBJECTS = crypt_key.$(OBJEXT) aes_crypt.$(OBJEXT) \ blocksizes.$(OBJEXT) blocksizes_OBJECTS = $(am_blocksizes_OBJECTS) blocksizes_LDADD = $(LDADD) am_rsyncrypto_OBJECTS = main.$(OBJEXT) crypto.$(OBJEXT) \ crypt_key.$(OBJEXT) aes_crypt.$(OBJEXT) file.$(OBJEXT) \ process.$(OBJEXT) redir.$(OBJEXT) filemap.$(OBJEXT) \ bufferfd.$(OBJEXT) rsyncrypto_OBJECTS = $(am_rsyncrypto_OBJECTS) rsyncrypto_LDADD = $(LDADD) am_rsyncrypto_recover_OBJECTS = recover.$(OBJEXT) rsyncrypto_recover_OBJECTS = $(am_rsyncrypto_recover_OBJECTS) rsyncrypto_recover_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(blocksizes_SOURCES) $(rsyncrypto_SOURCES) \ $(rsyncrypto_recover_SOURCES) DIST_SOURCES = $(blocksizes_SOURCES) $(rsyncrypto_SOURCES) \ $(rsyncrypto_recover_SOURCES) man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man1_MANS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CXX = @ac_ct_CXX@ 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_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ 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_builddir = @top_builddir@ top_srcdir = @top_srcdir@ man1_MANS = rsyncrypto.man rsyncrypto_recover.man rsyncrypto_SOURCES = main.cpp crypto.cpp crypt_key.cpp aes_crypt.cpp file.cpp process.cpp \ redir.cpp filemap.cpp bufferfd.cpp blocksizes_SOURCES = crypt_key.cpp aes_crypt.cpp blocksizes.cpp rsyncrypto_recover_SOURCES = recover.cpp all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .cpp .html .man .o .obj am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ cd $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi 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) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) blocksizes$(EXEEXT): $(blocksizes_OBJECTS) $(blocksizes_DEPENDENCIES) @rm -f blocksizes$(EXEEXT) $(CXXLINK) $(blocksizes_OBJECTS) $(blocksizes_LDADD) $(LIBS) rsyncrypto$(EXEEXT): $(rsyncrypto_OBJECTS) $(rsyncrypto_DEPENDENCIES) @rm -f rsyncrypto$(EXEEXT) $(CXXLINK) $(rsyncrypto_OBJECTS) $(rsyncrypto_LDADD) $(LIBS) rsyncrypto_recover$(EXEEXT): $(rsyncrypto_recover_OBJECTS) $(rsyncrypto_recover_DEPENDENCIES) @rm -f rsyncrypto_recover$(EXEEXT) $(CXXLINK) $(rsyncrypto_recover_OBJECTS) $(rsyncrypto_recover_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aes_crypt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blocksizes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bufferfd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypt_key.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypto.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filemap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recover.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/redir.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ done uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(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 $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) config.h installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-exec-am: install-binPROGRAMS install-html: install-html-am install-info: install-info-am install-man: install-man1 install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ clean-binPROGRAMS clean-generic clean-noinstPROGRAMS ctags \ dist dist-all dist-bzip2 dist-gzip dist-lzma dist-shar \ dist-tarZ dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-man \ uninstall-man1 .PHONY: test docs test: rsyncrypto [ -d ./tests ] || mkdir ./tests TRGT="$$(pwd)" ; SRC="$$(cd "$(top_srcdir)/tests" ; pwd)" ; export SRC ; cd $${TRGT}/tests && \ "$$SRC/regtest" "$$TRGT/rsyncrypto" v docs: rsyncrypto.html rsyncrypto_recover.html .man.html: man2html "$<" | tail -n +3 > "$@.tmp" mv "$@.tmp" "$@" # 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: rsyncrypto-1.12/contrib/0000755000175000017500000000000011041707133013522 5ustar sunsunrsyncrypto-1.12/contrib/argtable2.vcproj0000644000175000017500000001221211010355555016613 0ustar sunsun rsyncrypto-1.12/contrib/gzip-rsyncable.diff0000644000175000017500000002407310232443225017313 0ustar sunsunFrom: Rusty Russell [NOTE: this patch is for _gzip_! --Wayne] It's pending for actual gzip inclusion! The maintainer was dug up and everything: it'll even be on by default. But here's the old patch, Rusty. -- Anyone who quotes me in their sig is an idiot. -- Rusty Russell. --- gzip-1.2.4.orig/deflate.c Fri Aug 13 22:35:31 1993 +++ gzip-1.2.4-rsync/deflate.c Sat Dec 30 15:33:25 2000 @@ -121,6 +121,14 @@ #endif /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ +#ifndef RSYNC_WIN +# define RSYNC_WIN 4096 +#endif +/* Size of rsync window, must be < MAX_DIST */ + +#define RSYNC_SUM_MATCH(sum) ((sum) % RSYNC_WIN == 0) +/* Whether window sum matches magic value */ + /* =========================================================================== * Local data used by the "longest match" routines. */ @@ -202,6 +210,8 @@ unsigned near good_match; /* Use a faster search when the previous match is longer than this */ +local ulg rsync_sum; /* rolling sum of rsync window */ +local ulg rsync_chunk_end; /* next rsync sequence point */ /* Values for max_lazy_match, good_match and max_chain_length, depending on * the desired pack level (0..9). The values given below have been tuned to @@ -300,6 +310,10 @@ #endif /* prev will be initialized on the fly */ + /* rsync params */ + rsync_chunk_end = 0xFFFFFFFFUL; + rsync_sum = 0; + /* Set the default configuration parameters: */ max_lazy_match = configuration_table[pack_level].max_lazy; @@ -536,6 +550,8 @@ memcpy((char*)window, (char*)window+WSIZE, (unsigned)WSIZE); match_start -= WSIZE; strstart -= WSIZE; /* we now have strstart >= MAX_DIST: */ + if (rsync_chunk_end != 0xFFFFFFFFUL) + rsync_chunk_end -= WSIZE; block_start -= (long) WSIZE; @@ -563,13 +579,46 @@ } } +local void rsync_roll(start, num) + unsigned start; + unsigned num; +{ + unsigned i; + + if (start < RSYNC_WIN) { + /* before window fills. */ + for (i = start; i < RSYNC_WIN; i++) { + if (i == start + num) return; + rsync_sum += (ulg)window[i]; + } + num -= (RSYNC_WIN - start); + start = RSYNC_WIN; + } + + /* buffer after window full */ + for (i = start; i < start+num; i++) { + /* New character in */ + rsync_sum += (ulg)window[i]; + /* Old character out */ + rsync_sum -= (ulg)window[i - RSYNC_WIN]; + if (rsync_chunk_end == 0xFFFFFFFFUL && RSYNC_SUM_MATCH(rsync_sum)) + rsync_chunk_end = i; + } +} + +/* =========================================================================== + * Set rsync_chunk_end if window sum matches magic value. + */ +#define RSYNC_ROLL(s, n) \ + do { if (rsync) rsync_roll((s), (n)); } while(0) + /* =========================================================================== * Flush the current block, with given end-of-file flag. * IN assertion: strstart is set to the end of the current match. */ #define FLUSH_BLOCK(eof) \ flush_block(block_start >= 0L ? (char*)&window[(unsigned)block_start] : \ - (char*)NULL, (long)strstart - block_start, (eof)) + (char*)NULL, (long)strstart - block_start, flush-1, (eof)) /* =========================================================================== * Processes a new input file and return its compressed length. This @@ -580,7 +629,7 @@ local ulg deflate_fast() { IPos hash_head; /* head of the hash chain */ - int flush; /* set if current block must be flushed */ + int flush; /* set if current block must be flushed, 2=>and padded */ unsigned match_length = 0; /* length of best match */ prev_length = MIN_MATCH-1; @@ -609,6 +658,7 @@ lookahead -= match_length; + RSYNC_ROLL(strstart, match_length); /* Insert new strings in the hash table only if the match length * is not too large. This saves time but degrades compression. */ @@ -637,9 +687,14 @@ /* No match, output a literal byte */ Tracevv((stderr,"%c",window[strstart])); flush = ct_tally (0, window[strstart]); + RSYNC_ROLL(strstart, 1); lookahead--; strstart++; } + if (rsync && strstart > rsync_chunk_end) { + rsync_chunk_end = 0xFFFFFFFFUL; + flush = 2; + } if (flush) FLUSH_BLOCK(0), block_start = strstart; /* Make sure that we always have enough lookahead, except @@ -715,6 +770,7 @@ */ lookahead -= prev_length-1; prev_length -= 2; + RSYNC_ROLL(strstart, prev_length+1); do { strstart++; INSERT_STRING(strstart, hash_head); @@ -727,24 +783,39 @@ match_available = 0; match_length = MIN_MATCH-1; strstart++; - if (flush) FLUSH_BLOCK(0), block_start = strstart; + if (rsync && strstart > rsync_chunk_end) { + rsync_chunk_end = 0xFFFFFFFFUL; + flush = 2; + } + if (flush) FLUSH_BLOCK(0), block_start = strstart; } else if (match_available) { /* If there was no match at the previous position, output a * single literal. If there was a match but the current match * is longer, truncate the previous match to a single literal. */ Tracevv((stderr,"%c",window[strstart-1])); - if (ct_tally (0, window[strstart-1])) { - FLUSH_BLOCK(0), block_start = strstart; - } + flush = ct_tally (0, window[strstart-1]); + if (rsync && strstart > rsync_chunk_end) { + rsync_chunk_end = 0xFFFFFFFFUL; + flush = 2; + } + if (flush) FLUSH_BLOCK(0), block_start = strstart; + RSYNC_ROLL(strstart, 1); strstart++; lookahead--; } else { /* There is no previous match to compare with, wait for * the next step to decide. */ + if (rsync && strstart > rsync_chunk_end) { + /* Reset huffman tree */ + rsync_chunk_end = 0xFFFFFFFFUL; + flush = 2; + FLUSH_BLOCK(0), block_start = strstart; + } match_available = 1; + RSYNC_ROLL(strstart, 1); strstart++; lookahead--; } --- gzip-1.2.4.orig/gzip.c Thu Aug 19 23:39:43 1993 +++ gzip-1.2.4-rsync/gzip.c Fri Dec 29 21:20:54 2000 @@ -239,6 +239,7 @@ unsigned insize; /* valid bytes in inbuf */ unsigned inptr; /* index of next byte to be processed in inbuf */ unsigned outcnt; /* bytes in output buffer */ +int rsync = 0; /* make ryncable chunks */ struct option longopts[] = { @@ -268,6 +269,7 @@ {"best", 0, 0, '9'}, /* compress better */ {"lzw", 0, 0, 'Z'}, /* make output compatible with old compress */ {"bits", 1, 0, 'b'}, /* max number of bits per code (implies -Z) */ + {"rsyncable", 0, 0, 'R'}, /* make rsync-friendly archive */ { 0, 0, 0, 0 } }; @@ -357,6 +359,7 @@ " -Z --lzw produce output compatible with old compress", " -b --bits maxbits max number of bits per code (implies -Z)", #endif + " --rsyncable Make rsync-friendly archive", " file... files to (de)compress. If none given, use standard input.", 0}; char **p = help_msg; @@ -516,6 +519,9 @@ #else recursive = 1; break; #endif + case 'R': + rsync = 1; break; + case 'S': #ifdef NO_MULTIPLE_DOTS if (*optarg == '.') optarg++; --- gzip-1.2.4.orig/gzip.h Fri Aug 13 22:35:33 1993 +++ gzip-1.2.4-rsync/gzip.h Sat Dec 30 15:26:56 2000 @@ -131,6 +131,7 @@ extern unsigned insize; /* valid bytes in inbuf */ extern unsigned inptr; /* index of next byte to be processed in inbuf */ extern unsigned outcnt; /* bytes in output buffer */ +extern int rsync; /* deflate into rsyncable chunks */ extern long bytes_in; /* number of input bytes */ extern long bytes_out; /* number of output bytes */ @@ -282,7 +283,7 @@ /* in trees.c */ void ct_init OF((ush *attr, int *method)); int ct_tally OF((int dist, int lc)); -ulg flush_block OF((char *buf, ulg stored_len, int eof)); +ulg flush_block OF((char *buf, ulg stored_len, int pad, int eof)); /* in bits.c */ void bi_init OF((file_t zipfile)); --- gzip-1.2.4.orig/gzip.texi Thu Aug 19 06:42:50 1993 +++ gzip-1.2.4-rsync/gzip.texi Fri Dec 29 21:20:54 2000 @@ -316,6 +316,14 @@ into the directory and compress all the files it finds there (or decompress them in the case of @code{gunzip}). +@item --rsyncable +While compressing, synchronize the output occasionally based on the +input. This reduces compression by about 1 percent most cases, but +means that the @code{rsync} program can take advantage of similarities +in the uncompressed input when syncronizing two files compressed with +this flag. @code{gunzip} cannot tell the difference between a +compressed file created with this option, and one created without it. + @item --suffix @var{suf} @itemx -S @var{suf} Use suffix @samp{@var{suf}} instead of @samp{.gz}. Any suffix can be --- gzip-1.2.4.orig/trees.c Wed Aug 18 03:36:32 1993 +++ gzip-1.2.4-rsync/trees.c Sat Dec 30 15:37:00 2000 @@ -850,9 +850,10 @@ * trees or store, and output the encoded block to the zip file. This function * returns the total compressed length for the file so far. */ -ulg flush_block(buf, stored_len, eof) +ulg flush_block(buf, stored_len, pad, eof) char *buf; /* input block, or NULL if too old */ ulg stored_len; /* length of input block */ + int pad; /* pad output to byte boundary */ int eof; /* true if this is the last block for a file */ { ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ @@ -944,6 +967,10 @@ Assert (input_len == isize, "bad input size"); bi_windup(); compressed_len += 7; /* align on byte boundary */ + } else if (pad && (compressed_len % 8) != 0) { + send_bits((STORED_BLOCK<<1)+eof, 3); /* send block type */ + compressed_len = (compressed_len + 3 + 7) & ~7L; + copy_block(buf, 0, 1); /* with header */ } Tracev((stderr,"\ncomprlen %lu(%lu) ", compressed_len>>3, compressed_len-7*eof)); rsyncrypto-1.12/random.h0000644000175000017500000000061610242342676013527 0ustar sunsun#ifndef RANDOM_H #define RANDOM_H class random { public: static void rand(void *buff, size_t size) { if( !RAND_bytes(static_cast(buff), size) ) throw rscerror("No random entropy for key and IV"); } static unsigned char rand() { unsigned char ret; rand( &ret, sizeof(ret) ); return ret; } }; #endif // RANDOM_H rsyncrypto-1.12/NEWS0000644000175000017500000000020511013012005012540 0ustar sunsunA new tool has been introduced, called rsyncrypto_recover. It allows extracting all good mapping from an otherwise corrupt file map. rsyncrypto-1.12/rcserror.h0000644000175000017500000000207411027104556014103 0ustar sunsun#ifndef RCS_ERROR_H #define RCS_ERROR_H class rscerror { std::string msg; std::string sysmsg; std::string param; int errnum; public: explicit rscerror( const char *msg_p ) : msg(msg_p) { } explicit rscerror( const char *msg_p, int error, const char *param_p="" ) : msg(msg_p), sysmsg(strerror(error)), param(param_p), errnum(error) { } std::string error() const { std::string ret(msg); if( param.length()!=0 ) ret+="("+param+")"; if( sysmsg.length()!=0 ) ret+=": "+sysmsg; return ret; } int errornum() const { return errnum; } }; class delayed_error : public rscerror { public: delayed_error() : rscerror("Exit code delayed from previous errors") { } }; #define EXCEPT_CLASS rscerror #endif // RCS_ERROR_H rsyncrypto-1.12/aes_crypt.cpp0000644000175000017500000000752111030247151014561 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2006-2008 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com/ */ #include "precomp.h" #include "aes_crypt.h" aes_key::aes_key( uint16_t key_size, uint32_t sum_span, uint32_t sum_mod, uint32_t sum_min_dist, const unsigned char *buffer ) : key(key_size, CYPHER_AES, sum_span, sum_mod, sum_min_dist), secret_key(new unsigned char[key_size]) { const aes_export *import=reinterpret_cast(buffer); memcpy( aes_header.iv, import->iv, sizeof(aes_header.iv) ); memcpy( secret_key.get(), import->key, key_size ); update_keys(); } aes_key::aes_key( size_t keybits, uint32_t sum_span, uint32_t sum_mod, uint32_t sum_min_dist ) : key(keybits==0?32:(keybits+7)/8, CYPHER_AES, sum_span, sum_mod, sum_min_dist ), secret_key(new unsigned char[header.key_size]) { if( !RAND_bytes(aes_header.iv, sizeof( aes_header.iv )) || !RAND_bytes(secret_key.get(), header.key_size) ) throw rscerror("No random entropy for key and IV"); update_keys(); } aes_key::aes_key( const aes_key &that ) : key( that.header.key_size, CYPHER_AES, that.header.sum_span, that.header.sum_mod, that.header.sum_min_dist ), secret_key( new unsigned char [header.key_size] ) { memcpy( aes_header.iv, that.aes_header.iv, sizeof( aes_header.iv ) ); memcpy( secret_key.get(), that.secret_key.get(), header.key_size ); update_keys(); } size_t aes_key::export_key( void *buffer ) const { unsigned char *buff=static_cast(buffer); size_t length=key::export_key( buffer ); memcpy( buff+length, aes_header.iv, sizeof( aes_header.iv ) ); length+=sizeof( aes_header.iv ); memcpy( buff+length, secret_key.get(), header.key_size ); length+=header.key_size; return length; } key *aes_key::gen_pad_key() const { std::auto_ptr ret(new aes_key(*this)); for( unsigned int i=0; iaes_header.iv[i]=~ret->aes_header.iv[i]; return ret.release(); } void aes_key::init_encrypt() { key::init_encrypt(); memcpy( cbc_base, aes_header.iv, sizeof(cbc_base) ); } void aes_key::encrypt_block( unsigned char *data, size_t size ) { AES_cbc_encrypt( data, data, size, &encrypt_key, cbc_base, AES_ENCRYPT ); } void aes_key::decrypt_block( unsigned char *data, size_t size ) { AES_cbc_encrypt( data, data, size, &decrypt_key, cbc_base, AES_DECRYPT ); } rsyncrypto-1.12/main.cpp0000644000175000017500000001462611030247151013520 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2005-2008 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com/ */ #include "precomp.h" #include "rsyncrypto.h" #include "file.h" #include "crypto.h" #include "argtable2.h" #include "filemap.h" std::auto_ptr changes_log; void version() { printf("%s by Shachar Shemesh\n", PACKAGE_STRING); printf("This program was developed as part of Lingnu Open Source Consulting's online\n" "backup service. For further details check out http://www.lingnu.com\n"); } void usage() { fprintf(stderr, "%s ", PACKAGE_STRING ); arg_print_syntax(stderr, options.argtable, "\n\n"); arg_print_glossary(stderr, options.argtable, "%-22s %s\n"); exit(0); } startup_options options; void parse_cmdline( int argc, char *argv[] ) { int nerrors=arg_parse( argc, argv, options.argtable ); if( nerrors!=0 ) { std::cerr<<"Incorrect arguments"<(new std::ofstream(FILENAME(export_changes), std::ofstream::trunc)); } const char *opname=NULL; encryptfunc op; namefunc srcnameop=name_concat, dstnameop=name_concat, keynameop=name_concat; bool encrypt=true; if( EXISTS(decrypt) ) { op=file_decrypt; opname="Decrypting"; encrypt=false; } else { op=file_encrypt; opname="Encrypting"; } if( EXISTS(nameenc) ) { if( encrypt ) { dstnameop=filemap::namecat_encrypt; keynameop=dstnameop; } else { if( EXISTS(recurse) || EXISTS(filelist) ) { // First decrypt the encrypted file list file_decrypt(autofd::combine_paths(FILENAME(src), FILEMAPNAME).c_str(), FILENAME(nameenc), autofd::combine_paths(FILENAME(key), FILEMAPNAME).c_str(), rsa_key, NULL ); } dstnameop=filemap::namecat_decrypt; } filemap::fill_map(FILENAME(nameenc), encrypt); } if( EXISTS(recurse) || EXISTS(filelist) ) { if( EXISTS(recurse) ) dir_encrypt(FILENAME(src), FILENAME(dst), FILENAME(key), rsa_key, op, opname, dstnameop, keynameop); else filelist_encrypt( FILENAME(src), FILENAME(dst), FILENAME(key), rsa_key, op, opname, srcnameop, dstnameop, keynameop); if( encrypt && EXISTS(nameenc) ) { // Write the (possibly changed) filelist back to the file filemap::write_map(FILENAME(nameenc)); // Encrypt the filelist file itself file_encrypt(FILENAME(nameenc), autofd::combine_paths(FILENAME(dst), FILEMAPNAME). c_str(), autofd::combine_paths(FILENAME(key), FILEMAPNAME).c_str(), rsa_key, NULL ); } } else { struct stat status, *pstat=&status; if( strcmp( FILENAME(src), "-" )!=0 ) { status=autofd::stat(FILENAME(src)); } else pstat=NULL; op( FILENAME(src), FILENAME(dst), FILENAME(key), rsa_key, pstat ); } } catch( const rscerror &err ) { std::cerr</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 # PATH needs CR # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false 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.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. 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 echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. 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 # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF 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 : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF 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 : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. 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" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi 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 fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi 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=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, 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= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='rsyncrypto' PACKAGE_TARNAME='rsyncrypto' PACKAGE_VERSION='1.12' PACKAGE_STRING='rsyncrypto 1.12' PACKAGE_BUGREPORT='' ac_unique_file="rsyncrypto.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA am__isrc CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP GREP EGREP LIBOBJS LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false # 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=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_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=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_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && 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'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. 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 case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } 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 echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # 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 -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | 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 .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } 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 rsyncrypto 1.12 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --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/rsyncrypto] --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 _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of rsyncrypto 1.12:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-largefile omit support for large files Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-openssl=DIR use openssl install directory --with-argtable2=DIR use argtable2 build directory Some influential environment variables: CXX C++ compiler command CXXFLAGS 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 C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory 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. _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" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`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 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 rsyncrypto configure 1.12 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Copyright (C) 2005-2008 Shachar Shemesh for Lingnu Open Source Consulting ltd. _ACEOF exit fi 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 rsyncrypto $as_me 1.12, which was generated by GNU Autoconf 2.61. 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=. 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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$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 ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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 cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX 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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_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 cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" 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'; { (exit 1); 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 # 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 # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" 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. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 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 { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`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. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } 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 am__api_version='1.10' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS 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 { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$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' { echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm -f conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi { echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi 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. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { echo "$as_me:$LINENO: result: $MKDIR_P" >&5 echo "${ECHO_T}$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$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 { echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AWK" && break done { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&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 { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 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 { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } 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='rsyncrypto' VERSION='1.12' 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"} install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} # 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 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$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 { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$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 { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&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" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_config_headers="$ac_config_headers config.h" #AM_MAINTAINER_MODE # Checks for programs. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$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 { echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$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 { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out 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. { echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5 echo $ECHO_N "checking for C++ compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 | *.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 { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C++ compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C++ compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5 echo $ECHO_N "checking whether the C++ compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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 { echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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 { echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi { echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_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='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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'. 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 for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} 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 sub/conftest.${OBJEXT-o} 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 { echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$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 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 # 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. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS 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 { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$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' { echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi 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. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { echo "$as_me:$LINENO: result: $MKDIR_P" >&5 echo "${ECHO_T}$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 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$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 { echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AWK" && break done # Checks for libraries. # Check whether --with-openssl was given. if test "${with_openssl+set}" = set; then withval=$with_openssl; { echo "$as_me:$LINENO: checking for openssl path override" >&5 echo $ECHO_N "checking for openssl path override... $ECHO_C" >&6; } case "$withval" in yes|no) { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } ;; *) { echo "$as_me:$LINENO: result: $withval" >&5 echo "${ECHO_T}$withval" >&6; } CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" ;; esac fi { echo "$as_me:$LINENO: checking for AES_encrypt in -lcrypto" >&5 echo $ECHO_N "checking for AES_encrypt in -lcrypto... $ECHO_C" >&6; } if test "${ac_cv_lib_crypto_AES_encrypt+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypto $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 AES_encrypt (); int main () { return AES_encrypt (); ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_crypto_AES_encrypt=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_crypto_AES_encrypt=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_crypto_AES_encrypt" >&5 echo "${ECHO_T}$ac_cv_lib_crypto_AES_encrypt" >&6; } if test $ac_cv_lib_crypto_AES_encrypt = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBCRYPTO 1 _ACEOF LIBS="-lcrypto $LIBS" else { { echo "$as_me:$LINENO: error: AES implementation in openssl not found See \`config.log' for more details." >&5 echo "$as_me: error: AES implementation in openssl not found See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi # Check whether --with-argtable2 was given. if test "${with_argtable2+set}" = set; then withval=$with_argtable2; { echo "$as_me:$LINENO: checking for argtable2 path override" >&5 echo $ECHO_N "checking for argtable2 path override... $ECHO_C" >&6; } case "$withval" in yes|no) { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } ;; *) { echo "$as_me:$LINENO: result: $withval" >&5 echo "${ECHO_T}$withval" >&6; } CPPFLAGS="$CPPFLAGS -I$withval" LDFLAGS="$LDFLAGS -L$withval/.libs" esac fi { echo "$as_me:$LINENO: checking for arg_parse in -largtable2" >&5 echo $ECHO_N "checking for arg_parse in -largtable2... $ECHO_C" >&6; } if test "${ac_cv_lib_argtable2_arg_parse+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-largtable2 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 arg_parse (); int main () { return arg_parse (); ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_argtable2_arg_parse=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_argtable2_arg_parse=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_argtable2_arg_parse" >&5 echo "${ECHO_T}$ac_cv_lib_argtable2_arg_parse" >&6; } if test $ac_cv_lib_argtable2_arg_parse = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBARGTABLE2 1 _ACEOF LIBS="-largtable2 $LIBS" else { { echo "$as_me:$LINENO: error: argtable2 not found See \`config.log' for more details." >&5 echo "$as_me: error: argtable2 not found See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: checking whether platform supports lstat" >&5 echo $ECHO_N "checking whether platform supports lstat... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define lstat to an innocuous variant, in case declares lstat. For example, HP-UX 11i declares gettimeofday. */ #define lstat innocuous_lstat /* System header to define __stub macros and hopefully few prototypes, which can conflict with char lstat (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef lstat /* 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 lstat (); /* 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_lstat || defined __stub___lstat choke me #endif int main () { return lstat (); ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } cat >>confdefs.h <<\_ACEOF #define HAVE_LSTAT 1 _ACEOF else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext # Checks for header files. # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5 echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6; } if test "${ac_cv_sys_largefile_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_largefile_CC=' -n32'; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5 echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5 echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6; } if test "${ac_cv_sys_file_offset_bits+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_file_offset_bits=no; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_file_offset_bits=64; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5 echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -f conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5 echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6; } if test "${ac_cv_sys_large_files+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_large_files=no; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_large_files=1; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5 echo "${ECHO_T}$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -f conftest* fi fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { echo "$as_me:$LINENO: checking for library containing opendir" >&5 echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } if test "${ac_cv_search_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_search_opendir=$ac_res else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext if test "${ac_cv_search_opendir+set}" = set; then break fi done if test "${ac_cv_search_opendir+set}" = set; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 echo "${ECHO_T}$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { echo "$as_me:$LINENO: checking for library containing opendir" >&5 echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } if test "${ac_cv_search_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_search_opendir=$ac_res else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext if test "${ac_cv_search_opendir+set}" = set; then break fi done if test "${ac_cv_search_opendir+set}" = set; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 echo "${ECHO_T}$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi 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 { echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f 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 { echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"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" "$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 ac_count=`expr $ac_count + 1` 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 fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" 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 ac_count=`expr $ac_count + 1` 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 fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi { echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6; } if test "${ac_cv_header_sys_wait_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_sys_wait_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_SYS_WAIT_H 1 _ACEOF 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=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in fcntl.h netinet/in.h stdlib.h string.h strings.h sys/time.h unistd.h utime.h sys/mman.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in argtable2.h map do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else { { echo "$as_me:$LINENO: error: Mandatory header file not found See \`config.log' for more details." >&5 echo "$as_me: error: Mandatory header file not found See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi done # Checks for typedefs, structures, and compiler characteristics. { echo "$as_me:$LINENO: checking for mode_t" >&5 echo $ECHO_N "checking for mode_t... $ECHO_C" >&6; } if test "${ac_cv_type_mode_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef mode_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_mode_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_mode_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5 echo "${ECHO_T}$ac_cv_type_mode_t" >&6; } if test $ac_cv_type_mode_t = yes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi { echo "$as_me:$LINENO: checking for off_t" >&5 echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } if test "${ac_cv_type_off_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef off_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_off_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_off_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 echo "${ECHO_T}$ac_cv_type_off_t" >&6; } if test $ac_cv_type_off_t = yes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi { echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef size_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6; } if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { echo "$as_me:$LINENO: checking for ssize_t" >&5 echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6; } if test "${ac_cv_type_ssize_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef ssize_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_ssize_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_ssize_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_ssize_t" >&5 echo "${ECHO_T}$ac_cv_type_ssize_t" >&6; } if test $ac_cv_type_ssize_t = yes; then : else cat >>confdefs.h <<_ACEOF #define ssize_t int _ACEOF fi { echo "$as_me:$LINENO: checking for struct stat.st_rdev" >&5 echo $ECHO_N "checking for struct stat.st_rdev... $ECHO_C" >&6; } if test "${ac_cv_member_struct_stat_st_rdev+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static struct stat ac_aggr; if (ac_aggr.st_rdev) return 0; ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct_stat_st_rdev=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static struct stat ac_aggr; if (sizeof ac_aggr.st_rdev) return 0; ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_member_struct_stat_st_rdev=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_struct_stat_st_rdev=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 { echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_rdev" >&5 echo "${ECHO_T}$ac_cv_member_struct_stat_st_rdev" >&6; } if test $ac_cv_member_struct_stat_st_rdev = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_STAT_ST_RDEV 1 _ACEOF fi { echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; } if test "${ac_cv_header_time+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_time=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 echo "${ECHO_T}$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\_ACEOF #define TIME_WITH_SYS_TIME 1 _ACEOF fi { echo "$as_me:$LINENO: checking for uint16_t" >&5 echo $ECHO_N "checking for uint16_t... $ECHO_C" >&6; } if test "${ac_cv_c_uint16_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_uint16_t=no for ac_type in 'uint16_t' 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(($ac_type) -1 >> (16 - 1) == 1)]; test_array [0] = 0 ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then case $ac_type in uint16_t) ac_cv_c_uint16_t=yes ;; *) ac_cv_c_uint16_t=$ac_type ;; esac else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_uint16_t" != no && break done fi { echo "$as_me:$LINENO: result: $ac_cv_c_uint16_t" >&5 echo "${ECHO_T}$ac_cv_c_uint16_t" >&6; } case $ac_cv_c_uint16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define uint16_t $ac_cv_c_uint16_t _ACEOF ;; esac { echo "$as_me:$LINENO: checking for uint32_t" >&5 echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6; } if test "${ac_cv_c_uint32_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_uint32_t=no for ac_type in 'uint32_t' 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(($ac_type) -1 >> (32 - 1) == 1)]; test_array [0] = 0 ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then case $ac_type in uint32_t) ac_cv_c_uint32_t=yes ;; *) ac_cv_c_uint32_t=$ac_type ;; esac else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_uint32_t" != no && break done fi { echo "$as_me:$LINENO: result: $ac_cv_c_uint32_t" >&5 echo "${ECHO_T}$ac_cv_c_uint32_t" >&6; } case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) cat >>confdefs.h <<\_ACEOF #define _UINT32_T 1 _ACEOF cat >>confdefs.h <<_ACEOF #define uint32_t $ac_cv_c_uint32_t _ACEOF ;; esac { echo "$as_me:$LINENO: checking for uint8_t" >&5 echo $ECHO_N "checking for uint8_t... $ECHO_C" >&6; } if test "${ac_cv_c_uint8_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_uint8_t=no for ac_type in 'uint8_t' 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(($ac_type) -1 >> (8 - 1) == 1)]; test_array [0] = 0 ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then case $ac_type in uint8_t) ac_cv_c_uint8_t=yes ;; *) ac_cv_c_uint8_t=$ac_type ;; esac else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_uint8_t" != no && break done fi { echo "$as_me:$LINENO: result: $ac_cv_c_uint8_t" >&5 echo "${ECHO_T}$ac_cv_c_uint8_t" >&6; } case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) cat >>confdefs.h <<\_ACEOF #define _UINT8_T 1 _ACEOF cat >>confdefs.h <<_ACEOF #define uint8_t $ac_cv_c_uint8_t _ACEOF ;; esac { echo "$as_me:$LINENO: checking for O_NOATIME support in open" >&5 echo $ECHO_N "checking for O_NOATIME support in open... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { int fd=open("/dev/null", O_RDONLY|O_NOATIME) ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then cat >>confdefs.h <<\_ACEOF #define HAVE_NOATIME 1 _ACEOF { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: checking whether struct stat has nanosecond resolution" >&5 echo $ECHO_N "checking whether struct stat has nanosecond resolution... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { struct stat st; st.st_mtim.tv_nsec=0; ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then cat >>confdefs.h <<\_ACEOF #define HAVE_STAT_NSEC 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define st_mtime_nsec st_mtim.tv_nsec _ACEOF cat >>confdefs.h <<\_ACEOF #define st_atime_nsec st_atim.tv_nsec _ACEOF cat >>confdefs.h <<\_ACEOF #define st_ctime_nsec st_ctim.tv_nsec _ACEOF { echo "$as_me:$LINENO: result: st_mtim is a struct timespec" >&5 echo "${ECHO_T}st_mtim is a struct timespec" >&6; } else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { struct stat st; st.st_mtimespec.tv_nsec=0; ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then cat >>confdefs.h <<\_ACEOF #define HAVE_STAT_NSEC 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define st_mtime_nsec st_mtimespec.tv_nsec _ACEOF cat >>confdefs.h <<\_ACEOF #define st_atime_nsec st_atimespec.tv_nsec _ACEOF cat >>confdefs.h <<\_ACEOF #define st_ctime_nsec st_ctimespec.tv_nsec _ACEOF { echo "$as_me:$LINENO: result: st_mtimespec is a struct timespec" >&5 echo "${ECHO_T}st_mtimespec is a struct timespec" >&6; } else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } { echo "$as_me:$LINENO: WARNING: file times will have a 1 second resolution" >&5 echo "$as_me: WARNING: file times will have a 1 second resolution" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: checking whether closedir returns void" >&5 echo $ECHO_N "checking whether closedir returns void... $ECHO_C" >&6; } if test "${ac_cv_func_closedir_void+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_closedir_void=yes else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header_dirent> #ifndef __cplusplus int closedir (); #endif int main () { return closedir (opendir (".")) != 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_closedir_void=no else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_closedir_void=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_closedir_void" >&5 echo "${ECHO_T}$ac_cv_func_closedir_void" >&6; } if test $ac_cv_func_closedir_void = yes; then cat >>confdefs.h <<\_ACEOF #define CLOSEDIR_VOID 1 _ACEOF fi { echo "$as_me:$LINENO: checking for error_at_line" >&5 echo $ECHO_N "checking for error_at_line... $ECHO_C" >&6; } if test "${ac_cv_lib_error_at_line+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_error_at_line=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_error_at_line=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_lib_error_at_line" >&5 echo "${ECHO_T}$ac_cv_lib_error_at_line" >&6; } if test $ac_cv_lib_error_at_line = no; then case " $LIBOBJS " in *" error.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS error.$ac_objext" ;; esac fi { echo "$as_me:$LINENO: checking for pid_t" >&5 echo $ECHO_N "checking for pid_t... $ECHO_C" >&6; } if test "${ac_cv_type_pid_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef pid_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_pid_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_pid_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 echo "${ECHO_T}$ac_cv_type_pid_t" >&6; } if test $ac_cv_type_pid_t = yes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi for ac_header in vfork.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in fork vfork do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* 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 $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { echo "$as_me:$LINENO: checking for working fork" >&5 echo $ECHO_N "checking for working fork... $ECHO_C" >&6; } if test "${ac_cv_func_fork_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_fork_works=cross else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_fork_works=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5 echo "${ECHO_T}$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { echo "$as_me:$LINENO: checking for working vfork" >&5 echo $ECHO_N "checking for working vfork... $ECHO_C" >&6; } if test "${ac_cv_func_vfork_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_vfork_works=cross else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_vfork_works=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5 echo "${ECHO_T}$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_VFORK 1 _ACEOF else cat >>confdefs.h <<\_ACEOF #define vfork fork _ACEOF fi if test "x$ac_cv_func_fork_works" = xyes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WORKING_FORK 1 _ACEOF fi { echo "$as_me:$LINENO: checking whether lstat dereferences a symlink specified with a trailing slash" >&5 echo $ECHO_N "checking whether lstat dereferences a symlink specified with a trailing slash... $ECHO_C" >&6; } if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f conftest.sym conftest.file echo >conftest.file if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then if test "$cross_compiling" = yes; then ac_cv_func_lstat_dereferences_slashed_symlink=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; /* Linux will dereference the symlink and fail. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_lstat_dereferences_slashed_symlink=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi else # If the `ln -s' command failed, then we probably don't even # have an lstat function. ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f conftest.sym conftest.file fi { echo "$as_me:$LINENO: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 echo "${ECHO_T}$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && cat >>confdefs.h <<_ACEOF #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 _ACEOF if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then case " $LIBOBJS " in *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac fi { echo "$as_me:$LINENO: checking whether lstat accepts an empty string" >&5 echo $ECHO_N "checking whether lstat accepts an empty string... $ECHO_C" >&6; } if test "${ac_cv_func_lstat_empty_string_bug+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_lstat_empty_string_bug=yes else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; return lstat ("", &sbuf) == 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_lstat_empty_string_bug=no else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_lstat_empty_string_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_lstat_empty_string_bug" >&5 echo "${ECHO_T}$ac_cv_func_lstat_empty_string_bug" >&6; } if test $ac_cv_func_lstat_empty_string_bug = yes; then case " $LIBOBJS " in *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac cat >>confdefs.h <<_ACEOF #define HAVE_LSTAT_EMPTY_STRING_BUG 1 _ACEOF fi { echo "$as_me:$LINENO: checking whether lstat dereferences a symlink specified with a trailing slash" >&5 echo $ECHO_N "checking whether lstat dereferences a symlink specified with a trailing slash... $ECHO_C" >&6; } if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f conftest.sym conftest.file echo >conftest.file if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then if test "$cross_compiling" = yes; then ac_cv_func_lstat_dereferences_slashed_symlink=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; /* Linux will dereference the symlink and fail. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_lstat_dereferences_slashed_symlink=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi else # If the `ln -s' command failed, then we probably don't even # have an lstat function. ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f conftest.sym conftest.file fi { echo "$as_me:$LINENO: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 echo "${ECHO_T}$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && cat >>confdefs.h <<_ACEOF #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 _ACEOF if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then case " $LIBOBJS " in *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac fi { echo "$as_me:$LINENO: checking whether stat accepts an empty string" >&5 echo $ECHO_N "checking whether stat accepts an empty string... $ECHO_C" >&6; } if test "${ac_cv_func_stat_empty_string_bug+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_stat_empty_string_bug=yes else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; return stat ("", &sbuf) == 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_stat_empty_string_bug=no else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_stat_empty_string_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_stat_empty_string_bug" >&5 echo "${ECHO_T}$ac_cv_func_stat_empty_string_bug" >&6; } if test $ac_cv_func_stat_empty_string_bug = yes; then case " $LIBOBJS " in *" stat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS stat.$ac_objext" ;; esac cat >>confdefs.h <<_ACEOF #define HAVE_STAT_EMPTY_STRING_BUG 1 _ACEOF fi for ac_func in bzero dup2 memset mkdir munmap rmdir strchr strerror strtoul do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* 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 $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done cat >>confdefs.h <<\_ACEOF #define DIRSEP_S "/" _ACEOF cat >>confdefs.h <<\_ACEOF #define DIRSEP_C '/' _ACEOF { echo "$as_me:$LINENO: checking for gzip with \"rsyncable\" support" >&5 echo $ECHO_N "checking for gzip with \"rsyncable\" support... $ECHO_C" >&6; } if ( gzip --rsyncable >/dev/null 2>conftest.out &5 echo "${ECHO_T}yes" >&6; } else { echo "$as_me:$LINENO: result: no!" >&5 echo "${ECHO_T}no!" >&6; } { echo "$as_me:$LINENO: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&5 echo "$as_me: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&2;} { echo "$as_me:$LINENO: WARNING: ! gzip must support the \"--rsyncable\" flag for proper rsyncrypto operation. !" >&5 echo "$as_me: WARNING: ! gzip must support the \"--rsyncable\" flag for proper rsyncrypto operation. !" >&2;} { echo "$as_me:$LINENO: WARNING: ! This does not affect compilation, but a proper gzip must be available at runtime. !" >&5 echo "$as_me: WARNING: ! This does not affect compilation, but a proper gzip must be available at runtime. !" >&2;} { echo "$as_me:$LINENO: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&5 echo "$as_me: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&2;} fi # Checks for library functions. ac_config_files="$ac_config_files 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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_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 test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 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= 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=`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. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $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} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## 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=: # 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 # PATH needs CR # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false 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.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. 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 echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. 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 # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. 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" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi 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 fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi 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=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # 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 rsyncrypto $as_me 1.12, which was generated by GNU Autoconf 2.61. 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 cat >>$CONFIG_STATUS <<_ACEOF # 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_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet 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_cs_version="\\ rsyncrypto config.status 1.12 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 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' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. 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=$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 ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) 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. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$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 if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; 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= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim am__isrc!$am__isrc$ac_delim CYGPATH_W!$CYGPATH_W$ac_delim PACKAGE!$PACKAGE$ac_delim VERSION!$VERSION$ac_delim ACLOCAL!$ACLOCAL$ac_delim AUTOCONF!$AUTOCONF$ac_delim AUTOMAKE!$AUTOMAKE$ac_delim AUTOHEADER!$AUTOHEADER$ac_delim MAKEINFO!$MAKEINFO$ac_delim install_sh!$install_sh$ac_delim STRIP!$STRIP$ac_delim INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim mkdir_p!$mkdir_p$ac_delim AWK!$AWK$ac_delim SET_MAKE!$SET_MAKE$ac_delim am__leading_dot!$am__leading_dot$ac_delim AMTAR!$AMTAR$ac_delim am__tar!$am__tar$ac_delim am__untar!$am__untar$ac_delim CXX!$CXX$ac_delim CXXFLAGS!$CXXFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CXX!$ac_ct_CXX$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim DEPDIR!$DEPDIR$ac_delim am__include!$am__include$ac_delim am__quote!$am__quote$ac_delim AMDEP_TRUE!$AMDEP_TRUE$ac_delim AMDEP_FALSE!$AMDEP_FALSE$ac_delim AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim CXXDEPMODE!$CXXDEPMODE$ac_delim am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim CXXCPP!$CXXCPP$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 80; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ 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[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[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="$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 || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$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 "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; 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 || 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" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`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 || 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" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`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 # 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= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF 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 sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;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 " $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 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 "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :H) # # CONFIG_HEADER # _ACEOF # Transform confdefs.h into a sed script `conftest.defines', that # substitutes the proper values into config.h.in to produce config.h. rm -f conftest.defines conftest.tail # First, append a space to every undef/define line, to ease matching. echo 's/$/ /' >conftest.defines # Then, protect against being on the right side of a sed subst, or in # an unquoted here document, in config.status. If some macros were # called several times there might be several #defines for the same # symbol, which is useless. But do not sort them, since the last # AC_DEFINE must be honored. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* # These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where # NAME is the cpp macro being defined, VALUE is the value it is being given. # PARAMS is the parameter list in the macro definition--in most cases, it's # just an empty string. ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' ac_dB='\\)[ (].*,\\1define\\2' ac_dC=' ' ac_dD=' ,' uniq confdefs.h | sed -n ' t rset :rset s/^[ ]*#[ ]*define[ ][ ]*// t ok d :ok s/[\\&,]/\\&/g s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p ' >>conftest.defines # Remove the space that was appended to ease matching. # Then 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. # (The regexp can be short, since the line contains either #define or #undef.) echo 's/ $// s,^[ #]*u.*,/* & */,' >>conftest.defines # Break up conftest.defines: ac_max_sed_lines=50 # First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" # Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" # Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" # et cetera. ac_in='$ac_file_inputs' ac_out='"$tmp/out1"' ac_nxt='"$tmp/out2"' while : do # Write a here document: cat >>$CONFIG_STATUS <<_ACEOF # First, check the format of the line: cat >"\$tmp/defines.sed" <<\\CEOF /^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def /^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def b :def _ACEOF sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail grep . conftest.tail >/dev/null || break rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines conftest.tail echo "ac_result=$ac_in" >>$CONFIG_STATUS cat >>$CONFIG_STATUS <<\_ACEOF if test x"$ac_file" != x-; then echo "/* $configure_input */" >"$tmp/config.h" cat "$ac_result" >>"$tmp/config.h" if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else rm -f $ac_file mv "$tmp/config.h" $ac_file fi else echo "/* $configure_input */" cat "$ac_result" fi rm -f "$tmp/out12" # 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 || 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) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; 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 || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || 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 case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`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 || 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" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # 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 || { (exit 1); exit 1; } fi rsyncrypto-1.12/blocksizes.cpp0000644000175000017500000000461411030247151014740 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2005 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com/ */ #include "precomp.h" #include "rsyncrypto.h" #include "crypt_key.h" #include "random.h" startup_options options; int main( int argc, char *argv[] ) { if( argc<4 ) { std::cout<<"Usage: blocksizes winsize minsize modulo "<4 ) times=strtoul(argv[4], NULL, 10); ARG(verbosity).count=3; std::auto_ptr testkey(key::new_key( key::CYPHER_AES, 0, VAL(rollwin), VAL(rollmin), VAL(rollsens) )); bool border=true; do { if( border ) { testkey->init_encrypt(); --times; } unsigned char buff; random::rand( &buff, 1 ); border=testkey->calc_boundry( buff ); } while( times>0 ); return 0; } rsyncrypto-1.12/filemap.h0000644000175000017500000000302211007571160013646 0ustar sunsun#ifndef FILELIST_H #define FILELIST_H #ifndef FILE_H #include "file.h" #endif class filemap; typedef std::map filemaptype; typedef std::map revfilemap; class filemap { std::string plainname; std::string ciphername; char dirsep; public: filemap() : dirsep('\0') { } static void fill_map( const char *list_filename, bool encrypt ); static void write_map( const char *list_filename ); // Helper functions for name conversions static std::string namecat_encrypt( const char *left, const char *right, mode_t mode ); static std::string namecat_decrypt( const char *left, const char *right, mode_t mode ); //static std::string create_combined_path( const char *left, const char *right ); static void enc_file_delete( const char *source_dir, const char *dst_dir, const char *key_dir, filemaptype::iterator &item, RSA *rsa_key ); private: static void nest_name( std::string &name ); }; extern filemaptype filelist; extern revfilemap reversemap; // Cypher->plain mapping for encryption usage // Helper functions for "dir" scan typedef void (*encopfunc)( const char *source_dir, const char *dst_dir, const char *key_dir, filemaptype::iterator &item, RSA *rsa_key ); void virt_recurse_dir_enc( const char *encdir, const char *plaindir, const char *keydir, RSA *rsa_key, encopfunc op, const char *dir_sig_part ); // The file name by which the file list is stored inside the encrypted directory static const char FILEMAPNAME[]="filemap"; #endif rsyncrypto-1.12/aclocal.m40000644000175000017500000007761011041707160013735 0ustar sunsun# generated automatically by aclocal 1.10.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(AC_AUTOCONF_VERSION, [2.61],, [m4_warning([this file was generated for autoconf 2.61. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.10' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.10.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.10.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} 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 sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 3 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008 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 13 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.60])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) ]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005 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 install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .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 # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 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_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_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], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # 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 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]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _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. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR rsyncrypto-1.12/bufferfd.cpp0000644000175000017500000000605011030247151014347 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2006-2008 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com/ */ #include "precomp.h" #include "bufferfd.h" const size_t read_bufferfd::DEFAULT_BUF_SIZE=8192; const size_t write_bufferfd::DEFAULT_BUF_SIZE=8192; #ifndef min static inline size_t min( size_t a, size_t b ) { return astartpos ) // If there is anything in the buffer, return that return buffer_copy( buf, count ); else { endpos=0; startpos=0; ssize_t numread=autofd::read( buffer.get(), buf_size ); if( numread>0 ) { endpos+=numread; return buffer_copy( buf, count ); } else { // We have an error return numread; } } } //ssize_t write_bufferfd::buffer_copy( void *buf, size_t count ) const ssize_t write_bufferfd::write( void *buf, size_t count ) { size_t buffree=buf_size-buffill; if( count>(buffree+buf_size) ) { // No point in trying to cache this one. flush(); return autofd::write(buf, count); } // Fill in the buffer with data size_t fill=min(buffree, count); memcpy( buffer.get()+buffill, buf, fill ); count-=fill; buffill+=fill; if( count>0 ) { flush(); memcpy( buffer.get(), static_cast(buf)+fill, count ); buffill=count; } return count; } void write_bufferfd::flush() { if( buffill>0 ) { autofd::write( buffer.get(), buffill ); buffill=0; } } rsyncrypto-1.12/crypt_key.cpp0000644000175000017500000001035511030247151014600 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2006-2008 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com/ */ #include "precomp.h" #include "rsyncrypto.h" #include "crypt_key.h" #include "aes_crypt.h" const uint32_t key::VERSION_MAGIC_1=0xD657EA1Cul; const uint32_t key::VERSION_MAGIC_CUR=VERSION_MAGIC_1; key *key::read_key( const unsigned char *buffer ) { const ext_key_header *buff=reinterpret_cast(buffer); if( buff->version!=htonl(VERSION_MAGIC_1) ) throw rscerror("Invalid version magic"); std::auto_ptr ret; switch( static_cast(buff->cypher) ) { case CYPHER_AES: ret=std::auto_ptr(new aes_key( ntohs(buff->key_size), ntohl(buff->sum_span), ntohl(buff->sum_mod), ntohl(buff->sum_min_dist), buffer+sizeof(*buff) )); break; default: throw rscerror("Invalid block cypher"); } return ret.release(); } key *key::new_key( CYPHER_TYPES cypher, size_t keybits, uint32_t sum_span, uint32_t sum_mod, uint32_t sum_min_dist ) { std::auto_ptr ret; switch( static_cast(cypher) ) { case CYPHER_AES: ret=std::auto_ptr(new aes_key( keybits, sum_span, sum_mod, sum_min_dist )); break; default: throw rscerror("Invalid block cypher"); } return ret.release(); } size_t key::export_key( void *buffer ) const { struct ext_key_header *export_buff=static_cast(buffer); bzero(export_buff, sizeof(*export_buff)); export_buff->version=htonl(header.version); export_buff->cypher=htons(header.cypher); export_buff->key_size=htons(header.key_size); export_buff->sum_span=htonl(header.sum_span); export_buff->sum_mod=htonl(header.sum_mod); export_buff->sum_min_dist=htonl(header.sum_min_dist); return key::exported_length(); } void key::pad_area( unsigned char *buffer, size_t size ) const { std::auto_ptr pad_key(gen_pad_key()); bzero( buffer, size ); pad_key->init_encrypt(); const size_t blocksize=block_size(); for( unsigned int i=0; iencrypt_block( buffer+i, blocksize ); } void key::init_encrypt() { ptbuf_loc=0; ptbuf_sum=0; ptbuf_count=0; ptbuf_sub=false; ptbuf_may_rotate=false; } bool key::calc_boundry( unsigned char data ) { ptbuf_sum+=data; if( ptbuf_sub ) ptbuf_sum-=plaintext_buffer[ptbuf_loc]; plaintext_buffer[ptbuf_loc]=data; if( (++ptbuf_loc)==header.sum_span ) { ptbuf_loc=0; ptbuf_sub=true; } if( (ptbuf_count++)==header.sum_min_dist ) { ptbuf_may_rotate=true; } if( ptbuf_may_rotate && (ptbuf_sum%header.sum_mod)==0 ) { if( ARG(verbosity).count>=3 ) { std::cerr<<"Rotated "< #include "win32/types.h" #endif // "sys" includes #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_STAT_H #include #endif #if HAVE_SYS_MMAN_H #include #endif #if HAVE_SYS_WAIT_H #include #endif #if HAVE_SYS_TIME_H #include #endif // Other system includes #if HAVE_NETINET_IN_H #include #endif // Unix includes #if HAVE_FCNTL_H #include #endif #if HAVE_UNISTD_H #include #endif #if HAVE_UTIME_H #include #endif #if HAVE_DIRENT_H #include #endif // C++ generic includes #include #include #include #include #include #include // C generic includes #if HAVE_STDLIB_H #include #endif #if HAVE_STRING_H #include #endif #if 0 #if HAVE_STRINGS_H #include #endif #endif #include #include // OpenSSL includes #include #include #include #include // Argtable includes #include #include "autoarray.h" #include "rcserror.h" #if defined(__unix__) || defined(__APPLE__) #include "autofd.h" #include "autommap.h" #elif defined(_WIN32) #include "win32/autofd.h" #include "win32/autommap.h" #else #error Unsupported platform #endif #endif // PRECOMPILED_HEADERS_H rsyncrypto-1.12/process.h0000644000175000017500000000066410242342676013730 0ustar sunsun#ifndef PROCESS_H #if defined(_WIN32) #include "win32/process.h" #else #define PROCESS_H #include "redir.h" class process_ctl { int pid; // Disable default copy ctor and operator= process_ctl( const process_ctl & ); process_ctl &operator= ( const process_ctl & ); public: process_ctl( char *cmdline, redir *input, redir *output, redir *error, ... ); int wait() const; }; #endif // _WIN32 #endif // PROCESS_H rsyncrypto-1.12/configure.ac0000644000175000017500000001137411041706744014365 0ustar sunsun# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.57) AC_INIT([rsyncrypto],[1.12]) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([rsyncrypto.h]) AM_CONFIG_HEADER([config.h]) #AM_MAINTAINER_MODE AC_COPYRIGHT([Copyright (C) 2005-2008 Shachar Shemesh for Lingnu Open Source Consulting ltd.]) # Checks for programs. AC_PROG_CXX AC_LANG(C++) AC_PROG_INSTALL AC_PROG_MKDIR_P AC_PROG_AWK # Checks for libraries. dnl Checks for openssl AC_ARG_WITH([openssl],AC_HELP_STRING([--with-openssl=DIR],[use openssl install directory]), [AC_MSG_CHECKING(for openssl path override) case "$withval" in yes|no) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT($withval) CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" ;; esac]) AC_CHECK_LIB([crypto], [AES_encrypt],,[AC_MSG_FAILURE([AES implementation in openssl not found])]) dnl Checks for libargtable2 AC_ARG_WITH([argtable2],AC_HELP_STRING([--with-argtable2=DIR],[use argtable2 build directory]), [AC_MSG_CHECKING(for argtable2 path override) case "$withval" in yes|no) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT($withval) CPPFLAGS="$CPPFLAGS -I$withval" LDFLAGS="$LDFLAGS -L$withval/.libs" esac]) AC_CHECK_LIB([argtable2], [arg_parse],,[AC_MSG_FAILURE([argtable2 not found])]) AC_MSG_CHECKING([whether platform supports lstat]) AC_LINK_IFELSE([AC_LANG_FUNC_LINK_TRY([lstat])], [AC_MSG_RESULT(yes) AC_DEFINE([HAVE_LSTAT],1,[Define to 1 if your platform has the "lstat" function call])], [AC_MSG_RESULT(no)]) # Checks for header files. AC_SYS_LARGEFILE AC_HEADER_DIRENT AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS([fcntl.h netinet/in.h stdlib.h string.h strings.h sys/time.h unistd.h utime.h sys/mman.h]) AC_CHECK_HEADERS([argtable2.h] [map],[],[AC_MSG_FAILURE([Mandatory header file not found])]) # Checks for typedefs, structures, and compiler characteristics. AC_TYPE_MODE_T AC_TYPE_OFF_T AC_TYPE_SIZE_T AC_TYPE_SSIZE_T AC_CHECK_MEMBERS([struct stat.st_rdev]) AC_HEADER_TIME AC_TYPE_UINT16_T AC_TYPE_UINT32_T AC_TYPE_UINT8_T AC_MSG_CHECKING([for O_NOATIME support in open]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include #include #include ], [int fd=open("/dev/null", O_RDONLY|O_NOATIME)])], [AC_DEFINE([HAVE_NOATIME],[1],[Define to 1 if "open" supports O_NOATIME]) AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_MSG_CHECKING([whether struct stat has nanosecond resolution]) AC_COMPILE_IFELSE([ dnl check for Linux st_mtim AC_LANG_PROGRAM([[#include ]],[[struct stat st; st.st_mtim.tv_nsec=0;]])], [AC_DEFINE([HAVE_STAT_NSEC],[1], [Define to 1 if struct stat supports nanosecond resolution]) AC_DEFINE([st_mtime_nsec],[st_mtim.tv_nsec],[mtime nsec access replacement]) AC_DEFINE([st_atime_nsec],[st_atim.tv_nsec],[atime nsec access replacement]) AC_DEFINE([st_ctime_nsec],[st_ctim.tv_nsec],[ctime nsec access replacement]) AC_MSG_RESULT([st_mtim is a struct timespec])], [ dnl check for FreeBSD st_mtimespec AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]],[[struct stat st; st.st_mtimespec.tv_nsec=0;]])], [AC_DEFINE([HAVE_STAT_NSEC],[1]) AC_DEFINE([st_mtime_nsec],[st_mtimespec.tv_nsec]) AC_DEFINE([st_atime_nsec],[st_atimespec.tv_nsec]) AC_DEFINE([st_ctime_nsec],[st_ctimespec.tv_nsec]) AC_MSG_RESULT([st_mtimespec is a struct timespec])], [AC_MSG_RESULT([no]) AC_MSG_WARN([file times will have a 1 second resolution])])]) AC_FUNC_CLOSEDIR_VOID AC_FUNC_ERROR_AT_LINE AC_FUNC_FORK AC_FUNC_LSTAT AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK AC_FUNC_STAT AC_CHECK_FUNCS([bzero dup2 memset mkdir munmap rmdir strchr strerror strtoul]) dnl Define a few necessary stuff AC_DEFINE([DIRSEP_S], ["/"], [Directory separator as string]) AC_DEFINE([DIRSEP_C], ['/'], [Directory separator as char]) dnl Find out whether we have a "rsyncable" supporting gzip AC_MSG_CHECKING([for gzip with "rsyncable" support]) if ([ gzip --rsyncable >/dev/null 2>conftest.out .SH PROJECT HOMEPAGE http://rsyncrypto.lingnu.com rsyncrypto-1.12/autodir.h0000644000175000017500000000173610242342676013722 0ustar sunsun#if defined(_WIN32) #include "win32/autodir.h" #elif !defined(AUTODIR_H) #define AUTODIR_H // automap will auto-release mmaped areas class autodir { DIR *dir; // Disable default copy constructor autodir( const autodir & ); autodir &operator=( const autodir & ); public: explicit autodir( const char *dirname ) : dir(opendir(dirname)) { #if defined(EXCEPT_CLASS) if( dir==NULL ) throw rscerror("opendir failed", errno, dirname); #endif } ~autodir() { clear(); } DIR *get() const { return dir; } void clear() { if( dir!=NULL ) { closedir( dir ); dir=NULL; } } struct dirent *read() { return ::readdir(dir); } void rewind() { ::rewinddir(dir); } void seek( off_t offset ) { seekdir( dir, offset ); } off_t telldir() { return ::telldir( dir ); } }; #endif // AUTODIR_H rsyncrypto-1.12/win32/0000755000175000017500000000000011041707134013025 5ustar sunsunrsyncrypto-1.12/win32/redir.cpp0000644000175000017500000000552111030247151014635 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2005-2008 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com */ #include "../precomp.h" #include "../redir.h" #include "win32redir.h" void redir_pipe::child_redirect( int redir_type, void *plat_opaq ) { } void redir_pipe::parent_redirect( int redir_type, void *plat_opaq ) { win32_redir_opaq *opaq=static_cast(plat_opaq); if( redir_type==STDIN_FILENO ) { opaq->handle=get_read().Duplicate(true); opaq->si->hStdInput=opaq->handle; clear_read(); } else { opaq->handle=get_write().Duplicate(true); clear_write(); if( redir_type==STDOUT_FILENO ) { opaq->si->hStdOutput=opaq->handle; } else { opaq->si->hStdError=opaq->handle; } } } void redir_fd::child_redirect( int redir_type, void *plat_opaq ) { } void redir_fd::parent_redirect( int redir_type, void *plat_opaq ) { win32_redir_opaq *opaq=static_cast(plat_opaq); opaq->handle=Duplicate(true); switch(redir_type) { case STDIN_FILENO: opaq->si->hStdInput=opaq->handle; break; case STDOUT_FILENO: opaq->si->hStdOutput=opaq->handle; break; case STDERR_FILENO: opaq->si->hStdError=opaq->handle; break; } clear(); } void redir_null::child_redirect( int redir_type, void *plat_opaq ) { } void redir_null::parent_redirect( int redir_type, void *plat_opaq ) { } rsyncrypto-1.12/win32/autopipe.h0000644000175000017500000000251010526566721015036 0ustar sunsun// This is the Win32 version of this struct #if !defined(_WIN32) #error Win32 only header included from non-Win32 build environment #endif #ifndef _AUTOPIPE_H #define _AUTOPIPE_H class autopipe { autofd input, output; public: explicit autopipe(DWORD pipe_size=4096) : input(INVALID_HANDLE_VALUE), output(INVALID_HANDLE_VALUE) { HANDLE hReadPipe, hWritePipe; if( CreatePipe(&hReadPipe, &hWritePipe, NULL, pipe_size ) ) { input=autofd(hReadPipe); output=autofd(hWritePipe); } else { #if defined(EXCEPT_CLASS) throw EXCEPT_CLASS("Couldn't create pipe", GetLastError() ); #endif } } // Default copy constructor and operator= do exactly what we want. //autopipe( const autopipe &that ) //autopipe &operator=( const autopipe &that ) // As does default dtor //~autopipe() autofd &get_read() { return input; } const autofd &get_read() const { return input; } autofd &get_write() { return output; } const autofd &get_write() const { return output; } void clear_read() { input.clear(); } void clear_write() { output.clear(); } void clear() { clear_read(); clear_write(); } }; #endif // _AUTOPIPE_H rsyncrypto-1.12/win32/config.h0000644000175000017500000001463511041706744014462 0ustar sunsun/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if the `closedir' function returns void instead of `int'. */ #undef CLOSEDIR_VOID /* Directory separator as char */ #define DIRSEP_C '\\' /* Directory separator as string */ #define DIRSEP_S "\\" /* Define to 1 if you have the header file. */ #define HAVE_ARGTABLE2_H 1 /* Define to 1 if you have the `bzero' function. */ #undef HAVE_BZERO /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the `dup2' function. */ #undef HAVE_DUP2 /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `argtable2' library (-largtable2). */ #undef HAVE_LIBARGTABLE2 /* Define to 1 if you have the `crypto' library (-lcrypto). */ #undef HAVE_LIBCRYPTO /* Define to 1 if your platform has the "lstat" function call */ #undef HAVE_LSTAT /* Define to 1 if `lstat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_LSTAT_EMPTY_STRING_BUG /* Define to 1 if you have the header file. */ #define HAVE_MAP 1 /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the `mkdir' function. */ #undef HAVE_MKDIR /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if "open" supports O_NOATIME */ #undef HAVE_NOATIME /* Define to 1 if you have the `rmdir' function. */ #undef HAVE_RMDIR /* Define to 1 if `stat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_STAT_EMPTY_STRING_BUG /* Define to 1 if struct stat supports nanosecond resolution */ #undef HAVE_STAT_NSEC /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* 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 `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if `st_rdev' is member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_RDEV /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_UTIME_H /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if `lstat' dereferences a symlink specified with a trailing slash. */ #undef LSTAT_FOLLOWS_SLASHED_SYMLINK /* Name of package */ #define PACKAGE "rsyncrypto" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "" /* Define to the full name of this package. */ #define PACKAGE_NAME "rsyncrypto" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "rsyncrypto 1.12" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "rsyncrypto" /* Define to the version of this package. */ #define PACKAGE_VERSION "1.12" /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Version number of package */ #define VERSION "1.12" /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define for Solaris 2.5.1 so the uint32_t typedef from , , or is not used. If the typedef was allowed, the #define below would cause a syntax error. */ #undef _UINT32_T /* Define for Solaris 2.5.1 so the uint8_t typedef from , , or is not used. If the typedef was allowed, the #define below would cause a syntax error. */ #undef _UINT8_T /* Define to `int' if does not define. */ #undef mode_t /* Define to `long int' if does not define. */ #undef off_t /* Define to `int' if does not define. */ #undef pid_t /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `int' if does not define. */ #undef ssize_t /* atime nsec access replacement */ #undef st_atime_nsec /* ctime nsec access replacement */ #undef st_ctime_nsec /* mtime nsec access replacement */ #undef st_mtime_nsec /* Define to the type of an unsigned integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef uint16_t /* Define to the type of an unsigned integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef uint32_t /* Define to the type of an unsigned integer type of width exactly 8 bits if such a type exists and the standard includes do not define it. */ #undef uint8_t /* Define as `fork' if `vfork' does not work. */ #undef vfork rsyncrypto-1.12/win32/autommap.h0000644000175000017500000000766611011571666015046 0ustar sunsun/* * This file is part of rsyncrypto - rsync friendly encryption * Copyright (C) 2005 Shachar Shemesh for Lingnu Open Source Consulting (http://www.lignu.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ // Win32 portable implementation #if !defined(_WIN32) #error Win32 only header included from non-Win32 build environment #endif #ifndef _AUTOMMAP_H #define _AUTOMMAP_H #include #define PROT_READ 0x1 #define PROT_WRITE 0x2 #define MAP_SHARED 0x01 #define MAP_PRIVATE 0x02 // automap will auto-release mmaped areas class autommap { HANDLE mapping; void *ptr; size_t size; // Disable default copy constructor autommap( const autommap & ); void mapfile(void *start, size_t length, int prot, int flags, file_t fd, off_t offset) { DWORD flProtect; DWORD dwDesiredAccess; ptr=NULL; mapping=NULL; switch( prot ) { case PROT_WRITE|PROT_READ: flProtect=PAGE_READWRITE; dwDesiredAccess=FILE_MAP_WRITE; break; case PROT_READ: flProtect=PAGE_READONLY; dwDesiredAccess=FILE_MAP_READ; break; default: #if defined(EXCEPT_CLASS) throw EXCEPT_CLASS("Unsupported mmap protection mode"); #else return; #endif } if( length==0 ) { DWORD highsize; length=GetFileSize( fd, &highsize ); if( highsize!=0 ) throw EXCEPT_CLASS("File too big to be mapped", ERROR_NOT_ENOUGH_MEMORY ); } // If the actual file length is 0, do not map if( length!=0 ) { mapping=CreateFileMapping( fd, NULL, flProtect, 0, 0, NULL ); if( mapping==NULL ) throw EXCEPT_CLASS("CreateFileMapping failed", GetLastError() ); ptr=MapViewOfFileEx( mapping, dwDesiredAccess, static_cast(offset>>32), static_cast(offset), length, start ); if( ptr==NULL ) { CloseHandle( mapping ); mapping=NULL; #if defined(EXCEPT_CLASS) throw EXCEPT_CLASS("mmap failed", errno); #endif } } size=length; } public: autommap() : ptr(NULL), mapping(NULL), size(0) { } autommap(void *start, size_t length, int prot, int flags, file_t fd, off_t offset ) : mapping(NULL), ptr(NULL), size(0) { mapfile(start, length, prot, flags, fd, offset); } // Map an entire file into memory autommap(file_t fd, int prot) : mapping(NULL), ptr(NULL), size(0) { mapfile(NULL, 0, prot, 0, fd, 0); } ~autommap() { clear(); } void *get() const { return ptr; } unsigned char *get_uc() const { return static_cast(ptr); } autommap &operator=( autommap &that ) { clear(); ptr=that.ptr; mapping=that.mapping; that.ptr=NULL; that.mapping=NULL; return *this; } void clear() { if( ptr!=NULL ) { UnmapViewOfFile(ptr); ptr=NULL; CloseHandle(mapping); } ptr=NULL; mapping=NULL; } size_t getsize() const { return size; } }; #endif // _AUTOMMAP_H rsyncrypto-1.12/win32/resource.h0000644000175000017500000000061710236143051015026 0ustar sunsun//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by rsyncrypto.rc // // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 101 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif rsyncrypto-1.12/win32/types.h0000644000175000017500000000107511013000634014333 0ustar sunsun#if !defined(_WIN32) #error Win32 only header included from non-Win32 build environment #endif #ifndef WIN32_TYPES_H #define WIN32_TYPES_H typedef unsigned char uint8_t; typedef UINT32 uint32_t; typedef unsigned short uint16_t; typedef __int64 _off_t; typedef _off_t off_t; #define _OFF_T_DEFINED typedef int ssize_t; typedef unsigned short mode_t; typedef HANDLE file_t; #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) static inline void bzero( void *dest, size_t count ) { memset( dest, 0, count); } int Error2errno( DWORD Error ); #endif // WIN32_TYPES_Hrsyncrypto-1.12/win32/process.h0000644000175000017500000000120010242342676014655 0ustar sunsun// Win32 implementation #if !defined(_WIN32) #error Win32 only header included from non-Win32 build environment #endif #ifndef PROCESS_H #define PROCESS_H #include "../redir.h" class process_ctl { PROCESS_INFORMATION pInfo; autohandle hProcess; autohandle hThread; // Disable default copy ctor and operator= process_ctl( const process_ctl & ); process_ctl &operator= ( const process_ctl & ); public: // The ... is substituted for further command line arguments, in execlp syntax process_ctl( char *cmdline, redir *input, redir *output, redir *error, ... ); int wait() const; }; #endif // PROCESS_H rsyncrypto-1.12/win32/autodir.h0000644000175000017500000000327211013006657014652 0ustar sunsun// Win32 implementation #if !defined(_WIN32) #error Win32 only header included from non-Win32 build environment #endif #if !defined(AUTODIR_H) #define AUTODIR_H struct dirent { char d_name[MAX_PATH]; }; class autodir { HANDLE h_dirscan; WIN32_FIND_DATA finddata; dirent posixdir; bool eof; // Disable default copy constructor autodir( const autodir & ); autodir &operator=( const autodir & ); public: explicit autodir( const char *dirname ) : eof(false) { h_dirscan=FindFirstFile((std::string(dirname)+"\\*").c_str(), &finddata ); #if defined(EXCEPT_CLASS) if( h_dirscan==INVALID_HANDLE_VALUE ) throw rscerror("opendir failed", Error2errno(GetLastError()), dirname); #endif } ~autodir() { clear(); } void clear() { if( h_dirscan!=INVALID_HANDLE_VALUE ) { FindClose( h_dirscan ); h_dirscan=INVALID_HANDLE_VALUE; eof=false; } } struct dirent *read() { if( !eof ) { strcpy_s(posixdir.d_name, finddata.cFileName); if( !FindNextFile(h_dirscan, &finddata) ) { eof=true; DWORD error=GetLastError(); if( error!=ERROR_NO_MORE_FILES ) { throw rscerror("Error getting directory listing", Error2errno(error)); } } return &posixdir; } else { return NULL; } } /* void rewind() { ::rewinddir(dir); } void seek( off_t offset ) { seekdir( dir, offset ); } off_t telldir() { return ::telldir( dir ); } */ }; #endif // AUTODIR_H rsyncrypto-1.12/win32/process.cpp0000644000175000017500000001003711030247151015204 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2005-2008 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com */ #include "../precomp.h" #include "process.h" #include "win32redir.h" process_ctl::process_ctl( char *cmd, redir *input, redir *output, redir *error, ... ) { STARTUPINFO siStartInfo; // Set up members of the STARTUPINFO structure. ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) ); siStartInfo.cb = sizeof(STARTUPINFO); siStartInfo.dwFlags= STARTF_FORCEOFFFEEDBACK|STARTF_USESTDHANDLES; siStartInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE); siStartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); siStartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE); autohandle input_stream; win32_redir_opaq inop, outop, errop; inop.si=outop.si=errop.si=&siStartInfo; if( input!=NULL ) input->parent_redirect( STDIN_FILENO, &inop ); if( output!=NULL ) output->parent_redirect( STDOUT_FILENO, &outop ); if( error!=NULL ) error->parent_redirect( STDERR_FILENO, &errop ); // Set up members of the PROCESS_INFORMATION structure. ZeroMemory( &pInfo, sizeof(pInfo) ); std::string cmdline; cmdline="\""; cmdline+=cmd; cmdline+="\" "; va_list args; va_start(args, error); const char *param; while( (param=va_arg(args, const char *))!=NULL ) { if( *param=='\0' || strchr( param, ' ' )==NULL ) { cmdline+="\""; cmdline+=param; cmdline+="\" "; } else { cmdline+=param; cmdline+=" "; } } va_end(args); // Create the child process. if( CreateProcess(NULL, const_cast(cmdline.c_str()), // command line NULL, // process security attributes NULL, // primary thread security attributes TRUE, // handles are inherited CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS, // creation flags NULL, // use parent's environment NULL, // use parent's current directory &siStartInfo, // STARTUPINFO pointer &pInfo) ) // receives PROCESS_INFORMATION { hProcess=autohandle(pInfo.hProcess); hThread=autohandle(pInfo.hThread); } else { // CreateProcess failed throw rscerror("Child process not created", Error2errno(GetLastError()) ); } } int process_ctl::wait() const { WaitForSingleObject(hProcess, INFINITE); DWORD exitcode=-1; if( !GetExitCodeProcess( hProcess, &exitcode ) ) throw rscerror("Couldn't get child process return code", Error2errno(GetLastError())); return exitcode; } rsyncrypto-1.12/win32/autofd.h0000644000175000017500000002572711041552651014477 0ustar sunsun// This is the Win32 version of this struct #if !defined(_WIN32) #error Win32 only header included from non-Win32 build environment #endif #ifndef _AUTOFD_H #define _AUTOFD_H #include "autohandle.h" #include "errno.h" // Fill in missing declarations #define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR) #define S_IFLNK 0120000 #define S_IRWXU 00700 #define S_IRUSR 00400 #define S_IWUSR 00200 #define S_IXUSR 00100 #define S_IRWXG 00070 #define S_IRGRP 00040 #define S_IWGRP 00020 #define S_IXGRP 00010 #define S_IRWXO 00007 #define S_IROTH 00004 #define S_IWOTH 00002 #define S_IXOTH 00001 #define STDIN_FILENO (STD_INPUT_HANDLE) #define STDOUT_FILENO (STD_OUTPUT_HANDLE) #define STDERR_FILENO (STD_ERROR_HANDLE) // automap will auto-release mmaped areas class autofd : public autohandle { mutable bool f_eof; static FILETIME ut2ft( time_t unixtime ) { ULARGE_INTEGER res; static const ULONGLONG epoch_start=116444736000000000; res.QuadPart=unixtime; res.QuadPart*=10*1000*1000; res.QuadPart+=epoch_start; FILETIME ret; ret.dwHighDateTime=res.HighPart; ret.dwLowDateTime=res.LowPart; return ret; } static time_t ft2ut( FILETIME ft ) { // Converts FILETIME to time_t static const ULONGLONG epoch_start=116444736000000000; ULARGE_INTEGER unified_ft; unified_ft.LowPart=ft.dwLowDateTime; unified_ft.HighPart=ft.dwHighDateTime; if( unified_ft.QuadPart(*this)=autohandle(CreateFile(pathname, access, FILE_SHARE_READ|FILE_SHARE_WRITE, // We are a unix program at heart NULL, disposition, FILE_ATTRIBUTE_NORMAL, NULL )); if( *this==INVALID_HANDLE_VALUE ) throw EXCEPT_CLASS("file open failed", Error2errno(GetLastError()), pathname ); } #endif // Default copy constructor and operator= do exactly what we want. //autofd( const autofd &that ) //autofd &operator=( const autofd &that ) ~autofd() { clear(); } file_t get() const { return *static_cast(this); } operator file_t() const { return get(); } // Standard io operations private: static ssize_t read( file_t fd, void *buf, size_t count ) { DWORD ures; if( !ReadFile( fd, buf, count, &ures, NULL ) && GetLastError()!=ERROR_BROKEN_PIPE ) throw rscerror("read failed", Error2errno(GetLastError())); return ures; } public: ssize_t read( void *buf, size_t count ) const { ssize_t num=read( *static_cast(this), buf, count ); if( num==0 ) f_eof=true; return num; } private: static ssize_t write( file_t fd, const void *buf, size_t count ) { DWORD written; if( !WriteFile( fd, buf, count, &written, NULL ) ) throw rscerror("write failed", Error2errno(GetLastError())); return written; } public: ssize_t write( const void *buf, size_t count ) { return write( *static_cast(this), buf, count ); } static struct stat lstat( const char *file_name ) { return autofd::stat( file_name ); } static struct stat stat( const char *file_name ) { struct stat ret; WIN32_FILE_ATTRIBUTE_DATA data; if( !GetFileAttributesEx( file_name, GetFileExInfoStandard, &data ) ) throw rscerror("stat failed", Error2errno(GetLastError()), file_name); ZeroMemory( &ret, sizeof(ret) ); ret.st_atime=ft2ut(data.ftLastAccessTime); ret.st_ctime=ft2ut(data.ftCreationTime); ret.st_mtime=ft2ut(data.ftLastWriteTime); ret.st_dev=0; ret.st_rdev=0; if( data.dwFileAttributes&FILE_ATTRIBUTE_REPARSE_POINT ) { // The Vista equivalent of a symbolic link, more or less ret.st_mode=S_IFLNK; } else if( data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY ) { ret.st_mode=S_IFDIR; } else { ret.st_mode=S_IFREG; } ret.st_nlink=1; ret.st_size=data.nFileSizeHigh; ret.st_size<<=32; ret.st_size|=data.nFileSizeLow; return ret; } struct stat fstat() const { struct stat ret; BY_HANDLE_FILE_INFORMATION info; if( !GetFileInformationByHandle(*this, &info ) ) throw rscerror("stat failed", Error2errno(GetLastError())); ZeroMemory(&ret, sizeof(ret)); ret.st_atime=ft2ut(info.ftLastAccessTime); ret.st_ctime=ft2ut(info.ftCreationTime); ret.st_dev=0; // For a device - handle. Otherwise 0 ret.st_mode=S_IFREG; // unix mode ret.st_mtime=ft2ut(info.ftLastWriteTime); ret.st_nlink=static_cast(info.nNumberOfLinks); // nlink ret.st_rdev=0; // same as dev ret.st_size=info.nFileSizeHigh; ret.st_size<<=32; ret.st_size|=info.nFileSizeLow; return ret; } static off_t lseek( file_t file, off_t offset, int whence ) { DWORD dwMoveMethod=0; switch( whence ) { case SEEK_SET: dwMoveMethod=FILE_BEGIN; break; case SEEK_CUR: dwMoveMethod=FILE_CURRENT; break; case SEEK_END: dwMoveMethod=FILE_END; break; default: throw rscerror("Invalid whence given", EINVAL); } LONG offsethigh, offsetlow; offsetlow=static_cast(offset); offsethigh=static_cast(offset>>32); offsetlow=SetFilePointer( file, offsetlow, &offsethigh, dwMoveMethod ); offset=offsethigh; offset<<=32; offset|=offsetlow; return offset; } off_t lseek( off_t offset, int whence ) const { return lseek( *static_cast(this), offset, whence ); } static int utimes( const char *filename, const struct timeval tv[2]) { FILETIME modtime, accesstime; accesstime=ut2ft(tv[0].tv_sec); modtime=ut2ft(tv[1].tv_sec); // The only function in Windows that sets file modification/access times does so for // open files only, so we have no choice but to open the file for write access autofd file(filename, O_WRONLY); if( SetFileTime(file, NULL, &accesstime, &modtime ) ) return 0; else { errno=Error2errno(GetLastError()); return -1; } } static autofd dup( int filedes ) { autofd orig_std(GetStdHandle(filedes)); autofd ret(orig_std.Duplicate(false)); orig_std.release(); return ret; } static void rmdir( const char *pathname ) { if( !RemoveDirectory(pathname) ) { DWORD error=GetLastError(); if( error!=ERROR_FILE_NOT_FOUND && error!=ERROR_PATH_NOT_FOUND ) throw rscerror("Error removing directory", Error2errno(error), pathname); } } // Nonstandard file io // Read from the stream up to, including, the newline std::string readline() const { std::string ret; char ch; while( read( &ch, 1 )==1 && ch!='\n' ) { ret+=ch; } if( ch=='\n' && ret.length()>0 && ret[ret.length()-1]=='\r' ) ret.resize(ret.length()-1); return ret; } static void mv( const char *src, const char *dst ) { if( !MoveFileEx( src, dst, MOVEFILE_REPLACE_EXISTING) ) { throw rscerror("rename failed", Error2errno(GetLastError()), dst ); } } // Recursively create directories // mode is the permissions of the end directory // int_mode is the permissions of all intermediately created dirs private: static void mkpath_actual(const std::string &path, mode_t mode) { if( !CreateDirectory( path.c_str(), NULL ) && GetLastError()!=ERROR_ALREADY_EXISTS ) { // "Creating" a drive letter may fail for a whole host of reasons while actually succeeding if( path.length()!=2 || path[1]!=':' || // Got this far in the "if" only if we tried to create something of the form C: // Only a ERROR_INVALID_DRIVE actually means an error GetLastError()==ERROR_INVALID_DRIVE ) throw rscerror("mkdir failed", Error2errno(GetLastError()), path.c_str() ); } } public: static void mkpath(const char *path, mode_t mode) { if( path[0]!='\0' ) { for( int sublen=0; path[sublen]!='\0'; sublen++ ) { if( sublen>0 && path[sublen]==DIRSEP_C && path[sublen+1]!=DIRSEP_C ) { std::string subpath(path, sublen); mkpath_actual(subpath, mode); } } mkpath_actual(path, mode); } } // Return the dir part of the name static int dirpart( const char *path ) { int i, last=0; for( i=0; path[i]!='\0'; ++i ) { if( path[i]==DIRSEP_C ) last=i; } return last; } static std::string combine_paths( const char *left, const char *right ) { std::string ret(left); int i; // Trim trailing slashes for( i=ret.length()-1; i>0 && ret[i]==DIRSEP_C; --i ) ; ret.resize(++i); if( i>0 ) ret+=DIRSEP_S; // Trim leading slashes for( i=0; right[i]==DIRSEP_C; ++i ) ; ret+=right+i; return ret; } // Status queries bool eof() const { return f_eof; } }; #endif // _AUTOFD_H rsyncrypto-1.12/win32/autohandle.h0000644000175000017500000000354610526566721015346 0ustar sunsun// This is the Win32 version of this struct #if !defined(_WIN32) #error Win32 only header included from non-Win32 build environment #endif #ifndef AUTOHANDLE_H #define AUTOHANDLE_H // automap will auto-release mmaped areas class autohandle { HANDLE handle; mutable bool owner; public: explicit autohandle( HANDLE handle_p=NULL ) : handle(handle_p), owner(valid()) { } autohandle( const autohandle &that ) : handle(that.release()), owner(true) { } ~autohandle() { clear(); } HANDLE get() const { return handle; } operator HANDLE() const { return get(); } autohandle &operator=( const autohandle &that ) { if( handle!=that.handle ) { clear(); owner=that.owner; if( owner ) { handle=that.release(); } else { handle=that.get(); } } return *this; } void clear() { if( owner ) { CloseHandle( handle); handle=NULL; owner=false; } } HANDLE release() const { #if defined(EXCEPT_CLASS) if( !owner ) throw EXCEPT_CLASS("Releasing non-owner handle"); #endif owner=false; return handle; } bool valid() const { return handle!=NULL && handle!=INVALID_HANDLE_VALUE; } // WIN32 extensions autohandle Duplicate(bool inheritable) const { HANDLE hProcess=GetCurrentProcess(); HANDLE hNewHandle=NULL; if( !DuplicateHandle(hProcess, handle, hProcess, &hNewHandle, 0, inheritable, DUPLICATE_SAME_ACCESS ) ) { #if defined(EXCEPT_CLASS) throw EXCEPT_CLASS("Error duplicating handle", GetLastError()); #endif } return autohandle(hNewHandle); } }; #endif // AUTOHANDLE_H rsyncrypto-1.12/win32/nullgzip.vcproj0000644000175000017500000001224111010345212016105 0ustar sunsun rsyncrypto-1.12/win32/win32redir.h0000644000175000017500000000041510242342676015176 0ustar sunsun// Win32 implementation #if !defined(_WIN32) #error Win32 only header included from non-Win32 build environment #endif #if !defined(WIN32_REDIR_H) #define WIN32_REDIR_H struct win32_redir_opaq { STARTUPINFO *si; autohandle handle; }; #endif // WIN32_REDIR_Hrsyncrypto-1.12/win32/rsyncrypto.rc0000644000175000017500000000456011041706744015622 0ustar sunsun// Microsoft Visual C++ generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,12 PRODUCTVERSION 1,0,0,12 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "This software licensed under the terms of the GNU General Public License (GPL)" VALUE "CompanyName", "Lingnu Open Source Consulting Ltd." VALUE "FileDescription", "rsyncrypto" VALUE "FileVersion", "1, 0, 0, 12" VALUE "InternalName", "rsyncrypto" VALUE "LegalCopyright", "Copyright © 2005-2008 Shachar Shemesh for Lingnu Open Source Consulting" VALUE "OriginalFilename", "rsyncrypto.exe" VALUE "ProductName", " rsyncrypto" VALUE "ProductVersion", "1, 0, 0, 12" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE BEGIN "resource.h\0" END 2 TEXTINCLUDE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED rsyncrypto-1.12/win32/nullgzip.cpp0000644000175000017500000000136210242342676015407 0ustar sunsun#include #include int main(int argc, char *argv[] ) { unsigned char buffer[8192]; HANDLE hInput, hOutput; hInput=GetStdHandle(STD_INPUT_HANDLE); hOutput=GetStdHandle(STD_OUTPUT_HANDLE); DWORD numread; BOOL success; while( (success=ReadFile(hInput, buffer, sizeof(buffer), &numread, NULL )) && numread>0 ) { DWORD written; if( !WriteFile(hOutput, buffer, numread, &written, NULL ) ) { fprintf(stderr, "Error in writing: %d\n", GetLastError() ); return 1; } } DWORD error=GetLastError(); if( !success && error!=ERROR_BROKEN_PIPE ) { fprintf(stderr, "Error in reading: %d\n", GetLastError() ); return 1; } return 0; }rsyncrypto-1.12/win32/stdafx.cpp0000644000175000017500000000003011013000634015001 0ustar sunsun#include "../precomp.h" rsyncrypto-1.12/win32/Setup.vdproj0000644000175000017500000014604011041705720015357 0ustar sunsun"DeployProject" { "VSVersion" = "3:800" "ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" "IsWebType" = "8:FALSE" "ProjectName" = "8:Setup" "LanguageId" = "3:1033" "CodePage" = "3:1252" "UILanguageId" = "3:1033" "SccProjectName" = "8:" "SccLocalPath" = "8:" "SccAuxPath" = "8:" "SccProvider" = "8:" "Hierarchy" { "Entry" { "MsmKey" = "8:_02CF06AF454E4BE0904DFA4FA91AB278" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_0866CFC4DB64457C828D5C0EF36D4EE8" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_1324EF59B4134771B94B19F390A3421F" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_19472AEA0E5E456E95A4CE1DAC2D4C87" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_1B26103DEEA9437AAEE026065BB38370" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_1DB217866A1B425E9564B4312D972277" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_247B18A060A045FCBC968A12F235639B" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_2B3AC7393B0D4F6E8525A8009902FF8D" "OwnerKey" = "8:_A305235D6DA24CC886ED177E432C79BB" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_2B3AC7393B0D4F6E8525A8009902FF8D" "OwnerKey" = "8:_DCD9BAAC5B404F8898893516AB39E8DE" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_2B3AC7393B0D4F6E8525A8009902FF8D" "OwnerKey" = "8:_AA6D4F5C08A34948A58B8DD3CA531D30" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_36BABA822376E64757608AA4203C6DDE" "OwnerKey" = "8:_AA6D4F5C08A34948A58B8DD3CA531D30" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_39CBEAE9679B64ABCF21EA9CCA27B0AA" "OwnerKey" = "8:_AA6D4F5C08A34948A58B8DD3CA531D30" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_53E832E916414F2AA87D58DACB8E2975" "OwnerKey" = "8:_2B3AC7393B0D4F6E8525A8009902FF8D" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_76581D2A2439445C81AFDE730B2F1126" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_A305235D6DA24CC886ED177E432C79BB" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_AA6D4F5C08A34948A58B8DD3CA531D30" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_AE921D89A3074422BC890DB369816100" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_BEE0DF610E3B4CAF8D02D39DB2F5236D" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_CAAEA83102D840E9B9CE48AA923A2EFE" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_DCD9BAAC5B404F8898893516AB39E8DE" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_E0BEF7A45EE5410D9525E17E5C37D2C2" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_EDE44237F5194256B1BFDFA1F0639A4D" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } } "Configurations" { "Debug" { "DisplayName" = "8:Debug" "IsDebugOnly" = "11:TRUE" "IsReleaseOnly" = "11:FALSE" "OutputFilename" = "8:SetupD\\Rsyncrypto_dbg.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" "Compression" = "3:2" "SignOutput" = "11:FALSE" "CertificateFile" = "8:" "PrivateKeyFile" = "8:" "TimeStampServer" = "8:" "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { "Enabled" = "11:TRUE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" "ComponentsUrl" = "8:" "Items" { "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Net.Framework.3.5" { "Name" = "8:.NET Framework 3.5" "ProductCode" = "8:Microsoft.Net.Framework.3.5" } "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" { "Name" = "8:Windows Installer 3.1" "ProductCode" = "8:Microsoft.Windows.Installer.3.1" } } } } "Release" { "DisplayName" = "8:Release" "IsDebugOnly" = "11:FALSE" "IsReleaseOnly" = "11:TRUE" "OutputFilename" = "8:Setup\\Rsyncrypto.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" "Compression" = "3:2" "SignOutput" = "11:FALSE" "CertificateFile" = "8:" "PrivateKeyFile" = "8:" "TimeStampServer" = "8:" "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { "Enabled" = "11:TRUE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" "ComponentsUrl" = "8:" "Items" { "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" { "Name" = "8:Windows Installer 3.1" "ProductCode" = "8:Microsoft.Windows.Installer.3.1" } } } } } "Deployable" { "CustomAction" { } "DefaultFeature" { "Name" = "8:DefaultFeature" "Title" = "8:" "Description" = "8:" } "ExternalPersistence" { "LaunchCondition" { } } "File" { "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_02CF06AF454E4BE0904DFA4FA91AB278" { "SourcePath" = "8:..\\docs\\rsyncrypto_recover.html" "TargetName" = "8:rsyncrypto_recover.html" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0866CFC4DB64457C828D5C0EF36D4EE8" { "SourcePath" = "8:..\\INSTALL.win" "TargetName" = "8:INSTALL.win" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:FALSE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1324EF59B4134771B94B19F390A3421F" { "SourcePath" = "8:..\\..\\gzip.exe" "TargetName" = "8:gzip.exe" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1B26103DEEA9437AAEE026065BB38370" { "SourcePath" = "8:..\\NEWS" "TargetName" = "8:NEWS" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:FALSE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1DB217866A1B425E9564B4312D972277" { "SourcePath" = "8:C:\\openssl\\bin\\libeay32.dll" "TargetName" = "8:libeay32.dll" "Tag" = "8:" "Folder" = "8:_365E6F34D58740E8B02CC012BF05B87A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:TRUE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_247B18A060A045FCBC968A12F235639B" { "SourcePath" = "8:..\\INSTALL" "TargetName" = "8:INSTALL" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:FALSE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_36BABA822376E64757608AA4203C6DDE" { "SourcePath" = "8:LIBEAY32.dll" "TargetName" = "8:LIBEAY32.dll" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:TRUE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_39CBEAE9679B64ABCF21EA9CCA27B0AA" { "SourcePath" = "8:argtable2.dll" "TargetName" = "8:argtable2.dll" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:TRUE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_76581D2A2439445C81AFDE730B2F1126" { "SourcePath" = "8:..\\AUTHORS" "TargetName" = "8:AUTHORS" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:FALSE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_AE921D89A3074422BC890DB369816100" { "SourcePath" = "8:..\\docs\\rsyncrypto.html" "TargetName" = "8:rsyncrypto.html" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:FALSE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BEE0DF610E3B4CAF8D02D39DB2F5236D" { "SourcePath" = "8:..\\README" "TargetName" = "8:README" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:FALSE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CAAEA83102D840E9B9CE48AA923A2EFE" { "SourcePath" = "8:C:\\openssl\\bin\\ssleay32.dll" "TargetName" = "8:ssleay32.dll" "Tag" = "8:" "Folder" = "8:_365E6F34D58740E8B02CC012BF05B87A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:TRUE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E0BEF7A45EE5410D9525E17E5C37D2C2" { "SourcePath" = "8:..\\COPYING.rtf" "TargetName" = "8:COPYING.rtf" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:FALSE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EDE44237F5194256B1BFDFA1F0639A4D" { "SourcePath" = "8:C:\\openssl\\bin\\openssl.exe" "TargetName" = "8:openssl.exe" "Tag" = "8:" "Folder" = "8:_365E6F34D58740E8B02CC012BF05B87A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:TRUE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } } "FileType" { } "Folder" { "{1525181F-901A-416C-8A58-119130FE478E}:_2AE81C53F5A04D2BB3D27691E0E1F5CD" { "Name" = "8:#1919" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:ProgramMenuFolder" "Folders" { } } "{1525181F-901A-416C-8A58-119130FE478E}:_365E6F34D58740E8B02CC012BF05B87A" { "Name" = "8:#1914" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:SystemFolder" "Folders" { } } "{1525181F-901A-416C-8A58-119130FE478E}:_3EBBCEA8DAF848458E70502AC75A8118" { "Name" = "8:#1916" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:DesktopFolder" "Folders" { } } "{3C67513D-01DD-4637-8A68-80971EB9504F}:_587A5DC817854760A6D26D07800A6F7A" { "DefaultLocation" = "8:[ProgramFilesFolder][ProductName]" "Name" = "8:#1925" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:TARGETDIR" "Folders" { } } } "LaunchCondition" { } "Locator" { } "MsiBootstrapper" { "LangId" = "3:1033" "RequiresElevation" = "11:FALSE" } "Product" { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:Rsyncrypto" "ProductCode" = "8:{A11E1176-0F9C-4DAE-B0CE-9CB156E7AA9F}" "PackageCode" = "8:{C1C80BAF-9886-4682-9FC8-777851752981}" "UpgradeCode" = "8:{764176D3-A200-42EF-AECE-8BA0C3610502}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:FALSE" "ProductVersion" = "8:1.0.12" "Manufacturer" = "8:Lingnu Open Source Consulting Ltd." "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:" "Title" = "8:Rsyncrypto" "Subject" = "8:Rsync Friendly File Encryption" "ARPCONTACT" = "8:Shachar Shemesh" "Keywords" = "8:rsync, encryption, online backup, gpl" "ARPCOMMENTS" = "8:" "ARPURLINFOABOUT" = "8:http://www.lingnu.com" "ARPPRODUCTICON" = "8:" "ARPIconIndex" = "3:0" "SearchPath" = "8:" "UseSystemSearchPath" = "11:TRUE" "TargetPlatform" = "3:0" "PreBuildEvent" = "8:" "PostBuildEvent" = "8:" "RunPostBuildEvent" = "3:0" } "Registry" { "HKLM" { "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_FF0177B1BA2245E88B285821BCB52EB0" { "Name" = "8:Software" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_AD75B40D4B8A47DD9A22475EB836400D" { "Name" = "8:[Manufacturer]" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { } "Values" { } } } "Values" { } } } } "HKCU" { "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_58E69359D37E4587967172D8CEA0CD9C" { "Name" = "8:Software" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_8CBCB20E0DFC4CCE886DAFA1F3659D2B" { "Name" = "8:[Manufacturer]" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { } "Values" { } } } "Values" { } } } } "HKCR" { "Keys" { } } "HKU" { "Keys" { } } "HKPU" { "Keys" { } } } "Sequences" { } "Shortcut" { } "UserInterface" { "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_0BCA80F381804A59BFE65D31B11B7CCF" { "Name" = "8:#1900" "Sequence" = "3:1" "Attributes" = "3:1" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_0AAEA86BAC424108829581DD96541A45" { "Sequence" = "3:210" "DisplayName" = "8:Read Me" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdReadmeDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "ReadmeText" { "Name" = "8:ReadmeText" "DisplayName" = "8:#1010" "Description" = "8:#1110" "Type" = "3:6" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:2" "Value" = "8:_E0BEF7A45EE5410D9525E17E5C37D2C2" "UsePlugInResources" = "11:TRUE" } "Sunken" { "Name" = "8:Sunken" "DisplayName" = "8:#1007" "Description" = "8:#1107" "Type" = "3:5" "ContextData" = "8:4;True=4;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:4" "DefaultValue" = "3:4" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_3B20D825A44E4396850DD2869B718A14" { "Sequence" = "3:300" "DisplayName" = "8:Confirm Installation" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdConfirmDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_BA26E7AAF1254AF09A0B5BAF6E49DD72" { "Sequence" = "3:200" "DisplayName" = "8:Installation Folder" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdFolderDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "InstallAllUsersVisible" { "Name" = "8:InstallAllUsersVisible" "DisplayName" = "8:#1059" "Description" = "8:#1159" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:1" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C6FCEAD7573445ED963D15D808F25864" { "Sequence" = "3:100" "DisplayName" = "8:Welcome" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdWelcomeDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "CopyrightWarning" { "Name" = "8:CopyrightWarning" "DisplayName" = "8:#1002" "Description" = "8:#1102" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:2" "Value" = "8:This computer program is protected by copyright law and international treaties. This program is, however, free for use, modifications and distribution under the terms and conditions listed in the \"COPYING\" file." "DefaultValue" = "8:#1202" "UsePlugInResources" = "11:TRUE" } "Welcome" { "Name" = "8:Welcome" "DisplayName" = "8:#1003" "Description" = "8:#1103" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1203" "DefaultValue" = "8:#1203" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_394B9B2DC9754037B0FCEF5011B339ED" { "Name" = "8:#1901" "Sequence" = "3:1" "Attributes" = "3:2" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_CCE4533DB75943DD89A18E74A70EBE39" { "Sequence" = "3:100" "DisplayName" = "8:Progress" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdProgressDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "ShowProgress" { "Name" = "8:ShowProgress" "DisplayName" = "8:#1009" "Description" = "8:#1109" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:1" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_7D4110FC110F4B59B7305210E2287F85" { "Name" = "8:#1900" "Sequence" = "3:2" "Attributes" = "3:1" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_2EE3874FF99B42959A7565C031D72ACA" { "Sequence" = "3:300" "DisplayName" = "8:Confirm Installation" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_8D06EB13C4914CF99B2E9D5DBC16188A" { "Sequence" = "3:100" "DisplayName" = "8:Welcome" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "CopyrightWarning" { "Name" = "8:CopyrightWarning" "DisplayName" = "8:#1002" "Description" = "8:#1102" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:2" "Value" = "8:This computer program is protected by copyright law and international treaties. This program is, however, free for use, modifications and distribution under the terms and conditions listed in the \"COPYING\" file." "DefaultValue" = "8:#1202" "UsePlugInResources" = "11:TRUE" } "Welcome" { "Name" = "8:Welcome" "DisplayName" = "8:#1003" "Description" = "8:#1103" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1203" "DefaultValue" = "8:#1203" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_A11159482D8E44E485CB94965E08B823" { "Sequence" = "3:210" "DisplayName" = "8:Read Me" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminReadmeDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "ReadmeText" { "Name" = "8:ReadmeText" "DisplayName" = "8:#1010" "Description" = "8:#1110" "Type" = "3:6" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:2" "Value" = "8:_E0BEF7A45EE5410D9525E17E5C37D2C2" "UsePlugInResources" = "11:TRUE" } "Sunken" { "Name" = "8:Sunken" "DisplayName" = "8:#1007" "Description" = "8:#1107" "Type" = "3:5" "ContextData" = "8:4;True=4;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:4" "DefaultValue" = "3:4" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_D06EDC6FEA9D4F479DA86F7CE544D559" { "Sequence" = "3:200" "DisplayName" = "8:Installation Folder" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminFolderDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_BD3784EDB35F412189244033509B5045" { "Name" = "8:#1902" "Sequence" = "3:2" "Attributes" = "3:3" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_42C1F3C518C44314995B73E6E2AE5B1E" { "Sequence" = "3:100" "DisplayName" = "8:Finished" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_BF28132529B44461BEA3280C4C4C4965" { "Name" = "8:#1902" "Sequence" = "3:1" "Attributes" = "3:3" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_2A09E0A9641E4DD2AB56F5C896402146" { "Sequence" = "3:100" "DisplayName" = "8:Finished" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdFinishedDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "UpdateText" { "Name" = "8:UpdateText" "DisplayName" = "8:#1058" "Description" = "8:#1158" "Type" = "3:15" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1258" "DefaultValue" = "8:#1258" "UsePlugInResources" = "11:TRUE" } } } } } "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_D21AA5D77F7E457993ED39BC5A7404EF" { "UseDynamicProperties" = "11:FALSE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdBasicDialogs.wim" } "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_E0B500B3B5874F4FAED267BBA4569145" { "UseDynamicProperties" = "11:FALSE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdUserInterface.wim" } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_EB7DB0A2A99A4CAFA231123B45006F56" { "Name" = "8:#1901" "Sequence" = "3:2" "Attributes" = "3:2" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F9678BCD85F542B68C21BEB93451692C" { "Sequence" = "3:100" "DisplayName" = "8:Progress" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminProgressDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "ShowProgress" { "Name" = "8:ShowProgress" "DisplayName" = "8:#1009" "Description" = "8:#1109" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:1" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } } "MergeModule" { "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_2B3AC7393B0D4F6E8525A8009902FF8D" { "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:TRUE" "SourcePath" = "8:policy_9_0_Microsoft_VC90_DebugCRT_x86.msm" "Properties" { } "LanguageId" = "3:0" "Exclude" = "11:FALSE" "Folder" = "8:" "Feature" = "8:" "IsolateTo" = "8:" } "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_53E832E916414F2AA87D58DACB8E2975" { "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:TRUE" "SourcePath" = "8:microsoft_vc90_debugcrt_x86.msm" "Properties" { } "LanguageId" = "3:0" "Exclude" = "11:FALSE" "Folder" = "8:" "Feature" = "8:" "IsolateTo" = "8:" } } "ProjectOutput" { "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_19472AEA0E5E456E95A4CE1DAC2D4C87" { "SourcePath" = "8:..\\tests\\nullgzip.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Built" "OutputProjectGuid" = "8:{C7264078-E214-47C4-9014-544F814F6FE2}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_A305235D6DA24CC886ED177E432C79BB" { "SourcePath" = "8:..\\Debug\\argtable2.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Built" "OutputProjectGuid" = "8:{62A9FFFB-4D8E-4D59-A072-56577DFF954B}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_AA6D4F5C08A34948A58B8DD3CA531D30" { "SourcePath" = "8:..\\Debug\\rsyncrypto.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Built" "OutputProjectGuid" = "8:{3627D2F4-E6ED-4DD1-A2FD-3B670FCD1BC6}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_DCD9BAAC5B404F8898893516AB39E8DE" { "SourcePath" = "8:..\\Debug\\rsyncrypto_recover.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_587A5DC817854760A6D26D07800A6F7A" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Built" "OutputProjectGuid" = "8:{AF78D926-4040-4CB3-B23A-F2C64F9220E9}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } } } } rsyncrypto-1.12/win32/win32glue.cpp0000644000175000017500000000551311041266576015366 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2005-2008 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com */ #include "../precomp.h" int Error2errno( DWORD Error ) { switch( Error ) { case ERROR_SUCCESS: return 0; case ERROR_FILE_NOT_FOUND: case ERROR_PATH_NOT_FOUND: return ENOENT; case ERROR_INVALID_DRIVE: return ENODEV; case ERROR_ACCESS_DENIED: return EACCES; case ERROR_TOO_MANY_OPEN_FILES: return EMFILE; case ERROR_INVALID_HANDLE: return EBADF; case ERROR_ARENA_TRASHED: case ERROR_NOT_ENOUGH_MEMORY: case ERROR_INVALID_BLOCK: case ERROR_OUTOFMEMORY: return ENOMEM; case ERROR_BAD_ENVIRONMENT: return E2BIG; case ERROR_BAD_FORMAT: return ENOEXEC; case ERROR_CURRENT_DIRECTORY: return EBUSY; case ERROR_NOT_SAME_DEVICE: return EXDEV; case ERROR_WRITE_PROTECT: return EROFS; case ERROR_BAD_UNIT: return ENODEV; case ERROR_NOT_READY: return ENXIO; // An approximation // return ENOMEDIUM; case ERROR_BAD_LENGTH: return E2BIG; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: return EIO; case ERROR_SHARING_VIOLATION: return EBUSY; default: return Error; } } rsyncrypto-1.12/rsyncrypto.sln0000644000175000017500000000547311013006730015037 0ustar sunsun Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nullgzip", "win32\nullgzip.vcproj", "{C7264078-E214-47C4-9014-544F814F6FE2}" ProjectSection(ProjectDependencies) = postProject {3627D2F4-E6ED-4DD1-A2FD-3B670FCD1BC6} = {3627D2F4-E6ED-4DD1-A2FD-3B670FCD1BC6} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rsyncrypto", "rsyncrypto.vcproj", "{3627D2F4-E6ED-4DD1-A2FD-3B670FCD1BC6}" ProjectSection(ProjectDependencies) = postProject {62A9FFFB-4D8E-4D59-A072-56577DFF954B} = {62A9FFFB-4D8E-4D59-A072-56577DFF954B} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "argtable2", "contrib\argtable2.vcproj", "{62A9FFFB-4D8E-4D59-A072-56577DFF954B}" EndProject Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Setup", "win32\Setup.vdproj", "{A64940EB-AD03-4222-A264-CDF83ED4C8F9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rsyncrypto_recover", "rsyncrypto_recover.vcproj", "{AF78D926-4040-4CB3-B23A-F2C64F9220E9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C7264078-E214-47C4-9014-544F814F6FE2}.Debug|Win32.ActiveCfg = Debug|Win32 {C7264078-E214-47C4-9014-544F814F6FE2}.Debug|Win32.Build.0 = Debug|Win32 {C7264078-E214-47C4-9014-544F814F6FE2}.Release|Win32.ActiveCfg = Release|Win32 {C7264078-E214-47C4-9014-544F814F6FE2}.Release|Win32.Build.0 = Release|Win32 {3627D2F4-E6ED-4DD1-A2FD-3B670FCD1BC6}.Debug|Win32.ActiveCfg = Debug|Win32 {3627D2F4-E6ED-4DD1-A2FD-3B670FCD1BC6}.Debug|Win32.Build.0 = Debug|Win32 {3627D2F4-E6ED-4DD1-A2FD-3B670FCD1BC6}.Release|Win32.ActiveCfg = Release|Win32 {3627D2F4-E6ED-4DD1-A2FD-3B670FCD1BC6}.Release|Win32.Build.0 = Release|Win32 {62A9FFFB-4D8E-4D59-A072-56577DFF954B}.Debug|Win32.ActiveCfg = Debug|Win32 {62A9FFFB-4D8E-4D59-A072-56577DFF954B}.Debug|Win32.Build.0 = Debug|Win32 {62A9FFFB-4D8E-4D59-A072-56577DFF954B}.Release|Win32.ActiveCfg = Release|Win32 {62A9FFFB-4D8E-4D59-A072-56577DFF954B}.Release|Win32.Build.0 = Release|Win32 {A64940EB-AD03-4222-A264-CDF83ED4C8F9}.Debug|Win32.ActiveCfg = Debug {A64940EB-AD03-4222-A264-CDF83ED4C8F9}.Release|Win32.ActiveCfg = Release {AF78D926-4040-4CB3-B23A-F2C64F9220E9}.Debug|Win32.ActiveCfg = Debug|Win32 {AF78D926-4040-4CB3-B23A-F2C64F9220E9}.Debug|Win32.Build.0 = Debug|Win32 {AF78D926-4040-4CB3-B23A-F2C64F9220E9}.Release|Win32.ActiveCfg = Release|Win32 {AF78D926-4040-4CB3-B23A-F2C64F9220E9}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal rsyncrypto-1.12/process.cpp0000644000175000017500000000560111030247151014243 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2005 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com/ */ #include "precomp.h" #include "process.h" process_ctl::process_ctl( char *cmd, redir *input, redir *output, redir *error, ... ) { pid=fork(); if( pid==-1 ) throw rscerror("Error creating child process", errno, cmd); if( pid==0 ) { // Child if( input!=NULL ) input->child_redirect(STDIN_FILENO, NULL); if( output!=NULL ) output->child_redirect(STDOUT_FILENO, NULL); if( error!=NULL ) error->child_redirect(STDERR_FILENO, NULL); va_list args; va_start(args, error); int numargs=0; while( va_arg(args, char *)!=NULL ) ++numargs; va_end(args); va_start(args, error); auto_array arguments(new char *[numargs+2]); arguments[0]=cmd; for( int i=1; (arguments[i]=va_arg(args, char *))!=NULL; ++i ) ; va_end(args); execvp(cmd, arguments.get() ); } else { // Parent if( input!=NULL ) input->parent_redirect(STDIN_FILENO, NULL); if( output!=NULL ) output->parent_redirect(STDOUT_FILENO, NULL); if( error!=NULL ) error->parent_redirect(STDERR_FILENO, NULL); } } int process_ctl::wait() const { int childstatus; do { waitpid(pid, &childstatus, 0); } while( !WIFEXITED(childstatus) ); return WEXITSTATUS(childstatus); } rsyncrypto-1.12/docs/0000755000175000017500000000000011041707131013010 5ustar sunsunrsyncrypto-1.12/docs/rsyncrypto.html0000644000175000017500000005467311041706744016162 0ustar sunsun Man page of RSYNCRYPTO

RSYNCRYPTO

Section: Rsyncrypto User Manual (1)
Updated: July 22, 2008
Index Return to Main Contents
 

NAME

rsyncrypto - rsync friendly encryption  

SYNOPSIS

rsyncrypto [options] srcfile dstfile keyfile key
rsyncrypto [options] -r srcdir dstdir keysdir key  

DESCRIPTION

This manual page documents the rsyncrypto command.

rsyncrypto is a utility that encrypts a file (or a directory structure) in a way that ensures that local changes to the plain text file will result in local changes to the cipher text file. This, in turn, ensures that doing rsync to synchronize the encrypted files to another machine will have only a small impact on rsync's efficiency.

rsyncrypto will encrypt files using a symmetric block cipher (AES). Each file is encrypted using a unique key. The file key is stored in two locations. One is the "key" file, and the second is inside the encrypted file itself. The second copy is encrypted using a RSA public key, which can be shared for all encrypted files.

Decrypting the file can take place in one of two forms:

Warm Decryption
keyfile is used to decrypt srcfile into dstfile.
Cold Decryption
If keyfile is lost and key is the private key for the RSA encryption, extract and create keyfile from the encrypted srcfile, and create both keyfile and dstfile.

If both keyfile and the private key are not available, decryption cannot take place. Typically, this means that you would either want to transfer the encrypted files in whatever way (secure or insecure, but probably rsync :), and keep the plain text file, as well as the key file, secure. As long as you saved the RSA private key, you can reconstruct them both.  

PARAMETERS

The parameters meaning depend on the existence of the -r and -d flags.
srcfile or srcdir
This is the source for the operation. This will be the plain text file for encryption, and the cipher text file for decryption. If the -r option is given, srcdir is the directory from which files are to be encrypted/decrypted. Otherwise, srcfile is the file to be encrypted/decrypted. In any case, src must exist prior to running rsyncrypto.
dstfile or dstdir
Similar to src, this is the destination of the operation. It will be the plain text to be created if -d was given, or the encrypted file otherwise.
keyfile or keydir
The file holding the symmetric key for the encryption, or a directory in which symmetric key files reside. If the later, the key files will have the same name as the plain text files.
key
This file can either be a X509 certificate holding a public key, or a PEM format private key. The private key is never needed unless a cold decryption is required. See the req(1) or x509(1) manual pages for more info.

If dst does not exist, it will be created. The directory in which it is to be created must exist prior to running rsyncrypto.

If encrypting, and a symmetric key for the file is found, the same parameters will be used for the encryption unless the --fr or --fk options are used. If that's the case, the key file is going to be replaced with the correct parameters.  

OPTIONS

These programs follow the usual GNU command line syntax, with long options starting with two dashes (`-').
-h, --help
Show summary of options.
-V, --version
Print out the current version number.
-d, --decrypt
Decrypt src into dst. The default behavior is to encrypt src into dst, and create keyfile if it does not exist.
-r, --recurse
Recursively encrypt/decrypt an entire directory structure. All files under srcdir will be encrypted to files of the same name and path (almost, see --trim) under dstdir. If not already there, a key file will be created for each file under keydir.
--filelist
The first argument is a pointer to a file (or "-" for stdin) that has a list of files to process. Any name ending with a "/" is taken to be a directory in recursive mode, and any other name is a file name. The second argument is a directory where the files are encrypted to. --filelist and -r are mutually exclusive.
-c, --changed
Check the src and destination modified time (see --modify-window) prior to performing the operation. If the modified time is the same, assume that the files are also the same, and skip the operation. Notice that unlike rsync, file sizes are not compared. This is because the file size is expected to change during the encryption (and thus decryption) operation.
--risky-writes
Usually, when rsyncrypto writes a file, it uses a temporary name and moves the file to its final name when successfully done. This serves two purposes. During encryption, this prevents the false sense of security that may arise in case of an rsyncrypto interruption by preventing a partial file from being present (and in case of an update, by keeping the old backup). This also ensures that restarting rsyncrypto will enable it to correctly detect whether the operation needs to be repeated. During decryption, this prevents overwriting a file until we are certain we can decrypt its source.

The main problem with this approach is that, if the file being written is large, the file system needs to have enough space for two copies of it for the duration of the operation. Also, if hard links are maintained, the default rsyncrypto behavior will break the link.

Specify --risky-writes to make rsyncrypto directly overwrite the existing file using the final name.

--modify-window=num
Only applicable when -c is in effect. When comparing file modification times, treat as equal modification times that are num seconds apart. Default value is zero.

This option is most useful when the encrypted file is stored on a FAT file system. FAT can only store modification time with a 2 seconds accuracy. This may result in the modification time changing between original and encrypted file. In such a case, --modify-window=1 should be used.

--export-changes=logfile
Whenever encrypting or deleting a file, write the file's name to logfile. This allows passing logfile to rsync(1) using the --include-from rsync option.

This option is mostly useful if rsyncrypto is used to repeatedly encrypt a huge directory tree, and then using rsync to synchronize it remotely. The use of this option allows focusing rsync on only those files that are known to have changed, rather than have it send the entire file list to the remote machine, making the rsync operation faster. It should be noted that rsync version 3 starts the actual file transfer while it is still transferring the file list, making the performance gain from this option less noticeable.

When using this option in conjunction with rsync, keep in mind that logfile is zeroed out before being written into. This means that unless there is at least one completely successful rsync operation for each rsyncrypto invocation, it is possible to have files that have been changed on disk by a previous invocation of rsyncrypto, but were over written by a later invocation and do not show up in the latest version of logfile. In other words, if rsyncrypto is run more than once between two completely successful invocations of rsync, it is possible for logfile not to be complete. Use this option at your own risk!

It is highly recommended that you upgrade to rsync version 3 or higher rather than rely on this option.

-n, --name-encrypt=translation_file
Encrypt the file name. If this option is specified, this means that file names are encrypted as well. This is done by changing the name of the encrypted file to a random string of characters, and storing the translation in the file given as parameter. If working in recursive mode, this file is automatically also included in the encryption, and is given the fixed name "filemap". This is done so that decryption of the file names is possible when the symmetric keys are lost.
--ne-nesting=num
When the --name-encrypt option is used, by default all mangled file names are stored in a single directory. When encrypting large directory trees, this can result in rather big directories. Using "--ne-nesting" will split the files to sub directories, according to random bits that are part of the encrypted file name. "n" is the number of directories to nest.
--trim=num
Determine how many directory levels to trim from the beginning of the srcdir path when creating directories under dstdir. The default value is 1. See THE TRIM OPTION for more details.
--delete
When in recursive mode, delete files and directories under dstdir that do not exist under srcdir.
--delete-keys
When deleting files, also delete their symmetric key and file name mapping (if applicable). When only --delete is used, the symmetric key and file mapping are kept, so that if the file is recreated, it will be rsyncable with the original file. This option implies --delete.
-bnum --keybits=num
Specify the block cipher's key size. For AES, these can be 128, 192 or 256. Note that unless the --fr or --fkP options are also specified, this will only affect files for which no keyfile exists.
--noatime=num
(Only on some platforms, most notably Linux). The platform usually keeps track of when files were last being accessed. Since rsyncrypto is typically used for backup, it opens the files it encrypts with the O_NOATIME option, which is a Linux specific extension that tells the system not to update the file's access time. When opening a file where the opening process is not owned by the file owner, an attempt to open the file with O_NOATIME will cause the open to fail with "permission denied".
  num can be one of these options: 0 means do not use O_NOATIME at all. 1 (the default) means attempt to only use O_NOATIME if rsyncrypto thinks it will not cause a permission denied error. 2 means to use O_NOATIME always.
--no-archive-mode
Do not try to preserve timestamps. This option is incompatible with -c.
--gzip=path
By default, rsyncrypto will compress the plain text prior to encrypting it. In order not to become rsync unfriendly due to the compression, rsyncrypto will search the path for an instance of gzip(1) that supports the --rsyncable option. If the system's default gzip does not support this option (all Debian and derivatives, as well as some others, support it), use this option to tell rsyncrypto to use a different instance of gzip. The tests directory of rsyncrypto's source has a file called "gzip", that does NULL compression by redirecting the input and output to cat(1).
--roll-win=num, --roll-min=num, --roll-sensitivity=num
Affects the rolling block algorithm. See NOTES.
--fk, --fr
If command line, or a version with different defaults, dictate different values for the --roll-* options or the -b option, these will only affect files for which keyfile does not yet exist. specifying the --fk or --fr will recreate keyfile if it has values different than those in the previous key file.
-v, --verbose
Increase verbosity level. Specify several times to be more verbose.
 

NOTES

encrypting stdin

If srcfile is given as `-', the plain text data will be read fro stdin. This does not yet work for decompression (see BUGS).

--roll-win=num, --roll-min=num, --roll-sensitivity=num

These values affect some of the inner workings of rsyncrypto's decision making. In particular, these affect how rsyncrypto decides when to revert to the IV.

These options should not be played with unless you understand what you are doing. They are not dangerous, in that they will never cause data loss. Any value should still allow decryption of the file. They do have an affect on rsync's efficiency.

These options are only there to allow quick response in case a security problem pops up with their default values. If that happens, an advisory may come out giving new values to fill in as a workaround. Until that happens, most users are advised to leave these options alone.  

THE TRIM OPTION

When running rsyncrypto in recursive mode, the directory structure under srcdir is re-created under dstdir, with one directory stripped from the path. In other words, if we have a directory structure which has:

a/b/c/file

running rsyncrypto with srcdir of "a/b", and dstdir of "f" will create "f/b/c/file".

The --trim options lets the user say how many parts to trim from srcdir when creating directories under dstdir and keydir. If, in the above example, we said --trim=0 then "f/a/b/c/file" would have been created. Likewise, if we said --trim=2 then "f/c/file" would have been created.

It is an error to give a trim value which is higher than the number of directory parts actually in srcdir. In the above example, --trim=3 would result in an error.  

SECURITY

The roll values affect, to a not totally known degree, how much information is "leaked" between plain text and cipher text. The default values are supposed to leak less than 20 bits of aggregated information about the plain text file for every 8KB, in the worst case. These values, we hope, will be considered secure enough for most usages. However, if your country's fate is at stake, use a non-rsync optimized encryption, such as the one provided by openssl(1).  

EXAMPLES AND TUTORIAL

Before starting to use rsyncrypto you will need a public key in X509 certificate format. The quickest way to generate one of these is using the openssl(1) package. To generate a new 1536 bit RSA key as "backup.key", and store the corresponding unencrypted public key in "backup.crt", use the following command:

openssl req -nodes -newkey rsa:1536 -x509 -keyout backup.key -out backup.crt

It does not matter what you answer for the certificate details, or when you set it to expire. Rsyncrypto ignores everything in the certificate but the actual key.

To encrypt file "data" into "data.enc", storing the file's specific key at "data.key", run:

rsyncrypto data data.enc data.key backup.crt

Anywhere in these examples that "backup.crt" is used, "backup.key" can be used as well. The above could also have "backup.key" as the last argument. If these examples list "backup.key" specifically, then it means that "backup.crt" cannot be used instead.

"data.enc" will be created. If "data.key" exists from a previous run, then the newly created "data.enc" will have the same symmetric key and other attributes, thus maintaining the rsync friendliness of the encryption. It is therefor important to provide any previous key file for the data if one is available.

The command line to decrypt the file depends on whether you have the key file used when the file was encrypted. If you do, then decryption can take place using only the public key, with the following command:

rsyncrypto -d data.enc data.dec data.key backup.crt

If the key file was lost, the private key must be used to recover it from the encrypted file using the following command:

rsyncrypto -d data.enc data.dec data.key backup.key

"data.key" will be created by the above command, as well as "data.dec".

Use of rsyncrypto to encrypt whole directories is similar, with directory names replacing file names in the above example. To encrypt the content of a directory called "data" to a directory called "enc", storing the symmetric keys in a directory called "keys", run the following command:

rsyncrypto -r data enc keys backup.crt

As before the directories "enc" and "keys" will be created if they do not already exist. The directory structure under "plain" will be duplicated under "enc" and under "keys". That is, if there is a file called "foo" under "data", an encrypted files called "foo" will be created under "enc", and a key file named "foo" will be created under "keys". In other words, the first part of the path to "data/foo" (the part that says "data") is eliminated from the path, and this determines the name of the files under "enc" and "keys".

If a different trimming is required, the --trim option can be used. To have rsyncrypto create "enc/data/foo" instead of the above, use the following command:

rsyncrypto -r --trim=0 data enc keys backup.crt

Instead of taking all files from a single directory, it is possible to supply rsyncrypto with a list of files and directories which to encrypt. This is done using the --filelist option, like so:

rsyncrypto --filelist --trim=0 list enc keys backup.crt

"enc" and "keys" retain the same meaning as before. "list" is a text file with a list, one per line, of files to encrypt. The --trim=0 option says that if list contains a line saying "/home/foo/bar" which states the name of a file, then an encrypted file called "enc/home/foo/bar" will be created. Without it, the file will be called "enc/foo/bar". Likewise, with --trim=2, the file would be created as "enc/bar".

It is often a problem that the file names are not encrypted. If that is the case, we can ask rsyncrypto to encrypt the file names, as well as the actual files. Rsyncrypto does not actually encrypt the file names. Instead, it replaces the actual file name with a random series of characters. The mapping between the actual file name and the garbled name is stored in a mapping file.

rsyncrypto --name-encrypt=map --trim=0 -r plain enc keys backup.crt

This will encrypt the "plain" directory structure into enc, exactly as before. Unlike before, all files will be directly under the "enc" directory, and will be named as a meaningless garble. A file called "map" will be created under the current directory that contains a map between the gabled and the real name of the file. In addition, two files, called "enc/filemap" and "keys/filemap", will also be created. These are the encrypted and key file corresponding to the "map" file mentioned above. During decryption, if "map" does not exist, it will be created by decrypting "enc/filemap".

Important note: When performing file name encryption, it is vitally important to give the correct --trim values, both during encryption and during decryption. Failing to do so will cause rsyncrypto to search for non-existing file names, and to fail to locate the files to decrypt.  

BUGS

It is not yet possible to decrypt using password protected private key.

Decrypting from stdin is not yet supported.  

SEE ALSO

rsync(1), gzip(1), openssl(1), x509(1), req(1).
 

AUTHOR

rsyncrypto was written by Shachar Shemesh for Lingnu Open Source Consulting ltd. http://www.lingnu.com

This manual page was written by Shachar Shemesh <shachar@debian.org>  

PROJECT HOMEPAGE

http://rsyncrypto.lingnu.com


 

Index

NAME
SYNOPSIS
DESCRIPTION
PARAMETERS
OPTIONS
NOTES
THE TRIM OPTION
SECURITY
EXAMPLES AND TUTORIAL
BUGS
SEE ALSO
AUTHOR
PROJECT HOMEPAGE

This document was created by man2html, using the manual pages.
Time: 19:43:39 GMT, July 23, 2008 rsyncrypto-1.12/docs/filelist.txt0000644000175000017500000001412410317457101015372 0ustar sunsun== Notice == This document is on hold. It may be used for the format for saving meta-data inside the encrypted file itself, but will not be used for the "filelist" file. The filelist file will only contain a simple filename conversion. This document is here purely for archival reasons. == The "filelist" File == If the -m (--meta-encrypt) option is given, the file names, as well as other meta-data about the files, is garbled. All files are issued as standard permission files (according to the umask on Unix like systems). Their names are turned into a random stream of characters, and their ownership is that of the user running rsyncrypto. The real information about all of tha above is stored inside a special file, called "filelist". Of course, filelist is encrypted according to the standard rsyncrypto encryption. It is treated in a special way, it does not go through the same series of name changes as the rest of the files. This is done so that the file list itself could be identified and restored first, in case of a restore where the symmetric keys themselves have been lost. The format of filelist was designed to allow maximal coverage of OS specific features, while not giving up on platform inter-operability. Also, in order to keep parsing of filelist simple, it is in binary format. == Number Format == Whenever a multi-byte value is mentioned in the file format, this number is stored in network byte order, as used in TCP/IP. Network byte order is also known as "Big Endian". == File Format == Filelist contains a sequence of "chunks". Each chunk describes a different file that is in the backup. The chunks are sorted according to the encrypted file name. This was necessary for leaking as little information as possible about the real file name, while forcing a uniform order to maintain rsync and rsyncrypto efficiency. The first four bytes of filelist are a magic number identifying it and its version. The magic number for version 1 is 0x15c8fe60. After the magic number, the rest of the file is just a series of chunks, one after the other. Each chunk describes a certain file entry. The files must be ordered such that all files that reside in a single directory must be listed together. In addition, file entries inside the directory must be sorted alphabetically. Writers may order the directories in the file in any order thay wish, and readers may not assume any specific order to the directories themselves. Writers may use an algorithm that prepends the nesting level of the entry to the file name, and then sorts in the standard way (gives breadth first tree scan order). Readers may not assume that this is the algorithm used. == Chunk Format == Each chunk is composed of a series of specific data (data blocks). The data blocks have two types. The mandatory blocks, which must appear in each and every chunk, and the optional blocks, which may be present or not. For ease of parsing, the mandatory blocks must appear first in the chunk, in increasing block type order. The end of chunk is marked using a special "end of chunk" data block. == Data Block Format - Overview == The first two bytes of each data block are the block's size. The next two bytes are the block's type indentification. Types 0000 (platform), 0001 (original file) and 0002 (encoded file name) are mandatory. In addition, certain file types imply additional mandatory blocks. Implementations that do not implement support for said file types, however, need not handle the derived mandatory blocks. Actual block data follows after the first two bytes. A read confronted with an unknown block type should simply skip that block, and continue with the next block. A writer must always issue all mandatory blocks for the file version generated by it (as determined by the magic number at the start of the file). All strings are NULL terminated. Non ASCII characters are specified in either local encoding or UTF-8 encoding. All blocks start on a file offset that is 4 bytes aligned. If a natural block size is not a multiple of 4, writers must pad the block with zero (null) bytes. The block length must include the padding, and must divide by 4. === Mandatory Block === == Block 0000 - Platform == Block structure: 2 bytes : block length 2 bytes : block type, always 0000 1 byte : platform code 1 byte : directory seperator character string : Textual platform name (uname -o or equivalent) - ASCII The Platform block holds an identification of the OS from which the file was taken. The platform codes are defined in "filelist_format.h". Some codes: Posix - 03 Win32 - 0B MaxOS - 07 == Block 0001 - Original File Name == 2 bytes : block length 2 bytes : block type, always 0001 1 byte : File type 1 byte : File name encoding string : The name of the file File type is the type of the file, according to the following File name encoding values: 00 - File name encoding is unknown 01 - File name is UTF-8 encoded All other values are reserved. Readers should treat all other values as "00". Writers must not generate them. The file name field uses the same directory seperator as defined in the platform block. Comment - this specification leaves no room for multi-byte directory seperator. The author is not aware of any platform in which a directory seperator requires more than one byte in UTF-8 (i.e. - non-ASCII directory seperator). == Block 0002 - Encoded File Name == 2 bytes : block length 2 bytes : block type, always 0002 string : The name of the file (ASCII) The encoded file name must be ASCII encodeable. It must not contain any directory seperators. === Optional Blocks === == Block 0003 - Posix File Permission == 2 bytes : block length 2 bytes : block type, always 0003 4 bytes : UID 4 bytes : GID 4 bytes : file mode === Administrative Blocks === == Block FFFE - NOP == 2 bytes : block length 2 bytes : block type, always FFFE Any number of bytes : random data Readers should skip this block type without processing it. == Block FFFF - End of Chunk == 2 bytes : block length, always 4 2 bytes : block type, always FFFF Writers must place this block at the end of each chunk. Readers should assume that any data after this chunk is the begining of the next chunk. rsyncrypto-1.12/docs/rsyncrypto_recover.html0000644000175000017500000000527111030247151017663 0ustar sunsun Man page of RSYNCRYPTO_RECOVER

RSYNCRYPTO_RECOVER

Section: Rsyncrypto_recover User Manual (1)
Updated: May 13, 2008
Index Return to Main Contents
 

NAME

rsyncrypto_recover - recover all usable data from corrupted rsyncrypto filemaps  

SYNOPSIS

rsyncrypto_recover badfile > goodfile  

DESCRIPTION

This manual page documents the rsyncrypto_recover command.

When the rsyncrypto command is used with the --name-encrypt command, a file containing the mapping from the plain text representation to the encrypted file names is formed. This file mapping has a strict format of records delimited by a NULL byte.

A bug introduced in version 1.07 or rsyncrypto, and solved in version 1.09, caused this file to be somewhat corrupted under certain circumstances, most notably the use of the --delete-keys command line option.

It is important to note that the only records corrupted are records that were due to be deleted anyways. This bug did not result in any loss of actual important data. It did, however, leave behind a file that rsyncrypto then refused to open.

rsyncrypto_recover will read in a file map, and output to the standard output only those records that are valid.  

PARAMETERS

badfile
A file map that contains some good and some corrupted records.
 

SEE ALSO

rsyncrypto(1)  

AUTHOR

rsyncrypto was written by Shachar Shemesh for Lingnu Open Source Consulting ltd. http://www.lingnu.com

This manual page was written by Shachar Shemesh <shachar@debian.org>  

PROJECT HOMEPAGE

http://rsyncrypto.lingnu.com


 

Index

NAME
SYNOPSIS
DESCRIPTION
PARAMETERS
SEE ALSO
AUTHOR
PROJECT HOMEPAGE

This document was created by man2html, using the manual pages.
Time: 19:42:25 GMT, June 24, 2008 rsyncrypto-1.12/Makefile.am0000644000175000017500000000124611013001367014114 0ustar sunsunbin_PROGRAMS = rsyncrypto rsyncrypto_recover noinst_PROGRAMS = blocksizes man1_MANS = rsyncrypto.man rsyncrypto_recover.man rsyncrypto_SOURCES = main.cpp crypto.cpp crypt_key.cpp aes_crypt.cpp file.cpp process.cpp \ redir.cpp filemap.cpp bufferfd.cpp blocksizes_SOURCES = crypt_key.cpp aes_crypt.cpp blocksizes.cpp rsyncrypto_recover_SOURCES=recover.cpp .PHONY: test docs test: rsyncrypto [ -d ./tests ] || mkdir ./tests TRGT="$$(pwd)" ; SRC="$$(cd "$(top_srcdir)/tests" ; pwd)" ; export SRC ; cd $${TRGT}/tests && \ "$$SRC/regtest" "$$TRGT/rsyncrypto" v docs: rsyncrypto.html rsyncrypto_recover.html .man.html: man2html "$<" | tail -n +3 > "$@.tmp" mv "$@.tmp" "$@" rsyncrypto-1.12/autofd.h0000644000175000017500000001473711041276027013534 0ustar sunsun/* * This file is part of rsyncrypto - rsync friendly encryption * Copyright (C) 2005 Shachar Shemesh for Lingnu Open Source Consulting (http://www.lignu.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _AUTOFD_H #define _AUTOFD_H #include typedef int file_t; // autofd handles file descriptors class autofd { file_t fd; mutable bool owner, f_eof; file_t release() const { #if defined(EXCEPT_CLASS) if( !owner ) throw EXCEPT_CLASS("Releasing non-owner fd"); #endif owner=false; return fd; } public: autofd() : fd(-1), owner(false), f_eof(false) { } explicit autofd( file_t fd_p ) : fd(fd_p), owner(valid()), f_eof(false) { } #if defined(EXCEPT_CLASS) autofd( file_t fd_p, bool except ) : fd(fd_p), owner(valid()), f_eof(false) { if( except && valid() ) throw EXCEPT_CLASS("fd open failed", errno); } autofd( const char *pathname, int flags, mode_t mode=0 ) : owner(true), f_eof(false) { fd=open( pathname, flags, mode ); if( fd==-1 ) throw EXCEPT_CLASS("file open failed", errno, pathname); } #endif autofd( const autofd &that ) : fd(that.release()), owner(true), f_eof(false) { } ~autofd() { clear(); } file_t get() const { return fd; } operator file_t() const { return get(); } autofd &operator=( const autofd &that ) { if( fd!=that.fd ) { clear(); fd=that.release(); owner=true; f_eof=that.f_eof; } return *this; } void clear() { if( owner ) { close( fd ); fd=-1; owner=false; } } bool valid() const { return fd!=-1; } // Standard io operations private: static ssize_t read( file_t fd, void *buf, size_t count ) { ssize_t res=::read( fd, buf, count ); if( res==-1 ) throw rscerror("read failed", errno); return res; } public: ssize_t read( void *buf, size_t count ) const { ssize_t num=read( fd, buf, count ); if( num==0 ) f_eof=true; return num; } private: static ssize_t write( file_t fd, const void *buf, size_t count ) { ssize_t res=::write( fd, buf, count ); if( res!=static_cast(count) ) throw rscerror("write failed", errno); return res; } public: ssize_t write( const void *buf, size_t count ) { return write( fd, buf, count ); } static struct stat lstat( const char *file_name ) { struct stat ret; if( ::lstat( file_name, &ret )!=0 ) throw rscerror("lstat failed", errno, file_name ); return ret; } static struct stat stat( const char *file_name ) { struct stat ret; if( ::stat( file_name, &ret )!=0 ) throw rscerror("stat failed", errno, file_name ); return ret; } struct stat fstat() const { struct stat ret; if( ::fstat( get(), &ret )!=0 ) throw rscerror("stat failed", errno); return ret; } static off_t lseek( file_t file, off_t offset, int whence ) { return ::lseek( file, offset, whence ); } off_t lseek( off_t offset, int whence ) const { return lseek( fd, offset, whence ); } static int utimes( const char *filename, const struct timeval tv[2]) { return ::utimes( filename, tv ); } static autofd dup( int filedes ) { return autofd( ::dup(filedes) ); } static void rmdir( const char *pathname ) { if( ::rmdir( pathname )!=0 && errno!=ENOENT ) { throw rscerror("Error removing directory", errno, pathname ); } } // Nonstandard file io // Read from the stream up to, including, the newline std::string readline() const { std::string ret; char ch; while( read( &ch, 1 )==1 && ch!='\n' ) { ret+=ch; } return ret; } static void mv( const char *src, const char *dst ) { if( rename( src, dst )<0 ) { throw rscerror("rename failed", errno, dst ); } } // Recursively create directories // mode is the permissions of the end directory // int_mode is the permissions of all intermediately created dirs static void mkpath(const char *path, mode_t mode) { if( path[0]!='\0' ) { for( int sublen=0; path[sublen]!='\0'; sublen++ ) { if( sublen>0 && path[sublen]==DIRSEP_C && path[sublen+1]!=DIRSEP_C ) { std::string subpath(path, sublen); if( mkdir( subpath.c_str(), mode )!=0 && errno!=EEXIST ) throw rscerror("mkdir failed", errno, subpath.c_str() ); } } if( mkdir( path, mode )!=0 && errno!=EEXIST ) throw rscerror("mkdir failed", errno, path ); } } // Return the dir part of the name static int dirpart( const char *path ) { int i, last=0; for( i=0; path[i]!='\0'; ++i ) { if( path[i]==DIRSEP_C ) last=i; } return last; } static std::string combine_paths( const char *left, const char *right ) { std::string ret(left); int i; // Trim trailing slashes for( i=ret.length()-1; i>0 && ret[i]==DIRSEP_C; --i ) ; ret.resize(++i); if( i>0 ) ret+=DIRSEP_S; // Trim leading slashes for( i=0; right[i]==DIRSEP_C; ++i ) ; ret+=right+i; return ret; } // Status queries bool eof() const { return f_eof; } }; #endif // _AUTOFD_H rsyncrypto-1.12/crypt_key.h0000644000175000017500000000514010242342676014255 0ustar sunsun#ifndef CRYPT_KEY_H #define CRYPT_KEY_H class key { private: static const uint32_t VERSION_MAGIC_1; static const uint32_t VERSION_MAGIC_CUR; protected: // Define the key header in it's export form struct ext_key_header { uint32_t version; uint16_t cypher; uint16_t key_size; /* key size IN BYTES! */ uint32_t sum_span, sum_mod, sum_min_dist; } header; public: enum CYPHER_TYPES { CYPHER_AES }; private: auto_array plaintext_buffer; size_t ptbuf_loc, ptbuf_count; unsigned long ptbuf_sum; bool ptbuf_sub; bool ptbuf_may_rotate; protected: key(uint16_t key_size, CYPHER_TYPES cypher, uint32_t sum_span=256, uint32_t sum_mod=8192, uint32_t sum_min_dist=8192 ) : plaintext_buffer( new unsigned char [sum_span] ) { header.version=VERSION_MAGIC_CUR; header.key_size=key_size; header.cypher=cypher; header.sum_span=sum_span; header.sum_mod=sum_mod; header.sum_min_dist=sum_min_dist; } virtual key *gen_pad_key() const=0; public: virtual ~key() { } private: public: virtual size_t exported_length() const { return sizeof(ext_key_header); } // export_key returns the number of bytes the exported key took virtual size_t export_key( void *buffer ) const; virtual size_t block_size() const=0; static key *read_key( const unsigned char *buffer ); static key *new_key( CYPHER_TYPES cypher=CYPHER_AES, size_t keybits=0, uint32_t sum_span=256, uint32_t sum_mod=8192, uint32_t sum_min_dist=8192 ); // Encryption/decryption functions virtual void init_encrypt(); // Reset the IV values // Encrypt/decrypt in place. "size" is not guarenteed to work if bigger than block_size virtual void encrypt_block( unsigned char *data, size_t size )=0; virtual void decrypt_block( unsigned char *data, size_t size )=0; // Calculate whether we are on block boundry. If we are, we need to flush the plaintext and // reset IV AFTER the current byte. virtual bool calc_boundry( unsigned char data ); // Fill a memory area in a random-predictable way, based on the IV virtual void pad_area( unsigned char *buffer, size_t size ) const; // Simple retriever methods uint16_t get_key_size() const { return header.key_size; } uint32_t get_sum_span() const { return header.sum_span; } uint32_t get_sum_mod() const { return header.sum_mod; } uint32_t get_sum_min_dist() const { return header.sum_min_dist; } }; #endif // CRYPT_KEY_H rsyncrypto-1.12/file.cpp0000644000175000017500000004254411041543101013507 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2005-2008 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com/ */ #include "precomp.h" #include "rsyncrypto.h" #include "file.h" #include "autodir.h" #include "crypto.h" #include "filemap.h" static void copy_metadata( const char *destfilename, const struct stat *data ) { struct timeval tv[2]; tv[0].tv_sec=data->st_atime; tv[1].tv_sec=data->st_mtime; #if HAVE_STAT_NSEC tv[0].tv_usec=data->st_atime_nsec/1000; tv[1].tv_usec=data->st_mtime_nsec/1000; #else tv[0].tv_usec=0; tv[1].tv_usec=0; #endif if( autofd::utimes( destfilename, tv )==-1 ) throw rscerror("Setting time failed", errno, destfilename ); } int calc_trim( const char *path, int trim_count ) { int ret=0; if( path[0]=='\0' ) throw rscerror("Cannot trim empty path"); if( trim_count==0 ) { // Even if the trim is 0, we still want to seperate out the leading slashes int i; for( i=0; path[i]==DIRSEP_C; ++i ) ; return i; } do { if( (path[ret]==DIRSEP_C || path[ret]=='\0') && ret!=0 && path[ret-1]!=DIRSEP_C ) trim_count--; } while( trim_count>0 && path[ret++]!='\0' ); if( trim_count>0 ) throw rscerror("Not enough directories to trim"); // Skip trailing slashes while( path[ret]==DIRSEP_C ) ret++; return ret; } void filelist_encrypt( const char *src, const char *dst_dir, const char *key_dir, RSA *rsa_key, encryptfunc op, const char *opname, namefunc srcnameop, namefunc dstnameop, namefunc keynameop ) { autofd srcfd; if( strcmp(src, "-")==0 ) { // Src is stdin srcfd=autofd::dup(STDIN_FILENO); } else { srcfd=autofd(src, O_RDONLY); } bool error=false; while( !srcfd.eof() ) { std::string srcname=srcfd.readline(); if( srcname!="" ) try { // Seperate the prefix from the actual name size_t src_offset=calc_trim( srcname.c_str(), VAL(trim) ); std::string src_prefix(srcname.c_str(), src_offset); srcname=std::string(srcname.c_str()+src_offset); // Perform name (de)mangling std::string src=srcnameop( src_prefix.c_str(), srcname.c_str(), 0 ); struct stat filestat=autofd::stat( src.c_str() ); switch( filestat.st_mode&S_IFMT ) { case S_IFREG: { std::string dstfile=dstnameop( dst_dir, srcname.c_str(), filestat.st_mode ); std::string keyfile=keynameop( key_dir, srcname.c_str(), filestat.st_mode ); struct stat dststat; bool found=true; try { dststat=autofd::lstat( dstfile.c_str() ); } catch( const rscerror & ) { found=false; } if( !EXISTS(changed) || !found || abs(dststat.st_mtime-filestat.st_mtime)>VAL(mod_win) ) { // Report to stderr the operation if( VERBOSE(1) ) std::cerr<d_name)); struct stat status, dststat; status=autofd::lstat( src_filename.c_str() ); std::string dst_filename(dstname(dst_dir, src_filename.c_str()+src_offset, status.st_mode)); std::string key_filename(keyname(key_dir, src_filename.c_str()+src_offset, status.st_mode)); if( dst_filename.length()>0 ) { switch( status.st_mode & S_IFMT ) { case S_IFREG: // Regular file { bool statsuccess=true; try { dststat=autofd::lstat( dst_filename.c_str() ); } catch( const rscerror & ) { statsuccess=false; } if( !EXISTS(changed) || !statsuccess || abs(dststat.st_mtime-status.st_mtime)>VAL(mod_win) ) { // Report to stderr (if applicable) the operation if( VERBOSE(1) && opname!=NULL ) std::cerr<d_name,".")!=0 && strcmp(ent->d_name,"..")!=0 ) { if( !op_handle_dir ) { recurse_dir_enc( src_filename.c_str(), dst_dir, key_dir, rsa_key, op, src_offset, op_handle_dir, opname, dstname, keyname ); } else { recurse_dir_enc( src_filename.c_str(), dst_dir, key_dir, rsa_key, op, src_offset, op_handle_dir, opname, dstname, keyname ); op( src_filename.c_str(), dst_filename.c_str(), key_filename.c_str(), rsa_key, &status ); } } break; default: // Unhandled type std::cerr<<"Skipping unhandled file type: "< head; autofd headfd; // Read in the header, or generate a new one if can't { try { headfd=autofd( key_file, O_RDONLY ); } catch( const rscerror &err ) { if( err.errornum()!=ENOENT ) throw; } if( headfd.valid() ) { autommap headmap( headfd, PROT_READ ); head=std::auto_ptr(key::read_key( static_cast(headmap.get()) )); if( ( EXISTS(fr) && ( head->get_sum_span()!=static_cast(VAL(rollwin)) || head->get_sum_mod()!=static_cast(VAL(rollsens)) || head->get_sum_min_dist()!=static_cast(VAL(rollmin))) ) || ( EXISTS(fk) && head->get_key_size()!=static_cast(VAL(keysize)) ) ) { headfd.clear(); } } if( !headfd.valid() ) { head=std::auto_ptr(key::new_key(key::CYPHER_AES, VAL(keysize), VAL(rollwin), VAL(rollsens), VAL(rollmin))); } } int open_flags=O_RDONLY; #ifdef HAVE_NOATIME switch( VAL(noatime) ) { case 1: if( stat!=NULL && stat->st_uid==geteuid() ) open_flags|=O_NOATIME; break; case 2: open_flags|=O_NOATIME; break; } #endif bool archive=!EXISTS(noarch); read_bufferfd infd; if( strcmp(source_file, "-")!=0 ) infd=autofd(source_file, open_flags); else { infd=autofd::dup(STDIN_FILENO); // If source is stdin, there is nothing to archive archive=false; } autofd::mkpath( std::string(dst_file, autofd::dirpart(dst_file)).c_str(), 0777 ); std::string tmpdst(dst_file); if( !EXISTS(risky_writes) ) { tmpdst+=CREATE_SUFFIX; } write_bufferfd outfd(autofd(tmpdst.c_str(), O_CREAT|O_TRUNC|O_RDWR, 0666)); encrypt_file( head.get(), rsa_key, infd, outfd ); if( !headfd.valid() ) { write_header( key_file, head.get() ); } // Set the times on the encrypted file to match the plaintext file if( archive && stat!=NULL ) { copy_metadata( tmpdst.c_str(), stat ); } if( !EXISTS(risky_writes) ) { autofd::mv( tmpdst.c_str(), dst_file ); } } void file_decrypt( const char *src_file, const char *dst_file, const char *key_file, RSA *rsa_key, const struct stat *stat ) { std::auto_ptr head; // int infd, outfd, headfd; struct stat status; /* Decryption */ autofd headfd; try { headfd=autofd( key_file, O_RDONLY ); } catch( const rscerror &err ) { if( err.errornum()!=ENOENT ) throw; } bool headeread=headfd.valid(); // headread indicates whether we need to write a new header to disk. if( headeread ) { head=std::auto_ptr(read_header( headfd )); headfd.clear(); } read_bufferfd infd(autofd(src_file, O_RDONLY)); status=infd.fstat(); autofd::mkpath( std::string(dst_file, autofd::dirpart(dst_file)).c_str(), 0777); std::string tmpname(dst_file); if( !EXISTS(risky_writes) ) { tmpname+=CREATE_SUFFIX; } write_bufferfd outfd(autofd(tmpname.c_str(), O_CREAT|O_TRUNC|O_WRONLY, 0666)); head=std::auto_ptr(decrypt_file( head.get(), rsa_key, infd, outfd )); if( !headeread ) { write_header( key_file, head.get()); } copy_metadata( tmpname.c_str(), &status ); if( !EXISTS(risky_writes) ) { autofd::mv( tmpname.c_str(), dst_file ); } } std::string name_concat( const char *left, const char *right, mode_t mode ) { return *left!='\0' ? autofd::combine_paths( left, right ) : right; } rsyncrypto-1.12/bufferfd.h0000644000175000017500000000430311041276027014021 0ustar sunsun#ifndef BUFFERFD_H #define BUFFERFD_H class read_bufferfd : public autofd { static const size_t DEFAULT_BUF_SIZE; const size_t buf_size; auto_array buffer; mutable size_t startpos, endpos; ssize_t buffer_copy( void *buf, size_t count ) const; public: explicit read_bufferfd( size_t bufsize=DEFAULT_BUF_SIZE ) : buf_size(bufsize), buffer(new char [bufsize]), startpos(0), endpos(0) { } read_bufferfd( const autofd &rhs, size_t bufsize=DEFAULT_BUF_SIZE ) : autofd(rhs), buf_size(bufsize), buffer(new char [bufsize]), startpos(0), endpos(0) { } // We're actually ok with default copy constructor // We would be ok with default operator=, except that it needs to change some read-only vars read_bufferfd &operator=( const read_bufferfd &rhs ) { *static_cast(this)=rhs; const_cast(buf_size)=rhs.buf_size; buffer=const_cast &>(rhs.buffer); startpos=rhs.startpos; endpos=rhs.endpos; return *this; } ssize_t read( void *buf, size_t count ) const; }; class write_bufferfd : public autofd { static const size_t DEFAULT_BUF_SIZE; const size_t buf_size; auto_array buffer; mutable int buffill; public: write_bufferfd( size_t bufsize=DEFAULT_BUF_SIZE ) : buf_size(bufsize), buffer(new char [bufsize]), buffill(0) { } write_bufferfd( const autofd &rhs, size_t bufsize=DEFAULT_BUF_SIZE ) : autofd(rhs), buf_size(bufsize), buffer(new char [bufsize]), buffill(0) { } // This is not exactly the copy constructor, as the right hand side is not const write_bufferfd( write_bufferfd &rhs ) : buf_size(rhs.buf_size) { rhs.flush(); static_cast(*this)=rhs; buffer=rhs.buffer; buffill=0; } // A close relative - the operator= write_bufferfd &operator=( write_bufferfd &rhs ) { flush(); rhs.flush(); // Do not copy the buffer size, obviously static_cast(*this)=rhs; return *this; } ~write_bufferfd() { flush(); } ssize_t write( void *buf, size_t count ); void flush(); void clear() { flush(); autofd::clear(); } }; #endif // BUFFERFD_H rsyncrypto-1.12/bootstrap0000755000175000017500000000007011010414543014016 0ustar sunsun#!/bin/sh -e aclocal autoheader automake -a -c autoconf rsyncrypto-1.12/rsyncrypto.h0000644000175000017500000001257411041276027014503 0ustar sunsun#ifndef RSYNCRYPTO_H #define RSYNCRYPTO_H #include "rcserror.h" struct startup_options { struct arg_lit *help, *del, *delkey, *filelist, *fr, *fk, *noarch, *version; struct arg_lit *decrypt, *verbosity, *recurse, *changed, *risky_writes; struct arg_int *keysize, *rollwin, *rollmin, *rollsens, *trim, *nenest; struct arg_int *noatime, *mod_win; struct arg_file *gzip; struct arg_file *src, *dst, *key, *master, *nameenc, *export_changes; struct arg_rem *rem1; struct arg_end *end; void *argtable[29 #if HAVE_NOATIME +1 #endif ]; startup_options() { int i=0; argtable[i++]=src=arg_file1( NULL, NULL, "", "Source file or directory (or filelist)" ); argtable[i++]=dst=arg_file1( NULL, NULL, "", "Destination file or directory" ); argtable[i++]=key=arg_file1( NULL, NULL, "", "Keys file or directory" ); argtable[i++]=master=arg_file1( NULL, NULL, "", "Master key (public key certificate or private key)" ); argtable[i++]=help=arg_lit0( "h", "help", "Display this page."); argtable[i++]=version=arg_lit0( "V", "version", "Display the rsyncrypto version."); argtable[i++]=verbosity=arg_litn( "v", "verbose", 0, 5, "Produce more verbose output. Specify repeatedly for more verbosity"); argtable[i++]=decrypt=arg_lit0( "d", "decrypt", "Decrypt"); argtable[i++]=recurse=arg_lit0( "r", "recurse", " and are directory names, and are processed recursively"); argtable[i++]=changed=arg_lit0( "c", "changed", "Only encrypt changed files. Requires -r or --filelist"); argtable[i++]=mod_win=arg_int0( NULL, "modify-window", "", "compare mod-times with reduced accuracy" ); argtable[i++]=export_changes=arg_file0( NULL, "export-changes", "log_file", "Write list of affected files to a log file" ); argtable[i++]=nameenc=arg_file0( "n", "name-encrypt", "translation_file", "Encrypt file names"); argtable[i++]=nenest=arg_int0( NULL, "ne-nesting", "", "set the hash directory tree depth when encrypting file names" ); argtable[i++]=trim=arg_int0( NULL, "trim", "", "Number of directory entries to trim from the begining of the path. Default 1"); argtable[i++]=del=arg_lit0( NULL, "delete", "Delete files under not under . Requires -r"); argtable[i++]=delkey=arg_lit0( NULL, "delete-keys", "Delete also the keys. Implies --delete"); argtable[i++]=filelist=arg_lit0( NULL, "filelist", " is a list of file and directory names to process. \"-\" means read from stdin."); argtable[i++]=risky_writes=arg_lit0( NULL, "risky-writes", "Write files in place - do not do safe replacement" ); noatime=arg_int0( NULL, "noatime", "", "Level of O_NOATIME use" ); #if HAVE_NOATIME argtable[i++]=noatime; #endif argtable[i++]=keysize=arg_int0( "b", "keybits", "", "Size of key to create. Encryption only"); argtable[i++]=fr=arg_lit0( NULL, "fr", "Force new rollover parameters, even if previous encryption used a different setting."); argtable[i++]=fk=arg_lit0( NULL, "fk", "Force a new key size, even if previous encryption used a different setting."); argtable[i++]=noarch=arg_lit0( NULL, "no-archive-mode", "Do not try to preserve timestamps"); argtable[i++]=gzip=arg_file0( NULL, "gzip", "", "Path to gzip-like program to use. Must accept a --rsyncable command option"); argtable[i++]=rem1=arg_rem( "Advanced options:", "" ); argtable[i++]=rollwin=arg_int0( NULL, "roll-win", "", "Rollover window size. Default is 8192 byte"); argtable[i++]=rollmin=arg_int0( NULL, "roll-min", "", "Minimal number of guaranteed non-rolled bytes. Default 8192"); argtable[i++]=rollsens=arg_int0( NULL, "roll-sensitivity", "", "How sensitive are we to cutting a block. Default is \"roll-win\""); argtable[i++]=end=arg_end(2); // If this assert fails, you forgot to fix the size of the "Argtable" array. assert(i==sizeof(argtable)/sizeof(argtable[0])); if( arg_nullcheck(argtable)==0 ) { // Fill in default values keysize->ival[0]=0; trim->ival[0]=1; rollwin->ival[0]=8192; rollmin->ival[0]=8192; gzip->filename[0]="gzip"; nenest->ival[0]=0; } } ~startup_options() { arg_freetable(argtable, sizeof(argtable)/sizeof(argtable[0])); } }; extern startup_options options; #define EXISTS(arg) (options.arg->count>0) #define VAL(arg) (options.arg->ival[0]) #define FILENAME(arg) (options.arg->filename[0]) #define ARG(arg) (*(options.arg)) #define VERBOSE(val) (ARG(verbosity).count>=(val)) extern std::ostream *report0, *report1, *report2, *report3; extern std::auto_ptr changes_log; #define EXCEPT_CLASS rscerror // Add a constant suffix to files while they are being created #define CREATE_SUFFIX ".rsyncrypto_tmp" #if defined(_WIN32) static inline void ODS(const char *format, ... ) { #ifdef DEBUG char buffer[500]; va_list args; va_start(args, format); _vsnprintf(buffer, sizeof(buffer), format, args ); OutputDebugString(buffer); #endif } #include "win32/types.h" #endif #endif // RSYNCRYPTO_H rsyncrypto-1.12/aes_crypt.h0000644000175000017500000000274410242342676014244 0ustar sunsun#ifndef AES_CRYPT_H #define AES_CRYPT_H #include "crypt_key.h" #include "autoarray.h" #include class aes_key : public key { struct aes_export { unsigned char iv[AES_BLOCK_SIZE]; unsigned char key[1]; } aes_header; auto_array secret_key; aes_key( const aes_key &that ); unsigned char cbc_base[AES_BLOCK_SIZE]; AES_KEY encrypt_key, decrypt_key; void update_keys() { AES_set_decrypt_key( secret_key.get(), header.key_size*8, &decrypt_key ); AES_set_encrypt_key( secret_key.get(), header.key_size*8, &encrypt_key ); } protected: virtual key *gen_pad_key() const; public: aes_key( uint16_t key_size, uint32_t sum_span, uint32_t sum_mod, uint32_t sum_min_dist, const unsigned char *buffer ); aes_key( size_t keybits, uint32_t sum_span, uint32_t sum_mod, uint32_t sum_min_dist ); virtual size_t block_size() const { return AES_BLOCK_SIZE; } virtual size_t exported_length() const { return key::exported_length()+header.key_size+block_size(); } virtual size_t export_key( void *buffer ) const; // Encryption/decryption functions virtual void init_encrypt(); // Reset the IV values // Encrypt/decrypt in place. "size" is not guarenteed to work if bigger than block_size virtual void encrypt_block( unsigned char *data, size_t size ); virtual void decrypt_block( unsigned char *data, size_t size ); }; #endif // AES_CRYPT_H rsyncrypto-1.12/COPYING.rtf0000644000175000017500000011437511010322035013710 0ustar sunsun{\rtf1\ansi\deff1\adeflang1025 {\fonttbl{\f0\froman\fprq2\fcharset177 Times New Roman;}{\f1\froman\fprq2\fcharset177 Times New Roman;}{\f2\fswiss\fprq2\fcharset177 DejaVu Sans;}{\f3\froman\fprq2\fcharset177 Times New Roman;}{\f4\fswiss\fprq2\fcharset177 Arial;}{\f5\fmodern\fprq1\fcharset177 Courier New;}{\f6\fnil\fprq0\fcharset177 Nachlieli CLM;}} {\colortbl;\red0\green0\blue0;\red0\green0\blue128;\red128\green128\blue128;} {\stylesheet{\s1\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033\snext1 Normal;} {\s2\sb240\sa120\keepn\rtlch\af4\afs28\lang1037\ltrch\dbch\af1\langfe255\hich\f4\fs28\lang1033\loch\f4\fs28\lang1033\sbasedon1\snext3 Heading;} {\s3\sa120\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033\sbasedon1\snext3 Body Text;} {\s4\sa120\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033\sbasedon3\snext4 List;} {\s5\sb120\sa120\rtlch\af6\afs24\lang1037\ai\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext5 caption;} {\s6\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033\sbasedon1\snext6 Index;} {\s7\sb120\sa120\rtlch\afs24\lang1037\ai\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\i\loch\fs24\lang1033\i\sbasedon1\snext7 caption;} {\s8\sb240\sa120\keepn\rtlch\af1\afs28\lang1037\ab\ltrch\dbch\langfe255\hich\f1\fs28\lang1033\b\loch\f1\fs28\lang1033\b\sbasedon2\snext3{\*\soutlvl2} heading 3;} {\s9\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033\sbasedon1\snext9 Preformatted Text;} {\s10\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033\sbasedon1\snext11 List Heading;} {\s11\li567\ri0\lin567\rin0\fi0\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033\sbasedon1\snext11 List Contents;} {\s12\sa283\brdrb\brdrdb\brdrw15\brdrcf3\brsp0{\*\brdrb\brdlncol3\brdlnin1\brdlnout1\brdlndist20}\brsp0\rtlch\afs12\lang1037\ltrch\dbch\af2\langfe255\hich\fs12\lang1033\loch\fs12\lang1033\sbasedon1\snext3 Horizontal Line;} {\*\cs14\cf2\ul\ulc0\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 Internet link;} {\*\cs15\rtlch\afs24\lang1037\ab\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\b\loch\fs24\lang1033\b Strong Emphasis;} {\*\cs16\rtlch\afs24\lang1037\ai\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\i\loch\fs24\lang1033\i Variable;} {\*\cs17\rtlch\af5\afs24\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs24\lang1033\loch\f5\fs24\lang1033 Example;} {\*\cs18\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 Numbering Symbols;} {\*\cs19\cf2\ul\ulc0\rtlch\af1\afs24\lang1037\ltrch\dbch\af1\langfe255\hich\f1\fs24\lang1033\loch\f1\fs24\lang1033 Internet link;} } {\info{\creatim\yr0\mo0\dy0\hr0\min0}{\revtim\yr0\mo0\dy0\hr0\min0}{\printim\yr0\mo0\dy0\hr0\min0}{\comment StarWriter}{\vern6800}}\deftab709 {\*\pgdsctbl {\pgdsc0\pgdscuse195\pgwsxn11905\pghsxn16837\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\rtlsect\pgdscnxt0 Standard;}} {\*\pgdscno0}\paperh16837\paperw11905\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\pgwsxn11905\pghsxn16837\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\rtlsect\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 Rsyncrypto is distributed under the terms and conditions of the GNU General{ Public License, with the clarification that it is allowed to link it with the OpenSSL library, or any derivative of it that is distributed under either or both of its current lice nses (as of version 0.9.7 of openssl).}} \par \pard\plain \rtlpar\s12\sa283\brdrb\brdrdb\brdrw15\brdrcf3\brsp0{\*\brdrb\brdlncol3\brdlnin1\brdlnout1\brdlndist20}\brsp0\rtlch\afs12\lang1037\ltrch\dbch\af2\langfe255\hich\fs12\lang1033\loch\fs12\lang1033 \par \pard\plain \ltrpar\s8\sb240\sa120\keepn\ql\rtlch\af1\afs28\lang1037\ab\ltrch\dbch\langfe255\hich\f1\fs28\lang1033\b\loch\f1\fs28\lang1033\b {\rtlch \ltrch\loch\f1\fs28\lang1033\i0\b GNU GENERAL PUBLIC LICENSE} \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 Version 2, June 1991 } \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 Copyright (C) 1989, 1991 Free Software Foundation, Inc. } \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 Everyone is permitted to copy and distribute verbatim copies} \par \pard\plain \ltrpar\s9\sa283\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 of this license document, but changing it is not allowed.} \par \pard\plain \ltrpar\s8\sb240\sa120\keepn\ql\rtlch\af1\afs28\lang1037\ab\ltrch\dbch\langfe255\hich\f1\fs28\lang1033\b\loch\f1\fs28\lang1033\b {\rtlch \ltrch\loch\f1\fs28\lang1033\i0\b Preamble} \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License inst ead.) You can apply it to your programs, too. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 mod ify it. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 th ey know their rights. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 i s not the original, so that any problems introduced by others will not reflect on the original authors' reputations. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 c lear that any patent must be licensed for everyone's free use or not licensed at all. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 The precise terms and conditions for copying, distribution and modification follow. } \par \pard\plain \ltrpar\s8\sb240\sa120\keepn\ql\rtlch\af1\afs28\lang1037\ab\ltrch\dbch\langfe255\hich\f1\fs28\lang1033\b\loch\f1\fs28\lang1033\b{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION} \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b 0.}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 b ased 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, transla tion is included without limitation in the term "modification".) Each licensee is addressed as "you". } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 ba sed on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b 1.}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b 2.}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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: } \par \pard\plain \ltrpar\s11\li567\ri0\lin567\rin0\fi0\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b a)}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. } \par \pard\plain \ltrpar\s11\li567\ri0\lin567\rin0\fi0\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b b)}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. } \par \pard\plain \ltrpar\s11\li567\ri0\lin567\rin0\fi0\sa283\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b c)}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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.) } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b 3.}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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: } \par \pard\plain \ltrpar\s11\li567\ri0\lin567\rin0\fi0\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b a)}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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, } \par \pard\plain \ltrpar\s11\li567\ri0\lin567\rin0\fi0\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b b)}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 distri buted under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, } \par \pard\plain \ltrpar\s11\li567\ri0\lin567\rin0\fi0\sa283\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b c)}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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.) } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 scr ipts 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 no t compelled to copy the source along with the object code. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b 4.}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b 5.}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. Th erefore, 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b 6.}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b 7.}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 L icense, 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 a t 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 entirel y from distribution of the Program. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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, wh ich 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b 8.}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 limita tion 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b 9.}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 v ersion 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b 10.}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 Softwa re 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b NO WARRANTY} \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b 11.}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 WARR ANTY 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 P ROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b{\*\cs15\rtlch\ltrch\dbch\hich\fs24\lang1033\b\loch\fs24\lang1033\b 12.}}{\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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, INCIDEN TAL 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 OTH ER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. } \par \pard\plain \ltrpar\s8\sb240\sa120\keepn\ql\rtlch\af1\afs28\lang1037\ab\ltrch\dbch\langfe255\hich\f1\fs28\lang1033\b\loch\f1\fs28\lang1033\b {\rtlch \ltrch\loch\f1\fs28\lang1033\i0\b END OF TERMS AND CONDITIONS} \par \pard\plain \ltrpar\s8\sb240\sa120\keepn\ql\rtlch\af1\afs28\lang1037\ab\ltrch\dbch\langfe255\hich\f1\fs28\lang1033\b\loch\f1\fs28\lang1033\b {\rtlch \ltrch\loch\f1\fs28\lang1033\i0\b How to Apply These Terms to Your New Programs} \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 ful l notice is found. } \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i\b0\*\cs16\rtlch\ltrch\dbch\hich\fs24\lang1033\i\loch\fs24\lang1033\i one line to give the program's name and an idea of what it does.} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 Copyright (C) {\*\cs16\rtlch\ltrch\dbch\hich\fs24\lang1033\i\loch\fs24\lang1033\i yyyy} {\*\cs16\rtlch\ltrch\dbch\hich\fs24\lang1033\i\loch\fs24\lang1033\i name of author}} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 This program is free software; you can redistribute it and/or} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 modify it under the terms of the GNU General Public License} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 as published by the Free Software Foundation; either version 2} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 of the License, or (at your option) any later version.} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 This program is distributed in the hope that it will be useful,} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 but WITHOUT ANY WARRANTY; without even the implied warranty of} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 GNU General Public License for more details.} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 You should have received a copy of the GNU General Public License} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 along with this program; if not, write to the Free Software} \par \pard\plain \ltrpar\s9\sa283\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.} \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 Also add information on how to contact you by electronic and paper mail. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 If the program is interactive, make it output a short notice like this when it starts in an interactive mode: } \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 Gnomovision version 69, Copyright (C) {\*\cs16\rtlch\ltrch\dbch\hich\fs24\lang1033\i\loch\fs24\lang1033\i year} {\*\cs16\rtlch\ltrch\dbch\hich\fs24\lang1033\i\loch\fs24\lang1033\i name of author}} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 type `show w'. This is free software, and you are welcome} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 to redistribute it under certain conditions; type `show c' } \par \pard\plain \ltrpar\s9\sa283\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 for details.} \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 The hypothetical commands {\*\cs17\rtlch\ltrch\dbch\hich\f5\fs24\lang1033\loch\f5\fs24\lang1033 `show w'} and {\*\cs17\rtlch\ltrch\dbch\hich\f5\fs24\lang1033\loch\f5\fs24\lang1033 `show c'} should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than {\*\cs17\rtlch\ltrch\dbch\hich\f5\fs24\lang1033\loch\f5\fs24\lang1033 `show w'} and {\*\cs17\rtlch\ltrch\dbch\hich\f5\fs24\lang1033\loch\f5\fs24\lang1033 `show c'}; they could even be mouse-clicks or menu items--whatev er suits your program. } \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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: } \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 Yoyodyne, Inc., hereby disclaims all copyright} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 interest in the program `Gnomovision'} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 (which makes passes at compilers) written } \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 by James Hacker.} \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 \par \pard\plain \ltrpar\s9\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033{\rtlch \ltrch\loch\f1\fs24\lang1033\i\b0{\*\cs16\rtlch\ltrch\dbch\hich\fs24\lang1033\i\loch\fs24\lang1033\i signature of Ty Coon}}{\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 , 1 April 1989} \par \pard\plain \ltrpar\s9\sa283\ql\rtlch\af5\afs20\lang1037\ltrch\dbch\af5\langfe255\hich\f5\fs20\lang1033\loch\f5\fs20\lang1033 {\rtlch \ltrch\loch\f5\fs20\lang1033\i0\b0 Ty Coon, President of Vice} \par \pard\plain \ltrpar\s3\sa120\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 {\rtlch \ltrch\loch\f1\fs24\lang1033\i0\b0 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 {\field{\*\fldinst HYPERLINK "http://www.gnu.org/licenses/lgpl.html" }{\fldrslt \*\cs19\cf2\ul\ulc0\rtlch\ltrch\dbch\hich\f1\fs24\lang1033\loch\f1\fs24\lang1033{\cf2\ul\ulc0 GNU Lesser General Public License}}} instead of this License. } \par \pard\plain \ltrpar\s1\ql\rtlch\afs24\lang1037\ltrch\dbch\af2\langfe255\hich\fs24\lang1033\loch\fs24\lang1033 \par }rsyncrypto-1.12/redir.h0000644000175000017500000000277510277665325013373 0ustar sunsun#ifndef REDIR_H #define REDIR_H #include "autopipe.h" // This is a base class for process output redirection class redir { public: virtual void child_redirect( int redir_type, void *plat_opaq )=0; virtual void parent_redirect( int redir_type, void *plat_opaq )=0; virtual ~redir() { } }; class redir_pipe : public redir, public autopipe { public: redir_pipe( const autopipe &that ) : autopipe(that) { } explicit redir_pipe( size_t pipe_size=4096) : autopipe(pipe_size) { } virtual ~redir_pipe() { } virtual void child_redirect( int redir_type, void *plat_opaq ); virtual void parent_redirect( int redir_type, void *plat_opaq ); }; class redir_fd : public redir, public autofd { public: redir_fd(const autofd &that) : autofd(that) { } redir_fd() : autofd() { } explicit redir_fd( file_t fd ) : autofd( fd ) { } #if defined(EXCEPT_CLASS) redir_fd( file_t fd, bool except ) : autofd( fd, except ) { } redir_fd( const char *pathname, int flags, mode_t mode ) : autofd( pathname, flags, mode ) { } #endif virtual ~redir_fd() { } virtual void child_redirect( int redir_type, void *plat_opaq ); virtual void parent_redirect( int redir_type, void *plat_opaq ); }; // Do nothing redirection class redir_null : public redir { public: virtual void child_redirect( int redir_type, void *plat_opaq ); virtual void parent_redirect( int redir_type, void *plat_opaq ); }; #endif // REDIR_H rsyncrypto-1.12/filemap.cpp0000644000175000017500000002620511030247151014205 0ustar sunsun/* * rsyncrypto - an rsync friendly encryption * Copyright (C) 2005-2008 Shachar Shemesh for Lingnu Open Source Consulting ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You 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 * * In addition, as a special exception, the rsyncrypto authors give permission * to link the code of this program with the OpenSSL library (or with modified * versions of OpenSSL that use the same license as OpenSSL), and distribute * linked combinations including the two. You must obey the GNU General Public * License in all respects for all of the code used other than OpenSSL. If you * modify this file, you may extend this exception to your version of the file, * but you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. * * The project's homepage is at http://rsyncrypto.lingnu.com/ */ /* * The file format is ALMOST text-editor friendly. Not quite, though. * Each "line" contains a single character indicating the directory seperator * (/, \ etc). The encrypted file name, a space, and then the unencrypted file * name. Each line is terminated with a NULL. */ #include "precomp.h" #include "rsyncrypto.h" #include "filemap.h" #include "file.h" filemaptype namemap; revfilemap reversemap; // Cypher->plain mapping for encryption usage static const size_t CODED_FILE_ENTROPY=128; static void replace_dir_sep( std::string &path, char dirsep ) { // Shortpath if we have nothing to do if( dirsep!=DIRSEP_C ) { for( std::string::iterator i=path.begin(); i!=path.end(); ++i ) { if( *i==DIRSEP_C ) throw rscerror("Untranslateable file name"); if( *i==dirsep ) *i=DIRSEP_C; } } } void filemap::fill_map( const char *list_filename, bool encrypt ) { bool nofile=false; autofd listfile_fd; try { autofd _listfile_fd( list_filename, O_RDONLY ); listfile_fd=_listfile_fd; } catch( const rscerror &err ) { if( err.errornum()!=ENOENT ) throw; nofile=true; } // If the file doesn't exist, an empty map is what "initialization" is for us. Simply get out. if( !nofile ) { autommap listfile( listfile_fd, PROT_READ ); size_t offset=0; while( offset(listfile.get_uc()+offset), i); offset+=i+1; for( i=0; i+offset(listfile.get_uc()+offset), i); offset+=i+1; replace_dir_sep( entry.plainname, entry.dirsep ); // Hashing direction (encoded->unencoded file names or vice versa) depends on whether we are // encrypting or decrypting std::string key; if( encrypt ) { key=entry.plainname; } else { key=entry.ciphername; } if( !namemap.insert(filemaptype::value_type(key, entry)).second ) { // filemap already had an item with the same key throw rscerror("Corrupt filemap - dupliacte key"); } // If we are encrypting, we will also need the other map direction if( encrypt && !reversemap.insert(revfilemap::value_type(entry.ciphername, entry.plainname)).second ) { // Oops - two files map to the same cipher name throw rscerror("Corrupt filemap - dupliace encrypted name"); } } } } static std::string bin2hex( const uint8_t *data, size_t length ) { std::string ret; for( unsigned int i=0; i>4]; ret+=convertable[data[i]&0x0f]; } return ret; } std::string filemap::namecat_encrypt( const char *left, const char *right, mode_t mode ) { switch( mode&S_IFMT ) { case S_IFREG: { std::string c_name; // Crypted name of file // Remove leading dirseps while( *right==DIRSEP_C ) right++; // Find out whether we already have an encoding for this file filemaptype::const_iterator iter=namemap.find(right); if( iter==namemap.end() ) { int i=0; std::string encodedfile; // Make sure we have no encoded name collisions do { // Need to create new encoding uint8_t buffer[CODED_FILE_ENTROPY/8]; // Generate an encoded form for the file. if( !RAND_bytes( buffer, CODED_FILE_ENTROPY/8 ) ) { throw rscerror("No random entropy for file name", 0, left); } encodedfile=bin2hex( buffer, sizeof(buffer) ); } while( reversemap.find(encodedfile)!=reversemap.end() && // Found a unique encoding (++i)<5 ); // Tried too many times. if(i==5) { throw rscerror("Failed to locate unique encoding for file"); } filemap newdata; newdata.plainname=right; newdata.ciphername=c_name=encodedfile; newdata.dirsep=DIRSEP_C; namemap[right]=newdata; reversemap[encodedfile]=right; } else { // We already have an encoding c_name=iter->second.ciphername; } // Calculate the name as results from the required directory nesting level nest_name(c_name); return autofd::combine_paths(left, c_name.c_str()); } break; case S_IFDIR: return left; break; default: return autofd::combine_paths(left, right); } } std::string filemap::namecat_decrypt( const char *left, const char *right, mode_t mode ) { if( !S_ISREG(mode) ) return autofd::combine_paths(left, right); while( *right==DIRSEP_C ) ++right; // Get just the file part of the path for( int skip=0; right[skip]!='\0'; ++skip ) { if( right[skip]==DIRSEP_C ) { right+=skip+1; skip=0; } } if( *right=='\0' || strcmp(right, FILEMAPNAME)==0 ) return ""; filemaptype::const_iterator iter=namemap.find(right); if( iter==namemap.end() ) // Oops - we don't know how this file was called before we hashed it's name! throw rscerror("Filename translation not found", 0, right); return autofd::combine_paths(left, iter->second.plainname.c_str()); } void filemap::nest_name( std::string &name ) { int nestlevel=VAL(nenest); std::string retval(name); while( nestlevel>0 ) { std::string partial(name.c_str(), nestlevel); retval=autofd::combine_paths(partial.c_str(), retval.c_str() ); nestlevel--; } name=retval; } // Create the file name mapping file void filemap::write_map( const char *map_filename ) { autofd file(map_filename, O_WRONLY|O_CREAT|O_TRUNC, 0600 ); for( revfilemap::const_iterator i=reversemap.begin(); i!=reversemap.end(); ++i ) { const filemap *data=&namemap[i->second]; file.write( &(data->dirsep), sizeof( data->dirsep ) ); file.write( data->ciphername.c_str(), data->ciphername.length() ); file.write( " ", 1 ); file.write( data->plainname.c_str(), data->plainname.length() ); file.write( "", 1 ); } } void virt_recurse_dir_enc( const char *encdir, const char *plaindir, const char *keydir, RSA *rsa_key, encopfunc op, const char *dir_sig_part ) { // We scan the translation map around the "dir_sig_part" area std::string basedirname(dir_sig_part); filemaptype::iterator begin, end; { // First, make sure there is exactly one DIRSEP_C at the end of the string. std::string::size_type i; for( i=basedirname.length(); i>0 && basedirname[i-1]==DIRSEP_C; --i ) ; basedirname.resize(i); basedirname+=DIRSEP_C; } if( basedirname.length()==1 ) { // The significant part is, for all intent and purposes, empty. Scan entire map begin=namemap.begin(); end=namemap.end(); } else { // Find the first file belonging to our work group begin=namemap.lower_bound(basedirname); // And one past the last one basedirname[basedirname.length()-1]=basedirname[basedirname.length()-1]+1; end=namemap.lower_bound(basedirname); } filemaptype::iterator next; for( filemaptype::iterator i=begin; i!=end; i=next ) { next=i; ++next; op( encdir, plaindir, keydir, i, rsa_key ); } } void filemap::enc_file_delete( const char *source_dir, const char *dst_dir, const char *key_dir, filemaptype::iterator &item, RSA *rsa_key ) { struct stat status; const std::string &plainname=item->second.plainname, &orig_ciphername=item->second.ciphername; std::string ciphername=orig_ciphername; // Make sure we use the proper nesting on the file name. That's why plain name is a reference, but cipher name // is a copy nest_name(ciphername); const std::string dst_file(autofd::combine_paths( dst_dir, plainname.c_str() ) ); const std::string src_file(autofd::combine_paths( source_dir, ciphername.c_str() )); const std::string key_file(autofd::combine_paths( key_dir, ciphername.c_str() )); try { status=autofd::lstat(dst_file.c_str()); } catch( const rscerror &err ) { if( err.errornum()==ENOENT || err.errornum()==ENOTDIR ) { // Need to erase file if( VERBOSE(1) ) std::cout<<"Delete "<, 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, 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. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] 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 # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case $1 in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $1 in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: rsyncrypto-1.12/tests/0000755000175000017500000000000011041707133013224 5ustar sunsunrsyncrypto-1.12/tests/reg2.enc0000644000175000017500000000026410177717660014573 0ustar sunsunqLvò¾¯ž^Ъ…*•é§éösPâºÚq™ËP¢„'Òý<`UÛòØëX?©žN„u9x{ path - path to rsyncrypto to run regression tests on options - specify "v" for verbose output EOF exit 1 fi compare() { echo -n "Comparing $1 to $2:" if (diff $1 $2 >/dev/null) then echo " identical" else echo " diff failed" exit 1 fi } runreg() { cmdline=$1 testname=$2 shift 2 if [ "$options" = "v" ] then echo "Testing $testname: $cmdline" else echo "Testing $testname:" fi if /bin/sh -c "$cmdline" then while [ "$1" ] do compare $1 $2 shift 2 done echo "$testname passed" else echo "rsyncrypto failed to run" exit 1 fi } dotest() { echo "Running regressions on $1" runreg "$RSC -d ${SRC}$1.enc $1.dec ${SRC}$1.key ${SRC}cert.crt" "decryption using symmetric key" ${SRC}$1 $1.dec rm $1.dec runreg "$RSC -d ${SRC}$1.enc $1.dec $1.key2 ${SRC}cert.key" "decryption using asymmetric key" ${SRC}$1 $1.dec ${SRC}$1.key $1.key2 rm $1.dec $1.key2 runreg "$RSC ${SRC}$1 $1.enc2 ${SRC}$1.key ${SRC}cert.key" "encryption using existing key" runreg "$RSC -d $1.enc2 $1.dec ${SRC}$1.key ${SRC}cert.crt" "decryption of our own encryption - symmetric" ${SRC}$1 $1.dec rm $1.dec runreg "$RSC -d $1.enc2 $1.dec $1.key2 ${SRC}cert.key" "decryption of our own encryption - asymmetric" ${SRC}$1 $1.dec ${SRC}$1.key $1.key2 rm $1.dec $1.key2 $1.enc2 runreg "$RSC ${SRC}$1 $1.enc2 $1.key2 ${SRC}cert.key" "encryption using new key" runreg "$RSC -d $1.enc2 $1.dec $1.key2 ${SRC}cert.crt" "decryption of our own encryption - symmetric" ${SRC}$1 $1.dec rm $1.dec runreg "$RSC -d $1.enc2 $1.dec $1.key3 ${SRC}cert.key" "decryption of our own encryption - asymmetric" ${SRC}$1 $1.dec $1.key3 $1.key2 rm $1.dec $1.key2 $1.key3 $1.enc2 # Let's test some command line options runreg "$RSC -d --gzip=${SRC}./nullgzip ${SRC}$1.enc $1.dec.gz ${SRC}$1.key ${SRC}cert.crt && gunzip $1.dec.gz" "test seperate gunzip" ${SRC}$1 $1.dec rm $1.dec echo "All tests on $1 successful" echo "" } rm -rf regtestdir.* mkdir regtestdir.orig mkdir regtestdir.orig/dummy mkdir regtestdir.key mkdir regtestdir.key/dummy mkdir regtestdir.enc mkdir regtestdir.enc/dummy shopt -s extglob pushd "$SRC" regs="$(echo reg+([0-9]))" popd for reg in $regs do dotest $reg ln ${SRC}$reg regtestdir.orig/dummy ln ${SRC}$reg.key regtestdir.key/dummy/$reg ln ${SRC}$reg.enc regtestdir.enc/dummy/$reg done runreg "$RSC -vv -r -d regtestdir.enc regtestdir.dec regtestdir.key ${SRC}cert.crt" "recursive decryption using symmetric" for reg in $regs do compare regtestdir.orig/dummy/$reg regtestdir.dec/dummy/$reg done rm -rf regtestdir.dec runreg "$RSC -vv -r -d regtestdir.enc regtestdir.dec regtestdir.key2 ${SRC}cert.key" "recursive decryption using asymmetric" for reg in $regs do compare regtestdir.orig/dummy/$reg regtestdir.dec/dummy/$reg compare regtestdir.key/dummy/$reg regtestdir.key2/dummy/$reg done rm -rf regtestdir.dec rm -rf regtestdir.key2 runreg "$RSC -vv -r --trim=2 regtestdir.orig/dummy regtestdir.enc2/dummy regtestdir.key/dummy ${SRC}cert.key" "recursive encryption using existing" runreg "$RSC -vv -r --trim=2 -d regtestdir.enc2/dummy regtestdir.dec/ regtestdir.key2 ${SRC}cert.key" "recursive decryption using asymmetric with trim" for reg in $regs do compare regtestdir.orig/dummy/$reg regtestdir.dec/$reg compare regtestdir.key/dummy/$reg regtestdir.key2/$reg done # Delete leftover files rm -rf regtestdir.* echo "All tests completed successfully" rsyncrypto-1.12/tests/reg1.key0000644000175000017500000000006410177717177014616 0ustar sunsunÖWê eýË#o|î£ XÚ±€Bxÿ7Bh“]Ź×)rsyncrypto-1.12/tests/cert.key0000644000175000017500000000156710177720421014710 0ustar sunsun-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQDF+EgK4pPT8oC2tP2UT0Iu7GtAqYWJDsTHwhznU7Iuxt8a5fg8 L2Clpt6ayTMjGasE82w8au437DxPjHqaOwN0pzRAfE+R/L9tJhDHemZzr7kZsEEC evsqKbyyLyGNFW4z81KL14elYp1O3XHE+nhdWJGqpqkXUqHWXxnK+SMAEQIDAQAB AoGAGsgl5uMUIJ4z74O4snGugG6Xa94DJLGMyYFnK5xVBKL+18K4vFukdYSHpOUH N/5m9np/8AR/Sa1500Er7OWC5+4dRAdO/rUIlr9d1SMwLNLMT1eJ1vLm0bDB9czP krD8+lEef1TxWp0ybB0Vl9aBYxBOwQpDHdNj/3w+dPUE3skCQQDuCo1jjUQrF180 MmaHpp1keBUr7/e0RrID4cR8ugJlvY7ROLJ+QmaWfg6EpAcV6A+QSsDvRao4nVp5 WxZfX2f/AkEA1OfN4CK+bZkpYHDQmtFkcXNtn7aM3NRUWxwNjUpHC93TGS8lMF1W 3NbauTHZ9LKtP/AFHh5p9/NsPZUXe0cX7wJBAMLVPj6yXI5Mle76JbN36zFVnDaX Ng6HIqNMwe84rEer7F5Q4r+3B5K74JQuUWJby4lVti7hvV6TZH8Zz+kGBO8CQB/A inW4+MmDpCYb7SCJxf8dheXh5dQxXntQDb1arInahVcmLtets/yvlmM0ShsyYqA8 fabmRkuSZDwy9hOOoMUCQGI/bGUfh7zuUxVhe9bmRHtI6GoTs/6XWIE1Tn0iEnFj vRJ4NoC0NwmptkY5EvSSdlAM066+rR0pjbt690WY1gc= -----END RSA PRIVATE KEY----- rsyncrypto-1.12/tests/reg1.rot0000644000175000017500000000000010242342676014607 0ustar sunsunrsyncrypto-1.12/tests/reg2.rot0000644000175000017500000000000010242342676014610 0ustar sunsunrsyncrypto-1.12/tests/testcrypt0000755000175000017500000000073511041271122015212 0ustar sunsun#!/bin/sh rm tests/A rm tests/A.key times=$1 fail=0 ulimit -c unlimited while [ $times -ne 0 -a $fail -eq 0 ] do dd if=/dev/urandom count=$2 bs=1 >> tests/A 2>/dev/null times=$((times-1)) #rm tests/A.* ./rsyncrypto tests/A tests/A.enc tests/A.key tests/cert.crt ./rsyncrypto -d tests/A.dec tests/A.enc tests/A.key tests/cert.crt diff tests/A tests/A.dec fail=$? done if [ $fail -ne 0 ] then echo "Test failed on length $(( ($1-$times)*$2 ))" fi rsyncrypto-1.12/tests/reg30000644000175000017500000032347110177721261014030 0ustar sunsunPÑ¢<©ù‚zWUhηþØ6^›¾?/ë°@Cí£j©•“‡%ê*Jl¹ñ ¤%ÄÑËåño§Œ²EoY>üŽèã#šØ1¡’\[¿ß+~×cþžƒ$1éè\¨?é &¿ØO‘½ZE3Z ñçÁVSªŸ2ˆE³äóOÈÀ2~/ylFÍ A±?¡t”û/u<Ãò $Ë ˆ´ÞütSZ”b,¢Îrô-‹Û¡Á÷%Æ!j™t¡–'­¦™N+RiµN`Ô6@léâe;Ú(ß`"¿¢=G3™©¯T¯t³ÝåùlàŒzáåa«üu“€õÀpµB^ël€ÎÜj°W³p<^[¯Ûé˜3Ör)G3yWß5©©Ðõe÷܉Nç:œ¡ »FhB Ráv{Ðùí,°^êÛ­áX‚yCþ„á™Ðö—iƒàÉDƒ¾$b¬®ôzvå°HsÖ°ÖKvä3 wn×F-oij|_ ¿4µìø¼x:B€6sií„‹³þÄR1ÓJKµzF/ô„—ÊEé"³²h,ÂV±){DSj͉VZ¶O'BX `=‚ v=wŠ—õsþp âÓõø [Dû‡žnd”Ç‹œÞZ$ëtÔ”®º°Ø5Íåoìé}ºâDFaé݆—ùRýûŽÍ¤‘:oTTîU¸ÿ¬GçwHÌ£)»V™Ÿd1&úC°Â@ý!°J@CŒ]¼Uþi­x¼þ§3«kÚæsø½µ…Žg`£É%@Hß™F’†ÖFkǽŠidh*+:­ëþιP–6Ö¨j  ¼ÉIÜ»;‘‘ ¬Î ¨E4ªmG'ÚqR¹ÿ63y'åñ:h¢SCÜDì3Œ9ÿQY•ey×½öÇCÐ$  [Uªo§¡Ô¾ú+AÉîýË2áˆGB®‚éØô{¯)ã‹Ü‡œþ, ÁØf9ý=Ôw2÷ùÒ÷±;døGJ_—oݺÛ8ma=Þݲ´H‰Ji»™Ý•ËÄÓ“$|ÆQ‚i3”Pjµ›ÇËŒtbLZŽƒ¼*6Û¹ÌöèFÿÐõŠò›c£ãêä1ŸqTAG7¶÷ÂÂÿ©MÍ غ¤«e|ÎvÇó¼F(9Ï( Ÿp}%©>ßÞämq–?‹_Õ=Ú»µŽ÷BJ¢gÎCÊyŒS¼¶62!Lj:‡#¤/‰š\‡Û(ðĆyA.™üÙ®EáÅ6Ü4XI|Æ–7Ñ%ƒ6ÞÌ<1öîgî˜úÑŸš² þ̇]~e=Ùý6JI }—ÈÁg¯Ò5ýTBRE,¿%XÄh`ǯ`(ÖÇnGhU…ì¡ñÚ~\¶¾œ¢ý_Ž»—Œ†õ{S}¢©mFZÐ’Lô¢ÂŠð†`_›žmxð+¢yöû¡À!ûúDâE:óV» SBú½Š2þDpÚqðÔ_jMãŒÑÇ_Þ8ŠuÄtƒÃÒ«`øüèÎÁFĸ¯IkK¢²±~Gë˜}ëÃÚÞE4?¬ÏÊÚiôðå Ö’C;½A^uLKÉ8£WÀüÉ6çXÆñµvn­;µ·áŸh÷%·Û3Ù<¾Ü¾ç%ôý°rŒ<9…C2íÇ7|Åü¬]F‡dvI`›ŸgÜ%) T؀Ưîf¸Å¢ÅÏë¹»\¢u³ø‹A¸œûÒ*g€Âò7›̆M›žEök:nEÉ`xíÉE¨>WªXfêㇴ†ª§âçñ÷ÚË•½]Ü- „|i_j@s$§Cò/ðí=­_ò"éU¦gv³ þ!FÏç+J&!à•:‰ìáÞ:ªÖȺd\Ç#z¨Ê!:‹n“O=õ·uÍü´ÍPãζÏ}=-¶rìð—•Yx·Á!9`øÖuƒ¶(mBŠ0&L«wÕËÇb*È£™!£ä…áÉj™™(b°s™Ì%Ê&a2âd¼™› Ò¦{Òo#äÿwPk‘ÉA¨ËÛ#SN==Fä©ÞÜiA¿*Sh2y¶™pÅ·hŒ´¿–ð/´…)Û^ ’ %F†±Ã(z7À?J]b9Ÿáò4–'GWü²sZ½î‹®gÙpmòþòWpϼ§vsPlÍ$,OÍ& ~ÈŽó©vgî<„Nå˜ÁJ`RQ’ï#¿Z7zÉ-sFãÔì¨ÑŠmõ¨wÂÇ2˜ó¯uŒP Œ×÷üsgg‚æùÖ“Ãî>è¾jp›3»ùû5÷JÀ‚.Ý÷ciº lÙ'u¶ûPø‚—aѸ=Cùd{z7¹Ãq®Q ¡Úù§{}çÀbÞ¼Ž)Ëlµ˜~sDbìEQCP!z9XþÑuÝqh•YFÆ(ŠÅs§íkOòWÇv3<¢š“þ¿«Ë’Tó™rDÕÈ…½4gyäÿ`çäH¬G‚Ÿ}4'ÖRÌ*Ú•3 ©“êw~?"¬¯x2âÖ%¾ohÜi„^p®T³æ%±ÚïH(UÃÀRPa å>î±¥kîÞ{9+—ç½" HGHèÆ£¯ÊßãdoÆþ8¤S>cm ÖàçyTzŸ³ÀµDRÃ|IMàqàE‰€-jßh¢O%vèkÈFàb!ZÖ¹&,BCÑp¡ ÿÁµçqXÜe¥î%:nQx’P"ß!”Ò—Å©ÜEN#‡9m—ötCPòÏäõ˜ ¬íl™¿ø ÓWµ(Êh•/'4ƒ¿igãÚBŠì†Ç‘a d¦ZR[)ìÔ+’°%wƒ®×„ÂY|ã—yv[/ƒí:‰Ñtï½RÌP{ø“ð}î&ÕPºkZ‹<9zéÏSÏ…'•ZtÝÂcdRS>+®-‹ÁN©÷œ¦0ÕÙD;|øòcÍó༨7¤GÄî'®!ѺҖy…ãĵ/žï\%…šÒFùt¥ºð/ÉUZÙŸ°««¤U,)¥öÑ’R9vàz6šaϋܾ” x¡ ö7A÷dè`š…ÆÐ¦%ÛhÄŸÊiíö: ‹P•¦©¢«$X³$ hº*ErÙ-È@|‘‰˜þvj‚!µ³· Ò,Zµò¡7e£Ñ6Y%Ýÿ¾qåñ⛚U&+xN‹ðÜIvP‹>‘ÓЭgõ 2„£Y†LY‡µô9ebáÊðMÎ+™¹ßîkÝqçX#•Qšk!ý«-h n¦Ð¥éýœ°x_ ˆNW›\­¥g¼…ÐäLyÝPn^±¡³:¨}MåôG!í!Þ1xôÃñrhw´Ú^'®Ü0²Ó‚à &½£—<ã%F·™g1#ÌÑàt³÷¶¬{ݰ£¬ƒká%Û©dÜy˼”$,ˆ_é¼ÛVw‘cŒ gµ°·%Ižª(/c¨°#¬(d~—¦€iÜ […Ì}OùÚÍ  ÒOÿ ñÓPæÜ´óõ¥.iiØ’æ\’%mýÍ#˜jUÊ_|LyåIàô0rïè¡©‹°…E©ñ:…ЋÒâ®4lR3ÈÉå}‡¹û iDøŠŒxÃ?ÔżH ýùÞ\¶V1´w9ÚNÆÏi–­ä,|¼¬ÀhÞòôX:lz4XÚÄÇ Ñ…Ð) ù];/2otMCŽ·¹æ˜bböøOÞ4ìÒ¾€;sõH®ÁM}Òøj’Ï1´ö®¦˜ÛTòøZ:´†´Kßùmªt‘IÎ÷ïf'ýYKƒ\ßé(?Ö jˆ|¿Sq ÁE¼p'Jñ¢Ü ÞTÁÇî¾;Ò¯­ÚkŸÊ=‡¸óLÃQä&ë“éÅ—pöÛ> üÃŒ©·ñëÇ$•"‰­Å Ìlc]C¼VŠ·E¼¨-szëgýoâĦÓ-ÊÚ}½ `Wº³YvÒþyw¸ [•šs½}06—/Q¥{(È÷K)|‰OÕwe$Åc7rõµèäŠô·ÔÝüËW£ûl[Ñè(ל¡eFjá®%Š$©'ñÏ:ç÷ Æ8Ž ´ \^¦×µày­­‘T:?D÷ÇÃßyò$ôµÒòieý/5¯qê•Hí§¨¼Ö™Oi„ÑÝÐŽ`¢#¾ÒÊu$‹…øœØÍ~"®[³K¦•ükøÓࣕÇO×½Ö£õÍÝ í¯Ë z™¢4‰Ø<ÔéÖ‰J»ˆcša‰c×¼ÿ0‘qËÝÛ‹;û‡žIÖgÕÎhøTïfŒ!бž,ήŠ}Ö£+2OÑVÛ°ßÌ À ]â²s‚æì) $(ØÅŽ,Ä×2GŸ›P&Kú0ˆlášhä…B¸üјÇéª,ØFULƒr¢ÿa/‘[ \ªÔùþ4MJCÒkÞ€S.Áƒ4pÓ¾ßÀõ´5ÿcv8.»AZ€h4¹Hƒñ°=* ÈZQ?7’§L¦'‡Ù==qhN—‡ŒÃ•ßÎ8Ö‘¨5! ëˆÍ‰¼Um"\·Æv¤àóqo¤|R(í™aŒio$T•A(ŸíŠÈò€Hu|xºtNóÐÁ‰ý5Ø·ðG¥‹ÉÖ‘i+øèY¤Sóâì|;üu·PðuûT'+Hº™®ZØ›#8ÿ%Ý8úÐ2HòÁ°I+”|F¥œ²û[ñøÐ£ ·ÿšÎgË‚ê1£rIŸK*®ƒ2‡X­Ô›³$ê>&æ0ƒÑö>Â5NÆ{3ù¬ÌRvËç²ø~wEŸâÖ3Ë2ÑTšÊöÂ0EÉa‰©ç| ÉqŒ£³ÜõЃSƹ …6T,ÚóHd¤è¢Îän`â>JÙ8‡Šæ28Íêi³~ËâúìÙÛï-(Æ¢HøÄ»4qyeßvH Õ ©íx£lذ˘‹|Ë§ÇØõÒj—½5ÿî|¡ô‰ä lºã”K;†c w:J#m±\‚ÃAý 6Ó)ÛòfI ºKOJlãSדÇKœÞO)Р‰Q%Ž|Ÿ©mŠâ`íÕ“yr)œùè»õEUKezìû< =•Ó»Bæä~–Ø8Sþ — cNk;F£wR†§g¹/ÿ7y„¡ˆ›¹R“ØyJf¢fˆz ‚èÖõ±)£Zbç càÒµBSOU¥xÚë_Òë«?±MÛO QŠÒÒ»™$.+†ÂÛ¬¤Ê¹/PÄØ¨ëÌçÏq#¥æMB³+éÓ?‹‚;õŸm²t¼¼ßó¼DœMƒ¤H«ë1³Â >yš_õ;˜{€Ì,)%b#mKöÅ´AD悆Q€›—G>Ñ˜Žµ Q³ƒŽ“ž> VïÚ;­Æ¶5"AÜ¢ð”èg{*)B(«»6v©‚sÃerJŸ+LV2ƒåÖR¶T³mÜç#ªúÝ€@T t»ª¥:2êV!ÉGæ6/ÄÙ¸åšÐÞj_æ;ó„€h©J”9 \SÁç½ô~v.ñk!ÅôÃEßñZø™Ãaõà˜)ìÜzÞk—fSö:UH·,E˲ǖƓþ0é°V7ª ñ¬gd`¤eµ”rþ¼ìÉWsW#úŒÎ« BiÈê^ã²HHƒ‚¨Ê!tež+Å‚¼pRsü²üøE ZôlK}6Ý™G¢èxß¼R~¤g‰:ØøTÇ®%±žã6Ç»*½DŽâtS†_—®ïw)ÂíŠÇŸð²bÈó6ëB‹‡ØgÕUÄØ¿3òü9±D—V%Œ0€Ð£jÔâ%|M `ä*¤Y´0/ýyzÙZè…‹qéѽ)˜QË#@I:Ð:xú÷z&@Þ~ßâŸÌ§§]êø²”‚Ì#"4ÙéR#YoCCu³‰Ž`%ËdAC6UÉWD9.’ï’¼Øõ÷¦U¶™·ÙNó°EÓ1qûÐ>š“÷Y{±æ>xÕÚ©ËñôKû¨½Ä"Aõdï®u|ѱ§Ú+²š°Z¡F„êò!]›á¨³®Í‰ß‹Ž‘°8å°x¾‚0nðZ;½é®ò“aÖŸÆL<ìxáûù‰š¨a—ß3ë±­¤é˜>•™„Ül)Å»Wó_Üv`Ò¤K±€+ê”3×.£áÃæÊmïû³[’ ùÅåY()Ÿ_Àºy&E]+¨*Ü›.8/R&xo½ãîÖW#ïÿŸ?N’òj8’YíéL ãayÜ:í0îCuÍ:CHw\wBg[F?¡¿íh•ŒlZÄD@ 'Ÿùj×Ò@é¤ ¹û#ÆÖ“>ÝÈKÇåÝÔ1Óäv‰Ëu&3BñîÑŽL³kÿbjÒ¥îk[>C·Hâ|`K¤½ßŸQ‡cšnì8wE³å| gi1Ua©VMŽ^X82oþëjw Rö¥ Ç(›üžÅ}+Ô²1­‚ò„>®;@\Ön‡è¶ÙÖÕ+d€…;ðýÕ°ÚHe¼Ëc|ÞáNÉO¶]Ì&ߎKÃkWþü©ž¬jr=‘Øâò©‡9Yrò×±¨ö²n°D#—É{¢Át]aåétKL'] dsèåäzÙ¾ûi¾ÀŸR%¤:‡´âA kÆåÃ<«»u-no0Jë&ëÜ. G–ý½¿GhÇ8©\SàØX‹ÒË 8éè¤4Á›uçÏO8aÃ’T±ªéÊ c¦@L½Áþ×>Z¡úfþ«uƇGÌ:Ez™ãâ}c (nÃÔ#±LvèNÊɧK=}ÓÔfí¯å‰"6‘®6ýS“C{á„q¢œ:žQ󃣤Jø0ªŠèê„[Gá‰fåëâ›}^õ鍸r/_¨¨Ð>@Mk6̀Ķ¡!¾[‘¥›‚,,Ë;ïR>1‰êŽRù<2>-­ùHàŒfy™‘¥L²¦V† ß2Ü5 þx $q’½ &vü=Êòa±Õ£¶I`@mçáì̇\*1j¼/_©»gÿ¼bóÙe+–AÚÃÒÚ”“ݰÓ%‘òjtÕk<å_5øhIœwò¶‡¨ÿŸÆ Ïä_êÈb󶱤ñJ‘bD Dsc‘{Ín¦˜v6¿ [ŠŠ¿óO ñ¦«“ "G$î[½xwÄðBÑ'áóò55»]Ñr²•÷jü_¾úÌgõæ8ÝÌ0bÑ1ŒƒòKqÿÓžmòG*1õ,tæ æŒk‹êú`ÄœUf{›ƒ€œ|h„!;Ó*Žkèí<ô¤âŠ¢à¥y:2ºŒdYåúÆ oÄ!—8N²ýJ@Ô7KÜ0ÇÜámnW®OnnÄK4Ã!cØßb‰EìÜXºÍ$dˆ»ÓËÀûŸÙ2 V¡‚‰k²fºû•)ŸQ5.f}Õ¿¤<*œ]G·~¦Ò9‚ëæÞð*'â5è¡­IyBó¥ÞW{ *°JÑ´šœ³~z´Á*z=áû|ŸÎùõKa v7á¼qÇ·ÙÉnÚ[´9”,-Z!öÍó@-ÚçvL÷úÇïiBÈlªYýê,]áZ‡T¾*õ1 ©;œs˜­ku4¬–d¶©Pžݨ‡9¯Bèצi©@ÝÓ<ÀtDz«È*ée”ÏÂìsY"=êwŠúÇü mJ[t‡mø¢‰(Ò0&:fÚ—ò·¶ÐîEâÓ >‰ efü/èj’c¾iƒš¡Vä#_t™ï{ü-Z†¥(q]ЩߠïÖ,@B Æh†ÒŒñY-áÓ˜ÅÝž¤.N® ñÈvrœçp¨Èzé"5ýÏ@aûüÈ’ˆS9¸âÚü>ØÏ«Usƒ+ò§ñKi LƼ)SŸTù{²ÀMUK<!a=JŒCÜÏîv$\ôI4†ç’ô$² ‘¥‰?lNã RÙÚÕì)QD¯aÁSV¥Ûþ‘2ðc(¦g~Ͷê:èÔG6½£‰¤°kŒB%‰ÞýjÙÆ„¸ˆêñ¢µôrŸe½æ5tÐøÏ³›4ÛoÝŠÂH6’ªe½TøÜK Ïq@.ƒP:ªá¡u99᪪ö!< +åðtö3mQçµh?‚¸9éU&4ÞÉÆùgú›hT(áø3Ÿ2rÏøYSÙÍÃ÷¨¿’¡qOŒ¯”´G¬Æ;ÉÍà×äŒO †ygà@¦'pXü½ãìåc²“²³Y”m}›Eo!t%4Q‰Ì@1¿ÅìÅMV›z3*ÛVPx„¡Ý‘Ñ(̉jJo«­å*ÂÿHmûoŠË¶+Ë=8p×ððÙµÈË/ý/܃Fhëñ‚ë:áÂw‘²JÉA$! „ݹpûÂ~‹x…¼mê30j$쨒ï-(‚CÔrÏ7 É ‡ªjL®--t3(ë#üõÇZqˆIÌ›οÿ÷mJ…­ß±1A=¶³‹H&‹n´"¬‡·‘…“&¿æ¯èLËÓgÍ~/½¤1xgvžl¾5ðU'Ä¢:^N 5ªK&€’ûŒåY¢Ã‘6„‹kÃò¹GAµ.áDwÞ–ÛúX#MÍ-@c¾ 5?Xƒúà ÞLqP :$Š|¸v´¸&ƒY#yYˆ¨@t1U'¢ê^—Qƒöl2E­\ ¿.ÛnµÆ£µßOÎv³Ìˆ›Ü¡DKó.Ÿ.ÜGÑÁN—.töu´ßö„ÁE4Æ?Â'5Fë\ÿ†õ(‡zµè¶¯™)dí‚æ ýÏ‚×$-þÁ˜fÔ¦ÁA%æ *ó(7>ï½Nѳþò ^Ûm¥LáVüí§p÷^fîÑk뇿'+)¼c\Å@ÇžHö†[¤½wFûýKX\ ÷ù”`E$EžñŠØqG×:VÒjÏÁ>ziŒ€t&puUÅPVžò9±@?ŽÚ¶ó×&ø O½M<83!ì¹gßL;6obëú„ÁÏihÖ“-íäD —i1¤T:SA—W´Æ”˜Ç÷z9±PÅøÚrúyª¥UÖà>ö®µ)¬êÄÝDJY§ˆÇ¯^ì˸Šâ‡kæ³J·§çtÛŒL!¸˜·TÆÆ¹ÿ²±ïã~=CÊW¦hyu³„`Ø™°Úá{î>Œ\L™¸|Z,˜6ìD0¬Ô¯gRª‘aªÌ¬w‰>Ê4QÂr–Jk†mr·¨­2C²gã–sæµïȯUµ=é±58Ó‰MÃÚ å:}š7ÿÔ3Zœm­—Ž@õ]ÔDú·q†ùƒÀYT6b£l7ÐXÎLûîíX*½pðú$¹à=úˆBÄP¶úäÞ™-Üà˜Éó& ~Ȳ yÜ{ÀQãÚýU½Ý¥ô=-h…)5O}lбÅÑd3™›ÕÓ»Ê#sàe…¾š ÉïgƒRöyOEe¡^k óÓQó¾ 6¯ÝêàFewê¶õÒ²e-¼hËqK]¢­D¥hÿÎëCÒ^1î˜XD€ƒÏšäÇ(Úê…ÃÚ€a»–TB»ïÿq)rE&e°—ÔâFøÔÒ#¡W‚¥gÜ<¼ä(wLÍDÏ3˜ìjÉ*Å]}wÝÕÖÅ aEŒQ¨\ê—êYÞ#Pu]‹ŒÍèvc5ÅäpNG÷î®ûKåP=6QÖ°ŸVp•;w¿Á雨yïì0²›ÊOÒ«õ¿;ã×ÅÚÖB¬¨ö¢åu£êv5I]!öCþÖpM»ˆyÍïÙ )HGŸ¶?IeÆ„FýýÎúç/ kÁÒv„è­ªÃ5ÜHf¿'äèPÜ|n#Ýš"M.oMžºÜ°€ ªÀ“nv–»Y‘P}¡1~Ú² o°¸šoŸ’H_¨Ý´´P«T4=CïŠuwŸ0b>¾ Mg ÍSb@r®VC½ñÔD1ó&ɉ8èûŽ×sÕƒ¤ÃSþ« âTŸª,Œo’J`{KÀ³î+ñÐß;Õ•ÁÝbx?ÊÜ +Úî`ÄSw £qôç?õO' íU#Êá ~›\J2³î±ñTÙ×þ—½›YVÁEËI½þjx®‹b \PåãÊ zb—UשÚZÌ.Ê –oz(›!s+¶#·¦t][rĹyüçrE?ˆg¼:IÝ–l6É2¿¬¢ûDPì$xUÝ(C¡è}™ç6å)ë‚itÒ‡y·Ì %¸%n6‡Jj‡œ‰*¸¸€ŒÈu‚ãÎÇ‘ 1KžóÑðå¬ïÔN±òãÖ ¥Ø ñF×û“M”›ïuíІ²³ÓŸ²{BÿtõñM&×÷õA^]¦;˜bƒR=Ì—ÒÌoxüŸëÇ֌бMšu*ðˆñ`ËHä— œ jï#ΞÿÀLïZY»þN<÷½±L ŒI‡¹-cZ;dÓå*'ëÈ9à¬Ùèp Z£À¹dv¦=èÔjWwоÕEýº$ÝbëJ㯴ôƒòç•:ƒÃኬîûìßp‘ 1v¢ÄåºùÆÆV÷ÎîŒÉ¶¦2ÛÞf”ÃþZó¿cžïƒÃºŽŸ®-„·œXèÄ· ÒŸéª'»¤3\©o:çÿØ£«”$|‡á ‹¾Ó%çr¦ÿ~Ó¢HS¥¼ DÍiRkÔ’­pã9ÆG¢!ièuc$úcØ3òíùçß¡êƒôÞ3Èz†û‚3ÅË(±Ì3ïÊ-|Û¶ëy§rÑ„GØn?ÚØÎÔC¨— b¹††BªP\Œ{_k‡¼æØ#’ç7bºýa—½ÈX6`°©*ä…~ÈX7‘H—c1èXæSùl-Šv²Ï W` ”k¥°çÅL§¼ôZjµpVXI½h©™~v‘é/ŸôceÆš†¶·¼­-ÿk¾œo_Eð'Ì/‰øƒ¥¨™V-Ó]éŸÉuq½nk¿„×`ÑJ<4«Ë†bÏŽÀËTÜzä ,]6¯ëôðo ZÛZöeò‘»£r¥0ëôù’SÓd„ŠœË=§hS$Ó6nàÝh¡?ä–F'uP¬'•¿éK­ª2‹BRz¡˜X×%q’üH?ÚCl,¤Ïæ$³Æ÷,Ë÷ˆÕ[ùá¸¤ÜÆb[FÊ~ £\—ìM1ì(]3œFI¸ÓÌ… ÄÍqÔ_ÂKÝ?ý³®|>äH-z,TSq³à„qCpî‹åù4Ï»8»a!ï¼`Óâ2Ø$ëƒ<õf`yJÂ×Ó“ç=8¥åMë2î'YC‰ù×o„‚b\¶¶›Çµ“=|Øé¹†KFâ³DK¬zõLô›‚óyRZ40ÛÞ`ØãC’îÙ@µžä¶ÿègÏâÛØh@ÓÏù’ ä `—½Ðº<c”¶Êš.ĺT7ø[GåYà ·6”sy¸T©§Íô$ðd ù&P°QV4€úëyˆL4‚bª*åÛ¼Œ#œÄÒ "4mùñ2ÍÛIè;>í¢]³5H(``W1DH±°ßã€0 ZHUê%´&ÎÖ i÷c‘&zä–ƒï. Þ#°S° 'e³ #‚e<ÊÃ…­Ê×ÞLâ³ñÄFðæ~òDäk›)ý ?äÂFQ(Od0ëÈ&lv”…WɹWVÉc/Vå½5d÷R¨Ÿ^nš 8…c餿ݘOÜðW—Öó·ô½= Ûv7οÁkiت,vx¸ZbnéÚÑ9 Sß³¯} …ÿWywS"ñx¸<ðƒ!Úmôv€ù²?ùMa‰¥-¦°ü\äZ ðq<Àx‘¨dâÏb®[ æ²¤ZèAÖ1I5ýŠrjË(F½G;î¸÷žž±nHÓlàT*È‘<ÒÔgD¢‰B˜¢ˆ žü§i&pßɲ)˜`à8\ñÀÉ+Q%ç¿qBžF5Gå.à_…òÒéu[EùÞI¹ho–:VK7aAú…É'@šÏ`rêO—ÿ&}k0Ÿì‹2,rÆQÈ#ªnúp C?LÂ$5‚ÞuÛ×| m W•-²åÐT[ky#šÌÇY¦»°Ú/_ƒ8Au'BRðÁ¥Ê—v\ õÍf¥2µ9þŸWñÏ™S·‡œF`ƒè#?ìÚ–_²ÃÚ_4±áS‚‹¼ãGT^»NEÇ$½Ä×rtœ—îòóÙä°ç@ÃĨ€†²LïMÎÙû^/•™éB·î2ÆnzÁ™ 6ËE{ÃN0@Lèæ†å±›d}¬M}0ð„ÿÍΧwÂÀ¥3MË6cѱ: .ìÏÌàË‘#ô#†­V`Oh 5¥kËüÎ…‚“¨Zï}C9Wœ¦²›.èå±ð)…EêËÎm-×tlŠÓÍÔ¢!lXái¸ù‚Kã6{Ux;\lp®à­ÞN\ðÈ*Œ|—mIçâ¥avX<„Þ"¥~D°€LËÞÏé|ÆñÕb%ÚóXMf! ¿F/¶©MAÑetI<7Ú~.÷ë—ß]㓖Пa€UIù›‡³ý]P™þh³}ÿé[ˆ çûÃI². û‡sÊ72HV÷¸ˆabyN2=¬rŽþ²3ÀÇýèzøxMÊÃd€ë}Å}pT[\¾Øµ÷”Šx †]âA‚ÅÞ {Ö‹è¡W–VyùX%VuŹ‚IÔ˜ß|£…•Èo•[׫û^Ð! 0RÎdÙ&E+¥]M›Åhoö‚×9Xñ”î––¶D˜ö‡ù×÷Å{'¼õMFÝ.´ŸêX¾Z'²Û­ðdçTݪúÖEFíV$àïÄt :ñᔂ¬å•N áÌkö«N£hâÚ$²fÙ¦ýqÂ&ÈL›üv,;ø‚6 ñþ·Ì‘—ƯH™Ç\:Q ˜êKíô¶ùAZ/憀i s’Íí?Ç'»^©7ûœ~ÿO"é¸ÚMÑè}oú/«2‚öû( ^n|D~ íÀÄEû2®3ËhÜkÒÏO„ŠòÕ1Ï(ØÔ-ÄËY V/½Œœžô ̾p×R4µPHÝëÐM(˜8~U¿+™`X“ŽÄzÎàFNˆ‡¾„“*…^žTŽ÷óµ»6î©Íí“ëp‡¾Ò7ç9`Ñâð›î¾%)¡Øë¢Ä§.·«¥_öŸí£Ï¢DSƒ £ª~0µ’¼'5‘Ø9Ÿ"¼[¨þ,zàžT5ŸE6%‚‡ÂÅ/ôj]wÐû†xh©àÅŠk%ÙqÖv/ªlFõoŽû$;g*M>w¡--bˆNbcâ‰Ê°(4†ÆƒYþ’¥\`¡žæãá¹G$À—¯›Œ°«=ù!•ewqcD¶€¡›ñÚáîŠV¸jò«ÕŠñQëϻ֗¿ û Pü"?Ì2É)u¹X›É^9ï0`Õÿ>—CcÉ9¾ åFå–ÀU€wH™³r¾÷„®o•=hK›¢pÝJºTóQDsí0“F­t|¤º÷ª"=cQæ;h+;>|5ªÂ£I(À¼³Ÿº¦!!£Ñ™u••ÇÆ·‰m®ã,´‘T&tŽøë‰ý4õø™2SŽ–åÑt*!ÆóH>•Ës¢ËÌÆIæ»4·+†¦›×ÜAÀŒKGöâwª!`çrP†§ŽÓù’+PÔ_Yçs Á}-ÂäXw_ñ³b’êÁ‚=}¼Ë\(g.ÿ sÀ„d®µÊ".j®Œ®Þåj,V]¶3œ%e¬ª™X õç,t©Ä4àæã ™”=@CLØÈìôÍ÷ê°[¯*±!Ë·5Ÿšöi‡ªVWxÀlIiè} 6FmÖЋ…H1lô¦à ï€Ã‰X%øÜæ°w©›ðXwÝÝ…'(D9ä½HÈ]ZÔgß*yªP.·@Jñjû0rãÁÃbšœÛw °ý5¿K®C+Иtø9ê¾ÜxC9¤Ú‡ôݳµÈD²$¿ßFE±JB´Ž"…Fô5D0Ó?&8ÏHUÞ#P¡wõ …¼ß/>Ýê2š½WS;¯…+=¸ ¼iHfóz3 5òçs-ÓûºP`zv4|³Ë®CøWìâAb…™L,±A“€¼¹±R§ÚYó$ì„u-A[Êæ@yHÜÔSY‡ÉØìÆì?IPFãÄ­ 4¿'¸ëÍèmhFò»ÿÿk±t¸ÙÌ-àÂìæZŒdeþ(¯¼‡³ñ­ª†õÛ!p>´žC{ü…¢ ©O•Ïo|`$7R–æÔ%ü?h¨ƒÌslÿ™çk0ÆfÌ"¥¤é[ÎOÉ×ܵLjEp„Á´Y¥KûlµÏ& ¤Å5‰¸¸ûVQí;r? ð#M×]­åy· “)†…ByÏ)sDo©ý!ðRéö¾‰Å [A‚©½mµC\Ûí#éZb-"V„K.öE_ÉÈ­·Þ?óè¾ñF†@ìðÿ”N å@kÞui’^&†SæÒä™*¼’¤ê\†éœglᄦ|Ò³{´{É;1=¢¯+oŸב2ÉÌ9]dNð@Ôî+ÏŒë&‘ ׳һ‹é*©oiÐq­ðP¶KýψÜPîž´6Bµa=×áé«…K²£|Ëœ§*asß²AÒ Â• pæŠvž*D}ýÞ(0;~ÛÒ»fäÓ˜_§êO~k„“ÑùÂÃV‹ü%³üáuÀWN,äpt¸Š“ʈ€ çž’Ëì$`î@Õø¿uCnŽ à£yÇÕ&<´â°ºúˆJÎI>r!™òáUAÇÛ"µà¢-ìV[Š6«aÂ!úˆ6€Ví‚sÚ±ì×Yn:‹Q¬¿,š¥ž[¨ð‘I£gà)Ôï‹P¶ûV® ZBñøS ÿ¾ø~Ô›ag"_’€Ümüyx©“Osni¿eáß,°GIìj(Ohº‚%Ëô.¸ÛÍ²Õ 5"ý¬À*¼9áÔaÈŽ¼Ý± ?Ò6©k8ñwöMÁ•ŠŠb²ÏXaŒÉ¡ž»pËQ(²ssfø‡ê§¼›cžP—~“¥­î†{ržã1¬í"×ÏH’jR)Äÿ€a.iÈ»é‘3Á¶M­ýo¹ˆöYÁLJz+õ+ܺ–|G̾Ga[@Q¾Þ5äßIþC+«Õ¢Ûþ®ÆÊ†ûáÇû«U¯€àåíƒÇp“–U,h3j¿N3œ§mBØ}±u\ð­1¨Gþ×;º6SèEôÈŒ¶-§ëûAhÃ}")Íì)CFg‚“ºoµÍ•`ì̱ˆRw|(ê´ï÷Š|Èqé ¿ÚƒÿŒ×8F›w´¤ln3­°¦AAëñŽ65yvZ¶Øû»•ć,׸äÄœŒÖ@ˆ|Û‚ ʰ‰²ÛJ®q²Ü™¢[Uû”¹c\~ìË}¥ƒ6]UøB<°r8yÑáÙLGJŽüù÷·Á )YUFÔ{(2>+`šôÓŽÉØ˜hþYš´^ 6Ð8ÄØ _€ü«1À›ùS‘칤yþNMÖºÌô¸°¥ââL6"S!Úf‚›ãG…*J“2˜8Øø‰* D-ùyta‡Ù|‹¹¹‘a騼æšO¦£Þ¥!ú=!l›Òn¼Ç2I©+™)Äw0˜èkÙ€8%!ùá•mÕk’@ Õ\0Á:Ûšš»’÷0=ÜVЂ*¯Ãt„á|fp9&õçCÙAãÖîn…#ù0‚ Ü6 _PJÄ€‡Óƒ+“ »Ñzg¢ö;6ÅBïà#ÀÆ:"¹™(}NãùºõU“$vË_éØXÊ™èRÕ›ÀNétÒÑo ^p‰.of¥JÍ8Ge6Ÿ-`Þ9 €HðžÑ¼÷fOÑ‘¼1Zƒ-åžêÍqÕ,rŽ7ÆC­Ñ®ø2ëÃNÿ/õv*›Òwš"Þž=ËËõ/å°KÎÎs©Ù8Uz— ŽFßÇÈC šÌÚ‚#@šŠýØåðþ7nƒP’gPô ›û üªÊé»ñhÔÇÌîkÄxؾ€Ç¸ÊNXq±Q»låvCìQ/þlñ³8|vÓZ`ôt]ß4]Ýéßç~ß¿“:—«]UZr-çi“¤º†®p’«·ŠyoïÕ¿ƒ‘£Ùm¿1³/ ìbˆYÌl䀘œND.éà"OlFj~è>¤šˆXµ¡÷ÒsÖ‚c43š^O¢÷ýz¤Ò~ókê5 O ϧ`SO~¬ùñJC|¶“=úfËu÷SbeûÌzE0/Â^'PÔžñu >7P„Pw\Hj´çÆCÆB£°Ž6ÌŠ*dì—æ¬8ºé<ˆŽO9©= ƒ7, yX7q´…?Œ›G5Ý,…“ñð#)}D4ÒŸ%A‘¿þéB¿x¸ó&Où¸ð¬³ÚuO$—@Š,³’DvžÆÀÑ×ÿ%«7’æ6:ñ–¼•\'«Ëª ®­^¡}9Öi‚cR ³~nˆ%Vò”ÆógÃM×Bh–É“q¨>%TΚ×;mu[Þ¾Néêß1,îJ&Å1`_òÍ‹{QmL®S€TC6º»§±£%¶sã&6ûÉ—e‡¼!á˶Xmé;|]÷öÿòÒÂÆ(úÔç‚Q¦ðœtí®JamÎM´¿?“BæX‰’‚­‰mí¦Ðù4yùêûÞu7ZæÊ2ÁºåAÞÇÞ‰ –8T«I&ÖÈ܌括`´ð2Hi÷¼F1¶nͱғ§°|Ì¢J·üÎñ™2…XP‡Èœ—’jÕaÿ¿6J—ýõƒòùÖZ·5qœ_ܯ´ËàôKF.õ8θÇÑýøôíub¸ÿà@Óküo /N ŒÂ¸°p¡ÍM\ÿîh P¥hj gì]ãÇÆ}“MxYÏÇ_Åá×î”ÈŠ2‚ù¥ž‘O͘HD Vy<éXsèƒlNýw8K.!çX-Òmª§÷i)«AÐÜ#P1ÂX1—i8ºázëR¸XMT_ö‰DŸLíÇSùÆ›'‚zÐ5ÐCP8 k1ÏU+«ó+Qq_ª¡„¦Eæ‡Xˆ‡/´š~e µ¤4¢²ó÷)UúÓ^Ùí‰:HñÙ…œ )‹;»{ï’ «Šàªç %ö Só“°å™ç[Tw!øHõ3yuai`Ñd\•@'#ƒ—¡µw½K¬:òêDGá²Û ·/ܘPÆÜ"¿·ñi„1†;#jÚÕ’hæ…*Êçv ‘¬yÏô'gé¯}/ÊÛóZýë¶Çt·Ë•¡®²YªÖÊQ蔽oÓ{´÷D¥V(ÏRˆµÈòTukÖWl6ƦŽ<@ÈäÉ{v‘@Naû8±wó‚ßC‡KŸÖQ{°íÇê>Ð3.$ÛÖ#òµevÖ§x‡á¡ŽîËÁ­´+A°kµ2­¨¬§¨îqNôÇ#2‰êœy€ñé±e¯²´k€¿&B‰U|UâÁ¯…ÑØ@b\~´Ð¬ WŽ ‹F<¦µP´+ËŒrŸù“a†¿ìíøÿ‰‰(iX=Ôñê'æ6ïØXÆŒlB´GoÇ ¡¤ºê7E «ˆ=u$Ç\;Òý›î÷ì]Ë;ÄÆV@ÿ~z«Ù˜Zžá®iF‡à8ƒð.3¬ ¬àÞ^Ø QÓÊöÔhâüy=—uÛΠO¬™¯ÌzñŽšßëYN"ÐÖFyž¥Þ6†§ÐlJ<ˆùæ$©ú÷9¾ÈŠ 8ÖÔI†dät˜¬c/) .ÿZÌH£z×\»Û\ëIÕÈ£ #½iÅ…ðö5-Ûãñ\×z/aîû‡yí¶°ËÜûÄOt04”,]±„'¹#.ŒÖ"êòÙûióÂ÷ \ ‹Ñ 2|Sà]6ÂgHv»Ø ÕüІMBŸÄÎØ:+6‘Ò7rƒ{ê˜ÊPi©èÇZo ¿•¥ç µÏÞ±ÿùõ#÷nÞ…ªMëi ˜äƃ5¬ÆxßßµÓµ#ŸšÊGÏ{é×¢s—û‰ÉݼcƒiŸ;`©?ÒÎh%OKÌÙìæ¼ÇšþÛ`zÜ­9 [‡rÅ*CóÛ£Àš$\[ËäGQ£J”UçéŒÿov±øº—4"ͽ.¯Œ©c’;ˆŠÒ™ˆ=øÿ°bç-ÌŠžãgL­3Äf¤€ðAdýº,æðå¼õŸÓRWnN ܨR´@ëÂïJÃù<ªN‰‚'Þ‡µ$2”Öçø¿t)ÙJû‘Q—P‹ü­Æ)…­y\ì~w´ÐzßGÄ š©2" ö3ŒëXy’ý1EåË[fR?$çgE #}º#äÜ÷P,AU6ZÅÅ‹SN ä¹í ³`ƒ$FE¡ó¦:§ÿŽÒTÅí:¶˜äð)¢éy ¿^BKÇýXd±á`a û}Êè§â\•||%¬H¢+tМµÇ“†ñ=×¶®áÚp1•–*‚ôAé¡d’}„šb ÄS:5GH­ÌÀ=mÞNð¼Ì\WÙÌ kE„/Ýn¸’ÍS¼ªXcQõ=o$oèÍRÒ|Í´¶z&$i­ü¾óÀí—Q{~RŒX¬?O˜] *‚?œ;mþÈ·O?ÍÍM…Š+÷±| Klå¥&ŒiŵãR²/¹©[pž@´Œ– r…sûc òV´ÇøþÄ8SHüÞ]UÅß§D w¾cÞÕ½”avœ‡í>1ÿfØãs~Ïç²ê ß]³`Ž#t!þlÁˆ*eG¶óA_{ì<¼“½Ý˜X!ËX5ifW²›‹<Ú`Î7ÀkWdTŽ¢¸¤cO¸ø‹ŠÛÔ‹ü~ŠÂbDqGëÚ‹¥mΧT×›3œÚî?®uIF§ËD̽Ë ¾ÚóFUÕM쬵 'ÞŠ•èÄœ']‰8ŽÖòVõ!ÍþÕ üDµG/r-#Å®a6ûRZgårJKG5¿Šÿò)a+Àu$V §¶ÈöñÀ4Óê“ϱ\H1áÞÝI$š ûI-Єî¾Cæ WeÉwަ({-~ fJl°Ôd/ù©ÕÆÜ&mêi<¯Ÿ­˜é'ÏNõ /¸…«MèømxúÄœ5Â![ÆS"×nLꯣFñs¾ñœNâEs<à þ1јžÑÃì‚ÉëèÉ6èX<Â(\8JÍjP ´’ðEDœW_ó?ß?B>0 pA•»d»@ îO—’à-÷³x- ›ôP3 ?f‘ú*o„Y|þ6,3Ñéî7ÝÀ°nB'sÎŽ¡ˆë £1Üé=fÈ6êyj›½BâÝáæí<-ù=ÕŽ,Á#}–3§býÍáTJäí#T—q*Áu¡Ÿn·'WÔ@‡XÖòDE¥ض°«°çü\t¹@Þ>“p‡B($eŽë¤ô/¡¦8T}°ÃkévkÂßèGëò!<ÞÏwÛÇV=ëš_:ÿé‚^Õ üØ‘Z¥}qº9«Ì™Ç‹/W¡K qbOó˜2‘o𯫠dwÁR€»{ÊŸ[–Ñ¥¹G:€hn¥QçÀ‘…^"´|RŠs÷v Á–hW¹²5 ¦eÃÜ0‚ã”Cd–ÎŒ”Éðœ|›â)ue¢LX€‘¹ÚÆãéa£¼nvÝ—´fmäXå1×µ n¬†Ô ‰ÿÁqA‘2K؈1g"äí}žï>`oŒP§—fû_äÖ¹ÛÌéFƒd÷­¡HÒ¾; ØããZÅ̺¤9#¦÷¡&F!iFöÙUäóòŒw»»¯BZ[Q Îbk»7¾)ÎyƳZM¬©Çkƒ'¨:¼}P³[Ú÷¯¥äG@l‘žÒõê*Äœ í°Õî1Œszs^·í鱊PJLŸ×`¶4Ú®Ìq+¿n‘qÓÞÚ–\=Å„M'®û·±2«TŠR–MᬊYVt¢£UYõZ2¢‡a!0Jœ§ü aÏŠTîf+²ïÀ»[2ßäÀþöë€[Ô×&Î8ìzØÑ Aaªùåft¿eoµmN7=ºúÑ?«Ýbã«/ ÊaÚ’ÖšGd䈳ÕgÓ `[C›¨À4´©cܾ©QKBŽeÕÛ·ÜmLŽIj-‡\â°kĹϩ«0Æ$ÊuQñf,px…Ð.scÈ„sÿ@W÷º¿vœ‹òò‰;èCÏÀ‘ÕÝpMÇ7ûÖL_¢ŒÂï!r ¦x¦ŠZgÿ×ãs9y$ ­$”Ì™ 6.?é ›<†Hi)äÏø¾ÓdõlÙ|!s/¹¨+@’’B¦§’š”$&Ž·eÆÙÉè¢>ªž›oîú°YµÚQA¼½Í}«çÍeIÞL^? ˆs¬Ù,Þœ’Ç"F¾§Ïsê1NZ÷™úŸvtˆð —#]‰NZ¬¥ÿJ¯ÊpÒÇûµ"”%à]Q½hR>¼ê,%#X%jj‡ojºÿÎ)ÉŒÇpIì`⣔ÈB`”¥´¢­Øµ»:'±ˆ³Oµ½]âЛDËfhrõ×ù³ÛrµT{ Þ1þ.»øpx¯zé‹»€l£êö1ã’…VèÄZÃe8é¼$ÙhÖG*?®Eò$ʨ 3µGeyr×JaDzãE(]zÅX˜ê}˜%}©NÛQ &¹TGö®t'¥"Ñùáç«Ó |¥¤GH$7Œ}ÏÅ6fð²*ú¥¥%/„Ë®ËWN>”“UwZ­ü…Jšˆò”а¾K'tÁ)AÝ:*ã|Æ/åX³Ê°?Ö“©×?ÿŠÙ—FSù°háÉŽX ›3‡ÍíçRw¿åÙ-íeÈ1uûú,©œÁÀ­€„}’dÝöÛ÷A€<ÍdÎ/Šê­OŒªzyäY>ø½$—{Ù[d[7Üq}4Dľ˜øxKšÿ“ãÁ[ºzï Û¯ñß°É*àC/Ú„’±ÊHȤÇÓæêe„6Šh´ÚØŽ.¾‹—Ç@™dÙ jj!7}ègaÉO4 ½wx¿«h†!K˜ˆÅÁ„ZD!êP‚ƒT¥Óè¸J²5½*VKœ£[Æ  ôƒï…ƒ0Ûr \T…ñÎ H>Ìå¾^ŽDë廭KëX¾^2ǹK[3¶»ã9Â6^3rãÎâ]1¿/èFR‡#Ûçý=€î߇`˜ß3¸'óuô”J±I„Q”Ù¿ìu¿ÒÛOÚÉ 2ħI©|ª—Yã³™ ÏøÓk÷Ý[%ÐÍuŠ–á8àÒ‹˜wÕÃÈŽÅ®xívMĈøUdüíhú_QÌ!¼Z Ê&ÙñF›Í–EyQºŸÚéPcnXù•[Á}àÜ’tP tcOoA¤sƒaßÓØNIrÙµ}OÆ®{/l=IØ4/€?BKþTæÃàÖKsC—½¤%¯®q±·ÒéÚnÈH=U@»£b=#&.·í‹o–‹lPœL,ïÞ?ïeðN~!Žì€ïT˜ª>*4w== «ŠûÂrÌ6‚Ï`ú×ÛX jm‹­Öº>"úÔ­|ðÄ{ )Oyö:_¤èÿ9uþ*€”]üGTÂl¶ƒþˆ•ðâc£ÍúF1[yì¡·hX³ïi½"×Þb£ožAÓ&¤^ËkA¤éé¨[B,h Õ\.·Fò[SÚ@à+ß, ΔÇñ”¢Û7Yq Tnùmêöq¤Ï*1sºyDƒÊ±êW„Ü/ìÕs·36jor…J_}ûô’‘ ­íŒšHÕûù²t;›Ë:ÚûYK{Û¦¤Ü ¤ðüxÿ¤øJm:€Î›.P² Aõˆj•‡·¶HOÓ!¨ŸRIoØúÂà§`ɨå¦üªÅ F› ÝСâÐïs,GByùH—{¥"ûFïâúöæí&‘ÀµäO6CÎÚ׌àkR¤¢Nƒ†(R€ÛE|„K`z^ó†æöd(ãFR¦—S@Õ¯½ŽßãÉŠ…ƒËã©¡Ïï*Í­û<_½«æú›¼ªçŒÖ¥-¤è÷¦Ïøàد³%³ºn@ç„ã«0b=%q?1]Þä÷ù»¢;Ê^¿n™¬ÅÆ[4Àu§ñÚ|{Þ¸GÅé}b*êëþ Ýt:âäe—ë¬ad¿ Y´s2ÊßÙ»bŒ­¸¿æt4`ñH'µ:£ Ü9$Ñœãò¡i WFógPÝŠÖ¿ÚBˆLÅ‹ŽÜHØXº@¦Eú€aTï*é”éëIGIˆ!T†¯ÒPe–ãGV(¬ÉèòµÛ)[ }Œt~!⟘¸—>^È'Gu&ß«z=vžÖ'¸KX Ôþ<‚z3GïËLG\2xcÊ=ªx´E‰TJ0ÔÍYZ*í`Tçþ—¾“iõ¶rˆø •“|ñJYŸ¢<#÷eãʬÛ']`ž¾§nˆÂÊÝÑ3û§Æ–*êæ§¨ñŒœ½"[GãÇ?ýHèÓ „•š1XžTc|޳ÕÞ_©ÝÓˆèë•>n®È0 C:ÒCÐôè°J"§øpW#Ž»Â‹*öt—áIR0 ŒCiÅ¡û‹*yÕ ×P®ÖLK.m5‡!™®ÖÝD”–N¡Üe$àáhôe}<-éÅAæPLØvÿw†Uáá}½¢ú•Åáåf ´æ¯N`“XTÛeÿ¹úLý‚¦Yõ¡²Æœú:ÓDk@BéûÌDü]xò›ÑÙ £¢¼o‡k–¶{,Š”&$ë?®éØó®(ò@Ç/ö4“š+˼ž6Åg`Ÿ¨ÿ"áÍ—ÌaQÅüÔÆq‰Åœ»#Í‘ñž££:)7ï³â[7T²ôî©É7,š^•ÛIðgÌ¿ßç.Ø”eã!Å8ÅÉøuŸŸ½å†]J«I™3üï]bc+ø-™ÍpH¼*Nמw‚ƒ–YP½ƒ+â³ËÓ½ Lvô>8Q, i·an\‚߸JÛDø‡bÆÈ;J¼´v*ÿ)&.ë1,¼ÚŸqñ§)§…ËÑà!‰×{÷,1îOô f{†$>cë½Ãñv–¶Qa…X…ÑKCN)ÔÿUjhHA‹ [â·ã5¾v}©›ú¾þ1§¿s` ÆàÏÙŽ$_~ÚZr¿í…Bä¼&3z8´6X)ãVî)Ä—Âp¾@ç3 opUa×òLÈ‹¸N¼ùluªËaNBgpú«Š{'Ê+ý˜6¬ýZ©CGòä})½âéûãfÓÇ!0ݶX¾×TƒVUB1Œ³³l-ê¯f/Á®>n|ë|VJr>÷P2²°þ[‚¡ÏâH£ñyJ@Ù õ}rÆ//‰±*÷AÔ~÷-f<b]æ¬Æi¾ä×$é²¢ó•Ï€…®7´'n¯Ø…Ò&!x°òE6+©0ÿÈŽYÛòøí«gS°}’ÈrI料ÜVcþ­åÊÏ%DÒflÂû[‡’@ôºRÕ„£,œlì² ‰ÐŸ¶ ] ÕãÓi=ª+Ï5ä*†¨zl]Œ“¥»ÞOà÷>€'_.¤AUšûº+ïY\¶ÞÓ¤ÆJÌuÊüM®eXó5eu§ÿ’uâ&'«Â&ÅLÿççote“°ó?ˆOEÎ[ÿ/ü»—wà‚¸H]‡F7[: k"¨å¿ÝÇë”Úa…ÿOÓáC ÉŸ›¡r„¸œ¤‘X4q¨¬{–ĸ\©T,¬ºs^È>ètǕ֭¶‡å™ H a „b ûœýý3)þ XÝ;b˜Ø ¨by«lªÍ4xjrÙý¥†º X•;¨|‡VÊh“›Èw™ÝÈïB­¤EߘJ°L é´ÉÂ}DiެµD†~1Œ —e“€ß厣€ðv+×kNzüËýÀŽÏ³o‘ŽÏîm'׿f® Næ7ÓŠXà­&@Z•Ý’Wa| ¯Ëå¶®¡ÒIˆƒêjEr çn‘LÙ˜3Ÿ»d¢¶‰’Ér ›¢" ]'ÙËü•´UrA&h ×ì´'6ÇNÉ«+ôÖ9÷ád*¥û™foOG’ráš~ »)rÔ«É/Ѓì’}cP¤èzÝÐ0ÀH– e¤ƒ—|myTCÜ©’\öŸ?Uø%ÜOÛyuXe.)ÜLvƒ!FžV ¼iïßòJ`4ð/ç×òšoÞI/b»Éœ·|Xfc•oUÉmÞ‚,©%1T‹$¶P1ZC[U4VPdÌÿû¹F9ºÂLj]BÛ(+qñ럪|@<ÚqÖ¤g°Š_g'Ãó¡aq3]{T$Ü)r)ºsÀ¥T5èàÞ5`®ûâÕ½·krçÄ€Óü°®Ùœy‘܆ô(CyQ|`HÞ.,ßÓqS¸)°6fšÛÇØbñKó¡ìä°6ø]Õï'?ö4(ìk ¼ÁAá)Rd§~>™L|N=ótÅ%BÇíDþ‹r˜!²$ŭÙÙÔ¬¯òu¬G£†êZœ6†O×i¥sÐC~†rÚø*^®sci†QÌih›oÞî5( j®Pn{Ì>­Æƒˆ>à~;“xâá•ZnU‡ÂªÄÒ°P»†A}&\“ÅxfLÚ‚³ÜRc¢*~Ÿî¾Úòö¿ãëê-Q#7lhXiânD˜wž¥ó'¿Ê¾Ã÷A„™Ì¡âCOŸ…Ï=±KlȰóA†–¼7ÐVìÅVãÌ3‘&Sí=ФS<$EØ2ÓN0ºBÿо…E‰Izøšˆ•óU÷IRD+{H9pžáÎ6¶1î#Ô=âȆaæ„­³= i7{§¹;Ê­è“?:âýLÄ]â˜rjáDv‰^`·³\:é’ÚŽóÖK­5‹àlqvÅ“ä à îÏ̺¹b‘aÞ3Ìß/¶­"+%ÀURx¤\NÓD-YÏð§ñÙÜgžjYa­²•:ØÇ“Š Ì½< 2È=|öàÔ«G–ŽšAÐ Ôô+> ß.`æb˜3’è(²õ ã=×↔t®›í~ÆÌ–+˜Ï.樎·Q6åW„e òÌü†¾ ÈÈ_Ï··œ6×ÿÖ•ÉÚF×&¬à}GÒ] _QL Ÿíøö˜SeõD>±Ÿl…Æ Ñ! ã³ê¸6,ÇKšo9W§ •Á²JØI1>Ò®íÏ$@ !§^ø[,Ÿ™”g÷áœ16Îx- žk9H_B2>›&/ÀMÝUb|©{Ó._ÕÐJÔä’'&—ûnÇRq0ÌóD‡ÃÕƒu´ÙÖ(]àŽ ¯ão¢ðR^ÈFnƒjTÆJÌãÌÁ.úO+€fêu Ä®lb}áf¥,o×™²â…ŒA0èÀ(ó•hA­îù˜KmÅT•»âÖÎäÖË’!Óam\k½™ïo8zKµ YÏ!–º1³ïŠøF¿Wö¥½uÆÙÍMèô.{¿qß,•®Ï[LµÙD³tdž{šó²Ì™§[iÚèJFi0²¼^ðwåé=áñþ$Zxñ<;oÕ^+ž,jÿ†ÔUòÃSä@>ÖB.U°¸êQï@–{b‘É„TfÑX9îE#ý*Ò œ;0ç± 7Š?½t¹ŸÂût?‡(ûw¥r/βÁ ÷Ò¾b­?ÃkÑÞBYIçf Û1–¤¾é÷ÁˆTð¿uS#Ôuv„‘s¼EkÿÑkÚ}>ÃÃj)”;€°+„ÿ쵅 ­ÍÛ5Ž }£`k^ïχäüqbóPË!Ò¾e¯Z†»'§à¼Àœ©CV»Ñ-T×f ¼£ã9£ëÃÔújÒOÆÐOøWŠ‚Oâ\Lb÷´Î ¶Z»KHÕϱu>pÛÖ 3×®ñ fYzá-eàvìÏyçð S3åÉ$¨3ȆR©^=Žè’¯™–FHÒU C~¥®ž€pñ§”?¼:ðOæõýbe-÷â{äK™ÿm& Ú¨Ñ#N'Tÿ b+R})x0vá…[®sÆlâ@‰ëáõžÊŠמè¶{ vë›O ‹pÖaB; §àœÂMñï½´‰Ï†#ߪކ40‹~xC1’{ÔbÞnÌ"~^N9ÔÛç&vÿE•Ù¢œ§C–ÜŸf-!ÐÆÑ>¸G®Q¡º`wpa”¹øo¬r5ùQWË2­Ê5ž°*gA²L‚zÊ^FÜ3<¹o©¹àIçÑDœÖ·¬ŠQ_Oö¸Ãièy›©6¬á£ƒ/ˆ#0ᧈ»Ìwwó ^Qgû á4ôa}yE2i¼µKEÍ%;É‚1ÐES‘äL¹˜]ã+I¬¥ÈØ%Ãß‹»(Q ë Sž¡Î¯ËМ€§Z!<}l½šÆªÃàÌp&Éohéýv²TZ§ÜA–„ǰ÷—;P÷y­¹¾‚WŽY¤sŒö.i²ÿòÝ –š=ëL¼Î÷j½;†Yï©à芲.Ò(+â`>ˆyVôüé0‡ÌÁøæÚõ€“éÇI³¦üáTþ~9|Õ#*2G¡TóOäu\ê1:®f‘«:}­øþ•Ÿ5éÞ…Á÷‰ò‰èÈW)l5öòÉ16w‹:ÝÒR^bpbà5ù/³Ð¼¿ ŽõÞæôe.ØV”: ¤V¥aCÃ.•™àHð¾MQˆðbé QÑo3²˜Ðê†bÑW€ýò>ª¯D¾\ Ä{H’8Oqg)ü´teúa¾4˜u9ü%zõPМ ¸É÷ßñ½í +¥ hW2À¾çW³â%‹ÜÒ@<áX¯õûx]„f€øæ\P˜F Øn"~z,‹O<ÿMû<ÇŸŸëÊñë^ ÈRÏeõqw SÊä€UÎÁQ NŒB¢RÇuM]Ÿ‚°Z2N¾{ðÅ^@/ð¾ ÑùrrÂ$Œ?3zNxA®(àå…¤ÖK>Á©sÇ@«&k|óÔJ^ØgÉ_)¨ Üå6Ú‚oŠxù‹\ÔO,q2zÊæ$v™x[á°û[þ†– aÖ·=‹tŸ—ifƒ$|ßCÖÁÆõ‰pDï² 7PÞ÷ÌsnÁŸ<(pJØÇv¶â1ŽóítRB‚è˜aM<—$ K‹Û‹Ÿnºfçþffý8Ûsp“Wãj=Î׃(fQ’á“Ñ4­¢¨¯ð˜ë‰”ð]ò/«X&F+ùÂW—i{¹õ¬ÃîÊ7‡cŠ$C˜Ç°úUõr¶I˜RæÏ1jÆÀÍ7Ÿtå&3mä ܰ2ZQgÅ•¤#ÉÆ¥ÞîGBp,›ýì®âæÛ}+Ÿq±ˆ(bÌ3ªÖI!í¬·3Ðá©V_ÏeÓ$‹«Á!ŽçU1-2HŒTÞQ ”L¦¯™V4«I¶àWÆ3ô4 ¥ êß0,8þX~§X)ì·åTˆ4æñp2…¿ô„ ËbÁ°—Ô¹+dÝïÇnú'‡ ή3mÊXŽ›˜hkA›‰éyIùS)|ekuêÆpüiñ˜¹²é%pwΪýe=ìîÌ7­G!HYLví ¶áTc~­B›\!,ù{_Lj­D:¥©ëç OU­ø«M«šàRáÇf•1u—\ÌчÀo-^^bâðà)p.£ùZ£Ü!Ou>ÇÂå!ÀVá¢}•Ì ‚ÖUƒÝ©6P.ûö¡÷¥zfBDZðíøhQIÀŨA±Ô÷ÕÎ )9j̱ç~XÇâúñõP¶“\wn_7Ó —ÿ’Nj˜è´< 1qKNþj·=ô¨á³¤JUàýlþ„ËɺDó™Cta¹ß­iÌ‚­'[Ž•áö3C¤„I"´—és ØŸÚæog1F*º€¹´]«¡7õ M÷}ÃìɽîÛñ ò‘ÑèVуN‚ÙHËúÓ3Ê3=À®Â Ö€÷ìa®éí.7Œ'ÌO ñ©F6HFóuƒ¿ Ê×£‘l>˜ÇîÉè@E=ºˆIˆ„¾ˆþSû¿Ìí±9^ %’VJúì4%}~—üÌNqÄ]Å× !÷Т„4â3e-™ŸyÄç‹Bp0°xÉŒáe-ZÇ _ÊFºç6µ¶µŽ$"X7,Jþ!qñ,„€ Œ ORÀ® æk:’âдb)“jÕ7abP=²ˆJ¨Ç˜:Ø.F–ÚñJôÕj)Ž. öP‘Ê€àÈ´ÿóßlµÐïàÓ1!í^*g 1¯92±s¶{Ö^¼Ýhvµz/MÉs,ý?(ÞÏô‘p©Å}aµÁܱ^È Œ9®wc©NÓZžÉJC7¶¯æÉw²›Ùqn —ømê£mûRÕáÛYÊɦ(’§Ü+ŽM(©M#Eº ã=¢æ"¢N麼bQAå0Åœ.éÄ’)ݿ̸V̨ 3€ãÄt4Ð-dqm ûb=Sçø•zX°}† å(¥_äýŸ²4`y ®û“lMr&°7Ýt$“‘j ŒgõøthaH¦hö"§VÒ¦&ã·žæ­VRa^:N<¢#&BFfá‰jPÔ«|íd-WÊèI|ïœ^ø„d- x U½+aîd_µD¸èžÕZÜ×Ú†"4>Ê]nªŒÊMH”¿ëS@@Ï ŽÀt³ªyNò£õ]>cûüÆ\M¥Bóý‹¡£¾ýGW”c$ñ… ¥èPèªFÍûí²¥{³p½$j-O‡›£C1Îç6…bS¼yy˜œ rƒÕ][æÃ£ÏzáÇÅ{q°E×ñ‚Ý?1K 3&(ëQ­©ƒ«Ae|7ɸß)Ê+‰ ‹6J}å™,nóZµÚ('fxå"‹Ôò²³+±^¨!sÔär¢Ì(ŠôÃ5sed)M6#b¦ÃÊÀ1P¾äŒ‰oý¾ŸÆaÎëÿ–Ë‚ì@ê‚c0 ª³$ï%„tˆz’„ ¶D‚z}`i ®+˜k§…“Q¡.†¤À˜í½*}‡mhŒÑ„è ´á6ó“8ñÂÀ¥±kb¿Xld*óáÀ7¼z;ºEi­~¡&@Ù0RC!÷îKÙ/X3H }<þ¹jOJ¯w,€J6<3—"Àv]í·«³»*€ŸE–ÏÝYgZœŸŒTåøeöì"až{[µUYz¢3CI;§yæg ¾‡ßT£n'g*J£)Þ¥jd—@«B<¦×fÜ)ÝÁ0±"Ĉ¥XúHª?¬¹ö@.£ÿµ›Fz`Ù}Xéï{°áIÜh¨.]Í=Ê65‹Ú‘ÐE¬Á‰OI’ a¨=e´ ­yÛ48}ÃÀÿÁ‡ Ø»‹8äkŒa#ÐSfEÛîæ«èŸ1ç…‡áùý‘ßV•ª§"ozf® \±v'7ç¿=X§Ák§Å»ÑÎ^o!¥e¸|Ç× §VßÈj›8¯©$OÅjk“S§Oacâî§#“ñã±ï*¤r^ŸvÝMïgÄóÌ“åäôOeÒ"Va®ÚßHÿDþzzË}pÔ§'ä¾@)æ‚¡á"-Ðô ì‹$eS±#ßÔKy<¤Vt!éK­†ž1IË-?çQo9Ï ù'~ƒ:"UÝ™>Õ«ý>Q`…P÷h—¨`ò—’0’åÁüÛ ´#Ô³8<¹—,-üÛXváíŸ÷Ô<Þ‘}k¬¤QO¢±Âümµ®MÕ>Ì¥Ö‰ U›ä1õ,("£ÔÌÅèEwùGZS\QÞ!“HSEù‹"›^- ‘¨¼—Êí5pƒWÞQÕ#š(¸óüdf¼1ˆc ã;Õ0Ì<u,Þ¦ûñ°Ÿ¢Zp&ÞúçG\@”1öâÊ{‚Áá ~E*[ Ø—3Ìà Ìe´WE:¢;<ïzEuý¾aX¿Ý:wR;šœ®­­w–àkûòO¶åѪKÈ‹Ÿ[%›”Jp"; pÕ(þrŠK¯÷õ€¶N8¬( ½FÒFÝnïå:¸eÅzD&fUÂdÃ9:3Žê«íOW•¿LC¢Æqf«W¤{°£´ŠhÜQæ³…ô 4ËöÑ•|¨É5*Z\K¬Üã”oºåh£) ý1Ôœ…k‚JáYb'ì`rò 9Û,YþS;`||f9ÇDz×Ìò"Ö¡ÇÒ,‰EM_ª‘ ,yñý~º‰ì¸ndÖ·.e¿¡ð³­†Ô×ù"*¥°‘MìËóižŠèä(–?f±x'é ?YUñ )g0ÁØ¿/úºèYâTõJò," H6q°ÌÏÈbÂŽ¼{Ž"Eî0ÁUã Œþ•~ÄÔâÁÉ2Ú–ÞkØì„P쎬^äépŠ[í,Ù‹à×&Gwè"d2²\VTÊí*Ð4èÀ±£êÍñK÷^&Ëñç¼\ ²¼¦·ð ÁX¸êåê0G”>[ÙZÿX¥²ëª¥.7Òu‚ÉÙCFW©Ÿ¾“Y™BZyg Ù$½4çïÐį̂ú-Žãp?Ê>ßaZÚb³«,dê‹Ï¦  rïe‹[‡Jøh¸¾˜&X!wpk»ì&Ï îøªìÍ©ü\i*w«Ä qˆ™Ë>Å_ïÄ:Ô·~ “Š ž2Ýlj÷èˆz”fˆkñˆ• o:ÞìH’3aQýê7’ì;Ài ­½AI.r¡1ZªfÃg"9¥oèÅD…l¦ +ã¶RÛB†â/8Q¥«ºEšgÐ|“df¦û¨¸sIsøsó €Fê;Ýj†X¸ä˜q„½,(L^Š³Ô®õEG–Õ(“Ç/àÜGï3*Ëòì»±«ã›Þ£ÎðÑ?yï‚Q~¼eSxŒz‰¬læÓZŸŽ6êåÌ~<ådZ wA>ϱ8ȼDïz‘,g/~’GÔͧ­ëjü7mN°^÷ŸErlݵØõ)ÔaÊÆƒŸç‡{ê ´‡¿]#ΔèjášÌ‡£¬æ¡U‘îèÎJ‹·¯U+»ÆQ˜ý0˜M˦í$ó lHÙ•ü§û¯Ü@ùH'Ì„~Tì2ž„ŸWƦ¾ hRù¾{wejƒ»µp3PUÍíç*쨖SaœýpPî.¨þ #- }>”Õÿï)^R2J×YÓï>gÙB2.›ÀO(ªÕ”+åÝ]‘àL/¶‚‘Y¦Æ8¦xˆ4äW%qYxë%^á«HLaî1OoÕzš—Nìz ³Ã˜¸ã¼fá?û" EhYEz1‰„ë°­[„$ýGq ï´ÓÑÄÑJA¾T3tr}&0TÐ+'«9òB ¾Àч"œ÷XÔi?á|P€ºýúã RËCÈÂóÆÏÁ¥ôèEÀA9Œ„㺺|â„gvcM‰¶_”ÖÑ£ ‘††À¸$É€|:ÈYaoðšÊ!í¶¦ÀüJåÝЭ«è™™·!%|s; Oï•{œd¥¯¾6r©×ÁXÎÚ†qººf@víµâ¸1Éû?Ó›ðùT6³\Á¿¬õ¤§¤Óä¶À<µ´R©‘ÚÇ€<æ@€ÅwkQSHH=í7H“¿Ý¼qH²qVX‚Ý'Õ|¶1 h¬£õ«‡ªW%.^KžÚÀû+çmÑÅY­XtB»`vJw¼qÐ…~P¹¥­*ùéÉûk›©ãý¡ìÒa¢f$C°·²}¨>RôýKì–Jr>wÁƒ*Ö=úm°Žúe ¦°"tŒå ÄíGŠw\Ñ·rç„$†Ò\N U›ztÅdaÍë­+K$øš&˜gÙÜíxhçKYA‘{Ò½ÜÔßÖ0²ü“^VxáÍ2 .¼Ù,ðŽùèYLeZÞZ¤êµ£øëï6ÃŒÖJ…‹$\¡ˆßû¹*@{ÅnͤR ¡Ë݈ŸaM@…4'Wß0m̺4J–w¦~W«˜tñ¾½ê¦W(%iãÔf¨±?…bé37ez«õv;HëÏÞ{¤C­€ 0« xês0¢eeÖU ê%"6OͶžWy;ô|7æßKH¸hú‹Ûÿú¹|ÔnfÛðÂ&Þ?›~Ž•{§ŒŠÈ´‰ú°HrX]&Ïz%OgÆÀ2»~5ôƒ0Ü3hî­Ìù¯¨>¿u^øÏÃ\FðÎPZ¤ÓU>ö”Y°*Ó«¿ƒ¶§bŒQÞŸñåq‡²}Ï&J¸`iÆŠŒ™îHï+šLýG|ýSoöíS³#lÔ=R„ºóT© ‚·Ðþ¨êî]¡ºü²Î³‘1Õó}á Š‚Æ…–Õ'-§û4ñbîNB’NçÆÚ™Hkºž;ÎÙ iÛ¿Îö•bàN‚JT9F·Ú a¶åU+A!#ojfC^ #úgA0(5ÁÔû¤4â·‹Û{YŒ½ð+ø¥Å×6`6À>DM\_uµ²¤Îέ«U"ÂHêú…(Y‰Hó£­O8*êU2§l,‡óæxZ=gæ fÕ·œ¾ÜÎ˧GùHåCǯß*4p;Z§5GTòPwËÁ´åö§qÿkâysIÏsHai`–æ·8"Žº[ûkS¤«ƒZ9Pê©æ­”0˜—÷v´¾þ©L MÔë´Ù ¦ë"Õñ÷©8ØPwµÌâj¸À=©lÝÖÐÐÓÛ¶WY…ÈsTó!‰éC¹+#Îh§~¤± Ä´8ÈlË6*×þ™ã÷¿/´Õ ¨UsLŠBËî*!€WEçÍÑÈØ¹l¤qÐËH4ÊÉJá–Aj:Ç]Kde÷ßÇ(µûïž[¯Ä÷|++”æ+í¬(Ë €4û‚¹’¼•=ÃÌK¶Yc”*«Ë!§x¥ocµœQ†´Ù¨/èÉÃÖIÄŽÛ¬Ìv³oG˜Ævf=0ók.bw¶[^¬K¼ ˆÌï¶I).ëX %(4ÖoÓœ|-é‚d[”EoŒAé]®A“ÑÔ{;|·û™‚JˆŠô†ÉkØ7:³(»&âJëº`D#››±ê~ÌåÂû-ôIÅ_±ÉÀÝ]ä‹ÝáŒ4(fcâq?\æäó­1¦ÑhP1E¤8ôc S¥ÕôßÏ«Xטò„a—"cBÖKhÊéݨ’ñål<𤶗à>áOôC* •ïÄ.ñi±ÞÂÈ:îLW$ dƒh]º½ºþ˜Jz›E¢ñûíD±rãyv"´ˆˆßû{³=Ëþv,ha`¶/XЦÜyôWc_–ü¹ðMµÙ¡þå³#Ñð§ÛÇ•iœW+ ôÓ”¸'æ9ȉ# £ž%ëï>&¢ù˜^⣱—*ã$Y8ŠÝS“WÛ7hˆÊÔ’nv23_ÍÅ~_BÞõfÖw sþüÌ=Ýa¿i( k@°ÆáŒ-9½¢*Ã_§Wbr‹['}5=4IFÆúëR0Fd«M™°8:+&B”ÙÄŠt¿ØS¹ê[ M0;tß³Pßž†ÐP¢ch—`›€¹6¨É+ðÙ£Ù, …6-5ˆ9[cIêÜ£¾–Éæ¡̪' ¢.MmÐó«Ç…oõ0tµ0`‡¼¢FYŒAØŠÅæÒ›1„“¸”N>PÐÜCv‘ùK2¼ZtTĹCê6ÁÓ5ö ŠU#Ë—,û9i© ·Ñ7®Ô XLÇcñØrùÄÙ°xOlúø{*Áõ±¹ðN#ÂÞYû`t½]–7a!çÛÏ2]ˆàÖÄmÆÒáò›~?ïnb*ûØpÜ 8]_žk­·2ð{\ß¶-—o5‘„qð?oèêÌÍ~¬˜3ö÷m…NÝÖû„ñ…š144dÙUêEû¿¢;@jÓŠÐQ3juB‹’O¿e™‚‰ àjÄNT(>z‡ÌJJ!§ÌôoáÁ8(òDæ§ä]UÝ€=>Ý„°±G9Æ0 $:óFˆà8ù Âó•ò±iWkE9•9¦ù{$½…hŸŒÇOPOÜ+˃áÀß»Ûe.ñ[%½Bî°Vv^3»ÚíÏÿ³­€æ”°h„@Ö4ÜüW`6Ù[›jíJ6* ™ÿôÅQ’3ÕÚÝü^¼54Òtt°µçbCáO·¨žSZàÄO)2×—“jiWÈçºveÆyæäxO@Ö&B Ѹ'ö¿¥Ëë>©T›kWg5 ЮÐÚ]B†E~ÿõ2§Ãì(ã›±a.ô•ìN5ÝXSûwo}ŸG¨é ò憬ˆV3ÿifꥢE¤útRYK*Û´œ¡‡ÆŒÏ·¥áìú²µ¿;àl.5s¡›„`9ÜþJûÐÏW1¤™hS⪽<™÷y¨#XpŸZ·¹ôH¤²6Œ‚ÜN¯ õÂkÉùmRºìCo>ïK WÜÆž‰Ú½DÊlùüá‡Ú›c^³|"µ}Ø›½HAôbšX1s·‚ I5¦{™¤ }sˆŠhI£ðJîÒ]r¥f6·Ié…u-¥Ã¢ÏlË·ª±…6Æ Qæ´G™Ú_Pè+Û~o!€ÿãƒ`^-Û°æ½`˜©@±ÑìpjF‰¹Aîf=à`E?‘{ÙvÛѯ6™]ñRÁwoó#¼^ÅJÉuo}Y’.áÈ}I­ØÄy$*”´UÑÃR““#Ûšî®Ìe g~í*¦ÿ–¬XG ÖAVB+/´î–_~5£@lZÃÙXòž>#G ½ À Ý'n+6S柋Öòóù«ÍR¢ñ~^«Æ­ŸòÓ(Ã>‰Ìä¯/iŠäÓX…~¼wY5ûþÑX›ÄСK}ºp÷ª a·•±`¥Ö~aÏøTUˆ?­è .^V­ÁÖ…N< $Ò÷˜Í¥îXwèÚ´’P²»ùÏ‚ãJ낤h3x/Ç«,˜½ÞöáôV]€ž.çxYÐUaøpßÓ¥@òçˆPû€nÐðP•©‹0n®œ<ÂÎ^·D—ó˜†I‰ê‹$©|Ò=íðoàVôÈ Ì8tÖ(ÚA†Ÿ:Ýf”$?Ázé ÉßsAüq´B+Ðkð̶`B¿…„3žÝôq£Ü? ¿N¶'´!Æî‹…¼Õ$*(õ¸#ròµ‰æ¡u¨\ºSǬMu{k~!ÈÆ†me2¡ *#½NÛo2åÀôd¹ ª'v €xµ mwµ jĆœµ`Î)pþUÛ~Ø7ÆnV arS@U8LuÐŒ~æ£!‘6”É2Ëžú$”áö”pu·xÕ宿ÇÛäogü@EÚ%óUg"ëB*‰ð??m–<©inu¥¬ƒ7ØÐ€Vg Ÿpe«&œ}$ÑÄ´¦&ª² ÕdÂx*½É‰›ãñÀiv6ò"2ÓMæC}¬µ®¯ Q9GƒÅQ\áü&T?8>xPÅ|SÒÝ¢˜š/Þ®ÿ“b)cA¯¼j}"&^Xb¥;›¦/î—S<ÑŒ£7d2`}W¿C"»FwZñ2úC;5 oºy”[õü؈ÌUéi­TØ"Ôrç‹û¦þ%¼.š«—£4Õ]vÎzéR®é¤ S¹ œŽð¬ÅÚÆ–"úŒû¾¤nF—Vÿ~sÚèí¼º $…DǬ·'Ã0qTäÖåXƒ"ìOPTÀŸVéô.µ»ŽÆà˜d¶“”pçPµ:¨SŒgãéûãú * ¹Òã¹J°h$zÂúloìKâ„ãmÈ&4zÝ®1—Ï5t7ésSFäÉÆÁm¾à@jÅïó'ÚÜñ_Gò¹gÒLm×Mñ12Nå3ðùbW–sNÒpŠˆ|ˆ”±féÞzvûåZÊžxž>Æ–h+WÒÖt‚5ãbá ì×’ Ñû†øêŒ¦ÌäwcõwŽÀ7h8" »™V›]_Àû*ãŒî5–Wûøzp4K Ø„f¸|òY¡”Ý»Ã;3òGâvwÎÄ0PÍ oSÆiãó€ü´Åé˜gHçÊs9 ÍáÔɼ Ev0ñG³MÀ6 0˜Ý9 Ë«¤"¤t‹Ó Ì>ó¹½#—"A¬î£÷ׯç£=¹ó p0¥eÝ»gÙ2©ÿm¥˜yBÊÒÞ#Äáø¿³à Ã6ªlÇYˆt{Óï0/Á<+‘åŸi2xPÖèûÏ[[P¥{2LG…Âx¨ß««HÄ9áP꟣±í4|3ç+§’ÅJ ]lÚŸ‡Mþ`1,˼…f·§àÔ™ž I8ÆIjåqŠu‡Ê~`¡ótt†üYµ”ÄDÚç-[g˜Á$‡R5º%Z­L»rZ¼¼ ¿]“k†6‹±¿d‡ûS~È+$>ÐGQš05Î÷m”-ï±^¹tM>ÅÈ› ¾²/ïô$cÛôìßpìXÀ³-ma’9n,±À×/3ÑBˆ:ñõÅcg7îs€º Ì%óJzóAú¼­4â?¶k $\¢’¼0Äóê¶‹(ïùɇP÷+§?,’åý/]ª.îξ+Vfà¸ë™¦¥e¤Å@{t“ñù¡bpÅ=¾8}TWWÌ+ßÁ£]Ð<µéÝ|U-! í>‘áZ &Ë7A‰— ÿ¥ÌD“+¼êe–GíÀÄY n¬ÂǬR€]tYpj’Mÿš’ÈB–üBl\BHñTöïs,Šñ«5Ø"d©²Dò²F¢¹06z0–h™b‚ÑË„±³uÏÉàÐ$ Òë~õЉ}¿&ÚÏì$§qâXFú”à~’~¥ÁQVA/à f)bÈZɯºÁ;Ö!ÞWé5šìvå üÆ¿N›U¼¨›óBÁNÄ×¥‰_^Q—!ë;¥pÔQä–±`0ŽT‘N VÅê ´›’›°C£}Ph·zÛ÷į\áõ§ÈÍɃæŒD;'¸-?™ËjXîÇÒ]â™]·oMv€­ê{н;Ò›üˆ8ÜGµO¦ìh4EuçŸQãS¯BÑ´{£TG8‹×3 |Ž&Œ놀ÞÕˆÈþYfT‚ö4U¡‘äOOÝO|ê+Þ‡r&d©]9©<°üƒ–ôF|`*ËSŸ,K1tà·âTƒŒX•ã(^ÝI$HÅ‹À›*HËÂ,Ó¡,¼’‘üË-Iª2ÊåZ 56dQFÿÝçJð„ÑVš@Ižy¥9º£¤Tã~½NyJ4õ°”NùAæXˆô(`ÛîÞ@€:£ãIAºè ®U½'–@Šxz)<ÃÌÞ¶‰ó\6ɦÏNÆÃ¹ò®úþHc” ½qmB‹[shŠ€Q·‡>õ%×’<|QˆÚD˖ߎuòr†ï¹:Ÿ.s¯·ûC 6µSù³zá€Ä(õЊ„à†xaûœÏóUé>7LG®ã5c¡®Í™Â·'i]Ê/‡lõ©ŽþLÐÔ²8Iºžìø½ð—iôUÙçÑi?E¨ ÜîƒGF#z Ëú˜œ;y« ·E :¥¶¥±Q™µÔ.—EQg€iιsnó#‡´N¯ÇftX2ì4Îé½ø%?Iîk3Çé-ØÛ\É ¼¸Šx+DK½ÃœÚEÃÐ-³ÑHð„uº/ÔTU«VF8ƒ² ôʾgGs ŒÖ|z«KÊ\ŸˆÛ<¨­yTôI9fæÜâ1mä5ÀA’߀)àTØLÏD ìp*ð­”«ÀãOèf›f?§¨S„¯rJeÃ$yá¡Þ·7¢`AÖW;SCÏôáòŽCH.›Ê…2¾;‰_†Ó7ùëÜWûb²àô/ɬQž~"í}ÌÔºg]  Æú ßrºÍæÞÒ‰”r8EÝDnËßÇÌÂòÛ^˜¨Ü/õÀzÌdþA%#(à–…hÔñ Y¦–s‹™m¿ÇdI‚O‰[,¾6—´ö:Ík/¶Ñ£â)þrλõ>Œo² 0áHóc^l¨{lÝâ„´/ýˆ &L-¶)+õ¹ATswƒR•ng6Ü4!‚Q·]’ ° ä.Þpº¯ DH O÷þ²8ÂuÀ±djðßP›J=1k±ódnhr'E£Õ2:Q¼~5ݲޡÒó›,Qq®GUð}‚Œa6tpc@íõ:{@W™4PyMX쇎Ÿ<´\ŽÅpÒk ÒSs]Ú^Çð¬wb÷ÄV~龉;šú™²ÓüßzZnPÑ&Žˆ'YQ|Zª ðw\á#jéI¥ož÷v‡›…üÅ#õ…OÓb‰;?@7júò3‹J8š×7Ù.Ä3{¢xÑ•Œ>‚oJú\Ýl•+~‹~ȪÔ5¨ŸÒ[ã-FÇh½nŠz–Ü9ÄÚø/iFb쵄t•6öìrOƒlL†¢wµ¤'ÜN¤í ÞbiM¾DOà»Ü/ BòBezò:&,`ÊEɾy½ê>,KÚF…Z[{ö"ß²S)úò= ž§"Ñv¯WTLÕÑTdÙ]­Q[á3†}pŽÅ§>’ºê¦°ôX &-:ˆúcš A)Ÿ6z‡‘²}­ª~Α!qÑ€*i ðÙ¸‰7’ß×X:×S€ Mü‰ýHµ&ÖÇ]Mî¤÷_‘GjÝA¹¬½Ù[BJÜÒšñ8ÇÏù ? ˆ$#à²øM#áZ؉6!±©é8šdÎKÑ8¶3'¨üäY…žÛ‡7صˆMŒ’ö!ß7dá` 2£ðì6HT¼Î^¨¬¾³HGXhÛè°ÎcbÕ¡]3ñͦcÒ»Ôhæâ³Y”÷­zÌ‘§[ÆÙØ¡Y˜çñèô¶ßYƱl0*çï5baöÁ–Э ~AT›ñc\¼1‰ÁùaÇݾ´ &H@C±6^€kc¥öuÀ ë(ôÀtoj±<šæµ§ªÖK§ñˆÛ÷Ðú- ?ÿ D~åeàþòæOøa蟚(A7õ/É–ÎOtª›ñÍP}IØçØ‹=#­OèÉÏ{e>ç (êQ û¡]M”j?S©J%4ڨ̽Jã-aÐI¯^¾FÚ$%¦¥®ÐÉ˲v¿iµk7›: lQ2™ þüZ Ê);ÜÙðRQŠœ;wo[ÂëšP+é„*ö•Ñ2ˆ€PÍ`àÍ ¸p Œ§:lšFvü6âX°Ëo™Â?ªßx#Ì€^ñ·XïÕ^D”lõ|îÎ,zy)!¨üÄ\øäÀŒÚ8=Ô ½EY9#ÏÛÏ„Áã…¶†ÍJ!Î:f\ì™Å’ïö4VVaîÕ]wò=2ˆd~ˆ0Ü’Mî*ÓÔÒûðê Q¿Ünæ4&NVeHZ0wÑIHЊ˜A€©2å½G!%’Zü´¾£ÕÁ3èsªv^(t°‹eY”†kŒðYȬ5Å/±g¶ãó[Ìšßü4Ím.eàŽ«sÑTd„©™˜‹I[§"\C%ôrõ[&†·(#mÄnÐ6JV¤‰½ó„š x¡¢–3 4}Ú*9v?ðdIì÷G\Ý,_öý¯pâÕ>ßé±{ì¦_Ýþ»ÏDÆL&5‰¸5@¸-ÐYÁqõÑOÓµ.³VàºêùÙa u!Š5oYŽ—‚Ö|O¨ü#ý 8ï F•W¨’œ96Qs÷÷WìrâÓõ„ê$ü;eJ};L!ÂR$HÞìº-Xg6 sOðw¹Õ†z3é$âàß5í/SôDɳ^Oªw¨@^0ˆNKÇ(¶æâ¼À‹nYâ×-nHI^¿?äÛôEŸS79K{E…øÝ“u 3‹#Î\9U8ÙU5Yj5±fm›€ŒœiúäLHZ^sUlN{ÿmyÖ—l2À»lûç…,€2T׉èwž%¡Ã !;Ð]RÕÒµŒ qê4+æÒ5Ò:õ\g^µ ©Ÿ÷ÿ-¢ž:ZOõB…‹³E¾Ò-‘݃lüR9‡™£4ÿkÞ)©ç3<öåT“J2¸3³ «òò!úöˆycû'Rzžà…ЉJWóÊ^º€0/pÕpÞ L¨T¨¨È/U¯ssVY üx`E°£l²ÏópÏ® .Žâ–±3ðvÔÅQükS<î8éÇ÷¡(3š à÷|©ïÁCQsYþæ <‹ˆo´öÍ‹šHÅqÌ_¾µY/ö–ÀM*âW€û½ä(î‹äPÈøX‡¶Áªó1p}ÓPלýa&ˆ¤V×G;3׋F:½•]Þz'ñ2¨¼ÞÙ픲¾Ûë—CI9§î(<…#.¡Íœï}mû}äâÍŽ®¡nAq³#šÒ9ö5T˜PyߨlnY¨° '\¥o]ëu¼€“Ô1âȨբشTû0º ‚ED–¶Æ\‰šP£Ú¿êæÁûÚQLVäD0´7tWO+Ô¸¾N¦z“þwsO˜æ ñ¦~‹ >'á.îíåbh²v]÷ŸW3ÑRÀKênêàÄŽÓ‘ZPÑ ´f‘“.Ù++m…/­ËüÊ«^C‘¾åƒeòŽõJ!E\¡d߉¤Þ¥ñ·Öô¶·R «ºÞÓ{Õ š†Ü+”ž¿þÕ¬…²ÊUûIÇÿI%iÄ]K¦¤)°–O–>‰ÜMrÊE ý SÎ?ÌFƒÄ¨oA)>vâI«dEp:Çä3©^ñbÝ]™2†\;'§‰»+ ƒ/\ ­Š&0À|ÐL§ѱۄîh0é ‰I-«HúÞÊ<"E°@º¦š#Vo'79ä¦nu›‘’Œ:–¡¤ò~-Ç×;+’î{å\ï¥>£ÜÉŠëöİAI,•“rÛ}g€K"擳)!×`~XÒ- ™¸ìÕâ)|ùpÚ²Âñ: r¨Š‡?7¤°ôc!¤›Öë;à ¥i ]5º¹A¹‹}âŸ`\vÿmNº£“qõЧçf½QÕ™¥ –¾ÍÌ0¾#«¿bé#v_4”ÆÑ¯ød{å˜äÚÀ’*þû}ó0&{¸¤ÒÖ¢ª—7‘Øvq{b¤µNíÂ;N³"dÉnX£¬ ˜¹Í6µªûŽo1Qm%à¿y P> ©G¦S tÙÎÅ7®9¨ض:õtÙ5üÈ>‚skÉÞë /6,4Xëúݨé™®²²Tƒãå}äúd{OÃV¿‘eÄgá³Ö?³%D¦!ùóµf£(¹*ÜáÆÍ¡ŽܤEyUÜ©X=.àî|æ ®1 ùeÝc!rþY(¬ö_ÛÎZ}v£^3:+ÊL¥ ¦98Ó°¸¶2»„p^‹¹]ËŸ0¡òüª91s"(VŸúÀÿä˜ôž°þûIYi*0-WŽD3t(Bj_•¬uIû€pR?©­®éä¾Üa}üóª§ ­gÇ9S;™ø¥dVÉÆ,p…-/ôxMk:›CQwCn¡·¨=_!ª8pÃW¨vw²fè$¼Âh$ùX—*•È_^Å#maË®m씌ª"SZžz¶Ø@ #«\û¸F#½-)S@±9ä«ñ…ÊÆonŠæ€ÊÅ…Ô 9Ã÷Žô']dÜø=Á8SöîIŒ ‡›DüµŠX=d¸FhÛxë$Øò³2œšÀ»Ï˜g‘Ä+Îx| Û3ÍçɼuD pS „ ;*Ïîÿ…­µr2ÅNæÊŒ¢S¯tÒ±ó»~RP¼›¯c à›§«NQ=Àbn¬Ìë…pßU 1зPÙDRûRyÖ•€X$6íIÝžC¯G^ð’K3Œò¡ÿl!\ƒœÛ´ã]][8öOÃpî7I›LH ¾BŒ|WdIßô|`ÍRÓYR”½N ûÒºÛLÇèd9Æê†¬\cLà¥uefA§êEˆ%”•áµ1\õûûK`o(3[c; 2²ŽáÛZ}B½UÎ\²BAì?ÙB8Ð ·åÖ×ÁEÎqù-Òá%V$ ¢Ì¾MY‚‰9¨qäO dBé³ è'›ÚÞ¸ÅÊhùŠ—Žiö²ÓªŽ!g¶v *ÜÛ™6K¶Ãò&'Ï€Áô/–S)+Vrá”A°RïÚ¬›:(Ï]3ÿHú»„îÕ0b^{½èË3º».÷Õ>oH3´^×Ú¬ÏÉgujˆ¯©B;уWåÓT_ÛÍÅõVgÎhLŽIïÄ=…=ßd8 œÑÞï'ó «¸á ¤.‘Àvþ–³€†¥î±ø}ÿ/ Ïyä V.F):ºŸ6qƒúÌc?å‰ð«bÎgÁ—>ĵ¸Ÿ¹æ`á7²£k'ÏzBlÑ$[]Ê(„¡V>³ÉÅ'OA>%µEËʲXq,À‚*rÿ%Å—Uû©ªØ*øÔ %¼—&t~\ÍLóÎŽ lß’Þ7ô_·O~BR% ]]+¾9´íŠÎÐÉÖ‚tö8xè(EÇöt$/ λe$fWj7cÝW ÔÈôÂ$iM ]§7å”/X´5ëO¬a€!eiõãÎLx¡Ãü;LÄ!ƒÖ_»/|Íþ°¶i~S?„œºæ'k:)ª¥«Nž/ò-Òp^r"~´òÌK+3Ó1à ‡ïX**¨7)¸¼êê+Âá­ŽåiŽ,¸údÓ¸‰û‘zcIbçž`ºÆ$è°2f@Éc·òk|ðHT#³¬#‹±°ÑY©þ&' %与OѶhóÛÝåÑè¤ÎîÈñ™á¬O?‘ýˆ·‚ ¶4Îþ«Ö5ÑbÅ$ûåv#1§£'ryÈþé3‚µ¬Íc·ðÂõ(“×Aº?êã”Ô¬£’ü{{+Fáô} ¡§²@)èî=½ñ)¶9PÛšÁøÌ]­ 쫇ܳ³ªOíh›þñåð%þo6•èõÔ}ÌU¿•¹ ýÿeåM&b÷ÂCäxPŒƒuðð…WÛ¥¦[ð¥ÊØ ·m+ÞªVj”’Ï\îzlì­-To½{¬=s‰ )øO‡ŠlvUeÑ–;þ¢X>·Ê6‰}¤Ú²f˯OíO{ àçÅe®Å®Í n.¾r´Žê²±*´¯`E©0ésaŠwyí.zw˳˜«s4¨}Ð3|Ùö=Ù…o¡k\VF˜ÁHI«ø*¾¼2€,­/eʪ"há#‰=ŽxÍø¢' ^sè]qxEm@ýBC-ŠX°ß($J—ÄÏÊå)rJÕày–-†É ‹ŒÄ'æ<å·²ˆ€ñÆ@¯¥ùûÎVš‘×Ï.g»8®”Ž#B>‰Ò$ æž=j‡º?(œ5ôƒTSõL²}De¦^¸„{$q/Q ,ö²Þ­Ô¬D‚LÙD¬ðà.á/tÙCqÈ ·P€àÞª'¸ò.qÐðš òäžæþ;I,¡H-ääôòÙÔUà"Ÿø>ÑŒ‡Q·«î‡w:!`Â…Ó’l°õ+›&>^wܶ…ÜÖfe¨Â1PÂÕ"סÝv+ÄÙ/ª»|åì6 “\¦ý-ᱫî [ðñÞºƒ¿€†–ÚºÊð‰óíªU¸µ1Ãã Pm& quRšWK³V–‘ÊRl^Öµ'Ì­¨u̸d5ôÛbG€£‰Œï yî žf|E.8f×cž%âÞƒ,ëAkY0þaoa”_*Æìz³?@v>ÐÎÞà^ZÁp$Ýë怔šFà·±W”fàh¤ƒUÿ…ž`ДÌ4Ôd’†|, â)Ö³J£åC®™¹#?¦vƒ8\vD=$ RÄ6B÷Y²\”I¶iŸàÕ6„õ1Òtt ¥æ³õJþ,$IÒ×1Y |Hû¡üÉþ^E ‹©¯ÆŸÛ *­0$ó¶xDü,é:]‚˜š žÀBÅt姉®&¯·äŠW¯”ì[]·¹éPËd5çûaÞ3=ÆAãõE·E~s\Ieš *p} P™[‚E’’­ðdiµœ> QµÐ¤l G´ÿæ:¨´pÙßlkIF«¾(ųÆè² åŸtƒ£­:­Ït¡}ÿ" àèà\}Ù¤ÕsDˆÇÏ ÕšT5øä¿qt8J_Y,oñ;°}s…hK„£Œ`êX\Em’§9dx™æÌ–䡾®ŽáüzÝ6 …îÿÊóðbÉßFW,w:Èiþ<·ê­‹ŒôÇÏÿüå±6ãÒ-F¢ø ˆ³rŒ=§ïP5mé‹ÎYìè0 1dÄ•sûSŸP¾ÌoÏ…û kó…*2ÔX%5ßš]€Fó z·¹q’“Q”BH÷Ù_‘O^ŒÓHŵkŸ®&âö ÂÉ«$¸"Èìe?Z>èv%“ÿœ‰”Õ‰Rª†míp‰Î$6‰ÃÔYB¤¾´aeL^Êу.àPø4|ÐÕŒŒ Éiò&8æžÃÖU«¢åh£ò0ðs©S°’%,ÅPFß ú‘&Õ¼H­éÝ;ž–Œ°Œ% CBÕ;6k …š4ð&k7µ#"Ï2Üw¡–Gš…Ë)»–ç9û ˜˜oŸI¼ã•ãÔW;5¶l×#74Uxj«J…þtþhRÛoÃ!*ÁÄÄU(I‡½„=hv$',ߣ*g"òW3âÆN }÷b¨ô»<Ë4èÙ±?%)¦å¤ûæóÌò E(Õ‹Å$ {çO þ‘È™ÇÃwYÑ‚­>•“j êƒÙ·pø1ÂJêK;Ù^6By¡sddö§·uõ ¬§/>TÌaòy2CÃPÇ‘f«=K(åô %ZFb>¼•C ‘Jµ±FœÖ‹]“¾{z˜1Ù‡/ èö–*ÚoDÂô$ÆzÈí’C%÷Á´›®–2޹‘W”o1óÉJ4î3>ŽKÁ1ÜEÌ_qŸµ Ø`£çÙIbÙ Ý•ò¡l5PôsYKŽkÙ¡¾yLÒçº yÐÁzxYÒ׉¸i!ç¢K<Âj49 ªˆ½6qMJ¨|‡äáx=å0ߦÚv³gëf"YùÞšƒ—»êüÙü‘;ò“ ¥~“½rÄHöÄx›¦+>ã°?+Œõ?sù0A£xK´m9ªÒÃã Wx;õ]c›„T!²í„2§òN,w‡!SndšŽŸÜ™õ+?ϯ¼Dô¹*íG\FŒYóŠ»Øòý™wë6Á®àÆ¢ÃJû9¦KFrΞÛ”`x¥¨vø6xâ]Ì›çž>qï§ ýéhV»Æ.ót’û~~ 6ÖÞ['àzNÒY ÝËÎέSg»'æ;œÎêÿ&®/»d†ì¼£&e°^AQ‹N°KY~˜Xi–X¼÷5¦Õí‘ i‡ßÉÄ%伡°è<+qˆß^½XGÅDPñŠäNøÄÂafe÷ùΞIag#Ïo§»~‹© ©?5m¡ÎUSÁ…/ç>>›’gr»w”»á5Ê§Ë ²ëú? e‡\²p°’§Tgb‹…ÕŸª“ æ&qæDÓò½bëªKHß®_p2…9š}*ô£vI6Y ?*{Ô瀮ŽÐEWõ*’ò€ðŠV|THâï£Ï…]‡aòÚÌ«ºŒT̨eÏØ€˜‰D¤³ùDrfO¶à*me GoÃæƒD~MàבuÛ%jŠ ú¬y ª]&0hA-|8ìc(ÂÖ®á2”!1{D{ý»IdåzfÀ§¿")hOËv^Ê\Y†á(ýéxù¤añ\Å™AÏä³a• [kªt¡ObÞl¦"ÜÞ§;Óêžf;–ö‡;°ÚÂßÅÙjŠ`Þ4ÿf/¯Âº[˜@3:pyQ̬réðb˜"Ãá”ëô’Þà"âð4 Y ?/im&ÌCß‹Ã;S•“qù¶C«§™ ³À‰ŸÉ\’†Ÿ£>¬À+*ÜéÀInjޅ/žc#[2Å8“ЇãÄv޵2Æ]tÖ1ádc—«Naýc›èˆküOª‰\à]› êñOÓÝzÄxÝÈ UM >Ž"Ì2^Ĭ!‘ùœ8÷!ÌA=&ÿÞ!ýÞ0Éå¥CyíÜT@HÜš¬õgCŒ=Q%2då 1õÛš ¡W²`d$çÔ¢$“X~¿"¾ }þo£LW¬üWAuÌ¿ÙR«R%(Uœµ '{®°ùRæé‘‘v»kHÑŽ:ÅQžS?”–X¥XJ‚dlÉŠ“µ¢!eîznÐÓÀ…b¾ø¡Íw©ÓoÕtk+Q*`õ”±Ï½—{„¸ŸÒõˆÃÑÏžjs祗!8ª[r®rƒLžs6äVnFÀOT4¾‘K× '$Õ¹açö®ßC—Ȉ§H|—ª¸Â¤+/¤!þ»N´þÇ@õ‹`—ñÍ$´ØÕ× ¦ú¢@êaZôÕ´bx”|ä·èï]Úº’¨¼…h™ˆj“?ôÛÅ]#Gt£È6‚åê)Ê~•ÙÓ㌨گ h{S1¾ ÄPOð¼ªaé ëVk-ň3ãM)aí1fµ¥ÚWß*ÕW¯"jîèéAüU9¢·ãù7hJ1%J%ÝS¸üÞ«°ó¬¢)&à†KLâ—ßG»<ZÊt¢gw®loD0œqF!è±·ž+ôÏíšÂ˜byüis5 JJ ^—Á|$«Vl·ÄÕÅĸJ°úNa>ôHÜ®ž‰2ÒüÞœªæK×Au¼b‘ošEýq*Éõ~“Ç1éÅ€PÔpxÿqe4!¿›…: |Û/¥­#äÊMdL‰éŽij0 %ÅiŸÿÙ.$jãý‡b¾ຠl†Á° JøÓ(.çÊFb*˜;HK°„®“£ÓºÃÅ9ÉPH*¬ñ?Z[{Q°µ¸, C¬Ì|¢k…:‹N”ßÓxaënͰã¢Ð^¢NeB·«¨Þ75U¥mˆ±Èòœ½·cýh+8  ñ¿m¶jWIøQaå YìHšÝÿ¡j2¡ÜnÕà>ý¨À ßP9Ð-©Åï2jòk0ÔåÎÁ‹U…õe©Ö¼1ˆZxÄÒ’ÛÅêKò…ɳU·Ø/È€áä¤fq \c¼ÿVLjêÞøNœÂSm FNu7úãaû‚“ !.—&Õ è"îÞR}ÿTåÛ´w÷NÁ2mn¤’þí¯T¸N’®k¶^w~_·ö½”ðXR„Sû³, L+¨%÷{/ÔzÎ÷ÄÌc’~Ç¿ÆbzœNK„Yó÷ˆ¯“›TzÑ}±LK(h¢ÁÌbÐlûì›=’Éô(+N¸¶öéîâS™?|“ÞålY×ÈϬùm„ïJBÔ~¹™÷]ºº“ž?‘‘åR¢F,ø·«1^—žlÕ·ÁüÄÕç/ù @ÙÛ‡#Š Ù‰Oh›†"hÂ¥ëÀ͈w*fÂÃ$Ø!vñFPˆ¹As§\ac;š±wî‹9 Z{i<]¡ðÁ|@ Uéä™ (Œ›9-cº_…_84-êÍ”P½ý½åY‘ñ#·E\þTâX¨n·è[¸jávæß)NÑX5;~àj–ߤ×Ü+Tæõ³­(lÀƒxïó™ŠÇr9Æ‹ñ¡Ã9¾¼ýX«~é_6E®^uI¡ƒø2Šþ{QªœÕ½wàj?IôÑû«ä8©ˆm- ߨòv£«hœS/1ñ7L“ÔÛ礥’©“*|äU´÷³27E¥#~Jªu~³«Ù¨ñ"®±U¶}’JfŸ‘;¼?5q)A8µžËßdõžå*ëÊÓ/ëÒèsôòÚ-jëÌ€ÝØag„©ÎT ²"°Ï™Ÿ"AbO4À"T›h±’û64ýN¤óB:ÆTîKpž]¼ý[®D‹i’iЂíYžFý¿`×^bSÜ1±žùwÕñ‘2oíL.Û eï”Π­¼LP:Þ$Šl¹„ý´þÏFFú —¾sN#¥Íû»¦„ƒn1Sn‘.†’±N¶xô«P<~Í• £A£¼EÛÙ ÕÁ%ìg –%ãuÕB;¸â=©b¼Ë¥ÉK\̵8×X‚AO̘ÕRÎ΀RÎÅ›½,45}Zðü€8z’Uõ]e]`öNl3èãu¾.ôµ“‰lMb‹c'JÉ%'ˆ’f]õ}fÿoXµ Biâ<›[%9±,X{¨uòAÊ?5 ®ö"*M—]·ýä»ÉºpHúÉ| E}‵ÄñÁ‹¤vDÑ1èj Ny6¹3JÒÒG½Q™ˆó»ÔB»Àiõ6ãªÛ«_·»ˆü7œ–÷Z¶4óÞi˜v†àÇžù#„ –{z'(Ý©û·ö§lËOð¯ßô‘¸õÿ+óQ¹g¦ÍIûx"#–mÑšiŠž¨{m¹>X¹:®|yýý€ò…N0S‰Ø&FòDÛ Ã5¦þhs½µ³/ÛCŽ&y<5W}˜wµ (áÛµÚˆÐuå`Mû¶§IJ¾ÚZ— °þIÙ*|¬ûbT¡5f3„m‰„g½¶WD`õ”yyêQ¨TÅïÁoFLÇ‹ªnCf`cŒ3ûŽñn•ãv<¾[ž?Áíé÷ ?¹#¨ô€9{H OÛ×Þ–i¿@|¯@2ÂnçðpÚ[f„ž+Ù²©£Úïê-ŠðþÙè»>”#XN8ˆ±è„¦U¬3t§fãMf½ äèVÐ4Šð£¿Ü÷ rxÄ8}K¦¯ ìf> œµñà®dÿÒâøD>¯Zê Zá¿}û¤¯ÖÓx@åc2Ïâuâˆhæ _|ÉI …sGÙ-å•:xXˆRµ¬¨»,èãD?†4ÍN ªži0„l«°’ìQ F„tRT°éöëž4F÷8±u‘F³˜³<@Xdb÷]D A› "#Ë-©Ù £¾þ›Ç!Pž{#R¹VÉÆÂˆ‘*ßpöV=(\a4¤ÆR³½ýc;ʂީª‰½Í¢u×<ÍääÆ …j>t1™ºe6ô.ñ.Zi—" Ÿb;•λS_-îš]Ú¹qE,?i ’:h-´¤X+?m¥ò•Kê²ÔÁq7É1BßOñPLf&äïo§IjΤª+2aÈZOìüƒÑá÷.M•<‰ÙJ:$ Õu¢‡ÿ Bz|"íðgœ ¾€è¡ù¸úµÑ…þU8³ðãw>Õ+›–oQ?iùÁÚÒù‹… ¾¸¹!ëYNc1ø§>±ÒAÚ¨F*wߢ;µn¦í%–ñå>À f`¨lïñÙž˜ËóRß(—ï‚=ÕÇtíGFç%ˆIÑVZ¥5~dæÇ)Bí×.fî´®,„|h=Š’Y ÍHº¨6=HÑYÌAYM*fHØöt'Ú5ÁJµqŌص):L¸ì,bcÀîÐÆ+¶Âñ‡A ¸@¹›èñW±Ë•qOÕ{[Úþ*…QW}|ÕÙ.Ç/Áê)çzOê´ö±]2è{AçŒïsÎLD’8‰sűÌAÅ„ EfWߺ:Ñå‹N­ÙP/¤•ÊP'4ƒ§#à ä¿NSâ‡ÁÖ]-•}¾ý«%bö¸Ïxñ&g’ÊÕ¨*­¢™%"DEŽvà¦ä‰ñî’^o …çâ†;ÇeÔ‡´æ¸ìF—lH>ð²|H!ßÛ“àŽeÒ‹xC¬n¯pLPijo>#åÿØpCú5|ˆ”åÞíT êEQ˜ÇD?_øËX÷ùU‘6‰¾YãÔÏq¦ Îáü BÖC¥ºŒÖƒvÄp…¿§Ó©"§+ðBÝÁ­2g+Ý~3·mWD¸tîU™ àXpªÕ ›Á“ÝC†ñ¾<*©Bx´îôZÇ|m(ó’/m»+†Z˜ÀðGþ€="À༠·ñ:(Ü.å!Ï÷^K*[\ñ¸é^åÄÓ†;yñŒ›;.,ÐzŽ{Mœs8ã!±#ÙÀói“ü “̱ÎÎdMJ»¨²n 1ø‘2ì_ï#ó‰_‚åð‘Íþ(ž?¢`'Ãû»E’›œÄRúüNèÅ>ë™ Øèì§MÑZô4IŒON•€S"ÆÞí'î®!"£^þ—Ú2µÉraO½™bpurš¬Â 4¤më]î¬xÚ¦¡‘÷Ÿ§Ëòžd…ãs›±êý9ˆúT ro1É Äh€ e@8…„+YWK±$Üo,(ª«¥¾:Å$àQÿÑ’Öœ…±×ïË–ÿ×¥F‡ùUþ4Ç3»‹Ž‘9ˆÍâ}ïÈôuÐ(ø“_œ¾v¥ço-k4ÒÝŽ|8˜àï6æ–ô¶m§c6È‹ŠÝV‹d¯÷fÈlÞ·ŠÐSµAbG.Tàîûç^MnÛ¹Ç_&¤ä9»Î³t/»ÌÂçQB\Y ùàÔ;§Ï½=Ï Ú`Ü/™–éôgì ¡)àÙû½ûy¿´¾§=ÔˆoÒD™Ð˜…jqúËœíG%Þçê,:ÞM”rä-àž<ÿÄÇÃô—y@çÎJ_à½ÎoU’/ÐÓ:uöx±¯ I‹w¿“vµ™§ßq|5Æ,F’$¹ëéþ[d—e4öèË«W·\•ÔF–þ–‰Ü-çè#¦5Ùùë°uXn ‹Ôé©Î³îjÑ‘¨ïÌ/g´±Ãjíf“ñÔ"»k‘>§èÌØ‘° ’ o‘òÊe` i^δëK|4ƒ<çÞ¿ +N¿Î®î‹+ÏlèVÑÕØ ÅÎVŒÒâÞö}"eðqåoWYª™_2¥úUö[·Go1>™Å#0Î…X u;«Òoü$zœ´ÈU ×dØ/ÞC÷º˜Í«œSgÕÕ_é‘C B‹‚_`ö P@‘‹Âéª95uR§;ñ&­ÝX«´‚cþ6U–BSÄî£spž5*öãÚMñ]=üŒ‰õÛ1áÁvk³½âØÌ…y}ÊœOÏFøFb¡œãRô§­L]Q2ëýüäCNàåˆâ.ŽI_ß@|Êõ¾”Ï"¶¯ñeqÔÌÇ„ÖÖÂ;yè[y½  Íg_>SŒäP:\ߨ1#7=Êßœa(ìÞTI(ª•@mæ$Ah€ÖÉfBÅ3U.…[oï ©C‘ü¼k‰¥ ªQªÚm×SÀÒ#i‚ñ Œ°(©Ë==µ9õ¡ g‹Xs•vÖ2ˆ`5$³ºØ=ÜòàÄ›E:ôµ=g®0i ¹Ät,xÕÊÁ&Ê¢Âð2/޾:öz“{Â[¦9 ½Êƒ]]Äx#Í=?Ò–…(–~ó/VÔc­ká_Dm3i½rò;Êìp#þœm…/Ú×µúa\CÄA®&ëž J“éËOŸtžž[ô®oM°÷S\,?=›Šöù)x!æ÷ìM¤<§!dØ1iÓ†Ò´®V€›úD&x UJRvúä‚9'®ÜÝoéÙȲµ­;åÞ¤mÍ.gK‚»ÒVGpWø œJ`É´Ñëƒþ€÷¼›FL­8o´Áȱ?T*K4lL¦v?X›˜å2I“F9n‚›çÖAMMÓÙ°ò|0Ëw’¡uÆ1ÅP1Èu—6gڄѵÇ$ÓLˆ ýÓ/¶›-L¾sY ö,ï¾*BŸ_õ3S*F`È_=àŠ*ŸUÅJW#åŽ?ÏM´vpàB¥,û wèvD~K{í!à(°`÷›¨‹`ý·­HÖ$•"` 1yÉ-ÜvÐà¢*g|=”A6u-Þ1Ý+a¦÷&U¿†IÊàá×ö‚/¹wf¾ÝQÌ‹f„¨ušZ áwf lî>5LŽÖR‹ÛaFmWÿƸd+)bäØ+@ål/V½úÌP‘m¿ý¯¥§éM`& )Sî¿Ó,èO>Ä4¼/”éb~z娒%Ã&Á<à•Ï{ìs%³¡K§ž ðã¥Ùý·Åœ“¡tÊ0æIo¢É5 C[¾âð=‘EǶ<€Øˆëæ¢[ÛôE9ðõøÚzyÓf*ÏáÄîà}Áñq"ëkdF‚ŧç! hŽðþr¯å“BWQ§9æuâær‰ ôn‚§Ú½uèlmóJº Î &d³*0­ƒg€ÿgŠ¥çh­Æžš®î¦ÒÏzXèå w«'•Øy EJz"IøˆUsB¼ ¥³­nhÁâAþŒ©CeOá þJÈ–UíUC «¼š˜1†FMŽÐå^¬êÏ$^!³eó¥.Ôœ‹EUÒñƒ‚»ByÙn¨z¿€Éò¨Œrªþ1Ô!ß ïKLU¹Ë¦Ìùg `#„ê@/NÓÅñm"m)[h=—L ¸1N©rucqV°d†ÊðÔ;†Úvr;Ûðƒš xAhï;}6© Ôö7âbÅ¡tÚÅlåÙNBP©ëæ¾æûõhM€ T{zà×xˆI§t³ظh¢€Hçë{T ÝÔ#Íe¡.Á5œk¡ UÙ”ÓÿU{‹@FXç‚%?‘§åk‹à@ò­Ï0öçõB"F<{Êbꑃ3-øI¨$ìÚóƒÈhd†‘{ƒ|Þ4‰¸až÷Žì9ãº>÷à“w³³vƒ,‰,éÕÆÐ]4Ÿo E ¢w­°©â(M@ÉŸÜ’Ï‚v>DY_D‘Í7ÎmÕæLãYÄwàÅYš70YíØdA!c›žT“ƒ¢Ûðqü6¹6ØÈ#9üÿ ìªÇošä™˜î$ak˼Âv¬Ljm±’·Í'@ò…„žvµÏh#¬re"³ûFDöù?íb׳šú2 €¤,q7¬–ŽçFÏlèã2ÇÁKýüv¼@hLFßÏrØ9¦îø›è áAü±°£”Lù~¶>+6H«ªB‚Í Ëp,×4;dtqg…­³T'…ºsÿ_b…2]Õ©&u;ƒ¾zÒ{9ýÅÉ[µå8ðg¥¾§¹«Jü×ÍH-1Ã`­Í ¥D9g°™CÒ>»2Ü 4̶ú×SOC.…t(MÉÖ·¾ ôKá–èÐl”M¸c‚;y¸*1ŒïÛqtãì?ížöE‘0fŸÛêmˆ>nKÊÓåÁå/twMô5 Îr`V+j°†:á©'"÷~b;¹yQÙÔ„òPì(pÙàñâ¤c¶'›Æý¤”x®ª¸üݯ=L¦ï7I£‚l˜Î&f ×Ï>à4“Äɯ5Ftüˆ¤™¦À®;ö]5s…fTsƒ›%ž*·Ï56Ã^Hñ%umzà|Àþ d9¸”ºF¿CƒÔZŒ­³.x!å¢)’[?Dt¶÷ÄM,Ý"3ìr» m¥a³+ Î0ýŽÙ Y`ï ƒn=ò¥?Û×fܳ³fP‰Ûí±ÔYi­ìæM^€§.Rz4¾Æ¨ånq²Ip´ˆK5j›-’; èMúfî3^R—ØND¬Ü©I4^‡»ÙPØ»Nžwx{§ÕÉQ fV§¹,:öÞw;º%R“Úç5ÃWŽó_¥ºº›¼œIÆ;ZÖÑ &ß²ýü+œ80S”Ê+SØÀ^ (N¾ÿÿ£Î_ûƒÍ:0¢Kl$&_¼¼y«ŒízJH ÕƒeD ^(™îû„ÍQÑûÕ_ÌT25`Q{a_uÞm–MVEG rpÛ(D§;é<ª“´UÅW‹j÷çL k8j g,Ê­[EáU»'›ˆ·Wéå¨ûÈË“ˆ‚@åÔL¡@žf3ëdÖûu =;«ÇϪƒ,¢3b”‡ôQ¹_<ä墸ÇB¢‘*]«ßÆÉྑ 8=°QõŽ'ÝäÆ*=_ùˆ&JáµÒ|¨}7.jáWk'6jÅB(rª2$Ü+lóï‘%ØÙ³ÆºÅ`ìjx$ò@ŸsÜ©z.‡Ø›9ë³,äšQWrtÍæÄ?î/>§œŸéàSmßtÎ5lÒôòYô  Ã´®›FIi-«8fü>ѸŠ…mZºéHä)»šxù© º®;C±uš,2ÝÌb”n8FpG%¼1D¤Gب0žÃ ×d°‹(2¢ø¦º‡r?Íi¼HýA÷¦Ö5:2QÝÝ@„p½ºX¿1ûœ4¡è“8)0 ²¸KF¿ †s´²'}¢kðtP}t›f„ÏUf°ŽÖòVV7Q=ð#¿úéü:îøL/ÀôÉÁHàÙ®g–Ðx’',< Ãil®XÝ’9°£½²?D˯ùz†æ÷8‘Û¼2•ã©_,u¤0Ú_Y®|¥‡¹-§,­ð·MÈîg´ SMË× ûýRÆUÿ½ÂúöˆÛø@d@ÞÇ]hàÊäÊ4ùið¢B|Ò`Bö¥ðçê:„jX×:#Aßé÷¿ä¿Ç÷Sxgî¼7R¯S,‘AgåH3½Y|©01.ÀX ÙϹFøi_ˆiTR’”¶Ó[_ÝnÀd“š~¸Ÿ6߆8ÛJ†yá†X|¨ÛáâkÿŠ'-×såEt ª‚Ám"=æí»Äêž`€2{%t+Áî/¼î5Œ]k]º0³_y˵ÒpK¼M6 I`_½å–­¡_Ùžì 4.ì DþàìÀ:+[ýY¨ÃÐ=Ó½.S(?Ý (Þ[‰y¾#´) ¢uà4šZxv³^·šûwÌš˜Nø ¥¯`µãަÕÂÇ‚WhÈDçŒbßC°_þP# –ÿG*‘“Ž›|EOwð™òÖ$‚'¬i¬z")…±Õÿ9r˜Š”¨ãõŸ þÄS ¯õËc_¸ì%ŒÌ—uy”l5ˆSÖ?Þ.ýêôµZbôþŽbr™Kìêh&ƒSšâÖAâËÿê…uÙ¾1Ìž…(¯éçjòú´òV›CvƒeÊ`ígÚý×:̇×(¨D–NœŸ…}bzIJ†%¡ŠvjòsL¼¶¾ãl ׎õhîš9:µ¢9îtq¶ùLe™ãn°‚BPƒ“*¬MýštÐ5F¯KAÖ?;2gˆNÌ0L²ü*›ô¶AzÙü7j¢Mo0äÖ¤õ¿ó¹A€UP½"‡ΪÖÃ`˜+_kzÃÜ·KÚ?­›Âo¯ ³ ÿ%ÞXÖŒ¥*rK.|(Žo½›¦;ûq‡¼O×/ùUpXT°ã~,„“er£Q‹@ÊÞÆÞ•[¹g‡ø}ºr®£äè 6ÒÌÍÚß 9B*\™Êl÷4L̬h¼• b“ˆjC0ÜýïÃîñ8§!ï¿%–Çàù? 2gôÍÄD6Ùá΂³ö£Àë_ú:½ÜÙF&‚)Ø~âI?{CúNìX|+øÚ}t5û¿œï!¯ öËxy¡ur{¸ø…~m%°í¸ÔÒ•»×%Cé ÷¾=üÁhužê †Ã¬È¶ñèöÕfcyúFKfž.Äf$$úƒ,ìAÞºgµ‹yóóCŠÒwðLü[/D~•FçÙ0 ¾Î¸ç†í³¤&îúÒ&±ƒŒ-–ÉG`6¦'øÿÌz@wTuí5ô¦7YðJ/IH«uî\ƒA»Ï]·Ÿ³û•'$qÛ>¡¬Ùá©”°¾§Ï«m²e+ÄM‰É·š÷¸ýØ Ë¦øÆ84ÎB¼´æôWé:¼ÙË!$ò´: /uÈÈ@w+y§u#¢>“­®îÔEãPË6ø ÿ ÚVÁ'£Öm¼Kè¹›Bµ¢œU‡¶)è(™°Pëóå7t/ŠIÃÜ®L¹ä1MÇ…ää}8Y1öè"J àû²…lo*KFw;]—avV Ã7í;¸Å½í.s–ùè=0|CUöOÍ405=SÉ¥7;â‘ú Q/úÅ;Æ÷ÜÒ(ÅruB :‰ ÷­¬#Ðû¼™w!šk)°÷†vjù ôK›Î2ož›‰÷xb²—’¶¡êzˆ·º0ó~ÔGDÜÉt’7¸ÜU»Ì‘lVEdï$m±Ø¾VUîù–^3kÖáUðsØKPC[Âõ¨`´ãÌ’€&ŽtsõØ?UE€˜ñ&®~‡ÓÛzb4xÓé},tÉ6ÿ«Þ ¶ CÆ~|°OëÍ‹ìJ~ûŒ ôŒv‡h ÓçϯÛìiôÀ¢/:‹ü x.]•qå£@ ã`·„#¶Àé_€ Ž{°Z  ‡ƒ˜ÔÇ5{àék<\'tW%+(âŽ`d¶ÁÍULzŠ0OÜmé^ä—3Œ”IŒVÖ ¹ô‰‚X~gZå4Zf¨yfÕ9gÌ·*ÂbþbÍ݇·ŠqZ¥ƒRÄŒW9}E^=çV ±å¬®D²³¤K*"æ¦ÝéiÛÞÄ9Èôtá|†MÕ¼3øÉÑC£×FðEúÚ“DK†-zhˆ!÷yóƒP ©G•GeãTÕÝÄ•´Î4•á²Pqõ^®\´#²Êì ó$©B«õQ5å^$¼Ö„¨ÚfrµH}Ùˆ{/Æ¡¢¿þd—ÜXfoÀæ¹®ôr3{Ч;Ýà¥ho”‡ï‘é^çä*åÖùÛÎfä¿OËa¾óvÛ\Τ™´(Pˆ›fÓføu‡ËÍÿó1X¨£ð|×÷f®±fï##Qʆo½%·èGg¾L”ëÁ°.„û—®©Ì¨BaáŽðöl\¾v ÁÖ£ÝÌb[˾P½Êó¬Þ3;ê^ùIÀ_´§~9`áM|íScÛ•ýìw@®AlvÎxj,s GÅ‚$³é}‡l±¯ãQ5!§šìùv»5+X³§°”¤8ùÁׇ1 2·sžea€ h"Wÿ‰Vv)·yA> ÛE¼/É+Y—µÓxí’Ïúøª/Ú¹H0áÂqØ›^ò˜[æoŸ]øo€´d¡©š•Oà¨fi<«Ê-lÙzvC&êEì•×Ýæ@‘tÓã ¥ó<•`*UÌ.¸ç³–ñZÙ€–Ĥ‹½ó,ÈF¸q ÕWéL@5BBÊÎݽHî5&”'ú8¬gÐgà–.!¬"ÎU݆òÎ4Ýñ([êz1œM’Ej-Áw¬¬É‘/ãõn׫ÒíûéÔ0J+ƒ”1a惂àw(ùÞ…ÇwqÈD s}üýëü€ùM”†Y¹!à‡…¨ûu¨¹#"˜¥GÂü:âð•óµµÙæaŸëØ!GÁOF;žáÓ —eÎ-&cã ŒalÆnZBéV9g>à O«$H&åAÇ¢ïðáû¨´-™…ÇK\ ¡²ÆïÑ ™Ò^NqúXCe™c8vm°-ª¶W5pß„Kz—8;èþ½N…¶Qdú=‡Dæ…6½i¤ýÜ¢cÓŸúMÌprB§¦3‚GÖ2Q(š^l7š@ë–Vq¢GèÝ'{/¬«%±uÅÆZ‘—ë &×ÈUg~Dü_ÈS¾¦U=åg¿Ä$¸¸üX¶:‡oyw<ª H†`÷É5ÍÊ@MºQ D}bà­H¡«Œó<${–ä·ˆ‡£ø”KPÀwäµÄaD˧Rä”ꨆ<ÛóÇu/סâŸÇïp™•»œðGÓߺ譙`—¥Ì¢q­ó¬“šKÌÜ‘:(nµVZp:ü®® É~åwtRZÞm­æjæ|__-qÈà»U;§{§Ru±ÉE´ÏS%¨c¼X¯¢AZZüµl˜wSûŽß¬PÄÿ(dPZåÑ¿ò@öˆ€çOoŸ7t[–ÌÊϬ Ð{ŒÐõo*”Ò{î”=—ä å–æp)_Hvu"²’Ÿµ!%0œÛt칿ž;–ê æ0QŸ•ªºm'J"m¶µèïÍ^wÔö½oò!+t`%»Z<£ü°Þ>8×.DFŸ_œîTlj£‘%EÓ¤xûzxSÁÂ\>yîÏÎűڇŒ$ñtÒPuR¶Žþ{Âl6àÐ-ŠS5¨Ó¸PPM™’.GnŸ"p¥ü¢ËDješ¢V}™Õ\ ·ÖxšnÙ˜–œ^ÓKBfä[V¾©£¨AVS QI?F\.¼ç‘ÉŽTZ»®ï ±™CŇ éu»¢\i2äøøŽ ™Ö@T^œÆ²\gñ½Ö_U—¶`RŠKs…â]méPÄ$º©—G&=á«’…XÛCN¹¦¶ à¼b“5ÝÂäNåç —v½ ¶Ö|¯‡~èJÃ(–ÁåW}†"«œRœ§DF¯^ÛrPMÝòn‡¹ŠbÁ}@^7“´Ød”~õ¦Ñ¨…¿“‚Å}vñy™oM´¿¸Qe@0É:DU‘î±Â;iYÔa#úô°‘¼'n‚9@Í]ÈT¨êmqý|[¢A¯µÔÝ_5¡,LáÌý…k'–Éj¦Îøpìvžoåw.Xÿì8ÄtXiúµ‡_ò¸—s®[®5¼~¥ñ7k‡H¾³Æ¹MÿMÃã]PŸÌ]Eu ÈÖ%2ÅAÚ}¾Ó1]E9å­% ü¼Ã÷¿Âƒ¶-é°“ðz¤]˜ŸÊÒý£A$FÒˆ‹ƒ¹bs£Œ”‘h^MýZýšçQj­yÀóåÑטæ@?•9Y *§w-£œÚJ¿µ¬áõ3eütp¾èOÎòÜG‰GëhÁ:ühûÝÌõÏ´“C†t«¤ëTæ¿ÕöÎ$Ö;2—›\IãJ¬2U¼I6ã¾~|Wšdf;f×<|íSç§&Å´hñ R£V\= ¦×UYÖÜc÷Üÿ R†‚kŠÞv57žK÷è\LŽ:6’¨jG_À]”x„}• ÛþƒM@ó"ÕØ””¢&>žï2ÎŽ ¥_R–²h݉qPäÓq£ã‘û—À¼µGºqlѸ+Ú¸š„€¹k¢N§éØ<º«ìPÏÓªò i @ãÄÒ”¶96Õ•uDƒ~«bÖ@2€üuì£îÚÚr¤» rßœoh˜ê*]IcÑ­ÛA1Åo®uQ5?«&5?wŽP„ÖÏtèzPÛ1vQÏ´}Öèžä @ºVv{4Ç2w 5AzåÂõs¢Žìµ£P*7ï—Cýf$òBõ.ªûuj|ñвâ˘«Åæ8££ m3.g‚¬„²¶â0仄4IÄJQ•=òÙØCp@/qvK²1·m~g‘Šá˜àM'‘ßH `|8N€gé;µ§€´Ã÷¾ ÚVŸ Ú–Ëx^TzÊë—ÙǘMþ[sGö¥€BÑÎvv}3ê#H(4 –ŽÀ•À¨šAéð1ebl,ÏJ°‡þu¹84Šš™ö²ÛŠçΧ3hÆÃ"RSçƒ$V½æ3Ñ!Ÿ{°b¼õêô ±»X©”BŸ‰ÿsZóÖj¬Qw¼}hþ WóaŠøü7?fçX¬ëcpq„³ÎvÕÎкlúÊaL2§d\òe¾ØÕ[õØè„Ae$Uñl€´#d±•vøµc§w•3µ4ëQ0h ’MDb9W* 5<[ôÒÔˆ[”êjp”°®b‰»Rÿ‚ʹ^ÁªóoÝ´Â €ñЖ"• [v‹Ær?„»C )¶šÖÜF¨Ÿ-äºLVsé^ïíÑú0gQ3pyM_ÏvY\1¦¦àR­éÂ* ɳ@`¹Û†² ýÉL«9-%cyîî[i“,BQ%k74²¢—L¬áVï.ë·JPpr6=Ë“Ÿ äÚ…œ;ÕêhÞ¯²)óßwу™ÛèÙ^0ç~å¼Pßdc'ÕR)Ôˆ€IgÔô¦Ø5¿‰ÃÃZÀŸ¾ìÆMÒ›5“¬ðK$rù ìŠÎ^zA™ŽÉÃ5Ã9ë™FCÓq½Õ{r†£u*Óg¾f0G¶)Ì,Äô{›º;90DŸýå9dk0½~Ðã­ž¸(ñ øÂö?ñpP wº¹É7¿¯Ô¢)ªrqДÈ÷²C•È9E³û¿23ÄÙjÞ5tÊ#в*)5Pw– ÉÞ¯Uä ãÁÞÚÍ+ß´U¨(w w‘šö¯MÑG4ÅÖÝ €ß©N'nÿ޵a…èô;&‘ŸU“î\ò¡‘÷¨‚ůC\<3Y¯ö6¼€aJÖ¦Åñuߥ/¼ jæa“A\ª¼$eŃüûÁ‡…‹5ÿeŸGÞ+t¹ÔŸvê;ëHâKraw˜ÃÉ ´–¬|…”<ìª_¼Rh’ª,'€! ÿÔYÁb436@þ¥ž6RSÉT¥ö¢Ž{Í¢òGÏ;¢úT¼élp:¹ùQe¡I5¥Eߌúw ƒÏ2c/+°³CJ jà7¥H QNMÁd²±*¹m 瓞„áÁݘ&³ ðWH“G‘¦È;ÝÏ}àWlÑ/¯"}‡mëoÕVûéê ¦ ÷½ƒ!À…Â!|L¯ÔÿÑ0«Cs’ò®TE¬ySó½Èû+ü®6Gû†ý&˸U剈}š÷Œ1˜5º‹ùVývzEÁ™õ Dza¾Ñ±õ-˜UDûT¾ª).J±\~Í+±&¼Hf¹#li°Ÿ2CÊ'·‘ž*÷Ç«9¥1#§±©ÿ©‡ðV˜$iÉ;°%ô9´¾2þ“ ꈴ9O±bÒ Õ2ÙÓ6WÃjU]:ƒ$ཕmaeµ™Ô±d gkO¿õWƒžBtc$Ù1QëÔÒ/Üü7»1Î/¥œö„Q Ã® ÿƒVÝAéðkÙ<‹õtçŸZÚx—\ðè×na3û=¡ÈñŠ6ž`‰8Ä[ê;Ó™W’t~Õ‚'5Kœ!ÜÛd¯lN,¢›®°jÝzÏ#é&•ØÂ€ÐŽ˜¼ãçû(—èx·d—ó±öÜN†£Ù÷>#Ìû¯ý.å^I©>É“X¤…¦M:öU5.çäˆþXÄÓ bIÚ­(Úø-¯“—z ˜òóËf°e¯ 2—UŒ• =°ëH‘š¬Ãô >Z€Vcå¯Cøês‡ñÑ,Ò…†ßø-rŠ:­é‡|8×A`ÂécÕôxÚ’¼‰¬…D¥RZµŠ©’Õ õ²ŸŒžõʶ²w¨=}(¯§Ki“:3@d€ÈߟÊÝ®2'›T2®ÈÚw*¿¥9€Èæü“¿£¤†ÔÈs¦º³"Ë ‘þÉ“ËÞ©÷WuZ8úì|Õäöc±ÆF.É-e©.v¬Î¥œs¶*ÿJ|ËAf¢x‹Ò°*A_âàEé…ymÑ’Ê–5lõÇ&™n=ç Ǥ­$lƒó™<{ñíŠM ~„gˆî Tëà ŠoTyÈ‚SŽŒ\Âe^ö`?i¿˜Išš+Çl³M›y <7róÏ™‹pÒ+ëêC4 ÷ß|ˆ­m¦ìwx¢^9 =­Â²¶ö] ¨ ØŸ„Ø™a'¡AÙ4ƒµhzÚä›Ë†¤¿×ø!Y®;÷°Zqè­â*unE;‹‰¶ÞðQ¾ÕM1¥Ý¢?vçVê¨É»Ÿ1ÑÓÁpdl½GİâÚR¸Æ”x:†q†ð¯D¹mý¤8Û’N[#Äк6{ìB>Æ™Š33ÌwàîWc¡‡ñN•·r@¥ÑÑð’mvoz ?d²QEés»|v1ĽÆÉýï†Þû¥ÿ´Ï5>îð:–®—PoW=€éME“Q¡“–±îñÉ#¢E‹Á3ØN`3DxˆhDz?=o›S#?ˆáç[j¹øØ| ÆÁË\լл©^‹É_A)hëÔùÎãÕpeÇp)T#5þµRRè­êt ;ˆäÒ’#T-ðÉ}y¦­¿mDÉ)øDj“‘ñwˆC&+9)5Ûž¡ó,S¥ùÌ`%Ò*òÏm;ÌÏ¿-ͦµÙA¹aG-ˆ·É»lS»ˆ‰oî½QG¤`ö+„øØúœ1±é¬¾ÈoÈkšöƒFNñÜ]ÎQø vyW‹-@wÊ;ˆˆîò²$˜nÑ,=·2 ™ÑDDÖæÓæ…'mdzÑkØ ððmB'óå…ÖÁÚÕßc#^íb Œ0b+)óŒK I×÷GP3œ ÙŽ³ÏôxÖÞTÎÎYL‘ÁŒ gfõ³t¿‡9ƒa¡iv™Á-ºç”fØ¢F‡"O¸Ãà»Òt³½ée´³éÌ;†&ã Ú–—Ëçür©b >^&0¢Â5±êB½„m«ŸŸSüšç£+ÅT¬FÉöÔ'fy7¢¹7Ø9|m8F!Ëä"r/5BÖ;hê ƒ½V:¬~W2•U§C> ÛÈ3¼@Èl ÜkÐi¶Z­ÊX$Ø·aµ/^”Ø[a´;‘¡:OûId‘ûÙ&¯?ðÅ,èEÜÀ€"…âV~KL'|5m{Äàö÷YËj“¾Pb©Olø t£ÃÌïçÁ›H"7¾ Œ††~ü·šÿ[*LÒŽìÑmÓí@yýõ†ʧÌmK>¿}ŸÄ(œrg4¼à¤æx}y˜¬ãyÍÜþ2aXâ—¦ýZÉ•úRabëôùXãÜ2Å÷QV œíÿ¼LWÙ}‚€ø·«ù—ée^ªgá Æßí`ôn%p_Á¤ˆÈ®‰Gò€³8„Ô¸ Y7–æ bpn6>Y£&Êÿ»æ["èGq\4¿R›Q/^Ðî@®)¶kHò€¿A nM(ÔtÂ\=ÝÒS/^`™9]y ÁÀ«ˆÐ A,Rß}å‡Á~ö.ž–žßè¶{ýœ¼Þ[Os‚—^*¨L)#l ÌêŽ '¶ÀN¤Úá,:u3Žá¦‘Ý~ˆW©·Eù¢‡qËÝ® –]©°ÂƒB[My}{³Äí«lÕ’z³ê\'kÐe8›œˆˆcÉ`iØÂ ™g/¡òæŽJ&ÎGÐÎuäˆ^Õâ8®R®ô-÷¾‘‚à› 8 ”,ÃßÛÕXÂ`˜ÆS°¦1Þï‹‘p£²ÜÖªãêá»8›ÏÑbdéêš2ƒV×Gy÷ €ÅPÓãzC™3‡Ú²¯nžp{ÛõN ‚‰mm/a§TPU–A|G¼\‘±ŽôØ|_½'hØû¡‘ ’Oº¿NzôÒ®P¿È}ZÁñ`umMTY«ð|I¡²¿¤`½ÙuØ/¢·k£*Ý“ 'åpÁó FXǺ+–T´u¨©R¼”;´‘†õrZé»{•aŠ+ñÁÕ}zÅ×Öf¼gç¾´®"¡HÒuvWšØéô;!5ƒOý3ÅÍþÓV¥_ºb‰J@’‚ÕbòAªM97ÄÞÞÐ/<Ýq¸qiC™ÒÉEOß\ ÕWøXi{/žÙûV´[^sNX±µuiFg Ȭz ÈVdp·±ž (Ù©Ô™ÇæƒX›™H—ÙI§ög§$ßl\yô ,óâ.ÍÜ”X,€üJ)аwvm¼ D õì>´uø• ÒÏ~)G*øŸ¶U y±'l9œT ’g‘·WIéÆòÁgÄïaµ&Í«QÎí{ø8;þYxÕ‰Cë¶<¤?°–9¾š¥´s.­ò g†Ê-àý‡6¤8gÁeqIn§–\Lpä’‘!÷¨ìàMšÿ$j¶`µ­ç’3ÓÂrŸ¾[K< [$ãŠ4«ƒ ª®°rˆbõU—Æy«WDbKˆs0—@JŽ^¤Å¡ϟcŲ"ãÓ+–åÍ*»q ‰îŽá°â‹…1¿”löb öëétÚ«2*Ü K”K¨¡óòцË|-hª‹°ûÛN%NŽ“]ü:Z®—æéq½èDuœ$2ˆ ¨³ãb|”–%Ÿ&ŽEÀDÿY¼\+®fëf=üæí¹]¤ˆ†ðÓcë“Öžy*é…o8ú¸cÚ¹{clÒü•Ý¿…©§CfZ®jíf}5€i3…wH1Úq×h P³«ÌM•ó>q‡¸vÁ¼´`ßY®¸JóEtÿZtµžNñï†ITY ÔªÂ]³Dý©ÁmÒt¯°¼†ñt¶°)ŸÑÙBZ’>n‰d0ÒÿŽ \(EÂF3£ü Âh©¨Tf|X³šÞ‡©tV&ùï˜ÂÐŒ!ž «Ê²V†Kâ–b‡Š€e`êÜùý¥Gøµ|ÓÞø'¨ÛÜ[&äÌ‹I…Ç_˜]-»ÙMcãô€0èI’Ù &qÍuî6ãK?Å&tI8jÿò€üä” €T̹Ñ`¨KnyB®G?m*/¯Él¨Ou§‹EÔ'Z”ZYó ">D‹­ÍôU{Êš1'ºâ,­ijÒ6?´Ÿ¤VMÜùN{õ|$Ðyec¹@ÑM «ÁF$Hd,q9¡¦ÝÓX'ÂE ð-Ö]"aP‹ßfÂ"S‹4h-]I±H¡™›òÑË$hc‚©Ð}}„?ïã«%ÄE¼…:n£æK6à}UÀHZj‰2ʵ/þeŒ×€SC¡Z¡’¦Ìñ‘~ðòaŠï>˜tÎ>Þ¬–2’.…ÍÚ¢µ³(Òþ†¦®`qeYTI®Ú€w¥•3ÈU7=Î/ô« 4ËE‹j±¨À—Àg€°.UÞ|§Ö)(/¶äóÝXw"ˆ)»%ü¦4‚Éë»RÎfK T ¢§܆ΙeÐ=4áG_ é¾+QW´Z¬R ;Æû¬LøÅtï!œÛ Ö¯übðòˆœG‘GiY%#‹võø¤àÝŒ {–ïÃïä_Ï?˜ ©y|@—‹×ß²ÔÖõí³Õ³dÆ—Ö¤zíE`sƒì ?í£ ìïâ1C ÄaR§œúÉ¢0$h’ ß«#Ý`+jY‰BùÃüï\<\y¿É)FÕíŠWr·êQ²›&3ô“í\• Kû}§¯èä ¨'²ç-à]œ¾âm:W½{¹‚Ÿ÷z/öy¿ñ/Aó³ou·CèãaKšl\õg‰¨··{R‰>Ö—Óîn©~ +—Î\™º_KTQÈ5 •욎ũ©ªe*èyz&"áÜXãézM¯iˆáëúW'€ö98koV‡‘-\!VÂI®7áx”Öw—>ßl¥Á.þÇvãÏ j%w_w»\W9+w¿“ŸÁ5É¿úþ\oN²lÆÏr»„‹Ÿ–ÇŽËØ(óÉÊûÝSÌËb”ÝlO;ØÈÚåúè¼ 1ÛÁ’–œ v÷»dGãZ»‹)ÈŒ–i«P{î‡æe3‡µˆÊG{3Ý®+µXF¶œ¾O<  Ó5" Å›..,vSÆq‹Øf0ìÃmÚ ×0ÎNøÙ©B›’88ËEkžÙ˜¤gµÎ«¥àwÂ,+Óß$_ŽÁi–Jët%Â0rÅE›@cýã ú6Ï–êIZGœŽ§"ýÏÕFiHX§6@ü_3!x•%CߘîóÔ ÃlšíóVzÅ 2*¡ßÁ‚ÿa'z\î˜rA-¢ÈÀ:µjÑ`gVžË² DGÝɲ)KÒšÁž€÷÷£Ãù¾Âv2¸Dܧjªv‰i?  Ü‘ÒŒmþ{Œóý¥íhŽý†Ù+@bú,,C¯å!@ÙÙìD† ÷SóÅ©I¿FI&§-‹(WÙ’0(ó@²8¨Ḻ¬8¬Lr3&èÒØ¦vµK/ü¸†²PMw™rûôvF²hÄw6OìÜo3Q4Mj|C[µ,FqÝdÓ>œ’ d3}¾¼gCÓt_ŽÎy¨1Jp+¯žyµ”«ÁÍÃæŒ&mnƒ{­ÈÄ%^ÍšÅÀ_լƽäsrµËïƒã›e¬(%#j‘Çš4®ÓWKùÖ°ËÚ`é`iï«x¹¨/+(Ù£¦km“´ªå¢©ÍȽím¿U7Ξ…Ñø²…1«•Va$OÕŠßõx´»Ã†µÐo^˪*ºô@!K0Q7 Ö¸'ƒWÅ_ùH3ºQ@4Ÿ"–’½•Õ $+Oš>êËAÄÛ‚,!¬£Ãÿ–4áòÊý“ r©8¿ÑÄ’•äJÓÕaU¤‰®Ö"/ßâÍ>xÞ<¢1õ“j#™ÖÅÏZw’âÐr¼ð¨Y*úŽUSÉéQàÑ£åÆ ÞÛÚÒ¾ }`_ Hð-µLÉ\ÉéP1—À pî;bljËA˜Û0^s¥a^‘àmG¥Û ÙiòÚ9Ç1­d{AÆEŸ›[i² £oy¤•>¸üáNª %¨Ç¸ˆY\dјÀ%|FV¯ä–Ͳ\¤š®û¯6K* _s—HŠ”ç«÷ JXäÁ Ä{Ô.üM‚%šÊ$ðµT ÍÕ×¼¯ÿ¥Iåpº ¶¿ßÉÇgr²õ\{ϹO|…2¶GõÃÎEPT rbŠjTÏZœÉ¼V&SÒàØW–ÆR9¾é®Ý}rÙ1hG¦lì(²4Š+a”dJ×÷ø!ý² ŹÑ@£ûkACHË.Á¢CÜ1Û»ˆýåý$X&úïbJ%v¶‰ÊÍèÇí b¾qÔ€D‚ í¬#*‘bºÓUñpAö¤Sœ÷&ðûþ»=NÚêê9tI 'UËÂÝ‚œVgó>Š?¾ª|ó!F1]<Ýÿ7àï,&Ôä«×ŸSªC‰¢³³½êd;¶…·ÅÊú¨–&9hÞö}0š”šQÀ ƒf¨”eÆ÷Z©›dŒšÃ«Y¿éC'½Çíª~)-ð€÷¡ŠO.o»ÇF7Œÿ ø#„vì¨Èì/¾of`>im¼äBtކÛMP5¦wãÜvbÅî<ÂÒþBÏ—(!«ÒöxÆÚôJÍWCÞŽ–§TX]2c=?1SÇlL4uUø×ÄÂN_Èw›¬â<þu9@U‡KŽŽÒ‘3Wcùšâeü²-7ðXüµ›î†TðúØw”²[w™‰È­ÝHYDÄéªþ†õ""ç%¿!¯=;»¬ÍÅq:ù: å¥Ö£ø¶´z,J³ìÒWȰuTY<­Ã+Æb8aá8rÌÄi‘RÖEêQì?žä¡²Ó‚ëpŽœô\˜ä6* Ö¼_ºÇ£Méš{Üi-Êÿã~ŒLó…¢çšóUèªÔv†Ð8ÏÜo%Ë&L(Œ{»5Õ¸Âô=…¥´A“ÿ×=EM™1vuiœ(b¿ŠŠ¼Ó¢b¯û™qæs–Ä_ßü$tšÉSQ„ÆdÉþži$$Z†x» 3h‚¼›z¿­›. mñDןØ%¬°dÐlxdDQj² ³‘ù£½ì |DŠÂö ‰¸ YÝúS¦Ò ªœ ±Æ-ÍJÆWê†QSæ½0Sl˜hËÿNmb'ò~qþµ¦ËŒ*ƒîç¸eœ,úFW&Ñ¿ÏB¬-Áç éä­?`ÃoÔ”«‡ÿ.ÿ¯Ó¬âl×:({ 553àN:è×:Gž¦ÆS¥i†âהγ¹L;Ù5ô—ù‰ð4½]d×wñK»Þ˜ô9"u³¢q.³ãnqâÕ² ¼¸¼@f@¬Àx‚mÀ{Ô¯¯s=ìFLJH¯–ùÑ4—l1D÷£WÞÜxž¹ôÆ(ñ:”Elñª £†53M`‚ 7ünÚâî–€Pk]å{™â‹%f‘—àÍ#öçƒÙð²35¨Gw³‡³Ä%*¶WÑ$ŠئnHüˆÁGðŒ5ÁAÌfÜp/ï:׸„èåf.GÚ.vÛð9$uZJ8·˜jÄX_cÛCôöD …þóI¿ìü9ºX“öù<=r® ùw/ܬÆÒ×=G5_¯ ‚5j—Xè3„ÑéϪi6v-Žvõ¼L’CÞàÌò2Vó{Aü)}âˆN-> ДFWXõ_–½»gkñó§e•à$‹Â!žùÙ/? 4¤t ×45# ÎVL)<VÏÀ}z—ä«ÃûœQ¦2¢®BÛB·*ê^6Ë!Þå JT²®=¿LüHËÇѺ+Sj©¤uÆñŸÄ‘ê¤ZPž19w_X&’ š®ðY2Ë¢L „BsoƒD>ø€R3ªbüš3r™.‡2ˆ’òÏM™'ØÅ¤ZçhEKKOíÔ§6¾ךշ`¤v²ŠáRÒ&K²®C¢=yÙ=­ñ7§mPO6÷¦o´âįß î(ÏÄ?'‰H-¤­¦xœuç"¿q,õháÃuöÃNŸÎ !òÎèâ +2ÓßÁä(½0þ!ÃY#bdwgàƒÖ´¡'Q¢Ó{ 1È¢ÒWÑa¢ÔÆoÓˆbS2Ñ«!Iœc4×sçŽæ‚²¥b çËN;N>œúÆ’?c–èA‘Ë»„c=ýÒŒo¨£ï5E½È‹˜5ŸáûœÊLÛjlóÃdÃŒ_LÇâ²Âe7ÉÔ-« !ˆ„ä_p{¦£ñø"ɵºc§€–-†rTêkÃFëø%²˜€ÊÈ-£aÖ6¿‹zš $ÖŠöáÃøÙË^–°X3XÖ“ŸÕ˜®Qˆ€oÃÿÛ:¿ŒïD.“Ä sÉÍh<³?2MEKEãI;™˜õñ÷$jîìÓØÔ¤ÖÆ‘Í•ý}‘EBˆÈ1Eýg[Ú´vYàr÷ü€w‚7/v§s~;€ªá¹Ê©¨5â)[–S ázW¬m@²j™£lôíÛ“M¸¡Çâmðd  ±‡ú‚†p€ ÷ÁçNÚâRØCÌwú‘aw"Ã*U<Õ»p3þŸ²‹`k”{Á=6¤‚ôç~¥½-#oDÃÙ`®õöþþÞyõ+Vˆ¾Eq9t£]4çJ÷K¶æýú¿VþîÄä®5ΟŠ6HäØ œ°L׳ôßNääMvµtãŸKÓ%g+.‘FšŒ<ßà)?BÖÇmô­±m@ëU¤…›Š£Hþ3ÉÓ.€cß„žÍRã>.q©¨ü“¶|¾w„" xÊ‘äOLú?£É!‚ð½Wi½Ô|9üc~”'“uCÊÝ’DkP«æžÅUôgšé85€…f|}ö—ɤ„!ª—7mt¯. ay\‰óêa¾^x|ÒKê]«œµœåttùò†AAÙƒ1E¾ À¼¸úÅ©š 9qD*OKÏ”çpÓ´1ƒ…Ù?¤/«×NfÒ~ÅšZ“…pI= Ï÷,JÑSò¿H’Ï”G¢ÞòE£€á´1é|züË^(÷Ehe¥„Ûé|Uš³ß±ä׎EÈ¿ƒ.`m\æ#%D#)ª.¸èÛK}«ìEµä)Æ‘à{(g¬ëçñ»ÝýÍ¿ù ª*÷V/oZ”Ø´¶ºpG7J/É﹞bdMl´ ½¯: €í~¹ª¢Pë·ÂV\‰æ%7CšÚ¨ñ¥8¥ú™€böÓepé5Ë ˆçíqë_* ò§*·Á^W€žñ:¢ô‘†æÂ¤š)½ËYë_ÉòeV³<NOâ«Ý»²ÖqâÃ\^}§ÖújNœCº]:¥½u¤sö˜EXR=@‡7"¤Í’^{ÈÇ•Ú9ª{†[ø7¨| ÎkBŒ¹Ñü¤f•-Ðbwq»]}P ÍíDR?ð8a--}ªä1¡&23öù9v?†/Üú'|¨FþNU{—ꊡ3*;Ö`<O"ùòr©Õ·­¯!S Òì±É(¹ ßi¤Q}·SüÛE 7aû<à)h¢˜ ²„æ²´i«äØL´E䨧T2];©wÇvž=6{ ÞwÐQa¼Ÿ`Ud=-‰fìfFWúžŸá „Ýûí%}`»~êCÜ**‘.ÉZdã¥DAà›E9¢R£ˆð]‡!í¸6ˆ˜âé!`­éáÑ2¹1¸XlWµó5ú诪ŒU¡ ¿‰Ë·'vâNÒ fð“eµ4+¼þ ùÑ`¸—]pðÙ4Îè7_Š@"üÕ’È¿äÚ9áa7“œ-‹ái^%£¥“¹®7[…;D0òlê?*¢á[…ô<«õ‹šõošXo/ýÝK–§ÒåàM”®Z¸?2]!—ô<|¸ZµQ»z™|Y]w˜Œ“†øÿ`ʯݾrœ23ûBÁÈ“)|V *¡î4Ù ~YnÒ’¸>ÙÎAC × =ú»f¤2çqŶîÚ? 7üXvîX }Q®ô©ŽòŠÙÁXL[2’z¥F,t=›B™äõ·‚^ÿ/c¼Öó”‡Û¢~(Þõ½bþqƒ–ËUP*¬5V¢0{!ƒ'2-û2þüQ#^;h뵸jZÌJ/Þ±mS¡®ì6>S=MÕ*¨÷0Ãã¡Y%å"’§~é–k¿®îcC3·1tŽt±Ã0Oe!U‹CTµªoQS!'‚´# |öbbAÎû8µ'Œ°Ù—Àf5¸žÕæ0¹ÐΔ‚ÑtNþUBv¼y”Sɦp1QÞÔ¡üñigà~;!âžÐ‚C¸åfØ9¶ô2]GõÿÃE«°gµN¿WK½ï{G-5Ñ_íÚĘåÊ]Xö­(l&Ð.Ìåmµ¯ðþ›ìóÖñz°‡Ê]˜¸’ª#@Or¦ú›^ó§B/†³ÏRJk$†xÌÆÄ’b‡ëžä§d§`0GŒ |q¦Ì §ìØO¾}ë`Ð.2ìàŠ“® XÝZÈÉSŸ6ò¹é%Kp[Ä%øu6c E{¥ô´7ÚX>$W¨A®4 q¡º¿Sµ”F¢QÞРý#®žDt9}bƒëòªc„jM‰BTµØ‡ä\À“6ùÚ5BL&+hÓm8£cƯº˜{(¬Ï?ðîqê¤áÍx³u€Ô:~c4re®šT¯›½éhì†mfû?Ä·“¤Ï¥ªœÊ ¦t …ð\‰/^±Ö¿´5¥OŒššO” ‹:Q߬jâ=ÿ¥ö"Æ‹R^® `_O_âxàî›O‹ÿ–‡,,GÇÿ_•öRÉ›3[¤À8¡é?!éO¨ö{ÆP¯ÖæÐ±oÖäÞ.Ät q«f®Qަ;ƒ™5DŸ­ruôÖ+ØÌFHâPXè´EF*ñH#(2Tj0ŒCî›BiêsQsH¼3Vè0—½?’åÑO­r—(çà ?1¸Ò=À© .‹ ûn'®æscq¥ƒ»¾³÷»u¨‘H%ù{Mp- Ûul†L0›‘ÙI^^}JZØ×ø¤pT;?ž£Ëùqv˜mDùvzHmŠ…$ïû†¹Ž8mP1ÐÌ6…ºXx"]›ÌÏsG&ÚÄÁÚ&íe³ÂØÄÓØÖ3Ï ¡cŽþY7Ñ3ÇvÀÆ»¶CA;{„´Á@JG»Ü-Ïöô)ôC§Xq(¨¢‚Cð¥ùaŸcuÇ_ïwΰù#~¦ô!³èj2Ã(Dõ ]ž;î• œÝà ~D,†’ªR"Î]4ÒÐà[•Öèô.bøMF7ŽèмgU½Áôš¹W|þ‰' ÷l²Æ"~Gí;¦õi«Ñ1ðNÈÈ^/ÔBæo”S´“Å­šaR·ÛÄu›/^1”hs>—Ú–?I¤GŒ¿!™1ê$w èï¨ 9ǹê¬p¢qj¨Ð›B*ŒÁÇ}¼"qp3£6È®*»1L–dT AoüÍžÃ@SñÄÂÚXøÏ2†­qáÙ?Ë5õÏä˜9Œ}*òmE 2Þð†9\WŠâreÂŽh «X€ƒ8‡z2\E­Z¾SåÕ̶¢øBxW‹Çgþ?,,L#™JÍÓ4 ‰`˜çý]Àµ¨^Tž`‡cåN.¿b/Žn&a³n¾=ò)ôÉnÆH-93)qwÆJa}cJz$ΚÙj$Ž=ì‡4‹cµ€1ºùª—¹nP}ø–‰ $8Ó£¾›%!J&ÀXõFŸ»AçJO ´íB#å€;8 | õJ ÷T„saR¿ÀmÁ•0æâ¢ñÚÁ@Ç»´Õb†lÒ`q­>U"{²4Z‹¹Œà"Ôò$ Ï‚¤ )›.Sxz«_(èÿkÊl+B6ø÷¡°ô¹flž¥ô“@z†tšã¤œÒÂáQ ­^Dc Ù)_ôÒšíjƒĬMüñºÄ ¦4ªE…ÿH€^ë¶ü‡ò¡¹ÎuûBÒ í,¡ìêd¹r‰¤®=¨¦I7jV¥r}SÔž Fw7*›4š.ÃŽ]*:#Hè>5;RáØ¿V ñøž]„Ö IëwFUTcjÇ0ãO \]Ên{Ð:½›UZÕÙà̪Q j0ó"¦&ÄRÝ.½kF–jôç°ðdô»¶ßÊ¢áÍZëGI)ëþ=™5|sCJÖ‘Çí6. >ŒVÎ~¦ˆ™ )­¸¬s·’§7Ûžoàã(}=غWOŒTxN7Ý"yë 5‹ˆ·óÕ)áy,¶A]³K†!ãïâNrëkî²uð¦›7þ;9u0ÑÃ?Gšƒã÷oÓþÝy†¢" Iý÷]áâôé«Còcy¹_L°Ûë¿Å‹m-´íÞ2å5çVÍrØ[ã©&ÛE…2tlµ53„½ƒÊ[~Ëjœ<°Å¼ gJÃC³Oí[ÑΆ¤ŸŽ#¼ê< }œ¢Y›+FF€Ñª1Åi†çÆ"2½÷RiT¢FƌʾØN±ûeé=½è±[ÄŒâì­s9z¾Â·ðÑAï bûA©ûh„Ÿî(âvö°\ðýz³‡…_‰{Ÿ,qÚúi3gÐ|]NºŠšÎ/}­{°à !Q$û[<– v–ÃÀî8 ÷á,4Òà_‘£ m­¦ ¡ºíªõÅ«?Ž2Îå1·wvéÅ¡~·G ”Z#)Ó'üÓncï;²^ª€]oMlJ/Ñ&ÖR!;q>=ýÐg¦­è·ò“¬¤ŠCƒv[®Œ ¢ˆÔþÐ" ÞP7ƦO×ö2Dý)ýÕ~ ÂFÝä5Ø•½ÜSÏ>P Æ‘%ÿï„t³“½‰'¡))_îD¾¦|4/¾§vFè Gœ!DÀjüåX@obñ:£ñ$›±"ÚÚ,ÖM²j:?qŠGá=ýT\ [.þ(PMž[«ÒCFŸî;o„çk™žvC<õ¯»”ëñ`T›¢d “Ô\÷Ëþ=ððÀb3È“?tÝăéEñ®ÓX!BK3j„ ¢ã´-;³Mƒ…dàþ6*/K>®½ožœÉ¶àGÊYù%1ÅkŒ|N-?ÝÑ·T¡igÖtòªÙ¥âùD¼J,ÄàíUV¦v°ÕMìV9Ø})@LGÑ}œ?IÜ:I}ü•¨…ˆšºõ‰]WgS2øŠkfmÓ'¼Ãhœª›¶\À½Î¤Åãl¥œE‹<С#Þþ€äOdú«ibžï4³t¯pÚl.ª±ÞíPC5é‘^ùëY h2=èJ[þr®Ôr†ñ=ï\¦ñðãпpU"z\úžr¥köª¡´éθ©Zfж_¡“Äó¿ÇTDó$J¯7õ²3üÑTö§ï¤Ævò?4ZÌ•Ib²‘¸¶¸\*`Ò¹Þù*‡Üç=•­ÝÕN¿ý?Õª´R=Û”É*r€qndÃàÚžqüM¨Æ–߯?iÚdèÐýÿõ‚,fa/—óDPY„ú›¡ }uwÃÐçówEJ}öÕ/7ËyÔÌÒŒÙÛ½œPC¶ùMH‘h&­bɥܔ‰JÿÃo‰Ñ,Ãan†C¤öT/Ö ™‡ž?uÿ¾‡bwÌìû¬`p?©ú|»ì5ùA •ì³á“Àt5 gHú3ߘsœ>þ–êŒèµaé:­Sø …Åvâ¤]{ˆò€Ø(PH*ªjú ­œ¾Å±ãËÊ™-Ç” ‹j`´'7M°‹; fÖ„ƒ“ÃaOÍóÀ%äT1z÷g©Si\t"ã· `ÇX+Hï< B±)|ùášL·ãpU V-ˆ Y{ÎwƒÎÖ2Pžõ 1ìîH¯m#HË ‰6ñíßö˜œhÉ ‘mp•%žPÙù¶ŒìÜÊš=¿s+$¦_¨°òç ¢Ú1YnQ/9ìö«FÜ÷EC ±°*Úëñ…ôýÞöm }%´ªtUŠ”U} + Ô˜Âe8yöÀ:o^@éK7Z¡ëGÓþÚO|Úü,;YD‘Ô–‘F†6cWEEÕjå+#uìib‹5hS$þ"U%Š£U•¤¡qFw';(\Ð(àÑ+ n DÚ;5m¡f)¤I=òù"•ã³jKÉÔÛ‹,ˆ8ÞìÃUg´xœ–}…ä‡LÎÆx”n¹ºnæ¡Äý}ðŽ|Uí˜ÏËz0#®~ÿ Ovy+Öläºì8Ë:E)ô3 ø"È€×ÄÎê!ÀW*Q\ýx<¾®ÂÕÎè–%«:%FE¥^PQ]ËùÎ#ƵºøRÿèÉ<†äȱpÔÁ§Ä{í±@j<*…Bð#ËÕ Êmú&cݰò3¯ôDäæËô/^/²düU9"fM¯Î[’SÝ|øyèÔ«’Õ@!› œG fe¼s³Ù¢?Ù0BÜ.}°Xv•]‚§áu¯ÊÈ>‘ (ºÜ²HÝ/ä¬ú±ÐrרY:¶×³ZüÒ-µ¤Q3Þðy­ëëÄâ6Ç»aáÜAâÞpûÿkŸ Ep!ãóJP@_´ ­ç#5Ë_cã)u„g›š;ƒiÌhñ³Õr‚Ÿ‡Ï%çµÕߢWl(§Pý…@“Ы ZWØ>}»Ú¾}6xŠiŒ £u‘BÓU²EÎ#ؤ©{u²A…\"Z]Àê…ƒb[C“Âð3·¹n ú7e ¨º…UêÔ ¾ý¯(xª~IE€r}ðºiM¡Ë~u“´¡Iq½’îTp)„¥Þ»«Bƒ-ÅO“ÿ'õ8ä5yg95Í’ (ŠtXM3qYá(JhEó5_@Μ¤Ö’Y¡š3õ€hÒ=o×ÔŒý3c9KHìD¹ð¼®n¾Ét¨9ŸÛϽüÕÒ¸ÓfÖï_ø4/j…4Ökß’«Ac 5½°èÛp•̨@P ‡ƒˆK¶9ÖŒfdŒ 9iEgX¥¡œ1’ ?h¸ðÎ33ýVUxcîŸt °L1@~?{ˆî,×µ_RrªIáÚEGª—5¶M]+ÅÊè°Tü`¸÷&×i{<úß…a["ñèòáRš5¦eoª^ô„Ÿc*Øè²€cÖ*åùB¨É3žvª+£ŽƒjXyuË>·ex}Ëpæ}P3a –@tZu…ÑXÙXQ9»]ô¥È~°ÞÆÅ¡$éñÊIU†¯kAMKv ´/kÑUã¶¶ãZ¦]ªp­áž­Î­æyumB.âKÇÆ‰Zs©b\ºb§Û,?™ÝŽÑ‘ˆOúßË¿g}>»" ÚÞntγtÀòwô}9R+Îøõ†Ö 6üþ"íSÌø£æÿúºäØa¹ØÍfz¤v컺x£ââ8Ç •œæ÷´Ž1ÃЃgk^yž§XMßú'Tºy‰ÔŠ“]û¸œ\Ô»–ÜXþË0¨ÏT¡[I›Ô4«”çÍ íw²'мá­sõéÂhœã"løäˆ -v½^íŒç‰QÐoaų¨ø^êO==IæûN^7C‹ÿŸk¾áÍZäé´–V¿²Ó'9^iú»›òز̘ÚMïÛtz^Rl Ê8Ðÿ â h¨u:a-Á+ŒÀ ¥Ë×s—a&…Кœ75êßG‰øS>k,kü aúvŽ‹R¨‰èïd(#aÙÌfŒ)]6qʏÇ’ëÐx6ß2Crÿ{ bÿ·¸Ž°íŠèí!¸]pì©™üuÂ+z@bUÇCЭ¶L¦H‰uýÄèÛP)D õçÙ×Ò½vMÔB¼«ƒVÏú„)ØFà* Xõöÿ[V‚rërðó€`Aç׿mD-TTe U-G|~Ø¢‹ÕèáK,~@ÙâÔö =³c·*ÈÜ·žùµ:7U§ñdþÖPQÏRÌgk; :ª64ÑKÚÓ!8×Ðs–lÙ*QÌLlU™š¿¹™·‹ 3 Y(ä@UþW,Ï‹÷²=‹gÊVð"h­ÑóHœ c•%z½OxÁ’ͦ°á“ã¹Ì•®7ž1V¿€€¥Ò¥Fb±.›–2@?SÂ4y³î^î'mq-kNJ_®Ò´bxعÖôxÛ?ã¨2·|1Ï!RñÝItmëÆF“ž²¯-U—´ÌìuÒ{R™/O×w©W‘ÏŸ$QÊàõwš MŒ²“K2çÃÑ[”´é@£Y²™ÝåÌ)Ãß}Œç̸ÂÉè’üÃÂè}ñY\¤ù-h˜ÝVTI8æÝq î£ÐÙ”–Gô^X1?ô& ¯ŸÚ„ss,HÉŠ…æù;Ïš”Ž»µ½4‡jójdm9`¨7£DaþŠGè’Ó”Q5_HˉG>†=˜{ä34 /ט[ תR>ïË8¦éqw¨¬g°Ç€"@1B²ÄÚFhÃõkò¼E¯ÔÖâ¶ñÅuHd‚90•¾Ø­œ¯pSDµ#1°L~fs§û wI°¨‰5T¢aSã¬Å¥ÖcÛÔä…;fa3»=ÔPÑTº¥GÙüÊËÀ‡Ià@¬Ñvmû!ÌÇçÀ”¸òþ6ÍDð?i-i†½œ®-dR60Kó”ÝW~‹Ò æ½f0æbLh²T6"ÄÔ×Y¤Ü£¥Ï›Úx¼Ï*¤VÖdžÝ[LE­0/Aº3U©1ìéÚÜ®@§ž¨T8]µ†¹(ÛE;Èïd@/8—zs>"g2äkß­J4&8¯«Áu–j^Y“·¹ È{œ´À UÑÞå5¼¹8Tõ„{Ûá¯RÓG8E?ã-Œ½ç탺®HE‘uÃÉ8„½¼}LªðJÃÊe©±²aÚÂÖÞ1©¼xvN:&Q‹œV¸!|ãï=’P3Ò²µ¶‰ÂÐ’™÷åunr_âô®"ªôú œÀ=èÚI* –çËüC”ë~Á,Å^tG¸Ì•ý€1 ÿ$õÜÂ"ɽš·hb^ÕG­#•2;ü8ìx±èyñƼ‚p§ ½w™[æÀÙkµ¿S7».EŠ;ÿmÊÒ¤×@i. NnvÔdÙ¦ñ4ÿc¶&‹®GG_IÊ>DMì Œ¤{YHÞ&¢º†ÍÕ&ÒÒM²P_ͬÓM&îð®dQ\ŒÏ Ç]èàkůb1 8ÇGÔÈ!d„J CY€ÿ¬¥ð®é?öá%Kaj_/H&Õ°#Á›î’Ïñ&–_ý@c˜ŽÍÅ4 ”uàP͢élBÜ ÛüÞçL }W‘bÍ«¨ZÞeéeu‰-u«´©…¶ãAhˆ0aˆa%C gòÇÔÓÄüµœ–… íÙ©•ýÃÛøDë!#Umýa±X|æÈŒiú`#èE[·úÿ jÓ¯~XºµãURjçLÔJKsÅY‹ðRq~S½4EW—Ÿç;‘Ï+n"ª\êiýC$Çú+~*K"˜%G p´ÉjlÇŠ@ £7µƒÿLÈ»nše{ª%j׉EœJ®÷§¯yYü^5¬Å¢<¡™ÖÃj¯å{EuEþŒV‘¿ñºHA—ŠožhBrÜݾé–võ3)iHIn'@_åp+·ð†²€LÁðGt2YzpŸh ~kÄÒF¾0aåÆpØg‰D.–?Mº’Ý<}IÐïžr ”/€€C´ìZ3=HƒÔøj0¯½M¿A:¥IÉžé™@UµùÊÊêQÏ˧ÂéAQ˜yÆ™dw´{ëÙ“‡j7ŸŽ¢½ Ê×£p`†„ãF,hÏØÆ¼Îk›ØRô|æmW*=ó¼ö¿Ì=Úæ!ãëÉ.ˆj¤å~<º·º¾~!ø”²éTŽ ¼€•2Spo|$ÓîkئðœÓ§ß€¹Ä/QµóGÓ™>È ÂÌÛ"‚ ‚+DCü§ˆ«b½… 1 Ñ¶ø+Í2¼P>« X·³w ±UÒ:žÙO-ž_82P±Iwõ³Úâ®ßʌ.ð-m~¤Û3¤J—XS´6ØUÆÍQjöÞé*K}:,¶?¨Xg[˜áÍ8¹`ljBinر«•y᱈ðýZáK—È-¼‚³ñlË_\²È±YÔÓÚ7žQìM™wwçnÞzF3ßË*[Ý[¯=äÿÃÃv…¡ëóXªB†u#o^Yô)­gb?”¦ ·¡È¾U’=ùu®Â†oi¾‚‘Ø›²,æfp1s¡ÿbR+:=´Ê(-ÔJgĦx²¹ÇXE)딣)ÓXôû//Ù´ñ‡ù\X0Wë”Jº»¢Kü.ÿ_5£ë[9·BŒGã瀳L%P¯.¯Àæø¨‰ÐË£šÖ¦æÖ‡ç­ëhdž29ú¸’ÃÞpãéü=G!dTŠ’êpÂùU n§}ªe”Íèš8½-ÿÛ–[{ˆ&¥kÏ3@&[7dñºsÞ’êôº¢Ã9:o™»Õ ¼Äº W“ê$!hD£”ÆD¯ù‚–³"‚§l ožµ—³²ëX.3R €—Û«{œVñâMñ_„ÏOž­ØøÌb l  5þÝK‹ÐÙÁ|÷89Û~V?ú_›ߢ$‹8ljÜìzuâg~ÓUu¿Ñ™,€3Â[œyÌYW'­p¹È5­euØ1§fd^Ø›\䊖„›üÃÙÖÃ0FBIZ£Y«Y’SáTA°…£ÕÇiýþª»§!ï)f}+³Mñf·ÝrÀ…œ#Ì~3ú l0öÍ XNù‹+R rÒÖ³á‡ö¶ðr'ì_ $ÑImï ô"ªkYu*´IÌI/YÙâOH ¥9‹x8“J°UQ=€Üõ2ÅT{pí¿aoAŽW,¡„Zµ…±\С硚púÕÅŠèð ¦Äô6£Ðòùã:ê[v‘¸xÓ%©ß‡ÅF7/âÄ:Ó~øá¶dØÐ7ëÑɦ©Juÿu¬ÉH?‡u&Ï>ZÊP@æç+*¿³ªÐ˜ôÒ uŸß¶A:ÈåóVÄ'¨>ö±Ûe˜jEjžð-Ž äåž)Ü&hÇØ­¨–£RÉg_üJ^Ó×Ù®õ}ói÷íù‹pÔ8àü O1l nkù†f®XñkŽoU˜7m§[ßÎù`»°LdÖ™NÕ“C!ŒbãÇòdÞ«Zg2¶‹(¥FÔ ¼òÑ—¦)¤fxù׼YW’MlënƒP«¹À47o6§‚ßèžG'2kÀÕŽn2­·Ù8+%_òÝÞ¿@ß2²­±­vT{ßì¢ä³-¢Úƒv¢xÄÑI¼cqq7¿Œc)³HÅž*KÂìq=S—Ò^Œr³@—ÅÒi2íüZÓqCöý<*!M«.u0J>v¡3¬ê•›×þbÃCt³k‚&Þ {Á&Hh®·Bc+l`0ÜœË*½1IOÌ g’gîL…–H:€F‘MÅã縱MãÕÞ"°ü:èí‹'B^¡ ;[ñŽ}¼n©½òLîòשüE±†˜ffLä_-ÒCÿfÊça¨‹ÿ…p«Jx-ô–ˆŒã—¢g å>ÜNžJ”ßxñM 11È9>?øž€m†€Ü F7ê£ÄÏn¥h¡¬Â-ÅK5ä-=dº\—䶪¾w.5ŠS<_ßÿÑ‚)%éÀ<ð?œkUb|þì,ö?¨ÏùùÌú-ýô|Èé!¢nRKÒô¾¯ô Gw‹y•Í…ê6žñ9FEÈÄ`Óð—¾ï‘A.N*²/*xíPòã ä$ÿx¿nu%«­A¼lkP7­‚0¦²2 Ý|¨×ºaâ¥ÇßIg*[à4 Óå—Î*$ŸÛ ñ{=Dù÷ ,â†jogµb`.=u©.l0A±ÿ¾&̼ü“nUPKø±ô™RepÛˆk²Ü¹tÆL…–Ï Z Ô÷a¥å¶»"!Ç@[c%zž¸8äÌéîÜá¿…O¤=ÔÀ°õÊ‘Ú^êX6à#¡/×p$ãP«¶KÛ¡hÊÕeÉ´Ê#cÔ%`Äy4UZyÇz€ ]7 –¦“$ÞúZBÝȽ£@ªá6¹µbÛ"_vm]z—€û©¥Žp0¦xIo"l ·fŒŽÁ|£&t Î \ºB uT*ÿX ['XÃàýš%~É~¸Î }ØrÓÿ¦®Åº“Í2œ0b.ìÉ*õqµ»ßê‰\uJyÄ;MȈ"nŸs¿ªd®”;,³ïidæx3©‡z^õòU™ƒB3å¼ûãîr« GÎ_šª¬U"䝿'o8Î»É ƒ6&T#+š R`2ô׬\?¡“[To¶¬/8ûÜÖ<Ðê õs2]g:› }ͨž% ½ ,[º_Îõ{p#i‹±âšŠoÅ  ÓYßât}T%®UÏÝ:‰lå0G-æ‰R1ÙÏÄ:N¤ÊÙ$¸M:Ù#‹e½HàÞòœ»’“GúïCÎHøÑÝfùŠYÍõ®¥å¾?]¼OC¬œ,8oL¬mour½#‹¯òý× ý> sêV 玓®§*žt!]Ž<Ñí¶áPrd3Ù=o1ÈlF`‘D=Ȩש4N`!çlò©â¦W»&wR‹·yb˜BÐ@.S¦G#ê·ŸÃëNoÒ¢…²S×j‰ë(CD½U.‚’ƺN¨ÀDù‚€Ø\MëÜWè*®“þ¼¿£8£]'5©ÃCY…V>¸¹-‰GT&2Ou¾%Θ(?nó…Ða·O±6íBíÑúi¤Æƒùc _o{wš=lIšçZ,ªÅ¹EÌš+@G$.|˜šCNХܪ»·ÿÿŽÖÔµµ'—¥ $ßÍÍ;Yäù},µð½ý½vøÿÇox@’–º©,ð ú(¶e|~—ÚÄ7Ö/Ã9b3Ý™0m{Œ8ÔÕNÀëö4›uó̉rt]TüdTƒ»ñ–wY..æûÅꦀÑ)õt-&?ÿÜR‘H»Û ¯“¸¢%"´ó9—â§¼ZFóúO†õ;‚ýdÁM¶Ê ã  *°@Ñ‹¶"¾¼9<-*e=D¦{ûY´VÉŠ¿Ðªé9t¤5áE۟Ŭ–'¢øÖûŸ˜¸Lú7Ǹ]f–=Oïá\o?<'µzÓ€ñ!E"¾àá¶5¸_¥w_—\`«ŒŽE쀚¥?gŒGÕ­f¾'¡Ã"Q êqkÉ#'ÅezãDµÕî9äÍm»˜La找˜B¿Ï›6¥C  ÓŽ 1rZ4^à—EgÊ }7ñ Ç÷ƒA tÀáÁ;9Á6í ÏMG×q˜³“‚˜&ô`™‡§»jQèË ³:i< ÿwðEüW÷(Ð%©é×+æB#¿“SéBî©f×uò‹e6Är7?5ö ã~vaýHÍ[ÀýJuW Þ ÖŒ¥©–Äû2ŠÂýò„¥•I78œ Lì„3;Ä Dmd"j t¿œžhéOÎûž2±±ý¦sÅI·V5â“è^+÷Zx2ö¡<5íÐ+ùº&ÒG ç‚àìË{•…CCBX>²ùÙí±_¦€1$+A4aO%+õ}i¿½•rÞ¿øÒÖÃ{½’m²ú™?O¬u^rÑ-ÛÐbëÝ ¥§6¨)àд‹k,÷äOˆ³ŽúdUV4=;+‰&µz_â®k,ÇTh¬›.u6n›éÇðr k)R Ÿ–Kg»«M÷i#‘Gú2뤇öNe49¥Oâ\F~ž&“_5ÍÍ?ø|ÒÂõ•q5,|«1æ‡0-Æáµ‡øa½äYýœÊHÇ"ûÒ^ࡌ–ûäÂþ?6¦Ðk÷¢€Wšl`¥¥]äÆû±§>IjyzBš_i®ìéoÈ` hä[kXOœqþ§ïÛF¾âŒË"x‡‘þ#šikV±Ðl÷ªþšÿä‹”•ÆÝb0EŽtSlrþ®k%Õ°"ÛŒÈO¾, ÏØÀѱmBŒ¶2cµ²=븶 !ÙÆbùð¼…üƒÀS\Ú¾N›ìæ$\•˜Â8‡Ä+r j—=›_@sm"Uý·Ó'}ľÛÀlSdOîeTl()¯ËÉú7²ÑóiBñõƈ›HG1ufÁ£»å´øãPûu¨Å›=Ò5Òûg6¤ÞÁ7IMiÞAû¹½t=Ôþ±×ïÁÜçìÃ=¼í)È <ˆÕæ:á@½¼ò6cSýJ)30o×—Ö,ˆ_úÛ(víaoôæ<íU’cu¼>ýÚÉÔ`ýÖ%9=/¹fíMWÃþõÙœÌæA³ÚR{‹¦î©÷Ÿ< ªî`Õ›\ýlž“am2‹ÈÙƒâÚšî ™«‡ôðП³¬œ-a¡ [%½} “¦âvþ>ï‰J«Âcj0sÍ©·èàW-’ –[Z]’NOÒä®Äò<» `“2ÅÀ—Ž“§÷l~Sf¦E8oxªýÈ8ÁÍ+¶wõ82<>–ËIÓq½£­†f:&¥q‘K80K¸vtB£ñ¶*´ð?Ë`óü(ôµLaàÂh ¡`#¡˜ÝQ’2_µ‡fì”›¤]˜ èl[1 |X}º‹ˆÑý ò;Ž–ÊÉ4_ôéþB½[EÔßÑLÖ¿œ59Á)™üuã¹±üH›œ,$QEÅiTÈ5:Z¶¥fô†'µu$Mé¦ R¹WgÆ »”7MدÔpSØÎãê:{2^~)1/U ¸¢ÄÛ»ËÔqòv¼ÿì>#x÷\xLZÕÁûÈ:Ï©šˆ€®Ž¸ÔrjO=/äù+OOÛºÌB•t“,V^/ʉ¹†a>~¶Þ±HÕŠB=‚„æÙ˜«þm‡C?»2‡×•æpü€÷·îy娣/ý–å­FÜ•#œ>9ytØÕRॱU-ÒNÔ%s°—¹°Óœžê’õ›¨|½(ß32‘Y¼¯¾#Ke¿tó@ÚY°q#z œÆœH 4í£}0?çqåjÙeîÿ8qΪ1pݨþýOpÕàP,ŠPˆ,5;Þ¥{¿j}4Y©2§^uêF ÆŒh¬!ÛÛ”Í;ð2ÀHÊë¶7Úî:(b·iÅ7>×”…yÓï·Ü¨ zÓ´ÿ¹®TÂC3ëïþ¡«L*Ãâ<²ƒTK™¤Ò­ëR‹îAg>ácÈ“Wj]cz©7äý| +”±ª:%bË£ˆŠ 'Fî…QÕȵƒ0ÆØH¶ ¤˜Ùd Z„¶ôÿmZ*|`®_‰rU5छ¿ÉÅÏ­ _æ^'¨Öo|/‚[þc¨mu†ÈýLg´;p€nA¼Ý"Ì¢$·é[‡Õ—Yß>ŽýAh@tþô¬«£ßRÈÀÂ4MäKц†üˆ4‘]†#äGrÍ÷…Ë)qÖÝ\‚ªnX× 3u¥ê9ãèYsjç3`¤ÿ'LBCãê;BÛ…xˆðtÙÛX.& ¿Û çË=ä`”!)Ð{Jàÿ{I:m<ĦQ1¡%Tƒ»yJÇÆFMíæ;rˆàá¬ôS1XŸ¶¤$Ñ×Í,œ#WŸø†&@ˆc†Õ{·$€.îôýjÅÿgÐç²’LHÅ_—,î0¨:H! ,þ!>5½PçÔÍPÓQø©o]ìWH4ºËIíD;ÍÆ€‡A MSFíÛ\iÈ»µ‚±!qÍ$Ùþ†'<¨$UàqìM-TI©€•ßát¼±­éËu˜mÚ›ôËÂk%_Øu´ý¶g¸•ï";qyä’Ë=© =\>Êrß±¹–y.èå_A×[á’H>oª¸-¥›}«©6"é ‚é$Ÿˆ*‹ÔšÉèÿj!‘ ~Š›YîVÉ D+ͤ(¨Qoç ”‚ 0ÄVû®ÀÑ…ÒóŸÁqz¾b4píBLh¨ÔR~8uÃÇ.v4;•IÛ¸Š#{(dç¢ØMÐŽ¡ŸLU ™Yˆš «úó-`ÆFf ó±dMz}çð›Ð±UÍÊz„¶Ç¿¯àdÝåŽi–pwÜT6(RTP„ÜŸ’·åkÔt&\ˆ>{i“J”~^çeød¡z~UU Òž©k¿ndÞo*æôDÆŸ›ã©ð€£$¥6ÍDåÒßÉÊe%™ýAƒ×‰ËX´WwíÛÆËȱtî÷gêòâŸÓ»ùöø‹®Ù FÐz'Ÿ™r¶ x‚'RÚ€¶ú¿¸úžÎ¦³ýÉ0[3Y`ÒȪÑZä˜Ì~ BôÖ¦k°ÆÂyDŸŸÏ|ps©õ,‚fs'ì,÷‰”vq£Q¥€ë€â2øA#ÚÊ?ÃÑÂÀß¶g4;¬/iÎɇ—ã)Iíöê9æÎd8r{ypRl|D¢Ø„³„hÿ0†•~s*’ ]‰—ËÖ¹Hi¸k}\\Vvmrº1[«ÄÐ×\«¨6J«ÁX„sT]‹í««-n×*ë-IA `g¶ÎTë¢,ÉÕà Áe”×DJÇœ6O¡‚Stol« ©¶Ü Q% ´<\³»,>³¡€óº¯m¹Û¶ã l4dùÔÄÿ˜,eÃçc ÇŸ:è HøÞü õC7µÔ¦Y¿Þv¢Îµ³B†Ë®)JgkçD1DÉvn[Õ%>àf„›'µ4väîì<Æ™EôÏñ'wOck#‚¯€†ôcÂ+ŽÿµVõ¹8æZU»[a6Š"°wIAᇙ¯<æDjÎÿ.Þȼlкœ¬U׫BÍIWABi¹ nàN:½ ¨µ•Aj—>lé÷^á{“ðŠRNVŸ„´YΩ|b_k’T¸/ý{mÞN‰Øñýg:‚C­¬±ESÝþüš?Je¤œ<{Ô F'°Ñh9µx+ˆïÑÔ]+®m;Q³#RÖ>¬wiÂÁý •ß±¤A¶üƒ·©û‹÷™„/ ž+eÞRÖ<–ä@ àð:°[¢F¿#,&0å{…Æ&ûøÄ/Ì^”Ù`dsþ¬²]Ê™ÏTäg¾šÝÉþåt)¹âߤ+ˆl1-7ï„Y§±Gªcoß_x@uû†ÓÇ@pF%SúŒHáèuØÿpâÜ æ&Œ)ئîiN%!Ù´™GÔJh3ĉé|áòÖn§~Æ>%>8|ĽöÖ›QsPp«óÆ|åšàOvñ0¥œ6›þûZR;öxß#ÞènŸ=g£¦â‹w+­RqÇ‹ÕIµ#,7‘äpû†ŽâWSஉKB&SnÛ›ë}²ÒçiÍ,øb–´ÕÃ퉎(4º'ç†Ë0¤|Žù)7%É8AšzQFL˜%©ž0ðôúc5™MÎôx3=1üeJ`¦Iµ6¿_( zâgêzCk–WðnÞ"êò´·É<8±vÄoeY“îœ&/u(¯ª½ü— ±EÍˆŠ‘AêÓÆ~ç,H¤'yhßø‰·£L@EÝ MÙÆwI^•u5ö77™Ü¥ørø˜÷¥ý#Ck¨Žª«Í–†âv„fäoëYñ4ÏÚ 7ËD¾¡Bg®)/ÊÿŽ4-îפ°­\…ÀfLhgÙã'uà~§Šâ+ÖâÇ­h«\Ⱦ³6þ2؇—º¢ J‚Äú8ÛŸ:fø@^LËx{,9S¸Tü‡¸ø2»Ôý”jè5S=ª9÷bøÕ·Æ#Ûž È¿ÕüI&•+…;¸êYmFÅÝÏ`’"kïØ×¡èªãmô©ç;X¢µwÓM,™ã@ʪÒ$ä«^xc1Êàd“W—ùå>˜“ ËÑbwµ¡©— #s?‘TКÅW9*ì‡W?x£eš"!e—ÝbJ mÿ|?y+i%,ßú¡V¨iRgFšfÈ]<®"Pì2UÞñF…Ьœ9 6îaByà?…úçP¼#ïHîî&TÇÂtènkÜ 9Põg"L­e;l¸-x¡Ã ÌÁ°ÑdêKZÞ ŠÂÎuÚ`ÝJ«yä·êÉÓ¯ƒ€jÌõ«ö{^{K`—àÓ~²óO€Š+îGéräáN>³ÎÿÇòà€°ªCäÛ‰]JÝ鑺þé†x PvÑÚXøb¡N7l·´=Íœ|%˜îSà µ¯8}î«ön7ã—äDd1‹Ð)?kþÇÏYµ!¬àòÀþw'_Íî¶\ÆCùÒH‚EBÎU’¬Ì“ÑwNq@õœ#± ÎU®IIE›.Ku=d¡xê<›P×땼{½/¥þC(ïÐÃ2-GüÝH—·]J;Ü ½…0’?zL¹Éy‡±p­ò-û^=agû×L(ñv€,—šiê¹eø•Úwãç*ÇÔ›Ä)¿{ñÇá7ãá…&ÁþH³  Ð ší²š¸3ü™íV¼5^8Œ8vEºm¢»Ùî¦Ss,¾'T‡Z'ÀIgV/XÄÑ?ù4Ttw÷èà˜–­×Ãè²-V{ØÊÌZ¢ÛÕ;L³¿ÃúÔŠí¸ÙÙÒÊ3%¯¾`ßÚSoS5“›§ÆCS¢€x[0ÚÂu?ë×{!6P†’…-ëÖ¬½IÌû„ Ür¼¦“.úS#(z;ôŠOÓñà U­V»Áå4DYhu©fvÞxŽ(@d¯=\BkF‹ã-%ä@>I~pq­VƸI…YqaYéü%*E%ó[Ѥ­µ?Õ—Èw†éwçrKˆ ‹t6ÿOWÌœc>½t¼÷ ‘vÈ\Gµtzš"?e6°þé>6¥ÒC\ÖA•†‘rk&×^ª¼?”$gg$*×yÙ-.m³–l³ÈËüåc䲫HTjR‘tŽ÷ÁölÜcaxÌÁª›Ì2K¢†¹æf]bÊÓµeaR?דF8…siúY=‚KÈYˆ•è©ÎZPÒ1ûö®g;YfûˆåÏxqš^]¥Êzz œÅHz°¸ªù=ì%1å¦iék5äýn«õÏu”5¤>µ(z#tª¡9ÖÛ]Øoé< ÀÝ(Ìv]62yîÇ*@6QÃ9I%¦L器ˆ@Tñ6mÎ Ö·Ïf¿!ê€vãL|…|zÝܶ6Àù¿1ªÀ’L G‹áU_ÏÊócf»¯»«¾›‚""réFèçZ»:8ãЧM¸ÙaôVÍã>a=üLôÝCtVµú&Žt›ãëÂ'[]×~QÄ*Æ­?þkjôz{½ˆ ï¬Ñªu™J‰.ÓÌ‹³ .d):RŸS3z ¸ùLe#–Þ:uæµú’¯PŸ™Å:Œ¸eÕcôa‹‹_£ç…ðØæÛ ÓÎà)« ë:!ÿ‘óm¨XíÈVà,/ûò¢«àÊ‘4¹å09?ØE³°àuñ-˜£â Œ€ã#K5˜qàd áN`ã)s.ùU…q‚ïAâ3AòÃO£Ày5¶Û¼|¦MJÌ wZèF \°›D›®¨‘¼!œ‰õ¡ÅÝ ‰IȪ²…‰·¤@‚ø'¨ ÇÏ Š?–]ùù4¶š é¤\ö•Éxìeã€ÌÃõÐÚc7”"B$€Ñßo75•Ï—ø*i'dærÁ=ðí+W09ÿZà©k©ä¡P¢&ŽýWor›—£4ãLj* ÈÉp¥¥H¯âʢ˓xK§B˜J Ø?Ät"ÁÌ&ìì¡H´E,¢‚“9ÅS|ëc߈'.…UÔ9>ú»m•>‚†•&¯"ýy\Þá Û¼rj 'Ô+8{üú™"ÖÉE–=ðÁó»¯ð™h’÷Œþf–DŠ1ý倎ž£Ì¡¶ý¨Luˆ!ŠøòoR?Å£ÿ”,ýöûÀ…šrdVôV,ç ª™‰¡¦ôŠÙ±Rå^ fÔ£ÃÂOY3³mÓ×ò[:ì’–úOÉæ,¿•sÿ!0ƒÉĹ=sDAò}*t¥á§, ¦¥m$ÕE<›  ø:J)âq×Ö&7Ц%2Øb ºxì5fóìÓx”Ç~Ø83éBìØ;Fý°¹­®¯iö±J‚›’J$¾Ìœ›“}Δ³!Æ ŽèûŸ¿ªl@øœ+†LüôE_ÊfO¢£û…my¾†®âjž–|Ë®›áÕ‚ HÚ¸eLOþŒ>`”¬[T¾=ç ß}瑬Á,“üpÒÛ‚´ÎÿÍ xß‹<¡Ád\ÄjW1Ž­ h¬Ð¹ u™ kæˆî“ϱcï²U61av)¨k[â#±†¯xÖ7‡šI'3¹ÉˆŸ÷á“®¤R‡FoIÝvwCƒ¹ØºyÑ‘¥1Tñf¿¦ovžhÍÌP>Ðä1Nªewý¡¤&€ùÙNR÷q×?1*]š˜Ç!šœ·¤®îAYC÷Á¡>&LÞ§Òe°@ã”Ðs«Ý\(»þ{szñ’!K6zœ0½“ůZt“È;¢Q§{w JdEj| àj›AÝZ‘ U ‡È ‚•4›ñ=÷S<Óü¬q%¢{STZ¿ÄmRN¦ Áåd—϶œÁ–­ê2rˆð©?›ña˜@–èu7Å–b5Æ«ýÌOY'®›¨½çêHâšš6:=ðêl¥¨¥¾G);\¥è8ù˜Âévä˜úQGö)Ë¥D§JűÄûê<ÉÅh¡›³±z–`´N[|½>Ð{D%ßûǶ E‚“F«™â££~J¤ëÜa¡OšVyÚ­-wBX.7ÛU©!ü”ÿe3u½ /¢‡ëX K†Œ»z ‰—l¤&¹ ±ÓùwtVã,P#¾b›°”ß*}iì<>½Hµ¢ô².ù š6ÿI¹Ù¨•¤eýÙÃÕ…7Û³ÉB•îxÌÜe8“A¬½¡¶;mÞ×îÔIPQWÑ©eÒ}vÔG“púqp·ÌÀ>'¨BZ‡Ã‰_v²” õÇôòI:&2z$Ο¹Üïåê„V-#„8ÐS7S0Üs©zEº*âþgšL_Õ4é+N„WgMØ ùàs0*[Â_ˆ¯‚v›‹ï9€³ò ÅŠDFÏî_Ù…Ž(ç̰·ú±P5ën¥tGi×yòœø¡ˆ¶–]¿HG”©bås..]‘’g¥ûJÄq@#þ‰„ÌÓ´IáGT«[¸½º4w—&/c;/ ªÁiïeÝ+æô™ •¸ü…Ô*“,ì+Á ‚`/œ lVi‡ –ò‘J}ö€ÜΟCE&Õ“ûí šFhÙ¸r2Š=~œ# ?Û}„6£™I¨]¿^–.—QÔÕ­-¾—òB .ÎäP" pÙ&ÅîXv ÷£®€%ÁvSQźÃÃö‰+Ì’ý¿×@)¦7õ@êVm+¼½@¿^94%)ó‹£àüÿ•.MêßµB:1ž¼d ¹÷Y# !‹VPTB»($Ç …‚!‘uÄwU³ªC-SääªG˜0?{6ÑʇºýŽnNãžúý‚ ÷fÕÝSMlÞ5@ÎR^”'J&¥N>cà ­&N ýg4ÓÊÔäù)Â¼Ž‡`¨*Js¬®2£ÏXë”y¥`+Ç®åob¿e1³ex4úE—…Ùr9ZÑ冖)c¦#·,džî–üWùÿ!Kì{è8âËçbØxÈú·ä#öX*Q¦#)ÇйwšŒb‚æ œh}Æ­d±3>Él*ÚÕV£ðͶœÓ‘+œ?VÆœíÆÏ1ˆë£’\ÏѺ‡VézÊX¾¢Œ$05ììsšýõdÓ 7Þ¿RmE9Ù"!nþAhåƒÛŸc¨Û‰|ÈSè¦R$1ç.ÆVÓ å÷>[Æä6«¡¹°TòÊä²Ú—ÛÇÞd“·"½¡ûd›Ö+¬_3»=}661݉5a,y}Ûäïn&ÉñßsqJD6çšÎÈ.ƒØ_×ÏnJ…xžÑdBº>ƒa•uÌh•WW§ˆ_*SƒÇ\bѹϡq(ptͰÕszü6:8¥DÊèoà ­sªß‡ÍSC<%ªæ‰u«'ˆÞCŽÈLDÍèkdô›ä ëæ¬‡N¢æ z”ÌáT4\=Ç©âÈžÐp•J=oè¹`£ŒÚ”{w8iÞ.ñ¨]·oOA³zé„gÓèy2oÖ&³2ÙÐ?E±KañoODÿh=tiÍPL,O¿`— r3sXYòMddÓÒ÷Èò?,£›Ö!©Œu?¢kóIûfðÉI§‰Ý.ÉèN†Pœ¡D¤RI‰@’U6Âr©»É/ÌÊ¿E,÷4É×…‹­Ò€®w·lmUD»i€WØ(ÆwÄÇ¥$‘½Ÿ}ÚèT–¿Lîžä‚¸(5EËRr•lì¦V³AÝfí0òŽL²2Vk^¥›£@Ú’™¹05H8¬°uyKš{Ádç¶å{î|“ñ‹3¦éÖGšKÕo«±Oe¹Z“ˆ˜ÔÿhhuuÍXŸ,‹öà®,ªÓËëh* œl4bέÞ5 ïh“òß""—qo²[.|+gñ4v¾éi€¶Š6cRµÇ¿jÌòaËõÅËKäQÝÝ×N|8‡8qÍIÅy—“o3ËdUïÁ¢‘gУÈ”!tÍR& ÓNKÐ1ô1ã’¥ w¼¸ËB.먘­4¨œ¼°ÿ¬/⪂ÎJ+ÍŽ‘¼DnO ²~¡×òÎ7ùC{2ÛÇÀÁ``Ì? UÇê+ÒY;9mŽÂé©ÑKÆx™¾à MBsÍ cy'ÊËö¯‰å&&a=†H©<%ì§ÞØyÌ‹· Ûfìc™…QüAѶõÅÈsØ[)è³â;§©‹Å=›—¼ªt£þ˵¦b¢„¾ãt½÷ٵ㹒^Cé²C‰Ð(ÊYŒô!i9ÜÏg®†B"YbLµŸ~!0÷µ½Í€B[[gžk§ðõ É¿=ÊüKÃ0M Ú)]ªìì*ñû´Ss‹… ñ`ZׯÅ…†r¤y+û   1¹ o@Dºø„î –íe·²Ëã_ŠštïU 2jwë1"~èÓÕ7¿Á‹_r¼xÍg0ØŽ µíBA¼%øË ?€®NR2Ù)~QëÊò†Ê¯:»&\€t‰ý­4©»çJë2©~#Pò9ˆ’7ÌöR¯–HfwÈÉ&aˆS.·ÿ×à_rÔ9dÏâ”ò|ÅS™6õ“ÑÇl–Ú×$ûËç™çM¥ò2µhzYIa‹3¹as¸# …AØÎ kÊ’2N¿PT¦yK4Îé•ëPYªRö„ &¡@ Q’1âå¢ÌB4   ;¨„¶3ÈÚЫì7À¨¤¼(}iŒèÊÃ*e˜ Nk< Je™ïP¥®ú˜úýŸ&bCüóÆñš Œ}±Fv˜†õŸäÏ®ÊÄÇUœ¹³$BGøð{›´úÉzM‚ûúæ§}RÑÙ‰ÙT¥OxtwýÝi}D:’UE øxª~DÖ~¼pËK‹¦¢<õÌuø©ßAn_gÞÆ”’if¨+yµšxªx1+ÝX£¬i’dæ Z}X&EöÑ\‚¾M:u/ÁÈZHìºð~­£®½vÀ~L = ]s`+Í~3‰AT ·}ìóP†f¹SÎmÜ9Í}p¦„vývÊa[ÒT•ÆÌ¯ñ7&|™xóºÛ5ÌdzÏjè$oG•¼O)@eæÁew#%εA….gÙe—g°|Þfѽ Œ¢ÃÂk7‚(&:úr-Ã<å3<½u›Ða€y_?·Ñƒ Ï‚éè+·œ¼¾h€8©gµðÎAK$ªÿ;ïÒ4–¦2is€Now¥ÁyY3G«¬˜Áñ¼ÀŠà’\q»'ñÐX,~{ÕÐÀÞl 8á$;ôC` …b dÑGÝ¡âUh Z¥WìLç9ËDþùÞ:÷‘W6³Q¯ôÜT„óé$9KéFú–\凢f>×PSÚ¾'²Ý†½T/¿Ñu`Þ`°Ì- L/¹å57šŸJßµ¯Š–TC=ÜñN`˜*›¸$ƒy/=ø/Ý”LÿNÅGr ÁàMõîMŽÎlHx>1‚ñ¢?È6þiQ>Xíý‰ÖyÈуÁK©­a\«ÃÍ+æzšßà¤ÉÙ-šS£}Ÿ.Õd"P°»S–ò9yŽAßÍ’yN°kÙæÔhB niá•¶G¸á¾ynòaÓ0âËÆ ³¦aò6#xEÁ»m( BÄñqvn” 0v>ÙCÉ£Ø$úüU .dbòÜZk¿BÆ)ßÐi$f?·nQs§3`‰ -{ç¥H†òÒý±cìýi&gìç=«ƒpFI-K¸|)dÇ›Æ@ôÓS°NçÞ’ôŸn¼½ÆöX¯…¯öœO¶*Àzb>â †eÆ`¯±Ú>]÷|*ÁK X„yÐÑ2pÏmV oÂlYô, is·¥"÷Ø ÿRG· 7£ÜúÔ ¤a÷i†Ý©U¯ïh²¾ø4V±¿Ø$»¹Q5š*'¸ûA¼»P Ÿ»XaÅÐU éˆÖG¨á.É—|=b ˆöØ\ OƒìÍNW€M´»j,%Ù<\L­™U*qLÖ$y¯ ¯PŽá ãîþ‹¡öæÕw;H±o ï ÕðΛœÞ½åõE ÿØpƒ¨ã¤…0÷bY'z>wôjìóÛs´Ñì3þ¼ÂWÎ6q• 7 :‰T£ÑØ´L×±à‚öy,$«Q.$3š+™D9mºKz¨°yOHtxífð;C=„ëÕíÿ±¿"§:wéÕ¹!È~ƒ”1vê þâbãpúôI= '¹Mÿ!ŽgRæÓ%Z¿:TÀ<¯câFýˆÅG°óé²ö»ºÊ Ny› ¹%ñ±ºXx-  ÄæǹxyØ)@¹ŠT3×e;Z«”äjòDͯcø]"õI‘ÿ`N›Xš”QÊ… ÁHu‡D…`ëëîU­hô8êõ ;êÔ€V>Þÿ ü*³E³¥×ôÚöJ§OÔ=’×F@ÒÕü‡¥„¥×˜úßÉ$¶Û¬›Óˆ᜘ÀV‡7p›^tïÙE‹Ýq¤$·` á’Wðšt¢ºƒD¶ê %té`[“Bh”x½Ý5§>àþý”Þòj˜]–ð"&©aaÇ%óXkÃóÜÍLÓH•WU~® Û[à†ä¶ Ëœ7ÕÈ3<×Lˆ¥þÊÈÜÌnñÞÑ“~8‘”JÖŸR +Écc¿ XþnƒdÝ-Jhp´©*ò.ÿèÌú¤Ï èýE E¬-ã©dΓ->³G;Pà¬cêLY˜¨¼mE's?7_ð?[+à˜ž"‰Xt^‹+Ò¯?½ÉCOÛH1!Ä.µ™HØ{ð™GåÏÃóÚÕ?â½Àèó•té_¦¢¸·¬™Ñ@Ú†S㜷‡pmAWn‰Ã¯¦þýAüi8A†ËÁÆ5Ê©¦cBß/ºëh“–VqhájsrÆrÜ–á ¶¯°ÉÀ»…ÊØäG0»'£¯ñ·Ÿý7!ÐôhŸTRn»–z8&`ý ra›^˜ T…NuC°ˆÐÆ^$_F¥dD¢¢¯¤·Ý„Z&XYþ{¨õ÷éáûNÉÍ}?вX3ô’ŸÖÍ;Þ º‡¤dù–„Ãǵ'hñ ?«gOÕÒPŠpl—@œ›R(RÚ¼ÍMeûÿÿ¨Ð÷ẒwLÙ6ö…à…TÐOÛ’²Sqä¦Éõ^oÂÍ÷—Ý?c¡ú¬‡Ÿê—æc%×÷Hí‹Iœæ„W|.²°BgŸ†w‚º*á‹ó;Kkñ&]·"õ †[|võ)™˜ÁQØ)¡Ñ¸þ!±ê¯ò)YMžF:ñ”•k¨°N)9š~V.Ë„Ù{“Ì ;¬CüŽÞæå¶Ý=aªf`¡ýÌeY™Ì")aÀd’ 1›3ZN‡ÆRRÔñ:IòG=_0¬SzÓ› 1ø(̾¨¤„|¬Š³§m­„8{* v6HßÃ}š?Ý™2¬z>« Æ®¾R‹j36gwž˜š"O×k|(ëð‘î­_,¹îd¤yùUûÞP?{j äW4è å—VË¥Ri¨ó»ºËkÐÚ·¿©7z<·Æ }$9ì§ J—ŸY#[n@WLËn9ë>á¦Ã$¹ôô…—AŠx c•# ºoœ|¦¦+Fâä¿ÿOJzêˆYâô˾¿Ê1ˆš¢bŽT€ÙÀÊêœß˜Ó-ëË=Â]аHØ_<Á¬-yQÜøƒ^6V°º-dÙ’\òÇ_צáðàÐàipî³DR–#ÆÐ®Ü\3¸î”…Ô”âv]µä›úhW@¯ ݬÓ,7ã+ðkùðvÃO?íÚ>íZž]›Á„µ.c‚%ÊRa}µ*ƒbP\EíëNt bê:'åì ¿E¸Ã@œ"óyŒÁŸò“8º)ãCJšÔèVð1²ÊìÙkë>ì¸ZóK*F©9b$©uޏƒ#@íRÝ]¿ƒ@_ÃïG4‘Eÿ²ÍrûR…ì„g£¬¬}…ÙmcZs9ƒ IgË{³3TÀšžzWJÙ‹Ä—i9µÐÀ’vŠÀ¿cbf9®¿[´P4èîÄҚݧ§ÃŒjXâ Wa$ \úu*Р礳@bé2À$⹊.ísA FÕø'šè±kM+iÑ µÐÁ[¨öYf¹²¿¢>1ãâôV)å´©pŠö|Áj«Þ†}=ÍÆD ƒÌ© /-> OÂ’IµÁ Óßåã©ê8Q¬Y=/ú`.éI”Ž@{~÷Á)+ö.O#ÀŸ…•‡àw²a½ÜÒl¥(¶Þ‘/´©PCaéåª/>Уm ¨LÂu6rNs—ñ¬'&¥L³H)±ŽfaÉ,i×:ívIT¿¢=‰Í‘íøb I¿\2*O|Êì|X€BÅã8{Nj¾ŠsO½wêëA€!‹.‘í(w$†ÿÔóG òkv¦fèÿ+^´÷8ݱ…Û !gu}¨ŸÜس—»"^Óò¸CÃa+S¬±jS³qz¾B¯DéÈS¦˜ª&Sv+" ¡?ƒµ$pd[}§Öö HÚ{Œ4YªrºñH0«QôÃ@ <ÜP㦛sàù r³$ìmÍ~Ø‰è¤Ø²yž +hR9 a™0þÛóê3F†+ÍvŽ“[íýQ(Wr,·0`Ošª‰¢ê™u\…çFu©òà‡SG<·qBóár“Ià0œo™h™ò@JØ$íL—"Š÷´JQVT8ŠŒýˆÌÈdö¾ðŸCczzذë+ÛWIêbC¯Îñ{µü®Ì±ßý\úIÊox4n…m¦ð8«gÄmâ‰iz<$¼ìâátWtË2#â}ŒP¶86ùr/ôF“Ús“[‹*rJÄgbd—µö)ÇÍ¿¥ v.ú_ pʤHËfÉu à‡èøG:Cg¥+»Žbj¹Àé£ÇÉøÃåOx§s*Éýºj„€\¶iŸ+nžróÃäÞÉËÎo-k´¼Âá|¥@Ý:©ß±*ºÆõnÊx苌Pî%“5tDšÝ$:þ'OÊŽ˜€ô$Ô2=ÎËâÖÄ똅_¦ßˆ‘8à‘ëªp}:bƒîJ–óI;6ñÈ9?—Xi«_§¶u `ì)+ð5ëÜ1¬‚ëj©©ñ0Þ·Ó««æÿâ·U+•¹À¦„O x2>õ¬?áÇ+!ï‰NמÅO_èë!‡Œ‘‡TÅâÅï+x÷ ׿¸‘O½+èPÀyß[=zÙŽº^d¥A_”H^u2»… ?·sÄexÓ(èiÙ*dó¿5cw¢ƒgºFîÍÐ_\m.CÞZ¸õÝò*UÑM±ZPàl‘e­ÅdÓ”…¡°éž9Ó&¦A2rׄ0lŠˆÂzws×€žnÁÊà7gÄ¿>ja —O7Q½¯Wj ^Á®#ãÂEe¦žâBTaÖÆ}ˆÛ·æo0Ê;׈ˆçRíüüû|ÕÝ6tRªëi­ò4Q„wœF£S¹\$ò!vŒ°$šÔ€Ó?øvØ›ƒŒ¨ÅµÊÜ„ƒW¦=Ý"8O[@$zŬÊö‰ÆÃ£Èø0S_Jy?ÿZ¬K2@Ç#`[ÑÕûC 'AÚú8~a"‚Óx¢²>¹VøÃ<‹ßt¼GLm)P h´ÚÉ&"ÿö|wz‹ãcö¦­þ»¸ ÷ û÷ŸòoñŽm¥ò÷}Æ)ßut T­f–s³æ[ìZm™„›„(ÏûÜŽþŠ@ãÏhÏ=B3-U (îjàxzœaŽS‘XÌÞ°£m@À‚ÆNÓŸ«uY4†jp×2k nÛ ‚¯±¥°ãgtŸt††'C(¹x*:0vQʃWøŒí[ëiw}Š–IR(uó  |•ÜȒ &šTÁ*@Mà;ªøBO:/„é“ÖåIŸ,Ä}Aãw_±`Nàõ§}*8(¡%yɨXÐ’tò"Ò¡i¤à{ü]gªð]eïucÇ4 éÉ߸ãóX`)šœKëS‰Þ7õOé .ι€Qdæ]ÙÃZÍç‹Gd"U½¤œôð¤//~ä„‚H_î?8ÕÍNDU0Ãò.¯Aê‘cAá±{`¦-úý6dÂ,ÞF¹>ýiÏÔô“•™LîuÏúè¼ÝKúWêöš{þŸ œô¸éÎ0jî5ÉzØ ºÛ"‹OQ-ß±ýy‚&œM „ B83{¸‚M"x†ÄRµŽýÃcä]ªÁd×,ñé‘?juô®:V i1vwÿë˹‚ ¾³ÊJ¼=U6q¼0äß®X½Š¾…ªjô»â‚ÓÚ;ÎŒêùàhÇc| ¨¯ù,”'#ÁôÔ¾%-ÆÉ¼¬ä2øT¸,ª®b¥ˆ¥zuìÎæA'T&bò± @WnÀ!)‹c›+ßžKwÖÒP«¶‚)]3ÚPkÛ>¥* }ÀYdŒ” ‰ ò=•ˆÙ¸8Kýyr@ º8ÌJ NÈ(CÎÛ„Dæ'(Œ®Ë3å34ЉÂ0Σ…ÂfÒúÑ{ËaƒXàÜ>ô^.&=¶"|uæ Щˆ¦uN ß[ûóè2Ê+è¯ Kc¥­t±}#f™šE}×à:š ¦ÌH-²d¶NÈN˜aþ=‹E¿8–kÊ*O§žÇåJ£ØYd%ð“%ßÍË3e‡?@²(“¤i3Üöbœ÷¿ÕÔî?™¹é^äøhÙJO ©a3<ñ©ÕÅ Îÿ:p˜iÏ}õE0Ø   îf½  o¯‘ï@¾Å Í@z=-ôÉ&æJß‹yLù’53Ý#»NØ3$qöõs7j‹k|H=¦ âÒ\‘ev×ÑRR]ã©a·Ôv&ñÆNå%‚fV í¤úâ/$^À#× jhÁ=hÈ2ç±³ œƒbå¥ö×EÔ<ÂE¨;2ÅåÃä¢]2å|vw@$Ässsx.dt›4ð?Ê9¤p¯P)‚ýZEuôJÑîW=•ž˜FÓÞ!ð†öÀy©J¶t¦ðÿçô7Œ/‚AGБk½1¼ë “Eg{É @¦ŒTŠã„Œ"Ò¨üâ3ÀÛÕÛ»à‹¡®·«þ¦ß¬XúúiÖÀP©^;R¤ã¶­€ÿÜ»:ðýôÁìÎø¼a­—¥»×gÃz‹Ò£fƒÆ~ÓÚ9\H"Á£F!ULb?$ÊÇ•øØ’¹zðRÉeÄ(t‘$ äÍøV$wH¿Ûì[ v.$M‰ MÑhËgŽÖ4¯”1f`Ykª§^êŒ[ÆAà‹t¨þŠQ^¾—q ©ÖŒ‹ök-~{§L„Œbã'}×ýCÜòðË‹¤¢pÊYþ&0«æˆ?<Kœ™†¯™ `v,VÅA•Ùæ½÷(™‚ØIÀ²çÆÂê¹y%z@=ÈA†5ƒåf5¦m«/^vË€ Ožm'‘ Ô©tŠ6·# ±Ó"?ê1§N¿½Ö$éöˆU_$ׇœV |t­mDá°]9"lDý.qâ‚ÌLØi²U‡ŽG5d ǎس艬8Àº» €Uº½&׺qOË"cˆ@²‘Išöн߅ ­£²Û‰nSœGåh3p¹ÇWHúƒÐ,vÜ.µ6n¬7z@ø—á&jÄC§ U(+ÕÉ^YëŒßÃÎÁ‹c䘆1Šü[9 ½?'Ü›¶¨RQgx‰žÕF`-¨Å´-ý²|QÒä"5ºÆ‡§Èú¦þ–¹\«Öß‚HÌȬ­ØÂ„ßÁi±äÏ× ài²µ»Æ/Ka6Š7@7órÉ1ÚbRHG›Ü%™kã'›• G6RK#‡lCe_ÐdÞmû¡ædHæ— Ñõ÷oãvÇøÿœ–¯-݉ᦄ`ŠÌ$ ñ¼í!fzPûgÃÝ£èħBž ˆð²šÕÁÆ[‡ÈP"½Û`õU±àYz) PÙ`à†J©% “dÇ ÚígêÔÃ6l—\C ÉH,Þr‡Ê"Ø–h†ß6¤çnàq>Ìì,:íšÄûná.Q¤Nsñ”XnAvç-ý’~ÀÍk—Áw­§{¦Úû TÉB…ïgzÜã›K—3kùbÏA£þ9ìÉW+TõgãÃb‹<ˆKü£œdM•+”c x¨°žËx^ä¦ÞãYwNê3w3k5°”œøÒ)ÛÇÃk—Kgýèo„ÑdÌDW~Â1Høû™Ô½ŒÑD_SÚø®»0Âì^%Ç3¶c(‰ú.ƒ® ŽålS…]eû$äî)™7TAÝ?óœ·ì,j›å°;^Õ0Xá o†®¸j«$Mˆ,q˜"éYP¨@ù©c(.¹›¾Ü øò ­kÒÞ. ‹zÀCi‘@´h.~¬–¿m›£äöM†JIPâ÷ÁKËJ|5Uæí¨Íõ?•|Lœ·¾H UH™o:o³*gf3—9¤éÇ=挓4’ ¥ ?RXY?99ý§®×"èÙNï§ ïOé^NÍéƒ*{ó«/Š=líºü™3ÁauÖ»hÅѹ‰D²ÌR8 UQÌœ¯xG…†9†ä‰îf&%|ŠêN‚†z1rŠEÇÞSïÞ•›×â‹[%$Œ¬–Ä#áјyR«)…rfAW[X{#ɵÕ«AéˆÏþ oh¶÷gÍí{ˆ)–Ûó ‹1Ò²ýÿ‹êïN4XRع¨=M­ß?ýÌ¥†˜r›«ZøR¥[ÎAËê|m Ÿ¬n|×[C &†Ümp }0Žéð‹º}:Øýº‰y:»VÊ*|Þ/ë8Š6têˆv|”×¾Ìm‹bžå­{km‘x œD`DÕ´“GºU” qIààôñŒqÛ—¹ïž1”œ1Þ3Æ"cLο³çZ7ݺ:â캎J#Zåø ¾€œægò*v¤þKí¶jP_x^›&–ݵ^‰›äT%}ë.R‚m“«îèmÿ¯Ñ`9Ùˆy’Œ'Ø¡åKˆCª3)&µû¥,¢óÀÙ<Šß|)y ÆTû­tC«øÖÊ4˜løþ¬U6ô.¸¡Àô›Kœ5HÄ ãG#]¦Ñv1ç+C*uª¼QƒÓ/DØ °œ`Úÿ,VUW›3ÕÚœ©özй;»#ÏN©Áò +c“ÏàBIf™›uyHx­<³,9ØÉîÿk)ôßã´d ë2¦ÞcÂÍ&#fÓˆ§¹¦ñ¶uÒb˜ÒvFCDÄw¬â ™-èÐ÷†ê&K™ó"'¤ ¤Ô5ù'‡C¿ôeÌI.d¥:Ö@ÑH¹".~¢+Ö»ò&Ðwðþò¡b‹²öÒ9ÿZ•”)‘¦™1\ƒý÷‡QoHÚÚš¹¡Po»„Ì4ÞÀfÒ{·U@¬kA&õÛ´@éèiMX4tc«ªr„hB´rŸÏÁ˜pSSß2lÓÛx.}büâç4Òǃ¦§Aøñݬ³o ýg¯pbxIߣ‡¸‹!\ÅÞÁÿïµ·g50…Üb=ù]ö¹ôAî¬uBk ÷ªÎÀ/ðíµé×a£-™ŸáꪚTu&!”o Zº‰%ßÑpÎVUgŸ@» Ö p0w­1¼ù—Ž’umÎ÷WÇö¯Õ{ïu_êF“û™ z± {À ûUãššÙ„è'èÙ ðý`ôu SÞnw²,±±^ "A8s 1ò ¯8õUi;ÁÔ^N™EŸ§—Æx÷<;„ã5Xo2±û}ŸDƒÆŸë Úr¨TÙ½þª.Rsƒ‚¶¢gHèU±‡Œ ©*. //|’ìšÛ1©¶HäèlÅh¶Ið©"·J”®_wH¼˜1ÐÙ‚ÄïƒÌYNÝÊzÙV°‚Z­s$bºcøRI7Ç]Õ¯¥p‡¡$ô×Oè]VeÊ$'aášrõ=ć eÞÇYÙ(²9©È±r¯s`è¾îYB+ÌFÕÃ)ìlC˜ýEµg/.“(9ÎC¶.LÔÌGµÛâA;>;ËyÄ$XÍ[{ÓkIYbYÕ‡u¸—O {¤ªÜómáßÊrüê@ºþPdòó[[MžŒB;ßY¯nçD2ר™TfÏìö |œ¶í)Ê?-Ž3î@ë9DØùåp_LLmZsv €n5]‰Eì¦ä´aì ÿ”öð`²ø&ir`¹¦1 ‚ÿön„ÄlB63¤€¡¥*Ö³_y«š¶9Á_»ì®þÈ. ãßFq6*"žYŸµpDE40¤®lÛu«ü ¤âD¦òöNHâânj¤—²á@>~Îÿn$y†’Ùz &º»t噩äQÅdšêÀpa\<àjo´ÌÁ‹cp¤Û {zrFa M$úò^U»b'^+}{¸•C‚u Âòü;M†Ol*õÚ²Kà—;Ë„Aßu¹“:Ì¥¼[åíXƒ¢ØN/Þ(®&te“,tH—ë§=Ïø«A^ )Ï™:ûøi{¹2ñ«(Ä¡A §ÎÊ+¯õü§8WV§< xIÆu¿ªLŸòoJ@‹æE·lPÏ —”v‰€4p£Ñù<Áý1 |Œ%mB¿£¦ó —Æó€dÉ»…ÿ7Õñ6ÿÐ=ÉMI­ë§Ž–'¯ê\'Ï Êf˜n}¿+ë½÷ë J•85¦l¢žoçöÓÓ“ÒL¥ùô}f‡Uÿͬ¥êzZoÝö(„ ”k1Z”IÂ,è¾ÒÙ,jWô‡^¯á@Ǫý©ÈèKuÈúÉ÷­ͼó`gqu†Pºe;Ú,.ì²Zß´¾ÛR~Ç28·ìËVÚÏE5¿E]èŠëCÞÚT%¬`?ÇV3h4úÍØÇ'7î?¤xˆæÂc‚þ/‚ÌJY74\_ ª›fD€zƒ±ˆëfø„®¼!:Zg­Œì‰,=[ªwšþ‹ôˆÜm²=Öö­}1§’СãêzN×ÑØž¯9Øý„[ÖUîðheþ^psSjH€Wõ«¿VÚ]߯°6ÝŸÔœ† [ ,VtR¬ õþLyÄÍl£f!è÷®ÉH›¶µcZðþ“rÊã7 @–‘Z»¡,#s&aбúvrril]Xç[®­àì§Ïåüã#@¼k<µ/™QȦù³n8,­Jll‘ÏôM‰ÆàîÝ@G(z#-HÜO¼â~ï^Ÿ’}àÒJÖ i,m#ó’ÿÉÌ ¿]!¸(¹s³Ë˜$. $ÂÆ¢‰ê1ª´qºµ9òñ7nÿ1äÝq¡¯fí¸¥µ@š ,\uUºXfðOfs)!A ,' é‚Qxi¨¥÷¸Ú+™ã“xêqï#²¦-ð»Š^ùóè›o¬‡Jˆ°Üãt¿ ¶r]Úõ\õ=®L²ò½—Kã°ßñ´KN\…A%\.›öس÷¾'=LÎËNÌÒ ñø|6ö\ª‡¡0R¹×gÕ§ºôs¬ùN}¦ÜíŠBáê^(GBR­a;u.ÁªY±I®Eùpš$M6³¯‡›Ïˆ@mI 9¶ãœ$`H¡b°.ch#pÀï+l+qe»Tã\¥…Q_ùJÛþuH°æ½Ê¢@ç"³Þï¯Ðóç¹?”÷5sÅ{_½£óÙXsE«WŽt Ía†¿/•ÐΔ%Ëk$ïkêV4’zðfÈQnИxc^4^Þ¶¦îª÷ʈÓgâF¨%j1:!N¤¨ð*VÇEþ*v¬ßbüá€ñþ—§pTÔoF|Ï𿉴0‹ °%ÎLÆšÿŠçßLÉ@.‡ˆH²Æ{ 1äê!vbû†}DçXYT~„mà©€à.ØÇ4h™'½¢uÊ'w3: •×|hú$!Bô0`߯KlÇ<ð¶QlþýhÂÇj…­¸â[áC¢"Aö¡'”¢[øKǶîq!&CòӅщZg\úr´ ˆŽzGä§|~ ›<µà_ádtú_‡¨þ‚î¶ß¿Òp9îÆ¥o *'¦UèŠí¢Ÿ!úÿÄü.¤ŒóÁÆâ¨1ÆTYy¨ÑßÛµÃw„g«Eé¢ ¿r¬båRq9OÛPRÜrsq¬/éïò[.](2qšÜü=_”®Å|{fÜò>B-ñ— aQ^4¹oé_<ò©‹œý´›ïICj!/ãCtâ/ þæ·zu–ƒÒš¬¦Ûtï’Ž¬‘=#“ Rd·ñ¦ÛÊQ¼W+5Ï-cw„N‰¯äöÖ˜5—éÏX-á`˜Gxá®øC¸c‰X{˃´‹&´|;á®EµÇ;ñ­M &-'Yu¿!¥ƒâx/~¸oêý’2ۨ³‡BåQ±kué·²îøôxâ–Ù ² vˆ7D}.f±Ä“ƒ‚£N{F_0Ã=‡¢Àk½Æo[°^o,ßÿòch˜,ç™<1"þd¥ý"­ 0ÝœÒÿïB/ ~žö´Æ¤.|xv£ë;e™E¼Ýß”c-Ü!‘i×û. yLúƒÊª|K! dmg%Ïx]õñ6ب£Ï©fËǙޕðmZ~lb'ÉH[O(Œh ²763¦m~ܵ<'ü:.e{]ršª³X³´\y¸;jgtP³‡WRÄOßsí]½õ<[Ü€v<ëu„u¦ü_8 ÁYÒKØayi-v=§Tþפ2`1Õîq` ~3°9IùNXŽÿ¾&#þG'é¼ò›¡ìMLf#©¤£î"!3 S,Ä]&BµÅKY?Ú}Ö¡]ˆÚÊŽhɈ-Ñ€6|î8Rì]éX¹»šOýo.µ¬üÙ5tm8…¶*‰O©ÄüõÃÛ÷Ž„Gû¬ Üî ½T™è¸=„;<'1¤i·y»ÖK„¡Á;ö4¥§#â]FMIæ#ÔïÎðÇ-WP¬J¯âÃ'x •àOíSºu+\ú­Áv¯°Wræ.{ S¦Š¤^ÃÊ©ÿGÀ/ÝP㊂Ò<£¥èÞ'Ž0ÿÊO÷/n+_’ã{’ ThäH^l˜nû™"u‘oaXÅ]7kà ˜b¿¢îxÂb~‚uÖ¿‚l69Ÿæ3ÙÃMëÀÃÎØÖ—Ju¾b8# ªç@Öè!åGÏ%4~®ëúÃuÊt³W ï!Ž‘“'ƒù¡.ÓrÔ–ÂÚÎGÎ쬇²0;w扭ΧÓU«m,ûmQ¨å¢9 ÅÊùY0Ϧ8¹#óIÎI¬YÅWÖUG# }~š®áˆƒ|`Ú…;|²y†˜å`NÛ5‰@ðP,‘/;TÆÈWþ$tcþ«Æ™}Ÿˆ{h¸c0ÚâêUŒÃàÆâú§½B¶UZÝGH´îa’˜©cG¦§ûÎå>Y:˜u‚þb ä Ë®!Ó‡¾¥Æªßÿyæ°™„ï×J@^•¨]xsIfB((­Ð§“|6ËA¡½SìI"?8i›%¢ßVÌ%£@(#Ï—DiÓIȆdÿ’Œå°Ò$Œ-E‚Xªµ˜’KMálS‘%uñ8‡ºøärÍÀÑðLýîÿ”dª¥:P•ÒÇN¸¹€I9c¯~òöÚó'Æw·çƒuÐ=Æ÷:\¤Ò…t1g„|7)f×½ü§,•q«|ÎRò#Š.©Yãäún®0QìÓL+à uéõ)£VœµDû˜I]Ë‚…´súš¬û~ªýn`UPÍ9áU=Þ~9L“?€1k²™V0\“õ¼ª3ï LæS%]­´U; !Ÿ×™ò€3lÞ)ÎÁ± x¬8…Kͱ‹7È—ÈyxŽ.ŒNˆ2-ÄôsWõkLìÚæˆßLÐ.ÄZüwA kRˆ–쿘)Ïœ°#|sáì@ó^Sò“=”ƒ-ÿIcCïSw ,Ä~„j$!ÞsÂ, Ú}U¿+±$‡®bo7à2b¹a…m£E—®«ÈœÓå90)B!U× ‚7Ë”Û%…p>×gBÍ‹STzÛnÒ7^©Wóè‡Nçj3ã· yŠÇÃ+-TÏÈrèsû ˆ‚øÿV #ØíÎqÉcc1}†­ø~'\øÿ.,ˆý£H«9Ïú^ÚCâŸËc½Ó¨Ê—µt¤N8+0Æqï¾”„BÕ·‡žÌÄ€¤w`åIÐÕ9ó8Å[¤íxfKyÛßÈ7{£sÕ±ÓÎ)þúmäTjõä@ †r´h$+Èݰ¾7EÌšuQc3¨×ë=6Û‡ÚmçÞnÇck×G*õÿ÷ÀEwÆÛœÜb/ø÷üÒ‘÷ºcÝ >W%§_«h}¸cKoP¹Û çTú̼IruôШ3÷‹þO±JÀP la”YÖ~Itd8@dïfä Ëk;“µÞ]6Fâb Z\õç;YÁÈb‚‡’DçF‚ïÀU9qã(ùð.û¢FØüZV\¿< Zä­ôW÷Sýˆ«üøb†™‹ªú)õ%å8B A¹H²bþ§ý²bÕ\…?·’ƒ¡]=î$Ù÷ë/Þ˜ù??“¹²¯ Õ“_3vtÝ 0 ¿Da»ðzeÈÇŠÓi£ãqï'!å»×‡,½#n(DÀi¿t1Ì×»±Öå3 â!ë9ÒîÚá/MÛ5ÔïìɯÏam[]²‘ q?k½LªïiËÆ>f¢`•G:‘ËÇ÷ôÞ뙢´§óŸèFN–ËSÊ€ýŒçZïV”Qµ¼Äþ¶b‚£…®À¯àf&åSQÃjÆÙô h«ÈÀ+©mNÉ=SM_–æù Å—@`…ó,ò»EÔìªP'Dû82†šÞˆdÅ×Ýý–;IÎ ËZmÑ/´€Õ¬Q‚NÏA¯-éÌ„Ëay¡Ú„"¯¥p°Õ~³³P$‹ &àQ/­Õíw㈻T“Ìj‚qÑðB|ŸòQL®ÐQÉçW2¸Oß`fã‹ lù¼±R+’º¼4ÿ„³¯ä‹%Ló¸,­§5';°æKÇx[ÌÒ<›p'„f‹Eºf;3A¡a/´hoþJ2HÀMwÌ%‚ è!yÉ6‹•ÄÇô^ÿ’5Í÷tLKáãq¥z"í‚á_}$ç¤sŠ›MÕÏ[-~«™ü €åíæ‘dRä`yÁtšÜgBlå‹àáÕY²­y`5“˜OHø—/4´æ+q¿¢:DÇ=5šÎ¬w}§Ã2.Ý^T)Sº¡x° ‹b–[wÏbÊÙ@=‚W÷æF$—Ö¼yb(N±ž¸LBR„a†¿$KËúªŽ3½ k¼âC®›C[¬Š.+¼"ñ{ý'iRµ…««Wý4U”¼<žu¬ÅÅÒÏ]ùxLtÂöÑÒ•¨@j¶Lïùi‰LP3@ËÊ¡ƒê4BÄë«…ésò¼Ñ:ˆ °÷uœ-¿æÃ¹R2Ö±;«:?9*~l/D"aµ÷ƒoä˜Z¥ã*“'ál5‡Š/ ÆSäÇ„Fü^‰‰r1 ’=Ó¢n£î1 ¥®%b¬”ûiAHVòŠaW¸8/\·Q• ˱®TûD{䨡h£” ¿ßÉØ9ã\Š÷¡R|ȦøùÒfõç®Ù{ÁYåï#øLªRQø!ã»Y¢™pæ·2îrÐüpÙ¨U[ÕÎá&fÛŽ-uW¬HŸ㛘ˆ ·±ú“õÓAƒùØy Ù1êÂ?Lµw.d݈w^‘êuï†(²xñ·¿uF¡"Iæ• +î‚A%³VÏ^³·¡ípOžA(_ÐÙfŸ¸C‹£¥>K†zn!…ì´~M†> v>]R§ÆKÌÑ`èu oIp¥ÐÕo7¶}@ m<@¹ýìVÈ‚¤’&žìguB1·h8mõ ‚H<Ÿ·)c“<Ý!`¤í÷²:ÿ©±qþÕ°b¤– »¯ôÜÛ6Xõ=ìû&`^ ¬mÄdÔí'ýÖhz\ü“Þ­P¢ ~:‡8¸ª/ü¼—"ëm¢ÿåß‚a‹ س@m ©Î´7I„†|ôrG‰ýÙ›ßÜL vˆ‡¹ýÇÏÝïY¶Ziïiöƒÿ»jV½ýSKŒ¤×}±æÐÿG6 §%½al¥%¢¦jêÙE$¹yJ±à‰@‰äßu Äǹ I ¿9ªÅ Íæªãs±ø ޳[Öl©ü¨A•FyOZÏ®Šã‘5œw‰Øåx[ÇöÞ]Ñ*½:®º‚¿à6¸#Æçô´k ¡à ÉG~­u…¦¬Õ/»QÁl½juEú'×°à[œá¾>»VÓežd¾R(kÉ ú£oB»{’BÙ:æÓ‡Ä»w#!76j„õ‘­ÖLFà^‹Çä·'qÇÞ¶”\1«'HŠ}ˆoÀṬ÷ƺw<<8ð5u€ÔøÚï9¨gÊ#ÊàéM®“á -,Ðð,ßSÌféë î¯^&Ž=Âx»ÜšIÿn篪GñÞ+[ù ê9Zòp@áqtßÀpÙ tâóìë>æ>.ÁÖ¨„,ê”’REægJ„òÿß*)\øèÉ•gpèóo´’ –Öv¡’úKøáÇ•¼KrªOÙ=a¾Q¢û»°!°û³ÒÇ*+Š[О67 ÓÍ?eÛÌ:¶À¢TN õ*;¿*TŽgþZœYîkvn˜¼’®æ/÷jPz|&ÏoÕûWOITÜ1LôÝî'–i•oƒP:>x¯GÜGWE¦¨NE>·jÇ>òå™cr’^K)Þs‚qdJX¾¶X½´÷º<5– ƒúÍò‹ˆ™Ü´£€ÑÝYH…ÃáfÅ+:jÓÛAÉ2›©£:dá[¾.´FÞÅùW€…O&—&þrí Ǿ4—é!-¬»B M…Äˬ÷Ás‰—áX5«|(¿xëUy]×bFª½²¯`/%;™€älêÞ¿ž¥¿¨ÈœÑS¸·þ ³\qzêfyÓ9rõ?¸'.ïáß •`âì•N ñ§TP`óôb 2‹«Øf:–å‘d¢êCëÚPåL¬¾WòÂd_k[ñŸ¾ÇK„=í\¡UXA†yÂa ÷ÛÓ‹5|_Xqë·”22õ–¯¿Çš•*›ežF…Ü›·pí2Y“B^6H±r¤üÌxèö íËÞvƒ´Ð~y¼Û •þ†¿U5Ò¨.;´7£úQI›ì²¨Ëæê»¬~9£?ep}l;‘Ç\Šc`wÚMæÿ;²ØS=Vâ9-9Ô‹­Ovóôï*X#Ž:À²c†‡Ëô¾I·•ÔèY­]Îò.UÓñ÷¼ˆÒâvTîù½‰¢Å-xmÓ<Óú!êâcŒFZ›gà±ÍEÅ ¹¸÷×èŠ:`ï@ïî*´õ`´?Ôª>²h}¼Ð!ä„:ÚlPCŸ¢=àcžÍGˆ°ª¯çOk™0Ùib¦¥Äœ3˜Ñšf¼PË}Aäe–ɬ’Pz€ß–ƒ9àñ™cÿ^®-¯Ïå×”KÉOçKÔo¬!½æe?¡jG—¬§ ©÷"Ñ‹› ¹íòUw»Æ|D7ø¾f?}ôí7'kþ”ƒ¿'w¹/½*Ààè{0ùtzÔ{ x[ŧž1‚’ºœ+?ã§Ž¼6g›xú#ëÕ~üKºÁÏ_Ù©7æ¬ðÿ¹ªa¸²½u(›Tn ‹#  ¼¡Gmy øs49¢~l›&aåuzÓSÙð"ñXjŒC àrí‚v_Ï!LÖÖ×´®‡nzù¨åVæ´V‘£¸'œ%êgZÊ€îš-| êãg}=‚“(rÀl º%?I¨i‰#SßëÞ›¬b—PÃøx6ém¨ëà2šËø²ú¾¼½ÚÐbâq,\` G½y±˜Í ’à5ø¼Ã4&…Ð=ÛùªÀìâ|AF}F™Ž4•“  23 æ!…çÁ®¶‰›Ñ ñSôKhªwÖÔ[nÒíãÈýZÈ„Óã·‚–ÒsK$>³óOV±vFJäÑI¼^æ¤w¬óƉ3´Àä‰cVÂ" "âÞn‹åð³ˆ<>Ò©KÅšáÞåQg#ŽÝ3íUÌ©û…úuó×È£Y–#uP<\ N\„Ö2—»’-#ª©Ù³Lßw„NVÏŠ®.ù-‘ôˆž‰y•þòÉ÷Ažï[~n iÏ‘2®“—gšv1L¾ôû{—x·ØwYD±'ü´WŽÕ>ÙûÌšúº•Ë÷r8‰~ûëuò<¹hF‡c· euò)É |Á s…pHÛY ß~ªÁËZ7KÈàP ¬¦ñ¼Oq(€gmÁM ´ ª€¾ßúPÔjñ­@sK øÚžÏe6Ù c¹"Ï¡ž‚º+ä³$üîÑæ½ïŠ[Õ ƒ qÔ¡T7üd4âÙ2Àœ¡2V^P÷«MÿŽm‹ƒ9ðÄ’å9Ê8’¿Æ(ò pgÁ"¦Uñݔ䊫ÑAPlÔ®×û´ªßø‡¦E,qøÜÊ~EW>ôtc~ƒaâHõ¢sé+ôuõ5@Ì<[í`Ìq²·½lÇ÷.d /˜‹z•ÓsøO¿E„ÝÌm÷}i×7ý°nE~½±öZµ¹Ñ\€„T}ÿU¶ûMGÏ÷Jmñ ÐŸ4!ãDœŠ=;°|ìñeTvÉ£m#ö£-bŒÆº-—IêSóªgàш¯)48‘ÔbVnçÎ¥<`µßÒ äƒâe̱Úâ þêyv׋¬U•?˜Üæûêç á‘nÕ´zñ.–4í|O·î™}‰6NÑHHàèz¸F‹kP7?;“­l¸S-õc$vIx û)µ:Îä/ÞF’"ͼëX¦PÄœãe—+9Ùt ÒÍÖ"6à… u×p·¯cךñõÕª‡úaŠÙÔhoØl¦ÙPöÁh݉¥¦®Á-­Ëì@Ó/F0d¿Ÿ˜ê…·?i`'E  Ž6O Qc&@’‘€Oª%2ªÍhm*Œ,Ò„òÅô)³÷3ÎÓÇ8ÅþÀsk•‚/3˜›R‚¹6-cûBs_ço­A΄®v‡!ë[_*Ü¥ÓVÈä \Ñ[–=‰„ÞÒ1PŽîâ¥àR$ïå:é¹HéOÏï0þZ•…ŠD´uÓºÁ…„íçü»°î 4õéû+›k±yú !ÛY{¡¶ûï>]ŒÌÝ8¦#ÈáÉëeXW9}-dbŠÆr—ÓÔMî_x[í¶»šjÛ{«qt@„ìäˆSê(#;{½.ØáÕËsÍn^ ôïȆ[c |©Dã4`26ë]1¤Í9Q±dø:”ºX*ó,¢»ô@Ê6Ø`ß9`•éôp#py°¸;ÞPÊÛ_›,˜øÞµ®´«ïÈ šQ”¾¦ðÑ â5¢b"öÕÿ1þ€ëÍÿÀôWdpÅ(Úu0Ös27ú“!aýqÚÝøü91~ŒŒËAØ‚#æ&èïB¼L§P¬,ô#ðP#…WþUHÔ—¶ "§pùg ¨3~E<$×jÃqÚ•…$à˜cHÝ0懅.ûð‰å·=ÕxªMyèÄlÚ›³«ù¼@<£é¹î³æ…VzÞÛ£ùÐ8µ€ö"JœµçJ¶\›ûM;…6–³¤ ’sGc¿/´ŸZ}cB:|ú¯ß-ÿ>-@ ÕïÿS ÷ñ¨€ FTV¶¢r½nžIÆØ(¨2Í|.-BÁ6Ų†K« =7rCåø0ˆ&sÿ%ä¥c[­heì«ÿkôÂÅga¤]2þqÚÀ)þëé§åt²h:^V|àùïyµVµ@C› -A:¦™üL_©½ˆgÚ§¤…n[°`YH  ìâN.ìjC`Zµ´aExŽcÙ»RºÛ䩤е£D ái-W)r¤ŠÌöCŠK0Z‹¤-Úx–½w.èxA£' D1Ëúã Á_óQøÒáÝy3WŽÑ¸)ãÁ­|¡ho¬ÌS­mW|”¡QlËw]© A ‡ü ½ÑñO˜þQTêŒßÆà'´æŸÍßfŸ:Õ¹Û ƒnN {k¡)Þ c¤«z E‹F×§«>æqÔöb‰GT_ë]\¨]UÛ?ò„u("’aåj¯M"î ¤@Ø€½´GûŘˆµ®€N@1²þ¶œSävÂìµ-7[% ùæíLÌ)0Yé¶Zë¥Û„ù¥t¡F×xÕq iyHÕCZe0…týír‹Öˆ[쇰@š—(DM5lO„CP:”3¼ÎÙ*AwÝ(þóæßÀýøµ d=/F^ìûé6—侚N§£Ró‘ñ™oßæíÈ q´Á¸ŽrjÔ';g6Ê3R»3ˆ,L8ÞK(¨ ¥Œs-Msï¿LßDnO6F—Ò,`D\.¥‡5åÿðýÅ£¬Q×3Hpfê®WÑ™¼ž*u%q5•8¨·ð¹JIlËÁ%Ú×WF9&8ÙÊoµb¨#”zÉ£M¡&ãËó4hA&›n7œh4 ï¹;íÆ ¨Ie-ríPF7³/+º¸ÀU¨IÖ™ü³hÆ/Bÿ, .Š2ÏdJ uBÑ­¹äêfŠÜ&`í¡åe¾µŽ&èµv‡®7.JKFü›ýwˆtxz}–¡BÐÁÍêŒI‘[y*"ÏžÙ”íˆÿ-Â+ó±Jzsz}Îô*á0½øÕgûI÷x×}Ž w€±Ë‘¥ÁqéóÝõ9XÇRΤƒBPï‚@[Ö£@ÊDÓË#YMíµ²jõä C¦\I&yÕ~A5¨rGìÌŠtâžd¥]ÈN&þ)QeD ªz¸öõŸ«ÏÈ€ Ψàí\€€ªOal¸ß§Ú´qyŽÂjÀ_5õ+kI1ëc+Ó|h“`M©âˆFûç‰mPxt÷ç1ATTlF„ ß’˜â´­Ä²®½ÑU¤*Á\vÕrC “¤~dRQi–¿:ËP>åÏ&ã«q-føá0O/øpê˜[ MurmàuÚ6p/ Ã“щ#ÅÀ–&¨Ã¡“×FL)päŠÐx’“‘U$s…M-÷C‘ÊÌ¥-ëZƒ ¨u¨ô xR^À/ø”6”é˜|‚ÁšÔNhl{!±Ì¾£3(§”=âa~É1Ç/…]'ÄòãN{Î*ûV[v×uKÏé@†»Ú3O^dJ”.gñLèÄ„I84Lû±Ñc I»«”ÙÑ(t¬7mò¦ßªXäLݺGãd\§×#ؼɶÂQìŸçW!ÒÄõ1«fI÷áëŽQá!º‰ýoT­ßIZݳÔÀó°½òè$µj˜^\Ú•F€”XTPÞðIî°_O!+ßD…U°¡ *j›Ë‰ §ËÓ¹Ü^zÏI™5[«¡7úö\[¸‚² ª\ø —:vªè ¦=*FjUC‚3ôž^l0l£(í!Ã,›8£¢ùª0͘xHE Üüã>edD¿éD L€Hcì*|Y¾Ô†R­+é¤7¢up°D[î½)6 ¿@švÇÕêÅyýADEöòO«îã™æ±²`±³;QF¢ßÀVq¼ÆÌ%,«©7zØ\4‰¬öDQ'lâU¢ÍcYê§ä£&¯:‹Žc:mÙ8q:í-X\l Îÿï¶…Zs Ä© ±RQÅ/ñÑ„ÞÚøüKÈ’„®»‰ví=ô¾rsyncrypto-1.12/tests/reg20000644000175000017500000000001410177477264014023 0ustar sunsun‹ëo¦ùLf1rœrsyncrypto-1.12/tests/reg2.key0000644000175000017500000000006410177477264014617 0ustar sunsunÖWê ëF†Õ5l“höËÒÀª˜ü;—˜@IHf=Rz²Qòa÷&rsyncrypto-1.12/tests/cert.crt0000644000175000017500000000216710177720421014705 0ustar sunsun-----BEGIN CERTIFICATE----- MIIDHzCCAoigAwIBAgIJAJ6vmj0nV1/fMA0GCSqGSIb3DQEBBAUAMGkxCzAJBgNV BAYTAklMMQswCQYDVQQIEwJOQTERMA8GA1UEBxMIR2l2YXRhaW0xKzApBgNVBAoT IkxpbmdudSB0ZXN0IGVuY3J5cHRpb24gY2VydGlmaWNhdGUxDTALBgNVBAsTBHRl c3QwHhcNMDUwMTEyMTgyNTI3WhcNMTUwMTEwMTgyNTI3WjBpMQswCQYDVQQGEwJJ TDELMAkGA1UECBMCTkExETAPBgNVBAcTCEdpdmF0YWltMSswKQYDVQQKEyJMaW5n bnUgdGVzdCBlbmNyeXB0aW9uIGNlcnRpZmljYXRlMQ0wCwYDVQQLEwR0ZXN0MIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDF+EgK4pPT8oC2tP2UT0Iu7GtAqYWJ DsTHwhznU7Iuxt8a5fg8L2Clpt6ayTMjGasE82w8au437DxPjHqaOwN0pzRAfE+R /L9tJhDHemZzr7kZsEECevsqKbyyLyGNFW4z81KL14elYp1O3XHE+nhdWJGqpqkX UqHWXxnK+SMAEQIDAQABo4HOMIHLMB0GA1UdDgQWBBQYtm56sQxKV/glSlOBz+XW qkNZOjCBmwYDVR0jBIGTMIGQgBQYtm56sQxKV/glSlOBz+XWqkNZOqFtpGswaTEL MAkGA1UEBhMCSUwxCzAJBgNVBAgTAk5BMREwDwYDVQQHEwhHaXZhdGFpbTErMCkG A1UEChMiTGluZ251IHRlc3QgZW5jcnlwdGlvbiBjZXJ0aWZpY2F0ZTENMAsGA1UE CxMEdGVzdIIJAJ6vmj0nV1/fMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQAD gYEAtCuEdkDEZYNLuF4yXzWoYX+pv+rTpP3IJ5/x9XCkzgRiBO/WhVnwf2Zo6IRj lb+qBuaP7L4w7PfYc4nZVrKrSOV2pNbY7gdqkdSMeAD4bbHWihqXI3ibd1zIpNzg i+5f/oLUhrVUamEVmnTFSacQJkOeV0u/vzrlkOcLCQiqzyA= -----END CERTIFICATE----- rsyncrypto-1.12/tests/reg1.enc0000644000175000017500000002110410177717177014571 0ustar sunsun…ÿ·°çÆx+‰‘!qÕ%Ù%¾ãÁºö‰ýdœÂ„ä—bŸ¤°ÇÇ^°iÛ<šº\×[‘Ó®{yT+í4BÐ9w—ìÑÂ7üdþ¿Ÿ8¢ÇgeÿjtË€½-ޏé,èàÿj)oß³žåü¾€˜tL´5 ºÝ‰ìå÷pPì^ù ²î]#NçîÖ…Ë0éð*x?»µ÷xÏܽf¨aÙvõ½apq^¤Áç9`|g'„N€ÿ»¼Z̼)Ú®À–fýo<ùd´~ó¦öÛË*KìKnºÂ}]?"пµ$Kå…¤é]š‘òÐpÝPúá¬~–ÇRM4sžúÓÏÕp¼A÷@{–˜Òv[°MUC͘ÑD˜iq:þÈS¶bgc–ט©;ðdUënGH7Bàlôž—;‘_uš·}4(èN³Éy¡µS»‡ZgAÄmJâa‰5¼÷eI17Ü3 åÞ›¼sùÑŸo*¾X_  ]¿{Nƒé6ƒÄç?â x¬Séµ8Œ6/¢•Ȫ¯šãþu¼!âh+5³Ñ[gЇH‰{‚Fu÷Cêg™ÂªÇUd*xzcP³)êH°‚œµû§*uÄO¹ë>œÊÈkPäêyý›ù!Ô»VÛÔçsæÑçEFÓÊãùç þ«è6e=£*?9¶¦Ü`´nÒsÄÉ z’ç£ÄãzNVûµ·CÈ¢$­ëõ?†œÅllžî+hK'¨÷¡¹çx½!2xŠî©ç qÓôYÏ‘)ÝO?¯„˜ å>ÄZ³ì•3»9>@ôÂþƒ˜¡R'9@pæë­Zï¾;ÓgDÈž`Ä»° rjÌ>C\dάuëîŒædI$Ìb¤@ç·0¢PòšõQOåÄ’O„x4Ó’+½ŠS•Aßµùa/ËÑØŽØçU7‘†ˆ´ßm#ÏHV`ìè¤àa¤A XŽYÊŸëáǘ÷íLCŠêBÖzFücyWo}П]x$Ù0º/7™Ôý0Zfá‚0új%“ ®^6 º{‚Ú½THv+]¯‚€5ÂOP—$½‹ ’¨5äâSÝ€¥b´BK|r|Ë£kuíÖ6y̘-‰.#\ÀƒYäÎ$R•«™®Ä…ÄÝÎK© t~ÀƒÏ”cL5„ ©}N¢1ȳêሠ3×nX6¬{&ZUûTÎENkƒ¡$áûéÌX<¥`ô»Íšžïë¿,ž?7Ý„“Woù¥Æ”c)cPôϘ‹öd+Q›ž¶ÿ§Ò[v¥¬$Q'ÑZðùz™.S}òŽÜ ,möêå'cù×"Û…2J4^f]w%ý1K± ¨ë;éÅÂfq6ΚËB6:…òT™;•Z2%Ô"Ŭ`¶¨@;–¢ fkKbµá^ fdƒƒT,cÚ×¼ú/3«B‹Ë–îT£Ò”e]¾aj)9åµ¹ ÿ;ĨaB'€¬gj¥Æƨº¦¯<Ó%´‰J$í4îJˆ•»ÛƒIÞC¢þ\Œ@gûñ‚þGSõûûNf&ê<6d?ÚQŒh‚û]}ãéN%‰ì5‹¼cz°-©º®’T*ø„uÚên ‹ßDzpÙS”+@ƒœñJÔÙ”ÉÇh÷ † ‚d!›6¤QåìX¼¯óqKëµÊDú’.ïÖÛ“®Î#‘Fû·®ÉE8X–öÊŽ?iÇ”®yªL §8Gœ^>x¡!΂l.(ˆ+:V?¹Ï2žœpÛ×IGÛ2í­é@Ý5±5ÝOJtóU>ýc\Oà‘QPç™Ó Z3aÅ•¦Ü ±Ü÷@Å1U\Î÷F]mM¹¹Ytg¥Ïµû½W·zUø£VY[óÊFÏLn…“´lÈ¥¼L¯' óK?Òó¾Ú¥ É)ßÍŸlúæ…7›ý¤?ˆ0‰®$­\É–ÇÙwVQ}©LØp¹Õ¥,…¥ ¬ŒÎY£-º·‰F øl’—Œkõ½hf¨™lažØmñš\Ú˜#ãpÂ[;ñ2ñÆk¡oô »½Õÿ¾™0RÝ-t[B9méÏñ–Út\7®l)¯! %E¢¾qÇ€SŒw^€ËêzYŽUHïÿc²Ë× œÏîú „"ã™&é°|Ì)'ÑY–"8ú7¥×î5sL0‚†ÍãÁY‡ôŒæøÆ–À%î‡ÑEPýBÿÝ (¾Àg3Ý"›¯[I¸Ió Ó‘‚Öš´¶»K4w ÕBiU\&†c4"}DkÔï,mL“«M`¥ÇÍdÓ°!O¢îPi{‰…q(–¹{;·HjãTäá\t’ÆŽ“mí§zô„~Ó ,M´Eõ¢pšƒ×Kö«Tý0žš_íl7ƒ4ók¬@°x˜Õgw…ŸÖq/!ëBXõ6Öùìçîè4¸Õ¥ù\8é{5¢ÃÝ£-Ôõ—¼Ñf¨&À-¸¸±Òy«¨(Ñ#R -v±Ï© ÊÒ¨¥W빃±H0íUöñn’)ô|(êšëh¼‹ËìˆfT~ߨ`—SDé»— ÝP_b”;í°¿gl=]G{¬19ㆆ–Ú߉šù!×ucSAnó3úøBÈQ-]o{XYùDal3”µLÊ®°ÈœÌ$½ÈœC3¡É ØŽUÁÖ»!n°Ð¡qU»?Ìš | õ¹VêÂÛ e¡ñs[ïõù½îëùnºþÑm].Yó:?6•ó{¹}€ëè[_Iµ¸S }iÕíúL—„/V¡v-eµ$˜'f—ï‹õ§–{ç7S¯é,ÚuiÜC´"nñ½<•hËnAt T¦ÉâZ5¿Fi¤2Z>ø2Wɪê‘ͺZ͸ÎÝVz ƒ]?v ãê×B3J¥¸UŽj_Ë’þù4ÂýwÚ,ªüâÀX\ÕŒ­Å™Ã¼Äo¢xÉ¡«9ñ낊䈭iøŽ¸¸]ëà°”ZÓBœ>x«Ô‹9­c,IÓÇP“‚NôC ÎÏè*ɿŹxC™,8SõGç§àH(‡uÓüÛ_±5%Â`„÷¢)ø¢û›šµO>"Öm<\LfÑð‚ÐðTqò9}ÈEgå:»Ð½×òåü½v‚.KüØGç?_ÔoËü?iÃŒµJl=ªû8­ý§ LœdÁ’M¨"Êõ5¨ÓìsÔ’6ž$ºW*>ë)þ ÎüÜ5ÈS?ÈóËú!­ùzTGÞ®ðK}ƒ°œó2q<#–¡¨=ˆÌJo«ï‰Lº.ŸpZ/kAj> y„¦ÇX*¹CäQËMh¬û£›­,®ëP:޼Ÿ£µI¬iS×ûÿ»Š6tC cyñVíþ®°QÕŽ;ƒý õí-ÌzÙ¸ Iø  Õ}# °³xž 0rcJ¦ÑUæÀá0Ò¥‹QŒ–Þ¥esØf(+—ݶ ëð9OTÍKɲ8wÙΘÕ¹æÿ”°ðÅqò½ŒwµÍVžð4²\n¿h¶Õ%I|?ù‰=ZÜ]ìqðTËÅ[¥Bja‘^ÎÀ” ¿|)ÚéõÆ$ŠEq´Z5_íú–ôÕ‚ã¿0TF†ÔÉ–:(¢8¬Îó¢Tm½ OðÄ G9g3.8M]_‡Y(Ì|F¿¢†üê1ÞxÉ´^ޝ5»bäDôJ}RÿÚLh¸uÏÉLð’OÉw™×+U$UY•Óô/Lçb5—§¡ô8áïJ°4ûÂsŽ™ÝÄc½™¥7'BYêM\Xzά‰ã¤+ެÈi q·ñ:¬£ÍRFpÛyÿ :œíØõªß‰qÛ??²G¢yÁ²pkõ‘‰Œ?£»×¥ Øäg^õ3‚P©¯ÙÓUf³€bõдí€ñ̳ºõË?‚‡ô¦Ý¼ Êvà‡ý´ñ€v8ötbºcpw=¸oïâ{éÿ¦â~ènmp¤ÕÜ{b¤ÕàƒÜ`c£7j« J`dº-™1¤dùôns±ì·ÐÁ3R2ŒÙCù_AþKïâ„£éùqØTš{G–@ªw|ŇÚ<øöô4Nžx •.À*ã˜Û<—-•«³YMI©• [‡³$þð+’ ÍÚåÔR¯ `®ôVsl«;jDŸd÷ŸÍ¿ó+“AÏRJüˆrmJ}W“,ÖX`Jƒ‘{šjb:%–~Jé§Š•i»7EIl|ÆŒÕ<ì2zÈè¥ØÙ¶^µ½”(õ¸ÈÌê·ÍµE¢ød£áuÌ0òÐÐïbØiòêÉÚ=%¼ôê8;ãïÍ \IKìg°’3nëÞ@Úu¢HöcÏ 9Ö×å:Û4jJj”ßÏ—Ú(*„8cÁháºm>J—KæžÕšÀ¢º˜áK¹·t ø(àêu/*îz42!ö²÷íJŽÌm¯yáæˆÖàk¶¸v’²®A·ú5/ˆ~‰˜vkæ’¡Ù™iSžVvññò5¡Ö7Ö¬ŽÂ@ê™`¼®½FºÀY˜{JÏ3s;-a¨¶«~7ËB?ÍͼžÅ*7æê†ÞcœŽ“üÍR•oªÍ ȃM•ñŽ:%Ïœ‡¦“æ¡Âä]Pu-h-‚0âEuFd‘·!¹¿îȤ§²ûS›M|î½?n"{÷¹,ÖŽ"/¾ÛêÁDp²œ–löê’,ã ÐJ•v ’Ú´D^ió=~üÏrôOˆaQÇ´ÜU6¾S² »"¥µ†MáV,c47[¶¿Wì/TŠÌöþÛfÒÈ]þÈÖxD=Q®«Ñc¨!Ä»ø8y_Ýõ³µ|4¿bC»×OòÏP¢ƒ+A¾ˆìJÓŠÖ Ã[¼ÅǸ ±® Ëã†Ï¾C7W…ÜH°½¼l…ÐJwâ„ÀkÝÊ9 C[o゜·œJ+»®‹X4†‰¿Yùy)"¤ÛG .7’þuj§åÈ*2u<ÓwêÂNy+è  ŸÖ}×!V“䣌—ˆy__ÛÚÛŽóPï¯ýkCh Z“Ô›ë|‡zqqÙ\örfˆêŽŸzq‰] kE4F_ÒíKÕV¥Y»ä¶8öÂ~ɿހáoòH»•¼´6¾8±ò¬ªkðÞXøTÑÐQŽ'Óþrx½ðœ¨÷À¢•ÏuŠZ<Òó!ZŸ¾JpX¯Ø®˜=)?­~„Úë«$qªSwš&°ª}*ƒÊɼ¿"}„(%þËǵ0ïd€U'A”d„»¾¨KAÊr…µl? ¦o.hp›{öñ·†Šj™ÈØ«¥HKkCÀÀ«f2Íbܤ-;´žÓn—õ)îë½àû [nÒ0³zsƒÜË‚^æKkÀÉEyçòøHî_Ô/gÆ›«"ÁbƒQ‰ •é@%ã0–Djµ)rñüH[Ù?›$4­Wy¦.Ê,ú©{<3_ÜëCÙV±IÂ¥ortè>‘€0ë „¦ÕƒµªçB+‘®Tt)âhÚJäpïk&Vc{düQv]ñçjå[3$ÔPä0Š–€½LåhZÓî"ùBIÿahP$ŒHsÌç?‡~zÒiÔ‘VmÊŽëüQTàÝÅ{€Bt7ld‘uBá®Õª¿1ávš,MоIJõºb20F¬ÝJêhôø•Pµ?˜=›ÏãW‘ æai 7×Å)WžŸá©NêZ%¢ÝQlªÐ†Þ.…fîßê"¨KËPÎø—QlS§àÜ‘©oÏÅï–ËDvý¢YñgýºäùÔØæVéêäÖ˜°~k‹Î<ÇÄß^·ÃîiCˆFªê_/ª=²¹uº™uîxAê8þíqÚŒ­Ý6ú½ƒý€p4hpÉ„´ÍnJó¿þÈ$6ˆlê%¼ ÔÓ*åxnuE±¡i}÷ŠÎA˜åf–¿V(ß‘²ôs=‹–\bІ³¯¶¨ÎM~@´î·v7÷¨è±üqô¿ÌfäQ"äYí:­ŠÙ©ÄàVoƒÔ7Õ–•žrÖ±nÊŽv.çÁ·o_^÷¥O‹Â±Më aaE }Êg¨™Ù¬Nôb²ìœ0£™l–>‰§KŒÐr)£á¡[aQ9Í^l„!Ïð …)PýmÈ÷² dæ±T  èÅ@aSým|(!P¼ MGYø\MPu›†1®þª³’h6è¶•tîu2ËÙÿ‚Ä¡ÂDÃ9ù·‘&óðÒy!– nJ¹ܱ«IÀ6‹ø"æ7‰{69j¯X\'Q¨Ñâ&l¾.¬ËÔåöѺïoÈœ¡Ú«³ß‚`.Ç)ã)yBýñ¤;f^—(g%×Éö#³…õ4´_ôh›ì7–XGŤZµã£Ç5¤­ð§š­ÖuÞytmpÞ âΰ5³è¾]˜˜¾‰D;o£?Ìû1Þ &‡Öˆ,×bìé%ß“‰Öˇši%¸ëñ†º–§–Ñ„“9‘’~"l¿ž¨5A­ÊMI¹/ÂeeÀ'=’ã¢ÏÉ㊘¸s©Œ’&/öh<èItŸ3’c–.VëˆÑß—¶CÙb€‚¬Ç´Ëäð¯©ûjÞÅ¢¡ÓÃÒûì-˜(ø¦³>Áñø\×z @|N9 ¦®©êAŒCâ7}h×È }ZjZ°Q»_rU1!DͶ‚ Wºê4uWû³áw¬·&ÿ—££|-ñ­‡Û5#>'ÇW ¦ÞƒâÒ/ŒäM»¢ZI=èZ«¡…0-8:ɺxÏ­¿…W®ªé´ásŸ…?_Ì ¤vI›§Ÿñ¨?1ïõQ¬Ø5TQŽR¥CÄ®¸°ìóÚÃbÿ…(£Q'd´I·¶Q' ž$S ‹e+ª¶00²Å;È'òF'¡ðæ)uZœžN‚©„B8Q¼o*Hb4ž¨~âÇTØ 6²ÖVm¤ª$1…™¶|—g X'_p¹|_ŠeæÕkhG»/f0’‚Žò4ѱŒ —‹ÌòÍœSÛÏ“¦R <ð9':LÀ(‰r~ ¯ó˜Z‹8öÉí‰ú :Vzç1¼eŸ{µ€-û¦Ä \‡8 Ò—€EÜ+¼Á*~#ÊÞ©:{¡? vãóQ.0 W)“ú„³oþJÁ§˜U#[Ž'·7ØBMK·;ö™KÀmXY# VdsH³„çppØwËߣÏbcbÈY?5ÀeùÕgê|g׳°Yù,Øå~âŽÊ ÈWÖØ_)eЕ–¢ƒŽ‘ñâÿÉ©u¾¼€Og=aÿScøn˜‹‡•Ï󤽈ic¨‘lbÓ9BO®(mö  Îhÿå¸t½8ãIqm!ßvVÙdŸª«WfºkÓ±|k%,€[99+¶êÉ‘¬ùXí N‹}xDxJ‘߃ÉŸ[*ȽXCk#)Jroðiþh»vŒY¢ºæjêçz~3BE«!_5Öýáó¤RÞ@}9é¾¶ŠJg}ƒz~7 »LÚWgãÀå“Ùy׋ÅR/?òÓ1‘ê™oK³c@®²v]GŸ‡ÅIä?÷ §¶–xk X— ²¸R5oæž± sÖ(œ…¹•£¤¸l‡ä7†£ËKË-8Î’ÖëÀë>åkkaö Îÿä$íã+jöA] m´$0ŸMI:òþ#ì3¦Þñžïò_"~¿2m¦B6‰c“Õ0Š,×=§+Cm%6÷ÿ]«8Áót]£#k²hpB]n{U¦xG°Jy“&t¾Ä­é <~lÍË£sÅChÍ:2J˜>ôCUÿÙË2ïAî4«™T<îø”|;!]Fšó–å¦Ý¬wþu3Ï“­Õ{UW2_³FiB°È¢×a¹GiòzVØ¥Á’-œHΔȧ%üf‡¢¶ÚªAGÇ¢<÷/…á¾0ÅëX֙ʔ6…—I定¨ [Û—ã]t^"DÝ+JòK˜ˆÿ}Mº1™…“ÉFGa”‡¹Â£h&Æ"fvÛŽÚ±tYˆþ¯sP‘n¥,z¿ònÃ`o‰•ž(˜,¾ºù^èuÜ`ì䎊*Ž[o5¡ÙŸÇiáYЂbЬ’ñP›ï¥ÃºQ Ø€ló"<œò˜ì§­ TõvûoüõŽ¿%oüšŠ*·<ö‰ZBlNQTóUw½½Ð JpEl, ÿS©’Ù‹aD<ÖÿÂljw¾ñl@€¶brw‹ »ò%5 ìÓq^,&ß­Ö"Ë"$aÎÖòíGÞÎ2©ª‡-4Ƭþ©ªe9¸&˜»g³»°$Ú<2°œ•mĈß3{N¥Î:ÐÂ~´ïx k7• ß 9‰« îBµôþš\›ozÊ·êä©P  †uà6‹c3—‘¡šó¿R¼ºµhöÃÆ´/Z mž«û†…Øí`±„¸%¢=W®ïƒð§È£)ð‘¾ý8â Ž¶~.‘ñÐ&g‹¡ÊàiÙ@¥æ$"”4½ïÑdlEåu„ÃÛïd`y.áH,ÂiÜbîƒóD¸i<šœ&*ó¬i'­µпRÔÐG>ê#ª¸HberªÌõeô Z¿©Üú±F‰µ!ýD5èMYã†å·°Å Ó\M4å¹ßâ§/þ'ê˜òåïº7Zp£`áI6Û*îeW²ìk×Õy‰m`qUÕîñ˜þž‘ÏšFŒÄ ¯¨Ó|kþ;LdGôìe@‚Š{à‹,幚$m}‡Q ëw¿Ó³:ò‡¡zº<B\®î—›³œ¿^Ø>ƒƒx ÎöLVje¤ W½eÛ!‚¸y=Ø) ‚”ÅÒ ÊÙ ×pIĤˆXF£o©‡@AtRwfúlÈk‚ûR߯õs²Ü™6…#|F+UÚYŸ™@$`™8>ix}(Ú‡@ c§©€Aß/ËÙ„?Ý72zã;3Je& ÙLâî8 DŒ{4?'1+‰ª½¢(+xB™Ëî5]Ö? cøn­Â:+Û ÇYÈCÅ€еh÷@»&ª)œs½{{k~ÉôOØ®WʹĔã%PK¬Ÿ]‰” 0a°½ôÐw9­³ª¢ÂûE”A$FÑ$q=U“öa£šÒ/`¯“üÀ¿€’d€kÓ:ýAEcσ<ÝÄ…ÖN7>mǾãvÚù.ïó(¿5—-ÕbÅ'Ñ)b­‰9*F½œ.G¬·¢íž›½‰¦e»¼À­Ú¦ñ‘•4´v ȆŸ‘<%´7wóÇj"ŒwZ0›bx ð÷œOˆ]–²1åU+”Zs›Xw•´£©¯º9¸ø§j¿UEPÅ-Ǥÿ¯i 0º~…s‡Äƒž’ÇÖ`3~ñÃϧ¶Ü_ð”{FäEŠ´à‡qÌ<4qÖâª_w4îÄy’Z›£PØ*þùØ0Œ¸Ê¼ EöpxíŠESÔ;ˆ[ɽVsƒ­f}žêîÙûXQㆠP•n††….¢]'‰ÓšñV´ÏÞ“@-VíbU¢Æ}¼²2ö™1+‘D&•vÏìÍãÁ¢§èÃ$ŽÉI´_n•˜n ¹+;ks0Äl£1˜Æ"è‹i_B[]›Ëm Ç¥šîgjlŽ.¬ ¨z0w ÄÝ*†Þ(Jìs=½¥Ã`/ ôŸþ’¸þ²ÅçJT6èòí;ç´Ô?Í]v­z;¿FèXžw™mWÞ¿5©MHehNl5ô#ì2ÀÈC,+}R÷BŽíM@Q¢¿U !‚±Z$aܬ™y«EìY3o¾Ûx4le¬jz\ûç´y›yÇ=|2¬Å‹µˆaDí1£,ër‹ôî' é”é/¸Òk»ÿŸ¤œš>'û*( üŠÐ=•¡ ïË2 5€ÓÆ~6WËØ?÷ák….!´.qÓïÉÖá;zûÆÀ”5½‡‹Åá÷ÊѮٓuW>¸{ÓDRƒÚ”`"wp¥i›€± cGLb!6‹:.A$ÓN“†²Ç=‰³ëvW ÉPB6ú4€( [É#¼ ;U ²‡ÍæQrsyncrypto-1.12/tests/reg3.rot0000644000175000017500000000012310242342676014617 0ustar sunsunRotated 9615 Rotated 12763 Rotated 16161 Rotated 12332 Rotated 14087 Rotated 14139 rsyncrypto-1.12/tests/reg3.key0000644000175000017500000000010410202065621014566 0ustar sunsunÖWê 7^ñ&“-èöPM¦«2øÏëöë>÷&iÀZÞýdë ö#…K Wdw„ÏwþcËrsyncrypto-1.12/tests/reg3.enc0000644000175000017500000032420410242342676014571 0ustar sunsunü4Ýäÿ•þ'ÖWœú^æ{ xS¸ò_g“×=Ëfõä«`§Îz¿3²[¸W9d•ÓÈ–½×o»Š)}œ'xG¨õ¨‰hð‘ô¹=(¥i%‚¬dIWÕò„n¯‚'ié°×µÐl —dogMêr“üÕl¶*áãI þÐG\e.h ÑùæZbøî‡<êÿ -{‰‡iNŽÑsìÂóXƒ8R:4&[êùZx Œ>´?Ò°”o6S‚¤¢ÚEé‡% ýF¨ò}›o¬5·•Ðkk¬kÑ;ëÓ@•ìⶬÖ]5žÔ£>Í‚üNé"0…Ec.Ì$yIùxý˜ËL7ã¿ïNóŒJ7Lµ32 Q/h½„žú8îCX|Áÿ8© qØ£•|\úÙªýù«–éÃÐ E<cr•5³¼ÈÌ«ÃAe³õ¹˜o–DDQ‘Ÿ+ A^FÏpy±~˜#€»Jë %žçÈÏ*ýàM¶‚#8Lý¡ù.)Vzc•Z º;Ûc8øûë9~M7&™!ÑHé ¡¿z³]»ßô Ê*[[ݤï/ضÁ˜‚@w¶2ôËx,û»Ý† ¨BÔˆ×+ÚQªá^.観˜#QªUefrEo* è¼­ §XOGûK1eNØÃ8n•Ã^Íååµ¾ˆÆ|4~ó@9p*;#X§–…^W¾{a,’ÙëÆÊ\ÑŽéúã¼'_œèÔ¦TÂêÒðyüø\ƒÞÆàû{í„“&…}EŠky‹Oþ9^¸B48ÏÌÆ+÷‹Ä%zWTq )[ñÛ;kK¤Ž.ØÏóe¨ßÊ Øv©…–"­#òe“YÖõ“V?±âZ¾ \!ÜË®ëáe‹ú‘’^ê™ÐY܃^.Î^Ë–'à€ FNóŠO¥x&òôÑ…Jã ‡a7q¬µ¤WT=×®Ô-$TùÙ)xLc˜$Cpº›—5í+±-æIŽîxsth°ÜƒÓwÃz¡sK){6 }eRŠ…‘p(‚z +¢™£ŽÜ°RncG³_гÿ1Úc"ÞJgìF°fQÞjdEÖné\!Þ)¼_…æíÆò¶>°“;ääü¡(ÞܳÔ±|œF—ŸÉý²7·s] –æ·J4Ä´ÛU;¿Æ"t#\”àÝ&':S’÷–ñµwXn—µè–yÚb(ð.ž ÙèøtèX~ª<:â#x8s®bJ}KõËíG¿t¥,(@1â†%Qf‰öÄøš9à,¸œw=&Z½• ’J³ŠQÿ¸åÓ™L.¶Òá˜+>—|X™ž` b ¿i¡ X[2ÙeÔäOŠò˜æg¼ñQâÖkC§-¬Æ+œEf‰v?? –ªgÚâóî@ñQÔÀDê”<ü’È®ÙqÙwГiñʈ_Ö¹‹@X•*]àùî‹ìf[J1oPO“»¼Ç4dÌÍœ­±‘2¿ ä§”ò‰1¾AçŠYå"™VÔÏo9<:Û„gù£ ü40zʵ»ãvˆKOìÿ¯C|kMl+~ûƒ‹äãÓ+­Ñv;îÉ 6ÄÙн¦-N!O?¶_|ïå èdH·8:… Ó€1%¾5V+Ì]nƒÃp(¢g`êXr£ã o+BôœBÈâÌD×Ê Eæë‘+Ëd’Ç^JÞ*P‘béb]Ç`°¾oÚ—X±½Ko³—Î\òåDØWè¾…Åïá…(ˆ€Ø´Œ,ïK7§0¶ "`á‚Ö¢›º¶*ü¦kd¡0ZÄ#ôÑ©\y"å"(Oñ7¹U¨YJV ‘bv{àÍÅu}Š–ìyÜÜ‘”Á¾LÃg$!#å¿%°aM¶–V§  …) Óütrƒ=S–^ÀåKx˜ÑÔxˆìW¼ŽÏö“•«PÞþ«&8µ€M‚›ÚÈ&´¤w5 = ƒ¹Cã>}â>4šG]ƒ³‹Ýýátv0ŽÈfð e%Ðo¦1¥+,~4CUtÎí?Ó½¯$i™¹ ͘ ÓßÂéÝVi;îº"!¹ÒŠï™{  &XÚ·a¿QÌXÅNª¥M>WÌJˆ÷µ—{°Ã€~ùEä(‡ËQ¡-ÛüÍPy:_[y¹ûݰ‡€!XyÌ Wë—0_LnÄÈÓïÄÃO,•eIÕÜL—ˆ…Mß씋LË!?r§oà“†’¨R,Ý„gœÄ•?œßÝ™™Cø qÈ–ñÐøŸ0çç«‚¯P§ŒãX{_zõ•cÐÃ%ÂÍÅÑ‹æsÊ•“âJñÑÑÉ狤ÓbS…Rêñ[WU/M®:^ØdñN˜Ðä¹”ÓÜɓ܂ÃBç‘ïʳhNZ®yÖÑð:w¤ÒMÞïœ-ê—´lšÉÄ»¶h÷çV;¹yl$ ºgª”áB¢%k@Ø3˜+ìg¶|;í[Þ>+–?Ú¹4ßttMÅ©˜è7]Ä‚GË– `o}ÎÆn€ª¼¯Ò2åf¼rM<<Ò'Ótê+àmï±Ó‡É0w|ɇœô:N2ÔBXìé.ZåG~›'èô¸X¸5+Hœ(“ßôk,$20¬ôú>O ’L÷=îNyóœ7K4„ø¼ª^¦Aç‹]†¯0¨¾ò‰«t,äCówR±îv­¼^Ë?IFPIª’“a wÃçô1hœÅp1aTÏÌè48ÆM+Cz4Ó)D™“ýF ¶\À¬Ñ8¼åùNUß„ ÊlZ›Íh‰Á²­½ÒCÃÍØÐ·ôjž¹à£§gÝŽ¼¬9Í¡.ÀÍ£Œ…n£¥ÓÒH(¹/I§¦aš61λJbþéOÄÞHXžÆÜb#àÞ&B9½‡ìl”Ô l¿¢´˜Tqˆ]{Ã;¾ð,hñ3Ç[ö…IÁïÄÈ­´;{¦™ w8OU}JññDKËÆ¹zϺ·ÓÅ\…XðÝFä}(öþmªÕ]Nº÷~M‹Û±nqh˜mµW½QÊŠñ`Ù5E&m´¾ÆÉûHøèÇúÈŽC]K>0oûîH§;v”&}~M®ÅâM A'7eõFL  4Dp_+^ži,U±i{~l s‹|$Þ‰ê¢IúÔ+à3Œ›‘Þ1§pÂY×.ÞWKùËä‰ÐWÿY0a×h?ù¼ Kg_÷¦Šé ²Ž•±³Øð1üÂŽŒB¢ûzøÏ3«OtaYS~6T`Ó§„‚rñV³N¹èå Qóú}ºþ Ý'´ûu-Mð‡e‰]ô:œn¨K2I=„3£µ·ÿy9§6Š:&ܺþ{ªÍ3©.L61ƒ]ªG¹Ó‡iÊ, È9SLjRÄ."ù!¬{4œÅîO2˜dEàÔï( ðµˆâÀÚò¸OR+³_*®À/'ëk5=sÂwàd”±4ûL=™îw®a\ˆQ®«Äz`€¯¸—lÚAIµíöXŠZìPÈ+ÚnuæÉv¬{â%‚y"ö‹VhÕN¤Sñ]ŽØe&Šrn6Þ.ºñp$5‚œȹ£sxWªTëZ§Ú~ֵ̜{_—ÙßSÑþYд˜ÌIç˜]ËHË#t]!ô´ÆxÉp¿\d(Gɬ™ºŒaÇŽêÉâõ¹SÉÝbbpZõq€¥ÎϬ d¢ƒ»h¾¯ ¤I¬þµž› À–u"_㜢¹yѤ^_*©Ü€ÌAZÆJ¡5Í„x0\ f°ú¹™‰Uݦ÷©{K²C¶ñ…€ Ž?/á¥1/hô13@+™PaºZà ú)snŸÀ 7ZslÍ õÖÀ?:ŽzŸX”F-ú!nÈqËž*1€c4 ƒ¬:…§æ¶‘¨qÈ”y<|!ît“dì€Êt[£ Z‘µ?F¸G$6\§Âë7õÛº¿`¬éÂç˜$Ïh 4Vd†Òél2‰G[à.Ýô¬¡ŽÃæÉëiˆ¤$’Ž&깊t |Ê]w÷B1÷.üÔl·ÚXœøÂ˜ä‰·¶`ñ…O¿æ[Ç®?ÄœäúèßÏÈ‘³ûÃzDGÎÑr²V´Ml¥—p":^*Šî°Œ-ÿH˜ã%“ß/%:[. W=f Ãä_µÙˆ‡jhÈÒ¥âw°S -àÀ0];ó&»k#a½Ÿi¨Ñ%CiÈ1& ³¿ÂûéÞ‹yÎc…º»IøâN™X™Ûp-ÌaehwlÐ=¤—4¾÷E=ð<ž¤c♨løG¯Íú0ñ÷t.˜fÛÍK'1(°•å*nߟ¨N¾­…DÃ箼·æ–Ón¸3Ô‚YßÚA9—›k#ÔºG®1’bj|mFmTXUŒ€¦iQÂ[WB™*0]HÊ›°N0J‚ôp¼zY%Øä/EYNHÀiôȪ3Sâëœ×ÊP‚^:ß4ƒT*¥‚š,¢"ùV§AŠg©®ÙDhoHàKU"Æéb[¤iv4Ù6Ëiõ½â3ûäJB¯œCd"ŠJxÃ{‹$ÝŠà3ïn»|ï×ò•ÇÉ›ƒ>rCA Æe %Э…AÒ¶¬ˆŠP,ØWì€tJNnFu¹Âм2ÁÏ‚U´Ö‘Y³]¡"Càâhïajæ 7 ðʳÝá×›Iæ¯áXþTziâÓ¼QI.æ™H,Ú€ó_<[@«7qxÜÅ%Ù%<&Gïý¡´ˆº¹„’9¥Ô0(uŒéwoñÂuÑeBJŒÕφz59ó3*zt>ˆåÎ&§,»çÄM{íúñ×ÑbB²÷‚(l¤’½i±o† ê5NöÍ·–å‡â*Yd§±‘…­:@ Í@PŽ?’¡3ÓŒi„€3ÌN‹ètƒ®³ï½üý<,H­4'@YxG B¼FlHsf±Êš¿+>œÅÿÁt3Ž*#nM÷Í·Á‘JìøIì´« n≒T3ÙW9ï^¨•hHœ"g\>×?5Z;¾!.¯ìFë‘¶4Ç5€,w²¿¨™yJ×À´âs†Ï¿¨Õ¬R‰=0f²@ÒG ¹÷…ÿ}Ù0r᥮Ë:M•:ýÍÄüPxoóÁôیڻP$ò:*ݹ ô¾-KõòÚ·›ºÉcÔœ¤ü{ƒ¾TùT¼;Žy¡õ;C /°‰Æ6•xŸ†’õRÉnp%þ¡Êo=Œoù-jd|)à:µˆw_šÜ¾ó~îò:QñœJkm'O#Êc64lúd!)zÛ,á}¬Úˆ¢Ú•—ëèõ=÷Y£ÈCWù@’8Õ$>ÆHÏq…&HýÆ#o»¸=ŠrŸà y—bö¿Täh/E™Ž†¢ò衟:‰ÓE¯¦UÌa "½kÞ5ÜhfÕÝéãÊX,ü³Û ó‹ ´ó *P®ŸK`Ø[¼Íà˜µ±Óì9kµ±Ãd¾¿ ýeQtT©JÈñK°À GŠà'§PÈâỲÎ,-/Ô–Å‘ªH­ýÜ[üyðáÁƒÎbŽÌ>>ò=–JS­6p›ôG΄Á¬¦A¨1 `“ ±Z[BT!M„¦p†ÄÆ6Ê„–¬3O—1ç®qždý“Ó‰–ÕQt«C5ŠŒ½{5hÌ#4¾JýA«ù’M½ÏM“'Ð^gõ˜@Ñ4‚+%›0 1Ë´gF`øöÊX¨y$gNyl²¶WUGBâZ™ók˜ÆÊÆIpÃ4jaM•þz_ý|A~¸] â«6ßE ,x§s|Í‘+ÄËŽgûô±q:jJoíBˆÉîíp0- ~^ÕÑI ]p±ÿa÷¶ár:£¥«ß²¼»§IÈÝÒ5F˜÷myî÷);ò§¡ Èxbڇ̑øïfµ¿H¹Þr¡µÿµ+é~îɱ>”k…–Åm)a ©þà¯Éêçì |W»Ù<S_ãþ¸#t %(i˜…®šÑ7W°éÒˆe‹ŽÔ¯e  |`¶n0.Œ¤óUpÈ6¢î®‰þ¤œ;åýºù{*ùwlœò¥A~úr e” à–ÿ~´ °“×V°7FuzLv‰½Ü”V•13$ôXuÍ{úr”s aÛì5ÜK‡1V½O\ÑHö7™?ü чx+ªéïÞ¯àT‘›™ž‘§kzF:†Í39ë£SRÀŽ%p0`X¸^ºƒÆ~'Ø™ôåë¢ö QœioA‘L. ˜­; c ÒŽøã`V‰ßILVZZËFÀs³8˜èÛ=þu‚î«Éd)áúò‰5ùëØw²…dóéž3"¦‚Ÿýñ½ý‰¿ŠòŒ†—/Þ"}ª"Õ^˜úI¡I³ m€š†q¥žEß6ô[Ï{ØŠÙÅ¡"©’#Y¥ðQ^$g3›ë³\ú¤…+ÒÛcË5åq%ŰŸ_‹M#CÏQùžÐ‡ µÿØT¦6o¡¾.ÁÆ;A|ž‘‡¥²Ö,*‡ÓHÇ"É AMt:Ë‘')¢Ž‘Nü÷êyzžÜg½© øcñ7Bâé°Ö ËÕå6óÏ%Žîr!ömlbÜÏh–Ó×rûlí=&˜^b ®r<é9qi£rb+IôŽ—@V2lü¸J'>}åêM1 NdŒ#в Ø]MßAÙ)¨,ô:±ô†ø2!ùzn,þv‹µ£ÆEöâMe˜‡pùÖB;²dEM1š‡Ûá8áE¯Íp±‡hŸËæÆètìN~üE^ã-1óß.ËÏZuëiT‚Ÿ…èZP*ÚÄî~à|£™û…ðžÅDTwHB€ºÔmzb¥¼Ÿ&§™o©TB)ð³ÅœÐ±"F/UfÑÿêõ(M†”²f±ŠcÙœ»Í4iÃÎn=©Ù—¬7Ìß/. {“"Ì88GÂXø%[Ñ:À‰Ç}ò³•7Q”µµ KÜ;~ézã3×CÁ–£Á ä!dä21×ã esÖx-+ thØËõ¿ ûˆÛÇsmš#™ » žŸ×kUòÍÆŸ¿È륥סf]áf?,u "AM‘´gjrs»˜«&@mÌíæ<ñýúJ2<ÉGu¾wÑÈh@œófÇMD5/ÐÐ3 õæ yq°»‘ÝþåÁéBqo„ê‹»Ôɪh3Ìc‹—¥ ÍA)Ìà6™´Y³ö&€Èõf†€]oÄ:ÂZw)8ÔØ °ÐHžõ³¿Á)wy°i‰ù-É:~f·ÈiHË Ám„í×tf9bLN$Zî[Ñ]zrҔ펉©îÄÁ;R¦.»V"%-îçL¡êK×=XKs@÷ÛQº,y“7–ˆ-Ù‡9½£& ­8_×)²e³G}wùÓË|S UÆuœÿàŽOZmù:y²VIÈ€ÑÑ<‹CXfë\JÄò¹ç†·óÕif€ñǶéò)rƒm ¦¬Ði˜4ÔA/¸O'ÈP s§O‰7»š¡Æ½Ý‘’óþ5|Í„£³ÐrÑñM¿ó{¦ŽÔø×:ÔÕó r—¥©(ÕènžOŽƒUuåD&Y‡J"¼¶º¶X©ÒJ?Tõ“0]°¡¡œrìšÍ1…¶îqмb”â LAvº#b-uâl0n§,¡84jUænx›À9s0qr—bovaµR/¶f¡«~µYwNàÀBFÁuψÞ>i’Qa0ó2R"˜¹ÎR]7‚¸xBkŒ”M»”°hÒ'{á…[ 8c©s²üy®fvø˜±[ó·VxFúŒø ð‘9P-âKÔóœiûYÙ¯%rõÝÓÖH»:X1ž¥î¯h¡ô§ŸÁ–Š¢²¸§ïgSBbÕ©H Â{7:ž‡ÀÚ¯E ¦WÕ |´njØ@0µNy0â8‚”@ýHY­5’&þTú”;yÖ(ÛÐåA5Œö˜ÝßÒBšXP‚4a$0@9 ÄIƒHŒ Ùå|›d*ÞÂ} $j-‡}§j—Q§´ &ê(ò82Lyʺ«AH•‹>i/¹ >4ö.Ïêü’\’˳ò™ÃK+ͺqHÜ#Žè±Π/é ösÿ¨í;`Iº2“« í©Ø ;Ùl…(¼Žžòn6;TLShâ<Ïp^Î&‡Ü¢ÑFî= ä¼øZF^ˆÙVb'§EòÕöDŽ·†!P\4Ðhz„ä¸D÷´.c:zhâ’<îšáňEm¼[,âx "•’QªúÇK‘F_yܪ›)ó ÂR™ –óâ±R–Åì¥W$Tz²tš,¬öV—Ò`En¯*>ÉÜVWÕ‰í½0Ú7ÕFìb¢üæJ÷ó:U~˶Ô%–ÉÛи£ê¹[ã ïϼ“)OÓÖ?c¸µdæ¤à9”ñˆç•ub5Ÿ&0Åf²Xk±ÙȲAEçT»¯Ý÷Ô[aÔíêæU꿊ֈt®Œž‹‚RùyÊ¥V€$Ú¼œ~g¶ô®%m]†çìñYלûj±ñ0¦L âÎÀ8žÈÒ¼dLÔ®¡Â:¥ý§)\hÞGšgáÇë¦9)"û I‚6¤}ˆóß¡Æùgè,ͦAQ1>™¾ÚD oÌ«ŽÒµÈ žQRéÛâ_‘ƒˆ‹i£|†å pÁ ŸC89§)½ri:f‡TK?¢‘é4Ü"G/ì ·§¶­H'{ Ì -úG8®Î²ˆf•ê¶Wò¹˜Ÿ¶¾I]=ôxw˽¼Eµ¡ìŠÑÈ N=ÕŽ&BWÕY«{oH«CéhÂrç¯üÜ«Ü׎F­¬õÊ)›ðu4ªÜWäŒF¿’óLãŽn ´ÿ°²¸0‡›&½ ˆÃyáÛÛ7<Ò|sÿH>bÅû³pM•G#cÜÔ”A’«ï+ž–§mOª:ÿdÉe®ÖT p¼,ºçÿÄœ·Åñh #lûî¹q€éÅJHü®€²yÝO^Ü\ÐÈYöíl¨A I¼98¢Å¶oÝæáËdU8!k Ç“ïØŠ÷[{C‹ÀõÅLû 1®”ÙËžÌdÃ|×Îæ2ômÏg°p¦.HNuç_>^"½4_»Œ#lkÍ šÁÆßŽ;DAÔ û  h ¿wGÑCÿD®EMÂÚÀ4Ol®µ{ Â3ðnëÀ¹o“®øz¶ œýh‹ØM“’Ó“½Ê?©ûÆè3§Ê¹$ª¼=Ûuv»#þ˜‹?˜âøÌ‰µc fó‰Üò]u°„Fõµ“a°Ï°¸n zÉ“cYSÂH<=ÑøË ÅÕK–ÝÈ®¸ÔÆóÜÑAÔBß3Nôb¢Î0tù›ÀâF6ôP3X^_Þ™&D‹ãÛû¹ï¼ªMLJ°/œ{§NÒK…½o2›à¹Ç­œå9»Ÿ(r‡šÖ¬é ¨œº-KÄŒk¡ `V@´úÆZ3’„T€!FSÄmÝ•ÁÏÜäBi<”‹èú`fÍ:<”!ÙàôKN’ÂMjÈ¿³åýË<Ì”z-cýìû;}]26c RÔ’<§5$KØ…ùôœž¼<¥ò 5áÇã[*4„óIÕg‰xGý+Òz8‡–Cל,1Ò~ûñp^©ƒÕßpT5^®jcØÔÇÅ^´n­h¾þ¦äzËÆ uîyk™j]Ù>‡¸©› NDgU´eÿõz{˜¤]¹*@“7ezIÐ ÷“îJâÔáϤUY,NsW9ˆñé>×vÌá ƒ7—òƒ}c ò¨6ÞxƒŸ©T{Ó8—ì%ˆ‡]Ëî¹ÕcT5ô®²ïk8F}„G]:O@Þ—›a¼±4,9“ƒç)jC©zÜ$‹v›ir­ ºLCkn–iå±dÃïXÆaçJ…‘ýB? ¾!|Ù•ùȧÔbxM°Cp79!x±[­z@Ç¥C'D£ðá×f®ÀL—ƒ¿kœÖ¾’L¦ÈcuÞ6×ÿ4&eðèdMŒÉ°Ÿ…k `Z÷æëVð:“x_OÕÛáð0ƒ-L‘ÒæN~!tØàŸüß* :’øHèxÛ£_¨ºúfvøÉÅ5CU˜û\ÌÍ㞀.^Te·£Š!˜WGÆbÛJkȱ%ßš9²¹X,–äºÈ£ø. ”¦å¦ÏíÄ;#‚L­'TÄï_f,€Â†Dœ¶"ƒ)š£ÎVž}Âl" í•"ê4Q„[> xÐîëRûƒÅ½u Õ¦‹c œÖ…—ºF7ðTÑqzÿnßy^´ªm?²« $ýåZŽžàÀÔ èÜ!ä6®·©ö›xfVÛ/[fL鵞¡ùßH Oÿq§ƒ…‰\ŠT”=U :Ëð‡à žWLZî@ ¿’)˜וnºÏÙÒHEØÆyX‚2ã¬"·»$¹[‰,PË˦âRæ²$¢ÆïM1ââɤÓÿ"[ªa«K1_Ï™4¼bº‚ÿƒÝvMzÆ­€äFù @6Ž9«pÝᇚõWʲégÈô‰˨>½ ˜:ó'«_¬ÁÁãOÕ/òlî…gHÄ%¸–•ä% ±ã¬è2ZšüëCu#[¥>§šÀæxQµñJë¹§Ð (”Zmõ½µE5˜ÎðÖÕË…1ó*œcm7.ØÖ¸EÜØ’ âIžú¥ºm¼ÈÕÍlá¿`ºhKVËUUŠÈ¦Æ›ª›çiŒÏÃØb•›”= )&Pž«ZJé*;Uxñž+3€ÖÁÑk©£û¹üªå’×98·Èê=é­GÈí͉W6A¦KÃ|¨lÓõ¸ÂÉЬXÿ©£pYk^×m ïB$iV.´Z®¶º9ÉG(&(@IbjIƒ²$¢²rŸ&ÌÎpÃΞ~Fž}ÁļËjõpé2TºlˆL1WVP;’}Ñå„ÀŽ|]a¢ŸŽÞ\”û£jk!+§XÌp%€-!%ˆÉÒsø†ö“g3¿ZÛè-Ð4s±xÞéM™zÜz¼ VyVËœ Õìév«l#*ž[¢1Ììæ·PKÐÀlRžNƒÍ\C<}çäùV6‘A ˆ®M“­9{S“>¸7rœWf¬–^Q`’"Âí“Ln¬0©ÿð>|RʤðÉÇG‰Xe&mÈܨ×cœ…Ý¡ÞáM~S‹Ù ó ƒVäú™lÛ7mæœÏ<þ4dnÜü·õNS®åÝb‡ß½!ÒùúLwîJ˜1ä©uj2YVЛ¹Œw/NÈÍõþˆñÂ4xvs¼Ã“q #•eÒ“Ïýä8⎸ß3ðR®à2–Ô=@k¬Y§‚i•ÁÈÌM^'‰Ï{îúG+Ì“=wª¯;$‚Å‹g)Ic¹Û̜ϱ0šœC|¹:C}™q£áK»š‰½·bjÍ<µð@™éo¿ŽZ›®‰ÄÑ—GC±vröü+‰Ï$ìÄý,3ÎËŸD '½Áý`{uÏÍÏ+¤37eIt:æWÌ¡7IZnß&JÈ&m?™û¸ÉÔ<ÃHkôÚdjˆÍ霻9¨ Çè½ÖÖ'«e¾È·v!dUÍÞ«“—)—þªãw1›Æ¾`MˆäjAô¹kɽ8˜ø~6IÆì¯uÛæ¼Êcçˆ9ÌNøb¹ù©µV}ªŽw#\ƒªy³"NXŒ#ä¶ùM%a äo%†€Ûµä|e¢§k¶§¬ ~Âuö³Àh©DµÃ@;•»:RVvÖÊiZq\dDI§~Ulè‘7îÊÅbì|jÀ°Q ¼Dô°MûR…jË(öÞ=ä„g‚+¡ÞA¨gµYSäœÌˆàÓA솤írÔE\xJ¬l˜, GMv×¼„ÙŒ¼O±u»”9–üO1xïyiƒ‚qºÊEvk?ôS ¤gÄ¡Už|kÂC—(•ìKÔÕÅ'®•HPo? ÏÊ©‹ô8»²ŸXøÛF Þ±›4·¸l‡…ržoùÖ¿{¾*ð£ È Œ—Æ:®éJ‹JÚé|pÿ<×™Wç51ÿ$$U¸°(Çz¤ÖÀ€À†ìC¿ôŽy¿¥Ñ1<±¯Z°Ái¬³ØKÓ˜"Wÿ^Ó¡× ›úÎ$)r%߈Å+’Oö¸· ³l°ëFÏr‚WˆòZ·G¸† ï‰ê 0ªÙFkŽ!¸ë÷szyι«°˘q_ TÈîgÖøÆ 䙸¦$µwqÅlõL¾ÉLîx1õråH‡ƒpçgí&þmŽÖ¯—îYÎãü/jÑÊüµACõdS/óÞi~Úþ¶©XÇš’•ù}_4 Ú,æH1¡VjÄ–ý_íbœ®”XI—3…£Øçš§<»1 ¹µ†ì¹”ë#VÔ±îGP³+6ϼ…7Ÿ™‹ ÏTŸGTJ ’Êmâ3q“íNZÔ± A)„Ú˜ü‡Oµš*Eäh$¿TÏòª=oò•\®üg8XlÅ{(Ý?ãb¦4D|>Yö½ÉSÐw¢’Vã¶»_­þM0gYè›\W±;'á*Ì ®Þ­ÊEuû­Z q¸)dóÕ ØÓÜךn·¢P†!ÊFÖì§ù“Õ¡¤L•ζ• ‘–c‰îhâò›,“¶õÆ•܆Ùlüx^ðD2‹ç­DÚ áÓ:ÂO¸‡uîÎËüøv`¡‚ë×}Ô’>w·!)¶Kw<±“ЦwÛ»þ(œ›šI$uH&š*Ö¹fÅê%nÊ“Nÿ3¿Õ®o Û«lR…o›é¶›ÂØ9€È€;º—ßù00‰ ‚PoÝbŠjœ€m§ZÒ&å'¿eÂ.Vjwiä5 >Yd¥”ȉBù 0ö¥ƒ¯~·k Ø^ûTºâW‰2Ö›ó¨rCÖº¬Š¾2ŽÌ"“ý¢<ë((lÞ;‹>V¤ÿäžq l®µ8cw ç#½œu{µ <ã‹V#Ùº·{êx®>È^xä8Y¸OîÓUíª …°çõþ¶ŸT" œüÏ~.éLÑu2²¾Ì|±æ@³ä3Q)Õ Gw’ô§3£D/°dk:Fw€Ø©öûéÀ¸R—`QQ¤[Gù¶kƒLÈ2SþMýÚI'ù¼O´ñÛ0k‚±o“dÅ©¨Æ±…l%z§ÎtjÙ|u¥ Õ—HcmôÙã`1¼ÊÌ«¸(z‚Ú6½½®]g5íǤäšú×a~þ0u›AŒ%â$|·fø&=ØAR~²Àï)E¬øÁ)f¸óAæ'¦Ã..•þ›çÜ#§•(ЦN6>¯ÿUßÔÎ!?ý c-ÉU¾$éæY¹+Sø=*>ø14îcR#hñW=tWc@è?Øa6¥1Öë¦û£%z)<Ó>Ú‚Ìð¢.l¶_ k¯ÚY)#‘X‘“¢‘L9Д3þº|ÞÕfgÈQ‘•ŸqøÃ%†pKm>¾¹ý ’#]BÂÑÔ·A$’ç¥T€# "e`VŒ8]\ãxjá(%ìüMG1aDRŸÙOZ?<(ŒSÍmÜëV@Dªë¸|´:v ]žs°ÔB@ÖÌœ·þå-mÙ˜JÑ‚Á„š r£&9´ˆp¨Ósöߤy-À6P•§Å”ŠP2ˆNÆGŠ5ÔF]I”íC‹ÜÐyD*¢IŽÒ‡+Öûv›ž]ÃË)úχLJ#¾NÆ‹Š¯Ø áTãçÆ›cõÎ;(G¸?gL[(´¡uÌçZI vidŽNpÎ×mçU³nécž4µ½CœtôZã‰FŽI§?í—¸½3xKäÈD?'Øu4ó[yClÖã’‰°’ë‚bÒÛ]`²ÊÑ)~}lûÑeÆ;ø¹ÈÅ–ÓŽª: *u•U†­éúiá@›ôu² ~Ì®½GmqȪÒÝ4²8‚3ð¼&ºöɇå2Õ²þ—&È é^€cåN,‹[Ö]ôÉ©3j“Äÿ_M”‚´°[\þŸ<¬“îaNtà–m!Ы½û¥ò¿ϵt èa>hOPò›:ÿ¨âc¦»Èœï¢¦ª5ñ¬h“#íÉ pûH=”Pxw·r¸8B›—CÚHeª>6rúgê”ãZ221ÀW´V˜ËˆŠõäÚÙÆ@úóË_TG´ \æ$ºlŽ·)­Ø÷”œ“+²½ç*«»cî³U>nI¡ÁÏ1IÅw?´noŽt°YE°è ÞuÞeY.,ˆ¯¾¦„l• ÂAµ‰c‘*@®¯òí­¬5édtË.P“ÇD¦vR¹/íç1ð8¬ž]•C‰·c93&”F§x‚ïþh6Õè .Òz“—á]éTÇÝgj§lbÈ›þCšdĘaÇqÒ{ eP…ñ"¾«V0TU@3>Ç?4eÙ×þ¸à8{òT4¦—‰sóyì¥Vª¯r‡³rú›ž<|J¦R„ðÜcªœj{ÇKÍE‚µâÛ{'+5Ë KÙo¾hÂ÷êôô ŠQÔÊ—˜’ú0·Jù¯f{xc h@5!Æû< µ ºÜÂÊìÔÖ=»¾¡ØmCý+­†5à¶þ 1Ì:f­·A‡ñp´r\âFÆZÿ}ö7%æpìÙˆ¶ic€)~«þà £wö&øìKYb•T#']™’F˜péTm3Í"„ŸÀª.¨ý†jÙ…`z Š¡=ç}Þ©IŸŠ/¢[Ü3”ÜaV· Ê9‰é›qÙaÇÊø4o™`Ú/P·YMuº€Ãû°\­Yálw œJ°»d ²Pâä[ èÜã\4ÑÝ1殥ñ×!°˜gšï¤n‰Ç¨«ÕBS“þ– ^Î4uîoz‚áòçükÆc\8„¦²E™/+vCÞë<ù®ù×l#uÊCöPÛÍ~ÇÚµ]ù„Ç_>Urçc•˜ukÍüÃD [|x*ÁWa®ôP­¾säB¾{øî®!’%—~æ‡ ÝV´1OÏäO°ôˆ®[ºÒX@ÀK]KîVk4`‡œ—G¼}Ú RZ¡´\³s¡†â&°ïIJJN§[ÎU§Ì6ù³mÇ«[—µQöÇ,ï`WÆkåASõÓÍ ¹À‹ÖÖùÒe¿ãÅ­tèR|GKŒ ~µ"Ÿ›Ltk»¨`¹ÿnÔ(8UŠn4cG°Xôô—Ld’x ø›/˜û–ÏdZå¾'ÔýC靿QÑ~ˇñQž• :>«çFDl•îéá$ÛöÍùϯeaßKÉ_EKQ¡Û6m7££Î)ë[ ü—{ö´;¥ÂÜ«›k’€lÑL>éÑ ,» £IkÚx·0aé„Ç”òOWt_Åg˜ÂãôÑË€³¼›*,¾’bdF6Xý"|Ž$!½“Ö-fú÷¸ e±ê H®?­çh+0ûªm–µ¡’CÜà~i$}òþvª¨Y™@ç¨y¬°@ æ¸ ŠÓßJâ£Ø÷aR3² b1ó!¹ø‰/…¬)5Ü…nî›L÷,:Žba…g×^ê HÀÆñáâfZ×¢~nJ $¨ ÄXURæn£÷(Zê¼¢‚<„ýŸLŽgt@\WßO!Ãî;!IËå‚ðŸ˜QŽÏr-£s=n+°Æ± dܵ·ø0\\^ÎS™ ©^(Íêš„¾vi[GgŸÖ;vˆAx!a;Í9íb ÚäÖþޏþ¥69áâLŽ#=Í)‚r,8=Æ“á¿0 tÏ-i+UØŽ^E=+œà/9%ÇHbŒV9ÙÜe3æ|}è]…å𦕖¢ƒÚ¸ÞVÍö‹û8±ÀXÕ£#ür¿¾õû÷ÊYEc|$ñ6ÃFšèçn“®RCµ9È._DÒ MJò ¢q‡¹”NÈÈ¿üUNII±Õ›wÕI[¡„ü¤‰b¿tz½²ˆ†œŒùÓì¢ÚP›\ XÁ§h˜ùðÇ]N?{Jõ_•s›9R§^ÚbP]¯/Z*p+ êе̫µªhN‰¨7ðx“ß·h“}Õp²îA˜Òˆ×tÆ}Á¿Ô%ü,ãŒÏëv·bNo£PªÀâ[’ªL©l^CÊRez暈žË%ç#:gWªrÃÞùÁ-ª¥DëéuöÖÚËocÚ¸•¹øji7Q!Ìù+Ü®¸~ÇԽŹ­:-«±úö@ kÄŽ±Þ Nü(µeˆ&Êb’gÆÇ±5–°sœ­¯ý’yZ™8kÅ*„¾(²,‚ÌwØ8à"­b]’¾ŽQ§Ýá|îc>2ÀÞ*³%UBŸ\ ³v°ŒPÀ^îËáÒ©úÛ¸$Ù@êã5qHÞJ…‹q-›¿~dñ€®¼o /G*îî7÷‚éC®ÊlÊìíHŸrËQBˆY]N¯ [ñ £H\ä·'=íé ¢kv›C‡à2iùp ÆöUå§uú%&aÊ ßLªËúd'i‰<WN·Ì8P0C–oÇ™gˆvô¹:JÇHtÔp$r ´iM5òÎc(ËÀê»b³/i£ŒÉÆỶH£ÿ€°±bZ&Úº–âeáØ‚˜nþ T‰¯ƒþð¥v‚ UÙC7)‡ÙDâ%iEåÂù¼Ÿ\9`í™Ìhugô¼î·š÷ ¶{%4o?jñè6VA(4³Ä–ôW'¸Áõ=ÅBÑÛAè¦†Žº=Rmb,G:èb]Ù‚HuÏŸÿáuâ2hôZÒÇÚÎÂýóãþÒòsÊþ f¡`Êù²?÷3µLÕÈ- kiŒ7…{.’¢º}JP¬phóô I6«•v3$!œùb"+_«ëúQMzg|p ~?ªã~³ãé.±aOE_Y¶&—Ñã wþ´û,«ÐÉI’%ç.‡EÜaBª¿•ù`/¸ýÅttv·3ß7.SàæôßPås³è˜Gðì`p^í4u ”ÇopPµÆj_zúèO½ KºÝÐóŸ)<­e-µxëÿê› ëïa÷T%¡b©…úË·]½W¨sû¯©² ™|~¡Xé­Dw¨j$?pIœ¯°¼¬r3gÊ?™Üœ,Lh—“#k·‰9oK¸ömk]ìSH0~üÏõyÏßqäâ@ŽëšoàÕÙ;åžÒ— ïc‘²YËN'9eI‰0Øÿ£éÿáP¨?3»°YÜÏ2î'Œq¢p+0Ú3mâø³"©À1‹ãöžïÅZI%ÿèUøi0×­aºð\FÎ#Vç@I0¤e ۸šî} È“aYF¹vð-ë;Øœ· ?p|•SS‹®A¦ZGwé´쯔¡ÿA<÷ç xT±©à© ±ÍsÝ6˵:$o‡‰¾¶×—7B)Aõ‰Î+âÆe BÆøøò[Õ…ŸªѾY~’‡;0o[ßw•nsxë‹/Oqò–Ö˜vôÍÌ·öÁåŵŠyZHW¨Ôu0Œ¹b!L"d[ Œ·!Ì]IÒŒ–YKCn½­ý*'˜ÆÖÕZ ü Ð=¶ÍѰ8<Ò% ò›á{¤[Œ¶:Õ}­ÎÄØOü\ðÉz…¨=h§ÒÓ=dožÐ”;Mâ®~9Û‡Ô·Ê“¿k¥$½å,ˆ?a¯¹t Q~ ‡@2O‡5sèÔf­ïüÎdí¸•Ã6ÇÙ$±ªJó‡6ûN\CɧÆÝªCØÍzïÖIÛ‹WÌ¿ÿA¹‹É¬äV%¼W« A3EךÉw)[“"¤™×‹fVÄ×AÍèsaËôýûeÚù![Y¸;ÅøWÝqav“À{â”ý²íiâÄåêv-Ó7ÿ{¦\›\íla×o±Åµ'ŒoÔÂñ˜Þïÿ0:,Òõ®YÜØ\ñB‘ùFs؇§¤/ùË!×´»#ÒdˆOœäП{ÉÝ¥vHÁô²±'Ââ¾)Qßx<ÊT4èÖ„V8†šU8Üc¡pèŽr,‡Žq¢’‘4~hË•1Þ¤²P¦•o’u4 žc;NKU6³,ª`I)y9_àóš¡'cªºepÙX¯‡Mï'®3¿àˆ©:°êBJL·Ö,¯W°–Š™ ŽY£¯‰@e¹(•ïC Ö,j·O’袅ù€Ã€gíÐâ©þ`oÓÌÙ_”Ë3 ÈÕ¢¼±jY´)ÕŠÁpŠ-ü¾zÛ°á¥óö½>Haõ¡+Œ“ô”ÑŸˆ¢36¼Ÿ[q§աõß‚`Æõf2|Ðáàîš»<”·T·óC\}$ôß¹y-¢ŸÍªËÃù^žXÐÖeLÇ!˜væ’ÚuÚåÏ´`¶²ÜŽv&: ¦ å‘þ™ì”èh‰<(_ãùÞ܃j' ™ÝPú ,ý=•Y@ññA&(W7Y£ãï9Dmó*š>ïšT×  SaÎ ØkïPú¯ÙÓ(Ì4Jj4éB?§åÝ4Y2Œ”ûïÕ|ÒY¨4Æø(´Î%WN(n¼£L&ã“ ™?S ðí4_;šœ—@›˜Î½Onè9ŒFMõ'7 LÑ k’³\©U´M^ÍY’,ƘAë0óøyÿ»ŽÚŸ¯›ïÜö;l²jÛ=Ç(SÙ[f”ˆƒóœ 7Ö‘|%íâl\ZE§Ï#t)ylÎÄó“î>Y˜v\A;õ%¸y6äzÄ·1Èxäìø¯¿?ù³)äsfÒq¦ô•纲æöŸÑ̳z0Ã$Ñq-;ÝÓQ’ä¢a¼X8ç^mü$dŽÊXøÁ·¬àeW-X•¤pFË +ƒâ™Ud]Á×U¾L¤_>#¨ˆª ևδ?¬ƒWà °Ï©EõÔpŸ?’El/LÔÏiUy{™ *kŠˆrH¬Ú™'¢’{R„ê12ëÞR™ôοÈÅï'´¸ºå=°¾¥ ÿ1I`ÙVÕ „x=·uJìï2vn¡¦u’’)’øWIí#”¡ eKAîõVþþ§ ÎÞë…æ£çKF›|)Ñ%TÃT=ßéjJöÂ-Ïï0÷æ>ÆÍ@‚©%â¶¡­câ¸4hý? ã{†êC"±‰»'¬ýšIÔNM C)¤YŒìÆN7†æéR„|žJô®;PÀ.½þ¡…¶ºSím±U^5’ÂNƒE lQ·z…"úŸ¸†ÉÖ‡½±+Mëwñjz~Þä®ñ yø›é+6îÑìÐĵþ²û†‘ü.ýÉY€·}yB[–E*&S)N¶s‡££Á¼Oot9,©ÿÿ«²uT¿ÌgËs”ŽŠ¸¾°ÍN[g£I>Nº¿¯šN¥%cå Ýq2†ù±>¹TÑ&fbÈýþÂþýF"* Dˆæ‹:‰¯‚:^1Ÿk+ÓžQMvX6æ¨t$ÕÈDŽû¹^éJ[gQ8àךçQµÖd~:ÙBmõ˜ÂèŸ\^q)W:Rñê&+Ÿ¹,qÅÉtýtAc9H2/JþªÑÑ­Ò}ËÉÆˆê°Y1G6áijI>ûÁênµ¥M¢“&„qB(àCÞ°¤ià¯x[–@0)¼¢fW¥=kþüì4‡‰ÐJ±ï/n3o´›ssÍ ¹kë[çÜÒ*AX4ám?¼ØxðVЧg2q¬PùÆQúØØ'ÈØÉVànæU8's59Bu"ʼcÉ®/^š‘NA^GP·ßÙD[IЕáñÑ?ÎÝ ì¢ð$ÖαôM²Ð–ÞT¾ñ’~(qr\ oœpP8"û÷¶ëÁe?7Šel<'Ì+ØÙîå›"ëøCŒOÛÙ‘æ¶&ºP}óÉ©“ ‘ kÉ^ `jÀ¥‚:jm«ueâÁó¾Ü +{Ö²º(õ¼¹µŽöÑP,í³(¨°ÅêNú†üÈNïE×較ÇCSAô(ye7°ØdØÃ3›züª”÷ŧ­½QSØýÏL'©’aï=,8¨ý—yUOÐ äGXñœÖ.A¢{”AW}ºÆŸ˜yð”@æÃ¬íÛ†.tS›–ƒVâªv¿ã[ïºpIͦ;í¨´&6*E1ÛIÓ …×_uÁߟȲIO-æ5iuÜ/ô_ï×ÝÛB_çØ¡¼´F—è Y Ò€@.Fó $Çî&ÞS±$[ÄÉxSL$É|…5Áòþ-ð’/”+9<Ärnñ4eÅDˆT(}ø3,›ñ;O$bpÉ8–(‹½Š’ åh†¦+’ŠÆ÷…Ÿ§`Âuh…NÓ(ÀU’r²~ bæØSÆc¤Ñ‹r{‹+ ïó Ó¾ÀT­‰h¾åš.†R1„Ç#àuÉ?åf]éSWÓB_¼î ƒüÄêP‡Œ=ØV1RpÜKó%ã3®eÆç¦›fÜcÝ h#$N~w£ç’›¹é_?zj–ÎkÐ(á‚!Ð1WfŠÈÈa{DÑëA˜áðéFd‘ôÖ#IIFÀÂ# ÉSn‡£ÈÚ@qùå² ´º{ Çîj¶Âç@™çOH“é«Âäæû#6ÅÏÚph1#quÆÄZøDÑO#ÔוNXÖ›4¯ã¬Qâã`éZY2¶Ùpïxé aoZ$m'ftôPaLÞ¬ã·ü$€«óü-Ý.5`¦Ê¨G‹Òò}1!1Á¨gô‘¾òU\¥OœpöœPŒ~µ¹¾6âêb8IvÒ1Ž'ΜY.u…õ^q{É—»GGæ}qÚqy ªàš[7!Èq{;¾Þ36• -®RÈ—H! KC8 5Ü6ÃP·|‹#Œ‚ok}-h×¥š ºd‹Û@:éÌÐÀc’ô Ï.€Ä1ªÏc'wjIb¤šŸÇ5Yˆqy x±ÝÕ9ÊØ&;늨‡K²iCöD3¦^S¾piÇNF*ÑIÆâÂHY:ã×u³ƒãÖï ÿоRÝÈX+‹Sˆ¦€ÃÈUHçW*}úô(½ÓµÆ†ó¸ATCfo¶C2Úq[ªžùãï厕éä°1D¡³Ù¾o&mÙñYÆ¥*X½§i|’€Âbuàs¥*"Ñþwég[ÒS¿š¶o­ásÑ}8VîW¸ëmQbÍéK£îŠ«ªoN_ùEö˜³è=Í¢÷À Cä¬Áž,pÖ`èøõ»!† ü$©Ü d;¹(µ`ªCÜ7ÖH›— {>Зtf+¥Ô¢’¬ ± HO<ñŸ“¢: =ï³s˜fÄcG}‹&Y€©9—ð”vÁôåªÎνÏepiâ.{f¤Å.èK>lÀÎuçîÏÅC,`éciÅFûŸÿxì£e,a‘aäú'7‡7ð5`YLº[œýÏ3'T“a“†Á Ï{s´¶2*Êc'aˈ€Wè¹ä²@-ÈO)}ÛÏÖÜzçgrQפIÓ¤1·09“óÅYXx¸9ÌÛhö™%s ÌÈ ¦Ö·*^Z,>çŸ<ÁœŸ;&Ãñ>±XŸë“˜{@Ô—ú¿­xs^6Ù7 Ÿm,·Îóê¡MÚÔsâzû6\- MáâÕ i„¦§û)7 "=D_W–¾ÄÖºª`ü4|ZZß·øm­±#Öh=}û»qˆîÏÜ+>4·äÌÙ‹çŸÖ½®]ªe†ºhJ%4 Åt ™n ½!ƒúè`~ BëCü6æGwYÈGÊMMkR Ÿ)€§k™ŽÕ^Ž®5_M \ÌÅð¬¥Ä`"¬>‹k ÊÏÝEàI5ÿ×N¶º>Å2)¬8DJ÷ÃÂdH3ý„}’Ef»ÈÆ缟û)~È ñŸëX.Öj‹ÓðΓªÅ!SþÔ+v¢Fqò7+26 Ɉr° mÐJ¿ åpßWú&¨T‡f3g|l' $az„ÖŸëàPîž=G”òC£‰ÂØ|d“„CB"0 sË×\UGdKs ó¥ ðØÄšÂ˜õ£R¦ ¥fÚAòæ÷øÈL&¸\É}뚌úž¨ :xӬ먻ÛųV+@ìÛo(ÿE XI‹ÜœÂ²†JÅžÕF7Sð}†D¹|ÌNNÝÖt…qÙæ?éPØß—ÄîJW¢f bð™&eJ-tv)¿µNËfÝÀ /@Ù#ôö5~êÕqìÏMPªÎ'ƒq\`ü ~”øÕ$Úe<÷-ϦÓÜ|‚”]ÎÁ²‡ÊÞö¡{N'zžÁQðô…ÑbõEwÕ³øææË 2D³c _ ™v5ð5€¤:úи劶ƒll_̵ nçýG€ÉüÎÚûò¹Èk xiŸ¶…ÉûòU½'ņè1^7µHñ-ÅgK:Ô†v&—î nê¯ó}éѾ—øï$êÏòãΖI>Ùó•‚r:·ñ°_d_S'ìzÙN”¤gÏí|À–tÚþuvä'±ûŒ§Ô€¾×ªÛãL9F °ðkÈ>ü2Cý}´k!Zôñ9¹‹2Ö´ÈÞ¡*Aºø=‡bši¼hÒGø2žüê1ëû"÷‡=ww­LnôJ§xq†µÂÓÌT¤ç¨ÖRw/Ñué#)ÚôÕ¨(†½Œ(“›Yù5¸8®Z3Õ¶P6Ò Á1>v]4Cú`½·5†‘ ¾ÿ“Åv4üR!‡˜¿%Pø§Y*ž©VgXŸÀu[Æyλxb7Å7ªL±)iÓµÂ)wii8 Pœ W/1-ˆ—ãã­LtÚóª²ö [×þnH¸u»˜!?@]'• ´ó#ªÝƒšä°Ù× -%]Æ.¤íža¯RÇaÊÜZ× iˆ•C´ÛÙ:Ϫ‹m&úOwO%ˆzý48ŠC>" >Uéè kûÚnÜS§ÜåGmåâ0²Þë‹®­ ©¶ªÝsnNbæ96ìå|Ž^(Ñ"„Þ¿Ö·„²Aú® ¸B}Úb{‡|5g:à~µxá%|ŠwOó·n½²ü3 pœFðjj ˆO=Ô±th™NïÔÆèEYð+ŒãB’þÁ!˜CÞ–›\Ø!?ÿÚÅ. ïñ¨ÿ¿9ØÏ…\|cæÓæÐœ¤Äj1_ŦZmƒfÍj^o‰LÕÚj—¿3Îo{ fÝeìm1ªù:ìF»iÙ çz)?Ò6Ãoµë`_à›–Òb”wxu˜a€&˜>ïr…$e€¹q.‹˜÷˜fÀVOYu.0“pÎ4½¡‡™ç'9µ}è©ÚvõšéÆUƒ@U?KXÅÒÞ•!!¯Ót§p`( 9{1—Ƹ‹nó´‘ÔÙìgºF.å7º­ü[Ë8ŽS<ÛzG—Z £=ÇX , &$ÚUEˆ6dmϵlUX7«Væ1Ø<°šÂ“TZTPÒ” ^Ü5òÙžj1å>ד‚•¹(ƒ½ðÆ4æ&Å®e p¢ºÌ 1\VÒ##MÝ iŠ(z™B×g)ë6W?Ï’š7w‹ IÛ ÕŠOBv©›Dø%õ®›ÚRáþRÔ=7‡P'¼ Bs]EâÄP¿ÁúZ¾¶£ì¾ 4Œ8@òâ¬íÀ1¸ûå›rc·4Û®|¶/¸‹>‚éŸ`´6ßVG½o¤$+ zŸÐÂ\»ŽyLSÛ0D² 8ÿyãó€y1ÀÂÛ)Ì8>I2à{)21Xñ®@Êëiî<Ï4r†ži½±Ûf¶Ùºí…îÜÙ­S>0_ƒ!XÊX'sj"‘ p·VUv¢Ê"2yKyÏÛi—HÎÎ]Œ\ys”07›)¾ÕfmQáå*7&ˆWֻ佑üM¹íÏH%𷜰ºî]ã> k!©.+)Ê7†ö—€ †Ríw?iÑÍžÚÅܯ۽‡Fa?9_ÿ?Ø n’²T–´^W°4švrCÂho9bB ¾6o/™+{ä*øŽü¯¼î-W—¸® §}£+9ŬøyïB’iø8u«r7éŒÚ*Óúɉ´«@8EÓ¨( Gì®Ï|í{€!75lxØ(d¾r=‚ù¬ ©ñèËÚ,Ö¯‚Ó#N•§AjJ}§E®õ‹Y ©e§’¸Ïö1ÅÚ"ŒA$`.䢠ìÜøÞnQJ`Z¬’  ó¶ª@Y¿Î•£BO)8GÁÛ1-ñ*÷ŠUÃVRŸšžŽt[,ÒbnbW§møG"ÔKvŽ.ñ7çwÞœšf *Ψڛ!V÷/Ziƒ¾á/ía|¸¨3O•™Ï»Ã„zžøÒ!ˆ6~V.N ǧýë1Únp «âÀQÅÑŒµ©žb{ä΃ŒÈòü{sûŽç3~»:>®1艚½I„¤,£Jí¿•þkWKhŠýUmaHkª.,û­CäÝ)Žñ´Ú¦vó†ȾSôàt]*˜ó}›ðÅå14¡x÷æ@c„éá±hO®PSšÐÀhŽ“×¿bîÆ™®Ký Õ~b10ôÈèþúK@3ÔÎ îåà$ R±Ã`Ð(¹Xß‚2Ö²GéøÔ–G¿ŸŒQÃ4è¼ÊãŸà‡U]Ù‚Û¸sv’mGƒÞªdÐNæbþæ‹î¡¿•/ÝkµiÇqER‰ÛÄBÓbjÂú?(äé Z’Ñaë]q ½º÷€És¯ÛŠ»¦¯ߨãüÅ“2dCrGx³åÇJ彪>Ëò÷†Þºw¾ÈF[^Çg€Ü·T²î§0µmBmÁgV[Ý'ŽF‹Ž¢ccçÒ?7f¾§ËíÚJD¾¢š¯¥;ÖJ#–ʭض·&iBHJ`yKŠ›’#÷mlÄ·rÜü/B³ƒ»v^œsµ¼éÞ²Øô(3Ü¿¾2¥- Ä.¢Üf1lµðJß^Bªäô½€‰.íû}~¢Q±µæ||۔™œádÇ9²©âbO|òê¦Üš!z€úµÀh3ÔõÐè«°O3mÁ$$3YÜ;‹ÜÞ¥„…Hh!6:‰p=UnJVûš‡öä'pmä®Ð ÞUóÿ]S¹ŒÀp˜eâë&²ÃX máGL}ŸìL‡—Öž]Üi‹J±™9»Ú:#v‰ÃZùÙ)QޚĥÂ'³å‹“oN SE»š¶• úW9劽Ø§Ñæ7« ‚0.£eÓT Wž˜ÉÇíÉê î{@‘ÿÄDK^Y ¸hbGA‡W]Ûj|¿rPuhºmúOY ¢ÉøF~ä²?ËáZ‹þý’6h~ñ¼ýeËnÉ„ßUöòý;\Õöä¶<‘8ÓÅØø8Ã>¡']>yQÙuùK…°ˆäÌ7§L;ZÏ`O/7+¾‰øDاú@n¬nN]vc@ :£›/p'r[þ?ú®Z)KPŠÄ-¿¡,åáÇïY3ˆ‹7š\[Âmž‚Ž£-n¡GzÔo:„ün ]¶H5JN±t˜Úv²&WHÉ3Õ&Â^s?áHþ›—ÕÝ8Ä l¶šãoÏÉ~ÌTSì̯PÑæ±í)¼$òhá~ÐX‚PüÖü&nº Ù¦ÒXIñÀZ¿’˜Œ¡‰´8|wµV|µ/OêëïÔyððÛͪõÓ£ÈG½´ 7_øÚŸþô™•tJ[ǵAM…~¯èièX²¤ý¤°‡4\±ó‚Ž ÛQü8t57ج­çG|£*ÿ.àH×ä» Ñµ—Ž©ä,ÎûGµ›´ºpd˜Íæ)ÄÝñíÛ„ö¥ ö¬[NWk]hÜÕ ÖU_¯ó‰GÜÒnR¸ážÕºȨÉÈùDˆ/ôx`‰cE±‰RÅGI³(ëƒv| „pj›eiÊÀ1Pï5ÆÒÏ[;o%‡¬¥4|aa {!=/c¼¦š¯Òn¹ÍõÁémÍqɹ€,T°ž“Qh “­2Ý,1€O¡õḓÉ@˜ Ü•'¶Øú"~f"*;ÜA^9xNr°X ¶ÀŽ Ê; ½³ƒ€ñLgÃYaÕןŠpµŠÔˆl²z¤G4&8_èášMèÉÆ?ÄóXý9ÂëÆ2©Ê£×%a4ü$ø‰ŒÊè1’v5U|]vÝ÷ãý D½þiÁúv­ÑÃÊïx˜}µ~í[²>ôµ­%óxJ¥`ÄW½8u©&ào~-CrÖæ³ì[ö©Dœl›cŠ“Ð˜D¤s{|}Étûä´ßfV`|†‹Q4¨åZÌåëc\~¡Û 2rJ½Ÿ\? ‹Oxçm rT†#M&;m‰Ä–‚hœŒÏõIÓZ¹ÊuëíúÊÒé}Ì—¯1w»4Š{çjoªà¹§¥$¬ý0ÛE½ëÐò¼’ÄSöIˆ*¿†³yÜÆÀö&JÍoq_g”"p~e’¡›Ɖ ;ààùq:Æ!àÜúbPµð†xtu‡Þv¦ôˆÈB¨`UJ±_$ÕÛÍ*žì*Þ—°€JÖ ¥æšŽ•k³•àm¯sKÑ/&²ß¾¾•×é?‹e9‡Ë»º¹a_D=sä¸^fƒoö?‰ìÛA½ù¼Ã“º½u^ö€¬BS±|ž[_lLJ(Q©k…_!î O¾#àn¬¡¬Î j™MUч›MÄ®eâ]§i Ýb„ ,°×JuNµ)ÝÍ9™Jö§M—…p*nmUm¸³Zä ’ËÛGk ðúj®Rnì{éuÛ£[ÿ>±i'¯p‡ÐV=®cŒWCÀµ›¤(6[Þ¾xýfCý{l ÑÒâ“Õ‡ˆç#S‰¾^ñõ9Ð4 uYMX1.¾”O1¤9ÌÂyLƒí]ªÇ—zu’2TžÃìû5S‰FO Äý­úå¦ÃÊ¡9¼Í1wŪø{K¤èþ­ãÄxìfJ5ýõ}ƒ-ï·IrÍÑ&¬µíûÆŒ¡f$ýÓ§N Ô–Òò‘x›ÝÑMòøM ¸ gŽjkè}„¿žÖ…`¡1dèu[!Žð”¸[™ý„@¬Y•\¹!m—ãI~16ÞÄ6qV|%ƒNþJÔC&‰E$ïÍg,ôÙÕ¯"¤^'ö8oqˆî¬Ö a®}iºW6è‰Ð{[†5 }žü Ø"w‹á[¥Ò™ Чeà[΋¼…–‘3]ê nŒÏÒ¸)hÕ ¦SþøªÁ¨Ú×RR´<¦òZ_èï´þþèXVâXq"÷0bf½¦,Ý¿’HÄÁøëÊvteß7µü œõ¢Ì´=5΋Xîï¤ÒoÛU— #*±«-N(ŸÒ›ñ¤w¥¦ß]rXÄV¦Â#žjWuV}œ¯fŸ™YCþ3XÀámˆÊh‚V…õ¾'4Ê•®à@¦ÅZ:OM^ÜÈÒÄŒÅeIÌŽO6èñêà)…«ð÷§fÇ2aÝ©ø{½%¸#ï{¤Q)˜&–ôÁ«Ääÿ$;y%äVÊŽÒ(;ÖBAš¬¶ƒäŽ)Çôýæ(BÇçÐÀº+ÐRl1¡ô¦ßÌ`¿nA‚ä;BîÍŽÒp"ê_ãØ @ŽeTÏ‚ê˜é¡'†5EïQ¤:ûEu‚eÞ™>”é7Ì¿¦âû¶»Ò¦éÒ ˆœMDmØ„¨ã$ÊC(–ÿ£ß¥/PÎSrIR§š±Þ¿†Ê&½’î÷Qy‘;‡%ˆŠÏÐc„â#QÞÔL9ðù”?´Ï3s~:Xøë°Ìùþg¬,»‰…PšoInŠã¤(áåfc«SGZÁ ,€pt;_w½^9%N `ëºQ݆n8ï) WÌ ]«Â$º%H˜%2ûH5S¤I ®$„J½‰‡ÿ ©~ ÞŠzVP‚h.¤½/öù¿M½àXºÕ׊ŠãîiF´·ì×¥³T¼™P|&5É-vŒfÈ3¤Úo ¼»§Cô4‹ŽApëÎÆïYëçÆË*ÔÕÎRÿ¸ÃŒdp[Þ|å9çç»5WqTš`ÔôœiMÙþèŽxA\yO×RŸ Wêg9ìÞ£Rº47ñÝ%õAÒ¹U«ä´é’¯¨+éÉëQ‘¢•‡Øö¼l·Ö¾ˆ‘i5âÝhÞKÙÒ Ú=×v³Ý¸ S‘k÷Vù¿È{XÜ'%Ù±™®ùÕç"*©€Õ|þÇ¡FZ”ø”$<øý§ï»¼'p÷s¹nóí‘þ[êÞ"о×Ý„V‰±æ•ƒÃ·ô(˜îè„©™kÃÿ^¨J••~ xûÍÿÆ{+®·¥µ|NZ YÕ¡½A&àFò,÷_§Ê9}zÎAqYcuÔx+Ê”i¦Ž'fÔÝTŠ7æL<ün’–^œÁ¶Ôæ®±'üæ[8Þs–¥«S¾jïn@93,—ê-B¤wOì9—‘JÄw¥œBvðWÔ„&zšçˆá‚Q9‰4͵\ó±K Ýß5 Ðè78Y“ƒÇb~z,\Ù“„¤qœîÊVìkûŽ~À2 wïòU¡JƒÊ÷˜Tƒ:­lœ*û-Ÿ"ÿÑáàÁ±¹µúýJ¤2Ÿ0Dü˘ÄÙ‹ÿó˜½o¾îõH?ìó©ˆécVïr×-ΠþQ`Äœ_°M]³eÇCcN¶l\PUwTeÍá$qJRîD×±9;´vÇ~Žl΀äÚ;äóå2 [f²è‹=ä M’\ À…ôÅøÔ§¼Cñ¤å0»|÷¬[i OŒ]ò;6Òÿ~ÃÝýîl¯*òem'(µQ°ñ³*‘S’þ\¾áWD@—L¤¬þᇘþ}º(³F˜œ¦%›£ §à†Cž)%âÔÎ6Ý™K³JG ZNɈ:põÁV?ƒnq’»†%kúe£7Ûó´tÎDøý\TÂFXï”nÂÊ÷8¹¼1¸fHãªÒAwʲüNÅÖ‹ó¤´Þ× Í_«^ õòšùAcÒN=Ú©%R8‹ÇSþu!„Yã%å5.È.z9&R‘4¦ÁÍmš{b£œõùQ€u Ú<ºCì*u ˆ(¢¥ìP-¢–gž›zYS¹$àxKÖÖŠÊšÕo¼¯ ZÂNåѹ'6bÙƒöª™ÅVŒlLE4eIâ+,Õkî‚Z˜Ý:-:Kh¥þƒæŸfYÊãžá=ÀEn²¦a=<„ñ²[©6>Xô²m°"N4îìa‰f (%•.­Ìz»BÖ~Ñê]Û­÷y³ào%y 9ÂP  ¿& iPŸ«˜[óTïô`wYIÍšcpœ”òjuÜ`”šØVͨdz} Ïä[x7些šK#t4Œr „ë礿;ýoJu© á$Œðí …‹¼îäEtÃh0TÕò”eENÍCeð8M†<Ý×AQˆ×©Æ(s¶*ÂPy/;nó­)º¨&|cuuŠû󣋈Õ7“G?ZêË+kÍ–¯nÚ-u%¹8Zý*Òøqçi®3º.Ô¸¼v Ëäp2„´èïŒY Í&FÛæoÿ•5iM³Ù(LµÒÁ¸œíÔb÷ QæjžônÌ ­©Å–°u¢ëžÆ×‰ïá|µ5—¹Ìj¯K*Þ Ã=êI¬~‡x7[²@ø~’E¦&i#ƒ½¡zm¹+—à:Ö¦%ˆ“ p]‡ 80é;üŒm­~}¢yé¤CRCØËleU8Sö¬ÓW ¨†1kÀ¦wI÷²öAc j¿ Uê–0Ì`–5³“‰‘Z†jŸù¸ý„\LÉWlÞ[p-­%•êŒ ä/°¸Å›gV€~ôc’îP=i²ê ÚÌÍ+õöÄ8`ŽšVR¯ž1…ÀÛÙ}[¿~Žú Úcvið­j@X 1æÜ_pðn|gcû–7EUÂ7èìÿ])Nvb›*ÅLp¸6MÅ2ÿZ´ÎŒ°Ïßœ„Š›¤‚Ë‚tÖìBeœ9=ª4å[à]zÐȬó ”ÁY¦]öZ;uÖ'÷Ñ!_̾Ö¦ L2ýTŠ>$Lg¢Ü®gE]ùCÑÚ8ìZ:º8Gc‚µKH¢cZõÈÉHžà õS^Jô×2[mLú…{øh2Ï7ŽCy9×Á:Ö[:™÷S^»7¶ìd¶¡œYœÙ¼v×Q/N”zø?ÉK«ò‹N *Y¶_(Ñù  avÂ«× æuSóaWn_ ×'€lµÁTÞÀi›±°3òdføc³üž½deϨØ9a ú‘¨·{×U‡‰ºᙑ*äÕK#Ý7óbŸ×œç„T®ÃIÀ{ñ>…‡= \·cÀêò»ÏÜ4Ÿ>Kq*€˜°ÛßÊ’:Ì*»u߯v É‘ÝSê˜Y”VóVcˆº,]˜þûîÍÙ‹ñˆ¸Ü„"‰ W¯³ŽP7¤AÝ {×%h« þÂFžrüê;çwAigcÜ¿õêøQ­ÒjÑEl‘€}ÞjSS·åÇ;¯>*¡PŒûxœ*‹§{À,2[TЇ°wlzcN”Ɔ³çÑÿÈÅ–„Üé;v-sT º%IHI:CÉ¡Ž0ošˆ“ñðÐÛcò\ÓÍpØŒÈ䬰S“‚˜ŸŸSªBÄÇ(ªÕf6¨e° úîk.ø®A†s:¯×ñ %”^R.<Æ4Ú;g©6? 5ƒ+Êçõ]GZ}ÖÑl&Ҁܠæï©ý?7¥OÝÂÜÊkCâ$}»,–”¹bŠÉéÑ¥ZlZrHÃ.¸,ûd~ÝŠ°W©ñ@xE.÷ÈŠ<@ _Ï»2úÆ­ä„ZgÐ¥ÿÿ¤Í´N åá,€’/xðûSϦfBjj9:Í_öá!MÒý4zšlç²î–œ´®PÕ«ƒÓHG aäѬ¢öô§F^>Ì92 Xg9˜e.ßJya…á)¤~CMÈtÁ¯š°Û¾tšØé!IÔz$Üñù«×»cý¦ƒ² ÷µ%~‡hÁ°|]˜ØàPd§þ½y¼×KZ˜œÁÆúLßlìðáäuÛ™Ÿ±àùØ~ÕÄ–ˆƒï"cX+Rµù.xQJò5DÙñê$¿‘f…?KÙàúÂ*¢pÖ²„ãí­TŒ©äów5ÓCA%Â΂¤r2I \U¯G¬–t5-.Ÿ3Ê=/{Ó ù×& ¨.±î¨î®è¸¶°äÑhÉaçËxxM¡#Ä·½ú©0¡Ž¥ˆ‹'ã€Q´nÝ!cÈ·DûýÆ+ô8"Lú»Ê’$å òïÿ[m‚KñKé"Eöá¡êÊÍY‚ŸÿƵö{-éÜS7ð°ÍÕßå‘[Dh‰7˜Ñ×*ƒg˜åØÇ28'½vù§ÆÕ˜Žô¼ÿïµÁàÚ§±\¨‰C• ¸ä„·X¼e©*ðM(¯ÌJ>º55“§åBø¬þ‡)NH1evô5·ÞÊ ßžËÿ[ÎÔH­B©ó-壢zOl{ôr&üx ±ØƒˆtB(- &½ƒ›§çQŒÛ°R‡0•Ç89Œ^¡©e<.:•+•‹ú‚\å^èe‘­µË½—š±5äϸ¸1¬û¯½†uuö’w'þ !Ê6A¶aHÌöž@nØ”gTX"àžÀ=Ò’ÑÃÐbï]Úƒ¸/D,‹ OZéžÃYésÙÅ@6QÏåJûeY²ì6i…˜í—±Ôý‘ædŽ^ÔÞ-³ÝüàÒ9è”Ä}ÊÍñ„“«(>~*è[íÈ5.–½“È‹]òž @I-cBè’õHpßëZž9„B+lè=Zð@'²)òš <кª=+)aøP¾O¨_úÙ›±§–f0€¹$Û=Ý¢5Rœ¥à´Õ-wÝ9E`¬{@¿½Lˆ¥ n\l°dÕÉöçvð·oÇ,ådÛÞë ß%’‚€6ò1_U³3£¿í­¢t|ҿ܉øÒõ>‡ÿ¶;t‰Ð^Þ5hžÊ±Ó+\nÀÉz…~é@>z‹iÆì/ÜÍíqs›—4 T;­óqñÐÑÒ'ÇX]e¦õ›&³æ [;Îâ^p"¸à…jk#Éž\Wv~JÚ¾¹âê›wqË¿‹ó³+ž€!Žê«Ì“ØúH+@=x.d99Î|!”zü•¬”:µè+GãûsóÌy‰Ž°®¶ÞζóÿâñB–á}="ÜÁ=°–ϧ6µ@¾OAÌjeýH ÀßZ®ìXa1<Ÿ1¨£ñúU¿¯±AÏbr™_Âfv{úg“m4>ü<ç¦Ýò3`rÃ.ŸL¡|ÌÜ2øl# T/»„Rªz±G.-¤LQ‡ç«&M>Șq«ô¥rè$òlÌoö%ïãCr¼a Pf‹ûE<’H´n}Úš¨å– ´©èaï5;°Okƒš~ýÓ)’ùãÌ*|´ £fÏÐkc@¢Ïd7Y‘57ßõf8ÒE­€1&^†ÝÏÛ˜lÔïZ †/§^ù-0ÏhHj*liàWDÌö»iMî¼A…šqÃùöPĵò®ž¢“Bì=J¢ÿ!€ r÷u—lX„¤¢ÌÕV±Ä‰ÀéÕîjž³§³}8y¶ÎÉCP™ b[Aî>…žú åjCš—+c3I,ß+å—Q)“N6(1v#,36Ñ;‡j£†Þ‰;>¶ô4>Ïów€#$Bã(½9ŒÖoá¬äöçN“6ò•ø\éS,ˆº Þé'¯•w-YìW(2MÞ1Ÿºp+eeTÛ¬ÖC‰(‹ÐÆúaM©¤Ë *Ð5ÈÄ×'ãµ#o-”ç­èE-ÎÊÿÜ,‚'C{›F{Å ±´/œ“óãÊ un, ƒóI±îtêWgQ¦ý›dN~¿EVÿ"ß ³c:¹>,àj›ËøÞeë:9 pZ+)Ó KÖóF¨öîà·7í0a=b"\g±ÏÏ6™ì®Ì}Â˓¶AÈHTó¬ù…™(á»tXˆßqÈæ:0î¶HOy#Û4·_ûÈŸeu1ƒ‰–h5úÍþªÇ ¹¸zEí¯×ú”Q6wÕ†ÇOÒaÑQ‰±[´â%X°|[¡f4åû<ˆÚ¶ãAÊÒp†J K¯°¶ë ípˆA“J.%¾L-Rg–P—ú¶’%–ö(Ékd{·pjû²þxÚÇ ÉY7_Ž•'…Ù‘Oм“øÿ+J:†<‰U^Œ>ÂB]<,¾èvCÆŽÇî¹OB7.c*—6÷<<3GqÛŠÍnUØÕa§2"ë£ Ôe»Ð%I)6„v\Î2üaµÀ®.Šz‡$( ºr©;¹ ô8l}ÛÖï8¢w×HuÖÀŒÿÇšÊ8z¨¡€üNÜh2°¢iÿ›¼‡ö_ñ³é~ÇË _–Û:\çâ„$ f˜s2%íçv³>ÉÑ>.KaËbg@ŽU59ò0K)é+oC"áÑÄùSÕ¦E2 rhüèeCs¸*#„ÚŸäú+®/æn—lhŠb.}r ð^fœm· %ÎÙîúX5-SpÂÊ·š?Ÿ«H¦Cêýp¿Å\°j¦|Þ¬,íNn4ßXb¿a` èPHxÄ–•;|Ño‰> sÔΞe¹ÔZMyÍÖ^Ø Ö‰Ðu‡Èƒîã0„ü/ÀÑžÓMâždŒ#ø|Ôm¼‘·ç¤À»)²Çr*‚ªpVÝÔ£×$ùG.Y— >üV;}û4•ú&-£|q•É,¨q>@‘Ë•[³0jNR:{ä['±àLøåBà Ãè0·Õ{Uç?R“ŸéŽÿâJ*û‹·ƒq‹6ýå?ðÿþ¯*c²åÖ3î‚„±=q–:B4/]Dn;ûT™ðÇ 8¹3`nðW­ÑUô'Ô/øLsàx“·C3Ô5Ê‹ˆ*œÜèà2–FXð½x\w 8È£vøpá6e€ßõ!Z QU¤ák¼¸VZÿ²,U¤Ô ^³: 5‰dA-§‚¹X{ÞúV@ýó¶\šŒa³k„ ížUÕ´rÐ1ªÞÓÃ,k? 7ã,WÓ 2ÓiP‰¾kdÔ N(½ï0y{ZO²-]j!ƒ!¾×ß~ÖÔS×)2¹èk*çÚ9Be¼åR}½úu*ó¸8y ³YŸŸT§*4‘Nù9Xù—Â$ua˜_NZecáv’Ú<Õß¹\#¼Aé6>²&FÉöAô;4˜¬Qò›ÁÓ†’á8œè&®yº¾D=h:5µW`&ŸÄ¾¸"më©Þ±ïú…uú_PÖˆZ#Ò]•v  0^­æE“[ñŸ,6ôÁ }¤q®;f`·°'5Àü³ÜqÔy&ñK74CG¢o@‡*@Ñ-…Ò 2_… øŽõDÝ­ÙM-EÅ[)f4§|IÊ/ÒÛÉÎ!Ä*G+Ç$L•3 ƒ G«¿7õßšxÈ«Øf)P ©>p J£K/Ù`;<Å‘¹à ¡ƒÍÒÌ§“¸ÀI"°ô(³³—ÓÞbíãÞÉO×üi²6J¦—‘kIQ{³‰ê«ý½Gë8 Þ3U¸‰™"ý%ÇÁÐ4}®ÉEÌØXÒµÙf!ÅàU(¢SåÙwÝ’s­·Ã!òP5e–ÊCáY3¨¿Åa×^h=Žä§'ø ´ø¥v‹‡›B"²põ$‹w«ñ ~ ˜÷i)x“çovíD36éyò‚¹ÚBc³”MüJÜz÷æÑÀ>ʇŽol#n©FÜØÁÕvÊ€°óSĶdyhZãÑ{”W$º¢×ÎW~Øpí^½ê¢L½-vÓÙV*VW"o{ øäÂÔÞ$‚.¡ôoy6.0v…#ëʹtè?fêðd®i°an†ÓAoL55ï——\ë¹QµÝC g1M’5#ì‡ÃO:<@G!- lST ÆØû$ÙK ûÛ9.ÃôèÛàÛºX yO½ff°…K-rkP¢+7âÈëîf©Õÿx?8ƒ© UÍ5ºíN¼¦UÎóP¼„ÁRl]ŽÜv§h¬ºxé>ÂÈé,#6½_@†¾fõ¶½½³˜0¾“Õ.§^95ÖÀÚÏ}ÌRœÈ?¶^*™©AB˜â%Ó¸"Ëçº5¥ êªH\÷ù·m¨åÖœÉÕÛ˜S÷Êyð K¡‡úk¥ƒÓ.Çž2º^di‹Ìã^fëæW{ýî†×wõIû(5²·UwTºž2­îq<‡†QŸ©Ó&Ìü‚4r»”s+~ÃÝ?@ :[3ÝPVjWlâ¦%ïW9œœöo~Ç$šSùȽYXŸ*Ó-ÞÓš•n„ÕÎÿu¡Ü¢dvÖø•WŽÊþ¶*ƒ“Ëvùá[}Cû^ØÂã·±–„ní&*ÞyüS-*ÜQ8¡.(nY˜ð½¥{íJ¿\#AÛV=eBÿÞ1Æ Co.¶xó6I(ÿ«¥ƒ„ žß™U‰¬–ë78X·Îê%†Ôew5@9ɺVO±Ã€¥Þn^_h¢e±nnɳÄî™à0Bš]y†›Ÿc9¤ÕÁàï¥=4óÎôu’ oEôO•Nm|–¬Ú0û”MìnÜÿ0–^òÙQúØe¦°KÞ¯#HsáÙ:õøŒf²š|¬Ôˆw¾ešJïú“v*—ÌãUÏ›Ùÿþ²f0ñrƒ*z_=æim~ÁÌC¦£ŸS%N’€ÒÆG»ÅVÉ™P©ÑüÚÚ~Ó 'éâ:Ùu=ª­…@Ï™ä᤽Ӱ>„R¯Ž¾¤NµüÑÇ¥Ë/9§ nï$¬º°‚?¬%så<†S3M)£U!1í&™Ëkh®2â¿qÅ™ã+”iÛN‘“aN™}avS 'ûÇŒ`DY W›ÐÌÝän–ÝïŒroeSÔá$o–(U]ª-ßâ‹þ5!þùH aÇüÊ?¯xʦ—BìCcé³}ÕtEý¤Ì¢Ü¹N’/F×2 BÝMˆƒ¡H¬ѤýÈH:¹„ŠO îlmh\½x°wNèäî$Ato~\§#ø¿m© /߃€ø+¨Ñ9ŠÉGSŽ :ßû(šÇÞ…W®ä\ö©1Y¡oQuÒ#»*î>1‡W#Yôå×Òž!o2<ßy%þxê‡ÔÐͧDGʱf ߟŢÏ= #Ál"ÕÉìÓ˜ô)¥p\”4º*?eóXYwÃô3´Ì‹Ë´Èý›µ K)½Ü®1ûØ]ZZIô—ÓÝS+¨‰>!ð Û=Ò{È«úîHA¹}.ר`²×v]GO‘Âÿ¶øf|íkÄO|ú²¾¦ïî°)ˬÍäß‚‹Âes0?]ìîc]û”Yôâ‹‚R¼õ¨—t¨ØùÙ={ÈÄÒÔÝAì¬àPãåxá”XÉjiß×Qɇsì=K¼b¾õ,šö!·è ;fÇ‹=j˜mD“®å—õ¯mØbþ—vRYS—½Q´5ó¾Êúž0àìèÐþ cX Á%YlYì V´¥KJëúÏÛú*Š.,#B“kQ"©éš‰NšH›c®XFlòx+Ýäáp‰t±¶v,|äj¯þX|gIAYŒ9â~¾ÐQBÓEô"°Ü"ИU¾½3 ‚9£”B]ó=%€ŠàúsÓ¯ý eTmFüA)`íÇØ×Y@©îªlDȶ±\É€«> ø…8P zbŠcj¡t`'”ÎîóprÛ¾;zùÞÿ±N¿‚wæ‹æBå¤uvm+v°eé0į*YUÙzjA-z¦¥Hd:ÔA; ä¡% (GkèWÊ¥ÎáÒÖPïS;Tý%³1äuV1;2³ ¿}ìIU4wNö8õW¨ë÷<š®=z“o YÎ4@{ ð³sâK’—g,²7dºÅ‘2¦3Œ%`Œ? ðƒyò!óz }ŠrIlýyÉRú´±_© ÿu²=YŸ¼¡ÇS"øÒ© Êrœ÷Ï¡÷jêüö„_ì®´?ü…[Íä‹t—Ø=Íe=Ötè´ÍZ@XJ> É‘BŠ ƒ&Óɾ3)-w­·D@‡Pó™)ÒqŽÁR÷ïþEk R?.þh˜IļW|Û[Ñé\uÑíR³9ˆ)?fy¼0mX¿­fQt´ ¤¯gFD­f¿‘ÄÞç¨_ {XI’IYããlŽäŠƒ€@(%™Ö­üÂçï-ƒ” ,Å×0-i<ý>Ú’£ù…b» i›ì™Ÿ):„¶ãнø\ó:“×E ·Þpžá‘ïz`2¸Aè >Z ¶MÁz!¼N®Ð€3L•ÅBoûªU ƒ^ÿ++?¡ʬ†³Pݵ’Ò¿@è“õ™2ÝÎÇêGsŸhŸop©û R¦öY³W®$§hmh¥ dí_^^ÑÐûD&^!ªü—è4+&åØB%½«b¢\{¦;çÚ6ãCZ“ÛÍÒd­Ž˜Ïþ H9p/Í]gv§GAiøÚœGÐÜ·˜%cfñ/a,«ØæÐ}ùpá{|Øå·ÿ>«è ¸c÷>´çVIU+nÚrÙ0VÆ”ÃeºQa&°\{SŽU2Éð$û.e¾Ð‚±\7wì¡Þ¯;‘ÓžDnŒ]HHªÊÀûÛ6¬&‹L"® vµ’ã`Ó Ø ÝÃ[ —ÁÅž/`ödË¿Òcë;u2Åa¨ëV+™µ® ’<¢}ž* Áv.»q./Í™Üà;¸!@’ê~aM¿Ã„¬’ÔqáÅmG£×äqw~j£ñ ñˆo`#ç‘Sø®‚¹.C>ŠqîâÝÞÄEf)Þ)ÌĺN7 =#T€‡3 F{3C{j·‘ƒctk [€ÀIQS7‘8®£ß)sX:%Ã`=äjêk•°~jô¼I=UÐ7ãú_Þ5ÀžÂÍsZ„nÉcIˆýspèðêÂ4Ï”h, . híó}A#²é‘÷2Âå¾v}Ž‹ól„   Êfàˆ¿ ï“ø^Ì+3·j.]³7v#Òd@V›¿´œ…僣>ª£ ÍmcbIÒ·‡e?D q¹¶ç›P÷@iÝp½äƒö‚WÆýBˆ=;2hã<Ã,v‘+7ñHŒëQþ^RùZ­(+3ÄСÒCÑÁ¦™?–ý½9'Å3§ê'ßÄ7[ôS ÒÆfMbTt,2Ÿmµpñ‚QµNºˆÞÜ tÿóÛò-æ¥l¢${ïºÇk°?ü훥`­Þvo°xJ× LfäÓÝr=œ¿áçYôÊîãg9Эá q¹†SÖÓvÒÒ̧\¼¦y®õoI½Æ£n?Ë4;[žAç–¿¬)!ŠK½Ðz—^ZJ\rý­çĤ*á\’´ëùíjWx³dà.­[ íŸwEpB1:°ZŠè ¤ILY(W`MÇ ¤À9ˇr2À;Å»68oÁ áÒÒªåOèô}á6}Õ3gìCð3î\á!Ø ó·7˜nõtDÓL éÌÑHØ}½±?Ÿz."ÜlC±sÔœ-¶›ñJî—û¼Õ÷8¥Û„ðIó÷ODç„ð-i(³^ä3¥ íä;€¤fhË )ß± Ž™Ç-*…~ñ{£hÜÐ4þFæÚ.hçƒéè¯$sšfhvx$L’i]GêAoév÷È›ù$ñн!¼ØÁѸœcþÕá¸ò80ó}`ƒ¨BRتÐ3@S¹;ÓLB Fa¾qZÀÇñàBì QˆZ±ÁK™~ÎZ–.Hg‰ˆ@ßÖW‰ó '¥´YU8е$UdNùG&Ü¡7—½ÝÖŸu]LöÙShåÑYöh†¤ßuDì/o~Õ€³:msMfkÒc¶‡i>|Ñõž°ÙG<:Õ9&{­£ h¦Å: ð‘¾kX/Övr´ímõü_}ÒìZ.ßv´ÓѦ̤1º~Üf‘g,ž&Õ¶‰¤÷YD[T<ëå¬Föè^òU­T\òìja·ÔKû~¦©°¦‹E´s˜!&éºÕO¶ôï„©“®údyMQž­h›lÝò¤ÈøÞnb:¡í\§óæ ÞÏp<öùÿ‰ÖÍ3w*Ûµa…·žE& :('H•¨œöv6Ç^&„&?ZÝö^5(Á¹5m`b—°zØi@m,BûMLº Ì÷}Yò˜a ûŸôpyÅC‰:#²Ýöç/×Ç€õU¼\*é(xh³õF?¶À#SÅ"I°]g_ûRö ІO·, Mî” å_™8*^{Ò@·eØ^×äiJàâÀä€fÍÂȰaÂx>K3…-‘°ôö+ ÈPûµ®zJGYêÁÇÌÉÒšñ°öLد͘y.´knRã—m—&>²ÕðZ¢].ˆFDžŠÉh¾G6¤* ,40Gbøü8²Ú¶tîIm®@Ë5Ü ¶ù‘ "ÎܶÒhÍ0ií?g—w ®†ÙÙ®W{2Iló>`x!OO,‚DªáÆ–égpËÚ_·u?f:Ò/Ó¦\\n¢w©fR.æ.`ÊF“0,tÀò›õ–ù øÕÞª®u`¬$+ N"x=2Ó ÝRÈžŸÂç–=lOÍÒ!&Z÷ÏdÂÏ`lÓ¤&¹Ë`Í'Ý–Ê8namÿ{=×w ¨E ÿP›º÷æ ®ÈÂ2ÆTªA®uŸ &0ÁudþÖÈAuç¨æ*nG2.ë'aü3Ïï§lŒ)Üm¶„–˜@y"ƻˆH'Ì!Äñ]Ûb|QÙÀÚ vÃÑJ f럄nÎô—!5B5ÏÃ}T³q*ÖŸ¬_A•f5£È¿Œ¯CßóŽ äƒ N_º‹¤»>Fv5ˆ^½†r·L ¨g馿muk³§Î‚#׈áKø>^lP±xCü¾¾—HñH·£ÎH|å4ãûøÙöU¯wlØß^mê<+.øÊm µæ%VÀ_œ°êÆÿmòŠàWs†¨ԃ •… %ƒ¤Dó‹W¼6>Ís»ÒÜ…ò l¤L}Ç{`Ã.0¦!:Ø­FËEð÷Oow"}Ù Sò0‚Þ!¹Pñæ¾ä§Ú5¡e»Æodïu3jùr{oŒïÆx(žÐľÈý6”¡§Ã»A- K¢+Jâ’TM4[¬‚¸ò¢7GD1wÝ»–Áìúc°ƒùý›x»Kö×á²ÐuMŒ@m>%VÚ-‹»lŒ{?z7yJqÂÁkr· D¼V±Šn£Ïœ…s"3‚Yµtêi;•:;{’×ú=’1Kºµ OZ¿ø¡Ub:$N´5F^NœŸ„ê@ໟo£Ù™å˯T1à§§ÂàÜ¥cYÌn7ìU(q”4;¶‰×Oø)?‹R%¾b¶,öo)}uã²õëÞõËó æ+q”2ä}$TÌar ÁœP_”æ vy `È'í¯AÃ4üªØ¹ù-mì:¯%Jå·ÕZ+ÐÒXC½HèÕ±Oº±úÈóÏ\ §tŸÌÌÏ{òý=&—:@9Ò±¿”¹‹ñîçáÐZ²k6ZÒ–GÐÓ´lr7?úÿ3ÒõLw«âeTpöö)Ï#trÎ1Ù>†7¤HIãŠÃ?ÑéÂçåAŸéé"¡£qz…»I¼d#j[9\ÙÿGÿB×J‰óöý{EV®ì+ãÅTÀ, M‡óC´r6ÞƒÒÐaµämñ¯ÚQå E]ëÀ#G$Fá‚êí1ݰ‡ÙÓ@âe»h‹‹Ùtêc<ØâÛ~0ßè)I4¦×»-8\œoø ÁdÐ:.¢‚H¡Ÿ¶f{Èû±¤ê–+ÿ9§‚<‘rcQ 3¾ÔÐÆh¥:HÅŠéÄ®mpí¶–aÖZ¦å^ý9à†(»ÿÕ÷¬\p»‘ˆIµ˜•eƒé¿i¯K¸-{ΞrŒywKågc3°–Ï–Êwþ¨MàJVnó h}.@ƒ«¬©÷*‘£ðº†s«Êz•[ŸŠ º8m¸nèY¬yrú5s³1[19 ÷¢£jÅ^‘ö&r[p;l«²:¯å˜Ë'ùð&h2á­x+- ò;€Bx Îᣌo»}ùõ >_qQxÓCw²el 窹èF8˜ÓtÞ?/=ÈS˜ï¨rÇ‚[´i#Å»opØ©<|¨±RÅpŸ“tkE®þ|ÄoZo-Dý‡ì›+ Y ´?â™ß}tñ°*p¦Ê %¢—•":¿o&Øþ´3”óvý1uÓYøwkç­Ñ»F3´ºÖjǸ#¥š>Ûó芃"" ã/-&*D$:ÑØµÌ-%±bæÊTÇK¡Æ,Ü[¦#$‰ñ :þT¹ Ã@ „é7,¶¢››«ºz 1UÖ[CÔϯµYý®Å²2¬ÔÿƒÙ¾mÚwi©¼è0 :¯á¦e¯û³¤îOJùr—ŽÖ^¬œåuåJ˜D(¬b·¬â¾=qGÿ’jn°~òí€ðÕvèHEêj#¡œ”‚{WC2$Ôú ňp´-3`8Zò5>îgc¢ªöG4è/wyÓ‚ZõÓ*šŠÜ%r9‹ÇyP-:îÌðø@|b÷1<:ËšüÓÎ ÈTèZ[+>ÚVø¢xä^sþêq>vœãѺ*“ÕÐ/u*“·ˆî(7»q"3Ú}H‘‰Æ.â<†LlAÅúZí³ûóEcì*DüajM–à;Éo3:¯¶øÔ°3Z!Î%œÆ4ܪy/7*æ¾Ó±D|vDHûMuQ¤ïЬ^"Õ‚6çÆì›ÉùÝJŒr¢ÍÌ~À·ä‚å½–Bs r¨4í–YŠ{˜&”¢gÜЭ£W¿¼]¬ä$P(Šþý·òOj5ª”jj·=Q Îõviì?Î>”éæ$˜jÂÂAŒå­ È‘ŒÚ+^¶Î¦Ý¢ÏLãi†3Ï:”¦´ ögõš;º3wHåA+Ì@¼´B˜D¬C³î}+Ñ Á˜¯ûtˆf€¶ë¿%:Fœ$ôôW5Ñ4wõF•™”«Ï:“/ä ~Ý«¢’ƒEIºèøŒ4kjYà  Umf-4Æå窕ghås¢ºûì?[yŠFFþœÆ­„q6„»ß{eŽr"ðrS.°†Í[u¯%Dýö"©nm—ÜuBl1——ÖC›ÿ¶¼99“j2g7p~Ú‹ðí´ÖŸt…;=ôW«÷SÈ.¯~Ñ!±šD1o2xó Ýé|Ô’?}ëŽöú\ÀðÉi z¼êư¢sÝrªìo¯m(×Ç@Æ”Ýd$ÂÊvÈJoÚ1½°P õ·~-X¢ÛÂ’å gïbÑÊXvï§~™§·àÃØòþ0ëiÑdî±~ÌS«¯“o+8ýS«]Θòæ$G)•¹Ö)—K²ýܺ—GÌHÿ²ÿé3&É|A{-þ‡ægÒOá<%ž¿M]Ññ›ºÏJÄ–µ‹!'‹]ᔓê#•æRšó«¿Ñ)ŠùžÜZ±…$JT½Þ4½i=ÝDwÉœ&Ò0ú¶î„þe{æT¶‹”‚’oŠ¿èÒ9e‹EÌÌ-ŒßqÌÈk²pfIôdÔ%]”ÛBGZ `4}Uˆ `تx¼)HâCi}˜y[ãCE"ÜÐ07wÒ$¡JñÄ4DzÚÚ¤ „vËìß#Ë-c³Š49ã?çüùVé„á_êx̹¯Ìtþ8T’нù3\°_öß½=]´ûWî‚àhd?^²6sX¨Ñ¢¬é«©JÒ x¹z±‚~3oâ9ØžˆsèÂénÈɇ˜7–1—ëb+Üè›ZŠeÿê“-|ÜŸ¯ðgÊG›-µ0ÿ¢ðu*ˆ!'¶’ånÈ邬 Ê¿áp Æ (÷ mÓ°˜«é·©gœ4ùç;[:©­êͽ=ÉL¤*8ëDžǬ]'É0þò˜™ÆÔ€æ6‡c/ÐÖý”Ïó €%[b\ J¿‡SÆlø&½¾û2äÈ+JTrßE£ â>]%ÿ!¼ES²\™/Àúj{‰çÜ!s‚ä0/ÿ´[¡NºælyTâÛ?òÅS *ä•Ŭn°æAÄ•wÌ‹ È\‡¦n¬ÁÚÉ[–ˆÕêÝ„[ÜRxUyˆj~çb“ƒÝý«°ÏÀÇHÀï‰Ùt7´ «CØ4¿ŸÚàˆš£˜tRýkðcŽ=ˆpcWÇ4$©Ù‡ƒ†Qw“ SŽ¥² ú½;‹>‹Ÿºm•±¼õž!T?‡<9'˜ÝÐA#o¦íì-I°yMÖÃ/èœMÝÆiD5^Üz7d^ýæ¦ÖÓ÷ƒêÿX¯÷4C>N¸YE.æVŸ^U¢ikÍ•œ æ4§ ã´D–.Ü6ÝÎ72+¤mKxÞQ´«ºø2âÄZÁ½²TÁ 0 Œd«[_‹=ƒ+~·=TÎðT3Ê@!QŠž¨IGŸÔò¡‡~–qìé8°†>í|ÿO‘œ–Ëp<{ÕMÀs=OW´Ñ]ÿªÉÃìë.Ÿè{dE÷•&’Ȧ€Zë‘’›¥aÙJ4†ôû؇ÃÄûÜä,š<å“Ú«aRÚv“!ÅV½|zv£‹ÉÕûHR¿¢ÐiÊ ¨’öëò ž•ZÕp@ÏñËiâ1&Y} uOøpƒ|%ú5-Áñ¯ßȹFVÝ'; AìþØ‹ç½À†¨ì€16ºXâ†É –úA´êwXË6$¢¦äÇÐGö›NìYƒ4ÞKÖ[íTJæ Öäeùn$ÜwwíYF¦¿U,k£I×dûÛ‡±ðÕù=%´²Î/&Ç“V&dÿÌÓ2ŠÃÈí ÷T¨ã}$'6=úd«?CbAª|Câu^…Ôp8·y0øfu"Êb±ÿ¬kAÏûøÅõíªŠ©ƒÝXúqéVWµûO üw@øÝ=v›ÉÂéï"Gv§ÿüy²ðpSÂãV²Sœ¢$ôc"M(æ’{ú«ª˜CA1PCzUÇLÇÙM8•Üó¦i×q´ý$îç÷Z@EFlU«îFGþ´L~ u‰pEã’‡øö¦M‹…ÈõÝ’€õ¸J4xô”Ü‘-9J)¨ï‰†¯<-U`©òÊÔ}s½E(Ê_ÆÖ@É&pµçê‡Ö•ÿ7ºS¼ÙÂËÍíùÏ 9yQ›hÑ6Ä3ap¿cëugžy-L—XÞYNŒGt5"?}0?ttz”µ•ÕazÙ™¦<°”kY‡6#Ó÷ƒ2Ìxºr=Õø„uõÕ3 ‘@H7ºîV|vj 9h±V÷鯧6üâ”> nþMe·™v4ù¨öŒ˜»d‘<õ%?'ëäˆÜ2yÀ¹,®ísöºE¡WŸ ÌQ ó5l‚äõ\·åãëÅÚÊîT~)õí=,ë}m†öh"×WV Q0·»^5Yiê“?móÇ´_`Â8~Ò»Gé «ÖÂ\à+?õ~;cűÔ0É .3Ç[x ³:ûØçFÎê€Á|Ä%øÓÛôr}÷ rfž˜ƒxÅ£úÓq‹'j©Ñ'‘¦™qx¯ÊŠÅ_Ç ŒçD‰ ~Ø8~ŽþÀ¨ÞKÞöÛäLò?ù°'†#Z4 Wˆc¡ÚÛ1$ÛŠænäÊaI¯t`ç‰wœœÆr¿-yæá”<ÊÓì]“›ëö}M´×ëÉ;^ZSÂYÄ@„Ô# .ÂÞâ‹ *28!5ßÜÄÝáGmÍäE’9‹#¥,€n¾Á+3¨Œca!J'HÈÁÂ%ÊÙÑ!ì=KZ9…Ão%/äí§Ç­n®K´Ùæâ(ôlÕÅ«Öïç¥øVÅÅ,.v7o•iÒY®—#U¾wÚ)¾ Ì‘¤dbâMÒõw¥Ù;û öß× ªë?Bkʲóýçã¡«fÊ?–J¤É/5” Pm ´Ô{u(¸#àúºF–Í­GP"cú¯ááE·ÿôÅ8¹ëÁßí ðì&Bf² íÏh>{Æ‚JÓj•clÕñKûØs§‰¥ Î>Zß3ÏŸ –oH¨´+3chIsꈈò&Ã{+Èd± TŒåâ§#WÌÔæ#ž"îð2¨ÌmüQà°L—ÔàœÙ[v)<9¦˜¡È´Õì´×")d¼G;ä¸ÄV.ì†p™NÏ0ºŠÕggÈf”’î …ä6ÀlÙ¢Žx÷šIDŸ6 Èa_|û¢\#pôT¶¯‘áì‹ÒM²Al×õ&„'Í-£{a¿Ç”š ¿È$ºF5q…3j¾…¯ç¥rÎÔkçr<Ã;K¡ F¼ 'Üðeu JQHƒë­ô%“q„.„f=UÌmøôŠ,/ùÃe^oƒ¾ˆi >lãuÝÅä¼ñTzáØ¤›È}ߪ‡â§RAJïñ?~B(ïæRýÊkSœÇ©»œqYmÚV¥î®äop[”î Î û‰,§qöýSª°©TÃ8YRk¢ýÁ¶kv­w⵫°Ã2IÑ uuëØQHtòô Âé«K%E³±"×&XR‘n*ݸ³Xenâ‚å,W…á©l‡ß_Ç4‰EA?áE0]ȵ…vÏÚÿý"Ï¢m2æ¸ÆôpК]éÕ˜KóvÞ\·@kõ,JàâKóh4¤”±™pKƒMaZI k¿}Änù„³?,ç¡òiê÷8n_uÒ¦û>¨n« ®‡»Û4ƒoüòU¨ùM¸ˆMäÔþeÞè÷ ú’Y8cåÙua¿è²ieR€ ÔØ¨g>LL%PºOK=¶=é-µAfŽ0.•PB­Œ™¹„^ xúq7ídW,uó„a­7é‚?„.eìêÕ~÷<ÀFKд˜ëŠmó?_Šãx´ àYÉ “î)šgRp¶/únë—çÕþBùÑ\3}"B+nÀíä“ì§¶§J8–5¦ÉØ_7³ÝaAÜ‘+BRVÙïè“/B ÔiOʃCú2RŽÃ¢Iõ×´Á•)ò^²òvª4û5EjÞãöªN!+Iû†!èΟ8¬×­±§g›ç$X´F°äÁ#†”ìSmÄá¼f%ª]yYª.º—õ]¡Âi?˜ú˜•±/ÒN¼ñk¾çÄq¢:‹³›-utì‚:þáqH¯ùùa2ŽõrôQ ¡\¬Iw8žÄ°]”â‘¡x¬èøDô6L{‹Ó2‘Ìt©çÛe¼Œò¡Á›“ÌÕëÒ‹NRÍQ»’*_…Dh½'|? ¼úÃu÷"±¼ê23ŠØìŽÑ´‚+gd^7fjnï+áêkÔ`ØM£m À5X­}^¨n6RÅ ²}À 9É«”´ÐÚïÔWµÚ>°Ôf0 O '¬,+d; é Ê£sM¤É %œÆE ‘—°7e=ý @Ó hvË¡¤‰PÎ[á,;2ßÉkœª@‰†f±qC‰2¢(~}ˆÆ¯%í©–­É¿ìÕTI•¬ýY ® VÓP©£Ü~ó3;G¼€ûa„26BHör7 Ô®ßÍ î¾—”ºL yïÒ(¡ŸôùyÏåL5y­ ^r–-•¸q+Ø)M–©QéÀ1È¥mSgÊGÐ6+² AP/•x2»0 ÕKo+žmH1Ñ´ã_¦ÄBnóð £+4:¸󲓲AáÐK–b2Æ‹B°sêsÔöªlŽ“&cVBšêŸ û.X³Ôd@Y ÖÐ÷ŸfšÚÔuà$ÎÓMÆÜÐíL½AWØW…™Ñ4Ú4J²óqx$°ñA‘MÂ1Þ]Ä4•úFQ×(\EȇøAÚš—h€ÎΫ¾}+{"‰X§’ åg‘ƒŽÿ¥ ˆÓÇwÁ„ kçã˓쫇͆J:fâ@ i‰.A¡ ‡â}£xL¤ÆæPw(»¶%€j/¤æÿ¢ uzj1+õR ‰êÍ"iîYP‘ZÖ¶ï‡Ò*fÑ\ÍÅ—e¨–ªÁ ,•W%v±ú¡› Ûß 1Z¾RôßüpŽÞ½ÏÓ›òM‚-OûPigH³_ãî o{ïbÌ;{ »·îÀÀy×ø‰2aÑ¢ᔜiå¸^³â'pbmàóñç[ÌêqkêÄ ´BÐL „¶>y'’hÓê‰ä#Üõ˜òí¥o-”K!ø‹k3éö’5(ågí8?®f%—ªj4æ+·.j>á¼äïNü±Rh\ñ3AdB-–2º6ô§Uˆ4nu†¾ê°„3ãï©Ñu°K.:Ö´ÌiœåG¹¼s`D”L0äFC÷é¦*õ†wŸ¤„¦íü- ßr3'õ@z~à… kw$è Â:/,†å(d'0k€õDö'Ô¯K5.éXùØÖóÌʾ!²­©å^⦱a戢eYòõ]Ôaï›Ã°"÷j bËs}UÔ x¤|0ÇÉ_Ŭö¶Õ˜¤Eî&c"±Ï>¤e‰ÇdÂõ6$ïTëŠIY‰V¾·Œ0£Š\ðô³ýsÙ}Øk«Îo`@F̰ËÈûãN©ðÞu•—ÊŸš°CTB¼@|¹²ÝØÂêÎÆÔè` 4wlj/Õ|,®fgGÁ¯S¹×GmLH-ÉS§we Ü>AŽ=†Å9O=¿ZfÿâóÔM‰À‹ŸØÖðIPf™:ƒÃ)J>¦Úå`íÅ6uggßýâ²}[7BycÒ”U‡è&Ÿhóo€ƒ8o¸ÄFÇתuËMò÷–d ‚d×$ÿ(q-W¥†<öŸ±B£ÆzM á1°MÓOp¹5°4‚ãøÿ Ë~yìóÁz>W'ê6áÉІ½BC…Þk* ËŸó àP Q[V¦’=³(Ö¯!4q‚@ÊäÞ×÷æøÊïÜüF 4šñ”Ì™ëñÝÃõT5k×êÈl Ü­2ñ\>ÏÚKñzT.¬)Ú³H A¥n.¨#G$U|0âßtL©íš ”ïìüYL€ØÍæøÙ¤h7Á žƒîúÄ¿5=Ë`êº×jüpÂcO$äϾî9ñµ/‡ó–scFÖœwì%o\9„ÂfäN[1Ì…òƤåÒQAÜ0Þ¶»†y;ïAÇâʾD5íXæb8<ã!P¬ØÔkïìîÌ+XOE”—Κôìªyˆ—ö~„4Çad¥\ϱ Ñ}©ž[dOtH†ª.%Â""qÉ¿~]$ÂW„š3‘* Ï€Sø0—kUŽDüœŠ¶xÈqw1€¯[?á‹Wᆘ©†ìNu5¬’œGñáþ¿P )SÝÂ"rŒDCfÑ9+œÏuÚé©› ·ÞÚ8ý-'!¤„F“ß?/—M*GÞŸ?j4@â¢qOƲDjÇwùÐÀCoÂÜÀãXHFL2,/­ îE„¡á¬ïtwp^ vŒ9±Í]™ÕÀÀzl&8ŒA’䆳«ŒºÊiŸÇˆ¥! Ýþîm¡S@áû’ìbý£,Ä­üvý¸¼Z&B:šÅàjñ–xÃ2ØMwžX)U,‹µ¤)ë–K¼Å┚Óuí~Òš¥ådvæ®È<Ñtz±*°Þ¬vs7NJwþynG©Û`è>ázʹ9©áFÔ=Øàûët76WdÐÍóF}Š]Õ®tLÇ”¤nˆ€BïŸÎ|D·âÏÐÔÐôUXŠUô`¢é!ÐA)#SÔõBãÛ±ÆIn¡e”Š ¾S[ô¦÷mß ©µðs>…µ˜Š# @Oîz»aú',èºúo~®žúÀåsûs6¸¼<¢§Ñp+ãS…Ÿ¥ó#úT&ñ©J½‚o#È;½ò‹³Â»Ï™‹™(·"§ J¯Œ!®Ù*†Õ eç§'24¡ È°çR"‘`«Â‘èlئn©„».ë|Á˜ß›J smðRìÌ­ûy2b„·B§3¾£ïëãP;̽ó¶TI ?²åãúKÑb]!ÕöôhYD¶X6ÜK ‡9)p!†=K öC2ÿP«Œ[þ7•Aî MÀÖî¾âljÝ»doâi;ë²|Õb­ªHí’É%N|Ý÷Sš?vÃí°¤ ”ºó.@§Y:‡¨´Âö;¤@"£««nÝ€‘ÂïC¦¤lÞ×K‰¬=ÜôO‹L‚”PiÖh·×qÊÔiº;Nê€ðm¯}p® x±i »g5#%B¹ÅPWR?Gk.Þê;?µ»-:õ—÷Åÿæb•õbžÓ¬%ï,SDa;³’LzxxÔ¨®öåŸÃìå,Òbg[vÏÉj kùãºË@a«T»3¦-ß.öÇlu€c® úH{‹Úè/uÜ(âÔê’4rîƒÔc阮XÒñ“ìJ`\°øRÚ7g‚³µo*±©ŒŽ;¶i&T `·KOy ¾ÊU³~ÒüPG¯/_KíÊñíxN¾›!ï%ÿè]H[ðÆN9Ä™.w –n´JZrÑØ!}‡r?ÊÏràë*]Ôïýro§á:/Zþ,.D?ì }èQ™7>°á7H4Ûr@§úB޲Ñ=8¨Ý] Ë)OXßÍ?-£ÜNéŠuä±2súð¾d+1T/ûåe!šúSá«ÊýJGž¹½×w•`!èŠB.ajoˈGè¾ö£œ‹->¯“®¿9ÈMm£mÏTªì³f¸4‘çXN4®‹ÓX}‰&ƒ&ªÐy4QÈ”:.•?M6³ãOtG–³‹CRäe{$~ržpT¡ÜUÚœ©k`t+²»Uþzâ>)›!ù™µ Ãü%»Èñ áRÜœ%üChp'_¡¨õÖää_÷ÓîS%”@ì[¸!Çô/È(íÏ|]x×ä¾ÓÆÚú¹PÊŽ sýSǵsà‹¨­ä¡¯Ö`2÷×ÛúN â„E©Çª´ÇÏ5LÛ÷Ovh¤'Ê=Aw|eÁAs̪ó+«öÏßì?O]1<¹½±ÏÔaœ“µ õþc»ý.ÐSäp}Ý…¢¢U1+1¿r1%ÅÈ­›ÂÝÎéÃë¼'\É.GsEâXõ­šä÷Ê£4.BÛn$3¡&Lr£6Æí܇ Ý4W1ƒ ghó?hdOg²§ð_»!§ŸÔISoD\EŠ¿Ù(¤VÜ+û¨âE*OeoŒs„`JÙÂ…Ù‘AÇTª³çÀË¥¹(ZAUþ¯5¥á§·ó›úôÉ»Ÿ&öÇNÏ׿­A”¹Ó©&w¸,¡ýú–Ì tõP +!@׋(!v–c‡å`‚57Rf6škO¹ {¸G:±W6=ExÛ”´m"2ó4dr ò•põ,IÖJ#Ë7àÊYÌ Qç>áSDïvÑEçt¤ëàÚ™P&¿]òwJ‰„žßȇŒíÿ95ð;,åpN= þÛ³ö °"/øÀõ¹Å¯ûÑÛO/=¬8y¿Û+;±ÁHν”_k vƒL¤ƒÚ°Òð ÁÜ‹X ^ìq놳6Óÿm#Ä)ÄÂŽÓ->¿zÅð’Õ´NØ´É3I©oŒNîcº¶‘™ÇžÃ"mÄ% å1 ±Þ^Âië¸ú(øëf½N®˜ÿÀI¶¼ãÞr-ëw¼÷%è•Ϲ8>ÇÝv¥ðÏu ÷E¡[È¥#W Q7'º¾Pœt’¤PÇ·33ÄS|…ìÍãi/ÎýQœ‹L iu«6“÷tÑp å‚}¥ TfÙ_Dx¡þ¡ì~½¿&h¬N¥ŒŒäÍÖuíâµÒeûM`¦6@P¦Ç ƒ+v±ÎdL·#8vâ!q‚Cg˜ç5ƒ×&ð¦ÔÂpšpz PŽ˜F`§Ü^IŒPÓrh~§®u¶¿œ †ÉMÉ—‚”­ï‘çpǼÊ](àýÊóVÉ¡²=ýƒþÒ†=<÷uu/Ï®îwNb«,†^.훜;îî)ÊToú˃„›íø–ê% \ó(w"u”WxÀÈÄÛÅgÉC‚C†½Ö®¿ÞUÇ!UÝϤ>Atòœ“+**£æhQ‡Ìá\\sZ¹Ïû£“X¸*7ê²øhN2à0iÄ“*ñ)Ðàtd Øã«âብÝô±©oRÚ“V±ýmW:Ìg­Žž†« ‡«-3,qƒ€$\ÀØ.'8èσ Ÿ²Ž¾Ü·¦ß}åç=Yôtò«@s䈌ŽÔ¢²Mk;8Bb¥Þ´Ü´ß„oO´ov)V}CŒ#zàßTQˆÎÏýýžª™j•$õnSÕ·\”·ÊþãX =/Ê B’“0«Ù¢:Œ!Ràß»,9ó°ëX ðz°öS¿‘¿Ç1ÑÈч|JÍÖ!'W×Þj>¡*ÂWß4¿›Ño¨ʇ ™8B´­@¿F‡fŒ%?öÖ‹’ É~Þša«ëÑ@JÉ%6ôŠ”T`Àü=Ä?¿îÓ&íÃø4|a£ÂEX§7؆ êaUA–{¢ ‡d¿ .H3üœ–ùzé5;g…ä‹@ØÆÙ¤¸ÔÜíêk•^–þe!àƒëí2©Å ¡?Ä;Ñ× ‹ñ„¾èì‘m¿"ü›¼ÿÁ6ü=F¯ðùä ’i1èM=bvA+îzÚšü‚íœk&£uÖ+@ª:Æ:².Æ)>Ý:Ö0‰"íª" ­÷ ³`Ó¯u><‡(ìe /t|oÖó[ÄByüµ ó}.ïu\±jèãŒñk¤ øNöð_1ÁòPʪ[:©UMiÀÒôJp²lx nSìÑ׌´Â·î–¦Î¯jÃÀ¡Æ>V“çÊ›°õ9`hëÏ•]ÆË¸$pT_VŒ©¬ødoÄܱÚ#ÔâÄ ÷í@j#“~ýŠŒp Ý5|wçp¤¶1VV;]ïÕå¾8Ñý>†¤WÙô:µÑ¡[ù"ëÌ.˜˜ðZÆÖN*z÷‹ŸNz‰;FéôG`å=–üÉ’¦jcvÝP¿acy‚ß¿§îÝH}à€%Tú6\*"Kô…ˆòûÞȱR5g5YâžtôÓšéñ’ÉS¬ò˜ŽaçÀ7ÖÊâQeçõíôW‹c&?ØlçSu+ÝFô GM[Fá5¼ ÙºËi›2—!§tȬ?¨XI§¯ð‰¨å1Rl}à1d¼ 1`‡æi#XhБBßeèYŽÒä¤CÄ¥“ň "&‹[ÅDz%ŒúrÒnø9÷ä9¿Wþ©ÂçaÏb'[AP­wºÜ3ß&øì„”¡Ôç©>ëZ— Çy†‰rÏ»‘ËÄïÏ®qÓLålÈÖÒ)²§U>œƒkò(ù¡ª6ɶà0¼ko™!+‘Lì¿èpNm#Æox!À=lЍÒ ’ÁšÁƒ7E›ÞµÙAlìŤ’¾4ã!ƒ1! ¸8¿ÇóJ)Dssj©ˆ‰§DP1¶ÑØN@««º¡è>²á<öoî-¾XKbùŠ%•lµ"ܬ|/ýˆw7Xʤ^MALª¼{£_þ¦ÒèßBŒÖÆ }£Ÿ‡Í¾ThE~¿ú Ñf¸›N ¡O"Øæ%VfRÁèyÖÚÞº6Œfl?êsje#1ÖÀšS‹ˆeÚ\¢Uľb ÷AkÀÒü=…1Â>9@+Ž¡`¾7™$¯³‡È-£ 0ü1nhðèͼÞYX¯Óq™ cíÐôrÁŸÐ'Æ1áøKDÕŸaómO+™nh ËŽcðŸ6vîº.™¶ÒT¯QP§i2„ÓÅø^üGÿž°ad<¦lǾ~Á¤}–V‡ÂÎ1€¨B84MiÊ‚À¼(Y“xõÎcK‰¥ •¿Wä61ò„kõÅ¡¨¬b¹V2z)XЩGºø—ñôS{*«ï‡ÅV¶?’ŸAŽjã59}B —\Ñ¡áάi¶Ž¡]²e,Æ¢Àª7TÔ(NFÐmˆÅr$¾Ôvs¼øÁ$\,9vÊÖf„CÙ+ž÷%œsÚClK¡]d‡¸Y²tZö<¯*]· x]ñìMÈÃîsmðQüÁkA'ªrdy^D¦»GI¿~­æne­Þ•ëñ”F‹Šg!‘?¥Å}t !P…y]öh¡†sp¶cŽ™ÐPmgLŸî¯½R"h°ÛVÚ*LÆ!ÍúÈ=±Mlb'Ÿv¹ÿþ¹Pm23ð8dz)/[­².Áµ¥JêØª½QªŠ”©¯1h‰Ì_Œ2 \¶L­-Òwk‰)i Ïý`ªdÒŸI8\Ï_ªÞ–—ŠNM¹˜…Õ¿õ”þ5Ûτɒ™zWwq¥°a§ã€ãúœ3]æ*v!BœÑºòu-wÆl#‹V œ\žd¥N”lI¹µªßR§èžyšª&wZ‚ñ Çý–¢ M)˜ÇÎñ>ÌÓŽ$§72Ð>º¢JEÌnf«Hs»˜¥ÚÆû1 ³}u³wÖH£oô‰½*äQ(mÔFEر«ØÄïFt-â ;Á™8âoTYƒ‚/C³Ld¸Á½çï(îäùq +\U·ÖV¦)!¨&È=HpTÍíJŸC2ÈÌ®æïi5 3ýiMÍØ%À2ó‡‚ —R󺈮ïâ¿%—Ž +z¡#10¹¼M¢ØAŠþ{Öd÷Lì T–ÙÙÞ:´{NÏzš×ìI.1<(]nì›rœ±8ÖKŸ•—N' *=˜²Ü3‹”Q¿@ly¼,“̳k?Mî2ó K—«…**¬c#Ì-ÒM)Û´6NúHØü|½ÉËîýó[GÍd &ZðÖ—3ýï¼[Û€5¦_¶T–IÄÑ0±×3¾N)ã6¡ðä [íŸÐDˆþ‡J²8ÌÍ[©îýY §&)?«É=£ˆÕ³›nµää]DèlAȼŒ 2OT¡l)—{‰,zoR-0 \ì;0e“ÀÐbëV^ ã°é ºRßá@|…Ý„„?Êïj&Îôò„0+^Çp.æÀKœ Ý¿ø~ޏ& -Ó³ 73B;*žñTŸš»-Õ£'»zÑ<·Ñë4g%ÁÓw¹y‡¤9¹ä™§òôcðWYÿt7ö«l²hé|äÞ wØÎ’ÍUThàØÅÞÓ’7tq·²ÒÙð/#¬‰—4ø¾ÇÒ›.ð­&}JŽd‡°€¸|þx]¢R%Y{rÎM¾Oû¼Ãô1~+ÿ×çñnpÍ›|ñA¨‹õsÓwþ 0(&|pÍB%ŠP«ÄÏ&¬¡òRÞœA"U¼ï ¦3‡çâ2öq«Î9'ûuNfrTÇ™!{-˜ï ž€0Ùå•$K2fèñZ90Ï«»9aóäÿ(yˆA?ˆ²~üèø-'U^5M¤4ñ˜H:Í ~ ëÀ5æÓŽˆFÚÎ3']öF3ô–àt5™<¨•_~‘õûfJéÊlšUÚ¡O$²¥YF|ÿ! ¬Ã3{qŒ}ÁÓ|ŽÆ?bMW ¡oµÅQ\¨oŸìHÇŠŸßð T<™‡(Q2‚®ÚÁC5¼£ ï¦ÈËtù?¬‚Šž%÷º“~à°„~@;-¿1ΧXF‘»ˆE´‘6–®¨&gã’ øæd²®¹Y—Fx÷3ž¬'ÆÒ{Í?4Í`².ËáК8Ð]HþS^¢Uùô7zÕñît¯ ^Š'Ÿê/ÿR=°mþøk)üˆÓïÐŒêæ*òœR»ÿzqŠŠínwH–óäÄ1ªÅ:?¾ýÕܘóÐóí?ëè•™2 ùKZn•þÃ8L”Ó$f°Ja™jÂÄh»ý%”íµ ÚúÏ£¥òE MäÃô±G>4UHÒ<†pð¦C«ªå!58•ÒIp×·œ8’Iö–)((èà4û­L^œ@˘ëL*XOèÙbªëáÛþ;3àÐÕL+é¨eÓÍŠ?€4ׇ9|ãÂçC¡p./å@dâ“®S¬‹ 2Ùœñ“Å´hÏ*¸ë‡~¶„Ÿ´¥L–†''Ã&}pinWY~¹¯‹L¬½ªšªÀÈIÃY´ïÈæ«vÿ}Œ #æz‰ì»C8!´n£)Åüï¢ulhU3Qš¿™€BzZKØÌÔ½l¾QåQÆ|kë%7¬f@6­°h'û¥Ü$¯ú†kÈhã}€…@P²•{`$z×ù`¾_„gÎZú–xGWØÿioÛDqÈ1•Uvô’}ïÄe©“늧GqQ^àÑËÇPpúø×ìgBàsÔýæ¿o53±|‘yˆòKÕÞ,dé–6/‰•Îý`kŒ„½¡õ´8!h¬M™»mLò$õîÖ8_]å Æ‹ªë¸‰^ $Nl¿j#3réåfúôWßuÁM'2pï&³¦/²ûÆS`preï¼0ÄzÆüÏ`N‘•&8©€)mPXŸ‹ð9k–Ó“ï|Fÿ*bâ|¡s\]Š¡æô½f"‘އ(NqcuÕJ“¬~gËNâº;/hÀáÝç»Ñ°}OÇí窦šõïùëU½CÝø¢|ü-2È€‡KÉ­KŽXî¼z¯uL7€Á\W¶£§•J~eá9žÙÑê«WÃ$vßßÞóUá—Öq }¨Û×t¹+YCüsS¥Ã5×Ö×·tîtW*DØi ÃIazQA0TÿÌŒ¡qßúŸ“”ÔJƒ÷}Ñù !ÌcfK[NϺÝò@=¿Yu8¶aF~E±B_P˧”lb[lá¾³]iûþY³-0gn޵|ûM9ù;49'ˆ‡>åFƒ}¸u×M\;ªX韜iûpÑV¨o\ÙŒçÈ5£›røÚ½[ÁçùvØÎÊ¥tšË]¥#3/pm¬d»®Å¡Üa×k¾«ô£„þ¦@Ú‚(€„ÛÐØ¾íAuÌa7(¯>EðX$¼UO(ºç&hàª×ü ~S#¾ŽÐÜ׎²û% R‚UÂÊ;~ºt~IxãšþtºG4dã¤#Ì 0(\!X_V7òÃaœ õbí†Öu•3H³¦ôn.Á´×{FHg0ìMê¨kÝÈ:-»Š8ʨ#¦¥”e¹Dÿˆ˜%*ú×´÷$ŠÍÚ­Ò¨+¼Y“b핸LZýJm&ûAÈlªØÈ“o 5h&™÷Ó›Aò–m$ý’Æ2õð…P±/!ŸÆ™~ø‚@1šíÑ|À ¡ÔñùS«í¶ŠÛ¾ß´T! mñhDá¯äC³ãsÜ ã¯fÛqÈdÇ…«P\1è~›qÃàÄ0]ᇽÈ/©§³:LÛP|ä`œr¬5ÞœVÝ«Xe¬]„ÓáÓv¦ìi9v?e<’{ÅÁAöÿ@Ü|3â!„î«"‘ìØ†4¤g™cp£•Â6¹ÛW‹–K;‹Ùgqû6(6Àµ ÛÍÝ´~,f_“7úttì´K¾!]Ø·˜Ûö^[;!ÔÁæêÞ\ñÅHâ.sαHV#¾vÓÉR¿uX`ëŒÆKÕóüuöA²´¡µNU0ÀéJó?rƨ|»õ0znéJg5ÌÑ»ãsÖxˆfÕ\‰p“åŠhiŽ•Ï %u ŠøH*%£õlm³:eÖ·výO°ýd544j/g™¦ü“ÜB 5ïí\D¶ I ­w™Aé•y@å%Z`Ž;³pò´Y˜–cÕ\Í»ÖíéŸi¨zÂRM³âr Nú2:Ù§¿®>½‘O +seR$yi\8fõ…º?¸åäCI¿,â¿ë†#&6HK¨h6‡ø†lY)½’8PÃiCdX"†SŠ^IËÞâmøNÒàüœ`îF›n9¥þ’&²¬B<íMÄ÷±p“ãàBðžn|zyË}u…º¥u4~¯6X^Zæêkp'Ëß•1wRß^ü>IØ~>ûùigÏ•¤õAýæQ{Q}>–OafËv ´Üuçñ¯RÓ#ÐPé(_ŽT…5w# fõ;ÙªC “Ó뚇G­×™ƒN´NωÑ`´x\Íf!/—;§NWjåpà—P“„Þ¼UŸS讣ËG<×6)³oR_‰*ƒ€´E;Q$. Ö –9ÇEãƒfÛHóÏéÕÝ“ ÇAnåGN~؂ս`o»…võEÀäqQZyõrÁ@¦ÿÏM3p²éÜ:@p5Ñ|‡ùo½^ ëw 댙 +Çš‡?>:icœóÍœìÝåÇ>â75#ჳ7ñaè£/,Gi¯OæcÙ^4"Pºà÷yøÛcWš™Þ`œÖ-z§•–‚ ,MV9ãµ ShM4uSãfb-¬òÄ:N0Nˆ9Ê B:u"µí€f³¨Ž´ü²þ`=v%¯vd(©8™ÛJ… ¡&%¸pΧ£ü¾¸%YÉS½$¶ž÷RNgF·Tˆ²ÄÖ•nAS`Jõ~{qÏÍÒO¨ïœ›}ö‘W¥À×´(o²V5ºÿÂ{Êö2èÆ)† ’’#Dp.2vyOò’€²§”h?“ªêä¶òŸWÌa,„"©Ñ’µûµúç¯f“-Z ȶV+L@7ä]¾ßö¥ké <_s¡]Íd›†7ιh=øEži±R„šo”rÓ¦,Æ~n¢I<½n_E­ñ·7M˜ãˆWßÁÎaþKuGn‚üCÓþlr|Nl ûÑëçjg©ô,iÊL¸dl#jʼօ•€]™__5kŽ23ɓ̻+©!€CÔKŸ> Äuù%u  c%SgõnZTàæÁÕêWl–›îñ±}–zWäj\)bÄ„Ç/ <=í¡ùÞ(üMëÌÀÈd¢Œ˜–þOlH6)ûf“|Á}mÞóÀ.”À³ˆYVC#ÄI7Sf;D黲!N× [£>›“#ÈztPJ“Ñ·âôe¹lVôÃ’¨²·æŒ‚ðg¹?ù¨ºÚÕ›é}¼Ç ö·´#/fcÄî&ë™O0@½å®¹¢¨!k#®M’jÈZÄ}¿é6ëÀ»¾IÉoÈ5îð÷­(Hò‘Š·Îdã¶ #)>¼ü+A«H ÓkE%ƒ ãë¾ä}š"/¸¬w¦¶[pw®©>ø¨Ä*¼iãµû|ÃlÙÏ‚«2Iûo›˜†Id+?NîkÙ,àÑè c°y(Ño<š ¥I½¼b¶þ…¶ˆ“i¯êý/î¤ü=d/ >C©pšñ˜¦"ö`l<\š´¸G‚ï%ïÆËC'÷Qz'ª§Û¬é (½ ¯ƒGê9L±­¥%"mjÆÇä°¶A\H `v­¥sÿ© SªGÓR¯wñò¼ XtC_§ªÒ¯“êÚ&LOè§…5"Ë‹“ ÚMñ݉$L™òÑÀ¥f´AÖÚ·£)ž{ÇévQÝT ¯\öëg´mâj†E3è@C"~€øSø.èÁ({>¹až5XñÃòS ™7Y‹ûj£ÄÉ"ÏÏá%OæÔ¦ hÍÂS‡³hü%´t˜ÐØ7¬i0XÓ–A¯€ßålÎÅn€î~ïòÞº˜µV8çý±Í´± ñp]Îf š2Œe_§Cɢʜ‹[Øü”¯;·?{ä­Z½J»ŽéÒœä(5[£*Hõ㯠J—á|.Ùsµ“ÐS\Rç(â0½·ŸÄÖêK ÞþÖ¨ažzm¿mDvÛÄÜ@Y½äþ@ =†I˜æ ¸-vû®¨§}]†È/ÎÞ‘ nuÍUFÒEFÄ»è(‰ÐÌ s˜ Lìùl(”ÃL›ÁÄÕE¡ÉMýÔþáJ„Óp¸u÷o¸J²n“þÿî¼ ‰v]Ê´¡\´ )6Æ’©ÎB-÷½¬8–èņc<,Á„õßÃØªŒñ°ûµã@Ñ)Èél\‘;<øwç‚{K ɇªÎ,;¨ 3fïJ“`*K§ |q“»…ÄÊâv[|–t.—!²‰ìKÞ§Ç—’Š&Šâ;(EŸ¹Æðs7‰ :³úgÅÏ™ÎÌZ‚¾JúL!fçZÜbMœ.lÉBÅ¿j ´±Ô‡÷@Þ dȂǤÐï¨Ð† Ftÿ²×Œê:°&øôPdç­8©?OYC$ ݽbN ~Ñíêˆçœ¯-ÁÎmŒòX²MhyÐx¦/Ê0ˆ*IJà÷@žÄf¶'_áÝ÷äÌÕsX £öa ”‡3ά?Õ)•G:£Ÿ„rd6ýc" ܇AȧqfC ø§rm\P ž‘ €ø93ÈUpRí¤÷Ëhlê©…òËÔäs ½5(èS˜Èí ©qüiŽ_Ó PWÞV¢`T|±ÉïãÁ l“xmCT'÷„¼Zfªò¸t5°@Ó ”«å¢ÇÂþ8É/ÔÖÏx—Bkd–0:ô½žt{Q [[-*[­ÂvÜŸì ö+¯W¨o/\\ÉÙæ 8Zït©úIa۸ʩäs.†ÞÄ*/¶fðü¤ÄÒ‘ÊõWÍÛçHíˆà:˜Á«äw„ æð&ÎJøJL7ž#Š (‡Ú bêSé„ÃGÊ‘@kȈv=_þé"ê{=VXá!™ßÀЂw]¥?ìÚùuå0U¡±‡vW 4`Õ‹Æ€oàL€F„×ÔÉ#í•ꅛ﷽µAÖrˆó»'©¯\àìÇFd–Ô¡ Œ!BSA온éè°—§Ý.£)ü·“1-²!òÌó¦™÷l!Šbâå®ê¾/A—™^¨ÈUÒ†âf ð ÅáØ°¦=\<æ Ï7;ÎA ¤ƒMÒ åêSIâ´ʵ•¢¸É½Žö¤Â;iuR,-nÔÆ™£ÂIÔ ³úmþ›Y†nqJh“!ÿ912ˆÔ8TML›ŠÜ‹¸ž³[UI(y£ÅÁÁyëµ-“W k-sЗ‹Ñ’ôÖY‰_šqØu@áð —lj hF† åpEiV1™[Iãü¢Èà´ñج|Œ?¸C©¥¤ÔzV~ÕXÊÀèZÍ?x¼È=öè˜;¦ÏëPãZB µQWƒ‚ËaÞr£ì¦:Ø7&{65M‚5~ ¥dŽÖ¦ÓH¬KUµ4áKTïÅ¥¬*¼¬GY§ï9C*ˆÈÝ¿÷°JoÚÙ³7L{c Þ>ðþ޹¬ZÉŠÁqYòª ªšŸÀ‰KQà1yÞ14ÇÎëäŸ È:‚ZY+ ñ)(4è)°£hÉ–ü1~¼ÛH;¥é)UŒÑ"s~9ižã7†¹ÚY‰Í*ÛζÐßÇs-)f•OÐÌvvÙ Š9Î?Êos üÚ’ä‹çp²Ì†ŠÛ¼Ó¿ýkØð´,Ž–UÍ#·³ÞœÔ"F^âÙÇž”úºè¾QAhÊço´b¨DF¬ä¼þX¼ræF¤ù1£)n‡!Y’Æ=«„ʰöÖ%Ršô —*ä~?þì˜pïîk`õÈJš#)wPÝdûiHW‹¿ì~öwܪْ– 1d7þ6ƒ²ßÅÕ‰ :,À1ŽX.ÏJZ/ 4¹EcÔÐ[5%q(j÷<%ò²Ô·.dŸWˆQŠ*=É1jÜŒ)çØÃ¡ hy‹¿¿^5ÃI”sÌÑ«"w5ÊE˜½ŠQÊÒü­dSô\Rº?´sýçdíï´^´&EÝ„xÂM…ÚÕn¥W”Ã(à+ÐÓ8Û€å™ÕØ‚® UôgïVR½uð«s2¶¡[ÕuˆÊØþæ¯&%£fW[1TÐ/bù;!Råk Èh¬3ìt({`õݱª‚‰—›ËBVA^Voõ_ ÜjÇb0FnG¸”—·±­ÚSÇNcl:—„£mÙ'ÆÍh ÙþR¯¶‚ˆäàÒKʼr<}¸ògkKðCiépUp:ÁÛazé稃ggú§BØw:©l3ŽÚçäåʪùIn¶ºàן'‹F{{û¦ÜTù„£ŸÁ)+ºÂù~›Ü0³›ƒ0•†ÃGÌÎFLî¯&@ÌBsKË2üdf:ŸÏÇJu™ƒppðé\`×ü%÷©Iîð”‘ð…qã ’üĆ#.óܲžÛ¥[އ¨¹Lg§R;È)2,™8s$äÅû¥ÒåWäp¶¯†™[ùÚÈøÎt|7õEŠ.Z­¾™Æ¼|Vm©Qù£ïþYÆb¡·. òŒd'ì‹^œÏ¼ŠH½Y´ ¿u…7ÈÜ%?xCû·øYnÈÅr®4¾Dh‡àGøs,®»÷~Q«ÆVÌWQ[#ê«Ã­¶È¼H>ŠA­ÕÔ‘Ü¥•œæ”f°$¡9ðí´Ð½Ú¡³_ºÜW›õæÖÕÛÝ)t¡C+7Æö^†¼Ç_Øô?íIá!Rð²D·[VVß=N3ç`YÎ|+•ž¯\w“lÖ•Çøë‘ç+`Èk†~´”˜¤ËCû~Sô¡©Ãß~‡wÆ!F¶øuÂz XµÄò=¿â9ŠÆð$útþZÔšz~üµTo‡ÏÍ,~w££®ò@Jùð®Dl•ýA­xb(êÙûM'y÷W?OZص§ÍÛÛ´Žñ` ‹g}…Ô^éíóIÄ sÿ‡y,ŒYHIyŒái\zÜ›§ê9{$W²ñð»«ßY¸‡ºþA¸|@N+°©oÎð°!Qk¯HÀ}öº|0¼rÏÓbt{óÚ´ËÍ“™¿ál¾ÆËEâÙŠXÏzój…Ó‘{¶eVº£ŽzºnÑÏ´zf§ óQ• R˜ rÅÚ¦@\Àƒ‚^viî,ÂÎHO5ü]ÉRÏž\ÛF'ÊàM¹Í /gk¥ßšœmÔ™¶džú šE¡×ÌÔŠ˜ô€>ôÒØqM‡xVP¼éÂÀƒÝÀÑoЊsÌÎwl=¡­ã¸n6R¶µ1P£d¬†nLrœ¸aŒëæ‹v[¤½r—j ÃGh"sù`ÖÌ:ÿwùû#ëtû:´´AÙp¨%ã{X³£E4‚ú*` qm|RâaÝÆŸ“?†"ïÂN^yý2fγ€ÝÜ}Ás$×'ÏÃíÔýÈ ‚Ûgñ¸¾Ú&«Ä^ƒmÂŽ ÞõÀ`×Õ« ”&-d4ÚìôI¾ÝœÊP©2š‘¼Û”|\Q¿„üVΘ`y» ôˆËÏà ýwc6U‚^Hd¿´Wlqí÷|~¨Ê7×.:'𽜃‡Å$¾æ”b;ØYÎ÷«‚{~_º9uGDULg4|âïv×ó t”d/Bfý˜db©‰eß ô±_ÌéŸÞ0`>)ëµÏv/¤i7¹z&†_z²ÚFÙ[Qyÿj%¿CÆ–Ö¬gåsÊErÔÊ+ &“Ûþñõ³¸Zpø²~ „È A2<ÐfÎü¯ ›Èr·ø•¦XËŽUôŒ4¤ÑŸ»©ÇztkîDŽC¿mI?Úå —@¸*ĨvÕŠf¹Î3JWrIæU¸ÖhgBwí®˜ð“Ä­ ð¸¦<ÊÄ¿†ÖHùG'tO©Ær#@R)ªÇm‹Ó3:Ú¿dh–vXãýiO-Ãÿ<¤@¥c@ ’ѵ¤%ÄõØ f:&“4¨Îª¯zª4¡x…ÅöR¹,̧3“y<ÊE[^V 2Ȱ¯:²wv)ªØ¦ÈnôR[×^Žö‘AÕ›µšéÐCz8¶N] #ÄJ£†‡mPH™–Rä)NÞ­Ëâ(qÓngÞ÷uœšs—rPD•æØ8ïWb D EÃØh&}ª©QZgxóW˜–Õ5ÎÓÄ{Ûéܸ“ª'P语7:Ûž|#µºT¾NG¹J­Ëë\êdùì>¥ÏñŒÜ‹ Ž[Ú†§¹Ai‹$‰ •8€¤`;6mGeˆ!ìO,ë[¬N.r–­^Й9rb82<}©±™ŽÐè¶,¬nا—”‹Ó«û¤P%)‡”‹/z6ÀéB? ‘ZAö(ÜÔx¶.ÁEFQQ¼%­¯J)L?¾Ìà$–\Ñ\JKÀz ûÖìänÉ·þÔÆÏf‘*5?@ÃJi¯Ðêµ² 俈ÃRç]%ÄIsœcÖ ‰ü™ìÂxDÓw•$P÷þ·äk”Í¿+|.Æ yåè°ã] ÀŽQPV‰‘¶†õÀqx—¶:˜f–þ#BÝÁz«ÂF”fzÉ¥»Â™Æm¥½i‡œG'Ô­Y¦éüîx]³ù xD¤–¸~CùˆrÚ™jà‚À;û¡+lC!Sl* ÿ]WH¥Ñ yÁ ÷H$Ö܉¥c¤Ìu™’óa.¹ñ³=~²ƒÓdnà’˜SªCÇìVŠhO ¶òžËg¾ÐQ1ß lƦO•È¢QàÆövÜI)ÿÂAÛ!ùHzžÛÇDÏ¿½9zg®®rQØKÀ-˜A±NÓx0¬Äã7ó$¾n¥öÍr8»Jn8C¸5^íÆ¹hwÙ³â—Ök7hŠqÞ®0œöq9Úùò~(“a¿ÕÊ(ô¡8n j¡—>g^0Q¤Y,)Å--H'͈üw¿ÖÆüC¾–ceÒëã¿õðrËB  G/‹v&øýø¨ŸL’Mx Ò+Š]…k§”û/jاx¦Ûÿ%Öàrãö%‰Ï¥æ"ç%÷pƒ¹視‰"®í¯·Üäê*V•ŸkK#_¤¸3FœÝÓ·uƒ±7¶W邾æY_¨÷AØkqTég†4ïþ‹´› É£ÅË¿ò½E ÚÝíÍÚa0a•ÉKVëÓ9;¡B½òž×È!«†é›dã¬Ý>ó½Ì— \x€ã™É8—›ñǘ¸z ÐÖžOÇm?^ئH*­™ÆPÿ¾Z1ú9oŽ|ÊÁ–z‡* ƒ­ Vª…í³zs«$÷ý;nÍ¢P Ô*ò_€wí¡ÆKÊæB¨ú!Àþ(#Õ`-³‚ÛAЈe: ìûÕEFßuB­œ9ç¶ü£†ÂŠ’ÉÐv!OŪ÷% U•G¨R’”Ǽ!úrÄž’…´L[‹ë+cž*[lRÂj(³yØKàóÆL#¹K3 Y¼Á 8Û¡ûwE9B§0“ÎqH”/ke‚öÉÉö<$÷ø!èîçfðÒ2#%z¹ˆÜ”Þ·„ÖY·ß$º|6fe³µ:©0kR ÞT_ÈZöW±’«-‰Wf¯;RŒx·ZTªùõÛ¹ƒx»‚T¦Fäö­‰q ×ì¹.x"bæN¨Éÿrp‡WבWb»5âž÷”(æšl|‰øPÖòé~KêWlÉÒ9ÍÙàæÞÁŸºErR`ØàH3knYe‚Іº²÷ôhJÂÇ;oL/ôàÉ kYèß³®¹R{È^õ‹á)Qÿ`ÁWxAH”)>zë§åiäv†ômѰȳ} ´µØbe‡õç:B&ÏÊšQ·€€€96ž§Ñ§Š£u‹«<%jca>]}EôSÄ-0ë‡ L>ŽbÝÔW¥QÈì9ìŽÁbI6J™€\xߎÖz±©Ú¼&X»öÄÁÎ¥ŸMã™/ìP…¶%Eÿº›òž@Ò >?ì^yUî[³ŠYÓ@ÎëžžÍZÖêí/J:¦¡²h*a9D3&ÍÃåŠ.l;ßí·²2BTÌè8¢…ÌŒ\!åmøi,è>TãpWórír A+Sº¼WÚGßúHz'lKL›€ùê’²h©ÌÛŽá‡z6õþzjA¾qq­”ܺEÃ$RºÖÓ+;vŒ³–º6 ­O*î¤ÖҴ׿Ó#¥›IF±ÚYUaéD4+1ÈEÛ¹¶ù€KÛ2ï²òsÓ°¨™ê¨SiuÚ¨áð²{Vå„8ð4,=ŒÝ¸dv*.ÒÌÛLù É]`ÍåÝö%9Ê5­€ó³Vh‘gø“Ó®™“Wg£¹©‹€%*dâtq`].ÊÎ= h)¸!¨O¤†o E`"ÀØ?²aÏwÓzkе]о‘É/Ö&ÞD5?«ëܽ£º—ÐsÁCÈi<¡uÿd)™~™ÐÞÁÊϲ)»¬]"}Uë„È$ S`9áò³ )ƒ²r«'äP¼?K‰7ö%ŠaLA…$ɼ3TÀÆ+Èã $3½û—(WgåíYgL’îñ ¾R[nXM?ÏL‚q–¥)—ë]±«–†C5ªIBN­Ùf3l‚,±ÚóÒK5‘AèQï4å8?wz¬bñýË9ÝØAÉnm{6Ý7D„†t=‚>@FÀšd‹,i½m•í9kQ©|C‘ø˜¸WILè—à3aÚ½êŸü+ÚÝË'ùU!ÈRÒåÚì ˆ,3=•/óÿÖì+#︖zÖêw÷w†zÁ7õ¿ÞÎíEƒÓru»NæÙû¤®ëí@…RUä^kkªÁ{rÝcÈj«3•> õÇÆ4ûŸoš€Õ¤iM"(v½nV¼2f|û}æŠ5ø0Î)·û´§í§à`hu¼È9š­È*ò¢O„õ#Dd´ñõÔB„"/„ Ö¿e’žƒH¯˜TàÜÅ<ïå-szкyî !ª4–“=ù•ø¸žó1ô\ežOS6ðŠÎ0§¯HoY•àxÉ6M¹r!Ú$y-¥úçÅÊ[c´[ÙnN ®ôüf(§oèéœ+dÕ©iQsHªÎUµz"7Iç—ä_¸Œ,¿Šš[½åºY{³ù”iÐAou±p¥þç7õÅÑK†×º[™û\GÖ4 H_Bz“ÔŒ=!én…mw²÷‘6Qz¸@o°©Éq1ÿœ‹S{BúË<üMSí=ÔCýÀµ‰ž´z@n2ŸubÚ4;yÅwŠ&œ¾>ã6E‘ äCV–äúÅ,a7Ô^ö”zI–pþ©XàÞÖëNQA×bÕˆUq;_ÆD2ŸÉQC|j1j$ýÈÓA÷>´»É$i9aN@íllß©§çK‚ö¸Ê9O®UÈ”lñ£¹]!“XÍÒ¯þ6>îík÷çTšð/î|Îõï숋A›ÓÄo€šTZÉ3èaá¨P]A±è& Á*¸ªéœêmÃzseAy¡Æ±÷¤iøí ÆϤ52 rx¡öU)Ls »3…ŠA6ð•­)à§xýÏHŠÅºÑ”‡EaŽ ºLœ`¤Ôi7ؼ´ƅ‹À`ïÿjLm^ *¥–L7¡E*vNÒ.ÆfäA¬ð0¶:_äúèxÁŠ ãI˜×h¡˜Ë‹@cãÙÿYHþ;c‡£§ò³Õã×'Mú^¦Õá×äkÙHê…ClpÊ`_[c­ÌËyBöÆROײч`”Ó%'\ÔÏ=¬*_vðis†»‡®ðGìMþ†QAÁCEðÓå|†j(hAWöè[:òЋH+‰ ôüVL æô-)?ˆVHì¥?&K0æüd÷|ÌŽÊZ;W žsE¹WofjÑ'Þ‚2•„(ô¾­3SÇßžæœB®È¶‡£Ây}ÙÈÊ‹ yb•§ˆ­ Äúþ;¢rã%ºÿ?ð¯Ê àÖš0<'A„DJÂLýuF žXÕ Ìïwj•³ÞÚ¯Ä>1wPF£¬!{æwl—ê? º”ýɼ‹Ý+-m¦wßc€õêêéûrô‚4žk÷§îÖY wDOŸÇõC‚H-ñ»{Vég~n"ªÇ¹úñgWu –þðᘓ¬‘Sò"8l@Î;»uŒ½0¶–Ê*΋ ™ν˰;[ŽÎ‰ Z9Eäè„)'‹oK©?6€gKëd¶7,!¾ÿÒ ÿ¬ø¿G|ï³Çàr.7¥çÏEâpƒ[.ÚH¬ŠÛS¿å›Êî¤PT~’Áêã#ê[ÑÝɘ P-ÚpŠ9Ã×Óóàp~ÄoM©ºœðö"#¤ŽiœãFÊ}uš–¾BÍ”(M€Ýxr.«lÛ.hð$©¢í­õ F¹«^E5Ë=ÜãÁ`¬ {íÍ6"8EÐCoq>fZ–¡âÞiÁí,,šNÓºɼ>b›=uBÉȉ¢ÛðZ<ýÿ="îXñvÃ’´É<\…ÙåÃ-†U™V2Û¼¯® Øz†¡awyøèй_ ‹ò ’Éüpÿë¬AÏ7§Ê%‘t–x¡ N·ŸE%üí@|ÂåE“µ¥zbG¼•Øë¡!ƒUŒÒLv ,Éþ¹’ò£É¬tC©„ÄŽUùÖe²ðxæÍNà¦nMçk™ÃÌI“uÝ8PdºJ^£í±1¨b:²2e¦†=í~F>É$Ú_ú†„ Õ=Çpwcå)Dc Däa.F{ç_gSÐ<ÜÖDDwÐhWËh/t򿃻ã–ðqûôH‹à›y¡?õg¿7¨*0/V›4‚Ïv 'á¸_4þ>,h ®_ÂcF¤±ûñ4tÃá b„ íÆ?Ò¥9²EW§°Ÿìþ6z•’蕽'8ŠjEKˆ6'f?¼Š²ŒH¥âÓH1JÎ[—Óž6Ëb׆$›æON=QÆz•Õ^ŸïHQ´×<«A½ù,WÛÁ‡ˆ5óbÝ‘—$±)®ÈßîЗPYb@xú˜©BÎÑa*€ÉHÊKu -šÕlLRLbrßéÌW q›ëj¼ã(ç6’–Óc_ëñ?=œ8Í2 x‚CwhÈI‰kÆñJ6¤}Ç’hß/­âÝ»‡y+–X¢Ag§rŧ ,@8‚˜:ÍþB‡¯Irê#N&˜±Ø«IçaàÛ5Î(éSJ!Ð_[K@VËÀµ" wÁàp'è+Áˆr˜Eñ¢‡%ÈFžÉ$•1´¤-Ž”+·0%‘ÜÒåoêáßAáWv;ù4.¦RÚèsà{^j’öä­Qø™Â XÃan4LydDœXì4½6ÒЉ£2@«Bä½V¹²Í>ÆâM'ª¯åìÀè66ú]$DŽv tMÒ^ïXzn˜  Q¡¹¼džr,Y¹¬"s–ó#±ª.ë4xcrû°M_<åX]²ïíE¼iM õóÓÿþp·‚[é?2dTÕíÕ{gJøºg^ vö>·þx{À/ Yš×ÚZz ö ?@¾ÿJÞ2±6õëQç‡(.ŸÁóŒ(éã5õËÞ)'·J#r$!}_È?‰Bw{¿à9Ç»Y‡«€j ^Úâ`gñð(eï§ >¾Õ·m Ø;íÜr.[t]ÃÐîýHœø>¦íC`oÒ¶ŽZÝgm=àN@Äo¼:òÌël£á OUùäfê pNÃÄ“‹GS?±íúûN…g ûçì…È¿¶ø0ïÄðˆ/8ªéP…ÛÞ/nŽÏ®ÓœÝbÉ´qq‡²¤`À„w—É:_lË!eê5ÄØƒ«OÎ8§é=Á­½²~Ð ;€»ý€<Î[ÿškµî5¨{Σ“C"T¯ãüç@¯pW.§ò-nùRIÆ DÔVbúâø˜yßÒrPŒûÍ±Š¹Ðg”µ¤‡üóÞy5See ×±ý0hý«D£Î=Û©í¾Y £fÁ "DwÇz(—.F6„õs@’.O%<‹è3Ÿ¢s©å“Ǹð%Pt>Š…¸®û‹z†¹—Oâ22ƒ=Cö(îšùíÚèwch’}ÓOÖTw“Èû:;Ѭœ‰†àÑ#êˆ}¶Æÿ›KFÌÞ»I¤H“•}0NI±¾üK›7²ØÌþüf§Ü=%Ý´—%ÿò¸ õ2ÉOå̃ )WwÒ­Û/%z7BŽŸ¨] !e€ŠN×Ó cc)DÃ-{òu|u»¸áþ”üöU%óyÒVNHð2†z#ãºâ„w¹iŸU³íL#:3œò †ÔOÕ*¦ß/8ÇfBÁ ÃY 4(ÏHX{¸ËPzÁWHöQc<ጠkî7±~KªTýËä÷<5›ì5@îw¥::Xä/| Û‰«ÎmÎ?X×V²3®)Ýã4°§vñ1q ÿØqAÉž©ÁÏÞI° ýwr·*:aŽâƒîíͨþšf¡£^ßðh#è²È­YÍk¡Ü·ß0’IiÈ{•ûÂm]}â÷Y©O;¨Ï2 ÉL«’Mýˆb(òƒ_C1˜y‰¤Üß|‚“pwš­u±P§×JG 7`´S8­éøÅC)Þ0Œ ›°þ9¶ÈC@7ȲPmˤøûÓŽxçµ÷Ûò{›Â„‘ú²Sä’T•‹@ÙåÛ­ÑÍÂó c]ÅåÃ@* µH†Ý˜±”i1ùp£i@ÇhÍ,ÞŒÊ- (™Y%Å’A ˜›0‹ëU Á¨x‡ÝÌÂùѺšåÆ¢ÂaW,Æ ¡q¯?ãƒæÒâŰ O¤¬C@*%ÖÝÇçe•D¸³ 7‹ŸâÛ9zuý0 ùÞ„l±ºZHþüqŠ„µÖÂpz‹aÿÄÍ„o$AWªo]Šª×€ËnŠå±].gòÙ€ÞÞ„€ª'àÑxiãZ§Ä P`åïä•mPTZä œ·†sÎãnÙ~åçúƒN<Å:Ù8'Q,)È´†Ì þ·ºN«”*·^ÁÌ&·ëÞà ˜Í¤kÊ&ôÖ£[niÆ|@)0]ÔYÐæ¤Ä×·ü Õ®Òâ£ÀoÀ…í„R³ØŠt%W±o Ñ• |RÛ D} jàr@]H>Qט¹ ‘‹¼X÷¿gïøV»@p&„ ý¡p¾Ìhù•žˆ^›Ö‹n7¬ÑXíM¬Ïµ F Šû¢gZà£&à‹ |ÇÒÖ( øªtiÈ¥UÞÌs©t9úìD‡¬¡^hÊ&B’`¹Z‚;*îe"©Å áíÛüH F^ÜD˜OUçñMŸ Ù‹ðQÇ@cÒ– #L£EïP:5‚»yDÅûy°ñ§8²¬ÙôUt&ªÁPï|›Ž'¢Iß¹9®‡SƒFM™Ž‡ºû¦Í÷ü©g0œizy_›‹²Nh3w ú÷ôZlS&ý”¬«Ñmúp˜Kçs“gž@Eûà"qCbèî—¥|+Î;Þ¿ÌA»0±ÉŽ}¬DpÁŸfv.hÉ9éNÃþù /cg,7¢ðªç…‹¤þªGÍb&„ªËÿôN%³´ëg‡Äe ÊP½€~çªO†G×6Pï&¡SþngdüšŒàº¬íN}Ʈʶ'á§î6ç|i`¤s¡TB^mžYcmÝ£zùÙ£=µã6:D,̽¢ák¬èѭеÿh«7”U<—Ïî6©‰«åzh§t ²t)pÃÐ\Ykã†Ê²³›*Ôõƒ€R Ì%ÅcÅÙ|N\8«ñ ´ä»£ö«Úèa•5ûç"íë32%e<´.€Ý ÁNÖ6ò4y¯‚ÅcRÞ¶2…½âièÙN×-ÃÎõ«ß èàU0Œíÿ´Ëg#…u°®)Ê?a>—}üø±å¿qri|ÑÞ´ë+ú ¥»Öµ›\änª ë+QV¶&Щúç†{;¦ÍY憑T‹¿Cò –j¯–ž'÷ý÷j EÄpj°I¤…}4k¨ÐS•~Ï8^õBY¼¸yðÆc·QVOï ¤PÃÊk«¤ÕÚ ¢þăÇd Üôo-ÉœÓBÎX™$?l^éO=c©>héd¤¢| œC¡NtÀQ¥s)‚çIOºS5q±¦•6ˆh̵¤Ñõ-ðS ñÎãë«È2©|Àúžj:oã÷¦¨ð‡¾ÿÇŸø¤…´C`b…ÅJ8ok:Vûü}Yd($®ºtOzð<Ϥ•Ú}BE»IÎÁ6†â5j‚¹n㬧²B­Ä@-[°jÖL²ß­Z|C©œš•",„ř㒚Í4Xœœ²Ï’y0¾3Ž=_ZptŽe‡U KÀ´ßÖOéñ/ P-#ç*‹I9| Iröû?¤É†oõ¨¾s.I1P{‘7žþ8”/"ÀƒÎ GÜdOÙ/Îg˜[Øwu—S¤s9'pÃ5ÆæNM2>OÅ&©ÅðäS]µ½j1{‰‡eÍz 6¥ XÞGØÍªaIâÛîðÀŠWÁ¨ßì‡>Q@ª5æC®ppO¦7™¾æjÒ‡ªIÐç«ÝJ§Ë’ø+ V&<ש÷¨ô ãä¨Ôè¼>'›cð}é\×OÖ®æºÙgQ’qs@+zð_£Ë2¼•ôîíï=«;ŸàM8鈈Rnú¿Ãx¥ƒ¾ÝUL±\­’c±2`ŒûKÙÄZÓÖÄ9w.Ï€òcžEdhÑ_F–ª ,õ:ðu›+ÉR(õàZÈQcŠ¿ªóóA”=y–›ný=ÖXžÝ¼ânx;Î hZ½l‡ OåöiHbüÒ©Xb¿ƒb©jØÅpö“L;lw­D:_›rõw’ HÙ캱²h†Þ>W1†ð8ÔÇor:4שǯ&Øg%Š­¯¦0 W±‰«¢À´ Cþå;¿&¯ÎÚ&p5Ik°ÿß~:‰™D楷û}¼dZÎé§Ä|êÊõõ‘‰Ýu£þ€©ûî|ŽÉ 3#W¬lkA^o‹\± óþ©ÿËäå=nÿ¸Ióea’ßâÅ\työHÅrÅ}ü@ÖøsU[ú9yT>¤ˆÿ3¿g§Ð27QV7w¢žc^ºHWB©ºìã¨ûŒð¯‹²™âx¿¬¶Þ÷p%¾õGxoY™F—k·² ¥œ§(÷ÜÀü‡èÐT@ø—I–EÞûk¦¿2 •ÆqRP4µù¸\ž™W9Æjs^¾S¾W‹®ÜpE~?¦ük±.Ó›%ö0Q¢Æ‘f”“m]¨öG¤’Mì­`M­ê?k`çâ9Š-+ƒß0œÅ†ˆÊÈ‚à¾ÜŠˆR ÑM¹üÌ”Eøgt“Ø´o´y’Û80‘ï1™Œd®),{·°†¬ÑBjöˆ[˜;Ë>Y ȾÀ´@6ûTÆB2=\cáµWˆ'?(%ßl÷ ‰L P%,à8äw® ›çˆ°C§osN5n²ÆÁè íQÄØz"ö€Go¨ºG\ÚÀ¹:Óîñ)uÞ¯RMF쇄7„žhÿÎ=Ãe8KÓ-ôéWD‡Ž&)o ú窤ì›ñ¤Ï®«íòHŽä½ƒ³y>“…@³K^‹„8hœÓì3X¦¾†|G’ü4.·V:¨_±òqϦðô"ˆËø¢™3;ìíãUäÅ~ºÞ!æ·úç@ùp.âa5,N¸¥MÈ£RiÝ®0d_‹å– 1S,WU'ïÁfNaÇAù¦?"üj;§n.v;¶¡;¹TWbã?DóÌbæ¡%ÃFÙ½pLm¸£ù¶\Ƙ®ÐR¼„ýÈž£$œ,þ¶Pò’üZnºv·eH {š?u†Þ*þÿš2˜}žh-Sïk8ftKn?J«ÞÐN=Š¥rغë¿ËN ÓÇ®ß0@G[å%¢›@V¶%U©^?È´kÒÈ{ׯz€&QMæÄhÏ!Ó)drg)Rð¿ž3r5Þ¤"aJ uw·ÿq0"[æî¾\#ŸšÊ¿}àdNX%ÁvL€ ó„öà˜ªìläÃí9èq•$,]ÉWÚ¡=c€ö?Pªõ-þâQÂW²=’D QiúäóþÏmV"Ì+„Ö™0Mr(OgƒéÀG†?á‘U?–Ö­éü>¿ïšaS¹bß*ݨ‰dÖK*T‘É¥—¦V–x]X,&¡û ÍÊJ “Ö ùj e'2),£ Ó;þô{ìp~q ”/,RÙ‡šû5kåI_‡˜ÕPòPMèNŠÖ/) %™ê|„Òúôi]oûB1˜û'm.Ø->¢ÓƣߛC§wô”˺>>©S!eµgD=Í{Sœ ez/ѧÏ+Ô¡¼W™ª÷!=A8yYª©_Ðô0ð6ÚűE®°üښݩlm_q &KíÝ·ïøI­‹`]Í7›˜X1×w³ohwІÛ*yž yƒ@aÂ8“RËS:·i“õ,*1çõR ¿‘»õ9­n"æz’ñâÄ`æñÖf ìøý@<÷Pâ#,ýˆÆ‚¦°k0"»Œße×å¢gí±€ÀšÊ–׫pˆÏ*Œ ’´å~© q>7š¥p·¼ã–ûåÄ/ ,¹IË]³LE–Âe'!F™´YC»ê:«—Ú—¦ŸaBgœ&$U‡_Ûœ ‹kôè»àS†NØçÑ)‰ä}7?”|ÂÏleÌ®ÊùŸ#p‘Á3Ñ$ܦ®ÄÌÓGÆ›~õÍüg[OÎöp¼²FHpwrç“@µÝ•º×¹s¨;Î.b‚|•Òûh”,uïJ$ÛHHõºìqÚY¤ç\法+"!¢¤¸P$&/^½0*øÞ“«øý¾Ì,Y‰©ŒÂd“‡X¿’Sõó4]¡c !š§?£w$΋Šú0žˆ€ß‚ÖQ«‹ë%¦˜ÑÖÅö©þ¢‚¯˜éGE~¢e€©5G:Apxg•äµÁV9³>p¤–’©ªÔ{«ªÞaMÆ&·où'Àû)n(aHdyÑž (![YûU;û Ê1©F¥ç”}L&ÆîQZÍ” kÖ§bÚ¡5T^æ¤ÃȺ—¹ñešÅ$ÂÇ©cÏ~ú—‹Û˜¶Md|&{o°Ú’Û†ÖPOžæ‡O—~"rWö ÊÊ· ÿy•‘ÉïVðÄH¦“uÂj~úU"²<Û†¥¶Íó~«æ¸þÕ?„FɤéäÒsÌ8É¡æSQD„,³ž“ä>È»éÏKtºª3 #KhòŸ|*ÕˆÍÎ.•ÊÎ0ŸÎàïñ#ÌzÑ%”i«=R$Š·Ÿ¡còl.¼Œ¤xå­Ï¼¾bœ!nÂІ§‡Æz„’‹íR¸ÕV2ðëBÓ¤\Ð’PÏŒÈdÙÏ©×ã³Ïùhî"Ù6÷ËÙιâ: oT5ÈöõoÄlž&,¹ŒNŒÊñ—ž{»“)'h^ŽÒN b ¦È*Ý/‰~d%oJn^_ÌÙ÷ëx ŒÊ.% Ѷq~³OCò+AL9øNLžêòJ— d†ÃÃWÃ[‡wÁîЬÏx–ŽCNHÍU‹ÅûÅ3 Å2+`$ÙÝ.¡X?õæ0EStÑÞñ/ú•tͰڹ'SªaænYCÙǸS>ÌÈ]æMõã7ÊI–BüœrN¡fM[ßøy>}Sø5®óg¬éè(¤Nôõ}Qe(SÇ{^õÚ>Õ=¤ÉÝ8Ý´Ò|6“íOÖ²eÌ„M:”[’ÚƒG¥.Ýâ],Vˆ8ÓC0Ö[£Í€Ù ­Ý¬ T{¥DE?»?Â<]½a› ¹«fI^ã›T{ÃpE»dZÚÊv²òüw¬õKŠè«Çw‹veÛ:FþhðÑy ²â´×R©P4×!Nk'^C´zJ`šF/ŸDvçD¤kÔ,k/lrëîɆ“‹†* yíÚøNÄK©XrA>ba÷É]‰×4•³5õ€ùc˜É•ÚBðØbWKÊmZ|–¦¹Lúá“èRIîϰ»|›(ôÃÔr¢LÞ?FÄÓÑM·kE8ÀÊÞŽR¯Lã²}ÉÉ%Юܝú7ãLÿŒêDæÒ4þÐxRß“&l†[¬šW™HÑÇh=¥®ü,69¯?9%ç»ÛRýÃHŸË‹v¼tÂhsÈÀ,‘ÿÐJ·)ÁŽ…œ+ÍS?è@©:ËJp ¯äÜ”<oL¼,'MUWZ^ÃÏ¼ÛØöðz¢¥9ßmg…Ï5Hñ€µ±y.Ê¥ÚóY† )Œ¯¤·Àzèû:èGYa»,ªLÖ´¨#É9ž€Ct+\+‹¶%ÝŸЊüd§—AhȦJkÓÞ©Ý'd%?¿1J þé‹‚h(4 ž¤û}0ÖØÒ ¤y&ïJ3Dô—­)L}²ô §)œEdMˆ¨* Ú)9 þMu´ ž¨t([ÚBiõdÖÁ:~°Ë —ø9=‚ 싾Œ~öÍžö}È2Û¦+üMûbmÅM$Òö;újIÿÛ?6´m˜&¢ZãGu–Ñǯ¶Ó£ï=¢×xtÚ¥ì Á"ô=Ærƒyèþa©gÛaG–®ÎE䘖£2i8ÝTª†”=Ò]Õ4ª¶Ê&b…Üï6$pB Õy.׺ßCG/ì[jÍ þD–€Ù}á)6#Â3Q™``ðrÈ8¹ƒÆjr[]Ö¸Z2ÕÍ" ,ÑX«?Ë ½‚†ž ƒ¤艕ó¾äã,5¿=©ë®VôìfM·(÷5øm7W·ñ®GþólVçGÆãw›­‚72³ýô Ï2 yy^.Uº7¯—´ƒÎ 䢣Qv厫0c{<÷NÌßì__¨«'-æFº[öüðųœÔ’»¤nkŽ·6Œ q½º9Õ%ã£^iÐjr;ÿ-s˜è†ñ£“”n¬W¢’4gèM™ ˆ¦h•I@bQÊ`ËšM¬îÔÃ]ä›ØÔøZÁ†äÕ¬xÖ¢f”FÄg¬ÆüÈÀØ3_:áúâ?AEhY¬S=¼AT¨cª7Uì tªž2–¡ÿœ¿ ë:Æ®P¿ÝÆO„ý"SIØSN¹ÒµäLÄ´Ñܾ͢}ðJšUOl3l!- ×@ Àmvø‡ ý5:‰5Ð'6-‹­RäiDèÑ‘Xç'ª8 ðñ”ůÇÏÍv/Ê VPêì/A„%>âé(|Eº6 ¦wÎÖkžkŽ1{<¶¬LïBÑ”Žuç6Ý ¨Þ9æð¬ VÜ s½Ú¶$ųXyóƒëk^ïÚ\Ž Ú“L0±B9éÁÒèÙEÛöš4ÜÁ¿:.ÍzE5Ó_Ðì­œãzæž³à†;ï2›¬u“9õù€@NHE½O~ëƒ0D¸0Öôw&ã ‰¯™¡N/['œ!^fƒœÑiÀdšvoÉÄ.ÿàzSëÌò­í/j¯¹qPxnjܨ6ÕéAȵ¡-N:åˆv\­Fý!ï;ÛLXư<<:íˆÌ–„¦îbÛþÝËaDõ~"2é%sð2 ¦A+çȼOåÕµ5ŸåÀh´­6’º«á^DëÊ>¾­+N]Gœç¥¯ÉD` ešNG½$Ä©êÑ2öyD-JŽ’†k›;=²]ŸÀP)ÄpÚn0ïÉäu¨§ÄÊÝ·Š†²€øØ^ÚÔ§@]¿+·žÉK)T=>˜¤ÁòŽ÷0ÝM. ¸ O„`ٸε¹UÚyøPÆ»°ƒXg²u½û/ÇVŒ±t¿ÝDu¯h*É¢Æ}:™À'U¡Û‘,Ô}ÂEÿÛR*—:ÁåÛC‚m…ç×”ÞG­OnÒ ×$zq&j$R$˜êß*ÚƒÍk|ª¿¨*•=yýîNá…5¶4…Ø—€ÐTÔ ¾DÔR… 3‘å3W¸ÿÙ*™2:wjÒ¿ÅèÞN–ñJG‰A\ »†”NO4åðfˆgSýû Qþa„è^QuBfó‡h­‘«CS–¹kwîð—âp?=hC£4yÑTÕpOç*ÔÝfõ¼ðöâá‘×9{h\/J—T¶×ýku*òÚ7ðhÆ$3¦‰ÿ‹N6“ˆS_âäôGBŒaºISóùûc’ƒQKU ½ oP ŽÇD½ˆå2ÊDŠWñ[Ëœ>˜éóQ«Ï«VM»GÖýp3n5šÌÙº›ýÛbQ.åŸ×6¶o‹•+#fŸlÿá ôxq€ Ki˜eÚ§ËVPú¾ãâv4‡D´ñ6¡Ã­y•%ÇñJößU:ö•?è­bSw])äbÔž‚pcŠÑ_ãÔµÉ-ÞOÒê$F£QÜÛ~Ì‚J¾[iæþ2¥„ÞGÞùzõúå:Ý«ÚÒNÊ|yÌ¢Ø*¤ Rëe+‘#_ Âo°œÎɱ$ëÜùM€ß¨¢ƒ-|ö¥8¾ÚRLö—3.ø¶„‰¡ªôÍÍœõÚ’Ã/HÐûdÂϳϤù ía ‚﹚º.¾nÖ×ÖcsŒ€<ì­ÞSÈßÖ Õ$Sð“D0!û¨g…'‡'Â4¤íÖÛã³»´b¤—ˆw±kv#ªceÄ(þkK.îêîÚÖ~I¬iŒ,ðàÙÖq+/¸´PæZt0š0^BµXо¤Ã¼[uéxh½Ö—QðÇŠÛŠ·È”I0¡zØÆÞ'ûà2ÏGS{ù?†ø!T¾ÂEi0ª¦úïižŒÓP|cšÎÖœŽ=8~¡VÑ’Lr[7»·äçö¼f½õ =^P¢gžÎè^]¬Wò¸1£xá*Øûû¦Ö6é²ê(^æ ÚMwô=¼Õx2«æ·¡e† dË ÆiÚéx—žÿƒ¢l)}ùGåÈ`‘7­F„õü:óýç[ÚšÏ=½&9‘¬m|ê]·p`B»ØsÐ1îO £¢k8#fçi€{MŠ@–u¨v'¡åØE­].Á¤ó{£Yª"|C—ðèAŠ“µ‡ªZâ+žÖq|(/ª«˜— ¤\Ÿ_ 1ÞF¿óåé’·cRµliµ‹¶&*Ò„d„§Q—ë%ÈÞÖgÀ.PyXPÄÅÎÃhJ Ë]¡ oP»n§·˜îÿö×ož º¨nm"–sÖ²Q7ÅvÍ£(BµÙ&ÚºÕàJç[6…S(™´n°º¨èŠ §"ܦÕȉ(¬Óúò·Áƒ0Ž§Ã»ÁŒm±Ýb΄«>šÏµ òÖ­ã5È49%Î'/Ž„-–z)…‹|1¤èg¡(ËÂèÕ+-ºò÷® _Úû½Õèfehƒ™ÝÁ­æ¦^Ь8fª3EËùÐpw–ûë1û iyü@KLz<è«{ù øçÔ­Ÿ˜¥gЩРŒ.›š¡óÉzžÛaA&dž’¯ËEÛS¶¸1ò}‰ÅìÊ·7R"ƒ;¹î_%L®Mæ(³}_ÿ»Z@§‡ÝøÖXן™ñ~ºjúvvã“Û6ª½nÁ{PwdÞ€Ù½&/6ssÒ¼?Ü[´Wñö`~ìÊm7!¿D« X¡*­áKÿ¸ê:Z-šß`¥ Ä<(õe4Ï—Ë~2wÑ3ˆQ|͈a_ü›×å94 Î 7ì)$ºJI„‰TH•±»¹Ù¼‘‰è^ÈLËÀ% àöJ‚÷/+±?w¬}äê•Üœ†6ÙB“o b?x7U”!ÚSaÄ׆’Œ! 7i£¹t:/aÇ ‰˜p-kàpfsB Oó gAbž°ƒŠý§NÓÌ‘ÁÌÄëf±Ý§öÇíxÏT†@ËU2^ ‚Øè±äàoãé,G:˜8ª;»Öô‚]Bݧ›ŒÆRäK)À"!Ÿd‚¶WxY­’ †Ý©ôµŸþ‹gª¤ ¸qXz]#¨C¦ŽV6#Ú ømÁXŒˆÄfÁèL¹-Xså×WeBªcäÇȯ |£pŒÞôu®Š€L¿¦êíú¡«åD†«¶1£.ùFµ&ÿ­#5 ÉvÌ*š Öë–*ÅObÖÊs âIÐTu ýjÝzÐ CkÀ `©wsX…7v8¨2ÃAw¬QùH­xäwˆ9¯¨ÇcÎŽc8¥£«!EïRzÆC&´»É¨½Åù Eæv¨Ž½ÒŒùi«Å/=Ç`jpH_‡Š»\8ÿ+yÏzêe™Z(A쬵'k2YóÜ„îå?Ï1jªú,"NÊÒ‚¼ äè옺N¼èËŒAfGeÍ!|ã¯%WF%¸ÆQJ †Æ¤ö ›´ëMU–å‚BÐÍX%ƒ+©m,ôÍx×QñÓY»œL£;иHÏc—E®tM¢?ÓScP³Tg@-å49­M?R Š1z®pnà“èÛÀÊ ï®›ÍX‘ƒbü6à®ô†ÊÂÍ”Ï}õ–¼ å[+­Y—wc·Á}XÉ!íTfœ”j‘°.Ÿ#²à2ñ,K)¡ìÓ£¾«`W"„“nJ$#ÛËŽç¨ÔÌÍàW…œ•@Ra‘ÖXÄÓ¶éºY§¼gä'ýko|&§6p7sdø"ýk ìú¼žÅ ’ ºÃºÛm >ƒäº@Uñ+u *°DÙuU§!\¯^å­"C‚W7!¼Zºç¸Ø.Õ9¨¯ç|VàvAkV–Ú¨ ÒŠ$çŸæ§-³ñJi^Ð/E –¿Skñ¹ç( ôž’Ó•WÒÿ#¬ÔK mˆKá5"´ôO[5ï»»®H©…ðnL2“\(­Õ½1Ú=ÓR¶@ÜwœG}ÃqB²CìøáNQ¦ê{ßiÇû †È—vQvY»owõµIw¾´aç 2êP6¦¿Ryx­Æë‰ïº»\Yð”ìïL“dÉÐ\²±ÁáÖ¼MwáÂÐWV2™U@ö;ÒÖzu]…þDLÝ0¦eþá»aáW8¿þÇï\îbwˆg‹üNf)i¸Ø²IEõjZŽ:Ï¢íC°/dÃBÂa«8ÚZ¹'$££žUÔ0Þ¾5íIlòÀ†51欂lw:¥zà߆ßcrÊ:9Ž}vâ7:€sÂù OÂ.B[ø(H¼ÝŒ‹ ý@µzJnôŠà!ºŽùHwd„ó“w„J6l2ÖÛZâõexfò›…5T  qCz]²! ÒÚwAšh’K`Y7f_wþ_4_]c›?jN×JN CÐ[®óS¾´1Ê;…á²Í4“©ÔycÿÍùÕ¤K áº`lÄV¥¬±pÞ–P¦!ŸmQWȬŒ‚ŒwelÌçd¯çõ,›¿Z©²Ë÷Nû¥U*þ«¦ ‚Etw¥ §%¶ìe“Ï÷­Ûùʨº¥ƒû$¢Öi¥TÆQúuàG6‡tq±ŠÆn[ ét=¢.œž¤%¼$_|ç¹B‚âØðn«9uvWàÑÝ&‚Y~²)€؆Ec¯oÆö6˜”˜’ù@ 6²Öƒ±CÔù^ŒýÈ¡:-ã œ9ÜŠ¿‰ÙzÀgh´¸ÀÁ¾1¹^aÒIPÍÀ“)g}º+þbŸ¬áľ«E=èX„­öBÅ–-û)ÔßϦ‹èå+}‹'–çmy÷êt'Qð–nÉ ÷d¬›$Û€©— „ø ;«L/¨S"‘†GRpî·$–U{€·eµx‡0êb ¡Ï8•UßXÔ¾Ô°ìY EêºXú!UY1G±ÂÔMLúcõ\G <¨Àá©J•…ш§ª#2œ˜äJ¹W3ë¡ëjÂO*Ôýí¯{, 5ËdTú]¼ØÂ&׌±·~“É=Q´¥z?Š¢¥Þ i!F•MÚåt­Ò›^O¾¥ É|BÌŨé°ÛBfOÝë‰ÖÓx;ëí0 ÓѰ€"•3Á~ÓŠ“]4}ߢûíý êÜ-w²Ó²2¸š"Eu‘%ÎÏ×vXᇊ£ÉD&»Lh˜µqap›øhoík“÷õ(1Z9 §‡;ޝêÏQvìµu2n@voÅ ö2ª´ü~åé~úY+²‘Ø›þw GP …k¿<ä’ùL¸%mŠø2™Òt”¦Iè¢Uˆ™We?Öt* V~«%ˆÂ»²ž\0ðù"+tƒçhíG8_NŠV¼¿:7òÁŠç éc4ó””¾µüDÆÎhJ¥ÒL§4PF·k1õÜ,ìQÃdùEYÁàé¹Fæº0ù–L€“62³]ßA\tÀޏz5yN[l^ç±ló¢»§ê3WÈ<§¬ þ-Ó(âÞê?ÍwÄs©{ÉkvqJ á¾å„”®>íàÓyF»´›etã(™…eŲ¦^ü(—Y°šûŠÊámAÀ-o„¢B¨‰×+Ìû‡eÝšü[W_TlŠî¸W$Ú~Ùh§õ<$0ëäéã/ ¿~^ÞÑõAc½ÀmÞ&•¬9.ù´ûÉ5‚Æc“-ð³–/¨]©)ª%P@º'hg™\noÐÝ-6OìMÞ„"ínNB—X×]Ò'v}˔Šëü€ŒSç}}#ñý1×÷»k.NÉ’»!ÆB—ç›Ø¸± g« ¯6á¿~9¨CrE€B!¿°3Äûä8'XvãÀ1ýܤÖF¶Ÿ2ün{¦iâî~S¬Ul¢¡ +³T¼Rç?ƒ½ òN«=S~t *¾ÍØs\¥pULJ.ý4EìÖo¶4K´Ô¨Y;µ©ËáÇ}Ð4Ÿ½ÂôËÏîÈÊÖmÓÇŠ…»~’£¿´z´1|–{X»[6eÄsº°eçkƒø­$Û©è:7TáD=ô=ÏâÕøxP[7Å#¤üÊqý[â8 ½«xýµçÉ–¤ŸHè.Æêè³Ã‚ <’ä¦røŸ|€5ÓhVðIÈP’—åKÑÀ¾%É4W-|1Nèœþ¿å†³Ë3í,|Iõ“9?fèœèG[<&JF.«ÈˆB”qí úzsõ·Ü,¶×ìÕW6q}'dkß«î1«†ùùÌ‘ˆÊó½­žLCŸ/ªÙáÛ÷aP^§¥F‹¹±“öÀ4nh©¾,†MìœqswLH·˜Š­Wƒ¾Kß ´uË®.¯l%¶—| \Ò1Æç+Mîò%5‹TçýjœÃ³Èw§‹7Ñ{ÀÀáM·ríñcmÄ+[1^æBä–g);Z4¹¸˜{" [seòt¥zbxvwüǰ" kv`ÏÎÒ˜5Ÿ²»´—/⥶`&rµIßVa{üxëÒ±¯Óè{ïÙUùÃŒ èq7 xîT³uµ‚Ïõú²?¤ÔÊÙ¹È蛽Z§YÇàT#OD8‚ѳÔ¼ŸKÐîæóµt+ëïtí­'ßu;ÓÁd¸‘•JÄl¿îíwiÿžÎTÖ ­þ;·Ücƒ=+ÇAÜ®–Â_7L1©Kô{;ä唹±.’R¾Xr×|V*œ¯gß PÖuüÒlÿ «›MÕµyÓ–j¨µO™kè´à# ë:D“Žíˆ;ʸ‹ J€¢†ß[ô1ËÕ:î5ü>zëKøŸÅ-Ä^ÆÐe±PUÅØ{Ää]6 NøØX>*‰L¨~¨é\+S¿!"ÛÐÒµ5í”@o½¢kdF²‹®X‡-‚‘§ã^0 ]iìºÈ5¥ê‘sùuö mÄÑR1!§ï­ÌãÚy™6sVŒ–Ý¡2bºÿ!î8>Iq¯MÌi0üÝ—MïÀ¦›AJ5-ê™%våFGІ×Y˜â»ò¥ÆÉ?ÉÁØ€HBÆxË ÎÚí^;Í„ã xz¡AñÊNlˆY²ÁZ€~ëŠ^ë?YgŒz L˜0§£™zp?¯®û)CšÐÓÍçØUv¼ÅÜåÍ×¶ÒɆèX¸\ç¿ Ÿxš/WSät½û´%×7æ)…Þ(vȦ'¨Ü©DU[à¢óª9–€}Ë8–ÿ"«ªeZNÆÔû»¤Vœ:å²GÑ…U°"ܽcã„á©0C¬w<­m™ÁC >K3G>È“1¬q\Bžœ×Œ*‰ ’mt6>Œ4i˜di )ˆÙ°qbªAÉáäÊ¿Ä|wŠÃÓ(·Rˆ“5—YuYÚï9vŒ&§cù!CŒš+Œ®þ¥MôÌÈÌ ñëùB® `HŽèÅE­¸ ½bt±l ˜„ÊÛ§ÂWßy¦¯‹âŽ  iÖùbêÛeÚD‚îƒj{Q\E¬¥ ¼øN{y44™M4Y²KöyD[×LŸÝÕò¿}Ï”âaÞÌ"Âü¡¿£(ö]Zaîá[LiDñ­—©‰ë˜]xÈÓ+ÀÛ«.äÔ™Â3Û ÷q[ÌÙE´¨^Âë–‡wùqì©Çê'yLÁÇôa“ùÒ šK7"+…%mâI€œN‹o_pÿnÿZÜéˆU{–!Œ_6¡c… kÛ·µ™&ð,õ¸æ¥®^_îÙ™j½_ß^Ÿá&6’P• Óòê…»ùnÎ(Ùv°½bÜ£„VUˆQ»³³Z¼ðNdy‰C¡Ø:â_™"„,‡šÒ)³´É`¢ ô”+—¤Ù.5c^ÓBfÉ0?UœÜ²¿Þ†Ü U²CÌB°ù8‚dïõ?tzÿñ‰„¸ˆE½÷¹,-“[+ÙÐþø,óIA}O$XÅ/o›Ëoú§ò¼ü4Þ² ™Ôý˪ˆvùÝ“TkÛßÇ”¿u«;*S-bi2cU4XKНÇ=Z~p¦HZ·ƒÇ8Ä«ržF''Ä!X'ÔœjÑj÷&:ÀÞ.°}(Ñë~8 .A?:Ç4,3WÂ+y÷¨!¹–kGÑüìJª_ÚÙÏíõWŸ(('M2­Š°>´é™Ý¦Œ I45àÙlNaLœˆœ¸¯ª7Ôô¥¸…=0¾”¬'âRv«+õͮˌš4xfXl&}þXÞèJ¨¶îCØä œOŸUäÒ''q`Œù”Ak«D@z1¾­l#¬R\è'•fzV±â89Bw,wùP¯ë)Ç,åàé%üô#Ú´œ8»ÐÔkt#JŸp6þaü¨™ßÕój3Ç„¶¬/™ ‰ï¶o̳À\O=…ˆ§‰«^‡=Q1*®*¢§OHö¢ÑîíAeVž(½õMpÿ.¤¦)ÚL½øþư½ŽŒ½þL,Úœ‰þV…GʳówDn<Ž>sp ½¸¯wÜ:óØ`ɵmpB•²¶rö=^¦r[§"–jDxÞ02ÕÄžÄ5â^[Ý?Ð5‘G±ö-KÞÁ(¨4ÓQ™«“€ÅˆÕht¤Ì—jŠXöç,Äó^Î t÷V{$6(ÛF(¶_·ˆ4[(™YÁ=À&æÞÛ9x õ]UBêv%’cŸÈM;gx0·0ÖË#e]é»]G[à 9üwgµæµÐD›ó¹ä„¥rMêD•£,Jëo^ÉH§¼@0Ç[q¾k9Q3õ×ÕÜ®"œç5Öñµ9úЮºÓ»)F•Tâ‘Ï–^G,à8rË ­“d~»3{O¸/¿%`%Ÿ¨Þ÷½˜ëYÔžkû^L~G.ôðÚåÿq*øÝÅíM†ºXð à ¡&Ÿ®ËàÝÔ4˜˜>6šˆªöo -o/ºøWÖ3¸ÞwmO( Ž ÏBÇ_…Ð>¡œí©Àµ_* ñkr}Œxaß4ëÿÜ)h ?RäÊ¿W’e ŒOä sÒ‰ˆ—íYÔÆ‡‹)$ò ~‰{†™îþ…ê5utôtd‡µ!Èè/×çiWŠ\Úê–GNÌ: )¹–¡±Ü•NšæxB“aAflŒC›n€ÐT¬’©õH·`{ ˜ 䆎Î$ØKž¥ “Hù³sT)l«pïáŸ`^²g×âÜ) ø[S['8!‰1ŒˆgØ J^=8õÚ‡´HÍ@÷¾–ÆøÝ,…Ì jC³;ܯi¦`úýÐÑs*ÖÐŽv,ॠïeÊ4øJ˜¼ÞJ# ¯@Õ0:Ÿ÷eº1 ¯´¸ëWuS+‡h½× qçäÂXYÇeƉ²¼îÀõº((w¿øž›ÆOÞCk+‡pS„âD(ˆ\+yŒÎ\MúWŸÃwÊ âv6`Ó„šûQ¬¹ 颭„ƒî¯@Ÿã„'¿øOò(`üØüFŠöìw¶AŸ¡íªík«BÌ ñÄ Þ”sd xÆO'‘¨4›å9Š2ßf$úƒ»A7í!²á¸ÑLó!¢ ¬ ‡îîó£Nzó¡¥v³½â0–¦1EØôÆ«0óø#:R–‚ÿÆ]¾‹&4†v=‘ (2~¥k™ìWe"Û“º)¨ýÑ ÂБáOÄHxfÞØ9Å©»ø±ÆÀŒãwù«aÿ-å“7í¥·„v5΢>+WÏ;¤ÔیԱ2ðM7ð-7¼Ï,ç.Ëf3lð}ÝäääÍsh«z ;eŒQ’-…÷²ÊRQŒ¥þ…qéc=ôÞ„¦¬xëXkU(²ˆúM4ι‡BXK)/Șw“[ƒæ»A…WÔ9Þ®ö’€™d¨äq·€¥KmÏwZð&Ù¶½— <3-ر͗©Ì’£„ö ¨¡hcó;ÉìåwT” M989æ*¾Ê6[Ò¥%ʸxkÞ/ÌÆ‹MóyÌ•«!^Ó¶Ûq±V½IN’«2¸0 «“’Îz w%ÛѱTܼg¼:ï Ýà ö|¡Ÿ·;X{H²$ËU¯Ë²Y¥L~úH'(uòm¿œgÐû0Ú’¸·w†0ϯa23ømh¡onþ3„±5Tv¢>ít¼n"‚fvmh>†¼³²o½4‘ѹy™¼µ[B™Øàð‹düEcÍuýT':3ºÏW/oNjôŽÙpWÄ¿Œ…–ʘZAO»JOáV8Èúan˜c¼>D)j î™õ<` JmêØD<†‰?HÒ å£îõtÍnIiÔš¸(üá›2 'zÇFßä¹>&Cœ·°!§îÉéU’ûÜœ!ã^ø½;ìIÝ?QAÃ} \¬ÄcÖší6Âû–÷?+Sòë_µáÛÆ…Ò;}¼ÿ€‚ƒ¾Ž“6Ä•äQîKÈûàD·2…ÅR ÓIH½€¯gµNµ¡Í€«³´qú§âÀ±^Û\‡Ñd{°h5mM®À܂֨q «¿B\¨è³Ôa}ùßtO©S‡BÆWËʃêEœWëVøe+]¢šå÷2ûŸa/(±ao‹ÕÀæÀº‹­*€2Úþ%”€·ÀîÁÖãÏp™k¨K Íðùä5¸k¿ßŸ€°Z“Ï·!bú[4¼­Àã_¨ kÚlgrƒ¹™z•’RèsFVlæïSד¿>Ç®ÿÉÌÿóåÞõò»Äú bb./y¿ (·¥¸ß™ëïk>¹ñY>kÇáã|Ä¢ZWǤp(9¶Šº ^Àµ’¨cþOx†ªlÜÞIÐ žhŒQï÷oO›ÚéQëjm®“ –ÅïM/£øõ-—Ø1ÅgyäˆÄòI uÄ©*T‚Ô¹b,q/]¦¬1ŸÌ£~±³@Mne$S’:Jµ30nRDx›«áÊK{;õ2ám§Ù`îʱ½S+ÏB*¢r`e—“œU*»D"Fæ4ù P:g;œðÿ±ÓíF·Ä§á*n—÷Õµe*jºÚfǬšÃÒ«‹ZÏe6¨P,2s…iÏL~“Fðsï{+´õ»CÎ]4 „V-~lðØQã«:Õë3$j‘J›Ö:ÍR•y”’Dùª•‚Θ›ªÆÝeº‰¯!Œ8@ЖlE:[G­Ð>L'¡IÌGœyÊ€â¼ÍÄìú¿²uÕ$¢Jñ¾?²LBáWwüûÍvúù6ëpYo!âЄñ¬ÆöŠ»’S„Ý0$W½u3 Näà'´êÖZ1°Ìp>ׇT] ^õqÍ­{(?솽@bÉK7sÍ Y"í”JÖ9•”&“}¢¨8ý )aj¢í¿Ù¼¯-ݤ=\{Qã¸Rpz—ÃiÇ™¨^]®”ÇÉt‡_}<^ʪDR»Ö½Ha’|Œeí«ºm±š\6)ùÂe±üѨÍdj˜ª:Ü"ìÑŽDOëdÚm4¨·h®¦W2X°»A@eÇH ÆÕÅ¢±‚£àmÿôõiB‘ú¬ssš.¸Ì½6öâ?Ø>Ð÷14e`Œ¾$ ý¨huZ«ÏàÇ=ª‡3û@.vÑé¹f;v©1rØÐ€X<ý“ÄZ¯!ŽúI8îÛN8tÊhè$ö‰Wj}¼àCà™zzQ¥ZðXÂÆñNRíÖa¬Uêä]-ÜڷƲЩ$aÎNÁ¨ÚïÌqÙÉY®Îø‘IL*hŽySƒKUÜñ”ìÌ‚.â¾fH>’§ú=á¶V#½àKn›\Åv`xšDÀªš‚;»¼û44Úeô¾n¥n·‡3k¸KýÍA„Ýv`V‘2m·T[õF‰d©ôÀ³Ñر1ß-×ÀA”îÓµB^Íuò&h*X{Æ:âØ|Þ<¸vµg†Y5{óÖýX@×~´$ð-ñù¢,20WˆDv:þ²{|ŽG­áÜD_CIüu! ó¾æ-ØÄ-¾ö¢ÞÏOi©\ä8W5ç_у›t„”uŽ…uQ›ö^ˆ pjÚÙâ¡(èvh>æ—Õx¥8gXã ÏÿV¡ÙÜ™ì{^árknãÕ²;IÎ…¢Xü›°G=ÿ%èæÏÔföñöÐ,—žsÖ-«d¯©¢šÛnžÉŽÉªxecÑK66Ðà0¦~SŠIÜu 3å9_5ä*`XÚJ>\Æç:JCéÚÙÀ£Ê~9{=Ì9ùT€jC<’|™D‰[§@¨’Á« yJ»vÄ ‚¼‘£{Ús†Ôµî—ÃBÛüšGé4éÚöáÃoÓoáËÌ-$1g’Öd`)|mÅ2žbµƒí½á®Þ0ó¾á *À—eÄiiMs(¸Õ“¿×JþÜ— )KNq<ˆUuÑ’F?‚s”1ŒÒ¢ÿ#C_®_S¦j•lÂmGël¶° ì4jy4,üA$Hy¤1/Í‹±.ï"„<Þ<ðªé<†±Â>_||"@ÑÄLcè’‘.0žVð›Â¹àÛÝɇþ"7B÷ Žp§=ŸAµÊ[‡ìö•ý` ö,˜7‰€†”jÙ·à&\£ûåÌO¬n÷Ó’$H õd¡Æ³ŽéŒ#(¸n{ŠfîTÙ6ÓlwË6ùS´­‘~õ°Yê0:3IYº“#:ß©5ÖÌ× úݶå$ºÊHâÄ#VLÝsч£l®^â°­ãúKK´…²âQˆµT"”6¯Í1|Ý϶½èަ¡Ï“¦¢·—ÛÔ‰ª§ôçå^¥;šö‡£sÖ_Ã7sÕ šìÈUœÕÉ“%D’xÆ0A²á—±¯è8t…é\žÖJB¥Ÿºy8ÈËŽÓïýð½-Ì«ËhØÂÌ«é´çèoF N\ç·ªa Å)©%LK¾Š}Ü@!Ì!©”G¼V¯äò-&»õ;Hý«a¼5!].ü¿^Ì Û«yÉ®<µÓ71/¤FXäD= ‰8ŒîŠž%Dœ–©ñœÌ@Ç‚à‘©Ý§O`d°W­#‰R?ɹi!k¿"$8À (SÊÍ;кA.¢L,;÷·‡Æ,i 5MNB™!‰—&׳l V9Í7eÄ#„‹\ ë  ë,@W"2gä9°ñRa>c£©ÅžÝf~7Õº•‡—PZó&¢pí²å'Éêÿû%2#¯ƒdbÈ-PÌ©m¶ò*½Þž>¦äª1—+îõbÛë¢61NÜ PÕfÚ?XräíI´†€Ál3垬[|º±W;îŠ'|¢–ÙƒÐG‘*Í`r¬Í]·*¿¯Á J³„PÅ%o†dÝ–pñöØÂÁ 7Ú1RÚñØ:w`ÞFà ý­¸4Áp ä4Tã/gÐ(*È%i^°Ž²i¤`]áü]_\[ |)À»ò¾K‚aMìÅŸÑÆä¢ß|$ÏA$úæ]ar9øp.}¢­F&´äôCŒçRðÏÄa&]·ýÀÜ¿ùŒîÜásRA†e”‘€_M'yTÒ¦ü!/»•áÏùGjõý¢ÃØk$Å "ÖœB4ì¾qEÊš–v½Ís #nUIÒ«‘àÔ”Ûà±=èDHÙYš\ËKß×EÏö5 ¨E€QÚØÔP™É's¡ŽAÚ÷¹-æñ˜ï$Î'¤S)Èé5é`!Ôõ))[xÇ£M4LóP󪑎ÀéU7Øù˜î0I>°P;’»¡ÿÒ;Ëþñg¸ïŒÐy“Z:t8æêÝPwšË ø7ööMÖ²a|!nŒ©jƒƒçRéB—û)Äm÷Æü&g0œúÒƒ ܱ¢ù÷Ì—K˜ØÒ•X_а‰N ô0˜Ëó'ÐnÇRÇÖIaÎÐ`°ôýtyXҷ͉ä»F†ÂŒð'²/`V`mÓT×¢Šðbíõ<*:̼Ãg‡‰­i£ÎÕ@µ™OWÛÏ"êb¦\&d:é/Ì-4’˜Xˆ±¾¿ðgÑ›Š(b6"ààÅo)³JVVI-J&'Â庂è¨Y¼™Õî°Ïì ÇX.eµ±Å‹8ÊSvx%Дû‹Ñ92JÉÃÑæ¤ž¤ m @M÷¨ÊÄ>’n.™{nKx˜5Dpaò«åå4…G{ªJ6”"qzD >°´ uB¬\ÛÄwÅE5šTÀî.ü⹜¯àÛ/ mÄɪ{óÓƒõª"|Âmwz Zý‹ðµÃÕam&xA<@O§€@wßš€Î1Øý :)’§ÒQé“ÕHàΧ½RŽ$DNµ—ñ§€«J#ë¡_âNâ+8h5 9ö±Ð+šWB-(¢TúO¨iBpÅ#TÒÏvÓ@´‘Úò…¦Ð½ì£Â ›Dÿºs§˜å-¯§ÐLM=ÇZ"››Ò²“¥—²¾ b€ÖÏKËn¨Qøé4³,§¦Õ¼~+_} WŠ(°›ê`ª˜y¢cUöû­{˜Æó[*Ž¡±‘×LM4~»¤<°PO¥Ë„¼C¿¹’ï@/%ÒÍ ÑÖ7ËXº?ȱ:«iǺ!ߊ}1ÈÙ@tžxó"LÖDµâMßï$(µpbGºñæØòw ªÂ™–0gÐC 忥¬g™ÉdÈ!.ƒgABüù˜¥…IÓË'¼y5bî8'Ëb;¤c‘‹©M€X¾xGPÇòâ±òåÈ#:ý£¥j¥îyÅ[% Ó&ó—¿~Œhxë!‘­Ý«rzÃÿ§žò꧘°ÞæÚã—qX>Ûï\؉07L èÓáe<~µ×’Ë_Öá¬ÛyŠ8 oã6Ý™s‹lñvoø PøýqºQàŠÑþª!’Â{ ðeôè™ñu·¥ áÒlŒÈ ÒV¶Ÿ¥cRžPŽVÔ¼b /ay; tÌ/„ÜåÞü°Êç$ZÌW5¿GOþæ¤ÍIAЀRvóCT ùÝÎ:ð¸&oî†pZVëú·]Þ Ð¨?71¸o“Ž/Üû:YóÉäÓ2ø®‚M9 ßÜwTš@5tKv ðêƒJLR±Uü_ïh›é¬žŽ²~q[bù·®˜‘¡mi²}jW¨ÐͰ‹J‰W¿gîµèHà‚“Ço#no+&TžTô¬o‚9„Õ­.óþl7å2ñ9¸H*AòQ-»2ñO™“H7ÈwQòÙîðÿ)»lbïÒ=Žzëð ÷¿ú=%ñPÈÛ ùò&g@ÿµS‘•t@Q¹ßÀýg‘«fÞ©+Ei ÿ2„Ë÷C™Ã›öŸE¼…‚ߓŵ ƒy»óÿ ÉFÇd›Œ4îøy¡÷væY¡"Ê™ZÆSŒÓ õKHßæéÙÉj(sQŠ©.Mðš'ë² }DMä@ëäß"£JzɸÆë Þ5:çTë¥á-¹àÆÑsåò³^DsŒ¸(~ÚìÑÂ/L€Ãy«å ÉŨ›.¤*ùräqIYÔÄÍð^ýdh'°‘y¹<Õ†tp^ˆè¸c%QfëœqÌ`o©ÏÍË{pÕ#É$ŠcE¯Ù g=F< ·Wœaý{·¯ ’ÌÍÈòŠuìBÉp‘¤Û.®‡Ä\¡RîÁï]à9|µ._WÂlåüRtœ{f§ƒŽ÷ÿ¦¿è(HƒËªàL¿ão±ÔÛe%°þ¿Ý<ÑÑãÁ:L&HÓxe¿§ÏéC XÈupPæX‰=M~œ ÝÆá¡t4µä›aX‚¸eÚXÜÍô‰U ;FøØ×0%¹¸ä¶q­ëÈQ˜ª=tòk=P i”‚7¸§jO¢©Êb#¢Á!>²ƒ-†©ñQ)ò{Þa åfç«u~¸ÓóY×ç|ùäÀ—YgBZ~±{„Jj]JÁo“]Y „;ß%6¥~ÛêÆhˆå€áŽÂg³.%IîF¹¹L&ƒB‹yœÔÓŸõXQ90ôꦧ[çî*;)²—,Ƅߔ 0Àå#šàî»ø+CÏó-$Ë"s§ wé3Ù¹dMbOÛ»(D Æ¥MaaPÅ‹¼ÕeË Ñ'MGî*ˆ?9ÿ|ß Oõ[^yˆñ[øtÐ 2³—3èÚðÅÆ\Šg„ÒÓÌ'O‚Ùéqà¨æób”€–Œ@¦bLjPþQ%¹Æ”nDÝ–1¨&ÿÒ'ÒêfÙ¤e³wæ¤ÈíwØ1 â—5ºâƒpÍäIW™@wÓ((Sr#,B׉Hjncg·få)©Új>÷'ä²,T<¸oW2ûôÖâãšì叨0ßqé„ï¶ëz8¢Ó¾›aªü¿ 9`ØIÚQ ÎuH?ATqòmG¼+gúÂ^£ÄŸv›ÔÛѽ{¾×&`Y¦öDB;Ѽ/ü3–}tð÷øøè@§s¸Û Á æŠSÑùÈóPc €§©U¸oz .>˜yz ©ÏOØKŠ•ûÙŠf‡OÁªí&PºƒèI[}U8®àç|`T¶ Škó ƒmòØ^i6b‚| ìíX@óg‡³ˆ%7PÌ›s£Tž†Ùz!vHJÂaì5’ž9îtmɱ¦ˆ ¬°m¯3µü(]¬ŒÚÓ¿p…¤DôÈ™5öi5¬mÅt@Èw¸ŠÐ°@Ïš‡‡óðļz˦¹xfšå3ŽãM5ætÇ(1›m­.«&æßÎf¹>áˆ\7ÏÌEÑK¼sÍ,šÄS‡TìêY=À—¼áËBÜ’Œ5¢%Žé¥tÂ5zE5Úê="ßZ™|‰Ã±ä“G;öLºÛ_üRKÛddˆ3¢˜²lݧ \{oØ]—BÜ@KeÌÆQ  ,]öO+ê<8§’ ½9íŠFÓ…À‡ ¬™@/PŸ[Ú.|ÉZ•§QwýŽ?;Ü« hÒÕ·jÓÆ'tgwÇz‰à²þðÚ«ÇÌbR¸jzvg—!ð±oÖ>Ò“Ó`rð¹ÚÆÔ­^ Ùþ¸Mœn7vzEÚYÅÆCý 𫲝ñ'L+=%ÊÓý©¸¸{9€#¬÷ 1ÎÓ(+Šâc8’²aÆ+]mïW^.`†J_{Ž5x¥ +–/‹3©ÊWráZuaG›¸O ®v­© ¹ÛÞá~k[RÒ¸“óØ}~—yG³@…H ð ðC}ùÕ>ƒ… oœ Pœêá óUå×jµ '(7—0·ÌÜ«,=G¨¸¨…>ÙVÀkŒ,$eÛíãÐÄlU~_6` Áå¸sÇJ5y *ÈUÝr°{ãr S¬ŽÿX›RˆbH¼Á÷‰[¬“ÞÔ–ðåwsÉ']c¢D§¯BM†=7‡SeL TZ`Œ™ÀÝV{ÝÈ¡–€î¡“瑚ééÅ1V‘#댚‰¬ÕZ×%Í“:hœ£Ì<+*FveZv‘Lƒ&iÚo„ȬîŸðÓ"Ä«f}ÄX"w«Ù€–D”çƒ d(+ÙÓÑ“I|æAò±ÉDÝÞ–¬$DÃ(¶«pÖßÀÅÐq ^€'ÉINh䢯Ògp¿Ïï‚]wäŒzÒ·ÀânCÐÅ3a•7N‘a„Doâ*7åRþØñGþ$¨ 8 ÌwdY©Qt`± ±ŽbïKá¦Ù>¶-³ׯ£,Þ›f£Fæ¦æ0õ,ó«Æø° dzrnÐÿ\µÚ!á>* toÈ$ÌÏ3 ·Q[!»n$ OmB"FMËðo'.S¢Ž"h7jˆÍüÃõOtRËÐ{Ÿa-}‘D[hâÏ<ØÖ–ìc?‘CºiÒ=t IwpW_ ²øQîïÉõòÕæAôXÞbªd@¤ä%Þç„ÙÙ¾×/xÒ÷~h9h¿Æ-jp`ñª˜8K‡@1ºYíÑÏ ÐÉ`©L—Bw/c$|ø4Öñ“&²€ÌgMc‹Ü´v«Qpÿ¤~ŽæÝMv£ÁŒuì·©Ö¢rg(_Ÿ.£M&’Þ2¹ ÓÈÝÉ&Ÿ¨J tz×—ÀD^Iž¨ëÔ‡j›@Ùh±Ú¥Pàsh<«&·Ä‡ÚX­á>ü̽Eß=—dÖÚd`]ÈÇåUìe6Þ1G+lÝ4pñ b³Ñ·] }ŒÒš\D|à?Œ)Ê…hÛé•‹¨Uz¸€û«^8Ø}Ñò•áNØÃÀì mÓ±VöyÑ*«äGšîø¶- Ì‘J:‚EýBœþø\a]¦)ŠüÖRéä¡+¶W”û‚vQ öQ¶7öÖéÐÚQK^…zoà‘ñî%¡ï+ŸCë´`±v»gà…¦ÆZª b¨ *Cl8….øyJt‹Ãù~w>ùý®äou7eçpêL#^ø!·„1£€ÔxìþÊ¢¾ cK¨›·!êÅ>Å£OSÿû ÎÑÆ£ ΢ òÏ6þ·M&sÄͬ©¼”¢ÍP$0mz±^ ÛJ’lD¼8¸î Ǫä?`ò‡J&\¦;w«±|G¤Þøòež ` d¿ú?‰5PŠ”oš#Ì:hO"±u4u ƒ'Û`eN9÷ü+;à-ƒ!øÕ{»fÇø”Bsn¾é逺½ð¯úX¯¸„"ƒôX_’:¿¯‰† MNžPè$æ¾<6æT†cuhVÃè·òkànÝÑh«ZŠš¾—:ãgˆ‡Y¶õ_ÞÞŒãˆBÆmºÂ~t‰.æǨ¤cú‚쇺|OöF|’"F<m`Lg S¸á°û'ò¡{óN|ÅšÚ½‚S^ºT˽û#´ó¯Ð-´R¬§ïˆEõcN5:Ÿš{÷Å Y`&fˆÞc½Ðœ4_ÿt÷PN”þ@þ =ˆéÔl“*Òü"'¹l¯É¾õ»ØÍƒë'߈:3ïnš{’E ò÷DþÛÅ g·|#½ÔÆ|ïÿòÖvÅF9…x- CŸÃ\×12×™šOt>Šë¤X)anoG[ÜÙ`xÝ5ƒo—îœMÚ¤Z«\ú°œt«Oµä£HÿpW̓ëÔrä 2ù„*—^Çaãc <šæ=TRØ¡¡A29À)ëÔŒsŸ,_9i+@¼þc]ýféju£ØPíremxd— ¹átÜzclñ+è#$Ñfñr’¼(^g}¸`ÿ¯â N¾ÅY¡ïüx)$"Ÿ]¸Ø×¿cÞ"fa`x5RŽTFL~m¥v¬ä ä·(pù@Suý€­Q™ïaY`" À‹þxjmŠN+)¹M·eìϸæjrÙ—%Eyxû¡N4j¦kˆºÚ¶Ò¸Œ0–A8©¤P€d…ªÊ¤% [~¸þRdUŸ4húÀõÙÒ†±¾5o"¥ßœå¨ n”ÞãÉ~9=nĬ¥>ö…q÷ç,¯<²®Éd¢ÜØx½Ý4c÷÷Æ §‡7I«mvd‘§â4n xÈQ¤N’KÇM˜Im„™°¡¿R$V¦XOŽ;î‹™¦ÊÛ~ŸP؆ˉä÷!YUÌ—‘^ýŒ9š”Űÿ^âŠê*㨤7'] ±¨DÚ™„ûœXÛ=t sÇX pËæwÞÉÊ׊êÚm¯<~Åœ¾@n71œq‘¶ w¸áá<æùJ{€ÎY6´úŽÜÏj”?] `‘ÆHÙŽÇ—#sæR@ œ–æ+ˆPÏz©Â¸;áÇŽ¿’3Ì…A­øœõóîî§é™¦)S¶A´Xã¼ìuýIëÀRÀx×24ů¶—°8Yd÷tDF9µë'«âwCÛøþN?Κ`<¶«¸9ßÒ+™ê€ßØët¡4ÛÍ èÇÆ&–•>×âQ]w ™2^ㄯ ¢LþÇ@‘x þ^¯ômz¡`¶ÿÔ!ÿ¥Án±‰†»7íJ[1ªñ",XAm=ëâ`vâ#:nUø«íLk ·»Íô]eeÊ¡0£àPåî¿aŽö ºù«x(q™{úü³f­fñ´AjÏW(æ{4Ã#euGQy?c:Ì'êšü-d ˆ_ôv0QÐ üɱÐÈ&¶qöÔ {Å?‡³é|ž\‹É­ƒ†»ún<60w3"ÒtwOœ-õK(ÁelÛ#”uþ5z±¥kúSÍí&V¢+I‚…b@÷t Ô©NÈ+Rvkª²œdåé6`ࣈÄííJ`\N;NÜSCÞVcÛ_çÙ2Eƒ×/YYy/àé…^Ò"ÔaÄdriï&æ&.ÐG“béϸ‰ÒÔ9ð÷úG:r”™Ô¥‚55ï)ÏÃ+Ë`ÐÇ«nJ &{úùh¶#ó™Êÿ¼/l©1üÀ¢ñþ‹«@É·Ì'žÃ´ b ¨¡ˆîy Y#|0ïåΰЄ&®rÞ¯Ž7Âjþ'ßSÛUïYjW<†Ù `@M†8uZôáƒ\šßö,àID±ë~…A×TtdÉß{­./'¦@É]OŒÑØ—+ÆÃ­>y6ü:OÄk@{¥f1]úÑÚä%ÿ÷R& éGÓt èA#¸sÕZ‡Yôn…%þñ[D°NÐD‡÷&)ðlütxÄ Mãx¼2¸çU²è¯?ÆN³Ë€¦êaT}x×ü ÙÐH‘<Š„DiRJæˆËt"‘Ûí}Aˆàwm.1¬¢+¤•îË6â Ëß+ .Ï|¿Sw«ßF2|a:¢zÞkaËp¨ñøÁÚ++²»mðMˆvVÈCænß5ù EZœ&kj›Iš­Ü„¬õ*ƒžûòâó\ÑØ_\©Ì·ˆAºƒ}£ècD“y×6J— rÎE6Ž„È_<Ç׺`uË2Ì Ž$Q¿® t½BY…y<²µ"#`¡s['I8ãjÞåÄÎ1;ûdš!&;YÔÞØõ³¸9ãÅì­dA¾(û- å)ö_ÁÊÒoÖ‘Ô´¨³Ã¦o[tü›Z€‹ W9«i49p_A9Ô'Ÿ2¥\éZú1K§"Ð$@¿¢)Œ‰&é`~«³ÁÔA[Fã8 •Å•N}G`º¦õl^önâ6á ñﺬ§Ud±L¢ë'¤ÍôÆ`AÎÉH¦/ˆ,&Iw–§ÛöÙmcd#¢L»¿yE¾ÌEqx’2Ta†Ù~z’ÀVÁ)(e–Cœ°ûͶ*\Ž…Ô²Žjå©X³öÅóóËiÓŽ¼À„<µsF ¡,šª’Q§†AÈ8ÙáÀðÿé‚iû@” ¥~S]º: Œ D‡¢Q ¹òZûœCŽÛ*y)z s®ì/Ž·ø”¡k~yhu!(Ùʯ*OœVÍ0–hü×YYåçaGK“c¡™ù« â÷ŒWÀùÄc]jů³‡û‹Ú ¸§®$2§û“ÿ4`¡c«)fAKÒáˉ`äVé ¡£cË&`629;›Ì Ù#ªV?"qºý À–")`eØìÍ Î8y&Lª˜°\ÿÔ1“¥&¿z¯¿ÊS\ß·‰« É2‚ºû±—k¶»«‘ë§tˆn4ËSy5$èÄôinµôÂ#먹íHb„·çV¶=X& g5œW¨âê”|‡³¾Q^_-£0Ìô³Ð—¦„ÒÊN–ฮJpˆ¦ŒÃ¿ º°à å–Í`MG°†(fî.§ ñ8­Ï¤ˆ£Û#ú©&ÍhhØã3òJF.ФpfF:“_ $¤ù¥°ÆÞ»\`båb‹óœècÌál7jÐ?.ívfo or Y¹RÐþI:ÑÂᯕÐ=FZ/¦ŠRtXßÝ,:ˆ¢ú¯±:JdÍ©èÊ‘üOpdš¾ØLò0à3ø&WÎdÒà~óþ‚:mg–k1­€OlæCxrE`¼þ²È]”ýìu««î–CÿeÈUûƒÝDÃ{ZOÖ_Ý?^õI‡š` µžæótÃíó“%€3…¶]€wª÷yúÊfºÂÇe‘b€ÿÒþñO®-ˆü-åï &RŒžÇ”Vd^£yoì¤”Š„c5_ŠŽOØMí§V+ð²t…€ìzQß}‚Öb± ºØ¥æVÉ_¡tØ¥“jÆÔ£ÁÛY|MF|‘_á'_Lf_~TùªJTjèL«CaÅ“»é:WÓ5ës¨+ÑØ(¢PÛ/ï÷–jSË­¸›xØI¸‡o½M”$Âè“ÿ”±= Ñ®¦¡ÍMñ³=“ œnáŽÀ>74ùðç’º£Ý¼ýÝuºš–­ÿs÷ÁÇVðd|u í ÎŒˆmà4ÊÄ#)Küìæ}$.Ó¼‰à%xŸ]“>ØMF"hˆÝ æFϹ¨ ¹ê^r¾Ý¯aˆ¦Ox1/tÂÀãš$Nå_ïv;§·k`’Š«ð˜Y»L¯Úõ2>gˤ€3Cî¥Å¾øä¥ËÈàÔµ{€"Åë;b¤pž® v;RÄ:ÎÒAœ:—Êc9„€Îü!K,kPÉ(+Tœê[^sÊ üEƸÓm‰­3Êþø¡–á“^,Ùk3‰²FàmQ³Ñ/U4Yš"RÜÒ^Nk wT?ò“îñdíÃQgâN)´$2Nï_ò^…ϳËÁöƒŽÎñ5 DŠ Ò‚We×(+”Rü­k˜Á4O¯Unó\„×2?oǹ¶ÛÀ)ô²ßœúB'þ åZó*«XÊj%:*„€¦·îœ˜xWU"èU8lßÅgjÔ]…ºë„rWSÌhH]Šbƒ“«cÁ*ñæë¿“vðLÙ`nu*þýÚ;'µ².g‰8|ã3„Û’¤Õ\r«Hæ#úù[>“ó²wÎèÿ(ߌ³4ѤËäl `²`‰×)Ö²ƒÕ’ýúl™hŠ“ûõ×BÈŠœÐCByÎv´ãºnDŒË®ü@pÃ' 4BJUO«ªŠÕú$©B}yh`ÔÂóÌ>ÁÄô¸™x9úC·œ¹4bˆ±â¼?Ä3V–ç&ÜœŠ÷3e6·?Fݯª"JÀûøy8{Räõw½ÕhÂ3ú÷‘qÈuf#Ô;„Ù`ûB‰ÊN²¶ÀŸ½M†>ãâ¥Ø´‹nYßg‹T?Aò0 Д ›Ø…YeÍZ[Doìí¥›J ~t3D/‚gGOºI,‹»êß_¶õs¾ƒú@‰^ø'|ùVÆ ;–P©{å‹™éðq]ª§mo ío6jVöÎIç•ß`ÕÓ(ð\Ó1ÆÊJ]ûioR¾h%2Z±:ùë?ƒÒùøY»8ðø_†´çè ϶û ‰Y/U<–òWUÈ~A‡“™´ï#Þ¹ï™}Ibøw`˜t’¦Kú2ùëM@Fîuå:‚¼"pÚú¡î¾£F‡©&ú0ÂìÊýªË”3AŒ*5 œ—˜5rô¦_Õ,zÁ—fØï>§”Ë)¯R•×´3&ÐJù⪡Ú8€¶â¶éqšÔ•JÓÁ•qsrуên¶ñóÅW'X[‰ H|A’(K±¥¹•ΑÃì£{]LV9–&Zâ#J`÷#×ÿb¨g£#\í ÎÒ¸²7x4š]6þ¥5ÿMØãõúÝ")Ú–ÊjklÆYÚ±lº9@‚XHº8½™g‰ßÔ*®ÞŠhÆË=—x»OObïÐcõ®¡ã[·sÅ60ýNQá%rØmDIÒD«|_ÎÙ4òE½ÃñÑç9Îq}à 剡% ú㨔,Œf+‘F°é£¦‰Â¨FâïøÞä$¤7h¶–6.N.O}Äi~¯yûUoÇÌô¢£x~QX|º+“$„‡ÞvI£ÝÙµ´rûî²]7ãNcæ ³ ö§ô° „qŠ_\[UÆG²ƒ¡Ny°™mØ9oN{%~¨9='ôÿö"XIÄ쀽²_Ïg ês\´bš3„ØC)ž‚7¥lÆ™ôg@³05¹âÆŸPº{IÁ¶™û· os`t€"µ¥í=8«ó"D¼sbmv}¶7Mé2éýžÿF d õÏê!{¥ ˆy‚!µ´Mš¶Uh*u ÈA˜ÉÙ¸zf»N9˜ç ^ èÀªþ$iîÒ®ÏPdÙ™âfœ>?[«9òŠt¬3_þªH…¨ßñœ0oœ¡dK˜ÆÎÿ¼´æ¸=ž˜ƒd­ØÂG 'B ø_ß9ÍÿvU3YUžöÏbR;‚t¨¸¿+üÀ`è‘è7TºìN§Ê:?ýô5@Np*¼ßy”#Á¬ Îþk#b[u˸±@ôÿi‘Þ5¯_‘©à–ñcˆ\ïÒn~ârA+ÇŒÎGã'£¼Ë©à^¬qwì[ÔNItÂì"е¿ÜnHø`Æ{ãõpèÊCÎç†x´‰b`3‡†X\iÝ`±¦<¸Ì±(ˆºÑtöÂŽ% ªŒtBGaãТ%s0Ïb!o‹dcmm= ‘Gª0›aÚ9]Q?*zY3ÍSÖ:¼N|ÅÓï¨àÙuÕZŸñ-žÄúy^Àrª‹ê#Uó†s¨‘?>U(àÙŸc°†š,`j¶€ydâsîn$Z‰U@ ]ðŸ*¥õÕ¸£ÌÒP2ó~z§Ä­eBÛ[?‰æoÐ/ã²?:ÇEª»v0lvû~E^4‰)Æp«=ߘzwñD•&‚ë(j€æ Ì™ææÿöH‰Ây/I[\<Ò ¾™V!k^¶ÑðX˜®µ#^ùmÙ%5Cœ›†Š!-lœr¤ÈˆÝvDïŸåÆj– 0Ï âñçà~cqrŒ…B£$Üκw¬6FÚ´Uz|¸(¡‹˜² úzYމ´©ô&0‰xE£qï;=K€ÓåãA²Nù³qÝd¹þ1äÚ õ¸ÃŠÔ £ßFIæòwñ‘èmbËìqNÍ7ñØödaôs¾-Q~jßC–ûèW†÷¯Ï68<ÿ¿Í›ÉŽB­,ù·ou\¯€ÈB¦kﲉ̸5ÂF)d½hU„r»ƒ|9·u‰'fØêAš¬þýy²ãQÕpˆ˜q¿Cßu…Ej"| ¾×›Qú¢+kB1?9‰å˜®ry`ô ò×Ý ¤è ´ìç³u2}]„MÓp<Ñš£i·VEâA\s±Û¤ËHkTg¶~F.טOÖò8aÞö ´Œ_š^õd:ûuË7¯È+…ƒn³Ðô¹ ¢Ø‘Ö»5‚!„áriÍxHŠüÉ(õêµ5óös­Jo3ÕyŠ‚íAHŠ_zéÈî$qzƒMqá'! m^ÜT#¬wZK´\Bò¼£ò'þöN¸¦ü“aêÛÜìÚêß\bÅõÑ@5Ë>¨¸lnè€ÿ®+dvsÚ<œÇ7*NhpÌϵš Òì¾×¦%¾mœ`y-¥ª5¼‹[›4d®«¬ÈbÍIïÿ÷º‚_ïGc"_Éë%µS&ñ ”jZÓ¥œlÙ¥:åMH9E­9¦7‹òâLçæð×›×ð;¾¸dwÁ7wL•Ýòžñln€Þæ±ÿ!*=Sd#$àA? uÚçžmÎo1ÍfÛXa¯Þ>§ùír6F·!ˆm,Ôbj.£‘A¾¦ dÁ£èvZ[â².‚qíùFIa”Ññíty!/38¹­=Ó|Ä©É+NT5$À(8ãÓi¶ãÚÒêUwE½€SîOÊðáò36‹gU‡®oýW‰MÍÛõúŽ×] â¶s›yî/¼ÚäÆlù(¸Á“Í%ÍUÂW ¦äBjeÌ Ç×Éò¸#qP} ,j·Ç?:ZwÃt褎ŸÑl5S$ æ¢/¾€G ø(F³è_…/Šÿ§ì}{”£|¶]º—Y5ÉŒ¯mKt$¥ÖÍrŸÜ>”ÝìMqÀ@¾EÖ×™{ŠÏÕd2®øâØ¡SªEþ­SPW÷Ý@ôÈ…[”®ƒæ'¼§À  !;øï3hRÁX¸cFÌ·WÓžÔ<}ùg’ýäÕùZÁ)†Ö½ùÃqâT|IQ¿/[Òo½!½n'ÊìÙ1ùþrÔÃp ?36†©ÙØ;çÇ|Á §Ñ{`]Êíó9[´V¯¾ÛgÞÔ±C<ŽĦºÞ8eÙ‹#Å:œ®J,¨ µ‡VZ˜V㢀?337ïXnõ®f1*ñ¸;´Æ¬N0Ô¢O¥¯·ç錾å4{SÝí=¶Ù&HüÍÊŠ¾W[Txå}9n8‹lˆñêzƒ 3B¤¤&EåCahV‰”jˆ¤s®ñ6Šr}úqðÔtPXP¢øXwlÏ—¤Âšc ÊÅÔØúK' Õ¾.~Rjº !/¿]ûÉ?¾ÄP$ôWá·ù³½z@Š!Uï¼ù¸0ëé »ÜG@{ßÞy.Á\`Ñ¡õÓ%& „‚sñŽt• (iÙ(@ä~“A˜ÌD„ò‰å¾·ì®¥ý]g[aa¬LæèápFÈK«%5g.±ì%TI…ç±üDüŸKÝ»K„ÝÕ&†ý!÷#§’D„Rê¾RÏ£PÛ R´Ý\¥óøžŸMõ뜫;ð¦yÔíËíO¦WðL½°u©‰â³ï܉”Ȫ]¦c«êîû¬ò}_0ô·àº9€>+\¨œDÑÌ›ˆï¹è¤s³‘ÑóÜ#U3ò7É6õ`­<\œýpûTžå×¶U.­‘ïwlÂ5ƺY;iIJü?Ø¡9Ž‹t6ÂÚöäé×”*ˆpÎ% °Ž€$Ö¬ Ó%ºÀÊÖužxÀ‚CŠ3!´å Ÿ#ËEôGØç‡øqÖebÍŸ¾À)ÌöI¹›l‘ÇÎ ‹©û-lNÐ*r»´¹:­´–¡¯Å©M=M¸Ñ„)!¬ŽÔ/ Ý©îâõhfG¯Æó£¸ŒP³Üè4‚pWKã’=ö¢w.éSŽKR÷ý»\‚[ÕHš¸Çãpò÷õ Ø¸Sâ4fäóýüRÙ¯ÝwÀraÛè—5 2uòh“m“@DSŸK‡¼ö*² oà #Õ Á-ž:îl3>ÑkôX2±v›—¦‹¦(ÓÔè€m¡’rû5:7>;‰Ÿ1÷…KÚš¨î¾&Ÿm.Ȥ¬ ßmNI1ÿ\3˜ß—/DƳ‚uB™€n–Ì+‚œšªÈG{¶Ì¿àKåЗ«j³WLzyµ]6 —CA>ˆu§479µö×÷¥·Å+$$áQêå!|yüöé1 ¯("‘qãT̶Œú{Š5Ì6o˜‚“ˆŠZobû§÷‡u·Òë*ŽsD¹Q³!æ1k¾é\õ`Éeñ®?!Ï=§r326>™;¦ÈFÐWØg`  ¡7;õ’W˜t¬8ûz.æþ]“g¢\“Õ£ÙkÇÉÁêÖ2w5{à¦d€wMÆjJý‘(µ±ÎõÐÍ|–:F(^9Ô›v„vݼÃ7©—7‰×­¥npVó¸+ntmï_cE\º+Œ“£Ñ|9¼>²ÌGÄ´‘ÊLb€=xÊñÞ"k¬=€®'Ÿ‰Ôõâ¯B~ܨaÎ'6гº¥rM¡Ëư×ÿ6‘Õ’ëš<$.”gQ!ˆWŒL #?ŒˆXËUšÊ“¾)>ËqŸo«›£ó¨ }žuÑ}U‘Õ“;©s£t¼ r½ýÖK=ßdYP¨8Èjî úXžQãËÉ€@c‰5¼–_Fªü?Œ#`‚<Í…w7°«h ªÍd5:Ýò“ð Š&ðOñO*šô û¯E‚FÑZ¯J£R-¹üÒþç2KJu›ç·ï g¬v^ˆ`íUš57‚Qd/Ýÿ9Ñ——[r Ãm : 3&¾76ûý@­ô$G$éË…QU[)JbÒÎV÷à›Ô)€TU üÙTº¥œ…d"†~%Š+1[¢›æt»î›@ìèOMÒUJÀÒ Å¡Â.–{+^„þuõfdžI\.®/OôñYéڦ±Û%¤Ö)€ŠðnO¤•½±óôhÕ0|dòÊ’HƆœÜŒúVBCÏ=£µ6f ´¿qߨóÙÚÞ;kw5¯¤ÇyyPA”ë•Ý+oZ²ëÒÿ[èECÑK2$ˆf•‘nƒ‚Ùa\X™ ‰íß ·7|f,…hÚæÖqéÓ¢èT¼¥nú³ q¶_iÑ»K3©::XœŒ“:Ž" ·-nô¹‹ª|hA6“Ë­,rÜ_U+Ý^&4¨‹q}Ž'¶¬s¼!Ì aƒœUŸ»Þ«MŸÏ\Ú6>:èH)¢>nÔ+ŽÊ 4r Åzè£æ> tŠý¼§ï—-2Ȭ”ðüûÀQÌa§èæN ÓB[ÑÁ}bܵdÌÑæcƃJ´ÄÒv ¨9&˜ *o×̘œ×tIOÁKèP$y4gFs0È­°¾S…•µ 8À_”îLØÚžj|¤ÅYii£|k‘(òrŒfm‡…u ëy>sUžRU„y Ù¥+Å…<0ΨñøQj>;aÛìbn¸H•»’8ÈsÕršÜ“ £ÝZMÊ|ÜÝ H5¢ïÚLl<ñIoʼnÿS‘"¢ÒÀ±à#¯=ØÂ®Ü“y/®®+<9^De ù‚.·`ÍËh%çuÿä),2es_+‚=³z5F É,”Íêe÷ù7êжo틬ÀÙb EŸòÚ—¾É`D±BB"4³›°Å¥ £èÔ‘G‡í¶Îæx>ŸÑ8ýè7è,ôh™ZG>T3–ÜzK ÙRív\9 ö€zùZU7ºéŸX¨ú9WLê›Ô4–0¼5JM·)–+}U¬àξŒ¤þ|΂Um‰S‰|ìXÚñ‘úYÉ^qøéIôw ‹SÏSÔÈ[î§Ù„¤¢Þšx”wy›¯Å ¯(ÖΚÕ3Ý‘Îh4BØO2g}BfP‚è÷Æv*ÁèuÿC¿84å_ë!-"Fµ2y U zÝóë§úEÉÚø›/¿•å6_'U]³õ1&â‡ò,ăé.¸Ü‹¼ƒ%ÒqÏ‘„rÁNÌ¢a)ã7èýÂ["Ù>¼mSi=« ¿9™|_õÝ0¥é“߸}ÍÇÖœE Y?—á;ƾÁɵ´ Ý“9O 6ŸR°;À¥?F²ÀÉ®à(Ü$ñy4ÜNT£z=BZ¼lv/ä5–®R†æk²Õk×còÛâÒ’É <˜\ÍuPî·6©†êæÿÇr5%™bí{æ?èÂ|ÎÑëR¯#<Ë’pš¹øpˆ_÷Þ¡ö=Œ±•†ç.ð4ð{ÄÛB¶ ™ïî—&%š›Ç-è<¤OæÑ¾¬´I"†¢ÈøýÝž¿3O Ãþ£¤ñÜ\^K¢×Õ!}(¿ê|QÁ·PY£åÝ=HLï™ëo{Ä6A!ùpŠYMüZOà1ô¤Š%gØåíû¦²ö ‹{N/l”Àra·T ¥óL–ÛìÒ{s¸šÓÛÝœZÚÛΖ©Ðݤ¥$B.gp\¡÷Ðjo_-—~&¢IÊ4RÐ2_º|j_º)g¡ªÑß]«Ó˜3 hø Ø4@ɺœ™‡­iµ#qî¢íX°ÛàÍ"òD ¯ì¯òã?ÔLISÝÔ"ÆœQ^a}½‡ÎªÉÉiÍ@xðg‰oA`£;NVÕê"š^–-ÇÏ_°>H¸.o€r8ßÁè‹àæ·‚¹Ì·ˆš†PŸšÄ ›2:Y‰¦WÆg'íÁþf5שÚs›Í5±¸MH7g¶œÊ¤XÃx‘ØÌ4Ç\ôá&SüÛZãMàm¾é±ríoŠÚªu†Ë³ÖŸñMH5h¬„‚]ä\Âë÷U÷½Pu…hI‰¥ßp³ò܈mÂÍ sö{ÆS蜮ú…r˜€>ü=¼;B‹Ì]!\…CV·â¾þ¥ گўðê¶Èÿ–¶-µîÐQÖR&rNbÞ‹Î^úbó,V¥ßP”í;E!v[¼Ýñ2—ƒ#Þ¤2ÊiUIí½›}ò(QÇQWJ†Hðì¿s]ê ¥‡žN!%CÿZ&î&y\¸ÊR•€2€€»!MèD‡‘è—¾cK€Ô¾ÐÑxÞêÅ}ôº>ã¹”HŸ“$¶i ã¹2`¡J ñ& kú€RøÎŸ„Áñ2~AÚ`½6[ýÐäß5‡davûFgbl)›tßÅ®ûeâÝV‘²dû©’±ªïF§ _.©ÙòÈ·@Þ;ôE÷.“G 6µjM†bªˆ!/Íe/?A~L] T.—\Ì~çÂK©T®„P ‚Ž=±³XÚÃatvtÄó •Á„ ê ÐøÓ‚x¤ýû¥¦èâËñZìZ^¥´6™)Õ.žµ‡W©eßnk&cF³¤=â:«™ê'¿'ñ? >!¬A‚çÞnt îϘëΑüô“¶Kz>‘MUæä6ŒÈXß]$n3@sz2‡èD-ÅŠ„ÎÓ¼µ‚µ™Ï¦0_¹ `Ó¯8ò)•È[•ø1 `&øŠ˜·QNˆë-ÇÒ(_’Ÿ&ÇØ,û1R½M0ûÍÄ¿‚–fÝÕö]=¹M嫞ë5â~?fGyõb{-!Ì ‚œw·IƒÔ ìI[ê3”×X©^|!µiîú?su¡É]jgÊQý÷ÓÀ8_å`xŒËpÞ–þSLtj%psìtTasï—¥ÕgNƒ^G£¦fÝ€kŠ7©d~U!†L3ÚÂ?Ö×G<ë ü< Ýþ¹-Ó— rHþ%cˆÛ ÂF±ˆ!²>G~4¼Ÿ¡òç"„—M˜Ë?(" 7ÜœÑC—â(¯ ò”{B¾ûA9gm9eŽås¹¨Ý¿%ž¢ÖUÖ¨ga`±o¯ O÷Bgúå-ÛlÝ-gê¶Ç¸!Ãj9à¾:Î!Øü'äù¯ÔRŸ™ˆ×J¦Ìù5 ¸tñ×U|Òm8ÊKщºš“hE &=ÝY¸Ø ͦ¬µ¬³·zKÈJóÂý§¨þWB>‚ó킱úuzŸ¨6›#D³!ðƒâ]ðO™ªDò'`Ee¸ÔUP1L/¹ûIËzé*Y}¤^r9Öx‹lš .Þª‰Kxªf—Å.eRŽ |Î]1ËÉl©—£æüG(Föpæ±Ñ*ÖBu¨é70Õµ0ë §]4zƺò!n>–êMZ©¥fa°ó‰«Âî‹?7™¢ñ†ø+ ˜ë^…M°,‡êѯ#ýC4J?ç{–o/í#¹BLb°©®¯¶ßTsÓãÖ6Ïú'/Km ññ[©×ßü6m;ê!d-#Ý{ß§é†Fz4™–l'¢TØí€½ ÂL¸a–:iY]²øã3nü·­aé‡0ï…³´ØAz å# D£]U?ÌqÿYÈX©óý‘³KKtªÜníõŽ}V´ŸÕ©øû·>^d„ª$b¢õˆ-&ȃR`&À9|é#e‘þþNÛþc›š¯¹µé­|ÖmñÌñWóT [éoôÍ^„&n: ˆ·º8«r*\÷Ëõ£²Ý:\/5Á€Ó-#yðý¿Da÷D$á[q¹ž]á ·³²túrBÓ"Ël^Ó…Q•ÊeõÏ376tq©RR²LxÇdæ KY³ØRsÊ!ÙÕ[[Wí­ÏšÏT³((ŒyþÞm>v-L'F&$ÃD5ë ÐÒéz0Â\“²;„0 ô`1ŠØßÁ¸.È3öz”„á’qqòž11•˜âmŠvÑ~{Ä”y@|ëþ):æû©|ËÑpkÞÊú.»|œodÙ·-/×$œIKëÁ*º=üžö-ÍÞ{íiï•,@hWêèÖÈàzûÌHÛ³Z2þQ„¢ \»8ð6µø³ÿ{Á"ìš\¼&SIÅQä% ]EeÍ(Ž81¶¯>ídu!Ü‹š{—?Ý›šŠÌ4aW ÖïCÓ,üKßÇXÃâ¶ø.k¿¸;y:5j´ AK%æ7ê× èûØgifK{ÁÍbÜ-.AåÞE`f"\'’ìêˆD÷D`¤EÖ| ~#ò˜á;|¾üÆâê§_ˆÛ×}NPômŠb½Á–«—8îd¡*¯.Õ[¹í\÷‚Dtó‚`(èe2œ¡!6mÿ µrÌÔê©h¸Ë©>^ô Y«lï307ƒï'Sì‘ ß ¬gP©qƒØûW«ë‹Çœ ÆP^«jìõü²…L¯ë}œ@!PŽo’ÿpcªý«ÃU\‹ÈÕ’J«# Ñö0f µ¥ñ,:D µ÷èéÀ bÜ6çÜJAYÜׄsS“µ¶u—¢/)Õö€…®pÓ¼‰ù»ÔACŠÍ®\©ÒqÌnùnŽl¡ºI _é]ÙMÔlPêµñ^JŸbÂ%$ºµ¿8˺ÿC¶/¦ŒvpR‘ºFîÈ,/õ©qÌͽ¡hÐÛ{>$¾2X¾¿ ¤—#ÈÕ}?BœÉFöÞ™¦ñã÷ËWð+leý?@-ÑØjýÍ‘¶.€ÝƒÙvtŸ®+€ÀwÔ¬Ð랉çßhHŒÓUDc3‘ÙÔ8Bçz‰à Í$$•õ§;±1ô¥¦Î.X¡Èà>!œÉfvL“§ž-Ú4²Ú`Õ¹àìR;Ìh@ñe€—ùõ,ùy„rà¬á»Î¸½%ƒ C·g‡4F;ä¡T¬âÂè@¥w–ÃbF÷gö<¬½~ó `€!ᜠëãE Mba²±NÍ•,“$LÄ[Õ¡ìBp˜òÎYc˜Éׇ)˜ñÄz¢5ÉßVÏŒ ›>ƒf;¬8!÷ú'ûêd%Fìéø 7L¶Ì¿&LÖ-ÎÍmÖ.ù[q ÀTç›V—¡üi{—*X†Ë² ]ÄPG ÉcÊzàpg^2¨E¨¦"¨L<Õ "•ö O=°’¿PÂÖgºÉÝ>EÕhu {_SÁóÏpcì´X,<£Üø•£'%‚–‚îJvBDÁô@ƒæëݦ_P˜¯¾TX¢CÅkjÀg4xÇ“ûãa£¨  œ q‚éRzbVZÔ©\/±Ï¦½I  S}rÉ;cý‘:Å)ŠÇ¤ÏO4í)*´òMIÆêâ£7{ 5ÏQ#TBd0Z¥£ùe£8äa¢h‹ \riÍ :;\žß߬Åit  ÎpeTò€]ÄÎ{èã *U Òæž‹ú‚®4*k2X8ÞkÂ1êáð 뤧ñÖÂ>­ ¼Ùž³Ý(Úý1=³+:h'óÊÊ¿W•“Žõ|•§NV¾_ܲÅa;…ª#a´'fA£çyÊ =Qä Rî¤r‚Õ 6X_»&KÀ•q­6gd]ƒÖòõ#ß×Uýn侬÷s2Pœj»?ìëÜLè»ùaô¸ãéô6Äìv{î[¿(ÿÁ*Zªš¿Ù(¹µ Wo0hÀ3«x§‡ºUšqÓÒeZ D_f™Z™”7A¬jŸ·© RŠ #r½{[0ëðCè7~=_ãýþ<»Á¡gó=šAÁààºß ©‡§Åô^?g¥ŽÛ˜€Í ¼2>ƒ’25EyÖ–Ã­Ì bÒ Rûx¦Lý´ÑæsæÛõ5{ÑÁ²ëüF¤\‚­e ¸VlƒH Eæ<¡‡c^Pcy†\†ú½€Ka<ø#S›‚ðàefÙ¹å-vÚÎÑÝÒÚyC³Ä .µÏYž‡”i:QÝ“N§\KÐo¹€0ˆ"öþVIŒÒ7,d¬“ìà 4‚ÿä1 ½…ZÔ•9®(‚¸£ªÙò(BïüH}GÇèÝŒ‰½z¹.PHa/¦‹–7::ÌprD”Á-O?ŒÔ8´tÖpè5-Ï,¢ÅUâ÷Ÿ½¦¿ODLIÁ3ìI/vÁÉ]‡¤°Ý.£¢Í²òÏV2•»û´a¢²Bmý9ªØ]z*XˆŽØHôLúemî©÷KLâqM$ô",¿Ë·Ø“žâÏJÚlÐÿa(pά É3a*Ôª&ÏpM”§M<Úûú}t÷ &Á>h¢*q_Éë®Ü­ÌOÈo%›õÀ™wþüB“S1<ït¸ÙÜÕ$lº µ®#%}èr”pÐy]b€ª 'VD\Ò¶Ò}l¡}§ÁÆ ³ÿ‡£I&Ã{×½"ç‘kD´©[•æ-t åCß)2¥"Ãucï䓈Ëïk›Ôdm T78Ê6Ê8Õ¦}•Õ¡¨óCI‚ã5À¢+n``ôm½i 6ÞnlÆÿ À¤¹"¶¯§5îŸoBLÁnß±Èa^»ƒžà½›¬ïER ºøá]1¾#Ãjøƒ…-b·!LqŒ*þñ°Îˆ¡îðp›©4¸ðWöõ=Qár?AËJŒþTäžÓ;7-° U˜ÝlIÔ„R |¾öcìÓþݨSô :pç_xçäûä’¡ŸŽRÿã>XYVÛuO?¶\š -Ĥ€ K§¹#©a®Pâ¯NncÀÍ-ÕN*]wòù6j;W»—fTÂìzÑjìzŸbû° ªÞƒ¡ (èDYÂ'°/»±ØÍÒ¢QÞTÄŒ3örÁœ›ˆÚ%I§˜‡Uu®!ÒHá;<ÆAš[Iñz»4–E¨£ï#Icá×q[;KàÙ #b{ï5ßÌ…¯üâNQSë®Õ¹áññÌw&HymSlmLˆ(Nq„Lî½f­šäG¸©Žigùõ¡E¢Ç—oêÊÕ·´DÛ§êú|ÇÉôÍf5·Áp'¿’„g”m¸»cUº\†Wí@{««„Íë«—(DE‰ìËüú1Døê’¶¬ý‡žÒÓ8å²$Žzë8¥°3í½ã 9Iì° Q ßÍx#j+w´ƒLgÈêØdw\™ª6)Ö}ìÑë“äRõæ;j\ûÞ.Fø¾Vƒ#?Ë*ÇXÜgäÝLUž·Î†S§5ê°„<ÓXk!ΪcÒž¹‡…×Sívx_è‘`ïu9ð›2†£äZÕ;š4ËÚ­!Ô¤,<ìÁLÚ˜Ö+6" êžNxç— ìäÚݦ™1}Ö9NÛ°qF§²ªkâ7Ìe E\­6yøN6¾>»¤ç/€³õk=sâT²é FcÚÏd”Ct}–²àÙv|4~h `OšWô&#ÀOƒüÜ”€ÇöPFKzVLòc¶~ÛÔëk} Ñ.ÐøiØv¼1²pŽìñ¾°0•éòÜ#¼Æ‚jîǶ¯;ó¤{IûË•P…—ÝÊK§–ø?C=%J¬àžþÿ¢&8àÙk »v“ôŒÖ•ª]õôMyâôò ¥Ý ‘¢‚Tí_Ó0¯Â ÇN%,~)Ÿµ²[ǽœH‰ôÇê`1E­›ËY`:ʨ$òćz_€{Gʘ bk?PŒðÞG49%+­õ/Ž;ƒ~Ù±W”ðÀA8 ˜EA2ÛS@vòØ…ƒåz¤±àdNÆîñïC’ò‰æÁ¹%·Î„6yÓ–15lý<­!ÿú`˜6¼\xYí œt¶+G€8P|¤¯%%BÔŠ9tà¡>üÆ/{xŠô4^b`· nÎÜÇIOܱ2RP%×Ò›è ÷=Çʼ9ü)2ò‹'ª"ÔHßB5õ£ÉÝ #þ[A|ÑåýÆGi•nnŠáù³¸¹ Ú½ vÞp?ýt{ÛC+Ä/Ž)0šÇ´ ðHºù &ð‹.@Ô|5q7•±Bâ|âg‚kïð]¹æ…Ǿdžt BÇBq´Stë"p½¹í‡)g 'x­ìUJ­ô—’æ0g&ÙúœÛÒ®O\7 P×ø{äb'ƒS±ùwÒ~uêEV·¸Ç€ºM›µg$îN&á€UÜ !²€F/B ý¼A³‹HSuŽ?Ÿ®•lB¸4Ÿ¼xL5i‘­ÕˆÉ×\‹7çìû·ò‘þ+9á|ÅZªYY¤áÿZ¶„¦`õÏšpkì1§lê^ò—OÀ-ÉåiÖB+l¿›žv²JØ´HÒ~aÊ$61“@¯,ÌéÂ@Ë k6Ö7" pšwÚe#bb÷7IÉÎ’4$í¿Y"ÊCú£X©Á䩜‚èŠvªzíª qÙ’k1$zì­>ÂQæk_V¬"ËÄgû Ù!Ð3"WX(~Lþn]?hØ{“<Ä{æhÇ®cÿ!:Ïfï¾J]H(>‡ÀD°j@ídoBþÿ¬ºÙ ¶'ª€y_5öÍíum¾ßVÞ%à öo¼´½(Ó‘Kä¢ßûSžw'g«94rÐ^×™ÕDÞUmŠ›þ5l+YÅ€}…»ÈU#P0¡?$ šIl]e¶ ÄÀ2J-Q£sNV!ßú3±(g†³#з¹ oý”ó!y%¿õÂi„¿óÊ£‘8r*Ýjp¼ðÊSþêþ×|¤éh.ñ©dˆ;æ£PBòûjzjð0»~Þ“2Œ%ϼœŽ'1)ö‹…ªúRÔ¯1ä0`bä¥Î€Mà‘3'= ü½±l±6[›³C·ºDôÇðM+¨UÜ…Õ‡P/Ÿ¼ª¾«‚bú颡4,3-Ù´º¹, ¦í…ƒ†ÑÉžVÖœìQ—lYà}|ÌÏE[&hs_ŸU$ h'"Ô¾Áüm®C þx2•ÓÕØ1þ‰Sôš•úÀÌj¨urô†ÐÆ5y\ _2ßð9µÂÍwnÂožq"WCÞi@×À¸9À®v¼&öÓ­íÖð»‚Ó§†‚ æôì‘”ÔÜ)²„üÛ¦Ø}¥Ò¶À‰]ö}D•_RúÄú§µðNÈOwN^¿_Í¥=.-ø7'ïVY¨é™kËj%µRjq[`T³Kñ^ Aê±Ñ´ÍÐÚ¾hŠ€k×`²§À¼—¾`(6^oÙ$çÕ$ ç(8¼ëQ/Oú‘$÷ÆRX¡ ,+y<Ò4.'äÕ Ó³â9…î8ßU·¼‹L ZÀ¸Ç˜É¼=IÁ–þ‰¦ŸGl9àô8µAЕ¢>žU5ûpí½Lš¯Çñù¼l)ãi›káÀoXb"MÒA ÿkÜ$ðv í×¼å¡h} Hº‹,vwþ¯j†G¨ŽHCb›Àd$:xí}†ý±ª¬†iÚH#؉J6Ñé'±¦d?v‡KE‡Wd~¸ÅãA1‚VÞ•0ŽÚ×µûŸá<ɤRxO…m¼š …¦Ëšdº†I{1Ze–7éÐÛ3 ‡[¤á—$܇¡ïŠhªßŸ“ÖøzŠA€-­‚¿*ÝeÔ2 žÎZ®rŽZq+~Ûl p©ßÏ µØ1û ¶µ ¡z çOä¦ ÉØÂ84挎ª¼7}±u·êWLÏŽüŽEÚÛ’ò5ò^í™Æ³™Rœâr)ð]óÁœp!ìM”½Ác¯êهɂDz¤R ;PÉ?Í(‡ÏþÎ'ŸÝ³OMöígë1¼œ™û&|/—ý kŸÒ·AˆWéüRáFÏ¡Åtäùé9Ì6™€ŸÖ_Ov»=,üâô` ÐðæKàÍÉ™:Ôq½׺~|ɃҴÉäg *Hëbjcûy¡:L¾/T†ê`–…ª]N®ŠÉ´±•·z…¹ë]ר˻×@™V lpž=0©TkøeB@­+rsyncrypto-1.12/tests/regtestw320000644000175000017500000000747410525163221015174 0ustar sunsun#!/bin/sh # This script is meant to be run by msys (the mingw build environment). You will need to have the # proper gzip (with the rsyncable patch) in your path, or at the same directory as rsyncrypto.exe set -e RSC=$1 options=$2 if [ ! "$1" ] then cat < path - path to rsyncrypto to run regression tests on options - specify "v" for verbose output EOF exit 1 fi compare() { echo -n "Comparing $1 to $2:" if (diff $1 $2 >/dev/null) then echo " identical" else echo " diff failed" exit 1 fi } runreg() { cmdline=$1 testname=$2 shift 2 if [ "$options" = "v" ] then echo "Testing $testname: $cmdline" else echo "Testing $testname:" fi if /bin/sh -c "$cmdline" then while [ "$1" ] do compare $1 $2 shift 2 done echo "$testname passed" else echo "rsyncrypto failed to run" exit 1 fi } function dotest() { echo "Running regressions on $1" runreg "$RSC -d $1.enc $1.dec $1.key cert.crt" "decryption using symmetric key" $1 $1.dec rm $1.dec runreg "$RSC -d $1.enc $1.dec $1.key2 cert.key" "decryption using asymmetric key" $1 $1.dec $1.key $1.key2 rm $1.dec $1.key2 runreg "$RSC $1 $1.enc2 $1.key cert.key" "encryption using existing key" runreg "$RSC -d $1.enc2 $1.dec $1.key cert.crt" "decryption of our own encryption - symmetric" $1 $1.dec rm $1.dec runreg "$RSC -d $1.enc2 $1.dec $1.key2 cert.key" "decryption of our own encryption - asymmetric" $1 $1.dec $1.key $1.key2 rm $1.dec $1.key2 $1.enc2 runreg "$RSC $1 $1.enc2 $1.key2 cert.key" "encryption using new key" runreg "$RSC -d $1.enc2 $1.dec $1.key2 cert.crt" "decryption of our own encryption - symmetric" $1 $1.dec rm $1.dec runreg "$RSC -d $1.enc2 $1.dec $1.key3 cert.key" "decryption of our own encryption - asymmetric" $1 $1.dec $1.key3 $1.key2 rm $1.dec $1.key2 $1.key3 $1.enc2 # Let's test some command line options # No ready null command available - don't run this test. runreg "$RSC -d --gzip=nullgzip.exe $1.enc $1.dec.gz $1.key cert.crt && gunzip $1.dec.gz" "test seperate gunzip" $1 $1.dec rm $1.dec echo "All tests on $1 successful" echo "" } echo $RSC rm -rf regtestdir.* || echo -n "" mkdir regtestdir.orig mkdir regtestdir.orig/dummy mkdir regtestdir.key mkdir regtestdir.key/dummy mkdir regtestdir.enc mkdir regtestdir.enc/dummy shopt -s extglob for reg in reg+([0-9]) do dotest $reg cp $reg regtestdir.orig/dummy cp $reg.key regtestdir.key/dummy/$reg cp $reg.enc regtestdir.enc/dummy/$reg done #echo "$RSC -vv -r -d regtestdir.enc regtestdir.dec regtestdir.key cert.crt" #exit 0 runreg "$RSC -vv -r -d regtestdir.enc regtestdir.dec regtestdir.key cert.crt" "recursive decryption using symmetric" for reg in reg+([0-9]) do compare regtestdir.orig/dummy/$reg regtestdir.dec/dummy/$reg done rm -rf regtestdir.dec runreg "$RSC -vv -r -d regtestdir.enc regtestdir.dec regtestdir.key2 cert.key" "recursive decryption using asymmetric" for reg in reg+([0-9]) do compare regtestdir.orig/dummy/$reg regtestdir.dec/dummy/$reg compare regtestdir.key/dummy/$reg regtestdir.key2/dummy/$reg done rm -rf regtestdir.dec rm -rf regtestdir.key2 runreg "$RSC -vv -r --trim=2 'regtestdir.orig\\dummy' 'regtestdir.enc2\\dummy' 'regtestdir.key\\dummy' cert.key" "recursive encryption using existing" runreg "$RSC -vv -r --trim=2 -d 'regtestdir.enc2\\dummy' 'regtestdir.dec\\' regtestdir.key2 cert.key" "recursive decryption using asymmetric with trim" for reg in reg+([0-9]) do compare regtestdir.orig/dummy/$reg regtestdir.dec/$reg compare regtestdir.key/dummy/$reg regtestdir.key2/$reg done rm -rf regtestdir.dec rm -rf regtestdir.key2 rm -rf regtestdir.* echo "All tests completed successfully" rsyncrypto-1.12/tests/README0000644000175000017500000000370210525163221014106 0ustar sunsunThis directory is dedicated to regression and other forms of testing. Some of the files here: cert.crt - a sample X509 certificate (1024bit RSA) which can be used for encryption cert.key - cert.crt's private key For both use openssl to examine. e.g. - openssl x509 -in cert.crt -noout -text nullgzip - a shell script for nullifying the compression part of the process. Sometimes, for debugging purposes, it is more convinent to not compress the file prior to it's encryption. This is especially useful when it is desired to compare the image right before encryption with the image right after decryption. To disable compression, use the "gzip" option to specify "tests/nullgzip". This will make the gzip in "tests" override the system wide gzip. This gzip is a simple pass through. reg? - plain text files that have caused problems in the past. reg?.key - the key files with which they caused problems. reg?.enc - the resulting encryption file as it should be. Note that rsyncrypto, at the moment, uses an RSA padding algorithm that contains a random elemnt. As a result, two encryptions of the same file will result in differences in cyphertext file in the first few bytes (132 for a 1024bit asymetric key). The true way to test whether things work is to try and decrypt the file into, say, reg1.dec, and do "diff reg1 reg1.dec". testcrypt - an exercising program. Creates increasingly big files out of /dev/urandom, and then encrypts them, decrypts them, and compares the before and after. Will halt on error. Please note, however, that testcrypt will not generate brand new files each time. It will only append X bytes to the existing file. How many bytes are appended each time is determined by the second parameter to testcrypt. The first parameter tells testcrypt how many iterations to make. regtest - an exercising program. Uses the reg* files to make sure that the compiled version of rsyncrypto correctly decrypts and encrypts in a way compatible to previous versions. rsyncrypto-1.12/tests/reg10000644000175000017500000002060710175650601014016 0ustar sunsun§n,ÍRžî¤Œ¨ô&ÙpL¤1A¹—s ÈW„áÕ1ôZ#/eq£¡]pâJë´ %Ž´Œ”©açýeµÜœÆ‰ÉdbUq~­—â/HüRÕUðbØË}žQ·$"¹ºnç©Lyw·X‡+¬s¾1×@&•¤æøÃc¸ÓŽçZáŒ0«¸ú‘5Í—‹pòþ²øÈi;uëOçf¸2Ùrî@/®#»bl1tÁšÎõTÿ‰Æn‡íæÝ_ćÜåÉ5ÅıŸEzJ1 Ê…‡’g„ˆ,‘àšLÞR¯aïÁè…ÆC‰”hàZîÄ\Uæ¾æÍ'íA`ÑÂ(ûÒXô¤¨"¡³ÞËvÂi]¾KsWC—8ºZád瘘¶±^n„TÛ-Kµê±e ’ÂT2!Ò·¦ââÆ ›—EïLØÖ;ÏïóÅ2´¤I¬ão·e;•™Ü›q ðÐØ¢P±àÞ6¯¶o{îCL4?ómW—‡ òt’„†1¶‹Ã˜ùŽ«åܧš~Àã=»mÖpÍæÀoy+?ŽÖÖuá›2£ëÍ´˜pûo+ /OßrI:z¿êxgl%Þé¥À­Ó·{ E2{Ìä35›àD¥jC»áÈ¿…â¼üU.²ð¼*thPvB(È™þHš¥9ÞΛA#r´:Ý—¿jÅõ&²’ðî¤9ÛG"nšKE½(FêÙÜ(‚Mä3€† ¼Ïã¦ÜÇz¢kräÍàö¸Mi 7‘{D¢ÎµwÈìžÀ*d½_™ Ü:Dd) Œ.%€Ê&¤¯ð+ÀV)Æ e‚¯6/Ô®õYß3(pÊôì¹:©{ýÚÝÂ@’N¬ ŠÕ G-I|Kž›ZµM ê!F$rXk5‘X²‡o´`#ýÀV ÀB2QÀè·G$“+ô¼¤åO`u%t."?è#L8(LDZ8IÖÈÖðû©&zF¥"—r€â ™.¢°©F¦Õ²ÜyÚFÙ1ƒêmPœ^\Î8É¥º¸¾ÛTÜ£˜Ärá  ü´éôþ©:óÓz*‡Ðp£ì#«ð¯è¥'«Ë1 Xy¬W×…v!Z «ab!’ÔÒÖú×{Íí'}ÞœC?×Ñçe'3€‘¦=‡6{² Ç7 9ÔD”· ´•×nD‰î$J!d•æ¨áÓ¼´q3 ÊÒ9©}ÓYò ¯AæSÝó¼+ô¥™€X›4Žu+ƒ¾­ ûÿäw$4§œ)pDzÃÙéÙä!ô`Æ#fr6¿¨ª‡±,k>ÌR ”Ï0ò²™x6(’ãØÀ/!ÁŠú€yð^…ÅÝ„¬\ÀôÒ4~åZ™Ä5‰m©T‹¼r`¾YÁ•)I':¯n+™…Æ0ºˆœ÷“×~:}ŒƒÀã}†›íÉÝ8°ã±Å‘NÐyŽ÷K°’.¡ŠÒbf( ѸÐ9Šïò[Ñ[ L¡æ^§äÃ\°•]|‘ùžŒX|-ûg®„c:ÍÎΜuýî«4àt蘱ïàÊàf“ýí.(“S*Ÿê¥ÉQ󤂪€Rs@˜U<6—nqŸ„x J,éh0Ã1ëáàM9ôH ¡ˆÀ6ßþãÃ"rÞ-!–•t¥M®§ÇØ™ü^jN`“—:⸥¡^[çGñ1af’QQVKl8 )ôÆ“­”n$;W—iÅ2jž+”j U}ƒ¨ÜJ#ϱ æÜÆÎ·pûÓe­úÆ@y²" è)†qi½B1f£ˆäÏòxÎ}»öÿóÝÔ¨¶c!HK¹Ðy6A¢=»”ô}޳Ñ sí§}–øeJU™¬6ü_>3òvmÓÚ)›Àš¨6‹f–gæS+(h!Ò¿bçNZtz\I{çÂâOâU ‹OeÙë¿Þ)ÆŸtŒS3­ÅT`vÿš(.9T´æ ŸH3N‰Xï~dÈŠ‘H†¾æ_¹dƒ|H¨&tA­„廑è0é”­X¥c-òŽ=‹(A()^³­y÷f/"0©½…(—|…^ƒÄ;7èýK؉Þ» N-Æ5¦¶¢á,“opÍ´SG4Çÿu«ÃÃ0´jöö|h›½#¯Ö§„òqš4ÒÝ1,L¿ ð¸g”1«â„/ü*V¬À» Ö¼À>«5k¿á˜|ðw“àk/&¶ÙÅÝGÍ2¼ë¿ÈcÜÔšµðñЃuu0ì!] £aÀ§d1Ž;m¥«u¾„î5øEn7üø¤W80áØPô6ùl1Là°ÿ;³‰†Öœ­ô…G£\`Ä€ ÄÑ(èßÕ}†_EÎ ™eþ>ný žÓùÓÏ¥`¢ÅíPuÛ+„ÓÚzEŽã?ãÝΊ{µå1\Ý­V2„^G2„d‡øåÎq˜í€fJ+ θü‹! ˆB-mkÊÏ xÜÈœåÅÄŸ–gÖÂÜ"qà̛Ϫl„@Ôüwý¬˜ÓC–o÷Þ?â!`þi9Ab›WÚø$”þHá@è*â.¢õ©eÒïß¶¹Ä½2:»2Ë-|«·è¸’¤\GÀ0§æ{ãÆþæ-;ªÖýiM¶àñã37Á5ÊšáBnñMáÕMÁÉì`xšž«¨ Yë!ø4¢FâÙ |ÿ·ä&Sù.SjôKNŸâ ƒ8y§ÊÆïqJ<Ÿ1€Ó}„Õ°š€ÝÌ7rY,9ŠºÚ Ò¿¹Ói³ƒLüPíqƒKº’ &˜fY®ÖP@ÌŸèŒIÖ0B©ÚlC­Õ˜IÑA‡9LU)ø½*mÀ„a§ü§ ŠW}ÌÃã)y‹$=*ÃØÊßMnr©Ò7«Il¿¾Ÿ4î†d<|±Ì¸ˆ']öåA”ñ»†°°Ö1˜[½°‡zDøä0\7‡/S¸ 7¿o#Ðh=}ÌNÍŠ´Ž=—iã~4Ï)ôÜ£J74tq¡‡Œ$Ôæ¹ÙÿnOv^*Øe]¥ö9‡ä0%Ÿ–£¸!ÍLÝÞe©ã,9CDJY20ã}í–ÎÛ&Ç.²dïwß/7Ÿî©Ñiç¯ú¤ª~íò„éb¤Ÿ2øÎ¨cήÓ6‘•&öSc0~üáýQy¸OzU¦úŠcÔTÕºj³$ Ì“â¨=Ô\ºïS(U™Ç‡qcÓ`œQZÀR¿úBhêØæ]Ôy+uƒ.J%ÉÏE1ƒU¾•Aá7™1yÕÙI8?wΫ@J²'6­t¢EØ)\¯4Á‹÷…‚ú´êJ¿æo~#ß1˜§±^I–ÍבbŸ·®:Ûú©ëA4Æz¾|}ò½Ä;»grB(ö™<e Ùƒ]{z|”»Ô…V Vƒò¸v7à‡a>Q·ÓàéLáo­2·ÄR¦EM~pMÊ@Õö\ú4ºÕ<Ð#,Sk‚"óIídÏ®ÄõO4™I3»o{'x¸› ø%c*SM¸ÃÍHVŠúm™ÚÅc¨Ë8µZÁÝ…ÏÃùGVÚÊ´6’è¸Ñ?ƒÙö><íµ ±K]‡}.ôжWÆ? ±­‰…ý0Å,1:ÎNÕÛRN+Cè9°@a?‚Xlá Q“úb ÛwrR6McCÜBl^f¯¯:7 Š$pô]lAeÖSÓf‡uªo¡¹Ž¡) lÒ±“›ÿ õµÑ[;i!ÒíQÀÆ&„sˆFÈìC)èæ‚yÓ7VŸâE§d…[ ôAp&¬sB¿-Nuð´óAC.Š'‚™9<ë#Ñ›,[‘Œ°+9úö…>6[`+Ûùþ†‚iEë®-sÎ/é­)Yl·`¿ÉN b+¼aΟ™6ñöq­åT>òˆá(ôŠsñKå„EoÆí' ލþwB„ótKƒŸúG+²ÓZóšU\'º@¤œõ€FÛž•§ºÌxÍ Ø¥4æwñµ+úgšÁqê„¡E?N( ÿƒþú/ÿ·ee;± *ßFpaí ¿€8XEÈp¸ ÷‚ñìá Hä.ª/þf)–ëå°«'D§•Ó5ÿ',31\ãÑyf%oÓÿá‹Ù³ò¥Âê—„V@æU°®‡vÐM2?a÷Ÿ´·@n]Ó=Ea0;ÏcB|R4Â9÷Ô¢¿©˜cg©z½Â%eÑÄ%_«Ý¾²W; ÍãPï³wåDýy¿» ¸Z9{že)¯}³ãóÕ“Íúší¹7ñ_šNr0Ûù‚Éów`9“莳94ÜYdJË®ŽsM¶rÚJÙ£Ôª ®—ÙÊë.{ŸÛ9·×—8¸N+kÃÉþ¤‡ïñÃúíÇ¢ÿÄ“¯_A—OÒîô1_²›ÒG]Nd·ßLn¤¤Ú»÷L ÅÞ|f  ü ïT`|øë†Ý­k1¾šWÔ‘J ý¸CU¥°tâ3$ÙœlÁPMJö$Ae^ÝË êÚ¼ÞÂ5“LË7«Ãôùã/„vð1ÆöÀ3_µ AlÒzw/.§N^´¤ „Zºêž¹@©—ßtÐV<ñ_¢j=ˆyêÃéœñÂêÓÉó×!WËe\Ý›©2Á¿C….‰._·y¾ ÷Ç*ѹêë†ìÎJ¹¦ÊV?%Û”ñå Íò}¬ÕÀã!e¤î±<6ÉÔ™.`}ä …ËÜqfĤüJ‘X©h¡uc`‹Wñ|jë–f8m8âL‰ 6– öcªJ–_ÐK‹¨º©ÍwëvŠÀ¹UÔ°Œc!­Ty¼’8[­iÞeíñ¯]aŒ7iP¢ý›¨¾v׬7 BiJöÓzNût³t…”TýY=j:3ý˶ÏÚ%yFúiÂLá]ÉfþÚ…U -ùº®Èû¶©–ˆrY·ƒõe“#î¡*±n©íZ{Œ/À³ËmfBÄ.= ÓЧ$Í*÷GÒi“:Tð¦9ar2*pY^X“«t´Á 64äc´¸¯ QÀ»Rš‰£+P¥ëš»Ú yQ]€nU-¤òO®dùHŠT8l+Dr©Caj;•Ĥü¥Øœ~´oy 35¬…ÚØr9F„ËŒÇkar:”J¡ú¶S\ XMÆïc¿f4†¼ ‘2jH†ÄPìf .‘˜b…p·E›Ð»Ý/èžqä£)~wRa@M´-!<2Ïä[ 51?ú”<$æÏ²?\ Gé¡az?m2 ¾¶šÑR÷FÕDjr”½ô®èC_õMÜ&’ͤw ˆ%AÐ^ÜÜž c¼òc²FÖú‚šÅhòÄ[Œnonë^|Å<èa,ÁfvŸ«)¯ÞúöC»ïõŶL^‚ãô*»û³E!ì”ËáM“{v€B^×x Μ¯Ý⪓8§°´ïn‡!A[{%HÚG£?›\óè¹ÂîÉ7¿ Á9~õux‰a'êsõA[ÿº÷Á„]¹ý0é 4Û¶¹' @´wÝ¢¶*~fÐÅÛ†Lö|/Ugkÿ¬{Oþ/JeüéÍ-é1=áGÄè5Ìí )´¶¦¸DÿvvG¼õ¢gr]›v“ÅDZ¶ü—  ®\HÑ$U¡íašùÐÚkQ—¬¼ƒ«"Ïç…±½râRíi©¨ISTÂü„àR@µ3"¢Ë`ä9»lg“"·:òƒ ÖµŽfEÇdz”)¨¼V‘åtb~ ¯‘,_H+µ38@;ѳš+8&ØW¸AQbÌÉIóK6ãK= ·?²è:8”í97 jô¾kö^¡ƒ]Ååûá¦?·\¡åk5¾@,úiîv©×R•í®/Ÿv¥º®t-Ê%(–#鸿bF͉¬"‘óïW‰–{º9¶» ’F€eô—-˜Bî«,ã{ä(:ýZ¿ëUÞ —H›0ø4ÙÐMˆ•ªDx§ÿHm£xØr y4A Þ_z ©ÉeÃÅBßâš«%Ž7«¸5>ÔvñöâCêªeÅÖЙ°ê^™êO:âéZt&8·øF¡>“œ^Z[×7;öç¢ÐŒÃKf—MÒ¶Ö`ðœuÔ\ü‚ê¡%Ó]ˆ’•%ÖjmMÄÄ/܉õ”¼Ff§¹r±Þ†j8Aí@S/¥÷¯;¹°7“屆Á¿`4ûF¨à«Mn\ýˆþˆÌ»N„ÄþL§ªMqþO@eâ™åˆ#iëCß@UÅ‚þ%|) ¸j†ÃýÁÐûŒ$‘ÑRž¯;hÔˆ'Kký±¬‚aá(LR*hVÐö9;ýkºtbŸ³‘’…à bl;-¨Qkïå@ã Ôy'my%&õ$é­8)r²ç3ã“í)+3H *4&ΙE‘µC›}ÜJá´okÛN8?‰TçëÍ¡y˜¹ß'íþy¶ «R´ìÀñNÿ=)ºø©Ójäañzî• ºußb#jQÁ—\õÀSÎ¥=éµ(—†¨ª²ÝÃä,z˜Ö ¹¾é±±&ˆÒ°y²=­ÀEÁƒ„Ñâ"ÙÈæ^C£ÅP—=,’"‘`¡QojW=Å5’׉âT‹ÊxDþ”9ƒáù þåLàáEaý4Sú¨#ƒ€×û­2¼âû|»I“#‚³„.ã•ýê„ihû0>lv©˜´Š€©ŒH’D¾Læüu®Úìµ§C—ºZ–#ømy‘à ãsGE6Mnš%’{jë½6Ð/ƒRaÚ\‚„>‘ˆßËqÿÿZe<v¤=kéó =÷r©~¬ûhj*‹|@]?<;›B‚Œv·ù”…¨O½¢ˆ{íæÔܰ|ݹØoBv›¯ñø²ˆuÛo­†sˆÙ½é¼è9[p5ep»-XYaëÖ6=D”Y®3ë÷$a’«[?1á%eQ‘}©€qIÆ\M·@¾A /üº»%½@HQwÎkãT± ÆRÇ-\m_Á|7Õä©Ì¢Š} !1kïÃ"V·*¡WÄã|ÆÀ©ç.²ÿN.}še‘׭О;ûëêqûíÑûs¤T*KõKiìá¨-gº^¢¨Qä _±„s«³zÖÃÊÜ“Æ÷Á®1G†ñv5Ö˜#ÇêO¾G`µs¢:½Ô6'ÌT;ø2›Ïaº"Œäìl GG#¶“‰âŒ8¦Ÿ*Y‰’)µläØô5øQšNy8ÎùßJÊ—ê'Ecÿø…ÔßpxslöÁ}Q9íUðA%H kµÄ³‹Åë 6”C)k8 ¯¾Ùó"J¿L„Vwdx¦i±é„µ¼K$×9’p ;wŒ¨±ÿ¿!‚û2³/PvȈ7p¸ÐtÜ¢[ÆÍì늬=§T oGÂ,²ŠRXr}¤†-=^|a¯2~€2Ø)àà”ü²ÿý¤L¹–ÅËe˜)K ‚¥eâîhXCd¬A ÙJ¾» ’Xj=ѕŠ¼8OXP®2^u«Â')©pNü ìðk›5ª.q²¦ÛFf‚MUçgô?¿þȇ> X¥ØÐW†hmÖÇtýãÖxÌB„3a®oD”n=x*ö5uÈ®J)Øk·4 »á_~X´ž„”ŠøÚ§%otߨ®ªdÒ¼Öæo `)ã°8œä¸ï¤°Ø«†>dɈ¹( ä´·,þÓ¦ñ¦š¾ê¼eWì3Fh;š»šä§äÜÓà"~Ž7ÕB³“×P»¼ü_E!7ɾun žáú‘ž›a1ÂÏ|r Uºhú2¸<äû¦äVN“TvßB÷¶Ö»ÞØ p\Ù “ËJþDUY4„# h’ÐF¦? Aî E"ÞMhšHÊ.¯y½ÎŽÛ ªÆC¢ÍVÈ¡h…a †ð‡éMŒÆ ÐÉœW:ˆ3i§aÎý¡{\°^&ca¿»Lœºµµ´?× Ñ·Ƥ:âMñulJêËïmÞ–Ó‰3¦ãèjj¤õY0¾¦â՘˟‘ Û^gy«Å0rÚlš rLzl]½ºoøÂ\œ¹VwQ:p'Hôܸ/9¥Dÿm`o$Éú ì+ûObÒØ&\w%&vl)n£×†Ó›é”?‚§ ì}x—kØhƒ&*¡]à%KÅmÜ躯JÍó5ɜذulIÐA".Q8—ÅßiÚB*œ-U×Y!hƒ•hß™LYl‹pÑôIî¢é²n6ÝVñºÏïfM£‚fw<É~Ç£Ž|mIU=”'ëÒ¥á×_ö…‡:À`žÊ[ÍT=u^¤ª±¯ÄèBLE]ÇDg[ nØ ²)šŸàLbn¸7ÝC2­¤Öx¾ìT¼àÊ›ŸþÄj‡ÓœŠ#ì¨ fY–bš5òÓÁ#/ê*ñ¿ >šƒîŠÏàXÄHôÕ,2-}‰¿°Èa¥i˜÷§˜Sä$Ê\žÛìѵ5õ¼šÃïþ%ÜŠÉËÌ«ÃqŽNÉ“ÉÄ{žKmITèLªì'‚â6ò"¼zz‡?6TÍnù«PB“K<9 I±­p;T™4æø–îÁ•& $€:± õ^ÝØÃÀ‡÷{+’˜`kþhòʤùÒ‰Gx{FògÕvý ¬ÕÙQ»vž(è ÒÄ“CÕ$”b%í™ðy.ÀôB}Ø™ö1_ÿ7í!ý¦érѪ>“.¿ur¹)ÆŠö/2)ŽÇÏ¿À‡¥§/ ˜ôàz|0ˆ8ÌÃ4„ב“îS/æ(Å"ܧU €h¼¾5šèèÏÆM˜ùG~^Ü•p,ûhqÑ4ahjoÍê¡$½’Xcë ¤¸”^„î!'1šŽÛ]AÂ">Œ·á6RûlÍëúÄ4=`¢Ÿã¨›¨QFnP¤œ•k{y†N1!¦á#wƒ& FYcú³Ð9’½mc±»ªÅjî‚A ´‘­çvÀX>y¯×$:÷Uj½†E·ìrsyncrypto-1.12/tests/nullgzip0000755000175000017500000000002410525163221015012 0ustar sunsun#!/bin/sh exec cat rsyncrypto-1.12/depcomp0000755000175000017500000004271311041707162013450 0ustar sunsun#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2007-03-29.01 # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, 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. # 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 outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #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 $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac 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. -*|$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" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--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, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; 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-end: "$" # End: rsyncrypto-1.12/file.h0000644000175000017500000000214210716406766013171 0ustar sunsun#ifndef FILE_H #define FILE_H // Function types for processing files typedef void (* encryptfunc)(const char *source, const char *dest, const char *key, RSA *rsa, const struct stat *stat ); typedef std::string(* namefunc)(const char *left, const char *right, mode_t mode ); // A simple concatanation of both names std::string name_concat( const char *left, const char *right, mode_t mode ); void filelist_encrypt( const char *src_dir, const char *dst_dir, const char *key_dir, RSA *rsa_key, encryptfunc op, const char *opname, namefunc srcnameop, namefunc dstnameop, namefunc keynameop ); void dir_encrypt( const char *src_dir, const char *dst_dir, const char *key_dir, RSA *rsa_key, encryptfunc op, const char *opname, namefunc dstname, namefunc keyname ); void file_encrypt( const char *source_file, const char *dst_file, const char *key_file, RSA *rsa_key, const struct stat *stat ); void file_decrypt( const char *src_file, const char *dst_file, const char *key_file, RSA *rsa_key, const struct stat *stat ); int calc_trim( const char *path, int trim_count ); #endif // FILE_H rsyncrypto-1.12/rsyncrypto.vcproj0000644000175000017500000003232511013007542015544 0ustar sunsun rsyncrypto-1.12/INSTALL0000644000175000017500000001722710201173506013122 0ustar sunsunBasic Installation ================== These are generic installation instructions. 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, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). 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 at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' 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. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. 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. 4. Type `make install' to install the programs and any data files and documentation. 5. 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. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure 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 must use a version of `make' that supports the `VPATH' variable, such as 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 `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have 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. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' 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. 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'. Optional Features ================= 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. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM 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 host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. 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. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--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. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. rsyncrypto-1.12/README0000644000175000017500000000247611013012005012735 0ustar sunsunATTENTION: Version 1.07 introduced a bug that would trigger when an entire directory hierarchy was deleted when all of --name-encrypt, --ne-nesting of more than 0 and --delete-keys were in effect. All files deleted were incorrectly removed from the file map, leaving behind dummy entries. Further attempt to use that file with rsyncrypto would result in a "corrupt filemap" message and an rsyncrypto abort. Version 1.09 fixed this bug. It also introduced a new tool, designed to fix the corruption left behind by the bug. Running the corrupted file map through rsyncrypto_recover should fix the file and restore it to full working order. As long as the only message printed during the restore process is "Rsyncrypto 1.07 corrupted record - safetly discarded" no data loss has occured Rsyncrypto requires gzip that supports the "rsyncable" flag. The gzip rsyncable flag is a patch written by Rusty Russell. This patch is available in the "contrib" directory, and nees to be applied against the *gzip* sources. Items currently on the todo list for version 2: 1. Treat filename mapping on Windows as case insensitive 2. Sign the encrypted files to allow a third party to verify their integrity. 3. Store meta-information, such as the plaintext file name and other file attributes inside the encrypted file. 4. Allow filter mode operation rsyncrypto-1.12/COPYING0000644000175000017500000004373711010034415013123 0ustar sunsun Rsyncrypto is distributed under the terms and conditions of the GNU General Public License, with the clarification that it is allowed to link it with the OpenSSL library, or any derivative of it that is distributed under either or both of its current licenses (as of version 0.9.7 of openssl). -------------------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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. rsyncrypto-1.12/rsyncrypto_recover.vcproj0000644000175000017500000001240511013007542017266 0ustar sunsun rsyncrypto-1.12/config.h.in0000644000175000017500000001434111041707162014112 0ustar sunsun/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if the `closedir' function returns void instead of `int'. */ #undef CLOSEDIR_VOID /* Directory separator as char */ #undef DIRSEP_C /* Directory separator as string */ #undef DIRSEP_S /* Define to 1 if you have the header file. */ #undef HAVE_ARGTABLE2_H /* Define to 1 if you have the `bzero' function. */ #undef HAVE_BZERO /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the `dup2' function. */ #undef HAVE_DUP2 /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `argtable2' library (-largtable2). */ #undef HAVE_LIBARGTABLE2 /* Define to 1 if you have the `crypto' library (-lcrypto). */ #undef HAVE_LIBCRYPTO /* Define to 1 if your platform has the "lstat" function call */ #undef HAVE_LSTAT /* Define to 1 if `lstat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_LSTAT_EMPTY_STRING_BUG /* Define to 1 if you have the header file. */ #undef HAVE_MAP /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the `mkdir' function. */ #undef HAVE_MKDIR /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if "open" supports O_NOATIME */ #undef HAVE_NOATIME /* Define to 1 if you have the `rmdir' function. */ #undef HAVE_RMDIR /* Define to 1 if `stat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_STAT_EMPTY_STRING_BUG /* Define to 1 if struct stat supports nanosecond resolution */ #undef HAVE_STAT_NSEC /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* 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 `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if `st_rdev' is member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_RDEV /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MMAN_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_UTIME_H /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if `lstat' dereferences a symlink specified with a trailing slash. */ #undef LSTAT_FOLLOWS_SLASHED_SYMLINK /* 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 version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Version number of package */ #undef VERSION /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define for Solaris 2.5.1 so the uint32_t typedef from , , or is not used. If the typedef was allowed, the #define below would cause a syntax error. */ #undef _UINT32_T /* Define for Solaris 2.5.1 so the uint8_t typedef from , , or is not used. If the typedef was allowed, the #define below would cause a syntax error. */ #undef _UINT8_T /* Define to `int' if does not define. */ #undef mode_t /* Define to `long int' if does not define. */ #undef off_t /* Define to `int' if does not define. */ #undef pid_t /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `int' if does not define. */ #undef ssize_t /* atime nsec access replacement */ #undef st_atime_nsec /* ctime nsec access replacement */ #undef st_ctime_nsec /* mtime nsec access replacement */ #undef st_mtime_nsec /* Define to the type of an unsigned integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef uint16_t /* Define to the type of an unsigned integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef uint32_t /* Define to the type of an unsigned integer type of width exactly 8 bits if such a type exists and the standard includes do not define it. */ #undef uint8_t /* Define as `fork' if `vfork' does not work. */ #undef vfork rsyncrypto-1.12/autoarray.h0000644000175000017500000001027710332674030014252 0ustar sunsun/* * This file is part of rsyncrypto - rsync friendly encryption * Copyright (C) 2005 Shachar Shemesh for Lingnu Open Source Consulting (http://www.lignu.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* * Copyright (c) 1997-1999 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Silicon Graphics makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. * */ #ifndef _AUTOMAP_H #define _AUTOMAP_H #if defined(__SGI_STL_USE_auto_array_CONVERSIONS) && \ defined(__STL_MEMBER_TEMPLATES) template struct auto_array_ref { _Tp1* _M_ptr; auto_array_ref(_Tp1* __p) : _M_ptr(__p) {} }; #endif #define __STL_NOTHROW throw() template class auto_array { private: _Tp* _M_ptr; public: typedef _Tp element_type; explicit auto_array(_Tp* __p = 0) __STL_NOTHROW : _M_ptr(__p) {} auto_array(auto_array& __a) __STL_NOTHROW : _M_ptr(__a.release()) {} #ifdef __STL_MEMBER_TEMPLATES auto_array(auto_array<_Tp>& __a) __STL_NOTHROW : _M_ptr(__a.release()) {} #endif /* __STL_MEMBER_TEMPLATES */ auto_array& operator=(auto_array& __a) __STL_NOTHROW { if (&__a != this) { delete [] _M_ptr; _M_ptr = __a.release(); } return *this; } #ifdef __STL_MEMBER_TEMPLATES template auto_array& operator=(auto_array<_Tp1>& __a) __STL_NOTHROW { if (__a.get() != this->get()) { delete [] _M_ptr; _M_ptr = __a.release(); } return *this; } #endif /* __STL_MEMBER_TEMPLATES */ // Note: The C++ standard says there is supposed to be an empty throw // specification here, but omitting it is standard conforming. Its // presence can be detected only if _Tp::~_Tp() throws, but (17.4.3.6/2) // this is prohibited. ~auto_array() { delete [] _M_ptr; } _Tp& operator*() const __STL_NOTHROW { return *_M_ptr; } _Tp& operator[](size_t index) __STL_NOTHROW { return _M_ptr[index]; } _Tp* get() const __STL_NOTHROW { return _M_ptr; } _Tp* release() __STL_NOTHROW { _Tp* __tmp = _M_ptr; _M_ptr = 0; return __tmp; } void reset(_Tp* __p = 0) __STL_NOTHROW { if (__p != _M_ptr) { delete [] _M_ptr; _M_ptr = __p; } } // According to the C++ standard, these conversions are required. Most // present-day compilers, however, do not enforce that requirement---and, // in fact, most present-day compilers do not support the language // features that these conversions rely on. #if defined(__SGI_STL_USE_auto_array_CONVERSIONS) && \ defined(__STL_MEMBER_TEMPLATES) public: auto_array(auto_array_ref<_Tp> __ref) __STL_NOTHROW : _M_ptr(__ref._M_ptr) {} auto_array& operator=(auto_array_ref<_Tp> __ref) __STL_NOTHROW { if (__ref._M_ptr != this->get()) { delete [] _M_ptr; _M_ptr = __ref._M_ptr; } return *this; } template operator auto_array_ref<_Tp1>() __STL_NOTHROW { return auto_array_ref<_Tp1>(this->release()); } template operator auto_array<_Tp1>() __STL_NOTHROW { return auto_array<_Tp1>(this->release()); } #endif /* auto ptr conversions && member templates */ }; #endif /* _AUTOARRAY_H */ // Local Variables: // mode:C++ // End: rsyncrypto-1.12/release.checklist0000644000175000017500000000177411013012005015370 0ustar sunsun- Make sure that the ChangeLog file is up to date - Make sure that the README, NEWS, INSTALL, INSTALL.win and the man page are up to date - Regenerate the HTML man page, if applicable - Make sure that the version number is correct in configure.ac, Windows resource files - Update the Setup project (from Windows - will regenerate GUID for version) - Make sure that win32/config.h has the correct version number for Win32 (three places) - Tag the release (tags/Vversion) - Export the release from the tag name - Run ./bootstrap and delete autom4te.cache - Package the release as tar.gz on Linux from clean export. - Make sure you can still build on both Linux and Windows from the tar.gz - On Windows, make sure that running with latest version of OpenSSL and argtable - Package name for windows - rsyncrypto-x86-version.msi (remember to rename) - Release on SF, freshmeat. - Add tracker group for new version on SF. - Update the "download" page in the file release page on SF to the new version for both all and Windows rsyncrypto-1.12/INSTALL.win0000644000175000017500000001113011010355555013706 0ustar sunsunWindows Compile and Installation Instructions ============================================= You will need Visual Studio, as well as several pre-requisits in order to compile rsyncrypto on Windows. The following libraries are needed: OpenSSL (http://www.openssl.org/) Argtable2 (http://argtable.sourceforge.net/) In order to use rsyncrypto (not needed for the compilation stage) you will also need a patched version of gzip that support the "--rsyncable" flag. A compiled binary is available with rsyncrypto's windows binary release. Alternatively, you can also download the sources from http://www.gzip.org/ and apply the patch under the contrib folder of the rsyncrypto sources. The rsyncrypto sources contain a file called "rsyncrypto.sln", which is a standard Visual Studio 9 workspace file. Certain preliminary steps are necessary before compiling rsyncrypto. OpenSSL Installation ==================== Nothing special here. Follow the usual installation procedure. If you manage to get precompiled binaries, feel free to use them. Rsyncrypto requires a version of OpenSSL new enough to contain AES, but any relatively recent version of OpenSSL qualifies for that. Later versions fix security holes, so it is recommended to get a later one. As before, you will need to add both the OpenSSL include paths (directory inc32 under the source compiled version) and the library path (out32dll) to Visual Studio's search path. If you are compiling your own, it is highly recommended that you use either MASM or NASM to compile assmebly versions of the encryption modules, as that will speed up rsyncrypto. The installer integrated into the rsyncrypto solution searches for the openssl binaries in C:\Openssl\bin. It is therefor recommended that you also perform the "make install" stage listed in the openssl compilation instructions. If you do, add c:\openssl\lib and c:\openssl\include to the relevant search paths. Argtable2 Installation ====================== Visual Studio does not play nice when passing stderr from a program to a library, unless they are both compiled with a dynamic copy of the runtime environment. In order to make things easier, rsyncrypto carries a project file for compiling argtable as well. This saves you the need to compile argtable yourself, but it does mean you will need to extract argtable into the right place if you want rsyncrypto to find it. As such, it is recommended that you extract argtable into the directory immediately ABOVE the one rsyncrypto resides in. It is also necessary to remove the version number from the argtable directory name. In other words, if rsyncrypto is, e.g., in C:\Sources\rsyncrypto-1.07, you will need to extract argtable and rename the directory so that the archive is extracted in C:\Sources\argtable2. The good news is that, other than extracting the sources, there is no need to do anything else. There is no need to explicitly compile argtable. Compiling Rsyncrypto ==================== Just double click on the rsyncrypto.sln file and press "compile solution". There are a couple of known warnings in crypto.cpp regarding signed/unsigned comparisons. They are a result of difference of signness of "off_t" between posix platforms, where it is unsigned, and Windows, where it is signed. If someone can come up with a platform independent solution, they will receive official "thanks" in the Authors file. Packaging and Distributing Rsyncrypto ===================================== Sadly, because of the above mentioned bug in the Visual Studio runtime library, rsyncrypto cannot be compiled to use the runtime library statically. Microsoft, in a move all too typical, produced a runtime library (known as MSVCR90.DLL) that cannot be used unless installed with Microsoft's own installation process. The result is that it is no longer possible to simply copy everything needed into a zip file and pass it along. If you are using a bought version of Visual Studio 2008 (i.e. - standard or above), you will have a project called "Setup". Asking to build it (it is not built automatically as part of the solution) will create an MSI file that contains a complete installation of Rsyncrypto, including OpenSSL (assuming it's installed in C:\openssl) and the runtime library. If, however, the express version of Visual Studio is used, this option is unavailable. If that is the case, I recommend reading the following MSDN articles: http://msdn.microsoft.com/en-us/library/ms235299.aspx http://msdn.microsoft.com/en-us/library/ms235291.aspx Historical Note =============== Rsyncrypto used to demand STLPort for compilation. As part of the move from Visual Studio 6 to Visual Studio 2008 this requirement was removed.rsyncrypto-1.12/rsyncrypto_recover.man0000644000175000017500000000314411030247151016537 0ustar sunsun.TH RSYNCRYPTO_RECOVER 1 "May 13, 2008" "Lingnu Open Source Consulting" "Rsyncrypto_recover User Manual" .\" Please adjust this date whenever revising the manpage. .SH NAME rsyncrypto_recover \- recover all usable data from corrupted rsyncrypto filemaps .SH SYNOPSIS .B rsyncrypto_recover .IB badfile " > " goodfile .SH DESCRIPTION This manual page documents the \fBrsyncrypto_recover\fP command. .PP When the \fBrsyncrypto\fP command is used with the \fB\-\-name\-encrypt\fP command, a file containing the mapping from the plain text representation to the encrypted file names is formed. This file mapping has a strict format of records delimited by a NULL byte. .PP A bug introduced in version 1.07 or \fBrsyncrypto\fP, and solved in version 1.09, caused this file to be somewhat corrupted under certain circumstances, most notably the use of the \fB\-\-delete\-keys\fP command line option. .PP It is important to note that the only records corrupted are records that were due to be deleted anyways. \fBThis bug did not result in any loss of actual important data.\fP It did, however, leave behind a file that \fBrsyncrypto\fP then refused to open. .PP \fBrsyncrypto_recover\fP will read in a file map, and output to the standard output only those records that are valid. .SH PARAMETERS .TP .I badfile A file map that contains some good and some corrupted records. .SH SEE ALSO .BR rsyncrypto (1) .SH AUTHOR rsyncrypto was written by Shachar Shemesh for Lingnu Open Source Consulting ltd. http://www.lingnu.com .PP This manual page was written by Shachar Shemesh .SH PROJECT HOMEPAGE http://rsyncrypto.lingnu.com