Whamcloud - gitweb
LU-135 Fixes for builds against Lustre 1.8.1 to 2.x. 45/345/4
authorbruce <bruce@whamcloud.com>
Fri, 18 Mar 2011 17:40:00 +0000 (10:40 -0700)
committerbruce <bruce@whamcloud.com>
Mon, 21 Mar 2011 16:53:17 +0000 (09:53 -0700)
This patch set is for e2fsprogs v1.41.14-161-g7d9e316
This patch set includes changes from Andeas Dilger:
Author: Andreas Dilger <adilger@whamcloud.com>
Date:   Fri Mar 11 01:54:51 2011 -0700

    LU-45 update e2fsprogs for pre-1.42 build

    This e2fsprogs release adds support for filesystems > 16TB.
    Update the lfsck code to build and run with both 1.8.x and 2.1.
    Zero large inode space when expanding inode to avoid leaving garbage.
    Validate inode creation time caused by non-zeroed large inode space.

    Change-Id: Iebac0d6147cacc386e5c1a0a44df57785ad7c8fd
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: I243c2520a99113db31dd499d2d706ca7c6f7f41f
Signed-off-by: B.Cassidy <bruce@whamcloud.com>
86 files changed:
patches/ChangeLog [new file with mode: 0644]
patches/README [new file with mode: 0644]
patches/e2fsprogs-add-io_channel_readahead.patch [new file with mode: 0644]
patches/e2fsprogs-add-trusted-fid.patch [new file with mode: 0644]
patches/e2fsprogs-attr_cleanup.patch [new file with mode: 0644]
patches/e2fsprogs-bad-ininode-ea.patch [new file with mode: 0644]
patches/e2fsprogs-bigjournal.patch [new file with mode: 0644]
patches/e2fsprogs-blkid-zfs.patch [new file with mode: 0644]
patches/e2fsprogs-config-before-cmdline.patch [new file with mode: 0644]
patches/e2fsprogs-count_wrong_valid.patch [new file with mode: 0644]
patches/e2fsprogs-data_in_dirent.patch [new file with mode: 0644]
patches/e2fsprogs-dblist.patch [new file with mode: 0644]
patches/e2fsprogs-discard.patch [new file with mode: 0644]
patches/e2fsprogs-e2fsck_exclusive.patch [new file with mode: 0644]
patches/e2fsprogs-e2scan.patch [new file with mode: 0644]
patches/e2fsprogs-expand-extra-isize.patch [new file with mode: 0644]
patches/e2fsprogs-extended_ops.patch [new file with mode: 0644]
patches/e2fsprogs-extents.patch [new file with mode: 0644]
patches/e2fsprogs-fiemap-lustre.patch [new file with mode: 0644]
patches/e2fsprogs-i_size-corruption.patch [new file with mode: 0644]
patches/e2fsprogs-ibadness-counter.patch [new file with mode: 0644]
patches/e2fsprogs-large-ea.patch [new file with mode: 0644]
patches/e2fsprogs-lazy_journal_init.patch [new file with mode: 0644]
patches/e2fsprogs-lfsck.patch [new file with mode: 0644]
patches/e2fsprogs-lustre_ismounted.patch [new file with mode: 0644]
patches/e2fsprogs-misc.patch [new file with mode: 0644]
patches/e2fsprogs-mmp.patch [new file with mode: 0644]
patches/e2fsprogs-new-opt-shrdblks.patch [new file with mode: 0644]
patches/e2fsprogs-osx.patch [new file with mode: 0644]
patches/e2fsprogs-rpm_support.patch [new file with mode: 0644]
patches/e2fsprogs-size_high.patch [new file with mode: 0644]
patches/e2fsprogs-skip-extent-tests.patch [new file with mode: 0644]
patches/e2fsprogs-specdotin.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_bad_ea_value.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_data_in_dirent.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_expisize.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_expisize_ea_del.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_bad_blk.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_ee_block.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_ee_len.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_ee_start.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_eh_depth.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_eh_entries.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_eh_magic.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_eh_max.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_ei_block.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_ei_leaf.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_imbalanced_tree.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_inrlevel-incons.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_orphan_blks.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_overlap.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_res_blk.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_shrd_blk.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_split.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_extents_unsorted.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_ibadness.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_ibadness_bad_extents.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_jchksum_bblk.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_jchksum_blast_trans.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_jchksum_remount.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_large_ea.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_many_subdirs.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_mmp.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_random_corruption.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_uninit_blk-uninit-set_inode-uninit-not-set.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_uninit_blks-used_blk-uninit-not-set.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_uninit_checksum_invalid.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_uninit_disable.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_uninit_enable.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_uninit_incorrect_free_inodes_count.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_uninit_ino-ref_beyond_bg-itable-unused.patch [new file with mode: 0644]
patches/e2fsprogs-tests-f_uninit_restart_fsck.patch [new file with mode: 0644]
patches/e2fsprogs-tests-s_basic_scan.patch [new file with mode: 0644]
patches/e2fsprogs-tunefs-dirty.patch [new file with mode: 0644]
patches/e2fsprogs-uninit-fixes.patch [new file with mode: 0644]
patches/e2fsprogs-version.patch [new file with mode: 0644]
patches/libcom_err-unidiff.patch [new file with mode: 0644]
patches/series [new file with mode: 0644]
patches/sles/11/rpm/README.SUSE [new file with mode: 0644]
patches/sles/11/rpm/e2fsprogs-1.41.1-splash_support.patch [new file with mode: 0644]
patches/sles/11/rpm/e2fsprogs-1.41.4.de.po [new file with mode: 0644]
patches/sles/11/rpm/libcom_err-compile_et_permissions.patch [new file with mode: 0644]
patches/sles/11/system-blkid.patch [new file with mode: 0644]
patches/sles/e2fsprogs-SLES10--m-support.patch [new file with mode: 0644]
patches/sles/libcom_err-no-init_error_table.patch [new file with mode: 0644]
patches/sles/libcom_err-no-static-buffer.patch [new file with mode: 0644]

diff --git a/patches/ChangeLog b/patches/ChangeLog
new file mode 100644 (file)
index 0000000..a9c67e5
--- /dev/null
@@ -0,0 +1,519 @@
+2011-01-20     Whamcloud, Inc.
+       * version 1.41.14.wc1
+            
+Severity   : enhancement
+Description: update to latest upstream e2fsprogs release
+Details    : Update to upstream e2fsprogs release 1.42.  This release
+            includes functionality for filesystems with more than 2^32
+            blocks.  For standard architectures, this allows filesystems
+            with more than 16TB of space.  Not actually tested with >16TB
+            filesystems yet.
+
+Severity   : enhancement
+Description: allow lfsck to run with both 1.x and 2.x filesystems
+Details    : adapt lfsck to use FID-based inode and object addressing,
+            so that it can work with 2.x filesystems.  This depends
+            on the llapi_path2fid()/LL_IOC_PATH2FID ioctl.  If needed,
+            this could be worked around on older Lustre versions to just
+            return the IGIF inode number via stat and EXT2_IOC_GETVERSION.
+
+Severity   : enhancement
+Description: avoid creating the lfsck size database
+Details    : lfsck was creating the "szinfo" database on every run, but
+            it was never being used.  Disable it until it is needed.
+
+Severity   : major
+Description: flush client DLM cache when cloning duplicate objects
+Details    : If the DLM has multiple locks referencing a single inode
+            it will trigger an LASSERT on the client.  Flush the DLM
+            cache after cloning the first file to avoid this case.
+
+Severity   : minor
+Description: zero large inode space when expanding inode
+Details    : if "e2fsck -E expand_extra_inode" is run, the newly freed
+            space was not zeroed, leaving garbage in those fields.
+
+Severity   : minor
+Description: validate inode creation time
+Details    : validate that the inode creation time is after the mkfs time
+            in the superblock, and before "now + margin", or ask to fix it.
+            
+---------------------------------------------------------------------------
+
+2011-01-20     Whamcloud, Inc.
+       * version 1.41.14.wc1
+            
+Severity   : enhancement
+Description: update to latest upstream e2fsprogs release
+Details    : Update to upstream e2fsprogs release 1.41.14.  This moves a
+            few Lustre patches into mainstream e2fsprogs, like debugfs
+            printing of flex_bg bitmap offsets. See RELEASE-NOTES.
+
+Severity   : enhancement
+Description: remove patches to configure
+Details    : Avoid patching the generated configure script, which was
+            cumbersome and error-prone.  Instead, running configure with
+            the --enable-maintainer-mode option will cause configure to
+            be regenerated automatically when configure.in is patched.
+            Add this as a default configure option to the RPM .spec file.
+
+Severity   : enhancement
+Description: add checks for db4.7 and db4.8 on newer distros for lfsck
+
+Severity   : minor
+Description: add "Obsoletes e4fsprogs" for installing on RHEL systems that
+            provide an e4fsprogs RPM for ext4 testing.
+
+Severity   : enhancement
+Bugzilla   : 4424
+Description: Add basic regression test for large EAs in inodes
+            
+Severity   : enhancement
+Description: Improve dumpe2fs output to print bitmap/itable offsets more
+            sanely when flex_bg is configured on the filesystem.
+            
+---------------------------------------------------------------------------
+
+2010-09-29     Oracle, Inc.
+       * version 1.41.12.2.ora1
+
+Severity   : normal
+Bugzilla   : 21704
+Description: add lfsck support for LOV_MAGIC_V3 (pools) EAs
+
+Severity   : normal
+Bugzilla   : 22162
+Description: Support journals larger than 2GB
+Details    : libext2fs wasn't handling the high bits of the journal inode size
+
+Severity   : normal
+Bugzilla   : 23502
+Description: Fix slowdown when creating large extent-mapped journals (> 1GB)
+Details    : When ext2fs_block_iterate2() is called on an extent-mapped file
+            with a depth > 1, it will erroneously calling the callback
+            function starting all over again with logical block 0.  It
+            shouldn't do this, and it cases mke2fs to become very slow when
+            creating files with very large extent-mapped journals.
+
+Severity   : enhancement
+Bugzilla   : 21683
+Description: Add --lazy-journal-init option to speed up mke2fs.
+Details    : This allows creating large journal files quickly during testing,
+            but is not strictly safe for production, since it is possible
+            in theory to have the journal accidentally replay the wrong data,
+            IFF the journal is not overwritten before the first crash.
+
+Severity   : enhancement
+Bugzilla   : 4424
+Description: Add large ea support to e2fsprogs
+
+Severity   : enhancement
+Bugzilla   : 23041
+Description: Don't start MMP for debugfs if the filesystem is opened in
+            catastrophic mode (read only, minimum metadata loaded).
+
+Severity   : enhancement
+Bugzilla   : 22421
+Description: Add check for ensuring that file system is writable before
+            starting MMP.
+
+Severity   : enhancement
+Bugzilla   : 
+Description: Improve filefrag output so it can print new-style extent
+            lists even if FIEMAP support is not available.
+            
+---------------------------------------------------------------------------
+
+2010-02-24     Sun Microsystems, Inc.
+        * version 1.41.10-sun2
+
+Severity   : major
+Frequency  : never
+Bugzilla   : 18779
+Description: Fix a corruption problem in upstream e2fsprogs-1.41.10 when
+            "e2fsck -D" is run on a non-indexed directory with a directory
+            entry that sorts before "." or "..".  This was never in any
+            Sun-released e2fsck package, but is recorded here to clarify
+            that this bug was fixed in this release.
+
+Severity   : normal
+Frequency  : only with a corrupt MMP block
+Bugzilla   : 21543
+Description: Add check for e2fsck to correct a corrupted MMP block before the
+            filesystem is opened.  Fix segfault at close if MMP wasn't started.
+
+Severity   : enhancement
+Bugzilla   : 21564
+Description: Print message if MMP timeout is very large.
+
+Severity   : normal
+Frequency  : SLES11 only
+Bugzilla   : 20830
+Description: Allow ext2fs_attr_set() to include attribute prefix in the name,
+            instead of using ext2_attr_index_prefix[] outside of libext2fs.
+
+Severity   : enhancement
+Bugzilla   : 14548
+Description: Improve ZFS device probing in libblkid.
+
+---------------------------------------------------------------------------
+
+2009-06-13     Sun Microsystems, Inc.
+        * version 1.41.6-sun1
+
+Severity   : major
+Frequency  : always
+Bugzilla   : 18779
+Description: Fix a critical regression in e2fsck introduced version 1.41.5
+            which can undo updates to the block group descriptors after a
+            journal replay.
+
+Severity   : enhancement
+Bugzilla   : 19536
+Description: add regression tests for MMP feature
+
+Severity   : major
+Frequency  : always
+Bugzilla   : 19536
+Description: Free block statistics correctly when MMP is turned off
+
+---------------------------------------------------------------------------
+
+2009-05-12      Sun Microsystems, Inc.
+       * version 1.41.5-sun2
+
+Severity   : major
+Frequency  : always
+Bugzilla   : 18735
+Description: e2fsck reading cached MMP block misses MMP block update
+
+---------------------------------------------------------------------------
+
+2009-04-30      Sun Microsystems, Inc.
+       * version 1.41.5-sun1
+
+Severity   : enhancement
+Description: update to latest upstream e2fsprogs release
+Details    : Update to upstream e2fsprogs release 1.41.5.  This moves a
+            number of lustre patches into mainstream e2fsprogs, like extents,
+            uninitialized groups, and many smaller fixes. See RELEASE-NOTES.
+
+Severity   : enhancement
+Bugzilla   : 13419
+Description: lsattr print 'H' flag for huge files; document it and extent flag
+
+Severity   : normal
+Frequency  : if MMP was enabled with e2fsck, and e2fsck exited uncleanly
+Bugzilla   : 18735
+Description: clear MMP e2fsck marker if e2fsck is interrupted
+Details    : clear MMP e2fsck marker from the SIGINT and SIGTERM signal
+            handlers, or if e2fsck hits a fatal error.
+
+Severity   : enhancement
+Bugzilla   : 18735
+Description: add "clear-mmp" option to tune2fs to reset the MMP e2fsck marker
+Details    : add an option to run "tune2fs -f -E clear-mmp" to reset the MMP
+            block, which is easier than disabling and re-enabling it.
+
+Severity   : enhancement
+Bugzilla   : 10555
+Description: Add FIEMAP(FIle Extent MAP) ioctl support to filefrag
+Details    : FIEMAP ioctl allows applications to efficiently fetch the extent
+            information of a file. It can be used to map logical blocks in a
+            in a file to physical blocks in the block device. filefrag has
+            been modified to use the FIEMAP ioctl.
+
+Severity   : normal
+Frequency  : if MMP was enabled with tune2fs
+Bugzilla   : 17531
+Description: Free block count should be updated when MMP enabled using tune2fs
+
+---------------------------------------------------------------------------
+
+2008-07-11      Sun Microsystems, Inc.
+       * version 1.40.11-sun1
+
+Severity   : major
+Frequency  : rare, if on-disk data is corrupted
+Bugzilla   : 15320
+Description: kernel assertion with invalid eh_depth that e2fsck does not fix
+Details    : fix invalid eh_depth in the inode if the last index was invalid
+
+Severity   : enhancement
+Bugzilla   : 15604
+Description: display i_version in debugfs "stat" command
+
+---------------------------------------------------------------------------
+
+2008-05-20      Sun Microsystems, Inc.
+       * version 1.40.7-sun3
+
+Severity   : enhancement
+Bugzilla   : 9570
+Description: improve e2fsck error message for invalid HTREE depth
+
+Severity   : major
+Bugzilla   : 15872
+Description: tune2fs cannot disable uninit_groups or mmp features
+Details    : Upstream changes to the structure of tune2fs broke the
+            ability to disable the uninit_groups and mmp features.
+            This is particularly serious for mmp, because it will
+            render the filesystem unmountable.
+
+---------------------------------------------------------------------------
+
+2008-05-20      Sun Microsystems, Inc.
+       * version 1.40.7-sun2
+
+Severity   : normal
+Bugzilla   : 15725
+Description: fsck (e2fsck) -m hangs headless node
+Details    : -m support for SLES10 patch was removed as this feature was 
+            included in upstream e2fsprogs. But upstream e2fsprogs uses 
+            "-M" whereas SLES10 assumes it to be "-m". Added this patch
+            to provide compatibility with SLES10.
+
+Severity   : normal
+Bugzilla   : 15320
+Description: OSS crashes as e2fsck doesn't fix the header
+Details    : When the last extent index contained in an inode is deleted
+            it resulsts in a condition, eh_entries = 0 and eh_depth !=0, 
+            which ldiskfs doesn't expect this and crashes. Fixed it by 
+            clearing the eh_depth.
+
+---------------------------------------------------------------------------
+
+2008-03-14      Sun Microsystems, Inc.
+       * version 1.40.7-sun1
+
+Severity   : enhancement
+Description: update to latest upstream e2fsprogs release
+Details    : Update to upstream e2fsprogs release 1.40.7.  See RELEASE-NOTES.
+
+Severity   : enhancement
+Bugzilla   : 13025
+Description: Free space fragmentation reporting tool
+Details           : Add e2freefrag patch. Remove e2defragfree patch and changes to
+            further patches in series
+
+Severity   : enhancement
+Description: Add basic ZFS filesystem detection to libblkid
+
+Severity   : enhancement
+Description: Enable DIR_NLINK feature in the superblock
+Details    : If there are any directories with > 65000 subdirectories, enable 
+            the  DIR_NLINK feature in the superblock. 
+            This is not yet included in the Lustre e2fsprogs patch series.
+
+---------------------------------------------------------------------------
+
+2008-02-01      Sun Microsystems, Inc.
+       * version 1.40.5-sun1
+
+Severity   : normal
+Bugzilla   : 13150
+Description: e2fsprogs install error on SLES10 due to different library names
+Details    : On SLES10 the e2fsprogs package splits out libcom_err and libss
+            into a separate libcom_err RPM.  On RHEL5 the libraries are
+            split into a separate e2fsprogs-libs RPM.  Add an "Obsoletes"
+            and "Provides" line for each distro to provide compatibility.
+
+Severity   : normal
+Bugzilla   : 14662
+Description: e2fsprogs does not contain et_list_{un,}lock() on SLES10
+Details    : On SLES10 the e2fsprogs package has patches to add new functions
+            to the libcom_err library for making it thread safe.  These
+            patches were added to e2fsprogs to provide compatibility.
+
+Severity   : enhancement
+Description: update to latest upstream e2fsprogs release
+Details    : Update to upstream e2fsprogs release 1.40.5.  See RELEASE-NOTES.
+
+---------------------------------------------------------------------------
+
+2008-01-10      Cluster File Systems, Inc. <info@clusterfs.com>
+       * version 1.40.4-cfs1
+
+Severity   : enhancement
+Description: update to latest upstream e2fsprogs release
+Details    : Update to upstream e2fsprogs release 1.40.4.  See RELEASE-NOTES.
+
+Severity   : normal
+Bugzilla   : 12723
+Description: lfsck segfaults on SLES10 due to different db4 header
+Details    : lfsck was being built with a db4 header file different than the
+            shared library installed on the system, causing it to access
+            data structures incorrectly.  Use the right header file.
+
+---------------------------------------------------------------------------
+
+2007-12-10      Cluster File Systems, Inc. <info@clusterfs.com>
+       * version 1.40.2-cfs5
+
+Severity   : enhancement
+Bugzilla   : 13108
+Description: e2scan lists directories with -D option
+Details    : Add the ability to e2scan to list directories when the -D option
+            is specified.  When specified with a date range, only directories
+            modified since that time will be output.  When a full listing is
+            requested all directories will be output.
+
+---------------------------------------------------------------------------
+
+2007-11-09      Cluster File Systems, Inc. <info@clusterfs.com>
+       * version 1.40.2-cfs4
+
+Severity   : major
+Frequency  : filesystems with corrupt inode tables
+Bugzilla   : 14085
+Description: e2fsck aborts if a non-regular file has a corrupt EA block
+Details    : e2fsck incorrectly set an error return code if it read a
+            corrupt EA block and in the case of a file that did not have
+            any data blocks the error was not reset, causing e2fsck to
+            exit with an error.  The EA block read should not be returning
+            an error in this case.
+
+---------------------------------------------------------------------------
+
+2007-10-29      Cluster File Systems, Inc. <info@clusterfs.com>
+       * version 1.40.2-cfs3
+
+Severity   : enhancement
+Bugzilla   : 10827
+Description: Add e2defragfree program to defrag free space in ext3.
+Details    : e2defrgfree program tries to increase percentage of free chunks 
+            in free space on ext3 filesystem. It scans inodes and migrates 
+            extents to align free chunks.
+
+---------------------------------------------------------------------------
+
+2007-10-12     Cluster File Systems, Inc. <info@clusterfs.com>
+       * version 1.40.2-cfs2
+
+Severity   : enhancement
+Bugzilla   : 10657
+Description: Add journal checksum support to e2fsprogs.
+Details    : Changes to e2fsck to allow recovery of filesystems using journals
+            containing checksums.
+
+Severity   : major
+Frequency  : only on Lustre OSTs systems where page size > filesystem blocksize
+Bugzilla   : 13812
+Description: e2fsck can corrupt files by changing the i_size
+Details    : On systems where page size is greater than filesystem blocksize
+            e2fsck would round off the i_size to the page size boundary.
+            Fix the check to allow blocks to the end of PAGE_SIZE.
+
+Severity   : enhancement
+Bugzilla   : 13108
+Description: Add e2scan program to efficiently scan filesystems for changes.
+Details    : The e2scan program scans a filesystem for files that have changed
+            since a specific time.  This is usually more efficient than
+            doing a filesystem-level scan as it avoids seeking as much as
+            possible.
+
+----------------------------------------------------------------------------
+
+2007-08-16     Cluster File Systems, Inc. <info@clusterfs.com>
+       * version 1.40.2-cfs1
+
+Severity   : enhancement
+Bugzilla   : 11644
+Description: Improve e2fsck heuristics for detecting corrupted inodes
+Details    : Instead of doing piecemeal checking of inodes, this tracks all
+            errors detected in each inode, and if a certain badness threshold
+            is exceeded, the inode should be considered garbage.
+
+Severity   : major
+Frequency  : rarely, only for failover machines
+Bugzilla   : 6334
+Description: Multiple mount protection support
+Details    : The INCOMPAT_MMP feature will protect the filesystem from being
+            mounted more than once simultaneously, even on different nodes.
+            It will also protect against changes by e2fsprogs to the
+            filesystem if it is mounted. This assumes high importance in a
+            shared storage environment where multiple mounts can severely
+            corrupt the filesystem.
+
+Severity   : normal
+Frequency  : always on big-endian machines
+Bugzilla   : 12774
+Description: Corrections for e2fsprogs test failures on big-endian machines
+Details    : Correct upstream errors which caused some e2fsprogs regression
+            tests to fail.  Also add support for in-inode extent swabbing.
+
+Severity   : normal
+Frequency  : unknown
+Bugzilla   : 13111
+Description: Disable resize2fs if extents are enabled
+Details    : We have received reports of resize2fs corrupting the filesystem
+            if extents are enabled.  Although we are unable to reproduce the
+            problem, resize2fs has been disabled for filesystems using
+            extents as a precaution.
+
+Severity   : enhancement
+Bugzilla   : 11640
+Description: Random corruption test for e2fsprogs
+Details    : This test script randomly corrupts a filesystem and test the
+            robustness of e2fsck in cleaning this corrupted filesystem.
+            This test is done with random features enabled and with random
+            amounts of corruption.
+
+----------------------------------------------------------------------------
+
+2007-06-04      Cluster File Systems, Inc. <info@clusterfs.com>
+       * version 1.39.cfs8
+
+Severity   : minor
+Frequency  : always
+Bugzilla   : 12362
+Description: lfsck segfault if comma-separated OSTs are used on command-line
+Details    : If the list of OSTs given to lfsck is comma-separated, instead
+            of space-separated, lfsck will segfault when freeing memory.  
+            This problem did not actually affect any lfsck operations.
+
+
+Severity   : enhancement
+Bugzilla   : 12608
+Description: Report IO statistics to e2fsck
+Details    : Report IO statistics for read/write performance for various
+            stages of e2fsck if the '-t' option is given.
+
+----------------------------------------------------------------------------
+
+2007-05-03      Cluster File Systems, Inc. <info@clusterfs.com>
+       * version 1.39.cfs7
+
+Severity   : normal
+Frequency  : always, if using uninit_groups
+Bugzilla   : 12334
+Description: uninit_groups support was marking the last group UNINIT
+Details    : With mke2fs -O uninit_groups the last group would incorrectly
+            be marked BLOCK_UNINIT.  The kernel part of the patch did not
+            handle that gracefully.  Fix mke2fs and e2fsck to not do this.
+
+Severity   : enhancement
+Description: update from upstream e2fsprogs (2007-04-18)
+Details    : Includes most of the LLNL Coverity fixes.
+            Includes equivalent fix+test for e2fsprogs-check_filetype.patch.
+            Adds e2fsck support for external database for many directories.
+
+----------------------------------------------------------------------------
+
+2007-03-26      Cluster File Systems, Inc. <info@clusterfs.com>
+       * version 1.39.cfs6
+
+Severity   : enhancement
+Bugzilla   : 11264
+Description: Add uninit_groups (GDT_CSUM) feature support
+Details    : With an appropriate kernel, it is possible to improve e2fsck
+            performance to be a function of used inodes instead of total
+            inodes in the filesystem.
+
+Severity   : Normal
+Frequency  : always
+Bugzilla   : 11781
+Description: f_extents_eh_depth regression test failure
+Details    : The e2fsck regression test f_extents_eh_depth was failing because 
+            it wasn't fixing the problem in the first pass.
+
diff --git a/patches/README b/patches/README
new file mode 100644 (file)
index 0000000..6fbcdfe
--- /dev/null
@@ -0,0 +1,14 @@
+README for e2fsprogs/patches
+
+This directory contains patches required for use with Lustre that are
+for a specific e2fsprogs version, as shown in e2fsprogs-version.patch,
+in the order specified by "series".  Some of the patches here may be
+"historical" in the sense that they have already been added to the
+upstream e2fsprogs repository since this release, but they are not in
+any official e2fsprogs release so are included here for reference.
+
+Unfortunately, it isn't possible to have an SRPM that doesn't have the
+patches applied, because the patches change the "configure" script, and
+that in turn changes the .spec file (built from .spec.in) and that is
+sourced by rpmbuild before the patches are applied...
+
diff --git a/patches/e2fsprogs-add-io_channel_readahead.patch b/patches/e2fsprogs-add-io_channel_readahead.patch
new file mode 100644 (file)
index 0000000..035096c
--- /dev/null
@@ -0,0 +1,93 @@
+Index: e2fsprogs/lib/ext2fs/ext2_io.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2_io.h
++++ e2fsprogs/lib/ext2fs/ext2_io.h
+@@ -88,6 +88,8 @@ struct struct_io_manager {
+                                       int count, const void *data);
+       errcode_t (*discard)(io_channel channel, unsigned long long block,
+                            unsigned long long count);
++      errcode_t (*readahead)(io_channel channel, unsigned long block,
++                             int count);
+       long    reserved[16];
+ };
+@@ -101,6 +103,7 @@ struct struct_io_manager {
+ #define io_channel_close(c)           ((c)->manager->close((c)))
+ #define io_channel_set_blksize(c,s)   ((c)->manager->set_blksize((c),s))
+ #define io_channel_read_blk(c,b,n,d)  ((c)->manager->read_blk((c),b,n,d))
++#define io_channel_readahead(c,b,n)   ((c)->manager->readahead((c),b,n))
+ #define io_channel_write_blk(c,b,n,d) ((c)->manager->write_blk((c),b,n,d))
+ #define io_channel_flush(c)           ((c)->manager->flush((c)))
+ #define io_channel_bumpcount(c)               ((c)->refcount++)
+Index: e2fsprogs/lib/ext2fs/unix_io.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/unix_io.c
++++ e2fsprogs/lib/ext2fs/unix_io.c
+@@ -15,6 +15,9 @@
+  * %End-Header%
+  */
++#define _XOPEN_SOURCE 600
++#define _DARWIN_C_SOURCE
++#define _FILE_OFFSET_BITS 64
+ #define _LARGEFILE_SOURCE
+ #define _LARGEFILE64_SOURCE
+ #ifndef _GNU_SOURCE
+@@ -34,6 +37,9 @@
+ #ifdef __linux__
+ #include <sys/utsname.h>
+ #endif
++#if HAVE_SYS_TYPES_H
++#include <sys/types.h>
++#endif
+ #ifdef HAVE_SYS_IOCTL_H
+ #include <sys/ioctl.h>
+ #endif
+@@ -43,9 +49,6 @@
+ #if HAVE_SYS_STAT_H
+ #include <sys/stat.h>
+ #endif
+-#if HAVE_SYS_TYPES_H
+-#include <sys/types.h>
+-#endif
+ #if HAVE_SYS_RESOURCE_H
+ #include <sys/resource.h>
+ #endif
+@@ -119,6 +122,8 @@ static errcode_t unix_write_blk64(io_cha
+                               int count, const void *data);
+ static errcode_t unix_discard(io_channel channel, unsigned long long block,
+                             unsigned long long count);
++static errcode_t unix_readahead(io_channel channel, unsigned long block,
++                              int count);
+ static struct struct_io_manager struct_unix_manager = {
+       EXT2_ET_MAGIC_IO_MANAGER,
+@@ -135,6 +140,7 @@ static struct struct_io_manager struct_u
+       unix_read_blk64,
+       unix_write_blk64,
+       unix_discard,
++      unix_readahead,
+ };
+ io_manager unix_io_manager = &struct_unix_manager;
+@@ -767,6 +773,20 @@ static errcode_t unix_write_blk64(io_cha
+ #endif /* NO_IO_CACHE */
+ }
++static errcode_t unix_readahead(io_channel channel, unsigned long block,
++                              int count)
++{
++#ifdef POSIX_FADV_WILLNEED
++      struct unix_private_data *data;
++
++      data = (struct unix_private_data *)channel->private_data;
++      posix_fadvise(data->dev, (ext2_loff_t)block * channel->block_size,
++                    (ext2_loff_t)count * channel->block_size,
++                    POSIX_FADV_WILLNEED);
++#endif
++      return 0;
++}
++
+ static errcode_t unix_write_blk(io_channel channel, unsigned long block,
+                               int count, const void *buf)
+ {
diff --git a/patches/e2fsprogs-add-trusted-fid.patch b/patches/e2fsprogs-add-trusted-fid.patch
new file mode 100644 (file)
index 0000000..461e5a0
--- /dev/null
@@ -0,0 +1,101 @@
+Index: e2fsprogs/debugfs/debugfs.c
+===================================================================
+--- e2fsprogs.orig/debugfs/debugfs.c
++++ e2fsprogs/debugfs/debugfs.c
+@@ -494,9 +494,38 @@ static void dump_xattr_string(FILE *out,
+                       fprintf(out, "%02x ", (unsigned char)str[i]);
+ }
++#ifdef ENABLE_LFSCK
++#include "ext2fs/lfsck.h"
++
++static void print_fidstr(FILE *out, ext2_ino_t inode_num, void *data, int len)
++{
++      static int fid_size_warning;
++      struct filter_fid *ff = data;
++
++      if (len < sizeof(*ff)) {
++              fprintf(stderr, "%s: error: fid for inode %u smaller than "
++                      "expected (%d bytes), recompile?\n",
++                      debug_prog_name, inode_num, len);
++              return;
++      }
++      if (len > sizeof(*ff) && !fid_size_warning) {
++              fprintf(stderr, "%s: warning: fid for inode %u larger than "
++                      "expected (%d bytes), recompile?\n",
++                      debug_prog_name, inode_num, len);
++              fid_size_warning = 1;
++      }
++      fprintf(out, "  fid: objid=%llu seq=%llu parent="DFID" stripe=%u\n",
++              ext2fs_le64_to_cpu(ff->ff_objid),
++              ext2fs_le64_to_cpu(ff->ff_seq),
++              ext2fs_le64_to_cpu(ff->ff_parent_seq),
++              ext2fs_le32_to_cpu(ff->ff_parent_oid), /* f_ver */ 0,
++              ext2fs_le32_to_cpu(ff->ff_stripe));
++}
++#endif /* ENABLE_LFSCK */
++
+ static void internal_dump_inode_extra(FILE *out,
+                                     const char *prefix EXT2FS_ATTR((unused)),
+-                                    ext2_ino_t inode_num EXT2FS_ATTR((unused)),
++                                    ext2_ino_t inode_num,
+                                     struct ext2_inode_large *inode)
+ {
+       struct ext2_ext_attr_entry *entry;
+@@ -536,6 +565,16 @@ static void internal_dump_inode_extra(FI
+                       dump_xattr_string(out, start + entry->e_value_offs,
+                                               entry->e_value_size);
+                       fprintf(out, "\" (%u)\n", entry->e_value_size);
++#ifdef ENABLE_LFSCK
++                      /* Special decoding for Lustre fid */
++                      if ((entry->e_name_index == EXT2_ATTR_INDEX_TRUSTED ||
++                           entry->e_name_index == EXT2_ATTR_INDEX_LUSTRE) &&
++                          !strncmp(EXT2_EXT_ATTR_NAME(entry),
++                                   "fid", entry->e_name_len))
++                              print_fidstr(out, inode_num,
++                                           start + entry->e_value_offs,
++                                           entry->e_value_size);
++#endif
+                       entry = next;
+               }
+       }
+Index: e2fsprogs/lib/ext2fs/lfsck.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/lfsck.h
++++ e2fsprogs/lib/ext2fs/lfsck.h
+@@ -42,6 +42,14 @@
+ #ifndef IDENTITY_DOWNCALL_MAGIC
+ #define l_object_seq  l_object_gr             /* for lov_ost_data_v1 */
+ #define lmm_object_seq        lmm_object_gr           /* for lov_mds_md_v1/3 */
++#define ff_seq                ff_group                /* for filter_fid */
++#define ff_parent_seq ff_fid.id               /* for filter_fid */
++#define ff_parent_oid ff_fid.generation       /* for filter_fid */
++#define ff_stripe     ff_fid.f_type           /* for filter_fid */
++#else
++#define ff_parent_seq ff_parent.f_seq         /* for filter_fid */
++#define ff_parent_oid ff_parent.f_oid         /* for filter_fid */
++#define ff_stripe     ff_parent.f_ver         /* for filter_fid */
+ #endif /* IDENTITY_DOWNCALL_MAGIC */
+ /* Unfortunately, neither the 1.8 or 2.x lustre_idl.h file is suitable
+Index: e2fsprogs/debugfs/Makefile.in
+===================================================================
+--- e2fsprogs.orig/debugfs/Makefile.in
++++ e2fsprogs/debugfs/Makefile.in
+@@ -24,6 +24,7 @@ SRCS= debug_cmds.c $(srcdir)/debugfs.c $
+       $(srcdir)/dump.c $(srcdir)/set_fields.c ${srcdir}/logdump.c \
+       $(srcdir)/htree.c $(srcdir)/unused.c
++@LFSCK_CMT@LUSTRE_INC=-I @LUSTRE@/lustre/include -I @LUSTRE@/include -Wall
+ LIBS= $(LIBEXT2FS) $(LIBE2P) $(LIBSS) $(LIBCOM_ERR) $(LIBBLKID) \
+       $(LIBUUID)
+ DEPLIBS= $(LIBEXT2FS) $(LIBE2P) $(DEPLIBSS) $(DEPLIBCOM_ERR) \
+@@ -31,7 +32,7 @@ DEPLIBS= $(LIBEXT2FS) $(LIBE2P) $(DEPLIB
+ .c.o:
+       $(E) "  CC $<"
+-      $(Q) $(CC) -c $(ALL_CFLAGS) $< -o $@
++      $(Q) $(CC) -c $(ALL_CFLAGS) $(LUSTRE_INC) $< -o $@
+ all:: $(PROGS) $(MANPAGES)
diff --git a/patches/e2fsprogs-attr_cleanup.patch b/patches/e2fsprogs-attr_cleanup.patch
new file mode 100644 (file)
index 0000000..b216a79
--- /dev/null
@@ -0,0 +1,536 @@
+Index: e2fsprogs/e2fsck/pass1.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1.c
++++ e2fsprogs/e2fsck/pass1.c
+@@ -280,12 +280,11 @@ static void check_ea_in_inode(e2fsck_t c
+       int problem = 0;
+       inode = (struct ext2_inode_large *) pctx->inode;
+-      storage_size = EXT2_INODE_SIZE(ctx->fs->super) - EXT2_GOOD_OLD_INODE_SIZE -
+-              inode->i_extra_isize;
+-      start = ((char *) inode) + EXT2_GOOD_OLD_INODE_SIZE +
+-              inode->i_extra_isize + sizeof(__u32);
++      storage_size = EXT2_INODE_SIZE(ctx->fs->super) -
++              EXT2_GOOD_OLD_INODE_SIZE - inode->i_extra_isize;
++      entry = &IHDR(inode)->h_first_entry[0];
++      start = (char *)entry;
+       end = (char *) inode + EXT2_INODE_SIZE(ctx->fs->super);
+-      entry = (struct ext2_ext_attr_entry *) start;
+       /* scan all entry's headers first */
+@@ -403,7 +402,7 @@ static void check_inode_extra_space(e2fs
+               e2fsck_mark_inode_bad(ctx, pctx->ino, BADNESS_HIGH);
+       }
+-      eamagic = IHDR(inode);
++      eamagic = &IHDR(inode)->h_magic;
+       if (*eamagic != EXT2_EXT_ATTR_MAGIC &&
+           (ctx->flags & E2F_FLAG_EXPAND_EISIZE) &&
+           (inode->i_extra_isize < ctx->want_extra_isize)) {
+@@ -586,9 +585,8 @@ int e2fsck_pass1_delete_attr(e2fsck_t ct
+       int in_inode = 1, error;
+       unsigned int freed_bytes = inode->i_extra_isize;
+-      start = (char *)inode + EXT2_GOOD_OLD_INODE_SIZE +
+-                      inode->i_extra_isize + sizeof(__u32);
+-      entry_ino = (struct ext2_ext_attr_entry *)start;
++      entry_ino = &IHDR(inode)->h_first_entry[0];
++      start = (char *)entry_ino;
+       if (inode->i_file_acl) {
+               error = ext2fs_read_ext_attr(ctx->fs, inode->i_file_acl,
+Index: e2fsprogs/lib/ext2fs/ext2_ext_attr.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2_ext_attr.h
++++ e2fsprogs/lib/ext2fs/ext2_ext_attr.h
+@@ -38,9 +38,14 @@ struct ext2_ext_attr_entry {
+ #endif
+ };
++struct ext2_xattr_ibody_header {
++      __u32                           h_magic; /* EXT2_EXT_ATTR_MAGIC */
++      struct ext2_ext_attr_entry      h_first_entry[0];
++};
++
+ #define BHDR(block) ((struct ext2_ext_attr_header *)block)
+-#define IHDR(inode) ((__u32 *)((char *)inode + EXT2_GOOD_OLD_INODE_SIZE + \
+-                              (inode)->i_extra_isize))
++#define IHDR(inode) ((struct ext2_xattr_ibody_header *)((char *)inode + \
++                  EXT2_GOOD_OLD_INODE_SIZE + (inode)->i_extra_isize))
+ #define ENTRY(ptr) ((struct ext2_ext_attr_entry *)(ptr))
+ /* Name indexes */
+Index: e2fsprogs/lib/ext2fs/ext2fs.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2fs.h
++++ e2fsprogs/lib/ext2fs/ext2fs.h
+@@ -1004,6 +1004,10 @@ extern errcode_t ext2fs_dup_handle(ext2_
+ extern errcode_t ext2fs_expand_dir(ext2_filsys fs, ext2_ino_t dir);
+ /* ext_attr.c */
++extern errcode_t ext2fs_attr_get(ext2_filsys fs, struct ext2_inode *inode,
++                               int name_index, const char *name, char *buffer,
++                               size_t buffer_size, int *easize);
++
+ extern __u32 ext2fs_ext_attr_hash_entry(struct ext2_ext_attr_entry *entry,
+                                       void *data);
+ int ext2fs_attr_get_next_attr(struct ext2_ext_attr_entry *entry, int name_index,
+Index: e2fsprogs/lib/ext2fs/ext_attr.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext_attr.c
++++ e2fsprogs/lib/ext2fs/ext_attr.c
+@@ -262,9 +262,12 @@ static errcode_t ext2fs_attr_check_names
+       return 0;
+ }
++/* The unused parameter used to be the blocksize, but with in-inode xattrs
++ * the xattr storage area size depends on where the xattrs are kept.  Keep
++ * this parameter for API/ABI compatibility, but it is not needed. */
+ static errcode_t ext2fs_attr_find_entry(struct ext2_ext_attr_entry **pentry,
+                                       int name_index, const char *name,
+-                                      int size, int sorted)
++                                      int unused, int sorted)
+ {
+       struct ext2_ext_attr_entry *entry;
+       int name_len;
+@@ -336,8 +339,6 @@ static errcode_t ext2fs_attr_ibody_find(
+                                       struct ext2_attr_info *i,
+                                       struct ext2_attr_ibody_find *is)
+ {
+-      __u32 *eamagic;
+-      char *start;
+       errcode_t error;
+       if (EXT2_INODE_SIZE(fs->super) == EXT2_GOOD_OLD_INODE_SIZE)
+@@ -345,17 +346,13 @@ static errcode_t ext2fs_attr_ibody_find(
+       if (inode->i_extra_isize == 0)
+               return 0;
+-      eamagic = IHDR(inode);
+-      start = (char *)inode + EXT2_GOOD_OLD_INODE_SIZE +
+-                      inode->i_extra_isize + sizeof(__u32);
+-      is->s.first = (struct ext2_ext_attr_entry *)start;
+-      is->s.base = start;
++      is->s.first = &IHDR(inode)->h_first_entry[0];
++      is->s.base = (char *)is->s.first;
+       is->s.here = is->s.first;
+       is->s.end = (char *)inode + EXT2_INODE_SIZE(fs->super);
+-      if (*eamagic == EXT2_EXT_ATTR_MAGIC) {
+-              error = ext2fs_attr_check_names((struct ext2_ext_attr_entry *)
+-                                              start, is->s.end);
++      if (IHDR(inode)->h_magic == EXT2_EXT_ATTR_MAGIC) {
++              error = ext2fs_attr_check_names(is->s.first, is->s.end);
+               if (error)
+                       return error;
+               /* Find the named attribute. */
+@@ -573,7 +570,6 @@ static errcode_t ext2fs_attr_ibody_set(e
+                                      struct ext2_attr_info *i,
+                                      struct ext2_attr_ibody_find *is)
+ {
+-      __u32 *eamagic;
+       struct ext2_attr_search *s = &is->s;
+       errcode_t error;
+@@ -584,11 +580,10 @@ static errcode_t ext2fs_attr_ibody_set(e
+       if (error)
+               return error;
+-      eamagic = IHDR(inode);
+       if (!EXT2_EXT_IS_LAST_ENTRY(s->first))
+-              *eamagic = EXT2_EXT_ATTR_MAGIC;
++              IHDR(inode)->h_magic = EXT2_EXT_ATTR_MAGIC;
+       else
+-              *eamagic = 0;
++              IHDR(inode)->h_magic = 0;
+       return ext2fs_write_inode_full(fs, is->ino, (struct ext2_inode *)inode,
+                                      EXT2_INODE_SIZE(fs->super));
+@@ -752,6 +747,7 @@ static errcode_t ext2fs_attr_block_get(e
+                       goto cleanup;
+               memcpy(buffer, block_buf + entry->e_value_offs,
+                      entry->e_value_size);
++              error = 0;
+       }
+ cleanup:
+@@ -760,6 +756,22 @@ cleanup:
+       return error;
+ }
++static errcode_t ext2fs_attr_check_ibody(ext2_filsys fs,
++                                       struct ext2_inode_large *inode)
++{
++      const int inode_size = EXT2_INODE_SIZE(fs->super);
++
++      if (inode_size == EXT2_GOOD_OLD_INODE_SIZE)
++              return EXT2_ET_EA_NAME_NOT_FOUND;
++
++      if (IHDR(inode)->h_magic != EXT2_EXT_ATTR_MAGIC)
++              return EXT2_ET_EA_BAD_MAGIC;
++
++      return ext2fs_attr_check_names(&IHDR(inode)->h_first_entry[0],
++                                     (char *)inode + inode_size);
++}
++
++
+ static errcode_t ext2fs_attr_ibody_get(ext2_filsys fs,
+                                      struct ext2_inode_large *inode,
+                                      int name_index, const char *name,
+@@ -768,26 +780,16 @@ static errcode_t ext2fs_attr_ibody_get(e
+ {
+       struct ext2_ext_attr_entry *entry;
+       int error;
+-      char *end, *start;
+-      __u32 *eamagic;
+-
+-      if (EXT2_INODE_SIZE(fs->super) == EXT2_GOOD_OLD_INODE_SIZE)
+-              return EXT2_ET_EA_NAME_NOT_FOUND;
+-      eamagic = IHDR(inode);
+-      error = ext2fs_attr_check_block(fs, buffer);
++      error = ext2fs_attr_check_ibody(fs, inode);
+       if (error)
+               return error;
+-      start = (char *)inode + EXT2_GOOD_OLD_INODE_SIZE +
+-                      inode->i_extra_isize + sizeof(__u32);
+-      entry = (struct ext2_ext_attr_entry *)start;
+-      end = (char *)inode + EXT2_INODE_SIZE(fs->super);
+-      error = ext2fs_attr_check_names(entry, end);
+-      if (error)
+-              goto cleanup;
++      entry = &IHDR(inode)->h_first_entry[0];
++
+       error = ext2fs_attr_find_entry(&entry, name_index, name,
+-                                     end - (char *)entry, 0);
++                                     (char *)inode+EXT2_INODE_SIZE(fs->super)-
++                                     (char *)entry, 0);
+       if (error)
+               goto cleanup;
+       if (easize)
+@@ -796,7 +798,8 @@ static errcode_t ext2fs_attr_ibody_get(e
+               error = EXT2_ET_EA_TOO_BIG;
+               if (entry->e_value_size > buffer_size)
+                       goto cleanup;
+-              memcpy(buffer, start + entry->e_value_offs,entry->e_value_size);
++              memcpy(buffer, &IHDR(inode)->h_first_entry[0] +
++                             entry->e_value_offs, entry->e_value_size);
+       }
+ cleanup:
+@@ -813,7 +816,7 @@ errcode_t ext2fs_attr_get(ext2_filsys fs
+       error = ext2fs_attr_ibody_get(fs, (struct ext2_inode_large *)inode,
+                                     name_index, name, buffer, buffer_size,
+                                     easize);
+-      if (error == EXT2_ET_EA_NAME_NOT_FOUND)
++      if (error == EXT2_ET_EA_NAME_NOT_FOUND || error == EXT2_ET_EA_BAD_MAGIC)
+               error = ext2fs_attr_block_get(fs, inode, name_index, name,
+                                             buffer, buffer_size, easize);
+@@ -856,7 +859,6 @@ errcode_t ext2fs_expand_extra_isize(ext2
+                                   int *needed_size)
+ {
+       struct ext2_inode *inode_buf = NULL;
+-      __u32 *eamagic = NULL;
+       struct ext2_ext_attr_header *header = NULL;
+       struct ext2_ext_attr_entry *entry = NULL, *last = NULL;
+       struct ext2_attr_ibody_find is = {
+@@ -894,10 +896,9 @@ retry:
+       if (inode->i_extra_isize >= new_extra_isize)
+               goto cleanup;
+-      eamagic = IHDR(inode);
+       start = (char *)inode + EXT2_GOOD_OLD_INODE_SIZE + inode->i_extra_isize;
+       /* No extended attributes present */
+-      if (*eamagic != EXT2_EXT_ATTR_MAGIC) {
++      if (IHDR(inode)->h_magic != EXT2_EXT_ATTR_MAGIC) {
+               memset(start, 0,
+                      EXT2_INODE_SIZE(fs->super) - EXT2_GOOD_OLD_INODE_SIZE -
+                      inode->i_extra_isize);
+Index: e2fsprogs/lib/ext2fs/Makefile.in
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/Makefile.in
++++ e2fsprogs/lib/ext2fs/Makefile.in
+@@ -152,6 +152,7 @@ SRCS= ext2_err.c \
+       $(srcdir)/tst_byteswap.c \
+       $(srcdir)/tst_getsize.c \
+       $(srcdir)/tst_iscan.c \
++      $(srcdir)/tst_read_ea.c \
+       $(srcdir)/undo_io.c \
+       $(srcdir)/unix_io.c \
+       $(srcdir)/unlink.c \
+@@ -224,6 +225,10 @@ tst_iscan: tst_iscan.o $(STATIC_LIBEXT2F
+       $(E) "  LD $@"
+       $(Q) $(CC) -o tst_iscan tst_iscan.o $(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
++tst_read_ea: tst_read_ea.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
++      $(E) "  LD $@"
++      $(Q) $(CC) -o tst_read_ea tst_read_ea.o $(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
++
+ tst_getsize: tst_getsize.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+       $(E) "  LD $@"
+       $(Q) $(CC) -o tst_getsize tst_getsize.o $(STATIC_LIBEXT2FS) \
+@@ -339,7 +344,7 @@ mkjournal: mkjournal.c $(STATIC_LIBEXT2F
+       $(E) "  LD $@"
+       $(Q) $(CC) -o mkjournal $(srcdir)/mkjournal.c -DDEBUG $(STATIC_LIBEXT2FS) $(LIBCOM_ERR) $(ALL_CFLAGS)
+-check:: tst_bitops tst_badblocks tst_iscan tst_types tst_icount tst_super_size tst_types tst_csum
++check:: tst_bitops tst_badblocks tst_iscan tst_types tst_icount tst_super_size tst_types tst_csum tst_read_ea
+       LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_bitops
+       LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_badblocks
+       LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_iscan
+@@ -347,6 +352,7 @@ check:: tst_bitops tst_badblocks tst_isc
+       LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_icount
+       LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_super_size
+       LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_csum
++      LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_read_ea
+ installdirs::
+       $(E) "  MKINSTALLDIRS $(libdir) $(includedir)/ext2fs"
+@@ -379,7 +385,7 @@ clean::
+               tst_badblocks tst_iscan ext2_err.et ext2_err.c ext2_err.h \
+               tst_byteswap tst_ismounted tst_getsize tst_sectgetsize \
+               tst_bitops tst_types tst_icount tst_super_size tst_csum \
+-              ext2_tdbtool mkjournal debug_cmds.c \
++              tst_read_ea ext2_tdbtool mkjournal debug_cmds.c \
+               ../libext2fs.a ../libext2fs_p.a ../libext2fs_chk.a
+ mostlyclean:: clean
+@@ -736,6 +742,11 @@ tst_iscan.o: $(srcdir)/tst_iscan.c $(src
+  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+  $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+  $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
++tst_read_ea.o: $(srcdir)/tst_read_ea.c $(srcdir)/ext2_fs.h \
++ $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
++ $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
++ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
++ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
+ undo_io.o: $(srcdir)/undo_io.c $(srcdir)/tdb.h $(srcdir)/ext2_fs.h \
+  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
+  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+Index: e2fsprogs/lib/ext2fs/tst_read_ea.c
+===================================================================
+--- /dev/null
++++ e2fsprogs/lib/ext2fs/tst_read_ea.c
+@@ -0,0 +1,219 @@
++/*
++ * tst_getsize.c --- this function tests the getsize function
++ *
++ * %Begin-Header%
++ * This file may be redistributed under the terms of the GNU Public
++ * License.
++ * %End-Header%
++ */
++
++#include <stdio.h>
++#include <string.h>
++#if HAVE_UNISTD_H
++#include <unistd.h>
++#endif
++#include <fcntl.h>
++#include <time.h>
++#include <sys/stat.h>
++#include <sys/types.h>
++#include <mntent.h>
++#include <assert.h>
++#if HAVE_ERRNO_H
++#include <errno.h>
++#endif
++
++#include "ext2_fs.h"
++#include "ext2fs.h"
++
++#define NR_XATTRS 256
++char tmpvalue[NR_XATTRS + 1];
++
++struct ea {
++      char *name;
++      char *value;
++};
++
++struct ea *ea_table;
++
++static void init_ea_table(void)
++{
++      int i;
++
++      ea_table = malloc(sizeof(struct ea) * NR_XATTRS);
++      if (ea_table == NULL) {
++              perror("maloc failed");
++              exit(1);
++      }
++      for (i = 0; i < NR_XATTRS; i ++) {
++              ea_table[i].name = malloc(i + 2 + strlen("user."));
++              if (ea_table[i].name == NULL) {
++                      perror("malloc failed");
++                      exit(1);
++              }
++              strcpy(ea_table[i].name, "user.");
++              memset(ea_table[i].name + strlen("user."), 'X', i + 1);
++              ea_table[i].name[i + 1 + strlen("user.")] = 0;
++
++              ea_table[i].value = malloc(NR_XATTRS - i + 1);
++              if (ea_table[i].value == NULL) {
++                      perror("malloc failed");
++                      exit(1);
++              }
++              memset(ea_table[i].value, 'Y', NR_XATTRS - i);
++              ea_table[i].value[NR_XATTRS - i] = 0;
++      }
++}
++
++static int set_xattrs(int fd)
++{
++      int i;
++
++      for (i = 0; i < NR_XATTRS; i ++) {
++              if (fsetxattr(fd, ea_table[i].name, ea_table[i].value,
++                            NR_XATTRS - i + 1, XATTR_CREATE) == -1) {
++                      if (errno != ENOSPC) {
++                              perror("fsetxattr failed");
++                              exit(1);
++                      }
++                      break;
++              }
++      }
++      printf("\t%d xattrs are set\n", i);
++      return i;
++}
++
++void get_xattrs1(int fd, int nr)
++{
++      int i;
++      ssize_t size;
++
++      printf("\ttesting fgetxattr .. "); fflush(stdout);
++
++      for (i = 0; i < nr; i ++) {
++              size = fgetxattr(fd, ea_table[i].name, tmpvalue,
++                               NR_XATTRS - i + 1);
++              if (size == -1) {
++                      perror("fgetxattr failed");
++                      exit(1);
++              }
++              if (memcmp(ea_table[i].value, tmpvalue, nr - i + 1)) {
++                      fprintf(stderr, "value mismatch");
++                      exit(1);
++              }
++      }
++
++      printf("%d xattrs are checked, ok\n", i);
++}
++
++void get_xattrs2(const char *device, ext2_ino_t ino, int nr)
++{
++      ext2_filsys fs;
++      int i;
++      struct ext2_inode *inode;
++      errcode_t err;
++      int size;
++
++      printf("\ttesting ext2fs_attr_get .. "); fflush(stdout);
++
++      err = ext2fs_open(device, 0, 0, 0, unix_io_manager, &fs);
++      assert(err == 0);
++
++      err = ext2fs_get_mem(EXT2_INODE_SIZE(fs->super), &inode);
++      if (err) {
++              com_err("get_xattrs2", err, "allocating memory");
++              exit(1);
++      }
++
++      err = ext2fs_read_inode_full(fs, ino, inode,
++                                   EXT2_INODE_SIZE(fs->super));
++      if (err) {
++              com_err("get_xattrs2", err, "reading inode");
++              exit(1);
++      }
++      for (i = 0; i < nr; i ++) {
++              err = ext2fs_attr_get(fs, inode, EXT2_ATTR_INDEX_USER,
++                                    ea_table[i].name + strlen("user."),
++                                    tmpvalue, sizeof(tmpvalue), &size);
++              if (err) {
++                      com_err("get_xattrs2", err, "getting xattr");
++                      exit(1);
++              }
++              assert(size == (NR_XATTRS - i + 1));
++
++              if (memcmp(ea_table[i].value, tmpvalue, size)) {
++                      fprintf(stderr, "value mismatch");
++                      exit(1);
++              }
++      }
++      ext2fs_close(fs);
++
++      printf("%d xattrs are checked, ok\n", i);
++}
++
++int main(int argc, const char *argv[])
++{
++      ext2_filsys fs;
++      FILE *f;
++      struct mntent *mnt;
++      char *name;
++      int fd;
++      errcode_t err;
++      struct stat st;
++      int nr;
++      int tested = 0;
++
++      initialize_ext2_error_table();
++
++      init_ea_table();
++
++      f = setmntent(MOUNTED, "r");
++      if (!f) {
++              fprintf(stderr, "failed to setmntent\n");
++              return 1;
++      }
++
++      while ((mnt = getmntent(f)) != NULL) {
++              if (hasmntopt(mnt, "user_xattr") == NULL)
++                      continue;
++              err = ext2fs_open(mnt->mnt_fsname, 0, 0, 0,
++                                unix_io_manager, &fs);
++              if (err) {
++                      com_err("tst_read_ea", err,
++                              "opening fs %s:%s",
++                              mnt->mnt_fsname, mnt->mnt_type);
++                      continue;
++              }
++              ext2fs_close(fs);
++
++              printf("(%s)%s:%s\n", mnt->mnt_type, mnt->mnt_fsname, mnt->mnt_dir);
++
++              asprintf(&name, "%s/readeaXXXXXX", mnt->mnt_dir);
++              fd = mkstemp(name);
++              if (fd == -1) {
++                      perror("mkstemp failed");
++                      exit(1);
++              }
++              if (fstat(fd, &st)) {
++                      perror("fstat failed");
++                      exit(1);
++              }
++              nr = set_xattrs(fd);
++
++              sync();
++              get_xattrs1(fd, nr);
++              close(fd);
++
++              get_xattrs2(mnt->mnt_fsname, st.st_ino, nr);
++
++              unlink(name);
++              free(name);
++              tested = 1;
++      }
++      endmntent(f);
++
++      if (!tested)
++              fprintf(stderr,
++                      "\tno ext2 based filesystems mounted with user_xattr\n"
++                      "\thope it is ok\n");
++      return 0;
++}
diff --git a/patches/e2fsprogs-bad-ininode-ea.patch b/patches/e2fsprogs-bad-ininode-ea.patch
new file mode 100644 (file)
index 0000000..5ee01d2
--- /dev/null
@@ -0,0 +1,51 @@
+Add check for in-inode xattr to make sure that it is not referencing an offset
+that is beyond the end of the inode.
+
+Index: e2fsprogs/e2fsck/pass1.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1.c
++++ e2fsprogs/e2fsck/pass1.c
+@@ -319,6 +319,13 @@ static void check_ea_in_inode(e2fsck_t c
+                       goto fix;
+               }
++              /* Value size cannot be larger than EA space in inode */
++              if (entry->e_value_offs > storage_size ||
++                  entry->e_value_offs + entry->e_value_size > storage_size) {
++                      problem = PR_1_INODE_EA_BAD_VALUE;
++                      goto fix;
++              }
++
+               hash = ext2fs_ext_attr_hash_entry(entry,
+                                                 start + entry->e_value_offs);
+Index: e2fsprogs/e2fsck/problem.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.c
++++ e2fsprogs/e2fsck/problem.c
+@@ -890,6 +890,11 @@ static struct e2fsck_problem problem_tab
+            "(size %Is, lblk %r)\n"),
+         PROMPT_CLEAR, PR_PREEN_OK },
++      /* Bad extended attribute value in inode */
++      { PR_1_INODE_EA_BAD_VALUE,
++        N_("@a in @i %i is corrupt (@n value)."),
++        PROMPT_CLEAR, 0},
++
+       /* Pass 1b errors */
+       /* Pass 1B: Rescan for duplicate/bad blocks */
+Index: e2fsprogs/e2fsck/problem.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.h
++++ e2fsprogs/e2fsck/problem.h
+@@ -520,6 +520,9 @@ struct problem_context {
+ /* EOFBLOCKS flag set when not necessary */
+ #define PR_1_EOFBLOCKS_FL_SET         0x010060
++/* Bad extended attribute value in inode */
++#define PR_1_INODE_EA_BAD_VALUE               0x010061
++
+ /*
+  * Pass 1b errors
+  */
diff --git a/patches/e2fsprogs-bigjournal.patch b/patches/e2fsprogs-bigjournal.patch
new file mode 100644 (file)
index 0000000..db69e55
--- /dev/null
@@ -0,0 +1,382 @@
+Allow an internal journal size larger than 2^32 bytes.  The
+write_journal_inode() code is only setting the low 32-bit i_size for
+the journal size, fix it to set i_size_high also.
+
+Use s_jnl_blocks[15] to store the journal i_size_high backup.  This
+field is currently unused, as EXT2_N_BLOCKS is 15, so it is using
+s_jnl_blocks[0..14], and i_size is in s_jnl_blocks[16].
+
+Rename the "size" argument to "blocks" for the journal creation functions
+to make it clear that this parameter is in units of blocks and not bytes.
+
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/debugfs/logdump.c
+===================================================================
+--- e2fsprogs.orig/debugfs/logdump.c
++++ e2fsprogs/debugfs/logdump.c
+@@ -209,6 +209,7 @@ void do_logdump(int argc, char **argv)
+                       memset(&journal_inode, 0, sizeof(struct ext2_inode));
+                       memcpy(&journal_inode.i_block[0], es->s_jnl_blocks,
+                              EXT2_N_BLOCKS*4);
++                      journal_inode.i_size_high = es->s_jnl_blocks[15];
+                       journal_inode.i_size = es->s_jnl_blocks[16];
+                       journal_inode.i_links_count = 1;
+                       journal_inode.i_mode = LINUX_S_IFREG | 0600;
+Index: e2fsprogs/e2fsck/journal.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/journal.c
++++ e2fsprogs/e2fsck/journal.c
+@@ -288,6 +288,7 @@ static errcode_t e2fsck_get_journal(e2fs
+                       memset(&j_inode->i_ext2, 0, sizeof(struct ext2_inode));
+                       memcpy(&j_inode->i_ext2.i_block[0], sb->s_jnl_blocks,
+                              EXT2_N_BLOCKS*4);
++                      j_inode->i_ext2.i_size_high = sb->s_jnl_blocks[15];
+                       j_inode->i_ext2.i_size = sb->s_jnl_blocks[16];
+                       j_inode->i_ext2.i_links_count = 1;
+                       j_inode->i_ext2.i_mode = LINUX_S_IFREG | 0600;
+@@ -301,7 +302,7 @@ static errcode_t e2fsck_get_journal(e2fs
+                       retval = EXT2_ET_NO_JOURNAL;
+                       goto try_backup_journal;
+               }
+-              if (j_inode->i_ext2.i_size / journal->j_blocksize <
++              if (EXT2_I_SIZE(&j_inode->i_ext2) / journal->j_blocksize <
+                   JFS_MIN_JOURNAL_BLOCKS) {
+                       retval = EXT2_ET_JOURNAL_TOO_SMALL;
+                       goto try_backup_journal;
+@@ -310,8 +311,8 @@ static errcode_t e2fsck_get_journal(e2fs
+               retval = ext2fs_block_iterate3(ctx->fs, j_inode->i_ino,
+                                              BLOCK_FLAG_HOLE, 0,
+                                              process_journal_block, &pb);
+-              if ((pb.last_block+1) * ctx->fs->blocksize <
+-                  j_inode->i_ext2.i_size) {
++              if ((pb.last_block + 1) * ctx->fs->blocksize <
++                  EXT2_I_SIZE(&j_inode->i_ext2)) {
+                       retval = EXT2_ET_JOURNAL_TOO_SMALL;
+                       goto try_backup_journal;
+               }
+@@ -322,7 +323,8 @@ static errcode_t e2fsck_get_journal(e2fs
+                               goto errout;
+               }
+-              journal->j_maxlen = j_inode->i_ext2.i_size / journal->j_blocksize;
++              journal->j_maxlen = EXT2_I_SIZE(&j_inode->i_ext2) /
++                      journal->j_blocksize;
+ #ifdef USE_INODE_IO
+               retval = ext2fs_inode_io_intern2(ctx->fs, sb->s_journal_inum,
+@@ -943,6 +945,7 @@ void e2fsck_move_ext3_journal(e2fsck_t c
+               if (fix_problem(ctx, PR_0_BACKUP_JNL, &pctx)) {
+                       memcpy(sb->s_jnl_blocks, inode.i_block,
+                              EXT2_N_BLOCKS*4);
++                      sb->s_jnl_blocks[15] = inode.i_size_high;
+                       sb->s_jnl_blocks[16] = inode.i_size;
+                       sb->s_jnl_backup_type = EXT3_JNL_BACKUP_BLOCKS;
+                       ext2fs_mark_super_dirty(fs);
+Index: e2fsprogs/e2fsck/unix.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/unix.c
++++ e2fsprogs/e2fsck/unix.c
+@@ -1374,7 +1374,8 @@ print_unsupp_features:
+        * find the default journal size.
+        */
+       if (sb->s_jnl_backup_type == EXT3_JNL_BACKUP_BLOCKS)
+-              journal_size = sb->s_jnl_blocks[16] >> 20;
++              journal_size = (sb->s_jnl_blocks[15] << (32 - 20)) |
++                             (sb->s_jnl_blocks[16] >> 20);
+       else
+               journal_size = -1;
+Index: e2fsprogs/lib/ext2fs/ext2fs.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2fs.h
++++ e2fsprogs/lib/ext2fs/ext2fs.h
+@@ -1250,11 +1250,11 @@ extern errcode_t ext2fs_zero_blocks(ext2
+ extern errcode_t ext2fs_zero_blocks2(ext2_filsys fs, blk64_t blk, int num,
+                                    blk64_t *ret_blk, int *ret_count); 
+ extern errcode_t ext2fs_create_journal_superblock(ext2_filsys fs,
+-                                                __u32 size, int flags,
++                                                __u32 blocks, int flags,
+                                                 char  **ret_jsb);
+ extern errcode_t ext2fs_add_journal_device(ext2_filsys fs,
+                                          ext2_filsys journal_dev);
+-extern errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t size,
++extern errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t blocks,
+                                         int flags);
+ extern int ext2fs_default_journal_size(__u64 blocks);
+Index: e2fsprogs/lib/ext2fs/mkjournal.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/mkjournal.c
++++ e2fsprogs/lib/ext2fs/mkjournal.c
+@@ -42,13 +42,13 @@
+  * returns it as an allocated block.
+  */
+ errcode_t ext2fs_create_journal_superblock(ext2_filsys fs,
+-                                         __u32 size, int flags,
++                                         __u32 blocks, int flags,
+                                          char  **ret_jsb)
+ {
+       errcode_t               retval;
+       journal_superblock_t    *jsb;
+-      if (size < 1024)
++      if (blocks < 1024)
+               return EXT2_ET_JOURNAL_TOO_SMALL;
+       if ((retval = ext2fs_get_mem(fs->blocksize, &jsb)))
+@@ -62,7 +62,7 @@ errcode_t ext2fs_create_journal_superblo
+       else
+               jsb->s_header.h_blocktype = htonl(JFS_SUPERBLOCK_V2);
+       jsb->s_blocksize = htonl(fs->blocksize);
+-      jsb->s_maxlen = htonl(size);
++      jsb->s_maxlen = htonl(blocks);
+       jsb->s_nr_users = htonl(1);
+       jsb->s_first = htonl(1);
+       jsb->s_sequence = htonl(1);
+@@ -90,14 +90,14 @@ errcode_t ext2fs_create_journal_superblo
+  * filesystems.
+  */
+ static errcode_t write_journal_file(ext2_filsys fs, char *filename,
+-                                  blk_t size, int flags)
++                                  blk_t blocks, int flags)
+ {
+       errcode_t       retval;
+       char            *buf = 0;
+       int             fd, ret_size;
+       blk_t           i;
+-      if ((retval = ext2fs_create_journal_superblock(fs, size, flags, &buf)))
++      if ((retval = ext2fs_create_journal_superblock(fs, blocks, flags,&buf)))
+               return retval;
+       /* Open the device or journal file */
+@@ -117,7 +117,7 @@ static errcode_t write_journal_file(ext2
+               goto errout;
+       memset(buf, 0, fs->blocksize);
+-      for (i = 1; i < size; i++) {
++      for (i = 1; i < blocks; i++) {
+               ret_size = write(fd, buf, fs->blocksize);
+               if (ret_size < 0) {
+                       retval = errno;
+@@ -284,15 +284,16 @@ static int mkjournal_proc(ext2_filsys    fs
+  * This function creates a journal using direct I/O routines.
+  */
+ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
+-                                   blk64_t size, int flags)
++                                   blk_t blocks, int flags)
+ {
+       char                    *buf;
+       dgrp_t                  group, start, end, i, log_flex;
+       errcode_t               retval;
+       struct ext2_inode       inode;
++      unsigned long long      inode_size;
+       struct mkjournal_struct es;
+-      if ((retval = ext2fs_create_journal_superblock(fs, size, flags, &buf)))
++      if ((retval = ext2fs_create_journal_superblock(fs, blocks, flags, &buf)))
+               return retval;
+       if ((retval = ext2fs_read_bitmaps(fs)))
+@@ -304,7 +305,7 @@ static errcode_t write_journal_inode(ext
+       if (inode.i_blocks > 0)
+               return EEXIST;
+-      es.num_blocks = size;
++      es.num_blocks = blocks;
+       es.newblocks = 0;
+       es.buf = buf;
+       es.err = 0;
+@@ -360,7 +361,12 @@ static errcode_t write_journal_inode(ext
+       if ((retval = ext2fs_read_inode(fs, journal_ino, &inode)))
+               goto errout;
+-      inode.i_size += fs->blocksize * size;
++      inode_size = (unsigned long long)fs->blocksize * blocks;
++      inode.i_size = inode_size & 0xFFFFFFFF;
++      inode.i_size_high = (inode_size >> 32) & 0xFFFFFFFF;
++      if (inode.i_size_high)
++              fs->super->s_feature_ro_compat |=
++                      EXT2_FEATURE_RO_COMPAT_LARGE_FILE;
+       ext2fs_iblk_add_blocks(fs, &inode, es.newblocks);
+       inode.i_mtime = inode.i_ctime = fs->now ? fs->now : time(0);
+       inode.i_links_count = 1;
+@@ -371,6 +377,7 @@ static errcode_t write_journal_inode(ext
+       retval = 0;
+       memcpy(fs->super->s_jnl_blocks, inode.i_block, EXT2_N_BLOCKS*4);
++      fs->super->s_jnl_blocks[15] = inode.i_size_high;
+       fs->super->s_jnl_blocks[16] = inode.i_size;
+       fs->super->s_jnl_backup_type = EXT3_JNL_BACKUP_BLOCKS;
+       ext2fs_mark_super_dirty(fs);
+@@ -467,7 +474,7 @@ errcode_t ext2fs_add_journal_device(ext2
+  * POSIX routines if the filesystem is mounted, or using direct I/O
+  * functions if it is not.
+  */
+-errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t size, int flags)
++errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t blocks, int flags)
+ {
+       errcode_t               retval;
+       ext2_ino_t              journal_ino;
+@@ -504,7 +511,7 @@ errcode_t ext2fs_add_journal_inode(ext2_
+               if ((fd = open(jfile, O_CREAT|O_WRONLY, 0600)) < 0)
+                       return errno;
+-              if ((retval = write_journal_file(fs, jfile, size, flags)))
++              if ((retval = write_journal_file(fs, jfile, blocks, flags)))
+                       goto errout;
+               /* Get inode number of the journal file */
+@@ -544,7 +551,7 @@ errcode_t ext2fs_add_journal_inode(ext2_
+               }
+               journal_ino = EXT2_JOURNAL_INO;
+               if ((retval = write_journal_inode(fs, journal_ino,
+-                                                size, flags)))
++                                                blocks, flags)))
+                       return retval;
+       }
+Index: e2fsprogs/lib/ext2fs/swapfs.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/swapfs.c
++++ e2fsprogs/lib/ext2fs/swapfs.c
+@@ -81,16 +81,16 @@ void ext2fs_swap_super(struct ext2_super
+               sb->s_hash_seed[i] = ext2fs_swab32(sb->s_hash_seed[i]);
+       /* if journal backup is for a valid extent-based journal... */
+-      if (!ext2fs_extent_header_verify(sb->s_jnl_blocks,
+-                                       sizeof(sb->s_jnl_blocks))) {
+-              /* ... swap only the journal i_size */
+-              sb->s_jnl_blocks[16] = ext2fs_swab32(sb->s_jnl_blocks[16]);
+-              /* and the extent data is not swapped on read */
+-              return;
++      if (ext2fs_extent_header_verify(sb->s_jnl_blocks,
++                                      sizeof(sb->s_jnl_blocks)) == 0) {
++              /* ... swap only the journal i_size and i_size_high,
++               * and the extent data is not swapped on read */
++              i = 15;
++      } else {
++              /* direct/indirect journal: swap it all */
++              i = 0;
+       }
+-
+-      /* direct/indirect journal: swap it all */
+-      for (i=0; i < 17; i++)
++      for (; i < 17; i++)
+               sb->s_jnl_blocks[i] = ext2fs_swab32(sb->s_jnl_blocks[i]);
+ }
+Index: e2fsprogs/resize/resize2fs.c
+===================================================================
+--- e2fsprogs.orig/resize/resize2fs.c
++++ e2fsprogs/resize/resize2fs.c
+@@ -1879,6 +1879,7 @@ static errcode_t fix_sb_journal_backup(e
+       if (retval)
+               return retval;
+       memcpy(fs->super->s_jnl_blocks, inode.i_block, EXT2_N_BLOCKS*4);
++      fs->super->s_jnl_blocks[15] = inode.i_size_high;
+       fs->super->s_jnl_blocks[16] = inode.i_size;
+       fs->super->s_jnl_backup_type = EXT3_JNL_BACKUP_BLOCKS;
+       ext2fs_mark_super_dirty(fs);
+Index: e2fsprogs/tests/m_extent_journal/expect.1
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/m_extent_journal/expect.1
+@@ -0,0 +1,84 @@
++Filesystem label=
++OS type: Linux
++Block size=2048 (log=1)
++Fragment size=2048 (log=1)
++Stride=0 blocks, Stripe width=0 blocks
++16384 inodes, 32768 blocks
++1638 blocks (5.00%) reserved for the super user
++First data block=0
++Maximum filesystem blocks=33554432
++2 block groups
++16384 blocks per group, 16384 fragments per group
++8192 inodes per group
++Superblock backups stored on blocks: 
++      16384
++
++Allocating group tables: 0/2\b\b\b1/2\b\b\b   \b\b\bdone                            
++Writing inode tables: 0/2\b\b\b1/2\b\b\b   \b\b\bdone                            
++Creating journal (4096 blocks): done
++Writing superblocks and filesystem accounting information: 0/2\b\b\b1/2\b\b\b   \b\b\bdone
++
++0/2\b\b\b1/2\b\b\b   \b\b\bFilesystem features: has_journal ext_attr resize_inode dir_index filetype extent sparse_super
++ 
++Pass 1: Checking inodes, blocks, and sizes
++Pass 2: Checking directory structure
++Pass 3: Checking directory connectivity
++Pass 4: Checking reference counts
++Pass 5: Checking group summary information
++test_filesys: 11/16384 files (0.0% non-contiguous), 5200/32768 blocks
++Exit status is 0
++
++Filesystem volume name:   <none>
++Last mounted on:          <not available>
++Filesystem magic number:  0xEF53
++Filesystem revision #:    1 (dynamic)
++Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent sparse_super
++Default mount options:    (none)
++Filesystem state:         clean
++Errors behavior:          Continue
++Filesystem OS type:       Linux
++Inode count:              16384
++Block count:              32768
++Reserved block count:     1638
++Free blocks:              27568
++Free inodes:              16373
++First block:              0
++Block size:               2048
++Fragment size:            2048
++Reserved GDT blocks:      31
++Blocks per group:         16384
++Fragments per group:      16384
++Inodes per group:         8192
++Inode blocks per group:   512
++Mount count:              0
++Check interval:           15552000 (6 months)
++Reserved blocks uid:      0
++Reserved blocks gid:      0
++First inode:              11
++Inode size:             128
++Journal inode:            8
++Default directory hash:   half_md4
++Journal backup:           inode blocks
++Journal features:         (none)
++Journal size:             8M
++Journal length:           4096
++Journal sequence:         0x00000001
++Journal start:            0
++
++
++Group 0: (Blocks 0-16383)
++  Primary superblock at 0, Group descriptors at 1-1
++  Reserved GDT blocks at 2-32
++  Block bitmap at 33 (+33), Inode bitmap at 34 (+34)
++  Inode table at 35-546 (+35)
++  15827 free blocks, 8181 free inodes, 2 directories
++  Free blocks: 557-16383
++  Free inodes: 12-8192
++Group 1: (Blocks 16384-32767)
++  Backup superblock at 16384, Group descriptors at 16385-16385
++  Reserved GDT blocks at 16386-16416
++  Block bitmap at 16417 (+33), Inode bitmap at 16418 (+34)
++  Inode table at 16419-16930 (+35)
++  11741 free blocks, 8192 free inodes, 0 directories
++  Free blocks: 21027-32767
++  Free inodes: 8193-16384
+Index: e2fsprogs/tests/m_extent_journal/script
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/m_extent_journal/script
+@@ -0,0 +1,7 @@
++DESCRIPTION="extent-mapped journal"
++FS_SIZE=65536
++MKE2FS_DEVICE_SECTSIZE=2048
++export MKE2FS_DEVICE_SECTSIZE
++MKE2FS_OPTS="-O extents -j"
++. $cmd_dir/run_mke2fs
++unset MKE2FS_DEVICE_SECTSIZE
diff --git a/patches/e2fsprogs-blkid-zfs.patch b/patches/e2fsprogs-blkid-zfs.patch
new file mode 100644 (file)
index 0000000..581ab4e
--- /dev/null
@@ -0,0 +1,59 @@
+Fix the ZFS device detection by looking at multiple uberblocks to see if
+any are present, rather than looking for the ZFS boot block which is not
+always present.
+
+There may be up to 128 uberblocks, but the first 4 are not written to disk
+on a newly-formatted filesystem so check several of them at different
+offsets within the uberblock array.
+
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/lib/blkid/probe.h
+===================================================================
+--- e2fsprogs.orig/lib/blkid/probe.h
++++ e2fsprogs/lib/blkid/probe.h
+@@ -193,6 +193,16 @@ struct jfs_super_block {
+       unsigned char   js_loguuid[16];
+ };
++#define UBERBLOCK_MAGIC         0x00bab10c              /* oo-ba-bloc!  */
++struct zfs_uberblock {
++      __u64           ub_magic;       /* UBERBLOCK_MAGIC              */
++      __u64           ub_version;     /* ZFS_VERSION                  */
++      __u64           ub_txg;         /* txg of last sync             */
++      __u64           ub_guid_sum;    /* sum of all vdev guids        */
++      __u64           ub_timestamp;   /* UTC time of last sync        */
++      char            ub_rootbp;      /* MOS objset_phys_t            */
++};
++
+ struct romfs_super_block {
+       unsigned char   ros_magic[8];
+       __u32           ros_dummy1[2];
+Index: e2fsprogs/lib/blkid/probe.c
+===================================================================
+--- e2fsprogs.orig/lib/blkid/probe.c
++++ e2fsprogs/lib/blkid/probe.c
+@@ -1434,10 +1434,19 @@ static struct blkid_magic type_array[] =
+   { "iso9660",        32,      1,  5, "CD001",                probe_iso9660 },
+   { "iso9660",        32,      9,  5, "CDROM",                probe_iso9660 },
+   { "jfs",    32,      0,  4, "JFS1",                 probe_jfs },
+-  { "zfs",       8,    0,  8, "\0\0\x02\xf5\xb0\x07\xb1\x0c", probe_zfs },
+-  { "zfs",       8,    0,  8, "\x0c\xb1\x07\xb0\xf5\x02\0\0", probe_zfs },
+-  { "zfs",     264,    0,  8, "\0\0\x02\xf5\xb0\x07\xb1\x0c", probe_zfs },
+-  { "zfs",     264,    0,  8, "\x0c\xb1\x07\xb0\xf5\x02\0\0", probe_zfs },
++  /* ZFS has 128 root blocks (#4 is the first used), check only 6 of them */
++  { "zfs",     128,    0,  8, "\0\0\0\0\0\xba\xb1\x0c", probe_zfs },
++  { "zfs",     128,    0,  8, "\x0c\xb1\xba\0\0\0\0\0", probe_zfs },
++  { "zfs",     132,    0,  8, "\0\0\0\0\0\xba\xb1\x0c", probe_zfs },
++  { "zfs",     132,    0,  8, "\x0c\xb1\xba\0\0\0\0\0", probe_zfs },
++  { "zfs",     136,    0,  8, "\0\0\0\0\0\xba\xb1\x0c", probe_zfs },
++  { "zfs",     136,    0,  8, "\x0c\xb1\xba\0\0\0\0\0", probe_zfs },
++  { "zfs",     384,    0,  8, "\0\0\0\0\0\xba\xb1\x0c", probe_zfs },
++  { "zfs",     384,    0,  8, "\x0c\xb1\xba\0\0\0\0\0", probe_zfs },
++  { "zfs",     388,    0,  8, "\0\0\0\0\0\xba\xb1\x0c", probe_zfs },
++  { "zfs",     388,    0,  8, "\x0c\xb1\xba\0\0\0\0\0", probe_zfs },
++  { "zfs",     392,    0,  8, "\0\0\0\0\0\xba\xb1\x0c", probe_zfs },
++  { "zfs",     392,    0,  8, "\x0c\xb1\xba\0\0\0\0\0", probe_zfs },
+   { "hfsplus",         1,      0,  2, "BD",                   probe_hfsplus },
+   { "hfsplus",         1,      0,  2, "H+",                   probe_hfsplus },
+   { "hfsplus",         1,      0,  2, "HX",                   probe_hfsplus },
diff --git a/patches/e2fsprogs-config-before-cmdline.patch b/patches/e2fsprogs-config-before-cmdline.patch
new file mode 100644 (file)
index 0000000..e098fae
--- /dev/null
@@ -0,0 +1,55 @@
+The patch changes the order that the config file and command line are
+parsed so that command line has precedence.  It also parses the -E
+option for every occurrence, otherwise the -E option is not cumulative.
+
+Signed-off-by: Jim Garlick <garlick@llnl.gov>
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/e2fsck/unix.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/unix.c
++++ e2fsprogs/e2fsck/unix.c
+@@ -654,7 +654,6 @@ static errcode_t PRS(int argc, char *arg
+ #ifdef HAVE_SIGNAL_H
+       struct sigaction        sa;
+ #endif
+-      char            *extended_opts = 0;
+       char            *cp;
+       int             res;            /* result of sscanf */
+ #ifdef CONFIG_JBD_DEBUG
+@@ -686,6 +685,12 @@ static errcode_t PRS(int argc, char *arg
+       else
+               ctx->program_name = "e2fsck";
++      if ((cp = getenv("E2FSCK_CONFIG")) != NULL)
++              config_fn[0] = cp;
++      profile_set_syntax_err_cb(syntax_err_report);
++      profile_init(config_fn, &ctx->profile);
++
++
+       while ((c = getopt (argc, argv, "panyrcC:B:dE:fvtFVM:b:I:j:P:l:L:N:SsDk")) != EOF)
+               switch (c) {
+               case 'C':
+@@ -716,7 +721,7 @@ static errcode_t PRS(int argc, char *arg
+                       ctx->options |= E2F_OPT_COMPRESS_DIRS;
+                       break;
+               case 'E':
+-                      extended_opts = optarg;
++                      parse_extended_opts(ctx, optarg);
+                       break;
+               case 'p':
+               case 'a':
+@@ -851,13 +856,6 @@ static errcode_t PRS(int argc, char *arg
+                       argv[optind]);
+               fatal_error(ctx, 0);
+       }
+-      if (extended_opts)
+-              parse_extended_opts(ctx, extended_opts);
+-
+-      if ((cp = getenv("E2FSCK_CONFIG")) != NULL)
+-              config_fn[0] = cp;
+-      profile_set_syntax_err_cb(syntax_err_report);
+-      profile_init(config_fn, &ctx->profile);
+       if (flush) {
+               fd = open(ctx->filesystem_name, O_RDONLY, 0);
diff --git a/patches/e2fsprogs-count_wrong_valid.patch b/patches/e2fsprogs-count_wrong_valid.patch
new file mode 100644 (file)
index 0000000..eb44569
--- /dev/null
@@ -0,0 +1,52 @@
+Don't consider only an error in the superblock summary as incorrect.
+The kernel does not update this field except at unmount time.  Any
+other unfixed errors will themselves mark the filesystem invalid.
+
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/e2fsck/pass5.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass5.c
++++ e2fsprogs/e2fsck/pass5.c
+@@ -401,8 +401,7 @@ redo_counts:
+               if (fix_problem(ctx, PR_5_FREE_BLOCK_COUNT, &pctx)) {
+                       ext2fs_free_blocks_count_set(fs->super, free_blocks);
+                       ext2fs_mark_super_dirty(fs);
+-              } else
+-                      ext2fs_unmark_valid(fs);
++              }
+       }
+ errout:
+       ext2fs_free_mem(&free_array);
+@@ -679,8 +678,7 @@ do_counts:
+               if (fix_problem(ctx, PR_5_FREE_INODE_COUNT, &pctx)) {
+                       fs->super->s_free_inodes_count = free_inodes;
+                       ext2fs_mark_super_dirty(fs);
+-              } else
+-                      ext2fs_unmark_valid(fs);
++              }
+       }
+ errout:
+       ext2fs_free_mem(&free_array);
+Index: e2fsprogs/e2fsck/problem.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.c
++++ e2fsprogs/e2fsck/problem.c
+@@ -1571,7 +1571,7 @@ static struct e2fsck_problem problem_tab
+       /* Free inodes count wrong */
+       { PR_5_FREE_INODE_COUNT,
+         N_("Free @is count wrong (%i, counted=%j).\n"),
+-        PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG },
++        PROMPT_FIX, PR_PREEN_OK | PR_NO_OK | PR_PREEN_NOMSG },
+       /* Free blocks count for group wrong */
+       { PR_5_FREE_BLOCK_COUNT_GROUP,
+@@ -1581,7 +1581,7 @@ static struct e2fsck_problem problem_tab
+       /* Free blocks count wrong */
+       { PR_5_FREE_BLOCK_COUNT,
+         N_("Free @bs count wrong (%b, counted=%c).\n"),
+-        PROMPT_FIX, PR_PREEN_OK | PR_PREEN_NOMSG },
++        PROMPT_FIX, PR_PREEN_OK | PR_NO_OK | PR_PREEN_NOMSG },
+       /* Programming error: bitmap endpoints don't match */
+       { PR_5_BMAP_ENDPOINTS,
diff --git a/patches/e2fsprogs-data_in_dirent.patch b/patches/e2fsprogs-data_in_dirent.patch
new file mode 100644 (file)
index 0000000..bb2db8b
--- /dev/null
@@ -0,0 +1,567 @@
+Index: e2fsprogs/lib/blkid/probe.h
+===================================================================
+--- e2fsprogs.orig/lib/blkid/probe.h
++++ e2fsprogs/lib/blkid/probe.h
+@@ -120,6 +120,7 @@ struct ext2_super_block {
+ #define EXT4_FEATURE_INCOMPAT_MMP             0x0100
+ #define EXT4_FEATURE_INCOMPAT_FLEX_BG         0x0200
+ #define EXT4_FEATURE_INCOMPAT_EA_INODE                0x0400
++#define EXT4_FEATURE_INCOMPAT_DIRDATA         0x1000
+ #define EXT2_FEATURE_RO_COMPAT_SUPP   (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
+Index: e2fsprogs/lib/e2p/feature.c
+===================================================================
+--- e2fsprogs.orig/lib/e2p/feature.c
++++ e2fsprogs/lib/e2p/feature.c
+@@ -78,6 +78,8 @@ static struct feature feature_list[] = {
+                       "mmp" },
+       {       E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_EA_INODE,
+                       "large_xattr" },
++      {       E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_DIRDATA,
++                      "dirdata" },
+       {       0, 0, 0 },
+ };
+Index: e2fsprogs/lib/ext2fs/ext2_fs.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2_fs.h
++++ e2fsprogs/lib/ext2fs/ext2_fs.h
+@@ -698,13 +698,27 @@ struct ext2_super_block {
+ #define EXT2_FEATURE_COMPAT_SUPP      0
+ #define EXT2_FEATURE_INCOMPAT_SUPP    (EXT2_FEATURE_INCOMPAT_FILETYPE| \
+                                      EXT4_FEATURE_INCOMPAT_MMP|\
+-                                     EXT4_FEATURE_INCOMPAT_EA_INODE)
++                                     EXT4_FEATURE_INCOMPAT_EA_INODE|\
++                                     EXT4_FEATURE_INCOMPAT_DIRDATA)
+ #define EXT2_FEATURE_RO_COMPAT_SUPP   (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
+                                        EXT4_FEATURE_RO_COMPAT_DIR_NLINK| \
+                                        EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE| \
+                                        EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
++#define EXT2_FT_MASK                  0x0f
++
++/* lu_fid size and NUL char */
++#define EXT2_DIRENT_LUFID_SIZE                (17 + 1)
++#define EXT2_DIRENT_LUFID             0x10
++#define EXT2_DIR_PAD                  4
++#define EXT2_DIR_ROUND                        (EXT2_DIR_PAD - 1)
++#define __EXT2_DIR_REC_LEN(len)               (((len) + 8 + EXT2_DIR_ROUND) & \
++                                       ~EXT2_DIR_ROUND)
++
++#define EXT2_DIR_REC_LEN(de)          (__EXT2_DIR_REC_LEN(de->name_len +\
++                                       ext2_get_dirent_size(de)))
++
+ /*
+  * Default values for user and/or group using reserved blocks
+  */
+@@ -770,16 +784,6 @@ struct ext2_dir_entry_2 {
+ #define EXT2_FT_MAX           8
+ /*
+- * EXT2_DIR_PAD defines the directory entries boundaries
+- *
+- * NOTE: It must be a multiple of 4
+- */
+-#define EXT2_DIR_PAD                  4
+-#define EXT2_DIR_ROUND                        (EXT2_DIR_PAD - 1)
+-#define EXT2_DIR_REC_LEN(name_len)    (((name_len) + 8 + EXT2_DIR_ROUND) & \
+-                                       ~EXT2_DIR_ROUND)
+-
+-/*
+  * This structure will be used for multiple mount protection. It will be
+  * written into the block number saved in the s_mmp_block field in the
+  * superblock. Programs that check MMP should assume that if SEQ_FSCK
+@@ -812,4 +816,7 @@ struct mmp_struct {
+  */
+ #define EXT2_MMP_MIN_CHECK_INTERVAL     5
++int ext2_get_dirent_dirdata_size(struct ext2_dir_entry_2 *de, char dirdata_flags);
++int ext2_get_dirent_size(struct ext2_dir_entry_2 *de);
++
+ #endif        /* _LINUX_EXT2_FS_H */
+Index: e2fsprogs/lib/ext2fs/ext2fs.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2fs.h
++++ e2fsprogs/lib/ext2fs/ext2fs.h
+@@ -572,6 +572,7 @@ typedef struct ext2_icount *ext2_icount_
+                                        EXT4_FEATURE_INCOMPAT_FLEX_BG|\
+                                        EXT4_FEATURE_INCOMPAT_MMP|\
+                                        EXT4_FEATURE_INCOMPAT_EA_INODE|\
++                                       EXT4_FEATURE_INCOMPAT_DIRDATA|\
+                                        EXT4_FEATURE_INCOMPAT_64BIT)
+ #else
+ #define EXT2_LIB_FEATURE_INCOMPAT_SUPP        (EXT2_FEATURE_INCOMPAT_FILETYPE|\
+@@ -582,6 +583,7 @@ typedef struct ext2_icount *ext2_icount_
+                                        EXT4_FEATURE_INCOMPAT_FLEX_BG|\
+                                        EXT4_FEATURE_INCOMPAT_MMP|\
+                                        EXT4_FEATURE_INCOMPAT_EA_INODE|\
++                                       EXT4_FEATURE_INCOMPAT_DIRDATA|\
+                                        EXT4_FEATURE_INCOMPAT_64BIT)
+ #endif
+ #define EXT2_LIB_FEATURE_RO_COMPAT_SUPP       (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|\
+@@ -1641,6 +1643,24 @@ _INLINE_ __u64 ext2fs_div64_ceil(__u64 a
+       return ((a - 1) / b) + 1;
+ }
++
++_INLINE_ struct ext2_dx_root_info* get_ext2_dx_root_info(ext2_filsys fs, char *buf)
++{
++      struct ext2_dir_entry_2 * de = (struct ext2_dir_entry_2 *) buf;
++
++      if (!(fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_DIRDATA))
++      return (struct ext2_dx_root_info *)(buf +
++      __EXT2_DIR_REC_LEN(1) +__EXT2_DIR_REC_LEN(2));
++
++      /* get dotdot first */
++      de = (struct ext2_dir_entry_2 *)((char *)de + de->rec_len);
++
++      /* dx root info is after dotdot entry */
++      de = (struct ext2_dir_entry_2 *)((char *)de + EXT2_DIR_REC_LEN(de));
++
++      return (struct ext2_dx_root_info*) de;
++}
++
+ #undef _INLINE_
+ #endif
+Index: e2fsprogs/misc/mke2fs.c
+===================================================================
+--- e2fsprogs.orig/misc/mke2fs.c
++++ e2fsprogs/misc/mke2fs.c
+@@ -815,6 +815,7 @@ static __u32 ok_features[3] = {
+               EXT4_FEATURE_INCOMPAT_FLEX_BG|
+               EXT4_FEATURE_INCOMPAT_EA_INODE|
+               EXT4_FEATURE_INCOMPAT_MMP |
++              EXT4_FEATURE_INCOMPAT_DIRDATA|
+               EXT4_FEATURE_INCOMPAT_64BIT,
+       /* R/O compat */
+       EXT2_FEATURE_RO_COMPAT_LARGE_FILE|
+Index: e2fsprogs/misc/tune2fs.c
+===================================================================
+--- e2fsprogs.orig/misc/tune2fs.c
++++ e2fsprogs/misc/tune2fs.c
+@@ -127,7 +127,8 @@ static __u32 ok_features[3] = {
+               EXT3_FEATURE_INCOMPAT_EXTENTS |
+               EXT4_FEATURE_INCOMPAT_FLEX_BG |
+               EXT4_FEATURE_INCOMPAT_EA_INODE|
+-              EXT4_FEATURE_INCOMPAT_MMP,
++              EXT4_FEATURE_INCOMPAT_MMP|
++              EXT4_FEATURE_INCOMPAT_DIRDATA,
+       /* R/O compat */
+       EXT2_FEATURE_RO_COMPAT_LARGE_FILE |
+               EXT4_FEATURE_RO_COMPAT_HUGE_FILE|
+@@ -146,7 +147,8 @@ static __u32 clear_ok_features[3] = {
+       EXT2_FEATURE_INCOMPAT_FILETYPE |
+               EXT4_FEATURE_INCOMPAT_FLEX_BG |
+               EXT4_FEATURE_INCOMPAT_EA_INODE|
+-              EXT4_FEATURE_INCOMPAT_MMP,
++              EXT4_FEATURE_INCOMPAT_MMP|
++              EXT4_FEATURE_INCOMPAT_DIRDATA,
+       /* R/O compat */
+       EXT2_FEATURE_RO_COMPAT_LARGE_FILE |
+               EXT4_FEATURE_RO_COMPAT_HUGE_FILE|
+Index: e2fsprogs/e2fsck/pass1.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1.c
++++ e2fsprogs/e2fsck/pass1.c
+@@ -2030,7 +2030,7 @@ static int handle_htree(e2fsck_t ctx, st
+       }
+       /* XXX should check that beginning matches a directory */
+-      root = (struct ext2_dx_root_info *) (block_buf + 24);
++      root = get_ext2_dx_root_info(fs, block_buf);
+       if ((root->reserved_zero || root->info_length < 8) &&
+           fix_problem(ctx, PR_1_HTREE_BADROOT, pctx))
+Index: e2fsprogs/e2fsck/pass2.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass2.c
++++ e2fsprogs/e2fsck/pass2.c
+@@ -329,13 +329,82 @@ static EXT2_QSORT_TYPE special_dir_block
+       return (int) (db_a->blockcnt - db_b->blockcnt);
+ }
++void ext2_fix_dirent_dirdata(struct ext2_dir_entry_2 *de)
++{
++      int i = 0, dirdatalen, rlen;
++      __u8 flags = 0, new_flag = 0;
++      __u8 de_flags = de->file_type & ~EXT2_FT_MASK;
++
++      while (i < 4) {
++
++              flags = new_flag | (1 << i) << 4;
++
++              if ((de_flags & flags) == flags) {
++
++                      dirdatalen = ext2_get_dirent_dirdata_size(de, flags);
++                      rlen = __EXT2_DIR_REC_LEN(de->name_len + dirdatalen);
++
++                      if (rlen > de->rec_len)
++                              break;
++
++                      new_flag |= flags;
++              }
++              i++;
++      }
++
++      de->file_type = (de->file_type & EXT2_FT_MASK) | new_flag;
++}
++
++
++/*
++ * check for dirent data in ext3 dirent.
++ * return 0 if dirent data is ok.
++ * return 1 if dirent data does not exist.
++ * return 2 if dirent was modified due to error.
++ */
++int e2fsck_check_dirent_data(e2fsck_t ctx, struct ext2_dir_entry_2 *de,
++                           unsigned int offset, struct problem_context *pctx)
++{
++      if (!(ctx->fs->super->s_feature_incompat &
++                      EXT4_FEATURE_INCOMPAT_DIRDATA)) {
++              if (de->file_type & ~EXT2_FT_MASK) {
++                      /* clear dirent extra data flags. */
++                      if (fix_problem(ctx, PR_2_CLEAR_DIRDATA, pctx)) {
++                              de->file_type &= EXT2_FT_MASK;
++                              return 2;
++                      }
++              }
++              return 1;
++      }
++      if (de->file_type & ~EXT2_FT_MASK) {
++              if (de->rec_len >= EXT2_DIR_REC_LEN(de) ||
++                 (de->rec_len + offset == EXT2_BLOCK_SIZE(ctx->fs->super))) {
++                      if (ext2_get_dirent_dirdata_size(de, EXT2_DIRENT_LUFID) ==
++                          EXT2_DIRENT_LUFID_SIZE)
++                              return 0;
++              }
++              /* just clear dirent data flags for now, we should fix FID data
++               * in lustre specific pass.
++               */
++              if (fix_problem(ctx, PR_2_CLEAR_DIRDATA, pctx)) {
++                      ext2_fix_dirent_dirdata(de);
++                      if (ext2_get_dirent_dirdata_size(de, EXT2_DIRENT_LUFID) !=
++                          EXT2_DIRENT_LUFID_SIZE) {
++                              de->file_type &= ~EXT2_DIRENT_LUFID;
++                      }
++
++                      return 2;
++              }
++      }
++      return 1;
++}
+ /*
+  * Make sure the first entry in the directory is '.', and that the
+  * directory entry is sane.
+  */
+ static int check_dot(e2fsck_t ctx,
+-                   struct ext2_dir_entry *dirent,
++                   struct ext2_dir_entry *dirent, unsigned int offset,
+                    ext2_ino_t ino, struct problem_context *pctx)
+ {
+       struct ext2_dir_entry *nextdir;
+@@ -343,6 +412,7 @@ static int check_dot(e2fsck_t ctx,
+       int     status = 0;
+       int     created = 0;
+       int     problem = 0;
++      int     dir_data_error;
+       if (!dirent->inode)
+               problem = PR_2_MISSING_DOT;
+@@ -352,10 +422,14 @@ static int check_dot(e2fsck_t ctx,
+       else if (dirent->name[1] != '\0')
+               problem = PR_2_DOT_NULL_TERM;
++      dir_data_error = e2fsck_check_dirent_data(ctx,
++                              (struct ext2_dir_entry_2 *)dirent,
++                              offset, pctx);
++
+       (void) ext2fs_get_rec_len(ctx->fs, dirent, &rec_len);
+       if (problem) {
+               if (fix_problem(ctx, problem, pctx)) {
+-                      if (rec_len < 12)
++                      if (rec_len < 12 && dir_data_error)
+                               rec_len = dirent->rec_len = 12;
+                       dirent->inode = ino;
+                       dirent->name_len = 1;
+@@ -371,7 +445,7 @@ static int check_dot(e2fsck_t ctx,
+                       status = 1;
+               }
+       }
+-      if (rec_len > 12) {
++      if (rec_len > 12 && dir_data_error) {
+               new_len = rec_len - 12;
+               if (new_len > 12) {
+                       if (created ||
+@@ -396,11 +470,12 @@ static int check_dot(e2fsck_t ctx,
+  * here; this gets done in pass 3.
+  */
+ static int check_dotdot(e2fsck_t ctx,
+-                      struct ext2_dir_entry *dirent,
++                      struct ext2_dir_entry *dirent, unsigned int offset,
+                       ext2_ino_t ino, struct problem_context *pctx)
+ {
+       int             problem = 0;
+       unsigned int    rec_len;
++      int             dir_data_error;
+       if (!dirent->inode)
+               problem = PR_2_MISSING_DOT_DOT;
+@@ -411,10 +486,14 @@ static int check_dotdot(e2fsck_t ctx,
+       else if (dirent->name[2] != '\0')
+               problem = PR_2_DOT_DOT_NULL_TERM;
++      dir_data_error = e2fsck_check_dirent_data(ctx,
++                              (struct ext2_dir_entry_2 *)dirent,
++                              offset, pctx);
++
+       (void) ext2fs_get_rec_len(ctx->fs, dirent, &rec_len);
+       if (problem) {
+               if (fix_problem(ctx, problem, pctx)) {
+-                      if (rec_len < 12)
++                      if (rec_len < 12 && dir_data_error)
+                               dirent->rec_len = 12;
+                       /*
+                        * Note: we don't have the parent inode just
+@@ -476,6 +555,12 @@ static _INLINE_ int check_filetype(e2fsc
+       int     should_be = EXT2_FT_UNKNOWN;
+       __u16   result;
+       struct ext2_inode       inode;
++      __u8    dirdata = 0;
++
++      if (ctx->fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_DIRDATA) {
++              dirdata = filetype & ~EXT2_FT_MASK;
++              filetype = filetype & EXT2_FT_MASK;
++      }
+       if (!(ctx->fs->super->s_feature_incompat &
+             EXT2_FEATURE_INCOMPAT_FILETYPE)) {
+@@ -510,7 +595,7 @@ static _INLINE_ int check_filetype(e2fsc
+                       pctx) == 0)
+               return 0;
+-      dirent->name_len = (dirent->name_len & 0xFF) | should_be << 8;
++      dirent->name_len = ((dirent->name_len & 0xFF) | (dirdata | should_be) << 8);
+       return 1;
+ }
+@@ -532,7 +617,7 @@ static void parse_int_node(ext2_filsys f
+       ext2_dirhash_t  hash = 0, prev_hash;
+       if (db->blockcnt == 0) {
+-              root = (struct ext2_dx_root_info *) (block_buf + 24);
++              root = get_ext2_dx_root_info(fs, block_buf);
+ #ifdef DX_DEBUG
+               printf("Root node dump:\n");
+@@ -543,7 +628,7 @@ static void parse_int_node(ext2_filsys f
+               printf("\t Flags: %d\n", root->unused_flags);
+ #endif
+-              ent = (struct ext2_dx_entry *) (block_buf + 24 + root->info_length);
++              ent = (struct ext2_dx_entry *) ((char *) root + root->info_length);
+       } else {
+               ent = (struct ext2_dx_entry *) (block_buf+8);
+       }
+@@ -807,7 +892,7 @@ static int check_dir_block(ext2_filsys f
+               (void) ext2fs_get_rec_len(fs, dirent, &rec_len);
+               limit = (struct ext2_dx_countlimit *) (buf+8);
+               if (db->blockcnt == 0) {
+-                      root = (struct ext2_dx_root_info *) (buf + 24);
++                      root = get_ext2_dx_root_info(fs, buf);
+                       dx_db->type = DX_DIRBLOCK_ROOT;
+                       dx_db->flags |= DX_FLAG_FIRST | DX_FLAG_LAST;
+                       if ((root->reserved_zero ||
+@@ -864,10 +949,10 @@ out_htree:
+               }
+               if (dot_state == 0) {
+-                      if (check_dot(ctx, dirent, ino, &cd->pctx))
++                      if (check_dot(ctx, dirent, offset, ino, &cd->pctx))
+                               dir_modified++;
+               } else if (dot_state == 1) {
+-                      ret = check_dotdot(ctx, dirent, ino, &cd->pctx);
++                      ret = check_dotdot(ctx, dirent, offset, ino, &cd->pctx);
+                       if (ret < 0)
+                               goto abort_free_dict;
+                       if (ret)
+@@ -883,6 +968,11 @@ out_htree:
+               if (!dirent->inode)
+                       goto next;
++              ret = e2fsck_check_dirent_data(ctx, (struct ext2_dir_entry_2 *)dirent,
++                                       offset, &cd->pctx);
++              if (ret == 2)
++                      dir_modified++;
++
+               /*
+                * Make sure the inode listed is a legal one.
+                */
+Index: e2fsprogs/e2fsck/pass3.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass3.c
++++ e2fsprogs/e2fsck/pass3.c
+@@ -606,6 +606,7 @@ static int fix_dotdot_proc(struct ext2_d
+       struct fix_dotdot_struct *fp = (struct fix_dotdot_struct *) priv_data;
+       errcode_t       retval;
+       struct problem_context pctx;
++      __u16 dirdata = 0;
+       if ((dirent->name_len & 0xFF) != 2)
+               return 0;
+@@ -625,6 +626,9 @@ static int fix_dotdot_proc(struct ext2_d
+               fix_problem(fp->ctx, PR_3_ADJUST_INODE, &pctx);
+       }
+       dirent->inode = fp->parent;
++
++      dirdata  = dirent->name_len & (~EXT2_FT_MASK << 8);
++
+       if (fp->ctx->fs->super->s_feature_incompat &
+           EXT2_FEATURE_INCOMPAT_FILETYPE)
+               dirent->name_len = (dirent->name_len & 0xFF) |
+@@ -632,6 +636,9 @@ static int fix_dotdot_proc(struct ext2_d
+       else
+               dirent->name_len = dirent->name_len & 0xFF;
++      if (fp->ctx->fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_DIRDATA)
++              dirent->name_len |= dirdata;
++
+       fp->done++;
+       return DIRENT_ABORT | DIRENT_CHANGED;
+ }
+Index: e2fsprogs/e2fsck/problem.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.c
++++ e2fsprogs/e2fsck/problem.c
+@@ -1427,6 +1427,11 @@ static struct e2fsck_problem problem_tab
+         N_("@i %i is badly corrupt (badness value = %N).  "),
+         PROMPT_CLEAR, PR_PREEN_OK },
++      /* Directory entry dirdata length set incorrectly */
++      { PR_2_CLEAR_DIRDATA,
++        N_("@E dirdata length set incorrectly.\n"),
++        PROMPT_CLEAR, PR_PREEN_OK },
++
+       /* Pass 3 errors */
+       /* Pass 3: Checking directory connectivity */
+Index: e2fsprogs/e2fsck/problem.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.h
++++ e2fsprogs/e2fsck/problem.h
+@@ -858,6 +858,9 @@ struct problem_context {
+ /* Inode completely corrupt */
+ #define PR_2_INODE_TOOBAD             0x020049
++/* Directory dirdata flag set */
++#define PR_2_CLEAR_DIRDATA            0x02f000
++
+ /*
+  * Pass 3 errors
+  */
+Index: e2fsprogs/e2fsck/rehash.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/rehash.c
++++ e2fsprogs/e2fsck/rehash.c
+@@ -148,7 +148,7 @@ static int fill_dir_block(ext2_filsys fs
+               }
+               ent = fd->harray + fd->num_array++;
+               ent->dir = dirent;
+-              fd->dir_size += EXT2_DIR_REC_LEN(dirent->name_len & 0xFF);
++              fd->dir_size += __EXT2_DIR_REC_LEN(dirent->name_len & 0xFF);
+               ent->ino = dirent->inode;
+               if (fd->compress)
+                       ent->hash = ent->minor_hash = 0;
+@@ -440,7 +440,7 @@ static errcode_t copy_dir_entries(e2fsck
+               ent = fd->harray + i;
+               if (ent->dir->inode == 0)
+                       continue;
+-              rec_len = EXT2_DIR_REC_LEN(ent->dir->name_len & 0xFF);
++              rec_len = __EXT2_DIR_REC_LEN(ent->dir->name_len & 0xFF);
+               if (rec_len > left) {
+                       if (left) {
+                               left += prev_rec_len;
+Index: e2fsprogs/lib/ext2fs/link.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/link.c
++++ e2fsprogs/lib/ext2fs/link.c
+@@ -41,7 +41,7 @@ static int link_proc(struct ext2_dir_ent
+       unsigned int rec_len, min_rec_len, curr_rec_len;
+       int ret = 0;
+-      rec_len = EXT2_DIR_REC_LEN(ls->namelen);
++      rec_len = __EXT2_DIR_REC_LEN(ls->namelen);
+       ls->err = ext2fs_get_rec_len(ls->fs, dirent, &curr_rec_len);
+       if (ls->err)
+@@ -68,7 +68,7 @@ static int link_proc(struct ext2_dir_ent
+        * truncate it and return.
+        */
+       if (dirent->inode) {
+-              min_rec_len = EXT2_DIR_REC_LEN(dirent->name_len & 0xFF);
++              min_rec_len = __EXT2_DIR_REC_LEN(dirent->name_len & 0xFF);
+               if (curr_rec_len < (min_rec_len + rec_len))
+                       return ret;
+               rec_len = curr_rec_len - min_rec_len;
+Index: e2fsprogs/lib/ext2fs/newdir.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/newdir.c
++++ e2fsprogs/lib/ext2fs/newdir.c
+@@ -56,8 +56,8 @@ errcode_t ext2fs_new_dir_block(ext2_fils
+               dir->inode = dir_ino;
+               dir->name_len = 1 | filetype;
+               dir->name[0] = '.';
+-              rec_len = fs->blocksize - EXT2_DIR_REC_LEN(1);
+-              dir->rec_len = EXT2_DIR_REC_LEN(1);
++              rec_len = fs->blocksize - __EXT2_DIR_REC_LEN(1);
++              dir->rec_len = __EXT2_DIR_REC_LEN(1);
+               /*
+                * Set up entry for '..'
+Index: e2fsprogs/lib/ext2fs/dirblock.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/dirblock.c
++++ e2fsprogs/lib/ext2fs/dirblock.c
+@@ -58,6 +58,39 @@ errcode_t ext2fs_read_dir_block3(ext2_fi
+       return retval;
+ }
++/*
++ * Compute the total directory entry data length.
++ * This includes the filename and an implicit NUL terminator (always present),
++ * and optional extensions.  Each extension has a bit set in the high 4 bits of
++ * de->file_type, and the extension length is the first byte in each entry.
++ */
++int ext2_get_dirent_size(struct ext2_dir_entry_2 *de)
++{
++      return ext2_get_dirent_dirdata_size(de, ~EXT2_FT_MASK);
++}
++
++int ext2_get_dirent_dirdata_size(struct ext2_dir_entry_2 *de, char dirdata_flags)
++{
++      char *len = de->name + de->name_len + 1 /* NUL terminator */;
++      int dlen = 0;
++      __u8 extra_data_flags = (de->file_type & ~EXT2_FT_MASK) >> 4;
++
++      dirdata_flags >>= 4;
++      while ((extra_data_flags & dirdata_flags) != 0) {
++              if (extra_data_flags & 1) {
++                      if (dirdata_flags & 1)
++                              dlen += *len;
++
++                      len += *len;
++              }
++              extra_data_flags >>= 1;
++              dirdata_flags >>= 1;
++      }
++
++      /* add NUL terminator byte to dirdata length */
++      return dlen + (dlen != 0);
++}
++
+ errcode_t ext2fs_read_dir_block2(ext2_filsys fs, blk_t block,
+                                void *buf, int flags EXT2FS_ATTR((unused)))
+ {
diff --git a/patches/e2fsprogs-dblist.patch b/patches/e2fsprogs-dblist.patch
new file mode 100644 (file)
index 0000000..d6c6012
--- /dev/null
@@ -0,0 +1,18 @@
+Fix dblist size accounting in the case where ext2fs_resize_mem() fails
+to allocate a larger buffer.
+
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/lib/ext2fs/dblist.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/dblist.c
++++ e2fsprogs/lib/ext2fs/dblist.c
+@@ -172,7 +172,7 @@ errcode_t ext2fs_add_dir_block2(ext2_dbl
+                                          sizeof(struct ext2_db_entry2),
+                                          &dblist->list);
+               if (retval) {
+-                      dblist->size -= 100;
++                      dblist->size = old_size / sizeof(struct ext2_db_entry2);
+                       return retval;
+               }
+       }
diff --git a/patches/e2fsprogs-discard.patch b/patches/e2fsprogs-discard.patch
new file mode 100644 (file)
index 0000000..31f7975
--- /dev/null
@@ -0,0 +1,82 @@
+Allow mke2fs discard patches to pass regression tests.
+
+Index: e2fsprogs/lib/ext2fs/unix_io.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/unix_io.c
++++ e2fsprogs/lib/ext2fs/unix_io.c
+@@ -870,8 +870,11 @@ static errcode_t unix_discard(io_channel
+       range[1] = (__uint64_t)(count) * channel->block_size;
+       ret = ioctl(data->dev, BLKDISCARD, &range);
+-      if (ret < 0)
++      if (ret < 0) {
++              if (errno == ENOTTY)
++                      return EXT2_ET_UNIMPLEMENTED;
+               return errno;
++      }
+       return 0;
+ #else
+       return EXT2_ET_UNIMPLEMENTED;
+Index: e2fsprogs/misc/mke2fs.c
+===================================================================
+--- e2fsprogs.orig/misc/mke2fs.c
++++ e2fsprogs/misc/mke2fs.c
+@@ -2010,29 +2010,37 @@ static int mke2fs_discard_device(ext2_fi
+       count *= (1024 * 1024);
+       count /= fs->blocksize;
+-      ext2fs_numeric_progress_init(fs, &progress,
+-                                   _("Discarding device blocks: "),
+-                                   blocks);
+       while (cur < blocks) {
+-              ext2fs_numeric_progress_update(fs, &progress, cur);
+-
+               if (cur + count > blocks)
+                       count = blocks - cur;
+               retval = io_channel_discard(fs->io, cur, count, fs->blocksize);
++              if (cur == 0) {
++                      /* If discard is unimplemented skip the progress bar */
++                      if (retval == EXT2_ET_UNIMPLEMENTED)
++                              return retval;
++
++                      ext2fs_numeric_progress_init(fs, &progress,
++                                              _("Discarding device blocks: "),
++                                              blocks);
++              }
++
++              ext2fs_numeric_progress_update(fs, &progress, cur);
++
+               if (retval)
+                       break;
++
+               cur += count;
+       }
+       if (retval) {
+-              ext2fs_numeric_progress_close(fs, &progress,
+-                                    _("failed - "));
++              ext2fs_numeric_progress_close(fs, &progress, _("failed - "));
+               if (!quiet)
+                       printf("%s\n",error_message(retval));
+-      } else
++      } else {
+               ext2fs_numeric_progress_close(fs, &progress,
+                                     _("done                            \n"));
++      }
+       return retval;
+ }
+Index: e2fsprogs/lib/et/Makefile.in
+===================================================================
+--- e2fsprogs.orig/lib/et/Makefile.in
++++ e2fsprogs/lib/et/Makefile.in
+@@ -96,7 +96,7 @@ install:: compile_et libcom_err.a $(HFIL
+               echo "  INSTALL_DATA $(includedir)/et/$$i"; \
+               $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir)/et/$$i; \
+       done
+-      $(Q) $(LN) $(LINK_INSTALL_FLAGS) $(includedir)/et/com_err.h $(DESTDIR)$(includedir)
++      $(Q) $(LN) $(LINK_INSTALL_FLAGS) -s $(includedir)/et/com_err.h $(DESTDIR)$(includedir)
+       $(Q) for i in $(SHARE_FILES); do \
+               echo "  INSTALL_DATA $(datadir)/et/$$i"; \
+               $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(datadir)/et/$$i; \
diff --git a/patches/e2fsprogs-e2fsck_exclusive.patch b/patches/e2fsprogs-e2fsck_exclusive.patch
new file mode 100644 (file)
index 0000000..9ab0fb3
--- /dev/null
@@ -0,0 +1,35 @@
+b=13698
+The checks done by e2fsck for mounted vs. read-only runs is confusing.
+
+On the one hand, if e2fsck is NOT run with the "-n" flag (i.e. it might
+modify the filesystem), there is no guarantee that it will open the
+filesystem with the EXCLUSIVE flag (i.e. O_EXCL) to prevent the block
+device from being used (in most cases = mounted).
+
+On the other hand, if e2fsck is run with "-n" (i.e. read-only),
+and the /etc/fstab or /proc/mounts does not report the same block
+device to match the mountpoint (which happens for Lustre, and can
+also happen if there is an overlay mount) then the e2fsck thinks
+the filesystem is unmounted, but fails because the EXCLUSIVE flag
+is set even though it is running read-only.
+
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/e2fsck/unix.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/unix.c
++++ e2fsprogs/e2fsck/unix.c
+@@ -1056,9 +1056,10 @@ restart:
+       if (!old_bitmaps)
+               flags |= EXT2_FLAG_64BITS;
+       if ((ctx->options & E2F_OPT_READONLY) == 0)
+-              flags |= EXT2_FLAG_RW;
+-      if ((ctx->mount_flags & EXT2_MF_MOUNTED) == 0)
+-              flags |= EXT2_FLAG_EXCLUSIVE;
++              flags |= EXT2_FLAG_RW | EXT2_FLAG_EXCLUSIVE;
++      /* we would abort above in check_mount() unless user asks for this */
++      if ((ctx->mount_flags & EXT2_MF_MOUNTED) != 0)
++              flags &= ~EXT2_FLAG_EXCLUSIVE;
+       retval = try_open_fs(ctx, flags, io_ptr, &fs);
diff --git a/patches/e2fsprogs-e2scan.patch b/patches/e2fsprogs-e2scan.patch
new file mode 100644 (file)
index 0000000..311c373
--- /dev/null
@@ -0,0 +1,1780 @@
+Index: e2fsprogs/configure.in
+===================================================================
+--- e2fsprogs.orig/configure.in
++++ e2fsprogs/configure.in
+@@ -589,6 +589,28 @@ DEBUGFS_CMT=
+ )
+ AC_SUBST(DEBUGFS_CMT)
+ dnl
++dnl handle --enable-e2scan
++dnl
++AC_ARG_ENABLE([e2scan],
++[  --disable-e2scan             disable support of e2scan program],
++if test "$enableval" = "no"
++then
++      echo "Disabling e2scan support"
++      E2SCAN_CMT="#"
++      E2SCAN_MAN=.\"
++else
++      E2SCAN_CMT=
++      E2SCAN_MAN=
++      echo "Enabling e2scan support"
++fi
++,
++echo "Enabling e2scan support by default"
++E2SCAN_CMT=
++E2SCAN_MAN=
++)
++AC_SUBST(E2SCAN_CMT)
++AC_SUBST(E2SCAN_MAN)
++dnl
+ dnl handle --enable-imager
+ dnl
+ AC_ARG_ENABLE([imager],
+@@ -812,6 +834,10 @@ AC_CHECK_HEADERS(net/if.h,,,
+ #endif
+ ]])
+ AC_CHECK_HEADERS(db.h)
++dnl do not check sqlite3.h if e2scan is disabled
++if test x"$E2SCAN_CMT" == x; then
++AC_CHECK_HEADERS(sqlite3.h)
++fi
+ AC_FUNC_VPRINTF
+ dnl Check to see if dirent has member d_reclen. On cygwin those d_reclen
+ dnl is not decleared.
+@@ -954,6 +980,51 @@ AC_CHECK_LIB(db-4.8, db_env_create,
+ AC_DEFINE(HAVE_DB4)])
+ AC_SUBST(DB4VERSION)
+ dnl
++dnl Check to see if static sqlite exists
++dnl
++AC_ARG_WITH(
++      [sqlite3],
++      [  --with-sqlite3=DIR      location of sqlite3 library (default /usr/lib)],,
++      [with_sqlite3=/usr/lib])
++
++dnl do not check sqlite3 library if e2scan is disabled
++if test x"$E2SCAN_CMT" == x; then
++
++CFLAGS_OLD=$CFLAGS
++SQLITE3_LIB=''
++dnl
++dnl check static sqlite3 first
++dnl
++CFLAGS="$CFLAGS_OLD -L$with_sqlite3 -static -pthread"
++AC_CHECK_LIB(sqlite3, sqlite3_open,
++      [
++      SQLITE3_LIB="-L$with_sqlite3 -static -pthread -lsqlite3"
++      AC_DEFINE(HAVE_SQLITE3)
++      ])
++
++if test x"$SQLITE3_LIB" == x; then
++dnl
++dnl static sqlite3 is not found, check dynamic sqlite3
++dnl
++      AC_MSG_WARN(no static sqlite3 - looking for dynamic one)
++      CFLAGS="$CFLAGS_OLD -L$with_sqlite3 -pthread"
++      AC_CHECK_LIB(sqlite3, sqlite3_close,
++              [
++              SQLITE3_LIB="-L$with_sqlite3 -pthread -lsqlite3"
++              AC_DEFINE(HAVE_SQLITE3)
++              ])
++fi
++
++AC_SUBST(SQLITE3_LIB)
++CFLAGS=$CFLAGS_OLD
++
++if test x"$SQLITE3_LIB" == x; then
++      AC_MSG_WARN(no sqlite3 - e2scan will not support database based scanning)
++fi
++
++fi
++
++dnl
+ dnl See if optreset exists
+ dnl
+ AC_MSG_CHECKING(for optreset)
+@@ -1170,7 +1241,7 @@ for i in MCONFIG Makefile e2fsprogs.spec
+       lib/ss/ss.pc lib/uuid/uuid.pc lib/et/com_err.pc \
+       lib/e2p/e2p.pc lib/blkid/blkid.pc lib/ext2fs/ext2fs.pc \
+       misc/Makefile ext2ed/Makefile e2fsck/Makefile \
+-      debugfs/Makefile tests/Makefile tests/progs/Makefile \
++      debugfs/Makefile e2scan/Makefile tests/Makefile tests/progs/Makefile \
+       resize/Makefile doc/Makefile intl/Makefile \
+       intl/libgnuintl.h po/Makefile.in ; do
+       if test -d `dirname ${srcdir}/$i` ; then
+Index: e2fsprogs/e2fsprogs.spec.in
+===================================================================
+--- e2fsprogs.orig/e2fsprogs.spec.in
++++ e2fsprogs/e2fsprogs.spec.in
+@@ -150,6 +150,7 @@ exit 0
+ %{_sbindir}/e2freefrag
+ %{_sbindir}/e4defrag
+ @LFSCK_CMT@%{_sbindir}/lfsck
++@E2SCAN_CMT@%{_sbindir}/e2scan
+ %{_root_libdir}/libblkid.so.*
+ %{_root_libdir}/libcom_err.so.*
+@@ -183,6 +184,7 @@ exit 0
+ %{_mandir}/man8/fsck.ext4dev.8*
+ %{_mandir}/man8/e2image.8*
+ %{_mandir}/man8/e2label.8*
++@E2SCAN_CMT@%{_mandir}/man8/e2scan.8*
+ %{_mandir}/man8/e2undo.8*
+ %{_mandir}/man8/fsck.8*
+ %{_mandir}/man8/logsave.8*
+Index: e2fsprogs/e2scan/db.c
+===================================================================
+--- /dev/null
++++ e2fsprogs/e2scan/db.c
+@@ -0,0 +1,265 @@
++#define _GNU_SOURCE
++#define _FILE_OFFSET_BITS 64
++
++#include <stdio.h>
++#include <time.h>
++#include <unistd.h>
++#include <ext2fs/ext2fs.h>
++#include <sys/stat.h>
++
++#if defined(HAVE_SQLITE3) && defined(HAVE_SQLITE3_H)
++
++#include <sqlite3.h>
++
++/* e2scan.c */
++extern ext2_filsys fs;
++extern struct {
++      int mode;
++      int nr;
++      union {
++              struct {
++                      int fd;
++                      int nr_commands;
++              } db;
++              struct {
++                      /* number of files newer than specified time */
++                      ext2_ino_t nr_files;
++                      /* number of files reported */
++                      ext2_ino_t nr_reported;
++                      time_t mtimestamp;
++                      time_t ctimestamp;
++              } fl;
++      };
++} scan_data;
++
++int block_iterate_cb(ext2_filsys fs, blk_t  *block_nr,
++                   e2_blkcnt_t blockcnt,
++                   blk_t ref_block EXT2FS_ATTR((unused)),
++                   int ref_offset EXT2FS_ATTR((unused)),
++                   void *priv_data);
++
++
++static long count = 10000;
++
++static void exec_one_sql_noreturn(sqlite3 *db, char *sqls)
++{
++      char *errmsg = NULL;
++
++      if (sqlite3_exec(db, sqls, NULL, NULL, &errmsg) != SQLITE_OK) {
++              fprintf(stderr, "SQL error: %s;\nrequest: %s", errmsg, sqls);
++              sqlite3_free(errmsg);
++              exit(1);
++      }
++}
++
++static void create_sql_table(sqlite3 *db, const char *table_name,
++                           const char *columns)
++{
++      char *sqls;
++
++      if (asprintf(&sqls, "create table %s (%s)", table_name, columns) < 0) {
++              perror("asprintf failed");
++              exit(1);
++      }
++
++      exec_one_sql_noreturn(db, sqls);
++      free(sqls);
++}
++
++static void begin_one_transaction(sqlite3 *db)
++{
++      exec_one_sql_noreturn(db, "BEGIN;");
++}
++
++static void commit_one_transaction(sqlite3 *db)
++{
++      exec_one_sql_noreturn(db, "COMMIT;");
++}
++
++static void batch_one_transaction(sqlite3 *db)
++{
++      static long num = 0;
++
++      num ++;
++      if (num % count == 0) {
++              commit_one_transaction(db);
++              begin_one_transaction(db);
++      }
++      /* else do nothing */
++}
++
++#define COLUMNS "ino, generation, parent, name, size, mtime, ctime, dtime"
++
++static void create_full_db(const char *name, int fd)
++{
++      sqlite3 *db;
++      int rd;
++      int nr;
++      char sqls[512];
++
++      if (sqlite3_open(name, &db) != SQLITE_OK) {
++              fprintf(stderr, "failed to sqlite3_open: %s\n", name);
++              sqlite3_close(db);
++              exit(1);
++      }
++      create_sql_table(db, "dirs", COLUMNS);
++      create_sql_table(db, "files", COLUMNS);
++
++      begin_one_transaction(db);
++
++      nr = 0;
++      while (1) {
++              rd = read(fd, sqls, 512);
++              if (rd == -1) {
++                      perror("read failed\n");
++                      exit(1);
++              }
++              if (rd != 512)
++                      break;
++              nr ++;
++              exec_one_sql_noreturn(db, sqls);
++              batch_one_transaction(db);
++      }
++      commit_one_transaction(db);
++      printf("database is created, %d records are inserted\n", nr);
++      sqlite3_close(db);
++}
++
++/* write sql command to pipe */
++#define PIPECMDLEN 512
++static void write_sql_command(int fd, const char *sqls)
++{
++      char buf[PIPECMDLEN];
++
++      if (strlen(sqls) + 1 > PIPECMDLEN) {
++              fprintf(stderr, "too long command");
++              exit(1);
++      }
++      strcpy(buf, sqls);
++      if (write(fd, buf, PIPECMDLEN) != PIPECMDLEN) {
++              perror("failed to write to pipe");
++              exit(1);
++      }
++      scan_data.db.nr_commands ++;
++}
++
++pid_t fork_db_creation(const char *database)
++{
++      int p[2];
++      struct stat st;
++      pid_t pid;
++
++      if (stat(database, &st) == 0) {
++              fprintf(stderr, "%s exists. remove it first\n", database);
++              exit(1);
++      }
++      if (pipe(p) == -1) {
++              fprintf(stderr, "failed to pipe");
++              exit(1);
++      }
++
++      pid = fork();
++      if (pid == (pid_t)-1) {
++              fprintf(stderr, "failed to fork");
++              exit(1);
++      }
++      if (pid == (pid_t)0) {
++              /* child, read data written by parent and write to
++               * database */
++              close(p[1]);
++              create_full_db(database, p[0]);
++              close(p[0]);
++              exit(0);
++      }
++
++      /* parent, read inodes and write them to pipe */
++      close(p[0]);
++      scan_data.db.fd = p[1];
++      return pid;
++}
++
++void database_iscan_action(ext2_ino_t ino, struct ext2_inode *inode,
++                         int fd, char *buf)
++{
++      char *sqls;
++
++      if (LINUX_S_ISDIR(inode->i_mode)) {
++              if (ino == EXT2_ROOT_INO) {
++                      sqls = sqlite3_mprintf("%s (%u,%u,%u,'%q',%u,%u,%u,%u)",
++                                             "insert into dirs values",
++                                             ino, inode->i_generation, ino, "/",
++                                             inode->i_size, inode->i_mtime,
++                                             inode->i_ctime, inode->i_dtime);
++                      write_sql_command(fd, sqls);
++                      sqlite3_free(sqls);
++              }
++
++              if (ext2fs_block_iterate2(fs, ino, 0, buf,
++                                        block_iterate_cb, &ino)) {
++                      fprintf(stderr, "ext2fs_block_iterate2 failed\n");
++                      exit(1);
++              }
++      }
++}
++
++/*
++ * callback for ext2fs_dblist_dir_iterate to be called for each
++ * directory entry
++ */
++int database_dblist_iterate_cb(ext2_ino_t dir, struct ext2_dir_entry *dirent,
++                             int namelen, int fd)
++{
++      struct ext2_inode inode;
++      char *table;
++      char *sqls;
++      errcode_t retval;
++      char str[256];
++
++      if (!ext2fs_fast_test_inode_bitmap2(fs->inode_map, dirent->inode))
++              /* entry of deleted file? can that ever happen */
++              return 0;
++
++      retval = ext2fs_read_inode(fs, dirent->inode, &inode);
++      if (retval) {
++              com_err("ext2fs_read_inode", retval, "while reading inode");
++              exit(1);
++      }
++
++      if (LINUX_S_ISDIR(inode.i_mode))
++              table = "dirs";
++      else
++              table = "files";
++
++      sprintf(str, "%.*s", namelen, dirent->name);
++      sqls = sqlite3_mprintf("%s %s %s (%u,%u,%u,'%q',%u,%u,%u,%u)",
++                             "insert into", table, "values",
++                             dirent->inode, inode.i_generation, dir,
++                             str,
++                             inode.i_size, inode.i_mtime,
++                             inode.i_ctime, inode.i_dtime);
++      write_sql_command(fd, sqls);
++      sqlite3_free(sqls);
++
++      return 0;
++}
++
++#else
++
++pid_t fork_db_creation(const char *database)
++{
++      return 0;
++}
++
++void database_iscan_action(ext2_ino_t ino, struct ext2_inode *inode,
++                         int fd, char *buf)
++{
++      return;
++}
++
++int database_dblist_iterate_cb(ext2_ino_t dir, struct ext2_dir_entry *dirent,
++                             int namelen, int fd)
++{
++      return 0;
++}
++
++#endif
+Index: e2fsprogs/e2scan/e2scan.8.in
+===================================================================
+--- /dev/null
++++ e2fsprogs/e2scan/e2scan.8.in
+@@ -0,0 +1,116 @@
++.TH e2scan 1 "2006 Sep 26" Lustre "backup utilities"
++.SH NAME
++e2scan \- scan an Ext2-type filesystem for modified inodes
++.SH SYNOPSIS
++.br
++.B e2scan
++@E2SCAN_MAN@{
++.B -l
++@E2SCAN_MAN@|
++@E2SCAN_MAN@.B -f
++@E2SCAN_MAN@}
++[
++.BI -a " groups"
++] [
++.BI -b " blocks"
++] [
++.BI -C " chdir"
++] [
++@E2SCAN_MAN@.BI -d " database"
++@E2SCAN_MAN@] [
++.BI -n " filename"
++] [
++.BI -N " date"
++] [
++.BI -o " outfile"
++]
++.I device
++.br
++.SH DESCRIPTION
++.BR e2scan ,
++iterates all inodes on
++.IR device ,
++find inodes modified since the specified time (default 1 day), and prints
++their pathnames relative to the root of the filesystem.  This allows the
++pathnames to be used as input to a backup tool running in the mountpoint, like
++.BR "tar \-C" ,
++as the filesystem may be mounted at an arbitrary mountpoint.
++
++The
++.B e2scan
++program is optimized for scanning an entire filesystem for (modified) files,
++but is not efficient for smaller subdirectory scans.  Use
++.BR find (1)
++for that purpose instead.
++.SH OPTIONS
++.TP
++.BI \-a " groups"
++Set readahead for inode table blocks to get better performance when scanning
++.IR device .
++Default is 1 group of readahead.
++.TP
++.BI \-b " inode_buffer_blocks"
++Set number of inode blocks to read from disk at a time.
++.TP
++.BI \-C " directory"
++Specify the working directory (relative to the root of the filesystem
++being scanned) for the output pathnames.  Only directories underneath
++the root will be candidates for listing.  For Lustre MDT filesystems the
++pathname must be prefixed with "/ROOT" to dump the client visible filesystem.
++@E2SCAN_MAN@.TP
++@E2SCAN_MAN@.BI \-d " database_file"
++@E2SCAN_MAN@Specify output file for database when running in
++@E2SCAN_MAN@.B \-f
++@E2SCAN_MAN@mode.
++.TP
++.B \-D
++Also include directories in the output.  The default is to only list files,
++because tools like
++.BR tar (1)
++will recurse into directories and files that are also listed therein will be
++backed up twice.
++@E2SCAN_MAN@.TP
++@E2SCAN_MAN@.B \-f
++@E2SCAN_MAN@List files in the filesystem and insert them into the
++@E2SCAN_MAN@.BR sqlite3 (1)
++@E2SCAN_MAN@database named by the
++@E2SCAN_MAN@.B \-d
++@E2SCAN_MAN@option.
++.TP
++.B \-l
++List files in the filesystem to standard output, or to the file specified
++with the
++.B \-o
++option.  This is the default mode.
++.TP
++.BI \-n " filename"
++Dump only files newer than the specified
++.IR filename .
++.TP
++.BI \-N " date"
++Dump only files newer than the specified date.  This supports a wide
++variety of input formats like "YYYY-MM-DD HH:MM:SS".  Use a date of
++.R 0
++to dump all files.
++.TP
++.BI \-o " outfile"
++Record the files found into
++.I outfile
++instead of the default standard output.
++.SH EXAMPLES
++To dump all of the files in the filesystem into the file
++.IR myfilelist :
++.IP
++e2scan -N 0 -o myfilelist /dev/sdb1
++.PP
++To list files and directories newer than Feb 6, 2007 in the /home directory:
++.IP
++e2scan -D -N "Feb 6 00:00:00 2007" -C /home /dev/sdb1
++.PP
++.SH AUTHOR
++This version of
++.B e2scan
++was originally written by Vladimir Saviliev <vladimir.saviliev@sun.com>
++and Andreas Dilger <adilger@whamcloud.com>.
++.SH SEE ALSO
++.BR find (1)
+Index: e2fsprogs/e2scan/e2scan.c
+===================================================================
+--- /dev/null
++++ e2fsprogs/e2scan/e2scan.c
+@@ -0,0 +1,640 @@
++#define _GNU_SOURCE
++#define _FILE_OFFSET_BITS 64
++#define _XOPEN_SOURCE         /* for getdate */
++#define _XOPEN_SOURCE_EXTENDED        /* for getdate */
++
++#include <stdio.h>
++#include <sys/stat.h>
++#include <time.h>
++#include <unistd.h>
++#include <ext2fs/ext2fs.h>
++#include <string.h>
++#include <limits.h>
++#include <sys/wait.h>
++#include <sys/errno.h>
++
++ext2_filsys fs;
++const char *database = "e2scan.db";
++int readahead_groups = 1; /* by default readahead one group inode table */
++FILE *outfile;
++
++void usage(char *prog)
++{
++      fprintf(stderr,
++#if defined(HAVE_SQLITE3) && defined(HAVE_SQLITE3_H)
++              "\nUsage: %s {-l | -f} [ options ] device-filename\nModes:"
++              "\t-f: create file database\n"
++#else
++              "\nUsage: %s -l [ options ] device-filename\nModes:"
++#endif
++              "\t-l: list recently changed files\n"
++              "Options:\n"
++              "\t-a groups: readahead 'groups' inode tables (default %d)\n"
++              "\t-b blocks: buffer 'blocks' inode table blocks\n"
++              "\t-C chdir: list files relative to 'chdir' in filesystem\n"
++              "\t-d database: output database filename (default %s)\n"
++              "\t-D: list not only files, but directories as well\n"
++              "\t-n filename: list files newer than 'filename'\n"
++              "\t-N date: list files newer than 'date' (default 1 day, "
++                                                       "0 for all files)\n"
++              "\t-o outfile: output file list to 'outfile'\n",
++              prog, readahead_groups, database);
++      exit(1);
++}
++
++#define SM_NONE 0
++#define SM_DATABASE 1 /* -f */
++#define SM_FILELIST 2 /* -l */
++
++struct {
++      int mode;
++      int nr;
++      union {
++              struct {
++                      int fd;
++                      int nr_commands;
++              } db;
++              struct {
++                      /* number of files newer than specified time */
++                      ext2_ino_t nr_files;
++                      ext2_ino_t nr_dirs;
++                      /* number of files reported */
++                      ext2_ino_t nr_reported;
++                      time_t mtimestamp;
++                      time_t ctimestamp;
++                      int with_dirs;
++              } fl;
++      };
++} scan_data = { .mode = SM_FILELIST, };
++
++/* db.c */
++pid_t fork_db_creation(const char *database);
++void database_iscan_action(ext2_ino_t ino,
++                         struct ext2_inode *inode, int fd, char *buf);
++int database_dblist_iterate_cb(ext2_ino_t dir, struct ext2_dir_entry *dirent,
++                             int namelen, int fd);
++
++/* filelist.c */
++void filelist_iscan_action(ext2_ino_t ino,
++                         struct ext2_inode *inode, char *buf);
++int filelist_dblist_iterate_cb(ext2_ino_t dirino,
++                             struct ext2_dir_entry *dirent,
++                             int namelen);
++int create_root_dentries(char *root);
++void report_root(void);
++
++
++static void get_timestamps(const char *filename)
++{
++      struct stat st;
++
++      if (stat(filename, &st) == -1) {
++              perror("failed to stat file");
++              exit(1);
++      }
++      scan_data.fl.mtimestamp = st.st_mtime;
++      scan_data.fl.ctimestamp = st.st_ctime;
++}
++
++/*
++ * callback for ext2fs_block_iterate2, it adds directory leaf blocks
++ * to dblist
++ */
++int block_iterate_cb(ext2_filsys fs, blk_t  *block_nr,
++                   e2_blkcnt_t blockcnt,
++                   blk_t ref_block EXT2FS_ATTR((unused)),
++                   int ref_offset EXT2FS_ATTR((unused)),
++                   void *priv_data)
++{
++      int ret;
++      ext2_ino_t *ino;
++
++      if ((int) blockcnt < 0)
++              /* skip indirect blocks */
++              return 0;
++      ret = 0;
++      ino = priv_data;
++      if (ext2fs_add_dir_block(fs->dblist, *ino, *block_nr, (int) blockcnt))
++              ret |= BLOCK_ABORT;
++
++      return ret;
++}
++
++/*
++ * done_group callback for inode scan.
++ * When i-th group of inodes is scanned over, readahead for i+2-th
++ * group is issued. Inode table readahead for two first groups is
++ * issued before scan begin.
++ */
++errcode_t done_group_callback(ext2_filsys fs, ext2_inode_scan scan,
++                            dgrp_t group, void *vp)
++{
++      dgrp_t ra_group;
++      unsigned long ra_start;
++      int ra_size;
++
++      if (readahead_groups <= 0)
++              return 0;
++
++      if (((group + 1) % readahead_groups) != 0)
++              return 0;
++
++      ra_group = group + 1 + readahead_groups;
++      if (ra_group >= fs->group_desc_count)
++              return 0;
++
++      ra_start = ext2fs_inode_table_loc(fs, ra_group);
++      if (ra_group + readahead_groups > fs->group_desc_count)
++              ra_size = fs->group_desc_count - ra_group;
++      else
++              ra_size = readahead_groups;
++
++      ra_size *= fs->inode_blocks_per_group;
++      io_channel_readahead(fs->io, ra_start, ra_size);
++      return 0;
++}
++
++#define DEFAULT_CHUNK_SIZE 16
++__u32 chunk_size; /* in blocks */
++int nr_chunks;
++
++struct chunk {
++      __u32 start;
++      __u32 covered;
++} *cur_chunk, *ra_chunk, *chunks;
++
++/* callback for ext2fs_dblist_iterate */
++static int fill_chunks(ext2_filsys fs, struct ext2_db_entry *db_info,
++                     void *priv_data)
++{
++      __u32 cur;
++
++      cur = db_info->blk / chunk_size;
++      if (cur_chunk == NULL || cur != cur_chunk->start) {
++              /* new sweep starts */
++              if (cur_chunk == NULL)
++                      cur_chunk = chunks;
++              else
++                      cur_chunk ++;
++
++              cur_chunk->start = cur;
++              cur_chunk->covered = 1;
++      } else
++              cur_chunk->covered ++;
++
++      return 0;
++}
++
++/* callback for ext2fs_dblist_iterate */
++static int count_chunks(ext2_filsys fs, struct ext2_db_entry *db_info,
++                      void *priv_data)
++{
++      __u32 cur;
++      static __u32 prev = (__u32)-1;
++
++      cur = db_info->blk / chunk_size;
++      if (cur != prev) {
++              nr_chunks ++;
++              prev = cur;
++      }
++      return 0;
++}
++
++/* create list of chunks, readahead two first of them */
++static void make_chunk_list(ext2_dblist dblist)
++{
++      chunk_size = readahead_groups * DEFAULT_CHUNK_SIZE;
++      if (chunk_size == 0)
++              return;
++
++      ext2fs_dblist_iterate(dblist, count_chunks, NULL);
++      chunks = malloc(sizeof(struct chunk) * nr_chunks);
++      if (chunks == NULL) {
++              fprintf(stderr, "malloc failed\n");
++              exit(1);
++      }
++      ext2fs_dblist_iterate(dblist, fill_chunks, NULL);
++
++      /* start readahead for two first chunks */
++      ra_chunk = chunks;
++      cur_chunk = NULL;
++
++      io_channel_readahead(fs->io,
++                           ra_chunk->start * chunk_size,
++                           chunk_size);
++      ra_chunk ++;
++      if (ra_chunk < chunks + nr_chunks)
++              io_channel_readahead(fs->io,
++                                   ra_chunk->start * chunk_size,
++                                   chunk_size);
++}
++
++/*
++ * this is called for each directory block when it is read by dblist
++ * iterator
++ */
++static int dblist_readahead(void *vp)
++{
++      if (chunk_size == 0)
++              return 0;
++      if (cur_chunk == NULL)
++              cur_chunk = chunks;
++      if (--cur_chunk->covered == 0) {
++              /*
++               * last block of current chunk is read, readahead
++               * chunk is under I/O, get new readahead chunk, move
++               * current chunk
++               */
++              cur_chunk ++;
++              ra_chunk ++;
++              if (ra_chunk < chunks + nr_chunks)
++                      io_channel_readahead(fs->io,
++                                           ra_chunk->start * chunk_size,
++                                           chunk_size);
++      }
++      return 0;
++}
++
++/*
++ * callback for ext2fs_dblist_dir_iterate to be called for each
++ * directory entry, perform actions common for both database and
++ * filelist modes, call specific functions depending on the mode
++ */
++static int dblist_iterate_cb(ext2_ino_t dirino, int entry,
++                           struct ext2_dir_entry *dirent,
++                           int offset EXT2FS_ATTR((unused)),
++                           int blocksize EXT2FS_ATTR((unused)),
++                           char *buf EXT2FS_ATTR((unused)),
++                           void *private)
++{
++      int namelen;
++
++      if (offset == 0) {
++              /* new directory block is read */
++              scan_data.nr ++;
++              dblist_readahead(NULL);
++      }
++
++      if (dirent->inode == 0)
++              return 0;
++
++      namelen = (dirent->name_len & 0xFF);
++      if (namelen == 2 && !strncmp(dirent->name, "..", 2))
++              return 0;
++
++      if (namelen == 1 && !strncmp(dirent->name, ".", 1))
++              return 0;
++
++      if (dirent->inode > fs->super->s_inodes_count) {
++              fprintf(stderr, "too big ino %u (%.*s)\n",
++                      dirent->inode, namelen, dirent->name);
++              exit(1);
++      }
++
++      if (scan_data.mode == SM_DATABASE)
++              return database_dblist_iterate_cb(dirino, dirent, namelen,
++                                                scan_data.db.fd);
++
++      return filelist_dblist_iterate_cb(dirino, dirent, namelen);
++}
++
++int main(int argc, char **argv)
++{
++      char *root = "/";
++      int inode_buffer_blocks = 0;
++      errcode_t retval;
++      char *block_buf;
++      ext2_inode_scan scan;
++      struct ext2_inode inode;
++      ext2_ino_t ino;
++      dgrp_t nr;
++      time_t t;
++      int c;
++      pid_t pid;
++
++      /*
++       * by default find for files which are modified less than one
++       * day ago
++       */
++      scan_data.fl.mtimestamp = time(NULL) - 60 * 60 * 24;
++      scan_data.fl.ctimestamp = scan_data.fl.mtimestamp;
++      outfile = stdout;
++
++      opterr = 0;
++#if defined(HAVE_SQLITE3) && defined(HAVE_SQLITE3_H)
++#define OPTF "f"
++#else
++#define OPTF ""
++#endif
++      while ((c = getopt(argc, argv, "a:b:C:d:D"OPTF"hln:N:o:")) != EOF) {
++              char *end;
++
++              switch (c) {
++              case 'a':
++                      if (optarg == NULL)
++                              usage(argv[0]);
++                      readahead_groups = strtoul(optarg, &end, 0);
++                      if (*end) {
++                              fprintf(stderr, "%s: bad -a argument '%s'\n",
++                                      argv[0], optarg);
++                              usage(argv[0]);
++                      }
++                      break;
++              case 'b':
++                      inode_buffer_blocks = strtoul(optarg, &end, 0);
++                      if (*end) {
++                              fprintf(stderr, "%s: bad -b argument '%s'\n",
++                                      argv[0], optarg);
++                              usage(argv[0]);
++                      }
++                      break;
++              case 'C':
++                      root = optarg;
++                      break;
++              case 'd':
++                      database = optarg;
++                      break;
++              case 'D':
++                      scan_data.fl.with_dirs = 1;
++                      break;
++              case 'f':
++#if !defined(HAVE_SQLITE3) || !defined(HAVE_SQLITE3_H)
++                      fprintf(stderr,
++                              "%s: sqlite3 was not detected on configure, "
++                              "database creation is not supported\n",argv[0]);
++                      return 1;
++#endif
++                      scan_data.mode = SM_DATABASE;
++                      break;
++              case 'l':
++                      scan_data.mode = SM_FILELIST;
++                      break;
++              case 'n':
++                      get_timestamps(optarg);
++                      break;
++              case 'N': {
++                      const char *fmts[] = {"%c", /*date/time current locale*/
++                                            "%Ec",/*date/time alt. locale*/
++                                            "%a%t%b%t%d,%t%Y%t%H:%M:%S",
++                                            "%a,%t%d%t%b%t%Y%t%H:%M:%S",
++                                            "%a%t%b%t%d%t%H:%M:%S%t%Z%t%Y",
++                                            "%a%t%b%t%d%t%H:%M:%S%t%Y",
++                                            "%b%t%d%t%H:%M:%S%t%Z%t%Y",
++                                            "%b%t%d%t%H:%M:%S%t%Y",
++                                            "%x%t%X",/*date time*/
++                                            "%Ex%t%EX",/*alternate date time*/
++                                            "%F", /*ISO 8601 date*/
++                                            "%+", /*`date` format*/
++                                            "%s", /*seconds since epoch */
++                                            NULL,
++                                          };
++                      const char **fmt;
++                      char *ret;
++                      struct tm tmptm, *tm = NULL;
++                      time_t now = time(0);
++
++                      tmptm = *localtime(&now);
++
++                      for (fmt = &fmts[0]; *fmt != NULL; fmt++) {
++                              if (strptime(optarg, *fmt, &tmptm) != NULL) {
++                                      tm = &tmptm;
++                                      break;
++                              }
++                      }
++
++                      if (tm == NULL) {
++                              fprintf(stderr, "%s: bad -N argument '%s'\n",
++                                      argv[0], optarg);
++                              usage(argv[0]);
++                      }
++                      scan_data.fl.mtimestamp = mktime(tm);
++                      scan_data.fl.ctimestamp = scan_data.fl.mtimestamp;
++                      break;
++                      }
++              case 'o':
++                      outfile = fopen(optarg, "w");
++                      if (outfile == NULL) {
++                              fprintf(stderr, "%s: can't open '%s': %s\n",
++                                      argv[0], optarg, strerror(errno));
++                              usage(argv[0]);
++                      }
++                      break;
++              default:
++                      fprintf(stderr, "%s: unknown option '-%c'\n",
++                              argv[0], optopt);
++              case 'h':
++                      usage(argv[0]);
++              }
++      }
++
++      if (scan_data.mode == SM_NONE || argv[optind] == NULL)
++              usage(argv[0]);
++
++
++      fprintf(stderr, "generating list of files with\n"
++              "\tmtime newer than %s"
++              "\tctime newer than %s",
++              ctime(&scan_data.fl.mtimestamp),
++              ctime(&scan_data.fl.ctimestamp));
++
++      retval = ext2fs_open(argv[optind], EXT2_FLAG_SOFTSUPP_FEATURES,
++                           0, 0, unix_io_manager, &fs);
++      if (retval != 0) {
++              com_err("ext2fs_open", retval, "opening %s\n", argv[optind]);
++              return 1;
++      }
++
++      t = time(NULL);
++
++      for (nr = 0; nr < fs->group_desc_count; nr ++)
++              io_channel_readahead(fs->io,
++                                   ext2fs_inode_bitmap_loc(fs, nr), 1);
++      retval = ext2fs_read_inode_bitmap(fs);
++      if (retval) {
++              com_err("ext2fs_read_inode_bitmap", retval,
++                      "opening inode bitmap on %s\n", argv[optind]);
++              exit(1);
++      }
++      fprintf(stderr, "inode bitmap is read, %ld seconds\n", time(NULL) - t);
++
++
++      if (inode_buffer_blocks == 0)
++              inode_buffer_blocks = fs->inode_blocks_per_group;
++
++      retval = ext2fs_open_inode_scan(fs, inode_buffer_blocks, &scan);
++      if (retval) {
++              com_err("ext2fs_open_inode_scan", retval,
++                      "opening inode scan on %s\n", argv[optind]);
++              fprintf(stderr, "failed to open inode scan\n");
++              exit(1);
++      }
++      ext2fs_set_inode_callback(scan, done_group_callback, NULL);
++
++      retval = ext2fs_init_dblist(fs, NULL);
++      if (retval) {
++              com_err("ext2fs_init_dblist", retval,
++                      "initializing dblist\n");
++              exit(1);
++      }
++
++      block_buf = (char *)malloc(fs->blocksize * 3);
++      if (block_buf == NULL) {
++              fprintf(stderr, "%s: failed to allocate memory for block_buf\n",
++                      argv[0]);
++              exit(1);
++      }
++      memset(block_buf, 0, fs->blocksize * 3);
++
++      switch (scan_data.mode) {
++      case SM_DATABASE:
++              pid = fork_db_creation(database);
++              break;
++
++      case SM_FILELIST:
++              c = create_root_dentries(root);
++              if (c == ENOENT && strncmp(root, "/ROOT", 5) != 0) {
++                      /* Try again with prepending "/ROOT" */
++                      char newroot[PATH_MAX];
++                      if (snprintf(newroot, PATH_MAX, "/ROOT/%s", root) >=
++                          PATH_MAX) {
++                              fprintf(stderr, "%s: root path '%s' too long\n",
++                                      argv[0], root);
++                              exit(1);
++                      }
++                      if (create_root_dentries(newroot) == 0)
++                              c = 0;
++              }
++              if (c == ENOENT)
++                      fprintf(stderr,
++                              "%s: visible filesystem root '%s' not found\n",
++                              argv[0], root);
++              else if (c == EIO)
++                      fprintf(stderr,
++                              "%s: error reading visible root: '%s'\n",
++                              argv[0], root);
++              else if (c == ENOTDIR)
++                      fprintf(stderr,
++                             "%s: visible root '%s' not a directory\n",
++                             argv[0], root);
++              if (c)
++                      exit(1);
++              break;
++      default:
++              break;
++      }
++
++      t = time(NULL);
++      fprintf(stderr, "scanning inode tables .. ");
++      scan_data.nr = 0;
++
++      done_group_callback(fs, scan, -readahead_groups * 2, NULL);
++      done_group_callback(fs, scan, -readahead_groups, NULL);
++      while (ext2fs_get_next_inode(scan, &ino, &inode) == 0) {
++              if (ino == 0)
++                      break;
++
++              scan_data.nr ++;
++              if (ext2fs_fast_test_inode_bitmap2(fs->inode_map, ino) == 0)
++                      /* deleted - always skip for now */
++                      continue;
++              switch (scan_data.mode) {
++              case SM_DATABASE:
++                      database_iscan_action(ino, &inode, scan_data.db.fd,
++                                            block_buf);
++                      break;
++
++              case SM_FILELIST:
++                      filelist_iscan_action(ino, &inode, block_buf);
++                      break;
++
++              default:
++                      break;
++              }
++      }
++
++      switch (scan_data.mode) {
++      case SM_DATABASE:
++              fprintf(stderr,
++                      "done\n\t%d inodes, %ld seconds\n",
++                      scan_data.nr, time(NULL) - t);
++              break;
++
++      case SM_FILELIST:
++              fprintf(stderr, "done\n\t%d inodes, %ld seconds, %d files, "
++                      "%d dirs to find\n",
++                      scan_data.nr, time(NULL) - t, scan_data.fl.nr_files,
++                      scan_data.fl.nr_dirs);
++              if (scan_data.fl.nr_files == 0 && scan_data.fl.nr_dirs == 0) {
++                      ext2fs_close_inode_scan(scan);
++                      ext2fs_close(fs);
++                      free(block_buf);
++                      return 0;
++              }
++              break;
++
++      default:
++              break;
++      }
++
++      t = time(NULL);
++      fprintf(stderr, "scanning directory blocks (%u).. ",
++              ext2fs_dblist_count(fs->dblist));
++
++      /* root directory does not have name, handle it separately */
++      report_root();
++      /*
++       * we have a list of directory leaf blocks, blocks are sorted,
++       * but can be not very sequential. If such blocks are close to
++       * each other, read throughput can be improved if blocks are
++       * read not sequentially, but all at once in a big
++       * chunk. Create list of those chunks, it will be then used to
++       * issue readahead
++       */
++      make_chunk_list(fs->dblist);
++
++      scan_data.nr = 0;
++      retval = ext2fs_dblist_dir_iterate(fs->dblist,
++                                         DIRENT_FLAG_INCLUDE_EMPTY,
++                                         block_buf,
++                                         dblist_iterate_cb, NULL);
++      if (retval) {
++              com_err("ext2fs_dblist_dir_iterate", retval,
++                      "dir iterating dblist\n");
++              exit(1);
++      }
++      if (chunk_size)
++              free(chunks);
++
++      switch (scan_data.mode) {
++      case SM_DATABASE:
++      {
++              int status;
++
++              fprintf(stderr,
++                      "done\n\t%d blocks, %ld seconds, "
++                      "%d records sent to database\n",
++                      scan_data.nr, time(NULL) - t, scan_data.db.nr_commands);
++              close(scan_data.db.fd);
++              waitpid(pid, &status, 0);
++              if (WIFEXITED(status))
++                      fprintf(stderr, "database creation exited with %d\n",
++                              WEXITSTATUS(status));
++              break;
++      }
++
++      case SM_FILELIST:
++              fprintf(stderr,
++                      "done\n\t%d blocks, %ld seconds, %d files reported\n",
++                      scan_data.nr, time(NULL) - t, scan_data.fl.nr_reported);
++              break;
++
++      default:
++              break;
++      }
++
++      ext2fs_close_inode_scan(scan);
++      ext2fs_close(fs);
++      free(block_buf);
++
++      return 0;
++}
+Index: e2fsprogs/e2scan/Makefile.in
+===================================================================
+--- /dev/null
++++ e2fsprogs/e2scan/Makefile.in
+@@ -0,0 +1,104 @@
++#
++# Standard e2fsprogs prologue....
++#
++
++srcdir = @srcdir@
++top_srcdir = @top_srcdir@
++VPATH = @srcdir@
++top_builddir = ..
++my_dir = e2scan
++INSTALL = @INSTALL@
++SQLITE3_LIB = @SQLITE3_LIB@
++
++@MCONFIG@
++
++PROGS=                e2scan
++MANPAGES=     e2scan.8
++
++MK_CMDS=      _SS_DIR_OVERRIDE=../lib/ss ../lib/ss/mk_cmds
++
++E2SCAN_OBJS=e2scan.o db.o filelist.o
++
++SRCS=$(srcdir)/e2scan.c $(srcdir)/filelist.c $(srcdir)/db.c
++
++LIBS=$(LIBEXT2FS) $(LIBE2P) $(LIBSS) $(LIBCOM_ERR) $(LIBBLKID) \
++      $(LIBUUID) $(SQLITE3_LIB)
++DEPLIBS=$(LIBEXT2FS) $(LIBE2P) $(LIBSS) $(LIBCOM_ERR) $(DEPLIBBLKID) $(DEPLIBUUID)
++
++.c.o:
++      @echo " CC $<"
++      @$(CC) -c $(ALL_CFLAGS) $< -o $@
++
++all:: $(PROGS) $(MANPAGES)
++
++e2scan: $(E2SCAN_OBJS) $(DEPLIBS)
++      @$(CC) $(ALL_LDFLAGS) -o e2scan $(E2SCAN_OBJS) $(LIBS)
++
++e2scan.8: $(DEP_SUBSTITUTE) $(srcdir)/e2scan.8.in
++      @echo " SUBST $@"
++      @$(SUBSTITUTE_UPTIME) $(srcdir)/e2scan.8.in e2scan.8
++
++installdirs:
++      @echo " MKINSTALLDIRS $(sbindir) $(man8dir)"
++      @$(MKINSTALLDIRS) $(DESTDIR)$(sbindir) \
++              $(DESTDIR)$(man8dir)
++
++install: $(PROGS) $(MANPAGES) installdirs
++      @for i in $(PROGS); do \
++              echo "  INSTALL $(sbindir)/$$i"; \
++              $(INSTALL_PROGRAM) $$i $(DESTDIR)$(sbindir)/$$i; \
++      done
++      @for i in $(MANPAGES); do \
++              for j in $(COMPRESS_EXT); do \
++                      $(RM) -f $(DESTDIR)$(man8dir)/$$i.$$j; \
++              done; \
++              echo "  INSTALL_DATA $(man8dir)/$$i"; \
++              $(INSTALL_DATA) $$i $(DESTDIR)$(man8dir)/$$i; \
++      done
++
++install-strip: install
++      @for i in $(PROGS); do \
++              echo "  STRIP $(sbindir)/$$i"; \
++              $(STRIP) $(DESTDIR)$(sbindir)/$$i; \
++      done
++
++uninstall:
++      for i in $(PROGS); do \
++              $(RM) -f $(DESTDIR)$(sbindir)/$$i; \
++      done
++      for i in $(MANPAGES); do \
++              $(RM) -f $(DESTDIR)$(man8dir)/$$i; \
++      done
++
++#check::
++#     ./correct_test1 Makefile out
++#     ./correct_test2
++
++clean:
++      $(RM) -f e2scan correct_test1 correct_test2 e2scan.8 \#* *.s *.o *.a *~ core out
++
++mostlyclean: clean
++distclean: clean
++      $(RM) -f debug_cmds.c .depend Makefile $(srcdir)/TAGS \
++              $(srcdir)/Makefile.in.old
++
++# +++ Dependency line eater +++
++#
++# Makefile dependencies follow.  This must be the last section in
++# the Makefile.in file
++#
++filelist.o: $(srcdir)/filelist.c $(top_srcdir)/lib/ext2fs/ext2_fs.h \
++ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
++ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_srcdir)/lib/et/com_err.h \
++ $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
++ $(top_srcdir)/lib/ext2fs/bitops.h
++db.o: $(srcdir)/db.c $(top_srcdir)/lib/ext2fs/ext2_fs.h \
++ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
++ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_srcdir)/lib/et/com_err.h \
++ $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
++ $(top_srcdir)/lib/ext2fs/bitops.h
++e2scan.o: $(srcdir)/e2scan.c \
++ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
++ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
++ $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
++ $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h
+Index: e2fsprogs/Makefile.in
+===================================================================
+--- e2fsprogs.orig/Makefile.in
++++ e2fsprogs/Makefile.in
+@@ -13,9 +13,10 @@ INSTALL = @INSTALL@
+ @DEBUGFS_CMT@DEBUGFS_DIR= debugfs
+ @UUID_CMT@UUID_LIB_SUBDIR= lib/uuid
+ @BLKID_CMT@BLKID_LIB_SUBDIR= lib/blkid
++@E2SCAN_CMT@E2SCAN_DIR= e2scan
+ LIB_SUBDIRS=lib/et lib/ss lib/e2p $(UUID_LIB_SUBDIR) lib/ext2fs $(BLKID_LIB_SUBDIR) intl
+-PROG_SUBDIRS=e2fsck $(DEBUGFS_DIR) misc $(RESIZE_DIR) tests/progs po
++PROG_SUBDIRS=e2fsck $(DEBUGFS_DIR) misc $(RESIZE_DIR) tests/progs po $(E2SCAN_DIR)
+ SUBDIRS=util $(LIB_SUBDIRS) $(PROG_SUBDIRS) tests
+ SUBS= lib/ext2fs/ext2_types.h lib/blkid/blkid_types.h lib/uuid/uuid_types.h
+@@ -60,7 +61,7 @@ distclean-doc:
+ install: subs all-libs-recursive install-progs-recursive \
+   install-shlibs-libs-recursive install-doc-libs
+-      if test ! -d e2fsck && test ! -d debugfs && test ! -d misc && test ! -d ext2ed ; then $(MAKE) install-libs ; fi
++      if test ! -d e2fsck && test ! -d debugfs && test ! -d e2scan && test ! -d misc && test ! -d ext2ed ; then $(MAKE) install-libs ; fi
+ install-strip: subs all-libs-recursive install-strip-progs-recursive \
+   install-shlibs-strip-libs-recursive install-doc-libs
+Index: e2fsprogs/lib/ext2fs/dblist.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/dblist.c
++++ e2fsprogs/lib/ext2fs/dblist.c
+@@ -152,7 +152,6 @@ errcode_t ext2fs_copy_dblist(ext2_dblist
+  * (moved to closefs.c)
+  */
+-
+ /*
+  * Add a directory block to the directory block list
+  */
+Index: e2fsprogs/e2scan/filelist.c
+===================================================================
+--- /dev/null
++++ e2fsprogs/e2scan/filelist.c
+@@ -0,0 +1,455 @@
++#define _GNU_SOURCE
++#define _FILE_OFFSET_BITS 64
++
++#include <stdio.h>
++#include <assert.h>
++#include <sys/stat.h>
++#include <time.h>
++#include <unistd.h>
++#include <sys/errno.h>
++#include <search.h>
++#include <ext2fs/ext2fs.h>
++
++/* e2scan.c */
++extern ext2_filsys fs;
++extern FILE *outfile;
++extern struct {
++      int mode;
++      int nr;
++      union {
++              struct {
++                      int fd;
++                      int nr_commands;
++              } db;
++              struct {
++                      /* number of files newer than specified time */
++                      ext2_ino_t nr_files;
++                      ext2_ino_t nr_dirs;
++                      /* number of files reported */
++                      ext2_ino_t nr_reported;
++                      time_t mtimestamp;
++                      time_t ctimestamp;
++                      int with_dirs;
++              } fl;
++      };
++} scan_data;
++
++ext2_ino_t visible_root_ino;
++
++int block_iterate_cb(ext2_filsys fs, blk_t  *block_nr,
++                   e2_blkcnt_t blockcnt,
++                   blk_t ref_block EXT2FS_ATTR((unused)),
++                   int ref_offset EXT2FS_ATTR((unused)),
++                   void *priv_data);
++
++
++/*
++create root dentry
++    root->connected_to_root = 1
++    root->d_path = "/"
++for each directory block:
++    if (directory is not in memory)
++      create new directory dentry
++      set directory->connected_to_root = 0
++    for each entry found in directory block:
++      if (entry is a subdirectory)
++          if (subdir is in memory)
++              subdir->d_parent = directory
++              if (directory->connected_to_root)
++                  recurse for each subsubdir
++                      subsubdir->connected_to_root = 1
++                      subsubdir->d_parent = subdir
++                      subsubdir->d_path = subdir->d_path + name
++                      for each non-directory entry on subdir
++                          generate full pathname and output
++                          drop filename entry from RAM
++          else
++              create new subdir dentry
++              subdir->connected_to_root = directory->connected_to_root
++              subdir->d_parent = directory
++              if (directory->connected_to_root)
++                  subdir->d_path = directory->d_path + name
++      else if (file is interesting)
++          if (directory->connected_to_root)
++              generate full pathname and output
++          else
++              create filename entry
++              attach filename to directory
++*/
++
++struct e2scan_dentry {
++      ext2_ino_t ino;
++      struct e2scan_dentry *d_parent;
++      char *name;
++      struct e2scan_dentry *d_child; /* pointer to first of subdirs */
++      struct e2scan_dentry *d_next; /* pointer to next directory */
++      unsigned connected_to_root:1;
++      unsigned is_file:1;
++      unsigned is_dir:1;
++      unsigned not_in_root:1;
++      unsigned is_printed:1;
++};
++
++static void *dentry_tree = NULL;
++
++static int compare_ino(const void *a, const void *b)
++{
++      const struct e2scan_dentry *d1;
++      const struct e2scan_dentry *d2;
++
++      d1 = a;
++      d2 = b;
++      if (d1->ino > d2->ino)
++              return 1;
++      if (d1->ino < d2->ino)
++              return -1;
++      return 0;
++}
++
++static struct e2scan_dentry *find_dentry(ext2_ino_t ino)
++{
++      struct e2scan_dentry tmp, **pdentry;
++
++      tmp.ino = ino;
++      pdentry = tfind(&tmp, &dentry_tree, compare_ino);
++      return (pdentry == NULL) ? NULL : *pdentry;
++}
++
++static struct e2scan_dentry *find_or_create_dentry(ext2_ino_t ino, int *created)
++{
++      struct e2scan_dentry **dentry, *new;
++
++      new = calloc(1, sizeof(struct e2scan_dentry));
++      if (new == NULL) {
++              fprintf(stderr, "malloc failed");
++              exit(1);
++      }
++      new->ino = ino;
++
++      dentry = tsearch(new, &dentry_tree, compare_ino);
++      if (dentry == NULL) {
++              fprintf(stderr, "tsearch failed");
++              exit(1);
++      }
++      if (*dentry != new) {
++              *created = 0;
++              free(new);
++      } else {
++              *created = 1;
++      }
++
++      return *dentry;
++}
++
++static int is_file_interesting(ext2_ino_t ino)
++{
++      return ext2fs_fast_test_inode_bitmap2(fs->inode_map, ino);
++}
++
++static void link_to_parent(struct e2scan_dentry *parent,
++                         struct e2scan_dentry *child)
++{
++      child->d_next = parent->d_child;
++      parent->d_child = child;
++      child->d_parent = parent;
++}
++
++static void dentry_attach_name(struct e2scan_dentry *dentry, int namelen,
++                             const char *name)
++{
++      if (dentry->name) {
++              if (namelen == 1 && (!strcmp(name, ".") || !strcmp(name, "/")))
++                      return;
++              fprintf(stderr, "dentry name: %s, name %.*s\n",
++                      dentry->name, namelen, name);
++              exit(1);
++      }
++      asprintf(&dentry->name, "%.*s", namelen, name);
++}
++
++/*
++  - look up $ROOT in the filesystem
++  - build dentry for each component of the path, starting at /
++  - for each component of the path except the last, mark dentry "not_in_root"
++*/
++int create_root_dentries(char *root)
++{
++      int created;
++      char *name;
++      ext2_ino_t ino;
++      struct e2scan_dentry *child, *parent;
++      struct ext2_inode inode;
++      char *copy, *p;
++
++      copy = p = strdup(root);
++
++      ino = EXT2_ROOT_INO;
++      name = "/";
++      parent = NULL;
++      do {
++              child = find_or_create_dentry(ino, &created);
++              dentry_attach_name(child, strlen(name), name);
++              child->connected_to_root = 1;
++              child->not_in_root = 1;
++              if (parent != NULL)
++                      link_to_parent(parent, child);
++              parent = child;
++
++              name = strtok(copy, "/");
++              if (name == NULL)
++                      break;
++              copy = NULL;
++
++              if (ext2fs_lookup(fs, ino, name, strlen(name), NULL, &ino))
++                      return ENOENT;
++      } while (1);
++
++      if (ext2fs_read_inode(fs, ino, &inode))
++              return EIO;
++
++      if (!LINUX_S_ISDIR(inode.i_mode)) {
++              return ENOTDIR;
++      }
++      child->not_in_root = 0;
++      visible_root_ino = ino;
++      fprintf(stderr, "visible root: \"%s\"\n", root);
++
++      free(p);
++
++      return 0;
++}
++
++static inline void output_dot(void)
++{
++      fprintf(outfile, ".");
++}
++
++static inline void output_dot_newline(void)
++{
++      fprintf(outfile, ".\n");
++}
++
++static inline void output_dir_name(const char *dirname)
++{
++      fprintf(outfile, "/%s", dirname);
++}
++
++static inline void output_file_name(const char *filename, int len)
++{
++      fprintf(outfile, "/%.*s\n", len, filename);
++}
++
++static int up_path(struct e2scan_dentry *dentry)
++{
++      int len;
++
++      len = 0;
++      while (dentry->ino != visible_root_ino) {
++              if (dentry->ino == EXT2_ROOT_INO)
++                      return -1;
++              dentry = dentry->d_parent;
++              len ++;
++      }
++      return len;
++}
++
++static void revert_dir_name(int path_length, struct e2scan_dentry *dentry)
++{
++      if (path_length > 0) {
++              path_length --;
++              revert_dir_name(path_length, dentry->d_parent);
++              output_dir_name(dentry->name);
++      }
++      return;
++}
++
++static void report_file_name(struct e2scan_dentry *dentry, ext2_ino_t ino,
++                           const char *name, int namelen)
++{
++      int path_up_length;
++
++      ext2fs_fast_unmark_inode_bitmap2(fs->inode_map, ino);
++
++      if (ino == visible_root_ino) {
++              /* visible root is to be reported */
++              output_dot_newline();
++              scan_data.fl.nr_reported ++;
++              return;
++      }
++
++      path_up_length = up_path(dentry);
++      if (path_up_length == -1)
++              /* file is not in visible root */
++              return;
++
++      output_dot();
++      revert_dir_name(path_up_length, dentry);
++      /* the file is under visible root */
++      scan_data.fl.nr_reported ++;
++      output_file_name(name, namelen);
++}
++
++void report_root(void)
++{
++      if (EXT2_ROOT_INO == visible_root_ino &&
++          is_file_interesting(EXT2_ROOT_INO)) {
++              output_dot_newline();
++              scan_data.fl.nr_reported ++;
++      }
++}
++
++static struct e2scan_dentry *connect_subtree_to_root(struct e2scan_dentry *dir,
++                                            int not_in_root)
++{
++      struct e2scan_dentry *subdir, *prev, *p;
++
++      assert(!dir->is_file);
++      dir->connected_to_root = 1;
++      dir->not_in_root = not_in_root;
++
++      subdir = dir->d_child;
++      prev = NULL;
++      while (subdir) {
++              if (subdir->is_file) {
++                      /* report filename and release dentry */
++                      report_file_name(dir, subdir->ino, subdir->name,
++                                       strlen(subdir->name));
++
++                      if (prev == NULL)
++                              dir->d_child = subdir->d_next;
++                      else
++                              prev->d_next = subdir->d_next;
++
++                      p = tdelete(subdir, &dentry_tree, compare_ino);
++                      assert(p != NULL);
++
++                      free(subdir->name);
++                      p = subdir->d_next;
++                      free(subdir);
++                      subdir = p;
++                      continue;
++              }
++              if (subdir->is_dir && subdir->is_printed == 0) {
++                      /* report directory name */
++                      report_file_name(dir, subdir->ino, subdir->name,
++                                       strlen(subdir->name));
++                      subdir->is_printed = 1;
++              }
++              connect_subtree_to_root(subdir, not_in_root);
++              prev = subdir;
++              subdir = subdir->d_next;
++      }
++      return NULL;
++}
++
++void filelist_iscan_action(ext2_ino_t ino,
++                         struct ext2_inode *inode, char *buf)
++{
++      int created;
++      struct e2scan_dentry *dentry;
++      int to_be_listed;
++
++      if (!LINUX_S_ISDIR(inode->i_mode) &&
++          (inode->i_flags & EXT2_NODUMP_FL)) {
++              /* skip files which are not to be backuped */
++              ext2fs_fast_unmark_inode_bitmap2(fs->inode_map, ino);
++              return;
++      }
++
++      to_be_listed = (inode->i_ctime < scan_data.fl.ctimestamp &&
++                      inode->i_mtime < scan_data.fl.mtimestamp) ? 0 : 1;
++      if (LINUX_S_ISDIR(inode->i_mode)) {
++              dentry = find_or_create_dentry(ino, &created);
++
++              if (ext2fs_block_iterate2(fs, ino, 0, buf,
++                                        block_iterate_cb, &ino)) {
++                      fprintf(stderr, "ext2fs_block_iterate2 failed\n");
++                      exit(1);
++              }
++              dentry->is_dir = to_be_listed;
++      }
++      if (!to_be_listed)
++              /* too old files are not interesting */
++              ext2fs_fast_unmark_inode_bitmap2(fs->inode_map, ino);
++      else {
++              /* files and directories to find names of */
++              if (LINUX_S_ISDIR(inode->i_mode)) {
++                      if (scan_data.fl.with_dirs)
++                              scan_data.fl.nr_dirs++;
++                      else
++                              ext2fs_fast_unmark_inode_bitmap2(fs->inode_map,
++                                                              ino);
++              } else
++                      scan_data.fl.nr_files++;
++      }
++}
++
++int filelist_dblist_iterate_cb(ext2_ino_t dirino,
++                             struct ext2_dir_entry *dirent,
++                             int namelen)
++{
++      struct e2scan_dentry *dir, *subdir;
++      int created;
++      int ret;
++      struct ext2_dir_entry_2 *dirent2;
++      int is_dirname;
++
++      dir = find_dentry(dirino);
++      assert(dir != NULL);
++
++      dirent2 = (struct ext2_dir_entry_2 *)dirent;
++      is_dirname = (dirent2->file_type == EXT2_FT_DIR) ? 1 : 0;
++      if (is_dirname) {
++              subdir = find_dentry(dirent->inode);
++              if (subdir == NULL)
++                      /* new name is encountered, skip it */
++                      return 0;
++
++              if (subdir->d_parent == NULL) {
++                      dentry_attach_name(subdir, namelen, dirent->name);
++                      link_to_parent(dir, subdir);
++
++                      if (dir->connected_to_root)
++                              /*
++                               * go down and connect all subdirs to
++                               * root recursively
++                               */
++                              connect_subtree_to_root(subdir,
++                                                      dir->not_in_root);
++              }
++      }
++      if (is_file_interesting(dirent->inode)) {
++              if (dir->connected_to_root) {
++                      if (is_dirname && subdir->is_printed == 0) {
++                              report_file_name(dir, dirent->inode,
++                                               dirent->name, namelen);
++                              subdir->is_printed = 1;
++                      } else
++                              report_file_name(dir, dirent->inode,
++                                               dirent->name, namelen);
++              } else {
++                      subdir = find_or_create_dentry(dirent->inode, &created);
++                      if (created) {
++                              dentry_attach_name(subdir,namelen,dirent->name);
++
++                              link_to_parent(dir, subdir);
++                              subdir->is_file = 1;
++                      } else {
++                              /*
++                               * dentry exists already, hard link
++                               * encountered, nothing to do about it
++                               */
++                              ;
++                      }
++              }
++      }
++      ret = 0;
++      if (scan_data.fl.nr_reported ==
++          (scan_data.fl.nr_files + scan_data.fl.nr_dirs))
++              /*
++               * names of all recently modified files are
++               * generated, break dblist iteration
++               */
++              ret |= DIRENT_ABORT;
++      return ret;
++}
+Index: e2fsprogs/util/subst.conf.in
+===================================================================
+--- e2fsprogs.orig/util/subst.conf.in
++++ e2fsprogs/util/subst.conf.in
+@@ -5,6 +5,8 @@ SS_DIR                 @SS_DIR@
+ E2FSPROGS_MONTH               @E2FSPROGS_MONTH@
+ E2FSPROGS_YEAR                @E2FSPROGS_YEAR@
+ E2FSPROGS_VERSION     @E2FSPROGS_VERSION@
++E2SCAN_CMT            @E2SCAN_CMT@
++E2SCAN_MAN            @E2SCAN_MAN@
+ LFSCK_CMT             @LFSCK_CMT@
+ LFSCK_MAN             @LFSCK_MAN@
+ SIZEOF_LONG_LONG      @SIZEOF_LONG_LONG@
diff --git a/patches/e2fsprogs-expand-extra-isize.patch b/patches/e2fsprogs-expand-extra-isize.patch
new file mode 100644 (file)
index 0000000..60397ee
--- /dev/null
@@ -0,0 +1,1728 @@
+This patch adds a "-E expand_extra_isize" feature which makes sure that
+_every_ used inode has i_extra_isize >= s_min_extra_isize if
+s_min_extra_isize is set. Else it makes sure that i_extra_isize of every
+inode is equal to sizeof(ext2_inode_large) - 128.
+
+This is useful for the case where nanosecond timestamps or 64-bit inode
+version fields are required for all inodes in the filesystem.
+
+Signed-off-by: Kalpak Shah <kalpak@clusterfs.com>
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/lib/ext2fs/ext_attr.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext_attr.c
++++ e2fsprogs/lib/ext2fs/ext_attr.c
+@@ -17,6 +17,7 @@
+ #endif
+ #include <string.h>
+ #include <time.h>
++#include <errno.h>
+ #include "ext2_fs.h"
+ #include "ext2_ext_attr.h"
+@@ -60,6 +61,34 @@ __u32 ext2fs_ext_attr_hash_entry(struct 
+ #undef NAME_HASH_SHIFT
+ #undef VALUE_HASH_SHIFT
++#define BLOCK_HASH_SHIFT 16
++/*
++ * Re-compute the extended attribute hash value after an entry has changed.
++ */
++static void ext2fs_attr_rehash(struct ext2_ext_attr_header *header,
++                              struct ext2_ext_attr_entry *entry)
++{
++      struct ext2_ext_attr_entry *here;
++      __u32 hash = 0;
++
++      entry->e_hash = ext2fs_ext_attr_hash_entry(entry, (char *)header +
++                                                 entry->e_value_offs);
++
++      here = ENTRY(header+1);
++      while (!EXT2_EXT_IS_LAST_ENTRY(here)) {
++              if (!here->e_hash) {
++                      /* Block is not shared if an entry's hash value == 0 */
++                      hash = 0;
++                      break;
++              }
++              hash = (hash << BLOCK_HASH_SHIFT) ^
++                     (hash >> (8*sizeof(hash) - BLOCK_HASH_SHIFT)) ^
++                     here->e_hash;
++              here = EXT2_EXT_ATTR_NEXT(here);
++      }
++      header->h_hash = hash;
++}
++
+ errcode_t ext2fs_read_ext_attr2(ext2_filsys fs, blk64_t block, void *buf)
+ {
+       errcode_t       retval;
+@@ -132,7 +161,10 @@ errcode_t ext2fs_adjust_ea_refcount2(ext
+       if (retval)
+               goto errout;
+-      header = (struct ext2_ext_attr_header *) block_buf;
++      header = BHDR(block_buf);
++      if (header->h_magic != EXT2_EXT_ATTR_MAGIC)
++              return EXT2_ET_EA_BAD_MAGIC;
++
+       header->h_refcount += adjust;
+       if (newcount)
+               *newcount = header->h_refcount;
+@@ -151,5 +183,903 @@ errcode_t ext2fs_adjust_ea_refcount(ext2
+                                       char *block_buf, int adjust,
+                                       __u32 *newcount)
+ {
+-      return ext2fs_adjust_ea_refcount(fs, blk, block_buf, adjust, newcount);
++      return ext2fs_adjust_ea_refcount2(fs, blk, block_buf, adjust, newcount);
++}
++
++struct ext2_attr_info {
++      int name_index;
++      const char *name;
++      const char *value;
++      int value_len;
++};
++
++struct ext2_attr_search {
++      struct ext2_ext_attr_entry *first;
++      char *base;
++      char *end;
++      struct ext2_ext_attr_entry *here;
++      int not_found;
++};
++
++struct ext2_attr_ibody_find {
++      ext2_ino_t ino;
++      struct ext2_attr_search s;
++};
++
++struct ext2_attr_block_find {
++      struct ext2_attr_search s;
++      char *block;
++};
++
++void ext2fs_attr_shift_entries(struct ext2_ext_attr_entry *entry,
++                             int value_offs_shift, char *to,
++                             char *from, int n)
++{
++      struct ext2_ext_attr_entry *last = entry;
++
++      /* Adjust the value offsets of the entries */
++      for (; !EXT2_EXT_IS_LAST_ENTRY(last); last = EXT2_EXT_ATTR_NEXT(last)) {
++              if (!last->e_value_block && last->e_value_size) {
++                      last->e_value_offs = last->e_value_offs +
++                                                      value_offs_shift;
++              }
++      }
++      /* Shift the entries by n bytes and zero freed space in inode */
++      memmove(to, from, n);
++      if (to > from)
++              memset(from, 0, to - from);
++}
++
++/*
++ * This function returns the free space present in the inode or the EA block.
++ * total is number of bytes taken up by the EA entries and is used to shift
++ * the EAs in ext2fs_expand_extra_isize().
++ */
++int ext2fs_attr_free_space(struct ext2_ext_attr_entry *last,
++                         int *min_offs, char *base, int *total)
++{
++      for (; !EXT2_EXT_IS_LAST_ENTRY(last); last = EXT2_EXT_ATTR_NEXT(last)) {
++              *total += EXT2_EXT_ATTR_LEN(last->e_name_len);
++              if (!last->e_value_block && last->e_value_size) {
++                      int offs = last->e_value_offs;
++                      if (offs < *min_offs)
++                              *min_offs = offs;
++              }
++      }
++
++      return (*min_offs - ((char *)last - base) - sizeof(__u32));
++}
++
++static errcode_t ext2fs_attr_check_names(struct ext2_ext_attr_entry *entry,
++                                       char *end)
++{
++      while (!EXT2_EXT_IS_LAST_ENTRY(entry)) {
++              struct ext2_ext_attr_entry *next = EXT2_EXT_ATTR_NEXT(entry);
++              if ((char *)next >= end)
++                      return EXT2_ET_EA_BAD_ENTRIES;
++              entry = next;
++      }
++      return 0;
++}
++
++static errcode_t ext2fs_attr_find_entry(struct ext2_ext_attr_entry **pentry,
++                                      int name_index, const char *name,
++                                      int size, int sorted)
++{
++      struct ext2_ext_attr_entry *entry;
++      int name_len;
++      int cmp = 1;
++
++      if (name == NULL)
++              return EXT2_ET_EA_BAD_NAME;
++
++      name_len = strlen(name);
++      entry = *pentry;
++      for (; !EXT2_EXT_IS_LAST_ENTRY(entry);
++              entry = EXT2_EXT_ATTR_NEXT(entry)) {
++              cmp = name_index - entry->e_name_index;
++              if (!cmp)
++                      cmp = name_len - entry->e_name_len;
++              if (!cmp)
++                      cmp = memcmp(name, entry->e_name, name_len);
++              if (cmp <= 0 && (sorted || cmp == 0))
++                      break;
++      }
++      *pentry = entry;
++
++      return cmp ? EXT2_ET_EA_NAME_NOT_FOUND : 0;
++}
++
++static errcode_t ext2fs_attr_block_find(ext2_filsys fs,struct ext2_inode *inode,
++                                      struct ext2_attr_info *i,
++                                      struct ext2_attr_block_find *bs)
++{
++      struct ext2_ext_attr_header *header;
++      errcode_t error;
++
++      if (inode->i_file_acl) {
++              /* The inode already has an extended attribute block. */
++              error = ext2fs_get_mem(fs->blocksize, &bs->block);
++              if (error)
++                      return error;
++              error = ext2fs_read_ext_attr(fs, inode->i_file_acl, bs->block);
++              if (error)
++                      goto cleanup;
++
++              header = BHDR(bs->block);
++              if (header->h_magic != EXT2_EXT_ATTR_MAGIC) {
++                      error = EXT2_ET_EA_BAD_MAGIC;
++                      goto cleanup;
++              }
++
++              /* Find the named attribute. */
++              bs->s.base = bs->block;
++              bs->s.first = (struct ext2_ext_attr_entry *)(header + 1);
++              bs->s.end = bs->block + fs->blocksize;
++              bs->s.here = bs->s.first;
++              error = ext2fs_attr_find_entry(&bs->s.here, i->name_index,
++                                             i->name, fs->blocksize, 1);
++              if (error && error != EXT2_ET_EA_NAME_NOT_FOUND)
++                      goto cleanup;
++              bs->s.not_found = error;
++      }
++      error = 0;
++
++cleanup:
++      if (error && bs->block)
++              ext2fs_free_mem(&bs->block);
++      return error;
++}
++
++static errcode_t ext2fs_attr_ibody_find(ext2_filsys fs,
++                                      struct ext2_inode_large *inode,
++                                      struct ext2_attr_info *i,
++                                      struct ext2_attr_ibody_find *is)
++{
++      __u32 *eamagic;
++      char *start;
++      errcode_t error;
++
++      if (EXT2_INODE_SIZE(fs->super) == EXT2_GOOD_OLD_INODE_SIZE)
++              return 0;
++
++      if (inode->i_extra_isize == 0)
++              return 0;
++      eamagic = IHDR(inode);
++
++      start = (char *)inode + EXT2_GOOD_OLD_INODE_SIZE +
++                      inode->i_extra_isize + sizeof(__u32);
++      is->s.first = (struct ext2_ext_attr_entry *)start;
++      is->s.base = start;
++      is->s.here = is->s.first;
++      is->s.end = (char *)inode + EXT2_INODE_SIZE(fs->super);
++      if (*eamagic == EXT2_EXT_ATTR_MAGIC) {
++              error = ext2fs_attr_check_names((struct ext2_ext_attr_entry *)
++                                              start, is->s.end);
++              if (error)
++                      return error;
++              /* Find the named attribute. */
++              error = ext2fs_attr_find_entry(&is->s.here, i->name_index,
++                                             i->name, is->s.end -
++                                             (char *)is->s.base, 0);
++              if (error && error != EXT2_ET_EA_NAME_NOT_FOUND)
++                      return error;
++              is->s.not_found = error;
++      }
++
++      return 0;
++}
++
++static errcode_t ext2fs_attr_set_entry(ext2_filsys fs, struct ext2_attr_info *i,
++                                     struct ext2_attr_search *s)
++{
++      struct ext2_ext_attr_entry *last;
++      int free, min_offs = s->end - s->base, name_len = strlen(i->name);
++
++      /* Compute min_offs and last. */
++      for (last = s->first; !EXT2_EXT_IS_LAST_ENTRY(last);
++           last = EXT2_EXT_ATTR_NEXT(last)) {
++              if (!last->e_value_block && last->e_value_size) {
++                      int offs = last->e_value_offs;
++
++                      if (offs < min_offs)
++                              min_offs = offs;
++              }
++      }
++      free = min_offs - ((char *)last - s->base) - sizeof(__u32);
++
++      if (!s->not_found) {
++              if (!s->here->e_value_block && s->here->e_value_size) {
++                      int size = s->here->e_value_size;
++                      free += EXT2_EXT_ATTR_SIZE(size);
++              }
++              free += EXT2_EXT_ATTR_LEN(name_len);
++      }
++      if (i->value) {
++              if (free < EXT2_EXT_ATTR_LEN(name_len) +
++                         EXT2_EXT_ATTR_SIZE(i->value_len))
++                      return EXT2_ET_EA_NO_SPACE;
++      }
++
++      if (i->value && s->not_found) {
++              /* Insert the new name. */
++              int size = EXT2_EXT_ATTR_LEN(name_len);
++              int rest = (char *)last - (char *)s->here + sizeof(__u32);
++
++              memmove((char *)s->here + size, s->here, rest);
++              memset(s->here, 0, size);
++              s->here->e_name_index = i->name_index;
++              s->here->e_name_len = name_len;
++              memcpy(s->here->e_name, i->name, name_len);
++      } else {
++              if (!s->here->e_value_block && s->here->e_value_size) {
++                      char *first_val = s->base + min_offs;
++                      int offs = s->here->e_value_offs;
++                      char *val = s->base + offs;
++                      int size = EXT2_EXT_ATTR_SIZE(s->here->e_value_size);
++
++                      if (i->value &&
++                          size == EXT2_EXT_ATTR_SIZE(i->value_len)) {
++                              /* The old and the new value have the same
++                                 size. Just replace. */
++                              s->here->e_value_size = i->value_len;
++                              memset(val + size - EXT2_EXT_ATTR_PAD, 0,
++                                     EXT2_EXT_ATTR_PAD); /* Clear pad bytes */
++                              memcpy(val, i->value, i->value_len);
++                              return 0;
++                      }
++
++                      /* Remove the old value. */
++                      memmove(first_val + size, first_val, val - first_val);
++                      memset(first_val, 0, size);
++                      s->here->e_value_size = 0;
++                      s->here->e_value_offs = 0;
++                      min_offs += size;
++
++                      /* Adjust all value offsets. */
++                      last = s->first;
++                      while (!EXT2_EXT_IS_LAST_ENTRY(last)) {
++                              int o = last->e_value_offs;
++
++                              if (!last->e_value_block &&
++                                  last->e_value_size && o < offs)
++                                      last->e_value_offs = o + size;
++                              last = EXT2_EXT_ATTR_NEXT(last);
++                      }
++              }
++              if (!i->value) {
++                      /* Remove the old name. */
++                      int size = EXT2_EXT_ATTR_LEN(name_len);
++
++                      last = ENTRY((char *)last - size);
++                      memmove((char *)s->here, (char *)s->here + size,
++                              (char *)last - (char *)s->here + sizeof(__u32));
++                      memset(last, 0, size);
++              }
++      }
++
++      if (i->value) {
++              /* Insert the new value. */
++              s->here->e_value_size = i->value_len;
++              if (i->value_len) {
++                      int size = EXT2_EXT_ATTR_SIZE(i->value_len);
++                      char *val = s->base + min_offs - size;
++
++                      s->here->e_value_offs = min_offs - size;
++                      memset(val + size - EXT2_EXT_ATTR_PAD, 0,
++                             EXT2_EXT_ATTR_PAD); /* Clear the pad bytes. */
++                      memcpy(val, i->value, i->value_len);
++              }
++      }
++
++      return 0;
++}
++
++static errcode_t ext2fs_attr_block_set(ext2_filsys fs, struct ext2_inode *inode,
++                                     struct ext2_attr_info *i,
++                                     struct ext2_attr_block_find *bs)
++{
++      struct ext2_attr_search *s = &bs->s;
++      char *new_buf = NULL, *old_block = NULL;
++      blk_t blk;
++      int clear_flag = 0;
++      errcode_t error;
++
++      if (i->value && i->value_len > fs->blocksize)
++              return EXT2_ET_EA_NO_SPACE;
++
++      if (s->base) {
++              if (BHDR(s->base)->h_refcount != 1) {
++                      int offset = (char *)s->here - bs->block;
++
++                      /* Decrement the refcount of the shared block */
++                      old_block = s->base;
++                      BHDR(s->base)->h_refcount -= 1;
++
++                      error = ext2fs_get_mem(fs->blocksize, &s->base);
++                      if (error)
++                              goto cleanup;
++                      clear_flag = 1;
++                      memcpy(s->base, bs->block, fs->blocksize);
++                      s->first = ENTRY(BHDR(s->base)+1);
++                      BHDR(s->base)->h_refcount = 1;
++                      s->here = ENTRY(s->base + offset);
++                      s->end = s->base + fs->blocksize;
++              }
++      } else {
++              error = ext2fs_get_mem(fs->blocksize, &s->base);
++              if (error)
++                      goto cleanup;
++              clear_flag = 1;
++              memset(s->base, 0, fs->blocksize);
++              BHDR(s->base)->h_magic = EXT2_EXT_ATTR_MAGIC;
++              BHDR(s->base)->h_blocks = 1;
++              BHDR(s->base)->h_refcount = 1;
++              s->first = ENTRY(BHDR(s->base)+1);
++              s->here = ENTRY(BHDR(s->base)+1);
++              s->end = s->base + fs->blocksize;
++      }
++
++      error = ext2fs_attr_set_entry(fs, i, s);
++      if (error)
++              goto cleanup;
++
++      if (!EXT2_EXT_IS_LAST_ENTRY(s->first))
++              ext2fs_attr_rehash(BHDR(s->base), s->here);
++
++      if (!EXT2_EXT_IS_LAST_ENTRY(s->first)) {
++              if (bs->block && bs->block == s->base) {
++                      /* We are modifying this block in-place */
++                      new_buf = bs->block;
++                      blk = inode->i_file_acl;
++                      error = ext2fs_write_ext_attr(fs, blk, s->base);
++                      if (error)
++                              goto cleanup;
++              } else {
++                      /* We need to allocate a new block */
++                      error = ext2fs_new_block(fs, 0, 0, &blk);
++                      if (error)
++                              goto cleanup;
++                      ext2fs_block_alloc_stats(fs, blk, +1);
++                      error = ext2fs_write_ext_attr(fs, blk, s->base);
++                      if (error)
++                              goto cleanup;
++                      new_buf = s->base;
++                      if (old_block) {
++                              BHDR(s->base)->h_refcount -= 1;
++                              error = ext2fs_write_ext_attr(fs,
++                                                            inode->i_file_acl,
++                                                            s->base);
++                              if (error)
++                                      goto cleanup;
++                      }
++              }
++      }
++
++      /* Update the i_blocks if we added a new EA block */
++      if (!inode->i_file_acl && new_buf)
++              inode->i_blocks += fs->blocksize / 512;
++      /* Update the inode. */
++      inode->i_file_acl = new_buf ? blk : 0;
++
++cleanup:
++      if (clear_flag)
++              ext2fs_free_mem(&s->base);
++      return 0;
++}
++
++static errcode_t ext2fs_attr_ibody_set(ext2_filsys fs,
++                                     struct ext2_inode_large *inode,
++                                     struct ext2_attr_info *i,
++                                     struct ext2_attr_ibody_find *is)
++{
++      __u32 *eamagic;
++      struct ext2_attr_search *s = &is->s;
++      errcode_t error;
++
++      if (EXT2_INODE_SIZE(fs->super) == EXT2_GOOD_OLD_INODE_SIZE)
++              return EXT2_ET_EA_NO_SPACE;
++
++      error = ext2fs_attr_set_entry(fs, i, s);
++      if (error)
++              return error;
++
++      eamagic = IHDR(inode);
++      if (!EXT2_EXT_IS_LAST_ENTRY(s->first))
++              *eamagic = EXT2_EXT_ATTR_MAGIC;
++      else
++              *eamagic = 0;
++
++      return ext2fs_write_inode_full(fs, is->ino, (struct ext2_inode *)inode,
++                                     EXT2_INODE_SIZE(fs->super));
++}
++
++static struct {
++      char str[28];
++      int len;
++} ext2_attr_index_prefix[] = {
++      [EXT2_ATTR_INDEX_USER] = { EXT2_ATTR_INDEX_USER_PREFIX,
++                                 sizeof(EXT2_ATTR_INDEX_USER_PREFIX) },
++      [EXT2_ATTR_INDEX_POSIX_ACL_ACCESS] =
++              { EXT2_ATTR_INDEX_POSIX_ACL_ACCESS_PREFIX,
++                sizeof(EXT2_ATTR_INDEX_POSIX_ACL_ACCESS_PREFIX) },
++      [EXT2_ATTR_INDEX_POSIX_ACL_DEFAULT] =
++              { EXT2_ATTR_INDEX_POSIX_ACL_DEFAULT_PREFIX,
++                sizeof(EXT2_ATTR_INDEX_POSIX_ACL_DEFAULT_PREFIX) },
++      [EXT2_ATTR_INDEX_TRUSTED] = { EXT2_ATTR_INDEX_TRUSTED_PREFIX,
++                                    sizeof(EXT2_ATTR_INDEX_TRUSTED_PREFIX) },
++      [EXT2_ATTR_INDEX_LUSTRE] = { EXT2_ATTR_INDEX_LUSTRE_PREFIX,
++                                   sizeof(EXT2_ATTR_INDEX_LUSTRE_PREFIX) },
++      [EXT2_ATTR_INDEX_SECURITY] = { EXT2_ATTR_INDEX_SECURITY_PREFIX,
++                                     sizeof(EXT2_ATTR_INDEX_SECURITY_PREFIX)},
++      { "", 0 }
++};
++
++errcode_t ext2fs_attr_set(ext2_filsys fs, ext2_ino_t ino,
++                        struct ext2_inode *inode,
++                        int name_index, const char *name, const char *value,
++                        int value_len, int flags)
++{
++      struct ext2_inode_large *inode_large = NULL;
++      struct ext2_attr_info i = {
++              .name_index = name_index,
++              .name = name,
++              .value = value,
++              .value_len = value_len,
++      };
++      struct ext2_attr_ibody_find is = {
++              .ino = ino,
++              .s = { .not_found = -ENODATA, },
++      };
++      struct ext2_attr_block_find bs = {
++              .s = { .not_found = -ENODATA, },
++      };
++      errcode_t error;
++
++      if (!name)
++              return EXT2_ET_EA_BAD_NAME;
++      if (strlen(name) > 255)
++              return EXT2_ET_EA_NAME_TOO_BIG;
++
++      /* If the prefix is still present, skip it */
++      if (strncmp(name, ext2_attr_index_prefix[name_index].str,
++                  ext2_attr_index_prefix[name_index].len) == 0)
++              i.name += ext2_attr_index_prefix[name_index].len;
++
++      if (EXT2_INODE_SIZE(fs->super) > EXT2_GOOD_OLD_INODE_SIZE) {
++              inode_large = (struct ext2_inode_large *)inode;
++
++              error = ext2fs_attr_ibody_find(fs, inode_large, &i, &is);
++              if (error)
++                      goto cleanup;
++      }
++      if (is.s.not_found) {
++              error = ext2fs_attr_block_find(fs, inode, &i, &bs);
++              if (error)
++                      goto cleanup;
++      }
++
++      if (is.s.not_found && bs.s.not_found) {
++              error = EXT2_ET_EA_NAME_NOT_FOUND;
++              if (flags & XATTR_REPLACE)
++                      goto cleanup;
++              error = 0;
++              if (!value)
++                      goto cleanup;
++      } else {
++              error = EXT2_ET_EA_NAME_EXISTS;
++              if (flags & XATTR_CREATE)
++                      goto cleanup;
++      }
++
++      if (!value) {
++              if (!is.s.not_found &&
++                  (EXT2_INODE_SIZE(fs->super) > EXT2_GOOD_OLD_INODE_SIZE))
++                      error = ext2fs_attr_ibody_set(fs, inode_large, &i, &is);
++              else if (!bs.s.not_found)
++                      error = ext2fs_attr_block_set(fs, inode, &i, &bs);
++      } else {
++              if (EXT2_INODE_SIZE(fs->super) > EXT2_GOOD_OLD_INODE_SIZE)
++                      error = ext2fs_attr_ibody_set(fs, inode_large, &i, &is);
++              if (!error && !bs.s.not_found) {
++                      i.value = NULL;
++                      error = ext2fs_attr_block_set(fs, inode, &i, &bs);
++              } else if (error == EXT2_ET_EA_NO_SPACE) {
++                      error = ext2fs_attr_block_set(fs, inode, &i, &bs);
++                      if (error)
++                              goto cleanup;
++                      if (!is.s.not_found) {
++                              i.value = NULL;
++                              if (EXT2_INODE_SIZE(fs->super) >
++                                  EXT2_GOOD_OLD_INODE_SIZE)
++                                      error = ext2fs_attr_ibody_set(fs,
++                                                      inode_large, &i, &is);
++                      }
++              }
++      }
++
++cleanup:
++      return error;
++}
++
++static errcode_t ext2fs_attr_check_block(ext2_filsys fs, char *buffer)
++{
++      if (BHDR(buffer)->h_magic != (EXT2_EXT_ATTR_MAGIC) ||
++          BHDR(buffer)->h_blocks != 1)
++              return EXT2_ET_EA_BAD_MAGIC;
++
++      return ext2fs_attr_check_names((struct ext2_ext_attr_entry *)
++                                     (BHDR(buffer) + 1),
++                                     buffer + fs->blocksize);
++}
++
++static errcode_t ext2fs_attr_block_get(ext2_filsys fs, struct ext2_inode *inode,
++                                     int name_index, const char *name,
++                                     void *buffer, size_t buffer_size,
++                                     int *easize)
++{
++      struct ext2_ext_attr_header *header = NULL;
++      struct ext2_ext_attr_entry *entry;
++      char *block_buf = NULL;
++      errcode_t error;
++
++      error = EXT2_ET_EA_NAME_NOT_FOUND;
++      if (!inode->i_file_acl)
++              goto cleanup;
++
++      error = ext2fs_get_mem(fs->blocksize, &block_buf);
++      if (error)
++              return error;
++      error = ext2fs_read_ext_attr(fs, inode->i_file_acl, block_buf);
++      if (error)
++              goto cleanup;
++
++      error = ext2fs_attr_check_block(fs, block_buf);
++      if (error)
++              goto cleanup;
++
++      header = BHDR(block_buf);
++      entry = (struct ext2_ext_attr_entry *)(header+1);
++      error = ext2fs_attr_find_entry(&entry, name_index, name,
++                                     fs->blocksize, 1);
++      if (error)
++              goto cleanup;
++      if (easize)
++              *easize = entry->e_value_size;
++      if (buffer) {
++              error = EXT2_ET_EA_TOO_BIG;
++              if (entry->e_value_size > buffer_size)
++                      goto cleanup;
++              memcpy(buffer, block_buf + entry->e_value_offs,
++                     entry->e_value_size);
++      }
++
++cleanup:
++      if (block_buf)
++              ext2fs_free_mem (&block_buf);
++      return error;
++}
++
++static errcode_t ext2fs_attr_ibody_get(ext2_filsys fs,
++                                     struct ext2_inode_large *inode,
++                                     int name_index, const char *name,
++                                     void *buffer, size_t buffer_size,
++                                     int *easize)
++{
++      struct ext2_ext_attr_entry *entry;
++      int error;
++      char *end, *start;
++      __u32 *eamagic;
++
++      if (EXT2_INODE_SIZE(fs->super) == EXT2_GOOD_OLD_INODE_SIZE)
++              return EXT2_ET_EA_NAME_NOT_FOUND;
++
++      eamagic = IHDR(inode);
++      error = ext2fs_attr_check_block(fs, buffer);
++      if (error)
++              return error;
++
++      start = (char *)inode + EXT2_GOOD_OLD_INODE_SIZE +
++                      inode->i_extra_isize + sizeof(__u32);
++      entry = (struct ext2_ext_attr_entry *)start;
++      end = (char *)inode + EXT2_INODE_SIZE(fs->super);
++      error = ext2fs_attr_check_names(entry, end);
++      if (error)
++              goto cleanup;
++      error = ext2fs_attr_find_entry(&entry, name_index, name,
++                                     end - (char *)entry, 0);
++      if (error)
++              goto cleanup;
++      if (easize)
++              *easize = entry->e_value_size;
++      if (buffer) {
++              error = EXT2_ET_EA_TOO_BIG;
++              if (entry->e_value_size > buffer_size)
++                      goto cleanup;
++              memcpy(buffer, start + entry->e_value_offs,entry->e_value_size);
++      }
++
++cleanup:
++      return error;
++}
++
++
++errcode_t ext2fs_attr_get(ext2_filsys fs, struct ext2_inode *inode,
++                        int name_index, const char *name, char *buffer,
++                        size_t buffer_size, int *easize)
++{
++      errcode_t error;
++
++      error = ext2fs_attr_ibody_get(fs, (struct ext2_inode_large *)inode,
++                                    name_index, name, buffer, buffer_size,
++                                    easize);
++      if (error == EXT2_ET_EA_NAME_NOT_FOUND)
++              error = ext2fs_attr_block_get(fs, inode, name_index, name,
++                                            buffer, buffer_size, easize);
++
++      return error;
++}
++
++int ext2fs_attr_get_next_attr(struct ext2_ext_attr_entry *entry, int name_index,
++                            char *buffer, int buffer_size, int start)
++{
++      const int prefix_len = ext2_attr_index_prefix[name_index].len;
++      int total_len;
++
++      if (!start && !EXT2_EXT_IS_LAST_ENTRY(entry))
++              entry = EXT2_EXT_ATTR_NEXT(entry);
++
++      for (; !EXT2_EXT_IS_LAST_ENTRY(entry);
++           entry = EXT2_EXT_ATTR_NEXT(entry)) {
++              if (!name_index)
++                      break;
++              if (name_index == entry->e_name_index)
++                      break;
++      }
++      if (EXT2_EXT_IS_LAST_ENTRY(entry))
++              return 0;
++
++      total_len = prefix_len + entry->e_name_len + 1;
++      if (buffer && total_len <= buffer_size) {
++              memcpy(buffer, ext2_attr_index_prefix[name_index].str,
++                     prefix_len);
++              memcpy(buffer + prefix_len, entry->e_name, entry->e_name_len);
++              buffer[prefix_len + entry->e_name_len] = '\0';
++      }
++
++      return total_len;
++}
++
++errcode_t ext2fs_expand_extra_isize(ext2_filsys fs, ext2_ino_t ino,
++                                  struct ext2_inode_large *inode,
++                                  int new_extra_isize, int *ret,
++                                  int *needed_size)
++{
++      struct ext2_inode *inode_buf = NULL;
++      __u32 *eamagic = NULL;
++      struct ext2_ext_attr_header *header = NULL;
++      struct ext2_ext_attr_entry *entry = NULL, *last = NULL;
++      struct ext2_attr_ibody_find is = {
++              .ino = ino,
++              .s = { .not_found = EXT2_ET_EA_NO_SPACE, },
++      };
++      struct ext2_attr_block_find bs = {
++              .s = { .not_found = EXT2_ET_EA_NO_SPACE, },
++      };
++      char *start, *end, *block_buf = NULL, *buffer =NULL, *b_entry_name=NULL;
++      int total_ino = 0, total_blk, free, offs, tried_min_extra_isize = 0;
++      int s_min_extra_isize = fs->super->s_min_extra_isize;
++      errcode_t error = 0;
++
++      if (needed_size)
++              *needed_size = new_extra_isize;
++      error = ext2fs_get_mem(fs->blocksize, &block_buf);
++      if (error)
++              return error;
++
++      if (inode == NULL) {
++              error = ext2fs_get_mem(EXT2_INODE_SIZE(fs->super), &inode_buf);
++              if (error)
++                      goto cleanup;
++
++              error = ext2fs_read_inode_full(fs, ino, inode_buf,
++                                             EXT2_INODE_SIZE(fs->super));
++              if (error)
++                      goto cleanup;
++
++              inode = (struct ext2_inode_large *)inode_buf;
++      }
++
++retry:
++      if (inode->i_extra_isize >= new_extra_isize)
++              goto cleanup;
++
++      eamagic = IHDR(inode);
++      start = (char *)inode + EXT2_GOOD_OLD_INODE_SIZE + inode->i_extra_isize;
++      /* No extended attributes present */
++      if (*eamagic != EXT2_EXT_ATTR_MAGIC) {
++              memset(start, 0,
++                     EXT2_INODE_SIZE(fs->super) - EXT2_GOOD_OLD_INODE_SIZE -
++                     inode->i_extra_isize);
++              inode->i_extra_isize = new_extra_isize;
++              if (needed_size)
++                      *needed_size = 0;
++              goto write_inode;
++      }
++
++      start += sizeof(__u32);
++      end = (char *)inode + EXT2_INODE_SIZE(fs->super);
++      last = entry = (struct ext2_ext_attr_entry *)start;
++      offs = end - start;
++      /* Consider space takenup by magic number */
++      total_ino = sizeof(__u32);
++      free = ext2fs_attr_free_space(last, &offs, start, &total_ino);
++
++      /* Enough free space available in the inode for expansion */
++      if (free >= new_extra_isize) {
++              ext2fs_attr_shift_entries(entry,
++                                      inode->i_extra_isize - new_extra_isize,
++                                      (char *)inode +EXT2_GOOD_OLD_INODE_SIZE+
++                                              new_extra_isize,
++                                      start - sizeof(__u32), total_ino);
++              inode->i_extra_isize = new_extra_isize;
++              if (needed_size)
++                      *needed_size = 0;
++              goto write_inode;
++      }
++
++      if (inode->i_file_acl) {
++              error = ext2fs_read_ext_attr(fs, inode->i_file_acl, block_buf);
++              if (error)
++                       goto cleanup;
++
++              header = BHDR(block_buf);
++              if (header->h_magic != EXT2_EXT_ATTR_MAGIC) {
++                      error = EXT2_ET_EA_BAD_MAGIC;
++                      goto cleanup;
++              }
++              end = block_buf + fs->blocksize;
++              last = entry = (struct ext2_ext_attr_entry *)(header+1);
++              start = (char *)entry;
++              offs = end - start;
++              free = ext2fs_attr_free_space(last, &offs, start, &total_blk);
++              if (free < new_extra_isize) {
++                      if (!tried_min_extra_isize && s_min_extra_isize) {
++                              tried_min_extra_isize++;
++                              new_extra_isize = s_min_extra_isize;
++                              goto retry;
++                      }
++                      if (ret)
++                              *ret = EXT2_EXPAND_EISIZE_NOSPC;
++                      error = EXT2_ET_EA_NO_SPACE;
++                      goto cleanup;
++              }
++      } else {
++              if (ret && *ret == EXT2_EXPAND_EISIZE_UNSAFE) {
++                      *ret = EXT2_EXPAND_EISIZE_NEW_BLOCK;
++                      error = 0;
++                      goto cleanup;
++              }
++              free = fs->blocksize;
++      }
++
++      while (new_extra_isize > 0) {
++              int offs, size, entry_size;
++              struct ext2_ext_attr_entry *small_entry = NULL;
++              struct ext2_attr_info i = {
++                      .value = NULL,
++                      .value_len = 0,
++              };
++              unsigned int total_size, shift_bytes, temp = ~0U, extra_isize=0;
++
++              start = (char *)inode + EXT2_GOOD_OLD_INODE_SIZE +
++                              inode->i_extra_isize + sizeof(__u32);
++              end = (char *)inode + EXT2_INODE_SIZE(fs->super);
++              last = (struct ext2_ext_attr_entry *)start;
++
++              /* Find the entry best suited to be pushed into EA block */
++              entry = NULL;
++              for (; !EXT2_EXT_IS_LAST_ENTRY(last);
++                      last = EXT2_EXT_ATTR_NEXT(last)) {
++                      total_size = EXT2_EXT_ATTR_SIZE(last->e_value_size) +
++                                      EXT2_EXT_ATTR_LEN(last->e_name_len);
++                      if (total_size <= free && total_size < temp) {
++                              if (total_size < new_extra_isize) {
++                                      small_entry = last;
++                              } else {
++                                      entry = last;
++                                      temp = total_size;
++                              }
++                      }
++              }
++
++              if (entry == NULL) {
++                      if (small_entry) {
++                              entry = small_entry;
++                      } else {
++                              if (!tried_min_extra_isize &&
++                                  s_min_extra_isize) {
++                                      tried_min_extra_isize++;
++                                      new_extra_isize = s_min_extra_isize;
++                                      goto retry;
++                              }
++                              if (ret)
++                                      *ret = EXT2_EXPAND_EISIZE_NOSPC;
++                              error = EXT2_ET_EA_NO_SPACE;
++                              goto cleanup;
++                      }
++              }
++              offs = entry->e_value_offs;
++              size = entry->e_value_size;
++              entry_size = EXT2_EXT_ATTR_LEN(entry->e_name_len);
++              i.name_index = entry->e_name_index;
++              error = ext2fs_get_mem(size, &buffer);
++              if (error)
++                      goto cleanup;
++              error = ext2fs_get_mem(entry->e_name_len + 1, &b_entry_name);
++              if (error)
++                      goto cleanup;
++              /* Save the entry name and the entry value */
++              memcpy((char *)buffer, (char *)start + offs,
++                     EXT2_EXT_ATTR_SIZE(size));
++              memcpy((char *)b_entry_name, (char *)entry->e_name,
++                     entry->e_name_len);
++              b_entry_name[entry->e_name_len] = '\0';
++              i.name = b_entry_name;
++
++              error = ext2fs_attr_ibody_find(fs, inode, &i, &is);
++              if (error)
++                      goto cleanup;
++
++              error = ext2fs_attr_set_entry(fs, &i, &is.s);
++              if (error)
++                      goto cleanup;
++
++              entry = (struct ext2_ext_attr_entry *)start;
++              if (entry_size + EXT2_EXT_ATTR_SIZE(size) >= new_extra_isize)
++                      shift_bytes = new_extra_isize;
++              else
++                      shift_bytes = entry_size + EXT2_EXT_ATTR_SIZE(size);
++              ext2fs_attr_shift_entries(entry,
++                                      inode->i_extra_isize - shift_bytes,
++                                      (char *)inode +EXT2_GOOD_OLD_INODE_SIZE+
++                                      extra_isize + shift_bytes,
++                                      start - sizeof(__u32),
++                                      total_ino - entry_size);
++
++              extra_isize += shift_bytes;
++              new_extra_isize -= shift_bytes;
++              if (needed_size)
++                      *needed_size = new_extra_isize;
++              inode->i_extra_isize = extra_isize;
++
++              i.name = b_entry_name;
++              i.value = buffer;
++              i.value_len = size;
++              error = ext2fs_attr_block_find(fs, (struct ext2_inode *)inode,
++                                             &i, &bs);
++              if (error)
++                      goto cleanup;
++
++              /* Add entry which was removed from the inode into the block */
++              error = ext2fs_attr_block_set(fs, (struct ext2_inode *)inode,
++                                            &i, &bs);
++              if (error)
++                      goto cleanup;
++      }
++
++write_inode:
++      error = ext2fs_write_inode_full(fs, ino, (struct ext2_inode *)inode,
++                                      EXT2_INODE_SIZE(fs->super));
++cleanup:
++      if (inode_buf)
++              ext2fs_free_mem(&inode_buf);
++      if (block_buf)
++              ext2fs_free_mem(&block_buf);
++      if (buffer)
++              ext2fs_free_mem(&buffer);
++      if (b_entry_name)
++              ext2fs_free_mem(&b_entry_name);
++
++      return error;
+ }
+Index: e2fsprogs/e2fsck/unix.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/unix.c
++++ e2fsprogs/e2fsck/unix.c
+@@ -670,6 +670,12 @@ static void parse_extended_opts(e2fsck_t
+                               extended_usage++;
+                               continue;
+                       }
++              } else if (strcmp(token, "expand_extra_isize") == 0) {
++                      ctx->flags |= E2F_FLAG_EXPAND_EISIZE;
++                      if (arg) {
++                              extended_usage++;
++                              continue;
++                      }
+               } else if (strcmp(token, "journal_only") == 0) {
+                       if (arg) {
+                               extended_usage++;
+@@ -702,6 +708,7 @@ static void parse_extended_opts(e2fsck_t
+               fputs(("\tnodiscard\n"), stderr);
+               fputs(("\tshared=<preserve|lost+found|delete>\n"), stderr);
+               fputs(("\tclone=<dup|zero>\n"), stderr);
++              fputs(("\texpand_extra_isize\n"), stderr);
+               fputc('\n', stderr);
+               exit(1);
+       }
+@@ -1420,6 +1427,54 @@ print_unsupp_features:
+       if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
+               fatal_error(ctx, 0);
+       check_if_skip(ctx);
++
++      if (EXT2_GOOD_OLD_INODE_SIZE + sb->s_want_extra_isize >
++                                                      EXT2_INODE_SIZE(sb)) {
++              if (fix_problem(ctx, PR_0_WANT_EXTRA_ISIZE_INVALID, &pctx))
++                      sb->s_want_extra_isize = sizeof(struct ext2_inode_large) -
++                                                     EXT2_GOOD_OLD_INODE_SIZE;
++      }
++      if (EXT2_GOOD_OLD_INODE_SIZE + sb->s_min_extra_isize >
++                                                      EXT2_INODE_SIZE(sb)) {
++              if (fix_problem(ctx, PR_0_MIN_EXTRA_ISIZE_INVALID, &pctx))
++                      sb->s_min_extra_isize = 0;
++      }
++      if (EXT2_INODE_SIZE(sb) > EXT2_GOOD_OLD_INODE_SIZE) {
++              ctx->want_extra_isize = sizeof(struct ext2_inode_large) -
++                                                   EXT2_GOOD_OLD_INODE_SIZE;
++              ctx->min_extra_isize = ~0L;
++              if (EXT2_HAS_RO_COMPAT_FEATURE(sb,
++                                     EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE)) {
++                      if (ctx->want_extra_isize < sb->s_want_extra_isize)
++                              ctx->want_extra_isize = sb->s_want_extra_isize;
++                      if (ctx->want_extra_isize < sb->s_min_extra_isize)
++                              ctx->want_extra_isize = sb->s_min_extra_isize;
++              }
++      }
++      else {
++              if (sb->s_feature_ro_compat &
++                  EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE) {
++                      fix_problem(ctx, PR_0_CLEAR_EXTRA_ISIZE, &pctx);
++                      sb->s_feature_ro_compat &=
++                                      ~EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE;
++              }
++              sb->s_want_extra_isize = 0;
++              sb->s_min_extra_isize = 0;
++              ctx->flags &= ~E2F_FLAG_EXPAND_EISIZE;
++      }
++
++      if (ctx->options & E2F_OPT_READONLY) {
++              if (ctx->flags & (E2F_FLAG_EXPAND_EISIZE)) {
++                      fprintf(stderr, _("Cannot enable EXTRA_ISIZE feature "
++                                        "on read-only filesystem\n"));
++                      exit(1);
++              }
++      } else {
++              if (sb->s_want_extra_isize > sb->s_min_extra_isize &&
++                  (sb->s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE))
++                      ctx->flags |= E2F_FLAG_EXPAND_EISIZE;
++      }
++
+       check_resize_inode(ctx);
+       if (bad_blocks_file)
+               read_bad_blocks_file(ctx, bad_blocks_file, replace_bad_blocks);
+Index: e2fsprogs/lib/ext2fs/ext2_ext_attr.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2_ext_attr.h
++++ e2fsprogs/lib/ext2fs/ext2_ext_attr.h
+@@ -15,6 +15,9 @@
+ /* Maximum number of references to one attribute block */
+ #define EXT2_EXT_ATTR_REFCOUNT_MAX    1024
++#define XATTR_CREATE    0x1     /* set value, fail if attr already exists */
++#define XATTR_REPLACE   0x2     /* set value, fail if attr does not exist */
++
+ struct ext2_ext_attr_header {
+       __u32   h_magic;        /* magic number for identification */
+       __u32   h_refcount;     /* reference count */
+@@ -30,11 +33,35 @@ struct ext2_ext_attr_entry {
+       __u32   e_value_block;  /* disk block attribute is stored on (n/i) */
+       __u32   e_value_size;   /* size of attribute value */
+       __u32   e_hash;         /* hash value of name and value */
+-#if 0
++#if 1
+       char    e_name[0];      /* attribute name */
+ #endif
+ };
++#define BHDR(block) ((struct ext2_ext_attr_header *)block)
++#define IHDR(inode) ((__u32 *)((char *)inode + EXT2_GOOD_OLD_INODE_SIZE + \
++                              (inode)->i_extra_isize))
++#define ENTRY(ptr) ((struct ext2_ext_attr_entry *)(ptr))
++
++/* Name indexes */
++#define EXT2_ATTR_INDEX_USER                  1
++#define EXT2_ATTR_INDEX_POSIX_ACL_ACCESS      2
++#define EXT2_ATTR_INDEX_POSIX_ACL_DEFAULT     3
++#define EXT2_ATTR_INDEX_TRUSTED                       4
++#define EXT2_ATTR_INDEX_LUSTRE                        5
++#define EXT2_ATTR_INDEX_SECURITY              6
++#define EXT2_ATTR_INDEX_MAX                   7
++
++#define EXT2_ATTR_INDEX_USER_PREFIX            "user."
++#define EXT2_ATTR_INDEX_POSIX_ACL_ACCESS_PREFIX        "system.posix_acl_access"
++#define EXT2_ATTR_INDEX_POSIX_ACL_DEFAULT_PREFIX "system.posix_acl_default"
++#define EXT2_ATTR_INDEX_TRUSTED_PREFIX                 "trusted."
++#define EXT2_ATTR_INDEX_LUSTRE_PREFIX          "lustre."
++#define EXT2_ATTR_INDEX_SECURITY_PREFIX                "security."
++
++#define EXT2_ATTR_PREFIX(index) (index ## _PREFIX)
++#define EXT2_ATTR_PREFIX_LEN(index) (index ## _PRE_LEN)
++
+ #define EXT2_EXT_ATTR_PAD_BITS                2
+ #define EXT2_EXT_ATTR_PAD             ((unsigned) 1<<EXT2_EXT_ATTR_PAD_BITS)
+ #define EXT2_EXT_ATTR_ROUND           (EXT2_EXT_ATTR_PAD-1)
+Index: e2fsprogs/e2fsck/e2fsck.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.h
++++ e2fsprogs/e2fsck/e2fsck.h
+@@ -179,6 +179,7 @@ struct resource_track {
+ #define E2F_FLAG_GOT_DEVSIZE  0x0800 /* Device size has been fetched */
+ #define E2F_FLAG_EXITING      0x1000 /* E2fsck exiting due to errors */
+ #define E2F_FLAG_TIME_INSANE  0x2000 /* Time is insane */
++#define E2F_FLAG_EXPAND_EISIZE        0x4000 /* Expand the inodes (i_extra_isize) */
+ #define E2F_RESET_FLAGS (E2F_FLAG_TIME_INSANE)
+@@ -362,6 +363,15 @@ struct e2fsck_struct {
+       profile_t       profile;
+       int blocks_per_page;
++      /* Expand large inodes to atleast these many bytes */
++      int want_extra_isize;
++      /* minimum i_extra_isize found in used inodes. Should not be lesser
++       * than s_min_extra_isize.
++       */
++      __u32 min_extra_isize;
++      int fs_unexpanded_inodes;
++      ext2fs_inode_bitmap expand_eisize_map;
++
+       /*
+        * For the use of callers of the e2fsck functions; not used by
+        * e2fsck functions themselves.
+Index: e2fsprogs/lib/ext2fs/ext2_fs.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2_fs.h
++++ e2fsprogs/lib/ext2fs/ext2_fs.h
+@@ -430,6 +430,12 @@ struct ext2_inode_large {
+ #define i_dir_acl     i_size_high
++#define EXT2_FITS_IN_INODE(inode, field)            \
++      ((offsetof(struct ext2_inode_large, field) +    \
++       sizeof((inode)->field)) <=                  \
++                       (EXT2_GOOD_OLD_INODE_SIZE +    \
++                        (inode)->i_extra_isize))      \
++
+ #if defined(__KERNEL__) || defined(__linux__)
+ #define i_reserved1   osd1.linux1.l_i_reserved1
+ #define i_frag                osd2.linux2.l_i_frag
+@@ -694,6 +700,7 @@ struct ext2_super_block {
+ #define EXT2_FEATURE_RO_COMPAT_SUPP   (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
+                                        EXT4_FEATURE_RO_COMPAT_DIR_NLINK| \
++                                       EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE| \
+                                        EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
+ /*
+Index: e2fsprogs/e2fsck/pass1.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1.c
++++ e2fsprogs/e2fsck/pass1.c
+@@ -23,6 +23,7 @@
+  *    - A bitmap of which inodes have bad fields.     (inode_bad_map)
+  *    - A bitmap of which inodes are in bad blocks.   (inode_bb_map)
+  *    - A bitmap of which inodes are imagic inodes.   (inode_imagic_map)
++ *    - A bitmap of which inodes need to be expanded  (expand_eisize_map)
+  *    - A bitmap of which blocks are in use.          (block_found_map)
+  *    - A bitmap of which blocks are in use by two inodes     (block_dup_map)
+  *    - The data blocks of the directory inodes.      (dir_map)
+@@ -382,18 +383,30 @@ static void check_inode_extra_space(e2fs
+           (inode->i_extra_isize < min || inode->i_extra_isize > max)) {
+               if (!fix_problem(ctx, PR_1_EXTRA_ISIZE, pctx))
+                       return;
+-              inode->i_extra_isize = min;
++              inode->i_extra_isize = ctx->want_extra_isize;
+               e2fsck_write_inode_full(ctx, pctx->ino, pctx->inode,
+                                       EXT2_INODE_SIZE(sb), "pass1");
+               return;
+       }
+-      eamagic = (__u32 *) (((char *) inode) + EXT2_GOOD_OLD_INODE_SIZE +
+-                      inode->i_extra_isize);
+-      if (*eamagic == EXT2_EXT_ATTR_MAGIC) {
+-              /* it seems inode has an extended attribute(s) in body */
+-              check_ea_in_inode(ctx, pctx);
++      eamagic = IHDR(inode);
++      if (*eamagic != EXT2_EXT_ATTR_MAGIC &&
++          (ctx->flags & E2F_FLAG_EXPAND_EISIZE) &&
++          (inode->i_extra_isize < ctx->want_extra_isize)) {
++              fix_problem(ctx, PR_1_EXPAND_EISIZE, pctx);
++              memset((char *)inode + EXT2_GOOD_OLD_INODE_SIZE, 0,
++                      EXT2_INODE_SIZE(sb) - EXT2_GOOD_OLD_INODE_SIZE);
++              inode->i_extra_isize = ctx->want_extra_isize;
++              e2fsck_write_inode_full(ctx, pctx->ino,
++                                      (struct ext2_inode *)inode,
++                                      EXT2_INODE_SIZE(sb),
++                                      "check_inode_extra_space");
++              if (inode->i_extra_isize < ctx->min_extra_isize)
++                      ctx->min_extra_isize = inode->i_extra_isize;
+       }
++
++      if (*eamagic == EXT2_EXT_ATTR_MAGIC)
++              check_ea_in_inode(ctx, pctx);
+ }
+ /*
+@@ -547,6 +560,151 @@ extern void e2fsck_setup_tdb_icount(e2fs
+               *ret = 0;
+ }
++int e2fsck_pass1_delete_attr(e2fsck_t ctx, struct ext2_inode_large *inode,
++                           struct problem_context *pctx, int needed_size)
++{
++      struct ext2_ext_attr_header *header;
++      struct ext2_ext_attr_entry *entry_ino, *entry_blk = NULL, *entry;
++      char *start, name[4096], block_buf[4096];
++      int len, index = EXT2_ATTR_INDEX_USER, entry_size, ea_size;
++      int in_inode = 1, error;
++      unsigned int freed_bytes = inode->i_extra_isize;
++
++      start = (char *)inode + EXT2_GOOD_OLD_INODE_SIZE +
++                      inode->i_extra_isize + sizeof(__u32);
++      entry_ino = (struct ext2_ext_attr_entry *)start;
++
++      if (inode->i_file_acl) {
++              error = ext2fs_read_ext_attr(ctx->fs, inode->i_file_acl,
++                                           block_buf);
++              /* We have already checked this block, shouldn't happen */
++              if (error) {
++                      fix_problem(ctx, PR_1_EXTATTR_READ_ABORT, pctx);
++                      return 0;
++              }
++              header = BHDR(block_buf);
++              if (header->h_magic != EXT2_EXT_ATTR_MAGIC) {
++                      fix_problem(ctx, PR_1_EXTATTR_READ_ABORT, pctx);
++                      return 0;
++              }
++
++              entry_blk = (struct ext2_ext_attr_entry *)(header+1);
++      }
++      entry = entry_ino;
++      len = sizeof(entry->e_name);
++      entry_size = ext2fs_attr_get_next_attr(entry, index, name, len, 1);
++
++      while (freed_bytes < needed_size) {
++              if (entry_size && name[0] != '\0') {
++                      pctx->str = name;
++                      if (fix_problem(ctx, PR_1_EISIZE_DELETE_EA, pctx)) {
++                              ea_size = EXT2_EXT_ATTR_LEN(entry->e_name_len) +
++                                        EXT2_EXT_ATTR_SIZE(entry->e_value_size);
++                              error = ext2fs_attr_set(ctx->fs, pctx->ino,
++                                                      (struct ext2_inode *)inode,
++                                                      index, name, 0,0,0);
++                              if (!error)
++                                      freed_bytes += ea_size;
++                      }
++              }
++              len = sizeof(entry->e_name);
++              entry_size = ext2fs_attr_get_next_attr(entry, index,name,len,0);
++              entry = EXT2_EXT_ATTR_NEXT(entry);
++              if (EXT2_EXT_IS_LAST_ENTRY(entry)) {
++                      if (in_inode) {
++                              entry = entry_blk;
++                              len = sizeof(entry->e_name);
++                              entry_size = ext2fs_attr_get_next_attr(entry,
++                                                      index, name, len, 1);
++                              in_inode = 0;
++                      } else {
++                              index += 1;
++                              in_inode = 1;
++                              if (!entry && index < EXT2_ATTR_INDEX_MAX)
++                                      entry = (struct ext2_ext_attr_entry *)start;
++                              else
++                                      return freed_bytes;
++                      }
++              }
++      }
++
++      return freed_bytes;
++}
++
++int e2fsck_pass1_expand_eisize(e2fsck_t ctx, struct ext2_inode_large *inode,
++                             struct problem_context *pctx)
++{
++      int needed_size = 0, retval, ret = EXT2_EXPAND_EISIZE_UNSAFE;
++      static int message;
++
++retry:
++      retval = ext2fs_expand_extra_isize(ctx->fs, pctx->ino, inode,
++                                         ctx->want_extra_isize, &ret,
++                                         &needed_size);
++      if (ret & EXT2_EXPAND_EISIZE_NEW_BLOCK)
++              goto mark_expand_eisize_map;
++      if (!retval) {
++              e2fsck_write_inode_full(ctx, pctx->ino,
++                                      (struct ext2_inode *)inode,
++                                      EXT2_INODE_SIZE(ctx->fs->super),
++                                      "pass1");
++              return 0;
++      }
++
++      if (ret & EXT2_EXPAND_EISIZE_NOSPC) {
++              if (ctx->options & (E2F_OPT_PREEN | E2F_OPT_YES)) {
++                      fix_problem(ctx, PR_1_EA_BLK_NOSPC, pctx);
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      return -1;
++              }
++
++              if (!message) {
++                      pctx->num = ctx->fs->super->s_min_extra_isize;
++                      fix_problem(ctx, PR_1_EXPAND_EISIZE_WARNING, pctx);
++                      message = 1;
++              }
++delete_EA:
++              retval = e2fsck_pass1_delete_attr(ctx, inode, pctx,
++                                                needed_size);
++              if (retval >= ctx->want_extra_isize)
++                      goto retry;
++
++              needed_size -= retval;
++
++              /*
++               * We loop here until either the user deletes EA(s) or
++               * EXTRA_ISIZE feature is disabled.
++               */
++              if (fix_problem(ctx, PR_1_CLEAR_EXTRA_ISIZE, pctx)) {
++                      ctx->fs->super->s_feature_ro_compat &=
++                                      ~EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE;
++                      ext2fs_mark_super_dirty(ctx->fs);
++              } else {
++                      goto delete_EA;
++              }
++              ctx->fs_unexpanded_inodes++;
++
++              /* No EA was deleted, inode cannot be expanded */
++              return -1;
++      }
++
++mark_expand_eisize_map:
++      if (!ctx->expand_eisize_map) {
++              pctx->errcode = ext2fs_allocate_inode_bitmap(ctx->fs,
++                                       _("expand extrz isize map"),
++                                       &ctx->expand_eisize_map);
++              if (pctx->errcode) {
++                      fix_problem(ctx, PR_1_ALLOCATE_IBITMAP_ERROR,
++                                  pctx);
++                      exit(1);
++              }
++      }
++
++      /* Add this inode to the expand_eisize_map */
++      ext2fs_mark_inode_bitmap2(ctx->expand_eisize_map, pctx->ino);
++      return 0;
++}
++
+ void e2fsck_pass1(e2fsck_t ctx)
+ {
+       int     i;
+@@ -567,6 +725,8 @@ void e2fsck_pass1(e2fsck_t ctx)
+       int             imagic_fs, extent_fs;
+       int             busted_fs_time = 0;
+       int             inode_size;
++      int             inode_exp = 0;
++
+       init_resource_track(&rtrack, ctx->fs->io);
+       clear_problem_context(&pctx);
+@@ -1085,6 +1245,22 @@ void e2fsck_pass1(e2fsck_t ctx)
+               } else
+                       check_blocks(ctx, &pctx, block_buf);
++              if (ctx->flags & E2F_FLAG_EXPAND_EISIZE) {
++                      struct ext2_inode_large *inode_l;
++
++                      inode_l = (struct ext2_inode_large *)inode;
++
++                      if (inode_l->i_extra_isize < ctx->want_extra_isize) {
++                              fix_problem(ctx, PR_1_EXPAND_EISIZE, &pctx);
++                              inode_exp = e2fsck_pass1_expand_eisize(ctx,
++                                                                     inode_l,
++                                                                     &pctx);
++                      }
++                      if ((inode_l->i_extra_isize < ctx->min_extra_isize) &&
++                          inode_exp == 0)
++                              ctx->min_extra_isize = inode_l->i_extra_isize;
++              }
++
+               if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
+                       return;
+@@ -1389,11 +1565,17 @@ static void adjust_extattr_refcount(e2fs
+                       break;
+               pctx.blk = blk;
+               pctx.errcode = ext2fs_read_ext_attr2(fs, blk, block_buf);
++              /* We already checked this block, shouldn't happen */
+               if (pctx.errcode) {
+                       fix_problem(ctx, PR_1_EXTATTR_READ_ABORT, &pctx);
+                       return;
+               }
+-              header = (struct ext2_ext_attr_header *) block_buf;
++              header = BHDR(block_buf);
++              if (header->h_magic != EXT2_EXT_ATTR_MAGIC) {
++                      fix_problem(ctx, PR_1_EXTATTR_READ_ABORT, &pctx);
++                      return;
++              }
++
+               pctx.blkcount = header->h_refcount;
+               should_be = header->h_refcount + adjust_sign * count;
+               pctx.num = should_be;
+@@ -1500,7 +1682,7 @@ static int check_ext_attr(e2fsck_t ctx, 
+       pctx->errcode = ext2fs_read_ext_attr2(fs, blk, block_buf);
+       if (pctx->errcode && fix_problem(ctx, PR_1_READ_EA_BLOCK, pctx))
+               goto clear_extattr;
+-      header = (struct ext2_ext_attr_header *) block_buf;
++      header = BHDR(block_buf);
+       pctx->blk = ext2fs_file_acl_block(inode);
+       if (((ctx->ext_attr_ver == 1) &&
+            (header->h_magic != EXT2_EXT_ATTR_MAGIC_v1)) ||
+Index: e2fsprogs/lib/ext2fs/ext2fs.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2fs.h
++++ e2fsprogs/lib/ext2fs/ext2fs.h
+@@ -509,6 +509,12 @@ typedef struct ext2_icount *ext2_icount_
+ #define EXT2_CHECK_MAGIC(struct, code) \
+         if ((struct)->magic != (code)) return (code)
++/*
++ * Flags for returning status of ext2fs_expand_extra_isize()
++ */
++#define EXT2_EXPAND_EISIZE_UNSAFE     0x0001
++#define EXT2_EXPAND_EISIZE_NEW_BLOCK  0x0002
++#define EXT2_EXPAND_EISIZE_NOSPC      0x0004
+ /*
+  * For ext2 compression support
+@@ -975,6 +981,16 @@ extern errcode_t ext2fs_expand_dir(ext2_
+ /* ext_attr.c */
+ extern __u32 ext2fs_ext_attr_hash_entry(struct ext2_ext_attr_entry *entry,
+                                       void *data);
++int ext2fs_attr_get_next_attr(struct ext2_ext_attr_entry *entry, int name_index,
++                            char *buffer, int buffer_size, int start);
++errcode_t ext2fs_attr_set(ext2_filsys fs, ext2_ino_t ino,
++                        struct ext2_inode *inode,
++                        int name_index, const char *name, const char *value,
++                        int value_len, int flags);
++extern errcode_t ext2fs_expand_extra_isize(ext2_filsys fs, ext2_ino_t ino,
++                                         struct ext2_inode_large *inode,
++                                         int new_extra_isize, int *ret,
++                                         int *needed_size);
+ extern errcode_t ext2fs_read_ext_attr(ext2_filsys fs, blk_t block, void *buf);
+ extern errcode_t ext2fs_read_ext_attr2(ext2_filsys fs, blk64_t block,
+                                      void *buf);
+Index: e2fsprogs/e2fsck/problem.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.h
++++ e2fsprogs/e2fsck/problem.h
+@@ -229,6 +229,16 @@ struct problem_context {
+ #define PR_0_GDT_CSUM_LATCH                   0x00003E
++/* Invalid s_min_extra_isize */
++#define PR_0_MIN_EXTRA_ISIZE_INVALID          0x000040
++
++/* Invalid s_want_extra_isize */
++#define PR_0_WANT_EXTRA_ISIZE_INVALID         0x000041
++
++/* Clear EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE flag */
++#define PR_0_CLEAR_EXTRA_ISIZE                        0x000042
++
++
+ /*
+  * Pass 1 errors
+  */
+@@ -533,6 +543,25 @@ struct problem_context {
+ /* eh_depth for in-inode header is bad */
+ #define PR_1_EXTENT_EH_DEPTH_BAD      0x010064
++/* Warning for user that all inodes need to be expanded atleast by
++ * s_min_extra_isize
++ */
++#define PR_1_EXPAND_EISIZE_WARNING    0x010068
++
++/* Expand the inode */
++#define PR_1_EXPAND_EISIZE            0x010069
++
++/* Delete an EA so that EXTRA_ISIZE may be enabled */
++#define PR_1_EISIZE_DELETE_EA         0x01006A
++
++/* An EA needs to be deleted by e2fsck is being run with -p or -y */
++#define PR_1_EA_BLK_NOSPC             0x01006B
++
++/* Disable EXTRA_ISIZE feature as inode cannot be expanded
++ * without deletion of an EA
++ */
++#define PR_1_CLEAR_EXTRA_ISIZE                0x01006C
++
+ /*
+  * Pass 1b errors
+  */
+@@ -1003,6 +1032,9 @@ struct problem_context {
+ /* Inode in use but group is marked INODE_UNINIT */
+ #define PR_5_INODE_UNINIT             0x050019
++/* Expand the inodes which need a new EA block */
++#define PR_5_EXPAND_EISIZE            0x05001a
++
+ /*
+  * Post-Pass 5 errors
+  */
+Index: e2fsprogs/e2fsck/problem.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.c
++++ e2fsprogs/e2fsck/problem.c
+@@ -402,6 +402,19 @@ static struct e2fsck_problem problem_tab
+         N_("One or more @b @g descriptor checksums are invalid.  "),
+            PROMPT_FIX, PR_PREEN_OK },
++      { PR_0_MIN_EXTRA_ISIZE_INVALID,
++        N_("@S has invalid s_min_extra_isize.  "),
++        PROMPT_FIX, PR_PREEN_OK },
++
++      { PR_0_WANT_EXTRA_ISIZE_INVALID,
++        N_("@S has invalid s_want_extra_isize.  "),
++        PROMPT_FIX, PR_PREEN_OK },
++
++      { PR_0_CLEAR_EXTRA_ISIZE,
++        N_("Disable extra_isize feature since @f has 128 byte inodes.\n"),
++        PROMPT_NONE, 0 },
++
++
+       /* Pass 1 errors */
+       /* Pass 1: Checking inodes, blocks, and sizes */
+@@ -910,6 +923,38 @@ static struct e2fsck_problem problem_tab
+         N_("@i %i has extent header with incorrect eh_depth\n"),
+         PROMPT_FIX, 0 },
++      /* expand inode */
++      { PR_1_EXPAND_EISIZE_WARNING,
++        N_("\ne2fsck is being run with \"expand_extra_isize\" option or\n"
++           "s_min_extra_isize of %d bytes has been set in the superblock.\n"
++           "Inode %i does not have enough free space.  Either some EAs\n"
++           "need to be deleted from this inode or the RO_COMPAT_EXTRA_ISIZE\n"
++           "flag must be cleared.\n\n"), PROMPT_NONE, PR_PREEN_OK | PR_NO_OK |
++           PR_PREEN_NOMSG },
++
++      /* expand inode */
++      { PR_1_EXPAND_EISIZE,
++        N_("Expanding @i %i.\n"),
++        PROMPT_NONE, PR_PREEN_OK | PR_NO_OK | PR_PREEN_NOMSG },
++
++      /* delete an EA so that EXTRA_ISIZE feature may be enabled */
++      { PR_1_EISIZE_DELETE_EA,
++        N_("Delete EA %s of @i %i so that EXTRA_ISIZE feature may be "
++           "enabled?\n"), PROMPT_FIX, PR_NO_OK | PR_PREEN_NO },
++
++      /* an EA needs to be deleted by e2fsck is being run with -p or -y */
++      { PR_1_EA_BLK_NOSPC,
++        N_("An EA needs to be deleted for @i %i but e2fsck is being run\n"
++           "with -p or -y mode.\n"),
++        PROMPT_ABORT, 0 },
++
++      /* disable EXTRA_ISIZE feature since inode cannot be expanded */
++      { PR_1_CLEAR_EXTRA_ISIZE,
++        N_("Disable EXTRA_ISIZE feature since @i %i cannot be expanded\n"
++           "without deletion of an EA.\n"),
++        PROMPT_FIX, 0 },
++
++
+       /* Pass 1b errors */
+       /* Pass 1B: Rescan for duplicate/bad blocks */
+@@ -1657,6 +1702,11 @@ static struct e2fsck_problem problem_tab
+         N_("@g %g @i(s) in use but @g is marked INODE_UNINIT\n"),
+         PROMPT_FIX, PR_PREEN_OK },
++      /* Expand inode */
++      { PR_5_EXPAND_EISIZE,
++        N_("Expanding @i %i.\n"),
++        PROMPT_NONE, PR_PREEN_OK | PR_NO_OK | PR_PREEN_NOMSG },
++
+       /* Post-Pass 5 errors */
+       /* Recreate journal if E2F_FLAG_JOURNAL_INODE flag is set */
+Index: e2fsprogs/e2fsck/e2fsck.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.c
++++ e2fsprogs/e2fsck/e2fsck.c
+@@ -158,6 +158,7 @@ errcode_t e2fsck_reset_context(e2fsck_t 
+       ctx->fs_fragmented = 0;
+       ctx->fs_fragmented_dir = 0;
+       ctx->large_files = 0;
++      ctx->fs_unexpanded_inodes = 0;
+       for (i=0; i < MAX_EXTENT_DEPTH_COUNT; i++)
+               ctx->extent_depth_count[i] = 0;
+Index: e2fsprogs/e2fsck/pass5.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass5.c
++++ e2fsprogs/e2fsck/pass5.c
+@@ -70,6 +70,42 @@ void e2fsck_pass5(e2fsck_t ctx)
+       ext2fs_free_block_bitmap(ctx->block_found_map);
+       ctx->block_found_map = 0;
++      if (ctx->flags & E2F_FLAG_EXPAND_EISIZE) {
++              int min_extra_isize;
++
++              if (!ctx->expand_eisize_map)
++                      goto set_min_extra_isize;
++
++              for (pctx.ino = 1; pctx.ino < ctx->fs->super->s_inodes_count;
++                   pctx.ino++) {
++                      if (ext2fs_test_inode_bitmap2(ctx->expand_eisize_map,
++                          pctx.ino)) {
++                              fix_problem(ctx, PR_5_EXPAND_EISIZE, &pctx);
++                              ext2fs_expand_extra_isize(ctx->fs, pctx.ino, 0,
++                                                        ctx->want_extra_isize,
++                                                        NULL, NULL);
++                      }
++              }
++              ext2fs_free_inode_bitmap(ctx->expand_eisize_map);
++
++set_min_extra_isize:
++              if (ctx->fs->super->s_min_extra_isize)
++                      min_extra_isize = ctx->fs->super->s_min_extra_isize;
++              else
++                      min_extra_isize = ctx->want_extra_isize;
++              if (ctx->min_extra_isize >= min_extra_isize &&
++                  !ctx->fs_unexpanded_inodes) {
++                      ctx->fs->super->s_min_extra_isize =ctx->min_extra_isize;
++                      ctx->fs->super->s_feature_ro_compat |=
++                                      EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE;
++              } else {
++                      ctx->fs->super->s_min_extra_isize = 0;
++                      ctx->fs->super->s_feature_ro_compat &=
++                                      ~EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE;
++              }
++              ext2fs_mark_super_dirty(ctx->fs);
++      }
++
+       print_resource_track(ctx, _("Pass 5"), &rtrack, ctx->fs->io);
+ }
+@@ -707,10 +743,10 @@ static void check_inode_end(e2fsck_t ctx
+       /* protect loop from wrap-around if end is maxed */
+       for (i = save_inodes_count + 1; i <= end && i > save_inodes_count; i++) {
+-              if (!ext2fs_test_inode_bitmap(fs->inode_map, i)) {
++              if (!ext2fs_test_inode_bitmap2(fs->inode_map, i)) {
+                       if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx)) {
+                               for (; i <= end; i++)
+-                                      ext2fs_mark_inode_bitmap(fs->inode_map,
++                                      ext2fs_mark_inode_bitmap2(fs->inode_map,
+                                                                i);
+                               ext2fs_mark_ib_dirty(fs);
+                       } else
+Index: e2fsprogs/lib/ext2fs/ext2_err.et.in
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2_err.et.in
++++ e2fsprogs/lib/ext2fs/ext2_err.et.in
+@@ -422,4 +422,28 @@ ec        EXT2_NO_MTAB_FILE,
+ ec    EXT2_ET_CANT_USE_LEGACY_BITMAPS,
+       "Filesystem too large to use legacy bitmaps"
++ec    EXT2_ET_EA_BAD_MAGIC,
++      "Extended attribute block has bad magic value"
++
++ec    EXT2_ET_EA_BAD_ENTRIES,
++      "Extended attribute block has bad entries"
++
++ec    EXT2_ET_EA_NO_SPACE,
++      "No free space for extended attribute"
++
++ec    EXT2_ET_EA_TOO_BIG,
++      "Extended attribute too big for buffer"
++
++ec    EXT2_ET_EA_NAME_TOO_BIG,
++      "Extended attribute name too big for header"
++
++ec    EXT2_ET_EA_BAD_NAME,
++      "Extended attribute name is bad"
++
++ec    EXT2_ET_EA_NAME_NOT_FOUND,
++      "Extended attribute name not found"
++
++ec    EXT2_ET_EA_NAME_EXISTS,
++      "Extended attribute name already exists"
++
+       end
+Index: e2fsprogs/tests/f_illitable_flexbg/expect.1
+===================================================================
+--- e2fsprogs.orig/tests/f_illitable_flexbg/expect.1
++++ e2fsprogs/tests/f_illitable_flexbg/expect.1
+@@ -9,6 +9,7 @@ Relocate? yes
+ Group descriptor 1 checksum is invalid.  FIXED.
+ Group descriptor 2 checksum is invalid.  FIXED.
+ Group descriptor 3 checksum is invalid.  FIXED.
++Disable extra_isize feature since filesystem has 128 byte inodes.
+ Pass 1: Checking inodes, blocks, and sizes
+ Relocating group 1's inode table to 142...
+ Restarting e2fsck from the beginning...
+Index: e2fsprogs/tests/f_unused_itable/expect.1
+===================================================================
+--- e2fsprogs.orig/tests/f_unused_itable/expect.1
++++ e2fsprogs/tests/f_unused_itable/expect.1
+@@ -1,3 +1,4 @@
++Disable extra_isize feature since filesystem has 128 byte inodes.
+ Pass 1: Checking inodes, blocks, and sizes
+ Pass 2: Checking directory structure
+ Entry 'foo' in / (2) references inode 65 found in group 1's unused inodes area.
+Index: e2fsprogs/e2fsck/emptydir.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/emptydir.c
++++ e2fsprogs/e2fsck/emptydir.c
+@@ -98,9 +98,9 @@ void add_empty_dirblock(empty_dir_info e
+              db->blk, db->blockcnt, db->ino);
+       ext2fs_mark_block_bitmap2(edi->empty_dir_blocks, db->blk);
+-      if (ext2fs_test_inode_bitmap(edi->dir_map, db->ino))
++      if (ext2fs_test_inode_bitmap2(edi->dir_map, db->ino))
+               return;
+-      ext2fs_mark_inode_bitmap(edi->dir_map, db->ino);
++      ext2fs_mark_inode_bitmap2(edi->dir_map, db->ino);
+       ext2fs_add_dir_block2(edi->empty_dblist, db->ino,
+                             db->blk, db->blockcnt);
diff --git a/patches/e2fsprogs-extended_ops.patch b/patches/e2fsprogs-extended_ops.patch
new file mode 100644 (file)
index 0000000..acc4e8a
--- /dev/null
@@ -0,0 +1,27 @@
+Minor reformatting patch to make applying later patches easier.
+
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/e2fsck/unix.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/unix.c
++++ e2fsprogs/e2fsck/unix.c
+@@ -587,14 +587,13 @@ static void parse_extended_opts(e2fsck_t
+                               continue;
+                       }
+                       ea_ver = strtoul(arg, &p, 0);
+-                      if (*p ||
+-                          ((ea_ver != 1) && (ea_ver != 2))) {
+-                              fprintf(stderr,
+-                                      _("Invalid EA version.\n"));
++                      if (*p == '\0' && (ea_ver == 1 || ea_ver == 2)) {
++                              ctx->ext_attr_ver = ea_ver;
++                      } else {
++                              fprintf(stderr, _("Invalid EA version.\n"));
+                               extended_usage++;
+                               continue;
+                       }
+-                      ctx->ext_attr_ver = ea_ver;
+               } else if (strcmp(token, "fragcheck") == 0) {
+                       ctx->options |= E2F_OPT_FRAGCHECK;
+                       continue;
diff --git a/patches/e2fsprogs-extents.patch b/patches/e2fsprogs-extents.patch
new file mode 100644 (file)
index 0000000..f7fc3af
--- /dev/null
@@ -0,0 +1,396 @@
+The e2fsck_ext2fs_extent_get() part of this patch is a workaround to
+handle problems with old Lustre extents patches that didn't clear
+the ee_start_hi or ei_leaf_hi fields.
+
+That has been fixed for long time and could be removed as soon as the
+f_extent_* tests are fixed to clear these _hi fields.  Otherwise the
+extents are all marked as corrupt and it ruins those tests value.
+
+Index: e2fsprogs/e2fsck/pass1.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1.c
++++ e2fsprogs/e2fsck/pass1.c
+@@ -138,7 +138,7 @@ int e2fsck_pass1_check_device_inode(ext2
+        * If the index flag is set, then this is a bogus
+        * device/fifo/socket
+        */
+-      if (inode->i_flags & EXT2_INDEX_FL)
++      if (inode->i_flags & (EXT2_INDEX_FL | EXT4_EXTENTS_FL))
+               return 0;
+       /*
+@@ -175,7 +175,7 @@ int e2fsck_pass1_check_symlink(ext2_fils
+       struct ext2fs_extent    extent;
+       if ((inode->i_size_high || inode->i_size == 0) ||
+-          (inode->i_flags & EXT2_INDEX_FL))
++          (inode->i_flags & (EXT2_INDEX_FL | EXT4_EXTENTS_FL)))
+               return 0;
+       if (inode->i_flags & EXT4_EXTENTS_FL) {
+@@ -1054,8 +1054,7 @@ void e2fsck_pass1(e2fsck_t ctx)
+                               check_blocks(ctx, &pctx, block_buf);
+                               continue;
+                       }
+-              }
+-              else if (LINUX_S_ISFIFO (inode->i_mode) &&
++              } else if (LINUX_S_ISFIFO (inode->i_mode) &&
+                        e2fsck_pass1_check_device_inode(fs, inode)) {
+                       check_immutable(ctx, &pctx);
+                       check_size(ctx, &pctx);
+@@ -1678,6 +1677,34 @@ void e2fsck_clear_inode(e2fsck_t ctx, ex
+       e2fsck_write_inode(ctx, ino, inode, source);
+ }
++/* Workaround to handle problems with old Lustre extents patches that didn't
++ * clear the ee_start_hi or ei_leaf_hi fields.  Could be removed as soon as
++ * the f_extent tests are fixed to clear these _hi fields. */
++static errcode_t e2fsck_ext2fs_extent_get(e2fsck_t ctx, struct problem_context *pctx,
++                                   ext2_extent_handle_t ehandle, int flags,
++                                   struct ext2fs_extent *extent)
++{
++      __u16 blk_hi;
++      int high_bits_ok = ext2fs_blocks_count(ctx->fs->super) > 0xffffffffULL;
++      int rc = 0;
++
++      rc = ext2fs_extent_get(ehandle, flags, extent);
++      if (rc)
++              return rc;
++
++      blk_hi = extent->e_pblk >> 32;
++
++      if (blk_hi && !high_bits_ok &&
++          fix_problem(ctx, PR_1_EXTENT_HI, pctx)) {
++              extent->e_pblk &= 0xFFFFFFFFULL;
++              rc = ext2fs_extent_replace(ehandle, 0, extent);
++              if (rc)
++                      return rc;
++      }
++
++      return rc;
++}
++
+ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
+                            struct process_block_struct *pb,
+                            blk64_t start_block,
+@@ -1695,8 +1722,8 @@ static void scan_extent_node(e2fsck_t ct
+       if (pctx->errcode)
+               return;
+-      pctx->errcode = ext2fs_extent_get(ehandle, EXT2_EXTENT_FIRST_SIB,
+-                                        &extent);
++      pctx->errcode = e2fsck_ext2fs_extent_get(ctx, pctx, ehandle,
++                                               EXT2_EXTENT_FIRST_SIB, &extent);
+       while (!pctx->errcode && info.num_entries-- > 0) {
+               is_leaf = extent.e_flags & EXT2_EXTENT_FLAGS_LEAF;
+               is_dir = LINUX_S_ISDIR(pctx->inode->i_mode);
+@@ -1726,9 +1753,9 @@ static void scan_extent_node(e2fsck_t ct
+                                       pctx->str = "ext2fs_extent_delete";
+                                       return;
+                               }
+-                              pctx->errcode = ext2fs_extent_get(ehandle,
+-                                                                EXT2_EXTENT_CURRENT,
+-                                                                &extent);
++                              pctx->errcode = e2fsck_ext2fs_extent_get(ctx,
++                                              pctx, ehandle,
++                                              EXT2_EXTENT_CURRENT, &extent);
+                               if (pctx->errcode == EXT2_ET_NO_CURRENT_NODE) {
+                                       pctx->errcode = 0;
+                                       break;
+@@ -1740,8 +1767,8 @@ static void scan_extent_node(e2fsck_t ct
+               if (!is_leaf) {
+                       blk = extent.e_pblk;
+-                      pctx->errcode = ext2fs_extent_get(ehandle,
+-                                                EXT2_EXTENT_DOWN, &extent);
++                      pctx->errcode = e2fsck_ext2fs_extent_get(ctx, pctx,
++                                          ehandle, EXT2_EXTENT_DOWN, &extent);
+                       if (pctx->errcode) {
+                               pctx->str = "EXT2_EXTENT_DOWN";
+                               problem = PR_1_EXTENT_HEADER_INVALID;
+@@ -1752,8 +1779,8 @@ static void scan_extent_node(e2fsck_t ct
+                       scan_extent_node(ctx, pctx, pb, extent.e_lblk, ehandle);
+                       if (pctx->errcode)
+                               return;
+-                      pctx->errcode = ext2fs_extent_get(ehandle,
+-                                                EXT2_EXTENT_UP, &extent);
++                      pctx->errcode = e2fsck_ext2fs_extent_get(ctx, pctx,
++                                            ehandle, EXT2_EXTENT_UP, &extent);
+                       if (pctx->errcode) {
+                               pctx->str = "EXT2_EXTENT_UP";
+                               return;
+@@ -1818,9 +1845,9 @@ static void scan_extent_node(e2fsck_t ct
+               pb->previous_block = extent.e_pblk + extent.e_len - 1;
+               start_block = pb->last_block = extent.e_lblk + extent.e_len - 1;
+       next:
+-              pctx->errcode = ext2fs_extent_get(ehandle,
+-                                                EXT2_EXTENT_NEXT_SIB,
+-                                                &extent);
++              pctx->errcode = e2fsck_ext2fs_extent_get(ctx, pctx, ehandle,
++                                                       EXT2_EXTENT_NEXT_SIB,
++                                                       &extent);
+       }
+       if (pctx->errcode == EXT2_ET_EXTENT_NO_NEXT)
+               pctx->errcode = 0;
+Index: e2fsprogs/e2fsck/problem.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.c
++++ e2fsprogs/e2fsck/problem.c
+@@ -895,6 +895,21 @@ static struct e2fsck_problem problem_tab
+         N_("@a in @i %i is corrupt (@n value)."),
+         PROMPT_CLEAR, 0},
++      /* extent has high 16 bits set */
++      { PR_1_EXTENT_HI,
++        N_("High 16 bits of extent/index @b set\n"),
++        PROMPT_CLEAR, PR_LATCH_EXTENT_HI|PR_PREEN_OK|PR_NO_OK|PR_PREEN_NOMSG},
++
++      /* extent has high 16 bits set header */
++      { PR_1_EXTENT_HI_LATCH,
++        N_("@i %i has high 16 bits of extent/index @b set\n"),
++        PROMPT_CLEAR, PR_PREEN_OK | PR_NO_OK | PR_PREEN_NOMSG },
++
++      /* eh_depth should be 0 */
++      { PR_1_EXTENT_EH_DEPTH_BAD,
++        N_("@i %i has extent header with incorrect eh_depth\n"),
++        PROMPT_FIX, 0 },
++
+       /* Pass 1b errors */
+       /* Pass 1B: Rescan for duplicate/bad blocks */
+@@ -1661,6 +1676,7 @@ static struct latch_descr pr_latch_info[
+       { PR_LATCH_TOOBIG, PR_1_INODE_TOOBIG, 0 },
+       { PR_LATCH_OPTIMIZE_DIR, PR_3A_OPTIMIZE_DIR_HEADER, PR_3A_OPTIMIZE_DIR_END },
+       { PR_LATCH_BG_CHECKSUM, PR_0_GDT_CSUM_LATCH, 0 },
++      { PR_LATCH_EXTENT_HI, PR_1_EXTENT_HI_LATCH, 0 },
+       { -1, 0, 0 },
+ };
+Index: e2fsprogs/e2fsck/problem.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.h
++++ e2fsprogs/e2fsck/problem.h
+@@ -39,6 +39,7 @@ struct problem_context {
+ #define PR_LATCH_TOOBIG       0x0080  /* Latch for file to big errors */
+ #define PR_LATCH_OPTIMIZE_DIR 0x0090 /* Latch for optimize directories */
+ #define PR_LATCH_BG_CHECKSUM 0x00A0  /* Latch for block group checksums */
++#define PR_LATCH_EXTENT_HI 0x00B0 /* Latch for extent high bits set */
+ #define PR_LATCH(x)   ((((x) & PR_LATCH_MASK) >> 4) - 1)
+@@ -523,6 +524,15 @@ struct problem_context {
+ /* Bad extended attribute value in inode */
+ #define PR_1_INODE_EA_BAD_VALUE               0x010061
++/* extent/index has high 16 bits set - header */
++#define PR_1_EXTENT_HI                        0x010062
++
++/* extent/index has high 16 bits set */
++#define PR_1_EXTENT_HI_LATCH          0x010063
++
++/* eh_depth for in-inode header is bad */
++#define PR_1_EXTENT_EH_DEPTH_BAD      0x010064
++
+ /*
+  * Pass 1b errors
+  */
+Index: e2fsprogs/lib/ext2fs/swapfs.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/swapfs.c
++++ e2fsprogs/lib/ext2fs/swapfs.c
+@@ -266,11 +266,13 @@ void ext2fs_swap_inode_full(ext2_filsys 
+       if (bufsize < (int) (sizeof(struct ext2_inode) + sizeof(__u16)))
+               return; /* no i_extra_isize field */
+-      if (hostorder)
++      if (hostorder) {
+               extra_isize = f->i_extra_isize;
+-      t->i_extra_isize = ext2fs_swab16(f->i_extra_isize);
+-      if (!hostorder)
++              t->i_extra_isize = ext2fs_swab16(f->i_extra_isize);
++      } else {
++              t->i_extra_isize = ext2fs_swab16(f->i_extra_isize);
+               extra_isize = t->i_extra_isize;
++      }
+       if (extra_isize > EXT2_INODE_SIZE(fs->super) -
+                               sizeof(struct ext2_inode)) {
+               /* this is error case: i_extra_size is too large */
+Index: e2fsprogs/lib/ext2fs/valid_blk.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/valid_blk.c
++++ e2fsprogs/lib/ext2fs/valid_blk.c
+@@ -18,6 +18,7 @@
+ #include "ext2_fs.h"
+ #include "ext2fs.h"
++#include "ext3_extents.h"
+ /*
+  * This function returns 1 if the inode's block entries actually
+@@ -40,12 +41,23 @@ int ext2fs_inode_has_valid_blocks(struct
+       if (LINUX_S_ISLNK (inode->i_mode)) {
+               if (ext2fs_file_acl_block(inode) == 0) {
+                       /* With no EA block, we can rely on i_blocks */
+-                      if (inode->i_blocks == 0)
+-                              return 0;
++                      if (inode->i_flags & EXT4_EXTENTS_FL) {
++                              struct ext3_extent_header *eh;
++                              eh = (struct ext3_extent_header *)inode->i_block;
++                              if (eh->eh_entries == 0)
++                                      return 0;
++                      } else {
++                              if (inode->i_blocks == 0)
++                                      return 0;
++                      }
+               } else {
+                       /* With an EA block, life gets more tricky */
+                       if (inode->i_size >= EXT2_N_BLOCKS*4)
+                               return 1; /* definitely using i_block[] */
++                      /*
++                       * we cannot have EA + extents, so assume we are not
++                       * using extents
++                       */
+                       if (inode->i_size > 4 && inode->i_block[1] == 0)
+                               return 1; /* definitely using i_block[] */
+                       return 0; /* Probably a fast symlink */
+Index: e2fsprogs/tests/f_extents/expect.1
+===================================================================
+--- e2fsprogs.orig/tests/f_extents/expect.1
++++ e2fsprogs/tests/f_extents/expect.1
+@@ -2,51 +2,68 @@ Pass 1: Checking inodes, blocks, and siz
+ Inode 12 is in extent format, but superblock is missing EXTENTS feature
+ Fix? yes
+-Inode 12 has an invalid extent
+-      (logical block 0, invalid physical block 21994527527949, len 17)
++Inode 12 has high 16 bits of extent/index block set
+ Clear? yes
+-Inode 12, i_blocks is 34, should be 0.  Fix? yes
+-
++High 16 bits of extent/index block set
++CLEARED.
+ Inode 13 missing EXTENT_FL, but is in extents format
+ Fix? yes
+-Inode 17 has an invalid extent
+-      (logical block 0, invalid physical block 22011707397135, len 15)
+-Clear? yes
+-
+-Inode 17, i_blocks is 32, should be 0.  Fix? yes
+-
++High 16 bits of extent/index block set
++CLEARED.
+ Error while reading over extent tree in inode 18: Corrupt extent header
+ Clear inode? yes
+ Inode 18, i_blocks is 2, should be 0.  Fix? yes
++
++Running additional passes to resolve blocks claimed by more than one inode...
++Pass 1B: Rescanning for multiply-claimed blocks
++Multiply-claimed block(s) in inode 12: 5133 5124 5125 5129 5132 5133 5142 5143 5144 5145
++Multiply-claimed block(s) in inode 17: 5124 5125 5129 5132 5142 5143 5144 5145
++Pass 1C: Scanning directories for inodes with multiply-claimed blocks
++Pass 1D: Reconciling multiply-claimed blocks
++(There are 2 inodes containing multiply-claimed blocks.)
++
++File /fdup1 (inode #12, mod time Wed Jul  5 21:55:26 2006) 
++  has 10 multiply-claimed block(s), shared with 1 file(s):
++      /fdup2 (inode #17, mod time Wed Jul  5 21:55:27 2006)
++Clone multiply-claimed blocks? yes
++
++File /fdup2 (inode #17, mod time Wed Jul  5 21:55:27 2006) 
++  has 8 multiply-claimed block(s), shared with 1 file(s):
++      /fdup1 (inode #12, mod time Wed Jul  5 21:55:26 2006)
++Multiply-claimed blocks already reassigned or cloned.
++
+ Pass 2: Checking directory structure
+ Entry 'fbad-flag' in / (2) has deleted/unused inode 18.  Clear? yes
++Inode 19 (/fbad-sock) is an illegal FIFO.
++Clear? yes
++
+ Pass 3: Checking directory connectivity
+ Pass 4: Checking reference counts
+ Pass 5: Checking group summary information
+-Block bitmap differences:  -1081 +4611 -(5121--5142)
++Block bitmap differences:  +4611 -(5121--5122) +(5143--5146)
+ Fix? yes
+-Free blocks count wrong for group #0 (7081, counted=7098).
++Free blocks count wrong for group #0 (7081, counted=7065).
+ Fix? yes
+-Free blocks count wrong (7081, counted=7098).
++Free blocks count wrong (7081, counted=7065).
+ Fix? yes
+ Inode bitmap differences:  -18
+ Fix? yes
+-Free inodes count wrong for group #0 (237, counted=238).
++Free inodes count wrong for group #0 (238, counted=239).
+ Fix? yes
+-Free inodes count wrong (237, counted=238).
++Free inodes count wrong (238, counted=239).
+ Fix? yes
+ test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+-test_filesys: 18/256 files (0.0% non-contiguous), 1094/8192 blocks
++test_filesys: 17/256 files (11.8% non-contiguous), 1127/8192 blocks
+ Exit status is 1
+Index: e2fsprogs/tests/f_extents/expect.2
+===================================================================
+--- e2fsprogs.orig/tests/f_extents/expect.2
++++ e2fsprogs/tests/f_extents/expect.2
+@@ -3,5 +3,5 @@ Pass 2: Checking directory structure
+ Pass 3: Checking directory connectivity
+ Pass 4: Checking reference counts
+ Pass 5: Checking group summary information
+-test_filesys: 18/256 files (0.0% non-contiguous), 1094/8192 blocks
++test_filesys: 17/256 files (11.8% non-contiguous), 1127/8192 blocks
+ Exit status is 0
+Index: e2fsprogs/tests/f_fast_symlink_extents/expect.1
+===================================================================
+--- e2fsprogs.orig/tests/f_fast_symlink_extents/expect.1
++++ e2fsprogs/tests/f_fast_symlink_extents/expect.1
+@@ -1,11 +1,23 @@
+ Pass 1: Checking inodes, blocks, and sizes
+-Fast symlink 13 has EXTENT_FL set.  Clear? yes
++Error while reading over extent tree in inode 13: Corrupt extent header
++Clear inode? yes
+ Pass 2: Checking directory structure
++Entry 'bar' in / (2) has deleted/unused inode 13.  Clear? yes
++
+ Pass 3: Checking directory connectivity
+ Pass 4: Checking reference counts
+ Pass 5: Checking group summary information
++Inode bitmap differences:  -13
++Fix? yes
++
++Free inodes count wrong for group #0 (3, counted=4).
++Fix? yes
++
++Free inodes count wrong (3, counted=4).
++Fix? yes
++
+ test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+-test_filesys: 13/16 files (0.0% non-contiguous), 21/100 blocks
++test_filesys: 12/16 files (0.0% non-contiguous), 21/100 blocks
+ Exit status is 1
+Index: e2fsprogs/tests/f_fast_symlink_extents/expect.2
+===================================================================
+--- e2fsprogs.orig/tests/f_fast_symlink_extents/expect.2
++++ e2fsprogs/tests/f_fast_symlink_extents/expect.2
+@@ -3,5 +3,5 @@ Pass 2: Checking directory structure
+ Pass 3: Checking directory connectivity
+ Pass 4: Checking reference counts
+ Pass 5: Checking group summary information
+-test_filesys: 13/16 files (0.0% non-contiguous), 21/100 blocks
++test_filesys: 12/16 files (0.0% non-contiguous), 21/100 blocks
+ Exit status is 0
diff --git a/patches/e2fsprogs-fiemap-lustre.patch b/patches/e2fsprogs-fiemap-lustre.patch
new file mode 100644 (file)
index 0000000..0f8ee40
--- /dev/null
@@ -0,0 +1,651 @@
+Incremental improvements to filefrag FIEMAP handling:
+* add support for multiple-device filesystems
+* add -k option to print extents in kB-sized units (like df -k)
+* add -b {blocksize} to print extents in blocksize units
+* add -e option to use in extent format, even for non-extent files.
+* add -X option to print extents in hexadecimal format
+
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/lib/ext2fs/fiemap.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/fiemap.h
++++ e2fsprogs/lib/ext2fs/fiemap.h
+@@ -19,7 +19,8 @@ struct fiemap_extent {
+       __u64 fe_length;   /* length in bytes for this extent */
+       __u64 fe_reserved64[2];
+       __u32 fe_flags;    /* FIEMAP_EXTENT_* flags for this extent */
+-      __u32 fe_reserved[3];
++      __u32 fe_device;   /* device number (fs-specific if FIEMAP_EXTENT_NET)*/
++      __u32 fe_reserved[2];
+ };
+ struct fiemap {
+@@ -42,6 +43,7 @@ struct fiemap {
+ #define FIEMAP_FLAG_SYNC      0x00000001 /* sync file data before map */
+ #define FIEMAP_FLAG_XATTR     0x00000002 /* map extended attribute tree */
++#define FIEMAP_FLAG_DEVICE_ORDER 0x40000000 /* return device ordered mapping */
+ #define FIEMAP_FLAGS_COMPAT   (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR)
+@@ -65,4 +67,9 @@ struct fiemap {
+                                                   * support extents. Result
+                                                   * merged for efficiency. */
++/* Network filesystem flags - use a high bit, don't conflict with upstream */
++#define FIEMAP_EXTENT_NO_DIRECT               0x40000000 /* Data mapping undefined */
++#define FIEMAP_EXTENT_NET             0x80000000 /* Data stored remotely.
++                                                  * Sets NO_DIRECT flag */
++
+ #endif /* _LINUX_FIEMAP_H */
+Index: e2fsprogs/misc/filefrag.8.in
+===================================================================
+--- e2fsprogs.orig/misc/filefrag.8.in
++++ e2fsprogs/misc/filefrag.8.in
+@@ -5,7 +5,10 @@ filefrag \- report on file fragmentation
+ .SH SYNOPSIS
+ .B filefrag
+ [
+-.B \-Bbsvx
++.BI \-b blocksize
++]
++[
++.B \-BeklsvxX
+ ]
+ [
+ .I files...
+@@ -27,8 +30,15 @@ If FIEMAP is not supported then filefrag
+ Force the use of the older FIBMAP ioctl instead of the FIEMAP ioctl for
+ testing purposes.
+ .TP
+-.B \-b
+-Use 1024 byte blocksize for the output.
++.BI \-b blocksize
++Use specified blocksize in bytes for the output instead of the filesystem
++.TP
++.B \-e
++Print output in extent format, even for non-extent files.
++.BI \-k
++Use 1024-byte blocksize for output.
++.B \-l
++Extents are displayed in device-logical offset order.
+ .TP
+ .B \-s
+ Sync the file before requesting the mapping.
+@@ -38,6 +48,9 @@ Be verbose when checking for file fragme
+ .TP
+ .B \-x
+ Display mapping of extended attributes.
++.TP
++.B \-X
++Display extent block numbers in hexadecimal format.
+ .SH AUTHOR
+ .B filefrag
+ was written by Theodore Ts'o <tytso@mit.edu>.
+Index: e2fsprogs/misc/filefrag.c
+===================================================================
+--- e2fsprogs.orig/misc/filefrag.c
++++ e2fsprogs/misc/filefrag.c
+@@ -15,8 +15,8 @@
+ #include <unistd.h>
+ int main(void) {
+-    fputs("This program is only supported on Linux!\n", stderr);
+-    exit(EXIT_FAILURE);
++      fputs("This program is only supported on Linux!\n", stderr);
++      exit(EXIT_FAILURE);
+ }
+ #else
+ #define _LARGEFILE64_SOURCE
+@@ -43,22 +43,34 @@ extern int optind;
+ #include <ext2fs/fiemap.h>
+ int verbose = 0;
+-int no_bs = 0;                /* Don't use the files blocksize, use 1K blocksize */
++int blocksize = 0;    /* Use specified blocksize (default 1kB) */
+ int sync_file = 0;    /* fsync file before getting the mapping */
+ int xattr_map = 0;    /* get xattr mapping */
+-int force_bmap = 0;
+-int logical_width = 12;
+-int physical_width = 14;
+-unsigned long long filesize;
++int force_bmap = 0;   /* force use of FIBMAP instead of FIEMAP */
++int force_extent = 0; /* print output in extent format always */
++int device_offset = 0;        /* extents report device-relative offsets */
++int logical_width = 8;
++int physical_width = 10;
++char *ext_fmt = "%4d: %*llu..%*llu: %*llu..%*llu: %6llu: %s\n";
++char *hex_fmt = "%4d: %*llx..%*llx: %*llx..%*llx: %6llx: %s\n";
+-#define FILEFRAG_FIEMAP_FLAGS_COMPAT (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR)
++#define FILEFRAG_FIEMAP_FLAGS_COMPAT (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR |\
++                                    FIEMAP_FLAG_DEVICE_ORDER)
+ #define FIBMAP                _IO(0x00, 1)    /* bmap access */
+ #define FIGETBSZ      _IO(0x00, 2)    /* get the block size used for bmap */
++#define LUSTRE_SUPER_MAGIC 0x0BD00BD0
++
+ #define       EXT4_EXTENTS_FL                 0x00080000 /* Inode uses extents */
+ #define       EXT3_IOC_GETFLAGS               _IOR('f', 1, long)
++#ifdef HAVE_FSTAT64
++#define mystat stat64
++#else
++#define mystat stat
++#endif
++
+ static int int_log2(int arg)
+ {
+       int     l = 0;
+@@ -101,30 +113,41 @@ static int get_bmap(int fd, unsigned lon
+               if (errno == EPERM) {
+                       fprintf(stderr, "No permission to use FIBMAP ioctl; "
+                               "must have root privileges\n");
+-                      exit(1);
+               }
+-              perror("FIBMAP");
+       }
+       *phy_blk = b;
+       return ret;
+ }
++static void print_extent_header(void)
++{
++      printf(" ext: %*s %*s length: %sflags:\n",
++             logical_width * 2 + 3,
++             device_offset ? "device_logical:" : "logical_offset:",
++             physical_width * 2 + 3, "physical_offset:",
++             device_offset ? " dev: " : "");
++}
++
+ static void print_extent_info(struct fiemap_extent *fm_extent, int cur_ex,
+-                            unsigned long long expected, int blk_shift)
++                            int blk_shift, struct mystat *fileinfo)
+ {
+-      __u64 phy_blk;
++      unsigned long long physical_blk;
+       unsigned long long logical_blk;
+-      unsigned long ext_len;
++      unsigned long long ext_blks, ext_len;
+       char flags[256] = "";
+-      /* For inline data all offsets should be in terms of bytes, not blocks */
++      /* For inline data all offsets should be in bytes, not blocks */
+       if (fm_extent->fe_flags & FIEMAP_EXTENT_DATA_INLINE)
+               blk_shift = 0;
+       ext_len = fm_extent->fe_length >> blk_shift;
++      ext_blks = (fm_extent->fe_length - 1) >> blk_shift;
+       logical_blk = fm_extent->fe_logical >> blk_shift;
+-      phy_blk = fm_extent->fe_physical >> blk_shift;
++      physical_blk = fm_extent->fe_physical >> blk_shift;
++
++      if (device_offset)
++              sprintf(flags, "%04x: ", fm_extent->fe_device);
+       if (fm_extent->fe_flags & FIEMAP_EXTENT_UNKNOWN)
+               strcat(flags, "unknown,");
+@@ -142,45 +165,50 @@ static void print_extent_info(struct fie
+               strcat(flags, "unwritten,");
+       if (fm_extent->fe_flags & FIEMAP_EXTENT_MERGED)
+               strcat(flags, "merged,");
++      if (fm_extent->fe_flags & FIEMAP_EXTENT_NET)
++              strcat(flags, "network,");
++      if (fm_extent->fe_flags & FIEMAP_EXTENT_NO_DIRECT)
++              strcat(flags, "no_direct,");
+-      if (fm_extent->fe_logical + fm_extent->fe_length >= filesize)
++      if (fm_extent->fe_logical + fm_extent->fe_length >= fileinfo->st_size)
+               strcat(flags, "eof,");
+       /* Remove trailing comma, if any */
+       if (flags[0])
+               flags[strlen(flags) - 1] = '\0';
+-      if (expected)
+-              printf("%4d %*llu %*llu %*llu %6lu %s\n",
+-                     cur_ex, logical_width, logical_blk,
+-                     physical_width, phy_blk, physical_width, expected,
+-                     ext_len, flags);
+-      else
+-              printf("%4d %*llu %*llu %*s %6lu %s\n",
+-                     cur_ex, logical_width, logical_blk,
+-                     physical_width, phy_blk, physical_width, "",
+-                     ext_len, flags);
++      printf(ext_fmt, cur_ex, logical_width, logical_blk,
++              logical_width, logical_blk + ext_blks,
++              physical_width, physical_blk,
++              physical_width, physical_blk + ext_blks,
++              ext_len, flags);
+ }
+-static int filefrag_fiemap(int fd, int blk_shift, int *num_extents)
++static int filefrag_fiemap(int fd, int blk_shift, int *num_extents,
++                              struct mystat *fileinfo)
+ {
+       char buf[4096] = "";
+       struct fiemap *fiemap = (struct fiemap *)buf;
+       struct fiemap_extent *fm_ext = &fiemap->fm_extents[0];
+       int count = (sizeof(buf) - sizeof(*fiemap)) /
+                       sizeof(struct fiemap_extent);
+-      unsigned long long last_blk = 0;
++      unsigned long long next_physical = 0;
+       unsigned long flags = 0;
+       unsigned int i;
+       static int fiemap_incompat_printed;
+       int fiemap_header_printed = 0;
+       int tot_extents = 1, n = 0;
++      int previous_device = 0;
+       int last = 0;
+       int rc;
+-      memset(fiemap, 0, sizeof(struct fiemap));
++      fiemap->fm_length = ~0ULL;
+-      if (!verbose)
++      /* If extents are going to be device ordered, then we may need to use
++       * the first extent to pass the next starting offset and the device. */
++      memset(fiemap, 0, sizeof(struct fiemap) + sizeof(struct fiemap_extent));
++
++      if (!verbose && !force_extent)
+               count = 0;
+       if (sync_file)
+@@ -189,6 +217,10 @@ static int filefrag_fiemap(int fd, int b
+       if (xattr_map)
+               flags |= FIEMAP_FLAG_XATTR;
++      if (device_offset)
++              flags |= FIEMAP_FLAG_DEVICE_ORDER;
++
++retry_wo_device_offset:
+       do {
+               fiemap->fm_length = ~0ULL;
+               fiemap->fm_flags = flags;
+@@ -199,14 +231,16 @@ static int filefrag_fiemap(int fd, int b
+                               printf("FIEMAP failed with unsupported "
+                                      "flags %x\n", fiemap->fm_flags);
+                               fiemap_incompat_printed = 1;
++                      } else if (rc == EBADR && (fiemap->fm_flags &
++                                                 FIEMAP_FLAG_DEVICE_ORDER)) {
++                              flags &= ~FIEMAP_FLAG_DEVICE_ORDER;
++                              goto retry_wo_device_offset;
+                       }
+                       return rc;
+               }
+               if (verbose && !fiemap_header_printed) {
+-                      printf(" ext %*s %*s %*s length flags\n", logical_width,
+-                             "logical", physical_width, "physical",
+-                             physical_width, "expected");
++                      print_extent_header();
+                       fiemap_header_printed = 1;
+               }
+@@ -220,27 +254,40 @@ static int filefrag_fiemap(int fd, int b
+                       break;
+               for (i = 0; i < fiemap->fm_mapped_extents; i++) {
+-                      __u64 phy_blk, logical_blk;
+-                      unsigned long ext_len;
++                      unsigned long long physical, logical;
++
++                      physical = fm_ext[i].fe_physical;
++                      logical  = fm_ext[i].fe_logical;
+-                      phy_blk = fm_ext[i].fe_physical >> blk_shift;
+-                      ext_len = fm_ext[i].fe_length >> blk_shift;
+-                      logical_blk = fm_ext[i].fe_logical >> blk_shift;
++                      if (previous_device != fm_ext[i].fe_device)
++                              previous_device = fm_ext[i].fe_device;
+-                      if (logical_blk && phy_blk != last_blk + 1)
++                      if (logical && physical != next_physical)
+                               tot_extents++;
+                       else
+-                              last_blk = 0;
+-                      print_extent_info(&fm_ext[i], n, last_blk, blk_shift);
++                              last = 0;
++                      print_extent_info(&fm_ext[i], n, blk_shift, fileinfo);
+-                      last_blk = phy_blk + ext_len - 1;
++                      next_physical = physical + fm_ext[i].fe_length;
+                       if (fm_ext[i].fe_flags & FIEMAP_EXTENT_LAST)
+                               last = 1;
+                       n++;
+               }
+-              fiemap->fm_start = (fm_ext[i-1].fe_logical +
+-                                  fm_ext[i-1].fe_length);
++              /* For DEVICE_ORDER mappings, if EXTENT_LAST not yet found then
++               * fm_start needs to be the same as it was for earlier ioctl.
++               * The first extent is used to pass the end offset and device
++               * of the last FIEMAP call.  Otherwise, we ask for extents
++               * starting from where the last mapping ended. */
++              if (flags & FIEMAP_FLAG_DEVICE_ORDER) {
++                      fm_ext[0].fe_logical = fm_ext[i - 1].fe_logical +
++                                                    fm_ext[i - 1].fe_length;
++                      fm_ext[0].fe_device = fm_ext[i - 1].fe_device;
++                      fiemap->fm_start = 0;
++              } else {
++                      fiemap->fm_start = fm_ext[i - 1].fe_logical +
++                                  fm_ext[i - 1].fe_length;
++              }
+       } while (last == 0);
+       *num_extents = tot_extents;
+@@ -250,24 +297,88 @@ out:
+ #define EXT2_DIRECT   12
++static int filefrag_fibmap(int fd, int blk_shift, int *num_extents,
++                         struct mystat *fileinfo,
++                         unsigned long numblocks, int is_ext2)
++{
++      struct fiemap_extent    fm_ext;
++      unsigned long           i, last_block;
++      unsigned long long      logical;
++                              /* Blocks per indirect block */
++      const long              bpib = fileinfo->st_blksize / 4;
++      int                     count;
++
++      if (force_extent) {
++              memset(&fm_ext, 0, sizeof(fm_ext));
++              fm_ext.fe_device = fileinfo->st_dev;
++      }
++
++      for (i = 0, logical = 0, *num_extents = 0, count = last_block = 0;
++           i < numblocks;
++           i++, logical += fileinfo->st_blksize) {
++              unsigned long block = 0;
++              int rc;
++
++              if (is_ext2 && last_block) {
++                      if (((i - EXT2_DIRECT) % bpib) == 0)
++                              last_block++;
++                      if (((i - EXT2_DIRECT - bpib) % (bpib * bpib)) == 0)
++                              last_block++;
++                      if (((i - EXT2_DIRECT - bpib - bpib * bpib) %
++                           (((unsigned long long)bpib )* bpib * bpib)) == 0)
++                              last_block++;
++              }
++              rc = get_bmap(fd, i, &block);
++              if (rc < 0)
++                      return rc;
++              if (block == 0)
++                      continue;
++              if (!*num_extents) {
++                      (*num_extents)++;
++                      if (force_extent) {
++                              print_extent_header();
++                              fm_ext.fe_physical = block*fileinfo->st_blksize;
++                      }
++              }
++              count++;
++              if (force_extent &&
++                  (last_block && (block != last_block + 1) ||
++                   fm_ext.fe_logical + fm_ext.fe_length != logical)) {
++                      print_extent_info(&fm_ext, *num_extents - 1,
++                                        blk_shift, fileinfo);
++                      fm_ext.fe_logical = logical;
++                      fm_ext.fe_physical = block*fileinfo->st_blksize;
++                      fm_ext.fe_length = 0;
++                      (*num_extents)++;
++              } else if (verbose && last_block && (block != last_block + 1)) {
++                      printf("Discontinuity: Block %ld is at %lu (was %lu)\n",
++                             i, block, last_block + 1);
++                      (*num_extents)++;
++              }
++              fm_ext.fe_length += fileinfo->st_blksize;
++              last_block = block;
++      }
++
++      if (force_extent)
++              print_extent_info(&fm_ext, *num_extents - 1,
++                                blk_shift, fileinfo);
++
++      return count;
++}
++
+ static void frag_report(const char *filename)
+ {
+       struct statfs   fsinfo;
+-#ifdef HAVE_FSTAT64
+-      struct stat64   fileinfo;
+-#else
+-      struct stat     fileinfo;
+-#endif
+-      int             bs;
++      struct mystat   fileinfo;
++      int             blk_shift;
+       long            fd;
+-      unsigned long   block, last_block = 0, numblocks, i, count;
+-      long            bpib;   /* Blocks per indirect block */
+-      long            cylgroups;
+-      int             num_extents = 0, expected;
++      unsigned long   numblocks;
++      int             data_blocks_per_cyl = 1;
++      int             num_extents = 1, expected;
+       int             is_ext2 = 0;
+-      static int      once = 1;
++      static int      last_device;
+       unsigned int    flags;
+-      int rc;
++      int             width;
+ #ifdef HAVE_OPEN64
+       fd = open64(filename, O_RDONLY);
+@@ -291,89 +402,91 @@ static void frag_report(const char *file
+               perror("stat");
+               return;
+       }
++      fileinfo.st_blksize = fsinfo.f_bsize;
+       if (ioctl(fd, EXT3_IOC_GETFLAGS, &flags) < 0)
+               flags = 0;
+       if (!(flags & EXT4_EXTENTS_FL) &&
+           ((fsinfo.f_type == 0xef51) || (fsinfo.f_type == 0xef52) ||
+            (fsinfo.f_type == 0xef53)))
+               is_ext2++;
+-      if (verbose && once)
++      if (verbose && last_device != fileinfo.st_dev)
+               printf("Filesystem type is: %lx\n",
+                      (unsigned long) fsinfo.f_type);
+-      cylgroups = div_ceil(fsinfo.f_blocks, fsinfo.f_bsize*8);
+-      if (verbose && is_ext2 && once)
+-              printf("Filesystem cylinder groups is approximately %ld\n",
+-                     cylgroups);
+-
+-      physical_width = int_log10(fsinfo.f_blocks);
+-      if (physical_width < 8)
+-              physical_width = 8;
+-
+-      if (ioctl(fd, FIGETBSZ, &bs) < 0) { /* FIGETBSZ takes an int */
+-              perror("FIGETBSZ");
+-              close(fd);
+-              return;
++      /* Check if filesystem is Lustre.  Always print in extent format
++       * with 1kB blocks, using the device-relative logical offsets. */
++      if (fsinfo.f_type == LUSTRE_SUPER_MAGIC) {
++              is_ext2 = 0;
++              force_extent = 1;
++              device_offset = 1;
++              blocksize = blocksize ?: 1024;
++      }
++
++      if (is_ext2) {
++              long cylgroups = div_ceil(fsinfo.f_blocks, fsinfo.f_bsize * 8);
++
++              if (verbose && last_device != fileinfo.st_dev)
++                   printf("Filesystem cylinder groups is approximately %ld\n",
++                          cylgroups);
++
++              data_blocks_per_cyl = fsinfo.f_bsize * 8 -
++                                      (fsinfo.f_files / 8 / cylgroups) - 3;
+       }
++      last_device = fileinfo.st_dev;
+-      if (no_bs)
+-              bs = 1024;
++      width = int_log10(fsinfo.f_blocks);
++      if (width > physical_width)
++              physical_width = width;
++
++      numblocks = (fileinfo.st_size + fsinfo.f_bsize - 1) / fsinfo.f_bsize;
++      if (blocksize != 0)
++              blk_shift = int_log2(blocksize);
++      else
++              blk_shift = int_log2(fsinfo.f_bsize);
+-      bpib = bs / 4;
+-      numblocks = (fileinfo.st_size + (bs-1)) / bs;
+-      logical_width = int_log10(numblocks);
+-      if (logical_width < 7)
+-              logical_width = 7;
+-      filesize = (long long)fileinfo.st_size;
++      width = int_log10(numblocks);
++      if (width > logical_width)
++              logical_width = width;
+       if (verbose)
+-              printf("File size of %s is %lld (%ld block%s, blocksize %d)\n",
+-                     filename, (long long) fileinfo.st_size, numblocks,
+-                     numblocks == 1 ? "" : "s", bs);
++              printf("File size of %s is %llu (%lu block%s of %d bytes)\n",
++                     filename, (unsigned long long)fileinfo.st_size,
++                     numblocks * fsinfo.f_bsize >> blk_shift,
++                     numblocks == 1 ? "" : "s", 1 << blk_shift);
++
+       if (force_bmap ||
+-          filefrag_fiemap(fd, int_log2(bs), &num_extents) != 0) {
+-              for (i = 0, count = 0; i < numblocks; i++) {
+-                      if (is_ext2 && last_block) {
+-                              if (((i-EXT2_DIRECT) % bpib) == 0)
+-                                      last_block++;
+-                              if (((i-EXT2_DIRECT-bpib) % (bpib*bpib)) == 0)
+-                                      last_block++;
+-                              if (((i-EXT2_DIRECT-bpib-bpib*bpib) %
+-                                   (((__u64) bpib)*bpib*bpib)) == 0)
+-                                      last_block++;
+-                      }
+-                      rc = get_bmap(fd, i, &block);
+-                      if (block == 0)
+-                              continue;
+-                      if (!num_extents)
+-                              num_extents++;
+-                      count++;
+-                      if (last_block && (block != last_block+1) ) {
+-                              if (verbose)
+-                                      printf("Discontinuity: Block %ld is at "
+-                                             "%lu (was %lu)\n",
+-                                             i, block, last_block+1);
+-                              num_extents++;
++          filefrag_fiemap(fd, blk_shift, &num_extents, &fileinfo) != 0) {
++              expected = filefrag_fibmap(fd, blk_shift, &num_extents,
++                                         &fileinfo, numblocks, is_ext2);
++              if (expected < 0) {
++                      if (errno == EINVAL || errno == ENOTTY) {
++                              fprintf(stderr, "%s: FIBMAP unsupported\n",
++                                      filename);
++                      } else if (errno != EPERM) {
++                              fprintf(stderr, "%s: FIBMAP error: %s",
++                                      filename, strerror(errno));
+                       }
+-                      last_block = block;
++                      goto out_close;
+               }
++              expected = expected / data_blocks_per_cyl + 1;
+       }
++
+       if (num_extents == 1)
+               printf("%s: 1 extent found", filename);
+       else
+               printf("%s: %d extents found", filename, num_extents);
+-      expected = (count/((bs*8)-(fsinfo.f_files/8/cylgroups)-3))+1;
+       if (is_ext2 && expected < num_extents)
+               printf(", perfection would be %d extent%s\n", expected,
+-                      (expected>1) ? "s" : "");
++                      (expected > 1) ? "s" : "");
+       else
+               fputc('\n', stdout);
++out_close:
+       close(fd);
+-      once = 0;
+ }
+ static void usage(const char *progname)
+ {
+-      fprintf(stderr, "Usage: %s [-Bbvsx] file ...\n", progname);
++      fprintf(stderr, "Usage: %s [-b{blocksize}] [-BeklsvxX] file ...\n",
++              progname);
+       exit(1);
+ }
+@@ -382,23 +495,61 @@ int main(int argc, char**argv)
+       char **cpp;
+       int c;
+-      while ((c = getopt(argc, argv, "Bbsvx")) != EOF)
++      while ((c = getopt(argc, argv, "Bb::eklsvxX")) != EOF)
+               switch (c) {
+               case 'B':
+                       force_bmap++;
++                      force_extent = 0;
+                       break;
+               case 'b':
+-                      no_bs++;
++                      if (optarg) {
++                              char *end;
++                              blocksize = strtoul(optarg, &end, 0);
++                              if (end) {
++                                      switch (end[0]) {
++                                      case 'g':
++                                      case 'G': blocksize *= 1024;
++                                              /* no break */
++                                      case 'm':
++                                      case 'M': blocksize *= 1024;
++                                              /* no break */
++                                      case 'k':
++                                      case 'K': blocksize *= 1024;
++                                              break;
++                                      default: break;
++                                      }
++                              }
++                      } else { /* allow -b without argument, for compat */
++                              fprintf(stderr, "%s: -b needs a blocksize "
++                                      "option, assuming 1024-byte blocks.\n",
++                                      argv[0]);
++                              blocksize = 1024;
++                      }
+                       break;
+-              case 'v':
+-                      verbose++;
++              case 'e':
++                      force_extent++;
++                      if (!verbose)
++                              verbose++;
++                      force_bmap = 0;
++                      break;
++              case 'k':
++                      blocksize = 1024;
++                      break;
++              case 'l':
++                      device_offset++;
+                       break;
+               case 's':
+                       sync_file++;
+                       break;
++              case 'v':
++                      verbose++;
++                      break;
+               case 'x':
+                       xattr_map++;
+                       break;
++              case 'X':
++                      ext_fmt = hex_fmt;
++                      break;
+               default:
+                       usage(argv[0]);
+                       break;
diff --git a/patches/e2fsprogs-i_size-corruption.patch b/patches/e2fsprogs-i_size-corruption.patch
new file mode 100644 (file)
index 0000000..85f9ce8
--- /dev/null
@@ -0,0 +1,21 @@
+Fix handling of block preallocation support in cases where the kernel
+PAGE_SIZE is larger than the filesystem blocksize.
+
+Signed-off-by: Kalpak Shah <kalpak@clusterfs.com>
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/e2fsck/pass1.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1.c
++++ e2fsprogs/e2fsck/pass1.c
+@@ -2273,8 +2273,8 @@ static void check_blocks(e2fsck_t ctx, s
+               if ((pb.last_block >= 0) &&
+                   /* allow allocated blocks to end of PAGE_SIZE */
+                   (size < (__u64)pb.last_block * fs->blocksize) &&
+-                  (pb.last_block / blkpg * blkpg != pb.last_block ||
+-                   size < (__u64)(pb.last_block & ~(blkpg-1)) *fs->blocksize) &&
++                  ((pb.last_block + 1) / blkpg * blkpg != (pb.last_block+1) ||
++                   size < (__u64)(pb.last_block & ~(blkpg-1))*fs->blocksize)&&
+                   !(inode->i_flags & EXT4_EOFBLOCKS_FL))
+                       bad_size = 3;
+               else if (!(extent_fs && (inode->i_flags & EXT4_EXTENTS_FL)) &&
diff --git a/patches/e2fsprogs-ibadness-counter.patch b/patches/e2fsprogs-ibadness-counter.patch
new file mode 100644 (file)
index 0000000..6f0e6bb
--- /dev/null
@@ -0,0 +1,937 @@
+The present e2fsck code checks the inode, per field basis. It doesn't
+take into consideration to total sanity of the inode. This may cause
+e2fsck turning a garbage inode into an apparently sane inode ("It is a
+vessel of fertilizer, and none may abide its strength.").
+
+The following patch adds a heuristics to detect the degree of badness of
+an inode. icount mechanism is used to keep track of the badness of every
+inode. The badness is increased as various fields in inode are found to
+be corrupt. Badness above a certain threshold value results in deletion
+of the inode. The default threshold value is 7, it can be specified to
+e2fsck using "-E inode_badness_threshold=<value>"
+
+This can avoid lengthy pass1b shared block processing, where a corrupt
+chunk of the inode table has resulted in a bunch of garbage inodes
+suddenly having shared blocks with a lot of good inodes (or each other).
+
+Signed-off-by: Girish Shilamkar <girish@clusterfs.com>
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/e2fsck/e2fsck.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.h
++++ e2fsprogs/e2fsck/e2fsck.h
+@@ -11,6 +11,7 @@
+ #include <stdio.h>
+ #include <string.h>
++#include <stddef.h>
+ #ifdef HAVE_UNISTD_H
+ #include <unistd.h>
+ #endif
+@@ -204,6 +205,24 @@ typedef enum {
+       E2F_CLONE_ZERO
+ } clone_opt_t;
++#define EXT4_FITS_IN_INODE(ext4_inode, einode, field) \
++      ((offsetof(typeof(*ext4_inode), field) +        \
++        sizeof(ext4_inode->field)) <=                 \
++         (EXT2_GOOD_OLD_INODE_SIZE +                  \
++          (einode)->i_extra_isize))                   \
++
++#define EXT4_XTIME_FUTURE(ctx, sb, xtime, margin)     \
++      (!((ctx)->flags & E2F_FLAG_TIME_INSANE) &&      \
++       (xtime) > (ctx)->now + (margin))
++#define EXT4_XTIME_ANCIENT(ctx, sb, xtime, margin)    \
++      ((xtime) < (sb)->s_mkfs_time - (margin))
++
++#define BADNESS_NORMAL                1
++#define BADNESS_HIGH          2
++#define BADNESS_THRESHOLD     8
++#define BADNESS_BAD_MODE      100
++#define BADNESS_LARGE_FILE    2199023255552ULL
++
+ /*
+  * Define the extended attribute refcount structure
+  */
+@@ -240,7 +259,6 @@ struct e2fsck_struct {
+                       unsigned long max);
+       ext2fs_inode_bitmap inode_used_map; /* Inodes which are in use */
+-      ext2fs_inode_bitmap inode_bad_map; /* Inodes which are bad somehow */
+       ext2fs_inode_bitmap inode_dir_map; /* Inodes which are directories */
+       ext2fs_inode_bitmap inode_bb_map; /* Inodes which are in bad blocks */
+       ext2fs_inode_bitmap inode_imagic_map; /* AFS inodes */
+@@ -255,6 +273,8 @@ struct e2fsck_struct {
+        */
+       ext2_icount_t   inode_count;
+       ext2_icount_t inode_link_info;
++      ext2_icount_t inode_badness;
++      int inode_badness_threshold;
+       ext2_refcount_t refcount;
+       ext2_refcount_t refcount_extra;
+@@ -473,6 +493,11 @@ extern int e2fsck_pass1_check_symlink(ex
+ extern void e2fsck_clear_inode(e2fsck_t ctx, ext2_ino_t ino,
+                              struct ext2_inode *inode, int restart_flag,
+                              const char *source);
++#define e2fsck_mark_inode_bad(ctx,ino,count) \
++              e2fsck_mark_inode_bad_loc(ctx, ino, count, __func__, __LINE__)
++extern void e2fsck_mark_inode_bad_loc(e2fsck_t ctx, ino_t ino, int count,
++                                    const char *func, const int line);
++extern int is_inode_bad(e2fsck_t ctx, ino_t ino);
+ /* pass2.c */
+ extern int e2fsck_process_bad_inode(e2fsck_t ctx, ext2_ino_t dir,
+Index: e2fsprogs/e2fsck/pass1.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1.c
++++ e2fsprogs/e2fsck/pass1.c
+@@ -20,7 +20,8 @@
+  *    - A bitmap of which inodes are in use.          (inode_used_map)
+  *    - A bitmap of which inodes are directories.     (inode_dir_map)
+  *    - A bitmap of which inodes are regular files.   (inode_reg_map)
+- *    - A bitmap of which inodes have bad fields.     (inode_bad_map)
++ *    - An icount mechanism is used to keep track of
++ *      inodes with bad fields and its badness        (ctx->inode_badness)
+  *    - A bitmap of which inodes are in bad blocks.   (inode_bb_map)
+  *    - A bitmap of which inodes are imagic inodes.   (inode_imagic_map)
+  *    - A bitmap of which inodes need to be expanded  (expand_eisize_map)
+@@ -67,7 +68,6 @@ static void check_blocks(e2fsck_t ctx, s
+ static void mark_table_blocks(e2fsck_t ctx);
+ static void alloc_bb_map(e2fsck_t ctx);
+ static void alloc_imagic_map(e2fsck_t ctx);
+-static void mark_inode_bad(e2fsck_t ctx, ino_t ino);
+ static void handle_fs_bad_blocks(e2fsck_t ctx);
+ static void process_inodes(e2fsck_t ctx, char *block_buf);
+ static EXT2_QSORT_TYPE process_inode_cmp(const void *a, const void *b);
+@@ -242,6 +242,7 @@ static void check_immutable(e2fsck_t ctx
+       if (!(pctx->inode->i_flags & BAD_SPECIAL_FLAGS))
+               return;
++      e2fsck_mark_inode_bad(ctx, pctx->ino, BADNESS_NORMAL);
+       if (!fix_problem(ctx, PR_1_SET_IMMUTABLE, pctx))
+               return;
+@@ -260,6 +261,7 @@ static void check_size(e2fsck_t ctx, str
+       if ((inode->i_size == 0) && (inode->i_size_high == 0))
+               return;
++      e2fsck_mark_inode_bad(ctx, pctx->ino, BADNESS_NORMAL);
+       if (!fix_problem(ctx, PR_1_SET_NONZSIZE, pctx))
+               return;
+@@ -360,7 +362,7 @@ static void check_inode_extra_space(e2fs
+       struct ext2_super_block *sb = ctx->fs->super;
+       struct ext2_inode_large *inode;
+       __u32 *eamagic;
+-      int min, max;
++      int min, max, dirty = 0;
+       inode = (struct ext2_inode_large *) pctx->inode;
+       if (EXT2_INODE_SIZE(sb) == EXT2_GOOD_OLD_INODE_SIZE) {
+@@ -381,12 +383,24 @@ static void check_inode_extra_space(e2fs
+        */
+       if (inode->i_extra_isize &&
+           (inode->i_extra_isize < min || inode->i_extra_isize > max)) {
++              e2fsck_mark_inode_bad(ctx, pctx->ino, BADNESS_NORMAL);
+               if (!fix_problem(ctx, PR_1_EXTRA_ISIZE, pctx))
+                       return;
+               inode->i_extra_isize = ctx->want_extra_isize;
+-              e2fsck_write_inode_full(ctx, pctx->ino, pctx->inode,
+-                                      EXT2_INODE_SIZE(sb), "pass1");
+-              return;
++              dirty = 1;
++
++              goto out;
++      }
++
++      if (EXT4_FITS_IN_INODE(inode, inode,i_crtime) && inode->i_crtime != 0 &&
++          (EXT4_XTIME_FUTURE(ctx, sb, inode->i_crtime, 2 * ctx->time_fudge) ||
++           EXT4_XTIME_ANCIENT(ctx, sb, inode->i_crtime, 2*ctx->time_fudge))) {
++              pctx->num = inode->i_crtime;
++              if (fix_problem(ctx, PR_1_CRTIME_BAD, pctx)) {
++                      inode->i_crtime = 0;
++                      dirty = 1;
++              }
++              e2fsck_mark_inode_bad(ctx, pctx->ino, BADNESS_HIGH);
+       }
+       eamagic = IHDR(inode);
+@@ -397,16 +411,17 @@ static void check_inode_extra_space(e2fs
+               memset((char *)inode + EXT2_GOOD_OLD_INODE_SIZE, 0,
+                       EXT2_INODE_SIZE(sb) - EXT2_GOOD_OLD_INODE_SIZE);
+               inode->i_extra_isize = ctx->want_extra_isize;
+-              e2fsck_write_inode_full(ctx, pctx->ino,
+-                                      (struct ext2_inode *)inode,
+-                                      EXT2_INODE_SIZE(sb),
+-                                      "check_inode_extra_space");
++              dirty = 1;
+               if (inode->i_extra_isize < ctx->min_extra_isize)
+                       ctx->min_extra_isize = inode->i_extra_isize;
+       }
+       if (*eamagic == EXT2_EXT_ATTR_MAGIC)
+               check_ea_in_inode(ctx, pctx);
++out:
++      if (dirty)
++              e2fsck_write_inode_full(ctx, pctx->ino, pctx->inode,
++                                      EXT2_INODE_SIZE(sb), "pass1");
+ }
+ /*
+@@ -521,6 +536,7 @@ static void check_is_really_dir(e2fsck_t
+           (rec_len % 4))
+               return;
++      e2fsck_mark_inode_bad(ctx, pctx->ino, BADNESS_NORMAL);
+       if (fix_problem(ctx, PR_1_TREAT_AS_DIRECTORY, pctx)) {
+               inode->i_mode = (inode->i_mode & 07777) | LINUX_S_IFDIR;
+               e2fsck_write_inode_full(ctx, pctx->ino, inode,
+@@ -955,14 +971,16 @@ void e2fsck_pass1(e2fsck_t ctx)
+                       ehp = inode->i_block;
+ #endif
+                       if ((ext2fs_extent_header_verify(ehp,
+-                                       sizeof(inode->i_block)) == 0) &&
+-                          (fix_problem(ctx, PR_1_UNSET_EXTENT_FL, &pctx))) {
+-                              inode->i_flags |= EXT4_EXTENTS_FL;
++                                       sizeof(inode->i_block)) == 0)) {
++                              e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
++                              if (fix_problem(ctx, PR_1_UNSET_EXTENT_FL, &pctx)) {
++                                      inode->i_flags |= EXT4_EXTENTS_FL;
+ #ifdef WORDS_BIGENDIAN
+-                              memcpy(inode->i_block, tmp_block,
+-                                     sizeof(inode->i_block));
++                                      memcpy(inode->i_block, tmp_block,
++                                             sizeof(inode->i_block));
+ #endif
+-                              e2fsck_write_inode(ctx, ino, inode, "pass1");
++                                      e2fsck_write_inode(ctx, ino, inode, "pass1");
++                              }
+                       }
+               }
+@@ -1022,6 +1040,7 @@ void e2fsck_pass1(e2fsck_t ctx)
+                        * as a special case.
+                        */
+                       if (inode->i_dtime && inode->i_links_count) {
++                              e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
+                               if (fix_problem(ctx, PR_1_ROOT_DTIME, &pctx)) {
+                                       inode->i_dtime = 0;
+                                       e2fsck_write_inode(ctx, ino, inode,
+@@ -1129,6 +1148,7 @@ void e2fsck_pass1(e2fsck_t ctx)
+                *
+                */
+               if (inode->i_dtime) {
++                      e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
+                       if (fix_problem(ctx, PR_1_SET_DTIME, &pctx)) {
+                               inode->i_dtime = 0;
+                               e2fsck_write_inode(ctx, ino, inode, "pass1");
+@@ -1145,18 +1165,19 @@ void e2fsck_pass1(e2fsck_t ctx)
+                       frag = fsize = 0;
+               }
++              /* Fixed in pass2, e2fsck_process_bad_inode(). */
+               if (inode->i_faddr || frag || fsize ||
+                   (LINUX_S_ISDIR(inode->i_mode) && inode->i_dir_acl))
+-                      mark_inode_bad(ctx, ino);
+-              if (!(fs->super->s_feature_incompat & 
++                      e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
++              if (!(fs->super->s_feature_incompat &
+                     EXT4_FEATURE_INCOMPAT_64BIT) &&
+                   inode->osd2.linux2.l_i_file_acl_high != 0)
+-                      mark_inode_bad(ctx, ino);
++                      e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
+               if ((fs->super->s_creator_os == EXT2_OS_LINUX) &&
+                   !(fs->super->s_feature_ro_compat &
+                     EXT4_FEATURE_RO_COMPAT_HUGE_FILE) &&
+                   (inode->osd2.linux2.l_i_blocks_hi != 0))
+-                      mark_inode_bad(ctx, ino);
++                      e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
+               if (inode->i_flags & EXT2_IMAGIC_FL) {
+                       if (imagic_fs) {
+                               if (!ctx->inode_imagic_map)
+@@ -1164,6 +1185,7 @@ void e2fsck_pass1(e2fsck_t ctx)
+                               ext2fs_mark_inode_bitmap2(ctx->inode_imagic_map,
+                                                        ino);
+                       } else {
++                              e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
+                               if (fix_problem(ctx, PR_1_SET_IMAGIC, &pctx)) {
+                                       inode->i_flags &= ~EXT2_IMAGIC_FL;
+                                       e2fsck_write_inode(ctx, ino,
+@@ -1224,8 +1246,20 @@ void e2fsck_pass1(e2fsck_t ctx)
+                       check_immutable(ctx, &pctx);
+                       check_size(ctx, &pctx);
+                       ctx->fs_sockets_count++;
+-              } else
+-                      mark_inode_bad(ctx, ino);
++              } else {
++                      e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
++              }
++
++              if (EXT4_XTIME_FUTURE(ctx, sb, inode->i_atime,ctx->time_fudge)||
++                  EXT4_XTIME_FUTURE(ctx, sb, inode->i_mtime,ctx->time_fudge))
++                      e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
++
++              if (EXT4_XTIME_FUTURE(ctx, sb, inode->i_ctime,ctx->time_fudge)||
++                  EXT4_XTIME_ANCIENT(ctx, sb, inode->i_ctime,ctx->time_fudge))
++                      e2fsck_mark_inode_bad(ctx, ino, BADNESS_HIGH);
++
++              /* i_crtime is checked in check_inode_extra_space() */
++
+               if (!(inode->i_flags & EXT4_EXTENTS_FL)) {
+                       if (inode->i_block[EXT2_IND_BLOCK])
+                               ctx->fs_ind_count++;
+@@ -1444,26 +1478,31 @@ static EXT2_QSORT_TYPE process_inode_cmp
+ }
+ /*
+- * Mark an inode as being bad in some what
++ * Mark an inode as being bad and increment its badness counter.
+  */
+-static void mark_inode_bad(e2fsck_t ctx, ino_t ino)
++void e2fsck_mark_inode_bad_loc(e2fsck_t ctx, ino_t ino, int count,
++                             const char *func, const int line)
+ {
+       struct          problem_context pctx;
++      __u16           result;
+-      if (!ctx->inode_bad_map) {
++      if (!ctx->inode_badness) {
+               clear_problem_context(&pctx);
+-              pctx.errcode = ext2fs_allocate_inode_bitmap(ctx->fs,
+-                          _("bad inode map"), &ctx->inode_bad_map);
++              pctx.errcode = ext2fs_create_icount2(ctx->fs, 0, 0, NULL,
++                                                   &ctx->inode_badness);
+               if (pctx.errcode) {
+-                      pctx.num = 3;
+-                      fix_problem(ctx, PR_1_ALLOCATE_IBITMAP_ERROR, &pctx);
+-                      /* Should never get here */
++                      fix_problem(ctx, PR_1_ALLOCATE_ICOUNT, &pctx);
+                       ctx->flags |= E2F_FLAG_ABORT;
+                       return;
+               }
+       }
+-      ext2fs_mark_inode_bitmap2(ctx->inode_bad_map, ino);
++      ext2fs_icount_fetch(ctx->inode_badness, ino, &result);
++      ext2fs_icount_store(ctx->inode_badness, ino, count + result);
++
++      if (ctx->options & E2F_OPT_DEBUG)
++              fprintf(stderr, "%s:%d: increase inode %lu badness %u to %u\n",
++                      func, line, (unsigned long)ino, result, count + result);
+ }
+@@ -1622,7 +1661,8 @@ static int check_ext_attr(e2fsck_t ctx, 
+       if (!(fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_EXT_ATTR) ||
+           (blk < fs->super->s_first_data_block) ||
+           (blk >= ext2fs_blocks_count(fs->super))) {
+-              mark_inode_bad(ctx, ino);
++              /* Fixed in pass2, e2fsck_process_bad_inode(). */
++              e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
+               return 0;
+       }
+@@ -1788,9 +1828,11 @@ static int handle_htree(e2fsck_t ctx, st
+       if ((!LINUX_S_ISDIR(inode->i_mode) &&
+            fix_problem(ctx, PR_1_HTREE_NODIR, pctx)) ||
+-          (!(fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_DIR_INDEX) &&
+-           fix_problem(ctx, PR_1_HTREE_SET, pctx)))
+-              return 1;
++          (!(fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_DIR_INDEX))) {
++              e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
++              if (fix_problem(ctx, PR_1_HTREE_SET, pctx))
++                      return 1;
++      }
+       pctx->errcode = ext2fs_bmap2(fs, ino, inode, 0, 0, 0, 0, &blk);
+@@ -1798,6 +1840,7 @@ static int handle_htree(e2fsck_t ctx, st
+           (blk == 0) ||
+           (blk < fs->super->s_first_data_block) ||
+           (blk >= ext2fs_blocks_count(fs->super))) {
++              e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
+               if (fix_problem(ctx, PR_1_HTREE_BADROOT, pctx))
+                       return 1;
+               else
+@@ -1805,8 +1848,11 @@ static int handle_htree(e2fsck_t ctx, st
+       }
+       retval = io_channel_read_blk64(fs->io, blk, 1, block_buf);
+-      if (retval && fix_problem(ctx, PR_1_HTREE_BADROOT, pctx))
+-              return 1;
++      if (retval) {
++              e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
++              if (fix_problem(ctx, PR_1_HTREE_BADROOT, pctx))
++                      return 1;
++      }
+       /* XXX should check that beginning matches a directory */
+       root = (struct ext2_dx_root_info *) (block_buf + 24);
+@@ -1847,8 +1893,8 @@ void e2fsck_clear_inode(e2fsck_t ctx, ex
+       ext2fs_unmark_inode_bitmap2(ctx->inode_used_map, ino);
+       if (ctx->inode_reg_map)
+               ext2fs_unmark_inode_bitmap2(ctx->inode_reg_map, ino);
+-      if (ctx->inode_bad_map)
+-              ext2fs_unmark_inode_bitmap2(ctx->inode_bad_map, ino);
++      if (ctx->inode_badness)
++              ext2fs_icount_store(ctx->inode_badness, ino, 0); 
+       /*
+        * If the inode was partially accounted for before processing
+@@ -1923,6 +1969,11 @@ static void scan_extent_node(e2fsck_t ct
+                       problem = PR_1_EXTENT_ENDS_BEYOND;
+               if (problem) {
++                      /* To ensure that extent is in inode */
++                      if (info.curr_level == 0)
++                              e2fsck_mark_inode_bad(ctx, pctx->ino,
++                                                    BADNESS_HIGH);
++
+               report_problem:
+                       pctx->blk = extent.e_pblk;
+                       pctx->blk2 = extent.e_lblk;
+@@ -2115,6 +2166,7 @@ static void check_blocks(e2fsck_t ctx, s
+                   EXT2_FEATURE_INCOMPAT_COMPRESSION)
+                       pb.compressed = 1;
+               else {
++                      e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
+                       if (fix_problem(ctx, PR_1_COMPR_SET, pctx)) {
+                               inode->i_flags &= ~EXT2_COMPRBLK_FL;
+                               dirty_inode++;
+@@ -2169,6 +2221,11 @@ static void check_blocks(e2fsck_t ctx, s
+       }
+       if (!pb.num_blocks && pb.is_dir) {
++              /*
++               * The mode might be in-correct. Increasing the badness by
++               * small amount won't hurt much.
++               */
++              e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
+               if (fix_problem(ctx, PR_1_ZERO_LENGTH_DIR, pctx)) {
+                       e2fsck_clear_inode(ctx, ino, inode, 0, "check_blocks");
+                       ctx->fs_directory_count--;
+@@ -2234,6 +2291,7 @@ static void check_blocks(e2fsck_t ctx, s
+       if (bad_size && !LINUX_S_ISLNK(inode->i_mode)) {
+               pctx->num = (pb.last_block+1) * fs->blocksize;
+               pctx->group = bad_size;
++              e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
+               if (fix_problem(ctx, PR_1_BAD_I_SIZE, pctx)) {
+                       inode->i_size = pctx->num;
+                       if (!LINUX_S_ISDIR(inode->i_mode))
+@@ -2250,6 +2308,7 @@ static void check_blocks(e2fsck_t ctx, s
+            (inode->i_flags & EXT4_HUGE_FILE_FL) &&
+            (inode->osd2.linux2.l_i_blocks_hi != 0))) {
+               pctx->num = pb.num_blocks;
++              e2fsck_mark_inode_bad(ctx, ino, BADNESS_NORMAL);
+               if (fix_problem(ctx, PR_1_BAD_I_BLOCKS, pctx)) {
+                       inode->i_blocks = pb.num_blocks;
+                       inode->osd2.linux2.l_i_blocks_hi = pb.num_blocks >> 32;
+@@ -2406,8 +2465,10 @@ static int process_block(ext2_filsys fs,
+               problem = PR_1_TOOBIG_SYMLINK;
+       if (blk < fs->super->s_first_data_block ||
+-          blk >= ext2fs_blocks_count(fs->super))
++          blk >= ext2fs_blocks_count(fs->super)) {
+               problem = PR_1_ILLEGAL_BLOCK_NUM;
++              e2fsck_mark_inode_bad(ctx, pctx->ino, BADNESS_NORMAL);
++      }
+       if (problem) {
+               p->num_illegal_blocks++;
+Index: e2fsprogs/e2fsck/pass1b.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1b.c
++++ e2fsprogs/e2fsck/pass1b.c
+@@ -629,8 +629,8 @@ static void delete_file(e2fsck_t ctx, ex
+                                                    block_buf, delete_file_block, &pb);
+       if (pctx.errcode)
+               fix_problem(ctx, PR_1B_BLOCK_ITERATE, &pctx);
+-      if (ctx->inode_bad_map)
+-              ext2fs_unmark_inode_bitmap2(ctx->inode_bad_map, ino);
++      if (ctx->inode_badness)
++              e2fsck_mark_inode_bad(ctx, ino, 0);
+       ext2fs_inode_alloc_stats2(fs, ino, -1, LINUX_S_ISDIR(inode.i_mode));
+       /* Inode may have changed by block_iterate, so reread it */
+Index: e2fsprogs/e2fsck/pass2.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass2.c
++++ e2fsprogs/e2fsck/pass2.c
+@@ -33,11 +33,10 @@
+  * Pass 2 relies on the following information from previous passes:
+  *    - The directory information collected in pass 1.
+  *    - The inode_used_map bitmap
+- *    - The inode_bad_map bitmap
++ *    - The inode_badness bitmap
+  *    - The inode_dir_map bitmap
+  *
+  * Pass 2 frees the following data structures
+- *    - The inode_bad_map bitmap
+  *    - The inode_reg_map bitmap
+  */
+@@ -248,10 +247,6 @@ void e2fsck_pass2(e2fsck_t ctx)
+       ext2fs_free_mem(&buf);
+       ext2fs_free_dblist(fs->dblist);
+-      if (ctx->inode_bad_map) {
+-              ext2fs_free_inode_bitmap(ctx->inode_bad_map);
+-              ctx->inode_bad_map = 0;
+-      }
+       if (ctx->inode_reg_map) {
+               ext2fs_free_inode_bitmap(ctx->inode_reg_map);
+               ctx->inode_reg_map = 0;
+@@ -479,6 +474,7 @@ static _INLINE_ int check_filetype(e2fsc
+ {
+       int     filetype = dirent->name_len >> 8;
+       int     should_be = EXT2_FT_UNKNOWN;
++      __u16   result;
+       struct ext2_inode       inode;
+       if (!(ctx->fs->super->s_feature_incompat &
+@@ -490,16 +486,18 @@ static _INLINE_ int check_filetype(e2fsc
+               return 1;
+       }
++      if (ctx->inode_badness)
++              ext2fs_icount_fetch(ctx->inode_badness, dirent->inode,
++                                      &result);
++
+       if (ext2fs_test_inode_bitmap2(ctx->inode_dir_map, dirent->inode)) {
+               should_be = EXT2_FT_DIR;
+       } else if (ext2fs_test_inode_bitmap2(ctx->inode_reg_map,
+                                           dirent->inode)) {
+               should_be = EXT2_FT_REG_FILE;
+-      } else if (ctx->inode_bad_map &&
+-                 ext2fs_test_inode_bitmap2(ctx->inode_bad_map,
+-                                          dirent->inode))
++      } else if (ctx->inode_badness && result >= BADNESS_BAD_MODE) {
+               should_be = 0;
+-      else {
++      } else {
+               e2fsck_read_inode(ctx, dirent->inode, &inode,
+                                 "check_filetype");
+               should_be = ext2_file_type(inode.i_mode);
+@@ -954,12 +952,10 @@ out_htree:
+                * (We wait until now so that we can display the
+                * pathname to the user.)
+                */
+-              if (ctx->inode_bad_map &&
+-                  ext2fs_test_inode_bitmap2(ctx->inode_bad_map,
+-                                           dirent->inode)) {
+-                      if (e2fsck_process_bad_inode(ctx, ino,
+-                                                   dirent->inode,
+-                                                   buf + fs->blocksize)) {
++              if (ctx->inode_badness &&
++                  ext2fs_icount_is_set(ctx->inode_badness, dirent->inode)) {
++                        if (e2fsck_process_bad_inode(ctx, ino, dirent->inode,
++                                                     buf + fs->blocksize)) {
+                               dirent->inode = 0;
+                               dir_modified++;
+                               goto next;
+@@ -1181,9 +1177,17 @@ static void deallocate_inode(e2fsck_t ct
+       struct ext2_inode       inode;
+       struct problem_context  pctx;
+       __u32                   count;
++      int extent_fs = 0;
+       e2fsck_read_inode(ctx, ino, &inode, "deallocate_inode");
++      /* ext2fs_block_iterate2() depends on the extents flags */
++      if (inode.i_flags & EXT4_EXTENTS_FL)
++              extent_fs = 1;
+       e2fsck_clear_inode(ctx, ino, &inode, 0, "deallocate_inode");
++      if (extent_fs) {
++              inode.i_flags |= EXT4_EXTENTS_FL;
++              e2fsck_write_inode(ctx, ino, &inode, "deallocate_inode");
++      }
+       clear_problem_context(&pctx);
+       pctx.ino = ino;
+@@ -1210,6 +1214,8 @@ static void deallocate_inode(e2fsck_t ct
+               if (count == 0) {
+                       ext2fs_unmark_block_bitmap2(ctx->block_found_map,
+                                               ext2fs_file_acl_block(&inode));
++              if (ctx->inode_badness)
++                      ext2fs_icount_store(ctx->inode_badness, ino, 0);
+                       ext2fs_block_alloc_stats2(fs,
+                                               ext2fs_file_acl_block(&inode),
+                                               -1);
+@@ -1256,8 +1262,11 @@ extern int e2fsck_process_bad_inode(e2fs
+       int                     not_fixed = 0;
+       unsigned char           *frag, *fsize;
+       struct problem_context  pctx;
+-      int     problem = 0;
++      int                     problem = 0;
++      __u16                   badness;
++      if (ctx->inode_badness)
++              ext2fs_icount_fetch(ctx->inode_badness, ino, &badness);
+       e2fsck_read_inode(ctx, ino, &inode, "process_bad_inode");
+       clear_problem_context(&pctx);
+@@ -1272,6 +1281,7 @@ extern int e2fsck_process_bad_inode(e2fs
+                       inode_modified++;
+               } else
+                       not_fixed++;
++              badness += BADNESS_NORMAL;
+       }
+       if (!LINUX_S_ISDIR(inode.i_mode) && !LINUX_S_ISREG(inode.i_mode) &&
+@@ -1305,6 +1315,11 @@ extern int e2fsck_process_bad_inode(e2fs
+               } else
+                       not_fixed++;
+               problem = 0;
++              /*
++               * A high value is associated with bad mode in order to detect
++               * that mode was corrupt in check_filetype()
++               */
++              badness += BADNESS_BAD_MODE;
+       }
+       if (inode.i_faddr) {
+@@ -1313,6 +1328,7 @@ extern int e2fsck_process_bad_inode(e2fs
+                       inode_modified++;
+               } else
+                       not_fixed++;
++              badness += BADNESS_NORMAL;
+       }
+       switch (fs->super->s_creator_os) {
+@@ -1330,6 +1346,7 @@ extern int e2fsck_process_bad_inode(e2fs
+                       inode_modified++;
+               } else
+                       not_fixed++;
++              badness += BADNESS_NORMAL;
+               pctx.num = 0;
+       }
+       if (fsize && *fsize) {
+@@ -1339,9 +1356,26 @@ extern int e2fsck_process_bad_inode(e2fs
+                       inode_modified++;
+               } else
+                       not_fixed++;
++              badness += BADNESS_NORMAL;
+               pctx.num = 0;
+       }
++      /* In pass1 these conditions were used to mark inode bad so that
++       * it calls e2fsck_process_bad_inode and make an extensive check
++       * plus prompt for action to be taken. To compensate for badness
++       * incremented in pass1 by this condition, decrease it.
++       */
++      if ((inode.i_faddr || frag || fsize ||
++           (LINUX_S_ISDIR(inode.i_mode) && inode.i_dir_acl)) ||
++          (inode.i_file_acl &&
++           (!(fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_EXT_ATTR) ||
++            (inode.i_file_acl < fs->super->s_first_data_block) ||
++            (inode.i_file_acl >= fs->super->s_blocks_count)))) {
++              /* badness can be 0 if called from pass4. */
++              if (badness)
++                      badness -= BADNESS_NORMAL;
++      }
++
+       if ((fs->super->s_creator_os == EXT2_OS_LINUX) &&
+           !(fs->super->s_feature_ro_compat &
+             EXT4_FEATURE_RO_COMPAT_HUGE_FILE) &&
+@@ -1351,6 +1385,8 @@ extern int e2fsck_process_bad_inode(e2fs
+                       inode.osd2.linux2.l_i_blocks_hi = 0;
+                       inode_modified++;
+               }
++              /* Badness was increased in pass1 for this condition */
++              /* badness += BADNESS_NORMAL; */
+       }
+       if (!(fs->super->s_feature_incompat & 
+@@ -1362,6 +1398,7 @@ extern int e2fsck_process_bad_inode(e2fs
+                       inode_modified++;
+               } else
+                       not_fixed++;
++              badness += BADNESS_NORMAL;
+       }
+       if (ext2fs_file_acl_block(&inode) &&
+@@ -1372,6 +1409,7 @@ extern int e2fsck_process_bad_inode(e2fs
+                       inode_modified++;
+               } else
+                       not_fixed++;
++              badness += BADNESS_NORMAL;
+       }
+       if (inode.i_dir_acl &&
+           LINUX_S_ISDIR(inode.i_mode)) {
+@@ -1380,12 +1418,29 @@ extern int e2fsck_process_bad_inode(e2fs
+                       inode_modified++;
+               } else
+                       not_fixed++;
++              badness += BADNESS_NORMAL;
++      }
++
++      /*
++       * The high value due to BADNESS_BAD_MODE should not delete the inode.
++       */
++      if (ctx->inode_badness &&
++          (badness - ((badness >= BADNESS_BAD_MODE) ? BADNESS_BAD_MODE : 0))>=
++                      ctx->inode_badness_threshold) {
++              pctx.num = badness;
++              if (fix_problem(ctx, PR_2_INODE_TOOBAD, &pctx)) {
++                      deallocate_inode(ctx, ino, 0);
++                      if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
++                              return 0;
++                      return 1;
++              }
++              not_fixed++;
+       }
+       if (inode_modified)
+               e2fsck_write_inode(ctx, ino, &inode, "process_bad_inode");
+-      if (!not_fixed && ctx->inode_bad_map)
+-              ext2fs_unmark_inode_bitmap2(ctx->inode_bad_map, ino);
++      if (ctx->inode_badness)
++              ext2fs_icount_store(ctx->inode_badness, ino, 0);
+       return 0;
+ }
+Index: e2fsprogs/e2fsck/pass4.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass4.c
++++ e2fsprogs/e2fsck/pass4.c
+@@ -181,6 +181,7 @@ void e2fsck_pass4(e2fsck_t ctx)
+       }
+       ext2fs_free_icount(ctx->inode_link_info); ctx->inode_link_info = 0;
+       ext2fs_free_icount(ctx->inode_count); ctx->inode_count = 0;
++      ext2fs_free_icount(ctx->inode_badness); ctx->inode_badness = 0;
+       ext2fs_free_inode_bitmap(ctx->inode_bb_map);
+       ctx->inode_bb_map = 0;
+       ext2fs_free_inode_bitmap(ctx->inode_imagic_map);
+Index: e2fsprogs/e2fsck/problem.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.c
++++ e2fsprogs/e2fsck/problem.c
+@@ -923,6 +923,11 @@ static struct e2fsck_problem problem_tab
+         N_("@i %i has extent header with incorrect eh_depth\n"),
+         PROMPT_FIX, 0 },
++      /* invalid inode creation time */
++      { PR_1_CRTIME_BAD,
++        N_("@i %i creation time (%t) invalid.\n"),
++        PROMPT_CLEAR, PR_PREEN_OK | PR_NO_OK },
++
+       /* expand inode */
+       { PR_1_EXPAND_EISIZE_WARNING,
+         N_("\ne2fsck is being run with \"expand_extra_isize\" option or\n"
+@@ -1386,6 +1391,11 @@ static struct e2fsck_problem problem_tab
+         N_("i_file_acl_hi @F %N, @s zero.\n"),
+         PROMPT_CLEAR, PR_PREEN_OK },
++      /* Inode too bad */
++      { PR_2_INODE_TOOBAD,
++        N_("@i %i is badly corrupt (badness value = %N).  "),
++        PROMPT_CLEAR, PR_PREEN_OK },
++
+       /* Pass 3 errors */
+       /* Pass 3: Checking directory connectivity */
+Index: e2fsprogs/e2fsck/problem.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.h
++++ e2fsprogs/e2fsck/problem.h
+@@ -543,6 +543,9 @@ struct problem_context {
+ /* eh_depth for in-inode header is bad */
+ #define PR_1_EXTENT_EH_DEPTH_BAD      0x010064
++/* invalid inode creation time */
++#define PR_1_CRTIME_BAD       0x010067
++
+ /* Warning for user that all inodes need to be expanded atleast by
+  * s_min_extra_isize
+  */
+@@ -834,6 +837,9 @@ struct problem_context {
+ /* i_file_acl_hi should be zero */
+ #define PR_2_I_FILE_ACL_HI_ZERO               0x020048
++/* Inode completely corrupt */
++#define PR_2_INODE_TOOBAD             0x020049
++
+ /*
+  * Pass 3 errors
+  */
+Index: e2fsprogs/e2fsck/super.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/super.c
++++ e2fsprogs/e2fsck/super.c
+@@ -834,8 +834,7 @@ void check_super_block(e2fsck_t ctx)
+        * write time is in the future.
+        */
+       if (!broken_system_clock &&
+-          !(ctx->flags & E2F_FLAG_TIME_INSANE) &&
+-          fs->super->s_mtime > (__u32) ctx->now) {
++          EXT4_XTIME_FUTURE(ctx, fs->super, fs->super->s_mtime, 0)) {
+               pctx.num = fs->super->s_mtime;
+               problem = PR_0_FUTURE_SB_LAST_MOUNT;
+               if (fs->super->s_mtime <= (__u32) ctx->now + ctx->time_fudge)
+@@ -846,8 +845,7 @@ void check_super_block(e2fsck_t ctx)
+               }
+       }
+       if (!broken_system_clock &&
+-          !(ctx->flags & E2F_FLAG_TIME_INSANE) &&
+-          fs->super->s_wtime > (__u32) ctx->now) {
++          EXT4_XTIME_FUTURE(ctx, fs->super, fs->super->s_wtime, 0)) {
+               pctx.num = fs->super->s_wtime;
+               problem = PR_0_FUTURE_SB_LAST_WRITE;
+               if (fs->super->s_wtime <= (__u32) ctx->now + ctx->time_fudge)
+Index: e2fsprogs/lib/ext2fs/icount.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/icount.c
++++ e2fsprogs/lib/ext2fs/icount.c
+@@ -467,6 +467,23 @@ static errcode_t get_inode_count(ext2_ic
+       return 0;
+ }
++int ext2fs_icount_is_set(ext2_icount_t icount, ext2_ino_t ino)
++{
++      __u16 result;
++
++      if (ext2fs_test_inode_bitmap2(icount->single, ino))
++              return 1;
++      else if (icount->multiple) {
++              if (ext2fs_test_inode_bitmap2(icount->multiple, ino))
++                      return 1;
++              return 0;
++      }
++      ext2fs_icount_fetch(icount, ino, &result);
++      if (result)
++              return 1;
++      return 0;
++}
++
+ errcode_t ext2fs_icount_validate(ext2_icount_t icount, FILE *out)
+ {
+       errcode_t       ret = 0;
+Index: e2fsprogs/e2fsck/unix.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/unix.c
++++ e2fsprogs/e2fsck/unix.c
+@@ -676,6 +676,18 @@ static void parse_extended_opts(e2fsck_t
+                               extended_usage++;
+                               continue;
+                       }
++              /* -E inode_badness_threshold=<value> */
++              } else if (strcmp(token, "inode_badness_threshold") == 0) {
++                      if (!arg) {
++                              extended_usage++;
++                              continue;
++                      }
++                      ctx->inode_badness_threshold = strtoul(arg, &p, 0);
++                      if (*p != '\0' || (ctx->inode_badness_threshold > 200)){
++                              fprintf(stderr, _("Invalid badness value.\n"));
++                              extended_usage++;
++                              continue;
++                      }
+               } else if (strcmp(token, "journal_only") == 0) {
+                       if (arg) {
+                               extended_usage++;
+@@ -709,6 +721,7 @@ static void parse_extended_opts(e2fsck_t
+               fputs(("\tshared=<preserve|lost+found|delete>\n"), stderr);
+               fputs(("\tclone=<dup|zero>\n"), stderr);
+               fputs(("\texpand_extra_isize\n"), stderr);
++              fputs(("\tinode_badness_threhold=(value)\n"), stderr);
+               fputc('\n', stderr);
+               exit(1);
+       }
+@@ -774,6 +787,8 @@ static errcode_t PRS(int argc, char *arg
+       initialize_profile_options(ctx);
++      ctx->inode_badness_threshold = BADNESS_THRESHOLD;
++
+       while ((c = getopt (argc, argv, "panyrcC:B:dE:fvtFVM:b:I:j:P:l:L:N:SsDk")) != EOF)
+               switch (c) {
+               case 'C':
+Index: e2fsprogs/e2fsck/e2fsck.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.c
++++ e2fsprogs/e2fsck/e2fsck.c
+@@ -111,10 +111,6 @@ errcode_t e2fsck_reset_context(e2fsck_t 
+               ext2fs_free_inode_bitmap(ctx->inode_bb_map);
+               ctx->inode_bb_map = 0;
+       }
+-      if (ctx->inode_bad_map) {
+-              ext2fs_free_inode_bitmap(ctx->inode_bad_map);
+-              ctx->inode_bad_map = 0;
+-      }
+       if (ctx->inode_imagic_map) {
+               ext2fs_free_inode_bitmap(ctx->inode_imagic_map);
+               ctx->inode_imagic_map = 0;
+Index: e2fsprogs/e2fsck/e2fsck.8.in
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.8.in
++++ e2fsprogs/e2fsck/e2fsck.8.in
+@@ -203,6 +203,15 @@ be 1 or 2.  The default extended attribu
+ Only replay the journal if required, but do not perform any further checks
+ or repairs.
+ .TP
++.BI inode_badness_threshold= threshold_value
++A badness counter is associated with every inode, which determines the degree
++of inode corruption. Each error found in the inode will increase the badness by
++1 or 2, and inodes with a badness at or above
++.I threshold_value
++will be prompted for deletion. The default
++.I threshold_value
++is 7.
++.TP
+ .BI fragcheck
+ During pass 1, print a detailed report of any discontiguous blocks for
+ files in the filesystem.
+Index: e2fsprogs/lib/ext2fs/ext2fs.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2fs.h
++++ e2fsprogs/lib/ext2fs/ext2fs.h
+@@ -1163,6 +1163,7 @@ extern errcode_t ext2fs_initialize(const
+ /* icount.c */
+ extern void ext2fs_free_icount(ext2_icount_t icount);
++extern int ext2fs_icount_is_set(ext2_icount_t icount, ext2_ino_t ino);
+ extern errcode_t ext2fs_create_icount_tdb(ext2_filsys fs, char *tdb_dir,
+                                         int flags, ext2_icount_t *ret);
+ extern errcode_t ext2fs_create_icount2(ext2_filsys fs, int flags,
+Index: e2fsprogs/tests/f_messy_inode/expect.1
+===================================================================
+--- e2fsprogs.orig/tests/f_messy_inode/expect.1
++++ e2fsprogs/tests/f_messy_inode/expect.1
+@@ -20,19 +20,21 @@ Pass 2: Checking directory structure
+ i_file_acl for inode 14 (/MAKEDEV) is 4294901760, should be zero.
+ Clear? yes
++Inode 14 is badly corrupt (badness value = 13).  Clear? yes
++
+ Pass 3: Checking directory connectivity
+ Pass 4: Checking reference counts
+ Pass 5: Checking group summary information
+ Block bitmap differences:  -(43--49)
+ Fix? yes
+-Free blocks count wrong for group #0 (68, counted=75).
++Free blocks count wrong for group #0 (70, counted=77).
+ Fix? yes
+-Free blocks count wrong (68, counted=75).
++Free blocks count wrong (70, counted=77).
+ Fix? yes
+ test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+-test_filesys: 29/32 files (3.4% non-contiguous), 25/100 blocks
++test_filesys: 28/32 files (3.6% non-contiguous), 23/100 blocks
+ Exit status is 1
+Index: e2fsprogs/tests/f_messy_inode/expect.2
+===================================================================
+--- e2fsprogs.orig/tests/f_messy_inode/expect.2
++++ e2fsprogs/tests/f_messy_inode/expect.2
+@@ -3,5 +3,5 @@ Pass 2: Checking directory structure
+ Pass 3: Checking directory connectivity
+ Pass 4: Checking reference counts
+ Pass 5: Checking group summary information
+-test_filesys: 29/32 files (0.0% non-contiguous), 25/100 blocks
++test_filesys: 28/32 files (0.0% non-contiguous), 23/100 blocks
+ Exit status is 0
diff --git a/patches/e2fsprogs-large-ea.patch b/patches/e2fsprogs-large-ea.patch
new file mode 100644 (file)
index 0000000..e3ad594
--- /dev/null
@@ -0,0 +1,604 @@
+Index: e2fsprogs/e2fsck/e2fsck.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.h
++++ e2fsprogs/e2fsck/e2fsck.h
+@@ -263,6 +263,7 @@ struct e2fsck_struct {
+       ext2fs_inode_bitmap inode_bb_map; /* Inodes which are in bad blocks */
+       ext2fs_inode_bitmap inode_imagic_map; /* AFS inodes */
+       ext2fs_inode_bitmap inode_reg_map; /* Inodes which are regular files*/
++      ext2fs_inode_bitmap inode_ea_map; /* EA inodes which are non-orphan */
+       ext2fs_block_bitmap block_found_map; /* Blocks which are in use */
+       ext2fs_block_bitmap block_dup_map; /* Blks referenced more than once */
+Index: e2fsprogs/e2fsck/pass1.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1.c
++++ e2fsprogs/e2fsck/pass1.c
+@@ -28,6 +28,7 @@
+  *    - A bitmap of which blocks are in use.          (block_found_map)
+  *    - A bitmap of which blocks are in use by two inodes     (block_dup_map)
+  *    - The data blocks of the directory inodes.      (dir_map)
++ *    - A bitmap of EA inodes.                        (inode_ea_map)
+  *
+  * Pass 1 is designed to stash away enough information so that the
+  * other passes should not need to read in the inode information
+@@ -270,6 +271,118 @@ static void check_size(e2fsck_t ctx, str
+       e2fsck_write_inode(ctx, pctx->ino, pctx->inode, "pass1");
+ }
++static void e2fsck_block_alloc_stats(ext2_filsys fs, blk64_t blk, int inuse)
++{
++      e2fsck_t ctx = (e2fsck_t) fs->priv_data;
++
++      if (ctx->block_found_map) {
++              if (inuse > 0)
++                      ext2fs_mark_block_bitmap2(ctx->block_found_map, blk);
++              else
++                      ext2fs_unmark_block_bitmap2(ctx->block_found_map, blk);
++      }
++}
++
++static void mark_inode_ea_map(e2fsck_t ctx, struct problem_context *pctx,
++                            ext2_ino_t ino)
++{
++      if (!ctx->inode_ea_map) {
++              pctx->errcode = ext2fs_allocate_inode_bitmap(ctx->fs,
++                                       _("EA inode map"),
++                                       &ctx->inode_ea_map);
++              if (pctx->errcode) {
++                      fix_problem(ctx, PR_1_ALLOCATE_IBITMAP_ERROR,
++                                  pctx);
++                      exit(1);
++              }
++      }
++
++      ext2fs_mark_inode_bitmap2(ctx->inode_ea_map, ino);
++}
++
++/*
++ * Delete an EA entry. If this is the last entry to be deleted, then i_file_acl
++ * must have been freed, so we must update e2fsck block statistics and set
++ * i_file_acl_deleted.
++ * When we delete the entry successfully, this function returns 0, else
++ * non-zero value.
++ */
++
++static int e2fsck_ea_entry_delete(e2fsck_t ctx, struct ext2_ext_attr_entry *entry,
++                                struct problem_context *pctx,
++                                int *i_file_acl_deleted, problem_t prob)
++{
++      blk_t i_file_acl = pctx->inode->i_file_acl;
++      int err = 1;
++
++      pctx->num = entry->e_value_inum;
++
++      if (fix_problem(ctx, prob, pctx)) {
++              /* Delete corrupt EA entry */
++              err = ext2fs_attr_set(ctx->fs, pctx->ino, pctx->inode,
++                                    entry->e_name_index, entry->e_name,
++                                    0, 0, 0);
++              if (err == 0) {
++                      if (i_file_acl && pctx->inode->i_file_acl == 0) {
++                              e2fsck_block_alloc_stats(ctx->fs, i_file_acl, -1);
++                              *i_file_acl_deleted = 1;
++                      }
++                      return 0;
++              }
++      }
++
++      return err;
++}
++
++/*
++ * Check validity of EA inode. Return 0 if EA inode is valid, nonzero otherwise.
++ */
++static int check_large_ea_inode(e2fsck_t ctx, struct ext2_ext_attr_entry *entry,
++                              struct problem_context *pctx,
++                              int *i_file_acl_deleted)
++{
++      struct ext2_inode inode;
++      int ret = 0;
++
++      /* Check if inode is within valid range */
++      if ((entry->e_value_inum < EXT2_FIRST_INODE(ctx->fs->super)) ||
++          (entry->e_value_inum > ctx->fs->super->s_inodes_count)) {
++              ret = e2fsck_ea_entry_delete(ctx, entry, pctx,
++                                           i_file_acl_deleted,
++                                           PR_1_ATTR_VALUE_EA_INODE);
++              /* If user refuses to delete this entry, caller may try to set
++               * the bit for this out-of-bound inode in inode_ea_map, so
++               * always return failure */
++              return 1;
++      }
++
++      e2fsck_read_inode(ctx, entry->e_value_inum, &inode, "pass1");
++      if (!(inode.i_flags & EXT4_EA_INODE_FL)) {
++              /* If EXT4_EA_INODE_FL flag is not present but back-pointer
++               * matches then we should set this flag */
++              if (inode.i_mtime == pctx->ino &&
++                  inode.i_generation == pctx->inode->i_generation &&
++                  fix_problem(ctx, PR_1_ATTR_SET_EA_INODE_FL, pctx)) {
++                      inode.i_flags |= EXT4_EA_INODE_FL;
++                      ext2fs_write_inode(ctx->fs, entry->e_value_inum, &inode);
++              } else {
++                      ret = e2fsck_ea_entry_delete(ctx, entry, pctx,
++                                                   i_file_acl_deleted,
++                                                   PR_1_ATTR_NO_EA_INODE_FL);
++                      goto out;
++              }
++      } else if (inode.i_mtime != pctx->ino ||
++                 inode.i_generation != pctx->inode->i_generation) {
++              ret = e2fsck_ea_entry_delete(ctx, entry, pctx,
++                                           i_file_acl_deleted,
++                                           PR_1_ATTR_INVAL_EA_INODE);
++              goto out;
++      }
++
++out:
++      return ret;
++}
++
+ static void check_ea_in_inode(e2fsck_t ctx, struct problem_context *pctx)
+ {
+       struct ext2_super_block *sb = ctx->fs->super;
+@@ -307,18 +420,25 @@ static void check_ea_in_inode(e2fsck_t c
+               /* attribute len eats this space */
+               remain -= EXT2_EXT_ATTR_SIZE(entry->e_name_len);
+-              /* check value size */
+-              if (entry->e_value_size == 0 || entry->e_value_size > remain) {
++              if (entry->e_value_size == 0) {
+                       pctx->num = entry->e_value_size;
+                       problem = PR_1_ATTR_VALUE_SIZE;
+                       goto fix;
+               }
+-              /* e_value_block must be 0 in inode's ea */
+-              if (entry->e_value_block != 0) {
+-                      pctx->num = entry->e_value_block;
+-                      problem = PR_1_ATTR_VALUE_BLOCK;
+-                      goto fix;
++              if (entry->e_value_inum == 0) {
++                      /* check value size */
++                      if (entry->e_value_size > remain) {
++                              pctx->num = entry->e_value_size;
++                              problem = PR_1_ATTR_VALUE_SIZE;
++                              goto fix;
++                      }
++              } else {
++                      int ret, tmp;
++
++                      ret = check_large_ea_inode(ctx, entry, pctx, &tmp);
++                      if (ret == 0)
++                              mark_inode_ea_map(ctx, pctx, entry->e_value_inum);
+               }
+               /* Value size cannot be larger than EA space in inode */
+@@ -338,7 +458,10 @@ static void check_ea_in_inode(e2fsck_t c
+                       goto fix;
+               }
+-              remain -= entry->e_value_size;
++              /* If EA value is stored in external inode then it does not
++               * consume space here */
++              if (entry->e_value_inum == 0)
++                      remain -= entry->e_value_size;
+               entry = EXT2_EXT_ATTR_NEXT(entry);
+       }
+@@ -627,7 +750,7 @@ int e2fsck_pass1_delete_attr(e2fsck_t ct
+               if (EXT2_EXT_IS_LAST_ENTRY(entry)) {
+                       if (in_inode) {
+                               entry = entry_blk;
+-                              len = sizeof(entry->e_name);
++                              len = sizeof(entry->e_name);
+                               entry_size = ext2fs_attr_get_next_attr(entry,
+                                                       index, name, len, 1);
+                               in_inode = 0;
+@@ -1657,6 +1780,7 @@ static int check_ext_attr(e2fsck_t ctx, 
+       struct ext2_ext_attr_entry *entry;
+       int             count;
+       region_t        region = 0;
++      int ret;
+       blk = ext2fs_file_acl_block(inode);
+       if (blk == 0)
+@@ -1778,19 +1902,27 @@ static int check_ext_attr(e2fsck_t ctx, 
+                               goto clear_extattr;
+                       break;
+               }
+-              if (entry->e_value_block != 0) {
+-                      if (fix_problem(ctx, PR_1_EA_BAD_VALUE, pctx))
+-                              goto clear_extattr;
+-              }
+-              if (entry->e_value_offs + entry->e_value_size > fs->blocksize) {
+-                      if (fix_problem(ctx, PR_1_EA_BAD_VALUE, pctx))
+-                              goto clear_extattr;
+-                      break;
+-              }
+-              if (entry->e_value_size &&
+-                  region_allocate(region, entry->e_value_offs,
+-                                  EXT2_EXT_ATTR_SIZE(entry->e_value_size))) {
+-                      if (fix_problem(ctx, PR_1_EA_ALLOC_COLLISION, pctx))
++              if (entry->e_value_inum == 0) {
++                      if (entry->e_value_offs + entry->e_value_size > fs->blocksize) {
++                              if (fix_problem(ctx, PR_1_EA_BAD_VALUE, pctx))
++                                      goto clear_extattr;
++                              break;
++                      }
++                      if (entry->e_value_size &&
++                          region_allocate(region, entry->e_value_offs,
++                                          EXT2_EXT_ATTR_SIZE(entry->e_value_size))) {
++                              if (fix_problem(ctx, PR_1_EA_ALLOC_COLLISION, pctx))
++                                      goto clear_extattr;
++                      }
++              } else {
++                      int i_file_acl_deleted = 0;
++
++                      ret = check_large_ea_inode(ctx, entry, pctx,
++                                                 &i_file_acl_deleted);
++                      if (ret == 0)
++                              mark_inode_ea_map(ctx, pctx, entry->e_value_inum);
++
++                      if (i_file_acl_deleted)
+                               goto clear_extattr;
+               }
+@@ -2998,18 +3130,6 @@ static errcode_t e2fsck_get_alloc_block(
+       return (0);
+ }
+-static void e2fsck_block_alloc_stats(ext2_filsys fs, blk64_t blk, int inuse)
+-{
+-      e2fsck_t ctx = (e2fsck_t) fs->priv_data;
+-
+-      if (ctx->block_found_map) {
+-              if (inuse > 0)
+-                      ext2fs_mark_block_bitmap2(ctx->block_found_map, blk);
+-              else
+-                      ext2fs_unmark_block_bitmap2(ctx->block_found_map, blk);
+-      }
+-}
+-
+ void e2fsck_use_inode_shortcuts(e2fsck_t ctx, int bool)
+ {
+       ext2_filsys fs = ctx->fs;
+Index: e2fsprogs/e2fsck/pass4.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass4.c
++++ e2fsprogs/e2fsck/pass4.c
+@@ -11,6 +11,7 @@
+  * Pass 4 frees the following data structures:
+  *    - A bitmap of which inodes are in bad blocks.   (inode_bb_map)
+  *    - A bitmap of which inodes are imagic inodes.   (inode_imagic_map)
++ *    - A bitmap of EA inodes.                        (inode_ea_map)
+  */
+ #include "e2fsck.h"
+@@ -39,6 +40,20 @@ static int disconnect_inode(e2fsck_t ctx
+       } else {
+               e2fsck_read_inode(ctx, i, inode, "pass4: disconnect_inode");
+       }
++
++      if (inode->i_flags & EXT4_EA_INODE_FL) {
++              if (ext2fs_test_inode_bitmap2(ctx->inode_ea_map, i)) {
++                      ext2fs_icount_store(ctx->inode_count, i, 1);
++                      return 0;
++              } else {
++                      /* Zero the link count so that when inode is linked to
++                       * lost+found it has correct link count */
++                      inode->i_links_count = 0;
++                      e2fsck_write_inode(ctx, i, inode, "disconnect_inode");
++                      ext2fs_icount_store(ctx->inode_link_info, i, 0);
++              }
++      }
++
+       clear_problem_context(&pctx);
+       pctx.ino = i;
+       pctx.inode = inode;
+@@ -182,6 +197,8 @@ void e2fsck_pass4(e2fsck_t ctx)
+       ext2fs_free_icount(ctx->inode_link_info); ctx->inode_link_info = 0;
+       ext2fs_free_icount(ctx->inode_count); ctx->inode_count = 0;
+       ext2fs_free_icount(ctx->inode_badness); ctx->inode_badness = 0;
++      ext2fs_free_inode_bitmap(ctx->inode_ea_map);
++      ctx->inode_ea_map = 0;
+       ext2fs_free_inode_bitmap(ctx->inode_bb_map);
+       ctx->inode_bb_map = 0;
+       ext2fs_free_inode_bitmap(ctx->inode_imagic_map);
+Index: e2fsprogs/e2fsck/problem.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.c
++++ e2fsprogs/e2fsck/problem.c
+@@ -969,6 +969,27 @@ static struct e2fsck_problem problem_tab
+            "without deletion of an EA.\n"),
+         PROMPT_FIX, 0 },
++      /* Inode has illegal extended attribute value inode */
++      { PR_1_ATTR_VALUE_EA_INODE,
++        N_("@i %i has @I @a value @i %N.\n"),
++        PROMPT_FIX, PR_PREEN_OK },
++
++      /* Invalid backpointer from extended attribute inode to parent inode */
++      { PR_1_ATTR_INVAL_EA_INODE,
++        N_("@n backpointer from @a @i %N to parent @i %i.\n"),
++        PROMPT_CLEAR, PR_PREEN_OK },
++
++      /* Inode has invalid extended attribute. EA inode missing 
++       * EA_INODE flag. */
++      { PR_1_ATTR_NO_EA_INODE_FL,
++        N_("@i %i has @n @a. EA @i %N missing EA_INODE flag.\n"),
++        PROMPT_CLEAR, PR_PREEN_OK },
++
++      /* EA inode for parent inode missing EA_INODE flag. */
++      { PR_1_ATTR_SET_EA_INODE_FL,
++        N_("EA @i %N for parent @i %i missing EA_INODE flag.\n "),
++        PROMPT_FIX, PR_PREEN_OK },
++
+       /* Pass 1b errors */
+Index: e2fsprogs/e2fsck/problem.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.h
++++ e2fsprogs/e2fsck/problem.h
+@@ -570,6 +570,19 @@ struct problem_context {
+  */
+ #define PR_1_CLEAR_EXTRA_ISIZE                0x01006C
++/* Inode has illegal EA value inode */
++#define PR_1_ATTR_VALUE_EA_INODE      0x01006D
++
++/* Invalid backpointer from EA inode to parent inode */
++#define PR_1_ATTR_INVAL_EA_INODE      0x01006E
++
++/* Parent inode has invalid EA entry. EA inode does not have
++ * EXT4_EA_INODE_FL flag. Delete EA entry? */
++#define PR_1_ATTR_NO_EA_INODE_FL      0x01006F
++
++/* EA inode for parent inode does not have EXT4_EA_INODE_FL flag */
++#define PR_1_ATTR_SET_EA_INODE_FL     0x010070
++
+ /*
+  * Pass 1b errors
+  */
+Index: e2fsprogs/lib/blkid/probe.h
+===================================================================
+--- e2fsprogs.orig/lib/blkid/probe.h
++++ e2fsprogs/lib/blkid/probe.h
+@@ -119,6 +119,7 @@ struct ext2_super_block {
+ #define EXT4_FEATURE_INCOMPAT_64BIT           0x0080
+ #define EXT4_FEATURE_INCOMPAT_MMP             0x0100
+ #define EXT4_FEATURE_INCOMPAT_FLEX_BG         0x0200
++#define EXT4_FEATURE_INCOMPAT_EA_INODE                0x0400
+ #define EXT2_FEATURE_RO_COMPAT_SUPP   (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
+Index: e2fsprogs/lib/e2p/feature.c
+===================================================================
+--- e2fsprogs.orig/lib/e2p/feature.c
++++ e2fsprogs/lib/e2p/feature.c
+@@ -76,6 +76,8 @@ static struct feature feature_list[] = {
+                       "flex_bg"},
+       {       E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_MMP,
+                       "mmp" },
++      {       E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_EA_INODE,
++                      "large_xattr" },
+       {       0, 0, 0 },
+ };
+Index: e2fsprogs/lib/ext2fs/ext2_ext_attr.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2_ext_attr.h
++++ e2fsprogs/lib/ext2fs/ext2_ext_attr.h
+@@ -30,7 +30,7 @@ struct ext2_ext_attr_entry {
+       __u8    e_name_len;     /* length of name */
+       __u8    e_name_index;   /* attribute name index */
+       __u16   e_value_offs;   /* offset in disk block of value */
+-      __u32   e_value_block;  /* disk block attribute is stored on (n/i) */
++      __u32   e_value_inum;   /* inode in which the value is stored */
+       __u32   e_value_size;   /* size of attribute value */
+       __u32   e_hash;         /* hash value of name and value */
+ #if 1
+@@ -48,6 +48,9 @@ struct ext2_xattr_ibody_header {
+                   EXT2_GOOD_OLD_INODE_SIZE + (inode)->i_extra_isize))
+ #define ENTRY(ptr) ((struct ext2_ext_attr_entry *)(ptr))
++#define EXT4_XATTR_MIN_LARGE_EA_SIZE(b)       ((b) >> 1)
++#define EXT4_XATTR_MAX_LARGE_EA_SIZE  (1024 * 1024)
++
+ /* Name indexes */
+ #define EXT2_ATTR_INDEX_USER                  1
+ #define EXT2_ATTR_INDEX_POSIX_ACL_ACCESS      2
+Index: e2fsprogs/lib/ext2fs/ext2_fs.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2_fs.h
++++ e2fsprogs/lib/ext2fs/ext2_fs.h
+@@ -697,7 +697,8 @@ struct ext2_super_block {
+ #define EXT2_FEATURE_COMPAT_SUPP      0
+ #define EXT2_FEATURE_INCOMPAT_SUPP    (EXT2_FEATURE_INCOMPAT_FILETYPE| \
+-                                     EXT4_FEATURE_INCOMPAT_MMP)
++                                     EXT4_FEATURE_INCOMPAT_MMP|\
++                                     EXT4_FEATURE_INCOMPAT_EA_INODE)
+ #define EXT2_FEATURE_RO_COMPAT_SUPP   (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
+                                        EXT4_FEATURE_RO_COMPAT_DIR_NLINK| \
+Index: e2fsprogs/lib/ext2fs/ext2fs.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2fs.h
++++ e2fsprogs/lib/ext2fs/ext2fs.h
+@@ -571,6 +571,7 @@ typedef struct ext2_icount *ext2_icount_
+                                        EXT3_FEATURE_INCOMPAT_EXTENTS|\
+                                        EXT4_FEATURE_INCOMPAT_FLEX_BG|\
+                                        EXT4_FEATURE_INCOMPAT_MMP|\
++                                       EXT4_FEATURE_INCOMPAT_EA_INODE|\
+                                        EXT4_FEATURE_INCOMPAT_64BIT)
+ #else
+ #define EXT2_LIB_FEATURE_INCOMPAT_SUPP        (EXT2_FEATURE_INCOMPAT_FILETYPE|\
+@@ -580,6 +581,7 @@ typedef struct ext2_icount *ext2_icount_
+                                        EXT3_FEATURE_INCOMPAT_EXTENTS|\
+                                        EXT4_FEATURE_INCOMPAT_FLEX_BG|\
+                                        EXT4_FEATURE_INCOMPAT_MMP|\
++                                       EXT4_FEATURE_INCOMPAT_EA_INODE|\
+                                        EXT4_FEATURE_INCOMPAT_64BIT)
+ #endif
+ #define EXT2_LIB_FEATURE_RO_COMPAT_SUPP       (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|\
+Index: e2fsprogs/lib/ext2fs/ext_attr.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext_attr.c
++++ e2fsprogs/lib/ext2fs/ext_attr.c
+@@ -45,7 +45,7 @@ __u32 ext2fs_ext_attr_hash_entry(struct 
+       }
+       /* The hash needs to be calculated on the data in little-endian. */
+-      if (entry->e_value_block == 0 && entry->e_value_size != 0) {
++      if (entry->e_value_inum == 0 && entry->e_value_size != 0) {
+               __u32 *value = (__u32 *)data;
+               for (n = (entry->e_value_size + EXT2_EXT_ATTR_ROUND) >>
+                        EXT2_EXT_ATTR_PAD_BITS; n; n--) {
+@@ -207,6 +207,7 @@ struct ext2_attr_ibody_find {
+ };
+ struct ext2_attr_block_find {
++      ext2_ino_t ino;
+       struct ext2_attr_search s;
+       char *block;
+ };
+@@ -219,7 +220,7 @@ void ext2fs_attr_shift_entries(struct ex
+       /* Adjust the value offsets of the entries */
+       for (; !EXT2_EXT_IS_LAST_ENTRY(last); last = EXT2_EXT_ATTR_NEXT(last)) {
+-              if (!last->e_value_block && last->e_value_size) {
++              if (last->e_value_inum == 0 && last->e_value_size) {
+                       last->e_value_offs = last->e_value_offs +
+                                                       value_offs_shift;
+               }
+@@ -240,7 +241,7 @@ int ext2fs_attr_free_space(struct ext2_e
+ {
+       for (; !EXT2_EXT_IS_LAST_ENTRY(last); last = EXT2_EXT_ATTR_NEXT(last)) {
+               *total += EXT2_EXT_ATTR_LEN(last->e_name_len);
+-              if (!last->e_value_block && last->e_value_size) {
++              if (last->e_value_inum == 0 && last->e_value_size) {
+                       int offs = last->e_value_offs;
+                       if (offs < *min_offs)
+                               *min_offs = offs;
+@@ -376,7 +377,7 @@ static errcode_t ext2fs_attr_set_entry(e
+       /* Compute min_offs and last. */
+       for (last = s->first; !EXT2_EXT_IS_LAST_ENTRY(last);
+            last = EXT2_EXT_ATTR_NEXT(last)) {
+-              if (!last->e_value_block && last->e_value_size) {
++              if (last->e_value_inum == 0 && last->e_value_size) {
+                       int offs = last->e_value_offs;
+                       if (offs < min_offs)
+@@ -386,7 +387,7 @@ static errcode_t ext2fs_attr_set_entry(e
+       free = min_offs - ((char *)last - s->base) - sizeof(__u32);
+       if (!s->not_found) {
+-              if (!s->here->e_value_block && s->here->e_value_size) {
++              if (s->here->e_value_inum == 0 && s->here->e_value_size) {
+                       int size = s->here->e_value_size;
+                       free += EXT2_EXT_ATTR_SIZE(size);
+               }
+@@ -409,7 +410,7 @@ static errcode_t ext2fs_attr_set_entry(e
+               s->here->e_name_len = name_len;
+               memcpy(s->here->e_name, i->name, name_len);
+       } else {
+-              if (!s->here->e_value_block && s->here->e_value_size) {
++              if (s->here->e_value_inum == 0 && s->here->e_value_size) {
+                       char *first_val = s->base + min_offs;
+                       int offs = s->here->e_value_offs;
+                       char *val = s->base + offs;
+@@ -438,7 +439,7 @@ static errcode_t ext2fs_attr_set_entry(e
+                       while (!EXT2_EXT_IS_LAST_ENTRY(last)) {
+                               int o = last->e_value_offs;
+-                              if (!last->e_value_block &&
++                              if (last->e_value_inum == 0 &&
+                                   last->e_value_size && o < offs)
+                                       last->e_value_offs = o + size;
+                               last = EXT2_EXT_ATTR_NEXT(last);
+@@ -556,9 +557,20 @@ static errcode_t ext2fs_attr_block_set(e
+       /* Update the i_blocks if we added a new EA block */
+       if (!inode->i_file_acl && new_buf)
+               inode->i_blocks += fs->blocksize / 512;
++
++      /* Drop the previous xattr block. */
++      if (!new_buf) {
++              if (!fs->block_map)
++                      ext2fs_read_block_bitmap(fs);
++              ext2fs_block_alloc_stats(fs, inode->i_file_acl, -1);
++              inode->i_blocks -= fs->blocksize / 512;
++      }
++
+       /* Update the inode. */
+       inode->i_file_acl = new_buf ? blk : 0;
++      ext2fs_write_inode(fs, bs->ino, inode);
++
+ cleanup:
+       if (clear_flag)
+               ext2fs_free_mem(&s->base);
+@@ -866,6 +878,7 @@ errcode_t ext2fs_expand_extra_isize(ext2
+               .s = { .not_found = EXT2_ET_EA_NO_SPACE, },
+       };
+       struct ext2_attr_block_find bs = {
++              .ino = ino,
+               .s = { .not_found = EXT2_ET_EA_NO_SPACE, },
+       };
+       char *start, *end, *block_buf = NULL, *buffer =NULL, *b_entry_name=NULL;
+Index: e2fsprogs/lib/ext2fs/swapfs.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/swapfs.c
++++ e2fsprogs/lib/ext2fs/swapfs.c
+@@ -151,7 +151,7 @@ void ext2fs_swap_ext_attr_entry(struct e
+                               struct ext2_ext_attr_entry *from_entry)
+ {
+       to_entry->e_value_offs  = ext2fs_swab16(from_entry->e_value_offs);
+-      to_entry->e_value_block = ext2fs_swab32(from_entry->e_value_block);
++      to_entry->e_value_inum  = ext2fs_swab32(from_entry->e_value_inum);
+       to_entry->e_value_size  = ext2fs_swab32(from_entry->e_value_size);
+       to_entry->e_hash        = ext2fs_swab32(from_entry->e_hash);
+ }
+Index: e2fsprogs/misc/mke2fs.c
+===================================================================
+--- e2fsprogs.orig/misc/mke2fs.c
++++ e2fsprogs/misc/mke2fs.c
+@@ -813,6 +813,7 @@ static __u32 ok_features[3] = {
+               EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|
+               EXT2_FEATURE_INCOMPAT_META_BG|
+               EXT4_FEATURE_INCOMPAT_FLEX_BG|
++              EXT4_FEATURE_INCOMPAT_EA_INODE|
+               EXT4_FEATURE_INCOMPAT_MMP |
+               EXT4_FEATURE_INCOMPAT_64BIT,
+       /* R/O compat */
+Index: e2fsprogs/misc/tune2fs.c
+===================================================================
+--- e2fsprogs.orig/misc/tune2fs.c
++++ e2fsprogs/misc/tune2fs.c
+@@ -126,6 +126,7 @@ static __u32 ok_features[3] = {
+       EXT2_FEATURE_INCOMPAT_FILETYPE |
+               EXT3_FEATURE_INCOMPAT_EXTENTS |
+               EXT4_FEATURE_INCOMPAT_FLEX_BG |
++              EXT4_FEATURE_INCOMPAT_EA_INODE|
+               EXT4_FEATURE_INCOMPAT_MMP,
+       /* R/O compat */
+       EXT2_FEATURE_RO_COMPAT_LARGE_FILE |
+@@ -144,6 +145,7 @@ static __u32 clear_ok_features[3] = {
+       /* Incompat */
+       EXT2_FEATURE_INCOMPAT_FILETYPE |
+               EXT4_FEATURE_INCOMPAT_FLEX_BG |
++              EXT4_FEATURE_INCOMPAT_EA_INODE|
+               EXT4_FEATURE_INCOMPAT_MMP,
+       /* R/O compat */
+       EXT2_FEATURE_RO_COMPAT_LARGE_FILE |
+@@ -484,6 +486,9 @@ mmp_error:
+               sb->s_mmp_update_interval = 0;
+       }
++      if (FEATURE_ON(E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_EA_INODE))
++              sb->s_feature_incompat |= EXT4_FEATURE_INCOMPAT_EA_INODE;
++
+       if (FEATURE_ON(E2P_FEATURE_COMPAT, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {
+               /*
+                * If adding a journal flag, let the create journal
diff --git a/patches/e2fsprogs-lazy_journal_init.patch b/patches/e2fsprogs-lazy_journal_init.patch
new file mode 100644 (file)
index 0000000..9882bba
--- /dev/null
@@ -0,0 +1,186 @@
+This patch adds the ability to skip zeroing the journal on disk.  This can
+significantly speed up mke2fs with large journals.  At worst the uninitialized
+journal is only a very short-term risk (if at all), because the journal will
+be overwritten on any new filesystem as soon as any significant amount of data
+is written to disk, unlike lazy_itable_init which can leave uninitialized
+itable blocks indefinitely (in the absence of the kernel init thread).
+
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/lib/ext2fs/ext2fs.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2fs.h
++++ e2fsprogs/lib/ext2fs/ext2fs.h
+@@ -197,10 +197,9 @@ typedef struct ext2_file *ext2_file_t;
+ /*
+  * Flags for mkjournal
+- *
+- * EXT2_MKJOURNAL_V1_SUPER    Make a (deprecated) V1 journal superblock
+  */
+-#define EXT2_MKJOURNAL_V1_SUPER       0x0000001
++#define EXT2_MKJOURNAL_V1_SUPER       0x0000001 /* create V1 superblock (deprecated) */
++#define EXT2_MKJOURNAL_LAZYINIT       0x0000002 /* don't zero journal inode before use*/
+ struct opaque_ext2_group_desc;
+Index: e2fsprogs/lib/ext2fs/mkjournal.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/mkjournal.c
++++ e2fsprogs/lib/ext2fs/mkjournal.c
+@@ -103,7 +103,7 @@ static errcode_t write_journal_file(ext2
+       /* Open the device or journal file */
+       if ((fd = open(filename, O_WRONLY)) < 0) {
+               retval = errno;
+-              goto errout;
++              goto errfree;
+       }
+       /* Write the superblock out */
+@@ -117,6 +117,9 @@ static errcode_t write_journal_file(ext2
+               goto errout;
+       memset(buf, 0, fs->blocksize);
++      if (flags & EXT2_MKJOURNAL_LAZYINIT)
++              goto success;
++
+       for (i = 1; i < blocks; i++) {
+               ret_size = write(fd, buf, fs->blocksize);
+               if (ret_size < 0) {
+@@ -126,10 +129,12 @@ static errcode_t write_journal_file(ext2
+               if (ret_size != (int) fs->blocksize)
+                       goto errout;
+       }
+-      close(fd);
++success:
+       retval = 0;
+ errout:
++      close(fd);
++errfree:
+       ext2fs_free_mem(&buf);
+       return retval;
+ }
+@@ -213,6 +218,7 @@ struct mkjournal_struct {
+       blk64_t         goal;
+       blk64_t         blk_to_zero;
+       int             zero_count;
++      int             flags;
+       char            *buf;
+       errcode_t       err;
+ };
+@@ -244,7 +250,7 @@ static int mkjournal_proc(ext2_filsys      fs
+       retval = 0;
+       if (blockcnt <= 0)
+               retval = io_channel_write_blk64(fs->io, new_blk, 1, es->buf);
+-      else {
++      else if (!(es->flags & EXT2_MKJOURNAL_LAZYINIT)) {
+               if (es->zero_count) {
+                       if ((es->blk_to_zero + es->zero_count == new_blk) &&
+                           (es->zero_count < 1024))
+@@ -309,6 +315,7 @@ static errcode_t write_journal_inode(ext
+       es.newblocks = 0;
+       es.buf = buf;
+       es.err = 0;
++      es.flags = flags;
+       es.zero_count = 0;
+       if (fs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS) {
+@@ -511,6 +518,13 @@ errcode_t ext2fs_add_journal_inode(ext2_
+               if ((fd = open(jfile, O_CREAT|O_WRONLY, 0600)) < 0)
+                       return errno;
++              /* Note that we can't do lazy journal initialization for mounted
++               * filesystems, since the zero writing is also allocating the
++               * journal blocks.  We could use fallocate, but not all kernels
++               * support that, and creating a journal on a mounted ext2
++               * filesystems is extremely rare these days...  Skip it. */
++              flags &= ~EXT2_MKJOURNAL_LAZYINIT;
++
+               if ((retval = write_journal_file(fs, jfile, blocks, flags)))
+                       goto errout;
+Index: e2fsprogs/misc/mke2fs.8.in
+===================================================================
+--- e2fsprogs.orig/misc/mke2fs.8.in
++++ e2fsprogs/misc/mke2fs.8.in
+@@ -232,7 +232,15 @@ This speeds up filesystem
+ initialization noticeably, but it requires the kernel to finish
+ initializing the filesystem in the background when the filesystem is
+ first mounted.  If the option value is omitted, it defaults to 1 to
+-enable lazy inode table initialization.
++enable lazy inode table zeroing.
++.TP
++.B lazy_journal_init\fR[\fB= \fI<0 to disable, 1 to enable>\fR]
++If enabled, the journal inode will not be fully zeroed out by
++.BR mke2fs .
++This speeds up filesystem initialization noticeably, but carries some
++small risk if the system crashes before the journal has been overwritten
++entirely one time.  If the option value is omitted, it defaults to 1 to
++enable lazy journal inode zeroing.
+ .TP
+ .B test_fs
+ Set a flag in the filesystem superblock indicating that it may be
+Index: e2fsprogs/misc/mke2fs.c
+===================================================================
+--- e2fsprogs.orig/misc/mke2fs.c
++++ e2fsprogs/misc/mke2fs.c
+@@ -503,6 +503,10 @@ static void create_journal_dev(ext2_fils
+                       _("while initializing journal superblock"));
+               exit(1);
+       }
++ 
++      if (journal_flags & EXT2_MKJOURNAL_LAZYINIT)
++              goto write_superblock;
++ 
+       ext2fs_numeric_progress_init(fs, &progress,
+                                    _("Zeroing journal device: "),
+                                    ext2fs_blocks_count(fs->super));
+@@ -527,6 +531,8 @@ static void create_journal_dev(ext2_fils
+       }
+       ext2fs_zero_blocks2(0, 0, 0, 0, 0);
++      ext2fs_numeric_progress_close(fs, &progress, NULL);
++write_superblock:
+       retval = io_channel_write_blk64(fs->io,
+                                       fs->super->s_first_data_block+1,
+                                       1, buf);
+@@ -535,7 +541,6 @@ static void create_journal_dev(ext2_fils
+                       _("while writing journal superblock"));
+               exit(1);
+       }
+-      ext2fs_numeric_progress_close(fs, &progress, NULL);
+ }
+ static void show_stats(ext2_filsys fs)
+@@ -746,6 +751,12 @@ static void parse_extended_opts(struct e
+                       }
+               } else if (!strcmp(token, "test_fs")) {
+                       param->s_flags |= EXT2_FLAGS_TEST_FILESYS;
++              } else if (!strcmp(token, "lazy_journal_init")) {
++                      if (arg)
++                              journal_flags |= strtoul(arg, &p, 0) ?
++                                              EXT2_MKJOURNAL_LAZYINIT : 0;
++                      else
++                              journal_flags |= EXT2_MKJOURNAL_LAZYINIT;
+               } else if (!strcmp(token, "lazy_itable_init")) {
+                       if (arg)
+                               lazy_itable_init = strtoul(arg, &p, 0);
+@@ -770,6 +781,7 @@ static void parse_extended_opts(struct e
+                       "\tstripe-width=<RAID stride * data disks in blocks>\n"
+                       "\tresize=<resize maximum size in blocks>\n"
+                       "\tlazy_itable_init=<0 to disable, 1 to enable>\n"
++                      "\tlazy_journal_init=<0 to disable, 1 to enable>\n"
+                       "\ttest_fs\n"
+                       "\tdiscard\n"
+                       "\tnodiscard\n\n"),
+@@ -1778,6 +1790,9 @@ profile_error:
+                                                "lazy_itable_init",
+                                                lazy_itable_init);
+       discard = get_bool_from_profile(fs_types, "discard" , discard);
++      journal_flags |= get_bool_from_profile(fs_types,
++                                             "lazy_journal_init", 0) ?
++                                             EXT2_MKJOURNAL_LAZYINIT : 0;
+       /* Get options from profile */
+       for (cpp = fs_types; *cpp; cpp++) {
diff --git a/patches/e2fsprogs-lfsck.patch b/patches/e2fsprogs-lfsck.patch
new file mode 100644 (file)
index 0000000..43743cd
--- /dev/null
@@ -0,0 +1,5213 @@
+add support for lustre lfsck tool
+
+Index: e2fsprogs/MCONFIG.in
+===================================================================
+--- e2fsprogs.orig/MCONFIG.in
++++ e2fsprogs/MCONFIG.in
+@@ -97,6 +97,9 @@ DEPLIBSS = $(LIB)/libss@LIB_EXT@
+ DEPLIBCOM_ERR = $(LIB)/libcom_err@LIB_EXT@
+ DEPLIBUUID = @DEPLIBUUID@
+ DEPLIBBLKID = @DEPLIBBLKID@ @PRIVATE_LIBS_CMT@ $(DEPLIBUUID)
++#Version of libdb lib found by configure
++LIBDB = @libdb@
++
+ STATIC_LIBSS = $(LIB)/libss@STATIC_LIB_EXT@ @DLOPEN_LIB@
+ STATIC_LIBCOM_ERR = $(LIB)/libcom_err@STATIC_LIB_EXT@ @SEM_INIT_LIB@
+@@ -202,8 +205,8 @@ Makefile: $(srcdir)/Makefile.in $(top_bu
+               $(DEP_MAKEFILE) $(top_builddir)/config.status
+       cd $(top_builddir); CONFIG_FILES=$(my_dir)/Makefile ./config.status
+-@MAINTAINER_CMT@$(top_srcdir)/configure: $(top_srcdir)/configure.in
+-@MAINTAINER_CMT@      cd $(top_srcdir) && autoconf
++$(top_srcdir)/configure: $(top_srcdir)/configure.in
++      cd $(top_srcdir) && autoconf
+ #
+ # Make depend magic...
+Index: e2fsprogs/configure.in
+===================================================================
+--- e2fsprogs.orig/configure.in
++++ e2fsprogs/configure.in
+@@ -212,6 +212,54 @@ Q=@
+ AC_SUBST(E)
+ AC_SUBST(Q)
+ dnl
++dnl handle --enable-lfsck
++dnl
++AC_ARG_ENABLE([lfsck],
++[  --disable-lfsck              disable EXPERIMENTAL Lustre lfsck support],
++if test "$enableval" = "no"
++then
++      LFSCK_CMT=#
++      LFSCK_MAN=.\"
++      echo "Disabling Lustre lfsck support"
++else
++      LFSCK_CMT=
++      LFSCK_MAN=
++      AC_DEFINE(ENABLE_LFSCK)
++      echo "Enabling Lustre lfsck support"
++fi
++,
++LFSCK_CMT=
++LFSCK_MAN=
++AC_DEFINE(ENABLE_LFSCK)
++echo "Enabling Lustre lfsck support by default"
++)
++AC_SUBST(LFSCK_CMT)
++AC_SUBST(LFSCK_MAN)
++dnl
++dnl set lustre include path and build lfsck
++dnl
++AC_ARG_WITH([lustre],
++[  --with-lustre=LUSTRE path to Lustre sources for lfsck (default=/usr for RPM)],
++AC_MSG_RESULT(LUSTRE is $withval)
++LUSTRE="$withval",
++LUSTRE="/usr")dnl
++AC_SUBST(LUSTRE)
++dnl
++AS_IF([test "x$enable_lfsck" != "xno"],
++[
++      AC_CHECK_FILE($LUSTRE/include/lustre/liblustreapi.h,,
++              AC_CHECK_FILE($LUSTRE/lustre/include/lustre/liblustreapi.h,,
++                      AC_MSG_ERROR([No lustre includes found.]))
++      )
++dnl   # Disable for old autoconf that doesn't check header usability.
++dnl   # Supposed to check if lustre_idl.h is usable from userspace.
++dnl   AC_CHECK_HEADER($LUSTRE/lustre/include/lustre/lustre_idl.h,
++dnl                   AC_DEFINE(HAVE_LUSTRE_LUSTRE_IDL_H),
++dnl           AC_CHECK_HEADER($LUSTRE/include/lustre/lustre_idl.h,
++dnl                           AC_DEFINE(HAVE_LUSTRE_LUSTRE_IDL_H),)
++dnl   )
++])
++dnl
+ dnl handle --enable-compression
+ dnl
+ AC_ARG_ENABLE([compression],
+@@ -763,6 +811,7 @@ AC_CHECK_HEADERS(net/if.h,,,
+ #include <sys/socket.h>
+ #endif
+ ]])
++AC_CHECK_HEADERS(db.h)
+ AC_FUNC_VPRINTF
+ dnl Check to see if dirent has member d_reclen. On cygwin those d_reclen
+ dnl is not decleared.
+@@ -880,6 +929,31 @@ SOCKET_LIB=''
+ AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket])
+ AC_SUBST(SOCKET_LIB)
+ dnl
++dnl Check to see if libdb exists for the sake of lfsck
++dnl
++AC_CHECK_LIB(db-4.1, db_env_create,
++[DB4VERSION=4.1
++AC_DEFINE(HAVE_DB4)])
++AC_CHECK_LIB(db-4.2, db_env_create,
++[DB4VERSION=4.2
++AC_DEFINE(HAVE_DB4)])
++AC_CHECK_LIB(db-4.3, db_env_create,
++[DB4VERSION=4.3
++AC_DEFINE(HAVE_DB4)])
++AC_CHECK_LIB(db-4.5, db_env_create,
++[DB4VERSION=4.5
++AC_DEFINE(HAVE_DB4)])
++AC_CHECK_LIB(db-4.6, db_env_create,
++[DB4VERSION=4.6
++AC_DEFINE(HAVE_DB4)])
++AC_CHECK_LIB(db-4.7, db_env_create,
++[DB4VERSION=4.7
++AC_DEFINE(HAVE_DB4)])
++AC_CHECK_LIB(db-4.8, db_env_create,
++[DB4VERSION=4.8
++AC_DEFINE(HAVE_DB4)])
++AC_SUBST(DB4VERSION)
++dnl
+ dnl See if optreset exists
+ dnl
+ AC_MSG_CHECKING(for optreset)
+Index: e2fsprogs/e2fsck/Makefile.in
+===================================================================
+--- e2fsprogs.orig/e2fsck/Makefile.in
++++ e2fsprogs/e2fsck/Makefile.in
+@@ -12,30 +12,35 @@ INSTALL = @INSTALL@
+ @MCONFIG@
+ PROGS=                e2fsck
++@LFSCK_CMT@USPROGS= lfsck
+ MANPAGES=     e2fsck.8
+ FMANPAGES=    e2fsck.conf.5
++@LFSCK_CMT@MANPAGES   += lfsck.8
+ XTRA_CFLAGS=  -DRESOURCE_TRACK -I.
+-LIBS= $(LIBEXT2FS) $(LIBCOM_ERR) $(LIBBLKID) $(LIBUUID) $(LIBINTL) $(LIBE2P)
++@LFSCK_CMT@LFSCK_LIBS=-ldb-@DB4VERSION@
++@LFSCK_CMT@LUSTRE_INC=-I @LUSTRE@/lustre/include -I @LUSTRE@/include -Wall
++@LFSCK_CMT@LUSTRE_LIB=-L @LUSTRE@/lustre/utils -L @LUSTRE@/lib64 -L @LUSTRE@/lib
++LIBS= $(LIBEXT2FS) $(LIBCOM_ERR) $(LIBBLKID) $(LIBUUID) $(LIBINTL) $(LIBE2P) $(LFSCK_LIBS)
+ DEPLIBS= $(LIBEXT2FS) $(DEPLIBCOM_ERR) $(DEPLIBBLKID) $(DEPLIBUUID) \
+-      $(DEPLIBE2P)
++      $(DEPLIBE2P) $(LFSCK_LIBS)
+ STATIC_LIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) $(STATIC_LIBBLKID) \
+-      $(STATIC_LIBUUID) $(LIBINTL) $(STATIC_LIBE2P)
++      $(STATIC_LIBUUID) $(LIBINTL) $(STATIC_LIBE2P) $(LFSCK_LIBS)
+ STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR) \
+-      $(DEPSTATIC_LIBBLKID) $(DEPSTATIC_LIBUUID) $(DEPSTATIC_LIBE2P)
++      $(DEPSTATIC_LIBBLKID) $(DEPSTATIC_LIBUUID) $(DEPSTATIC_LIBE2P) $(LFSCK_LIBS)
+ PROFILED_LIBS= $(PROFILED_LIBEXT2FS) $(PROFILED_LIBCOM_ERR) \
+-      $(PROFILED_LIBBLKID) $(PROFILED_LIBUUID) $(PROFILED_LIBE2P) $(LIBINTL)
++      $(PROFILED_LIBBLKID) $(PROFILED_LIBUUID) $(PROFILED_LIBE2P) $(LIBINTL) $(LFSCK_LIBS)
+ PROFILED_DEPLIBS= $(PROFILED_LIBEXT2FS) $(DEPPROFILED_LIBCOM_ERR) \
+-      $(DEPPROFILED_LIBBLKID) $(DEPPROFILED_LIBUUID) $(DEPPROFILED_LIBE2P)
++      $(DEPPROFILED_LIBBLKID) $(DEPPROFILED_LIBUUID) $(DEPPROFILED_LIBE2P) $(LFSCK_LIBS)
+ COMPILE_ET=$(top_builddir)/lib/et/compile_et --build-tree
+ .c.o:
+       $(E) "  CC $<"
+-      $(Q) $(CC) -c $(ALL_CFLAGS) $< -o $@
+-@PROFILE_CMT@ $(Q) $(CC) $(ALL_CFLAGS) -g -pg -o profiled/$*.o -c $<
++      $(Q) $(CC) -c $(ALL_CFLAGS) $(LUSTRE_INC) $< -o $@
++@PROFILE_CMT@ $(Q) $(CC) $(ALL_CFLAGS) $(LUSTRE_INC) -g -pg -o profiled/$*.o -c $<
+ #
+ # Flags for using Checker
+@@ -64,7 +69,10 @@ COMPILE_ET=$(top_builddir)/lib/et/compil
+ OBJS= crc32.o dict.o unix.o e2fsck.o super.o pass1.o pass1b.o pass2.o \
+       pass3.o pass4.o pass5.o journal.o badblocks.o util.o dirinfo.o \
+       dx_dirinfo.o ehandler.o problem.o message.o recovery.o region.o \
+-      revoke.o ea_refcount.o rehash.o profile.o prof_err.o $(MTRACE_OBJ)
++      revoke.o ea_refcount.o rehash.o profile.o prof_err.o pass6.o $(MTRACE_OBJ)
++@LFSCK_CMT@OBJS += lfsck_common.o
++
++@LFSCK_CMT@LFSCK_OBJS = lfsck_common.o lfsck.o
+ PROFILED_OBJS= profiled/dict.o profiled/unix.o profiled/e2fsck.o \
+       profiled/super.o profiled/pass1.o profiled/pass1b.o \
+@@ -74,7 +82,8 @@ PROFILED_OBJS= profiled/dict.o profiled/
+       profiled/message.o profiled/problem.o \
+       profiled/recovery.o profiled/region.o profiled/revoke.o \
+       profiled/ea_refcount.o profiled/rehash.o profiled/profile.o \
+-      profiled/crc32.o profiled/prof_err.o
++      profiled/crc32.o profiled/prof_err.o profiled/pass6.o
++@LFSCK_CMT@PROFILED_OBJS += profiled/lfsck_common.o
+ SRCS= $(srcdir)/e2fsck.c \
+       $(srcdir)/crc32.c \
+@@ -87,6 +96,7 @@ SRCS= $(srcdir)/e2fsck.c \
+       $(srcdir)/pass3.c \
+       $(srcdir)/pass4.c \
+       $(srcdir)/pass5.c \
++      $(srcdir)/pass6.c \
+       $(srcdir)/journal.c \
+       $(srcdir)/recovery.c \
+       $(srcdir)/revoke.c \
+@@ -105,7 +115,10 @@ SRCS= $(srcdir)/e2fsck.c \
+       prof_err.c \
+       $(MTRACE_SRC)
+-all:: profiled $(PROGS) e2fsck $(MANPAGES) $(FMANPAGES)
++@LFSCK_CMT@SRCS += $(srcdir)/lfsck_common.c
++
++@LFSCK_CMT@LFSCK_SRCS = $(srcdir)/lfsck_common.c $(srcdir)/lfsck.c
++all:: profiled $(PROGS) $(USPROGS) e2fsck $(MANPAGES) $(FMANPAGES)
+ @PROFILE_CMT@all:: e2fsck.profiled
+@@ -161,6 +174,10 @@ check:: tst_refcount tst_region tst_crc3
+       LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_crc32
+       LD_LIBRARY_PATH=$(LIB) DYLD_LIBRARY_PATH=$(LIB) ./tst_problem
++@LFSCK_CMT@lfsck: $(LFSCK_OBJS)
++@LFSCK_CMT@   @echo " LD $@"
++@LFSCK_CMT@   $(LD) -pthread $(ALL_LDFLAGS) $(LUSTRE_INC) $(LFSCK_OBJS) -o lfsck $(LUSTRE_LIB) -llustreapi $(DEPLIBS)
++
+ extend: extend.o
+       $(E) "  LD $@"
+       $(Q) $(LD) $(ALL_LDFLAGS) -o extend extend.o $(CHECKLIB)
+@@ -184,6 +201,9 @@ profiled:
+ @PROFILE_CMT@ $(E) "  MKDIR $@"
+ @PROFILE_CMT@ $(Q) mkdir profiled
++lfsck.8: $(DEP_SUBSTITUTE) $(srcdir)/lfsck.8.in
++      $(SUBSTITUTE_UPTIME) $(srcdir)/lfsck.8.in lfsck.8
++
+ e2fsck.8: $(DEP_SUBSTITUTE) $(srcdir)/e2fsck.8.in
+       $(E) "  SUBST $@"
+       $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2fsck.8.in e2fsck.8
+@@ -193,15 +213,19 @@ e2fsck.conf.5: $(DEP_SUBSTITUTE) $(srcdi
+       $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/e2fsck.conf.5.in e2fsck.conf.5
+ installdirs:
+-      $(E) "  MKINSTALLDIRS $(root_sbindir) $(man8dir)"
++      $(E) "  MKINSTALLDIRS $(root_sbindir) $(sbindir) $(man8dir)"
+       $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(root_sbindir) \
+-              $(DESTDIR)$(man8dir) $(DESTDIR)$(man5dir)
++              $(DESTDIR)$(man8dir) $(DESTDIR)$(man5dir) $(DESTDIR)$(sbindir)
+-install: $(PROGS) $(MANPAGES) $(FMANPAGES) installdirs
++install: $(PROGS)  $(USPROGS) $(MANPAGES) $(FMANPAGES) installdirs
+       $(Q) for i in $(PROGS); do \
+               echo "  INSTALL $(root_sbindir)/$$i"; \
+               $(INSTALL_PROGRAM) $$i $(DESTDIR)$(root_sbindir)/$$i; \
+       done
++      @for i in $(USPROGS); do \
++              echo "  INSTALL $(sbindir)/$$i"; \
++              $(INSTALL_PROGRAM) $$i $(DESTDIR)$(sbindir)/$$i; \
++      done
+       $(Q) for i in ext2 ext3 ext4 ext4dev; do \
+               echo "  LINK $(root_sbindir)/fsck.$$i"; \
+               (cd $(DESTDIR)$(root_sbindir); \
+@@ -237,6 +261,9 @@ uninstall:
+       for i in $(PROGS); do \
+               $(RM) -f $(DESTDIR)$(root_sbindir)/$$i; \
+       done
++      for i in $(USPROGS); do \
++              $(RM) -f $(DESTDIR)$(sbindir)/$$i; \
++      done
+       $(RM) -f $(DESTDIR)$(root_sbindir)/fsck.ext2 \
+               $(DESTDIR)$(root_sbindir)/fsck.ext3 \
+               $(DESTDIR)$(root_sbindir)/fsck.ext4 \
+@@ -253,7 +280,7 @@ uninstall:
+                       $(DESTDIR)$(root_sbindir)/fsck.ext4dev
+ clean:
+-      $(RM) -f $(PROGS) \#* *\# *.s *.o *.a *~ core e2fsck.static \
++      $(RM) -f $(PROGS) $(USPROGS) \#* *\# *.s *.o *.a *~ core e2fsck.static \
+               e2fsck.shared e2fsck.profiled flushb e2fsck.8 \
+               tst_problem tst_crc32 tst_region tst_refcount gen_crc32table \
+               crc32table.h e2fsck.conf.5 prof_err.c prof_err.h \
+@@ -334,6 +361,12 @@ pass5.o: $(srcdir)/pass5.c $(srcdir)/e2f
+  $(top_builddir)/lib/ext2fs/ext2_err.h \
+  $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+  $(srcdir)/profile.h prof_err.h $(srcdir)/problem.h
++pass6.o: $(srcdir)/pass6.c $(srcdir)/e2fsck.h \
++ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
++ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
++ $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
++ $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
++ $(srcdir)/problem.h $(top_srcdir)/lib/ext2fs/lfsck.h
+ journal.o: $(srcdir)/journal.c $(srcdir)/jfs_user.h $(srcdir)/e2fsck.h \
+  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
+  $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
+@@ -436,6 +469,9 @@ region.o: $(srcdir)/region.c $(srcdir)/e
+  $(top_builddir)/lib/ext2fs/ext2_err.h \
+  $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+  $(srcdir)/profile.h prof_err.h
++lfsck.o: $(srcdir)/lfsck.c $(top_srcdir)/lib/ext2fs/lfsck.h $(srcdir)/lfsck_common.c \
++ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
++ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h
+ profile.o: $(srcdir)/profile.c $(top_srcdir)/lib/et/com_err.h \
+  $(srcdir)/profile.h prof_err.h
+ prof_err.o: prof_err.c
+Index: e2fsprogs/e2fsck/e2fsck.8.in
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.8.in
++++ e2fsprogs/e2fsck/e2fsck.8.in
+@@ -333,6 +333,20 @@ may not be specified at the same time as
+ or
+ .B \-p
+ options.
++@LFSCK_MAN@.TP
++@LFSCK_MAN@.BI \-\-mdsdb " mds_database_filename"
++@LFSCK_MAN@Specify which file to use for an MDS database on a Lustre filesystem.
++@LFSCK_MAN@The mdsdb also needs to be specified when creating an OST database with
++@LFSCK_MAN@.B \-\-ostdb
++@LFSCK_MAN@but the mdsdb file used in a read-only manner.
++@LFSCK_MAN@.TP
++@LFSCK_MAN@.BI \-\-ostdb " ostN_database_filename"
++@LFSCK_MAN@Specify which file to use for an OST database on a Lustre filesystem.
++@LFSCK_MAN@A separate database file should be specified for each OST device in
++@LFSCK_MAN@the filesystem.  For convenience a stub
++@LFSCK_MAN@.BR mdsdb .hdr
++@LFSCK_MAN@file is generated for use by the OST e2fsck to avoid the need to
++@LFSCK_MAN@wait for the MDS e2fsck to finish or copy the full mdsdb to the OSTs.
+ .SH EXIT CODE
+ The exit code returned by
+ .B e2fsck
+Index: e2fsprogs/e2fsck/e2fsck.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.c
++++ e2fsprogs/e2fsck/e2fsck.c
+@@ -193,8 +193,11 @@ void e2fsck_free_context(e2fsck_t ctx)
+ typedef void (*pass_t)(e2fsck_t ctx);
+ pass_t e2fsck_passes[] = {
+-      e2fsck_pass1, e2fsck_pass2, e2fsck_pass3, e2fsck_pass4,
+-      e2fsck_pass5, 0 };
++      e2fsck_pass1, e2fsck_pass2, e2fsck_pass3, e2fsck_pass4, e2fsck_pass5,
++#ifdef ENABLE_LFSCK
++      e2fsck_pass6,
++#endif
++      0 };
+ #define E2F_FLAG_RUN_RETURN   (E2F_FLAG_SIGNAL_MASK|E2F_FLAG_RESTART)
+Index: e2fsprogs/e2fsck/e2fsck.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.h
++++ e2fsprogs/e2fsck/e2fsck.h
+@@ -158,6 +158,7 @@ struct resource_track {
+ #define E2F_OPT_FRAGCHECK     0x0800
+ #define E2F_OPT_JOURNAL_ONLY  0x1000 /* only replay the journal */
+ #define E2F_OPT_DISCARD               0x2000
++#define E2F_OPT_VERBOSE         0x4000
+ /*
+  * E2fsck flags
+@@ -184,6 +185,13 @@ struct resource_track {
+ #define E2F_RESET_FLAGS (E2F_FLAG_TIME_INSANE)
++/* Defines for Lustre */
++#define LUSTRE_NULL 0x0000
++#define LUSTRE_MDS  0x0001
++#define LUSTRE_OST  0x0002
++#define LUSTRE_TYPE 0x000f
++#define LUSTRE_ONLY 0x1000
++
+ /*
+  * Defines for indicating the e2fsck pass number
+  */
+@@ -336,6 +344,12 @@ struct e2fsck_struct {
+       io_channel      journal_io;
+       char    *journal_name;
++      /* lustre support */
++      int                      lustre_devtype;
++      char                    *lustre_mdsdb;
++      char                    *lustre_ostdb;
++      struct lfsck_outdb_info *lfsck_oinfo;
++
+ #ifdef RESOURCE_TRACK
+       /*
+        * For timing purposes
+@@ -419,6 +433,7 @@ extern void e2fsck_pass2(e2fsck_t ctx);
+ extern void e2fsck_pass3(e2fsck_t ctx);
+ extern void e2fsck_pass4(e2fsck_t ctx);
+ extern void e2fsck_pass5(e2fsck_t ctx);
++extern void e2fsck_pass6(e2fsck_t ctx);
+ /* e2fsck.c */
+ extern errcode_t e2fsck_allocate_context(e2fsck_t *ret);
+Index: e2fsprogs/e2fsck/pass1.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1.c
++++ e2fsprogs/e2fsck/pass1.c
+@@ -49,6 +49,7 @@
+ #include "e2fsck.h"
+ #include <ext2fs/ext2_ext_attr.h>
++#include "ext2fs/lfsck.h"
+ #include "problem.h"
+@@ -390,6 +391,8 @@ static void check_ea_in_inode(e2fsck_t c
+       struct ext2_ext_attr_entry *entry;
+       char *start, *end;
+       unsigned int storage_size, remain;
++      struct lov_user_md_v1 *lmm = NULL;
++      struct lustre_mdt_attrs *lma = NULL;
+       int problem = 0;
+       inode = (struct ext2_inode_large *) pctx->inode;
+@@ -458,6 +461,9 @@ static void check_ea_in_inode(e2fsck_t c
+                       goto fix;
+               }
++              e2fsck_lfsck_find_ea(ctx, inode, entry,
++                                   start + entry->e_value_offs, &lmm, &lma);
++
+               /* If EA value is stored in external inode then it does not
+                * consume space here */
+               if (entry->e_value_inum == 0)
+@@ -465,6 +471,10 @@ static void check_ea_in_inode(e2fsck_t c
+               entry = EXT2_EXT_ATTR_NEXT(entry);
+       }
++
++      if (lmm)
++              e2fsck_lfsck_save_ea(ctx, pctx->ino, inode->i_generation,
++                                   lmm, lma);
+ fix:
+       /*
+        * it seems like a corruption. it's very unlikely we could repair
+@@ -1005,6 +1015,12 @@ void e2fsck_pass1(e2fsck_t ctx)
+               ext2fs_mark_block_bitmap2(ctx->block_found_map,
+                                        fs->super->s_mmp_block);
++      if (!(ctx->options & E2F_OPT_READONLY) &&
++          (ctx->lustre_devtype & LUSTRE_TYPE) == LUSTRE_MDS) {
++              if (e2fsck_lfsck_remove_pending(ctx, NULL))
++                      return;
++      }
++
+       while (1) {
+               if (ino % EXT2_MMP_INODE_INTERVAL == 0) {
+                       errcode_t error;
+@@ -1513,6 +1529,9 @@ void e2fsck_pass1(e2fsck_t ctx)
+               }
+               e2fsck_pass1_dupblocks(ctx, block_buf);
+       }
++
++      e2fsck_lfsck_flush_ea(ctx);
++
+       ext2fs_free_mem(&inodes_to_process);
+ endit:
+       e2fsck_use_inode_shortcuts(ctx, 0);
+@@ -1780,6 +1799,8 @@ static int check_ext_attr(e2fsck_t ctx, 
+       struct ext2_ext_attr_entry *entry;
+       int             count;
+       region_t        region = 0;
++      struct lov_user_md_v1 *lmm = NULL;
++      struct lustre_mdt_attrs *lma = NULL;
+       int ret;
+       blk = ext2fs_file_acl_block(inode);
+@@ -1936,8 +1957,19 @@ static int check_ext_attr(e2fsck_t ctx, 
+                       entry->e_hash = hash;
+               }
++              if (e2fsck_lfsck_find_ea(ctx, (struct ext2_inode_large *)inode,
++                                       entry, block_buf +entry->e_value_offs,
++                                       &lmm, &lma) != 0) {
++                      if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
++                              return 0;
++              }
++
+               entry = EXT2_EXT_ATTR_NEXT(entry);
+       }
++
++      if (lmm)
++              e2fsck_lfsck_save_ea(ctx, ino, inode->i_generation, lmm, lma);
++
+       if (region_allocate(region, (char *)entry - (char *)header, 4)) {
+               if (fix_problem(ctx, PR_1_EA_ALLOC_COLLISION, pctx))
+                       goto clear_extattr;
+Index: e2fsprogs/e2fsck/unix.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/unix.c
++++ e2fsprogs/e2fsck/unix.c
+@@ -10,6 +10,7 @@
+  */
+ #define _XOPEN_SOURCE 600 /* for inclusion of sa_handler in Solaris */
++#define _GNU_SOURCE
+ #include <stdio.h>
+ #ifdef HAVE_STDLIB_H
+@@ -47,6 +48,9 @@ extern int optind;
+ #ifdef HAVE_DIRENT_H
+ #include <dirent.h>
+ #endif
++#ifdef HAVE_LIMITS_H
++#include <limits.h>
++#endif
+ #include "e2p/e2p.h"
+ #include "et/com_err.h"
+@@ -55,6 +59,17 @@ extern int optind;
+ #include "problem.h"
+ #include "../version.h"
++#include "ext2fs/lfsck.h"
++
++static struct option long_options[] = {
++#ifdef ENABLE_LFSCK
++      { "mdsdb", 1, NULL, 1 },
++      { "mdtdb", 1, NULL, 1 },
++      { "ostdb", 1, NULL, 2 },
++#endif
++      { 0, 0, 0, 0 }
++};
++
+ /* Command line options */
+ static int cflag;             /* check disk */
+ static int show_version_only;
+@@ -343,6 +358,15 @@ static void check_if_skip(e2fsck_t ctx)
+                            fs->super->s_checkinterval*2))
+                       reason = 0;
+       }
++#ifdef ENABLE_LFSCK
++      if (ctx->lustre_devtype & LUSTRE_TYPE) {
++              if (!reason || ctx->options & E2F_OPT_READONLY)
++                      ctx->lustre_devtype |= LUSTRE_ONLY;
++              if (!reason)
++                      reason = _(" lustre database creation");
++      }
++#endif
++
+       if (reason) {
+               fputs(ctx->device_name, stdout);
+               printf(reason, reason_arg);
+@@ -378,6 +402,15 @@ static void check_if_skip(e2fsck_t ctx)
+ skip:
+       ext2fs_close(fs);
+       ctx->fs = NULL;
++#ifdef ENABLE_LFSCK
++      if (ctx->lustre_mdsdb)
++              free(ctx->lustre_mdsdb);
++      if (ctx->lustre_ostdb)
++              free(ctx->lustre_ostdb);
++      if (ctx->lfsck_oinfo)
++              e2fsck_lfsck_cleanupdb(ctx);
++#endif /* ENABLE_LFSCK */
++
+       e2fsck_free_context(ctx);
+       exit(FSCK_OK);
+ }
+@@ -741,6 +774,7 @@ static errcode_t PRS(int argc, char *arg
+ {
+       int             flush = 0;
+       int             c, fd;
++      int             option_index;
+ #ifdef MTRACE
+       extern void     *mallwatch;
+ #endif
+@@ -789,8 +823,75 @@ static errcode_t PRS(int argc, char *arg
+       ctx->inode_badness_threshold = BADNESS_THRESHOLD;
+-      while ((c = getopt (argc, argv, "panyrcC:B:dE:fvtFVM:b:I:j:P:l:L:N:SsDk")) != EOF)
++      ctx->lustre_devtype = LUSTRE_NULL;
++
++      while ((c = getopt_long(argc, argv,
++                              "panyrcC:B:dE:fvtFVM:b:I:j:P:l:L:N:SsDk",
++                              long_options, &option_index)) != EOF)
+               switch (c) {
++#ifdef ENABLE_LFSCK
++              case 1: {
++                      char *dbpath, *tmp;
++
++                      if (!optarg)
++                              usage(ctx);
++
++                      dbpath = malloc(PATH_MAX);
++                      if (dbpath == NULL) {
++                              fprintf(stderr, "Out of memory\n");
++                              exit(1);
++                      }
++                      tmp = malloc(PATH_MAX);
++                      if (tmp == NULL) {
++                              fprintf(stderr, "Out of memory\n");
++                              exit(1);
++                      }
++
++                      strcpy(tmp, optarg);
++                      if (realpath(my_dirname(tmp), dbpath) == NULL) {
++                              fprintf(stderr, "Failure to resolve path %s\n",
++                                      optarg);
++                              exit(1);
++                      }
++
++                      strcpy(tmp, optarg);
++                      sprintf(dbpath+strlen(dbpath), "/%s", my_basename(tmp));
++                      ctx->lustre_mdsdb = dbpath;
++                      ctx->lustre_devtype |= LUSTRE_MDS;
++
++                      free(tmp);
++                      break;
++              }
++              case 2: {
++                      char *dbpath, *tmp;
++
++                      dbpath = malloc(PATH_MAX);
++                      if (dbpath == NULL) {
++                              fprintf(stderr, "Out of memory\n");
++                              exit(1);
++                      }
++                      tmp = malloc(PATH_MAX);
++                      if (tmp == NULL) {
++                              fprintf(stderr, "Out of memory\n");
++                              exit(1);
++                      }
++
++                      strcpy(tmp, optarg);
++                      if (realpath(my_dirname(tmp), dbpath) == NULL) {
++                              fprintf(stderr, "Failure to resolve path %s\n",
++                                      optarg);
++                              exit(1);
++                      }
++
++                      strcpy(tmp, optarg);
++                      sprintf(dbpath+strlen(dbpath), "/%s", my_basename(tmp));
++                      ctx->lustre_ostdb = dbpath;
++                      ctx->lustre_devtype |= LUSTRE_OST;
++
++                      free(tmp);
++                      break;
++              }
++#endif /* ENABLE_LFSCK */
+               case 'C':
+                       ctx->progress = e2fsck_update_progress;
+                       res = sscanf(optarg, "%d", &ctx->progress_fd);
+@@ -904,6 +1005,7 @@ static errcode_t PRS(int argc, char *arg
+                       break;
+               case 'v':
+                       verbose = 1;
++                      ctx->options |= E2F_OPT_VERBOSE;
+                       break;
+               case 'V':
+                       show_version_only = 1;
+@@ -922,6 +1024,16 @@ static errcode_t PRS(int argc, char *arg
+               default:
+                       usage(ctx);
+               }
++#ifdef ENABLE_LFSCK
++      if (ctx->lustre_devtype) {
++              if ((ctx->lustre_devtype != LUSTRE_MDS) &&
++                  ctx->lustre_devtype != (LUSTRE_MDS | LUSTRE_OST)) {
++                      com_err(ctx->program_name, 0,
++                              _("must specify --mdsdb with --ostdb"));
++                      usage(ctx);
++              }
++      }
++#endif /* ENABLE_LFSCK */
+       if (show_version_only)
+               return 0;
+       if (optind != argc - 1)
+@@ -1728,6 +1840,14 @@ no_journal:
+       ext2fs_close(fs);
+       ctx->fs = NULL;
+       free(ctx->journal_name);
++#ifdef ENABLE_LFSCK
++      if (ctx->lfsck_oinfo)
++              e2fsck_lfsck_cleanupdb(ctx);
++      if (ctx->lustre_mdsdb)
++              free(ctx->lustre_mdsdb);
++      if (ctx->lustre_ostdb)
++              free(ctx->lustre_ostdb);
++#endif /* ENABLE_LFSCK */
+       e2fsck_free_context(ctx);
+       remove_error_table(&et_ext2_error_table);
+Index: e2fsprogs/misc/mke2fs.c
+===================================================================
+--- e2fsprogs.orig/misc/mke2fs.c
++++ e2fsprogs/misc/mke2fs.c
+@@ -1398,7 +1398,7 @@ profile_error:
+                       }
+                       break;
+               case 'v':
+-                      verbose = 1;
++                      verbose++;
+                       break;
+               case 'F':
+                       force++;
+Index: e2fsprogs/util/subst.conf.in
+===================================================================
+--- e2fsprogs.orig/util/subst.conf.in
++++ e2fsprogs/util/subst.conf.in
+@@ -5,6 +5,8 @@ SS_DIR                 @SS_DIR@
+ E2FSPROGS_MONTH               @E2FSPROGS_MONTH@
+ E2FSPROGS_YEAR                @E2FSPROGS_YEAR@
+ E2FSPROGS_VERSION     @E2FSPROGS_VERSION@
++LFSCK_CMT             @LFSCK_CMT@
++LFSCK_MAN             @LFSCK_MAN@
+ SIZEOF_LONG_LONG      @SIZEOF_LONG_LONG@
+ SIZEOF_LONG           @SIZEOF_LONG@
+ SIZEOF_INT            @SIZEOF_INT@
+Index: e2fsprogs/e2fsprogs.spec.in
+===================================================================
+--- e2fsprogs.orig/e2fsprogs.spec.in
++++ e2fsprogs/e2fsprogs.spec.in
+@@ -15,10 +15,14 @@ Prereq: /sbin/ldconfig
+ BuildRoot: %{_tmppath}/%{name}-root
+ %if %{_vendor} == "suse"
+ Group: System/Filesystems
++@LFSCK_CMT@Requires: db >= @DB4VERSION@
++@LFSCK_CMT@BuildRequires: db-devel >= 4.1 texinfo
+ Provides: e2fsbn ext2fs libcom_err = %{version} ldiskfsprogs = %{version}
+ Obsoletes: ext2fs libcom_err < %{version}
+ %else
+ Group: System Environment/Base
++@LFSCK_CMT@Requires: db4 >= @DB4VERSION@
++@LFSCK_CMT@BuildRequires: db4-devel >= 4.1 texinfo
+ Provides: e2fsprogs-libs = %{version} ldiskfsprogs = %{version}
+ Obsoletes: e4fsprogs e2fsprogs-libs < %{version}
+ %endif
+@@ -71,8 +75,8 @@ SMP systems.
+ %setup
+ %build
+-%configure --enable-elf-shlibs --enable-nls \
+-      %{?extra_config_flags:%extra_config_flags}
++%configure --enable-elf-shlibs --enable-nls --with-lustre=@LUSTRE@ \
++      %{?extra_config_flags:%extra_config_flags} @LFSCK_CMT@ --enable-lfsck
+ make
+ make check
+@@ -145,6 +149,7 @@ exit 0
+ %{_sbindir}/mklost+found
+ %{_sbindir}/e2freefrag
+ %{_sbindir}/e4defrag
++@LFSCK_CMT@%{_sbindir}/lfsck
+ %{_root_libdir}/libblkid.so.*
+ %{_root_libdir}/libcom_err.so.*
+@@ -170,6 +175,7 @@ exit 0
+ %{_mandir}/man8/debugfs.8*
+ %{_mandir}/man8/dumpe2fs.8*
+ %{_mandir}/man8/e2fsck.8*
++@LFSCK_CMT@%{_mandir}/man8/lfsck.8*
+ %{_mandir}/man8/findfs.8*
+ %{_mandir}/man8/fsck.ext2.8*
+ %{_mandir}/man8/fsck.ext3.8*
+Index: e2fsprogs/e2fsck/lfsck.8.in
+===================================================================
+--- /dev/null
++++ e2fsprogs/e2fsck/lfsck.8.in
+@@ -0,0 +1,78 @@
++.\" -*- nroff -*-
++.\" Copyright 2004 by Andreas Dilger.  All Rights Reserved.
++.\" This file may be copied under the terms of the GNU Public License.
++.\"
++.TH LFSCK 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
++.SH NAME
++lfsck \- check a Lustre distributed filesystem
++.SH SYNOPSIS
++.B lfsck
++[
++.B \-cdfhlnv
++]
++.B \--mdsdb
++.I mds_database_file
++.B \--ostdb
++.IR "ost1_database_file " [ "ost2_database_file " ...]
++.I filesystem
++.SH DESCRIPTION
++.B lfsck
++is used to check and repair the distributed coherency of a Lustre filesystem.
++.PP
++.I filesystem
++is the mountpoint of the Lustre filesystem to be checked. e.g.
++.IR /mnt/lustre ).
++.SH DESCRIPTION
++Lfsck is used to do the distributed coherency checking of a Lustre filesystem
++after
++.B e2fsck
++has been run on each of the local MDS and OST device filesystems.
++.B Lfsck
++will ensure that objects are not referenced by multiple MDS files, that there
++are no orphan objects on the OSTs (objects that do not have any file on the
++MDS which references them), and that all of the objects referenced by the
++MDS exist.  Under normal circumstances Lustre will maintain such coherency
++by distributed logging mechanisms, but under exceptional circumstances that
++may fail (e.g. disk failure, filesystem corruption leading to e2fsck repair).
++.SH OPTIONS
++.TP
++.B \-c
++Create (empty) missing OST objects referenced by MDS inodes.
++.TP
++.B \-d
++Delete orphaned objects from the filesystem.  Since objects on the OST are
++often only one of several stripes of a file it can be difficult to put
++multiple objects back together into a single usable file.
++.TP
++.B \-h
++Print a brief help message.
++.TP
++.B \-l
++Put orphaned objects into a lost+found directory in the root of the filesystem.
++.TP
++.B \-n
++Do not repair the filesystem, just perform a read-only check (default).
++.TP
++.B \-v
++Verbose operation - more verbosity by specifing option multiple times.
++.TP
++.BI \-\-mdsdb " mds_database_file"
++The MDS database file created by running
++.B e2fsck --mdsdb mds_database_file device
++on the MDS backing device.  This is required.
++.TP
++.BI \-\-ostdb " ost1_database_file " [ "ost2_database_file " ...]
++The OST database files created by running
++.B e2fsck --ostdb ost_database_file device
++on each of the OST backing devices.  These are required, unless an OST is
++unavailable, in which case all objects thereon will be considered missing.
++.SH REPORTING BUGS
++Bugs should be reported to Sun Microsystems, Inc. via Bugzilla:
++http://bugzilla.lustre.org/
++.SH AUTHOR
++This version of
++.B lfsck
++was originally written by Liam Kelleher <liam.kelleher@hp.com>
++and maintained by Andreas Dilger <adilger@whamcloud.com>
++.SH SEE ALSO
++.BR e2fsck (8)
+Index: e2fsprogs/e2fsck/lfsck.c
+===================================================================
+--- /dev/null
++++ e2fsprogs/e2fsck/lfsck.c
+@@ -0,0 +1,2088 @@
++/* -*- mode: c; c-basic-offset: 8; -*-
++ * vim:shiftwidth=8:tabstop=8:
++ *
++ * GPL HEADER START
++ *
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 only,
++ * as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * General Public License version 2 for more details (a copy is included
++ * in the LICENSE file that accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License
++ * version 2 along with this program; If not, see
++ * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
++ *
++ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
++ * CA 95054 USA or visit www.sun.com if you need additional information or
++ * have any questions.
++ *
++ * GPL HEADER END
++ */
++/*
++ * Copyright (c) 2004  Hewlett-Packard Co.
++ * Copyright 2004, 2010, Oracle and/or its affiliates. All rights reserved.
++ * Use is subject to license terms.
++ */
++/***********************************************************************
++ * This program takes as input files generated by running e2fsck on
++ * the mds and ost filesystems. The file generated for each ost
++ * contains a table including the object id and size for each object
++ * extant on the ost in each entry.
++ * The file generated from scanning the mds filesystem with e2fsck
++ * contains multiple tables one for each ost. In each table an entry
++ * contains the mds fid as well as the object id on the appropriate
++ * ost. In addition there is an additional table that holds the mds_fid
++ * and the containing directory fid for each entry. This is used for
++ * name lookup.
++ * There are three basic checks
++ * 1) Make sure that multiple mds entries do not reference the same object
++ * 2) Cross reference each object on each ost to make sure a "containing"
++ *    file for this exists on the mds
++ * 3) For each file on the mds make sure that the associated objects exist
++ *    on the osts
++ * These checks and potential correction for errors found are run from
++ * run_pass*
++ * Each of these checks is just iterate through the appropriate table and
++ * cross check against another table and if errors are found repair.
++ ***************************************************************************/
++#define _GNU_SOURCE
++#include <pthread.h>
++#include <stdio.h>
++#include <stdarg.h>
++#include <string.h>
++#include <time.h>
++#include <errno.h>
++#include <limits.h>
++#include <stdlib.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <utime.h>
++#include <unistd.h>
++#include <sys/mman.h>
++#include <getopt.h>
++#include <mntent.h>
++#include <dirent.h>
++#ifdef HAVE_SYS_IOCTL_H
++#include <sys/ioctl.h>
++#endif
++#include "../version.h"
++#include "e2fsck.h"
++#include "ext2fs/lfsck.h"
++#include "ext2fs/ext2fs.h"
++
++struct lfsck_fids {
++      int depth;
++      struct lu_fid *fids;
++};
++
++struct lfsck_thread_info {
++      struct lfsck_mds_hdr *mds_hdr;
++      DB *mds_direntdb;
++      DB *mds_sizeinfodb;
++      __u32 start_ost_idx;
++      __u32 end_ost_idx;
++      int status;
++};
++
++struct lfsck_saved_duplicates {
++      struct lu_fid   ld_mds_fid;
++      struct ost_id   ld_oi;
++      __u32           ld_ost_idx;
++      char            *ld_link;
++};
++
++#ifndef O_LARGEFILE
++#define O_LARGEFILE 0
++#endif
++
++#define LOG_PATH "/var/log/lfsck.log"
++#define RLIMIT 1024
++
++/* Procedure declarations */
++
++char *progname = "lfsck";
++FILE *logfile;
++
++int lfsck_help;
++int lfsck_save;
++int lfsck_delete;
++int lfsck_create;
++int lfsck_force;
++int lfsck_verbose;
++int lfsck_yes;
++
++int num_threads = 1;
++
++char mnt_path[PATH_MAX];
++char *mds_file;
++char lostandfounddir[PATH_MAX];
++char dupedir[PATH_MAX];
++char *ost_files[LOV_MAX_OSTS];
++int num_ost_files;
++
++struct obd_uuid lfsck_uuid[LOV_MAX_OSTS];
++int lov_tgt_count = LOV_MAX_OSTS;
++
++struct lfsck_saved_duplicates *lfsck_duplicates;
++int lfsck_dup_saved;
++int fixed;
++int fix_failed;
++
++pthread_cond_t init_cond = PTHREAD_COND_INITIALIZER;
++pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
++pthread_mutex_t phase_lock = PTHREAD_MUTEX_INITIALIZER;
++pthread_mutex_t size_lock = PTHREAD_MUTEX_INITIALIZER;
++int all_started;
++
++int lfsck_path2fid(const char *path, struct lu_fid *fid)
++{
++       struct stat st;
++       long generation;
++       int fd;
++       int rc = 0;
++
++#ifdef LL_IOC_PATH2FID
++       rc = llapi_path2fid(path, fid);
++       if (rc == 0 || rc != -ENOTTY)
++               return rc;
++#endif
++       /* LL_IOC_PATH2FID was landed in 1.8.2.  If it doesn't exist at compile
++        * time, or it fails at runtime with a return ENOTTY indicating that
++        * the ioctl is unimplemented, emulate it here for the older clients.
++        * Assume the server is running Lustre 1.x and create an IGIF FID,
++        * since < 1.8.4 will not work properly with 2.x servers anyway. */
++       fd = open(path, O_RDONLY);
++       if (fd < 0)
++               return -errno;
++
++       rc = fstat(fd, &st);
++       if (rc < 0) {
++               rc = -errno;
++               goto out;
++       }
++       fid->f_seq = st.st_ino;
++
++       rc = ioctl(fd, FSFILT_IOC_GETVERSION, &generation);
++       if (rc < 0) {
++               rc = -errno;
++               goto out;
++       }
++       fid->f_oid = generation;
++       fid->f_ver = 0;
++
++out:
++       close(fd);
++       return rc;
++}
++
++#define VERBOSE(lvl, fmt, args...)                                    \
++do { if (lfsck_verbose >= lvl) printf(fmt, ## args); } while (0)
++
++int log_open()
++{
++      time_t tm;
++
++      if ((logfile = fopen(LOG_PATH, "a")) == NULL) {
++              fprintf(stderr, "%s: Failed to open log file %s\n",
++                      progname, LOG_PATH);
++              return (-EPERM);
++      }
++
++      time(&tm);
++      fprintf(logfile, "===============================================\n\n");
++      fprintf(logfile, "Starting lfsck %s\n", ctime(&tm));
++      return(0);
++}
++
++int log_close(int status)
++{
++      time_t tm;
++
++      if (logfile == NULL)
++              return(0);
++
++      time(&tm);
++      if (status < 0) {
++              fprintf(logfile, "ERROR: lfsck aborted\n");
++      } else {
++              fprintf(logfile, "lfsck run completed:  %s\n",ctime(&tm));
++      }
++      fprintf(logfile, "===============================================\n\n");
++
++      fclose(logfile);
++      return(0);
++}
++
++void log_write(char *fmt, ...)
++{
++      va_list args;
++
++      if (logfile) {
++              va_start(args, fmt);
++              vfprintf(logfile, fmt, args);
++              va_end(args);
++      }
++      va_start(args, fmt);
++      vfprintf(stderr, fmt, args);
++      va_end(args);
++}
++
++void usage()
++{
++      printf("\n");
++      printf("usage: lfsck [-cdfhlnv] --mdsdb mdsdb "
++             "--ostdb ostdb1 [ostdb2 ...] filesystem\n\n");
++      printf("\t-m|--mdsdb mdsdb  MDS database from e2fsck --mdsdb\n");
++      printf("\t-o|--ostdb ostdb  OST databases from e2fsck --ostdb\n");
++      printf("\tfilesytem         full path of lustre mountpoint\n");
++      printf("\t[-c|--create]     create missing objects\n");
++      printf("\t[-d|--delete]     delete orphan objects\n");
++      printf("\t[-f|--force]      force running if fs appears unmounted\n");
++      printf("\t[-h|--help]       print this message\n");
++      printf("\t[-l|--lostfound]  save orphans objects to lost+found\n");
++      printf("\t[-n|--nofix]      do not fix filesystem errors (default)\n");
++      printf("\t[-v|--verbose]    print verbose runtime messages\n");
++      //printf("\t[-y|--yes]        do all cleanup automatically\n");
++      printf("\n");
++}
++
++/*
++ * Get the lov config for the filesystem - this is primarily used to correlate
++ * each ost db file with its index in the lov configuration. Obviously this is
++ * critical.
++ */
++int get_lov_config()
++{
++      int fd, rc;
++
++      fd = open(mnt_path, O_RDONLY);
++      if (fd < 0) {
++              log_write("Error: opening %s\n", mnt_path);
++              return (-errno);
++      }
++
++      rc = llapi_lov_get_uuids(fd, lfsck_uuid, &lov_tgt_count);
++
++      close(fd);
++      return rc;
++}
++
++int parse_args(int argc, char *argv[])
++{
++      int option_index = 0;
++      char *path_name = NULL;
++      struct option long_options[] = {
++              { "create", 1, NULL, 'c' },
++              { "delete", 0, NULL, 'd' },
++              { "force", 0, NULL, 'f' },
++              { "help", 0, NULL, 'h' },
++              { "lostfound", 0, NULL, 'l' },
++              { "mdsdb", 1, NULL, 'm' },
++              { "mdtdb", 1, NULL, 'm' },
++              { "nofix", 0, NULL, 'n' },
++              { "ostdb", 1, NULL, 'o' },
++              { "threads", 1, NULL, 't' },
++              { "verbose", 0, NULL, 'v' },
++              //{ "yes", 0, NULL, 'y' },
++              { 0, 0, 0, 0 }
++      };
++      struct mntent *mnt_info;
++      char tmp[PATH_MAX];
++      char *dbpath;
++      int c, found;
++      char *p1;
++      FILE *fp;
++
++      if (argc < 6 ) {
++              return(-EINVAL);
++      }
++
++      while ((c = getopt_long(argc, argv, "-cdfhlm:no:t:vy",
++                              long_options, &option_index)) != -1) {
++              switch (c) {
++              case 'c':
++                      lfsck_create++;
++                      break;
++              case 'd':
++                      lfsck_delete++;
++                      break;
++              case 'f':
++                      lfsck_force++;
++                      break;
++              case 'h':
++                      lfsck_help++;
++                      break;
++              case 'l':
++                      lfsck_save++;
++                      break;
++              case 'm':
++                      VERBOSE(1, "MDSDB: %s\n", optarg);
++                      dbpath = malloc(PATH_MAX);
++                      if (dbpath == NULL) {
++                              fprintf(stderr, "error allocating dbpath\n");
++                              return -ENOMEM;
++                      }
++                      strcpy(tmp, optarg);
++                      if (realpath(my_dirname(tmp), dbpath) == NULL) {
++                              fprintf(stderr, "Failure to resolve path %s\n",
++                                      optarg);
++                              free(dbpath);
++                              exit(1);
++                      }
++
++                      strcpy(tmp, optarg);
++                      sprintf(dbpath+strlen(dbpath), "/%s", my_basename(tmp));
++                      mds_file = dbpath;
++                      break;
++              case 'n':
++                      lfsck_create = 0;
++                      lfsck_delete = 0;
++                      lfsck_save = 0;
++                      break;
++              case 1:
++                      if (optind == argc) { /* last one is mountpoint */
++                              VERBOSE(1, "MOUNTPOINT: %s\n", optarg);
++                              path_name = optarg;
++                              break;
++                      }
++                      /* Otherwise it is another ostdb file */
++              case 'o':
++              {
++                      char *ost_path;
++
++                      VERBOSE(1, "OSTDB[%u]: %s\n", num_ost_files, optarg);
++                      p1 = optarg;
++                      do {
++                              dbpath = malloc(PATH_MAX);
++                              if (dbpath == NULL) {
++                                      fprintf(stderr,
++                                             "error allocate ost_files[%d]\n",
++                                             num_ost_files);
++                                      return -ENOMEM;
++                              }
++
++                              /* Old-style arguments are comma separated */
++                              ost_path = strsep(&p1, ",");
++                              strcpy(tmp, ost_path);
++                              if (realpath(my_dirname(tmp), dbpath) == NULL) {
++                                      fprintf(stderr, "Failure to resolve "
++                                              "path %s\n", optarg);
++                                      for (c = 0; c < num_ost_files; c++)
++                                              free(ost_files[c]);
++                                      free(dbpath);
++                                      exit(1);
++                              }
++
++                              strcpy(tmp, ost_path);
++                              sprintf(dbpath+strlen(dbpath), "/%s",
++                                      my_basename(tmp));
++                              ost_files[num_ost_files] = dbpath;
++                              num_ost_files++;
++                      } while (p1 != NULL);
++                      break;
++              }
++              case 't':
++                      num_threads = strtol(optarg, NULL, 0);
++                      if (num_threads == ULONG_MAX)
++                              return (-EINVAL);
++
++                      if (num_threads > 128)
++                              num_threads = 128;
++                      if (num_threads == 0)
++                              num_threads = 1;
++                      break;
++              case 'v':
++                      lfsck_verbose++;
++                      break;
++              case 'y':
++                      lfsck_yes++;
++                      break;
++              default:
++                      fprintf(stderr, "unknown option %c\n", c);
++                      return(-EINVAL);
++              }
++      }
++
++      if (path_name == NULL)
++              path_name = argv[optind];
++
++      if (lfsck_yes && !lfsck_save && !lfsck_delete && !lfsck_create) {
++              fprintf(stderr, "--yes requires either --save or --delete, or"
++                      "--create\n");
++              return(-EINVAL);
++      }
++
++      if (realpath(path_name, mnt_path) == NULL) {
++              fprintf(stderr, "error getting real mount path_name\n");
++              return (-EINVAL);
++      }
++      fp = setmntent(MOUNTED, "r");
++      if (fp == NULL) {
++              fprintf(stderr, "error opening /etc/mtab\n");
++              return (-EINVAL);
++      }
++
++      found = 0;
++      while ((mnt_info = getmntent(fp)) != NULL) {
++              if (strcmp(mnt_info->mnt_dir, mnt_path) == 0 &&
++                  llapi_is_lustre_mnttype(mnt_info->mnt_type)) {
++                      found = 1;
++                      break;
++              }
++      }
++      endmntent(fp);
++
++      if (!found) {
++              if (lfsck_force) {
++                      fprintf(stderr, "lfsck: %s unmounted?  forcing\n",
++                              mnt_path);
++              } else {
++                      fprintf(stderr, "lfsck: %s not mounted\n", mnt_path);
++                      return(-EINVAL);
++              }
++      }
++
++      if (mds_file == NULL || ost_files[0] == NULL) {
++              fprintf(stderr, "--mdsdb or --ostdb unspecified\n");
++              return(-EINVAL);
++      }
++
++      return(0);
++}
++
++/*
++ * This is called from lfsck_get_path and also recursively.
++ * This function is used on error paths when the name of an mds fid has
++ * to be determined. It relies on the order of directory search that was
++ * run in e2fsck when generating the mds_fid + containing dir table.
++ * It searches through the table for the correct mds_fid. When this
++ * is found a list of fids which are the fids of the directory tree up
++ * to the containing directory of the sought for fid is returned.
++ * When called recursively it continues search from the current point and
++ * when the recursive call returns the search is continued from the
++ * current search point as well. Basically is just traverses the list once.
++ * For a file like <mntpt>/aaa/ccc/ddd the fids of aaa ccc and the fid
++ * for ddd would also be returned.
++ */
++static int lfsck_get_fids(struct lu_fid *mds_fid, DB *mds_direntdb,
++                        int depth, struct lfsck_fids *lfidp)
++{
++      struct lfsck_mds_dirent mds_dirent;
++      int rc = 0;
++      DBT key, data;
++
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      key.data = mds_fid;
++      key.size = sizeof(*mds_fid);
++      data.data = &mds_dirent;
++      data.size = data.ulen = sizeof(mds_dirent);
++      data.flags = DB_DBT_USERMEM;
++
++      rc = mds_direntdb->get(mds_direntdb, NULL, &key, &data, 0);
++      if (rc && !lfsck_is_dirfid_root(mds_fid)) {
++              log_write("Failed to find fid "DFID": %s\n", PFID(mds_fid),
++                        db_strerror(rc));
++              return (-ENOENT);
++      }
++      letocpu_mds_dirent(&mds_dirent);
++      if (lfsck_is_dirfid_root(&mds_dirent.mds_dirfid)) {
++              lfidp->fids = malloc(sizeof(*lfidp->fids) * (depth + 1));
++              if (lfidp->fids == NULL) {
++                      return (-ENOMEM);
++              }
++              lfidp->depth = depth;
++              lfidp->fids[depth] = mds_dirent.mds_fid;
++              return (0);
++      }
++      rc = lfsck_get_fids(&mds_dirent.mds_dirfid, mds_direntdb,
++                          depth + 1, lfidp);
++      if (rc) {
++              return(rc);
++      }
++
++      lfidp->fids[depth] = mds_dirent.mds_fid;
++      return(0);
++}
++
++/* This function determines a path to a file given an mds fid.
++ * The workhorse function is lfsck_get_fids which once given a
++ * fid return a list of directory fids from the "root" directory to
++ * the fid in question. Using these fids we can construct the path to
++ * the file by using readir()
++ */
++static int lfsck_get_path(struct lu_fid *mds_fid, DB *mds_direntdb,
++                        char *path, int path_len)
++{
++      struct lfsck_fids lfids;
++      DIR *dir;
++      struct dirent *dent;
++      int rc, i;
++      int cur_len = 0;
++
++      VERBOSE(2, "lookup path for FID "DFID"\n", PFID(mds_fid));
++
++      lfids.fids = NULL;
++      lfids.depth = 0;
++
++      rc = lfsck_get_fids(mds_fid, mds_direntdb, 0, &lfids);
++      if (rc != 0) {
++              rc = -ENOENT;
++              goto out;
++      }
++
++      if (strlen(mnt_path) + 1 > path_len) {
++              rc = -ENOMEM;
++              goto out;
++      }
++      cur_len = strlen(mnt_path);
++      path[strlen(mnt_path)] = 0;
++      memcpy(path, mnt_path, strlen(mnt_path));
++      /* Skip the first dir since this would be "ROOT" */
++      rc = 0;
++      for (i = lfids.depth - 1; i >= 0; i--) {
++              dir = opendir(path);
++              if (dir == NULL) {
++                      rc = -errno;
++                      goto out;
++              }
++              while (1) {
++                      char path_tmp[PATH_MAX];
++                      struct lu_fid fid;
++
++                      dent = readdir(dir);
++                      if (dent == NULL) {
++                              closedir(dir);
++                              rc = -ENOENT;
++                              goto out;
++                      }
++
++                      if (strlen(path) + strlen(dent->d_name) +2 >= PATH_MAX){
++                              closedir(dir);
++                              rc = -ENAMETOOLONG;
++                              goto out;
++                      }
++
++                      sprintf(path_tmp, "%s/%s", path, dent->d_name);
++                      rc = lfsck_path2fid(path_tmp, &fid);
++                      if (rc)
++                              continue;
++
++                      rc = 0;
++                      if (lfsck_fidcmp(&fid, &lfids.fids[i]) == 0) {
++                              if (cur_len + 1 + strlen(dent->d_name) >
++                                  path_len) {
++                                      rc = -ENOMEM;
++                                      closedir(dir);
++                                      goto out;
++                              }
++                              path[cur_len] = '/';
++                              cur_len++;
++                              memcpy(&path[cur_len], dent->d_name,
++                                     strlen(dent->d_name));
++                              cur_len += strlen(dent->d_name);
++                              path[cur_len] = 0;
++                              closedir(dir);
++                              break;
++                      }
++              }
++      }
++out:
++      if (lfids.fids)
++              free(lfids.fids);
++      return(rc);
++}
++
++/*
++ * Used by pass1 to save the ids of files which reference the same
++ * objects. This is then used by pass4 to repair these files
++ */
++static int lfsck_save_duplicate(const struct lfsck_mds_objent *mds_obj)
++{
++      VERBOSE(2, "save duplicate object %u:"DOIF" FID "DFID"\n",
++              mds_obj->mds_ostidx, POIF(&mds_obj->mds_oi),
++              PFID(&mds_obj->mds_fid));
++
++      pthread_mutex_lock(&phase_lock);
++      if (lfsck_duplicates == NULL) {
++              lfsck_duplicates = malloc(sizeof(*lfsck_duplicates) *
++                                        RLIMIT);
++              if (lfsck_duplicates == NULL)
++                      return (-EINVAL);
++
++      } else if (!((lfsck_dup_saved + 1) % RLIMIT)) {
++              size_t size = (((lfsck_dup_saved + 1) / RLIMIT) + 1 ) *
++                            sizeof(*lfsck_duplicates) * RLIMIT;
++              void *tmp = realloc(lfsck_duplicates, size);
++
++              if (tmp == NULL)
++                      return (-ENOMEM);
++
++              lfsck_duplicates = tmp;
++      }
++      lfsck_duplicates[lfsck_dup_saved].ld_mds_fid = mds_obj->mds_fid;
++      lfsck_duplicates[lfsck_dup_saved].ld_oi = mds_obj->mds_oi;
++      lfsck_duplicates[lfsck_dup_saved].ld_ost_idx = mds_obj->mds_ostidx;
++      lfsck_duplicates[lfsck_dup_saved].ld_link = NULL;
++      lfsck_dup_saved++;
++      pthread_mutex_unlock(&phase_lock);
++      return(0);
++}
++
++/*
++ * Check for duplicate ost objects on mds. Run through the table of
++ * mds_fid/ost object to make sure that each ost object is only
++ * refrenced by one mds entry. If a duplicate is found save the information
++ * for repair in pass4
++ */
++int lfsck_run_pass1(__u32 ost_idx, DB *mds_ostdb, DB *ost_db, DB *mds_direntdb)
++{
++      int i = 0;
++      int error = 0;
++      int rc = 0;
++      struct lfsck_mds_objent mds_obj, mds_obj2;
++      unsigned long count = 0;
++      DBT key, data;
++      DBC *dbcp = NULL;
++
++      log_write("%s: ost_idx %d: pass1: check for duplicate objects\n",
++                progname, ost_idx);
++
++      if ((rc = mds_ostdb->cursor(mds_ostdb, NULL, &dbcp, 0)) != 0) {
++              log_write("%s: error acquiring cursor for database: %s\n",
++                        progname, db_strerror(rc));
++              goto out;
++      }
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      data.data = &mds_obj;
++      data.size = data.ulen = sizeof(mds_obj);
++      data.flags = DB_DBT_USERMEM;
++
++      while ((rc = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0)  {
++              DBT data_dup;
++              db_recno_t num_dup;
++
++              count++;
++              if ((rc = dbcp->c_count(dbcp, &num_dup, 0)) != 0) {
++                      log_write("%s: [%u] getting object refcount: %s\n",
++                                progname, ost_idx, db_strerror(rc));
++                      rc = -EINVAL;
++                      goto out;
++              }
++              if (num_dup <= 1)
++                      continue;
++
++              letocpu_mds_objent(&mds_obj);
++
++              if (lfsck_save_duplicate(&mds_obj))
++                      fix_failed++;
++
++              for (i = 1; i < num_dup; i++) {
++                      memset(&data_dup, 0, sizeof(data_dup));
++                      data_dup.data = &mds_obj2;
++                      data_dup.size = data_dup.ulen = sizeof(mds_obj2);
++                      data_dup.flags = DB_DBT_USERMEM;
++                      rc = dbcp->c_get(dbcp, &key,&data_dup,DB_NEXT);
++                      if (rc != 0) {
++                              log_write("%s: acquiring duplicate info: %s\n",
++                                        progname, db_strerror(rc));
++                              rc = -EINVAL;
++                              goto out;
++                      }
++                      letocpu_mds_objent(&mds_obj2);
++
++                      if (!lfsck_fidcmp(&mds_obj.mds_fid,&mds_obj2.mds_fid)) {
++                              log_write("%s: [%u] hard link on FID "DFID" is"
++                                        " not a duplicate object "DOIF"\n",
++                                        progname, PFID(&mds_obj.mds_fid),
++                                        ost_idx, POIF(&mds_obj.mds_oi));
++                              continue;
++                      }
++
++                      if (lfsck_save_duplicate(&mds_obj2))
++                              fix_failed++;
++              }
++      }
++
++      if (rc != DB_NOTFOUND) {
++              log_write("%s: error reading from inode database: %s\n",
++                        progname, db_strerror(rc));
++              rc = -EINVAL;
++              goto out;
++      }
++
++      rc = 0;
++      if (error == 0) {
++              log_write("%s: ost_idx %d: pass1 OK (%lu files total)\n",
++                        progname, ost_idx, count);
++      } else {
++              log_write("%s: ost_idx %d: pass1 ERROR: %d duplicate "
++                        "entries found (fixed in pass4) (%lu files total)\n",
++                        progname, ost_idx, error, count);
++      }
++out:
++      if (dbcp)
++              dbcp->c_close(dbcp);
++
++      return(rc);
++}
++
++#ifndef LL_IOC_RECREATE_OBJ
++#define LL_IOC_RECREATE_OBJ _IOW ('f', 157, long)          /* 1.x object IDs */
++#endif
++#ifndef LL_IOC_RECREATE_FID
++#define LL_IOC_RECREATE_FID _IOW ('f', 157, struct lu_fid) /* 2.x FIDs */
++#endif
++
++/* If an MDS file is missing an object recreate object using an ioctl call */
++static int lfsck_recreate_obj(int cmd, void *creat, struct ost_id *oi,
++                            __u32 ost_idx, char *path)
++{
++
++      int fd;
++      int rc;
++
++      if (!lfsck_create) {
++              log_write("[%u]: %s object %s "DOIF" not created\n", ost_idx,
++                        path,cmd == LL_IOC_RECREATE_FID? "FID":"ID",POIF(oi));
++              return 0;
++      }
++
++      fd = open(path, O_LARGEFILE | O_RDONLY, 0);
++      if (fd < 0) {
++              rc = -errno;
++              log_write("[%u]: FAILED to open %s missing obj "DOIF"\n",
++                        ost_idx, path, POIF(oi));
++              fix_failed++;
++              return rc;
++      }
++
++      rc = ioctl(fd, cmd, &creat);
++      if (rc) {
++              rc = -errno;
++              log_write("[%u]: failed to recreate %s missing obj "DOIF"\n",
++                        ost_idx, path, POIF(oi));
++              fix_failed++;
++      } else {
++              log_write("[%u]: recreated %s missing obj "DOIF"\n",
++                        ost_idx, path, POIF(oi));
++              fixed++;
++      }
++      close(fd);
++
++      return(rc);
++}
++
++/*
++ * If size checking is enabled see if this ost is "adding" to the file size
++ * if it is then just calculate the new size and save.
++ */
++static int lfsck_calc_size(struct lfsck_mds_objent *mds_obj,
++                         struct lfsck_ost_objent *ost_obj,
++                         DB *mds_sizeinfodb)
++{
++      int rc = 0;
++#ifdef LFSCK_CHECK_SIZE
++      struct lfsck_mds_szinfo mds_szinfo1;
++      __u64 calc_size;
++      DBT key, data;
++      __u64 chunks, rem;
++
++      if (ost_obj->ost_size == 0)
++              return(0);
++
++      pthread_mutex_lock(&size_lock);
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      key.data = &mds_obj->mds_fid;
++      key.size = sizeof(mds_obj->mds_fid);
++      data.data = &mds_szinfo1;
++      data.size = data.ulen = sizeof(mds_szinfo1);
++      data.flags = DB_DBT_USERMEM;
++      if ((rc = mds_sizeinfodb->get(mds_sizeinfodb, NULL, &key, &data, 0))) {
++              log_write("Failure to get sizeinfo "LPU64"\n",mds_obj->mds_fid);
++              pthread_mutex_unlock(&size_lock);
++              return (-ENOENT);
++      }
++      letocpu_mds_szinfo(&mds_szinfo1);
++      assert (mds_szinfo1.mds_stripe_pattern == LOV_PATTERN_RAID0);
++      chunks = ost_obj->ost_size / mds_szinfo1.mds_stripe_size;
++      rem = ost_obj->ost_size % mds_szinfo1.mds_stripe_size;
++      if (rem == 0) {
++              calc_size = (((chunks - 1 )* mds_szinfo1.mds_stripe_size)
++                          * mds_szinfo1.mds_stripe_count);
++              calc_size += mds_szinfo1.mds_stripe_size *
++                           (mds_obj->mds_ostoffset + 1);
++      } else {
++              calc_size = ((chunks * mds_szinfo1.mds_stripe_size)
++                          * mds_szinfo1.mds_stripe_count);
++              if (mds_obj->mds_ostoffset == 0) {
++                      calc_size += rem;
++              } else {
++                      calc_size += mds_szinfo1.mds_stripe_size *
++                                   mds_obj->mds_ostoffset;
++                      calc_size += rem;
++              }
++      }
++      if (calc_size > mds_szinfo1.mds_calc_size) {
++              mds_szinfo1.mds_calc_size = calc_size;
++              memset(&key, 0, sizeof(key));
++              memset(&data, 0, sizeof(data));
++              key.data = &mds_obj->mds_fid;
++              key.size = sizeof(mds_obj->mds_fid);
++              data.data = &mds_szinfo1;
++              data.size = sizeof(mds_szinfo1);
++              cputole_mds_szinfo(&mds_szinfo1);
++              /* Make sure we overwrite */
++              if ((rc = mds_sizeinfodb->put(mds_sizeinfodb,
++                                            NULL, &key, &data, 0)) != 0) {
++                      log_write("Failure to update sizeinfo data\n");
++                      pthread_mutex_unlock(&size_lock);
++                      return (-EIO);
++              }
++      }
++      pthread_mutex_unlock(&size_lock);
++#endif /* LFSCK_CHECK_SIZE */
++      return(rc);
++}
++
++/*
++ * Check for dangling inode.
++ * pass runs through the mds table for an ost and checks again the ost table
++ * that the object refrenced on the mds exists on the ost
++ */
++int lfsck_run_pass2(__u32 ost_idx, struct lfsck_mds_hdr *mds_hdr,
++                  DB *mds_ostdb, DB *ostdb,
++                  DB *mds_direntdb, DB *mds_sizeinfodb)
++{
++      struct lfsck_mds_objent mds_obj;
++      struct lfsck_ost_objent ost_obj;
++      int error = 0, rc = 0;
++      unsigned long count = 0;
++      char *path;
++      DBC *dbcp = NULL;
++      DBT key, data;
++      __u64 max_objid = mds_hdr->mds_max_ost_id[ost_idx];
++      __u64 mds_connect_flags = 0;
++
++      rc = llapi_get_connect_flags(mnt_path, &mds_connect_flags);
++      /* Ignore the error here, and assume it is an older 1.8.x without
++       * LL_IOC_GET_CONNECT_FLAGS.  We only use this for 2.x detection. */
++
++      log_write("lfsck: ost_idx %d: pass2: check for missing inode objects\n",
++                ost_idx);
++
++      path = malloc(PATH_MAX);
++      if (path == NULL) {
++              log_write("lfsck: [%u]: pass2 ERROR: out of memory\n",
++                         ost_idx);
++              return (-ENOMEM);
++      }
++
++      rc = mds_ostdb->cursor(mds_ostdb, NULL, &dbcp, 0);
++      if (rc != 0) {
++              log_write("[%u]: error acquiring cursor for mds table: %s\n",
++                        ost_idx, db_strerror(rc));
++              rc = -EINVAL;
++              goto out;
++      }
++
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      data.data = &mds_obj;
++      data.size = data.ulen = sizeof(mds_obj);
++      data.flags = DB_DBT_USERMEM;
++      while ((rc = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0) {
++              DBT key_ost, data_ost;
++
++              count++;
++              letocpu_mds_objent(&mds_obj);
++
++              if (mds_hdr->mds_flags & E2F_OPT_READONLY &&
++                  mds_obj.mds_oi.oi_id > max_objid) {
++                      VERBOSE(2, "[%u] skipping MDS FID "DFID": object "DOIF
++                              " > max "LPU64"\n", ost_idx,
++                              PFID(&mds_obj.mds_fid), POIF(&mds_obj.mds_oi),
++                              max_objid);
++                      continue;
++              }
++
++              memset(&key_ost, 0, sizeof(key_ost));
++              memset(&data_ost, 0, sizeof(data_ost));
++              key_ost.data = &mds_obj.mds_oi;
++              key_ost.size = sizeof(mds_obj.mds_oi);
++              data_ost.data = &ost_obj;
++              data_ost.size = data_ost.ulen = sizeof(ost_obj);
++              data_ost.flags = DB_DBT_USERMEM;
++              rc = ostdb->get(ostdb, NULL, &key_ost, &data_ost, 0);
++              if (rc != 0) {
++                      letocpu_ost_objent(&ost_obj);
++                      if (rc == DB_NOTFOUND) {
++                              struct lu_fid fid;
++                              struct create18 {
++                                      __u64 lrc_id;
++                                      __u32 lrc_ost_idx;
++                              } create18;
++                              void *create;
++                              int cmd;
++
++                              if (lfsck_get_path(&mds_obj.mds_fid,
++                                                 mds_direntdb,path,PATH_MAX)){
++                                      VERBOSE(1,"[%u]: MDS FID "DFID" object "
++                                              DOIF" deleted?\n", ost_idx,
++                                              PFID(&mds_obj.mds_fid),
++                                              POIF(&mds_obj.mds_oi));
++                                      continue;
++                              }
++                              error++;
++                              if (mds_connect_flags & OBD_CONNECT_FID) {
++                                      ostid_idif_unpack(&mds_obj.mds_oi,
++                                                        &fid, ost_idx);
++                                      create = &fid;
++                                      cmd = LL_IOC_RECREATE_FID;
++                              } else {
++                                      create18.lrc_id = mds_obj.mds_oi.oi_id;
++                                      create18.lrc_ost_idx = ost_idx;
++                                      create = &create18;
++                                      cmd = LL_IOC_RECREATE_OBJ;
++                              }
++
++                              lfsck_recreate_obj(cmd, create,&mds_obj.mds_oi,
++                                                 ost_idx, path);
++                      } else {
++                              log_write("[%u]: error looking up object "DOIF
++                                        ": %s\n", ost_idx,
++                                        POIF(&mds_obj.mds_oi),
++                                        db_strerror(rc));
++                              rc = -EINVAL;
++                              goto out;
++                      }
++              }
++              if (lfsck_calc_size(&mds_obj, &ost_obj, mds_sizeinfodb)) {
++                      log_write("[%u]: error updating file size for object "
++                                DOIF": %s\n", ost_idx, POIF(&mds_obj.mds_oi),
++                                strerror(rc));
++                      rc = -EINVAL;
++                      goto out;
++              }
++      }
++      if (rc != DB_NOTFOUND) {
++              log_write("[%u]: error getting next inode: %s\n",
++                        ost_idx, db_strerror(rc));
++              rc = -EINVAL;
++              goto out;
++      }
++      rc = 0;
++      if (error == 0) {
++              log_write("lfsck: ost_idx %d: pass2 OK (%lu objects)\n",
++                        ost_idx, count);
++      } else {
++              log_write("lfsck: ost_idx %d: pass2 ERROR: %d dangling inodes "
++                        "found (%lu files total)\n", ost_idx, error, count);
++      }
++
++out:
++      dbcp->c_close(dbcp);
++      free(path);
++      return(0);
++}
++
++/*
++ * If an object exists on an ost but is not referenced by an entry on the mds
++ * then create a lost+found entry and set the EA on the file so that the
++ * orphaned object is picked up. If the object is requested to be deleted
++ * an unlink on this lost+found file will now delete same
++ */
++int lfsck_fix_orphan(__u32 ost_idx, struct ost_id *oi,
++                   struct obd_uuid *uuid, int delete)
++{
++      struct lov_user_md *lum;
++      char file[PATH_MAX];
++      int fd, lum_size, rc = 0;
++      struct utimbuf utimbuf = { 0, 0 };
++
++      lum_size = LOV_EA_SIZE(lum, 1);
++
++      lum = malloc(lum_size);
++      if (lum == NULL) {
++              log_write("%s: out of memory on EA (%u) orphan %u:"DOIF"\n",
++                        progname, lum_size, ost_idx, POIF(oi));
++              return(-ENOMEM);
++      }
++
++      memset(file, 0, PATH_MAX);
++      sprintf(file, "%s/%s-"DOIF, lostandfounddir, uuid->uuid, POIF(oi));
++
++      fd = open(file, O_CREAT|O_EXCL|O_LOV_DELAY_CREATE, 0600);
++      if (fd < 0) {
++              rc = -errno;
++              log_write("%s: unable to open %s for orphan %u:"DOIF": %s\n",
++                        progname, file, ost_idx, POIF(oi), strerror(-rc));
++              goto out_free;
++      }
++      lum->lmm_magic = LOV_USER_MAGIC;
++      lum->lmm_pattern = LOV_PATTERN_RAID0;
++      lum->lmm_stripe_size = 1048576;
++      lum->lmm_stripe_offset = 0;
++      lum->lmm_stripe_count = 1;
++      lum->lmm_objects[0].l_object_id = oi->oi_id;
++      lum->lmm_objects[0].l_object_seq = oi->oi_seq;
++      lum->lmm_objects[0].l_ost_gen = 0;
++      lum->lmm_objects[0].l_ost_idx = ost_idx;
++
++      /* reset the MDS timestamps so we can see the OST timestamps */
++      utime(file, &utimbuf);
++
++      if (ioctl(fd, LL_IOC_LOV_SETEA, lum) < 0) {
++              rc = -errno;
++              log_write("%s: unable to open %s for orphan %u:"DOIF": %s\n",
++                        progname, file, ost_idx, POIF(oi), strerror(-rc));
++      }
++
++      close(fd);
++      if (rc != 0 || delete) {
++              int err = unlink(file);
++              if (err != 0 && errno != ENOENT) {
++                      rc = rc ? rc : -errno;
++                      log_write("%s: failed to unlink %s for orphan %u:"DOIF
++                                ": %s\n", progname, file, ost_idx,
++                                POIF(oi), strerror(-rc));
++              }
++      }
++out_free:
++      free(lum);
++      return(rc);
++}
++
++/*
++ * Check for orphans
++ * Run through each entry in ost table and check the mds ost table for
++ * a corresponding entry. If not found report and repair.
++ */
++int lfsck_run_pass3(__u32 ost_idx, DB *mds_ostdb, DB *ostdb,
++                  struct obd_uuid *uuid, __u64 last_id)
++{
++      int error = 0, rc = 0;
++      struct lfsck_mds_objent mds_obj;
++      struct lfsck_ost_objent ost_obj;
++      unsigned long count = 0;
++      DBT key, data;
++      DBC *dbcp = NULL;
++      __u64 bytes = 0;
++
++      log_write("lfsck: ost_idx %d: pass3: check for orphan objects\n",
++                ost_idx);
++
++      VERBOSE(1, "[%u] uuid %s\n", ost_idx, uuid->uuid);
++      VERBOSE(1, "[%u] last_id "LPU64"\n", ost_idx, last_id);
++
++      rc = ostdb->cursor(ostdb, NULL, &dbcp, 0);
++      if (rc != 0) {
++              log_write("[%u]: error acquiring cursor for mds table: %s\n",
++                        ost_idx, db_strerror(rc));
++              rc = -EINVAL;
++              goto out;
++      }
++
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      data.data = &ost_obj;
++      data.size = data.ulen = sizeof(ost_obj);
++      data.flags = DB_DBT_USERMEM;
++
++      while ((rc = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0) {
++              DBT key_mdt, data_mdt;
++              struct ost_id *oi;
++
++              count++;
++              letocpu_ost_objent(&ost_obj);
++              oi = &ost_obj.ost_oi;
++
++              if (oi->oi_id > last_id) {
++                      VERBOSE(2, "[%u] skipping objid "DOIF" > "LPU64"\n",
++                              ost_idx, POIF(oi), last_id);
++                      continue;
++              }
++              VERBOSE(2, "[%u] processing objid "DOIF"\n", ost_idx, POIF(oi));
++
++              memset(&key_mdt, 0, sizeof(key_mdt));
++              memset(&data_mdt, 0, sizeof(data_mdt));
++              key_mdt.data = oi;
++              key_mdt.size = sizeof(*oi);
++              data_mdt.data = &mds_obj;
++              data_mdt.size = data_mdt.ulen = sizeof(mds_obj);
++              data_mdt.flags = DB_DBT_USERMEM;
++              rc = mds_ostdb->get(mds_ostdb, NULL, &key_mdt, &data_mdt, 0);
++              if (rc == 0) {
++                      VERBOSE(2, "[%u] found object "DOIF" reference\n",
++                              ost_idx, POIF(oi));
++                      continue;
++              }
++
++              letocpu_mds_objent(&mds_obj);
++              if (rc != DB_NOTFOUND) {
++                      log_write("Failed to check mds db for entry\n");
++                      rc = -EINVAL;
++                      goto out;
++              }
++              if (ost_obj.ost_size == 0) {
++                      /* don't report errors for normal orphan recovery */
++                      VERBOSE(1, "[%u] zero-length orphan objid "DOIF"\n",
++                              ost_idx, POIF(oi));
++                      if (lfsck_save || lfsck_delete) {
++                              /* No reason to save just delete*/
++                              rc = lfsck_fix_orphan(ost_idx, oi, uuid, 1);
++                              if (rc) {
++                                      log_write("lfsck: [%u]: pass3 "
++                                                "error fixing zero-length "
++                                                "orphan objid "DOIF"\n",
++                                                ost_idx, POIF(oi));
++                                      fix_failed++;
++                              } else {
++                                      fixed++;
++                              }
++                      }
++                      continue;
++              }
++
++              error++;
++              bytes += ost_obj.ost_bytes;
++              if (lfsck_save || lfsck_delete) {
++                      rc = lfsck_fix_orphan(ost_idx, oi, uuid, lfsck_delete);
++                      if (rc) {
++                              log_write("lfsck: [%u]: failed to fix orphan "
++                                        "object "DOIF", "LPU64" bytes\n",
++                                        ost_idx, POIF(oi),ost_obj.ost_bytes);
++                              fix_failed++;
++                      } else {
++                              log_write("lfsck: [%u]: pass3 %s orphan object "
++                                        DOIF", "LPU64" bytes\n", ost_idx,
++                                        lfsck_save ? "saved" : "unlinked",
++                                        POIF(oi), ost_obj.ost_bytes);
++                              fixed++;
++                      }
++              } else {
++                      error++;
++                      log_write("lfsck: [%u]: pass3 orphan found objid "
++                                DOIF", "LPU64" bytes\n", ost_idx,
++                                POIF(oi), ost_obj.ost_bytes);
++              }
++      }
++      if (rc != DB_NOTFOUND) {
++              log_write("[%u]: error getting next object in db %d\n",
++                        ost_idx, db_strerror(rc));
++              rc = -EINVAL;
++              goto out;
++      }
++
++      if (error == 0) {
++              log_write("lfsck: ost_idx %d: pass3 OK (%lu files total)\n",
++                        ost_idx, count);
++      } else {
++              log_write("lfsck: ost_idx %d: pass3 %s: %4gMB of orphan "
++                        "data (%lu of %lu files total)\n", ost_idx,
++                        (lfsck_save | lfsck_delete) ? "FIXED" : "ERROR",
++                        (double)bytes / (1024 * 1024), error, count);
++      }
++out:
++      if (dbcp)
++              dbcp->c_close(dbcp);
++      return (0);
++}
++
++/* Missing ost information report affected file names */
++int lfsck_list_affected_files(char *mds_file, struct lfsck_mds_hdr *mds_hdr,
++                            DB *mds_direntdb, __u32 ost_idx)
++{
++      struct lfsck_mds_objent mds_obj;
++      char dbname[256];
++      char *path;
++      DB *mds_db = NULL;
++      DBT key,data;
++      DBC *dbcp = NULL;
++      int rc = 0;
++
++      path = malloc(PATH_MAX);
++      if (path == NULL) {
++              return (-ENOMEM);
++      }
++
++      sprintf(dbname, "%s.%d", MDS_OSTDB, ost_idx);
++      if ((rc = lfsck_opendb(mds_file, dbname, &mds_db, 1, 0, 0)) != 0) {
++              log_write("failed to open mds db file %s\n", mds_file);
++              rc = -EINVAL;
++              goto out;
++      }
++
++      if ((rc = mds_db->cursor(mds_db, NULL, &dbcp, 0)) != 0) {
++              log_write("Failed to acquire cursor for mds table\n");
++              rc = -EINVAL;
++              goto out;
++      }
++
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      data.data = &mds_obj;
++      data.size = data.ulen = sizeof(mds_obj);
++      data.flags = DB_DBT_USERMEM;
++
++      log_write("Files affected by missing ost info are : -\n");
++      while ((rc = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0) {
++              letocpu_mds_objent(&mds_obj);
++
++              if (lfsck_get_path(&mds_obj.mds_fid, mds_direntdb,
++                                 path, PATH_MAX)) {
++                      log_write("Failed to get path for fid "LPU64"\n",
++                                mds_obj.mds_fid);
++                      fix_failed++;
++              } else {
++                      log_write("%s\n",path);
++              }
++      }
++      if (rc != DB_NOTFOUND) {
++              log_write("Error getting next element in db %d\n", rc);
++              rc = -EINVAL;
++              goto out;
++      }
++      rc = 0;
++
++out:
++      if (dbcp)
++              dbcp->c_close(dbcp);
++      if (mds_db)
++              mds_db->close(mds_db, 0);
++      return(rc);
++}
++
++/*
++ * For each ost index run checks 1 2 and 3.
++ * 1) Check for object referenced by more than one file
++ * 2) Check that objects exist on ost
++ * 3) Check that containg mds entry exists for an object
++ */
++int run_test(__u32 ost_idx, struct lfsck_mds_hdr *mds_hdr,
++           DB *mds_direntdb, DB *mds_sizeinfodb )
++{
++      struct lfsck_ost_hdr *ost_hdr = NULL;
++      char dbname[256];
++      DB *mds_ostdb = NULL;
++      DB *ost_db = NULL;
++      DBT key, data;
++      __u64 last_id;
++      int i, rc;
++
++      sprintf(dbname, "%s.%d", MDS_OSTDB, ost_idx);
++
++      VERBOSE(2, "testing ost_idx %d\n", ost_idx);
++
++      rc = lfsck_opendb(mds_file, dbname, &mds_ostdb, 1, 0, 0);
++      if (rc != 0) {
++              log_write("failed to open mds db file %s: %s\n",
++                        mds_file, db_strerror(rc));
++              goto out;
++      }
++
++      ost_hdr = malloc(sizeof(*ost_hdr));
++      if (ost_hdr == NULL) {
++              log_write("Failure to alloc memory\n");
++              rc = -ENOMEM;
++              goto out;
++      }
++
++
++      VERBOSE(2, "looking for index %u UUID %s\n", ost_idx,
++              lfsck_uuid[ost_idx].uuid);
++
++      for (i = 0; i < num_ost_files; i++) {
++              VERBOSE(2, "checking file %s\n", ost_files[i]);
++              rc = lfsck_opendb(ost_files[i], OST_HDR, &ost_db, 0, 0, 0);
++              if (rc != 0) {
++                      log_write("Error opening ost_data_file %s: rc %d\n",
++                              ost_files[i], rc);
++                      goto out;
++              }
++              memset(&key, 0, sizeof(key));
++              memset(&data, 0, sizeof(data));
++              ost_hdr->ost_magic = OST_MAGIC;
++              key.data = &ost_hdr->ost_magic;
++              key.size = sizeof(ost_hdr->ost_magic);
++              data.size = data.ulen = sizeof(*ost_hdr);
++              data.data = ost_hdr;
++              data.flags = DB_DBT_USERMEM;
++
++              rc = ost_db->get(ost_db, NULL, &key, &data, 0);
++              ost_db->close(ost_db, 0);
++              ost_db = NULL;
++              if (rc != 0) {
++                      log_write("Invalid ost magic on file %s: rc %s\n",
++                                ost_files[i], db_strerror(rc));
++                      continue;
++              }
++
++              letocpu_ost_hdr(ost_hdr);
++              VERBOSE(2, "%s has ost UUID %s\n", ost_files[i],
++                      ost_hdr->ost_uuid.uuid);
++
++              if (obd_uuid_equals(&lfsck_uuid[ost_idx], &ost_hdr->ost_uuid)) {
++                      if (ost_hdr->ost_index != ost_idx) {
++                              log_write("Requested ost_idx %u doesn't match "
++                                        "index %u found in %s\n", ost_idx,
++                                        ost_hdr->ost_index, ost_files[i]);
++                              continue;
++                      }
++
++                      break;
++              }
++      }
++
++      if (i == num_ost_files) {
++              log_write("lfsck: can't find file for ost_idx %d\n", ost_idx);
++              rc = lfsck_list_affected_files(mds_file, mds_hdr,
++                                             mds_direntdb, ost_idx);
++              goto out;
++      }
++      rc = lfsck_opendb(ost_files[i], OST_OSTDB, &ost_db, 0, 0, 0);
++      if (rc != 0) {
++              log_write("error opening ost_data_file %s: rc %d\n",
++                      ost_files[i], rc);
++              goto out;
++      }
++
++      VERBOSE(1, "MDS: max_id "LPU64" OST: max_id "LPU64"\n",
++              mds_hdr->mds_max_ost_id[ost_idx], ost_hdr->ost_last_id);
++
++      rc = lfsck_run_pass1(ost_idx, mds_ostdb, ost_db, mds_direntdb);
++      if (rc != 0) {
++              log_write("error in running pass1\n");
++              goto out;
++      }
++
++      rc = lfsck_run_pass2(ost_idx, mds_hdr, mds_ostdb, ost_db, mds_direntdb,
++                           mds_sizeinfodb);
++      if (rc != 0) {
++              log_write("error in running pass2\n");
++              goto out;
++      }
++
++      last_id = (ost_hdr->ost_flags & E2F_OPT_READONLY ||
++                 mds_hdr->mds_flags & E2F_OPT_READONLY) ?
++                      mds_hdr->mds_max_ost_id[ost_idx] : ost_hdr->ost_last_id;
++
++      rc = lfsck_run_pass3(ost_idx, mds_ostdb, ost_db, &ost_hdr->ost_uuid,
++                           last_id);
++      if (rc != 0) {
++              log_write("error in running pass3\n");
++              goto out;
++      }
++      rc = 0;
++
++out:
++      if (ost_hdr)
++              free(ost_hdr);
++      if (mds_ostdb)
++              mds_ostdb->close(mds_ostdb, 0);
++      if (ost_db)
++              ost_db->close(ost_db, 0);
++
++      return(rc);
++}
++
++static int lfsck_validate_duplicate(struct lfsck_saved_duplicates *dup,
++                                  const char *path)
++{
++      struct lov_user_md *lum;
++      struct lov_user_ost_data_v1 *loi;
++      struct stat64 st;
++      struct lu_fid fid;
++      int rc, i;
++
++      VERBOSE(2,"[%u] check duplicate FID "DFID" object "DOIF"\n  for\t%s\n",
++              dup->ld_ost_idx, PFID(&dup->ld_mds_fid),POIF(&dup->ld_oi),path);
++
++      /* first, validate that the paths are still valid */
++      if (stat64(path, &st) < 0) {
++              rc = -errno;
++              log_write("%s: duplicate file %s error: %s\n",
++                        progname, path, strerror(-rc));
++              return rc;
++      }
++
++      rc = lfsck_path2fid(path, &fid);
++      if (rc < 0) {
++              log_write("%s: unable to get LMA EA on %s: %s\n",
++                        progname, path, strerror(-rc));
++              return rc;
++      }
++      if (lfsck_fidcmp(&dup->ld_mds_fid, &fid)) {
++              log_write("%s: duplicate file %s is no longer FID "DFID"\n",
++                        progname, path, PFID(&dup->ld_mds_fid));
++              return -EBADF;
++      }
++
++      lum = malloc(LOV_EA_MAX(lum));
++      if (lum == NULL) {
++              log_write("%s: out of memory allocating LOV EA (%u)\n",
++                        progname, LOV_EA_MAX(lum));
++              return -ENOMEM;
++      }
++
++      rc = llapi_file_get_stripe(path, lum);
++      if (rc < 0) {
++              log_write("%s: unable to get LOV EA on %s: %s\n",
++                        progname, path, strerror(-rc));
++              goto out;
++      }
++
++      if (lum->lmm_pattern != LOV_PATTERN_RAID0) {
++              log_write("%s: unknown LOV stripe pattern %#08x\n",
++                        progname, lum->lmm_pattern);
++              rc = -EINVAL;
++              goto out;
++      }
++
++      if (lum->lmm_magic == LOV_USER_MAGIC_V1) {
++              loi = lum->lmm_objects;
++      } else if (lum->lmm_magic == LOV_USER_MAGIC_V3) {
++              loi = ((struct lov_user_md_v3 *)lum)->lmm_objects;
++      } else {
++              log_write("%s: unknown LOV magic %#08x\n",
++                        progname, lum->lmm_magic);
++              rc = -EINVAL;
++              goto out;
++      }
++
++      /* Verify that the object in question is still in the file */
++      for (i = 0; i < lum->lmm_stripe_count; i++, loi++) {
++              if (loi->l_ost_idx == dup->ld_ost_idx &&
++                  loi->l_object_id == dup->ld_oi.oi_id &&
++                  loi->l_object_seq == dup->ld_oi.oi_seq)
++                      break;
++      }
++
++      if (i == lum->lmm_stripe_count) {
++              log_write("%s: cannot find object %u:"DOIF" in\n\t%s\n",
++                        progname, dup->ld_ost_idx, POIF(&dup->ld_oi), path);
++              rc = -EBADF;
++              goto out;
++      }
++
++out:
++      free(lum);
++      return rc;
++}
++
++#ifndef HAVE_LLAPI_CANCEL_OSC_LOCKS
++#define NAMESPACES "/proc/fs/lustre/ldlm/namespaces"
++void llapi_cancel_osc_locks(const char *mnt_path)
++{
++      DIR *namespaces;
++      char path[PATH_MAX];
++      struct dirent *dent;
++      int rc, fd;
++
++      namespaces = opendir(NAMESPACES);
++      if (namespaces == NULL) {
++              rc = -errno;
++              log_write("%s: error opening %s: %s\n",
++                        progname, NAMESPACES, strerror(-rc));
++              return;
++      }
++
++      while ((dent = readdir(namespaces)) != NULL) {
++              if (strcmp(dent->d_name, ".") == 0 ||
++                  strcmp(dent->d_name, "..") == 0)
++                      continue;
++
++              if (strstr(dent->d_name, "osc") == NULL &&
++                  strstr(dent->d_name, "OSC") == NULL)
++                      continue;
++
++              snprintf(path, sizeof(path) - 1, "%s/%s/lru_size",
++                       NAMESPACES, dent->d_name);
++
++              fd = open(path, O_WRONLY);
++              if (fd < 0) {
++                      log_write("%s: error opening %s to cancel locks: %s\n",
++                                progname, path, strerror(errno));
++                      continue;
++              }
++              VERBOSE(3, "clearning locks in %s\n", path);
++              write(fd, "clear", 6);
++              close(fd);
++      }
++
++      closedir(namespaces);
++}
++#endif
++
++/* Remove inodes from the client cache to avoid hitting an LASSERTF() on
++ * the client if it tries to attach two inodes to the same object */
++static void lfsck_drop_caches(void)
++{
++      sync();
++      llapi_cancel_osc_locks(mnt_path);
++      system("echo 3 > /proc/sys/vm/drop_caches");
++}
++
++/* Duplicate an object that is referenced by multiple files and point one
++ * of the files to use the duplicated object */
++static int lfsck_fix_duplicate(struct lfsck_saved_duplicates *dup,
++                             DB *mds_direntdb, const char *path)
++{
++      char path_tmp[PATH_MAX] = { 0 };
++      char tmp[PATH_MAX * 2 + 10] = { 0 };
++      const char *base;
++      int rc;
++
++      lfsck_drop_caches();
++
++      if (!lfsck_create) {
++              VERBOSE(1, "%s: [%u]: not duplicating FID "DFID
++                      " object "DOIF" by request\n  on\t%s\n",
++                      progname, dup->ld_ost_idx, PFID(&dup->ld_mds_fid),
++                      POIF(&dup->ld_oi), path);
++              return 0;
++      }
++
++      rc = lfsck_validate_duplicate(dup, path);
++      if (rc < 0)
++              goto out;
++
++      snprintf(path_tmp, sizeof(path_tmp) - 1, "%s.lfsck_tmp", path);
++      snprintf(tmp, sizeof(tmp) - 1, "cp -p '%s' '%s'", path, path_tmp);
++      VERBOSE(2, "%s\n", tmp);
++      rc = system(tmp);
++      if (rc) {
++              rc = -errno;
++              log_write("%s: duplicating object for %u:"DOIF" %s: %s\n",
++                        progname, dup->ld_ost_idx, POIF(&dup->ld_oi),
++                        path, strerror(-rc));
++              goto out;
++      }
++
++      base = strrchr(path, '/');
++      if (base == NULL)
++              base = path;
++      else
++              base++;
++
++      rc = asprintf(&dup->ld_link, "%s/%u-"DOIF"-"DFID":%s", dupedir,
++                    dup->ld_ost_idx, POIF(&dup->ld_oi),
++                    PFID(&dup->ld_mds_fid), base);
++      if (rc < 0) {
++              rc = -errno;
++              goto out;
++      }
++
++      VERBOSE(2, "ln %s %s\n", path, dup->ld_link);
++      rc = link(path, dup->ld_link);
++      if (rc) {
++              rc = -errno;
++              log_write("%s: error linking %s to %s: %s\n",
++                        progname, path, dup->ld_link, strerror(-rc));
++              free(dup->ld_link);
++              dup->ld_link = NULL;
++              goto out;
++      }
++
++      VERBOSE(2, "rename %s %s\n", path_tmp, path);
++      rc = rename(path_tmp, path);
++      if (rc) {
++              rc = -errno;
++              log_write("%s: error renaming %s to %s: %s\n",
++                        progname, path_tmp, path, strerror(-rc));
++              free(dup->ld_link);
++              dup->ld_link = NULL;
++      } else {
++              log_write("%s: [%u]: fixed duplicate FID "DFID" object "
++                        DOIF":\n\t%s\n", progname, dup->ld_ost_idx,
++                        PFID(&dup->ld_mds_fid), POIF(&dup->ld_oi), path);
++      }
++out:
++      if (rc) {
++              VERBOSE(2, "unlink %s\n", path_tmp);
++              if (unlink(path_tmp))
++                      log_write("%s: unlink %s failed: %s\n", progname,
++                                path_tmp, strerror(errno));
++      }
++
++      return rc;
++}
++
++/*
++ * Check for files found that reference the same ost objects
++ * (found in pass1) and repair now if necessary
++ */
++int lfsck_run_pass4(DB *mds_direntdb)
++{
++      char tmp[PATH_MAX + 512];
++      char path[PATH_MAX];
++      int failed_get_path, fixed_dup;
++      int i, j;
++
++      log_write("lfsck: pass4: check for %u duplicate object references\n",
++                lfsck_dup_saved);
++      if (lfsck_dup_saved == 0) {
++              log_write("lfsck: pass4 OK (no duplicates)\n");
++              return(0);
++      }
++
++      do {
++              struct lu_fid *mds_fid;
++
++              failed_get_path = 0;
++              fixed_dup = 0;
++
++              lfsck_drop_caches();
++
++              for (i = 0; i < lfsck_dup_saved; i++) {
++                      mds_fid = &lfsck_duplicates[i].ld_mds_fid;
++                      if (mds_fid->f_oid == 0)
++                              continue;
++
++                      if (lfsck_get_path(mds_fid, mds_direntdb, path,
++                                         sizeof(path))) {
++                              failed_get_path++;
++                              continue;
++                      }
++                      if (lfsck_fix_duplicate(&lfsck_duplicates[i],
++                                              mds_direntdb, path)) {
++                              fix_failed++;
++                              continue;
++                      }
++
++                      fixed++;
++                      fixed_dup++;
++
++                      /* don't duplicate a file multiple times even if it has
++                       * multiple shared objects */
++                      for (j = i + 1; j < lfsck_dup_saved; j++) {
++                              if (lfsck_fidcmp(&lfsck_duplicates[j].ld_mds_fid,
++                                               mds_fid) == 0)
++                                      lfsck_duplicates[j].ld_mds_fid.f_oid =0;
++                      }
++                      lfsck_duplicates[i].ld_mds_fid.f_oid = 0;
++              }
++      } while (failed_get_path && fixed_dup);
++
++      for (i = 0; i < lfsck_dup_saved; i++) {
++              lfsck_drop_caches();
++
++              if (!lfsck_duplicates[i].ld_link)
++                      continue;
++
++              if (unlink(lfsck_duplicates[i].ld_link))
++                      log_write("%s: failed to unlink %s: %s\n", progname,
++                                lfsck_duplicates[i].ld_link, strerror(errno));
++              else
++                      log_write("%s: %s unlinked\n", progname,
++                                lfsck_duplicates[i].ld_link);
++              free(lfsck_duplicates[i].ld_link);
++              lfsck_duplicates[i].ld_link = NULL;
++      }
++
++      snprintf(tmp, sizeof(tmp) - 1, "rm -rvf '%s'", dupedir);
++      VERBOSE(1, "%s\n", tmp);
++      system(tmp);
++
++      log_write("lfsck: pass4 finished\n");
++
++      return(0);
++}
++
++/*
++ * This is a placeholder to check for filesize correctness no fixup is in
++ * place right now since file size is still obtained from osts
++ */
++int lfsck_run_pass5(DB *mds_direntdb, DB *mds_sizeinfodb)
++{
++      int rc = 0;
++#ifdef LFSCK_CHECK_SIZE
++      struct lfsck_mds_szinfo mds_szinfo1;
++      char path[PATH_MAX];
++      struct stat64 statbuf;
++      DBT key,data;
++      DBC *dbcp;
++
++      log_write("lfsck: pass5: file size correctness\n");
++
++      if ((rc = mds_sizeinfodb->cursor(mds_sizeinfodb, NULL, &dbcp, 0)) != 0){
++              log_write("%s: error acquiring cursor for database: %s\n",
++                        progname, db_strerror(rc));
++              rc = -EINVAL;
++              goto out;
++      }
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      data.data = &mds_szinfo1;
++      data.size = data.ulen = sizeof(mds_szinfo1);
++      data.flags = DB_DBT_USERMEM;
++      while ((rc = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0) {
++              letocpu_mds_szinfo(&mds_szinfo1);
++
++              if (mds_szinfo1.mds_size != mds_szinfo1.mds_calc_size) {
++                      if (lfsck_get_path(mds_szinfo1.mds_fid, mds_direntdb,
++                                         path, sizeof(path))) {
++                              log_write("%s: failed to get path and update "
++                                        "size for fid "LPU64"\n",
++                                        mds_szinfo1.mds_fid);
++                              fix_failed++;
++                              continue;
++                      }
++
++                      if (stat64(path, &statbuf)) {
++                              log_write("%s: pass5: failed to stat %s\n",
++                                        progname, path);
++                              fix_failed++;
++                              continue;
++                      }
++                      if (statbuf.st_size == mds_szinfo1.mds_calc_size) {
++                              VERBOSE(2, "%s: %s really has right size\n",
++                                      progname, path);
++                      } else {
++                              log_write("%s: %s size "LPU64" != "LPU64"\n",
++                                        progname, path, statbuf.st_size,
++                                        mds_szinfo1.mds_calc_size);
++                              fixed++;
++                      }
++              }
++      }
++      if (rc != DB_NOTFOUND) {
++              log_write("%s: error getting next element in db: %s\n",
++                        progname, db_strerror(rc));
++              rc = -EINVAL;
++              goto out;
++      }
++      rc = 0;
++      log_write("%s: pass5 finished\n", progname);
++out:
++      dbcp->c_close(dbcp);
++#endif /* LFSCK_CHECK_SIZE */
++      return rc;
++}
++
++int get_response()
++{
++      char   yes[] = "Yy";
++      char   no[] = "Nn";
++      char c;
++      int rc = -1;
++
++      while (1) {
++              c = getchar();
++              if ( c == EOF)
++                      break;
++
++              if (strchr(yes, c)) {
++                      rc = 1;
++                      break;
++              }
++
++              if (strchr(no, c)) {
++                      rc = 0;
++                      break;
++              }
++      }
++      return(rc);
++}
++
++/* Starting point for each thread */
++void *lfsck_start_thread(void *arg)
++{
++      struct lfsck_thread_info *tinfo = (struct lfsck_thread_info *)arg;
++      int i,rc;
++
++      tinfo->status = 0;
++      pthread_mutex_lock(&init_mutex);
++      if (all_started)
++              pthread_mutex_unlock(&init_mutex);
++      else
++              pthread_cond_wait(&init_cond, &init_mutex);
++
++      if (!all_started)
++              pthread_exit(NULL);
++      for (i = tinfo->start_ost_idx; i < tinfo->end_ost_idx; i++) {
++              rc = run_test(i, tinfo->mds_hdr, tinfo->mds_direntdb,
++                            tinfo->mds_sizeinfodb);
++              if (rc) {
++                      log_write("lfsck: ost_idx %d: error running check\n",i);
++                      tinfo->status = rc;
++              }
++      }
++      pthread_exit(NULL);
++}
++
++/* Start threads and run filesystem checks and repair */
++int lfsck_run_checks()
++{
++      struct lfsck_mds_hdr *mds_hdr = NULL;
++      struct lfsck_thread_info *tinfo = NULL;
++      pthread_t *threads = NULL;
++      int rc, i;
++      DB *mds_direntdb = NULL;
++      DB *mds_hdrdb = NULL;
++      DB *mds_sizeinfodb = NULL;
++      DBT key, data;
++      int num_osts;
++
++      rc = lfsck_opendb(mds_file, MDS_HDR, &mds_hdrdb, 0, 0, 0);
++      if (rc != 0) {
++              log_write("%s: error opening mds_hdr in %s: rc %d\n",
++                        mds_file, rc);
++              return(-EINVAL);
++      }
++      mds_hdr = malloc(sizeof(*mds_hdr));
++      if (mds_hdr == NULL) {
++              log_write("%s: out of memory allocating DB header (%u)\n",
++                        progname, sizeof(*mds_hdr));
++              rc = -ENOMEM;
++              goto out;
++      }
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      mds_hdr->mds_magic = MDS_MAGIC;
++      key.data = &mds_hdr->mds_magic;
++      key.size = sizeof(mds_hdr->mds_magic);
++      data.data = mds_hdr;
++      data.size = sizeof(*mds_hdr);
++      data.ulen = sizeof(*mds_hdr);
++      data.flags = DB_DBT_USERMEM;
++      rc = mds_hdrdb->get(mds_hdrdb, NULL, &key, &data, 0);
++      if (rc != 0) {
++              log_write("%s: error getting mds_hdr info %s: %s\n",
++                        progname, mds_file, db_strerror(rc));
++              goto out;
++      }
++      letocpu_mds_hdr(mds_hdr);
++
++      rc = lfsck_opendb(mds_file, MDS_DIRINFO, &mds_direntdb, 0, 0, 0);
++      if (rc != 0) {
++              log_write("%s: error opening dirinfo db %s\n",
++                        progname, mds_file);
++              goto out;
++      }
++
++      rc = lfsck_opendb(mds_file, MDS_SIZEINFO, &mds_sizeinfodb, 0, 0, 0);
++      if (rc != 0) {
++              log_write("%s: error opening sizeinfo db %s\n",
++                        progname, mds_file);
++              goto out;
++      }
++
++      if (lov_tgt_count > mds_hdr->mds_num_osts) {
++              fprintf(stderr, "%s: number of osts in lov (%u) > "
++                              "num referenced in mds (%u) (new ost or "
++                              "empty filesystem?)\n", progname,
++                              lov_tgt_count, mds_hdr->mds_num_osts);
++              fprintf(stderr, "Do you wish to continue? (y/n)\n");
++              if ((rc = get_response()) != 1) {
++                      log_write("%s: exiting \n", progname);
++                      goto out;
++              }
++              fprintf(stderr, "\n");
++
++              num_osts = lov_tgt_count;
++      } else {
++              num_osts = mds_hdr->mds_num_osts;
++      }
++      if (num_threads > num_osts)
++              num_threads = num_osts;
++
++      tinfo = calloc(num_threads, sizeof(*tinfo));
++      if (tinfo == NULL) {
++              log_write("%s: out of memory for thread info\n", progname);
++              rc = -ENOMEM;
++              goto out;
++      }
++      threads = calloc(num_threads, sizeof(pthread_t));
++      if (threads == NULL) {
++              log_write("%s: out of memory for threads\n", progname);
++              rc =  -ENOMEM;
++              goto out;
++      }
++
++      all_started = 0;
++      for (i = 0; i < num_threads; i++) {
++              __u32 end_ost_idx;
++              __u32 chunk;
++
++              chunk = num_osts / num_threads;
++              if (num_osts % num_threads)
++                      chunk++;
++              tinfo[i].mds_hdr = mds_hdr;
++              tinfo[i].mds_direntdb = mds_direntdb;
++              tinfo[i].mds_sizeinfodb = mds_sizeinfodb;
++              tinfo[i].status = 0;
++              tinfo[i].start_ost_idx = (chunk) * i;
++              end_ost_idx = (chunk) * (i + 1);
++              end_ost_idx = end_ost_idx > num_osts ?
++                            num_osts : end_ost_idx;
++              tinfo[i].end_ost_idx = end_ost_idx;
++              rc = pthread_create(&threads[i], NULL, lfsck_start_thread,
++                                  &tinfo[i]);
++              if (rc) {
++                      log_write("%s: error starting thread waiting for other"
++                                " threads to exit\n", progname);
++                      pthread_mutex_lock(&init_mutex);
++                      pthread_cond_broadcast(&init_cond);
++                      pthread_mutex_unlock(&init_mutex);
++                      for (--i; i >= 0; i--) {
++                              pthread_cancel(threads[i]);
++                      }
++                      rc = -ENOMEM;
++                      goto out;
++              }
++      }
++      pthread_mutex_lock(&init_mutex);
++      all_started = 1;
++      pthread_cond_broadcast(&init_cond);
++      pthread_mutex_unlock(&init_mutex);
++      for (i = 0; i < num_threads; i++) {
++              rc = pthread_join(threads[i], NULL);
++              if (tinfo[i].status) {
++                      log_write("%s: error running thread %u\n", progname, i);
++                      rc = -EINVAL;
++              }
++      }
++
++      rc = lfsck_run_pass4(mds_direntdb);
++      if (rc != 0)
++              goto out;
++
++      rc = lfsck_run_pass5(mds_direntdb, mds_sizeinfodb);
++
++out:
++      if (threads)
++              free(threads);
++      if (tinfo)
++              free(tinfo);
++      if (mds_hdr)
++              free(mds_hdr);
++      if (mds_direntdb)
++              mds_direntdb->close(mds_direntdb, 0);
++      if (mds_hdrdb)
++              mds_hdrdb->close(mds_hdrdb, 0);
++      if (mds_sizeinfodb)
++              mds_sizeinfodb->close(mds_sizeinfodb, 0);
++
++      return(rc);
++}
++
++int create_lostandfound()
++{
++      struct stat statbuf;
++
++      snprintf(lostandfounddir, PATH_MAX - 1, "%s/lost+found", mnt_path);
++      lostandfounddir[PATH_MAX - 1] = '\0';
++
++      VERBOSE(2, "%s: creating %s\n", progname, lostandfounddir);
++      if (mkdir(lostandfounddir, 0700)) {
++              if (errno != EEXIST) {
++                      fprintf(stderr, "%s: error creating %s: %s\n",
++                              progname, lostandfounddir, strerror(errno));
++                      return(-errno);
++              }
++
++              if (stat(lostandfounddir, &statbuf)) {
++                      fprintf(stderr, "%s: error stat %s: %s\n",
++                              progname, lostandfounddir, strerror(errno));
++                      return(-errno);
++              }
++
++              if (!S_ISDIR(statbuf.st_mode)) {
++                      fprintf(stderr, "%s: error %s is not a directory\n",
++                              progname, lostandfounddir);
++                      return(-EINVAL);
++              }
++      }
++
++      snprintf(dupedir, sizeof(dupedir), "%s/duplicates", lostandfounddir);
++      dupedir[PATH_MAX - 1] = '\0';
++
++      VERBOSE(2, "%s: creating %s\n", progname, dupedir);
++      if (mkdir(dupedir, 0700)) {
++              if (errno != EEXIST) {
++                      fprintf(stderr, "%s: error creating %s: %s\n",
++                              progname, dupedir, strerror(errno));
++                      return(-errno);
++              }
++
++              if (stat(lostandfounddir, &statbuf)) {
++                      fprintf(stderr, "%s: error stat %s: %s\n",
++                              progname, dupedir, strerror(errno));
++                      return(-errno);
++              }
++
++              if (!S_ISDIR(statbuf.st_mode)) {
++                      fprintf(stderr, "%s: error %s is not a directory\n",
++                              progname, dupedir);
++                      return(-EINVAL);
++              }
++      }
++
++      return(0);
++}
++
++int main(int argc, char *argv[])
++{
++      uid_t myuid;
++      int i;
++
++      fprintf(stderr, "lfsck %s (%s)\n", E2FSPROGS_VERSION, E2FSPROGS_DATE);
++
++      if (parse_args(argc, argv)) {
++              usage();
++              exit(16);
++      }
++
++      myuid = getuid();
++      if (myuid != 0 && !lfsck_force) {
++              fprintf(stderr, "%s: can only be run by root user\n", progname);
++              exit(16);
++      }
++
++      log_open();
++
++      if ((lfsck_save || lfsck_delete) && create_lostandfound() != 0) {
++              log_write("%s: failed to create lost+found directory\n",
++                        progname);
++              log_close(-1);
++              exit(8);
++      }
++
++      if (get_lov_config()) {
++              log_close(-1);
++              exit(8);
++      }
++
++      if (lfsck_run_checks())
++              log_close(-1);
++
++      if (mds_file)
++              free(mds_file);
++      for (i = 0; i < LOV_MAX_OSTS; i++) {
++              if (ost_files[i])
++                      free(ost_files[i]);
++      }
++      if (lfsck_duplicates)
++              free(lfsck_duplicates);
++
++      log_close(0);
++      if (fix_failed) {
++              fprintf(stderr, "%s: exit with %u unfixed errors\n",
++                      progname, fix_failed);
++              return 2;
++      } else {
++              printf("%s: fixed %u errors\n", progname, fixed);
++              return !!fixed;
++      }
++}
+Index: e2fsprogs/lib/ext2fs/lfsck.h
+===================================================================
+--- /dev/null
++++ e2fsprogs/lib/ext2fs/lfsck.h
+@@ -0,0 +1,322 @@
++#undef PACKAGE
++#undef VERSION
++#ifndef LFSCK_H
++#define LFSCK_H
++
++#ifdef ENABLE_LFSCK
++/* These are unfortunately needed for lustre_user.h to be usable */
++#define CLASSERT(cond)                ({ switch(42) { case (cond): case 0: break; } })
++#define LASSERT(cond)         do { } while (0)
++#define LASSERTF(cond, fmt, a)        do { } while (0)
++
++#include "../lib/ext2fs/ext2fsP.h"
++#include <ext2fs/ext2_ext_attr.h>
++#include <lustre/liblustreapi.h>
++
++#ifdef HAVE_LIMITS_H
++#include <limits.h>
++#endif
++
++#include <db.h>
++
++#ifndef LPU64
++#if (__WORDSIZE == 32) || defined(__x86_64__)
++# define LPU64 "%llu"
++# define LPD64 "%lld"
++# define LPX64 "%#llx"
++# define LPSZ  "%u"
++# define LPSSZ "%d"
++#elif (__WORDSIZE == 64)
++# define LPU64 "%lu"
++# define LPD64 "%ld"
++# define LPX64 "%#lx"
++# define LPSZ  "%lu"
++# define LPSSZ "%ld"
++#endif
++#endif /* !LPU64 */
++
++/* Compatibility to allow 1.x lustre_user.h to be used with 2.x fields.
++ * There are also structures from lustre_idl.h below that are defined in
++ * terms of the 2.x field names that would have to be handled for 1.x if
++ * that lustre_idl.h was ever fixed to allow inclusion from userspace. */
++#ifndef IDENTITY_DOWNCALL_MAGIC
++#define l_object_seq  l_object_gr             /* for lov_ost_data_v1 */
++#define lmm_object_seq        lmm_object_gr           /* for lov_mds_md_v1/3 */
++#endif /* IDENTITY_DOWNCALL_MAGIC */
++
++/* Unfortunately, neither the 1.8 or 2.x lustre_idl.h file is suitable
++ * for inclusion by userspace programs because of external dependencies.
++ * Define the minimum set of replacement functions here until that is fixed. */
++#ifndef HAVE_LUSTRE_LUSTRE_IDL_H
++#define fid_seq(fid) ((fid)->f_seq)
++#define fid_oid(fid) ((fid)->f_oid)
++#define fid_ver(fid) ((fid)->f_ver)
++
++#ifndef LL_IOC_PATH2FID
++#define DFID "["LPX64":0x%x:0x%x]"
++#define PFID(fid)     \
++        fid_seq(fid), \
++        fid_oid(fid), \
++        fid_ver(fid)
++#define llapi_get_connect_flags(mnt, flags) (0)
++struct lu_fid {
++       __u64   f_seq;
++       __u32   f_oid;
++       __u32   f_ver;
++};
++#endif
++
++#define OBD_CONNECT_FID               0x40000000ULL
++
++struct lustre_mdt_attrs {
++      __u32           lma_compat;
++      __u32           lma_incompat;
++      struct lu_fid   lma_self_fid;
++      __u64           lma_flags;
++      __u64           lma_ioepoch;
++      __u64           lma_som_size;
++      __u64           lma_som_blocks;
++      __u64           lma_som_mountid;
++};
++
++struct ost_id {
++      __u64   oi_id;
++      __u64   oi_seq;
++};
++
++enum fid_seq {
++      FID_SEQ_IGIF            = 12ULL,
++      FID_SEQ_IGIF_MAX        = 0x0ffffffffULL,
++      FID_SEQ_IDIF            = 0x100000000ULL,
++};
++
++static inline int fid_seq_is_igif(const __u64 seq)
++{
++      return seq >= FID_SEQ_IGIF && seq <= FID_SEQ_IGIF_MAX;
++}
++
++static inline int fid_is_igif(const struct lu_fid *fid)
++{
++      return fid_seq_is_igif(fid_seq(fid));
++}
++
++/* convert an OST objid + index into an IDIF FID SEQ number */
++static inline __u64 fid_idif_seq(__u64 id, __u32 ost_idx)
++{
++      return FID_SEQ_IDIF | (ost_idx << 16) | ((id >> 32) & 0xffff);
++}
++
++/* convert ost_id from 1.x compatible OST protocol into FID for future usage */
++static inline void ostid_idif_unpack(struct ost_id *oi, struct lu_fid *fid,
++                                   __u32 idx)
++{
++      fid->f_seq = fid_idif_seq(oi->oi_id, idx);
++      fid->f_oid = oi->oi_id;         /* truncate to 32 bits by assignment */
++      fid->f_ver = oi->oi_id >> 48;   /* in theory, not currently used */
++}
++#endif /* HAVE_LUSTRE_LUSTRE_IDL_H */
++
++#ifndef DOIF
++#define DOIF LPU64":"LPU64
++#define POIF(oi) (oi)->oi_seq, (oi)->oi_id
++#endif
++
++/* Get O/R or O/0 dir */
++#define OBJECT_DIR  "O"
++#define OBJECT_DIR_V1 "R"
++#define OBJECT_DIR_V2 "0"
++#define LOG_DIR "1"
++#define PENDING_DIR "PENDING"
++#define OBJECTS "OBJECTS"
++#define CATLIST "CATALOGS"
++#define LAST_ID "LAST_ID"
++#define LAST_RCVD "last_rcvd"
++#define LOV_OBJID "lov_objid"
++
++#ifndef EXT3_XATTR_INDEX_TRUSTED      /* temporary until we hit l28 kernel */
++#define EXT3_XATTR_INDEX_TRUSTED      4
++#endif
++#ifndef EXT3_XATTR_INDEX_LUSTRE
++#define EXT3_XATTR_INDEX_LUSTRE               5
++#endif
++#define XATTR_LUSTRE_MDS_LOV_EA               "lov"
++#define XATTR_LUSTRE_MDT_LMA_EA               "lma"
++
++/* Database names */
++#define MDS_HDR       "mdshdr"
++#define MDS_DIRINFO   "mds_dirinfo"
++#define MDS_SIZEINFO  "mds_sizeinfo"
++#define MDS_OSTDB     "mds_ostdb"
++#define OST_HDR       "osthdr"
++#define OST_OSTDB     "ost_db"
++
++#define MDS_MAGIC     0xDBABCD01
++#define OST_MAGIC     0xDB123402
++
++#define OBD_COMPAT_OST          0x00000002 /* this is an OST (1.6+) */
++#define OBD_COMPAT_MDT          0x00000004 /* this is an MDT (1.6+) */
++
++#define OBD_INCOMPAT_OST        0x00000002 /* this is an OST (1.8+) */
++#define OBD_INCOMPAT_MDT        0x00000004 /* this is an MDS (1.8+) */
++
++#define LOV_MAX_OSTS 2048       /* Arbitrary limit, can be increased */
++#define LOV_EA_SIZE(lum, num) (sizeof(*lum) + num * sizeof(*lum->lmm_objects))
++#define LOV_EA_MAX(lum) LOV_EA_SIZE(lum, LOV_MAX_OSTS)
++
++/*XXX*/
++#define STRTOUL strtoul
++#define STRTOUL_MAX ULONG_MAX
++
++#define HASH_SIZE 131072
++
++struct lustre_server_data {
++      __u8  lsd_uuid[40];        /* server UUID */
++      __u64 lsd_last_transno;    /* last completed transaction ID */
++      __u64 lsd_compat14;        /* reserved - compat with old last_rcvd */
++      __u64 lsd_mount_count;     /* incarnation number */
++      __u32 lsd_feature_compat;  /* compatible feature flags */
++      __u32 lsd_feature_rocompat;/* read-only compatible feature flags */
++      __u32 lsd_feature_incompat;/* incompatible feature flags */
++      __u32 lsd_server_size;     /* size of server data area */
++      __u32 lsd_client_start;    /* start of per-client data area */
++      __u16 lsd_client_size;     /* size of per-client data area */
++      __u16 lsd_subdir_count;    /* number of subdirectories for objects */
++      __u64 lsd_catalog_oid;     /* recovery catalog object id */
++      __u32 lsd_catalog_ogen;    /* recovery catalog inode generation */
++      __u8  lsd_peeruuid[40];    /* UUID of LOV/OSC associated with MDS */
++      __u32 lsd_ost_index;       /* index number of OST in LOV */
++      __u32 lsd_mdt_index;       /* index number of MDT in LMV */
++};
++
++struct lfsck_mds_hdr {
++      __u64 mds_magic;
++      __u64 mds_flags;
++      __u64 mds_max_files;
++      __u32 mds_num_osts;
++      __u32 mds_unused;
++      __u64 mds_max_ost_id[LOV_MAX_OSTS];
++      struct obd_uuid mds_uuid;
++      struct obd_uuid mds_ost_info[LOV_MAX_OSTS];
++};
++
++struct lfsck_ost_hdr  {
++      __u64 ost_magic;
++      __u64 ost_flags;
++      __u64 ost_num_files;
++      __u64 ost_last_id;
++      __u32 ost_index;
++      __u32 ost_unused;
++      struct obd_uuid ost_mds_uuid;
++      struct obd_uuid ost_uuid;
++};
++
++struct lfsck_mds_dirent {
++      struct lu_fid mds_dirfid;
++      struct lu_fid mds_fid;
++};
++
++struct lfsck_mds_szinfo {
++      __u64 mds_fid;
++      __u64 mds_seq;
++      __u64 mds_size;
++      __u64 mds_calc_size;
++      __u32 mds_stripe_size;
++      __u32 mds_stripe_pattern;
++      __u16 mds_stripe_count;
++      __u16 mds_stripe_start;
++};
++
++struct lfsck_mds_objent {
++      struct lu_fid   mds_fid;
++      struct ost_id   mds_oi;
++      __u32           mds_ostidx;
++      __u32           mds_ostoffset;
++};
++
++struct lfsck_ost_objent {
++      struct ost_id   ost_oi;
++      __u64           ost_size;
++      __u64           ost_bytes;
++};
++
++struct lfsck_ofile_ctx {
++      DB *dbp;
++      __u64 max_id;
++      int have_max_id;
++};
++
++struct lfsck_outdb_info {
++      __u32 ost_count;
++      int have_ost_count;
++      DB *mds_sizeinfo_dbp;
++      struct lfsck_ofile_ctx *ofile_ctx;
++};
++
++/* pass6.c */
++#ifdef FSCK_OK        /* compiling for e2fsck or lfsck */
++extern int e2fsck_lfsck_find_ea(e2fsck_t ctx, struct ext2_inode_large *inode,
++                              struct ext2_ext_attr_entry *entry, void *value,
++                              struct lov_user_md_v1 **lmm,
++                              struct lustre_mdt_attrs **lma);
++extern int e2fsck_lfsck_save_ea(e2fsck_t ctx, ext2_ino_t ino, __u32 generation,
++                               struct lov_user_md_v1 *lmm,
++                               struct lustre_mdt_attrs *lma);
++extern int e2fsck_lfsck_flush_ea(e2fsck_t ctx);
++extern int e2fsck_lfsck_cleanupdb(e2fsck_t ctx);
++extern int e2fsck_lfsck_remove_pending(e2fsck_t ctx, char *block_buf);
++
++/* lfsck_common.c */
++extern char *my_dirname(char *path);
++extern const char *my_basename(const char *path);
++extern int lfsck_create_dbenv(const char *progname);
++extern int lfsck_opendb(const char *fname, const char *dbname, DB **dbpp,
++                      int allow_dup, int keydata_size, int num_files);
++extern void cputole_mds_hdr(struct lfsck_mds_hdr *mds_hdr);
++extern void letocpu_mds_hdr(struct lfsck_mds_hdr *mds_hdr);
++extern void cputole_ost_hdr(struct lfsck_ost_hdr *ost_hdr);
++extern void letocpu_ost_hdr(struct lfsck_ost_hdr *ost_hdr);
++extern void cputole_fid(struct lu_fid *fid);
++extern void letocpu_fid(struct lu_fid *fid);
++extern void cputole_mds_dirent(struct lfsck_mds_dirent *mds_dirent);
++extern void letocpu_mds_dirent(struct lfsck_mds_dirent *mds_dirent);
++extern void cputole_mds_szinfo(struct lfsck_mds_szinfo *mds_szinfo);
++extern void letocpu_mds_szinfo(struct lfsck_mds_szinfo *mds_szinfo);
++extern void cputole_mds_objent(struct lfsck_mds_objent *mds_objent);
++extern void letocpu_mds_objent(struct lfsck_mds_objent *mds_objent);
++extern void cputole_ost_objent(struct lfsck_ost_objent *ost_objent);
++extern void letocpu_ost_objent(struct lfsck_ost_objent *ost_objent);
++extern void letocpu_lov_user_md(struct lov_user_md *lmm);
++
++int lfsck_get_fid(ext2_filsys fs, ino_t ino, struct lu_fid *fid);
++int lfsck_is_dirfid_root(const struct lu_fid *dirfid);
++int lfsck_fidcmp(const struct lu_fid *fid1, const struct lu_fid *fid2);
++#endif /* FSCK_ON */
++
++#define MDS_START_DIRENT_TABLE sizeof(struct lfsck_mds_hdr)
++
++#define MDS_START_SZINFO_TABLE(numfiles) \
++sizeof(struct lfsck_mds_hdr) + (sizeof(struct lfsck_mds_dirent) * numfiles)
++
++#define MDS_START_OST_TABLE_OFFSET(idx, numfiles) \
++sizeof(struct lfsck_mds_hdr) + (sizeof(struct lfsck_mds_dirent) * numfiles) +\
++(sizeof(struct lfsck_mds_szinfo) * numfiles) +\
++(sizeof(struct lfsck_mds_objent_hdr) + \
++((sizeof(struct lfsck_mds_objent) * numfiles)) * (idx)) + \
++sizeof(struct lfsck_mds_objent_hdr)
++
++#define MDS_START_OST_HDR_OFFSET(idx, numfiles) \
++sizeof(struct lfsck_mds_hdr) + (sizeof(struct lfsck_mds_dirent) * numfiles) +\
++(sizeof(struct lfsck_mds_szinfo) * numfiles) +\
++(sizeof(struct lfsck_mds_objent_hdr) + \
++((sizeof(struct lfsck_mds_objent) * numfiles)) * (idx))
++
++#define OST_START_OFFSET  sizeof(struct lfsck_ost_hdr)
++
++#else /* !ENABLE_LFSCK */
++#define e2fsck_lfsck_found_ea(ctx, ino, inode, entry, value) (0)
++#define e2fsck_lfsck_flush_ea(ctx) (0)
++#define e2fsck_lfsck_cleanupdb(ctx) (0)
++#define e2fsck_lfsck_remove_pending(ctx, block_buf) (0)
++#endif /* ENABLE_LFSCK */
++
++#endif /* LFSCK_H */
+Index: e2fsprogs/e2fsck/lfsck_common.c
+===================================================================
+--- /dev/null
++++ e2fsprogs/e2fsck/lfsck_common.c
+@@ -0,0 +1,434 @@
++/*
++ * Copyright (c) 2004  Hewlett-Packard Co.
++ */
++/*****************************************************************************
++ * e2fsck extentions: code for gathering data from the OST & MDT filesystems
++ * when e2fsck is run against them. The best description and knowledge of
++ * the layout and information gathered is in lfsck.h where the structures
++ * defining each entry in the tables are declared. Basically the ost file
++ * contains one table with each entry holding the object id and size.
++ * In addition there is header information at the start of the file.
++ * The MDT file contains multiple tables, one per OST. Each MDT/OST table
++ * contains an entry describing the MDT FID and the OST object associated
++ * with this FID on an OST. In addition the MDT also contains a table
++ * with the mds_fid and the FID of the containg directory. Header information
++ * for each table is also included.
++ * lfsck is run afterwards where the data gathered and stored here is cross
++ * checked to ensure consistency and correctness
++ *
++ *****************************************************************************/
++#include <string.h>
++#include <time.h>
++#include <errno.h>
++#include <limits.h>
++#include <stdlib.h>
++#include <unistd.h>
++
++#include "ext2fs/lfsck.h"
++
++#ifdef ENABLE_LFSCK
++char *my_dirname(char *path)
++{
++
++      if (path != NULL) {
++              char *tmp = strrchr(path, '/');
++              if (tmp != NULL) {
++                      *tmp = '\0';
++                      return path;
++              }
++      }
++
++      return ".";
++}
++
++const char *my_basename(const char *path)
++{
++      if (path != NULL) {
++              char *tmp = strrchr(path, '/');
++              if (tmp != NULL)
++                      return tmp + 1;
++      }
++
++      return path;
++}
++
++DB_ENV *dbenv;
++
++u_int32_t lfsck_hash_raw_fn(const void *p)
++{
++      u_int32_t *c = (u_int32_t *)p;
++      u_int32_t rc = 0;
++
++      rc = (*c >> 7) & (HASH_SIZE - 1) ;
++
++      return rc;
++}
++
++
++u_int32_t lfsck_hash_fn(DB *dbp, const void *p, u_int32_t len)
++{
++      u_int32_t rc = 0 ;
++
++      if (len < sizeof(u_int32_t)) {
++              printf("Hash size error");
++              exit(128);
++      }
++      rc = lfsck_hash_raw_fn(p);
++
++      return (rc);
++}
++
++int lfsck_create_dbenv(const char *progname)
++{
++      int rc;
++      size_t pagesize;
++      long pages;
++      unsigned long cachesize;
++
++      pagesize = getpagesize();
++      pages = sysconf(_SC_AVPHYS_PAGES);
++
++      cachesize = ((pagesize * 3) / 4) * pages;
++      if (cachesize > 500UL * 1024 * 1024) {
++              cachesize = 500UL * 1024 * 1024;
++      } else if (cachesize < 10 * 1024 * 1024) {
++              cachesize = 10 * 1024 * 1024;
++      }
++
++      if ((rc = db_env_create(&dbenv, 0)) != 0) {
++              fprintf(stderr, "%s: error creating dbenv: %s\n",
++                      progname, db_strerror(rc));
++              return (-EINVAL);
++      }
++      if ((rc = dbenv->set_cachesize(dbenv, 0, cachesize,  0)) != 0) {
++              dbenv->err(dbenv, rc, "set_cachesize");
++              dbenv->close(dbenv, 0);
++              return (-EINVAL);
++      }
++      if ((rc = dbenv->set_data_dir(dbenv, "/")) != 0) {
++              dbenv->err(dbenv, rc, "set_data_dir");
++              dbenv->close(dbenv, 0);
++              return (-EINVAL);
++      }
++
++      /* Open the environment with full transactional support. */
++      if ((rc = dbenv->open(dbenv, "/tmp", DB_CREATE | DB_PRIVATE |
++                            DB_INIT_MPOOL|DB_INIT_LOCK|DB_THREAD, 0)) != 0) {
++              dbenv->err(dbenv, rc, "environment open: ");
++              dbenv->close(dbenv, 0);
++              return (-EINVAL);
++      }
++      return (0);
++}
++
++int lfsck_opendb(const char *fname, const char *dbname, DB **dbpp,
++               int allow_dup, int keydata_size, int num_files)
++{
++      static int dbenv_set = 0;
++      DB *dbp;
++      int rc;
++      int pagesize = 512;
++      int h_ffactor = 0;
++
++      if (!dbenv_set) {
++              if (lfsck_create_dbenv(dbname))
++                      return(-EIO);
++              dbenv_set = 1;
++      }
++
++      rc = db_create(&dbp, dbenv, 0);
++      if (rc) {
++              fprintf(stderr, "%s: error db_create: %s\n",
++                      dbname, db_strerror(rc));
++              return(EIO);
++      }
++
++      if ((rc = dbp->set_pagesize(dbp, pagesize)) != 0) {
++              dbp->err(dbp, rc, "set_pagesize");
++              dbp->close(dbp, 0);
++              return(EIO);
++      }
++
++      if ((rc = dbp->set_lorder(dbp, 1234)) != 0 ) {
++              dbp->err(dbp, rc, "set_lorder");
++              dbp->close(dbp, 0);
++              return (EIO);
++      }
++
++      if (keydata_size && num_files) {
++              h_ffactor = (pagesize - 32) / (keydata_size + 8);
++              if ((rc = dbp->set_h_ffactor(dbp, h_ffactor)) != 0) {
++                      dbp->err(dbp, rc, "set_h_ffactor");
++              }
++              if ((rc = dbp->set_h_nelem(dbp, num_files)) != 0 ) {
++                      dbp->err(dbp, rc, "set_h_nelem");
++              }
++      }
++
++      if ((rc = dbp->set_h_hash(dbp, lfsck_hash_fn)) != 0 ) {
++              dbp->err(dbp, rc, "set_h_hash");
++              dbp->close(dbp, 0);
++              return (EIO);
++      }
++
++      if (allow_dup) {
++              if ((rc = dbp->set_flags(dbp, DB_DUPSORT)) != 0) {
++                      fprintf(stderr, "Failure to allow duplicates\n");
++                      dbp->close(dbp, 0);
++                      return (EIO);
++              }
++      }
++
++#if (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1) || (DB_VERSION_MAJOR > 4)
++      if ((rc = dbp->open(dbp, NULL, fname, dbname, DB_HASH,
++                          DB_CREATE | DB_INIT_LOCK | DB_THREAD, 0664)) != 0)
++#else
++      if ((rc = dbp->open(dbp, fname, dbname, DB_HASH,
++                          DB_CREATE | DB_INIT_LOCK | DB_THREAD, 0664)) != 0)
++#endif
++      {
++              dbp->err(dbp, rc, "%s:%s\n", fname, dbname);
++              dbp->close(dbp, 0);
++              return (EIO);
++      }
++      *dbpp = dbp;
++      return (0);
++}
++
++void cputole_mds_hdr(struct lfsck_mds_hdr *mds_hdr)
++{
++      int i, num_osts = mds_hdr->mds_num_osts;
++      mds_hdr->mds_magic = ext2fs_cpu_to_le64(mds_hdr->mds_magic);
++      mds_hdr->mds_flags = ext2fs_cpu_to_le64(mds_hdr->mds_flags);
++      mds_hdr->mds_max_files = ext2fs_cpu_to_le64(mds_hdr->mds_max_files);
++      mds_hdr->mds_num_osts = ext2fs_cpu_to_le64(mds_hdr->mds_num_osts);
++      for (i = 0; i < num_osts; i++) {
++               mds_hdr->mds_max_ost_id[i] =
++                            ext2fs_cpu_to_le64(mds_hdr->mds_max_ost_id[i]);
++      }
++
++}
++
++void letocpu_mds_hdr(struct lfsck_mds_hdr *mds_hdr)
++{
++      int i;
++      mds_hdr->mds_magic = ext2fs_le64_to_cpu(mds_hdr->mds_magic);
++      mds_hdr->mds_flags = ext2fs_le64_to_cpu(mds_hdr->mds_flags);
++      mds_hdr->mds_max_files = ext2fs_le64_to_cpu(mds_hdr->mds_max_files);
++      mds_hdr->mds_num_osts = ext2fs_le64_to_cpu(mds_hdr->mds_num_osts);
++      for (i = 0; i < mds_hdr->mds_num_osts; i ++) {
++              mds_hdr->mds_max_ost_id[i] =
++                           ext2fs_le64_to_cpu(mds_hdr->mds_max_ost_id[i]);
++      }
++}
++
++void cputole_ost_hdr(struct lfsck_ost_hdr *ost_hdr)
++{
++      ost_hdr->ost_magic = ext2fs_cpu_to_le64(ost_hdr->ost_magic);
++      ost_hdr->ost_flags = ext2fs_cpu_to_le64(ost_hdr->ost_flags);
++      ost_hdr->ost_num_files = ext2fs_cpu_to_le64(ost_hdr->ost_num_files);
++      ost_hdr->ost_last_id = ext2fs_cpu_to_le64(ost_hdr->ost_last_id);
++}
++
++void letocpu_ost_hdr(struct lfsck_ost_hdr *ost_hdr)
++{
++      ost_hdr->ost_magic = ext2fs_le64_to_cpu(ost_hdr->ost_magic);
++      ost_hdr->ost_flags = ext2fs_le64_to_cpu(ost_hdr->ost_flags);
++      ost_hdr->ost_num_files = ext2fs_le64_to_cpu(ost_hdr->ost_num_files);
++      ost_hdr->ost_last_id = ext2fs_le64_to_cpu(ost_hdr->ost_last_id);
++}
++
++void cputole_fid(struct lu_fid *fid)
++{
++      fid->f_seq = ext2fs_cpu_to_le64(fid->f_seq);
++      fid->f_oid = ext2fs_cpu_to_le32(fid->f_oid);
++      fid->f_ver = ext2fs_cpu_to_le32(fid->f_ver);
++}
++
++void letocpu_fid(struct lu_fid *fid)
++{
++      fid->f_seq = ext2fs_le64_to_cpu(fid->f_seq);
++      fid->f_oid = ext2fs_le32_to_cpu(fid->f_oid);
++      fid->f_ver = ext2fs_le32_to_cpu(fid->f_ver);
++}
++
++void cputole_oi(struct ost_id *oi)
++{
++      oi->oi_id = ext2fs_cpu_to_le64(oi->oi_id);
++      oi->oi_seq = ext2fs_cpu_to_le64(oi->oi_seq);
++}
++
++void letocpu_oi(struct ost_id *oi)
++{
++      oi->oi_id = ext2fs_le64_to_cpu(oi->oi_id);
++      oi->oi_seq = ext2fs_le64_to_cpu(oi->oi_seq);
++}
++
++void cputole_mds_dirent(struct lfsck_mds_dirent *mds_dirent)
++{
++      cputole_fid(&mds_dirent->mds_dirfid);
++      cputole_fid(&mds_dirent->mds_fid);
++}
++
++void letocpu_mds_dirent(struct lfsck_mds_dirent *mds_dirent)
++{
++      letocpu_fid(&mds_dirent->mds_dirfid);
++      letocpu_fid(&mds_dirent->mds_fid);
++}
++
++void cputole_mds_szinfo(struct lfsck_mds_szinfo *mds_szinfo)
++{
++      mds_szinfo->mds_fid = ext2fs_cpu_to_le64(mds_szinfo->mds_fid);
++      mds_szinfo->mds_seq = ext2fs_cpu_to_le64(mds_szinfo->mds_seq);
++      mds_szinfo->mds_size = ext2fs_cpu_to_le64(mds_szinfo->mds_size);
++      mds_szinfo->mds_calc_size =
++              ext2fs_cpu_to_le64(mds_szinfo->mds_calc_size);
++      mds_szinfo->mds_stripe_size =
++              ext2fs_cpu_to_le32(mds_szinfo->mds_stripe_size);
++      mds_szinfo->mds_stripe_pattern =
++                  ext2fs_cpu_to_le32(mds_szinfo->mds_stripe_pattern);
++      mds_szinfo->mds_stripe_count =
++              ext2fs_cpu_to_le16(mds_szinfo->mds_stripe_count);
++      mds_szinfo->mds_stripe_start =
++              ext2fs_cpu_to_le16(mds_szinfo->mds_stripe_start);
++}
++
++void letocpu_mds_szinfo(struct lfsck_mds_szinfo *mds_szinfo)
++{
++      mds_szinfo->mds_fid = ext2fs_le64_to_cpu(mds_szinfo->mds_fid);
++      mds_szinfo->mds_seq = ext2fs_le64_to_cpu(mds_szinfo->mds_seq);
++      mds_szinfo->mds_size = ext2fs_le64_to_cpu(mds_szinfo->mds_size);
++      mds_szinfo->mds_calc_size =
++              ext2fs_le64_to_cpu(mds_szinfo->mds_calc_size);
++      mds_szinfo->mds_stripe_size =
++              ext2fs_le32_to_cpu(mds_szinfo->mds_stripe_size);
++      mds_szinfo->mds_stripe_pattern =
++              ext2fs_le32_to_cpu(mds_szinfo->mds_stripe_pattern);
++      mds_szinfo->mds_stripe_count =
++              ext2fs_le16_to_cpu(mds_szinfo->mds_stripe_count);
++      mds_szinfo->mds_stripe_start =
++              ext2fs_le16_to_cpu(mds_szinfo->mds_stripe_start);
++}
++
++void cputole_mds_objent(struct lfsck_mds_objent *mds_objent)
++{
++      cputole_fid(&mds_objent->mds_fid);
++      cputole_oi(&mds_objent->mds_oi);
++      mds_objent->mds_ostidx = ext2fs_cpu_to_le32(mds_objent->mds_ostidx);
++      mds_objent->mds_ostoffset=ext2fs_cpu_to_le32(mds_objent->mds_ostoffset);
++}
++
++void letocpu_mds_objent(struct lfsck_mds_objent *mds_objent)
++{
++      letocpu_fid(&mds_objent->mds_fid);
++      letocpu_oi(&mds_objent->mds_oi);
++      mds_objent->mds_ostidx = ext2fs_le32_to_cpu(mds_objent->mds_ostidx);
++      mds_objent->mds_ostoffset=ext2fs_le32_to_cpu(mds_objent->mds_ostoffset);
++}
++
++void cputole_ost_objent(struct lfsck_ost_objent *ost_objent)
++{
++      cputole_oi(&ost_objent->ost_oi);
++      ost_objent->ost_size = ext2fs_cpu_to_le64(ost_objent->ost_size);
++      ost_objent->ost_bytes = ext2fs_cpu_to_le64(ost_objent->ost_bytes);
++}
++
++void letocpu_ost_objent(struct lfsck_ost_objent *ost_objent)
++{
++      letocpu_oi(&ost_objent->ost_oi);
++      ost_objent->ost_oi.oi_id = ext2fs_le64_to_cpu(ost_objent->ost_oi.oi_id);
++      ost_objent->ost_oi.oi_seq=ext2fs_le64_to_cpu(ost_objent->ost_oi.oi_seq);
++      ost_objent->ost_size = ext2fs_le64_to_cpu(ost_objent->ost_size);
++      ost_objent->ost_bytes = ext2fs_le64_to_cpu(ost_objent->ost_bytes);
++}
++
++void letocpu_lov_user_md(struct lov_user_md *lmm)
++{
++      struct lov_user_ost_data_v1 *loi;
++      int i;
++
++      lmm->lmm_magic = ext2fs_le32_to_cpu(lmm->lmm_magic);
++      lmm->lmm_pattern = ext2fs_le32_to_cpu(lmm->lmm_pattern);
++      letocpu_oi((struct ost_id *)&lmm->lmm_object_id);
++      lmm->lmm_stripe_size = ext2fs_le32_to_cpu(lmm->lmm_stripe_size);
++      lmm->lmm_stripe_count = ext2fs_le16_to_cpu(lmm->lmm_stripe_count);
++      /* No swabbing needed for the lov_user_md_v3 lmm_pool_name */
++
++      if (lmm->lmm_magic == LOV_USER_MAGIC_V3)
++              loi = ((struct lov_user_md_v3 *)lmm)->lmm_objects;
++      else /* if (lmm->lmm_magic == LOV_USER_MAGIC_V1) */
++              loi = lmm->lmm_objects;
++      /* If there is a bad magic, this will be found immediately in the
++       * call to lfsck_check_lov_ea() following this function. */
++
++      for (i = 0; i < lmm->lmm_stripe_count; i++, loi++) {
++              letocpu_oi((struct ost_id *)&loi->l_object_id);
++              loi->l_ost_gen = ext2fs_le32_to_cpu(loi->l_ost_gen);
++              loi->l_ost_idx = ext2fs_le32_to_cpu(loi->l_ost_idx);
++      }
++}
++
++int lfsck_get_fid(ext2_filsys fs, ino_t ino, struct lu_fid *fid)
++{
++      struct ext2_inode *inode;
++      errcode_t rc;
++      int size;
++      struct lustre_mdt_attrs lma;
++
++      rc = ext2fs_get_mem(EXT2_INODE_SIZE(fs->super), &inode);
++      if (rc) {
++              com_err("ext2fs_get_mem", rc, "allocating %d bytes\n",
++                      EXT2_INODE_SIZE(fs->super));
++              return rc;
++      }
++      rc = ext2fs_read_inode_full(fs, ino, inode, EXT2_INODE_SIZE(fs->super));
++      if (rc) {
++              com_err("ext2fs_read_inode_full", rc,
++                      "reading inode %lu\n", ino);
++              ext2fs_free_mem(&inode);
++              return rc;
++      }
++      rc = ext2fs_attr_get(fs, inode, EXT2_ATTR_INDEX_TRUSTED, "lma",
++                           (char *)&lma, sizeof(lma), &size);
++      if (rc) {
++              if (rc != EXT2_ET_EA_NAME_NOT_FOUND &&
++                  rc != EXT2_ET_EA_BAD_MAGIC) {
++                      ext2fs_free_mem(&inode);
++                      return rc;
++              }
++              /* compose igif */
++              fid->f_seq = ino;
++              fid->f_oid = inode->i_generation;
++              fid->f_ver = 0;
++      } else {
++              *fid = lma.lma_self_fid;
++      }
++      ext2fs_free_mem(&inode);
++      return 0;
++}
++
++int lfsck_is_dirfid_root(const struct lu_fid *dirfid)
++{
++      if (dirfid->f_seq == EXT2_ROOT_INO &&
++          dirfid->f_oid == 0 && dirfid->f_ver == 0)
++              return 1;
++      return 0;
++}
++
++int lfsck_fidcmp(const struct lu_fid *fid1, const struct lu_fid *fid2)
++{
++      if (fid_is_igif(fid1) && fid_is_igif(fid2)) {
++              /* do not compare f_ver for comparing igif-s */
++              if (fid1->f_seq == fid2->f_seq && fid1->f_oid == fid2->f_oid)
++                      return 0;
++              return 1;
++      }
++      if (!fid_is_igif(fid1) && !fid_is_igif(fid2)) {
++              if (fid1->f_seq == fid2->f_seq && fid1->f_oid == fid2->f_oid &&
++                      fid1->f_ver == fid2->f_ver)
++                      return 0;
++              return 1;
++      }
++      return 1;
++}
++#endif
+Index: e2fsprogs/e2fsck/pass6.c
+===================================================================
+--- /dev/null
++++ e2fsprogs/e2fsck/pass6.c
+@@ -0,0 +1,1511 @@
++/* -*- mode: c; c-basic-offset: 8; -*-
++ * vim:shiftwidth=8:tabstop=8:
++ *
++ * GPL HEADER START
++ *
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 only,
++ * as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * General Public License version 2 for more details (a copy is included
++ * in the LICENSE file that accompanied this code).
++ *
++ *
++ * Copyright (c) 2004  Hewlett-Packard Co.
++ */
++/*****************************************************************************
++ * e2fsck extentions: code for gathering data from the ost & mds filesystems
++ * when e2fsck is run against them. The best description and knowledge of the
++ * layout and information gathered is in lfsck.h where the structures
++ * defining each entry in the tables are declared. Basically the ost file
++ * contains one table with each entry holding the object id and size.
++ * In addition there is header information at the start of the file.
++ * The mds file contains multiple tables one per ost. Each mds/ost table
++ * contains an entry describing the mds fid and the ost object associated
++ * with this fid on an ost. In addition the mds also contains a table
++ * with the mds_fid and the fid of the containg directory. Header information
++ * for each table is also included.
++ * lfsck is run afterwards where the data gathered and stored here is cross
++ * checked to ensure consistency and correctness
++ *
++ *****************************************************************************/
++#include <string.h>
++#include <time.h>
++#include <errno.h>
++#include <limits.h>
++#include <stdlib.h>
++#include "ext2fs/ext2_fs.h"
++#include "ext2fs/ext2fs.h"
++
++#ifdef ENABLE_LFSCK
++#include "e2fsck.h"
++#include "ext2fs/lfsck.h"
++#include "problem.h"
++//#define LOG_REMOVAL
++
++#define VERBOSE(ctx, fmt, args...) \
++do { if (ctx->options & E2F_OPT_VERBOSE) printf(fmt, ##args); } while (0)
++
++#define DEBUG(ctx, fmt, args...) \
++do { if (ctx->options & E2F_OPT_DEBUG) printf(fmt, ##args); } while (0)
++
++struct lfsck_mds_ctx {
++      e2fsck_t        ctx;
++      DB              *outdb;
++      ext2_ino_t      dot;
++      ext2_ino_t      dotdot;
++      struct lu_fid   dotfid;
++      int             numfiles;
++};
++
++struct lfsck_ost_ctx {
++      e2fsck_t        ctx;
++      DB              *outdb;
++      ext2_ino_t      dirinode;
++      int             numfiles;
++      int             status;
++      __u64           max_objid;
++};
++
++int e2fsck_lfsck_cleanupdb(e2fsck_t ctx)
++{
++      int i;
++      int rc = 0;
++      DB *dbp;
++
++      if (ctx->lfsck_oinfo == NULL) {
++              return (0);
++      }
++
++      for (i = 0; i < ctx->lfsck_oinfo->ost_count; i++) {
++              if (ctx->lfsck_oinfo->ofile_ctx[i].dbp != NULL) {
++                      dbp = ctx->lfsck_oinfo->ofile_ctx[i].dbp;
++                      rc += dbp->close(dbp, 0);
++                      ctx->lfsck_oinfo->ofile_ctx[i].dbp = NULL;
++              }
++      }
++      if (ctx->lfsck_oinfo->mds_sizeinfo_dbp != NULL) {
++              dbp = ctx->lfsck_oinfo->mds_sizeinfo_dbp;
++              rc += dbp->close(dbp, 0);
++              ctx->lfsck_oinfo->mds_sizeinfo_dbp = NULL;
++      }
++      if (ctx->lfsck_oinfo->ofile_ctx)
++              ext2fs_free_mem(ctx->lfsck_oinfo->ofile_ctx);
++      ext2fs_free_mem(&ctx->lfsck_oinfo);
++
++      return(rc);
++}
++
++/* What is the last object id for the OST on the MDS */
++int e2fsck_get_lov_objids(e2fsck_t ctx, struct lfsck_outdb_info *outdb)
++{
++      ext2_filsys fs = ctx->fs;
++      ext2_ino_t inode;
++      ext2_file_t e2_file;
++      __u64 *lov_objids = NULL;
++      unsigned int got;
++      char *block_buf;
++      int i, rc = 0;
++
++      block_buf = e2fsck_allocate_memory(ctx, fs->blocksize * 3,
++                                         "block iterate buffer");
++
++      rc = ext2fs_lookup(fs, EXT2_ROOT_INO, LOV_OBJID,
++                         strlen(LOV_OBJID), block_buf, &inode);
++      if (rc)
++              goto out;
++
++      lov_objids = e2fsck_allocate_memory(ctx,
++                                          sizeof(*lov_objids) * LOV_MAX_OSTS,
++                                          "lov_objids array");
++      if (lov_objids == NULL) {
++              rc = ENOMEM;
++              goto out;
++      }
++
++      rc = ext2fs_file_open(fs, inode, 0, &e2_file);
++      if (rc)
++              goto out;
++
++      rc = ext2fs_file_read(e2_file, lov_objids,
++                            sizeof(*lov_objids) * LOV_MAX_OSTS, &got);
++      rc = ext2fs_file_close(e2_file);
++
++      outdb->ost_count = got / sizeof(*lov_objids);
++      for (i = 0; i < outdb->ost_count; i++) {
++              VERBOSE(ctx,"MDS: ost_idx %d max_id "LPU64"\n",i,lov_objids[i]);
++              outdb->ofile_ctx[i].max_id = lov_objids[i];
++              outdb->ofile_ctx[i].have_max_id = 1;
++              outdb->have_ost_count = 1;
++      }
++
++out:
++      ext2fs_free_mem(&block_buf);
++      if (lov_objids)
++              ext2fs_free_mem(&lov_objids);
++      if (rc)
++              VERBOSE(ctx, "MDS: unable to read lov_objids: rc %d\n", rc);
++      else
++              VERBOSE(ctx, "MDS: got %d bytes = %d entries in lov_objids\n",
++                      got, outdb->ost_count);
++      return (rc);
++}
++
++static int lfsck_write_mds_hdrinfo(e2fsck_t ctx, struct lfsck_outdb_info *outdb)
++{
++      struct lfsck_mds_hdr mds_hdr;
++      ext2_filsys fs = ctx->fs;
++      char *mds_hdrname;
++      DB *mds_hdrdb = NULL;
++      DBT key, data;
++      int rc = 0;
++      int i;
++
++      mds_hdrname = e2fsck_allocate_memory(ctx, PATH_MAX,
++                                         "mds_hdr filename");
++      sprintf(mds_hdrname, "%s.mdshdr",ctx->lustre_mdsdb);
++
++      if (unlink(mds_hdrname)) {
++              if (errno != ENOENT) {
++                      fprintf(stderr, "Failure to remove old db file %s\n",
++                              mds_hdrname);
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      return -EINVAL;
++              }
++      }
++
++      rc = lfsck_opendb(mds_hdrname, MDS_HDR, &mds_hdrdb, 0, 0, 0);
++      if (rc != 0) {
++              fprintf(stderr, "failure to open database for mdsdhr "
++                      "info%s: %s\n", MDS_HDR, db_strerror(rc));
++              ctx->flags |= E2F_FLAG_ABORT;
++              ext2fs_free_mem(&mds_hdrname);
++              return(rc);
++      }
++
++      /* read in e2fsck_lfsck_save_ea() already if we opened read/write */
++      if (ctx->lfsck_oinfo->ost_count == 0)
++              e2fsck_get_lov_objids(ctx, ctx->lfsck_oinfo);
++
++      memset(&mds_hdr, 0, sizeof(mds_hdr));
++      mds_hdr.mds_magic = MDS_MAGIC;
++      mds_hdr.mds_flags = ctx->options & E2F_OPT_READONLY;
++      mds_hdr.mds_max_files = fs->super->s_inodes_count -
++                          fs->super->s_free_inodes_count;
++      VERBOSE(ctx, "MDS: max_files = "LPU64"\n", mds_hdr.mds_max_files);
++      mds_hdr.mds_num_osts = ctx->lfsck_oinfo->ost_count;
++      VERBOSE(ctx, "MDS: num_osts = %u\n", mds_hdr.mds_num_osts);
++      for (i = 0; i < mds_hdr.mds_num_osts; i++) {
++              mds_hdr.mds_max_ost_id[i] =
++                      ctx->lfsck_oinfo->ofile_ctx[i].max_id;
++      }
++
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      key.data = &mds_hdr.mds_magic;
++      key.size = sizeof(mds_hdr.mds_magic);
++      cputole_mds_hdr(&mds_hdr);
++      data.data = &mds_hdr;
++      data.size = sizeof(mds_hdr);
++      rc = mds_hdrdb->put(mds_hdrdb, NULL, &key, &data, 0);
++      if (rc != 0) {
++              fprintf(stderr, "error: db put %s: %s\n", MDS_HDR,
++                      db_strerror(rc));
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++out:
++      mds_hdrdb->close(mds_hdrdb, 0);
++      ext2fs_free_mem(&mds_hdrname);
++      if (rc == 0) {
++              printf("mds info db file written \n");
++              fflush(stdout);
++
++      }
++      return (rc);
++}
++
++int e2fsck_lfsck_save_ea(e2fsck_t ctx, ext2_ino_t ino, __u32 generation,
++                       struct lov_user_md *lmm, struct lustre_mdt_attrs *lma)
++{
++      ext2_filsys fs = ctx->fs;
++#ifdef LFSCK_CHECK_SIZE
++      struct lfsck_mds_szinfo szinfo;
++#endif /* LFSCK_CHECK_SIZE */
++      struct lov_user_ost_data_v1 *loi;
++      int rc, i;
++      DBT key, data;
++      DB *dbp;
++      __u32 numfiles = fs->super->s_inodes_count -
++                       fs->super->s_free_inodes_count;
++
++      if (!ctx->lfsck_oinfo) {
++              /* remove old db file */
++              if (unlink(ctx->lustre_mdsdb)) {
++                      rc = errno;
++                      if (rc != ENOENT) {
++                              fprintf(stderr,"Error removing old db %s: %s\n",
++                                      ctx->lustre_mdsdb, strerror(rc));
++                              ctx->flags |= E2F_FLAG_ABORT;
++                              return rc;
++                      }
++              }
++
++              rc = ext2fs_get_mem(sizeof(struct lfsck_outdb_info),
++                                  &ctx->lfsck_oinfo);
++              if (rc) {
++                      ctx->lfsck_oinfo = NULL;
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      return rc;
++              }
++              memset(ctx->lfsck_oinfo, 0, sizeof(struct lfsck_outdb_info));
++              rc = ext2fs_get_mem(sizeof(struct lfsck_ofile_ctx)*LOV_MAX_OSTS,
++                                  &ctx->lfsck_oinfo->ofile_ctx);
++              if (rc) {
++                      ext2fs_free_mem(&ctx->lfsck_oinfo);
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      return rc;
++              }
++              memset(ctx->lfsck_oinfo->ofile_ctx, 0,
++                     sizeof(struct lfsck_ofile_ctx) * LOV_MAX_OSTS);
++#ifdef LFSCK_CHECK_SIZE
++              if (lfsck_opendb(ctx->lustre_mdsdb, MDS_SIZEINFO,
++                               &ctx->lfsck_oinfo->mds_sizeinfo_dbp, 0,
++                               sizeof(szinfo.mds_fid) + sizeof(szinfo),
++                               numfiles)) {
++                      fprintf(stderr, "Failed to open db file %s\n",
++                              MDS_SIZEINFO);
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      return (EIO);
++              }
++#endif /* LFSCK_CHECK_SIZE */
++
++              if (ctx->options & E2F_OPT_READONLY) {
++                      e2fsck_get_lov_objids(ctx, ctx->lfsck_oinfo);
++                      lfsck_write_mds_hdrinfo(ctx, ctx->lfsck_oinfo);
++              }
++      }
++      if (lmm->lmm_magic == LOV_USER_MAGIC_V3)
++              loi = ((struct lov_user_md_v3 *)lmm)->lmm_objects;
++      else /* if (lmm->lmm_magic == LOV_USER_MAGIC_V1) */
++              loi = lmm->lmm_objects;
++
++#ifdef LFSCK_CHECK_SIZE
++      /* XXX: We don't save the layout type here.  This doesn't matter for
++       *      now, we don't really need the pool information for lfsck, but
++       *      in the future we may need it for RAID-1 and other layouts. */
++      memset(&szinfo, 0, sizeof(szinfo));
++      szinfo.mds_fid = ino;
++      szinfo.mds_seq = lmm->lmm_object_seq;
++      szinfo.mds_stripe_size = lmm->lmm_stripe_size;
++      szinfo.mds_stripe_start = loi->l_ost_idx;
++      szinfo.mds_calc_size = 0;
++      szinfo.mds_stripe_pattern = lmm->lmm_pattern;
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      key.data = &szinfo.mds_fid;
++      key.size = sizeof(szinfo.mds_fid);
++      cputole_mds_szinfo(&szinfo);
++      data.data = &szinfo;
++      data.size = sizeof(szinfo);
++      dbp = ctx->lfsck_oinfo->mds_sizeinfo_dbp;
++      if ((rc = dbp->put(dbp, NULL, &key, &data, 0)) != 0) {
++              dbp->err(ctx->lfsck_oinfo->mds_sizeinfo_dbp, rc,
++                       "db->put failed\n");
++              e2fsck_lfsck_cleanupdb(ctx);
++              ctx->flags |= E2F_FLAG_ABORT;
++              return (EIO);
++      }
++#endif /* LFSCK_CHECK_SIZE */
++      for (i = 0; i < lmm->lmm_stripe_count; i++, loi++) {
++              int ost_idx = loi->l_ost_idx;
++              struct lfsck_mds_objent mds_ent;
++              struct lfsck_ofile_ctx *ofile_ctx =
++                                       &ctx->lfsck_oinfo->ofile_ctx[ost_idx];
++
++              if (ost_idx >= LOV_MAX_OSTS) {
++                      fprintf(stderr, "invalid OST index %u ino %u[%d]\n",
++                              ost_idx, ino, i);
++                      continue;
++              }
++
++              if (ost_idx + 1 > ctx->lfsck_oinfo->ost_count) {
++                      if (ctx->lfsck_oinfo->have_ost_count) {
++                              fprintf(stderr, "bad OST index %u ino %u[%d]\n",
++                                      ost_idx, ino, i);
++                              continue;
++                      }
++                      ctx->lfsck_oinfo->ost_count = ost_idx + 1;
++              }
++
++              if (ofile_ctx->dbp == NULL) {
++                      char dbname[256];
++
++                      sprintf(dbname, "%s.%d", MDS_OSTDB, ost_idx);
++                      rc = lfsck_opendb(ctx->lustre_mdsdb, dbname,
++                                        &ofile_ctx->dbp, 1,
++                                        sizeof(mds_ent), numfiles);
++                      if (rc) {
++                              e2fsck_lfsck_cleanupdb(ctx);
++                              ctx->flags |= E2F_FLAG_ABORT;
++                              return (EIO);
++                      }
++              }
++
++              memset(&mds_ent, 0, sizeof(mds_ent));
++              if (lma) {
++                      mds_ent.mds_fid = lma->lma_self_fid;
++              } else {
++                      mds_ent.mds_fid.f_seq = ino;
++                      mds_ent.mds_fid.f_oid = generation;
++                      mds_ent.mds_fid.f_ver = 0;
++              }
++              mds_ent.mds_oi = *(struct ost_id *)&loi->l_object_id;
++              mds_ent.mds_ostidx = ost_idx;
++              mds_ent.mds_ostoffset = i;
++
++              if (mds_ent.mds_oi.oi_id > ofile_ctx->max_id) {
++                      if (ofile_ctx->have_max_id) {
++                              DEBUG(ctx,
++                                    "[%d] skip obj "LPU64" > max "LPU64"\n",
++                                    ost_idx, mds_ent.mds_oi.oi_id,
++                                    ofile_ctx->max_id);
++                              continue;
++                      }
++                      ofile_ctx->max_id = mds_ent.mds_oi.oi_id;
++              }
++
++              memset(&key, 0, sizeof(key));
++              memset(&data, 0, sizeof(data));
++              key.data = &mds_ent.mds_oi;
++              key.size = sizeof(mds_ent.mds_oi);
++              cputole_mds_objent(&mds_ent);
++              data.data = &mds_ent;
++              data.size = sizeof(mds_ent);
++              dbp = ofile_ctx->dbp;
++#if 0
++              DEBUG(ctx, "OST[%u]: inode FID "DFID" oi "DOIF"\n", ost_idx,
++                    PFID(&mds_ent.mds_fid), POIF(&mds_ent.mds_oi));
++#endif
++              if ((rc = dbp->put(dbp, NULL, &key, &data, 0)) != 0) {
++                      dbp->err(dbp, rc, "db->put failed\n");
++                      e2fsck_lfsck_cleanupdb(ctx);
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      /* XXX - Free lctx memory */
++                      return (EIO);
++              }
++      }
++      return (0);
++}
++
++static int lfsck_check_lov_ea(e2fsck_t ctx, struct lov_user_md *lmm)
++{
++      if (lmm->lmm_magic != LOV_USER_MAGIC_V1 &&
++          lmm->lmm_magic != LOV_USER_MAGIC_V3) {
++              VERBOSE(ctx, "error: only handle v1/v3 LOV EAs, not %08x\n",
++                      lmm->lmm_magic);
++              return(-EINVAL);
++      }
++
++      return 0;
++}
++
++static int lfsck_check_lma_ea(e2fsck_t ctx, struct lustre_mdt_attrs *lma)
++{
++      return 0;
++}
++
++/*
++ * e2fsck pass1 has found a file with an EA let's save the information in
++ * the correct table(s).  This is only called for an MDS search.
++ */
++int e2fsck_lfsck_find_ea(e2fsck_t ctx, struct ext2_inode_large *inode,
++                       struct ext2_ext_attr_entry *entry, void *value,
++                       struct lov_user_md **lmm,
++                       struct lustre_mdt_attrs **lma)
++{
++      /* This ensures that we don't open the file here if traversing an OST */
++      if ((ctx->lustre_devtype & LUSTRE_TYPE) != LUSTRE_MDS)
++              return 0;
++
++      if (!LINUX_S_ISREG(inode->i_mode))
++              return 0;
++
++      if (entry->e_name_index == EXT3_XATTR_INDEX_TRUSTED &&
++          entry->e_name_index == EXT3_XATTR_INDEX_LUSTRE)
++              return 0;
++
++      if (strncmp(entry->e_name, XATTR_LUSTRE_MDS_LOV_EA,
++                  entry->e_name_len) == 0) {
++              *lmm = value;
++              letocpu_lov_user_md(*lmm);
++
++              if (lfsck_check_lov_ea(ctx, *lmm)) {
++                      *lmm = NULL;
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      return -EINVAL;
++              }
++      } else if (strncmp(entry->e_name, XATTR_LUSTRE_MDT_LMA_EA,
++                         entry->e_name_len) == 0) {
++              *lma = value;
++              if (lfsck_check_lma_ea(ctx, *lma)) {
++                      *lma = NULL;
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      return -EINVAL;
++              }
++      }
++
++      return 0;
++}
++
++/* make sure that the mds data is on file */
++int e2fsck_lfsck_flush_ea(e2fsck_t ctx)
++{
++      int i, rc = 0;
++      DB *dbp;
++
++      if ((ctx->lustre_devtype & LUSTRE_TYPE) != LUSTRE_MDS)
++              return (0);
++
++      if (ctx->lfsck_oinfo == 0)
++              return (0);
++
++      for (i = 0; i < ctx->lfsck_oinfo->ost_count; i++) {
++              if (ctx->lfsck_oinfo->ofile_ctx == NULL)
++                      break;
++
++              if (ctx->lfsck_oinfo->ofile_ctx[i].dbp != NULL) {
++                      dbp = ctx->lfsck_oinfo->ofile_ctx[i].dbp;
++                      rc += dbp->close(dbp, 0);
++                      ctx->lfsck_oinfo->ofile_ctx[i].dbp = NULL;
++              }
++      }
++      if (ctx->lfsck_oinfo->mds_sizeinfo_dbp != NULL) {
++              dbp = ctx->lfsck_oinfo->mds_sizeinfo_dbp;
++              rc += dbp->close(dbp, 0);
++              ctx->lfsck_oinfo->mds_sizeinfo_dbp = NULL;
++      }
++
++      if (rc)
++              ctx->flags |= E2F_FLAG_ABORT;
++
++      return(rc);
++}
++
++/* From debugfs.c for file removal */
++static int lfsck_release_blocks_proc(ext2_filsys fs, blk_t *blocknr,
++                             int blockcnt, void *private)
++{
++      blk_t   block;
++
++      block = *blocknr;
++      ext2fs_block_alloc_stats(fs, block, -1);
++      return 0;
++}
++
++static void lfsck_kill_file_by_inode(ext2_filsys fs, ext2_ino_t inode)
++{
++      struct ext2_inode inode_buf;
++
++      if (ext2fs_read_inode(fs, inode, &inode_buf))
++              return;
++
++      inode_buf.i_dtime = time(NULL);
++      if (ext2fs_write_inode(fs, inode, &inode_buf))
++              return;
++
++      ext2fs_block_iterate(fs, inode, 0, NULL,
++                           lfsck_release_blocks_proc, NULL);
++      ext2fs_inode_alloc_stats2(fs, inode, -1,
++                                LINUX_S_ISDIR(inode_buf.i_mode));
++}
++
++/*
++ * remove a file. Currently this removes the lov_objids file
++ * since otherwise the automatic deletion of precreated objects on
++ * mds/ost connection could potentially remove objects with
++ * data - this would be especially the case if the mds has being
++ * restored from backup
++ */
++static int lfsck_rm_file(e2fsck_t ctx, ext2_ino_t dir, char *name)
++{
++      ext2_filsys fs = ctx->fs;
++      ext2_ino_t ino;
++      struct ext2_inode inode;
++      int rc;
++
++      rc = ext2fs_lookup(fs, dir, name, strlen(name),
++                         NULL, &ino);
++      if (rc)
++              return (0);
++
++      if (ext2fs_read_inode(fs, ino, &inode))
++              return(-EINVAL);
++
++      --inode.i_links_count;
++
++      if (ext2fs_write_inode(fs, ino, &inode))
++              return (-EINVAL);
++
++      if (ext2fs_unlink(fs, dir, name, ino, 0))
++              return (-EIO);
++
++      if (inode.i_links_count == 0)
++              lfsck_kill_file_by_inode(fs, ino);
++
++      return(0);
++}
++
++/* called for each ost object - save the object id and size */
++static int lfsck_list_objs(ext2_ino_t dir, int entry,
++                         struct ext2_dir_entry *dirent, int offset,
++                         int blocksize, char *buf, void *priv_data)
++{
++      struct lfsck_ost_ctx *lctx = priv_data;
++      struct lfsck_ost_objent objent;
++      struct ext2_inode inode;
++      DBT key, data;
++      DB *dbp;
++      char name[32]; /* same as filter_fid2dentry() */
++
++      if (!ext2fs_check_directory(lctx->ctx->fs, dirent->inode))
++              return (0);
++
++      memset(name, 0, sizeof(name));
++      strncpy(name, dirent->name, dirent->name_len & 0xFF);
++      memset(&objent, 0, sizeof(objent));
++      objent.ost_oi.oi_id = STRTOUL(name, NULL, 10);
++      if (objent.ost_oi.oi_id == STRTOUL_MAX) {
++              lctx->status = 1;
++              lctx->ctx->flags |= E2F_FLAG_ABORT;
++              return(DIRENT_ABORT);
++      }
++
++      if (ext2fs_read_inode(lctx->ctx->fs, dirent->inode, &inode)) {
++              lctx->status = 1;
++              lctx->ctx->flags |= E2F_FLAG_ABORT;
++              return(DIRENT_ABORT);
++      }
++
++      if (LINUX_S_ISREG(inode.i_mode))
++              objent.ost_size = EXT2_I_SIZE(&inode);
++      else
++              objent.ost_size = inode.i_size;
++      objent.ost_bytes = (__u64)inode.i_blocks * 512;
++
++      if (objent.ost_oi.oi_id > lctx->max_objid)
++              lctx->max_objid = objent.ost_oi.oi_id;
++
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      key.data = &objent.ost_oi;
++      key.size = sizeof(objent.ost_oi);
++      cputole_ost_objent(&objent);
++      data.data = &objent;
++      data.size = sizeof(objent);
++      dbp = lctx->outdb;
++      if (dbp->put(dbp, NULL, &key, &data, 0) != 0) {
++              fprintf(stderr, "Failure to put data into db\n");
++              lctx->ctx->flags |= E2F_FLAG_ABORT;
++              return(DIRENT_ABORT);
++      }
++
++      lctx->numfiles ++;
++      return (0);
++}
++
++/* For each file on the mds save the fid and the containing directory */
++static int lfsck_mds_dirs(ext2_ino_t dir, int entry,
++                        struct ext2_dir_entry *de, int offset,
++                        int blocksize, char *buf, void *priv_data)
++{
++      struct ext2_dir_entry_2 *dirent = (struct ext2_dir_entry_2 *)de;
++      struct lfsck_mds_ctx *lctx = priv_data;
++      struct lfsck_mds_ctx lctx2;
++      struct lfsck_mds_dirent mds_dirent;
++      DBT key, data;
++      DB *dbp = lctx->outdb;
++      int file_type;
++      int rc = 0;
++
++      DEBUG(lctx->ctx, "MDT: inode %u, file %.*s, type %u\n",
++            dirent->inode, dirent->name_len, dirent->name,
++            dirent->file_type & 0x15);
++      if (dirent->inode == lctx->dot || dirent->inode == lctx->dotdot)
++              return (0);
++
++      /* only the low 4 bits are used to specify file type */
++      file_type = dirent->file_type & 15;
++      if (file_type != EXT2_FT_DIR && file_type != EXT2_FT_REG_FILE)
++              return (0);
++
++      lctx->numfiles++;
++
++      rc = lfsck_get_fid(lctx->ctx->fs, dirent->inode, &mds_dirent.mds_fid);
++      if (rc != 0)
++              return 0;
++
++      DEBUG(lctx->ctx, "MDT: dirfid "DFID" child "DFID" file %.*s\n",
++            PFID(&mds_dirent.mds_dirfid), PFID(&mds_dirent.mds_fid),
++            dirent->name_len, dirent->name);
++
++      mds_dirent.mds_dirfid = lctx->dotfid;
++      cputole_mds_dirent(&mds_dirent);
++
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      key.data = &mds_dirent.mds_fid;
++      key.size = sizeof(mds_dirent.mds_fid);
++      data.data = &mds_dirent;
++      data.size = sizeof(mds_dirent);
++
++      if ((rc = dbp->put(dbp, NULL, &key, &data, 0)) != 0) {
++              if (rc != DB_KEYEXIST) {
++                      fprintf(stderr,
++                              "error adding MDS inode %.*s (inum %u): %s\n",
++                              dirent->name_len & 0xFF, dirent->name,
++                              dirent->inode, db_strerror(rc));
++                      lctx->ctx->flags |= E2F_FLAG_ABORT;
++                      return (DIRENT_ABORT);
++              }
++      }
++      if (file_type == EXT2_FT_DIR) {
++              lctx2 = *lctx;
++              lctx2.dot = dirent->inode;
++              lctx2.dotdot = lctx->dot;
++              lctx2.dotfid = mds_dirent.mds_fid;
++              if (ext2fs_dir_iterate2(lctx->ctx->fs, dirent->inode, 0, NULL,
++                                      lfsck_mds_dirs, &lctx2)) {
++                      return (DIRENT_ABORT);
++              }
++              lctx->numfiles = lctx2.numfiles;
++      }
++      return(0);
++}
++
++/* For each directory get the objects and save the data */
++static int lfsck_iterate_obj_dirs(ext2_ino_t dir, int entry,
++                                struct ext2_dir_entry *dirent, int offset,
++                                int blocksize, char *buf, void *priv_data)
++{
++      struct lfsck_ost_ctx *lctx = priv_data;
++
++      if (ext2fs_check_directory(lctx->ctx->fs, dirent->inode))
++              return (0);
++
++      /* Traverse the d* directories */
++      if (*dirent->name != 'd')
++              return (0);
++
++      ext2fs_dir_iterate2(lctx->ctx->fs, dirent->inode, 0, NULL,
++                          lfsck_list_objs, priv_data);
++      if (lctx->status != 0)
++              return (DIRENT_ABORT);
++
++      return(0);
++}
++
++/* Get the starting point of where the objects reside */
++static int lfsck_get_object_dir(e2fsck_t ctx, char *block_buf,ext2_ino_t *inode)
++{
++      ext2_filsys fs = ctx->fs;
++      ext2_ino_t  tinode;
++      int rc;
++
++      rc = ext2fs_lookup(fs, EXT2_ROOT_INO, OBJECT_DIR, strlen(OBJECT_DIR),
++                         block_buf, &tinode);
++      if (rc) {
++              fprintf(stderr, "error looking up OST object parent dir\n");
++              return (ENOENT);
++      }
++      rc = ext2fs_check_directory(fs, tinode);
++      if (rc) {
++              return(ENOENT);
++      }
++
++      rc = ext2fs_lookup(fs, tinode, OBJECT_DIR_V1, strlen(OBJECT_DIR_V1),
++                         block_buf, inode);
++      if (rc) {
++              rc = ext2fs_lookup(fs, tinode, OBJECT_DIR_V2,
++                                 strlen(OBJECT_DIR_V2), block_buf, inode);
++              if (rc) {
++                      fprintf(stderr, "error looking up OST object subdir\n");
++                      return (-ENOENT);
++              }
++      }
++      rc = ext2fs_check_directory(fs, *inode);
++      if (rc) {
++              return(-ENOENT);
++      }
++      return(0);
++}
++
++/* What is the last object id for the OST */
++static int lfsck_get_last_id(e2fsck_t ctx, __u64 *last_id)
++{
++      ext2_filsys fs = ctx->fs;
++      ext2_ino_t  inode, tinode;
++      ext2_file_t  e2_file;
++      char *block_buf;
++      unsigned int got;
++      int rc;
++
++      block_buf = e2fsck_allocate_memory(ctx, fs->blocksize * 3,
++                                         "lookup buffer");
++
++      rc = lfsck_get_object_dir(ctx, block_buf, &inode);
++      if (rc)
++              goto out;
++
++      rc = ext2fs_lookup(fs, inode, LAST_ID,
++                         strlen(LAST_ID), block_buf, &tinode);
++      if (rc)
++              goto out;
++
++      rc = ext2fs_file_open(fs, tinode, 0, &e2_file);
++      if (rc)
++              goto out;
++
++      rc = ext2fs_file_read(e2_file, last_id, sizeof(__u64), &got);
++      if (rc) {
++              ext2fs_file_close(e2_file);
++              goto out;
++      }
++
++      if (got != sizeof(__u64)) {
++              rc = EIO;
++              ext2fs_file_close(e2_file);
++              goto out;
++      }
++
++      rc = ext2fs_file_close(e2_file);
++
++      *last_id = ext2fs_le64_to_cpu(*last_id);
++out:
++      ext2fs_free_mem(&block_buf);
++      return (rc);
++}
++
++int lfsck_set_last_id(e2fsck_t ctx,  __u64 last_id)
++{
++      ext2_filsys fs = ctx->fs;
++      ext2_ino_t  inode, tinode;
++      ext2_file_t  e2_file;
++      char *block_buf;
++      unsigned int written;
++      int rc;
++
++      block_buf = e2fsck_allocate_memory(ctx, fs->blocksize * 3,
++                                         "lookup buffer");
++
++      rc = lfsck_get_object_dir(ctx, block_buf, &inode);
++      if (rc)
++              goto out;
++
++      rc = ext2fs_lookup(fs, inode, LAST_ID,
++                         strlen(LAST_ID), block_buf, &tinode);
++      if (rc)
++              goto out;
++
++      rc = ext2fs_file_open(fs, tinode, EXT2_FILE_WRITE, &e2_file);
++      if (rc)
++              goto out;
++
++      last_id = ext2fs_cpu_to_le64(last_id);
++
++      rc = ext2fs_file_write(e2_file, &last_id, sizeof(__u64), &written);
++      if (rc) {
++              fprintf(stderr, "Failure to update last id on file\n");
++              ext2fs_file_close(e2_file);
++              goto out;
++      }
++
++      if (written != sizeof(__u64)) {
++              rc = EIO;
++              fprintf(stderr, "Failure to update last id on file\n");
++              ext2fs_file_close(e2_file);
++              goto out;
++      }
++
++      rc = ext2fs_file_close(e2_file);
++
++out:
++      ext2fs_free_mem(&block_buf);
++      return (rc);
++}
++
++int e2fsck_get_last_rcvd_info(e2fsck_t ctx, struct obd_uuid *local_uuid,
++                            struct obd_uuid *peer_uuid, __u32 *subdircount,
++                            __u32 *index, __u32 *compat, __u32 *rocompat,
++                            __u32 *incompat)
++{
++      ext2_filsys fs = ctx->fs;
++      ext2_ino_t inode;
++      ext2_file_t e2_file;
++      struct lustre_server_data *lsd = NULL;
++      unsigned int got;
++      char *block_buf;
++      __u32 cmp, inc;
++      int rc = 0;
++
++      block_buf = e2fsck_allocate_memory(ctx, fs->blocksize * 3,
++                                         "block iterate buffer");
++
++      rc = ext2fs_lookup(fs, EXT2_ROOT_INO, LAST_RCVD, strlen(LAST_RCVD),
++                         block_buf, &inode);
++      if (rc)
++              goto out;
++
++      rc = ext2fs_file_open(fs, inode, 0, &e2_file);
++      if (rc)
++              goto out;
++
++      lsd = e2fsck_allocate_memory(ctx, sizeof(*lsd), "lustre server data");
++      if (lsd == NULL) {
++              rc = ENOMEM;
++              goto out;
++      }
++
++      rc = ext2fs_file_read(e2_file, lsd, sizeof(*lsd), &got);
++      if (rc)
++              goto out;
++      if (got != sizeof(*lsd)) {
++              rc = EIO;
++              goto out;
++      }
++
++      if (local_uuid)
++              memcpy(local_uuid, &lsd->lsd_uuid, sizeof(lsd->lsd_uuid));
++
++      if (peer_uuid)
++              memcpy(peer_uuid, &lsd->lsd_peeruuid,sizeof(lsd->lsd_peeruuid));
++
++      if (subdircount)
++              *subdircount = ext2fs_le16_to_cpu(lsd->lsd_subdir_count);
++
++      if (compat == NULL)
++              compat = &cmp;
++      *compat = ext2fs_le32_to_cpu(lsd->lsd_feature_compat);
++      if (rocompat)
++              *rocompat = ext2fs_le32_to_cpu(lsd->lsd_feature_rocompat);
++      if (incompat == NULL)
++              incompat = &inc;
++      *incompat = ext2fs_le32_to_cpu(lsd->lsd_feature_incompat);
++      if (index) {
++              if (*compat & OBD_COMPAT_OST || *incompat & OBD_INCOMPAT_OST)
++                      *index = ext2fs_le32_to_cpu(lsd->lsd_ost_index);
++              else if (*compat & OBD_COMPAT_MDT||*incompat & OBD_INCOMPAT_MDT)
++                      *index = ext2fs_le32_to_cpu(lsd->lsd_mdt_index);
++              else
++                      *index = -1;
++      }
++
++      rc = ext2fs_file_close(e2_file);
++
++out:
++      ext2fs_free_mem(&block_buf);
++      if (lsd)
++              ext2fs_free_mem(&lsd);
++      return (rc);
++}
++
++int lfsck_rm_log(ext2_ino_t dir, int entry, struct ext2_dir_entry *dirent,
++               int offset, int blocksize, char *buf, void *priv_data)
++{
++      struct lfsck_ost_ctx *lctx = priv_data;
++      char name[EXT2_NAME_LEN + 1];
++
++      if (!ext2fs_check_directory(lctx->ctx->fs, dirent->inode))
++              return (0);
++
++      strncpy(name, dirent->name, dirent->name_len & 0xFF);
++      name[EXT2_NAME_LEN] = '\0';
++      if (memcmp(name, LAST_ID, strlen(LAST_ID)) == 0)
++              return (0);
++
++
++      if (lfsck_rm_file(lctx->ctx, lctx->dirinode, name))
++              return(DIRENT_ABORT);
++
++      return(0);
++}
++
++/* Not 100% sure that this is correct so not activated yet */
++int lfsck_remove_ost_logs(e2fsck_t ctx, char *block_buf)
++{
++      ext2_filsys fs = ctx->fs;
++      struct lfsck_ost_ctx lctx;
++      ext2_ino_t inode;
++      ext2_ino_t  tinode;
++      int rc;
++
++      if (lfsck_rm_file(ctx, EXT2_ROOT_INO, CATLIST)) {
++              ctx->flags |= E2F_FLAG_ABORT;
++              return -EINVAL;
++      }
++
++      rc = ext2fs_lookup(fs, EXT2_ROOT_INO, OBJECT_DIR, strlen(OBJECT_DIR),
++                         block_buf, &tinode);
++      if (rc) {
++              ctx->flags |= E2F_FLAG_ABORT;
++              return (-ENOENT);
++      }
++      rc = ext2fs_check_directory(fs,tinode);
++      if (rc) {
++              ctx->flags |= E2F_FLAG_ABORT;
++              return(-ENOENT);
++      }
++
++      rc = ext2fs_lookup(fs, tinode, LOG_DIR, strlen(LOG_DIR),
++                         block_buf, &inode);
++      if (rc) {
++              ctx->flags |= E2F_FLAG_ABORT;
++              return (-ENOENT);
++      }
++      rc = ext2fs_check_directory(fs, inode);
++      if (rc) {
++              ctx->flags |= E2F_FLAG_ABORT;
++              return(-ENOENT);
++      }
++      lctx.ctx   = ctx;
++      lctx.dirinode = inode;
++
++      if (ext2fs_dir_iterate2(fs, inode, 0, block_buf, lfsck_rm_log, &lctx)) {
++              ctx->flags |= E2F_FLAG_ABORT;
++              return(-EIO);
++      }
++      return (0);
++}
++
++/* Remove files from PENDING dir - this needs to be done before getting ea from
++ * blocks but we need the inode_map bitmap loaded beforehand so load write any
++ * changes then remove references
++ */
++int e2fsck_lfsck_remove_pending(e2fsck_t ctx, char *block_buf)
++{
++      ext2_filsys fs = ctx->fs;
++      struct lfsck_ost_ctx lctx;
++      ext2_ino_t  tinode;
++      int rc = 0;
++
++      rc = ext2fs_lookup(fs, EXT2_ROOT_INO, PENDING_DIR, strlen(PENDING_DIR),
++                         block_buf, &tinode);
++      if (rc) {
++              ctx->flags |= E2F_FLAG_ABORT;
++              return (-ENOENT);
++      }
++      rc = ext2fs_check_directory(fs,tinode);
++      if (rc) {
++              ctx->flags |= E2F_FLAG_ABORT;
++              return(-ENOENT);
++      }
++
++      lctx.ctx   = ctx;
++      lctx.dirinode = tinode;
++
++      e2fsck_read_bitmaps(ctx);
++
++      if (ext2fs_dir_iterate2(fs, tinode, 0, block_buf, lfsck_rm_log, &lctx)){
++              ctx->flags |= E2F_FLAG_ABORT;
++              rc = -EIO;
++      }
++      e2fsck_write_bitmaps(ctx);
++      ext2fs_free_inode_bitmap(fs->inode_map);
++      ext2fs_free_block_bitmap(fs->block_map);
++      fs->inode_map = NULL;
++      fs->block_map = NULL;
++      return (rc);
++}
++
++/* partially using code from debugfs do_write() */
++int lfsck_create_objid(e2fsck_t ctx, __u64 objid)
++{
++      int rc = 0;
++      char dirname[32];
++      char name[32];
++      int len, dirlen;
++      __u32 compat, incompat, subdircount;
++      ext2_ino_t  inode, tinode, cinode;
++      struct ext2_inode ext2inode;
++      char *block_buf;
++
++      block_buf = e2fsck_allocate_memory(ctx, ctx->fs->blocksize * 3,
++                                         "lookup buffer");
++
++      memset(name, 0, 32);
++      memset(dirname, 0, 32);
++
++      len = sprintf(name, LPU64, objid);
++
++      fprintf(stderr, "creating %s\n", name);
++
++      rc = e2fsck_get_last_rcvd_info(ctx, NULL, NULL, &subdircount, NULL,
++                                     &compat, NULL, &incompat);
++      if (rc) {
++              fprintf(stderr, "Error: reading OST last_rcvd file\n");
++              rc = EINVAL;
++              goto out;
++      }
++
++      if (compat & OBD_COMPAT_MDT || incompat & OBD_INCOMPAT_MDT) {
++              fprintf(stderr, "Error: MDS last_rcvd file doing OST check\n");
++              rc = EINVAL;
++              goto out;
++      }
++
++      if (lfsck_get_object_dir(ctx, block_buf, &inode)) {
++              rc = EINVAL;
++              goto out;
++      }
++
++      dirlen = sprintf(dirname, "d%u", (int)objid & (subdircount - 1));
++
++      rc = ext2fs_lookup(ctx->fs, inode, dirname,
++                         dirlen, block_buf, &tinode);
++      if (rc) {
++              rc = EINVAL;
++              goto out;
++      }
++
++      if (ext2fs_namei(ctx->fs, EXT2_ROOT_INO, tinode, name, &cinode) == 0) {
++              fprintf(stderr, "Failure to create obj\n");
++              rc = EINVAL;
++              goto out;
++      }
++
++      rc = ext2fs_new_inode(ctx->fs, tinode, 010755, 0, &cinode);
++      if (rc) {
++              fprintf(stderr, "Failure to create obj\n");
++              rc = EINVAL;
++              goto out;
++      }
++
++      rc = ext2fs_link(ctx->fs, tinode, name, cinode, EXT2_FT_REG_FILE);
++      if (rc) {
++              fprintf(stderr, "Failure to create obj\n");
++              rc = EINVAL;
++              goto out;
++      }
++
++      if (ext2fs_test_inode_bitmap2(ctx->fs->inode_map, cinode)) {
++              fprintf(stderr, "Warning: inode already set");
++      }
++      ext2fs_inode_alloc_stats2(ctx->fs, cinode, +1, 0);
++      memset(&ext2inode, 0, sizeof(ext2inode));
++      ext2inode.i_mode = LINUX_S_IFREG;
++      ext2inode.i_atime = ext2inode.i_ctime = ext2inode.i_mtime = time(NULL);
++      ext2inode.i_links_count = 1;
++      ext2inode.i_size = 0;
++      if (ext2fs_write_inode(ctx->fs, cinode, &ext2inode)) {
++              fprintf(stderr, "Failure to create obj\n");
++              rc = EINVAL;
++              goto out;
++      }
++
++out:
++      ext2fs_free_mem((void *)&(block_buf));
++      return (rc);
++}
++
++/*
++ * For on ost iterate for the direcories and save the object information.
++ */
++void e2fsck_pass6_ost(e2fsck_t ctx)
++{
++      ext2_filsys fs = ctx->fs;
++      struct lfsck_ost_ctx lctx;
++      struct lfsck_ost_hdr ost_hdr;
++      struct lfsck_mds_hdr mds_hdr;
++      struct lfsck_ost_objent objent;
++      DB *outdb = NULL;
++      DB *mds_hdrdb = NULL;
++      DB *osthdr = NULL;
++      DBT key, data;
++      ext2_ino_t dir;
++      __u32 compat, rocompat, incompat;
++      int i, rc;
++      char *block_buf = NULL;
++
++      if (unlink(ctx->lustre_ostdb)) {
++              if (errno != ENOENT) {
++                      fprintf(stderr, "Failure to remove old db file %s\n",
++                              ctx->lustre_ostdb);
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      return;
++              }
++      }
++
++      block_buf = e2fsck_allocate_memory(ctx, fs->blocksize * 3,
++                                         "block iterate buffer");
++
++      rc = lfsck_opendb(ctx->lustre_mdsdb, MDS_HDR, &mds_hdrdb, 0, 0, 0);
++      if (rc != 0) {
++              fprintf(stderr, "failure to open database %s: %s\n",
++                      MDS_HDR, db_strerror(rc));
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++      memset(&mds_hdr, 0, sizeof(mds_hdr));
++      mds_hdr.mds_magic = MDS_MAGIC;
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      key.data = &mds_hdr.mds_magic;
++      key.size = sizeof(mds_hdr.mds_magic);
++      data.data = &mds_hdr;
++      data.size = sizeof(mds_hdr);
++      data.ulen = sizeof(mds_hdr);
++      data.flags = DB_DBT_USERMEM;
++      rc = mds_hdrdb->get(mds_hdrdb, NULL, &key, &data, 0);
++      if (rc) {
++              fprintf(stderr,"error getting mds_hdr ("LPU64":%u) in %s: %s\n",
++                      mds_hdr.mds_magic, (int)sizeof(mds_hdr.mds_magic),
++                      ctx->lustre_mdsdb, db_strerror(rc));
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++      memcpy(&mds_hdr, data.data, sizeof(mds_hdr));
++      letocpu_mds_hdr(&mds_hdr);
++
++      rc = lfsck_opendb(ctx->lustre_ostdb, OST_HDR, &osthdr, 0, 0, 0);
++      if (rc != 0) {
++              fprintf(stderr, "failure to open database %s: %s\n",
++                      OST_HDR, db_strerror(rc));
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++      rc = lfsck_opendb(ctx->lustre_ostdb, OST_OSTDB, &outdb, 0,
++                        sizeof(objent.ost_oi) + sizeof(objent),
++                        fs->super->s_inodes_count -
++                        fs->super->s_free_inodes_count);
++      if (rc != 0) {
++              fprintf(stderr, "error getting ost_hdr in %s: %s\n",
++                      ctx->lustre_ostdb, db_strerror(rc));
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++      memset(&ost_hdr, 0, sizeof(ost_hdr));
++      if (e2fsck_get_last_rcvd_info(ctx, &ost_hdr.ost_uuid,
++                                    &ost_hdr.ost_mds_uuid, NULL,
++                                    &ost_hdr.ost_index,
++                                    &compat, &rocompat, &incompat)) {
++              fprintf(stderr, "Failure to read OST last_rcvd file\n");
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++      VERBOSE(ctx, "OST: '%s' ost idx %u: compat %#x rocomp %#x incomp %#x\n",
++              (char *)&ost_hdr.ost_uuid.uuid, ost_hdr.ost_index,
++              compat, rocompat, incompat);
++
++      if (compat & OBD_COMPAT_MDT) {
++              fprintf(stderr, "Found MDS last_rcvd file doing OST check\n");
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++      /*
++       * Get /O/R or /O/0 directory
++       * for each entry scan all the dirents and get the object id
++       */
++      if (lfsck_get_object_dir(ctx, block_buf, &dir)) {
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++      /*
++       * Okay so we have the containing directory so let's iterate over the
++       * containing d* dirs and then iterate again inside
++       */
++      lctx.ctx = ctx;
++      lctx.outdb = outdb;
++      lctx.status = 0;
++      lctx.numfiles = 0;
++      lctx.max_objid = 0;
++      lctx.status = ext2fs_dir_iterate2(fs, dir, 0, block_buf,
++                                        lfsck_iterate_obj_dirs, &lctx);
++      if (lctx.status) {
++              fprintf(stderr, "Failure in iterating object dirs\n");
++              ctx->flags |= E2F_FLAG_ABORT;
++              return;
++      }
++
++      ost_hdr.ost_magic = OST_MAGIC;
++      ost_hdr.ost_flags = ctx->options & E2F_OPT_READONLY;
++      ost_hdr.ost_num_files = lctx.numfiles;
++      VERBOSE(ctx, "OST: num files = %u\n", lctx.numfiles);
++
++      if (lfsck_get_last_id(ctx, &ost_hdr.ost_last_id)) {
++              fprintf(stderr, "Failure to get last id for objects\n");
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++      VERBOSE(ctx, "OST: last_id = "LPU64"\n", ost_hdr.ost_last_id);
++
++      /* Update the last_id value on the OST if necessary/possible to the
++       * MDS value if larger.  Otherwise we risk creating duplicate objects.
++       * If running read-only, we skip this so new objects are ignored. */
++      ost_hdr.ost_last_id = lctx.max_objid;
++      if (!(ctx->options & E2F_OPT_READONLY) &&
++          !(mds_hdr.mds_flags & E2F_OPT_READONLY)) {
++              for (i = 0; i < mds_hdr.mds_num_osts; i++) {
++                      if (strcmp((char *)mds_hdr.mds_ost_info[i].uuid,
++                                 (char *)ost_hdr.ost_uuid.uuid) == 0 &&
++                          mds_hdr.mds_max_ost_id[i] >= ost_hdr.ost_last_id)
++                              ost_hdr.ost_last_id=mds_hdr.mds_max_ost_id[i]+1;
++              }
++
++              if (lfsck_set_last_id(ctx, ost_hdr.ost_last_id)) {
++                      fprintf(stderr, "Failure to set last id\n");
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      goto out;
++              }
++
++#ifdef LOG_REMOVAL
++              if (lfsck_remove_ost_logs(ctx, block_buf))
++                      ctx->flags |= E2F_FLAG_ABORT;
++#endif
++      }
++
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      key.data = &ost_hdr.ost_magic;
++      key.size = sizeof(ost_hdr.ost_magic);
++      cputole_ost_hdr(&ost_hdr);
++      data.data = &ost_hdr;
++      data.size = sizeof(ost_hdr);
++      if (osthdr->put(osthdr, NULL, &key, &data, 0)) {
++              fprintf(stderr, "Failed to db_put data\n");
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++out:
++      if (mds_hdrdb)
++              mds_hdrdb->close(mds_hdrdb, 0);
++      if (outdb)
++              outdb->close(outdb, 0);
++      if (osthdr)
++              osthdr->close(osthdr, 0);
++      if (block_buf)
++              ext2fs_free_mem((void *)&(block_buf));
++      return;
++}
++
++int lfsck_remove_mds_logs(e2fsck_t ctx)
++{
++      ext2_filsys fs = ctx->fs;
++      struct lfsck_ost_ctx lctx;
++      ext2_ino_t  tinode;
++      int rc = 0;
++
++      if (lfsck_rm_file(ctx, EXT2_ROOT_INO, CATLIST)) {
++              ctx->flags |= E2F_FLAG_ABORT;
++              return -EINVAL;
++      }
++
++      rc = ext2fs_lookup(fs, EXT2_ROOT_INO, OBJECTS, strlen(OBJECTS),
++                         NULL, &tinode);
++      if (rc) {
++              ctx->flags |= E2F_FLAG_ABORT;
++              return (-ENOENT);
++      }
++      rc = ext2fs_check_directory(fs,tinode);
++      if (rc) {
++              ctx->flags |= E2F_FLAG_ABORT;
++              return(-ENOENT);
++      }
++
++      lctx.ctx   = ctx;
++      lctx.dirinode = tinode;
++
++      if (ext2fs_dir_iterate2(fs, tinode, 0, NULL, lfsck_rm_log, &lctx)) {
++              ctx->flags |= E2F_FLAG_ABORT;
++              rc = -EIO;
++      }
++      return (rc);
++}
++
++
++/*
++ * On the mds save the fid and directory information for each file.
++ * The mds ost tables have already been populated by pass1
++ */
++void e2fsck_pass6_mdt(e2fsck_t ctx)
++{
++      ext2_filsys fs = ctx->fs;
++      struct problem_context pctx;
++      struct lfsck_mds_ctx lctx;
++      struct lfsck_mds_dirent mds_dirent;
++      struct lfsck_mds_hdr mds_hdr;
++      DBT key, data;
++      DB *outdb = NULL, *dbhdr = NULL;
++      __u32 compat, rocompat, incompat, index;
++      int rc, i;
++
++      clear_problem_context(&pctx);
++
++      memset(&lctx, 0, sizeof(lctx));
++      lctx.ctx = ctx;
++
++      /* Found no files with EA on filesystem - empty */
++      if (ctx->lfsck_oinfo == NULL) {
++              if (unlink(ctx->lustre_mdsdb)) {
++                      if (errno != ENOENT) {
++                              fprintf(stderr, "Failure to remove old "
++                                      "db file %s\n", ctx->lustre_mdsdb);
++                              ctx->flags |= E2F_FLAG_ABORT;
++                              goto out;
++                      }
++              }
++              rc = ext2fs_get_mem(sizeof(struct lfsck_outdb_info),
++                                  &ctx->lfsck_oinfo);
++              if (rc) {
++                      ctx->lfsck_oinfo = NULL;
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      goto out;
++              }
++              memset(ctx->lfsck_oinfo, 0, sizeof(struct lfsck_outdb_info));
++              rc = ext2fs_get_mem(sizeof(struct lfsck_ofile_ctx)*LOV_MAX_OSTS,
++                                  &ctx->lfsck_oinfo->ofile_ctx);
++              if (rc) {
++                      ext2fs_free_mem(&ctx->lfsck_oinfo);
++                      ctx->lfsck_oinfo = NULL;
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      goto out;
++              }
++              memset(ctx->lfsck_oinfo->ofile_ctx, 0,
++                     sizeof(struct lfsck_ofile_ctx) * LOV_MAX_OSTS);
++      }
++
++      if (!(ctx->options & E2F_OPT_READONLY))
++               lfsck_write_mds_hdrinfo(ctx, ctx->lfsck_oinfo);
++
++      if (lfsck_opendb(ctx->lustre_mdsdb, MDS_DIRINFO, &outdb, 1,
++                       sizeof(mds_dirent.mds_fid) + sizeof(mds_dirent),
++                       fs->super->s_inodes_count -
++                       fs->super->s_free_inodes_count)) {
++              fprintf(stderr, "failure to open database %s\n", MDS_DIRINFO);
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++      lctx.outdb = outdb;
++      lctx.numfiles = 0;
++      lctx.dot = EXT2_ROOT_INO;
++      lctx.dotdot = EXT2_ROOT_INO;
++      lctx.dotfid.f_seq = EXT2_ROOT_INO;
++
++      rc = ext2fs_dir_iterate2(fs, EXT2_ROOT_INO,0,NULL,lfsck_mds_dirs,&lctx);
++      if (rc != 0) {
++              fprintf(stderr, "Error iterating directories: %d\n", rc);
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++      /* read in e2fsck_lfsck_save_ea() already if we opened read/write */
++      if (ctx->lfsck_oinfo->ost_count == 0)
++              e2fsck_get_lov_objids(ctx, ctx->lfsck_oinfo);
++
++      memset(&mds_hdr, 0, sizeof(mds_hdr));
++      mds_hdr.mds_magic = MDS_MAGIC;
++      mds_hdr.mds_flags = ctx->options & E2F_OPT_READONLY;
++      mds_hdr.mds_max_files = fs->super->s_inodes_count -
++                          fs->super->s_free_inodes_count;
++      VERBOSE(ctx, "MDS: max_files = "LPU64"\n", mds_hdr.mds_max_files);
++      mds_hdr.mds_num_osts = ctx->lfsck_oinfo->ost_count;
++      VERBOSE(ctx, "MDS: num_osts = %u\n", mds_hdr.mds_num_osts);
++      for (i = 0; i < mds_hdr.mds_num_osts; i++) {
++              mds_hdr.mds_max_ost_id[i] =
++                      ctx->lfsck_oinfo->ofile_ctx[i].max_id;
++      }
++
++      if (e2fsck_get_last_rcvd_info(ctx, &mds_hdr.mds_uuid, NULL, NULL,
++                                    &index, &compat, &rocompat, &incompat)) {
++              fprintf(stderr, "Failure to read MDS last_rcvd file\n");
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++      VERBOSE(ctx, "MDS: '%s' mdt idx %u: compat %#x rocomp %#x incomp %#x\n",
++              (char *)&mds_hdr.mds_uuid.uuid, index,compat,rocompat,incompat);
++
++      if (compat & OBD_COMPAT_OST || incompat & OBD_INCOMPAT_OST) {
++              fprintf(stderr, "Found OST last_rcvd file doing MDS check\n");
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++      if (!(ctx->options & E2F_OPT_READONLY)) {
++              if (lfsck_rm_file(ctx, EXT2_ROOT_INO, LOV_OBJID)) {
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      goto out;
++              }
++#ifdef LOG_REMOVAL
++              if (lfsck_remove_mds_logs(ctx)) {
++                      ctx->flags |= E2F_FLAG_ABORT;
++                      return;
++              }
++#endif
++      }
++
++      rc = lfsck_opendb(ctx->lustre_mdsdb, MDS_HDR, &dbhdr, 0, 0, 0);
++      if (rc != 0) {
++              fprintf(stderr, "failure to open database %s: %s\n", MDS_HDR,
++                      db_strerror(rc));
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++
++      memset(&key, 0, sizeof(key));
++      memset(&data, 0, sizeof(data));
++      key.data = &mds_hdr.mds_magic;
++      key.size = sizeof(mds_hdr.mds_magic);
++      cputole_mds_hdr(&mds_hdr);
++      data.data = &mds_hdr;
++      data.size = sizeof(mds_hdr);
++      rc = dbhdr->put(dbhdr, NULL, &key, &data, 0);
++      if (rc != 0) {
++              fprintf(stderr, "error: db put %s: %s\n", MDS_HDR,
++                      db_strerror(rc));
++              ctx->flags |= E2F_FLAG_ABORT;
++              goto out;
++      }
++out:
++      if (dbhdr)
++              dbhdr->close(dbhdr, 0);
++      if (outdb)
++              outdb->close(outdb, 0);
++}
++
++/* If lfsck checking requested then gather the data */
++void e2fsck_pass6(e2fsck_t ctx)
++{
++      if (ctx->lustre_devtype == LUSTRE_NULL)
++              return;
++
++      printf("Pass 6: Acquiring %s information for lfsck\n",
++             ctx->lustre_devtype & LUSTRE_OST ? "OST" :
++             ctx->lustre_devtype & LUSTRE_MDS ? "MDT" : "device");
++
++      fflush(stdout);
++
++      if (ctx->lustre_devtype & LUSTRE_OST)
++              e2fsck_pass6_ost(ctx);
++      else if (ctx->lustre_devtype & LUSTRE_MDS)
++              e2fsck_pass6_mdt(ctx);
++      else
++              fprintf(stderr, "Invalid lustre dev %x\n", ctx->lustre_devtype);
++
++      return;
++}
++#endif /* ENABLE_LFSCK */
diff --git a/patches/e2fsprogs-lustre_ismounted.patch b/patches/e2fsprogs-lustre_ismounted.patch
new file mode 100644 (file)
index 0000000..ed6437e
--- /dev/null
@@ -0,0 +1,160 @@
+Check if Lustre filesystems mounted
+
+Index: e2fsprogs/lib/ext2fs/ismounted.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ismounted.c
++++ e2fsprogs/lib/ext2fs/ismounted.c
+@@ -30,6 +30,8 @@
+ #endif /* HAVE_GETMNTINFO */
+ #include <string.h>
+ #include <sys/stat.h>
++#include <sys/types.h>
++#include <dirent.h>
+ #include "ext2_fs.h"
+ #include "ext2fs.h"
+@@ -286,6 +288,135 @@ leave:
+       return ret;
+ }
++static int check_lustre_proc_vals(const char *procname,const char *real_devname)
++{
++      struct dirent *direntp;
++      DIR *dirp;
++      int rc = 0;
++      char  *mnt_device, *proc_val, *real_mnt_device;
++
++      mnt_device = malloc(PATH_MAX);
++      if (mnt_device == NULL) {
++              fprintf(stderr, "Cannot allocate memory to store path\n");
++              return 1;
++      }
++      proc_val = malloc(PATH_MAX);
++      if (proc_val == NULL) {
++              fprintf(stderr, "Cannot allocate memory to store path\n");
++              free(mnt_device);
++              return 1;
++      }
++      real_mnt_device = malloc(PATH_MAX);
++      if (real_mnt_device == NULL) {
++              fprintf(stderr, "Cannot allocate memory to store path\n");
++              free(proc_val);
++              free(mnt_device);
++              return 1;
++      }
++
++      dirp = opendir(procname);
++      if (dirp) {
++              do {
++                      int fd, numr;
++                      char *ptr;
++
++                      direntp = readdir(dirp);
++                      if (direntp == NULL)
++                              break;
++                      if ((strncmp(direntp->d_name, ".", 1) == 0) ||
++                          (strncmp(direntp->d_name, "..", 2) == 0)) {
++                              continue;
++                      }
++
++                      memset(proc_val, 0, PATH_MAX);
++                      snprintf(proc_val, PATH_MAX, "%s/%s/mntdev", procname,
++                               direntp->d_name);
++                      fd = open(proc_val, O_RDONLY);
++                      if (fd < 0)  {
++                              if (errno == ENOENT || errno == ENOTDIR)
++                                      continue;
++                              fprintf(stderr, "Cannot open %s: %s\n",
++                                      proc_val, strerror(errno));
++                              rc = 1;
++                              goto out;
++                      }
++
++                      memset(mnt_device, 0, PATH_MAX);
++                      numr = 0;
++                      ptr = mnt_device;
++                      do {
++                              numr = read(fd, ptr, PATH_MAX);
++                              if (numr < 0) {
++                                      fprintf(stderr,
++                                              "Failure to get mntdev info\n");
++                                      rc = 1;
++                                      close(fd);
++                                      goto out;
++                              }
++                              ptr += numr;
++                      } while (numr != 0);
++                      close(fd);
++
++                      ptr = strchr(mnt_device, '\n');
++                      if (ptr)
++                              *ptr = '\0';
++
++                      memset(real_mnt_device, 0, PATH_MAX);
++                      if (realpath(mnt_device, real_mnt_device) == NULL) {
++                              fprintf(stderr, "Cannot resolve mntdev %s\n",
++                                      mnt_device);
++                              rc = 1;
++                              goto out;
++                      }
++
++                      if (strcmp(real_devname, real_mnt_device) == 0) {
++                              fprintf(stderr,
++                                      "device %s mounted by lustre per %s\n",
++                                      real_devname, proc_val);
++                              rc = -1;
++                              goto out;
++                      }
++              } while (direntp != NULL);
++
++              closedir(dirp);
++      }
++
++out:
++      free(proc_val);
++      free(mnt_device);
++      free(real_mnt_device);
++
++      return rc;
++}
++
++static errcode_t check_if_lustre_mounted(const char *device, int *mount_flags)
++{
++      char *real_device;
++      int rc = 0;
++
++      real_device = malloc(PATH_MAX);
++      if (real_device == NULL) {
++              fprintf(stderr, "Cannot allocate memory to store path\n");
++              return EXT2_ET_NO_MEMORY;
++      }
++
++      if (realpath(device, real_device) == NULL) {
++              fprintf(stderr, "Cannot resolve path %s\n", device);
++              return EXT2_ET_BAD_DEVICE_NAME;
++      }
++
++      rc = check_lustre_proc_vals("/proc/fs/lustre/obdfilter", real_device);
++      if (!rc)
++              rc = check_lustre_proc_vals("/proc/fs/lustre/mds",real_device);
++
++      if (rc)
++              *mount_flags |= EXT2_MF_MOUNTED;
++
++      free(real_device);
++
++      return 0;
++}
++
+ /*
+  * ext2fs_check_mount_point() fills determines if the device is
+@@ -337,6 +468,8 @@ errcode_t ext2fs_check_mount_point(const
+               close(fd);
+ #endif
++      retval = check_if_lustre_mounted(device, mount_flags);
++
+       return 0;
+ }
diff --git a/patches/e2fsprogs-misc.patch b/patches/e2fsprogs-misc.patch
new file mode 100644 (file)
index 0000000..4e21c65
--- /dev/null
@@ -0,0 +1,387 @@
+Fixes a number of compile warnings hit during building e2fsprogs.  A few
+unused variable removals, and signed/unsigned pointers.  The only possibly
+controversial fixup is the initialization of rec_len = 0 in copy_dir_entries().
+It wasn't totally obvious to me what to initialize it to (or if it matters),
+but 0 seems reasonable, and is better than random garbage.
+
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/lib/blkid/probe.c
+===================================================================
+--- e2fsprogs.orig/lib/blkid/probe.c
++++ e2fsprogs/lib/blkid/probe.c
+@@ -1296,7 +1296,8 @@ static int probe_hfsplus(struct blkid_pr
+               return 0;
+       label_len = blkid_be16(key->unicode_len) * 2;
+-      unicode_16be_to_utf8(label, sizeof(label), key->unicode, label_len);
++      unicode_16be_to_utf8((unsigned char *)label, sizeof(label),
++                           key->unicode, label_len);
+       blkid_set_tag(probe->dev, "LABEL", label, 0);
+       return 0;
+ }
+Index: e2fsprogs/debugfs/debugfs.c
+===================================================================
+--- e2fsprogs.orig/debugfs/debugfs.c
++++ e2fsprogs/debugfs/debugfs.c
+@@ -855,7 +855,7 @@ void do_stat(int argc, char *argv[])
+       return;
+ }
+-void do_dump_extents(int argc, char *argv[])
++void do_dump_extents(int argc, char **argv)
+ {
+       struct ext2_inode inode;
+       ext2_ino_t      ino;
+@@ -876,8 +876,7 @@ void do_dump_extents(int argc, char *arg
+               }
+       }
+-      if (argc != optind+1) {
+-      print_usage:
++      if (argc != optind + 1) {
+               com_err(0, 0, "Usage: dump_extents [-n] [-l] file");
+               return;
+       }
+Index: e2fsprogs/debugfs/debugfs.h
+===================================================================
+--- e2fsprogs.orig/debugfs/debugfs.h
++++ e2fsprogs/debugfs/debugfs.h
+@@ -103,6 +103,7 @@ extern void do_unlink(int argc, char **a
+ extern void do_find_free_block(int argc, char **argv);
+ extern void do_find_free_inode(int argc, char **argv);
+ extern void do_stat(int argc, char **argv);
++extern void do_dump_extents(int argc, char **argv);
+ extern void do_chroot(int argc, char **argv);
+ extern void do_clri(int argc, char **argv);
+Index: e2fsprogs/debugfs/dump.c
+===================================================================
+--- e2fsprogs.orig/debugfs/dump.c
++++ e2fsprogs/debugfs/dump.c
+@@ -5,7 +5,9 @@
+  * under the terms of the GNU Public License.
+  */
++#ifndef _GNU_SOURCE
+ #define _GNU_SOURCE /* for O_LARGEFILE */
++#endif
+ #include <stdio.h>
+ #include <unistd.h>
+Index: e2fsprogs/debugfs/icheck.c
+===================================================================
+--- e2fsprogs.orig/debugfs/icheck.c
++++ e2fsprogs/debugfs/icheck.c
+@@ -106,13 +106,15 @@ void do_icheck(int argc, char **argv)
+       }
+       while (ino) {
++              blk64_t blk;
++
+               if (!inode.i_links_count)
+                       goto next;
+               bw.inode = ino;
+-              if (ext2fs_file_acl_block(&inode)) {
+-                      blk64_t blk;
++              blk = ext2fs_file_acl_block(&inode);
++              if (blk) {
+                       icheck_proc(current_fs, &blk, 0,
+                                   0, 0, &bw);
+                       if (bw.blocks_left == 0)
+Index: e2fsprogs/e2fsck/message.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/message.c
++++ e2fsprogs/e2fsck/message.c
+@@ -263,7 +263,6 @@ static _INLINE_ void expand_inode_expres
+ {
+       struct ext2_inode       *inode;
+       struct ext2_inode_large *large_inode;
+-      time_t                  t;
+       if (!ctx || !ctx->inode)
+               goto no_inode;
+Index: e2fsprogs/e2fsck/pass1.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1.c
++++ e2fsprogs/e2fsck/pass1.c
+@@ -404,7 +404,7 @@ static void check_is_really_dir(e2fsck_t
+       struct ext2_dir_entry   *dirent;
+       const char              *old_op;
+       errcode_t               retval;
+-      blk64_t                 blk, first_dir_blk;
++      blk64_t                 blk;
+       unsigned int            i, rec_len, not_device = 0;
+       int                     extent_fs;
+@@ -436,7 +436,8 @@ static void check_is_really_dir(e2fsck_t
+        * with it.
+        */
+-      extent_fs = (ctx->fs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS);
++      extent_fs = (ctx->fs->super->s_feature_incompat &
++                   EXT3_FEATURE_INCOMPAT_EXTENTS);
+       if (extent_fs && (inode->i_flags & EXT4_EXTENTS_FL)) {
+               /* extent mapped */
+               if  (ext2fs_bmap2(ctx->fs, pctx->ino, inode, 0, 0, 0, 0,
+Index: e2fsprogs/e2fsck/pass2.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass2.c
++++ e2fsprogs/e2fsck/pass2.c
+@@ -404,7 +404,8 @@ static int check_dotdot(e2fsck_t ctx,
+                       struct ext2_dir_entry *dirent,
+                       ext2_ino_t ino, struct problem_context *pctx)
+ {
+-      int     rec_len, problem = 0;
++      int             problem = 0;
++      unsigned int    rec_len;
+       if (!dirent->inode)
+               problem = PR_2_MISSING_DOT_DOT;
+Index: e2fsprogs/e2fsck/pass5.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass5.c
++++ e2fsprogs/e2fsck/pass5.c
+@@ -77,7 +77,6 @@ static void e2fsck_discard_blocks(e2fsck
+                                 blk64_t start, blk64_t count)
+ {
+       ext2_filsys fs = ctx->fs;
+-      int ret = 0;
+       /*
+        * If the filesystem has changed it means that there was an corruption
+Index: e2fsprogs/e2fsck/rehash.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/rehash.c
++++ e2fsprogs/e2fsck/rehash.c
+@@ -430,12 +430,13 @@ static errcode_t copy_dir_entries(e2fsck
+               return retval;
+       dirent = (struct ext2_dir_entry *) block_start;
+       prev_rec_len = 0;
++      rec_len = 0;
+       left = fs->blocksize;
+       slack = fd->compress ? 12 :
+               (fs->blocksize * ctx->htree_slack_percentage)/100;
+       if (slack < 12)
+               slack = 12;
+-      for (i=0; i < fd->num_array; i++) {
++      for (i = 0; i < fd->num_array; i++) {
+               ent = fd->harray + i;
+               if (ent->dir->inode == 0)
+                       continue;
+Index: e2fsprogs/e2fsprogs.spec.in
+===================================================================
+--- e2fsprogs.orig/e2fsprogs.spec.in
++++ e2fsprogs/e2fsprogs.spec.in
+@@ -135,6 +135,7 @@ exit 0
+ %{_sbindir}/filefrag
+ %{_sbindir}/mklost+found
+ %{_sbindir}/e2freefrag
++%{_sbindir}/e4defrag
+ %{_root_libdir}/libblkid.so.*
+ %{_root_libdir}/libcom_err.so.*
+@@ -180,6 +181,7 @@ exit 0
+ %{_mandir}/man8/tune2fs.8*
+ %{_mandir}/man8/filefrag.8*
+ %{_mandir}/man8/e2freefrag.8*
++%{_mandir}/man8/e4defrag.8*
+ %files devel
+ %defattr(-,root,root)
+@@ -212,6 +214,7 @@ exit 0
+ %{_includedir}/blkid
+ %{_includedir}/e2p
+ %{_includedir}/et
++%{_includedir}/com_err.h
+ %{_includedir}/ext2fs
+ %{_includedir}/ss
+ %{_includedir}/uuid
+Index: e2fsprogs/lib/ext2fs/ext2fs.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2fs.h
++++ e2fsprogs/lib/ext2fs/ext2fs.h
+@@ -28,6 +28,10 @@ extern "C" {
+ #if (!defined(__GNUC__) && !defined(__WATCOMC__))
+ #define NO_INLINE_FUNCS
+ #endif
++ 
++#ifndef _XOPEN_SOURCE
++#define _XOPEN_SOURCE 600     /* for posix_memalign() */
++#endif
+ /*
+  * Where the master copy of the superblock is located, and how big
+@@ -1396,7 +1400,8 @@ _INLINE_ errcode_t ext2fs_get_memalign(u
+       if (align == 0)
+               align = 8;
+-      if (retval = posix_memalign((void **) ptr, align, size)) {
++      retval = posix_memalign((void **)ptr, align, size);
++      if (retval != 0) {
+               if (retval == ENOMEM)
+                       return EXT2_ET_NO_MEMORY;
+               return retval;
+Index: e2fsprogs/lib/ext2fs/ext2fsP.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2fsP.h
++++ e2fsprogs/lib/ext2fs/ext2fsP.h
+@@ -138,6 +138,6 @@ extern errcode_t ext2fs_set_generic_bmap
+ extern errcode_t ext2fs_get_generic_bmap_range(ext2fs_generic_bitmap bitmap,
+                                              __u64 start, unsigned int num,
+                                              void *out);
+-extern int ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap, const char *func);
++extern void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap,const char *func);
+ extern int ext2fs_mem_is_zero(const char *mem, size_t len);
+Index: e2fsprogs/lib/ext2fs/fileio.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/fileio.c
++++ e2fsprogs/lib/ext2fs/fileio.c
+@@ -377,7 +377,7 @@ errcode_t ext2fs_file_set_size2(ext2_fil
+       truncate_block = ((size + file->fs->blocksize - 1) >>
+                         EXT2_BLOCK_SIZE_BITS(file->fs->super)) + 1;
+       old_size = file->inode.i_size +
+-              ((blk64_t) file->inode.i_size_high) << 32;
++              ((blk64_t)file->inode.i_size_high << 32);
+       old_truncate = ((old_size + file->fs->blocksize - 1) >>
+                     EXT2_BLOCK_SIZE_BITS(file->fs->super)) + 1;
+Index: e2fsprogs/lib/ext2fs/gen_bitmap64.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/gen_bitmap64.c
++++ e2fsprogs/lib/ext2fs/gen_bitmap64.c
+@@ -547,7 +547,7 @@ void ext2fs_unmark_block_bitmap_range2(e
+       bmap->bitmap_ops->unmark_bmap_extent(bmap, block, num);
+ }
+-int ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap, const char *func)
++void ext2fs_warn_bitmap32(ext2fs_generic_bitmap bitmap, const char *func)
+ {
+ #ifndef OMIT_COM_ERR
+       if (bitmap && bitmap->description)
+Index: e2fsprogs/lib/ext2fs/openfs.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/openfs.c
++++ e2fsprogs/lib/ext2fs/openfs.c
+@@ -353,7 +353,6 @@ errcode_t ext2fs_open2(const char *name,
+        */
+       if (superblock > 1 && EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+                                       EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
+-              struct ext2_group_desc *gd;
+               dgrp_t group;
+               for (group = 0; group < fs->group_desc_count; group++) {
+Index: e2fsprogs/lib/ext2fs/progress.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/progress.c
++++ e2fsprogs/lib/ext2fs/progress.c
+@@ -77,8 +77,6 @@ void ext2fs_numeric_progress_close(ext2_
+                                  struct ext2fs_numeric_progress_struct * progress,
+                                  const char *message)
+ {
+-      unsigned int len;
+-
+       if (!(fs->flags & EXT2_FLAG_PRINT_PROGRESS))
+               return;
+       fprintf(stdout, "%.*s", (2*progress->log_max)+1, spaces);
+Index: e2fsprogs/lib/ext2fs/unix_io.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/unix_io.c
++++ e2fsprogs/lib/ext2fs/unix_io.c
+@@ -17,7 +17,9 @@
+ #define _LARGEFILE_SOURCE
+ #define _LARGEFILE64_SOURCE
++#ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
++#endif
+ #include <stdio.h>
+ #include <string.h>
+Index: e2fsprogs/misc/badblocks.c
+===================================================================
+--- e2fsprogs.orig/misc/badblocks.c
++++ e2fsprogs/misc/badblocks.c
+@@ -29,7 +29,9 @@
+  *                     list.  (Work done by David Beattie)
+  */
++#ifndef _GNU_SOURCE
+ #define _GNU_SOURCE /* for O_DIRECT */
++#endif
+ #ifndef O_LARGEFILE
+ #define O_LARGEFILE 0
+Index: e2fsprogs/misc/e2undo.c
+===================================================================
+--- e2fsprogs.orig/misc/e2undo.c
++++ e2fsprogs/misc/e2undo.c
+@@ -29,12 +29,11 @@ unsigned char blksize_key[] = "filesyste
+ char *prg_name;
+-static void usage(char *prg_name)
++static void usage(void)
+ {
+       fprintf(stderr,
+               _("Usage: %s <transaction file> <filesystem>\n"), prg_name);
+       exit(1);
+-
+ }
+ static int check_filesystem(TDB_CONTEXT *tdb, io_channel channel)
+@@ -145,12 +144,12 @@ int main(int argc, char *argv[])
+                               force = 1;
+                               break;
+                       default:
+-                              usage(prg_name);
++                              usage();
+               }
+       }
+-      if (argc != optind+2)
+-              usage(prg_name);
++      if (argc != optind + 2)
++              usage();
+       tdb_file = argv[optind];
+       device_name = argv[optind+1];
+Index: e2fsprogs/misc/tune2fs.8.in
+===================================================================
+--- e2fsprogs.orig/misc/tune2fs.8.in
++++ e2fsprogs/misc/tune2fs.8.in
+@@ -491,6 +491,10 @@ The following filesystem features can be
+ .B dir_index
+ Use hashed b-trees to speed up lookups in large directories.
+ .TP
++.B dir_nlink
++Allow directories to have more than 65000 subdirectories (read-only
++compatible).
++.TP
+ .B filetype
+ Store file type information in directory entries.
+ .TP
+Index: e2fsprogs/misc/tune2fs.c
+===================================================================
+--- e2fsprogs.orig/misc/tune2fs.c
++++ e2fsprogs/misc/tune2fs.c
+@@ -348,7 +348,6 @@ static void update_feature_set(ext2_fils
+ {
+       struct ext2_super_block *sb = fs->super;
+       struct ext2_group_desc *gd;
+-      errcode_t       retval;
+       __u32           old_features[3];
+       int             i, type_err;
+       unsigned int    mask_err;
+@@ -1097,7 +1096,7 @@ static int move_block(ext2_filsys fs, ex
+ {
+       char *buf;
+-      dgrp_t group;
++      dgrp_t group = 0;
+       errcode_t retval;
+       int meta_data = 0;
+       blk64_t blk, new_blk, goal;
diff --git a/patches/e2fsprogs-mmp.patch b/patches/e2fsprogs-mmp.patch
new file mode 100644 (file)
index 0000000..d29ab5f
--- /dev/null
@@ -0,0 +1,1828 @@
+Add multi-mount protection support to libext2fs (INCOMPAT_MMP feature).
+
+This allows mke2fs, e2fsck, and others to detect if the filesystem is
+mounted on a remote node (on SAN disks) and avoid corrupting the
+filesystem.  For e2fsprogs this only means that it check the MMP block
+to see if the filesystem is in use, and mark the filesystem busy while
+e2fsck is running on the system.
+
+There is no requirement that e2fsck updates the MMP block in any regular
+interval, but e2fsck does this occasionally to provide additional
+information to the sysadmin in case of conflict.
+
+Signed-off-by: Kalpak Shah <kalpak@clusterfs.com>
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/lib/e2p/feature.c
+===================================================================
+--- e2fsprogs.orig/lib/e2p/feature.c
++++ e2fsprogs/lib/e2p/feature.c
+@@ -73,7 +73,9 @@ static struct feature feature_list[] = {
+       {       E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_64BIT,
+                       "64bit" },
+       {       E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_FLEX_BG,
+-                        "flex_bg"},
++                      "flex_bg"},
++      {       E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_MMP,
++                      "mmp" },
+       {       0, 0, 0 },
+ };
+Index: e2fsprogs/lib/ext2fs/ext2_fs.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2_fs.h
++++ e2fsprogs/lib/ext2fs/ext2_fs.h
+@@ -597,7 +597,7 @@ struct ext2_super_block {
+       __u16   s_want_extra_isize;     /* New inodes should reserve # bytes */
+       __u32   s_flags;                /* Miscellaneous flags */
+       __u16   s_raid_stride;          /* RAID stride */
+-      __u16   s_mmp_interval;         /* # seconds to wait in MMP checking */
++      __u16   s_mmp_update_interval;  /* # seconds to wait in MMP checking */
+       __u64   s_mmp_block;            /* Block for multi-mount protection */
+       __u32   s_raid_stripe_width;    /* blocks on all data disks (N*stride)*/
+       __u8    s_log_groups_per_flex;  /* FLEX_BG group size */
+@@ -696,7 +696,8 @@ struct ext2_super_block {
+ #define EXT2_FEATURE_COMPAT_SUPP      0
+-#define EXT2_FEATURE_INCOMPAT_SUPP    (EXT2_FEATURE_INCOMPAT_FILETYPE)
++#define EXT2_FEATURE_INCOMPAT_SUPP    (EXT2_FEATURE_INCOMPAT_FILETYPE| \
++                                     EXT4_FEATURE_INCOMPAT_MMP)
+ #define EXT2_FEATURE_RO_COMPAT_SUPP   (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
+                                        EXT4_FEATURE_RO_COMPAT_DIR_NLINK| \
+@@ -780,26 +781,34 @@ struct ext2_dir_entry_2 {
+ /*
+  * This structure will be used for multiple mount protection. It will be
+  * written into the block number saved in the s_mmp_block field in the
+- * superblock.
+- */
+-#define       EXT2_MMP_MAGIC    0x004D4D50 /* ASCII for MMP */
+-#define       EXT2_MMP_CLEAN    0xFF4D4D50 /* Value of mmp_seq for clean unmount */
+-#define       EXT2_MMP_FSCK_ON  0xE24D4D50 /* Value of mmp_seq when being fscked */
++ * superblock. Programs that check MMP should assume that if SEQ_FSCK
++ * (or any unknown code above SEQ_MAX) is present then it is NOT safe
++ * to use the filesystem, regardless of how old the timestamp is.
++ */
++#define EXT2_MMP_MAGIC     0x004D4D50U /* ASCII for MMP */
++#define EXT2_MMP_SEQ_CLEAN 0xFF4D4D50U /* mmp_seq value for clean unmount */
++#define EXT2_MMP_SEQ_FSCK  0xE24D4D50U /* mmp_seq value when being fscked */
++#define EXT2_MMP_SEQ_MAX   0xE24D4D4FU /* maximum valid mmp_seq value */
+ struct mmp_struct {
+-      __u32   mmp_magic;
+-      __u32   mmp_seq;
+-      __u64   mmp_time;
+-      char    mmp_nodename[64];
+-      char    mmp_bdevname[32];
+-      __u16   mmp_interval;
++      __u32   mmp_magic;              /* Magic number for MMP */
++      __u32   mmp_seq;                /* Sequence no. updated periodically */
++      __u64   mmp_time;               /* Time last updated */
++      char    mmp_nodename[64];       /* Node which last updated MMP block */
++      char    mmp_bdevname[32];       /* Bdev which last updated MMP block */
++      __u16   mmp_check_interval;     /* Changed mmp_check_interval */
+       __u16   mmp_pad1;
+-      __u32   mmp_pad2;
++      __u32   mmp_pad2[227];
+ };
+ /*
+- * Interval in number of seconds to update the MMP sequence number.
++ * Default interval in seconds to update the MMP sequence number.
++ */
++#define EXT2_MMP_UPDATE_INTERVAL      1
++
++/*
++ * Minimum interval for MMP checking in seconds.
+  */
+-#define EXT2_MMP_DEF_INTERVAL 5
++#define EXT2_MMP_MIN_CHECK_INTERVAL     5
+ #endif        /* _LINUX_EXT2_FS_H */
+Index: e2fsprogs/lib/ext2fs/ext2fs.h
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2fs.h
++++ e2fsprogs/lib/ext2fs/ext2fs.h
+@@ -188,6 +188,7 @@ typedef struct ext2_file *ext2_file_t;
+ #define EXT2_FLAG_64BITS              0x20000
+ #define EXT2_FLAG_PRINT_PROGRESS      0x40000
+ #define EXT2_FLAG_DIRECT_IO           0x80000
++#define EXT2_FLAG_SKIP_MMP            0x100000
+ /*
+  * Special flag in the ext2 inode i_flag field that means that this is
+@@ -203,6 +204,15 @@ typedef struct ext2_file *ext2_file_t;
+ struct opaque_ext2_group_desc;
++/*
++ * The timestamp in the MMP structure will be updated by e2fsck at some
++ * arbitary intervals (start of passes, after every EXT2_MMP_INODE_INTERVAL
++ * inodes in pass1 and pass1b).  There is no guarantee that e2fsck is updating
++ * the MMP block in a timely manner, and the updates it does are purely for
++ * the convenience of the sysadmin and not for automatic validation.
++ */
++#define EXT2_MMP_INODE_INTERVAL 20000
++
+ struct struct_ext2_filsys {
+       errcode_t                       magic;
+       io_channel                      io;
+@@ -249,6 +259,19 @@ struct struct_ext2_filsys {
+       io_channel                      image_io;
+       /*
++       * Buffers for Multiple mount protection(MMP) block.
++       */
++      void *mmp_buf;
++      void *mmp_unaligned_buf;
++      void *mmp_cmp;
++      int mmp_fd;
++
++      /*
++       * Time at which e2fsck last updated the MMP block.
++       */
++      long mmp_last_written;
++
++      /*
+        * More callback functions
+        */
+       errcode_t (*get_alloc_block)(ext2_filsys fs, blk64_t goal,
+@@ -547,6 +570,7 @@ typedef struct ext2_icount *ext2_icount_
+                                        EXT3_FEATURE_INCOMPAT_RECOVER|\
+                                        EXT3_FEATURE_INCOMPAT_EXTENTS|\
+                                        EXT4_FEATURE_INCOMPAT_FLEX_BG|\
++                                       EXT4_FEATURE_INCOMPAT_MMP|\
+                                        EXT4_FEATURE_INCOMPAT_64BIT)
+ #else
+ #define EXT2_LIB_FEATURE_INCOMPAT_SUPP        (EXT2_FEATURE_INCOMPAT_FILETYPE|\
+@@ -555,6 +579,7 @@ typedef struct ext2_icount *ext2_icount_
+                                        EXT3_FEATURE_INCOMPAT_RECOVER|\
+                                        EXT3_FEATURE_INCOMPAT_EXTENTS|\
+                                        EXT4_FEATURE_INCOMPAT_FLEX_BG|\
++                                       EXT4_FEATURE_INCOMPAT_MMP|\
+                                        EXT4_FEATURE_INCOMPAT_64BIT)
+ #endif
+ #define EXT2_LIB_FEATURE_RO_COMPAT_SUPP       (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|\
+@@ -1300,6 +1325,16 @@ errcode_t ext2fs_link(ext2_filsys fs, ex
+ errcode_t ext2fs_unlink(ext2_filsys fs, ext2_ino_t dir, const char *name,
+                       ext2_ino_t ino, int flags);
++/* mmp.c */
++errcode_t ext2fs_mmp_read(ext2_filsys fs, blk_t mmp_blk, void *buf);
++errcode_t ext2fs_mmp_write(ext2_filsys fs, blk_t mmp_blk, void *buf);
++errcode_t ext2fs_mmp_clear(ext2_filsys fs);
++errcode_t ext2fs_mmp_init(ext2_filsys fs);
++errcode_t ext2fs_mmp_start(ext2_filsys fs);
++errcode_t ext2fs_mmp_update(ext2_filsys fs);
++errcode_t ext2fs_mmp_stop(ext2_filsys fs);
++unsigned ext2fs_mmp_new_seq();
++
+ /* read_bb.c */
+ extern errcode_t ext2fs_read_bb_inode(ext2_filsys fs,
+                                     ext2_badblocks_list *bb_list);
+@@ -1335,6 +1370,7 @@ extern void ext2fs_swap_inode_full(ext2_
+                                  int bufsize);
+ extern void ext2fs_swap_inode(ext2_filsys fs,struct ext2_inode *t,
+                             struct ext2_inode *f, int hostorder);
++extern void ext2fs_swap_mmp(struct mmp_struct *mmp);
+ /* valid_blk.c */
+ extern int ext2fs_inode_has_valid_blocks(struct ext2_inode *inode);
+Index: e2fsprogs/lib/ext2fs/tst_super_size.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/tst_super_size.c
++++ e2fsprogs/lib/ext2fs/tst_super_size.c
+@@ -100,7 +100,7 @@ void check_superblock_fields()
+       check_field(s_want_extra_isize);
+       check_field(s_flags);
+       check_field(s_raid_stride);
+-      check_field(s_mmp_interval);
++      check_field(s_mmp_update_interval);
+       check_field(s_mmp_block);
+       check_field(s_raid_stripe_width);
+       check_field(s_log_groups_per_flex);
+Index: e2fsprogs/misc/tune2fs.c
+===================================================================
+--- e2fsprogs.orig/misc/tune2fs.c
++++ e2fsprogs/misc/tune2fs.c
+@@ -64,8 +64,9 @@ char *device_name;
+ char *new_label, *new_last_mounted, *new_UUID;
+ char *io_options;
+ static int c_flag, C_flag, e_flag, f_flag, g_flag, i_flag, l_flag, L_flag;
+-static int m_flag, M_flag, r_flag, s_flag = -1, u_flag, U_flag, T_flag;
++static int m_flag, M_flag, r_flag, s_flag = -1, u_flag, U_flag, T_flag, p_flag;
+ static int I_flag;
++static int clear_mmp;
+ static time_t last_check_time;
+ static int print_label;
+ static int max_mount_count, mount_count, mount_flags;
+@@ -75,6 +76,7 @@ static double reserved_ratio;
+ static unsigned long resgid, resuid;
+ static unsigned short errors;
+ static int open_flag;
++static unsigned int mmp_update_interval;
+ static char *features_cmd;
+ static char *mntopts_cmd;
+ static int stride, stripe_width;
+@@ -107,7 +109,7 @@ static void usage(void)
+                 "[-g group]\n"
+                 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
+                 "\t[-m reserved_blocks_percent] "
+-                "[-o [^]mount_options[,...]] \n"
++                "[-o [^]mount_options[,...]] [-p mmp_update_interval]\n"
+                 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] "
+                 "[-L volume_label]\n"
+                 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
+@@ -123,7 +125,8 @@ static __u32 ok_features[3] = {
+       /* Incompat */
+       EXT2_FEATURE_INCOMPAT_FILETYPE |
+               EXT3_FEATURE_INCOMPAT_EXTENTS |
+-              EXT4_FEATURE_INCOMPAT_FLEX_BG,
++              EXT4_FEATURE_INCOMPAT_FLEX_BG |
++              EXT4_FEATURE_INCOMPAT_MMP,
+       /* R/O compat */
+       EXT2_FEATURE_RO_COMPAT_LARGE_FILE |
+               EXT4_FEATURE_RO_COMPAT_HUGE_FILE|
+@@ -140,7 +143,8 @@ static __u32 clear_ok_features[3] = {
+               EXT2_FEATURE_COMPAT_DIR_INDEX,
+       /* Incompat */
+       EXT2_FEATURE_INCOMPAT_FILETYPE |
+-              EXT4_FEATURE_INCOMPAT_FLEX_BG,
++              EXT4_FEATURE_INCOMPAT_FLEX_BG |
++              EXT4_FEATURE_INCOMPAT_MMP,
+       /* R/O compat */
+       EXT2_FEATURE_RO_COMPAT_LARGE_FILE |
+               EXT4_FEATURE_RO_COMPAT_HUGE_FILE|
+@@ -152,7 +156,7 @@ static __u32 clear_ok_features[3] = {
+ /*
+  * Remove an external journal from the filesystem
+  */
+-static void remove_journal_device(ext2_filsys fs)
++static int remove_journal_device(ext2_filsys fs)
+ {
+       char            *journal_path;
+       ext2_filsys     jfs;
+@@ -241,13 +245,15 @@ static void remove_journal_device(ext2_f
+ no_valid_journal:
+       if (commit_remove_journal == 0) {
+               fputs(_("Journal NOT removed\n"), stderr);
+-              exit(1);
++              return 1;
+       }
+       fs->super->s_journal_dev = 0;
+       uuid_clear(fs->super->s_journal_uuid);
+       ext2fs_mark_super_dirty(fs);
+       fputs(_("Journal removed\n"), stdout);
+       free(journal_path);
++
++      return 0;
+ }
+ /* Helper function for remove_journal_inode */
+@@ -272,7 +278,7 @@ static int release_blocks_proc(ext2_fils
+ /*
+  * Remove the journal inode from the filesystem
+  */
+-static void remove_journal_inode(ext2_filsys fs)
++static errcode_t remove_journal_inode(ext2_filsys fs)
+ {
+       struct ext2_inode       inode;
+       errcode_t               retval;
+@@ -282,14 +288,14 @@ static void remove_journal_inode(ext2_fi
+       if (retval) {
+               com_err(program_name, retval,
+                       _("while reading journal inode"));
+-              exit(1);
++              return retval;
+       }
+       if (ino == EXT2_JOURNAL_INO) {
+               retval = ext2fs_read_bitmaps(fs);
+               if (retval) {
+                       com_err(program_name, retval,
+                               _("while reading bitmaps"));
+-                      exit(1);
++                      return retval;
+               }
+               retval = ext2fs_block_iterate3(fs, ino,
+                                              BLOCK_FLAG_READ_ONLY, NULL,
+@@ -297,7 +303,7 @@ static void remove_journal_inode(ext2_fi
+               if (retval) {
+                       com_err(program_name, retval,
+                               _("while clearing journal inode"));
+-                      exit(1);
++                      return retval;
+               }
+               memset(&inode, 0, sizeof(inode));
+               ext2fs_mark_bb_dirty(fs);
+@@ -308,25 +314,29 @@ static void remove_journal_inode(ext2_fi
+       if (retval) {
+               com_err(program_name, retval,
+                       _("while writing journal inode"));
+-              exit(1);
++              return retval;
+       }
+       fs->super->s_journal_inum = 0;
+       ext2fs_mark_super_dirty(fs);
++
++      return 0;
+ }
+ /*
+  * Update the default mount options
+  */
+-static void update_mntopts(ext2_filsys fs, char *mntopts)
++static int update_mntopts(ext2_filsys fs, char *mntopts)
+ {
+       struct ext2_super_block *sb = fs->super;
+       if (e2p_edit_mntopts(mntopts, &sb->s_default_mount_opts, ~0)) {
+               fprintf(stderr, _("Invalid mount option set: %s\n"),
+                       mntopts);
+-              exit(1);
++              return 1;
+       }
+       ext2fs_mark_super_dirty(fs);
++
++      return 0;
+ }
+ static void request_fsck_afterwards(ext2_filsys fs)
+@@ -344,7 +354,7 @@ static void request_fsck_afterwards(ext2
+ /*
+  * Update the feature set as provided by the user.
+  */
+-static void update_feature_set(ext2_filsys fs, char *features)
++static int update_feature_set(ext2_filsys fs, char *features)
+ {
+       struct ext2_super_block *sb = fs->super;
+       struct ext2_group_desc *gd;
+@@ -380,7 +390,7 @@ static void update_feature_set(ext2_fils
+                       fprintf(stderr, _("Setting filesystem feature '%s' "
+                                         "not supported.\n"),
+                               e2p_feature2string(type_err, mask_err));
+-              exit(1);
++              return 1;
+       }
+       if (FEATURE_OFF(E2P_FEATURE_COMPAT, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {
+@@ -390,22 +400,89 @@ static void update_feature_set(ext2_fils
+                               "cleared when the filesystem is\n"
+                               "unmounted or mounted "
+                               "read-only.\n"), stderr);
+-                      exit(1);
++                      return 1;
+               }
+               if (sb->s_feature_incompat &
+                   EXT3_FEATURE_INCOMPAT_RECOVER) {
+                       fputs(_("The needs_recovery flag is set.  "
+                               "Please run e2fsck before clearing\n"
+                               "the has_journal flag.\n"), stderr);
+-                      exit(1);
++                      return 1;
+               }
+               if (sb->s_journal_inum) {
+-                      remove_journal_inode(fs);
++                      if (remove_journal_inode(fs))
++                              return 1;
+               }
+               if (sb->s_journal_dev) {
+-                      remove_journal_device(fs);
++                      if (remove_journal_device(fs))
++                              return 1;
+               }
+       }
++      if (FEATURE_ON(E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_MMP)) {
++              int error;
++
++              if ((mount_flags & EXT2_MF_MOUNTED) ||
++                  (mount_flags & EXT2_MF_READONLY)) {
++                      fputs(_("The multiple mount protection feature can't \n"
++                              "be set if the filesystem is mounted or \n"
++                              "read-only.\n"), stderr);
++                      return 1;
++              }
++
++              error = ext2fs_mmp_init(fs);
++              if (error) {
++                      fputs(_("\nError while enabling multiple mount "
++                              "protection feature."), stderr);
++                      return 1;
++              }
++
++              /*
++               * We want to update group desc with the new free blocks count
++               */
++              fs->flags &= ~EXT2_FLAG_SUPER_ONLY;
++
++              printf(_("Multiple mount protection has been enabled "
++                       "with update interval %ds.\n"),
++                     sb->s_mmp_update_interval);
++      }
++
++      if (FEATURE_OFF(E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_MMP)) {
++              int error;
++
++              if (mount_flags & EXT2_MF_READONLY) {
++                      fputs(_("The multiple mount protection feature cannot\n"
++                              "be disabled if the filesystem is readonly.\n"),
++                              stderr);
++                      return 1;
++              }
++
++              error = ext2fs_read_bitmaps(fs);
++              if (error) {
++                      fputs(_("Error while reading bitmaps\n"), stderr);
++                      return 1;
++              }
++
++              error = ext2fs_mmp_read(fs, sb->s_mmp_block, NULL);
++              if (error) {
++                      struct mmp_struct *mmp_cmp = fs->mmp_cmp;
++
++                      if (error == EXT2_ET_MMP_MAGIC_INVALID)
++                              printf(_("Magic number in MMP block does not "
++                                       "match. expected: %x, actual: %x\n"),
++                                       EXT2_MMP_MAGIC, mmp_cmp->mmp_magic);
++                      else
++                              com_err (program_name, error,
++                                       _("while reading MMP block."));
++                      goto mmp_error;
++              }
++
++              /* We need to force out the group descriptors as well */
++              fs->flags &= ~EXT2_FLAG_SUPER_ONLY;
++              ext2fs_block_alloc_stats(fs, sb->s_mmp_block, -1);
++mmp_error:
++              sb->s_mmp_block = 0;
++              sb->s_mmp_update_interval = 0;
++      }
+       if (FEATURE_ON(E2P_FEATURE_COMPAT, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {
+               /*
+@@ -497,12 +574,14 @@ static void update_feature_set(ext2_fils
+           (old_features[E2P_FEATURE_INCOMPAT] != sb->s_feature_incompat) ||
+           (old_features[E2P_FEATURE_RO_INCOMPAT] != sb->s_feature_ro_compat))
+               ext2fs_mark_super_dirty(fs);
++
++      return 0;
+ }
+ /*
+  * Add a journal to the filesystem.
+  */
+-static void add_journal(ext2_filsys fs)
++static int add_journal(ext2_filsys fs)
+ {
+       unsigned long journal_blocks;
+       errcode_t       retval;
+@@ -557,7 +636,7 @@ static void add_journal(ext2_filsys fs)
+                       fprintf(stderr, "\n");
+                       com_err(program_name, retval,
+                               _("\n\twhile trying to create journal file"));
+-                      exit(1);
++                      return retval;
+               } else
+                       fputs(_("done\n"), stdout);
+               /*
+@@ -568,11 +647,11 @@ static void add_journal(ext2_filsys fs)
+                       fs->flags &= ~EXT2_FLAG_SUPER_ONLY;
+       }
+       print_check_message(fs);
+-      return;
++      return 0;
+ err:
+       free(journal_device);
+-      exit(1);
++      return 1;
+ }
+@@ -640,7 +719,7 @@ static void parse_tune2fs_options(int ar
+       open_flag = 0;
+       printf("tune2fs %s (%s)\n", E2FSPROGS_VERSION, E2FSPROGS_DATE);
+-      while ((c = getopt(argc, argv, "c:e:fg:i:jlm:o:r:s:u:C:E:I:J:L:M:O:T:U:")) != EOF)
++      while ((c = getopt(argc, argv, "c:e:fg:i:jlm:o:p:r:s:u:C:E:I:J:L:M:O:T:U:")) != EOF)
+               switch (c) {
+               case 'c':
+                       max_mount_count = strtol(optarg, &tmp, 0);
+@@ -795,6 +874,25 @@ static void parse_tune2fs_options(int ar
+                       features_cmd = optarg;
+                       open_flag = EXT2_FLAG_RW;
+                       break;
++              case 'p':
++                      mmp_update_interval = strtol(optarg, &tmp, 0);
++                      if (*tmp && mmp_update_interval < 0) {
++                              com_err(program_name, 0,
++                                      _("invalid mmp update interval"));
++                              usage();
++                      }
++                      if (mmp_update_interval == 0)
++                              mmp_update_interval = EXT2_MMP_UPDATE_INTERVAL;
++                      if (mmp_update_interval > EXT2_MMP_UPDATE_INTERVAL) {
++                              com_err(program_name, 0,
++                                      _("MMP update interval of %s seconds "
++                                        "may be dangerous under high load.  "
++                                        "Consider decreasing it."),
++                                      optarg);
++                      }
++                      p_flag = 1;
++                      open_flag = EXT2_FLAG_RW;
++                      break;
+               case 'r':
+                       reserved_blocks = strtoul(optarg, &tmp, 0);
+                       if (*tmp) {
+@@ -899,7 +997,7 @@ void do_findfs(int argc, char **argv)
+ }
+ #endif
+-static void parse_extended_opts(ext2_filsys fs, const char *opts)
++static int parse_extended_opts(ext2_filsys fs, const char *opts)
+ {
+       char    *buf, *token, *next, *p, *arg;
+       int     len, hash_alg;
+@@ -910,7 +1008,7 @@ static void parse_extended_opts(ext2_fil
+       if (!buf) {
+               fprintf(stderr,
+                       _("Couldn't allocate memory to parse options!\n"));
+-              exit(1);
++              return 1;
+       }
+       strcpy(buf, opts);
+       for (token = buf; token && *token; token = next) {
+@@ -933,6 +1031,9 @@ static void parse_extended_opts(ext2_fil
+                       fs->super->s_flags &= ~EXT2_FLAGS_TEST_FILESYS;
+                       printf("Clearing test filesystem flag\n");
+                       ext2fs_mark_super_dirty(fs);
++              } else if (strcmp(token, "clear-mmp") == 0 ||
++                         strcmp(token, "clear_mmp") == 0) {
++                      clear_mmp = 1;
+               } else if (strcmp(token, "stride") == 0) {
+                       if (!arg) {
+                               r_usage++;
+@@ -1002,15 +1103,18 @@ static void parse_extended_opts(ext2_fil
+                       "and may take an argument which\n"
+                       "\tis set off by an equals ('=') sign.\n\n"
+                       "Valid extended options are:\n"
++                      "\tclear-mmp\n"
+                       "\tstride=<RAID per-disk chunk size in blocks>\n"
+                       "\tstripe_width=<RAID stride*data disks in blocks>\n"
+                       "\thash_alg=<hash algorithm>\n"
+                       "\ttest_fs\n"
+                       "\t^test_fs\n"));
+               free(buf);
+-              exit(1);
++              return 1;
+       }
+       free(buf);
++
++      return 0;
+ }
+ /*
+@@ -1590,6 +1694,7 @@ int main(int argc, char **argv)
+       ext2_filsys fs;
+       struct ext2_super_block *sb;
+       io_manager io_ptr, io_ptr_orig = NULL;
++      int rc = 0;
+ #ifdef ENABLE_NLS
+       setlocale(LC_MESSAGES, "");
+@@ -1619,14 +1724,26 @@ int main(int argc, char **argv)
+               io_ptr = unix_io_manager;
+ retry_open:
++      if ((open_flag & EXT2_FLAG_RW) == 0 || f_flag)
++               open_flag |= EXT2_FLAG_SKIP_MMP;
++
+       retval = ext2fs_open2(device_name, io_options, open_flag,
+                             0, 0, io_ptr, &fs);
+       if (retval) {
+-                      com_err(program_name, retval,
+-                              _("while trying to open %s"),
++              com_err(program_name, retval,
++                      _("while trying to open %s"),
+                       device_name);
+-              fprintf(stderr,
+-                      _("Couldn't find valid filesystem superblock.\n"));
++              if (retval == EXT2_ET_MMP_FSCK_ON)
++                      fprintf(stderr,
++                              _("If you are sure e2fsck is not running then "
++                                "use 'tune2fs -f -E clear_mmp {device}'\n"));
++              else if (retval == EXT2_ET_MMP_MAGIC_INVALID)
++                      fprintf(stderr,
++                              _("Magic for mmp is wrong. Try to fix it by "
++                                "using 'fsck {device}'\n"));
++              else if (retval != EXT2_ET_MMP_FAILED)
++                      fprintf(stderr,
++                           _("Couldn't find valid filesystem superblock.\n"));
+               exit(1);
+       }
+@@ -1639,12 +1756,14 @@ retry_open:
+               if (new_inode_size == EXT2_INODE_SIZE(fs->super)) {
+                       fprintf(stderr, _("The inode size is already %lu\n"),
+                               new_inode_size);
+-                      exit(1);
++                      rc = 1;
++                      goto closefs;
+               }
+               if (new_inode_size < EXT2_INODE_SIZE(fs->super)) {
+                       fprintf(stderr, _("Shrinking the inode size is "
+                                         "not supported\n"));
+-                      exit(1);
++                      rc = 1;
++                      goto closefs;
+               }
+               /*
+@@ -1653,8 +1772,10 @@ retry_open:
+                */
+               io_ptr_orig = io_ptr;
+               retval = tune2fs_setup_tdb(device_name, &io_ptr);
+-              if (retval)
+-                      exit(1);
++              if (retval) {
++                      rc = 1;
++                      goto closefs;
++              }
+               if (io_ptr != io_ptr_orig) {
+                       ext2fs_close(fs);
+                       goto retry_open;
+@@ -1669,7 +1790,7 @@ retry_open:
+               printf("%.*s\n", (int) sizeof(sb->s_volume_name),
+                      sb->s_volume_name);
+               remove_error_table(&et_ext2_error_table);
+-              exit(0);
++              goto closefs;
+       }
+       retval = ext2fs_check_if_mounted(device_name, &mount_flags);
+@@ -1677,7 +1798,8 @@ retry_open:
+               com_err("ext2fs_check_if_mount", retval,
+                       _("while determining whether %s is mounted."),
+                       device_name);
+-              exit(1);
++              rc = 1;
++              goto closefs;
+       }
+       /* Normally we only need to write out the superblock */
+       fs->flags |= EXT2_FLAG_SUPER_ONLY;
+@@ -1716,12 +1838,19 @@ retry_open:
+               printf (_("Setting reserved blocks percentage to %g%% (%llu blocks)\n"),
+                       reserved_ratio, ext2fs_r_blocks_count(sb));
+       }
++      if (p_flag) {
++              sb->s_mmp_update_interval = mmp_update_interval;
++              ext2fs_mark_super_dirty(fs);
++              printf(_("Setting multiple mount protection update interval to "
++                        "%u seconds\n"), mmp_update_interval);
++      }
+       if (r_flag) {
+               if (reserved_blocks >= ext2fs_blocks_count(sb)/2) {
+                       com_err(program_name, 0,
+                               _("reserved blocks count is too big (%llu)"),
+                               reserved_blocks);
+-                      exit(1);
++                      rc = 1;
++                      goto closefs;
+               }
+               ext2fs_r_blocks_count_set(sb, reserved_blocks);
+               ext2fs_mark_super_dirty(fs);
+@@ -1745,7 +1874,8 @@ retry_open:
+       if (s_flag == 0) {
+               fputs(_("\nClearing the sparse superflag not supported.\n"),
+                     stderr);
+-              exit(1);
++              rc = 1;
++              goto closefs;
+       }
+       if (T_flag) {
+               sb->s_lastcheck = last_check_time;
+@@ -1773,14 +1903,36 @@ retry_open:
+                       sizeof(sb->s_last_mounted));
+               ext2fs_mark_super_dirty(fs);
+       }
+-      if (mntopts_cmd)
+-              update_mntopts(fs, mntopts_cmd);
+-      if (features_cmd)
+-              update_feature_set(fs, features_cmd);
+-      if (extended_cmd)
+-              parse_extended_opts(fs, extended_cmd);
+-      if (journal_size || journal_device)
+-              add_journal(fs);
++      if (mntopts_cmd) {
++              rc = update_mntopts(fs, mntopts_cmd);
++              if (rc)
++                      goto closefs;
++      }
++      if (features_cmd) {
++              rc = update_feature_set(fs, features_cmd);
++              if (rc)
++                      goto closefs;
++      }
++      if (extended_cmd) {
++              rc = parse_extended_opts(fs, extended_cmd);
++              if (rc)
++                      goto closefs;
++              if (clear_mmp && !f_flag) {
++                      fputs(_("Error in using clear_mmp. "
++                              "It must be used with -f\n"),
++                            stderr);
++                      goto closefs;
++              }
++      }
++      if (clear_mmp) {
++              rc = ext2fs_mmp_clear(fs);
++              goto closefs;
++      }
++      if (journal_size || journal_device) {
++              rc = add_journal(fs);
++              if (rc);
++                      goto closefs;
++      }
+       if (U_flag) {
+               int set_csum = 0;
+@@ -1808,7 +1960,8 @@ retry_open:
+                       uuid_generate(sb->s_uuid);
+               } else if (uuid_parse(new_UUID, sb->s_uuid)) {
+                       com_err(program_name, 0, _("Invalid UUID format\n"));
+-                      exit(1);
++                      rc = 1;
++                      goto closefs;
+               }
+               if (set_csum) {
+                       for (i = 0; i < fs->group_desc_count; i++)
+@@ -1822,7 +1975,8 @@ retry_open:
+                       fputs(_("The inode size may only be "
+                               "changed when the filesystem is "
+                               "unmounted.\n"), stderr);
+-                      exit(1);
++                      rc = 1;
++                      goto closefs;
+               }
+               if (fs->super->s_feature_incompat &
+                   EXT4_FEATURE_INCOMPAT_FLEX_BG) {
+@@ -1868,5 +2022,12 @@ retry_open:
+       free(device_name);
+       remove_error_table(&et_ext2_error_table);
++
++closefs:
++      if (rc) {
++              ext2fs_mmp_stop(fs);
++              exit(1);
++      }
++
+       return (ext2fs_close(fs) ? 1 : 0);
+ }
+Index: e2fsprogs/e2fsck/pass1.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1.c
++++ e2fsprogs/e2fsck/pass1.c
+@@ -878,7 +878,20 @@ void e2fsck_pass1(e2fsck_t ctx)
+           (fs->super->s_mtime < fs->super->s_inodes_count))
+               busted_fs_time = 1;
++      if ((fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_MMP) &&
++          !(fs->super->s_mmp_block <= fs->super->s_first_data_block ||
++            fs->super->s_mmp_block >= fs->super->s_blocks_count))
++              ext2fs_mark_block_bitmap2(ctx->block_found_map,
++                                       fs->super->s_mmp_block);
++
+       while (1) {
++              if (ino % EXT2_MMP_INODE_INTERVAL == 0) {
++                      errcode_t error;
++
++                      error = e2fsck_mmp_update(fs);
++                      if (error)
++                              fatal_error(ctx, 0);
++              }
+               old_op = ehandler_operation(_("getting next inode from scan"));
+               pctx.errcode = ext2fs_get_next_inode_full(scan, &ino,
+                                                         inode, inode_size);
+Index: e2fsprogs/e2fsck/pass1b.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1b.c
++++ e2fsprogs/e2fsck/pass1b.c
+@@ -286,6 +286,13 @@ static void pass1b(e2fsck_t ctx, char *b
+       pb.pctx = &pctx;
+       pctx.str = "pass1b";
+       while (1) {
++              if (ino % EXT2_MMP_INODE_INTERVAL == 0) {
++                      errcode_t error;
++
++                      error = e2fsck_mmp_update(fs);
++                      if (error)
++                              fatal_error(ctx, 0);
++              }
+               pctx.errcode = ext2fs_get_next_inode(scan, &ino, &inode);
+               if (pctx.errcode == EXT2_ET_BAD_BLOCK_IN_INODE_TABLE)
+                       continue;
+Index: e2fsprogs/e2fsck/unix.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/unix.c
++++ e2fsprogs/e2fsck/unix.c
+@@ -1068,6 +1068,70 @@ static errcode_t try_open_fs(e2fsck_t ct
+ static const char *my_ver_string = E2FSPROGS_VERSION;
+ static const char *my_ver_date = E2FSPROGS_DATE;
++int e2fsck_check_mmp(ext2_filsys fs, e2fsck_t ctx)
++{
++      struct mmp_struct *mmp_s;
++      unsigned int mmp_check_interval;
++      errcode_t retval = 0;
++      struct problem_context pctx;
++      unsigned int wait_time = 0;
++
++      clear_problem_context(&pctx);
++      if (fs->mmp_buf == NULL) {
++              retval = ext2fs_get_mem(fs->blocksize, &fs->mmp_buf);
++              if (retval)
++                      goto check_error;
++      }
++
++      retval = ext2fs_mmp_read(fs, fs->super->s_mmp_block, fs->mmp_buf);
++      if (retval)
++              goto check_error;
++
++      mmp_s = fs->mmp_buf;
++
++      mmp_check_interval = fs->super->s_mmp_update_interval;
++      if (mmp_check_interval < EXT2_MMP_MIN_CHECK_INTERVAL)
++              mmp_check_interval = EXT2_MMP_MIN_CHECK_INTERVAL;
++
++      /*
++       * If check_interval in MMP block is larger, use that instead of
++       * check_interval from the superblock.
++       */
++      if (mmp_s->mmp_check_interval > mmp_check_interval)
++              mmp_check_interval = mmp_s->mmp_check_interval;
++
++      wait_time = mmp_check_interval * 2 + 1;
++
++      /* Print warning if e2fck will wait for more than 20 secs. */
++      if (wait_time > EXT2_MMP_MIN_CHECK_INTERVAL * 4) {
++              printf("MMP interval is %u seconds and total wait time is %u "
++                     "seconds. Please wait...\n",
++                      mmp_check_interval, wait_time * 2);
++      }
++
++      return 0;
++
++check_error:
++
++      if (retval == EXT2_ET_MMP_BAD_BLOCK) {
++              if (fix_problem(ctx, PR_0_MMP_INVALID_BLK, &pctx)) {
++                      fs->super->s_mmp_block = 0;
++                      ext2fs_mark_super_dirty(fs);
++              }
++      } else if (retval == EXT2_ET_MMP_FAILED) {
++              dump_mmp_msg(fs->mmp_buf, NULL);
++      } else if (retval == EXT2_ET_MMP_FSCK_ON) {
++              dump_mmp_msg(fs->mmp_buf,
++                           _("If you are sure that e2fsck "
++                             "is not running on any node then use "
++                             "'tune2fs -f -E clear_mmp {device}'\n"));
++      } else if (retval == EXT2_ET_MMP_MAGIC_INVALID) {
++              if (fix_problem(ctx, PR_0_MMP_INVALID_MAGIC, &pctx))
++                      ext2fs_mmp_clear(fs);
++      }
++      return 1;
++}
++
+ int main (int argc, char *argv[])
+ {
+       errcode_t       retval = 0, retval2 = 0, orig_retval = 0;
+@@ -1137,6 +1201,8 @@ int main (int argc, char *argv[])
+                                   _("need terminal for interactive repairs"));
+       }
+       ctx->superblock = ctx->use_superblock;
++
++      flags = EXT2_FLAG_SKIP_MMP;
+ restart:
+ #ifdef CONFIG_TESTIO_DEBUG
+       if (getenv("TEST_IO_FLAGS") || getenv("TEST_IO_BLOCK")) {
+@@ -1145,7 +1211,7 @@ restart:
+       } else
+ #endif
+               io_ptr = unix_io_manager;
+-      flags = EXT2_FLAG_NOFREE_ON_ERROR;
++      flags |= EXT2_FLAG_NOFREE_ON_ERROR;
+       profile_get_boolean(ctx->profile, "options", "old_bitmaps", 0, 0,
+                           &old_bitmaps);
+       if (!old_bitmaps)
+@@ -1319,6 +1385,21 @@ failure:
+       ehandler_init(fs->io);
++      if ((fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_MMP) &&
++          (flags & EXT2_FLAG_SKIP_MMP)) {
++              if (e2fsck_check_mmp(fs, ctx))
++                      fatal_error(ctx, 0);
++      }
++
++       /*
++        * Restart in order to reopen fs but this time start mmp.
++        */
++      if (flags & EXT2_FLAG_SKIP_MMP) {
++              ext2fs_close(fs);
++              flags &=~EXT2_FLAG_SKIP_MMP;
++              goto restart;
++      }
++
+       if ((ctx->mount_flags & EXT2_MF_MOUNTED) &&
+           !(sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER))
+               goto skip_journal;
+Index: e2fsprogs/e2fsck/problem.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.c
++++ e2fsprogs/e2fsck/problem.c
+@@ -414,6 +414,16 @@ static struct e2fsck_problem problem_tab
+         N_("Disable extra_isize feature since @f has 128 byte inodes.\n"),
+         PROMPT_NONE, 0 },
++      /* Superblock has invalid MMP block. */
++      { PR_0_MMP_INVALID_BLK,
++        N_("@S has invalid MMP block.  "),
++        PROMPT_CLEAR, PR_PREEN_OK },
++
++      /* Superblock has invalid MMP magic. */
++      { PR_0_MMP_INVALID_MAGIC,
++        N_("@S has invalid MMP magic.  "),
++        PROMPT_FIX, PR_PREEN_OK | PR_NO_OK},
++
+       /* Pass 1 errors */
+Index: e2fsprogs/e2fsck/problem.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.h
++++ e2fsprogs/e2fsck/problem.h
+@@ -238,6 +238,11 @@ struct problem_context {
+ /* Clear EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE flag */
+ #define PR_0_CLEAR_EXTRA_ISIZE                        0x000042
++/* Superblock has invalid MMP block. */
++#define PR_0_MMP_INVALID_BLK                  0x000043
++
++/* Superblock has invalid MMP magic. */
++#define PR_0_MMP_INVALID_MAGIC                        0x000044
+ /*
+  * Pass 1 errors
+Index: e2fsprogs/lib/ext2fs/swapfs.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/swapfs.c
++++ e2fsprogs/lib/ext2fs/swapfs.c
+@@ -70,6 +70,8 @@ void ext2fs_swap_super(struct ext2_super
+       sb->s_min_extra_isize = ext2fs_swab16(sb->s_min_extra_isize);
+       sb->s_want_extra_isize = ext2fs_swab16(sb->s_want_extra_isize);
+       sb->s_flags = ext2fs_swab32(sb->s_flags);
++      sb->s_mmp_update_interval = ext2fs_swab16(sb->s_mmp_update_interval);
++      sb->s_mmp_block = ext2fs_swab64(sb->s_mmp_block);
+       sb->s_kbytes_written = ext2fs_swab64(sb->s_kbytes_written);
+       sb->s_snapshot_inum = ext2fs_swab32(sb->s_snapshot_inum);
+       sb->s_snapshot_id = ext2fs_swab32(sb->s_snapshot_id);
+@@ -312,4 +314,12 @@ void ext2fs_swap_inode(ext2_filsys fs, s
+                               sizeof(struct ext2_inode));
+ }
++void ext2fs_swap_mmp(struct mmp_struct *mmp)
++{
++      mmp->mmp_magic = ext2fs_swab32(mmp->mmp_magic);
++      mmp->mmp_seq = ext2fs_swab32(mmp->mmp_seq);
++      mmp->mmp_time = ext2fs_swab64(mmp->mmp_time);
++      mmp->mmp_check_interval = ext2fs_swab16(mmp->mmp_check_interval);
++}
++
+ #endif
+Index: e2fsprogs/lib/ext2fs/ext2_err.et.in
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/ext2_err.et.in
++++ e2fsprogs/lib/ext2fs/ext2_err.et.in
+@@ -446,4 +446,25 @@ ec        EXT2_ET_EA_NAME_NOT_FOUND,
+ ec    EXT2_ET_EA_NAME_EXISTS,
+       "Extended attribute name already exists"
++ec    EXT2_ET_MMP_MAGIC_INVALID,
++      "MMP: invalid magic number"
++
++ec    EXT2_ET_MMP_FAILED,
++      "MMP: device currently active"
++
++ec    EXT2_ET_MMP_FSCK_ON,
++      "MMP: fsck being run"
++
++ec    EXT2_ET_MMP_BAD_BLOCK,
++      "MMP: block number beyond filesystem range"
++
++ec    EXT2_ET_MMP_UNKNOWN_SEQ,
++      "MMP: undergoing an unknown operation"
++
++ec    EXT2_ET_MMP_CHANGE_ABORT,
++      "MMP: filesystem still in use"
++
++ec    EXT2_ET_MMP_OPEN_DIRECT,
++      "MMP: open with O_DIRECT failed"
++
+       end
+Index: e2fsprogs/lib/ext2fs/openfs.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/openfs.c
++++ e2fsprogs/lib/ext2fs/openfs.c
+@@ -22,6 +22,9 @@
+ #if HAVE_SYS_TYPES_H
+ #include <sys/types.h>
+ #endif
++#ifdef HAVE_ERRNO_H
++#include <errno.h>
++#endif
+ #include "ext2_fs.h"
+@@ -82,6 +85,7 @@ errcode_t ext2fs_open(const char *name, 
+  *    EXT2_FLAG_FORCE - Open the filesystem even if some of the
+  *                            features aren't supported.
+  *    EXT2_FLAG_JOURNAL_DEV_OK - Open an ext3 journal device
++ *    EXT2_FLAG_SKIP_MMP - Open without multi-mount protection check.
+  */
+ errcode_t ext2fs_open2(const char *name, const char *io_options,
+                      int flags, int superblock,
+@@ -365,6 +369,18 @@ errcode_t ext2fs_open2(const char *name,
+       fs->flags &= ~EXT2_FLAG_NOFREE_ON_ERROR;
+       *ret_fs = fs;
++
++      if ((fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_MMP) &&
++          !(flags & EXT2_FLAG_SKIP_MMP)
++          && (flags & (EXT2_FLAG_RW | EXT2_FLAG_EXCLUSIVE))) {
++              retval = ext2fs_mmp_start(fs);
++              if (retval) {
++                      fs->flags |= EXT2_FLAG_SKIP_MMP; /* just do cleanup */
++                      ext2fs_mmp_stop(fs);
++                      goto cleanup;
++              }
++      }
++
+       return 0;
+ cleanup:
+       if (flags & EXT2_FLAG_NOFREE_ON_ERROR)
+Index: e2fsprogs/lib/ext2fs/closefs.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/closefs.c
++++ e2fsprogs/lib/ext2fs/closefs.c
+@@ -455,6 +455,11 @@ errcode_t ext2fs_close(ext2_filsys fs)
+               if (retval)
+                       return retval;
+       }
++
++      retval = ext2fs_mmp_stop(fs);
++      if (retval)
++              return retval;
++
+       ext2fs_free(fs);
+       return 0;
+ }
+Index: e2fsprogs/e2fsck/e2fsck.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.c
++++ e2fsprogs/e2fsck/e2fsck.c
+@@ -202,6 +202,7 @@ int e2fsck_run(e2fsck_t ctx)
+ {
+       int     i;
+       pass_t  e2fsck_pass;
++      int error;
+ #ifdef HAVE_SETJMP_H
+       if (setjmp(ctx->abort_loc)) {
+@@ -214,6 +215,9 @@ int e2fsck_run(e2fsck_t ctx)
+       for (i=0; (e2fsck_pass = e2fsck_passes[i]); i++) {
+               if (ctx->flags & E2F_FLAG_RUN_RETURN)
+                       break;
++              error = e2fsck_mmp_update(ctx->fs);
++              if (error)
++                      fatal_error(ctx, 0);
+               e2fsck_pass(ctx);
+               if (ctx->progress)
+                       (void) (ctx->progress)(ctx, 0, 0, 0);
+Index: e2fsprogs/e2fsck/e2fsck.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.h
++++ e2fsprogs/e2fsck/e2fsck.h
+@@ -569,6 +569,8 @@ extern blk_t get_backup_sb(e2fsck_t ctx,
+                          const char *name, io_manager manager);
+ extern int ext2_file_type(unsigned int mode);
+ extern int write_all(int fd, char *buf, size_t count);
++void dump_mmp_msg(struct mmp_struct *mmp, const char *msg);
++errcode_t e2fsck_mmp_update(ext2_filsys fs);
+ /* unix.c */
+ extern void e2fsck_clear_progbar(e2fsck_t ctx);
+Index: e2fsprogs/e2fsck/util.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/util.c
++++ e2fsprogs/e2fsck/util.c
+@@ -48,6 +48,7 @@ void fatal_error(e2fsck_t ctx, const cha
+       if (msg)
+               fprintf (stderr, "e2fsck: %s\n", msg);
+       if (ctx->fs && ctx->fs->io) {
++              ext2fs_mmp_stop(ctx->fs);
+               if (ctx->fs->io->magic == EXT2_ET_MAGIC_IO_CHANNEL)
+                       io_channel_flush(ctx->fs->io);
+               else
+@@ -709,3 +710,24 @@ int write_all(int fd, char *buf, size_t 
+       }
+       return c;
+ }
++
++void dump_mmp_msg(struct mmp_struct *mmp, const char *msg)
++{
++      if (msg)
++              printf("MMP check failed: %s\n", msg);
++      printf("MMP failure info: last update time: %llu node: %s device: %s\n",
++             (long long)mmp->mmp_time, mmp->mmp_nodename, mmp->mmp_bdevname);
++}
++
++errcode_t e2fsck_mmp_update(ext2_filsys fs)
++{
++      errcode_t retval;
++
++      retval = ext2fs_mmp_update(fs);
++      if (retval == EXT2_ET_MMP_CHANGE_ABORT)
++              dump_mmp_msg(fs->mmp_cmp,
++                           _("UNEXPECTED INCONSISTENCY: the filesystem is "
++                             "being modified while fsck is running.\n"));
++
++      return retval;
++}
+Index: e2fsprogs/lib/ext2fs/freefs.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/freefs.c
++++ e2fsprogs/lib/ext2fs/freefs.c
+@@ -53,6 +53,11 @@ void ext2fs_free(ext2_filsys fs)
+       if (fs->icache)
+               ext2fs_free_inode_cache(fs->icache);
++      if (fs->mmp_buf)
++              ext2fs_free_mem(&fs->mmp_buf);
++      if (fs->mmp_unaligned_buf)
++              ext2fs_free_mem(&fs->mmp_unaligned_buf);
++
+       fs->magic = 0;
+       ext2fs_free_mem(&fs);
+Index: e2fsprogs/lib/ext2fs/Makefile.in
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/Makefile.in
++++ e2fsprogs/lib/ext2fs/Makefile.in
+@@ -64,6 +64,7 @@ OBJS= $(DEBUGFS_LIB_OBJS) $(RESIZE_LIB_O
+       lookup.o \
+       mkdir.o \
+       mkjournal.o \
++      mmp.o \
+       namei.o \
+       native.o \
+       newdir.o \
+@@ -132,6 +133,7 @@ SRCS= ext2_err.c \
+       $(srcdir)/lookup.c \
+       $(srcdir)/mkdir.c \
+       $(srcdir)/mkjournal.c \
++      $(srcdir)/mmp.c \
+       $(srcdir)/namei.c \
+       $(srcdir)/native.c \
+       $(srcdir)/newdir.c \
+@@ -646,6 +648,8 @@ mkjournal.o: $(srcdir)/mkjournal.c $(src
+  $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \
+  $(srcdir)/bitops.h $(srcdir)/jfs_user.h $(srcdir)/kernel-jbd.h \
+  $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h
++mmp.o: $(srcdir)/ext2_fs.h $(srcdir)/ext2fs.h \
++ $(top_builddir)/lib/ext2fs/ext2_err.h
+ namei.o: $(srcdir)/namei.c $(srcdir)/ext2_fs.h \
+  $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
+  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+Index: e2fsprogs/lib/ext2fs/mmp.c
+===================================================================
+--- /dev/null
++++ e2fsprogs/lib/ext2fs/mmp.c
+@@ -0,0 +1,420 @@
++/*
++ * Helper functions for multiple mount protection(MMP).
++ *
++ * Copyright (C) 2006, 2007 by Kalpak Shah <kalpak@clusterfs.com>
++ *
++ * %Begin-Header%
++ * This file may be redistributed under the terms of the GNU Public
++ * License.
++ * %End-Header%
++ */
++
++#ifndef _GNU_SOURCE
++#define _GNU_SOURCE
++#endif
++
++#if HAVE_UNISTD_H
++#include <unistd.h>
++#endif
++#include <sys/time.h>
++
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++
++#include "ext2fs/ext2_fs.h"
++#include "ext2fs/ext2fs.h"
++
++static int mmp_pagesize(void)
++{
++#ifdef _SC_PAGESIZE
++      int sysval = sysconf(_SC_PAGESIZE);
++      if (sysval > 0)
++              return sysval;
++#endif /* _SC_PAGESIZE */
++#ifdef HAVE_GETPAGESIZE
++      return getpagesize();
++#else
++      return 4096;
++#endif
++}
++
++#define ptr_align(ptr, size)  (void *)(((unsigned long)(ptr) + (size) - 1) & \
++                                       ~((unsigned long)(size) - 1))
++#ifndef O_DIRECT
++#define O_DIRECT 0
++#endif
++
++errcode_t ext2fs_mmp_read(ext2_filsys fs, blk_t mmp_blk, void *buf)
++{
++      struct mmp_struct *mmp_cmp;
++      errcode_t retval = 0;
++
++      if ((mmp_blk <= fs->super->s_first_data_block) ||
++          (mmp_blk >= fs->super->s_blocks_count))
++              return EXT2_ET_MMP_BAD_BLOCK;
++
++      if (fs->mmp_cmp == NULL) {
++              /* O_DIRECT in linux 2.4: page aligned
++               * O_DIRECT in linux 2.6: sector aligned
++               * A filesystem cannot be created with blocksize < sector size,
++               * or with blocksize > page_size. */
++              int bufsize = fs->blocksize;
++
++              if (bufsize < mmp_pagesize())
++                      bufsize = mmp_pagesize();
++              retval = ext2fs_get_mem(bufsize * 2, &fs->mmp_unaligned_buf);
++              if (retval)
++                      return retval;
++              fs->mmp_cmp = ptr_align(fs->mmp_unaligned_buf, bufsize);
++      }
++
++      /* ext2fs_open reserves fd0,1,2 to avoid stdio collision */
++      if (fs->mmp_fd <= 0) {
++              fs->mmp_fd = open(fs->device_name, O_RDWR | O_DIRECT);
++              if (fs->mmp_fd < 0) {
++                      retval = EXT2_ET_MMP_OPEN_DIRECT;
++                      goto out;
++              }
++      }
++
++      if (ext2fs_llseek(fs->mmp_fd, mmp_blk * fs->blocksize, SEEK_SET) !=
++          mmp_blk * fs->blocksize) {
++              retval = EXT2_ET_LLSEEK_FAILED;
++              goto out;
++      }
++
++      if (read(fs->mmp_fd, fs->mmp_cmp, fs->blocksize) != fs->blocksize) {
++              retval = EXT2_ET_SHORT_READ;
++              goto out;
++      }
++
++      mmp_cmp = fs->mmp_cmp;
++#ifdef EXT2FS_ENABLE_SWAPFS
++      if (fs->flags & EXT2_FLAG_SWAP_BYTES)
++              ext2fs_swap_mmp(mmp_cmp);
++#endif
++
++      if (buf != NULL && buf != fs->mmp_cmp)
++              memcpy(buf, fs->mmp_cmp, fs->blocksize);
++
++      if (mmp_cmp->mmp_magic != EXT2_MMP_MAGIC) {
++              retval = EXT2_ET_MMP_MAGIC_INVALID;
++              goto out;
++      }
++
++out:
++      return retval;
++}
++
++errcode_t ext2fs_mmp_write(ext2_filsys fs, blk_t mmp_blk, void *buf)
++{
++      struct mmp_struct *mmp_s = buf;
++      struct timeval tv;
++      errcode_t retval = 0;
++
++      gettimeofday(&tv, 0);
++      mmp_s->mmp_time = tv.tv_sec;
++      fs->mmp_last_written = tv.tv_sec;
++
++#ifdef EXT2FS_ENABLE_SWAPFS
++      if (fs->super->s_magic == ext2fs_swab16(EXT2_SUPER_MAGIC))
++              ext2fs_swap_mmp(mmp_s);
++#endif
++
++      /* I was tempted to make this use O_DIRECT and the mmp_fd, but
++       * this caused no end of grief, while leaving it as-is works. */
++      retval = io_channel_write_blk(fs->io, mmp_blk, -fs->blocksize, buf);
++
++#ifdef EXT2FS_ENABLE_SWAPFS
++      if (fs->super->s_magic == ext2fs_swab16(EXT2_SUPER_MAGIC))
++              ext2fs_swap_mmp(mmp_s);
++#endif
++
++      /* Make sure the block gets to disk quickly */
++      io_channel_flush(fs->io);
++      return retval;
++}
++
++#ifdef HAVE_SRANDOM
++#define srand(x)      srandom(x)
++#define rand()                random()
++#endif
++
++unsigned ext2fs_mmp_new_seq()
++{
++      unsigned new_seq;
++      struct timeval tv;
++
++      gettimeofday(&tv, 0);
++      srand((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec);
++
++      gettimeofday(&tv, 0);
++      /* Crank the random number generator a few times */
++      for (new_seq = (tv.tv_sec ^ tv.tv_usec) & 0x1F; new_seq > 0; new_seq--)
++              rand();
++
++      do {
++              new_seq = rand();
++      } while (new_seq > EXT2_MMP_SEQ_MAX);
++
++      return new_seq;
++}
++
++static errcode_t ext2fs_mmp_reset(ext2_filsys fs)
++{
++      struct mmp_struct *mmp_s = NULL;
++      errcode_t retval = 0;
++
++      if (fs->mmp_buf == NULL) {
++              retval = ext2fs_get_mem(fs->blocksize, &fs->mmp_buf);
++              if (retval)
++                      goto out;
++      }
++
++      memset(fs->mmp_buf, 0, fs->blocksize);
++      mmp_s = fs->mmp_buf;
++
++      mmp_s->mmp_magic = EXT2_MMP_MAGIC;
++      mmp_s->mmp_seq = EXT2_MMP_SEQ_CLEAN;
++      mmp_s->mmp_time = 0;
++#if _BSD_SOURCE || _XOPEN_SOURCE >= 500
++      gethostname(mmp_s->mmp_nodename, sizeof(mmp_s->mmp_nodename));
++#else
++      mmp_s->mmp_nodename[0] = '\0';
++#endif
++      strncpy(mmp_s->mmp_bdevname, fs->device_name,
++              sizeof(mmp_s->mmp_bdevname));
++
++      mmp_s->mmp_check_interval = fs->super->s_mmp_update_interval;
++      if (mmp_s->mmp_check_interval < EXT2_MMP_MIN_CHECK_INTERVAL)
++              mmp_s->mmp_check_interval = EXT2_MMP_MIN_CHECK_INTERVAL;
++
++      retval = ext2fs_mmp_write(fs, fs->super->s_mmp_block, fs->mmp_buf);
++out:
++      return retval;
++}
++
++errcode_t ext2fs_mmp_clear(ext2_filsys fs)
++{
++      struct mmp_struct *mmp_s = NULL;
++      errcode_t retval = 0;
++
++      if (!(fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_MMP) ||
++          !(fs->flags & EXT2_FLAG_RW))
++              return 0;
++
++      retval = ext2fs_mmp_reset(fs);
++
++      return retval;
++}
++
++errcode_t ext2fs_mmp_init(ext2_filsys fs)
++{
++      struct ext2_super_block *sb = fs->super;
++      struct mmp_struct *mmp_s = NULL;
++      blk_t mmp_block;
++      errcode_t retval;
++
++      if (fs->mmp_buf == NULL) {
++              retval = ext2fs_get_mem(fs->blocksize, &fs->mmp_buf);
++              if (retval)
++                      goto out;
++      }
++
++      retval = ext2fs_alloc_block(fs, 0, fs->mmp_buf, &mmp_block);
++      if (retval)
++              goto out;
++
++      sb->s_mmp_block = mmp_block;
++      sb->s_mmp_update_interval = EXT2_MMP_UPDATE_INTERVAL;
++
++      retval = ext2fs_mmp_reset(fs);
++      if (retval)
++              goto out;
++
++out:
++      return retval;
++}
++
++/*
++ * Make sure that the fs is not mounted or being fsck'ed while opening the fs.
++ */
++errcode_t ext2fs_mmp_start(ext2_filsys fs)
++{
++      struct mmp_struct *mmp_s;
++      unsigned seq;
++      unsigned int mmp_check_interval;
++      errcode_t retval = 0;
++
++      if (fs->mmp_buf == NULL) {
++              retval = ext2fs_get_mem(fs->blocksize, &fs->mmp_buf);
++              if (retval)
++                      goto mmp_error;
++      }
++
++      retval = ext2fs_mmp_read(fs, fs->super->s_mmp_block, fs->mmp_buf);
++      if (retval)
++              goto mmp_error;
++
++      mmp_s = fs->mmp_buf;
++
++      mmp_check_interval = fs->super->s_mmp_update_interval;
++      if (mmp_check_interval < EXT2_MMP_MIN_CHECK_INTERVAL)
++              mmp_check_interval = EXT2_MMP_MIN_CHECK_INTERVAL;
++
++      seq = mmp_s->mmp_seq;
++      if (seq == EXT2_MMP_SEQ_CLEAN)
++              goto clean_seq;
++      if (seq == EXT2_MMP_SEQ_FSCK) {
++              retval = EXT2_ET_MMP_FSCK_ON;
++              goto mmp_error;
++      }
++
++      if (seq > EXT2_MMP_SEQ_FSCK) {
++              retval = EXT2_ET_MMP_UNKNOWN_SEQ;
++              goto mmp_error;
++      }
++
++      /*
++       * If check_interval in MMP block is larger, use that instead of
++       * check_interval from the superblock.
++       */
++      if (mmp_s->mmp_check_interval > mmp_check_interval)
++              mmp_check_interval = mmp_s->mmp_check_interval;
++
++      sleep(2 * mmp_check_interval + 1);
++
++      retval = ext2fs_mmp_read(fs, fs->super->s_mmp_block, fs->mmp_buf);
++      if (retval)
++              goto mmp_error;
++
++      if (seq != mmp_s->mmp_seq) {
++              retval = EXT2_ET_MMP_FAILED;
++              goto mmp_error;
++      }
++
++clean_seq:
++      if (!(fs->flags & EXT2_FLAG_RW))
++              goto mmp_error;
++
++      mmp_s->mmp_seq = seq = ext2fs_mmp_new_seq();
++#if _BSD_SOURCE || _XOPEN_SOURCE >= 500
++      gethostname(mmp_s->mmp_nodename, sizeof(mmp_s->mmp_nodename));
++#else
++      strcpy(mmp_s->mmp_nodename, "unknown host");
++#endif
++      strncpy(mmp_s->mmp_bdevname, fs->device_name,
++              sizeof(mmp_s->mmp_bdevname));
++
++      retval = ext2fs_mmp_write(fs, fs->super->s_mmp_block, fs->mmp_buf);
++      if (retval)
++              goto mmp_error;
++
++      sleep(2 * mmp_check_interval + 1);
++
++      retval = ext2fs_mmp_read(fs, fs->super->s_mmp_block, fs->mmp_buf);
++      if (retval)
++              goto mmp_error;
++
++      if (seq != mmp_s->mmp_seq) {
++              retval = EXT2_ET_MMP_FAILED;
++              goto mmp_error;
++      }
++
++      mmp_s->mmp_seq = EXT2_MMP_SEQ_FSCK;
++      retval = ext2fs_mmp_write(fs, fs->super->s_mmp_block, fs->mmp_buf);
++      if (retval)
++              goto mmp_error;
++
++      return 0;
++
++mmp_error:
++      return retval;
++}
++
++/*
++ * Clear the MMP usage in the filesystem.  If this function returns an
++ * error EXT2_ET_MMP_CHANGE_ABORT it means the filesystem was modified
++ * by some other process while in use, and changes should be dropped, or
++ * risk filesystem corruption.
++ */
++errcode_t ext2fs_mmp_stop(ext2_filsys fs)
++{
++      struct mmp_struct *mmp, *mmp_cmp;
++      errcode_t retval = 0;
++
++      if (!(fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_MMP) ||
++          !(fs->flags & EXT2_FLAG_RW) || (fs->flags & EXT2_FLAG_SKIP_MMP))
++              goto mmp_error;
++
++      retval = ext2fs_mmp_read(fs, fs->super->s_mmp_block, fs->mmp_buf);
++      if (retval)
++              goto mmp_error;
++
++      /* Check if the MMP block is not changed. */
++      mmp = fs->mmp_buf;
++      mmp_cmp = fs->mmp_cmp;
++      if (memcmp(mmp, mmp_cmp, sizeof(*mmp_cmp))) {
++              retval = EXT2_ET_MMP_CHANGE_ABORT;
++              goto mmp_error;
++      }
++
++check_skipped:
++      mmp_cmp->mmp_seq = EXT2_MMP_SEQ_CLEAN;
++      retval = ext2fs_mmp_write(fs, fs->super->s_mmp_block, fs->mmp_cmp);
++
++mmp_error:
++      if (fs->mmp_fd > 0) {
++              close(fs->mmp_fd);
++              fs->mmp_fd = -1;
++      }
++      if (fs->mmp_buf) {
++              ext2fs_free_mem(&fs->mmp_buf);
++              fs->mmp_buf = NULL;
++      }
++      if (fs->mmp_unaligned_buf) {
++              ext2fs_free_mem(&fs->mmp_unaligned_buf);
++              fs->mmp_unaligned_buf = NULL;
++              fs->mmp_cmp = NULL;
++      }
++
++      return retval;
++}
++
++#define EXT2_MIN_MMP_UPDATE_INTERVAL 60
++
++/*
++ * Update the on-disk mmp buffer, after checking that it hasn't been changed.
++ */
++errcode_t ext2fs_mmp_update(ext2_filsys fs)
++{
++      struct mmp_struct *mmp, *mmp_cmp;
++      struct timeval tv;
++      errcode_t retval = 0;
++
++      if (!(fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_MMP) ||
++          !(fs->flags & EXT2_FLAG_RW) || (fs->flags & EXT2_FLAG_SKIP_MMP))
++              return 0;
++
++      gettimeofday(&tv, 0);
++      if (tv.tv_sec - fs->mmp_last_written < EXT2_MIN_MMP_UPDATE_INTERVAL)
++              return 0;
++
++      retval = ext2fs_mmp_read(fs, fs->super->s_mmp_block, NULL);
++      if (retval)
++              goto mmp_error;
++
++      mmp = fs->mmp_buf;
++      mmp_cmp = fs->mmp_cmp;
++
++      if (memcmp(mmp, mmp_cmp, sizeof(*mmp_cmp)))
++              return EXT2_ET_MMP_CHANGE_ABORT;
++
++      mmp->mmp_time = tv.tv_sec;
++      mmp->mmp_seq = EXT2_MMP_SEQ_FSCK;
++      retval = ext2fs_mmp_write(fs, fs->super->s_mmp_block, fs->mmp_buf);
++
++mmp_error:
++      return retval;
++}
+Index: e2fsprogs/misc/tune2fs.8.in
+===================================================================
+--- e2fsprogs.orig/misc/tune2fs.8.in
++++ e2fsprogs/misc/tune2fs.8.in
+@@ -167,6 +167,11 @@ separated, and may take an argument usin
+ The following extended options are supported:
+ .RS 1.2i
+ .TP
++.B clear-mmp
++Reset the MMP block (if any) back to the clean state.  Use only if
++absolutely certain the device is not currently mounted or being
++fscked, or major filesystem corruption can result.  Needs '-f'.
++.TP
+ .BI stride= stride-size
+ Configure the filesystem for a RAID array with
+ .I stride-size
+@@ -523,6 +528,11 @@ future.
+ .B Tune2fs 
+ only supports clearing this filesystem feature.
+ .TP
++.B mmp
++Enable or disable multiple mount protection(MMP) feature. MMP helps to protect
++the filesystem from being multiply mounted and is useful in shared storage
++environment.
++.TP
+ .B sparse_super
+ Limit the number of backup superblocks to save space on large filesystems.
+ .TP
+@@ -559,6 +569,9 @@ and
+ .BR flex_bg
+ features are only supported by the ext4 filesystem.
+ .TP
++.BI \-p " mmp_check_interval"
++Set the desired MMP check interval in seconds. It is 5 seconds by default.
++.TP
+ .BI \-r " reserved-blocks-count"
+ Set the number of reserved filesystem blocks.
+ .TP
+Index: e2fsprogs/misc/mke2fs.c
+===================================================================
+--- e2fsprogs.orig/misc/mke2fs.c
++++ e2fsprogs/misc/mke2fs.c
+@@ -813,6 +813,7 @@ static __u32 ok_features[3] = {
+               EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|
+               EXT2_FEATURE_INCOMPAT_META_BG|
+               EXT4_FEATURE_INCOMPAT_FLEX_BG|
++              EXT4_FEATURE_INCOMPAT_MMP |
+               EXT4_FEATURE_INCOMPAT_64BIT,
+       /* R/O compat */
+       EXT2_FEATURE_RO_COMPAT_LARGE_FILE|
+@@ -2381,8 +2382,20 @@ int main (int argc, char *argv[])
+       }
+ no_journal:
+-      if (!super_only)
++      if (!super_only) {
+               ext2fs_set_gdt_csum(fs);
++              if (fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_MMP) {
++                      retval = ext2fs_mmp_init(fs);
++                      if (retval) {
++                              fprintf(stderr, _("\nError while enabling "
++                                      "multiple mount protection feature."));
++                              exit(1);
++                      }
++                      printf(_("Multiple mount protection has been enabled "
++                               "with update interval %d seconds.\n"),
++                               fs->super->s_mmp_update_interval);
++              }
++      }
+       if (!quiet)
+               printf(_("Writing superblocks and "
+                      "filesystem accounting information: "));
+Index: e2fsprogs/lib/e2p/ls.c
+===================================================================
+--- e2fsprogs.orig/lib/e2p/ls.c
++++ e2fsprogs/lib/e2p/ls.c
+@@ -394,6 +394,12 @@ void list_super2(struct ext2_super_block
+               fprintf(f, "Last error block #:       %llu\n",
+                       sb->s_last_error_block);
+       }
++      if (sb->s_feature_incompat & EXT4_FEATURE_INCOMPAT_MMP) {
++              fprintf(f, "MMP block number:         %llu\n",
++                      (long long)sb->s_mmp_block);
++              fprintf(f, "MMP update interval:      %u\n",
++                      sb->s_mmp_update_interval);
++      }
+ }
+ void list_super (struct ext2_super_block * s)
+Index: e2fsprogs/debugfs/set_fields.c
+===================================================================
+--- e2fsprogs.orig/debugfs/set_fields.c
++++ e2fsprogs/debugfs/set_fields.c
+@@ -130,7 +130,7 @@ static struct field_set_info super_field
+       { "flags", &set_sb.s_flags, 4, parse_uint },
+       { "raid_stride", &set_sb.s_raid_stride, 2, parse_uint },
+       { "min_extra_isize", &set_sb.s_min_extra_isize, 4, parse_uint },
+-      { "mmp_interval", &set_sb.s_mmp_interval, 2, parse_uint },
++      { "mmp_update_interval", &set_sb.s_mmp_update_interval, 2, parse_uint },
+       { "mmp_block", &set_sb.s_mmp_block, 8, parse_uint },
+       { "raid_stripe_width", &set_sb.s_raid_stripe_width, 4, parse_uint },
+       { "log_groups_per_flex", &set_sb.s_log_groups_per_flex, 1, parse_uint },
+Index: e2fsprogs/misc/util.c
+===================================================================
+--- e2fsprogs.orig/misc/util.c
++++ e2fsprogs/misc/util.c
+@@ -291,3 +291,11 @@ void print_check_message(ext2_filsys fs)
+              fs->super->s_max_mnt_count,
+              (double)fs->super->s_checkinterval / (3600 * 24));
+ }
++
++void dump_mmp_msg(struct mmp_struct *mmp, const char *msg)
++{
++      if (msg)
++              printf("MMP check failed: %s\n", msg);
++      printf("MMP failure info: last update time: %llu node: %s device: %s\n",
++             (long long)mmp->mmp_time, mmp->mmp_nodename, mmp->mmp_bdevname);
++}
+Index: e2fsprogs/e2fsck/journal.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/journal.c
++++ e2fsprogs/e2fsck/journal.c
+@@ -881,6 +881,8 @@ int e2fsck_run_ext3_journal(e2fsck_t ctx
+               ctx->fs->io->manager->get_stats(ctx->fs->io, &stats);
+       if (stats && stats->bytes_written)
+               kbytes_written = stats->bytes_written >> 10;
++
++      ext2fs_mmp_stop(ctx->fs);
+       ext2fs_free(ctx->fs);
+       retval = ext2fs_open(ctx->filesystem_name, EXT2_FLAG_RW,
+                            ctx->superblock, blocksize, io_ptr,
+Index: e2fsprogs/debugfs/debug_cmds.ct
+===================================================================
+--- e2fsprogs.orig/debugfs/debug_cmds.ct
++++ e2fsprogs/debugfs/debug_cmds.ct
+@@ -163,5 +163,8 @@ request do_set_current_time, "Set curren
+ request do_supported_features, "Print features supported by this version of e2fsprogs",
+       supported_features;
++request do_dump_mmp, "Dump MMP information",
++      dump_mmp;
++
+ end;
+Index: e2fsprogs/debugfs/debugfs.c
+===================================================================
+--- e2fsprogs.orig/debugfs/debugfs.c
++++ e2fsprogs/debugfs/debugfs.c
+@@ -78,6 +78,8 @@ static void open_filesystem(char *device
+                       "opening read-only because of catastrophic mode");
+               open_flags &= ~EXT2_FLAG_RW;
+       }
++      if (catastrophic)
++              open_flags |= EXT2_FLAG_SKIP_MMP;
+       retval = ext2fs_open(device, open_flags, superblock, blocksize,
+                            unix_io_manager, &current_fs);
+@@ -2127,6 +2129,39 @@ void do_punch(int argc, char *argv[])
+       }
+ }
++void do_dump_mmp(int argc, char *argv[])
++{
++      struct mmp_struct *mmp_s;
++      errcode_t retval = 0;
++
++      if (current_fs->mmp_buf == NULL) {
++              retval = ext2fs_get_mem(current_fs->blocksize,
++                                      &current_fs->mmp_buf);
++              if (retval) {
++                      com_err(argv[0], 0, "Could not allocate memory.\n");
++                      return;
++              }
++      }
++
++      mmp_s = current_fs->mmp_buf;
++
++      retval = ext2fs_mmp_read(current_fs, current_fs->super->s_mmp_block,
++                               current_fs->mmp_buf);
++      if (retval) {
++              com_err(argv[0], retval, "Error reading MMP block.\n");
++              return;
++      }
++
++      fprintf(stdout, "MMP Block: %llu\n", current_fs->super->s_mmp_block);
++      fprintf(stdout, "MMP Update Interval: %d\n",
++              current_fs->super->s_mmp_update_interval);
++      fprintf(stdout, "MMP Check Interval: %d\n", mmp_s->mmp_check_interval);
++      fprintf(stdout, "MMP Sequence: %u\n", mmp_s->mmp_seq);
++      fprintf(stdout, "Last Update Time: %llu\n", mmp_s->mmp_time);
++      fprintf(stdout, "Node: %s\n", mmp_s->mmp_nodename);
++      fprintf(stdout, "Device: %s\n", mmp_s->mmp_bdevname);
++}
++
+ static int source_file(const char *cmd_file, int sci_idx)
+ {
+       FILE            *f;
diff --git a/patches/e2fsprogs-new-opt-shrdblks.patch b/patches/e2fsprogs-new-opt-shrdblks.patch
new file mode 100644 (file)
index 0000000..8c672c9
--- /dev/null
@@ -0,0 +1,346 @@
+E2fsck fixes files that are found to be sharing blocks by cloning
+the shared blocks and giving each file a private copy in pass 1D.
+
+Allowing all files claiming the shared blocks to have copies can
+inadvertantly bypass access restrictions.  Deleting all the files, 
+zeroing the cloned blocks, or placing the files in the /lost+found 
+directory after cloning may be preferable in some secure environments.
+
+The following patches implement config file and command line options in
+e2fsck that allow pass 1D behavior to be tuned according to site policy.
+It adds two extended options and config file counterparts.  On the 
+command line:
+
+ -E clone=dup|zero
+
+    Select the block cloning method.  "dup" is old behavior which remains
+    the default.  "zero" is a new method that substitutes zero-filled
+    blocks for the shared blocks in all the files that claim them.
+
+ -E shared=preserve|lost+found|delete
+
+    Select the disposition of files containing shared blocks.  "preserve"
+    is the old behavior which remains the default.  "lost+found" causes
+    files to be unlinked after cloning so they will be reconnected to
+    /lost+found in pass 3.   "delete" skips cloning entirely and simply
+    deletes the files.
+
+In the config file:
+  [options]
+      clone=dup|zero
+      shared=preserve|lost+found|delete
+
+Signed-off-by: Jim Garlick <garlick@llnl.gov>
+
+Index: e2fsprogs/e2fsck/e2fsck.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.h
++++ e2fsprogs/e2fsck/e2fsck.h
+@@ -192,6 +192,17 @@ struct resource_track {
+ #define E2F_PASS_5    5
+ #define E2F_PASS_1B   6
++typedef       enum {
++      E2F_SHARED_PRESERVE = 0,
++      E2F_SHARED_DELETE,
++      E2F_SHARED_LPF
++} shared_opt_t;
++
++typedef enum {
++      E2F_CLONE_DUP = 0,
++      E2F_CLONE_ZERO
++} clone_opt_t;
++
+ /*
+  * Define the extended attribute refcount structure
+  */
+@@ -346,6 +357,8 @@ struct e2fsck_struct {
+       time_t now;
+       time_t time_fudge;      /* For working around buggy init scripts */
+       int ext_attr_ver;
++      shared_opt_t shared;
++      clone_opt_t clone;
+       profile_t       profile;
+       int blocks_per_page;
+Index: e2fsprogs/e2fsck/unix.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/unix.c
++++ e2fsprogs/e2fsck/unix.c
+@@ -562,6 +562,49 @@ static void signal_cancel(int sig EXT2FS
+ }
+ #endif
++static void initialize_profile_options(e2fsck_t ctx)
++{
++      char *tmp;
++
++      /* [options] shared=preserve|lost+found|delete */
++      tmp = NULL;
++      ctx->shared = E2F_SHARED_PRESERVE;
++      profile_get_string(ctx->profile, "options", "shared", 0,
++                         "preserve", &tmp);
++      if (tmp) {
++              if (strcmp(tmp, "preserve") == 0)
++                      ctx->shared = E2F_SHARED_PRESERVE;
++              else if (strcmp(tmp, "delete") == 0)
++                      ctx->shared = E2F_SHARED_DELETE;
++              else if (strcmp(tmp, "lost+found") == 0)
++                      ctx->shared = E2F_SHARED_LPF;
++              else {
++                      com_err(ctx->program_name, 0,
++                              _("configuration error: 'shared=%s'"), tmp);
++                      fatal_error(ctx, 0);
++              }
++              free(tmp);
++      }
++
++      /* [options] clone=dup|zero */
++      tmp = NULL;
++      ctx->clone = E2F_CLONE_DUP;
++      profile_get_string(ctx->profile, "options", "clone", 0,
++                         "dup", &tmp);
++      if (tmp) {
++              if (strcmp(tmp, "dup") == 0)
++                      ctx->clone = E2F_CLONE_DUP;
++              else if (strcmp(tmp, "zero") == 0)
++                      ctx->clone = E2F_CLONE_ZERO;
++              else {
++                      com_err(ctx->program_name, 0,
++                              _("configuration error: 'clone=%s'"), tmp);
++                      fatal_error(ctx, 0);
++              }
++              free(tmp);
++      }
++}
++
+ static void parse_extended_opts(e2fsck_t ctx, const char *opts)
+ {
+       char    *buf, *token, *next, *p, *arg;
+@@ -597,6 +640,36 @@ static void parse_extended_opts(e2fsck_t
+               } else if (strcmp(token, "fragcheck") == 0) {
+                       ctx->options |= E2F_OPT_FRAGCHECK;
+                       continue;
++              /* -E shared=preserve|lost+found|delete */
++              } else if (strcmp(token, "shared") == 0) {
++                      if (!arg) {
++                              extended_usage++;
++                              continue;
++                      }
++                      if (strcmp(arg, "preserve") == 0) {
++                              ctx->shared = E2F_SHARED_PRESERVE;
++                      } else if (strcmp(arg, "lost+found") == 0) {
++                              ctx->shared = E2F_SHARED_LPF;
++                      } else if (strcmp(arg, "delete") == 0) {
++                              ctx->shared = E2F_SHARED_DELETE;
++                      } else {
++                              extended_usage++;
++                              continue;
++                      }
++              /* -E clone=dup|zero */
++              } else if (strcmp(token, "clone") == 0) {
++                      if (!arg) {
++                              extended_usage++;
++                              continue;
++                      }
++                      if (strcmp(arg, "dup") == 0) {
++                              ctx->clone = E2F_CLONE_DUP;
++                      } else if (strcmp(arg, "zero") == 0) {
++                              ctx->clone = E2F_CLONE_ZERO;
++                      } else {
++                              extended_usage++;
++                              continue;
++                      }
+               } else if (strcmp(token, "journal_only") == 0) {
+                       if (arg) {
+                               extended_usage++;
+@@ -627,6 +700,8 @@ static void parse_extended_opts(e2fsck_t
+               fputs(("\tjournal_only\n"), stderr);
+               fputs(("\tdiscard\n"), stderr);
+               fputs(("\tnodiscard\n"), stderr);
++              fputs(("\tshared=<preserve|lost+found|delete>\n"), stderr);
++              fputs(("\tclone=<dup|zero>\n"), stderr);
+               fputc('\n', stderr);
+               exit(1);
+       }
+@@ -690,6 +765,7 @@ static errcode_t PRS(int argc, char *arg
+       profile_set_syntax_err_cb(syntax_err_report);
+       profile_init(config_fn, &ctx->profile);
++      initialize_profile_options(ctx);
+       while ((c = getopt (argc, argv, "panyrcC:B:dE:fvtFVM:b:I:j:P:l:L:N:SsDk")) != EOF)
+               switch (c) {
+Index: e2fsprogs/e2fsck/pass1b.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1b.c
++++ e2fsprogs/e2fsck/pass1b.c
+@@ -474,6 +474,9 @@ static void pass1d(e2fsck_t ctx, char *b
+                       q = (struct dup_block *) dnode_get(m);
+                       if (q->num_bad > 1)
+                               file_ok = 0;
++                      if (q->num_bad == 1 && (ctx->clone == E2F_CLONE_ZERO ||
++                          ctx->shared != E2F_SHARED_PRESERVE))
++                              file_ok = 0;
+                       if (check_if_fs_block(ctx, s->block)) {
+                               file_ok = 0;
+                               meta_data = 1;
+@@ -529,13 +532,26 @@ static void pass1d(e2fsck_t ctx, char *b
+                       fix_problem(ctx, PR_1D_DUP_BLOCKS_DEALT, &pctx);
+                       continue;
+               }
+-              if (fix_problem(ctx, PR_1D_CLONE_QUESTION, &pctx)) {
++              if (ctx->shared != E2F_SHARED_DELETE &&
++                  fix_problem(ctx, PR_1D_CLONE_QUESTION, &pctx)) {
+                       pctx.errcode = clone_file(ctx, ino, p, block_buf);
+-                      if (pctx.errcode)
++                      if (pctx.errcode) {
+                               fix_problem(ctx, PR_1D_CLONE_ERROR, &pctx);
+-                      else
+-                              continue;
++                              goto delete;
++                      }
++                      if (ctx->shared == E2F_SHARED_LPF &&
++                          fix_problem(ctx, PR_1D_DISCONNECT_QUESTION, &pctx)) {
++                              pctx.errcode = ext2fs_unlink(fs, p->dir,
++                                                           NULL, ino, 0);
++                              if (pctx.errcode) {
++                                      fix_problem(ctx, PR_1D_DISCONNECT_ERROR,
++                                                  &pctx);
++                                      goto delete;
++                              }
++                      }
++                      continue;
+               }
++delete:
+               if (fix_problem(ctx, PR_1D_DELETE_QUESTION, &pctx))
+                       delete_file(ctx, ino, p, block_buf);
+               else
+@@ -552,7 +568,8 @@ static void decrement_badcount(e2fsck_t 
+ {
+       p->num_bad--;
+       if (p->num_bad <= 0 ||
+-          (p->num_bad == 1 && !check_if_fs_block(ctx, block)))
++          (p->num_bad == 1 && !check_if_fs_block(ctx, block) &&
++          ctx->clone == E2F_CLONE_DUP))
+               ext2fs_unmark_block_bitmap2(ctx->block_dup_map, block);
+ }
+@@ -698,11 +715,15 @@ static int clone_file_block(ext2_filsys 
+                       printf("Cloning block %u to %u\n", *block_nr,
+                              new_block);
+ #endif
+-                      retval = io_channel_read_blk64(fs->io, *block_nr, 1,
+-                                                   cs->buf);
+-                      if (retval) {
+-                              cs->errcode = retval;
+-                              return BLOCK_ABORT;
++                      if (ctx->clone == E2F_CLONE_ZERO) {
++                              memset(cs->buf, 0, fs->blocksize);
++                      } else {
++                              retval = io_channel_read_blk(fs->io, *block_nr,
++                                                      1, cs->buf);
++                              if (retval) {
++                                      cs->errcode = retval;
++                                      return BLOCK_ABORT;
++                              }
+                       }
+                       retval = io_channel_write_blk64(fs->io, new_block, 1,
+                                                     cs->buf);
+@@ -711,6 +732,11 @@ static int clone_file_block(ext2_filsys 
+                               return BLOCK_ABORT;
+                       }
+                       decrement_badcount(ctx, *block_nr, p);
++                      if (ctx->clone == E2F_CLONE_ZERO && p->num_bad == 0) {
++                              ext2fs_unmark_block_bitmap2(ctx->block_found_map,
++                                                         *block_nr);
++                              ext2fs_block_alloc_stats(fs, *block_nr, -1);
++                      }
+                       *block_nr = new_block;
+                       ext2fs_mark_block_bitmap2(ctx->block_found_map,
+                                                new_block);
+Index: e2fsprogs/e2fsck/problem.h
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.h
++++ e2fsprogs/e2fsck/problem.h
+@@ -593,6 +593,13 @@ struct problem_context {
+ /* Couldn't clone file (error) */
+ #define PR_1D_CLONE_ERROR     0x013008
++/* File with shared blocks found */
++#define PR_1D_DISCONNECT_QUESTION 0x013009
++
++/* Couldn't unlink file (error) */
++#define PR_1D_DISCONNECT_ERROR        0x01300A
++
++
+ /*
+  * Pass 2 errors
+  */
+Index: e2fsprogs/e2fsck/problem.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/problem.c
++++ e2fsprogs/e2fsck/problem.c
+@@ -1003,6 +1003,14 @@ static struct e2fsck_problem problem_tab
+       { PR_1D_CLONE_ERROR,
+         N_("Couldn't clone file: %m\n"), PROMPT_NONE, 0 },
++      /* File with shared blocks found */
++      { PR_1D_DISCONNECT_QUESTION,
++        N_("File with shared blocks found\n"), PROMPT_CONNECT, 0 },
++
++      /* Couldn't unlink file (error) */
++      { PR_1D_DISCONNECT_ERROR,
++        N_("Couldn't unlink file: %m\n"), PROMPT_NONE, 0 },
++
+       /* Pass 2 errors */
+       /* Pass 2: Checking directory structure */
+Index: e2fsprogs/e2fsck/e2fsck.8.in
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.8.in
++++ e2fsprogs/e2fsck/e2fsck.8.in
+@@ -180,6 +180,19 @@ separated, and may take an argument usin
+ following options are supported:
+ .RS 1.2i
+ .TP
++.BI clone= dup|zero
++Resolve files with shared blocks in pass 1D by giving each file a private
++copy of the blocks (dup);
++or replacing the shared blocks with private, zero-filled blocks (zero).  
++The default is dup.
++.TP
++.BI shared= preserve|lost+found|delete
++Files with shared blocks discovered in pass 1D are cloned and then left 
++in place (preserve); 
++cloned and then disconnected from their parent directory,
++then reconnected to /lost+found in pass 3 (lost+found); 
++or simply deleted (delete).  The default is preserve.
++.TP
+ .BI ea_ver= extended_attribute_version
+ Set the version of the extended attribute blocks which
+ .B e2fsck
+Index: e2fsprogs/e2fsck/e2fsck.conf.5.in
+===================================================================
+--- e2fsprogs.orig/e2fsck/e2fsck.conf.5.in
++++ e2fsprogs/e2fsck/e2fsck.conf.5.in
+@@ -129,6 +129,19 @@ This boolean relation controls whether o
+ will offer to clear
+ the test_fs flag if the ext4 filesystem is available on the system.  It
+ defaults to true.
++.TP
++.I clone
++This string relation controls the default handling of shared blocks in pass 1D.
++It can be set to dup or zero.  See the
++.I "-E clone" 
++option description in e2fsck(8).
++.TP
++.I shared
++This string relation controls the default disposition of files discovered to 
++have shared blocks in pass 1D.  It can be set to preserve, lost+found, 
++or delete.  See the
++.I "-E shared" 
++option description in e2fsck(8).
+ .TP 
+ .I defer_check_on_battery
+ This boolean relation controls whether or not the interval between 
diff --git a/patches/e2fsprogs-osx.patch b/patches/e2fsprogs-osx.patch
new file mode 100644 (file)
index 0000000..509a6b7
--- /dev/null
@@ -0,0 +1,64 @@
+The BLKFLSBUF and FDFLUSH ioctls are Linux specific, and do not
+really have anything to do with __GNUC__ (which is also used on
+OS/X and Solaris).  No need to print these warnings on OS/X.
+
+O_DIRECT is not defined in the OS/X headers.  Since this is only a
+performance enhancement, and not required for correct operation,
+just ignore it if undefined.
+
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/lib/ext2fs/flushb.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/flushb.c
++++ e2fsprogs/lib/ext2fs/flushb.c
+@@ -65,17 +65,13 @@ errcode_t ext2fs_sync_device(int fd, int
+ #ifdef BLKFLSBUF
+               if (ioctl (fd, BLKFLSBUF, 0) == 0)
+                       return 0;
+-#else
+-#ifdef __GNUC__
+- #warning BLKFLSBUF not defined
+-#endif /* __GNUC__ */
++#elif defined(__linux__)
++#warning BLKFLSBUF not defined
+ #endif
+ #ifdef FDFLUSH
+               ioctl (fd, FDFLUSH, 0);   /* In case this is a floppy */
+-#else
+-#ifdef __GNUC__
+- #warning FDFLUSH not defined
+-#endif /* __GNUC__ */
++#elif defined(__linux__)
++#warning FDFLUSH not defined
+ #endif
+       }
+       return 0;
+Index: e2fsprogs/lib/ext2fs/getsize.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/getsize.c
++++ e2fsprogs/lib/ext2fs/getsize.c
+@@ -235,7 +235,7 @@ errcode_t ext2fs_get_device_size2(const 
+ #endif /* HAVE_SYS_DISKLABEL_H */
+       {
+-#ifdef HAVE_FSTAT64
++#if defined(HAVE_FSTAT64) && !defined(__OSX__)
+               struct stat64   st;
+               if (fstat64(fd, &st) == 0)
+ #else
+Index: e2fsprogs/lib/ext2fs/unix_io.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/unix_io.c
++++ e2fsprogs/lib/ext2fs/unix_io.c
+@@ -474,8 +474,10 @@ static errcode_t unix_open(const char *n
+       open_flags = (flags & IO_FLAG_RW) ? O_RDWR : O_RDONLY;
+       if (flags & IO_FLAG_EXCLUSIVE)
+               open_flags |= O_EXCL;
++#ifdef O_DIRECT
+       if (flags & IO_FLAG_DIRECT_IO)
+               open_flags |= O_DIRECT;
++#endif
+       data->flags = flags;
+ #ifdef HAVE_OPEN64
diff --git a/patches/e2fsprogs-rpm_support.patch b/patches/e2fsprogs-rpm_support.patch
new file mode 100644 (file)
index 0000000..d54563e
--- /dev/null
@@ -0,0 +1,1176 @@
+Index: e2fsprogs/e2fsprogs-SUSE_LINUX-11.spec.in
+===================================================================
+--- /dev/null
++++ e2fsprogs/e2fsprogs-SUSE_LINUX-11.spec.in
+@@ -0,0 +1,1106 @@
++#
++# spec file for package e2fsprogs (Version 1.41.9)
++#
++# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
++#
++# All modifications and additions to the file contributed by third parties
++# remain the property of their copyright owners, unless otherwise agreed
++# upon. The license for this file, and modifications and additions to the
++# file, is the same license as for the pristine package itself (unless the
++# license for the pristine package is not an Open Source License, in which
++# case the license is the MIT License). An "Open Source License" is a
++# license that conforms to the Open Source Definition (Version 1.9)
++# published by the Open Source Initiative.
++
++# Please submit bugfixes or comments via http://bugs.opensuse.org/
++#
++
++# norootforbuild
++
++
++Name:           e2fsprogs
++License:        GPL v2 or later
++Group:          System/Filesystems
++Supplements:    filesystem(ext2) filesystem(ext3) filesystem(ext4)
++BuildRequires:  libblkid-devel libuuid-devel pkg-config libdb-4_5-devel
++PreReq:         %install_info_prereq
++AutoReqProv:    on
++# bug437293
++%ifarch ppc64
++Obsoletes:      e2fsprogs-64bit
++%endif
++#
++Version:        @E2FSPROGS_PKGVER@
++Release:        0%{_vendor}
++Summary:        Utilities for the Second Extended File System
++Url:            http://e2fsprogs.sourceforge.net
++Source:         %{name}-%{version}.tar.gz
++BuildRoot:      %{_tmppath}/%{name}-%{version}-build
++
++%description
++Utilities needed to create and maintain ext2 and ext3 file systems
++under Linux. Included in this package are: chattr, lsattr, mke2fs,
++mklost+found, tune2fs, e2fsck, resize2fs, and badblocks.
++
++
++
++Authors:
++--------
++    Remy Card <card@masi.ibp.fr>
++    Theodore Ts'o <tytso@mit.edu>
++
++%package devel
++License:        GPL v2 or later
++Summary:        Dummy development package
++Group:          Development/Libraries/C and C++
++AutoReqProv:    on
++# bug437293
++%ifarch ppc64
++Obsoletes:      e2fsprogs-devel-64bit
++%endif
++#
++Requires:       libext2fs-devel = %version libblkid-devel libuuid-devel
++
++%description devel
++Dummy development package for backwards compatibility.
++
++
++
++Authors:
++--------
++    Remy Card <card@masi.ibp.fr>
++    Theodore Ts'o <tytso@mit.edu>
++
++%package -n libext2fs2
++License:        GPL v2 or later
++Summary:        Ext2fs libray
++Group:          System/Filesystems
++AutoReqProv:    on
++
++%description -n libext2fs2
++The basic Ext2fs library.
++
++
++
++Authors:
++--------
++    Remy Card <card@masi.ibp.fr>
++    Theodore Ts'o <tytso@mit.edu>
++
++%package -n libext2fs-devel
++License:        GPL v2 or later
++Summary:        Development files for libext2fs
++Group:          Development/Libraries/C and C++
++AutoReqProv:    on
++Requires:       libext2fs2 = %version libcom_err-devel
++
++%description -n libext2fs-devel
++Development files for libext2fs.
++
++
++
++Authors:
++--------
++    Remy Card <card@masi.ibp.fr>
++    Theodore Ts'o <tytso@mit.edu>
++
++%package -n libcom_err2
++License:        GPL v2 or later
++Summary:        E2fsprogs error reporting library
++Group:          System/Filesystems
++# bug437293
++%ifarch ppc64
++Obsoletes:      libcom_err-64bit
++Obsoletes:      libcom_err2-64bit
++%endif
++#
++Provides:       libcom_err = %{version}
++Obsoletes:      libcom_err <= 1.40
++AutoReqProv:    on
++
++%description -n libcom_err2
++com_err is an error message display library.
++
++
++
++Authors:
++--------
++    Remy Card <card@masi.ibp.fr>
++    Theodore Ts'o <tytso@mit.edu>
++
++%package -n libcom_err-devel
++License:        GPL v2 or later
++Summary:        Development files for libcom_err
++Group:          Development/Libraries/C and C++
++AutoReqProv:    on
++# bug437293
++%ifarch ppc64
++Obsoletes:      libcom_err-devel-64bit
++%endif
++#
++Requires:       libcom_err2 = %version
++
++%description -n libcom_err-devel
++Development files for the com_err error message display library.
++
++
++
++Authors:
++--------
++    Remy Card <card@masi.ibp.fr>
++    Theodore Ts'o <tytso@mit.edu>
++
++%prep
++%setup -q
++# e2fsprogs patches
++patch -p1 < patches/sles/11/rpm/e2fsprogs-1.41.1-splash_support.patch
++# libcom_err patches
++patch -p1 < patches/sles/11/rpm/libcom_err-compile_et_permissions.patch
++cp patches/sles/11/rpm/README.SUSE .
++cp patches/sles/11/rpm/%{name}-1.41.4.de.po po/de.po
++
++%build
++autoreconf --force --install
++./configure --prefix=%{_prefix} \
++  --with-root-prefix=''   \
++  --mandir=%{_mandir} \
++  --infodir=%{_infodir} \
++  --libdir=%{_libdir} \
++  --enable-elf-shlibs \
++  --disable-evms \
++  --disable-libblkid \
++  --disable-libuuid \
++  --disable-uuidd \
++  --disable-fsck \
++  %{?extra_config_flags:%extra_config_flags} CFLAGS="$RPM_OPT_FLAGS"
++make V=1
++
++%install
++make install install-libs DESTDIR=$RPM_BUILD_ROOT ELF_INSTALL_DIR=/%{_lib}
++%{find_lang} %{name}
++rm $RPM_BUILD_ROOT%{_libdir}/e2initrd_helper
++rm -f $RPM_BUILD_ROOT/sbin/mkfs.ext4dev
++rm -f $RPM_BUILD_ROOT/sbin/fsck.ext4dev
++rm -f $RPM_BUILD_ROOT/usr/share/man/man8/mkfs.ext4dev.8*
++rm -f $RPM_BUILD_ROOT/usr/share/man/man8/fsck.ext4dev.8*
++
++%clean
++rm -rf $RPM_BUILD_ROOT
++
++%post
++/sbin/ldconfig
++%install_info --info-dir=%{_infodir} %{_infodir}/libext2fs.info.gz
++
++%postun
++/sbin/ldconfig
++%install_info_delete --info-dir=%{_infodir} %{_infodir}/libext2fs.info.gz
++
++%post -n libext2fs2
++/sbin/ldconfig
++
++%postun -n libext2fs2
++/sbin/ldconfig
++
++%post -n libcom_err2
++/sbin/ldconfig
++
++%postun -n libcom_err2
++/sbin/ldconfig
++
++%files -f %{name}.lang
++%defattr(-, root, root)
++%doc RELEASE-NOTES README
++%config /etc/mke2fs.conf
++/sbin/badblocks
++/sbin/debugfs
++/sbin/dumpe2fs
++/sbin/e2undo
++/sbin/e2fsck
++/sbin/e2label
++/sbin/fsck.ext2
++/sbin/fsck.ext3
++/sbin/fsck.ext4
++/sbin/mke2fs
++/sbin/mkfs.ext2
++/sbin/mkfs.ext3
++/sbin/mkfs.ext4
++/sbin/resize2fs
++/sbin/tune2fs
++/sbin/e2image
++/sbin/logsave
++/usr/bin/chattr
++/usr/bin/lsattr
++/usr/sbin/mklost+found
++/usr/sbin/filefrag
++/usr/sbin/e2freefrag
++/usr/sbin/e2scan
++/usr/sbin/lfsck
++%{_infodir}/libext2fs.info.gz
++%{_mandir}/man1/chattr.1.gz
++%{_mandir}/man1/lsattr.1.gz
++%{_mandir}/man5/e2fsck.conf.5.gz
++%{_mandir}/man5/mke2fs.conf.5.gz
++%{_mandir}/man8/*.8.gz
++
++%files devel
++%defattr(-,root,root)
++%doc README.SUSE
++
++%files -n libext2fs2
++%defattr(-, root, root)
++/%{_lib}/libext2fs.so.*
++/%{_lib}/libe2p.so.*
++
++%files -n libext2fs-devel
++%defattr(-, root, root)
++%{_libdir}/libext2fs.so
++%{_libdir}/libext2fs.a
++%{_libdir}/libe2p.a
++%{_libdir}/libe2p.so
++/usr/include/ext2fs
++/usr/include/e2p
++%_libdir/pkgconfig/e2p.pc
++%_libdir/pkgconfig/ext2fs.pc
++
++%files -n libcom_err2
++%defattr(-, root, root)
++/%{_lib}/libcom_err.so.*
++/%{_lib}/libss.so.*
++
++%files -n libcom_err-devel
++%defattr(-, root, root)
++%_bindir/compile_et
++%_bindir/mk_cmds
++%{_libdir}/libcom_err.so
++%{_libdir}/libcom_err.a
++%{_libdir}/libss.a
++%{_libdir}/libss.so
++%_libdir/pkgconfig/com_err.pc
++%_libdir/pkgconfig/ss.pc
++%_includedir/et
++%_includedir/ss
++%_datadir/et
++%_datadir/ss
++%{_mandir}/man1/compile_et.1.gz
++%{_mandir}/man1/mk_cmds.1.gz
++%{_mandir}/man3/com_err.3.gz
++
++%changelog
++* Thu Nov 19 2009 hvogel@suse.de
++- Update to version 1.41.9 [FATE#305340]
++* Thu Oct  8 2009 crrodriguez@suse.de
++- fsck during boot up fails with Too many open files [bnc#503008]
++* Thu Sep 10 2009 coolo@novell.com
++- fix the super block even if someone mounted the file system
++  in wrong timezone in between (bnc#537542)
++* Thu Sep  3 2009 coolo@novell.com
++- update to 1.41.9:
++  "All users of e2fsprogs are urged to upgrade to the 1.41.9
++    version as soon as possible"
++  * Fix a bug in e2fsck routines for reallocating an inode table which
++  could cause it to loop forever on an ext4 filesystem with the FLEX_BG
++  filesystem feature with a relatively rare (and specific) filesystem
++  corruption.  This fix causes e2fsck to try to find space for a new
++  portion of the inode table in the containing flex_bg, and if that
++  fails, the new portion of the inode table will be allocated in any
++  free space available in the filesystem.
++  * Make e2fsck less annoying by only asking for permission to relocate a
++  block group's inode table once, instead of for every overlapping
++  block.  Similarly, only ask once to recompute the block group
++  checksums, instead of once for each corrupted block group's checksum.
++  see more changes in RELEASE-NOTES
++* Mon Aug  3 2009 aschnell@suse.de
++- added Supplements for ext4
++* Mon Jul 13 2009 coolo@novell.com
++- look for libreadline.so.6 too
++- refresh patches to avoid fuzz
++* Mon Jul 13 2009 kay.sievers@novell.com
++- update to 1.41.8
++  - Fix resize2fs's online resizing, fixing a regression which in
++    e2fpsrogs 1.41.7.
++  - Fix resize2fs bugs when shrinking ext4 filesystems
++  - If the resize2fs operation fails, the user will be told to fix up
++    the filesystem using e2fsck -fy.
++  - do not install disabled uuid binary and man page
++  - Fix filefrag program for files that have more than 144 extents.
++  - allow V=1 to disable silent build
++- enable verbose build again (V=1 merged upstream)
++- move awk scripts from libcom_err2 to libcom_err2-devel
++* Wed Jul  8 2009 meissner@suse.de
++- moved baselibs.conf changes to util-linux.
++* Mon Jun 29 2009 kay.sievers@novell.com
++- update to 1.41.7
++- disable libuuid and libblkid packages (moved to util-linux)
++- drop libvolume_id support (util-linux's libblkid will work)
++- removed patches:
++    e2fsprogs-libvolume_id-support.patch
++    e2fsprogs-no_cmd_hiding.patch
++    e2fsprogs-base_devt.patch
++    e2fsprogs-mdraid.patch
++* Mon Mar  9 2009 pth@suse.de
++- Fix errors in German messages.
++* Fri Feb 20 2009 coolo@suse.de
++- ext4dev is now ext4 (2.6.29)
++- don't call autoconf as long as it works without
++* Tue Feb  3 2009 mkoenig@suse.de
++- update to version 1.41.4:
++  debugfs:
++  * enhance the "ncheck" command
++  * enhance "hash" command
++  * fix a potential memory leak
++  * fix the usage message for logdump command
++  * fix ncheck command so that it prints all of the names of
++    hardlinks in the same directory
++  * e2fsprogs 1.41 broke debugfs's logdump command for normal
++    ext3/4 filesystems with 32-bit block numbers, when the headers
++    for 64-bit block numbers was added.  This regression has been fixed
++  * ncheck command has been fixed to avoid printing garbage
++    characters at the end of file names
++  e2fsck:
++  * don't accidentally print the translation file's
++    header when asking the user a custom question
++  * print the correct inode number for uinit_bg related problems
++  * will now offer to clear the test_fs flag if the ext4 filesystem
++    is available on linux
++  * fix a bug where in preen mode, if there are disk I/O errors
++    while trying to close a filesystem can lead to infinite loops
++  * no longer abort an fsck run if block group has an errant
++    INODE_UNINIT flag
++  * distinguish between fragmented directories and fragmented
++    files in verbose mode statistics and in the fragcheck report
++  * fix a bug which caused it double count non-contiguous
++    extent-based inodes
++  * e2fsck will leave some slack space when repacking directories
++    to allow room for a few directory entries to be added without
++    causing leaf nodes to be split right away
++  * fix a bug which caused e2fsck to crash when it comes across a
++    corrupted interior node in an extent tree
++  * e2fsck problem descriptions involving the journal are no longer
++    referred to as "ext3" problems, since ext4 filesystems also have
++    journals
++  * fix a long-standing bug in e2fsck which would cause it to crash
++    when replying journals for filesystems with block sizes greater
++    than 8k
++  badblocks:
++  * support for normal files which are greater than 2GB
++  * display the time and percentage complete when in verbose mode
++  resize2fs:
++  * fix a potential memory corruption problem
++  * fix a bug in resize2fs where passing in a bogus new size of
++    0 blocks will cause resize2fs to drop into an infinite loop
++  * fix resize2fs for ext4 filesystems
++  tune2fs:
++  * now updates the block group checksums when changing the UUID
++    to avoid causing e2fsck to complain vociferously at the next reboot
++  * inode size resizing algorithms have been fixed so it is not
++    vastly inefficient for moderate-to-large filesystems
++  * fix inode resizing algorithm so it will not corrupt filesystems
++    laid out for RAID filesystems; in addition, tune2fs will refuse
++    to change the inode size for filesystems that have the flex_bg
++    feature enabled
++  dumpe2fs:
++  * fix bug which caused dumpe2fs to abort with an error if run on a
++    filesystem that contained an external journal
++  mke2fs:
++  * new option -U, which allows the user to specify the UUID that
++    should be used for the new filesystem
++  * treat devices that are exactly 16TB as if they were 16TB minus
++    one block
++  blkid:
++  * fix a file descriptor leak in libblkid
++  * correctly detect whether the ext4 and ext4dev filesystems
++    are available, so that the ext4dev->ext4 fallback code works
++    correctly
++  * fixed a bug which could sometimes cause blkid to return an
++    exit value of zero for a non-existent device
++  * recognize ext3 filesystems that have the test_fs flag
++    set as ext3 filesystems
++  * recognize btrfs filesystems and swap devices currently used
++    by user-level software suspend
++  libext2fs:
++  * add a check in the Unix I/O functions in libext2fs so that
++    when a device is opened read/write, return an error if the
++    device is read-only using the BLKROGET ioctl
++- the libcom_err patches for bnc#66534 have been removed because
++  git commit d7f45af802330a0e1450afa05185d3722e77a76c
++  should fix the problem
++- remove patches
++  e2fsprogs-1.41.1-e2fsck_fix_automatic_blocksize_detection.patch
++  e2fsprogs-1.41.1-function_signature_fix.patch
++  e2fsprogs-1.41.1-link_fix.patch
++  libcom_err-disable_test.patch
++  libcom_err-mutex.patch
++  libcom_err-no-init_error_table.patch
++* Tue Jan 13 2009 olh@suse.de
++- obsolete old -XXbit packages (bnc#437293)
++* Thu Dec  4 2008 mkoenig@suse.de
++- send bootsplash messages in one write call
++* Tue Oct 28 2008 mkoenig@suse.de
++- fix function signature to avoid compiler warning [bnc#439129]
++* Tue Oct  7 2008 mkoenig@suse.de
++- e2fsck: fix e2fsck automatic blocksize detetion
++* Mon Sep 29 2008 mkoenig@suse.de
++- e2fsck: shut off splash screen when check is needed [bnc#237283]
++* Mon Sep 15 2008 mkoenig@suse.de
++- remove recommends of uuid-runtime from libuuid [bnc#426278]
++- move uuid hints README.SUSE.uuidd to uuid-runtime package
++* Fri Sep  5 2008 mkoenig@suse.de
++- update to version 1.41.1
++  * mke2fs
++    + issues now a warning if there is no definition in
++    /etc/mke2fs.conf for the filesystem to be created
++    + creates now the journal in the middle of the filesystem
++    + now avoids allocating an extra block to the journal
++    + will correctly enforce the prohibition against features
++    in revision 0 filesystems
++    + previously would occasionaly create some slightly non-optimally
++    placed inode tables; this bug has been fixed
++    + will now set the creation timestamp on the lost+found directory
++    and the root directory
++  * blkid
++    + recognize MacOS hfsx filesystems, and correctly extract the
++    label and uuid for hfs, hfsx, and hfsplus filesystems
++    + improved detection of JFS and HPFS
++    + more efficient handling of devicemapper devices
++    + fix cache validation bugs
++    + The blkid program will now print out a user-friendly listing
++    of all of the block devices in the system and what they
++    contain when given the -L option
++  * resize2fs
++    + will now correctly handle filesystems with extents and/or
++    uninitialized block groups correctly when file/directory blocks
++    need to relocated
++    + support for on-line resizing ext4 filesystem with the flex_bg
++    filesystem feature.  The method for doing so is not optimal,
++    but to do a better job will require kernel support
++    + is now correctly managing the directory in-use counts when
++    shrinking filesystems and directory inodes needed to be moved
++    from one block group to another
++  * e2fsck
++    + now correctly calculates ind/dind/tind statistics in the
++    presence of extent-based files
++    + now prints the depth of corrupt htree directories
++  * debugfs
++    + htree command now correctly understands extent-based
++    directories
++    + new command which will print the supported features
++  * Add support for setting the default hash algorithm used in b-tree
++    directories in tune2fs (from a command-line option) or mke2fs (via
++    mke2fs.conf).  In addition, change the default hash algorithm to
++    half_md4, since it is faster and better
++  * Fix support for empty directory blocks in ext4 filesystems with
++    64k blocksize filesystems
++  * The filefrag program now has a more accurate calculation for the
++    number of ideal extents
++- fix linking of blkid
++  e2fsprogs-1.41.1-link_fix.patch
++- remove patches
++  e2fsprogs-1.41.0-fix_messages.patch
++  e2fsprogs-1.41.0-tst_link_fix.patch
++* Fri Aug 29 2008 kay.sievers@novell.com
++- update libvolume_id patch to work with libvolume_id.so.1
++* Thu Aug 21 2008 pth@suse.de
++- Add current german messages.
++- Fix e2fsprogs-base_devt.patch and e2fsprogs-libvolume_id-support.patch
++  so that the package tools work.
++- Add missing space to two messages and resync message
++  catalogs by configuring with --enable-maintainer-mode.
++* Wed Aug 20 2008 mkoenig@suse.de
++- add uuid related manpages to uuid-runtime subpackage [bnc#418568]
++* Mon Aug 18 2008 mkoenig@suse.de
++- currently do not install *.ext4 links for mkfs and fsck
++  tools, but only the *.ext4dev links.
++* Wed Jul 16 2008 mkoenig@suse.de
++- update to version 1.41.0
++  * add support for ext4 filesystem features:
++    extents, uninit_bg, flex_bg, huge_file, dir_nlink
++  * support for checking journal checksums
++  * tune2fs supports migrating fs from 128 byte inode to 256 byte
++  * add support for "undo"
++  * e2fsck now performs more extensive and careful checks of extended
++    attributes stored in the inod
++- fix e2fsck make check
++* Wed Jul  2 2008 schwab@suse.de
++- Remove doubleplusungood -fsigned-char.
++* Tue Jun 24 2008 mkoenig@suse.de
++- update to version 1.40.11
++  most important changes since 1.40.8:
++  * Mke2fs will not allow the logically incorect combination of
++    resize_inode and meta_bg, which had previously caused mke2fs
++    to create a corrupt fileystem
++  * Fix mke2fs's creation of resize inode when there is a
++    non-standard s_first_data_block setting
++  * Teach fsck to treat "ext4" and "ext4dev" as ext* filesystems
++  * Fix fsck so that progress information is sent back correctly
++  * Add detection for ZFS volumes to the libblkid library
++- remove e2fsprogs-1.40.7.de.po, updated upstream
++- remove patches
++  e2fsprogs-1.40.7-uuidd_security.patch
++  e2fsprogs-1.40.8-e2fsck_recovery_fix.patch
++  e2fsprogs-1.40.8-fix_ext2fs_swap_inode_full.patch
++  e2fsprogs-1.40.8-missing_init.patch
++* Tue May 27 2008 ro@suse.de
++- fix baselibs.conf to not generate unresolvable deps
++* Wed May 21 2008 cthiel@suse.de
++- fix baselibs.conf
++* Wed May 21 2008 mkoenig@suse.de
++- e2fsck: Fix potential data corruptor bug in journal recovery
++  [bnc#393095]
++* Tue May 13 2008 mkoenig@suse.de
++- libuuid: do not use unintialized variable [bnc#386649]
++* Wed May  7 2008 coolo@suse.de
++- fix provides/obsoletes for rename
++* Thu Apr 10 2008 ro@suse.de
++- added baselibs.conf file to build xxbit packages
++  for multilib support
++* Tue Mar 18 2008 pth@suse.de
++- Readd the current de.po just submitted upstream to the TP robot.
++* Fri Mar 14 2008 mkoenig@suse.de
++- update to version 1.40.8
++  * Fixed e2image -I so it works on image files which are larger than 2GB
++  * Fixed e2fsck's handling of directory inodes with a corrupt size field
++  * Fixed e2fsck handling of pass 2 "should never happen error"
++  * Fixed Resize2fs bug resizing large inodes with extended attributes
++- update README.SUSE: give some hints on enabling uuidd, since it has
++  been decided to not enable it by default [bnc#354398]
++- removed
++  de.po (updated upstream)
++* Tue Mar  4 2008 mkoenig@suse.de
++- update to version 1.40.7
++  * Remove support for clearing the SPARSE_SUPER feature from tune2fs, and
++    depreciate the -s option, since it can result in filesystems which
++    e2fsck can't fix easily.  There are very good reasons for wanting to
++    disable sparse_super; users who wants to turn off sparse_super can use
++    debugfs.
++  * Add missing options to mke2fs's usage message
++  * Fix bug in resize2fs when large (greater than 128 byte) inodes are
++    moved when a filesystem is shrunk
++  * E2fsck now prints an explicit message when the bad block inode is
++    updated, to avoid confusion about why the filesystem was modified.
++  * Allow mke2fs and tune2fs manipulate the large_file feature.
++    Previously we just let the kernel and e2fsck do this automatically,
++    but e2fsck will no longer automatically clear the large_file feature
++  * Suppress message about an old-style fstab if the fstab file is empty
++  * Change e2fsck to no longer clear the LARGE_FILES feature flag
++    automatically, when there are no more > 2GB files in the filesystem.
++  * Fix bug which could cause libblkid to seg fault if a device mapper
++    volume disappears while it is being probed.
++  * Enhance e2fsck's reporting of unsupported filesystem feature flags
++  * Fix option syntax in dumpe2fs for explicit superblock and blocksize
++    parameters
++  * Add support to tune2fs to clear the resize_inode feature
++  * Teach blkid to detect LVM2 physical volumes
++  * Add support for setting RAID stride and stripe-width via mke2fs and
++    tune2fs.  Teach dumpe2fs to print the RAID parameters
++  * Add support for setting new superblock fields to debugfs's
++    set_super_value
++  * Add support for printing "mostly-printable" extended attributes in
++    Debugfs
++  * Add support for the -M option to fsck, which causes it to ignore
++    mounted filesystem
++  * Fix uuidd so that it creates the pid file with the correct pid number
++- The -M option is now used upstream to ignore mounted filesystems,
++  this has previously been in SuSE with -m. This has to be changed
++  since lower case characters are reserved for filesystem specific
++  checker options. The "like mount" behaviour previously in SuSE
++  with -M has been removed.
++- add patch from Eric Sandeen to fix the loss of extended attributes
++  in large inodes upon resize
++- removed patches
++  fsck-ignore-mounted.patch
++* Wed Feb 27 2008 mkoenig@suse.de
++- update to version 1.40.6
++  * Add support for returning labels for UDF filesystems in the blkid
++    library
++  * Fix bug in the blkid library where cached filesystems was not being
++    flushed
++  * Added logic to the blkid library to automatically choose whether a
++    filesystem should be mounted as ext4 or ext4dev, as appropriate
++  * Allow tune2fs to set and clear the test_fs flag on ext4 filesystems
++- removed patches:
++  e2fsprogs-1.40.5-blkid_cache_file_env.patch (merged)
++  libcom_err-no-static-buffer.patch (fixed upstream with TLS)
++* Tue Jan 29 2008 mkoenig@suse.de
++- update to version 1.40.5:
++  * Fix a potential overflow big in e2image
++  * Mke2fs will now create new filesystems with 256 byte inodes and the
++    ext_attr feature flag by default
++  * Teach e2fsck to ignore certain "safe" filesystem features which are
++    set automatically by the kernel
++  * Add support in tune2fs and mke2fs for making a filesystem as being "ok
++    to be used with test kernel code"
++  * Change e2fsck -fD so that it sorts non-htree directories by inode
++    numbers instead of by name, since that optimizes performances much
++    more significantly
++  * If e2image fills the disk, fix it so it exits right away
++  * If ftruncate64() is not available for resize2fs, let it use ftrucate()
++    instead
++  * Add support for detecting HFS+ filesystems in the blkid library
++  * Add supprt in the blkid library for ext4/ext4dev filesystems
++  * Fix a bug in blkid where it could die on a floating point exception
++    when presented with a corrupt reiserfs image
++  * Fix blkid's handling of ntfs UUID's so that leading zeros are printed
++    such that UUID string is a fixed length
++  * Fix debugfs's 'lsdel' command so it uses ext2fs_block_iterate2 so it
++    will work with large files
++  * Allow the debugfs 'undel' command to undelete an inode without linking
++    it to a specific destination directory
++- enhance init script
++- add sysconfig parameter UUIDD_ON_DEMAND_ONLY setting the startup
++  policy for uuidd
++- remove merged and obsolete patches:
++  close.patch
++  e2fsprogs-1.33-codecleanup.diff
++  e2fsprogs-1.35-libdir.diff
++  e2fsprogs-1.39-resize2fs_manpage.patch
++  e2fsprogs-1.40.4-uuid_null.patch
++  e2fsprogs-blkid.diff
++  e2fsprogs-blkid_probe_hfsplus.patch
++  e2fsprogs-strncat.patch
++  elf.diff
++  e2fsprogs-mkinstalldirs.patch
++  e2fsprogs-special_make_targets.patch
++  e2fsprogs-probe_reiserfs-fpe.patch
++  e2fsprogs-1.33-fsckdevdisplay.diff
++  e2fsprogs-uninitialized.diff
++* Wed Jan 16 2008 mkoenig@suse.de
++- update to version 1.40.4:
++  * Fix potential security vulnerability (CVE-2007-5497)
++  * Fix big-endian byte-swapping bug in ext2fs_swap_inode_full()
++  * Fix a bug in ext2fs_initialize() which causes mke2fs to fail while
++    allocating inode tables for some relatively rare odd disk sizes.
++  * Fix bug in ext2fs_check_desc() which will cause e2fsck to complain
++    about (valid) filesystems where the inode table extends to the last
++    block of the block group
++  * Change e2fsck so it will not complain if a file has blocks reallocated
++    up to the next multiple of a system's page size
++  * Change e2fsck so it uses sscanf() instead of atoi() so it non-numeric
++    arguments are detected as such and the parse error is reported to the
++    user
++  * Make the e2fsprogs program more robust so that they will not crash
++    when opening a corrupt filesystem where s_inode_size is zero.
++  * Fix e2fsck so that if the superblock is corrupt, but still looks
++    vaguely like an ext2/3/4 superblock, that it automatically tries to
++    fall back to the backup superblock, instead of failing with a hard
++    error
++  * Fix fsck to ignore /etc/fstab entries for bind mounts
++  * E2fsck will no longer mark a filesystem as invalid if it has time
++    errors and the user refuses to fix the problem.
++  * Enhance blkid's detection of FAT filesystems
++  * Enhance e2fsck so it will force the backup superblocks to be backed up
++    if the filesystem is consistent and key constants have been changed
++    (i.e., by an on-line resize) or by e2fsck in the course of its
++    operations.
++  * Enhance the blkid library so it will recognize squashfs filesystems
++  * Fix e2image so that in raw mode it does not create an image file which
++    is one byte too large
++  * Fix heuristics in blkid which could cause a disk without partitions to
++    be incorrectly skipped when a loopback device is present
++  * Avoid division by zero error when probing an invalid FAT filesystem in
++    the blkid library
++  * Fix sign-extension problem on 64-bit systems in in the com_err
++    library
++  * Format control characters and characters with the high eighth bit set
++    when printing the contents of the blkid cache, to prevent filesystems
++    with garbage labels from sending escape sequences
++  * Fix fsck to only treat the '#' character as a comment at the beginning
++    of the line in /etc/fstab
++  * Filter out the NEEDS_RECOVERY feature flag when writing out the backup
++    superblocks
++  * Improve time-based UUID generation.  A new daemon uuidd, is started
++    automatically by libuuid if necessary
++- new subpackage: uuid-runtime
++  containing uuidd and uuidgen
++- removed obsolete patches
++  e2fsprogs-1.39-uuid_duplicates.patch
++  e2fsprogs-1.40.2-open_fix.patch
++  e2fsprogs-1.40-be_swap_fix.patch
++* Mon Nov 26 2007 mkoenig@suse.de
++- fix build: missing third argument to open
++- do not remove buildroot in install section
++* Fri Jul 27 2007 mkoenig@suse.de
++- fix typo in specfile
++* Thu Jul 26 2007 mkoenig@suse.de
++- Fix big-endian byte-swapping bug in ext2fs_swap_inode_full()
++  e2fsprogs-1.40-be_swap_fix.patch
++* Wed Jul 25 2007 bk@suse.de
++- e2fsprogs requires libext2fs2 of the same version number to work
++- enable make check and make gcc-wall in %%check (executed last)
++- shut up bogus gcc warning for use of uninitialised variables
++* Wed Jul 25 2007 mkoenig@suse.de
++- remove e2fsprogs-blkid_probe_ext4.patch
++  broken and it is way too early to support
++* Wed Jul 18 2007 mkoenig@suse.de
++- update to version 1.40.2
++  bugfix release
++* Mon Jul  9 2007 mkoenig@suse.de
++- update to version 1.40.1:
++  * Bugfix release
++- removed patch (merged upstream)
++  e2fsprogs-1.39-cleanup.patch
++* Wed Jul  4 2007 mkoenig@suse.de
++- update to version 1.40
++- branch off libraries:
++  libblkid1
++  libuuid1
++  libext2fs2
++- renaming libcom_err to libcom_err2
++* Tue Jun 19 2007 mkoenig@suse.de
++- fix e2fsprogs-1.39-uuid_duplicates.patch [#189640]
++  * detach shm segment after use
++  * set SEM_UNDO for semaphore operations, otherwise we do not
++    get a clean state after interruption by a signal
++* Wed Apr 25 2007 pth@suse.de
++- Fix German translations.
++* Wed Apr 11 2007 mkoenig@suse.de
++- blkid: fix hfsplus probing to detect HFS+ volumes embedded
++  in a HFS volume
++* Wed Apr  4 2007 mkoenig@suse.de
++- add Supplements line [FATE#301966]
++* Fri Mar 30 2007 mkoenig@suse.de
++- update to current hg version from 29-03-2007
++  * Fixes a lot of memory leaks and other bugs
++- remove merged patch:
++  e2fsprogs-1.39-check_fs_open-in-dump_unused.patch
++* Wed Mar 28 2007 mkoenig@suse.de
++- blkid: add hfsplus volume detection (FATE#302071)
++- blkid: add experimental detection of ext4dev (FATE#301897)
++* Thu Jan 25 2007 mkoenig@suse.de
++- fix segfault in debugfs when using without open fs [#238140]
++* Mon Jan 22 2007 mkoenig@suse.de
++- don't chmod -w headers in compile_et to avoid build
++  problems with some packages
++* Fri Jan 19 2007 mkoenig@suse.de
++- update to version 1.40-WIP-1114 (FATE#301897)
++  * support for ext4
++  * several bugfixes
++- remove ext2resize from package, because the online resizing
++  functionality has been merged into resize2fs since version 1.39
++  and ext2resize is unmaintained.
++* Tue Dec 19 2006 meissner@suse.de
++- fixed build
++* Wed Nov  8 2006 ro@suse.de
++- provide libcom_err-devel in libcom_err
++* Thu Oct 19 2006 mkoenig@suse.de
++- fix bug in uuid patch
++* Mon Oct 16 2006 mkoenig@suse.de
++- fix build of shared lib
++* Thu Oct 12 2006 mkoenig@suse.de
++- fix uuid bug [#189640]
++- fix blkid problem with empty FAT labels [#211110]
++- fix small typo in resize2fs man page
++* Tue Sep 26 2006 mkoenig@suse.de
++- fix bug in fsck udev/libvolume_id patch [#205671]
++* Wed Sep 20 2006 mkoenig@suse.de
++- update to version 1.39:
++  * Fix 32-bit cleanliness
++  * Change mke2fs to use /etc/mke2fs.conf
++  * Mke2fs will now create filesystems hash trees and
++    on-line resizing enabled by default
++  * The e2fsprogs tools (resize2fs, e2fsck, mke2fs) will open the
++    filesystem device node in exclusive mode
++  * Add support for on-line resizing to resize2fs.
++  * The blkid library will now store the UUID of the external
++    journal used by ext3 filesystems
++  * E2fsck will now consult a configuration file, /etc/e2fsck.conf
++  * E2fsck will detect if the superblock's last mount field or
++    last write field is in the future, and offer to fix if so.
++  * E2fsck now checks to see if the superblock hint for the
++    location of the external journal is incorrect
++  * Resize2fs will now automatically determine the RAID stride
++    parameter that had been used to create the filesystem
++  * Fix mke2fs so that it correctly creates external journals on
++    big-endian machines
++  * Fix a bug in the e2p library
++  * Add a new debugfs command, set_current_time
++  * Fix debugfs commands
++  * Fix mklost+found so that it creates a full-sized directory on
++    filesystems with larger block sizes.
++  * Fix a file descriptor leak in blkid library
++  * Allow fractional percentages to the -m option in mke2fs and tune2fs
++  * Add support for device mapper library to the blkid library
++  * Fix the blkid library so that it notices when an ext2 filesystem
++    is upgraded to ext3.
++  * Improve the blkid's library VFAT/FAT detectio
++  * Add support for the reiser4 and software suspend partitions
++    to the blkid library.
++- update ext2resize to version 1.1.19:
++  * Add support for ext3 online resizing
++  * Support LARGEFILE compat flag
++  * Make the resize inode part of the fs struct
++  * Add the FL_IOCTL flag
++  * Bugfixes
++* Fri Aug 11 2006 pth@suse.de
++- Fix to comply with gettex 0.15.
++- Move ext2resize sources to toplevel directory.
++- Fix use of MKINSTALLDIRS.
++* Fri Aug  4 2006 kay.sievers@suse.de
++- update libvolume_id integration to match util-linux
++* Fri Jun 16 2006 ro@suse.de
++- added libvolume_id-devel to BuildRequires
++- updated e2fsprogs-udev.patch to match header rename
++* Wed Feb  8 2006 hare@suse.de
++- Fix fsck -m (#146606) to really check filesystems.
++* Mon Jan 30 2006 hvogel@suse.de
++- Document -I inode-size [#145445]
++* Sun Jan 29 2006 hvogel@suse.de
++- fix hares patch
++* Fri Jan 27 2006 hare@suse.de
++- Add option to not return an error code for mounted
++  filesystems (#145400).
++* Wed Jan 25 2006 mls@suse.de
++- converted neededforbuild to BuildRequires
++* Fri Jan 20 2006 hvogel@suse.de
++- Support ext2/ext3 online resize
++* Mon Dec 12 2005 hvogel@suse.de
++- remove lib/et/test_cases/imap_err* from the tarball because
++  they are not distributeable.
++* Tue Dec  6 2005 pth@suse.de
++- remove unnecessary type-punning
++- reduce compiler warnings
++* Tue Nov 15 2005 jblunck@suse.de
++- added close.patch provided by Ted Tso (IBM) to fix bug #132708
++* Mon Nov 14 2005 hare@suse.de
++- Use devt when comparing devices
++- fsck: Use information provided by udev for detecting devices
++* Wed Oct  5 2005 hvogel@suse.de
++- fix too few arguments to a *printf function
++- require libcom_err on e2fsprogs-devel
++* Fri Sep  9 2005 hvogel@suse.de
++- add gross hack to avoid divide by zero in probe_reiserfs
++  [#115827]
++* Mon Aug  8 2005 hvogel@suse.de
++- added environment variable BLKID_SKIP_CHECK_MDRAID to work around
++  broken software raid detection [Bug #100530]
++* Tue Jul  5 2005 hvogel@suse.de
++- update to version 1.38
++- mt reworked his patches a bit. See Bug #66534
++* Thu Jun 23 2005 hvogel@suse.de
++- call ldconfig in post/postun
++- add version to devel package dependencie
++- readd missing patch (7)
++* Thu Apr 28 2005 hvogel@suse.de
++- update to version 1.37
++- mt reworked one libcom_err patch a bit to provide more
++  meaningfull error handling
++- fix retuen value in inode.c
++* Thu Mar 31 2005 hvogel@suse.de
++- split libcom_err to a subpackage
++- add mutex synchronization to e2fsprogs/lib/et
++- removed usage of a static buffer in error_message()
++- disabled init_error_table function
++- disabled build of unused e2fsck.static
++* Fri Mar 18 2005 hvogel@suse.de
++- fix endian unsafeness in getopt (#73855)
++* Tue Feb  8 2005 hvogel@suse.de
++- Update to 1.36 final
++* Tue Aug 10 2004 pth@suse.de
++- Update to 1.35 RC5
++* Wed Mar 17 2004 pth@suse.de
++- Don't build the EVMS plugin because it's out of date for
++  EVMS in kernel 2.6.
++* Thu Mar  4 2004 pth@suse.de
++- Add patch from Olaf Hering that makes fsck read a different
++  blkid file via BLKID_FILE environment var (#35156)
++* Thu Feb 19 2004 kukuk@suse.de
++- Remove obsolete recode call
++* Mon Jan 12 2004 ro@suse.de
++- removed run_ldconfig again
++* Sat Jan 10 2004 adrian@suse.de
++- add %%run_ldconfig
++* Thu Oct  2 2003 pthomas@suse.de
++- Add patch from Kurt Garloff to make e2fsprogs compile
++  with latest kernel headers (SCSI_BLK_MAJOR undefined).
++* Mon Sep 15 2003 pthomas@suse.de
++- Fix czech message catalog which has been transformed twice
++  from latin2 to utf-8 and add an iconv call to the spec file
++  that will make building fail if the file is corrected upstream.
++* Sat Aug 30 2003 agruen@suse.de
++- Fix an endianness bug in ext2fs_swap_inode: Fast symlinks that
++  have extended attributes are acidentally byte swapped on
++  big-endian machines.
++* Fri Aug  1 2003 pthomas@suse.de
++- Apply patch from Ted T'so for badblocks.
++* Thu Jul 31 2003 pthomas@suse.de
++- Update to 1.34.
++- Various fixes to libcom_err to make it really compatible
++  to the heimdal version.
++- Fix int<->pointer casts.
++- Fix places that may break strict aliasing.
++* Fri Jun 20 2003 ro@suse.de
++- added directory to filelist
++* Wed May 14 2003 pthomas@suse.de
++- Use %%defattr
++- Include all installed files.
++* Tue Apr 29 2003 mfabian@suse.de
++- add libblkid.so* and libblkid.a to file lists
++* Thu Apr 24 2003 pthomas@suse.de
++- Update to 1.33 and adapt patches.
++- Add missing headers where necessary.
++* Thu Apr 24 2003 ro@suse.de
++- fix install_info --delete call and move from preun to postun
++* Fri Feb  7 2003 ro@suse.de
++- added install_info macros
++* Tue Oct  1 2002 garloff@suse.de
++- Fix segfault in display of real device in presence of volume
++  name. #20422
++* Tue Sep  3 2002 mls@suse.de
++- remove duplicate evms scan (already included in 1.28)
++- fix volume group scan bug
++* Mon Sep  2 2002 agruen@suse.de
++- Update to 1.28. Includes very minor fixes in htree, which we have
++  disabled anyway, one fix that we had in a separate patch, and
++  has additional release notes.
++* Mon Aug 19 2002 agruen@suse.de
++- Update to 1.28-WIP-0817, which includes Extended Attribute
++  and several smaller fixes. We disable htree support and don't
++  install the evms library for now.
++- Remove `make gcc-wall' for now (as it does a `make clean' in
++  doc/).
++* Thu Aug 15 2002 mls@suse.de
++- support jfs, reiserfs, evms in label/uuid scan (code stolen
++  from util-linux:mount)
++* Sun Jul 28 2002 kukuk@suse.de
++- Remove unused tetex from neededforbuild
++* Fri Jul 19 2002 olh@suse.de
++- use a better method for finding missed filelist entries
++* Fri Apr 12 2002 sf@suse.de
++- added %%{_libdir}
++- added fix for lib/lib64
++* Thu Mar 28 2002 bk@suse.de
++- fix man pages, filelist and add check for missing files in packs
++* Wed Mar 27 2002 bk@suse.de
++- Update to 1.27, fixes resource limit problem for other archs and
++  merges many patches
++* Thu Mar  7 2002 pthomas@suse.de
++- Add patch from Ted T'so to keep e2fsck from dumping
++  core when the journal inode is missing.
++* Mon Mar  4 2002 pthomas@suse.de
++- Fix implicit function declarations and some other gcc warnings.
++- Include patch from Kurt Garloff to make e2fsck display the
++  device name in addition to the volume label. Adapt it to 1.26.
++- Adapt BSD_disklables.diff to new code.
++- Set LC_CTYPE in addition to LC_MESSAGES.
++- Repack with bzip2.
++* Fri Mar  1 2002 bk@suse.de
++- Update to 1.26. This release has a number of critical bug
++  fixes over the previous release, version 1.25:
++* Fri Feb 15 2002 pthomas@suse.de
++- Use %%{_lib} and %%{_libdir}.
++* Wed Feb 13 2002 pthomas@suse.de
++- Make heimdal-devel conflict e2fsprogs-devel.
++  Temporary solution for bug #13145
++* Thu Dec 13 2001 pthomas@suse.de
++- Add mkfs.ext2.8 because mkfs.8 from util-linux references it.
++  Fixes bug #12613.
++* Fri Nov 23 2001 pthomas@suse.de
++- Add accidently left out e2image to file list. Fixes bug
++  [#12009]
++* Wed Oct 31 2001 ro@suse.de
++- fix for axp: should malloc buffer _before_ use
++* Wed Oct 10 2001 pthomas@suse.de
++- Update to 1.25.
++- Remove patches not needed anymore.
++- Change mke2fs to output warnings to stderr not stdout.
++- Repack as bz2.
++* Mon Sep 24 2001 olh@suse.de
++- replace ext2fs_d
++* Fri Sep 21 2001 pthomas@suse.de
++- Add patch for mke2fs from 1.25 as that bug seems to be the
++  reason for the mk_initrd warning.
++* Wed Sep 12 2001 pthomas@suse.de
++- Update to 1.24a:
++  - Fix brown-paper bug in mke2fs which caused it to segfault.
++  - Revert the BLKGETSIZE64 support as this ioctl has been used
++    by an unofficial kernel patch to update the last sector on
++    the disk, and this was causing disk corruption problems as a
++    result.
++  - Mke2fs is now more careful about zapping swap space signatures
++    and other filesystem/raid superblock magic values so.
++  - E2fsck will no longer complain if the the mode of
++    EXT2_RESIZE_INO is a regular file
++  - mke2fs and tune2fs will allow the use of UUID= or LABEL=
++    specifiers when specifying the external journal device.
++    tune2fs will also search devices looking for the external
++    journal device when removing.
++* Fri Aug 17 2001 ro@suse.de
++- update to 1.23 to enable external journals on ext3
++* Wed Aug 15 2001 pthomas@suse.de
++- Update to 1.22.
++- Drop fsck Patch as code changed.
++- Use LD_LIBRARY_PATH to run test programs.
++* Fri Jun  8 2001 pthomas@suse.de
++- Remove incorrect use of AC_REQUIRE (fails with autoconf 2.5)
++- Recompress tarball with bzip2.
++* Thu Jan 18 2001 schwab@suse.de
++- Add Obsoletes: ext2fs_d and Requires: e2fsprogs to devel
++  subpackage.
++* Mon Nov  6 2000 pthomas@suse.de
++- use _mandir and _infodir more consistently in spec file.
++* Sun Nov  5 2000 ro@suse.de
++- renamed packages to e2fsprogs/e2fsprogs-devel
++* Fri Jun  9 2000 kasal@suse.cz
++- Build dynamic libraries.  Partition Surprise requires them.
++- Make /usr/lib/*.so symlinks relative.
++* Thu Mar 23 2000 kukuk@suse.de
++- Don't erase BSD labels on Alpha
++- Add Y2K fix to debugfs
++* Wed Mar 22 2000 kukuk@suse.de
++- Fix ifdefs for gcc 2.95.2
++* Tue Feb 22 2000 garloff@suse.de
++- Bugfix for the change ...
++- ... and change version no of fsck to 1.18a to reflect the change.
++* Sun Feb 20 2000 garloff@suse.de
++- Patch to be more clever WRT to basenames (used to find out wheter
++  a fsck for this device is already running).
++- Give better message in case fsck fails, to tell the user what to
++  do. (e2fsck only displays the label, nowadays :-( )
++* Thu Feb 10 2000 kukuk@suse.de
++- Use autoconf to create new configure
++* Wed Jan 19 2000 ro@suse.de
++- man,info -> /usr/share
++* Mon Jan 17 2000 ro@suse.de
++- fixed to build on kernels >= 2.3.39
++* Sat Nov 13 1999 kukuk@suse.de
++- Update to e2fsprogs 1.18
++- Create new sub-package ext2fs_d which includes libs and headers
++* Mon Nov  8 1999 ro@suse.de
++-fixed coredump in e2fsck
++* Fri Oct 29 1999 ro@suse.de
++-e2fsprogs: 1.17 vital bugfix in e2fsck
++* Sun Oct 24 1999 ro@suse.de
++- e2fsprogs: update to 1.16, sparse_super is default on when
++  called on a > 2.2 kernel, can be overridden with -O none
++* Fri Oct 15 1999 garloff@suse.de
++- Disabled flushb again. (Moved to ddrescue.)
++* Mon Sep 13 1999 bs@suse.de
++- ran old prepare_spec on spec file to switch to new prepare_spec.
++* Wed Sep  1 1999 ro@suse.de
++- mke2fs: sparse superblocks default back to "off"
++* Tue Aug 31 1999 ro@suse.de
++- update to 1.15
++- cleanup diff and specfile
++* Sun Jul 18 1999 garloff@suse.de
++- Enabled flushb compilation
++* Sat Jun 26 1999 kukuk@suse.de
++- Add fix for fsck core dump from beta list
++* Tue Mar 16 1999 ro@suse.de
++- fixed configure call
++* Fri Mar 12 1999 ro@suse.de
++- update to 1.14
++* Thu Oct 29 1998 ro@suse.de
++- respect change in 2.1.126 SCSI_DISK_MAJOR
++* Tue Sep  1 1998 ro@suse.de
++- update to 1.12
++* Sat Apr 26 1997 florian@suse.de
++- update to new version 1.10
++* Sun Apr 13 1997 florian@suse.de
++- update to new version 1.08
++- do not include ext2 libs and include files as they are only used by dump
++* Thu Jan  2 1997 florian@suse.de
++- update to new version 1.06
++* Thu Jan  2 1997 florian@suse.de
++- update to newer version
++- use now static libs instead of 4 small shared libs
++* Thu Jan  2 1997 florian@suse.de
++  update to version 1.0.4
+Index: e2fsprogs/configure.in
+===================================================================
+--- e2fsprogs.orig/configure.in
++++ e2fsprogs/configure.in
+@@ -1232,7 +1232,7 @@ test -d lib || mkdir lib
+ test -d include || mkdir include
+ test -d include/linux || mkdir include/linux
+ test -d include/asm || mkdir include/asm
+-for i in MCONFIG Makefile e2fsprogs.spec \
++for i in MCONFIG Makefile e2fsprogs.spec e2fsprogs-SUSE_LINUX-11.spec \
+       util/Makefile util/subst.conf util/gen-tarball \
+       lib/et/Makefile lib/ss/Makefile lib/e2p/Makefile \
+       lib/ext2fs/Makefile lib/ext2fs/ext2_types.h \
+Index: e2fsprogs/contrib/build-rpm
+===================================================================
+--- e2fsprogs.orig/contrib/build-rpm
++++ e2fsprogs/contrib/build-rpm
+@@ -34,11 +34,46 @@ EXCLUDE="--exclude .hg* --exclude .pc*"
+ [ "`rpmbuild --version 2> /dev/null`" ] && RPM=rpmbuild || RPM=rpm
++# which distro and release
++DISTRO=$(lsb_release -is)
++RELEASE=$(lsb_release -rs)
++# now the hacks in case either is empty
++if [ -z "$DISTRO" ]; then
++    echo "You really ought to install the lsb_release binary for this distro"
++    if grep "SUSE Linux Enterprise Server " /etc/issue; then
++        DISTRO="SUSE LINUX"
++    fi
++fi
++if [ -z "$DISTRO" ]; then
++    echo "Could not determine the distribution.  Please install the lsb_release binary"
++    exit 1
++fi
++if [ -z "$RELEASE" ]; then
++    echo "You really ought to install the lsb_release binary for this distro"
++    case "$DISTRO" in
++        SUSE\ LINUX)
++            if grep "SUSE Linux Enterprise Server 11 " /etc/issue; then
++                RELEASE=11
++            elif grep "SUSE Linux Enterprise Server 10 " /etc/issue; then
++                RELEASE=10
++            fi
++        ;;
++    esac
++fi
++if [ -z "$RELEASE" ]; then
++    echo "Could not determine the release.  Please install the lsb_release binary"
++    exit 1
++fi
++
++SPECFILE="$currdir/e2fsprogs-${DISTRO// /_}-$RELEASE.spec"
++if [ ! -f "$SPECFILE" ]; then
++    SPECFILE="$currdir/e2fsprogs.spec"
++fi
+ $RPM --define "_sourcedir $tmpdir" \
+      --define "_topdir ${RPM_TOPDIR:-$(rpm -E %_topdir)}" \
+      --define "_tmpdir ${RPM_TMPDIR:-$TMP}" \
+      --define "extra_config_flags ${EXTRA_CONFIG_FLAGS:-''}" \
+-     -ba $currdir/e2fsprogs.spec
++     -ba $SPECFILE
+ rpm_exit=$?
+ rm -rf $tmpdir
diff --git a/patches/e2fsprogs-size_high.patch b/patches/e2fsprogs-size_high.patch
new file mode 100644 (file)
index 0000000..60623ad
--- /dev/null
@@ -0,0 +1,117 @@
+Access inode size via EXT2_I_SIZE() instead of using i_size directly,
+so that files larger than 4GB are correctly handled.
+
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/debugfs/debugfs.c
+===================================================================
+--- e2fsprogs.orig/debugfs/debugfs.c
++++ e2fsprogs/debugfs/debugfs.c
+@@ -722,12 +722,9 @@ void internal_dump_inode(FILE *out, cons
+       }
+       fprintf(out, "%sUser: %5d   Group: %5d   Size: ",
+               prefix, inode_uid(*inode), inode_gid(*inode));
+-      if (LINUX_S_ISREG(inode->i_mode)) {
+-              unsigned long long i_size = (inode->i_size |
+-                                  ((unsigned long long)inode->i_size_high << 32));
+-
+-              fprintf(out, "%llu\n", i_size);
+-      } else
++      if (LINUX_S_ISREG(inode->i_mode))
++              fprintf(out, "%llu\n", EXT2_I_SIZE(inode));
++      else
+               fprintf(out, "%d\n", inode->i_size);
+       if (os == EXT2_OS_HURD)
+               fprintf(out,
+@@ -901,9 +898,7 @@ void do_dump_extents(int argc, char **ar
+               return;
+       }
+-      logical_width = int_log10(((inode.i_size |
+-                                  (__u64) inode.i_size_high << 32) +
+-                                 current_fs->blocksize - 1) /
++      logical_width = int_log10((EXT2_I_SIZE(&inode)+current_fs->blocksize-1)/
+                                 current_fs->blocksize) + 1;
+       if (logical_width < 5)
+               logical_width = 5;
+Index: e2fsprogs/debugfs/ls.c
+===================================================================
+--- e2fsprogs.orig/debugfs/ls.c
++++ e2fsprogs/debugfs/ls.c
+@@ -79,7 +79,7 @@ static int list_dir_proc(ext2_ino_t dir 
+               if (LINUX_S_ISDIR(inode.i_mode))
+                       fprintf(ls->f, "/");
+               else
+-                      fprintf(ls->f, "%lld/", inode.i_size | ((__u64)inode.i_size_high << 32));
++                      fprintf(ls->f, "%lld/", EXT2_I_SIZE(&inode));
+               fprintf(ls->f, "\n");
+       }
+       else if (ls->options & LONG_OPT) {
+@@ -102,8 +102,7 @@ static int list_dir_proc(ext2_ino_t dir 
+               if (LINUX_S_ISDIR(inode.i_mode))
+                       fprintf(ls->f, "%5d", inode.i_size);
+               else
+-                      fprintf(ls->f, "%5llu", inode.i_size |
+-                              ((unsigned long long) inode.i_size_high << 32));
++                      fprintf(ls->f, "%5llu", EXT2_I_SIZE(&inode));
+               fprintf (ls->f, " %s %s\n", datestr, name);
+       } else {
+               sprintf(tmp, "%c%u%c (%d) %s   ", lbr, dirent->inode, rbr,
+Index: e2fsprogs/e2fsck/pass1.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass1.c
++++ e2fsprogs/e2fsck/pass1.c
+@@ -2033,8 +2033,7 @@ static void check_blocks(e2fsck_t ctx, s
+               }
+               pctx->num = 0;
+       }
+-      if (LINUX_S_ISREG(inode->i_mode) &&
+-          (inode->i_size_high || inode->i_size & 0x80000000UL))
++      if (LINUX_S_ISREG(inode->i_mode) && EXT2_I_SIZE(inode) >= 0x80000000UL)
+               ctx->large_files++;
+       if ((pb.num_blocks != ext2fs_inode_i_blocks(fs, inode)) ||
+           ((fs->super->s_feature_ro_compat &
+Index: e2fsprogs/e2fsck/pass2.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/pass2.c
++++ e2fsprogs/e2fsck/pass2.c
+@@ -1220,8 +1220,7 @@ static void deallocate_inode(e2fsck_t ct
+       if (!ext2fs_inode_has_valid_blocks(&inode))
+               return;
+-      if (LINUX_S_ISREG(inode.i_mode) &&
+-          (inode.i_size_high || inode.i_size & 0x80000000UL))
++      if (LINUX_S_ISREG(inode.i_mode) && EXT2_I_SIZE(&inode) >= 0x80000000UL)
+               ctx->large_files--;
+       pctx.errcode = ext2fs_block_iterate3(fs, ino, 0, block_buf,
+Index: e2fsprogs/e2fsck/super.c
+===================================================================
+--- e2fsprogs.orig/e2fsck/super.c
++++ e2fsprogs/e2fsck/super.c
+@@ -170,8 +170,7 @@ static int release_inode_blocks(e2fsck_t
+       if (inode->i_links_count) {
+               pb.truncating = 1;
+               pb.truncate_block = (e2_blkcnt_t)
+-                      ((((long long)inode->i_size_high << 32) +
+-                        inode->i_size + fs->blocksize - 1) /
++                      ((EXT2_I_SIZE(inode) + fs->blocksize - 1) /
+                        fs->blocksize);
+               pb.truncate_offset = inode->i_size % fs->blocksize;
+       } else {
+Index: e2fsprogs/lib/ext2fs/extent.c
+===================================================================
+--- e2fsprogs.orig/lib/ext2fs/extent.c
++++ e2fsprogs/lib/ext2fs/extent.c
+@@ -253,9 +253,8 @@ extern errcode_t ext2fs_extent_open2(ext
+       handle->path[0].max_entries = ext2fs_le16_to_cpu(eh->eh_max);
+       handle->path[0].curr = 0;
+       handle->path[0].end_blk =
+-              ((((__u64) handle->inode->i_size_high << 32) +
+-                handle->inode->i_size + (fs->blocksize - 1))
+-               >> EXT2_BLOCK_SIZE_BITS(fs->super));
++              (EXT2_I_SIZE(handle->inode) + fs->blocksize - 1) >>
++               EXT2_BLOCK_SIZE_BITS(fs->super);
+       handle->path[0].visit_num = 1;
+       handle->level = 0;
+       handle->magic = EXT2_ET_MAGIC_EXTENT_HANDLE;
diff --git a/patches/e2fsprogs-skip-extent-tests.patch b/patches/e2fsprogs-skip-extent-tests.patch
new file mode 100644 (file)
index 0000000..d92a21e
--- /dev/null
@@ -0,0 +1,9 @@
+Index: e2fsprogs-1.41.1/tests/f_extents_ei_block/script
+===================================================================
+--- /dev/null
++++ e2fsprogs-1.41.1/tests/f_extents_ei_block/script
+@@ -0,0 +1,3 @@
++rm -f $test_name.ok $test_name.failed
++echo "skipped"
++
++
diff --git a/patches/e2fsprogs-specdotin.patch b/patches/e2fsprogs-specdotin.patch
new file mode 100644 (file)
index 0000000..9a0041a
--- /dev/null
@@ -0,0 +1,40 @@
+Add the distro version to the RPM release number, so that it the
+RPM names do not conflict.
+
+Allow the RPM built from upstream to replace the split packages provided
+by the distros.  At some point in the future it may be desirable to also
+split the RPM built by this spec file, but this is complicated by the
+fact that SLES and RHEL have different splits.
+
+Signed-off-by: Girish Shilamkar <girish.shilamkar@sun.com>
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/e2fsprogs.spec.in
+===================================================================
+--- e2fsprogs.orig/e2fsprogs.spec.in
++++ e2fsprogs/e2fsprogs.spec.in
+@@ -6,13 +6,22 @@
+ Summary: Utilities for managing ext2/ext3/ext4 filesystems
+ Name: e2fsprogs
+ Version: @E2FSPROGS_PKGVER@
+-Release: 0
++Release: 0%{_vendor}
+ License: GPLv2
+ Group: System Environment/Base
+ Source:  ftp://download.sourceforge.net/pub/sourceforge/e2fsprogs/e2fsprogs-%{version}.tar.gz
+-Url: http://e2fsprogs.sourceforge.net/
++Url: http://build.whamcloud.com/job/e2fsprogs/
+ Prereq: /sbin/ldconfig
+ BuildRoot: %{_tmppath}/%{name}-root
++%if %{_vendor} == "suse"
++Group: System/Filesystems
++Provides: e2fsbn ext2fs libcom_err = %{version} ldiskfsprogs = %{version}
++Obsoletes: ext2fs libcom_err < %{version}
++%else
++Group: System Environment/Base
++Provides: e2fsprogs-libs = %{version} ldiskfsprogs = %{version}
++Obsoletes: e4fsprogs e2fsprogs-libs < %{version}
++%endif
+ %description
+ The e2fsprogs package contains a number of utilities for creating,
diff --git a/patches/e2fsprogs-tests-f_bad_ea_value.patch b/patches/e2fsprogs-tests-f_bad_ea_value.patch
new file mode 100644 (file)
index 0000000..936cc05
Binary files /dev/null and b/patches/e2fsprogs-tests-f_bad_ea_value.patch differ
diff --git a/patches/e2fsprogs-tests-f_data_in_dirent.patch b/patches/e2fsprogs-tests-f_data_in_dirent.patch
new file mode 100644 (file)
index 0000000..21b91c9
Binary files /dev/null and b/patches/e2fsprogs-tests-f_data_in_dirent.patch differ
diff --git a/patches/e2fsprogs-tests-f_expisize.patch b/patches/e2fsprogs-tests-f_expisize.patch
new file mode 100644 (file)
index 0000000..c2e3ef5
--- /dev/null
@@ -0,0 +1,1355 @@
+Test case for expanding inode size.
+
+Index: e2fsprogs/tests/f_expisize/expect.1
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_expisize/expect.1
+@@ -0,0 +1,427 @@
++Adding dirhash hint to filesystem.
++
++Pass 1: Checking inodes, blocks, and sizes
++Expanding inode 2.
++Expanding inode 11.
++Expanding inode 12.
++Expanding inode 13.
++Expanding inode 14.
++Expanding inode 15.
++Expanding inode 16.
++Expanding inode 17.
++Expanding inode 18.
++Expanding inode 19.
++Expanding inode 20.
++Expanding inode 21.
++Expanding inode 22.
++Expanding inode 23.
++Expanding inode 24.
++Expanding inode 25.
++Expanding inode 26.
++Expanding inode 27.
++Expanding inode 28.
++Expanding inode 29.
++Expanding inode 30.
++Expanding inode 31.
++Expanding inode 32.
++Expanding inode 33.
++Expanding inode 34.
++Expanding inode 35.
++Expanding inode 36.
++Expanding inode 37.
++Expanding inode 38.
++Expanding inode 39.
++Expanding inode 40.
++Expanding inode 41.
++Expanding inode 42.
++Expanding inode 43.
++Expanding inode 44.
++Expanding inode 45.
++Expanding inode 46.
++Expanding inode 47.
++Expanding inode 48.
++Expanding inode 49.
++Expanding inode 50.
++Expanding inode 51.
++Expanding inode 52.
++Expanding inode 53.
++Expanding inode 54.
++Expanding inode 55.
++Expanding inode 56.
++Expanding inode 57.
++Expanding inode 58.
++Expanding inode 59.
++Expanding inode 60.
++Expanding inode 61.
++Expanding inode 62.
++Expanding inode 63.
++Expanding inode 64.
++Expanding inode 65.
++Expanding inode 66.
++Expanding inode 67.
++Expanding inode 68.
++Expanding inode 69.
++Expanding inode 70.
++Expanding inode 71.
++Expanding inode 72.
++Expanding inode 73.
++Expanding inode 74.
++Expanding inode 75.
++Expanding inode 76.
++Expanding inode 77.
++Expanding inode 78.
++Expanding inode 79.
++Expanding inode 80.
++Expanding inode 81.
++Expanding inode 82.
++Expanding inode 83.
++Expanding inode 84.
++Expanding inode 85.
++Expanding inode 86.
++Expanding inode 87.
++Expanding inode 88.
++Expanding inode 89.
++Expanding inode 90.
++Expanding inode 91.
++Expanding inode 92.
++Expanding inode 93.
++Expanding inode 94.
++Expanding inode 95.
++Expanding inode 96.
++Expanding inode 97.
++Expanding inode 98.
++Expanding inode 99.
++Expanding inode 100.
++Expanding inode 101.
++Expanding inode 102.
++Expanding inode 103.
++Expanding inode 104.
++Expanding inode 105.
++Expanding inode 106.
++Expanding inode 107.
++Expanding inode 108.
++Expanding inode 109.
++Expanding inode 110.
++Expanding inode 111.
++Expanding inode 112.
++Expanding inode 113.
++Expanding inode 114.
++Expanding inode 115.
++Expanding inode 116.
++Expanding inode 117.
++Expanding inode 118.
++Expanding inode 119.
++Expanding inode 120.
++Expanding inode 121.
++Expanding inode 122.
++Expanding inode 123.
++Expanding inode 124.
++Expanding inode 125.
++Expanding inode 126.
++Expanding inode 127.
++Expanding inode 128.
++Expanding inode 129.
++Expanding inode 130.
++Expanding inode 131.
++Expanding inode 132.
++Expanding inode 133.
++Expanding inode 134.
++Expanding inode 135.
++Expanding inode 136.
++Expanding inode 137.
++Expanding inode 138.
++Expanding inode 139.
++Expanding inode 140.
++Expanding inode 141.
++Expanding inode 142.
++Expanding inode 143.
++Expanding inode 144.
++Expanding inode 145.
++Expanding inode 146.
++Expanding inode 147.
++Expanding inode 148.
++Expanding inode 149.
++Expanding inode 150.
++Expanding inode 151.
++Expanding inode 152.
++Expanding inode 153.
++Expanding inode 154.
++Expanding inode 155.
++Expanding inode 156.
++Expanding inode 157.
++Expanding inode 158.
++Expanding inode 159.
++Expanding inode 160.
++Expanding inode 161.
++Expanding inode 162.
++Expanding inode 163.
++Expanding inode 164.
++Expanding inode 165.
++Expanding inode 166.
++Expanding inode 167.
++Expanding inode 168.
++Expanding inode 169.
++Expanding inode 170.
++Expanding inode 171.
++Expanding inode 172.
++Expanding inode 173.
++Expanding inode 174.
++Expanding inode 175.
++Expanding inode 176.
++Expanding inode 177.
++Expanding inode 178.
++Expanding inode 179.
++Expanding inode 180.
++Expanding inode 181.
++Expanding inode 182.
++Expanding inode 183.
++Expanding inode 184.
++Expanding inode 185.
++Expanding inode 186.
++Expanding inode 187.
++Expanding inode 188.
++Expanding inode 189.
++Expanding inode 190.
++Expanding inode 191.
++Expanding inode 192.
++Expanding inode 193.
++Expanding inode 194.
++Expanding inode 195.
++Expanding inode 196.
++Expanding inode 197.
++Expanding inode 198.
++Expanding inode 199.
++Expanding inode 200.
++Expanding inode 201.
++Expanding inode 202.
++Expanding inode 203.
++Expanding inode 204.
++Expanding inode 205.
++Expanding inode 206.
++Expanding inode 207.
++Expanding inode 208.
++Expanding inode 209.
++Expanding inode 210.
++Expanding inode 211.
++Expanding inode 212.
++Expanding inode 213.
++Expanding inode 214.
++Expanding inode 215.
++Expanding inode 216.
++Expanding inode 217.
++Expanding inode 218.
++Expanding inode 219.
++Expanding inode 220.
++Expanding inode 221.
++Expanding inode 222.
++Expanding inode 223.
++Expanding inode 224.
++Expanding inode 225.
++Expanding inode 226.
++Expanding inode 227.
++Expanding inode 228.
++Expanding inode 229.
++Expanding inode 230.
++Expanding inode 231.
++Expanding inode 232.
++Expanding inode 233.
++Expanding inode 234.
++Expanding inode 235.
++Expanding inode 236.
++Expanding inode 237.
++Expanding inode 238.
++Expanding inode 239.
++Expanding inode 240.
++Expanding inode 241.
++Expanding inode 242.
++Expanding inode 243.
++Expanding inode 244.
++Expanding inode 245.
++Expanding inode 246.
++Expanding inode 247.
++Expanding inode 248.
++Expanding inode 249.
++Expanding inode 250.
++Expanding inode 251.
++Expanding inode 252.
++Expanding inode 253.
++Expanding inode 254.
++Expanding inode 255.
++Expanding inode 256.
++Expanding inode 257.
++Expanding inode 258.
++Expanding inode 259.
++Expanding inode 260.
++Expanding inode 261.
++Expanding inode 262.
++Expanding inode 263.
++Expanding inode 264.
++Expanding inode 265.
++Expanding inode 266.
++Expanding inode 267.
++Expanding inode 268.
++Expanding inode 269.
++Expanding inode 270.
++Expanding inode 271.
++Expanding inode 272.
++Expanding inode 273.
++Expanding inode 274.
++Expanding inode 275.
++Expanding inode 276.
++Expanding inode 277.
++Expanding inode 278.
++Expanding inode 279.
++Expanding inode 280.
++Expanding inode 281.
++Expanding inode 282.
++Expanding inode 283.
++Expanding inode 284.
++Expanding inode 285.
++Expanding inode 286.
++Expanding inode 287.
++Expanding inode 288.
++Expanding inode 289.
++Expanding inode 290.
++Expanding inode 291.
++Expanding inode 292.
++Expanding inode 293.
++Expanding inode 294.
++Expanding inode 295.
++Expanding inode 296.
++Expanding inode 297.
++Expanding inode 298.
++Expanding inode 299.
++Expanding inode 300.
++Expanding inode 301.
++Expanding inode 302.
++Expanding inode 303.
++Expanding inode 304.
++Expanding inode 305.
++Expanding inode 306.
++Expanding inode 307.
++Expanding inode 308.
++Expanding inode 309.
++Expanding inode 310.
++Expanding inode 311.
++Expanding inode 312.
++Expanding inode 313.
++Expanding inode 314.
++Expanding inode 315.
++Expanding inode 316.
++Expanding inode 317.
++Expanding inode 318.
++Expanding inode 319.
++Expanding inode 320.
++Expanding inode 321.
++Expanding inode 322.
++Expanding inode 323.
++Expanding inode 324.
++Expanding inode 325.
++Expanding inode 326.
++Expanding inode 327.
++Expanding inode 328.
++Expanding inode 329.
++Expanding inode 330.
++Expanding inode 331.
++Expanding inode 332.
++Expanding inode 333.
++Expanding inode 334.
++Expanding inode 335.
++Expanding inode 336.
++Expanding inode 337.
++Expanding inode 338.
++Expanding inode 339.
++Expanding inode 340.
++Expanding inode 341.
++Expanding inode 342.
++Expanding inode 343.
++Expanding inode 344.
++Expanding inode 345.
++Expanding inode 346.
++Expanding inode 347.
++Expanding inode 348.
++Expanding inode 349.
++Expanding inode 350.
++Expanding inode 351.
++Expanding inode 352.
++Expanding inode 353.
++Expanding inode 354.
++Expanding inode 355.
++Expanding inode 356.
++Expanding inode 357.
++Expanding inode 358.
++Expanding inode 359.
++Expanding inode 360.
++Expanding inode 361.
++Expanding inode 362.
++Expanding inode 363.
++Expanding inode 364.
++Expanding inode 365.
++Expanding inode 366.
++Expanding inode 367.
++Expanding inode 368.
++Expanding inode 369.
++Expanding inode 370.
++Expanding inode 371.
++Expanding inode 372.
++Expanding inode 373.
++Expanding inode 374.
++Expanding inode 375.
++Expanding inode 376.
++Expanding inode 377.
++Expanding inode 378.
++Expanding inode 379.
++Expanding inode 380.
++Expanding inode 381.
++Expanding inode 382.
++Expanding inode 383.
++Expanding inode 384.
++Expanding inode 385.
++Expanding inode 386.
++Expanding inode 387.
++Expanding inode 388.
++Expanding inode 389.
++Expanding inode 390.
++Expanding inode 391.
++Expanding inode 392.
++Expanding inode 393.
++Expanding inode 394.
++Expanding inode 395.
++Expanding inode 396.
++Expanding inode 397.
++Expanding inode 398.
++Expanding inode 399.
++Expanding inode 400.
++Expanding inode 401.
++Expanding inode 402.
++Expanding inode 403.
++Expanding inode 404.
++Expanding inode 405.
++Expanding inode 406.
++Expanding inode 407.
++Expanding inode 408.
++Expanding inode 409.
++Expanding inode 410.
++Expanding inode 411.
++Pass 2: Checking directory structure
++Pass 3: Checking directory connectivity
++Pass 4: Checking reference counts
++Pass 5: Checking group summary information
++Block bitmap differences:  -1385 -2019
++Fix? yes
++
++Free blocks count wrong for group #0 (8, counted=10).
++Fix? yes
++
++Free blocks count wrong (8, counted=10).
++Fix? yes
++
++Expanding inode 133.
++Expanding inode 165.
++Expanding inode 181.
++Expanding inode 286.
++Expanding inode 387.
++
++test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
++test_filesys: 411/2048 files (0.2% non-contiguous), 2043/2048 blocks
++Exit status is 1
+Index: e2fsprogs/tests/f_expisize/expect.2
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_expisize/expect.2
+@@ -0,0 +1,7 @@
++Pass 1: Checking inodes, blocks, and sizes
++Pass 2: Checking directory structure
++Pass 3: Checking directory connectivity
++Pass 4: Checking reference counts
++Pass 5: Checking group summary information
++test_filesys: 411/2048 files (0.2% non-contiguous), 2043/2048 blocks
++Exit status is 0
+Index: e2fsprogs/tests/f_expisize/name
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_expisize/name
+@@ -0,0 +1 @@
++test expand_extra_isize feature
+Index: e2fsprogs/tests/f_expisize/script
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_expisize/script
+@@ -0,0 +1,4 @@
++FSCK_OPT="-fy -E expand_extra_isize"
++SECOND_FSCK_OPT=-yf
++
++. $cmd_dir/run_e2fsck
+Index: e2fsprogs/tests/f_expisize/image.gz
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_expisize/image.gz
+@@ -0,0 +1,888 @@
++\1f\8b\b\b+\80hF\ 2\ 3image\0ìÝ\vàlUY÷ñ9\b\9c9\8azTTTLTJTÔ=³ï\85z4´SQ¢R¢QQ¡\92QRQYYiYZ\9a÷[eEey-±¬¬,©ÈKQYYQYQQâ\1d\15\15\15õý={ï5³föZ{\86Ù\1c<¼~?oË÷̹üÿÃÿ\99½÷º<ëY\93 \80/XÓ¶=®ûåc\8fn\7fû\88®M\9eÒ5ýáq\ f<÷¡\1fS;brâä\91\1fÚ3٣߾ì¹\8f{èäk?Ðü\9b\97¼Y÷\ 5N龯MÔÞzÏ;<þ\ 1o\7fÈ[~ï»\9e=¿ü-\8f\rù\9fç<þ\e¿ã¾?ò\92\87\15\ f\v\9eüÆ×Ýä\88=Ë?³ÿ\8e\9bêõÍÔ\8eQ»¹Ú-Ôn©¶_íVj·V»\8dÚ±j·U»Ý\9eõïv\80Ï\13\0\0\0\ e\7f~dÓW~ìÑGð#\ 1\0\0\0\0àÿ;\9fû\82öî³?\a\0\0\0\0\0Bö2ÿ\ 1\0\0\0\0À\8d\8b\e\aÛþW×È\8aøÂñ\81\aé\7f\92Éä\ 1\ f<÷¡'u­ý\93\9bL\8e³ÿo\7fûêÈ=\93ÉS\8e\9eL\9ezôõûý\8f$\ 4\0\0\07¨§<Uÿsñ\81@ÿ\7fÏJí\9c]ì[«\8f³\87\1f÷á\19ÿ®nÑǺúN.ZûOXþ½ñµ\91\0\0\87\93\8b\1fÔÞþûÏÿ#&Þí\7fr\94îçG«íU\9b^\8f÷væ\7f>¿^þÔ6\ 6ÿ§¸»¶xþ{\7fï\98£vÿ\1eÏþòc?~ó£\86â\7fÄ{§{Îo>U®Ïù]ßò\9d\8f­\93t¶oÏyÍïßÄûýY]Ì\vû»{N޳콴\7fVÍêrºçøæ÷oîý~^äå¾=\974¯Ïô¿VQ\97óæk½i²þý³y\9eîÛóÆIïû§U\9e\1f÷Ä'Z\9bÕI>Óÿ?\9fÍÊ|\9eÏ\93ù|\9eÖ³yY\95å<¯çYQU³4\9dg³<«ë:OëjVUú\8bú/©\92Ù¼\98U\85¾[\92UI\96\16I\9d'e\92\96I2Oõ·\9a¯[äżJ³¼ý\9eúJÕ¼¬\výçf\85¾i\96\97E\99Tó:ÑËr\96Õå¬,õíç©þQ\92Ìò:KÒ*Íg³y]»÷<«g\95\8bÿ÷ªß÷î\81øßvDü\9f£øßnCü÷í9»\89ÙíWâ<+ªf\1cqZóg·öþLÿQŬù³\83ýÏGUæí¿;ÐüÙ^ÿßÍÒ"mþ¬ê}Þf
++GÝüÙI½Ï\8fBÓýÙþæÏnëýÙ¼\9aeEóg×LÖÿ\eæ©¢?ð³±8dål¦÷<KgI\9d\16e\8by]e
++º>¸e¦À¥³¬ýûs\8bö¬®Ë¤û÷ú¨¤úÿõ\99©Üçq\9eë7çõL¡OªYÑþ»´,õ\13Õ\7fäl®¯¡\ f\87¾\8f\8bÿ÷wñ\7fw$þw\1e\11ÿç*þ_´Ãõ_ÖI\12ºþõóNêæ\9a=³÷¹(Êt>ÝsFïß(~õ¾=§6¿¿ßÿZº\84òækeý{ÆÜ¾V{/¹\9dÿµÒ"ß·§}
++Þjås7¯óæspõ¤÷geU\14\81Ø'E\91ÎÊ:¯ò²ª»øÖ³²ÐmD\97îÌŸ®ôqOª¢\9aÏ\8b2Ku«\98µ\7fWo1×ß*«öï)¸\85niv\7fi>\13íu®¿=Ë\93¢´;P²¸gÙ-jæâïb\1f\8bÿ\17\8f\88ÿó\14ÿ/Ùxý·?Ïóý\9fÙ,i>óûö\1cÙÿ\f¤y\954q»¶wßÎ\93¤\9aîyÿd=\9e³ª.öíyç¤\17ÏYVµ×ö¥\93õûÅL×^{m¿mÒÿLé\ eß\8f©5Ý\9aÛkXAÔMX\1f\98\ f_w­º\8d{^Tz\16$³²\8b¹¾\96»/ÏuÑêV\90gºmÏÒ,M\8aù<Ë\12{Rd\95\e{VdY\9dÛ}§Ô­½Ò#¬Ê\12ûêóJ?\98\7fV\15Y\92\95éL\1f\e=Dô[zºè¥\9e\17\95\1e%i¢/«O]µmüï3"þÏWüï»1þçöï¹³¼jã\7fvÿ^­\8b¦lþìÌþ\9fé\8e7k>\e\az÷ê,-õ\198¹wß\98µ¡Ñ×;±ÿõÊdîßûýëZÏÞYû\1c\9a\ 4Þ\7f\99æÞgÔÿìdy\92®}fÒ$·k¹¬Òî\19¯Ï¿Âd·\88²é£Øg£Èʲ¹o¤ÕL\97¯ºH\8arÝÝ7\14yÝØKÝ,fõ¼\9ew}\ 5ý0\8a¼ù·e^7ß§V\8fCïmæõÿ,îW\ eÄ?\1f\11ÿ\17(þÅ\96ñ_¹7geÒ>«Ïé?ãçY\9d6?Û³zñJõ|s×ëóVbUw÷\93KzñÐõQÌ\9b?»h\12»¯¯]ç¡ûtÛ7Ó\13V\17Z­ï¦\ fάJí¡T¶¿.ô\1eê|¦\ eb\99\95º\9d§uR[/Q}5½Rϲé\11ê÷\8bL·¥¹â\94Ôºàu£ÐM!Ñ_Ñ£¿´\ew¡@Ïõ¾æv\eг>S\1fs®ç\80:­µ\9e\ 1ê\1eÔúxd\89{¯ú\82îýé««\93:W\a (\ü¯ìâ\7fedþ÷þ#âÿBÅ\7fxügÏÿþõ¯ÿÆ\94\11ÚõË>\v¥n4ú@äþõ\1f\8a¿\7fý?`Dü_¤ø?p\87þ\9fÂ_\aû\7fêÙV͵\7fnïϪÒþÍéý±DYwÏ\8bª×\9fÓ}&oï3ÉÀ\98àø\811ȱý{P\92æí÷kïý+ã\85¢®òµ\98äzJë^R龡±Z\99Í\17㼬\8eôç]¿_ÿB·\97´Ö\rÝ:\88ºíT]ßp\96\96MßF£GõTêy\95»{TóïußÙúú\7fÈ\88ø¿x\8bëßÅù\18ÿg\9fè^Öü\fÏ\1aè·\9fÖ»oÔ\1aÛ|\81_ãzâçöðp}\80õqA\96[\9fq>O¶½þ\1f:"þ/Qü¿bãõß>\93ßà÷\91\12ë«=¥yýà\95ë5\99µý»s{}ù<OË\8d?\e\e
++=·ë´VW¹®ºëÉ&L²,³'¬=ÄõÃÒ³µ*¬\a®\ 1\1fgZê¯èï麬õ\ 4-êZ\7f\947¿ß~\8d:K+u°*=òÕu+ÕÛT\am^©ë¯kºÐïé¢Õ\83»Pg ­ªR\1dóD\1dr{¾kp¦\18%¥=ÕÕ\89\9fÛ\13?³)¤$W\97¡°î¾ºô3û\8ez#e®\eA]ªk¢/¯\1e\9f®õ$Ë\14ö*\9fåe\91Ø<\87ÆùêêihPéZÉÒÂ\ 6        µ½      ëì\14ú\17y\99n\eÿ¯\19\11ÿ\97*þ_»Cÿ_ý\9f:ÖÿÓ\87·ë\e\9e\1dø3u\99¼¹¡Û®Î)%í³#éÏã(zûö\9cÐ\7f\1f\1a\8bͽþ¿ÿgö\1cͼþ\7fè\1eµ/Ðÿ\9fÍ\8ay¾Úÿ_¿F\15=]Á\8a¬ëÃå\8a½z\88UѾÖs@\9d=\8d\b-\9e³Y\95dnN!©*\rñôÉÓsÍz\85ËïÑþ¹ú\9aêxÖÙ\86ç¿\7fÿÿº\11ñÿ¹\8d÷\7f|¾çÿ7]ÿ_?"þ?¯ø?jËùßð¼Ìiý¹¶4iæ\7f\82ó¿ºÿU^\7fn¥¯W&IÛo8¾÷5³<«öuë\0ß´2\ e)³jC\9fZ÷{ÝT3\rü
++ÝUõ\0H¬O\96ØU©Ñ\9a:wóT\1dî$ÓÃ"Ñ-[ý4ý¿Bã¾<Émf¦¬g\1a\99¤×z\h\88¦±\9cúliÖ|}[
++Ð\98²¨çú\91¸q}U\14\99¾\9aúwY\9a\96úzér=B׽Ʀz\1c¤yáæ\15CsQÛÆÿ\eGÄÿ\17\14ÿoÚøü¿²]+X\89U¡ûñå\93Ø\1cþ´\eã¯ÜßÕ'Þ·çâI\7f¾(ëúÿo\füYZ¶ýø×NÖû \1aÊ7ã¤Þ\18JÃo=gçÍ}:O²vþ¥°ûv\9aj,\9eZ@­\17¡ûl÷ówóózÆëÁ Èë\19_\97Ö±\98ÙÓLcvõ\ 6ò\ýû¼ª\92¹Bk]\r\ 5\ 1\rëÕe«gú\9fB\1d}=\13\8aZ]<\85S\1f¡Z\ fø¹ÝòÕÏÏ
++\9bGЧܺ!úBs}\10gö        Ì
++»ã«\17¡\ fc^Ú\ 4D¦~òJüß3\10ÿÇ\8e\88ÿË\14ÿÇm¼þ/\18\98ç?¿÷gêçÌÝøo}ÍpÚ\8dÇ\1eáÿ}u\99Ü\1cs(¾îù\1d\9eû½j\12ë\9bL÷\6  ­\ fx\9f\95ØÜýÊsØ\9f3ö?[º¼õRý][ÁSpÕ¹«ÔGÈm*I½ÃY­ÏÂl^h(g÷\93ZÝZõ+geUgê?êó1ËôÇÍJcÕÜLݺ\9fë\ f¸ø¿§\8bÿ{"ñÿÎ\11ñÿEÅÿ»6Æ¿?þSç¦[ÿ;£w\1fWçµ\99Ëss¼þ¸\#}ÝÇO    |\9e²¤íǵk\ 3\ fóÿL?©¶\1fwe\7f\9eß~\82Í\9f]Þ»wè\ 2,Úþä»zÿ®Ð\ 5îõïÔ\7f«r÷kuÕõ¡P\ 4S[üË5ÔÑ@ߦ\ruÝZÿ^Ñ\9aÛâoZÔz\f\146/ îº­`\94\97ÛܲþW\1dýÅ\98>Õ(¡\9a7!ÏÒ$íÆ4ú1éî1³[\7f¥ÛGÑ®ÿä¥\ 6!z\0\14ÛÆÿûFÄÿ\97\14ÿïßxÿ?§÷<.ôðts9·^[ûi¯ÙSú\7f6Ë»¹ú¤?\9f ~ué­ïî]\9dSJÛ{M\eÿ~NÁ\15ý>|U×{»ëßÿ>í,óòYQéF¬\9f\7f²\98\1f\1e·v¯ñ_ó\1cɪRcкª\9aq§Þ~3ï\9cÚÒn·Æ¤!\92-,gÍ\18¶[k.lµ1Ít\ f\fýø¿w þ?2"þ¿¬øÿèõ\98ÿ±\9c«?#:¾s\9f\8d\95{\86\8d¬½9ÀÐxÌõ)üuÈL\17ã4°fà®ïµu\1c},tãµ\99ø¹õèt¡ë\9a¬\12=Íç6wg³v\89nê¥Â­\8e\83.Õù<×]Z\1f¦RÑTÜç¶ÜoOz[üQ·R\97ð¼P×q®ÏEiËA\96-RØ?[ÜOt;(tW¯Rý£L\9f¡\99\8b÷ÀXp%ÿã½]üß\e\89ÿO\8e\88ÿ\85\8aÿOíòü_¬ñ\9e\15\\83\9fvýµ\8büÏ\8cn\rûö¼²¿¾c\v\1e\9fÛ\9f\8fÕÏ7 ôñæµ-ãØí³°L\8c\99ÿ³Ël\8d±l\16oÔ×\9e\17ê_è:Íô Ð\83»Ö\95©¾·-ꪣm\93\1aù<S\9f°\99AR ì\89\êá­\e²>\0öĶ.\9eF\ 3öfæ©>2¹>'êèª\13\92TúêE\92è¾®\ f\86­÷è\81¡¡ÿÌÖ\8ftKÓ A\17~¥Û{¥Û½¾R\9dÏl\16Ø:\8ay\92¤\ 3}\90ɶñÿÙ\11ñÿ\15ÅÿÙ\eãß¿þݳÕ\8d\rÃù8ïhsLVæì³ÂîÀ{»±\9cÿLÑÍWÿæå×9OgC®NÖÜ?Ô±·)A·V\9b馭\87rm7ò¼²\ fI®¸*ä\16MÝôëJC±Ô.[û\0¨cgÓ8\99M!ê~PXw°HK[:L­\8b ¯¥OPaÙd͸P7z{¸ëI_ÕºÊm4¡\1fÉÜÆÅúm»[Ø'¤¶[\8aÆ\19\81¼¡¦?2\14\7f\7fþçE#âÿ«[Íÿ\9fß\7f&«ßSzy>þ5k½àX\9e\8f[\13XÏ        ùBZãóòIª¤Ô°@·£²Pï@}\82\1a\93mãÿâ\11ñÿµ­â\7fAt\9dÏõ\ 1BýµàØ@Wh»>pl$?t\12ìk~¾×lÖûf×C_q6Kr\r\1eu[Ð\9f궨GMóu]\1frëûÿKFÄÿå\8aÿK7öÿúù\1f©\ 6¾¡Ü\1f\e«\9dÞ\9fs×M¯íÇ_\1c\99O
++Ìÿ$e7¿ÿòIl\9eÑÅ(4¯¦\ eZ~¸Íë4\9f\9d¤POb®¨\97Íz\82ú\fÍø!É\12ûÊzOuæÇÿ}\ 3ñÿÅ\11ñÿuÅÿ\97\8eºî÷\7f=SË6.çF?\ 3î\19°>þ\9fv\9f\8d\9b¬Î\rÎ\ü_´2Ïãr\82ßÐ\1fã©+]įÙö3a\1d\1f\vý\9f\ 6ÛÍ3>)2\e\8b\97\95ýqn\ 3\13\e\7fÌ-ÃG\8fð*­l:xV©\9f§`ª÷®èØ\ 3Z\1d~[ã«+]´ºu«\9faK}ê\ 2ê\93§N_f_Y½\8e¹-2Îlâ'³õ}ëóÍu7Ðg3ós\91Bs\ 2Ýç@\1d\81Ùâú\7f_\17ÿ÷Eâÿë#âÿ\e\8aÿoìÐÿ³%Ú,Òÿ[®É\9d5°6xf4oÌ­\eÜ<\98\a\92õ×\el-®ù³\93ûïSýôöysb0\87e\1aÈ\e´µ\86\rÏ\83à\9c¿ål4}¹ºÉ\v)çvw×hÀ2ɺuA=\1cô9¨Ò´X]÷[_?\9cé\83Q\ eÅß\7fþÿæ\88ø¿b«ü¯Øú\7f \1f¯\8bÅtÏËz\7f¦Nxu\b\9eͺªs[V¶ý\e³îÙ\1cúÙßh×ÿ7]ÿ¿5"þ¯Tü_·Ãü\9fnT\85\v­á¹ý\1d+s|e\9e\14Þ\1cßmWÆ~å,\99Döpt9Yn­>\9cçuÕ$¾~pŤ?ßX¬L\10\846S¯aßÚ<\7fp¿F$'¬Öß´ü½ºyfh X¹¼\96\93ªÎ\ 6Ö\ 6­\1f¢çTië\ 16\15¼rÿ\7fÿ@ü\7fwDü_¥øÿÞÆø\9f\1dÉÇ8s _p`Ol\1c\1f\8a¿\1eËI\e«\13öÄû\80íüßׯ¼\8f´7?4p¯ÐÇÅvz\15\96$\944×]Ý\8cæç\89\1aÌ«/\90ª\87\8d\1fèÑlùø³ª\9cëñ®®\88åtXz~:SoQ·\82&\89Ëëgê\8aOÔsHt\r7ÿ¬Ê\86ç&\9aç|,_ÄÅÿý]üß\1f\89ÿ\1f\8f\88ÿ«\15ÿ?Ù2þþu^ÕE2íæw\9eí?Su\11M»~ÜíV~¿V¿ïÂÈ\9að3úëtIVV\81øÙl¬n°6\ eÓ\9d³®²öz\8c­ëê§Úì³°\157ÝnõÔêöæd\89-èÌ­c8·\89\0ê\9e¦ðdú\1cX8,5_ßÎ.sõ\f\9b\8e\9c\86®³æÃ\98UÖO³\8fRnó\90ÖÇг?׸®Ð\9fTÍ×Ê-C®r\r\1aK}÷¶Çh{\11m©GOI}\98ô\ræÝ\9c\80Æ\fÖEµµ$ë£Ö³íãÿ\17#âÿ\1aÅÿ-;¬ÿ麨ç^\1f\7f}\1f\8fßîó:m`Íà\94Þ\98ѺXþºÐʾ\10\e\7fM\96ûBV×\ftóõî'¡=¢¡\9c1·/dã}du?È¢\1fg\9b{R\9b\17Vg¶jÇóum\ 3:õþ-\9bÑÿ»\91=!\95u0lÚÛ\8fÿ\a\ 6âÿ×#âÿZÅÿovØÿ±\8cË\19ý}7U{ý\85öôé§Ðõ\ f^;0Ö\8b¯\11l\88Ëá<æ³Û\89\9e÷zÎéaÐÜûÕoLìûY¶Á¤ÿYqñÿ@\17ÿ\ fDâÿ\8f#âÿ\9b\8aÿ?í°þã®/÷lX\99ÇOlþ7ülpûøÂ×ã\e&ñ~áEý\7f7_ÍÕ_û\1cÄúb\87åý¿¶ä³ÌV\18ÊÅØp(þþøïßGÄÿ·¶\1aÿ]\10ÙËqþ@\1eÇ9½gFªÿð¹77\18Î\r\bì\ 1É«ìó:\ 1<bÞ8­l1¨Hlê¸Zî\a\få\ 4h<YXÆP¹\9eÿ³éúÿ\8f\11ñ\7f\9dâÿ\9f;\8cÿì\1a\ fæw/\9eå\a\aÆq§\ eÔ\8dèïõ¶®vpng1.810\a9ër\90N\bÎ5N÷\1c\17Ü\9bèæ\83¦+}Ý$ïå\18jľ¶wOC¢´òç\9c+[\12Ì
++×\17\1d\1a7\ 6ï\ 1ÛÆÿ\7fGÄÿ"Åÿÿ6Æ¿\1d??ß¿\97góÂÍÉß\7f\9fWmL\9eÕëÓkX3kû\fO\1a\9cË\9f\fÏéÏò²y\86Û'Æ\96c\93¼v{rë¬Èu×¶Q\96\9eÐy®1|a\ 3;{\ 2h\0®Ç²B\9cÙ¸ÌnÜ¥úhzð×]\1fn¦Q[­?J,§Ïöméi \9b\92B\9dêþÝäóè\eä¶¿Ó\9e\ 3z2ÙJ\81­íØ7±e\ 2\8d
++çêûf¹\r@Ôm°t\ 3ý\9cf\96ÛQ\95\16m=!Ôß°N¦-Eè\ 3\97Y\7f?Ñ·.3ý\ 4²r^7ûÄgóz5þ\1f\1c\88ÿ\aFÄÿõ\8aÿ\awYÿרË\9fã\rç\80\9dÚ¿\97\89××\ få\ 1O\ 39@Uf5b.\8f\8eÿCùÆ6G±>W\18Ù\97q¨æ\ 5&^î±"®\ 1ª.\ fË8i¦\ 5ã¹`©Í\87¸ø\7f°\8bÿ\a#ñÿØ\88øÿ¶âÿñ\1dâ¿ÜC\19¯\ 1ä>\e«¹¹íÜÖ¾ÀÞ@·_ÇÍ\1d¯ç\ eE×fo\ù>½½CöÁÑ\90Ãå\1a\96n\eÿÏ\8c\88ÿï(þ\9fÝeü·\18Ç\9d>°7¤\9d\93\rí×p¹¼+s\87\96>×Ä¿}v<Úÿ\9aY\9e\80,-Ï.ºÒêp\14\17¿MËÓ3¢½È*ûÝf\8a\80¦¨\8e%s\97\96\96W×ú»v¹Õ\89åð¤V\ fªZ¬\eè&\9cÝ\10{F¢µGü1â¶ñ?jDÝÿ7(þG\1f½)þm\1f*tßuyûáyÞ«ú÷d]¬íXïý\ 3ãÀx\9e÷!fqµ\80ZU\1e=õË2\1f\9eÇ=$Ï\8f\7fó\11ñÿ]Åÿ\16G_÷þ\7f»\1f+Ðÿϲ̯\v¶:/Ô\8eÁÝ>®P^ \9b\ 3XíËg]?ÿµýü\10\e\97¯=\ ft\97nóktÁ\1e\86¹~úO­r\9b;ÒM&ñÆ\ 6½5åmã\7fÛ\11ñÿ=«ÿ¶ñú¿r ^ïèçk꿾í\e´y>¡º1Ón>g¥6\80~\ûö¼t\12[\e
++åÒEÖ[ô<×Ï]=ñîç»RW¥Ýã\91Ûò®B:·«ÎÊÒ\1dvy¡ÛÆÿÎ#âÿûVÿmcüÏ\8e®×¹yþõ\1a\ fûº>ÜëWú\f\8f\ro¾¶\8eÛ~.\9eÑ\7f.ÔÍ\10mÙ7Ò@jf?F\97˫Шϩ\9f[eóte\9dÕV\9eJ/5ê\9a[/À&Yl[N¢ÈT\1aQ\966zQ\98g\96q]\17zÃóÊò/ô\1eêy³D_69|µM\11[q\81Ê2¸êZ_¯J­Ã \ f\81õ0ô3P_0m2útÛ±    àBO\88Ú:"\1aïY\ fÓ¦\11+ýwÛ÷Tß\7f1\17¼Z\ 3"ø9Þ6þ_<"þo´úoG_÷þ¿\9b_q÷\86g¬ôã\9a¡MpOÖr?g\7fOÖ27èÒIll\10ªõf%\13ÛÏb`\1fHÙ.\ f¯ÔVYí\7fO¼}¢¶\f0on\r³æ\99¬Or³\85o®Ï\84\86
++VçÓº\9aYYZ²êÌÒ>Õ\11ÊmH¯Þ¨ete3\9b¾)\9b´^\ekêÊÏ­ºT2×GG]Τ²\9e©"Ý\14\80«l>(³¹`K\b¨jÝq\92\99\9bKòãÿ¡\81øßgDüÿÀê¿m\8c\7f`ÿ_íöx\9f\11ÝË\13ÌóÓOzÚÍ\r®\8c'u\9f\fÕ\ 4uû<§\81=\83\16Ûк`ÚåQO\ 3¹$ízó´ÿy\9eÏ6&'µ×m6\eXoÖ½¦´\vÞòG²4ïÕ\1c\9c¥m~Éྠ¹­.ÖËý\7f\1fêâÿ¡Xý·\11ñÿC«ÿ¶Küs··²ÍÉYß\93åî\váº\0ï\9cÄ×\f/\9dÄóI/éýY»\ fíâIl\1dÂ_\17ìöÖ.s,ûëoÁùÆ\exÏXoÿç¦øß\7fDüÿHñ\7fÀÆø_\10X˯gþü_¸\9eW[\e4TÓÙíé\ e×\86¹j\12Ë\1dw\9f«éZ\1ep\19{Þtõ&7^×]\1dÆR\ 3º@~öäPÖ\8f\8eÕ\ 2Û6þ\ f\19\11ÿ7)þ\ fÝ!þ6\8f\93xù¿á¼\8c³\ 6Öy\ e\ 6ë\ 3\87ê\82¸u\83½Ý:Ïú~^\97Ç\11~\ 6ôkÿè\87?sõ ·\1cK¦êéÕ\96A¤~Þ<r\9f÷÷\12ÇÖ(¢õ~\ 3y#+ñ¿j þ_3"þ\7f\9f®\87ë\7fõù\9fæ\9bs¼O\1d¨\e\7foÐÏ-Ö\ f\ e\9c\1cÝ\87èÖúúu\b\8e\1dØ×º?¸æ½Ö\97\fåð¯ïå\eªûÒ>ï\v[[²\9ao\1aaê{ØÆ:?þWuñ¿*\12ÿ¯\e\11ÿ?Qü¿~cüÏ\89æøìíúxý}\9c\aûûÂln6²þ«ñ_·oèä\81ùÄc\aê»\1f\13X\1fNÒë»Ø`sOHÛ\ÏH\røØ\1ca\93\8f¨·\eÛ\93Úë\8fl\eÿo\1c\11ÿ7[ý\9f\1d®ÿåõ\98Eöñ\9d\1c©\19Ú¿\16m Õ>¿Ûz\r\ f\}¶×í5ü\8eHßï\92\8d¹Ý\81ün×\17ÔÀM\17¯Ffú\99Û3Ýî@YZ\15YÕìÈ\9f[âO\93©¯ÿIJ}~-\87£)1¨\8b´yvÛ®²¤é\ f4¥%¼} £Ï\81Ø6þ\8f\1d\11ÿ\8b­þÏ\ eó?./Ë=Çû¹Á§\ 6Ç~nÞ?¼\96pE´ïïúvá>È;zó\ 5ºø¢ë\ 5MÜr\9byÏr/\7fÓ\8d\v\ eéZp(Ï7\96«¶mü¿sDüÿÔêÿlyÿ\ fåk¹ú\ fþ}^£\9a,´ö¿\9c\17¸2¸¾çæ\84\8eY\e\97\97Þ\98\ 6ý¶þ= ÛkÒëç/÷a¸ú½éÜ\82\\16Õ!^[\8c\8d÷óY9\ fæ\84m\eÿï\e\11ÿ?³ú?;Ýÿ]Í\8eó\ 6j\ 3\9c\13Ì¥Ú\17è3,û~§\räk\1f\1c¨7}jp~(\9eOvâ@Mû\13¢5h\ 6Ö\r××\18Bù_\835\0»\9c²fïÿúýÿÃ\ 3ñÿ\91\11ñÿs«ÿ³ÓüO\92¶ý®~\9do]?i,7`Yãñ@?7¤9\ 3äYÑu\83É\8d\7fíL\91Áú\90ei;U\92¹\8bÿ\87»ø\7f8\92ÿû\93\7fÉ\8eõ\1f\96ùßçG®»3{±·úÏ¡½½ËZÂY\7f.A?÷¹7.\bÝg\ e³\9c_wýª¿`³\ 5\95%\14æU\11¬+\18«w½rý\87âï_ÿ?5"þ\7f¡ø?}\87ñ\9f;3)¸\at\91ãwê\9eØZ~è¾lgJ¸ù\9fðý¤_\eÎÖÊü1~ÿ\8c¨ý\91þÉ1Ñ9­-rDÜ3{ý\8c\87²E_Ï?ËÁËG\88æ\ 1®\9f7µmü\7fvDüßbõ\9fvYÿ\9b»Znç\rì\ 1è?\e\ 6·o$\16\97\87¯<ÿ³,÷æ\93C9àÓnÎøÖ+_Ïö¨öó\8cæ¶¿g8¾ó2³C\9bÒf\15°,×öxÚ³FÏ\84¶Çn[B\12\9fÙ8Æ>\ få¼]\ 1Ð\98!\9bë\99¢¡e\9e'6ü\9c[ÿ¾°C¤l§\90¥\8cuc\7f÷yZ<\ 3l\9diÛø¿hDüߪø¿xcþO[\8fù1þØ»9\7fq\7ft_ «åñ¨Õ1C·Ç÷¢Il®Æíý
++Õ\9a\98vùæ\ 3¹\ 1\ 4o\8eÆvéë\96\9bT\95uÊõ\ 4V'[ÏsE!MòR/-\14êäÛö\1fÛ\b\94i8o\83\89¡\8e\85bÚL\ 4è\9fÚîl»y§ó\95=zÍx±ÐW-lï\7fªA\87-å7É\83\1a\ 5ë\9bYÒ·-\ 1é\19\90eö;Ö\rÉëyRÍs«\12[j8 ±TÚtûí\98!+\11\906\9b_ýø\7fd þ¿8"þo³ú/»Ìÿé]úg|ôë\7fõûêv®\96Û\e¼^ûg\1a¨ïÓæ\98]8\89­!¬]³Á\9a\1c\87\9f¡\9a_\967`Ñ/íÁáç\7f\8bÿGbõ_FÄÿíVÿecü«Þ\1c\9fbP¶÷ädOüz=yOèz\r\9d\ 1Û\8eÉö\ fÔ\85í×~Xö\r¯\9eÄ\9e\vnN)tvÝÚ}\7fåìµÕû}¯\1f·Rß50Îs÷!;=Ì~ig\80Ù\\81\9d\11¨ëߦ\1c2]óI¢\ f\96m>µsÃ\12Û¤byÆó¦dH^l\eÿß\1c\11ÿ¿Tü\7fk\97ù\9f²}\86îíúùǬ\ÿóÅX=¼\86{ÕÀ\1cà»\ 6â\1c\9f\ 3ÚÛå\0¬¯Ct±\rÍ·/Îo
++Ä÷PÍ\ 1®¯+ÛXÀ>\rÍ3KÃ×Ú\ e\82´R1iºzý\7ft þ¿;"þ\7feõ?¶\8cÿ±«kü+söÏ\¹þ\93n\1fw\7fÎÞí\er5àV×ëf³ð\19\0î<É@\r°á=Àî\Ź=É\15Á²\9c,÷ר½Ø*²§eaÇyfYS¶Ç\86ò\1a\8e×åÌöøÛ\8cNmׯ®Ñæ\ 33·²½\16\ 1KËäµÇ¿þ/³Á¾m\ fÈm:qÞä@è¯ê\93Õt:,\1d$U\7f²¶y^K\90+Ô'Ñ×Ó··mÁÍs!³}bú,Ú\DQ\14\8bý?\1fíâÿÑXý\8f\11ñ¿Ôê\7flìÿµóµý½ÜWD\9fÍÁùú.OÏ}fÂuc.\9eÄóIÚ¾a¨\9e¤\9bß\8dÔT\8cåX¸ú+\87å¾ðmãÿ\17#âÿ×Vÿccüûû?Ô¡)ܹ{ẠÇ\r\8cãÛ8>Ñÿ3»\88\9aûÂK'¡|\8dÈXm=/Ã~´v\¬®¢*·s\16ô\0®uÑÙù{µ}üj»\1fg\96}a'4Øé¼s[ú³S|çö\83·\85¡Ò²\8b\eú8ØG ,\9bbÓúO³©ºBCzõ\rÒÕúmºyØV0}zìíØ§ÙÎ\80µJavLpÝl\18S\9f©LÊ&õ¼(\9aÕFë7\16úXe6\9e\98Û\7fèÌrÆÓæ&¹müÿzDüÿÆê\7fì\92ÿaû\15wÈÿYæ\8d\1c\8cö)\82y Ý<\8fëo\86ç\ fO\1a¨S½¿?O¥Þ\7fûý¦{byÊëëGî<\99¢h\ ek¯-êvc)ê\89\7f\8eÄú<\9f\9b\17ê=ã·Éÿ Åß\9fÿýÇ\11ñÿÛ­æ\7fÛëü¬\95\9f]Þ­\95L\aÖóÛu¹\ 3«s9I2ùüh\9e÷¶Þncr]ÝEi'ùª\ 3Yi¤\99Î\9a'¹îä\85}\9ej[­³Á\80\9d\ 6l\83Ç¢\19ë\87×ûk»õg\96Á£î|eÏ\80*±å\ 5\85îNµm1µÅïÒ:       ¶3ܾ\97%~§Í'Ç>GYs\ 6¸}uuUÓÚú\95\99\1fÿ«\a®ÿ\7f\1a\11ÿw(þÿ¼åó¿_¯·\9fÇ;³í·\93å\1eÿðgæ\82IìÙ°Ö\7f;d?Ûf\8eO7\7f» -Y·:\fç\v\ü¯îâ\7fu$þÿ>"þ\7f§øÿÇÆû\7f;W\1f:çÓÝ\eBóÿÓîÞЯ\eyõ$~ϸj Ï#\90û»ØOòÎè¸1\96\ 3\12Z\9féîï±Ü\9e^\8dÆ¡ùü±g\96n\eÿÿ\1d\11ÿ¿·ú\1f[Îÿ>z5¿¢tsõ¡º`.öýý\1a/\8döýöíyá¤ß_\98¥U||÷ùèï­×sÓ%«[\85¥méSTÛþÁ$KìÜ÷¦¦\80Õ\1c«¬è@a£?\r\19,½ÇÆ\r6Ék9&Ù̲EtoÌ\9a9\90DO\9b¢¬ýó¿7Åÿ\ 3#âÿ\ fVÿccüÃõ\1f\87ûw§n<\17¬\9f\evrÿ~a7ØI¸Æ\8f«í\1cÊ×\98gn¿Øñ\ 3ã\90i4¯)\96û\19¨Û4YÖÿió\89ô\19*j}\ 4t\15\1e³Èy_\eë?n\8aÿÇFÄÿ\9dVÿccüÏÝ\13\9a«\99\ 6jÿµu¡N\19Èá\r\9cï¤K¢}^\9c\10\KØ\17¨Õ´\9cG:2\92Û=\19¨M\15Èýïö\90¬?#ºý ±\ïÅ<RdN\7f(\1f8Tóme\9ej(þ~ÿÿ3#âÿ\8f\7f;;XãÓå÷¯Í»×í5yFô\9aÄòº·ãRcµ@ýø\7flàúÿì\88øÿ\93âÿ¹]ò?ÔÙν1~xÏæ©\91ëùä~\9fqQßÿ¤@þ\9f\9e\88Þ\9cR¨^kh/Çò¬ácúïÑ*±yÏ\80Ð}"\1a³z±\96\17ª\ 3ÛÔ\ e+S[ͳC½¬úÏdð¬\1fw¶h­7¬\87DjýN¿þ÷Ǻø\7f,Vÿeïîñÿg«ÿ²w\87üÏE\9d\8f¡ý?§F÷\ 6\86ú\0êR,ö\rôë\89\9e\189\83ðØ~\1d\85ys>«çB\96y\15\9bóÙ°WÐÛ'Øöû-\99`ÖÎuù{
++Bµ<\aæ 7îÿÙ\14ÿ\9b\8f\88ÿeVÿecüÏ\8d\9eñ1í®W\7f\8eÇö\7f\84ê¸/sù÷\ f\9c\rÔ®ñôÇ\1a/ïÍ\vÏótqþKósT\0\8a¦&x\99\1dÊ~ùÀù=c÷|¬\9c\ 32\14\7fÿù\7fÛ\11ñÿ\97]ÏÿÒ0/\99Döÿ*\f\95\eÊó\ eî\ f©êÚå\ 5®ÏÿO\ 3y\81í\98á¸hm\92\eà\19\1e«?\13Z\9b\88\9fýnÕÂ\9aédë\ 2Ø\9cAÞ»þ?>pýßnDüÿUñ¿ýÆëÿü\81½|mÿû       +ó|óî\f\98«zó\83í¹Áï\8f®ã\86ö\0-çxÞÑ\9fãiK§-æ\9aC}Q?^]\7fKw\81ÊÖgô\bYÖäõæ~Bç½éY\9e5«·\95-äÚ¾\ fËíHmç~\96d6:°²\1f©Õó)\9a\92\1e\97ØC_\ 3>uaR;ò»´z¢YÝ\9cò©\ 1A\915GÔ4Ã\88¢Ô\83.)&\8b}\82\1fïâÿñXý\9f\11ñÿ7«ÿ³wSÿÿ\82`.W¸þó¬\8bÇÙ\ 3ÏåÓ\aÖp\ 2ç\ 3\14º\8a¼u¡\9b­æ\1a\8d\93\ 6Æ\9c'\ eô)ûý\87¡½cþg)¸\87,<Ö+S+\ 4\99\90zyàk}\89\95ë\7fSü¿xDüßeõ\7fvéÿ-jõ\fõÿ\ e\ 6Ý\1cA(\96¡ú¯mß0\8b|\ eß\15Í5\9d\ 6C9£\87(Gt\91\97èž\97ã·MÿoSüï3"þÿnõ\7f\7fhÿÏÙ\ 3µaÎ\8aÔ\8d?s`Þð@¿\9ehw\16\8c«ÿ÷¼Õy Y¶\96\13ÐÌÏͬ\ 4sf\95\97ªÔ
++K\94í¯mÉÖB¦0e¶\1a\936ec+ë\93YòmZ5U;ì¶\9eÙÞ?õ)\93Ú\8a´Ø\89_º=W¶>ÓÌ!\17ºÔ\155+\bb}JÝ ,{ǪÄäµ\1eñ\1aåÔz$¸³\1fbçÖ,ö\13¸\9a/¡ý?\16÷O\fÄ?\1f\11ÿÿ°ú?;ÜÿÛ\1aêý¾\9fe»»¹\9fÐüÚÞî\9eЯá\11Xó×µÖ~&²\81úS'õÿlqî×    Ñ\1aÓnü·rßÊ\8b*\1f¾ç×v\1f°$\ e}\99æì\90:\9fø5\9eýsÃ\16u\9c\9a\98&Éz\8d\107·¨ÛMnw\93y3al/\8aÙÊõÿ\89\9f\88Õÿ\19\11ÿÿ´ú?;\ÿ3Û\1f7YÖø\b¯\ 1O¢õ\7f¦\819زN\92i·6دïqùÀ\9aáèýß¡µ¾ö÷u©\1fÊÚ?\815è,o\9e\ 5Ëó\7f6Åÿ!#â\7f¹ÕÿÙåù?w¹:g\rÌå\ 5î\ 3\8b\ÎSúã¶Emà¶Òè«Vú\ee\93Sê®Cõ\9cìð\1e[WÏ-íNCq«âÐlÂ\98Ûz¿ý¡ÝÂ+;yÑ6\83ZY¿ÔNglÎòÓ=Ú\1e
++z\86WM\9e\80\86]\99þrb§üØI\8d\1a¶ÙM|\96X\1dà¦\92_\9bÆ«AÂÜ
++y©ß^ë;ÖöÙ´Eä¬)ßeå<\v[\rV\17 t}¹X-a\97\9b\1a\9b/\1c¼þýñÿ×\8c\88ÿ\7fí:þ_ôÿÚ±\¨þã´[\93\1fªÉÿy\9c\7f\8f\9d\ 5p¸Ô\80\\89ÿ5\ 3×ÿ×\8e\88ÿ\7f\ fÛxý·ã§G¬Ü_ÛýðÁù×îúwksý\1cïþ¼@jWÚd\99\e\1c:7Æå\8c÷÷\1a½©÷Ìȫ模M{nbç±äö[M·¿Ìgy`m.p\96o\9e\15\960nO\12{\8cÏm7gf\99\1e©Ý\9e\9a\8f\eKn·§\99î\1f\96I^[¹\89¢9\ 6V½TÛ#\92é\ 1\94X\12Érþï\9a.þ×Äê?\8d\88ÿÿXý§\8dñïïÿpó.±ý_®Ï\16ê_¹ñZxÿGû,\ f\8fñß4\89­C\r\8dÓ××UÖÆd\87j¯G¬¯\18Ýÿµ>'µmü¿qDü¯°úO;Ìÿ-ûæçFëní\v\9cÿ¾¬Ë\178\1fR\81rõDý{\8d®»Å^\83Pí/W\ej}Íhð3\11X{\8fÕóÒ]¹´3\81\9aÙú¬(5~×'<Ïm8iYEVnbÖV\97Òc^# Âv\95è\1e\8eæMÂ\80¥\99ÙH±9\18Ãõ-\ 35\ 4\17ûVm¼°mü\1f;"þÿkõ\9fv¸þ]\1c\83g\0¬Õÿ\b\9f\erJ4oxÚõõ×ë\ 3M\ 3ûFÚ=ãïì\8f\19º}æ\eÖßݾëCY÷'\983¼v\16dðóàÇÿ\93\ 3ñÿÎ\11ñÿ?«ÿ´1þg÷çV»\1aÿ{»k¼?\9e?5°Vßî»\f­ý¶{\83O      ®       \r\9dýêö\13¯×\1fvk\827píÞ`\1eÿ"W`m\7f©?\17\10:\8fÀÅÿ\93]ü?\19«ÿ4"þï¶úO\eãßö×\9e¾\9aÿÛÍ­\aÖrf®o\18ªçæöcôïÙúwIô9_7?ÎEí\80P\8d°\959ÀeM¯¹í´+\8b¬².Y×\97«m"®°\9dZ³Åú\8eۻѮÓå
++j¡N\99Íî\95M¢¨\1dÓfÓ
++µ\86\8b¥\1d2§+¼²§\81>\ fV\rÇ\1e\vv,PsàC5·\fu;ÎÍV\94gv&\95\1d\8f¢mûÍ\8aÌ\8ezËm¢4Ëm"Òz\9avXlb§Î\96µ>SéÖñÿ\91\11ñ¿Òê?í°þ¿<«+pþ¯\ 68¡³\7f­øRæõñÏ[éÿeݺQà^Þåñ¸çüúºÀ¾À^R·\9e4\99\ 4ëî,\9eÁUûtÎòª²^\99þ×¶\864C?=
++\9a\85\80æ<'\85>Ït/°^[iG\81)þêÍ'u\9bÊ]Ù¤\9d\1e\146»_ZÙßÂ&xìÀ(K\17UD\9b9¤æôÁ*×SÃ>gê<äVòÚæ\8eܳbål\82mãÿ\93#âÿ\1eÅÿ§v\98ÿms¹ß?p_¸2°Æëjÿ\ 6ö\8d.òr.\9fôç\9a²Ô?ã¯\9f\87Ü?÷Á­\19®çnEê/®Öf;\f®}\7fü¿)þ?;"þïµú?\e¯ÿöç~Ñê5Ù\8d×Þ40^\v\9cå\94\97]ÿïe\93ؼáu\9cÇ\89Í\9fÙþ\9btm¬g\e»j»\92m%_½\82Ô¦sæ¶?@}Ï:ÕÓ<±EùRA²        \ 1\ 5H\9f\96ª9nÆFf¹ÍÒ¨o¯\e\e'\92Õ6¾Ëìà·bnWºí!·\8as¶G¤°\84Nuè\14m\r\94ÏÄ\ 6\8d¶ì¯Î\8eþ¶^&¶J\94¨Ûi{ÍS\egf¶SÉêFeÅlÛø¿hDüßgõ\7fFÝÿÏ\8eäå\9d60f8%0/äj\ 6\107ðÎI,ol\87ù¿õ\1c®CWóaí¼¢Ð¸Ï\9dM\11»ÿ\7fj þ¿8"þï·ú?\eïÿí\99\1c¯^\19ãÏ2wí¯Ä#Éó6Vo\9cÄ×\f^Ù{^Ïmjµù<½p«±|l\f\9fÚóÖ\8eëZÞómjÞÊCZ^UÖÕÜK¬Ödf\89Ê\95õ\ 3kKðk\ e\ 5ÕÀβ~l\11¯\19\1aXùH]Ìvä\97ååÍ,W§\99ÝK¬R\84þ<ÑÝ"¯\9bO\88n볺®,1`Ö¬òÛ:o\99\96v\dÓó·ú\91¶EÌþ\9aº\15\9c\18Ë9h\96#\9aCájû\88\15\8fOuñÿT¬þÏ\88ø\7fÀêÿì²þÛ\8cËúµ_Ý\19\9eẠ\1aæxÏ\8cÐú\8eËó\f­ÿoº\9e#kì7¦µ"ÿ\fÒÁøûë?¿9"þ\1fܸþ\83Ï\97m¯ÿß\1a\11ÿ\ f)þ¯Ûrþ'´V;\rÌñµç«\1c\88îÕpù]ýó¿N\8aæ\99\a÷~,ú\fÇôó\13ºúß¡}¨m\ eÒ\91Ñ5í\81ùÂ~\rñµg»\9f¿í\9d÷µ¾O¤W·$´F¼mü\7fwDü¯²úO»Ä\7f±&wpOh\8d×­ÿ¬Ì\vÌfÝ\9eñ\93£ë    ¡}\1emÍð¶_x`e\rª­%1\94\17\1c\e3\ 4ò\7f\86èêw»\\9fÔ
++\83Ú´aa\83Áá5çà:¤\1fÿO\ fÄÿ\8fGÄÿÃVÿiãó?pþ»\ 6ÏÓÀÚOÛ÷?g༨3úk\ 2úQϼµäû¯ô\19òª½þ¯\rä\12dݸàêÞºÀ2?ýÊ\8dó\85\91yCwV\8b\95\ 4·íàêºÙ\88½pçF¦ö\9b\1aÜ7½=\r\bó\£ù¼°® \9dâ`Cþ¢\99ñ±}\ 16ÓPÎ4RPÇ©»\a\94bCÖ¢¬ªrí\8c:\r¯\8a\8fOwñÿt¬þÓ\88ø\7fÄê?íÐÿkçÝÚ½Õá\1a¯í\9c\8e¯[Çïßÿûg\ 2/Ïpê×\85µódÖ¯ëîì\95õ3\98Ü}øPÔî=dùÃ~ü¯\1d\88ÿ_\8f\88ÿG­þÓÆø\9f\e9ã÷ÌÀ\1co5kçw\ eFkC\f?\e\9bSTG9÷ë\86\85Î\fôçølbÍNç´­v3;zÍ\8aÕ\15E[\17Nòº²ò\9b\95¥"&¶Â7o\96[æM½6]Ã3[ݳ\1eza\17»%ôÛ\0Á\96
++tqÏ,Á/µµÜæ´fÝ\15ôÇ6j×õ`ç>è[ÕºÎc÷ÿõÚ\11V\bLïÃò\ 6Ótý\`\17ÿk»ø_\e\89ÿ?\8e\88ÿÕ\8aÿ?m¹þ»uý÷Å\19\ f§Dê¼\9e4p6üþhÝ\b7\9f\18ª)\14\1fÂÚA±Z\ e¡³Ý×ëÃÆÎ~\88Ö\7fß\14ÿ\7f\1f\11ÿ\8f\9f\9fç\ f\9c×rntßµËÿí\9f\e{yï9o)rE$Ïw¹§¨¿ÿËÕ\88Xy¾·õ\1az{w\93:/¬è»ÕüµÂ0ÙçiýØÛ[¾\12ÿÏ\fÄÿ\7fGÄÿãVÿg\97ý\7fV¤ÐËÿ\rçò\9d\1aÝ\9béærÏ_YÿMºë¼¿Î·<oèÒèÚÑ4p6¸ú\ fu`\f×ÎÃÚ\92Nbù\1e¹­á$¶\12 (ë\11\96Y\9dfÅÇÖjjÛà¡§@^Û\14¢MÞØ=ÂÖxr+t¥§D³l_X\86GÕ$÷Yùw[¯¶\\10\9b\10Ö\15]\rì\15\rå\1aê­T\8bø\7f¦\8bÿgbõ\7fFÄÿ\13VÿgÄøßå\ 6\84ãxe`ý\7fÖÕ\0ê¯\ 1ªs]\ 6ëÆ.â{i?/ ©'vI¿ÿ¿v6\8c\7f.K \86\97WÛ!­>\ f\9f\8dÁñ\7f(þþüßÇFÄÿ\9a­ò¿Ûù\95ðzý$º7gÚ­\ f÷k9¼k\12ê\17|>æØ\ 2Ïçк\82¿\97ç\ 6Ë\19Øöúÿø\88ø\7fRñÿÄ\ eã?»¯ºùÿй0îü§þy,§íÙ´^ü¢\95{IÕÕ\99yù$6\9fè\9eíksl¹\95\9aþ»\9eí©\86õê\98f\96a\9dY§¼¹LSë½)\1ezp'MoÌò\84S\8d\12õt·¥\1cë+6[\0\13ë×¥V¡×\8aB§zbë³QåU;lL\9b\ 5B\8dñuW´\15°\99ý§æ\96á\97Ù\89d\89n
++IZåýÜãÐ93ÍÙ/þó\7fSü?3"þ\9fRü?»åýÿv«¹\9a].ÏY\ 3µ×N\8d\8e\rÜ\1ap¨O\11Úÿ[èî\19<kbqö{¿ö¯;\eÀÕ\15ëç\8döë\8aYï¯\9e\84ë    ¹=/^_ÂÊ;§~\1e©;SÀ«\eÖ<Ë7\9dù\96V6\ e-\12[|¬Öò¿-î\9f\1d\88ÿ-\8eÚ=þ\9fVüoyÔ¦ëÿ\9cH\9d·Ó¢g|\86Îjtµ\1c]\r¸ðºq?ÆË\9c\91ãû9\ 5IR̼5\80\99Û\87Ò\8fÿ5ý¹Ánï¨[cöös.ÎüZË㲷׬\13ê®RÍ\8a\95Ü\93õµç¡s@{Ï\1d\17ÿÏvñÿl$þûGÄÿZÅÿVG]÷û\7f»'shïßÁè\18ßÕx÷ó\89ô\\9c¹}\7f¡ZbkÏlW3kfÓ8\1a3Û&nu¸lã©Ý\855Я\14´º*ë²°²ºVÊß\8a¯êYß,ó·\95WgU\93\95ßÔ\ 3\e³a¾eûØI\8d6¹<·gFn3?©\9dï\98TúêEÒ\94r\9fYê®\15|Ïô̱}ä©\95\15²òï\95z\84ê°ÚWÒmÞ²\91¬(p\9e$il~`Óþ¿Mñ¿õ\88ø\7fFñ¿ÍQ×=ÿg¹.wæ@\9e÷+\aã\1cÞËñ¬I(×p=\8f/zöú\8dëóÐ?s(PÿiSü\8f\1d\11ÿÏZý\9f\8dñ\8fïÿ
++îÿXÔ\86:8°\a¬?\a¼Ìÿ>~๲KÍákúùÁê\9aå[\8c\r\12[*(ÒÔ«ñ²>\87\e»\9f\87rÌc{Â\ 6÷\7fYÜ?7\10ÿãFÄÿs\8aÿ\1d6Æÿ\84è>þ¡Zn®Ï\1e®\ruaï:ok¹<·?Ç·\96\17\1aØ{yC×gZÏ\1d<$õ\ 1\ü?×Åÿs\91øßqDü'§\1eûñ;m\8cÿ\ 5Ñz-ÓÀù\1fí8ï¬ÀÙoîl S\aæøO\1e¸g\1c7ÐÿÛ?Ðÿ?&Ò\7f¹¦?\9fÔÕ\9b^\8c)õ\9c\17ýü@ß/v\8d\ fÖ\7f\ e\8c\ 3'ÛÆÿø\11ñߣøßecü\8f\89ÖxsyÜáù¿gMbyÃûö<c\12ûLM\86spVrd?\ fsu7Ø}fÛø\9f0"þG(þwÝòù\1f®ËÞÎå\85ê?\f\9d×çöì¯ç\rM»õß~>ÙË{_ËÕ\12\84®\9eÆznU,çÆ]Ã\87\87Þ½Æ\8fÿäyñøßmDüo¢øß}cüÏ\1f¨½\7fVôlÀi þ\8bú½\95\9b[yàê<N]OÂ5{\97uÛãg
++Çúo\87°¶\9bþ\8e]Ⱥ\vèaÒ\9cæe\ fqÝG\9a\7f¢\eÄ\ß|Þtð­z¬í\10Ò;°Ý\ 5UÙÎ\11$MÍ×Þ¹\7fî,\ 1\17\7f\8bý¢\ 5â\7fâ\88ø\1f©øßc\97çÿâü¯~\ e¸\r\8fRïy\1dÎ\ 1\9aDj\87Åkó»õ¤p~Pÿü\17ë\87\f<K\82g|¯å\rmªÑuHÎ\ 2·Óäýçÿ¦ø\9f4"þG)þ÷Ü8ÿ\13\18ÿWu\11ÊóÓã´[û9#\92ûqz \8e¯Û/\õÖ\19\8cÛ¯\97EjÐ\9dØû>yaë\88û\aj\ f\1f\13¬=±7T\vÞ\9b}ZÙ#\18¨ã;+ìY\91f¹7V´£fì\93a\19\81\96XRyý\98йÁêêÚlÃÌ?ÿaSüï5"þG+þ÷Þxý\9f7Pcï\9c\81³úâóÃÓà\1e\r\9eØÜ\90[\e\ e\9fCuiïúwõ$Ö¯ûP=\86±g5\rÌIõÎ\9e\8dÌ\17¸3\ 2\17sÎ~ü÷¬Åß_ÿ=yDü÷\9eºÍù\1fçF®±3\ 6Îp\f\8bý¿\a\ 3µá³.ÿ»_\17Üj9¹½Æá\ÓË£óø®fÈzîòb\1eA}ôõº\8d\87°Ï`³FÉâúï\9f\ 5¹r\ fqñßÓÅ\7fOäú¿ß\88øO\15ÿd\97ù¿Å\99ܧ\ f\8c\r\ eö×ø\12}æ½{}8\97ë¢h\ eè\96\87K\ eèz\9eY\99ÔEl^¡w\1eݶñ\9f\8d\88ÿ>Å\7f¾åúß­WæUÓ¹\8b}øì×~\1d§e͸«\ 3c9Wã=pþ_wnô4Tk¤®Ó}Á:\83Ù<Ùð\19\89äõ/ç\19Úzð×{]·H\9d\98\99ýû\99\8dÿmÆ0Ù>þé\88øßTñÏvXÿYö»Ãç\7fL\ 35×m.~\1a8«­Ý\8f5\8d\9e\15\13\9c¿ÏÚÜ­½\81z±Ög\v}\8e\M\88ÐçÈò\v\829\82Ö\ 1¨\12W7$v\86\8b7/8îü\ f\7fü±müË\11ñ¿\99â_íØÿws¿ýuõË\ 6rø/í?«»ý8.ÿ'\9cgøòÁ5\9cÀZM¬îêJm Ãä9ár\v\82ý\7f\8bû\11\ 3ñ¯GÄÿ\18ÅÿK·¼þÃçõÄ®ÿã"g\ 6î\ fî\19sùàþX!ÏÓÒ]Ç¡ù\ 5W'®ÿ¹ìç\89çóåQ°Íu\9cZ®XâÖåV~îÞ\18Üj\ 5̬\1eܼ²á½­ø­\9eõ´Þ·\1fyý¯¬+¹ø\1fÑÅÿ\88Hü¿lDüo®ø\9f²Ëü_÷¼v÷\80\95ùZ]H.\ 6ý3£ßØÏï¯gÝ9moèß³\17µ\7f.
++æ\v\ f¬\13´÷\ 4Û\98Wèó\92\94Í¬Ü¢Öæatγ­)$Yb_Aß»ÙWÜô=\86âï\8fÿ\ e\8c\88ÿ-NeÿÿájÛø?hDüoyê6ùßç\ f\9cåvö\9eø\1aßYѹüØÚÀ\17Jl½ùÿÐ\9afs\9eܶ÷ÿ\a\8f\88ÿ~ÅÿË7öÿúù¿\85ÆêÓÀ9Nö\9cuëûá=\ 1í}üùþ×ÊæEh\7f¯}\1e¦]¿/ÔW\ fÜóÝÏÔR¾ëª´¡tÒä×Ù\1e~ËKjÖfK˯×-;·ú-U³\9cWÚ]Þ\9eɶ\81Ûnñ©­é\96V\rÆ\ e\92ÉkK\1fÓû´\91_R\95¶C_OìÊ\16\ 1­d¯}%=-¬Ê\97¾u©gVeEÞ\9aõåÙ¼îï!Xë\7fèGЬ=[ÅàÚÖ\91ËÙðõïÇÿÔ\11ñ¿\95â\7fp\87õ\1fWã×ÍË÷û\7fí\8ap¿fÔS&ý{I[\13tèZéjsÞhj7]\ f}Á­ïÿ_9"þ·¾\ eó¿ë}<7ÿ\13Ú\17\80á¼ÂP¾ÿz?Ð\8fÿM\ 6®ÿ¯\1a\11ÿÛ(þ_½ñú\7fmol¶ÌónÇ`á=;ïì\8fõ\17ç\86\e×Ít!µsÊýý|®>Ì6?ÛH>µ«Ëb#ù\89\7fÎÖáºWÈÅÿ&]üo\12\89ÿi#â\7f¬âÿ°\8dñoçæÂ9^íxîa«ó9ݾ\8b\97OÂóÆÏíýþP½\9eP\8cCçw®Ï\9f¶uµ­¦gVÛpÕÒ³\932Ëj;\1eNwZ½O\9b¡\9d[²eZ47\7f«¿\93êæ¯'Li§ºåöx×ÿ\16I\9aßà¹fÛÆÿô\11ñ¿­âÿð]ÆÿÝÙª®\8f\7fëµ\1c\80öÏÎ\1887âôÀþª¶\96ÇÐú «+\16ÚS¼/PWL\17ý¼\8eä\ f´¹á'\ e¬C\9d\10Ía\rå%\ 6Îð\9c«\87Qzû\8aWÖÿºû\91:¦ISñ=kÖ\9b\97çÔn\eÿG\8c\88ÿí\14ÿGnìÿ\9f\1f©×vVt]p\1a8ã±Íïî\9fï¨k¥«åß\8e\r\9e½2ΰ:3¯\rÌ\v\85kµ¹\9f»®É\99u¤²f\89Ö&k\9a»\92®]uÓ¬\88kfG¹k\9cje·jKÕÒÓØ*|é\83\9dY\91H\8d¿ìö\9dÛ\1a\91u     K]\9aÖy×\9fTÍ×ÊmÊØvó¥M¶om¥¥ÕkL\9az\ fÅÌòût-ç]n@Q4\a<×¶Ñ¿lª\8b\80¬­û¹zEÛÆÿ\8c\11ñ¿½â\7fæ.ù\9f\8bzüÇD÷\ 6ÄòiÜÚ`x\ fð\e£9\1eÓÀü ­\1d\rÌ\ 1^\1fy\1dëg÷\1e²³\0×Ï)Ø6þ\8f\1e\11ÿã\14ÿÇlyÿ_YÇ×h¦½G¶ù¿Ï[\99çwu\19/\19è7¾¶?\ f\¸3=.ìõ\e­Üö@\7f@\ fk{^\17ùP-\97X¿0·\99ý¤©ØªNBÞìÏ*jK\r´LbÝ\ 1ì«dÖ§P\90íü\17u\1d,½¿®-QØî\17¥F¡\1a,ÚG¨(5\96´¾\89¢ouí¬¨\90Å^_©½\eU\85­Héo7\83W[OÖð×JHÚìÄ¢n¤\9d\b0\14\7f\7fü÷\r\7f\87\1dçÿ\96ç¨\9e\15­ó\8díæ\ 1\ 3õÀ\9bódýø\1f9pý\9f5"þwTü¿y\87ý¿mß)\e¨×xÒÀ\99ÑýýøËz\8dÇ\ fì\e?vO|-ðâ^¾\89\9d\e\18/\ÿgx-òt½Z\91þ\98rl}ÈÅõ\7fd\17ÿ##ñ?{Düï¤ø\7fË.ó\7f\8bu¹s"¹\81gökòæE·\87óÈ\81ó$'Ѻ\v.Æës\8d{\ 3ç?º¼Ýë)/cr\88ò\80ô-ìÝ´õc×ó\87·\8dÿ·\8e\88ÿñ\8aÿ·m\8c\7f¿þÓ²&Û\99{âó8g\ 4r½Ó¬}þ\aÎÿír¶Üºþcü\1c\ 1ýä÷\ 5r9Ýøno ¯¤¬æ¡û­\9d\ 3d\exJo|få}k]\96V\12>W×0Él@®Ïkaù\1c6Ùo¥Üô±É2û\1d«ã®\1e\9f>@¹Ý=Ô©Ð\13|\9e\16\92`ÇÈëîb¹½ÕÆ<³Å\T¨ÏâÇÿ¨\81ø\9f3"þwVü\1f¿ÃõoÙìm¬Î\ fÖ\ 6\8aå\ 5¸ÏK¸¾Ç\19\ 3g   \9e\16=gr\1a¨5Òæ\ 5N\aö\19M¢{\9aBÏhÛ\8fs=ìùñÏxôë\84¬¯ÿ¯\ÿGuñ?*\12ÿsGÄÿ\8b\14ÿ'ì\9cÿ¹¿w\1f·95¿\86ß\81\95\9f¯«×ݯÕèö\ 5ºñ_(ÏËå\ 5oZ;ò×\8bÖrÂÜ\9e¿±µ¾õ÷Ó¦¢Daó\90\16o\85
++«9QÙ´@i\vR\8a½}~g6*´£¤²æ\91\80\81}®Q\83í%M\86ó?7Åÿ;FÄÿ.\8aÿy\eãßßÿaã1·\87³_ßã\r\93øx±\1dÛ\85ëE¾´?ï\1f¨ÿâ\8fûº:0¡\1a\8aÍ\18êFX\13d1\96\1d\8a¿?þ{â\88ø\9f°ëø¯\9bÿ\9d\ 6ê\7fê*ªÜýzÿêØ¿ëÇU\91ûÉIÑóbCùÄv\8f?\8cÆq¡s]Ck\12©%\16X9SË\ 1\ 4$¶¥X}ã¬]7[\9fÿÝtý\9f?"þwUü¿{\97þ\7f:¯Û1Y¿ÿ¿<Ë)°7$·3\9e\ f\86\ f\fÌ3\9c\12\98KLg\85\1fÚ\87èêI¬\8eCÛgÆ´\ekö÷\9a\1f\eý¼¯ô     \14£À~óÜ\92 Ôõ/ü<r\eÏû5μN\9a\ 5\ 3Ë\1d\9c\84Ï®òã\7fô@ü¿gDüï¦ø\7fï\ eûÿ\96c¹s\ 3{\83çUååxõk\83\1cì\7f=;Ao²Ìõ\ f¯'^\15É\11ê×\99Õí>qã\85Øyq¡:.º\9fϼ<¢ë}ý°\99aèÎ"\bÕüðÇ\84.þGwñ?:\12ÿ\vFÄÿî\8aÿ\ fì°þçúìî\1aê\9f×¾?z&\8fë\97¯Ö\ruç   µ½      ÿü¿¬Î\8aë:§\96\1dÈíak\97¦\8dHgí\fob˶uó\80V\90ʤl\8e^.\8a¦7oùºEYÙ±ßÍÊ\80u)r+KYuë8YÙÔæôÏ\0:\14sK͸`(þþóÿI#â\7fâVù?\17Döì\9c\17­Ç\89Ýç\83]íÐm¯ÿ\1f\1c\11ÿ/Vü\7fhãõßέ\84Ïë{c¯??³.ö$\9cÏ¿Ü\ 3üòþ½yQ¯óY½u#Û\vâær#{2Öër¶?ËÒ\96ä\93Ê\8aò»\1al7\96ó\0·½þ\7fxDü¿d«þÿ9\81Z\9eu\1d­ÿ×Í×\86æz\96ucN\1fèëí\8f®+\1c&×èØ¹}×\1ftóJí\`\9dÏ\13;ÏĶ\9f_\87ø?yDüï±UüÏîïÍÔç´òòøÂë¿\81{CW\83Ã]ÿ«çÆ\97E;ÏóÂIlLáß'×úËV\83Éf^-u/ws\0\81:\1d\87ãz¯-\1fèÏ-EÄz»6}\94o\1dÿ\1f\e\11ÿ\93ØÿsØÚöùÿ\94\11ñ¿§âÿÔ\1dò?\96ç5öÏ\0Ì4à\99\ 6j\ 3µç{\9cÕ_ûíÎê\98\ 6Î\8bÉÒ²pcÿpÎßu<KjQKò\9a\89ÛkìÝcb{\88£5\1e\ 3õ\9d\17g\8ahH`\17wYWÍÍaîÎ\ 3èÎ%iïaê4¸Ü@?þ{\aâÿã#â\7f/Åÿ'v©ÿ¬.\94ÿ\8c\ f\9dËàÖ\0\9e¾ò3Nêè9>\8bú ×í\q\97\1f\10\99\93\vÕ`·\mõÒ4lo&æ­/8·­;z\9akXVÔ¥=Øõð®l4Wh°\98ÚÂ\80z\89zHXÕ¦ÜryíX7\r$k;\17Êö\ 1ë\1fh\8c7×`ßr\80K\8b·m/WÏ@}\81Ô\9e5¥þÈNö¨õPHCgVØ\93ßÖ'k\7fýoo\17ÿ½\91ø?mDüï­ø?}\97ýÿº$B±_îý;\18\9dË\rÖ~YÌ\19&ÁûIè|\87åYB'FΧ<a`Þò¸\81\9c¶c\ 3µ\8bÚón×ç{»5\86õó\83ÜuÜ룬Ï\ f¯×2U×Åê\855ã§mãÿ\8c\11ñ?Yñÿé\1d®ÿe\8eôé\ 3g|U½~£\8d\84J/\ah%7Ð\16\b\9cÒpí¶id­÷êÀ8ÔÕ!ê×\ 2qs\94\ 3sù±Ú¿á>¥\8dÜl\10×l\12«\9a\ 2¨íü¡\15\16µdÿ¹\9d\1fgÅ#&\ 3g\81­ä\90o\eÿ\9f\19\11ÿû(þÏÜ)ÿ§êÎ×>/r½öç\85\95}\81º!n\9dÏÅê\89+ÿnÖÍ\e\ 6Î\13[ÌC^\1e\99\ 3~Wày\91,ö¨¹ëv1ïÛ\9dÛQÙ\92nb\99ÙUnóte¥øZ§\7ff©?\1aýY1ÃÌVul\86Ï\1e.sK   °Ý \96¾a5AÔ\89W8+û\ezêY
++zY6\89 ©­ûVúl¥Vk õ×1ý>ÀJü§\ 3ñ\7fÖ\88øßWñ\7fÎ\96ù?ázü\81=Þz¤¶s\ 3§öÇ\8d\8b:0Gî\89ç\a\4\89ç\15\ 4ö\ 2tk=^<\ fÅúüèóÁmRx\96Y¶wfóÏ¥F\9a\93¡3a\ü§]ü§\91ø?wDüï§ø?o\87øÛ¶«j\87ü/ûÁûgC\86\9f)\a\ 6Î\94
++­\ 3º³!O\1a8Sb\7fô\f{\97\v\14êoºqÀZ\1f2x^{äÌ\87¡ýA.ÿ+µ\1a±ú°Ø?¯*Û{\l\1fÿç\8f\88\7f¢ø¿`\87ú?Ëuùv\8d­_çåi\ 3×ð\93ûy\1e]ÍÐà\[[\17ó\90äÜ\1cfu`Vú\87ÛÆÿ\85#â?Sü\7fncüÛgë\8bVãßå]÷÷øZnо`}÷6¿ÓÅ\7f\9bùÝëc®5\92\7f¹²g¤Ù¶\93Ú\84]Uèÿ4\92³N»U\b°å9}]ëÈÙö-{îé#¢\8f¡\1d\0 OX¦g|®Ç»úCVã·¶\ 2núÈÚ.¢ºêv\85%ºñÛ;·)~õ\8e2ûÊi¦\8e¡\ 6\82Vý¹j¶\9fY.\90U\ 4Ó³ óë¿YÜ÷\rÄÿçGÄ\7f®øÿÂ.ù\9f\8b3\9eÏ\198ç}¨>äiÑ\9cR7Æ\ fÏ)¿¶÷y³z\1dóåç¥n*±ê§x\98ÎõÆê?®\9f\88ÿ¾.þû"ñ\7fÙ\88ø§\8aÿ/ïTÿÑÅã\9chþGðløÅ\18ïÔ\81=¾ý3`æÖ©òò\rú5g\8eéÏQ¤³î}L\aÆ/G\ 6÷©FÆ\84íý$\9fÛE\9c/î/«µ\lá°´\12\90\80\94]\8dénïol¬Øæ£è\13g\1f\98Ô»þCñ÷çÿ/\1c\11ÿl«õ\9fj`\9fO .».1ÿLÎPî\95\9bc   \9fåsd \96\9bÏë:Äk~ë¹Ä¡³\7fÖs¿F=»¶½þ\7feDüsÅÿWw\98ÿkkµ\9f>°/äà@]øÐ\1e~\97\93wJd./\e8û5\19Øgrü@}\82c¢9ªCk¿kù\9b¡ýû\93µ3`]>ºëËÆö¨®Ô\93ôã\7fÓ\81øÿÚ\88ø\17\8aÿËw\99ÿYÔj8?z6H(7¸=7öà@>A6\10¯$0.̲Ê{f\84îñn®7\94£2\rÌõ¶ûWö\a>SÍ\92Íʳ \90\1cïõ?\17½5þÈyã+ù\9f7íâ\7fÓÈýÿ\15#â_î\98ÿáöÿ\87r|Û\18\9f:pï?\10=OÎÕ\f
++\9f\19xIo]¨Í×½8\90gÔÖ\f÷çs×òtoÈó\ 2×\9f\r¡\98G÷ÿ\87âï_ÿ¯\1c\11ÿJñ\7fÕÆë¿}\8e\87rrÝý5\9cç\19:\93¹\9aùë¯áçÿå\93øºíÛ¢ãJ÷ù\bÕ\88]ôÝÂcÁØznð\19¯ð¨{oõ\1d\9a³¿ý\Ðë5_xÛø¿zDükÅÿ5;ìÿ\\9eÉrp \8f\9f\f\9c\e\7f\ eLpý­R\87ÓûL\85÷\ 1^\13È)²üðþç)M\8bÜ{¦×\95å\14ZY\bKBlâÐÎù\16\1aZêQg5=f®V´¿\7f/R×%Vß-ºN\14:;fÛûÿkGÄÿKwÌÿm×ÜÎÝx.Pø\1c·ø¸ðÿw\eÆ\7fþ94[Çÿ¢\11ñÿ²\11õ\1fÉкÞ?\eÁú\8f\16÷\9b\rÜÿ_?"þ§(þ¿}=\9fÿ½<¯¥\9d«{\83\92X>×\85ÍëPý'\97û½¾7п~\ 2{êü\1aM¶Âª[n]\15V\ 6Vwe;\9d)\9b[îN\99ÙøÝffÔ\15+¬2X¥1©-ÐW6\8bg_Ð\1eßÖ©W¯/·Ý"v\1a\94eeÔê\ fZY¿Â
++
++[ª¸-×è\91Q[§ÑÖ\1cìB¶ÜnË\0Ï­\0@b[B\8bf¥¢)\01³c',Û»¶7a7ÃBÿ"oÖ\9b\aÏÿ¾Y\17ÿ\9bEâÿ;#â\7f\7fÅÿ\r\7fµç¯¸þú\vVÖÎêîl¨v\r \9cÿqÑ$Öotu#·­ÿ4      Ìç¯öÉ"9\18s˽±)`Û\104/ôð\9eÙQ­µþÖ¼V×½M×\9aÙZ@b¡³Ï¨­ðÕ©UüRÏÒº{\1a\8145Åô\1dgM\19áʶ
++(ô¶Ë ËʪР éÛ×\99\r%,\ 3ÉF»¶à7«­\1eHQ[Þ@Ú;ofÛøÿþ\88ø?@ñ\7fã.õ\7ftq¸¾\7fø\øc\ 6Î\f\99FÎx\9bôç\8c\12õ°¼ñBx>©¿/Ð\9d\rìò?Bs\r®ï\17\1a\93»³\84»ù\9aL\97är\8eö\ 68ûÝ\7fþo\8aÿ\1f\8c\88ÿ\ 3\15ÿ?Ü¡þc\9b[sÖ@îm{ÆR¸fì;\aî\vïè\8få³YW7ª\7fv\88\e\87Dî    ±3\19\87s³nØóÄ\83\96NäÇÿ\98\81øÿÑ\88ø\1fPüß´Ëù?\8bqü9\ 3g\ 3·Oþ\8bVîñÅÜÏñ¹Éê\9f\9cRÿ,\80b\96Ö¡³\0l®ÎÏÇÔÕW,ö\Ûö°<Ël\96§Ê,
++\16I=äó*­\9b\a½MØ\94
++¦­\ 4ê\83\92&VÙÁÖôô\10ÈmÊGOd\r íá£çDYZ7¢°\9dÊimó\1f³Ôâ®\9b{a\89Ýe¡ß²>\81\9d\ 2\90XV\9fM  e¹>MµÍ\1fÔesÚ£¾­\1e8úd©\9b\92\94sË÷Ì\8a\99\9b#òç\16\8féâ\7fL$þo\1e\11ÿ\a\17ïPÿÓ*\16øû¸Â{|ª\813ÝÚ¼\91oZyv\94Yåå\14ôëÍõçÿ\96y(ý9@W\e4R\9b¡»Ï[\99'Û&¬{\84u\1a\13«\11\99Ø)ñ\96©ÑÔë¶\99:\9b®Ó½¢°c\9aõ\11(í4w»¢5\92ÓH¨°â\1dº\1fØÒ@b+Äu\9a\r\9e\17\17Ê!Míðh\9bb,,±Ü{þo\8aÿ\9f\8e\88ÿ\83\15ÿ?Û¥þ³ÕTñò¿Â÷òÓ\ 6j\0\1e3P\9b)0\8f³ø¼½¿×7\\9e\1fwE¿\1f\90\94Ý>\95Ë'¡9\f\7fnÐÖbÖÎ\87ëÅäz¨\ 1å×\b\8c=\83¬8q¾müÿ|Dü¿\ñ¿d\97ü¿YÖõ½Î\1a\98Ë?\18\99\ 6ÖyÚ\1a0\97\fô\e.\9aÄÖqÖ\9fû\81u\99\eü¹\1e\18§F×
++õ$)íÜ\ 1K+HçíàÚ\8fÿÍ\aâÿÖ\11ñ?Uñ\7fÛ\96ñ\ fçñ\9e¹'v͹u\9ePÎå´[¯óc©^qæê±\87\8f\19¨\19xd¤¦L»/ \94\17²a<¹\9e籨Ý\12Ë'ër¸õ£ÑSÎ&~ëE\ eh,_ÔÝs\82¹Á.þ7ïâ\7fóHüß>"þ\ fQüÿr\97çÿ¢\9f\1f\98ÿYô×ÏÜXÿ\7f(? \9co\14ÈÿÕHʯÿ\1f®\1d{R?ßxQ\8búØ~\1fÆÆí\9bòA,µT\91®òö}7}Τ\9cÙ\82b±º\16¼\92×ãç\ 1tg\0\ 4÷\ eúñ¿Å@üÿjDü\1fªø_ºåù_+y\1eI\9aºçû­Wçøçµ\17\8bp\9d·l ^Óñ\ 3{\r\8e\89î\es×yx­)t\16\99\89Ävh\rg}OW0w\7f±æ\e¨K§î\91¥\ 6Z±ÐYÖÎý§is
++­Í5Ù!1íü\84\8bÿ-ºøß"\12ÿ¿\1d\11ÿ¯Püß±ÃüO»þsv´öw°ÎçÜ\9då{úÀ~ÞÓ¢¹ÿÓ@Π%T»uÆcWÇ\19Ý\9aàÉ\83ç~LWç »üôc£sW~\1eÐÚ<Ь\9a7µd\9buÃÌÎ\89Ë5ÖÑÿ_\14E³ÿCcÎlm\9f «'\14ª\ 1¾uüÿnDü\ f\7f¿eý¯ð|ý¹\91Ú@gFsø\82u\81\17õdO\v\9e\ fì\9e      á\9aaU´\9exèÜ\17½ó2t\9fY®[\1f\eý|úý\ 3·×s`=ÏÕ\ 5÷ë~¹³\83C9\85+k\19~üo9\10ÿ\7f\18\11ÿ¯Tüß¹Ãõoó.áúOón_À¹\91{F g°;ÿ×Õ\85ì?g²\81>F2\90÷uÒ@ý\99ã¢ù±3ªWÖ ºó\9f×s\81½z.ÑûúÀ¹Äí×Öïû×ÿ-»øß2\12ÿ\7f\1e\11ÿ¯Rü/\eQÿ1TÿݶFºqaè³áîñ¡z\ 2Ó@¿Áê\89\86ö\85·g\10\9d<p6å±\81ñ\82Õ\1f<rÏu\1d\13\ 4bm\87\b©\8b\91Úc<\9fÙ\8c\91ßwh¯õPmÏ\95=þ^¼íîaO\13÷\19Ù:þÿ2"þ_­øÿë¨õßv®æ¼Õ1Y÷gWôÖrÝùP{»yþ[­Æ3X\17b¹÷ïM½±\9c:ÒU6\1c·´\99\8a±ì\9ce|²\99U]LôóÖ\8fÛ\8dÅ\ 2ç0Í«¶:\9f~£*\13= +Ûè«!§þù\\83´ù<\99\80êäåYfɼ¥\8d÷\v»Ïhd\90Ôí1CU\9eèñ>Ëm¦@OüZ#\aKö³Ñ\89\9dE\9b\95Cë¿\16÷ý\ 3ñÿ·\11ñ?Mñ\7f×.ù_\8b=þm\9füá+\9f\8d¬{Î÷ûä3;HÑûl\84ö\r\85æêÚÚ1\97F×òBgFÚ\1e«Ò[\1fV0bë}¡ý7¶0«Ø\94¶!0/Õ§©J÷9±=àöà\9eÛ
++\83M\11\9f>cÍ\ 1\8fyi£\83ÌV -oT\1f¾$Í5þW\17`^k¤PØD\94íú²©äÅg/P\ fÀÅ\7f\7f\17ÿý\91ü\9fËGÄÿk¶Êÿ½``\ÝÏÿ¶yüÄ\9b\e\fÇëô\81\9a²§\f¬7$\ 3ýÀÀ³À&ð&±\1cðd6æÀñ\81\1a\11~\7f/4\87ì\9fû\11û<\ eÆß¿þÿkDü¿Vñÿï]öÿÍÝÞéþóßæXÛ9÷³#y\ 3§GëÆL»{Æ£ýÏZ\96çî~\11®3tyà\99áö\ 5ôë?4÷þÕ±~¨\16\8fnT\89\1dÕZؾl«7iÕÞm\15Y\8f£¢íôWö»M\8aO®~\81\15\a{iõ\1cõX±Ê\91³ªNl^8µü\80j\99CºV÷¥Û#RÛ9Õ\8b}\82~üo5\10ÿÿ\19\11ÿ\87)þW\Ïç\7fX?\7fÚ]oëu|Ý^¼p-©«'±õ\ 2·î\13^\83º²\1fÿ®ÎÀ´ûܬç\9aDæ|\16k/\91¹úõ¾Û¡ª3¼\12ÿ[uñ¿Uäþÿî\11ñ?}ÇúÿËù\9a\14ZÇuýìP\8e×\8d07s%§ìP¯\eÛÜÂPüýëÿÊ\11ñ\7f¸âÿ\9e\7fÎ\r\9e\râæxBsꡳ|\96\9f§S\aÖ\7f\ e\fÔó:e`?y¼Ï°·\9b\aôÿ¬\9ee»|>ô\13±\ 3?Êdíù¿\98×éÖ\87\16óF\81õ\ 3?\87q²müß;"þ\8fPüß·1þÕ@­\9e\93¢s¥ûBgvt9>nþ-\\arÚïÿåIåæñC5\eCy~¡µáÉvkűº\8f¡ý ~ýÆõ9áQ5\83\8dÿûGÄÿ\91\8aÿ\87Fìÿ\99\ 6Öÿm¿î40ÇÓîÓ¯¢s    Ó®&\\7fþ¯_«of+ªÞºïú\19\13ÓÀ9\82\7fÓ\9d!±~^áúgbý,¾Èy\r\96Á;<Ï×?§~½^ÀÆý?\9bâ\7fÕ\88ø\9f¡ø\7fx\97ûÿbNæ¬^Ìô$\9c\98|¥n̬\9d\ass9{Wïåi=      ×øtçM\ 6kÊwãÍH\7fNãô¦FcnG?VY©\9e\9a~Ô©\9dÛT&vÔ\93\9dÝ`Y×65¡A¹]{z\82'V\16¤T\7fÅ\92\12P]WÖKÓU\9a¨\8bokµ¶£À\ e \9f¥Eb\ 3\85J}Õf
++À6\80Ú>¾:³JE¹\8d*jÝRôõ¬4\84e\aªkY¹Z²V6Îf\12\9aú1i»®¾~ÿ¿õ@ü?2"þ_§ø\7ft§þ¿\9b\7f??ºÿÃÝ7Âû\ 6Î\8aæ\8dî\rÌ\rØY\8en^Þ\7f\ eÙù\9fÁZ¾\8bZC\97÷×\85»}\86þõ\1eÙÇ\17Ëõ\18{\9e¨\7f\ 6e/ï\7f½ÿ\7fë.þ·\8eÄÿê\11ñÿzÅÿ\13»äÿYBãdYÿq½~\8aÛ\93\1d>3¢Íï½ýê8¯nïç\17N\86Ö^b}ón=Æ\12·lÈf\89^vñÕv\a¿1\9dù°8#2Kêmã\7fÍ\88ø?Jñÿ䯸·{®ÃyÜ\17Oâù_¯ì]\97Ëú ý\îeÝÈ\17öæ\86]¾¹\17óõ}ØÃu5º<«\eSNø¶ñÿÔ\88ø\9f©ø\7fz\87ó¿t§«ü<\8fp\7fîÈÈÙP\93\81ýÝWNâ9~\97õúnzdfnÏHèþ\14»_ØõÕôéô÷æºÞ\17û.âgõ\1e\8as\9eBýC\9b\1fÒM£.\86âïÏÿ\;"þ\8f¾\ eç\7f\84êq\85ó?Ý~ük\83s¹7²y\9fC:\ fÜÕ\12\bÖ\fóã\7f\9b\81ëÿs#âÿ\18\8bÿÑ\9bâ?Tÿÿì\81<Î@m\882éjÀgÑ\9a<Cõ\9cÜ\18±\7f®t \9eûb<qd´~;î3ºòùU\ 4kÿ^\91\97^}\16ol\11:¿94¯0³Ý v#©\9bÑ\85î\13éj>h¨þÿmºøß&\12ÿ=Gï\1eÿoPü\8fØ\18ÿË\aÆq\97\r<ÿÛõÚPÞ\98\e\e\86Ï\ 1\7fí$6¦t{Ã\ 6öqÄÆS®¶·¿WÜõ\v\ e˱á¶ñ¿É\88ø\9f¥ø\1f¹1þ\81þ¿nníµÕ?ÿe>«»Ú\80ç\f¬\e\9d\1eÉÿ?m`­ù`´\ e\99Ë\ fºíÊ\98ÑêP\9d<°>}b4Gi\97õ\ 1\97·eó~V&Ê\86\94ê\0*ÞmN¬¿Æ\14Ø#Ð\8e+çy;\7f\9c\95å¶ñß;"þߨøO\8f¾îù\7fºük·&\17>ߥ¿\17kYßó\1dѼ 7Ö\bÍõ¹¹\9fÐ}<4¯\e¸_»ùºP®Ï¢>çar6ÌÖ×ÿ¾\11ñÿ&Åÿ¦\e¯ÿ\13{ýxÝÖæm\8eÝ1\913\9búõ½\96ã\82þ~}u\8f\16kü¡½}Ó@¾\98Ý/Ü\19ôëù\82\13?ï'\90\83\17¸þü}\7fö\14®bó·\91s\9còL×{nUÇËÒ\12\84\9aÂã\96þ\95Út\83Õ\92Ó\0²ª\9b-c\1aµdv¯¯­kY4åAô­3Ë0\9céscIÄ«÷ÿc\aâ\7f³\11ñÿfÅÿ\98\8dñ?{ \1eïY\91üê3\ 3ó\82îìÏ\ 3\ 3õÄN\1eÈý9v \86ÿ\91Ñ<\14w\9f
++õ'\ 2÷\8dhÿa-?#¶§+¸gt \ eÁdSÿÿØ.þÇFÆ\7f·\1c\11ÿ³9ÿï°µmü÷\8f\88ÿ·\10ÿ\eeüýûÿ­FÄÿ[\15ÿ[ïrÿ_Ôj<s`Ü}``/_¶'þ¬?9²\97÷ø\813cÚõÿ\95\1c\85º(7M6Yÿ *\9b­[©e÷Û¾ÀÔ¦\0muFÏhuØ\92B\83z;\ZÃùÄ\8av[®Ï¼)÷\95\17\81s]Ü>áÕ:\ 2á=\82nþ ¸þ´müo3"þߦø\1f»1þ\17\fäÝ\9c\8fî¬@Ý\98²Û\93yæ@nÈéÑúà.\7f \\eö\84\81zäÇDó\91Bõ¨¬\ f3        ¯)\87òvbë\ eñº²m=ðйå\8b}\84ÛÆÿö#â\7f\8eâ\7fÜÆñ_ þsn}¼ÓöÄ×ñ^Ö[3ÒOlæÎ\ 5
++Í     n\1a_GæÎtEά7¯\81gig\ 1ÙxKý1;\14ÈN\vªJ\8dØ\9a\12ov"\90î[³Ê&vJËôC}ªfF¾´\12Î\85ºmÖ}·\15\9fl¦î\9dÍôÚ\Pn\a\85­\1aTvâGÒ¤uÎ,ÝË\92?uß°½\9b©ÞU\9dZN`UY\7f.·¯Tç¶,Ø\9c;\92«[8°F9¯ò:in&v\8eÐu¸ÿßaDü\1f«øßqcü«Èºû        Ñº\10î\9c\8e\9b¬æòÌÜ<m8OïÈ\81óbúu\1c\96÷þË£ó\ 2ÓÀü¤\8d5\17¹_í8/4W°~_\ f\9dÙ²Èß\89\9cí6*OÀ\8fÿm\aâ\7f§\11ñ\7f\9câ\7füÆûÿyÑguè\9cÇåÙ@g\rÔÿ9µ\7f\1f×U1\9bDò<«y\92NÂuCÚ{Ñ\89\81ýæ³\95\Ãð\1cuüó¸Å\9c\9f?\87<+òv/÷úu¼Ø×\99äzº×ºOè~\97\15ºÕLÖë\ 1­ô\e\üoÛÅÿ¶\91øßeDü\1f¯ø\9f°Ãóß\9dñ\12Úÿiy~¡½\1fvýÇò\ 5\83ý\81Å\9aði\ 3ëϧ\fÔ¦«¢g\13\85r\rÛùâÀ:\92·\8fl½ïØí)\e\9aïíÕ\8bwë»Þý#\98\178\14\7f\7füw×\11ñ?w«õßøùO.Îþµ¥çÜ\98mU_p\9agKÒä\85\ 5Ï\7fÚtýßmDü¿]ñ¿û.×ÿÌÍÿ\9eÝ¿\1fg¶Ïç`t\9f\7fè\\80å¾Ð\13\ 6ö\86\1d\1f¬5áòLÖëû»|ñÐ~¢M}ÍÐÙ-\913\ 2Bû¹b{Gcûþí¬Éln\8b\ró6?rÓõïÇÿÄ\11ñ\7f\82â\7f\8f\1dÖ\7fÚ\1c¿l`_ÀÕÑñø4P\8f§Í\19¿rp] \cî²Þ\9a\81;\ f0TGr­^¨\7fV ß\1f¼>æ\ 5Æ\9e\17¼uüO\1a\11ÿïPüï¹Ãüϲ¯vz´&Ó40V/Ôg\9f\ 6jqé'\91N\ 3ûEÚ¾A»ö\13Þc~qo\°~V\èì¶C°\87»ýüXî\9eîW]­\81Â\ e£µ(ë¹^[/¯\9c\ 5kH\ 5û\86~üo7\10ÿ{\8d\88ÿy\8aÿ½w¾þ\8f\8dîýsû/Öë;N»µ\98õõ:7\7f·Ò\8fËÛ:jÓnM¸ÿ\8c¹8\9a{²þ|uù\9f\81û¬\95a\9f\15Í\99Ëe´fG \96ã¡Þ\ 3¸\88ÿíºøß.Òÿ;yDü¿ó:ôÿö¯®ÿf³        ®ç~`)©Mt\95UU\ eÅß¿þï7"þߥø'\e¯ÿ¶ßõ\18ÿ¾¬\8b3ÔïÒ\a»\fõ»ÜÙ^î\19ß\9fÛïçö.×oûÏñ¹\1e®m?ãÒþ=ÀæU\ 6úÚµ:`\91\8b\1a\9f\81s¿f\85õÿlr»²G\86U     éj@èæ¡þ\9em%Ð\1dÂJy47\ 6=ºt\8f·ç\7fi\a|ê.\97ÙïXþ¿ú\rI¥»\7fV멯7 \11sS\ e°°"byik\ 4Þý\7fSüg#âÿDÅ\7f¾Cþ×2W¯ý\f\84ëÿ\;\89\8d¥Ýþ¯PÿÐåÿ\85Ö\r\82ù\7f«ç2®Ï§\8fíǹ1þ\rY\v¨ÉUôã\7fû\81ø§#â\7f¾â\9fí²þ·Èã=cO¼ÿ}j¿\9f\85\9b\97      \9f\ryÒ@í×\13\a\8e\19È\r¹&:?¼i\\1eÊ!\8bä}\84ê¼úg>Ú2\95­*̺\1a/+ç\94\87Ö6\üoßÅÿö\91ç\7f9"þß}\1dê?¬\Ç\99>¿Þüox\1fw{O\7föJÿ\7f^ºs\1a×÷ì\1eê9\96Ðþ]õ¿f6Ùn§·Û\ 2\91b`»xÒ\99õáJ+ñfå@R=\88lÉÏJ»ÏgÍÈ­éhÚn±ymi¾¹\8d!¬¶`Y\15Íä\9eþ¤j¾Vn\95Ò-²i³\12¨\a@eçË'¶\81\7fÛQ¤çQ>_ÙK>³\1d\ 2Cñ÷¯ÿjDü¿Gñ¯7>ÿÛgì«W\9eͳ,\94ÃíÎd\8e\9dÇàòõÖk\ 2M\ 3{~Û:­¯ì÷\vº½\a¡y\9bµú,«gõ¶ç1Ûs<±ûPf\85%*õý5\ 2×EÚ,
++ê\ 1aY\81v\b\9f\86b\95\15\80×\18.ÉR\e"4¹\80ºÄmè\98èá¢\8fù<)ôwk;л9ü©n\8eõ´\ f\82nð6¦(ÓÒ\86\ 2M\ 5ºB\17¿\95\bµ¿¦GEe\99\80VòOw\85Y³½°)þ\ÛYRÅ\86ëß\8fÿ\97\8e\88ÿ÷*þ_¶åúo¿V\7f;f{ÆÊçb¾r\8eo¸^O»\ 6\1c:Ovèú½>ÏVõëüØÐ«9\86¡¹3è\89^6Û¸\14\ e\9bȰ:\0¶Ý'+K[ô\9cÙ2\9eu\1e,ÊzìÛ9Áê\15Ôe\93àÙìü´Þ\84\9e\11µ}\18\ es;T¬°Q_sp@eÏ\8fæ@a»áWú\8cè;\87Æ\98ÛÆÿ\94\11ñ¿@ñ\7fà.ù\1fÝY\9e¡õ\9fö\19ßÎã>xå\99\91\ 2\1e\17<O*TË¡ý\9c\7f~/ö
++]ÖÏ'èêø\86æÿlÞÂÏå\88\9dÇ\1aÚ»\13\9a\ 3°s\9a\9a5<[ÄͲ¬\9cÙZ®>\eÍ\99p6wÜvúæm¶\81>Zv\10\88Íý\14v\8a`\9e7¿ßÍ9¯ö\ f\8eÿ\81\11ñÿ>ÅÿA»ìÿ°\8bÐëÇ¿~5\8f§;çµ\7fO_®é]\14xvÌWö\87o;¦\v\8cíü½\18êöë~¯nvm\17²Æ\8duV[ÙP½´\eü¬9®pf\9bôJ\rÜì\86\9d»\19¨Ù°£¶ÝÞz~ëþ¯~¨nÜv´cÙ¬ßë¹®ËÜÎüÓ=^CI}½Êfq­òO\93ù¯;Bb\v     væxi\87LêþPÚmÉrIì³PÚ]H\9d?;|\c\84ùbN*O²mãÿà\11ñÿ~ÅÿË·Üÿ\17:w)¼ÇÇÕ\86\r/Zýw]\8cßÖÿlÌÝÙ oì=ó­FKð3Óí5]ï\atû*Cu\fÍ\91|©uùªBÿ\97Í\9a\89X{\92Û\0O\9do«Ôf\8bU\96«¨ÏL1·á¡\1eþ\89\1e\ 3V§Ñj_Ynx­N°\9eô6\87 ·Þõì\92Ú\8e\ 5­rÛÚoå\82í+ëûÏí@R\9b\9a.¤å\ 5ÍëfÛGæï1öϨòã\7fÜ@üO\1d\11ÿ\1fPü¿b\97ë\7fQGûÌ\81u¾3¢9~nÿ×ú½y\1aØÿÕ®\ 1\1c\88Ö \ fÕ\7f_\9e3\92\fä\12\ 6ê\85.êÌ\9c\10=Û:8¶ðÎmöòûÜù\1eþ\9eÃ\95}`±õ@«#îâ\7f\\17ÿã"ñ?8"þORü¿r\97ü\9fE\1eO;Ïÿ\84Õ\\9d¹_³1\Ïñµ\93ØÚ¡Ë\1d\1cªÑäÿì×®ñ±ën¡µßB7\ 5Û\15bG»4;½\v\9bSJ\8bÂÖt2ë\ 3Z÷Ï6n¤EÓµ«l\ 3\88%\85Ì5êÑcͶÿ«ã¯«½nz¢3+3¡!b³\1dÔú\14zcI±\9a\ f´mü¿jDü\7fPñÿê\rñß\e\88¿Õã ç~µyAnÍîÅ+×~ÙÕjkïï¡s\ 1§\81{|{ÆGÿL`ÿz\»\ 6ÝY\e±ó÷t÷±}Þ\1cì¥[¹\1dù\9bؼ\8bF\7f\1a­[µ\ e[Á¯­\9b\9fY\8dßæÁo\1d9\9bìkºýº\7f7\a¾ÚÜ­MñåES\1dÆÎñ°B z'\95\rU\8aÒêÇÙ:`3C\98[GÑÊ\8eë\ 6a«B¹\95\8aS·8Yæ\13.j\ 3m\eÿÓFÄÿ\87\14ÿ\87m¼þûã?7\9f\1f:ÿI?´y;683\98\e\14|.,òÉN\8f¬5¾1Ú\97\18Êã8\8c\9fõ~ÞOpÍÁ\8fÿ\1d\ 6â\7fú\88øÿ°âÿð\1dê?¸\9c\9cày\1e]Î}èYnû\86]ÿîùþ8O\9dtw¾k\7f\8fçËz÷\ 4W\13j¥öS\7fO§mç¯Õ)Ol\1f¿ÍÒØ3ÀÖ\8e\9aûµMèÙ\89Þ¹Õpª\9aa½Ý¢æv÷Ö\ 3Çæ±u'°ÚÞV\11ª®máÆRÊõ^mg§zû6û«\aIe\93\ 1Öå´¯¤\8f\94Ý?ô­K=y*ÛìÛÜffóÚÛC\10Þ/°\92Gäâ\7f\87.þw\88Äÿ\11#âÿdÅÿ\91»ôÿôÃ\8bõÿ\96{9\ 3û<\17õ:«\81:¯'D×\eB9`mÿpÿÀ\9aÂt \ f8ÙX\ 3À\eOº~\9d?¯?´7ÁÕ|\8dÕ\13\8dí\vµ²\11é¶ñ?cDü\7f\7fÔÆø\ fÕÿºd\12[\93\99îiW\ 5×k\80o\1aÃ\1fÂ\9aÚ7Êú_\9bâ\7fæ\88øÿ¨âÿè\8dñoÇñáZ~oè÷å\16{@Úûvÿü\9d\97ö×ó»s\1a¦{\9e1        Í'.ò2׿È\ 6Îá\89íɸÑÔ\ 2ôã\7fÇ\81ø?fDü\7fLñÿ\86\7f.l~/|\8eó³\ 6æm\9fÖ{¦»ý\1a±¾\9cÛ_\11:Ûwä\99Ì\87\9f;vñ¿c$þg\8d\88ÿS\14ÿoÞeþ¿\9b'qû9Ös<Ý\9c}(/dÚ­\eõçù/ëß\17\15Þx2ô\9cÞÛ=\83Öǧk\9f\1f¿æª??\1c\9c׿\ 1s=b9¢[Çÿì\11ñ\7fªâÿ-[\8eÿV®ãv+kpü§±áÊ\1eßÐ\1a`¨6 ®§E-ßð\9cá\15½û\89\1d·íÖyÖÏ ÛÐÏX?oÍêºÌ¬oa\8by^-V}bêÒÆþÖ\9f¬++\a\98é\92OÒfϨ\8d#+ÛTZèÞ£ÇùÜJ\86ØíÆ\92¸¬^ ¾\9cõ\ 5\9bis÷\99\17mßÙ[\83l¿¿u\17ʶ\82Lr\1d®ÿo\1d\11ÿ\1fWü¿m§ý\1fm=¾àþïnl\10:\ 3²=7òô\81ý\1f§\rÌÉ\9e\ féäÈ>´\93"uà\8f\ f\9e[1\r\9c1ìú\1f\91>ÈÊ\99\r\81}\ë9ACûC\16}ÿërý\9f3"þ?¡ø?~\97ü¿ÅøéÜ\81ú\8fçl¬\r\1eÞ\a|z\7fO_V&íçã`à½ÔÝý&°¯H½êl\12ÞW´<\8fv\1a=W~}l\12©\ f»¾¿À\8e{¶¿dÓ¿6\1cÎ\8bîü Ë\17²Ï\84M*Ø4\99z\91ÅJ\1d ¶\ ed3ÎÜ6þç\8e\88ÿÓ\14ÿo\1f\11ÿi Æ{{ÎÃYÑý\9cÓ.\86ýÚ\7fí\9e¡P\9d1\97kr»ÕÏDwϸ¤7ÎX¯ï4Pש\99\17Ò%Ø$^W¶R[\1d\9az^\ 3uÿÖï\19½øßi þO\18\11ÿ\9fTü¿ccþϹ\91\18\9f\13Í\v       Î\vwgr\85>\eË{üÁ=ñ5£S6\9eý\17Þ\87t\ïkÖuY\ 5ëÂFÎ\8c\89\8c;låGý9ë,Ú*SpoÏÊÙÏ\81µ¥è\1e`\17ÿ;uñ¿S$þç\8d\88ÿO)þOÜòú_¹ÇÛ¬Ì$|Æcj#_/\96¡3\17÷\ 5êu.×\8dÛ1åsý?ÓÕ\98\rå\86Y¿ÌÒêt½æ\95\15\ 1±õ\98f®¿Ð\13Vý6\ 5 µ\12<v=kügS\ 5º
++í\18\13ý§ÔV\9bÙRÄ­£®ëÙf\8a­\94£U\a¯u«\9877tEX\83û¤Ês\e¬×Í(S¿\9dÙ|Sn\e\86j[ù¬\aÖuCçEæ\96Jl\93Uö=Ü\99 º¹l\1dÿóGÄÿé\8aÿwïÒÿÓ\0§\98Döÿ6õ\18\ e\ eôñ^:0\9føÂèÜÐZÌotóyCgÊ\86jFl\eÿï\19\11ÿg(þß»åþ\9fþXí¸\81³·÷\a×þܸ¯\7f^S\9b+ЯëÝæ    Ü\7få{äÕ<~/H­\83¦»x\93\85k\97a\9e+d\85¥èÚ\93ßJ±\16Í\ e\11ë§Zâv©q¾nìu×w[¯å\1dÌ\e_]·;4ãÃmã\7fÁ\88øÿ´âÿ\ 3\7fÌ,ßÍ{Î\87Îx\fí\rY\9eñ{pàL¾~mx«(6\rÔ\85\93½<\9aO\1c:ÿÕí\1dóï#×snqô\8cq¯/à\9f\ 1ì\9f-\99åÍýayþ\9bÅýø\81ø?iDü\7fFñÿÁ\8dñ\ f\9cÿ·Ø«uR´îêÞÀ\18»Í\eé\8f±ÝY¾{»õ¸õó\18ݾÁþ^Ã~m\0\97\7fèæ\85Vî)eâÖ\8dSݵk\9bq³JÐ\8bü»ð\1e?ÿlÇõs\82ýyÅõý\84£ö\9e¹ø\1fßÅÿøHü\7fhDü\9f©øÿð\96ñ\ fÝ\83Ý\98-\94ç\1d:ã}y6d\7fÎÎõ×o\b\81~úúÙ\8d×GN÷¨gѶñ\7fò\88ø?Kñÿ±-Ç\7fë×Qpü§\8eW».0\rö\19\\8e\7f?ïó\95½ùàöÜïþ9QþùÝkýÁCyVË¡\9e\vîÝ\93\8dÿ\8f\8f\88ÿÏ*þ?1býg¨\ 6\84\9bW\v÷\r&\ 3k\ 3ý{}[ϧ¿G|y\ 6üÛúëÆéle\8fg3¾ÎíN\9cåî\8c÷µ{y¬ÆÏb¯Ð\rx\ 6ôÖ×ÿÓFÄÿÙ\8aÿ3v\89\7f·.\17\1aÿÙ\9a\8c\8bý£Vç\86\92Ù\86\9c\e·þ\13\9eO¾z\12\9fSº*0nt5\ 3/\ f\8e-üµÁÀù=+çòtë\85³¬ÙÕ¥;¹Ý$²¶D¤¥\8aÎRKíÌ\9b22Vó5\997\eJ3=Ù\vÛüWت¯å\ 16\vÒú§V\89Ä6+¦óèÚÓ¶ñÿé\11ñ\7f\8eâÿ3»äÿ-æ^\8fí\9d\raýåv¯~»Æ¿¾ÿW\9f§I¬Ï¸\92\a´Voÿ0Û«[diÚT\98-l_¨å\16¤¶é§²\1a´\95}\99Ò6\94ê\ 1acâ\99­-Ûq"Y3\8dl%\0\9bÒ.÷ÒrË»ugû-K2/6<ÿýýßÏ\1c\11ÿçîºÿÛ\9e¥Þ\1a\9f\7f-+hõ4pþ»\7f¾OxÏp\169ÿùøh\9da÷ù\vßK\8e\89®M\8dè7öï       áz¾±3¡\17û\90Cùªú\1c\17Í~\ 3\8dyüøßyàú\7fÖ\88ø?Oñ\7fÎ\96õ\1fÂg<·ÏäÐ\19@±úk.\97#\3¶\7fþ\8f«'àö\1a\86æ!\ 6âµ\18\9dÕ>9\8cÎú        ®M¹øß¹\8bÿ\9d\7fî\88ø?_ñ\7fÞ\88ú\8fÁó\9f\17ûÿÎ\8e®É\fÍ\ f»º!ëköÁºÀÝ^\ 37\ fqÛÕ±f×ß8!º\7fmowÿ\88\9d\7f¯¼jÊ\9aôöi¸ýZM½\90,Q\87\v{êë^³V\87 :ÿ»6\16]yþo\8aÿóGÄÿ\ 5\8aÿ\vvxþ/ûÝgô×ëò*-½üï\95µ\81ÔÕí=y Ö÷\89\eë5\87ö\ 1¹gAèì¸P<m/ÂÞn<º>ß\14\9a/ðæ\80\965%¼=G®Æ\ N¸u\r
+++\0¡!c±8kV\9dCÝ¿,_±ù\96ëã\91mãÿÂ\11ñ\7f¡âÿ\92]úÿÝYÍ¡ýÿí\99¼§õ¯ï*éÎ\8cÍ¢k\7f.\8f§_\e \7fö\87\95\17¨Aær>¦\81³=ë¦\ 6ýU\93Øgh±Ö»\8cëb\7fI,§£9FNã!·vïj\ 2\0õühö\1dÙ
++\9a-?&yw®ØÚYÄ+ñÿ¢\81ø¿tDü_¤øÿÜÎûÿÎ\19Èý9cà\9eq zÏp5Cý\98eM­¹X½îc\aî\a×Nâ\9fÁ«£ù¤.ÏËõï¢ñZ~Fbõ¿\9b±Ã6׺ׯìíÿû¢.þ_\14\89ÿÏ\8f\88ÿ\8b\15ÿ_Ø\18ÿÐø¿Xä~\85çwN\1f¨ÇuÊÀY,í<àúÞ°à< W§\7f±¯êðÛï\15:/&VCÌ\9f_\9al\eÿ\97\8d\88ÿK\14ÿ_\1eUÿ÷¬hnÀpþÇ\81\81ó\1a²è5\1dz>´{J\8f\eØ£:\89\8e\81ù&«GÙ}¦\=Èø\99\80ý:\91nmxå\19Òí]\bå\7fl¬ÿ»)þ\17\8e\88ÿK\15ÿ_\19\95ÿ}ÚÀ\19_íÚë\13WãØÝ\1f.\9bÄó?Cs¹.W3°ß¬«\e²aÜ\1eÊÓlÆ\87\95MÝ$v"l¥kÑîȶgÛö\8d\9f¢bÉä\96S\92fµ-\ eØV\0\9dg\99mÝ,lR¹´\94\92ÊþÆÜö\8b«»Z6\89¢©ÍïèvQ§¹m\18\98\f\9c\ 5\16ÍÿÞ\14ÿ_\1d\11ÿ\9f\7fm§þ\7f^µ}¬Ë"s|¡ý\1a³n\pqtþÏÕxYÍñn\8eC[Ô\8c\b\8dÿÖó\82ì¤\9dY]\97Id.±\9b\839Üæ\14Óf\8b\92=Z®Cü_>"þ?¯ø¿bËûÿíWs(ºX\9e>\90\93\7f0r\8eß\81\81zRí\9cQhßÐõ½þ{\ 3îñiê9­\9c\r¸º' )C0O¬>Ü\?<\9bNÌWâ\7f\97\81ø¿rDü\7f\7fÕÆõß+#×x\9b¡yæÊÚ_Ýå\85>%º\1e·oÏù\93X~¿\9bc]Ë\8f__·³²©º¡*Bó¦O­[viÙ\9aê;U6Ó®\1fg¦þ\9b\9d¹3kÎwS\8f¤²e\18Ë1²E[Û\1eX$un'îZÁw\vÙáv?pñ¿K\17ÿ»Dâÿê\11ñ\7f\99âÿ\9a\1dîÿ®\ 6\9f¿ì[\9d\12©ç×ÎÕ\1d»Òÿ¯»ûÉq\ 3yÜÓþ\C6_Ô\e\ f\9fOÝöAÖ×!¼û@ð,ðÐyÌm?Î\92}gîÌïõy;E¹hÎ\96·úpEQ$\91ý\85ѽ\b~ýÒmãÿÚ\11ñÿEÅÿu»ä\7f-ÎyI\ 6öã\9c8P\eº\7f&\9bå\»þ]xÝøâÀ\1ao]\96[öý\ eÑÚ­\9e\bM>ßJ=çn\9fϨZTÛÆÿ¢\11ñÿ%Åÿõ;Ôÿ[îÇ:{O¼\9fwp`\ eàÔ\815\85,z¦\9b\9b\aZ9\1f>·¼â~]\10«\1f¼·»g¬ç\92º¹¡P=¹µÏ\8e_»-\94ÓÙ\÷\85>Öú(ÚsÇÍ\ 3®\9fû64îwýÑ\95çÞ¶ñÿí\11ñÿeÅÿwv¹ÿ/úëg\fÌåµ?ãõú\1f.×{}¿®ëgôkC_\16Ìß\98\ 6Æ\18usÆà¥ý1â²^\90_3(\94÷ÑÛ\17|\88ê\91\84æ\ 4WÆ)Cñ÷×ÿß0"þ\17nµþ\1f\98ÿÓ­Ë?\93m=ÆÁuùE\1fÿ\98h>Á¾@þï2×üªèØÐ}¦úçM¾+\9a\ 3<\90\a¼>~ô×\90\9bµy¯O\7fÈêÕl{ýÿþ\88øÿ\8aâÿÆ\8d×ÿ1\ 3g|L£\9f\r7Ǿ2odÃÛfÝ5\90¯\95\17\93Ð\19pmý¿+\ 6r\ 6.\8fΠ      \85òÿ\ 3óÆËýDmÝÀæ¾?·\19¹¼)ÒXûõ\0n¨q£\1fÿ\13\ 6âÿ\a#âÿ«\8aÿ\1fn\1cÿ\9d\1fÌñqûB\86Î\85í\8fýÏ\8eî\19
++æ\ 4,Îv?0p\ 6M6PûëÄ\81g×þè¼æ¦¹\83õ¹ºÐYB^\8d°æ<\97\81óàý¹æE\1e\90\8bÿ      ]üO\88Äÿ\8fFÄÿ×\14ÿ7myý\87j¼N÷<¹Í#\\89g\91ííÆøý¼\8aó&¡~ÚZ_}¥VKby3¥Ý9guÙÔà´ô   ;±ÍæT\13u\f+u\1f2Ëß±Õ\9cÔ\96\184\16W8\9aû®\1d½>K\8aZC·ÒâÐ\1cý2·¥Yݪ3;hY\97­\9dº\9dX!ø*±Û\8d=Vl\14fÕ=u5ë;ê\eh¬y\83Ö\82Ý6þo\1e\11ÿ\97\17\8f\9aÿ?+0þË2¿þçêÚP\9d\ 6ë\ 2®­\r\86ÆxÓÀyÎ\1aJ\95n\f\1aÎ\19;~ ?åØþúµõÐ#ù"kg\aèÓ8\8fõãÖóÌ\86Î\f\9aY-õ¡ùÿMñÿÓ\11ñÿuÅÿÏv9ÿIW\9d¿Æ\17\9e\e>5Z\ 3À­ãõÏ\ 6í¯ãµûC§Á3C]\7f1¼7ýÚ\81~A¿Î\90Û»2é÷\r\9aýØ\81ó=C{C£õ\9cbó¼Í^\ 2K\1e(,\vÆ>\ e³¦S;\14\7f¿ÿÿç#âÿ\e[ôÿCç\7f¶×Ý9\ 3ç\ 2\9c\19­×îjüöÇmÃó\85C×ðê|@YäÞó}(Æ;®\1d´¹\1desÊ\8f\95\8aËóxNWhþÏ\8d?ý¹\85\95Úÿ~ÿßâ~×\81ëÿ\92\11ñ\7f\85âÿÖ\9dó?ú¹_v\1f÷ë8\85jêìíîãý9\99\93£uæ§]\9cû{\82ö\ fÔ\1fëçöÍk\97\7fxõ$¶nåÆ\85kk46fk¦òÝ=!¶WÈÕo\8fí\ 1\8eÕ\10j&$gm\ e¤\1fÿ»vñ¿k$þo\e\11ÿW*þoß¡þ\8fMc¶×ßy\ 39\97í|mÿܰ¡5Þ\vûkCÝÙ\8fCýñµ3\1f×Çï7\9a3¿\16ç\bfËó\1f6Åÿ/GÄÿU\8aÿ_m\1cÿ\9d\10\99ã9n`LÖÏÅ\9dg®fx`þ§;\17toh>¡¹×ôç\12\96ufúµ¡\9a\9aÿ^~ÂP?.µ\84\99dVÏSw\81:Z\97\9d\a:ñÆu\87d\ ehÛø_:"þ¯Vüÿv\87õ\7fWã78f_Ô\\vÕkJS?\axe~P?\96ÚË\r\ f\9f\e{ü@\9fãÈ\81}BW÷ï+Ý^ôÈ=¥·\1f<²Ïgý¹í>\1f\16ú´É/jò\ e«¡\1câ`­â¡øûý¿w\8c\88ÿk¶\9aÿ='\9a«?\rÌç´ç<ö×~2Ýø&_Àº}\9e\96\ 4Pªó0kÎ\17ñïCkû\ 6¶½þÿnDü_«øÿýÎç\7f·s9~\1d§Z÷Ì}{Î\98Är\ 2¼\9fEt\r<³}àe\9dÔ6\9dc¥¼fV-Ù6UZ2®®&=T-ÉÒvTÎm»}Ö<ÆÛj\fú`Z¾G³\1f¿ÐýÕ:äVñÉ*vZ\atnµ\9dõ\0HmBV?ë*·
++aÍíyfÛ;ì&\9eY5/\9b\8e±mývK¯*Ë\aÈí+é2µ
++\81\94'IzC\9cÿ½éúÿ\87\11ñÿÍ]×\7fÖêü\85s|\ fFsC¿@¯ÿXîg0/xÛø¿sDü\7fkÇñ\7f»\8f3Pû·Hçí³ÿ\9chßp\1aØ\ebë¿¡\9aPËñÚ\81èy!7\82¸»s@ü1do\9d¹ëK6\ 5\83®Ëøï²\11ñ\7f\9dâÿ/£Îÿ<³ß7Ô¸©½þÛ\\9eç\ 5ÆØÁ\\9e®¦ÄÞîL\89õ=ynܸ:¦È²*<?³¾_ÏÎ\81\9aÙ¸Ìzå3;\0Ôfãk\9b¾³\15`õ¸,M0³9\1a«Ü\92èQ¦§VÒ\f#gº§éN^Ö\96\16\802uå3«Öa\19\86©\9d\0\9c[MA+\1eU·Ù\83\95\9d
++f\7f»\19lZýØ´²M\fv\ 2i±ÈCN­
++H3õgÝ\ 2\9b\1dÍ{ç\7fnºþÿuDü/Úêþ\7fvt/ß4°ÿÃæ\ 6'¸Ns\89¡=f~üï6pýÿÛ\88ø¿^ñ\7f×Nù\9fU\91xë¼ëÏ\86i`_H{.Ä\81\81{|\12Í3suÜûkÐm¾x¨þÈ\86\9fû¡¨ßáê7¬ç/û÷ýÁõ\81Ä\8a\8bUÉJþçݺøß-\12ÿÿ\1c\11ÿßVü/ß©þS\95´÷ês\a÷\86\86Îqpó?á¼ñkûãô<íê   ô÷í.ç\13Úy\9eÐ\99\92Cã±Èù\90+cö¹=Ðl^¯(³C\98{¾¾î½uüÿkDü\7fGñÿï\8dños«\9e¹\12/·Ç£\9f³×\9eñ×\9eýÓ¯\19{Á$Ö_X\8fMäÙx¨k°Uµî\a©>«ö°ÎfIe³¾³r®N{iu}s»²k«éh÷
++\9b¨µÊï\95ÅÍÒ}s\9b\85\95\ 1]áv ·\95\ 3Ëí<©yóy´"ñõ¬\99ë·\9f\93¥\10ÔM6\81M\1a&6ÿ£\81ð̶\ 4¬Äÿî\ 3ñÿ\9f\11ñ\7f\83â\7fÅ\ eõ_\96ëõ\81ý\9fúiûk@ûW¯ó¹¿6\1cîS\1e\188W6ð\8cèî\ fn\9eº_Cø¸\81|Ãc÷ÄÖ\88·xn»\Àõ<Òõ{\86\9f/X×ö\17m\997««¡ü\0\17ÿ»wñ¿{$þï\1e\11ÿßUü¯Ü©þC\9b\93\11Ú\ 3¾|\9e÷k@éßug\83µ9ºO\ fÌ)»óAWæ\14²,x>¨Õ\1a\8b@\r\ fRg\÷çyÛ_içZ«¦2\93ÝögÖÕ²ÍLEÑî¿UO¬®¬<ke\8f¤Ä*GÎ\9beúy³\9f'Ïm&gn{>-ç»h&\85m\9eÇf\94òBß½²ãcm»\92Íè×\99í\f²       \91")­/ o¥{@»§ØV\9e\12;cÖ¶%\ 4Ö\18·\8dÿ{FÄÿ÷\14ÿ÷îrþ·mqõúÿý\î~î\8f\1em\8bºðá5ãS£ëõn\ fJøì\87dãZB(o4t6\90å¢\ 5ë\ 5uµ)#÷\ 2ÿ\1c'\7fî߯÷\1c\rÌ\ 3ØC,µ´´mãÿ¾\11ñÿ}Åÿý»Ô\7fZÔx:/º\8fßåP­Ï\e»þ_hïÇ´[§ñÇ\rU]$.¿{½.\8cËý\rí1
++æþvg\93®ÝÇý½;®~\8bmÌKíØh«õmçF×Ë~ú!\9bóõj\ 5¬\ÿ'\ eÄÿC#âÿFÅÿªQç\7f\9c;P\eðôH\8e×iÁÚZ{»{C?'<\vÖ\12Ü\eØ\vÔÖ\89\9fFjÅ\1c9p\8eÅ$x/XË\ 3\8bÕy åyÄÎú\19Ê\11\89\95ó?Nìâ\7fb$þ\1f\1e\11ÿ?Pü?2¢ÿ\17?ãýÔþ³_ÏBÿ¬\9eÐXíºÖñX\9e'}mt>1\98ë×Õ/Þ¢\8f7x~s¨þGdL\99ª'`\vþIa\ 5\ 3'«µB\86ú\7f\9bâÿÑ\11ñÿCÅÿê\1d®ÿeÿù¸\81:¿Ó\81}|m-\87þ³á\85½µCWÇo}|\18©µw(ïÍë{ú\ eÕ\9eÒ\95ú\9f\9bâÿ\89\11ñÿ#Åÿ\9a-÷ÿ\86Ïø\1dʽnçæÎZéÿçݾÑ~\rPWSÎÕù\fí\er5@Vú\8fu\9bWäúbsû»\8a\wo\8eíãÑ\95i[ö3ÛÙ¥\81Ge{÷ms\8eÕ\ 4-\15\12\e§Yüu\8dÛ@ÞªAÙ\9eÝÄ\96ª\9b\f]Ë×Íì·,\95£Ô#@_Þ*OyùߣÎ%Þ6þ\9f\1c\11ÿ7)þ\9fÚ¸þßÏÿÑ;N\82ç4&ú\1c{ýõ\95\1a\7f\85«ï\18Ú3>ër\86\8eï¯'kð4óî5«ã\83y]Å\9e\r\8bú\9f×ôú\8e®þç¦|\8d-êzÖö\80/¬êÃlñ\9c׿K\9b¹Ã¤Î\vK\12·Ú\90V,¨ûwväw³\ 2¥ab3_PÛ{\9d7\aM[ª¡m\rÛ:þ\9f\1e\11ÿ?Vü¯Ý1ÿ#\{y¶²÷·\7f\95\93ø\9c@{¿Xyöw}¬ðý¢=\17,X3¸{>­Ïùwý«öùQ«\17gÇ÷Y\81\8f|\12\1d\93ÇÎ\84q{¶\ fuþÇ\17+î®\85â¿ø\ fßÁ\9f(þ{önºÿ\9f8PãýøÈ>¿ã\ 6æ\ 5'Ñ5ãi \1f§\1fd9\rôáÚù\84«¢×¶[\13\bõ[Ýõ\1dÛ\8fß]÷Ëܬð\´¿oïz_OÚ6þG\8c\88ÿ\9b\15ÿ\9bì½îý?ëÅ\16^\9eGh\9f\87˹\f×\7fëïÿ]Ö\7fëïå^\9e+wEd\1eàÒÞýÆíQZ¿§\87öÚxãþÏW]¸\95:\13ú\98l\1dÿ#GÄÿbÅ\7fïÆø_\10=Ë7Tÿ{®Û\\12Ë\rYÌñ\1e\8c\9c)Tõ×\f,¿b²<\1f`}Þ`_à\8wÆ[hþo\99\87~Â@ýÒ~n»-Ù\14kó~e\96Ôëu;½¦[as¬pQVU\19¨5\10Ìû]¯ÿ½)þÓ\11ñÿSÅ\7f߯ø\9f\13='7x\8e÷b\ fx{\8d\9fïýYVe\95»/¯\«yÕìñØ\e83 \9d\ 3º¤×ïok?½©\7fÿïj\85/îñm]îõÚMmí\9eÊæ÷\8bĦi¬ï]v5[u)\96suóæV\11,\9d\15\96Ï_©\8b®a\9cÆù6»\9bTå¬LôqNÔ{°Ó£ìXàZ7\81ºj\1eøM=¯Úº\8b\89\15\8aµâ¶\10¨ÛHÙÜ<íSaÿ¬Z\9c\e¿~¾°\1fÿ/\19\88ÿMGÄÿÏ\14ÿ\9bm\8cÿU\ 3k5\97÷âÒÖå¾´?\86ëjüº¼°Ð\98q\1aÈ\v³|ò}Ý\9aPh\8e\7f ÿîæáý=¹¡z¼½\1aÞ\87Ã\1a\91\8bÿ\97tñÿ\92Hþ×1#âÿç;æÿÏ­¬r\13¯¶_¾^¯ù0Ϲ:,ëDë\93ei\82öíf\99·ÿ'\14\7fÿú¿å\88ø_¢øïßåù¿\987??òL>sàüç\ 3\ 3\93úû<\93f8´Xßï×\869>:/0\r\9c5Úî\e\9fFû-\eæ\83×÷\80ûucì4ñ\99å\80ØþÞªYÿ\1f\9c«\8c\9d\a²òü·¸ßc þ·\1a\11ÿ¿Püo½eÿ?<_sæ@m\803öÄÇì§\ f|¦^Öæ¦øÏ\94$¼w¨¹n2+ÞQW\85mßÔåf3¬\1ar¥Má½B¿g{ðtcµ  XuÃ*Û\80\90Þºîvì¯=xuñÙÃ9±\19]\8b°®\7fuÍô\1c°\e\84\8dí-¬M2\90.|\eÃ5\87´êÙ¯nE\95Û =±-%ÍÁ\92vj¤¢o˸öß[Û\9b°\r\13v¨x^¦þ¸26\16±ù#\17ÿ{tñ¿G$þ·\19\11ÿ·(þÇn\8cÿyÑ}ÙnÝ%<Æ»b\12\9b\ 3t5ÚÖ÷\87M»þÜúy"î\\80\87\vå\80¬\9d«\11Û\83\15\9d«»\81Ç\81\8býãÛÆÿ¸\11ñ\7f«â\7f\87½\9bæÿÎ\ fÎñL\ 3ç;µg¿\9c>P/ò\94\81Z\ eÕÀ9£'\fìí<~à\¨c\ 6r\97¯í}ÖÒöèâ\95Ï\94­Ò¨Ï_\96nÝÉËÑ]Ô\16\rï\r\8d\9eó³^ßxí3ÚÌ)¹ø\9f¤¸»\16\8aÿ\1dGÄÿm\8aÿ\9dv\19ÿ-ÖcÚëøÅ+ýü²Y\93Ý\eÈãjë<ôó¸\96{¹/\8c®\vmx.\87ök\aë/ä\85ÕqÎ\9bÎ\97\ 2Rk\80\974\17a\9eêR·>\9a=\95kËܵkU\8flÛ¹ou§lŦTÿO\9f\88&ù׿m­¬[®áa¡\7f\ÚLpSH ²£ä-¯´¶\rþmU8+#UÚ[É5\0HæV| °õÁ¤
++¯Sm\eÿãGÄÿí\8aÿ]vèÿéy;kë$\9d\17¬ãëÎ\85\¯å\19Ê    \Î%\ 4ú\ 4\8b\ 3ýëxq&D»¦\10^\83\ eÔ\r\fäw\1eê\1aÁ\81s'zãýÅ\9cD\97/¶müO\18\11ÿ¿TüïºCü\97ç\7f\9d\1d9ç3~.¤»g\84k\ 3½±·\ 6T×eµ¯Û\13\16ªó2pO°jl6\1d£\88Yåå^=ßÃåüÇ`®Ð¶ñ¿Û\88øÿ\95â\7f÷-\9fÿýsÔú¹_Ö\ans+ûu\81Û8\9e²'6÷çjB\84Ï\13;!\9a\17\14ªýÜÖ§:r \9eä$:g\1cù,\rÕn\få\ 1\89\8dÌ1\86>\9bzTU\8búP~üï9\10ÿ\13GÄÿRÅÿ\1e»\ÿ\8b\1a¯ç\ fÔÿ9oOx.ïÌ\81z\82§FsÆÝü\7f\7fßð\89Ñ5\ 3·F\1dÎQ\98DëZ¬÷\ 1\ 3g:®¯á¯Ïõ¯çõ\86Ö\96CuD{ãÿ{vñ¿gdþï¤\11ñÿë\8dó\7fø|\19\8a¿\7fýßsDüÿFñ¿×Æû\7f`þÏ»ÿ\87×~Ï\19È\19\8f×\86s×ÿÊÚ\80îåþØ1\94\97ïî\ 1á:DÇE÷¨\84êJÚúEl®im\9d`e?\7fì|Ðno\80ýáPý·õ¾ÉÖñ¿÷\88øÿ­â\7fòÆûÿæú\9fá36\93\81\98\9c¸±Ö\9f\1f\93¼°çùd 7¸_\e~9>\bä\13\7f#çÄ\ 5ó|\15V+î\9b¹ù#¯î_ô³\10;Kt¨þç¦øßoDüß¡ø'»\8cÿ»çõ4p-Û<^è\8cßå\9eÁãû\9f'\r\9aÓX\8eߢ>øþè9Þ.?è¶«÷¨Ôå ìxf\8czù¶
++¨\vv\9eÚ\80\7fQ«ÃË\ f\8fÔ­i\1eþM\9eh5\9c[\14\99\7f\8cÖÿÝ\14ÿÙ\88øÿ\9dâ?ßiüïjl\9e»±öú\83\80Ý\1e\80ý\ 3ó\0ýýA©Ýy½\9c¢ð\1e\80þ\1e!\9b|K¯ÛÚ >\8aÍþ\9b\7flìnuÉK«GRάB\88î\1eµ\95§R¿1i\vþÏÛ
++Uó²Iðµs£
++[Yз±ßïÕ\8cß:þé\88øÿ½â\9fm|þ÷ïÿ¶'+x¾\8fnvÅ$r¾Ïb\ fo5\90wsÂÀ³f׳\9eûç͸3\0Bñ_«ã¿Íùϱu\9cõ¼ ymO|}ÎËÒ\12DÒYæÆ\17\81½f~üï5\10ÿrDüÿAñ¯6Æ¿\9d_[¯ñ\1fÊ×Õ\7fy:÷ò8üë[äÊåq\84ûwíÜo(_lÓ5\eÉ£r}.+³ NWQë^Q»û­­è´\1dº,¯\8an\rè0:kÀÅÿ^]üï\15\89\7f="þïTü¿tcü\ 3Ïÿf?öé{Â1>8p&Ü©\ 3{ÉÛù\9aû¯|ÎòjîõïÂuæúgÆ,×§\ 3ó¿Ý:shm¿ËÛ\ fÕcK­Ó®'TSé7QLó\×\7fae\80­\82¡Mû\15M\15b\9b³²+X\91̬ÈCêÏ/·çÂ\ 5?\8fë{Õ·\8dÿ\97\8d\88ÿ?*þ§ì°þ¿¬óvæ@.÷Û\82÷\r7ÇÛÏý|å$¾nøòÁ~\9c믭­«­ç[\1eng\89\7fY\r¸mãÿÀ\11ñÿ'ÅÿÀÆøg\ 3ý¸þyìúÑVí3à¸à\1cð´»Îûg<\;     ¯%õsÿÛ\1c£ö¹\1e\1eC¾k\12Êû      =;Öòyüq\9c¿\1e\13:ë!4\87Û\1câr}ô\a·\8dÿ\83FÄÿ\9f\15ÿ\aï\94ÿ\93e±ýßË3TÎ\89\9cÿrâÀ}þ\84\81µÆ~ÿ¯Ò\15æÆ\v«û\90æÝ:Ä4¸¯{\1a83ÖJ\80w\9f\89Xmÿvn¾HíÞRÎì\88¯tQ÷áúx>¸3e\9a3aüøß{ þ_>"þ\97)þ§î2þëÆc¡ü¿¶\86ÆÙ\81½¿eæ?3B¹õî\9a\ e\9f5wù$>n\18>çmÃ8ßï§ß ç\82\aÖÏ/X\99ÿ»w\17ÿ{Gâÿ\15#âÿ/\8aÿÁ-û\7fë÷ëÐ<î2¿ë`dÎ8pö{\97¯\1f<ûi\91ÇS\rÔ\93;!:\9f4\rìãh×.\8f\1dØ·²?ºße²ºFãÎq\89Í\ 1\aÛ=\bCyf½ç˶ñÿÊ\11ñÿWÅÿ«vZÿ\9fwu\19Ï\8f¬ñ\9d7p\1f\86ëç\82¸\1c¿þ\â\85\93Ø3f²\98\8f\9b\ fæöÝÈÎÿØxýûë\7f_="þÿ¶cýç¶ÿuö@}¯3\ 6æ\ 5\ 39\0Ýyín\1e'\k ?\8f\93ª\9f\9dM®?ÍØ¯n"\97º3¾Æìá\1f8KÞ\9fë\v­\ro}ý\9f6"þïRüO\1fµÿë´\81\83ÑÚzÓnmh½¦À4°_¯Íå8)P3*ÍR¯_¸\9e\e\1cì\17&eí×&¹.5a\16}´´H#¹ÆË³Á\ 2ûù\17ûÎÃ{\ 1¢û¿6]ÿ\ f\1f\11ÿ\7fßjÿÏyÑs\By~V2#¸þÛÕÞÚ\17¨ÿ¾\«;\18½oÜØ­]ó¡\9cÀ\95Ú³~üO\1e¸þ\1f1"þÿ¡ø?r\97ù\9fE\9fí¬þ\9alW³ÁÕóê×çê×óÒ\98¸\ eÍ%XÉ$¿.Tø\9c¿ÀÙ\90Ù|¥Ö@¸6` fT¶¬%ã\8f\ fº}\84vw¶\1a½.÷;t\ 6`³á«ë\8bÌì`\11ûKÝZB0\1f9P\87¢é/ºø\9fÜÅÿäHüÏ\18\11ÿÿTü\1fµCþ\87\9d¡\15Zû[Öd<³\17\93å\19\ eì\ 18e \9eP5°g¨_S¦­\vpÒÀÜåñ½÷¿¬\1d\9eMãÉ@í@wv\83_K`Q\v\ f\9cº\95z\91ÛÆÿÌ\11ñ¿\ñ\7fô\ eù\1f¶ÛÁÏÙ\ e\9d£èâ\15:ÿ%\14/\9bësc¹ðçæøhÝÈà>\8fÅ3åÈ\81õ\88ÉàXoÒ\9f»\ fær¯\9f7ØÍ\19FÏ{Y?[r\96äíÞbÛh\94\15ÉÜ«ÿbq¿Ï@ü\1f3"þÿ¥ø\7fÃ\ eù¿YSÿ'0ÇÓ\9d©æòBú÷øS\a®ï\93\aú\92'\ eôåN\bô3ç3¿\9f\17\9e£¸fp\8e847\1c\19»¯ô\v#ý»Å} ð\è\9d5W'ùÌÅÿ>]üï\13\89ÿY#âÿß\8aÿ7ï´ÿÏ\8dåÎ\198\ 3ò¬hmØáÚà\97\ fÌ\ 1\ 6ê
++,ö"½mp­ÏÝ\8f\ 3õànÈ9¿õú߮ޫ;ÿgÑG\1c\8a¿ßÿ?{Düÿg×óÿÚc27Ôøy\7f\7fÞ¦Ëç?\8cûè.oÿ\ 6ß÷\994sMºô»=\ 2Û^ÿß2"þW(þߺñú?7\9aC\1fZã±z]Ã\9f\8bË{y#VçÛ¯Ù\15ZkrëÉ+÷ëª.\=\91Ðþ\84õgx^Tv\12àÌÕv³u\96æ÷5f±\r\9cY³>÷yÙ÷ÛÛS°mü¿mDüÿWñ?gDþ§{.\87çëúy¼sÝBýz\8d·Z½§tµÞ¯\8dÆÓ}®Bã¹i ¦X»\16ÕÏ\ fÑ\80n\1e¨\ f8/²öìµµÚ1VÊ­°ÉÜ*Í\8bÅymvOW\9c¯§yÂhþ§Åý¾\ 3ñ\7fü\88øÿ\9fâ\7fîÆø·}¨óWúÝI\97_sM4·Îåy\1cðçòÔéÙ·çIÑ9Þ^<Fνê\17ó².*[\9a\9d[E&=¶\93ʶë\156Þ®KÛ¬<·õyýK=Ûë̲7ìp\99®.ój. ¾\8b-îÚ92¹Í>ª×¦«=±\13~²Ê\9eùú\9aEf©\1e\95m     Ïk»\94­ä\85Õ\8dµ½\82¹z\89\99\15\95È\9aúßvøO>ojÈ6ËÇ\1aúÙfdu\94óåüÏ}»øß7\12ÿo\1f\11ÿw+þOØaþgèü÷å<ßÙ\ 3ù\9agöó\ 6ê´ûÜôÏ\88È\15¡áó¤\87j\a´Ï\9bÐyS\8bõ£Cw¦\93\7f\96\94¾ºú\89eR.r\86\93d=\97´wþû¦ø\7fÇ\88ø_©ø\9f·1þm\9fûU+ë<e\97_\11ès7ë«oè=ã\97{5úç8.óÉ/\f¬ñ\94i¾iÍ&·\9fkYùcòÀ\9e\8df¾¦®5\90·\e·\15±Ê*Ý       2»Ã4\ 5\\9bkÑþ0³e\e«î\92åv`¤\9eÑV\ 1¦ùzêÕÛÂ\9díøo2}3\r\bõ\97\93ÊJ\83é\11Q'\96    \[E\83Ê\12\83³¦ºLSyÎ\8a\83ê?4S·¡ªíçd      ¨YS\ 6N\ 3\90¢È-\eL_;÷÷ÿo\8aÿ\13GÄÿ=\8aÿù»ìÿªêðù¯]Þ\8d\9b?{øÊó=ëæcÚþÚ#VþÌÍã¼a\12\9fË\r\9cÿÙí\r   åt¬ÍÕæYa\87wÙÓµYÍm
++¯Ú°-µ\8f\80ÕýÒ¨°ª\9bÛñL1²S½j«ìW4å|RÝÕ¬d\9b\9e\f\89Õþq9Äö¥lBÈN²¶Bn\1a\Z}\b+\17f\a¹ÍÛÊ\80z\ 6é\vÚ
++\97\9e\ 1\89MóÍíÜëÂ\1e(3{UÍ+wnD\97\12ÿû\rÄÿ»GÄÿ½\8aÿ÷\8cÚÿ;´\ 6Ü\9f\etµÚ\87r\84§\81\1ca«õëÖ\rúy£'\ f\9cAslä\1cÊýÑ3­·\18#\ e\9dááÆóë¹§+s\88k5ê\a×\7fï×Åÿ~\91ø\7fï\88ø¿Oñ¿`\97þÿ¢&ûÙÑܰ½\81\1c\0\9bøvçxõÏ\8d\7fn\7f\ØÕ\19\ûù÷jåÝ\bÏ\8d_?\9f¸WG~ÛøÿÀ\88ø¿_ñ\7fÒÆø·ý§\17­\8c\9f\\9d\87\v#}ü\97Nâó¼/\9cÄæÜ÷uçFÆê|Fjz\8eíçÏ\9a.^j\a7W\85þ/\9b5\ 3;Ëô±\89ÁfÿO\9eÛö\1e{\96ëã£\ fÔÜ\8a\12Åß®[;\ fµ¶'\95-\ 4¤3\e7è3WÛÆ\9eÒf\8d\9b\8cP{ÄëC\92ÙWNõé³¢uv÷¯ì\fÉÂ>#VùSÃÀ,¹\ eñÿÁ\11ñÿ\80âÿC»<ÿ\9b\13\85ï\9f\19\7fä@Mè«&á<Ã\8bz\9f±Y]\94yüþ¬þ{³\14§°Zg}fc³Ys²ª.RuÔ\13}G\vàÌ
++úZrneó6MI¿¼\88äz\ fÕj>\14g  o\1dÿ\1f\1e\11ÿ\ f*þOÞrÿ_\7fom{\16ËëWs2\8bvý´\9d½\ fåxo\9c\7f\1d\97G=·JË6õ^Ï-Rº-dµ¥\89é¥%÷Yxì¡¡N\9eÆa©%û\15\96µ×\1cÌ`)ʵõèÕ\87Ѹ?iJ\7fYiDz¹\8fÔvù[â~e;9êZ_¯J\9b³Þó¬©þc5|m"Ñ\9eù¥\15\99Ôõ®\7f\96Ú\ 1²\99åù\97V\r ÒÏȾ§\1d\ fÛý7\87ö\19\ fÅß\9fÿÿ±\11ñÿÐVù\7fýõ_;Ë#´Ægû¿¦\813¾-O\7fò\ 5jm¯@hïWð\8c\11?þÉÀõÿ\94\11ñ¿Jñ\7fê\ eë\7fv¾É¼éã\9d\1d9ÿ»ß÷_Î\v\1e\88\9cÓ{r4\97(\94ÿ³ì\83N\ 6jC¶s¿·[ý^Á5¨fN×
++6ØF\10Ý\1fÒy»È5Pß1xöO \9fgý|àõyEÿÜïÊ
++ÑZ9\14\17ÿ¤\8b\7f\12\89ÿ\8f\8f\88ÿ\87\15ÿ\9fØxÿ?/²ï¦\8d×\81Õ1~\92\ 2áZ^û\aêI\ 6ê8,Î\8dº¼\17Ëeí°þþ\8fmÆs\9bÎ\ 1\88¬÷\87Ö\90ݺ¡\1d\ 2Þ\94\1e\9eë2.ÔO¶\9da¹Õ\7fKgÍÉà\1a+\14ÖS´\94çÂ\12\8dõ\ 4±Úñê1&þ½bÛø?mDü?¢ø?}Cü÷\ 6âoã87\87\e\1a¯¹ó\9a\9e±\12ãùJþÿzÍ\9d\7fÛÏ\bìýÌô³ïÇ1V¯£W·ÇêïÛ.Фéáé_éú¶\8aýzÖ\97v<¯u\1dÔÙ+K\eÌÌlHa\97§eù7\ 5@m#\81¥o\94Íq Ö§¯­â伩\1e©Ï\8fz\ 2\95Í\räºåÙ$Aeµ@ÔI)ì\9cwu\b+K-\88\8cc\17ã¡øûÏÿg\8c\88ÿG·Zÿ\1f:ÿµ\9fÿ¹\Ë=}ã\1e\80pNA50ßtrôYt\98\17÷ïÅ<äÚºþz\1ep`íyåü×M×ÿO\8f\88ÿÕ\8aÿÏì°ÿ«­åxÚ@­\8evíï\ 5+k¿uÚ~fúõ\7f\97gþl\12[\17\8aü¼Ý\1aJð|U»åhh0k&~\92y\91i\ba\97¦\15ýÕh-)ÚR\9c3\eï'V\ 5Ôê\97ÙS]C±R·û\\ 32uËʤٻ[TV\ 3Ðúÿ¶\1c0Km¤Pg\99\9dk\92ÙÔA¥Wµåq¥vêkm'{ØÎ¤ÌÊü[^@:Tó½·\97Ø\8fÿl þÏ\1c\11ÿ\8f)þÏÚ\18ÿþùoùÌÎÞ¹b\12_ûï×w·ÿâÊûl\84ë\86ô?\e\89\v\83\13\7f½g­~B´Æ\87\r*\8bT×ZÙ¬"'×ÏZ³ÝÙK;O¤\99]ʬb¬\9d\1e\9f®kË\10±aç¬Íðµ¹\ 4=9êÔf\19-·$ÉË6\ 3­\99\85¬\9a\ eª\8bÿ¬\8bÿ,rÿ\7fÎ\88ø\7fü:\8cÿÖÏÓ\ e\9dý\{{<õ¿\92\81\13\aÖw¯Øi>á:å}\8d\9bwð×yûõãµÀÜþÑà¹âCñ÷¯ÿç\8e\88ÿ'\14ÿçí²þ³8C-°\ 68+»³¼Ï\19¨åxöÀ\99r\81u£E}¸jàìðÀYÄvôG3N=12N=a NÕñ\ek\ 4ûgº{c8=/\8a¡³À\9bé>ûlûç\11»ú\90E\99×þüߦø?\7fDü¯Qü_°Ëø\7f±ÿë\8cà½ÁÝ\ 3\7fM\ 3gü´õÄÚ\\82oZË%i?\13\17\ 2·¸¶]\9e\9f~¶V­ßÖf
++}\10õTOÒ&=W·z«Ô2·ÂÞ\96\9dm)ÚsÝÄmYV=ÖÒzò\96¥cC\v;\11N\17´nÓVn&Ñ\10Á*ÁÇëxEÎ\1c\v^ó¡ý_\9bâÿÂ\11ñÿ¤âÿ\92QõßÏ\8aÌ\r\9f6p\ 6H{ÆËsWúðYÑ®\eôÏyÑϺÚ4\ 6ì®!;oÍÊ\ 2Y¾Îâ,7ݺmÈVÛä\8eÆáó"·ó\1a\9aõ\1d\røK=\99\8aÜ6{Ûcyfg7Ììì>KÒÔ\17)ÊÚr²l)ÁR´4\86´Ó¬ô»\9dØ¡¸ë¡nÅ>Õc«jõ,,ÃËÎ\ 6·Þ\83~»9á-·É¾Ú\92¾ëP\8d¢È\98uåú\9f\ fÄÿ¥#âÿ)ÅÿçF\9dÿ\11Øÿ»¨Çx``\7fX5°§0\89\9e+\1d¬\eÛå\94¹5§þ\1e°c\ 6æ"¯    ®9¹ùÀÐ:ÐzN`·×k¥\1e`w6´«ûàïë\8aÕ\95\8c\9eÿ1ïâ?\8fÄÿçGÄÿÓ\8aÿ/ìRÿ·\9bw\8b­\ 1¸ø\86ëµeÑ\9cÁi \97C?©z\1aØÿÓ\9eývÂÀ9Óû\ 3}ÍYW·æ\9aþ¼pWÿÇ{nÄê\0Yj·-äæ~¾Yw\ 6\9ce\ f\16n>*PG.8ÿ\1f\9a\7fÜ6þ/\e\11ÿk\15ÿ_Þ%ÿ¿»\97\87òÿÛuÞÓ÷ÄÆx.¿;´n¼/PëË~êm¿á\8aàØÐÍý\86ú}Ón?Ází
++ï\99±è«\ 5Æ\8f\87jm74.íÕ¯óã\9f\ eÄÿÂ\11ñÿ\8câÿ+»Ä_C¡|\12©ó¾èÇ\9f1P\ 3êô@ÞPUfÞÜàJ\9c묻nOê}®,\eÓÝ\aÂùÄÓH­\89k\82óÐ~¿q}Þ8R×ÁÍAYÿ@-±½aËXÛ\16°"³{Há×\10\ eÔ|ÊõWtg°<ã4uñO»ø§\91øÿê\88ø\7fVñÿµ\8dñ¯¢{<ö\ 6îåv^sp/¿åáxãªð¾\90#£s\8aÓ.\ fd}\1e*Ôß¿¾çb\86Îj\ß\aRçEº8ßqÄ\9cÒ¶ñ\7fù\88ø\7f\7fÅ\96×\7fxOö\19\ 3\a£ç.\ 4ëC/Î\87È\ 6Æÿ'\ eÌ\1f\9d00Oq\ ß´êê\94\1e\19ìì¯á\ak¶ÖU\1e;3 4Æ÷Î\8b\bÖ}ð÷\91ûñÏ\ 6âÿÊ\11ñ\9f<äØ\8f¿j\87ø/ûÏg\ 6×ò§\81\1a\ fmíÏð\19>®^ç×û1¨mÞ÷ÒIÿ³7\9b\85Î\10o\8eU\8fÏ\ 1h\88\96\ 5ÏsÔ(Ïn\146)`k\ 4¶²5kòõíÜX[6È\9aÚ¯vô\93e\ 1ê>Ð\ÉVãµÐ`1³õ\9e¹%"Ïll\986ÅO\ 3çÿ\84j\85\ eæ\ 5¸øg]ü³Èüï«GÄ\7fÏC¶Yÿ\eêÿ·ë¼Ïö\9fÇż\9c\1cÆ\9a9\ 1=¸-M+k\8eñ³\8d\99V6.Óm:SçËÎ\87´D-Ý;lÚ¶¶Û´>\17¶rß\fRmgÈܲ>l\82§9óÝæ¶\9a\v[\7fR5_+·Y¿Äòy\9aSúLPÛ×oÇ\81Ìl-XÏ\89|¾¹ÿ\1f\8a¿\7fý¿fDü\8fPü_»Cý\7fËÿrÏñp]àéÀüß$2Nïïûtû\82¦Ý¾Ïõ3hCg>,Ï\ 4º¢ÿgÝþ\94à\1ca»ïÂ\9d×Ó\9cÁº8õ\1dã\87æñ®\8fs\1f\ 6ó¿6Åÿ¢\11ñ¿\89âÿú-Çÿáº\1cg\ 5öÝUÝ>ïÓ£kõn=o}\ fÀ´Ë\e÷c\96'I\15»\8eu{®o\84¹ÿë9\ 2Á\9a!~üó\81øÿö\88ø\1f©øÿÎ.ý¿®îâ´Û¯µ~V»[Çí?·_Ö¿&\17õ¸^Ú\1fû\ fÔä[Û§½þ\¿1\9e\v¿R{ÒÅ?ïâ\9fG\9eÿo\18\11ÿ£¶zþ_\10\9d¯Û\eØÿÕ\9eñ|Vt^Îõ\r×÷dM\ 3ç»Ùµ\1fÌ\a\ 5\ eÔþµ$Doþ/|öãtÏuÉ3YË5Y?ûQÝBÝLl\13gSìµj\12ÝܵÝÝ£bûÅbuá\ 6ãï_ÿ¿?"þG+þoÜ!ÿß\ eÀ\9av?{?ÿ³Ýû\138§ÇJ_xÏþ~]¨k&ñõ\80«úk\7f\8b\1aCWNây¦íÜ_hÞª\8bçÊ|\8b\97Ãéjñ,æï\835\9bìB.\8bêzØ\7fd\1dNËC´4@ýf\95d\e®\7f\7f0"þ{\15ÿ?\1cUÿ£\1d·\85Ïy~Jó{g­ÌåäÝ\1aà\93û÷zÛ    \1d¹ÇÏkëvgVM¡ÈóÊúßVtɶë\94\85\1eûµ=ÂmS\92\95w¶Ý\17¹åÚZÒeÚÌÔØ¼MÖÔY°\87».·´¶\rüÙat\ 6t´þǦøÿÑ\88øO\15ÿ7íRÿ³Ëñp÷\86þxþ¢`ÿÎí\19ZÍ·¨º¹\9d\97MbóLCc¹µÚ{7ƽ ës\ 5M\ eȶñ\7fó\88øïSü/Þ¡þ\9f­É¹uÚ\ 3+±tùÿÇõ\9e\19©~²\89·þ\1fº/L»ÏÇz¿Ñå\ 5¬×\99\ fÜ+zýÀCxï¨mÛ íüoö~ê\1f\ 4\04k\88ÛÆÿOGÄÿ¦\8aÿ\9fí\92ÿÑ\8dñBù\1fÖ7pgÃ\85\9f\vm.ϱ«9\Ýúþ+{ë²Ë³\1c^¾)\a4v\ e\83b^4kn¶\8f¯(\8aä0ºï\a\9fý×¥ÿ÷ç#â\7f3Åÿ\92\1dæ\7fl­Ü­«­ÏÙº¹Ùð¼Ðk£ñÝ\17¸Æ-\93º\9a\84Ïÿrµä×òðb\9f\81ëc\9eæPÍ\15\aó\f\vÅݵPüß:"þÇ(þoÛ\18ÿs\83Ïx7Æ[\99ß±}±\93áú\9eÓÀÙÀmÎX\12Í3\v=Oܾ°½]~O¿ÎÄ4R·úê~þy·÷de\r±¿oc²V·a¨\1el,¯k½þ§>/Vþ¥½ïûý\80mãÿö\11ñ¿¹âÿ\97[öÿBy¼nýgýÞàÖ\ 5C¹³ÓÀº`»\9f0\eXKlï\rÏ\\89\7f²2\97Û<w\15³T·X«­\9c5Ó2¶õZ÷e\8dÀ¬F\94eWÔ\96Ìgù\eÖ)°*?\95åíÚ#;·uY»\12\v\987i¡¹\róæM\8e±\15\ 4ªgÍ\91\ fVÿH};[G¶§\86MÝ[]\0u\0f6Í\1fÛ\aº~fX,¿¨É\ 5Þ6þ\7f5"þ·Pü/ÝaÿO\9bsqÖÀ¸à´þ\9a¡º\¡s¡Úz¡Yt\7f¯Ëáy\8cÿoô£ÚÛ­\r®çtoXûñó´-Øêß5¥¿r=\ 6\92,i\12\84õ\96j;ÝÇ\12qævKWÿÁ\96pfê\1cÖs\rìsË"ÐC¦°\9dEÍö½Âú\90\1aö«oÐ>oB{\83C5¥]¾w/wdÛøÿí\88øßRñ\7fÇ\96ãÿP\7fm\1aÈã·xº8÷sn^\18\9c/vµ\7f¶9¿mñ\9c¿ñÍï\ e\9d\vÓë£n\eÿ¿\e\11ÿý\8aÿßïRÿ¿«ã?\ã«\1aØ\97ßæú\87ê\ 3O\ 3¹þí¾¢ÀÙÑ6ñ:p­«Ëåï³¹Ák:Gê\ 6¬×ÿ
++\9e\13àÇ¿\1c\88ÿ?\8c\88ÿ­\14ÿwîxþ·[û_¿ÆÝÞ¿P_=\98·±ØK|ñ$\9e\17ü¦þ\9fÕuºÅZÿ¢î£í©Ýp>ÓayþwÙÅ¿\8c¬ÿüó\88øßz×õ\9fE\8eõy\ 3gy\9e\11ÍåûB7\90OèÎ\ 4\1d\8c¿\7fý_6"þ·QüÿeÄü\8f[G{ÂJ\8cçÝ\1e\8f#\aöÖ]50\atE¯_·Ü7òÎI?ÿ¯Íéw5'Vë\83êb\rß\13Ösøý=\1a¡ù¢öyb9ÜvL\9buþm\ 3\91u\vôø·õ¼Ì2¼¬$\84\1dò\97\16\a»Ò\13Ûè¥\ 1£þÓSK--k»{ÖMo_ï½È\9a-\1fͱÑêÊ$ER¬ÎÿlºþÿuDü\8fÝêú\8fç\7fºþ_\7f\19\ 3g+\9d¶ñ\fØPýßà:p\9aWíó¡¿÷³Í\ f:>P\9f´\9d§½\9e®ã\99\8d\1a\9b*¿E\99tc|?wh½6±[SôÏ\8dr{G\82ù\9f\9bâÿo#â\7fÛ\8dñÇç˶÷ÿw\8d\88ÿí\14ÿÿ\1cµÿûüè¹\9cÁ³á»\1cÝàÜa\97\e¶/pn »fCó\ 4ËzÃÇ\ f\9cõtlï\9e£±@>\r\9c\11j÷¯¡ç¶»VKÝÞ\aæ\0C5}C÷
++?\17Ìå(÷îÿÕ@ü/\1f\11ÿÛ+þÿµKü»çª\9b\eZ¯ÉìòÂúù}ý\1aÞm-ÑW\86ò?ºó½\ 2{\7f»yáõgzw\ 6×\8dq\r¸W/ÚÅ¿êâ_Eâÿß#â\7f\9câ\7fÅ\88ü\7f\ f×d;0p.g5p.c\12Ý«áÖ\ 1Vê?Ô³n\1fÇ$Rë»Í\11\ e\9d\1d\1az\9e\aÎô\8cånYÙx}wëÆ[η]\15¹¿/Ä\9d\aÙ;74Ro.\98ÿ¿)þï\1e\11ÿ;(þW\8eØÿ\15ªÇµ¬ñu|\7f\rH÷N\7fl\10ªËèâ\15\8a±Ë÷Z­\r¦\984ñ¿|\12ê\ 3N\ 3µ\ 1­\9e¼wßXÉõ\8eÅ4R\eRߢYj,tU\97kµ½®\97ý_\9bâÿ\9e\11ñ¿£âÿÞ\8dñ?q ÎóþÈÚ@\9bß\15®ÿõ¤À8-z\8eÃáXÃ+´Ïózß'ìÇ¿\1e\88ÿûFÄÿN\8aÿûw¨ÿmg²»g\7fÿ<¶ëxö[W3r\1a8û­Í3ê¯ó,û\8a\97ôsC\ 3ua¼\1a0~\7fËíÕ\ fÕa¼Áç\8a×Φ[Ä¿îâ_Gâÿ¡\11ñ?^ñ¿j\97ýßÝ9¯nm \ãéàÀ¾±þþOÝrg.g7|öçŽÜ\91Y\9aϲ-ÆèV¢E\1d<\9b\86±£¹ò"¹ÁÏý\1c¬3ÛÕ~Z9\avÛø\7fxDüï¬ø\7fdËõ\9fPÍ­ià\1c¯vÞ¥¿ÿsyþÓ\81=±û¿\9bÿ        ç\80$Ñ9¥ih\9e'Oªi öK[köÈàxphÜçÆ{k5\ 1B5\87ü¹\9d¡ó¨\¿#X'ÌâoîúÀs\1fz\92×®Ï9\867>çQofþ\a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ìê\bµc&{\8e¸o÷ë«oyÄ\11÷½o÷gÓÉäÚ=GLöè×Ï~ͳ~¢ý»GîyÜ\13\9f\98Ü|ùëÙ-\96¿\9eßrùëtÿò×Ù­\96¿Îo½üuq\9bå¯Ëc\97¿®n»üu};ýzÿ䍿{%úõí½×3ýú8ïõ\¿¾\83÷:Õ¯ïè½Îôë;y¯sýúxïu¡_ßÙ{]ê×_ä½®ôë»x¯kýú\84åë¹½¿»z¯íýÝÍ{mïïîÞk{\7f'z¯íý}±÷ÚÞß\97x¯íýÝÃ{mïï$ïµ½¿{z¯íýÝkù:µ÷woïµ½¿\93½×öþîã½¶÷w_ïµ½¿ûy¯íý%Þk{\7f3ïµ½¿¹÷ÚÞ_ê½¶÷\97-_göµrïµ}­Â{m_«ô^Ûת¼×öµjïµ}­/õ^Û×ú2ïµ}­S¼×öµîï½¶¯õ\80åëÜÞß\ 3½×öþ\ ex¯íý=È{mïïÁÞk{\7f_î½¶÷wª÷ÚÞßC¼×öþ\1eê½¶÷÷\15Þk{\7f\a\97¯\v{\7f_é½¶÷÷UÞk{\7f_í½¶÷w\9a÷ÚÞß×x¯íý}­÷ÚÞßü×öþN÷^Ûû{¸÷ÚÞß#\96¯K{\7f\8fô^Ûû;Ã{mïïë¼×öþ¾Þ{mïïQÞk{\7fgz¯íý=Ú{mïï1Þk{\7fßྲྀ÷wÖòueïï\e½×öþ¾É{mïï\9b½×öþÎö^Ûûû\16ïµ½¿oõ^Ûûû6ïµ½¿s¼×öþ\1eë½¶÷÷¸åëÚÞßã½×öþÎõ^Ûûûvïµ½¿'x¯íý}\87÷ÚÞßyÞk{\7fßé½¶÷÷]Þk{\7fOô^Ûû;¿y}t{\7fÖ\eünÿµÞà÷ø¯õ\ 6¿×\7f­7x\81ÿZoðûü×z\83ßï¿Ö\eü\ 1ÿµÞà\93ü×z\83?è¿Ö\eü!ïµ=@~Ø\7f­÷÷dÿµÞß\8fø¯õþ~Ô\7f­÷÷cþk½¿§ø¯õþ\9eê¿ÖûûqÿµÞßOø¯õþ\9eæ½¶\aÈOú¯õþ~Ê\7f­÷÷tÿµÞß3ü×z\7f?í¿Öûû\19ÿµÞß3ý×z\7fÏò_ëýý¬ÿZïïÙÞk{\80\7f­÷÷\ÿµÞßóü×z\7fÏ÷_ëý½À\7f­÷÷BÿµÞß\8bü×z\7f/ö_ëý½Ä\7f­÷÷Rïµ=@~Î\7f­÷÷óþk½¿_ð_ëý½Ì\7f­÷÷\8bþk½¿_ò_ëýý²ÿZïïBÿµÞ߯ø¯õþ~Õ{m\ f\90_ó_ëý½Ü\7f­÷÷ëþk½¿ßð_ëý½Â\7f­÷÷JÿµÞß«ü×z\7f¯ö_ëý½Æ\7f­÷÷Zïµ=@~Ó\7f­÷÷[þk½¿×ù¯õþ.ò_ëý½Þ\7f­÷÷Ûþk½¿ßñ_ëý½Á\7f­÷÷»þk½¿ßó^Û\ 3ä÷ý×z\7foô_ëýý\81ÿZïï\ fý×z\7f\7fä¿Öû{\93ÿZïï\8fý×z\7f\7fâ¿Öû{³ÿZïïbïµ=@þÔ\7f­÷÷gþk½¿?÷_ëý]â¿Öûû\vÿµÞß[ü×z\7foõ_ëý½Í\7f­÷÷vÿµÞß_z¯í\ 1òWþk½¿Ký×z\7f\7fí¿Öûû\eÿµÞßßú¯õþÞá¿Öûû;ÿµÞßßû¯õþþÁ\7f­÷÷Îåë¹=?þÑ\7f­÷÷Oþk½¿\7fö_ëý]æ¿Öûû\17ÿµÞß¿ú¯õþþÍ\7f­÷÷.ÿµÞß¿û¯õþþÃ{mÏ\8fÿô_ëý]î¿Öûû/ÿµÞß\7fû¯õþþÇ\7f­÷w\85ÿZïï\7fý×z\7fÿç¿Öû{·ÿZïïJïµ=?Þã¿Öû{¯ÿZïï}þk½¿÷û¯õþ>à¿Öûû ÿZïïCþk½¿«ü×z\7f\1fö_ëý}Ä{mÏ\8f\8fú¯õþ®ö_ëý}Ì\7f­÷÷qÿµÞß'ü×z\7f×ø¯õþ>é¿Öûû\94ÿZïïÓþk½¿k½×öüø\8cÿZïï³þk½¿Ïù¯­\83µÇ{­÷·Ç\7f­÷w\84ÿZïï&þk½¿#ý×z\7fGù¯õþ\8eö^Ûóc¯ÿZïoê¿ÖûÛç¿Öû»é\1e\eãv¯³ÕñÿÍ\ 6Æÿ\0\0\0\0\0àÿ#ûù\11\0\0\0\0\0Àø\1f\0\0\0\0\0\a\0\0\0\0\0\0\0\0\0\0\0\9fO\17\7fYmås\8fl_íw¿ÜÓµ\9e·Þó\ e\8f\7fÀÛ\1fò\96ßû®gÏ/\7fË#\1f\1dû{\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\17·ß3\99\1c§v\aµ;ªÝIíxµ;«}\91Ú]ÔNP»«ÚÝÔî®v¢Ú\17«}\89Ú=ÔNR»§Ú½Ôî­v²Ú}Ôî«v?µDm¦6WKÕ2µ\­P+Õ*µZíKÕ¾Lí\14µû«=@í\81j\aÔ\1e¤ö`µ/W;Uí!j\ f
++µ\83j_©öUj_­v\9aÚר}­ÚÃÔNW{¸Ú#Ô\1e©v\86Úש}½Ú£ÔÎT{´ÚcÔ¾Aí,µoTû&µoV;[í[Ô¾UíÛÔÎQ{¬ÚãÔ\1e¯v®Ú·«=Aí;ÔÎSûNµïR{¢Úùjß­ö=jß«v\81Ú÷©}¿Ú\ f¨=Ií\aÕ~Hí\87Õ\9e¬ö#j?ªöcjOQ{ªÚ\8f«ý\84ÚÓÔ~Rí§Ô\9e®ö\fµ\9f\19µgª=KígÕ\9e­ö\1cµçª=Oíùj/P{¡Ú\8bÔ^¬ö\12µ\97ªý\9cÚÏ«ý\82ÚËÔ~Qí\97Ô~YíBµ_QûUµ_S{¹Ú¯«ý\86Ú+Ô^©ö*µW«½Fíµj¿©ö[j¯S»Híõj¿­ö;joPû]µßSû}µ7ªý\81Ú\1fªý\91Ú\9bÔþXíOÔÞ¬v±Ú\9fªý\99Ú\9f«]¢ö\17joQ{«ÚÛÔÞ®ö\97j\7f¥v©Ú_«ý\8dÚߪ½CíïÔþ^í\1fÔÞ©ö\8fjÿ¤öÏj\97©ý\8bÚ¿ªý\9bÚ»Ôþ]í?ÔþSírµÿRûoµÿQ»Bí\7fÕþOíÝjWª½Gí½jïS{¿Ú\aÔ>¨ö!µ«Ô>¬ö\11µ\8fª]­ö1µ\8f«}Bí\1aµOª}JíÓjת}Fí³j\9fS\9b\1c1\99ìQ;Bí&jGª\1d¥v´Ú^µ©Ú>µ\9bªÝLí\18µ\9b«ÝBí\96jûÕn¥vkµÛ¨\1d«v[µÛ©Ý^í8µ;¨ÝQíNjÇ«ÝYí\8bÔî¢v\82Ú]Õî¦vwµ\13Õ¾XíKÔî¡v\92Ú=Õî¥voµ\93Õî£v_µû©%j3µ¹Zª\96©åj\85Z©V©Õj_ªöej§¨Ý_í\ 1j\ fT; ö µ\a«}¹Ú©j\ fQ{¨ÚW¨\1dTûJµ¯RûjµÓÔ¾FíkÕ\1e¦vºÚÃÕ\1e¡öHµ3Ô¾NíëÕ\1e¥v¦Ú£Õ\1e£ö\rjg©}£Ú7©}³ÚÙjߢö­jߦv\8eÚcÕ\1e§öxµsÕ¾]í   jß¡v\9eÚwª}\97Ú\13ÕÎWûnµïQû^µ\vÔ¾OíûÕ~@íIj?¨öCj?¬ödµ\1fQûQµ\1fS{\8aÚSÕ~\í'Ô\9e¦ö\93j?¥ötµg¨ý´ÚϨ=SíYj?«ölµç¨=WíyjÏW{\81Ú\vÕ^¤öbµ\97¨½TíçÔ~^í\17Ô^¦ö\8bj¿¤öËj\17ªý\8aÚ¯ªý\9aÚËÕ~]í7Ô^¡öJµW©½Zí5j¯UûMµßR{\9dÚEj¯WûmµßQ{\83Úïªý\9eÚ﫽Qí\ fÔþPí\8fÔÞ¤öÇj\7f¢öfµ\8bÕþTíÏÔþ\í\12µ¿P{\8bÚ[ÕÞ¦övµ¿Tû+µKÕþZíoÔþVí\1dj\7f§ö÷jÿ öNµ\7fTû'µ\7fV»Lí_ÔþUíßÔÞ¥öïjÿ¡ö\9fj\97«ý\97Ú\7f«ý\8fÚ\15jÿ«ö\7fjïV»Rí=jïU{\9fÚûÕ> öAµ\ f©]¥öaµ\8f¨}Tíjµ\8f©}\í\13jר}RíSj\9fV»Ví3j\9f\9cÚä&ºþÕ\8e\89Ú\91jG©\1d­¶Wmª¶Oí¦j7S;Fíæj·P»¥Ú~µ[©ÝZí6jǪÝVívj·W;Ní\ ejwT»\93ÚñjwVû"µ»¨\9d vWµ»©Ý]íDµ/Vû\12µ{¨\9d¤vOµ{©Ý[ídµû¨ÝWí~j\89ÚLm®\96ªej¹Z¡VªUjµÚ\97ª}\99Ú)j÷W{\80Ú\ 3Õ\ e¨=HíÁj_®vªÚCÔ\1eªö\15j\aÕ¾Rí«Ô¾Zí4µ¯QûZµ\87©\9d®öpµG¨=Rí\fµ¯SûzµG©\9d©öhµÇ¨}\83ÚYjߨöMj߬v¶Ú·¨}«Ú·©\9d£öXµÇ©=^í\µoW{\82Úw¨\9d§ö\9djߥöDµóÕ¾[í{Ô¾Wí\ 2µïSû~µ\1fP{\92Ú\ fªý\90Ú\ f«=YíGÔ~TíÇÔ\9e¢öTµ\1fWû    µ§©ý¤ÚO©=]í\19j?­ö3jÏT{\96ÚϪ=[í9jÏU{\9eÚóÕ^ öBµ\17©½Xí%j/Uû9µ\9f\ 5µ\97©ý¢Ú/©ý²Ú\85j¿¢ö«j¿¦örµ_Wû\rµW¨½RíUj¯V{\8dÚkÕ~Sí·Ô^§v\91ÚëÕ~[íwÔÞ ö»j¿§öûjoTû\ 3µ?Tû#µ7©ý±Ú\9f¨½Yíbµ?Uû3µ?W»Dí/ÔÞ¢öVµ·©½]í/ÕþJíRµ¿Vû\eµ¿U{\87Úß©ý½Ú?¨½Sí\1fÕþIí\9fÕ.Sû\17µ\7fUû7µw©ý»Ú\7f¨ý§Úåjÿ¥ößjÿ£v\85Úÿªý\9fÚ»Õ®T{\8fÚ{ÕÞ§ö~µ\ f¨}PíCjW©}Xí#j\1fU»Zícj\1f\84Ú5j\9f\94Ú§Õ®Uû\8cÚgÕ>§69R׿Ú\11j7Q;Rí(µ£ÕöªMÕö©ÝTífjǨÝ\í\16j·TÛ¯v+µ[«ÝFíXµÛªÝNíöjÇ©ÝAí\8ejwR;^íÎj_¤v\17µ\13Ôîªv7µ»«\9d¨öÅj_¢v\ fµ\93Ôî©v/µ{«\9d¬v\1fµûªÝO-Q\9b©ÍÕRµL-W+ÔJµJ­VûRµ/S;Eíþj\ fP{ Ú\ 1µ\a©=XíËÕNU{\88ÚCÕ¾Bí ÚWª}\95ÚW«\9d¦ö5j_«ö0µÓÕ\1e®ö\bµGª\9d¡öuj_¯ö(µ3Õ\1e­ö\18µoP;Kí\eÕ¾Ií\9bÕÎVû\16µoUû6µsÔ\1e«ö8µÇ«\9d«öíjOPû\ eµóÔ¾Sí»Ô\9e¨v¾Úw«}\8fÚ÷ª] ö}j߯ö\ 3jORûAµ\1fRûaµ'«ý\88Ú\8fªý\98ÚSÔ\9eªöãj?¡ö4µ\9fTû)µ§«=Cí§Õ~Fí\99jÏRûYµg«=Gí¹jÏS{¾Ú\vÔ^¨ö"µ\17«½Dí¥j?§öój¿ ö2µ_Tû%µ_V»PíWÔ~Uí×Ô^®öëj¿¡ö
++µWª½JíÕj¯Q{­Úoªý\96ÚëÔ.R{½Úo«ý\8eÚ\eÔ~Wí÷Ô~_í\8dj\7f ö\87j\7f¤ö&µ?Vû\13µ7«]¬ö§j\7f¦öçj\97¨ý\85Ú[ÔÞªö6µ·«ý¥Ú_©]ªö×j\7f£ö·jïPû;µ¿Wû\aµwªý£Ú?©ý³Úejÿ¢ö¯jÿ¦ö.µ\7f\ fµÿT»\í¿Ôþ[í\7fÔ®Pû_µÿS{·Ú\95jïQ{¯ÚûÔÞ¯ö\ 1µ\ fª}Hí*µ\ f«}Dí£jW«}Líãj\9fP»Fí\93j\9fRû´Úµj\9fQû¬ÚçÔ&GéúW;Bí&jGª\1d¥v´Ú^µ©Ú>µ\9bªÝì(æ4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0àÿ±÷/à\96\81÷[;\8dÍ®\v\97$xIB\eD¢ÜÄq¿¨\18\92`K<\88\80\ 5\14E\15`(b)ÅE\9aNó)vx\12O$j#Égrì\13\92\8f'rZ\88D1!\9fDPL\ e\84\ 5E$J ²\ 5\14I0b{Þw\8c9çÞµ×®êîÓ!Aùÿ\92¥Ö\9akÍË\18cÎ=ç\1aïx\a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0àéã'~ò§ÖP
++\0\0\0\0\0|¯û¾Gæä?õuòí«öX¾tÏ9³·þ÷¿\90×;\ e{à¸óÞpîÙ.¦Uósgî¥ïÿ\8e¼\ eü»Ã\8eÑ÷­±a~îyÓç\8fØqáO´÷­\8bósÛÛï\f߯ïÿ\97}îëë1e~îÖÕãû\87ýɧ_§ï{\93êüÜ¥«Çõ¼tǾohïW\9bçç\8e]§ï?[^\ fï8p\87¾\1f|Nós÷·í\9e,¯Ë\17\ eûÛö~\ròþûÚzæåµîÕÏþS}?\1aÝî~kõ}=\88óßöÒo´÷\9dwósO¬\19·û\92\1d?w§¾\9f¢³ós\97ì=îçáÿùY_kï\17#Ç{s[ÿ\9eòzà´\1f\93s\96÷ÃÞã~Þ¾ùà¶?¹èq\1dÛÞ×\83xÉ7~à[ú~ñV¶{E{ÿ9òºí±\ 3¿ÙÞ¯ÉÌÏ]·fÜÏ\9f\88¶þ\1a\9c\94ÃÍëÆý<t\87ÙÜÞOFÞßÐÖó\ 3úþ\93\ f\9dÓÞ¯¹¬\9e3{\8dûù\87\1fÛ¸Ðë+¥$ÿ^=wÌ^ã¶Oýím\ f´eÎU×\96ݼf\öù\ f\9fõµ¾ÌGß\96Ý3ÕÑù\vç\7f¼/\vµ/;jÚÞÏß°¹oO*¼¯s¿½ÆczËþç\7f¹-ó¶\94¶ì µ\8bë|÷\vû2\97r[VöÑeGÉëâ\97oúL_\16\8ciË>ÕÊãDy\9d÷\883}Yr±-{Ǻ±\rìÿá\rý{Áú¾ÎK¦e\9f¼ú\8c;ú2\97ú1\1cÐ\8eý¹òúâï\9fðH_\96b_ç\93S¹¼õ\95[¾Ò\96ÅTú²ËÚ~\9e.¯¿¿á\8d_mËR\ eýønnÇ·¯¼Ì\7f8ý/û²êú¾Üµf\ö¶\17\fÇ\97½éë¼fj\1f\e>òæ¾½blÿÞUÓ1l~ÑÆ/µeÕÙ^·ûOíögïºðe}Y\18ÊúþÕcy^\19N¿·/Ky(³Õã¾|îãÛ¾ÐÎW\13c/ëûÛ1l\93×\19Û\7fj\8f¶Ì\ 6SÛ²\83Û²_\91×ñw\9f8,«6ôe{\8dûyÉ>ç|vXVz\9bxϺq{¯¿ñÜvÞ9\17m_çÅÓ9|Úåç|®/+vh\83{\8fËN=hÛ\17Û2o\87í]=µÏM\v\ f}°-\v>öeej\9f¿qË\96\85¾,æ¾Î\87ö\19Ëú®\e6<Ø\97å¡Í\7fj:¯7ß²iøÞ¸/ë¦s{Ãö\97üèp\8dó½\1e®\·¸/o~q_æ\87:ºrº\86üfÙÚ×\19cîÇ^Ö\8cÇ÷Ö#Ϲ»/ËC\9bض÷Xf\7fóÑ7õeÒÎúñݾv¼\ e¼þá·Ì·e¹\98¾½£Ú:ßÜêÏ^×\96\15çl[vßTf\e\17>ôÞ¾¬æÞήY7®óµ\ füáGúµÚ¤þ½-ëÆ2{ÿ-G?Ü\97\85<\9cÓ{\8dë<ná¼÷öeÕöz¿fºþÿëÏÝûÒ¶Ì\9aØ×yñ>ãuâßïyìB_\16\8f6¾ËýìùçË%%XùoýßÁÈé\17å<\93kPÐer~TùïTäJ6|&æXä\16KþRæhc_G´ÙµuÕ\18­    òW­æv½\19¾£¯\²-.gï\82\8b.Y¹Ý°rEö.\86à|\92\138FùkQdUNÎJùÛ`¼üõ/Îú\98tÝrÛ\12mð¥ÈßvÙF\8eÕ¶mú\92}ÛG¹¨:Ùÿâ½\Ь\\82d{>%ã\82    ^þ¢ø\9cå*Xå½ \7f\95\ñÆ\1a\93\8d\ 2ùS\e³³Yþ\ 4&¹uÐk¢\1ca
++!È:dµÑ$ù\13\98ôÂ%Û²²¯ÎÊÿ\rÇ/\e«²¯Y._&Ê!Ö\92\87ÏÉ-\8aÏQîH³\96qI!êe,Ø\18lY,\9fê¥Èdï²\rUVT¤\1c{ÝÈ­ \94­ÉK>+;\93´äª\94\91qU\ eWöÌåþ¿\93\94¨\94\923òF\96\12ñÕÈ\11IÉ;ý\97õÅ%\97\8a\16\8b\94HÐC0rQ\95ê\94b\90Ã+rM×ò×ò\vòß5JUImk\9d\85äd?¤îj\92­Ô,û\\83éûUkÑ\v·Ü%\84Zô¸\8b\eù§\94\94÷ýXdûAîÁC,E¶&{¡\e
++Nþ§sR\99Rëò×F¾${#MBÚ\96ìs\96\9b\a_c1Un£d\13EªBvOþFÊ?¤¡¥¤MB*G>%{\1còÐ\ ee\7fB®roRå\16r¨'ù£+{\90å?¥¬\8aüÍ\ fC}JEµ6&{\1c[\19\9b$e$ÇlZÛj\9f\91"ÖsAÿìy)k#­§Ø4ÕK\94[2i6R\9\17Ù\13Ù/¹K\93]ö²\15§mOj¦H\89Zi[Ò®¤è\8d\94\91\15iìR\8bz^\ 4ë¤Ê\8aþ\11\1fõl   íoþbýG£çªü]kû¥-I?+\aÚ\96Û\9côè¼4xiur\83i\86¶(Í×Êͼ´4©\83*·{ÒÎ\8d\91-dÙ+©'9o³\14«7R3²ÏR5A\9eu¤ü\8bÕs \1d\954\17¹½ÌR>òÙ*\87«\rM6]å3rÀR'Ò\82¤\³\97\1a\91Ë\87´°\9c¤ýË;U?&U\´\ 4²\14®\9c\ 5¶µ]Ù\94\9c@R\98%õ¶¢ç\82\9cµÆ\rÇì\8cVq\92sQ\8a5.\96EÑÓWÞ\91er!qÆ\ fíQÚ\90ü¿O­.¥\89È\97µñI\91\rmQ.3Nî\97¢\97Ãie\98äÔ×\12\90g»á\\93ë\8a¬¯H\99YiêRèµ×\89\1c`\96K\8d¬Õ%½\8b3±¶÷\83\8a\¤¬×Ö!gÕ°\9frÔ¾´v\13ô²)ÍÄÊIgä
++$û$g\9a\14\90ñ²gzM\vrrée@JFjDªQJPÊ0¦,\17\97\1c\9fõÒ+åîÛ\r«\96\81\9càòvÐ\93I¾­g¶ñrw\12å\f\97ÓI.´VÏf'µ-U![ózu\90\ 1h;Ò-ëNx;쯬C¶¨»\99¤5Hc\94æ®§\97<fÊ6¤R¥1èU^/õÒD¤põ°å\1a\13M;\7fs\95û^\93äÊ%m«È%GÞ\93â®>ôòÓV#\97\8a|KvK/\84ôÿ\ 3\0\0\0\0ðL°Øÿ¿úÐ'Þ¶|éüÜû¦~û\83?}Ø)½\9fSûá×ï5¾¿s\7fþíSÿØÎýóWLýê\87ï\b­\7f/DãççnÖ®­U\17Èë½_ýÁ[Ûû%h\@ë¿\9aí·ßÚÖ?Ûo\7fWëGÒþ§­§\1cÚß\8f^öó®µ\8bÛýµ³Ûû%Êç×µ¾¥_\95×a\8f¿ºõ)¦àd?\ fhë?J\8f÷\8f\7fäöÖ\ fo«¬ç\86ö¾ö\ 5\1føªý¾ÓúÕ\8d5ós\8f\ eKûáWÏ]ÑÊç2ymþР      \9fíýínèóºlê\v<oaµï1\12c_õñS_Ùù\vç~`è\8b·½?lÛÔÿö3\ f_4ô\8d\9b¡ßõÊi?¶-\1cú\91±\8f»÷÷]:õ·\9føþ7=8ôq\ fýôÇNåü{\a\9eqw¯_\97ú:¯iuv\85¼>úòSÿ[_\16Rï_<³}Owèü\aÏßgèÿ\1eb\ 6®ÚMÿ÷¶ö½\ròºò]'\8fýß¹\7fïâ©?s¶ÿûØ©\Þ¼°ýc½ÿ;ǾÎçM}À³ýß½_yåþïõk\17×¹Æ\ fýß®\7f\14wñúKOê}²&Ûþ½Û§2»ðCc\7f´5}Ù\róã²Ùþè\rí{ÚÏûÜ\17¿±¯S\7fPìå9\1dÃ\93kÎýR_V\87¾\ÓÚö;µþ>ôÆû{\9f³\19ÊúÒuã:gû±ËÚñØOûÜ\1fØ¡ï8õò¼qêçݼpHï\8fÎÞ÷eWM1$³}Ç\8f¶ï­ÜwüÄ\14k°ñîç~¼/\v¾\97K\8fQ¸V^Ç\7fñ\93\1fíËò\10g±aºÆløâú±Ï¹öréñ5zÞ}ÿ\ 1Ûú±W7Änl\9dâVÖ\1fxbï§×\1f[Û²{¦8\84ãî»é\83c_ußÞöé\1aò\89w½æ¡¡¯zhó\97Lû2Û\1f}øTfÇ-\1c}`_æ\86¶tÙTfÇ}ù\aÛyë\87ßÅ\ 1üãYÒ·cK\8dÙiï¨Ó\9e\ f\9b´o§\18£]ÙEþæ\98Ö©f³\9cÝÑ\84 ½~Ú\13)\17\97¬=Üò±\10mëýÑ>iocÔà/\13¢³Y»gSJ¶hO¶\93\9b\86±?ÒGy#\15\9f´\87\98ôâ/ÿçe½r\15ÉÚ\1d\17l))Ë_D#\7f\84µC(\17í¾        YþÌ\17'kȲ\ 3&TÝç(×\10ù\82\1c\86vÇËß×\90µ\1fµ$íKÊ©h\8f¿µY\16i/k\95ýñc?\9ck\1dV&d¹\ eéñë\9fıÏQö(y¹\8eújµw¸\95Û?e_}ÕÞMSä&On|òPo^û\8a¥È\86\95b\1az\9fu\94»«(\7fÅ¥öêðÝP¼l±Ê¾Éb©ò\14¥\18ÛʤÊäï\9a\94\8eÓR´/XJÜjÝÊ_{í}N¹¦¨G§}`ÖÚ¨}y­:äNAûȼÓ}Ð>¼RåFSã\f\82\96\83)rõ\ fÚ"\ÔH½ª\7fíjëOË­×UÚ\9f\89c<\82¶¸á\18¤Y´þá¢ý\87Ò¬Lk·²\11'Å"\85 {ª\11\ 2Y÷ ¤R´ÿRã\13ä\ f_ôµèaÄ\16\85¯­P\8aÛ\84\94L\8dR%>\eã´\v~I¼\884¦)¦D\ eQjÞô\9eNÛ¢K¤\ 6«Ñ^Dí\12¯z\9f'ÍAþLÉ\ eÈ\7fDi¢\1a
++!'\87\95æ\94\83˵úì³\14x\90\ 6\e´7Q÷LÚ\86¬OþÏi#\93"\91o;i\96r\ 4òéÖÁ­ýð¾$ùLÐÖR\86\98\149Çt\1d\1a\r\ eëý·c?ú®ú\9beeÒðµ\9e\9dìqÐN}Ù\13iHI£4´«U\17jXE   RÏ!ê\ 1˽¿TXnñ\ 25µÎnÝ!\8d\fÐðÙ \1f6¥j¼\85\94\8b\9cÍrÐúW¾ÈfµS¼¶R\93ò×\v\83´o9ïJÕ\v\84ÔY  ír Í#E=ZYw\\16s³R¼\89î`\96Ó,ë ¡§X\1eúeåìHR®5\fe¤]·í´Ög\ 2¹28­\ e\8dÕHz\ 3*ÅPôª\15\a\13ù\8c´f¯MÅk\84\85\9eÃR;R×¹uѧÐZxÔ(\15Ù\90\9cÏr%,zîG\13õº\91ä\fÕp\10]\91Ôb©ECC\96Ä]HåK\9d\ eÉÕM[²\9c\14½|%§\813r}Õ8\17=-å\16ËÆ\1a¤\96½\9c{®·É Õ·BLÍò\18\1d\rqHVC\ 6ä\e>Nå¹RL\8b4º¨§\85\14\85×ð\b\rMYµ\9bø\13§{­\rÛ,Ö\93T\8d\14f\v\81Ȧ\8eíS\9ea\8aÜëÚ`Z\7f¹^º\9d¶`-άq.R
++QÛMiÅ.G.\17>9î\984º$Êí§î\92¶B\r\14\8arHzz$\8dH\91¿DAÃ\ 5ª\B¤²´·_פ!\r^ÿ\80Ä,W\9f¢\17\7f£Ç%Å÷ÔÇ\ 5Ðÿ\ f\0\0\0\0À3Ábÿÿ\7f¼ìÈ/,_ºçÜ\8d­/W;ïÞù¢ó\8foýÛ6¬\9a\9fÛwêS~Á\9b\ fy¢÷ãZ??wÅÔߺs\À]S\9fÛ!ßü±¿kýüVã\bz_Üåò:öÞ\ 3þ¡õÃ'\1dß~ÑÔ¯¹ó¸ú\eÚû\eåuè·®}mÛ\1f\17ýÒ1»³cØ÷\9d¶=;Þü\8e©ß|v¼¹\99úô¶>ö\9cO\fã¿}_秦uÞøûç=Ô\97\95ÔÇG¯\9aúrgûÔ¯\9aösvÜx\1fïª\1d\97\7fîµ½L}í}\8f½¯ó×åuÂ+Ï}¸÷\8dçaÜñAÓ¸ã7|õ°+{߸\1fúH\8f\9fb\rfûÍßѶ§±\1a\17þðY}\9duìǾ}\9fÅï-ï\e\7f¢õ­j®\85W\1eròc}\1c·wýØ·®\e÷eó\ 3¯û\95±o¼ïË\ 1ÓøïÙ~ó£w3\8eû\92)îá¤\a.zy_\16K/\97«\97\8c«¾õ¦Þÿ\1d\86X\83\19×9;vzýÔNgûƯ\99\8eá´íïzE_VR_g\1fÃ~¤¼Þ¾×I½?Z\8a³·\89\ 3¦¶´qáU\1féýØv\88Ïèy\1f6iý}ùèwöeÑôú»£íçÊ}ÜWNõpÜÂAÃ\98k;ô©ÏOeöù«Þú¥¾ÌÇþ½\8b\96|ofÌõ\14£sÒåÇ>Òûª³¥¯\1a\0\80ïmmü±Ñ\88\83¤½û&\ 6\9f\mQ\12δÑå>FëkÖÁá\9a¢@\a´G\8d\92Ñ>l¹Sò­oÚx\8d:)¦w\98/é³]!6B\13\94SY\92·Bn\8bM\8bZ   ¶¤a¼ü®r5D\1dðnLMmß\93­rG­!\0ÑÈ.\aÓ:IkÒ`\0ídÕÐ\1e\eb\bú\8eöÛÇêLq1\85j³¯I¶ì\93öàjz\ 6ÙS\1d³ßcdt\97åÉÁÇ!Fe\8c©\90ý¬!EÛFÛ\9bRb\8c!k·¯\8e¡\97{\7fí\9fn£Ûåp\8a\8eZÏVJÊ\96\10\90m\17\rOh\9d»ò\85*Eg¼|TVQªÑ>`ÍfQµ+?\18¯y\ftÔ¾<$i¢\86Öµ\1f\1a8¢û®é\194þ%É\97³\96FK"Päð¤\90u\1c|
++Cv\87¨½óYîÝc-ÚC\1c\82±íÆ{IÌ\8a4\83Pw\91û \94Ö÷]Úxz\13«\86Ah'y,içx,'õ¦ëÉ®¤\18K   Ái\ 2     \8d\99ÊI\ eRV¡å-\rH¾«cУ\ 6ph\0\82\19\1a\89\11ô­¬1<ò\84(U¥\eÒ8\10MK"õRµ´õ\v\0m\84º\95°¸¿}÷¤ÄÆÏ\ 4£¹;z¤J\95fo5áJ\bRæÚV´^äé5ù(+Öø&\174~XGð[\8d\83ÑÈ\12Wõt\91jÕh%ù\90\1c\9fì\7f\92%¥­+J\13Ð\8eûê[F\91ªi\f²­¦Å\97%«ñ\15rþD7íc\96\8a\93SÌ÷¸\ 3mPÉK\8b\90zÖX\81Uÿã\1c%z\84®d³$\17ËîbÂVÌOAÿ?\0\0\0\0\0Ï\ 4\8býÿ¿½ðØW\96/Ýs\18?­ÿqùÁ?ñ¦\9eÇÞ­\9a\9f{^{\7f¶ÿ\7fÕ.úÿ·µ~S\1dÛ}éÑÏÿ³>v6\98ù¹û¦1¼\7fqÜaÿ½½ïS\9c\9f{r\8a/Ø9^ L}ÈÏúëçýYÏ\93\98·\7fv|¾\99úé\7fùç\ f}|\88_\bósÇLc¿w\1e·\7fA[ÏÊãöïÙÍØü\83§ü׳ñ\a[öYüÞò<ùKÇû\7fmm\8f?(C®ñû¦\1cÞ³ñ\a}ìº\8e     ¿ç\ fÖÿÕιéßßöeåqû=?ûÊ1\ 6=\9føÊãöË\94·~\85±ùSÿõú\7fy|\8f¯Èµö~è\83¦>ê\9b>2|¯Ø!gxÏç¯måÜ;Nù\9d¾¬ý¼¥±\17­\1eV\8eM8|êg\9f\8dMè¹\ eV\8eMØwíXGß<à\94/\ fËB_¶~ê\13¿ø\17NýÊ\90\7fÞôýÜo\8a18caË\81øýÚ÷e1\7fÂw\8eÜÖsÚû\10z\1dmÝg¬¿Ù¸\85ǧvüÑUoüL_6Æ\18\98iÙl.\80ç<\1a³9í\ fÞMNû£¦óé3¿´ñk;ç´_·\9b\9cöÇ,ÙÞò¼õ=~ä|­£\ f\9cÓ×\99ì\90'àÒ麱iáÑß\1a\96\rãè\8fjËV\8e¡\bÓy¹qáu\1f\18ò\v\fq\12=·Èʹ\a.Ùkñ{ÇÝ4ä\1e\18æ\9b8v7ù\ 5¾>Í\ 3rÏs7>:ä\10\18Êó¨)þg6ßý%SlÉlìÅ\99\88Ùü\ 2ë§ëÝl\9eüçí&÷ÀãS\1cÖk¶?¶çpýÔ\9f\93\ 1à\1fÕnÆæï¶¯j¥1ÿËÆÞ>mÆ7ïb\f±Õ©W¬\ eðnÉÓK»ù[Ö_·Òøå\9eÏ^î\89ú\9c      ²\99à³v
++ZMU®A­©å4w\9a\rBV\e\83ü\8dMUó\8a\ 1í¦s­o1Fí¹Ö\12\89Ú\17®3\ 2hærM³®]¾Ñjr\0¯Ù\ 1ZV\82\1a´\97Òjq\9a\9cu\0{rRn}^\88\15újõ\93Nî³ìP\1f»êo_Þ\ f¾«üöÿÛýâ¹õ\'×r&ø63E~:æ{\18ò\14LãÙee­?¼J³ÕxÛ%9\0v5ßA2Á\ 4\9d²!Æ\1aÆÏ>\85q\18µh\1e\10M÷®\13\ 3µ\8c\1dC,BmùL\96÷\93ï*\97¾v\8eÇ©]h     J£\19ór¬0/\83\ 6d\98 g`ê»Z\86¾ù§:Çý?e~\13\9c¤\rµ\99'\86sI¶ì³&zÐð\ 19ñª´ÜÅ|\ 3³±.cÌ\85\86\ eh*79[\8b´\f\9dÉBc8t]:ù\83\9caZ·rÖy\1fªæ¯is\85h@\844ÆÔRÐD\9dj!ê\81\87ê4~ÄJié|%R µ\85\99È©¬\13}´v¡\93Fh2\12úÿ\ 1\0\0\0\0øÞÇó?\0\0\0\0\0Ï\ 4\8bñÿ·o\7fÖ\rË\97ÎÏ­\9fb×_ºcß7´¸Óªqø=n_¿pð7îøû\16\9fot\9e¿\vÚç\97çó[=·aÊ5÷\97\1f{Óö\1e[^b\8f\15~²ÅÙ®<'Ü\15mÙ¶U\1aóûS{ô\98íÐrª\ 1\0\0\0\0º6Æ%ø¢aö){olöYç3t:\17i\ e.É{Ùø\90]Ò¬x¥ä¢\89ã\8aÎꨡæ)i\fy\9b\rQ'D56è\94\95&V[S\8d®$\9d$Os0êP\akJÕ`{£ÓF\16guÞD\9d]1jrEã­®Í\19Í\90\17J±m\9cCÑI¬\93\8bò\8ch}l9ì\9cN­h­\vQvÈÈCbÑ`÷Ð\86\v\r\19\r]\e\v {\19C\90õ»\9cdw5!¢¯QÓ\r\9aXt@O\92­{«\99\ 4kJ:Y¦\ e6Ð9HkÈOá|\9c}\9cT\8dòä\et,\83~1\8e\9e\b\97>ÿ¿éñßøñÙçÿ>ÆW\1fö_ø\96ÿ=ä\1f·óCÎr\1d«zà\9f¾û\víù?\ 6\1dç?å·¿í±\ 3¿ÙÇç'³zîæi¼ìþ×\9eÑÇ\81\e3ä8_ÌÝÿù\ f\9fõµ>>Þ\ fc\93ß?ýþpîÂÑ}¬·´§¥ùÝuLìÙ\ fíýÎ>~<\rã\81ß·$\7fýò¼÷WN¿E\84=6=8ü¦0\8c\11¿aÚÏÙ<ôÇOûy×\r\e\1eÜy\fõöi{³¹ß\8fÙÍXá­Kò´_³¶\8fë-:5(\0\0\0\0àéù[Ë8\96ßÖ¨9\rt\ 6\fM¼P«-\8b95äAÜ\9bÒò\80xëô\11~È¡`åi1å<äL\99>ïj\eÂoK\90§{yt\1fó\f\8có-h:\85\96WÁå¢é04O\891\9a2%U\17J]\9a·Eg\97p:3\83N   !;X2ñÿ\0\0\0\0\0<3,öÿ\1fñç\1fÿ\9dåKç\87>oíç?øÓ\87\9dÒsÉküÿñS\ eö#vìwfÏÁ^ýüÜÍíý_\95×a\8f¿ºÍñ\9e\82KóC¾sýüKvüÜ\9díýèìüÜÅS^ò¥ùùW\ fyþu»[?ÿÖÚÖoÓ\90\8f\94S~ÿ\ foè±\ 4Á\ e±\ 4\8bs°o[8¼çè\ fÎ÷¾ý'¦mÝøûç=Ô\97\95Ô\97õq\v+çÌ¿¡­Sóª\7fæe\e\16z\fB\18Æ.ô9Øu?·Ü{Óº¾¬¤¾lKÛÞÊñ    W¶e§ÈëßÚ³{Þq;æ\9b?f:¾Kö9§ç\94·uÈ\8f¾©-;Q^'=ì¯éyê­\eò¿ï&\87½\99rÿý\13Ûz\8ew\97J/³£¦í\9dvù9\9fëËÆüï[¦\18\8b\rÛ_ò£Ã|\ e¾\1fß\ 5Ó:\7f³líëÔä¹mÙ±S\9eó·¾xs_\96Í0_ÀþS\1dÍæj?hZ6;ßýeS\9b\98Í\8f\92ï\1d}`_æJá\ 4\a\0\0Àÿ\ 6í_M¥çP×äþI#±5Ø|Õ0·EJA§\99¨.xMº.\1f]µ¬\7f6\15\eVÊ£¿Ò|\e\1aqoä¾¹\14[ª       òäÕÂßSµÞÄ,ÿ4í\vºÉ\16L\1e\8aÕ\bÿ\96Ý]Ö¯½Ê:E\87|UnÌ\8d¬Ig\ f\eû\96\0WL\1dâÒ­II\ 3Îc\89¹\fû´S_ô®rú\87\1clëÿ\96\a\83i\8e\0\1f´_:I)\94\9c\M¾´è\7f+{ã­<[\ 4\9d\8aCvH¾]uHBÖbô\9aKßä ;¢\ fm±¶É\154\7f½æõ7Ó>éä\ e}\9fcª²+ÆêP\ 4\9dáÁÛè4\7f¿æù×àùjk\88\ 1\88ä,ÿ¡Yÿu\82
+++eïu~\80,µàk­6VÝYy^µ:¯IÉrh²
++yôÒ\92ñ:i\89<T\ 4í»7²é\1c¼)!;\rµ×\ 5µ\97G\89r\9cZS%Û¡\1c5
++ßIñ¹§Û¼\16ôÿ\ 3\0\0\0\0ðL°Øÿ\7fá=ÏýýåK÷\9c»dêß~Ͼáu­_Õ\ 5yÿ}Sßöå\aÿÄ\9bôý\ܪù¹Oµù´5\90àÀ¿;ì\98>Îß\861\8f\80öM\9f\7fñ\11ßèï{\8d\17\98â\ 2\8eØqáOô~~\17ççn\9c¶{Ð\1fýÒ\89½¯>¤ù¹Ö}¿ê½òºí³ûÿMïWN²þ\ 3¦y¼\ fùæ\8fý]ËG`5NáÊuãû\1f<÷°\96¿ ¦(ï_1Íí}ÄãgÝÛâ\11²w²Ýöù£äuð\1fÿÈí-\7f\81­òù»Úç¯×c>éûÿ¼Å)ÄbW\ fy\10/\93׿\ f\9dðÙ~\mÊX\9d\1f½­KûÕ¿uý\98ó \ fsÃ_7Íñ~â\91\eîîÇ\1d\8f¿níxìgßõÅ[z>\844ôs÷ùæO\90×\96»\9f|e[æCèýê×µ2ÖØ\80ó\1eq¦/K®/ûÔ´½O^}Æ\1dC\Dê}ü·í5\96ÅÖÇ\9eó\89¾L\7f)\Ì\95°rÌ\84iû²¯¼Ì\7f8}ÌÛèú1Ü0mÏ¿dã\9d=.¸\1e\eð\9euã÷Þö\82M½\²\1fb\ 3n\98úñgó6Ü>Åa\týé\vòÒ×yÔÚq{³y\e®\9fêá;Gnëñ\14Rfýø\9eX7®ó7nÙÒã\14B̽\®Z;¶ñÙØ\87+¦v»yá\98\ f\ fóÛ\97¾½«÷\1e\8fïo>ú¦»û²\1cú²mm{+ÇE\·n\çÆ\85×}`\98ßÞ\fû2\9do\e\1eyõóû<õ¦ôzز÷¸Îõ\a\9eøà0\87½íõpÌÚq\9dÄE\0\0ð?g\859ÒkÕ        ÜåÞÒ\87Z\96\8cÅí}¤Qçë.É9ù\v¬cwµ\83ÖFë´ÛQ'¶\97\ 5:7|®:ÿx5r\ f\1c£ÑîaWSµÉéçõ_:ñùªÙ¾CMÇf\8b\8a2ö9'\93\8c-²B\rJ-Ú']½¬'j×j\94ûF\1flÈQ\13À\15Yo\90\r\eí^LVûd½wYwÙÔ\1c\93,7I>[ÛÌó!Ë\1eÖ¢\9dÉVn¥bÖyì³Ï:M»\91#Ê)Êv\83vc×êb,NJ)'\17´\9fZo¦å¾Ü¹Tuêúäwß?®9ÒÚ±ø(ïËzC¶­lSÔIÚÃÒqÌz¯ØÇ[\17'å(·ç!9Íl\96S6Eî\8aä\9fY便ä¬\14¥×þ^©Á\1a\8c/>jêµ6N;H\8d¶>ä,ëÈÚ¹+7ú\9a9Îê]W\92£ÕùÒM±Q\1a\80\93ÝÎN{\8f¥lå¨å&±Ví@N5k
++·TS\94ÚõÚç\e´ç¶È\8eÛ\14\92¬\ÊR·,» ï\e\1d÷íe\1f}­AêGJSJÖÉ\ 6j\98úæ\93f£ÓæÒÚ\9fÜ\1akz·6ç|L-G\9eÔR\9eÊ#ùÔÛ\9eìQk¬Ò\fÒPÞ^k%¶äyQÊQ\8e@êSv(\99lu\17\8bÓlq9ëC\8eÕbÔÍj\8d»¬\9dÔR[²@;Óm\92ªk½ÌÒ^[T\82\1c\91´\80â5É\9e\89Ò24¡»ÑT}º"£\1düEÓöi]É3C\96F,å -^\9f\11BÛ¿ \8d=J\ 5H3©c{×sMÖ¨9ýÆ>\7fióRj¡D/54\9ekR7²úì4\13á0.ÞÛ\18\844:9ÉLÕ*Ó.vy¦¬A\83\ e´\83¿ä*\8dWÊUÓïi/»Th;]¤¬µ\92KËõ\97å4\8aÉH\ 5Ió(ZåzèòÔä|Êú  I\rå\9c3%jϽ  \9axÏF]]\94MÉ9Päôò²\9a\90ôtÕ2\88º¦\1a­f\ 5Ð\86\13\8dÑúô²\8fA>)\95£×\89Z\87¸\81å1\1a1ÈnG\8d\92Èí¬m\81\12\9aîÐËyíZ5ÉS©´*-à;!×\9f*\aàRK»(û-û%Ç!'\89æhdü?\0\0\0\0\0Ï\ 4<ÿ\ 3\0\0\0\0ðL°\18ÿÿØAû¾fùÒ=ç®\99â\9cßqØ\ 3Çõ\18è´j~në\94knçxþù\16Ã<\e·ÿ\9e%qþKó\ 5\1e<åäÛy~Á\83§xîc\8fú¡O\ fqËn~.L±ã\97\1eýü?ëï\a3?·núüïÞþC\7fÜâÿ]\94õ\1f=íÏÎó\14n\98âÓ·}úÙ\7fÒâÿ­¯ós\8fOñÒ;ç)|b\1a_ðÓß|i;Þb\9c|¾ç\eÔ\8d¼ä\e?ð­ö¾ì¨\94ô\9eCw\ÑbÀKÐq\aë÷Z|ÿôÏ·÷³n÷\98iÿ\9fõ×Ïû³>o¢\89ós÷´÷gçSÜ\7f\8ai\9f\9dOqû\94'ï¬/ø\ f\ fc0\86¼\83\9f\9aâÈß°ðÀo\rã\15b\8f¡_µ÷x\8c\7fû\9e\9f}°/\8bC\9cü\93Óö6}l\18¯`ríë¼bÊõwá\8bÎïß³¶ôe\e¦\98öó\17Îÿx\1fË\10j\8fißcúÞiùÌ\87ûx\858Äì\9f¹×â÷¾¶¶/+Ã\\8b\aMe;\9bãññi?\7fïÀ3ú~F\97úñ]ÚÖ©_>ûþs¯íã\15üp\fûN1û³c\196´1\10\eäuå»N\1e\97å!_ánÆ2|}ÚÏÙ¹+7µïýº¼Nxå¹ýØ59ɪű!ûÉë\9c¿~q\1fã\91ëP·ûï&§ä±S>ÆÙñ\11OLí}6§äõíø^'¯\1d×\9eùÐ\90Sr\18¯pø4æb6od\99Æ\8d\9côÀE/ïã*âPï··eÏÕö\12Ï{lXVûö.mëüIy­ÿê¦ÿÔÇ\ÈIß\96\1dßÊì\9dò:ñCo¼\7fX6|/Lã\1cfçß<v:\ fgÇj\94i\9cʳ\ fÙòßú2?,Û0µù{\9e»ñÑaìDìÇ~k[ö+ò:î¾\9b>دMf\183c¦óuvNÏý¦kÅ'Þõ\9a\87ú²0´Á-»ÉayñT\7f·üØÏ-ôe¾m\ f\0ðÔ\18c©u\8eì\16o\1c4ܽf³¸Lþ,¤°t\9e/§ùß4&>åÐbó\93ksrù\98\8cü\89Ô     Î5f<ê\ 4éFþÏÛRå¯@Öpú`KIÙÊ'\83üÃÛ\98uNvß\12y\15ùC\99²¦\15\vU>«±ËE¾à²,\90ϧ )Çb,:#XÐØuo³Õ\e\8b ³\9a×\92\92ßÝ\cÓ±\16Ý\9aìÐ\18k¼B<õ8¿Øò¸|Ù\96Ñ(wùNÝÝ\9ccrð:\9fyl  Òª\rUþz\1a\8dûOQÓ\93i\1e5\9d\95¬jÈy0^ã\99u$\81Æàë\10
++\rA\97£o\93³G§3ÈË¿SvI¾\9c¥è]\eØPB\95¿\92r/ZuÀA\9f!^Cê³\86\95Ç*\95àt0DÒ¡\15¦\fÇ%Ï*­\9e}\8b§o)Ó¤@¤¤³ÔZ\88ÉÌäí[>G\9bÜV\1aou®n¹\ 1óf§øó>n$\974üï\95rûE\93Ûø\83ì5 ÜûÅñ\r&j\9dIs0r÷-miqþ¸\124/]\94\86)ÿ\9dRÒq\10!¶9Ý\9ciqïYï¼å>Ò\9a\1a\8aT|hyò²Ó5Æ\10´\1aÒªa¾º\9e¯O\1aFÕ± ex\7fùø\96,\8dX\83öã\92Ü\87»\9aãnéX\15ëô\99£¸qκ]ŸÛ6H#H«¶:VC*·jH¾\96©F¶Ë\9b=*ßeýb\90ÚÕÁ\ 2I\9b\89¾?Ô\85\8e\970\9a\84\85ØbëS\957|Ô\90øªÏ\0:äÄÉ­¤4ò\1aåt˦\9dâ²?:(;ËÓhöº\ar>ç\90ul\8c´\1d¯# ¢¶Â$\15X59 T\88¶Dýt\el£qø¾$ùLÐÌ\83c9j\11Fiئ5_m\rrNKã\f©\14\1dÙ\10¤­È\97£n¥\8d7\90\1a-\9aºQïç£Ü0\16\13ä|¯QGMè &UÔó\aZÙ¼ÑF¯\95\1d\83ì½\(tä\86\1c\94\14V\91\ fûÔ\ 6ï\14=ÿå|\90ÇF­GYµÕ\81\a²j\1fwzþÿ\81ï;þç\97_\17ççî\9fîW\ fû\93O÷ñÿ&Éóê\1d{¯ü¼ýÄ4\9fýá;Â\9dýyÛÈû\17Lyë_ðíã\8enãð¥Læ\87qÍG­Z>ÞþÉ}V~~>|\17ÏÏ=\ fÿF}ÿ[×¾¶\8dÏoûsÏ.Æío\9bÆ\99\9f·°Ú\ fó\v\fcåÍtÌ[î|Ë!ýÙs\1ck}ô´¿\17¿|xÞóÒâÛ²wì5þ&ò\97\1f{Óöþ\9cX\86y\ 2.Ûg×Ï\89·îfÌû\96©\9c7¿hã\97úï&Îöu.ΩpÆÂkÞ=äí7ò©ü6-ÜÚsìË9Ö×yå\92±ëÛ~§\8fO7uù\1c     \17Ýtò_÷eµôg\9e÷·unÒgÖ/\1fýÎ>>=\ eãÓoÛ\9bg\17\0\0\0|/þFä\83<\7få$\8f\901\rϰ¥j\9e\ 1M\16/\ fÍ)ËC£v\ 6èï3^\1eM\8d<ÒÉÃ\85\rò ,\ f_Éé\ 3\98qY\13\ e¤þÜ.\8fyÉÉs\9cæA\90\aÁ\18\16·÷¿\9bç@\7f+²:8]\aò§%ÇÑ&\13°ýùD·£)\ fä^?ÉADyô6ò`©?·Ty4Ðl\10òrNǸ\87 ïx«éò\9dìHLò,*Ï`ò\ 4ì|Ò\ 4\ 2I\9eú­ì¦\ fyü] \98:n×hb|íïÑ=\rú+X.Iv²Ê\83¯¬I\9eV]KR\905\8d\82<ÄË3¶×\11ø5Ølbvr$\9aæ@\7f§
++¥NÇ3þ\9e\86÷Ý\96\ 3`ùolR}Rèòh\9f¥\14b\94\8d\aÍ\ 4\90ô÷Å,Å¢¿Óh9»¨i?ô7\98¨mM\130xßrþK}\ 6}K\7fÒÊRhRE\9a\1cbé¼\ eÄÿ\ 3\0\0\0\0ðL°Øÿ\7f¸}Ö/,_ºçÜñ»\88ÿ\7f´ýn0\9bçÿê]äó¿¢õ\1d\9fª\9f¿ý\9aS{ÿ·öç_²\8bø\82ŸÜ\9dóù\1f5õO\9fÿ¶\1e\87\1f\9dæí¿jÚîá;~íìö~\89n\9c_àWuý\8f¿ºÍm\9f\82Kós\17ï"nÿ\1dí}\8d[>ðUû}§Å\v\18kVÏÝ0ÅôÎÆÆ\97)n÷?¾ì\8c\85!\96`\88\ f\7fÿ\14¿ÿù\ f\9fõµ\1eÿî\87\98å«§±        ³q\ 6w´e+çò?¨mOc  ¾uä     ÷\ eËB\8f!¾cÍX\ e³qówMËÎ]¸½Ç\19¤\1cúöîY3í˽7­ëõSR\8f%¸f7ñè\8bã\19fc\17îoÇ®ñ\10\17þðY=ƽÚ!þýÖ)~z6®áþV\aÛäuÆö\9fڣǪ\aÓã§/\9eæ\91\b{lzpXæú1ܸf\vñ/\9cú\95\1e\ f\11ÍÒ1
++Zf¯¿ñÜ;\87e¶¯sëT\7f³1îÇOñ\17³s\a\1cÛöeåø÷+w\13ã¾ujÛ\9fù¥\8d_Û9\8eý\82)¾ÿ´íïzE?ßJ\1aæ?X;nïõ\ f¿e¾Ï\1d0Æ{ôy+ôØÿö×7÷¸\8dbC_\16¦:\9a\9d\8fk¹V^Ç\7fñ\93\1fíËò\10ã~ýÚÅï]÷Â\1e\eïr/ëG÷\19ÛËl\1cû\86é\1cýW«_»½/˾·Ý3§ú;éòc\1féó\89ä\16#\ 6\0ÀÿÈnæ#\9fú7W\98Ïü»*W¾FÆ»\16Ûmbξê\rÉ\14W¿sÌöØ¿ªS\ 3To²\1c\86\1c˰\1ec4\19½\97RÊ:\19¼\eâ±k­Aþ\9cëø\ 4+ǯ      ÄC.Þ·\ e`Ý=íöÕ\ elY\144\88_\83«£\1c­u²¿r\1fWSÛq\r~ný\8dA\8aA>,{ ó­G\9dÞ=i'§Ü\15\14ײǻÚ"´]Ô      áM\b¡Ê\16å\ 3Ú\97,¥m\9c\ e~\90U¥¨\91Õ²î±oz¥>w'%\1c5Â?gísõö©Ê\91®qïBCÝS.eÌ»_eEm?t^\a\9bµ÷y§ö§Yû£î\83ïï\8f±óQ\e\8bl2í¢o^Ú£ì¦\8eÌ\90z\²¾\95bÿ¥l¥ÍdíÕ5-&_ã\rô\1eMg\887YÛ\8f­Ag­×0p+%ª3\18h\9c@Lzô±ÊQI\99híVíA®Ú5.ÏGZbr
++\ 4íö\97v­ÍZ\83\ 1tMR4:nC6\9d\83\9c&:\18¥\rï°®®Z:?Ãòy3äcÙÚâÇã\:®@ný£\86¾ëz´Ò¢Iö\1fkl\80+=b@Î÷¢Ó\18È\7fj\98F\9b\12a\18-"\9f÷º3Úg¯\ 1\18\1eÐÁ&^Z\8a©}SEw*É©-ç·4tiý\1a\90/Ç*\9fr:òf\17cBªñ}6\90Tu\94rðcy8\9d\1f¤ê°\13\1dÉ\93Æq\12N\1a\7fÖ10zß_¥ÁË\99b\8a\94T\8bE\90æ*\8dÔêêå¬É:\9aA\8eÅéH!¹\18I+\90=3r\ 2\14ý¤^Ú²\Öú8í\95Æ¡Ðÿ\ f\0\0\0\0À3Ábÿÿê\93\1e[»|éü0\8fû{åuÛg÷ÿ\9bÞç\98Âü\90«JûS×\9cð£\7fÔúñ²\99òäÍæÛ; õOÎöÃ\1f=õM¾dÇ¿kãùSvf~î\92ÖGª}\9dG<~Ö½ý}íç¿gÊ'·óøÿ3§Ü`;çÉÛ´\9b\97-É1wnÏ#§\99/Ú²£§õ\9dúÛÛ\1e\18\96\ryÈ.Zò½w¿°÷±»Ôû\8b¿¾\9b~û¯O}Þû\7fxCÏ\ 1\10ìÐ\8f~û´ì\93W\9f\90Ónè\87íóÞkN´{þ`ý_õe)öuÞ<õ%ßøûç=Ô\97õü-«ç¶ï3®Ó¿dã\9d½ßÞ¸Þç½n\8a=8÷\8eS~§÷Û»Ú×yÌ\94×í\9c¯~ñ²¾lÌcpßô½\9f½ëÂ\97õ~ûPzÿôú¶½£äue8½Ç%Ô\94û:¯\9aÚËç>¾­µ\vgbìûù\9eÝä\91»~*ëM\vo~ñ\90»m\88\13¸kÊ©0\9b×í\86\9f+÷£_?Å~lZxô·z\8e\ 3;ô]_5å\ 1ü\9b\8f¾éî¾,\ f¹ð®\98\96\9dò\8bçýe_Vl?¾÷µ}9R^oßë¤\9e·.Ç!¿Þ£S\9cÀl¿ý]Óù²á\8bëßÛûß{n\94ÕC\8cÊÊýï\ fí&ÿÜ\99Sÿûlþ¹\v¦ò<ná¼÷öeÕöýüÔº±Íÿ\eû\93\ f\ e¹5\87ü\81\9b\96\9aµ}YÑi\\ 1\0À?£%sÁW\8df0\9a\9bI'j_5ô+÷¼\85\10w\91³ÏU\9b\93ͽ÷|Ì\ 1ø4ìcÞ©\ fÝkÒ>¹í\8b²\ 1ï¼1\8bcÂeýE\1fW\8a\86\ 1\8c\9e\82ø\80\9eoQFbÈî\97Å\9c}+å\92lõ¡\99é\8c\1c\97\94\89\9bÆäÏö\1fkXDËhçB\fSl\8bæ}ÌZX¶æ\96/QÃD4\eeÔ<\8erSZ\8a\91\9d4Ú5.\85â4úDV Û\92ÿH:ìÜ\9aTå!B\8a®äv\vïô\1eßÙ\14\92¬ÜÉ}¦\97:\94\15¹b4\7f¤ÞBJ\ 5\ 6ÍÄh\9c&X\94\rH=ö¼\879UyFð­\eZ\1f\92rÙu\1eJ«el£Ñþvïúw¢Ô\88´JÍ\8b7äh,ò­Pä\8d\1c[ûm!:©åÂ3\1a\bPL\1db?\9c&ÅÔ,\83zÛ*íU\ e5Iý§\9eOÑÆ,5¦Y\105}·¼\174Ó@Ñ<\fÚ×\1f£\8eÞ\97\a\ 5í\90×d\8a\1a\ 4££ü¥-[MÔç5+\80|Jª?Hk7\9aå0\99\9c5"C\9aµ\94J\8bm\90"\95\86'¥¬m%É×´«ßjÿ}Ð$\9eF
++¾ê\81e\8d\1e}\r\12Ðæäcjå©É\1e¢mÑD\1a¾#û\96õtÒø\ 6ù¸Æ÷´RѸ'-QÙ®4ÔR\87X\93\99ܤ)ä¼R|\10ýÿ\0\0\0\0\0|ïãù\1f\0\0\0\0\80g\82ÅøÿÍ\9fxà³Ë\97ÎÏ}}\8aA>bÇɯêyï¼\9d\9f»z\17ùüökïÏ\8e\17¸\7f\8aSß9oߺ)FýYox~\9bG0WcVÏÝ7m÷ô\85Ë\7f¼çy\8b©Ç)ß³$.ú¸>·\9df\ f\1e\9fâö×\1f\83Ã|Þ6SÑ\0\0\0\0ð=iÉ8\8b\95ò3ê°Öì\82É:@Ƨêt kû¬óöi8¾â)Ë        ¸ôùÿº\97>ÿ«³Ïÿ\17LÏç¿{û\ fµçóà¢\9f\1fÆBëûë^ýì?mÏóÆ\94ùa¬úòqøãï\ 5\eåuè·®}mË«/ë\19ç\94×\81ÇoXxà·úï\v.ö1ÇGOsØ\9f·ð\17/îc÷}ècâo\9dæ\9bÿù\e\9cû.\ e¿\ 1¼gú}àü\85\9f¾¼/\93\9ak˶·e+\8fÏ¿x:ÖÙ1ø[§u\9e»ptÏ#\90Ó\90Ëþ\98)\17úlîüK§|ç³9ðß?\95Õ7\ f8åËý7\ e?äãß·-{\9d¼v\{æC='½\1dÆ¡\9f9íË\19\vǾr\1c/ß¿wÑÞãö6ß²©ç²\ fÅ\ e¹å§ïmZØ»\8f'\8fÒäÛ²MÓ1\9cö¹?°}YN½\ÊTG³cé·ï5nïí\1f=½ÿÞ\92Ʋîãìu\9d\eï~îÇ\87ßi|ÿÞ\93Ó¼\ f³ãÞ·Lû9;F}Û\92eG\1fØÇ¡»\96\7f\0\0\0\0À\90SÞ8Íù.\ f\895V͸Ðß_)O\84<Õ¦dM¨Ög«ÓØ\9b\1cäQRS;\14/Ï \9a\ 5A\9eV5\13B\9bðB×éåqU\1eó4\9f¿fçÒIí}2>.}\ e
++Qç\84(IGýWydÍqÕ\92|\ 1¦¶¹,¢Î\ 2¡\13\893ä¿{>\7fÙ#y\8enÓed3Î\ 5a«Û]®\81§"çÃÒ\1c\14»\9co¤æ6\eH\96§ý\18Ç÷L´Kruìj~\8e\10ÛÜ\1fδ¹$\92\1cajSsD\93\13M\95!oh~\ 2\915\19@\88!è;:\9fF¬R±.&©Çì¥ú¢óI³s$-Py²óA\7f\10\1f\0\0\0\0\80g\82ÅþÿO~é\1f\ e\¾tϹ-Ó|ä\97\1fü\13ojñùÅéûS\9fð;_tþñ­?ß\86Uós«¦~ä\83þè\97Nì}è!ÍÏ\1dÕr\8bëÊ^ø\96ÿÝût­\95÷§8\82c\8fú¡O\ fý¹n\8c;Ð\ë\97\1eýü?\er\91\9bù¹c¦Ïÿâk~¸\7fÞ\85<?ÌÓ®ýÐ\ fï8pG\8bSðY¶»nÊ\93¾s\9cÂuëÆ÷·}úÙ\7fÒæ\17°:\8fÀÍÓznß|ðßöãMòþ~ÓzÞøÚ\1fiûSÛ8\88\9egþz]ÿIßÿçíýXìê¹\83¦r8ë\vþÃ=®Áºåó¿ÿí{~öÁ¾,\ esÊ÷x\b\8dkøÃ\8fmìq\r&\r±\ 4÷µßj4^àÂ\17\9dß¿gí\90'ÿÑ©¯}ëçßZ\87y\ eL_Ös¾ÿ\9a¼N°Û¶÷eeÈõÿø\9añ{gßõÅ[z¬D\1aráï7ÍÁð3\ f_4ÌsÐҫʲW,\89±X>\aÂÕ­¬V\8e±èãCV\9e¯àª¶ìtyýý\roüj[\96rèñ\ 2ÇNåò\99\97mèå\92Ã0'ÁEëÆý\9c\9d¯à\9e©\fç+¸líØÆfç$(Ó~¾þÒ\93z\1c\85ɶ\7fïài\9d\eî<í°\1e·a\87y#öoë<Y^¯<ääÇ\86\98\ e××9?Í;°ù\81×ýÊ\10Óaz\99ݵ$¦ãð>¦Å\ 5\8f°n<ö·\7fb[ß\17\97JÿÞ=k\16¿·åÀ\1e\vâjßÏK§y\afçUès\vü¤¼Ö\7f\7fêq"f8\86÷Mq7\9b\16níû\12ÂP\ f}~\ fm\83wݰ¡Ç{\84\1c{|ÉAëÆsg6öä²u\8bë\\1e{rÕÚÅeËçxز\9by\1c^1­sóÂ1\1f\1eæq(=Fæ\82%Ëþkß^v¡\1fß¾Ó\1c\16³±'óÓ¾\1c·pÛ\87úuÊ\fq7\17­\1dËóµ\ füáG\86e©¯óý»\99\8fáøi{ÿús÷¾´_ËÌp\8e\1d³Ïâöv\8eg\91zØÍ|\fë§öùï÷<v¡/\8b\85ù\18\0<ÓMùÅM칿åB\1dC2®çew9Ë_ÞbJ\90\e¡%qÁSߣ­¶´~7ãåö2éäâò}¹\89©rGRu\1evï\ö1Ê=c.6\15cu\ 6ñ`c\92ÛZ\8d-v1ë=Oñ\9a¢Ü˶\9cöËéMP\8fç5Úói\8c5EÿЭ\90ç}Ì×ÿTõ_¶\þÙ×6±}Ñ,ôe\97}»í¯\8dò÷JJ%\ f\9f\9d\99c|\85¾Ò]åÊÏ©øU»Ééo\9dÜ\8cë\7fk
++w\9båh4ü:è\r«\8bU\8e»\14\9d\ ä\9a\93\86QWù²N\18/7\ 5rø¹öÙâ¥Ê5\8b{\8b\9dNR=Z¬E÷m4Î\ 6礼\Ô¬ï>é>\16Y{\92\9b\0\e¢µQW§iÜ£Ôºì¢\86`\87¤ÍHcÊ£®©F«¥©Aàò¬¡9ì¥\8eZöwÍÁ.û©µ¢¹åcÒcÔÎaÝ=\9d_A³ÙË=\9aìe±ÒÌdß\8cÜ\ 5ú¬s2È]¤F\9e×*;à5\92ÜTù¢v\1dËQi;\95Ý\95\1aó©H\ 5x\r{÷­\91\14«w¶ÒzªT¥¬OÃߥ\8dÈê}\19êH\ 3ɽ\86¦·>i/ßðV\1eq\8c\14[_.;,ÿÔ§\119{\96Ô\7fõIÛ«ÕÚjÿ\8eQC\95s\95\93¢J«\1fç\96\88µJ\ 3*%õ\7fkL}ÖûJ98§\89í}ÕªÒy\ f´eË\9b½¶¤¾ôô\93\92¬ÁÉaèûm\1dÅHËORÕ9é\11\e¿d\8e\85\95æ~¨AóâW­Z;\8e\aÐxþ ÷öÒ"úsÈ
++ó
++HãÕÈ  ¹\a\96\8a\1cö_JW÷)¶û¿±ýÖÔb\1e¤åéÃ\9e\9cZÃg¥(dõYûò\93   FG\ 3ÈvkØÅ\9c\ fí\9c\93¢oßM­«_ÛX\92k\8a\9cÀFÏ[¹Ê\18mª¦Õs´FÏQ©Ï ­ROÕ\92¥5K]\e©s+M+ic\94}ðr\bF.YRm\81þ\7f\0\0\0\0\0\9e\19\16ûÿ×>ð¶ßZ¾t~î\9aÖwü;ò:ðï\ e;fèÇ\ eósWOó\81\1f±ãù[z\9fk­óÃøó\väõÞ¯þà­­\1f¾\842?·~ê·\7fÖ_?ïÏz^\0\13WÏ=¾d\8cÿj?ô[\ f\97L1\ 3ßÜë\9c\az?r\ e\93×ïm[8ü\ 3ÃXý¡¿ô\89¶­\95û\91{_ªö\85ÿþsξ¿÷#ûa\8cÿ\86¶/¿.¯\13^yn\1f«¯\93\99¶e_\9föóÍ\vÛ?Ö\8f7Ça\füÔO>Ûÿ|PÛÏmò:cûOíÑû\83ÃÐ\87~Å4Oûg~iã×vîK}bI\1fìò>Ñ'\97ô\19.ï£Ü4Å/\9ctù±\8fôø\88l\r\r\1d\0\0\0ÿÌZ?sIÚóëÇy˽vÂû\1a\9c\ eâ.)ØÖÁêLÒ\1cg6\17]\1c5\81\96sÕ¹â\92ÓiÔ}ÑîO«1\v®\18\9d!ÝÕ\10åÎÝj\9f³«¥êÀp¹\v®±Í¦n\83\8e\1f\8fA×ìCt¦\96$\ f\1d¹\ 4Y[Òþ{\9dÉÝæ\14Æþà¢\9b·.ÄR´ÇYþÓi\8e\9fÎå¨sÄ»Ö×*ÏF1È®h\8ftÖð\ 1o}\8dÅÔÞ¥-{(\e²QG\85ç`kJ^;©½±Ú\97\Cnýç²\1a9&?ô3O±,É$££ì\83\ 6¾\16íÇ®\9aÌ­\ 56D\97¢\ fV\9e\1e²÷Fö®\ 49B\13¼N\ 3ßúòå)@#GLÍ1Ér)QÙï\16Å\12²kA\ 5®Í6/;§óÆg\9fµk¹õb§hÚ\10\98\1cfÑ(\93\9c\\90º\90ç*¯\9dìÚ7¯a0ú Õâk\92Ó8\82ªÓÚ»êk«\13ßs\7fµyèkÌZÞÎiÏ´M)k8\8e\91RÕx\18\8df\90\83°Ù\ 4Ùv\b\1aÉ\125T§Ö,µÙ\ 6»Kqj¦=\rHðÚ&\82K\1aE!\ f\ 5\92\92~­Ä]Ä\9b<¥ýê-® É¡\84h4¢C\ e¿ÊG\8d\97&,5%\8f¾UÃkR\8b\8fpÒμÆôhéj®AiTÒªdï¤ùË®hFÀ¤M)J1I\8b©Y³\ 1´Ê.\9a¦AsùU­\84Þ\125u`\96
++HQªDö\\1aH2ƶ¤sËs1Ðÿ\ f\0\0\0\0À÷>\9eÿ\ 1\0\0\0\0x&X\8cÿ\7fÍ\97Êß-_:?·ÿ\94\88\1d'¿ªÇÿkÞ»;Zìú©ò:ðökNí±ò1ÏÏÝ<åTÛ9oß\15»ÈÛ·G[Ï\rò:ø\ewü}\e/`4oߣS^º\ 3ÿôÝ-7[\88:\8eà\1d-~\7fv|ÁUºê\96+ëà{\ f\ 5Sªòþ\8dÓüt;çó;¼íÏsuý¯Úï;=\9f\9f\95ý,m»Ëç)\9c\9f;¨½¯1þ\87>ùÐ9íý\9aËê¹ýÚû+çë{ÿ\94+m6_ßí»\99£ð\9aÕã±o¹ó-\87\f\86ùý\ eX³ø½åy÷.\9bÊà´|f\1f¿à£íã\ 2VMyÍfÇKÜÚÖ¹rN¾\9eïíÝòzãW~ùwûX
++3\8c\97xh\9aÛð/?ö¦\9eW0\8dã\1e\1emßÓÊ:û¡½ßÙÇD¤!ÿá\rSÙßph\1f÷ i9úX\8a\83Ú±\1f%¯+Ãé÷öe)\ f¹
++§ñ ³9ùnnß[9ïÞû¦¼\89³ó,ÞØÊlåñ\19×­\19\8f/ì±éÁaÙ°ÎKçÇö|É>ç|¶/«eé\1c\85+çùëã3ôüxý\8dçÞÙ\97EÛ·wÉÚ±-Íæù»\7fª¿3\16^ó\98^Öï\98òÒÍæùÛÒÊeå<\7f=7â;åuâ\87Þxÿ°¬öcØ>íËoܲeÈå\17s¯÷£§y+gs\0î1µùï¬;yaÈ×7\8cM¹}j\13³¹üÎlmé|=W>pÎ×\86\~Ãñݱϸη¾¸Ïõé²1½Mì?\95Ëæ\85Cú8\99ì}_v@[¶I^'|ùèwö<\7fÑôý¼~Ú\97\r\8f¼úùmY\1dϱ\8b§öùý\alëåR\9dïõpÇ\92ù'\97\8f½¹g79\0\17çú|ÿ-G?Ü\97µ)XvÊý8;ßåõ»\9cïR¾7µëåù\ 1\81ï\ 6\94\8b¦å\83\92?U¶\ 4«©¿\8a\r1õ\H\1a×èmÒð_S\8dNÚlÿÉcrs\91?3.g¯yÝ4Ǩ|Ö¶\8c^Aþ\88&cR\8c\1a\88l5\80µêlÌ\1aøª©Ö|LÿH¹®ä/VJ\1a\8c[d\9dÃüROU~º1÷Ôâ|Ù5iØ­¬@\16ùaÛOÑ\9c\99ûKÊT\v^\9bI*ÒBì.òuí*\7f\9cüÕÐL½©ºÐó\1f\8f±Õ¾\ 4ïäÆF\83¨Ëbγ\9es®ÊÁ\84 ³qI5\97¢iæ\8c¦2\8b)§jjÕtr:5·\86ek\1e=ij²E\rwÖ,}RFºÇÚ\12\9c4Y9t©\8f°$ßÝJ9Àv\95»PZ\84\89²\99´B.±¥yö\96æ\ fÔ\13«Ç<»\JÏÓVª/Öç$g\87\rÁ\9a¢\91áÒ\12\8b´\18Ù´ÜôfÙ\8c¶y«éä\82ÆÆ\eù\94üïRå\ 4\v%j\13\90ÿ×ÃnaÓQSÈ9\9b«®A
++F*U\ 3\95K­^g&×Xpk´\98e\97C\90ÍkPþ?O<øÎ¹Û¤\82t2öZ\92\86ÏKã\94¶h¤\9a\9eÎ\0îu¦x)ZY\83\94Z\91k\864÷"\a/'¶×Øl£  %¥ªt\83RµòÇ;\9bX嬩\9aUNn¸ôl\96V\9cc+h¹\98Èê[Ã\96í\ 4+'uÔ\13ÀhÊA\1d\95 \17:MÜhÛ9]ô¦,i\82¿\98\92^R²ßMî»§l®øVNr­¶®%)Ôá\ 4zéÜ].IY\81\\9b\92\ 6 ·}^\9a\rå\90b\90ï8­s\1dN½jI\1eA¯5¬íLsq\16\1d\93\90\96äéÔèû¤\97bM5¨×Ö\99¹\ 6õü4riÑ\ 2´\9aÞO+@Z\87\þK\95Ó2ëp\a9/¤Î¥\MÐ\99å¥\ e´Î¥(ôÒèô\f\97\ 6f´t¬æ\98\ 5i¦zÉ\ fI®æ\9aë°è\95H¾P4ã¥\ e\1a1:úDêVþ\90´ki©zñ\95æ \8fwr!ÈòÇDZ\86ײ\92F(g¸^{\836$i7\9a6R.¨:\91¢\9c"RÒºÛQ/½QÇ\84ÈI¨c\ 5´½µ\v¡\97ö¨C
++ª´<ùc×Ï¥\94ätÖ\93T3GÊß\19?\8cµ©²®\1ct<CÔ\15ëµ\92þ\7f\0\0\0\0\0\9e    \16ûÿ/ºþô\85åKÇ<t{\ eË\87¼wô1\ 1\0\0\0\0ð] ÅtÅ@ÿ?\0\0\0\0\0Ï\b\8býÿ7ýÃÙï]¾tϹ㧹æÞqØ\ 3Çõ1»IÞ\7fß4>ÿ=û\86×\rãùWÍ/\99Ïï\88\1d\17þD\1fóîâüÜ\ 5í}Í\17pèí×¼¾}>Dy\7f\8f6¾uvüÿ×§q½\87ï\bwöñÿÆÏÏݺ׸ÝÃÿó³Ú8áTL\98\9fÛ·}~v\9cÿ5m?\8fÒõÿñ\8fÜÞæ\1d´5ÏϽb\1a«»t>Âùa\1c²nä\97\7fþÐÇÛ8\7f\edý«¦q¸\87î0\9bÛûÉäÕs÷LûsÖ\17ü\87\87ù\11\87qîONs\14Î\8eñß:\95ßì\18ÿG§y\ 1gç=<vɼ\87\87\8fÕ·¾\8f\93\9eoëüqy\9dü»g<<,«}lùõÓ:gÇø¯oǬc¡Ï\7fðü}Ú²\98\86qàÇ·ïm\90×\95ï:ù/û\18ÿ\9aû²÷ïf.Å\e[y­<\97â\93Ó±\9f{Ç)¿ÓcJ\íÇ÷Ð\9aq_ÞðÕîìËü0öúø¶lå¼\ 1\8bq*ß|Ñ\90\87¡úÐ÷óö¶LÇÜ\7fîãÛ¾Ðó\ 6ÄØ\8fý¾}Æun\8aç=6\8c\9d\1f\8e½Ï}©mäÉ5ç~©/«ÃXïc¦¼\ f³ãã¿ÞÆÜ¯<>þ\92)§Àæ[6\rß+C¹\1c<\8dã?ãÑ\1fø\17ÃøøáØ?5Õûæ\85ÿúÂ>ÎÝ\85ÞÎÂ\94ãâo\7f}ó_÷qî6ô6qt[çµò:þ\8b\9füh_\96\87:Ú£Õ߯Èë¸ûnúà0\96}Xöø\9añØgDz?¾vlKÿjõk·÷qçy\18so¦ý<ná\9aµ}YÉ\81\v-\0ü³ÚÍX]\97|v6Ë\1f[k|ÕQær_åKÒqÞAg¤r:¬ÙT¹»ÑQÁ:RÖ\84\96® ä\9dÆ\98ïblîJù\vt,ªNªe½w:\87U\1eÆä\876\a´ÑI¬jû[Üdz\17\97k\92Û7Ù\1d\1dí\9dS6E\87ç&\97m¨Yo0\9cæW\90=36Ö`¼lKn?kmãp³æs(eÉØxÙh\96}\92\ 2)6\ fã§w9®Z?c\8dÎå%_\v;ÏsVkР    é¢ìX\94ý\94=
++Z\92-9\82N\97¦)\11bÐì,:Ú;D/·\88Q6+û«Gnjj\13©éì^-g\80\14[\90\ f\e\9d¹NG\87W£Y\ 4ä\83Z^Ig¯ëé\1aäÖÚé ÷ Ç#[¬:ø]ö¯\846ÔÝéDw\9aI!ɺã\92ùä4\83\91Èã¼{Q\8eJ§<ÓéÞ¬\95íÉÞ$Ù¨÷ÑH\83©mÄp\90Z2:bÜT©D\97M¶:Ò_ÚCÖÁì:¤YK?¤\9c\83Î\84æ«Üؤ Y\0¢Õl>¶:\9dÚO*\k\>Ý&±«\9a\ fCÚ@\94:\94\ 2-Ã~>]ç\ 2lõ^5û\84\93²Í\9axÀÛ°d\99|XJW\ eÓµ¶\92KÎNî(C*EÛ¹ìu\90\83\8eZ:¥h:\11§é 4«\88´y©J=í\92ì\9eæ\1cÐ\84\15\9a\8e¤\9d_r$+äºèç\9e´âªÉ+¤A\ fsìe§Ù#b\b:ýÜX¦Ëæ[\9c¾ÿ]\98ÿàé<¿^Ñ\82ÐTaí\1a\92]\88\96¨é+4ùJË·\90¤ñ\fé+äºØ\13\9f\14\15C\8c¡]H\93ìeÖsZÎ\16½zØ¢Y\1a¤L´\9d\95`\87:×Ó¾\9d½ò¡ÐÚ\85¦ (Úú¥½\14}"\9aò$HE\19úÿ\ 1\0\0\0\0xFXìÿ¿êûß»cùÒù¹W´>Bí[<âÛG|{Ès\1eæç\ e\98r±¿ð-\87\7f»÷\ fZ;?wéÔÏ|È7\7fìïZ¿½µS\9eÿÙþü\ 3¦~Æu¯~ö\9fêûÑ\982?wÇ´þóßöÒo´÷\9dwóC¿ùåò:öÞ\ 3þ¡çùw²þÛÖ\8dëyãk\7fäÏz>\7f\9d§àú\15ûóWÏ\99öùÖϼðÀoõ~{\17{_ù\93Óº¾uý\19\9féËòÐ\97\1c¦\9cÛ³9ýo]7\1eãù\vçö\1cû\9aà±-\9boǯ}Ðß:ò\84\9e×^\7f\emË^±÷¸\8f³ýý÷/Yç×ÖöeeèK¾yZ6\e\vð©vÜ+Ç\ 2\Úúo5ïû=\7f°þ¯ú²\14ûö\9e·×x|o}å\96¯\f±\0CÌÂÕmÙÊýýûMýö[\1fyÕ÷\róA\fùÛ÷\9dæ,8wáhß\97%Óûí¯\98â'¶Ü{Óº¾¬\fó'\1cÛ¾·\9f¼Îùë\17¿²/«C\7føüTG7}dS¯£bS/ÏõmÙÊs\ 1l\9fÚólNÿÇW\8fûyúÂå?Þ\97ÅÔë}ßV\9eÚW~üÝ'\ eó\ 4Ôan\85\8b§8\81Ù¹\0®[7Öûl¾ÿc[½¯\9cïÿSSÝ\9e±°åÀ\1e{àj/³ÞǾrNÿ'Ö\8cu;\9bÓÿÌé\{ë\91çÜÝã\vò\90Gÿê)\ 6d67ÿÁSÝnZxô·\86Üü±ooßéøþæ£oêëLy\88\91xbõXÖ³q   [Ú±¯\1c\97°~:\1fîyîÆG{þ}\1fû:/"¾\0\0þÿô?Ñ\87iSñ!\95\96SÞyÓúϵ\8f\9cÜnrÓ\97\10\81Z³üwJ©õ\7fùÒûë\82IV;ãµ\a¸jo\9evV\85à­Ñ¹\ 2´/Oþ~'¹Î;oµ«¾uÀÊ\1fuÛn¾´çÜU\9dî ê\1c\0^³m\97Ô\12áË\92ÒÖ\15\13Í|í5Ͷ\19zz«i¹á\93u\1a\e\18çSxzä\a\ 1\17\9d·AJOoh¥ìZùÊ\16åNB{q5ìÒh/¡k©Ò]+\83\18u\86\ 5§9ÂKÒcÔ\ e?\r6\90\82\92½\96\e\8d¢]â.:Í\85/ÛÕÒ´:G\86öØJ\r%íÝv½Îå\10Zÿu\91»V\8dú¨¹ý[\8fËÊ\81æUCÌ\86Î\84àZߦV\9a\86(Zí\9bµ:\ 5Àª§t^\8aåùäwêÃÖ<ñ-NÃkl\83\19ûÁw;o\84æB\1f>#\aØBbR.Eçü¨Þ¶V¤¡%-¾ ö}øÇ\98Ëc§yO\\91R\88~ìÃÕÙ
++ô\ 4\88%ö<kOãX\88åñ\ 4Ó|\16Nc \8b\eËù»)>F«T\e\93Q¶-\17\bÝtÿß²\11«Å`ä\r9Xç«ì¹Î\ e£\81\90QZ4\87^\0ô`dó²ë:\ 1\85FEHû\90\13Q[\8dkóÙhÄ\84\ 6\8aèÜ\fÒîõÊ©3`èù¯q5ÒþêXÎKçõX\1eOð¿\15·Eÿ?\0\0\0\0\0Ï\ 4\8býÿ[Ozë~Ë\97Î\ fý\82:nÿÀÛ¯9uè×Í«çÞÑÞ_¹\8f|K[¦ã\98·>ö\9cO\fý˾/»d\1a§ý\9beë0?x̽?ôâ)wÀÆ\85W}dè/\1cæb\7fÏ4×üò¾D\0\0\0\0\0\9e\ e\86Xk\ fô\bQ\13\\f1 I\1ea\97Æ¡ì*&ËÉ\13rÖÜ\ 5\1aæS\8b¦\10\b\ 6rõ.j\fH)VCP¼­Y3txÍ)P\93\ f-Ç@°\9a\15ý¤oQ\0Ns\1aȺéÿ\a\0\0\0\0à\99`±ÿ\7fï\7f\1dË\97ÎÏÝÖúÝu<ø_\1c\7foãm}\9aòäk\7füÃ;\ eÜÑÆó{ÍÛ\7fG\e»;;>ÿýíýåyûWÏÝ°ÏøþY÷\9d|U\1f3oì06|Úö©¿½í\81a<ý0\96ù\8a¶>\8d?Øÿ Ó¾ÔÇÅËÿµe\97¶e+\8fµ?|Êã?;\9eþþ)¦á\93W\9fqG\8f[pÃ\98d3\8dI\9eÍ\9fßsÝkY\øÃg=<ä¥\1fÆ·\1f4\8dñ\9e\8dw8ª-;R^oßë¤>V;ÇaÜøÅ»\8cwX=w]û\9e\ e¼ÞðÈ«\9fßÇG\8fs\a\¿$\86âº\9e'¾ºÜ\97]3Å^Üòc?·ÐÇN\8fã÷\1f\9a¶wÒåÇ>ÒçsÈmü\ e\0\0\0\80g\8e%ýÔ«V\98\7fÀkb\85\145e½oY\ 4b\f9&Mô \19\a4%Fj\19%lÉE\93wdë\82³¥\8e9\ 3\96å]Ðôru\17s\1aèèö\96ò£å\1eÐ\8d%y~1¹\8dt\1fs:<Íò\8ch\ e\10ýR®¥M\80á\869NvÕ×/Û\93r+Å·î{Mèfz\ e\0Íh1Íß¡Ós\ 4S\9cÏe̱Pä¸\8dN颠      ¸d÷õa¸åÅ\902Òåò\1dyz\96Õj\1e\b\1f¼\96)ýÿ\0\0\0\0\0<\13,öÿ¯þ\7fý««\96/\9d\9f;vê\13ÿÝÛ\7fè\8f[?¿\8b~ìçïùü\7fíì\96\9f¿D7?·­}þWåuØã¯þ\ëç\ f.\8dùÿ5'À\11\8f\9fÕúä5­â\98Ëü\ 2y\9düÂÍ\9fíùôÍ\90W}[ÛÆ òÚr÷\93=ÿ»\ fC^ü»vÓÇ¿~\8a\e\98Ía\7f×nrØooë<Q^'=ì¯éùØ­ëûrû\94ãý;Gnë9Þe_z_ýUSÎüÙùÞo\9còÛ\9fö¹?°CÎõÔ÷¥Ly\12V\98ï}\8a7¸è¦\93{ÿ¿\8eüXµs\8eþ\7fc\7fòÁÞ\8f\1fZ®P\0\0\0\0»×úHuNõh\92Ngïz\7f«ó®d§ÁÎ!Ê\9bÞh"²Öÿ­SD\18\1dW\1duN\b\93\9c\vÁhÞ÷Pd-9[\9dûA'¾×Ù\18bÕéØ5ἬA§ª\8fÑÉ×J
++&dÍ\ 3/\väÁIsàçÖ\95^t^wíc¯±è|\ 6¶Fﲯ­\93¼¸Zm\9fkÃê;6æì²\89q<\8eìÍÓx¾\0gbÑí¥Þ\13­]îFþC>'{¬ó6d§ó\0ÈWªîi5ÖHy\19Ù½ì´ß:iáë\16d\97[\9c´\1e«\1c\87\951\7fÿJ1\ 5)x_rÒ©\0\85ï\83N.!ÿå\8avågy`«Þ\ 4)h)T©n\9d\12$èD\fAC\ eª«rزËò¹©}Èg²Ö^\95\ 5úÀÚêÄD»»¹#L\94\87¸¬i\0L«W\9dRDã³\93×OW\9d§BJ\ç\aÐx\ 4©÷¬\ 5Sd\17\92´Ð\10eÅÚç¯3$è\ 4\ 5±êAÉóµÕø\87\92\89\ fªÔ§\97\96 U¬s \ 4\92\92\8cY\1akÑIIZ;\94½¦ÿ\1f\0\0\0\0\80g\86ÅþÿßøÒÏܲ|é\9esïÑ.ï6Öüò\83\7fâMÚ×\9c\8b[5?wÌ4Wú\11;ö;³\8fy¯~~îð©¿û°?ùôëZß´Iu~îÖöy\9dGàÐÛ¯y}{?Ä8?wc[¿ö¹¿àÛÇ\1dÝâ\b¬æ\v¸¸Í+®+;ÿm/ýF{ßy7?wl[\8fö}o=åÐþ~ôòùG×\8c\9fÿà¹\87}»½\9f¢¾?õ±/\8d;\98\9f; }^ǻ߾ùà¿íÇ¥ûY¦õüäYG´¼\ 6:ÙäüÜQí¸®×²8éûÿ¼½\1f\8b]=wÉ\94×à¬/ø\ f÷y\10¬ëq\b[§Ø\89\13\8fÜpw\8fm\buèß\9fÊï¼\85Õ¾/K®Ç\ 5¬oû 1
++'ØmÛû²Rû²\eæÇï\9d¿pþÇ{N\84P{\ÀºÕã¾\9c\17oéËÒ0Oû~m_V\8e¥8sÝX¦§å3{þ\ 2\1f\87\18\8c\98\88ó\1eqf\88³\18ös¿iî÷Ù\18\8c\87¦<\ 4Û\16\ eÿÀ\90KÁ÷<\ 4OL¹\e~ïÀ3z¹D\97zN\84÷Ï\8fû2\e»ñõV\aï\96×\e¿òË¿Û\96%3Änô|    \eäuå»Nþ˾¬æ\1e\9f1¿v,ÏÙ\98\8fUSþ\89-÷Þ´®/+©çY8¨\1dßsåuá\e¿6äuH=¯Ã\ 1«ÇcÿÜÇ·}¡Åg\98\18ûñÝ1åR\b{lêñ rðC~\86©þN_¸üÇû²\98ú~^Ö¶÷+ò:þî\13÷èËêP\ f\19ÏÃÍ\ f¼îW\86Ø\14ÓÛÒ\ 5S;;íòs>×\97\15Û\8fï\985ã²S\ fÚöÅ\1e·b\87un_;.ûèª7~¦/+Ãñ]Õ\96ý¤¼Ö\7f\7fê1-Æöº=~Íx\f\9b\16\1eú`_æã°\9fk\17\97ÝzS_\16B_ç+¦v6\e'cV\8fe¶ù\96M=OF\18\8f¡Çå¬\1c'sÙT\9e\e\17\81\9e\99þ½-m\9d\9b´Ý\7fùèwöeqX¶~ÝX\9e³94ÚÛ­MüëÏÝûÒ\1e_c\86óhÿ½ÆëÿßóØ!\87F,ýØ\1f];.ûW«_»½/Ë>òG\ 6Ø­1\1f²ö¦h7ÐnúP¦ù¾\8d+YûQl¬Á\ 4\9d¥]ÿ\82ǨÓ4\87jmÕ\99Òµë¨\14'\v\8cü=ðE.îUVkbÖ\8e0Mɬ30·à¹6·rÖ®$SdQ\19Æ\9cêTÑr\86Ëß\92\10C\9bÿ\ç\98.I{\89ª­9ÇÅý×?Gòç?y\1d\e*G\12êÐWçª\ e-\rÚ\13\98b,:Æ´\98\9at\ eú,»Vk\91\1dÑôÎ9ÄÖÇ\17µCÐè0Í6ßµÎn\1dZ\1f¡ö:ÉÞùªs§\87q<¨,ÑyÕå`µ_²u[9\1dU*\97åd5ß\90-ú®vÔI        é\8cñZ2¾f\9d\a[\8aWgÜ\96[\f£}\8f>:)Ú0ÎG^L\965¦èrÒ¾(ãǹ¿\93öd:;\8dg\95\ 2/ÃþH\8d$Y\85ÎE/\7fÛ¼OÚI)[\rZ_:zØÉ\1eë¡TYjdsr\98Ùfíg5ÑÈÛµX-\9b6}¶   :Ì×ù¬\83\ 6Ãè\81\16¹ùj]\86¾M(/\a\11´gOê&ç*U$ë\vEêØH!\1a_¦}\94\ 3\87áß\9a<[v.\95§ó\1cëÿ\bóÍKñ\94ØÆ\rG§%Tüb\9b\8dY\8aÒè\0ä,\8dnÕÊc²}ÖYÒ[³Ñ[\19=\17Ví®ozé8mY­4&)΢5\1eb\1aûO½î\8b\19Çv?\1dç]÷mÚtíJ]5\8då\96êÖ\84êÒ\ 6\87ú\91\86§#Õu\87´?Yn¸µ5jDzvÎ\96\14\9c¬I{\95\9d¦i×\13!×^k¶´+PËã\9eäÜÒÓ[.\ fÚÖ\8c\96´ÓsGÚ\96\92\13ßH\ 3rÉè.HÕë1Ø(\9b\8aVËÄk:xiX²NÙ))vY\93\14\9aÖJÕSÄ\18¯ç³^\ 5}N\1a¾\10\82´É\9a¥\99KÕH5Zm\1f>KÕIý;í\1f×\8b\96\9eEE¯ËÒ\96åúRäb#W¹¤©ì5U\9b\9eØr\1aI1U]\83\Ìlë\93\97­Ê1{½\ eë­ª´niÿ²>Ù¼\9e\10­\9dÉ÷¥^åþPjt(O95t'´ ²\ 6\v´Nxmé¾È\7fi?¹|C\8eKC&ä\0\82î]ÕË\9f^q\8a\1a)\ f)?¹\9d\93\13Å^¯'íï\88n!Ë:åïG]õ\94Å)HÛI¾å'\90ëw»\16É\99áôZëÚ~Ik\96\9a\96K±´cýÛ"-@þðÉ        &×ÂÖF´\85KkLr68\9d\0@
++^.\865ÊõY®\8d\1aFR\;VÝߪ§\Ò\f\ 3Ö,ùû´<Î\85þ\7f\0\0\0\0\0¾÷ñü\ f\0\0\0\0À3ÁbüÿÿçûÎùÙåKççöo±Åï\95×m\9fÝÿoú\1cu)ÌÏ\95\16\93;;/à\1d+ÆÛ¯\9e[?å\v<oá/^ÜcÚ}豸7쳸ly,üCKæëûéË{L{\1dâÁ7´eWÈë£/?õ¿õXñ\90z,î\13SL´¹zã\9d=\1eÜ\ f¹üú\98\0\rÖ=ûþs¯\1d\96Õ\1eß{Ð\14Ï\7fî\1d§üN[ÖC\ f§Xñ\95c¾o\9cb¾gã\97¯\9böå­G\9e\90\ 3Ðôu>:Å6¿þá·Ì÷ò-¦Ç\9fo_2\97ßòØæ}Û²\95ã\97\8f\9fÊì¸\85\83>ÒÇ`Xßc°\17ãò\8f[8úÀ\1e£ìZ¬#\0\0\0\0´Øu\9b\93\8eÏÑ8úÿÁ|sÓ<\81¡xy¯VM¤\18\8b\ e\8c\88)÷15ÉÄ\9cjI1x\9dêN×\1as±:`ÉV\1dJjS®:\16I\87!h\9aC\e½fËËI#ä5\11_\eo\10mðÆ\97jLѱH:NÊË3\90\8ekСIÑÊ\eUöÏÖ1þ½\98R5Ñ¢l z¿âø®\9dç\18ÌIG\ eèÚkÖÁ6V\9fÀ\92\95'P\17u¤R,Ÿ \9fÓÁ\1fr¤Æêà\8d¨\83XbM:ìÂ\9a$\87\12³ó%kzG9Ú¢#\9b\81GÎe9\ 2y<\8bò¾\91G1Ùz\90\87Ѫ  $½Ñq+:<ª\ 6×sR\96ì\87cÙÕ8´\95rYNy\11½\ e\b\91\ 3oeár¦ÿ\1f\0\0\0\0\80ï}<ÿ\ 3\0\0\0\0Àó?\0\0\0\0\0ø^°8þÿ\1fþM\1fë¿ÔüÜ{Ú|W7ÈëàoÜñ÷:^<\98\9cæ\87±÷³óöõñå:gÚ\81¯Úï;m\9e<cÍê¹Mm=:^ý\r\v\ füV\9f'ÏÅ>çÛú¶lOyýü\r\9b\17ú\18ÿhú\9ch7¶í¬<wÛu{\8fëÜúÈ«¾¯/\8bÃØùãÛ~üº¼Nxå¹}N»\9c\87ñøGMs\14ÎÎùve\9bûKÇêßô\91M\9féãÿmê¹\ 1.\9e¾·áÎÓ\ eëó³ÙaN´«w3w[Ùk\ç\93kÎýR\9f\86¾ì¨½Çòúþ\ 3¶ÝßÇñ»an³+¦9Ê^³ý±=ûXý\10{¹l\9dæ!c®1\0\0\0|·ÒqåÖ%\9d¹3·9&m\8aOÓ¹\ 1m\b®îjþ8[]\1f£­3~:gV\98{Ñë¤r^§ÃL9\ fsÄéà÷âuJÈìeQö9y\13\ÑÙ/\83\14\8b×¹Þd'\93\1c¸/%\97èL(:å¨\ eö\96}4:\81©<?D§G\17tZ9\13¥x\92\1cUIÁX\9d\19R\8a Ç6ñ\9f-ò}\97u\9e\8e\ e\8a/ÑÆ\9c\8cN7Ø&\v5mR=«ÓdÊÿ\92\82M:      gLI¾\11s\9fÏN\87Ç\9b\90½Î\95©Ó\88æøTÍÏjSñ!É'\9eÆóuÊNÈ\ 3c\90çWm\8aR\aR(ÆË©
++¤     \19§y     tF¿ ;!­§êd\9dR\85:Ý`\8e\19l\93\ 2F§µ ÿNRåòå\9ctZÅ ¹\12¤\0å\1cÐqÿ²w9Ê\ 1\1aM\15\90³´õXå\18åßÒ|u\1aB3ÌÉ)[Ñé\ 3u·tbEyP¶ôÿ\ 3\0\0\0\0ð\fÀó?\0\0\0\0\0<ÿ\ 3\0\0\0\0\80ï\ 5\8bãÿ\1fú£­¿·|éüÜãm\9c¹Î\17\7fÄ\8e\v\7f¢\8d\87·.ÎÏíÛÆ­ëÂ\17\9eøâ¿éãäk\9a\9f»¹\8dY?U^\87Þ~ÍëÛ¸ô\10åó\9fjãñuìü\81\7fúî/´<\ 21\94ù¹\83Ûú\7fU^\87=þêÏéû)8YÏ\1d\97ËëØ{\ fø\87ö~Òü\ 2ïhëù\ 1y\1dò\9d\17lÖ÷s®a~î¾i^ûCw\98ö~M&\8fù\ 3tìý·®?£\8fç79ô1ô\a\ 5N°Û¶÷c+5¶e\17¯\e×wþÂù\1fï9   Bíù\ 3\ eÚkqÙO_Þ\97ÕÒ¿·j*\97·ì\7fþ\97Û2oKiËnÞkÜ÷­\8f\13mYH¾ïË]û\8cûi®Þxg[&\8bz\8e\80릲\9bÍWpIÛÏ£äue8ýÞ¶¬¦Ü÷å\89)¯Â·®ÝÚò*è\18\96\9e\8ei_N}ìå¯ìù
++¢ëù\18\8ea_y]ø\7fo»»-\vÙôcÿú>ãñ}æ\976~mX\16û²÷OusÆ£?ð/Ú²X\86\\ 6÷ï3®ó\94_<ï/Û²TlßÏçM¹!6<òêç÷\1c\b¦\98¶ì¢i{÷<wã£}\99\8f½\Î\9c¶÷Ú\aþð#­­\193äjØ>åGø÷{\1e»Ðó#Ä\12\ 1\0\0þY\8có\91\97ܦ!×±öÑ%[tª÷j½\8b!8\9fäf.ê|ïEÇç\9bjC)Æ;×\86«G\9d\9fÝGo\9cË^\9e\fb0rÃl\83sA§\91\97å6Æ\5y\97\8eì\97¯Ç\18t\e.9_³|-Ö*\9fÕ\ 1ëÕè\ó>:\1dínKß¿¥óÀ÷ñì1Õ\92\8bÑ1íUg£÷zÃì²ÎRoru:\v»lA¶Vä(¼ÓtcÎ\15YK\8a\9a·«Ês\80ó9É65\91A¬9¹*Ï:V³\f\94\1cä©D6W\9cf\13ð:¦ÞË\13\87Õñâ²é\1c¼)!»Ú\86\95[×ÇÃ;£3Í»¢;\15K\1aÇyûÚò%xgõA§å\1e¨Æ:]í\92²75µuHÉë\0÷8ä%°1I!Dcsÿw¬A\87þg«\ 5à¼OÙe#Ç\19´\1cL\eN\1e}vE\1e;tÂz#åâ³\95G\ 2/{gäí*ÅáuÆ{#Å\1e\8a\94´\94\82Ñ4\ 2RÃZy%\16-)yÛkeJÅ\84"\15\165[\82\94¨¬)\87\92åûFVïË0Ͻ\8e\99o¹!´P£\8e\9cw)µ|\ 4FsEhÑj\96\ 4Ù\8cÔµ\rR[F
++8ëØ|M+!Ï\10NÓ6H{Ñ\81üVëL\1f\fCѼ\ eº{±j5ÊÿɳVk\b²¤´uEi\89Z\11Õ\aÙE3d\f¨F\e\9e¦ °ÉÉQF7ì§\1c¬´\r#¥%\e\1fÚ\96V\874ã1g@\ eÁÈáë\17KÎý=)Ò,ûî¥\82["¹]ä\9aÈR*²£I\1as\7fvÕÏéI5Ô³´y9\i°µø\96¯¡Ê¾Ê\99æÓ²çÿ\93®;ü%³Ïÿ=ÏܳõY÷â#¾Ñ\9f\9f½\9f\9fÛ¾f|&=è\8f~éÄþ,\eä¹ýø5ãs×\vÞ|È\13ý9ÖÊçׯ^ù÷\82£Ö\8eÏ\85kNøÑ?jÏiÙØù¹ëÛsílÞÁ\8b÷\19÷çá\1d\aîhï{}ÿæ5ãóóºW?ûO[>BcÊüÜû¦çÀóßöÒ¶ÿrb¹ù¹«ÛûÏÑgñS\ eíïK3\9e\9fÛoÝÊ¿G\1c½f|æ\7fÉ\8e\7f÷ùö~vf~î\98i»ÏzÃóÿ¸ý\1eQ\8d¼¿eõâï\11W´gè\12b^=wÛ\9añ\99ü\ f?¶±ç:\94JíÏò÷LËfó ¾gï]ÿæ°ßÚñ9øg\1e¾è\85ý7\acú³üÖ½§ß\ eî|Ë!òáÙú̶=ÍáxÞ#ÎôeÒ\ 2Û²£¦çõo\1dy½òÐ\9f­¯\98\9eÉ¿¹×9\ fôe9ôïm\9d~ÇØÿÃ\eúï-Á\ e¿\ 1\1c5\95á¶\85Ã?Ð\97É5£-Ûcí¸Î\13ßÿ¦\a\87eÃï-Wµ²|§þ\ 6ð\aëÿjøÝ$öí]3åkü½\ 3Ïhå,WåÔ\8fýÒÕc\1d¿õ\95[¾Ò\97¥¡Ì\1eßgüÍáü\aÏßgXV{Yß0Õ©\7fÉð[\8cüÁèë¼f7ù(\1fÝg¬¿Ï¼lC¯?)\96^·OLÇ~îÂѾ/K¦ÿ.t|;vÍ\ 1¹þ_\1eß\7f3ʵö2Û:\1dÃ\86\8f¼¹\1fCé׿Õs\17LÛ»èúÓûöJ¿.¬\9e;xíx\9e\øÃgõü\97Õ\ eÛ;x͸½\e\ eí¿áȲÔ\97Ý:íç\9b\17Öøá÷$×\8fáê}vý[Ó¥»É\8dùþÕcy^²Ï9\9f\1drc\96^ÖÛ§örá\87Îiç\9b\a\87ý¼\7fÚ\973\16\ e¿©/\vC{9~º\ e\v§~¥/\93?Z½½ì³ø½×¼»/+C^Ðþ\e\9c\1eû¦xÞc=\17g\1cêýÉ©Þgót^±÷X\ fwݰáÁ\9d\7f÷ºdú½ìo>ú¦þ{YÊÃ÷¶¶z¸V^Ç\7fñ\93\1fmËJ\1eÚË]m_4gèq÷ÝôÁñ÷«¾ì\8ei_>\7fÕ[¿Ô\97ùØë}Ëôûãq\v׬í¿mÉ\r\ 4·\95ÀÓáÙfù=t\7f\9cTz5\95Ç\93`b¿\87\97\eüv\17\99m¨-O\95ÞÄõ\9cgQó\86¹"ë\92Ë^Ö\9bN«_Ó\8e\90\94\8cÕ;}Y«\IåqIn-åöZ\9f|\KÁåÚ½«<óhÆà$ë*IïMÛ}¼f\8bò\9aV*ÊeXSbé#\80|Cî\99õ.XïN\93f\12\93û\92¤Ù­Z.3¹Ë\96Ç©Ô\1e¡ôÁ"ËWÆcë÷«²7í^V\1e\9bô7úáY#Ê\9fj'\8fKEs\9fé\83\89>¥É]\86õEþK\9f\9däiJî\\9dÕ§$¹ù\96;åª\8fu©¥\1e\93ç\r}6\f²sF\1füú½q
++íþVn\1ej\1d¶/\7f\18B/·\10ê\92\1cló\82Üü\9b¬¹Ä\92YR'S\ e7)Q¹Ö×0Ô\9f<fÈó\9fÜÒËJó\90{Ìh:°$\7fë\8d\÷õ\99­\7fÖK5WM\94¦Ob­\1cävÇkeÉs\80Þ»»ÒÊI\9eù\82&"Ó'¡¨\8f\19\80Èm¸&dÓ\94j^«%j\8aº¢\99ØôÉTÞ\95\82³úL$\7f»¥Þ5é\9df\ 2Ó\12\94µe©Üb4c\99fn\93]Ð$uò\98&·ÿI³\96i&8Y\89\1cuÕ<rR.²Eù\80\1c\98ÕlnÚ*\9c&8Ó\aey,Ëí^åiú¬kõ\99ñ»4G^k'¾\9dÅòPéôaW\8aeÕ.ó\0j\8b\90§_\93Çß"\92Ñ\ 3\90*\92gÎj}¨CN7=\9dål\97SÝèC³<\90öÜ{Q?eZíË'¤mHËIU\1f1µµÊÑê5!è#º<6êo#R|z      ª\9aËÎés°Ü\80J3β#AöKÚ\8dì¶\,ô\19ÀFÍP§;TûSvÑ,uúiiEU/bÒD\93|&h\8b)c\9b\92s&É=¯l*¦)O¢¬VÎ\ 5ÙÝ\1cÇsRÛ[\967¤      ¥¢gÕp¬OÓ|\7fY讦,\8d­ý&\13\8clQÎ\ 4i\97z?\1eÆg|Y]«ïØ®Sr\9d\8fz!\95\96Õ
++Ò\8dÏîrlZ\82ÞÿãýN&\8d6èµ9×ÔÚGÑÆ/%a\88ÿ\a\0\0\0\0à{\1fÏÿ\0\0\0\0\0<\13,Æÿß}ϵ\9fZ¾t~îâ)~ü\88ÿ²Ï}}L·ÆÕ\87)\ 6ü\90oþØßµ8|kóü\921îG<~Ö½=N^ãíomëÙ(¯C¿uíkÛø|\17ýê¹-\8bñâ×\8eãóÍ\10/~ô4îý¬/ø\ f÷eÖ\r1Åm}\1a¿ý\86\85\a~«/sq\88y\9fÆ½ÏÆØ¿b\8aSÞúù·Ö>æ?\rqÃ}LüÊqægNy\ 4fÇçß<-\9b\8d\17¿`ÚÞìØýmS\fól\8cöûÖ\8dß\9b\8d§¾z\8aEþæ\ 1§|¹/ó¡ÇE÷xx\8d)>þî\13÷\18b­mßÏ\v¦ý\9c\8dÃ~ÏT\9e\9b\1fxݯ\8cqؽ\1e6Lß\9b\8dÑÞ:-ûÎ\91Ûú:}\18ò+¼c\1aC0\e\17}ü4.ã¢\9bNþ뾬\96\1eû|õ4æäo\7f}s_V¤&z¹´u¾Y^gl·×õenh\13ïX\8cAÿâú÷öe=ÎJÚËnr\f\1c°\9b<\ 2gî5\1eßl\1cö\86i\fÁk¶?¶g\8fÃ\ e\a\0\0\0ÿ\vv\11\13ïÛ\98v«Ã   \82Ü\[\1d\19â]îÿ;É=®\86f\ey#'\9dxÝT§QÓ\1a\80.7Ç\1a\r\9e\8a¼\9ft\80\85³m0zÖ1\ 1Æz#\1f\89Yc§5S@ÐÑ\ 1QG\8aX£ñÖ:b!\97àtÜ\8dÆÇWoë\18û]\83\ e\9cÔÑâòì3ÆêG[å\86´\8cc)Æñ(ãø\94\95ÆpËZ£3\1a£®#QVÍä\1f\84¨3»ç¬Ù\r¼\1dÇ©è\98\19\eMÒ¡\r: åi4^h\8c9\1fÇ¢K       y³d\\93®_nÏs°qʹ \ 1íR­©hyÅ\9aõÖÞ´2Õ\11*:XÅ\96Ð\86\9dÆ\ 1I\15ÊÁ¥6\94FJCCðuX\89¼¡û®\83M¤RõÈBÐwtüK¬Rà.¦Pe¿j²QÚ\86\8edÑæ¢Ã;|Èe7ã÷5å\82\94ý°ßÙiéj©JË\eê½Z\97´lÛ±ëÞìf\fÑòq\10²\13R/Ú\8a¼oÙ+\92Æÿ{©D\17\8c´àÚÆáøTµAkº\81¢'\8b\91útEGzÈ\ 3\8aÓÜ\ 6Y\ eOÊÔkݦÐv¯\15¿\9c9&é\80Xúÿ\ 1\0\0\0\0øÞÇó?\0\0\0\0\0Ï\ 4\8bñÿ\87ü\1f\9b~iùÒù¹{¦\Ú/ÝñÉWõøçPW\ fóí­\1c\7fÿõÝä\87\7fhÊYþ\9be\98\93N\83\b\0\0\0\0\0þ\97\8ds¢,\19C\91\8a\r\v,}þÿÚï\97¿\9d}þ¿­=¯ëXó\83ï=ìÛm<\7fªeõܧv3nÿþÅe\a\9dö¥þüo}\1fO}ã´ló\8b6öe:±ÂªÅyîõ7\85Ó¶¿ë\15Ãüñüd\ fMû±þÀ\13\1f\1cæ\81oóë\0\0\0\0\0ð=öL\1fsÈÎ\98\96\13Âæ`ê\92Ü\ 2)¸ÜòWجSR\ 6\93\87¹Rmmù'tbѬok\92      M\1d \13F\13ÿ\ f\0\0\0\0À3Ábÿÿ\96\13\7fì%Ë\97î9w{û}@sª¿gßðº\16ÿïªù¹=ZÞw\1d\17\8e\93_Õûÿ½\9d\9f»¬½\7fª¼\ e¼ý\9aS{¾û\98çç¶·÷\7fU^\87=þê\96C>\ 5\97æçn^;®çÐ\1d§\7f^ß/Ù×Õs\17·þþËäµùC'|v\18_`{^ùMí;+ç÷¿fí¸¿gßõÅ[Ú2\97b\8f=x¼\1d\8bæyÿ\99\87/za\8fK0¦\8fY¸µ-Ó¸\84O^}Æ\1d=÷¿K=\1f}\9f\ 3AÇ3\9cøþ7=8,«}ÙûÖ\8eëÜúØs>1Ì\19àû~nk¹ø\7fM^¿ÿ\9c³ïïeá\87uÞ?\95ë¹w\9cò;mYqµ\8f\91\98oÛÛ¶JsÜÿÔ\90Ã?\fûù\9eµã~Îæð\9foËN\94×I\ fûk\86<ýÃ\1c\ 5\8eÇð\99_Úøµ¶,äØ÷墶lå|û{´ü÷+çÛÿTûÞµò:þ\8b\9füh_\96\87ãëó\1eè<\ 4ÇÝwÓ\aÇ\9cúÃö¦¶sÜÂyïí˪%o>\0\0ø\9fÕr\8b'¯}bAþ\87\8b&'\97j\1dòÆ»js\92{P/÷4yÈ·-·ªÅj\1apãMÐÁ§­ÿÌ{¹{q5é2S\8dõr#g\8bü\97\1a\97å\86©Êç]Ötï^×grÐdîASµWWM¶r[\985wwÏÅ>æ|o\8b4\99w\1a÷iå|îcnt'««=Éx\88¥ç\1cw9kBpSä Ë\90w¼å\19¯UnFå\8bÉÙèB     IöS6Õ\92¡Ë[^S GM{_B°)Doå])\ e+\a¢yÍkj\89ôåf·È\87\92¬-\aù°)\9a(=E=tM|oM\94;T¹Í\ eÎé\12ù~ÔÂ2!\84*[¬zÿ¯;\1d\8cf\8f\97\944k»Ü\fç1\17¾\95g\aÙ#Ù\84)Iþ?XÝo)mÍb\1el.º8ê$Xº\r§Yû«&A\97\92\96rÒüø®\98Tõî;Ä,å&Å$\1fÑ=-R¦F«  ÖuÓA\8eY×ìC\94Ê,I\1aF.AC\8d\8bN\14P¥>r\1aóøÿ\93å[o¹ì}\95Ç\8eV\82²\13R¾º\ 6)d5V«ù÷\83æó¯N
++ªÆ"%(GWu\9f\9d49\97«´2igR\9aIZPÖ¶\¥¡JyÚ(ÿ'õ%krZÌ®¤$mU>­\13\15ÈI¡Õ\9cä3A÷¶¤Åvä´Êd\ 3Òà\8a\1cX\92ÿ\94\ 6\144·¿\93\1aÔ9\0\9c4\e-f\e\83TG\94\15H\1d$\8dí\96\9d\94vä¢N\83 \87+E\18³Î\89\10¤èd\83E\9a\9a\9c\ ei)Ãöt¦\83$û]\87¶ï¤±d©|«1ßµxÙT0:\aCÖ"ÕöQ\8a´ü$\15\96\8cì\9b\vU\13õÇ ç\89\9cÌ)º¢\9f\94¢3YJQ\8ey<ߣ¬2ëé¤E,å&MÇi   h½fÝ/+-JÛ»lC¾\9fåÀ\9cÖrLQçôª^ÛCÖ³G' \88U/\14ò|h5\87\7f\91\93B\1eÃtf\aYµ®I\9a²|K\9aIÌr\19(!ËE@ÊX\16ôëM\9bGA?ª\ 5,u,Õ*Ç®e\9d¤\8c\8b\9cÎÒ(¥\9e²T¯Ô|rmÇ¢nBªCÛ¤Ô\96´\9d¬\95ÕÚ»4aHÁÊ\9e§h\8a¶åhbÐÀ\0©\17-2]\91Ñ\vZѪ¥ÿ\1f\0\0\0\0\80g\82ÅþÿÿçU\7fwÚò¥ós\97Lãîÿâ¸Ãþ{ë«õ)Î/\19ÿÿ»·ÿÐ\1fëûÁE??wÇ4§ýÃ;\ eÜÑÞ÷9Í\ fã÷\9f\ 3_µßwôýj¬Y=wõ´\9eÿë\85§ÿ·Ö\ fn}îýË=\1f\80ö\91o¹ó-\87\fýõÃ\9cí·Mß\9bí¯ß·-[¹ÿü}SnÂO¼ë5\ f\rù\f\13ù\a\ 1\0\0\0à\99å\9f8\ e¢\16ù\8c)©8\97rh\91\98}\ro©u\8aWrÑ\84\16?\13R²9Åâc{fÕ÷ª\89vI\f\94«1:YA\96\95k\10\88\8bãçd%\1a\81\fEÿ\91,ãÿ\ 1\0\0\0\0x\ 6àù\1f\0\0\0\0\0\9eÿ\ 1\0\0\0\0À÷\82ÅñÿW¿}ÏÿcùÒù¹çµ<îï\95×m\9fÝÿoÚXú\9cÂüÜ\13m\1c½æp\7fé\8eO¾j\18G_ç\87±÷:.ÿ\17_óÃ\9f\1eæ\vÈósëö\1aßß9_À±ëÆõ¼dÇÏÝÙæ\ 5\88ÎÎÏí·×øþ¡;Ìæ\96\99¼zn~zÿü\85ó?Þóû\87!\17ÿmû,.ûéËû²ZzNý[§eÛ\16\ eýHÏ\17`}Ïq\7f[[ç\15òúèËOí9\bbH=oþ×ÛþiÞ\82\e\ eíyómµ©´e×´ïé<\ 4ß|Ñ0\ fAõa\98£ }ïÿ\94×I\8f\1eöÎVn¦\ eó\ 2\ß¾§9\12Â\1e\9b\1e\1cò\13¸\9e×à\9ei?O_¸üÇû²\98ú÷.iyó5§þñw\9f8ä5¨¶ïgÏ©¿ò¼\0ÛÛ:÷\95×ëo<÷Î>/@´=\1fÂ}S}}çÈmý{>\fǰaïñø~ã\96-\v\80\98{Y?>íç¦\85½Û\
++.:׿wôºñ{¿Y¶öïÅ\98ûönoßÓ\ f\9c¶ý]¯èËÊP\9egî=îç)¿xÞ_¶e©Ø^\7fÏkß[y®\81ã×\8dëÜðÈ«\9fß\96Õ1OÄ\ 5Ó\\ 3\e\17®ëûY]îË\9e\9c\8eá¸\85Û>4ÌQ\10\ 2\17\ 5\0\0\80Ýjùóm\18óÈ[\9d\fÁÕ6G¹Ó)»lÑ\94ö^'%O!U«iÉ«IÞÉ\r}ÊÉ\ 4W­Î\ 3`|r%yÍÄn5Á}vQî6]°Ég#·²En»½Õ\19ÐmÑé\väî]g>\b!\97\94\82N)Pä_\9a¢ßɺ]©U\87qÛ*kpIn½]ðmlµ¬Yîà£KV\87Ië´\ eqÚ÷a,uÏ\19\9få°²fh·5ë\88\8a3IÜÎ\1a¹1-ÅÈÊMv\9a-Þ;cK\90\95Õª  ã\93¦õ·&Õ$·¾Î\97,\87%;X4±»\95rÈ:è;\e¯3   DyßxÙ\1dME¦\19ñ«\96\97\8b²EÙ\80\1c\9flLÛ\7f-.-£\12\92Î"a\871â.hÎ|)9Ù\93\12eOdÃ)÷ù\15\92\89\92b\90âÕ½Ð9Ùä\0¬¦Í\ f>J\19gÙQÍ\86ïu\16yk£×,ù9µ¬òN\9ejä`¤\10\82\97=®Æ\14-\95 ó!È}¶¼\1d¢N\a\8dª³\83µyée\ fÛ\9cõ.%Y\10}-Þ\ fe;Îs!ÿ\9dô`´È4s}ñm*\8aþ¿¥¤­NÕ`ä\r--_\8dܹKAêÄ\ 5Îz\9d\1d"\15\9d¦A'·Ð\86fjÖQùÙXoä#R~:tß&+mÆI\99F\9d²C\ eËiÖþ\4e~Ò©-r\95r\eç\82\90f\15ÃwÙ¼\1aã+êÙaL;÷ú¼(Ù÷r6IÏ\8b \8fÐ~Éçwzþ?ç?\7fõ¾Ùçÿkv1ÏßúöÌ5;Ïß%Sþ¿#¾}Ä·\87çÐ0?·uÊåwØ\9f|ºÏ#('ÇüÜ\ 5kV~þïÏ\90ú ü\93g\1dÑò\bj\ 1Î\ fóß-ÿ]`~\9f:\ fß¡O>tN{¿æ²zn\8föù\95ç\11¼kÊmxêoo{ ÿ^àj_vÙ4?ßì<\82\17MËfó\12öy\ 4\8f\92×Å/ßô\99¾,\98¾lë^ãöNËg>Ü\97Åáùý\865ãñÎÎ1x}+\8bwÊë\9e?XÿWÃ\1c\83qx.Þ{׿]ì7Õݹ\vGû^GÉôgí+Z¹|T^g~æ\93qX6üÎpÏÞãñÍÎMøè>c9\9fóÕ/^Ö\97\95Ø\7fG¹cÚÞ\19\v¯ywÿ\9d¡\98¾ìÑé÷\89Ó.?çsÃ2;ü\96°÷ø\e˦xÞcý7\888ÔÃñ{-þÎðÐ\aûo\10rÁjË®\3\96ç]7lxpç9\roÝ{׿3|jÚÏÍ\v\87¼¸ÿ¦å}?¾\9e\1fòHy½}¯\93îïËâð;J\99êï\v\1fÙðåa\9eÄáØïZò;Ãë>0Ì\93hú¾¬këÜ$¯\13¾|tÿ-Hç²iËÖï5\96õ\86\7fo_&\97\9e¶ìÒ]Ρ\b\0ÀwÙ³âª]ä±Zi~»6WWöò(e5I\96Ü,\97U+Í\1d&·Ôò\8c¥\93pùPå®;és\8a<\ 3éí¹Ü¨'[¬>\ 5È
++ä\ 1Rîçå¾\Ö \ fvò ðt\99\8bk\9c\87M\9eÜ\8c¦\v«ºQ90y\1cô:M\9cÜJ\15yömÝHV\1f7²ÜÌËc\81<fhOO{HHY\8e_n\94å\1e"éC\90¯ò\14\94\8c\14M\92Cª:­\9eÕçg}º¬UÖW|\9b#.êT\87²\976\19¹»·ZÒ9è¤y)Èפ\92ô¹[\9eìåØeïå>Q·)·Eã3SÒçA}rYõ\94Ïå&{«\8fÙ²+¡èc£>ÃI=I\99Y}|\92\93_\bE\9e9¥6¬>¸Ú¢u­ùÙ¢<ê\ 6\9d_OwL\1f\9e娬>È\19Ù\95(÷÷µ´¶ \ f|z@ú\v\82<Pj³0Ò<¥j\93Î\1cØ\9eÇõ_ú#\82Ô±>fÙ\96D|\9c\931ËÓ¦Ñ{<m\0C\19éã³<´ë\94\81:½vLæé=\1fàÓì÷\84ö»\81\9c\17ENuÙ\8c~sÕ®\9e{w5ï§ìAh¹ò´Ú¥UH\930U\9a\8aìOì¿]U)NyîÎzNÄ"OöN\13úIÃIrÀ¦Ö"G«Í:\87Ø®GQ¯/z2ûÖ\ 2´=è\f\97F«X¶e½ì°4è!/\9f5AK(\8fó\80J#\rz½±ú\83\82ì\90\19ç\ 1Õ\1fx¤5ÊIéÛ\8c\96Òn³NE(Õ%m^.P:Q¡\9c2r\fÒX«þ6\15ô\876?~_öV*Æ·SJ;º{[\93ý,:E¡\9ccR½\85ø\7f\0\0\0\0\0\9e\19\16ûÿÿ¯òó\ f._ºçܦ)Fú\1d\87=p\ïGM«æç.hïÏ\8e\vØ¿õ\83^ Ë¾ú\83·¶8ÿ\12Êê¹ãÛçµÓùìûϽ¶õ\ek¬Ï*íç<¨-ÓxñϼlC\8f£ÏaèW}O[߯Ëë\84W\9eÛûÌs\1eú\8d÷\98ú\8dgcó\8f\9döû\8c\85c_9ô)\ f}ôgNñðÏ>dË\7fëÇä\87±\0\87Oñé\9b\16\1eý­\1e\83n\87~ÿ2Å0l¼û¹\1fï}µÁ\17\1a\11\0\0\0\80ï\12»\19\13aK\8dÙi¤¼\vF#D\92\ 6\8f\18\93\9d3Ŧl¼7%ÛlB\8a&\ 4¯\11ê\1a¾SkÖ\8e{ùXÐ\98\80¨áì\1a6\1e£NÒn´w?k¨~JÉ\96\94Z`{lq#I»Ä£ÑIêª\r:LÄø\\\8a\1a&P5\9c"µ9í\
++Æ»Ô\ 2\ÚØ\8cä\\vÅ\89r\ 4\1c\9d×H\a«1\v\9c\93­:+^\94£©Ök<\89¼\17\86\19ýt¨EÎI¶S\8blÃD\r\95\9a\1eo¤Á\f=F©­!¹\16·\11JlQûR\ eC\fSû¬l,Zï\17ÇÃèC©­%¤\1c\9enãJèÿ\a\0\0\0\0à{\1fÏÿ\0\0\0\0\0ðü\ f\0\0\0\0\0¾\17,\8eÿ\7fß\9dw\9d°|éüܪ)¯ùKwìû\86\96\83¼Ú<?÷õ\96\9b\ÿã\90oþØßµqþVß\7fÞ\94S\7fë)\87~Cß\8fÑËûóm=¿*¯Ã\1e\7fuËÿ\9e\82KóC^\0Í'\7fÈw^Ðòùç¬ó\ 5\98i^ºgýõóþLß/ÕÄÕs[Úû¿&¯\13ì¶ímÌ¿\8eRYÕæs\9böõü\85s?0äó·}ìþ\93\ 6\>o`\1fׯy\ 4ÖÿËã¿Üs\fÔ\9aÛ²+÷\1e\8fóõ\97\9eÔç²Ó\94°mY\9fsàuòÚqí\99\ fõ\9cö6ôÜô«¦r\98ÍM¿Ç´\9fÇ-\1cô\91\9e×Ý\92G\0\0\0\0À?ª6\1e½\14c£·Ã\1c\eÓ8u\13S-Y³Õ\9b\86Î\9d¡sek\16\7f\93«N\1dQCÔ¹ëJ\9bþBÓ°9W¼ÑÄô:4]Vé|Ö\99ðtB¿XsÒ)\a\92ÕÙöJ\ e:=G­E'ÍÈ\9a
++@g<\bVÇô˦sð¦\84ìj\eúo]\1dò\12xÙ®N9°jÈßoS²F\aðk\ 2ÿ\18L\ e¡ê\14\82¾È¾è$yÅ9_\8a\97C±:y¸N^!\8fk5e\9dùO'ÍÐÿLÆ/\99óq\17s\8c$£Ó&$ïJÕ\19\1aB-Ã<%É\956\ f£ì\84ÎþW\9dMÕê\8c\93C\8e\80\10\866\93HÎí;±J\19\946×DL²,e\975\vBв6:»\88\97\87dWt>\12otp¾\97\ 3\94ÇEï\8cf\ 4\90b³:\aA\9bâÐhÞ\ 1/%md±\95c\91½O%\16­\ry[þS\8fQ§5\90/G«\8fÓò\bîsÐÙC\8c\91Õû2ÌÓ±ÓóÿÑ_ùÿ~röùÿ\82]Ìó·mÝÊ¿\vÜÜ\9emO\96×å\v\87ýmû]@\ e~~îÖi\1e·ÃwüÚÙíw\81\12Ýü\92Ü\7f\ f\9cö£;úó\7f\ e«ç\ e\9eæ\9eÿ\8f/;£ç\ 4´Rlíùùâ½vý\9c\7fÝô¼þͽÎésúÉ¡÷ß\ankß;]^\7f\7fÃ\e¿Ús\10J±´e7ï5þÞà_²ñÎ~\9cÆõyØö\9bò\ 5¾í\ 5Ã\9c~Y\9a}[vÙ4ÏÜÖG^õ}Cù\f\1dÓ¾w½¼^^6Þ7̱çz\ e»Zù­\9c×ðöuã¾Üô\91a{Ŧ~|\97´ý<J^W\86Óïí9\ fSîûòÄT\96ߺvëð[\85\ fýw\fÓöó\14yý[{ö£}^Æh\96æ5Ôã{ý\8dçÞÙ\7fÇ\88\1fûb>ÄÙyô¶í5.ÛðÈ«\9fß\96Õq\1eÄ÷M¹\19¿ÿ\80m}\1e½*m\96K0\0\0À3éÙó©\9e\ePg'|:ç\91³òt'ÏÔÓ<u:\9b}q:I^Ð]±E§Ê«:µd\90ã\96o¦¨óå\15\9dÇÞèÄoEvV3ëéÃ`\9b\830ä<\96kÒ§ê\14äi8Ey<©úYùo\9dUN3ÀµgC\9d\81N§¡s&ȳnѹ\14³ÎJ©3ÖÉ\91XÍòçäßN'A\94÷J\9b«oU\9fÓP\9e\16ÚÜymVK#µ$E\19¤ ôÀu^:¯\87/+7:Õb\90\ fÉÛòmÙ{Mÿ'¥'%[¥\Kô!ÉW5Û\9dNäé]¯»"o\97\1aús¾NÆ©se:Í;¨\138öß(JÒ\19\vý0Ï\9df\e4ú;@ÒY\1c\8dÓ'DÛgR\94\a\1f)\ 3\9do/ÊóQ6¹­2é\93º4\ 5£õYlð:Ï ×y"u~B_u¢ï¶/^\9f\98åùH\9eÙõù]*`ù<\83Òøäa=i\ 5gßæ÷Ó\9f    ¤â\82þ*"Õ§\19ù\9c|ßÇâ«6"ã¥Mæ\90\82ÎêX\82\94y\91ÏiK\93¦\1eu6P_¤2\8a´\ 2WäaZ\9eôµ\82ä©ßk\93\vVgû\94÷´ý;\9dÜ0H3´­5K\99\17\9dgÑK\9b\97OË?\8d\9c<R\81^6+M8Ê\9bAg%\94\7fÈ\1eë1e9\fâÿ\ 1\0\0\0\0xFXìÿ\7fð\85\a>´|é\9es[[\1f¯Îy÷\9e}ÃëZ?¿\v«æç¶¯Ö÷µ\ fþ\88\1d'¿ªõC\eoççnX;¾ÿÒ\1d\9f|U\8fm\ fu~îØö;\83Æ\11\1czû5¯oï\87\18çç>µ\8bq\ 4=.àDy½àÛÇ\1dÝâ\ 5¬\93÷\8fj\9f\9f\1d_ðÄÞãû\aß{Ø·Ûø\82TËüÜ\99S¬ÀKvü»Ï·÷³3ósëÚûÚ?}à«öû\8e¾_\8d\95÷7´ýߨûù­k_ÛÞwѯ\9e»ª­_ûä÷¿ö\8cÞ'o\8c\1fúÖ×\8cetÖ\17ü\87û2ëzßú\86)®`ÓÇ6ÜÝ\97åaÞÃ+Ú1ê\\89'¿póg{\8c\83±}üÀÅÓø\81\v_tþ\83}\99-ý{\ fMe|ÞÂ_¼¸/ó¡Ç\ e\1cÜöeå¸\89k¦²;õ··=0ÄMÔ¾ì\1dKÆN,\1f\1f±ï4Fãg\1e¾è\85=¦Â\98\1e\1fpcûÞ\8fë1üî\19=\8e!ØÚ\97\1d4\95ñ\17\7fÿ\84Gú²\14{¬Âü\9a±\ÌÕC¼EÒ\96¥Ë>Õ\96é\18\8fß\7fÎÙ÷\ fñ\16©ïËá-6båx\8b»ÚöV\8e·Øw͸/³sE¾gjã?{×\85/ëËBéË\1eZ=¶ÏÙñ\1fWMu{á\87ÎùÜ0þÃôeOLçÇ\19\v¯yw_V\86ý<zª£ß¸eK_g\88y\18\8b²nÜÞg~©ïçâ¸\91kÚ÷\9e-¯Í·l\1a¾W\86\98\91'W\8få²aûK~´Çi\98aNË\1e3²ò|\97[¦ócóÂ1\1f\1eæ»,½\1e®Ù{üÞ)¿xÞ_öeÅöú»qíØ\96ÞúâÍ}_²\19bbîX²Îÿú¾Ì\85Þv_±dÙ!/î˼ïß{´­óHy½}¯\93zÌH\8e¥·Ï˦óû\v\1fÙðå>÷¦\1dæ\b\95Ùµò:þ\8b\9füh_\96\87ör̺ñ{ï¿åè\87\87ëQîutÇÚ±<OºüØGúµ-[Ã\1f\ 5\0ß#ÆþÁe±´­\9f+gã\821m>+í\88ÜÍ\`cÿ\9fÜ=Y[c\bÚµ\9aúºäO~ÑÿÖÎ\\r?M®õÕ&oÃ0\ 5\98\97íÆ(+.ú®¬ÚÔ\18CÛH\92õd\9d\ 2¬Vù¬vöi\ fo\92?
++θ\12Æ8eí·Ô\ eKë½F"ç<İZ¯½\85¾\ 6gJ\92ÿ\ f\1d¤3Iû\92m.­3Ñj§¥Üë¸"ÛÓ.U_´+Ô\16ù#©\7f\97«ìi\95?ÂÚÓ[«|¤Tç\8bü¥\97ý\94?é%Ê\9d\8b¬P{\1a5¦Rv­Ê®$\9d\e\7fuÊ/W³Ü¹¦`ú~y\9dÒË%Y\97ór\83âL0­\83¶&#»¡ÁÐ:=\9a\rR\92ú\8e·\1a2-Ç ;\1fªÜïT)0ç\93FZ§â¬\8dY»ÀËbÝ\15Ù!9(ÙQ\8d\16\96¢ñ½\9f\88]\95ïë1ù>?õð\1d)Ü*w`Z\ 5¾\1d\95ÔAÖðm§ý·¡ø Áݺ[EV\18«ÎM&¥XêÐߺS\1fm\95Ò\91rôC\eð:ó\9bÖ»\1cH)m¾³¾?Uª¦j\9d89  oË\r\8d\15\8c¼åµ8bÐHê\10´Ó^»oå\9eÞY\8dc\96j«)Éÿh½ïò¡$kËRlÅh\rI;\95Ö"­¨Ê\aµ}¤6#[m}À.:\9dx.\84Pe\8bU\9f\86\88·éæ\9cV¨6H¹ëÌqlÇr¯¯=Õ\1a6 ß\90\7f¤Öæ¥ÙI\ 5KQJcÒ>å,E3Õîâĭܲ.\89¯\97ÒI²B\r\ e¨í\9e{\85¹á¤ú\8bN£^¤>ÒØ¾\93\14i«»\9c´d}\v\85\90\96íÍ.ãù¿Ûú¢{üBj\17\9dª=ú¹Õt?>=k´ï]>`¥\1a|\95ÆÓ>ï³lYþ!\aÓzõ\8b\91\1a\92ÂÓð\ 2\rÞ\90ÓHNS©O\8d\12\89òI©9ir¡d]¯Ælè\95HjSC\aäì´}{F\8e\KÁè\8dâ°\ fr\9ae\8dÕ\97ST\8e:e9\eµIH3(z¶Ú*ÍUÛMÖ©ø\92l3UY\8b4!]{Ìz!Òz\92\16YB\19Ö)\85¡WR¹.Ë}³\\ 3ÜÐn¤Àä\90ôú\19õ©ÎhÍ\ 5ùÏ$_\95bͲ#)èT~E£\13¤öjn\8dZVÓ\ 6\12Híù »ÕÂ'¤ÈµöÛy\96Ûé_ôÚ*Ç&»_
++ýÿ\0\0\0\0\0<\13,öÿÿù\1fÚ\8b\97/Ýsî\80Ö\7f6Ûÿ¿ªýnÐûÿ/ü\89ÞÏìâü0&ü½òºí³ûÿMïÃKa~îýS¿æ\vßrø·\87\9cwv~îâµãú\ füÓw\7f¡õÿÇPæç®lïkßø{¿ú\83·¶÷\8b¾ÿ\8a¶ÝÙü\ 2×í"^à}íó³y\aÃ\94¿à%;~®õ?§èd\7fÊ\92÷\97Æ\vl\9fÊáðÿü¬Ö/\9b\8a\91ãÚºv<®\9fþæK[<B1®®\9e{ÅÔï8Û\7f\7fÍ´®³î;ùªÞ×n\86>e³\9bÜ\ 6óSÿýç?|VïÃÖÄ\11mÙ{¦±ÿ?\7f\8f\95ê0½ïô\80%ëüéËû²Zz\9fëú¶ÿÚÇû­#Oèù\ 4|\1aújï\98ú°·-\1cÞ÷%8ßûÓ{¿¸Æ\ 4l}ì9\9f\18úö}ßÞ\96©_ü÷\ e<£Ç<D\97zL@Ï\vðny½ñ+¿ü»½ßß\f}µ=^@wèìûϽv\88   \18b%\9eX7îçl\ e\86'Û÷VÎ¥°µ}oåÜ\8e\aO}Ø\e>òæ¯ô<\vÆöe\97î&\aÃÍSý\9d{Ç)¿Ó\97¹!\aå\ 1­\1e´OùÂ\1f>ëá!Î`\88       8v\8a\87\98\8dAØo\8a!Ùpçi\87õü\fÖ.ÍÏ mû¤\87ý5C\9cÁ\10\9eµã~~çÈm-\86Äù\10z=¬_7ÖÑI\ f\ôò¾,\ em0Lû²)\9e÷ذl\88\ 5¹u7±\ 4ï\9b¶÷Ö#Ϲ»/Ëc¿ÿT.§}î\ fì°,õeG­\1d÷å\8cG\7fà_\fy$\86ø\99\8cçÐE7\9dü×=Π\96^\7f\8bqF\e\17\91¡ß\7f\88=Y7moãÝÏýx_Öû;¤\rN12Ç-Üö¡~½1CnÎ\1e#£ûòÚ\aþpÈ¿i\86º½k\8a÷¸å7þ\1f\7f5.ëûrÙt\rû÷{\1eÛÎ1oã\10+ñäêÅí]³¶/+¹/{ßÔ&\883\0ð\8fiY?~ë\8bÕþe«=\96«\16û\ 4M¬µw\16\86XÒι¿Ú ^[Æ~Po5¸QSS¥\9c\87¾J½Ì·þXy[þ\12>µão\9f\86¹ÈlÌ-\96 &\97d¿\83\14g/\ 3ù{\94µ\97Ms\80Ù>V:\vM'&ÇXòÔ_\1f²\8e\16\91mü­Ñ¿ð©ºÐóW·>A¹§i1\18¥\8d)ÖÌÖYc\f\9cÓ\91Ù6iù\16ct8¸Ô\81f\0\93£\91Â\ e\1f7\r¾Ð^ø"78:J<\ fÁ\17Q»ÁµË7J\93pI3\8fI\8bÉZ½I÷²u\88Çv\8c\9a[L{ÐeÝÃ~®Ôo=µ\9b]ôaJe\996j;è@~3\94ÓÊùÒÆ1û¾uÕju\8cíM\1a«\1c£¦Pëñ\14^ö \98Ö5?ÄXH\81ç¤yÒ´\ e\86÷¬frÓÊrr[2\96«4Ð,íHc\13òÐO¾|\8c·Õ\8c\0NûRu\18\7f\96\98§cÍ^\ 3\9f\8e[S¹ÉáiG­&Z«¾ÇÈì*vFO\87V\9fR\8cÚZ´\8f¶æ\96o@7§\11\0QGÃ\17¹\9d\90Ç\a9©dï¥E{},\b²\12iÃZ\8brhNj­¦(ÍBÚH\vS\95SZc+RH²r'Gí\8b\9e_ò¾Ô\81\8eü\97ûòZµÃXÚ\87&(\90\rȹ°êi\9c'¡hï¹\9c¾Ú\ 5\1e¤4duQjPNð\9a5\86 J½IUiihÚ» 18F>¥Q       UcPJÔð\eù\7f¹Ô¹\96\ 2!j\8c\89k÷þòQ)ÏvÍÓSÅk¦        \8d\99±z\ 1Ó\b\f9\93\8aÕà\9f~-Ò@\99ä¥dr\8b,\18Ú\99\\ 4¤\ 6\92\86\98\94\1e\v½îO\90\1a\91k\87\86=h\98\81FCh\e\95«`jAQr¡ª-\80ÆU/\9fón8Gd\97v\17Ãó\8f\1e\87@ÿ?\0\0\0\0\0ßûxþ\a\0\0\0\0à\99`1þß_wÖ³\96/Ýsî\8a)ßÚå\aÿÄ\9bÚü|ÅÉûÛÖ\8eï¿óEç\1fßòäY\1d\17\92q\ 1\ 2^1ÅÉ¿àÍ\87<Ñc»­_\9a\9fï\88\1dû\9dÙc¢«¼\7fé\14\97~éÑÏÿ³\1eO\eÌüÜý»È#¸iúü\9a\13\8fÚûÙÈv_1åøzxÇ\81m~Áàs\9a\9f;f\9a'ðü·õ¸ýè¼\9b\9f{b\8a\eÞy\ÀÑ{/¾¿t\À\95S\8cõ\11\8f\9fuo\7f_×sñ\14ÿ\7fÛc\a\8d\v¨I>\7f}{_sÔ­;éûÿ¼\95[,võÜ\95»É!¸i\8aE?ñÈ!\87 \rué¼~=\17àj?äûs=æú\9e)ÇÞf\7fÚ\97ú²<|o¿iÿfÇ\12ô1\ 1+\8f%Ø2\1dïl.Àíû\8cǰåη\1c2,\eæ\ 3¼x\8a\eßÿ a_4       Íª\9d\9d¿ðîa\9d.õý<`I^¯­íËʰ\9f×OmmÛ¡\1f\19r\ f\ e\97MÇþɫϸc\18»0Äq?ÚÖùNyÝó\aëÿjç¼\84[w3\ 6aÃ46äÜ\85Û?6Î\1fÙ\8f¯ç3\ynÉ\83§Ü\91³sKö\\87+\8fk\bÓÜ\92g?´÷;û8\83\89wLã/Îùê\17/ëËÊ\90\ fïÉ©ÍÏ\8eA8j\1a\ f1;\ 6áâ©<ß¼°Æ\ fsKº¾Î>¾ä¨Uÿ«óN^ÕöEÇë¼ò\90\93û8\ 3ë\87\9c\8c\19\8f\ 3¯û\951\7fbÿÞÖ©\.ü¿·Ý=äA4½þî\9aös6\87àESÞÌÙ<\81\aMmiãÂë>Ð\97¹a\9dïoåùfy\9d±Ý^7,\eÊú¢Ö&VÎ/xÇ\9aÅu~è½}YÍý\18\ e\9fÎ\95Ùq\ 6\eÚ¾ü\8a¼\8e»ï¦\ fî<Îà¨i?\8f[8hø\9e\1dÆ5Ü>\1dßl>Ã\e¦¼\92·üØÏ\rã\13Ƽ\99\97Leý\9aí\8fí9\Oc?§÷X³¸½\9dÇ.\0xjµ¸áP4\14\9fü\96xVãK\8bÆ\85jT¾\ 6¨j\9e<\9d+Ìk´v0ÁËÕWcá}ªò^Ð\84]\1aõk\8cÜôÈÅIþ|z\r÷Ì\1a3\1fj\9bùÚjʯ\96¶OV\e\8dܦ\98d\16Ç\ 1<Õó\87é\e9jÔ°KãügµÍ
++&7%-\96<ù>¯V\f^C\99w\91k°ÍÃ%k^Ì¿¶s\1c÷\92ã\89õ)ÎIèä\v\1aè\9d¥°l\8b\93^µS\1c¯\97½ª:0BG^´<rÆJÙdÓ?\13tÿ\92\91ê,ò·&Æ\9eW/k^´*E½j\88{×y¾CÒÌeF\8bÆÉßë,\7f\97MlS}Gͧ&\ 5\9ddÝRâr\a¤ù½äú­sÊéaÇÒÒ}É%ÝôÄxq1\87à.b\9bw\15\v¿â\18\90]ļ\ få\93ü.rªizE¯)\e5jYs6Ö\9e\7fM\8b^gÀëmBË^ÛªÆO\ fùî\82\8eÃÌR¬\1a"/÷tÑêlç\1at­ÑØEnp\93\86ºW\8d¸v:\95 N´\9e\89\ 6Õ\97\16ýÜæ\1aL²}\1d\99ï¤Ô\8cî½Ó¹Ù£\94¸üáÔó±ÈÚ\93iÃX¬V\9d\ ev\91r\95Ò\96³A§,Ôó¥\14Ù©\1cuM5j*¢\81úQ*nI{\:\86à»)'ââù´t®A\8d0O1,].{.E`¦ñ\15QëÑôÑ@Rl­L\92ì\98og\85T·4\19M])§\9d4U9÷\8alU\1a°Fè˹\98å\98äI0K­ióÏ9èÕD\9ab\e\9f\8e<ÐÄ\8bU\aöH=êè\ 3ý´ì½\14¯Î\12X\92\ e\1fÐ+`\19\8eE¯WR×>ë0\14«Cx\92\1cIJ}\f\8b\95C/:õ¢40ÍvjuÀ\80N=èôÚ)'\9a\ 2Ùg\9d¸2ȵC\a\81hEik\89Ò\fe×ô²'\15ª£\9aªì¤>ÂÉ%G®\8dZ  I3\84ºÝå:üß\9d\ frW98uh\824gi\18ò¹iüQ»¢.>ÿ_\7fÄ\95Ï\9d}þ_¿nåçü˦qû\aýÑ/\9dØ\9f¡t\1cþmóãóù\81·_sê\90\9f\ f9Èõó\87ýɧ{\1e\ 1\93êüð¬©_úÅ×üð§\87ü\ 2òùþÜ0û\9c\7fÅ\9a\95\9fÛ\8f]½òóù5ÓsËÁ\7fü#··çp[eýûMëùɳ\8eh¿\vèI$Ï\bÓ=ô\1f~lc\7föÕaRí>ùèÕ»~\ e?sï]?k_¹vñ\19\98þÃW\8f÷ó³9ù\ foûr\82>Oßýä+û³o\bý9ç\82é÷\94oîuNÿ\9eÏò3§ß\vöÿð\86Ï\8cÏÅ}_.\98\9eûßúÊ-}Ì{LC.\80ûöÞõ3ì¥Óó\98ù\ f§ÿe_&§V_gûÞ\ 6}6|×Éã²aÎ\81«Ú÷>*¯3?óÉ8ääOnÙo\10³ãï¯Øk×ϰ\a­Þõóæíí{ÿ§¼Nzô°wöeÕ/\9dÿ`å1ö¯híd[{þû©=ú²0ü®±ø<}ñ/\9cú\95þ\9c*×°þ\9cº÷¸/oÿ;/.\95!\87ÀnÆæ÷¼\ 4\ 1pûôÛÔì\1c\0\ f\7fßYwòÂ0\8e~\18×~U[çùZf\1f8çkC.ÿaÎ\81\9b§y6fÇØ?¹z×ÏÌûîµëçâÛ\96<O\1fwÓ0þ~ø\9dhÓt}\98\1d\9b\7füê]?O\1f>\8déÿ×\9f»÷¥ýYÔľ½Ë¦öòoìO>8<Ã\96ºäw\r}Ö>îË?ø\81~\1d1\9e1öÀ3ã\19ú)\9cW¼Ý+í&\a÷ø\9cóÝvo¿Ë\9cÛIG(;;>Ï\ 6\90C h\ eýÔG§ê\r®|QïÄuø½>´¹>\ 2]\9e\1cuF%¹m6ú¸àt,kÒäÖ\9a5_\9fÌ\86±äµêïn>Ô²Âs\84Ó\11ëV
++¥:;.\ f\ 5¡jÚ\15ù§)\9an@ÿ¼[-Fù\8ef%\97â\93\96P_ªPjXJÐ\95*\8f\a¦\r_ÎòÜ\97¥VäS:%\80Õ!õ:2ºVY\9f<\83è³DÔ¡¼)ê½»\ ed×çw¹\11JVJ[¾¦?\1cÈã\88>QêèuyôÐ\1f\ e5\1e\9e}|\7f6Zi<ýò9̧1ÿRPò \93uln2\8bÏ^Oéï\17r\8a\98\10\8dìcûÉ å²ÙM®\83\98c±mzwyÚ\1d\7fë0:Ö[\9e\87å|\b>\ eÏYK~ç\90\8a\8d\88¨:7¼fq\90[ç6\1fC\1d¾#u'\8fzZrQ\1e
++{§\92¶½¢C«\8df¯(QÇ1ËCRµú`hµ-Êó\91þ®¡¹í½\8e\80ÖlèNSÂkÖt)\aM|/Ïû\9a\r£è'\9c\8ec·òD¦OVò\80WÛpw©R)\7fÿOý»\9bþ~dõÇ\ 5MZ0ÎA°\8bßdVÊɱ<o\87T®Õ1í¶ý\0\9d\9cÐÒÞô\87\179í«lV\1a¿\\9d¬þÞ"Ç -Ík&\rír\95\95JÉë<Mr\80¦êO'©èo\92z~èåI\1aµ^Ù\82\[¤I\876W\81\9c\8bR\fRur6V}âÕ_¾\82þ|¤åï\97þ\ e'OáýßÒ॰eW]Ë\99!Õ)[\96o%¹>û6\99\874\8c\96çß¶ßj4ó½NÊ }_zQ×4ÿI\9aº\14¹×$\1a:+Ãô{ÓÎsR<Õ¿iºÒGÔ\87X¤±Ky\15m|A\9fùÝ\90éÀµõÈI#\8fðrÎH³ÈúÓ\92·^®\17r­w\9aM¡èD\13r2kæ\8a¬§]Ò\83Ò\1dÕ9[¤q·ßE¥    Éuµè\14\1eN³zȪ\8cT\81i×2y\ eÕ¤gN\7f-\91\16iZ\86\0ù\v\12ÛÕ«]\93\8aþ\9e\91\8c¦Á(ÃïpÄÿ\ 3\0\0\0\0ðL°Øÿÿá\8fþÚ×\97/\9d\9f»g\9a\ 3|ç8ü\87¦÷w\8e·ïý¡Ëóö\8f1Â+÷\9dß<Å\8doýü[ë\10Ã>ô¯^³\18S~ïMëzÿq\19úã\9f\98ú\1fgçX¿c\9a³~6ßø\93í{+÷?n\9f¾G?"\0\0\0\0ü¯ûg\98Ëbù¸\9aåcq¾Ûbµô\b½ÎbQb.C,\91FnØTu\0Â4¯ÅJó\91¬\18££1kK\9fÿ\8fN\1füO³Ïÿa\9fñ\19{çñü\e¦çò#þË>÷\rs\84\95ù93}þÐ\1dfs\8b«O&¯\9e;~zþ\9f\9dOíy»\19³»­-[y\9cl\99¾·<\1e\18\0\0\0\0\80ÿÉß+v56jÊw°\8bñ*ã|\96\9a#@SAéx\ 6ûtÍ\89@ü?\0\0\0\0\0Ï\ 4\8býÿW_vÐÙË\97î9wÙÔ\9fÿ\8eÃ\1e8®÷ó§Uósï\98Þ\7fé\8eO¾jÈC]ççVµ÷7ÊëÐo]ûÚÖÿï¢\1fórk2±\13ßÿ¦\a\87|ìµ÷ã?1åÎû½\ 3Ïèc\ 3¢K=¯×â¸\81Í/ÚØóêUg{lÀ¦¶Ló²\85=6=8äl\er\8bß¿÷¸ìí\1f=ýÁ1ßYÏs×s\99¯\94Ó\f\0\0\0\0ðÝ©åÕÔþvM\©\1dì!\871w¢\8e8hók$y¢L-ä?\9a¤)1[ÒÀ\9a4ø_>Þ\86\1eØ\10CÐw4N?Vg\8a<\ 6\87j³¯I³-&«S\96\15gmÌ\9a\e\f±øµ¥\99´%¤¢S\ 6\8cùA\8dË\9a¢³\ eù6Ç×?eîI\9dÝ¢Òÿ\ f\0\0\0\0À3Ábÿÿÿû¿?²~ùÒ=ç\1e\9fæ\8dÞyþ¿«¦¹ÐwÎ\vpãÔ'\7fÄ·\8føvï\93¯a~îê)_ÀÎóÿÝ?õï\1f\ fõùÿ¬sóüï:oøå\v\87ýmË#Xu~ÁG§yÝ×½úÙ\7fÚæÿ3\9awàê¶?'Êë\ 5ß>îèö¾uy~\98+\s\ 4l=åÐ>_`ôòþ\r{\8dï\1f|ïam?SªeõܾÓücg}Á\7f¸\1f\97\1dæ;+Ó1\9cußÉWõ¹ú\8cís\9a=1}ï컾xK_\96\86yËzî\83\95çñ»xÊ£ø­#OèóªëX\8e¶ìê)¿áìüöf¯±\1cfçø»fÉ÷\ eÿÀ\10ká{\Ä~Ó÷>yõ\19w\fË\86|
++WLsÄÍÆh\Õ\96i^Ä­\8f\13}Y\1aæÕ»®mïÝòzãW~ùwûü\7fc\8e\86\83[¹¬<§à\1dÓ¼ñ\9f\86>×b\ e\87Umþ¸ëåõò²ñ¾aÞÀ!¶ã\9eÝä\92\14÷1;oàþÓü\7f?{×\85/ëËÚtËÓ¼\81G­Zi~ûÒ\96\9d\7fkÏ~´·éqþ¿¯Oq0§/\þãòa~ÃuSYÏÎÿ·nï±<Ozà¢\97÷e±ôu\1e4\9d[\9b\16ÞÜç·\8f~\88yyh*³ß,ÃÜ\87:\aЪÅùñV\8ey¹lj\13\9b\17\ eéëÌÞ÷e×OóSn\xÕG\86ü\eÃÜ\877´e\9b´ý~ùè>\9fb\89¦×íãû\8c×\86\r\8f¼úùmY5¥×ѱS¹\1c·pÛ\87\86¼\1d\81\ 1\0O\956\ 6×è0X¹?):M¡Î,8Ì1gÚ\X;ÍOWõ#1\ 4íy+r\9fTtÊ8\9dO.\16_}Jz_\9bB\ erWVc-!z£3ÆëX[/ïh7\9c/r?P\8aܹ\96ªsÛ\ 5\9dD,9\9d½Ë\ 6¹-ÓÄ^Áéü\92Nîbä­\1cåï«·Æè¬{ÚM\17¢Îõ%ÿ45Wo²\97ÍF¹#\907\83üÓÉ?\Hvè'´®æàÂÿ\8f½ë\81Ù³ªî}\r¦oi\v85ÔÙ8ÖV)m\85ûÿ\8fÁ\ 6Mqh
++BW¤\94¯Pæ'-\94R$d\12æ6²\11dB\80dÆ4\19Q\12\16¥(\ 2       \ 6T\144\1aQêR \84ÿȰ¾+PÀXædÖl¿sÏ}î÷çýúmÉ Cz~ä\ 1ú\9cç¹÷ÜsÏó¼÷éý\9ds\\8eT«ÐC\1dô¨¨Ä¡\ f1dE5\15i/Òx¬§\12e<ó\94ÌLaùaK$3Å5;:\15)[\98\83\ 2\99\8a¬Q\9e4ôE;¥eÓ0\8f«\ 1ÿº×RÛÏ>mÝ/E;\ e\8aQU3\17ÐfL!{\9fu¢]XM% 5W¥G\9f\19S\9f1'1Q½@E\9b¢T¥­T\93K%AX©K\18i£U%J2×Åg×Z\8c\18¢\r%o\1a\95a\v0\85        ¡«wØê\19fÚÆÅ\15T\Ñq)>\85\ 5\97¶è\11\7fT¥P¢ÃE8\8dQB\1fJ]\87Ŷ11Ã{\12\95÷íTù\916\84­\99joØPåCR\1eÓã\13ïÝ\ 6\a-°â¥ÑeÚ\e\8eú5©\1f\8f\87\82Ê]&xD
++]mSï(\ 2ÞÓÄSg\9aòöq\ 4»\82;)\1a;eå£\92\8e°\ 2º\85       0·\18*\9c1Q\99Jº>\925¼¥`uú\ 2\962öaÎb\9bç©k\1fvG¢Yµ1(
++b\87Z)G*Å       oÊ\91\9e\17|Ùy<\1a\18?Æhé\ 11Ô$Y eª\9f        \93Ó\9b!\90)Mq]OùýhÓ\9c\83£ËDRÚAÚ\82Ïe7\9e\ 6M\9e\80W\ 4&\9b\8c]x\ 3\14ºï\14ü8¦qz¾\1e5R§ª\13\89/\1eG)í5%*Ô4\14>\8ffýø<\ 4P"¸Â-Ю=O\98\1f\18*\aÙÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81àÍ\ fùþ\17\b\ 4\ 2\81\10\b\ 4\ 2\81à@À\18ÿÿùÇ\17ï\9c,í÷vî§þß¼qç/úP9¯\8dï÷î-|áÓq,Ø~ÓéÌÛö±ß{Ǹëß3Ê\9cí\9cû=UxÉD\94>êÕ÷þ¦ðüµÆõ\97\95ë\87ùüÇ\95ë\87ùü÷\16î3q­Ïÿñ;\7fTøüÚ¢ý\8d-\1eaûºÅ%\8e\80\98CýޮƱ^²÷º\92s09Òó\88VSð¾\97\16¼ZÎç ú½Ýåzâ£Ï9õmÿRâ |\82\1dV\97ë\89ǽdßîMå|\8eiVï\86Ù\9d>ó·\9dÅ\1cu¥*?\7fMËw8\7fÑ\19\9cÓÐâ\9f\19c1\ 6¤×\96ÁU\vYf\ 2ß·¾q¸7\ f¶ßÙqé\99o=zH§ß0_~w\eÓ\9a[Ï{\81m¯4·yß\9cNÿM/>}%ËRåà_YÆp8\8e;\96¬}¹ré\ 3óå\97\95ûþ\11Ç©{\962/\å\1a\ fp}á½SÍÆ\93\1f^uP\8d\ 1¡R\94\90=Yî#þú_\7f÷|æ¯\9b\90X\97EMvø\91\eXF\84¡"\9bßæw\98K?¿ÙlÝàg\v\99Ûnj\fÅ£-ïäw?ÿ±Ý5OeÍ-yÓìÎ.[ïYñ\\95E\1eßÖ¹]\9b'\rV,¨q)5VàØæS§^³òù"3±äö\10\b\ 4\ 2\81@ øß¢Ä&\10\94\1c3\94Æ\1a+\18æñ\12í¾Ô/'\ e{ôTò;%\9d\93\v\95\9f\1d\9eVßXØ&ë±\86Q        \8bôH)À\9c!\96·&:·Õ9RU1K\15Ø3%)óN\11¥\98â\12\12]i\8dR\11
++@\8f\19\13øðÁ\98ÄÜf£\89\eM\19Ï\88\v\1e°\92Ò*YjÃ\1a¬\93C\fÊQÒ3Ê6f\83\99"\r¨hY\846\9eÖeÁF\95\93IXJZ\1d\1d\95\81§\92êÚRýôì°\ 2\v\ 1K;b\gG©Î°
++Ì\ 6_\vd\0\8d!h\13\88\98í,s\99q}±\9fKT \1dc2%¨\93¸Ðè¡q\9e\1dÅ\88Ƭ2Öj°AÀ÷\84Ï\148\91°PΠ      V\feXÖ\12ó\1a&sÞ¸H\ö\88;R\89\1e(6\rÊ*
++\9b (\10§½¢Ù\82\96\91\86\8cu| \1d\12UbS\85\1a¯)Ô\84\bôÎxªÁn-M\rÑé11.EO-eOeâK=8\8fï\84ª3\ 6\19\88Á\ f\91S0k²¥Ü<ÿ?\95¦£0\ 2\85\13\91Ú-CKQSq7Lf2\ 1+kJ\1fG\ 5ìiâT\8eX¦ê¨´U¸ÄG\8a\ 3(q\ 4øoö\14\1d\ 1¿\81\8b\10ó>bt>\a*_\ fu1\89]îº\12\8aàm«i·¿X\eÜ\92;Nü\1f`\8cÍX\9d¿\84ùN\81¢b(4Ýgݸþ\99Â'\88å\8fÇ\80\1e,[mB\99ú\92)a'hÙ2_\9fÒôQIA(\87»\94\1dË\ 5ø\9aǶ°ýñ´Ñäuýø\18\13ü5Ã+\1c^&ÊgÙÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81àÀÀØþÿÂëæn\9a,\9dÙÛQö\95)gÚÕ\879ÎÛg(ÿßqe?öf\1c\v~³ô\84\9a'ÏuûçÃ|\81ßÎêÚ9ú'\87>ÉyË(oß\8eò÷\ f\94ÿî²\15ï¹\9f÷Y\1dí·\97ë\87y\ 1?lùÿnÙþ®\1f\94óÆÛ~Ýo§ë·üÕ1Ì\v0Öô{7µ\q\13y\ 1w5=ß¿÷3\8f\95óÑ ßÃJûÃ|\81\91\9fÿÖ_λ\9fy\ 1Ê÷{û\ eîÚY²W­+ûÿAÅY\95w0õþÿ¼\96Ãí[w®å¼w*\84ñ5\ré¾U\1f\õ\10µËu\7f|\1c7à£×p\8eÁ.¿[¿åî{uî¦g\997\10k\8eÁÑvß\14y\ 4\9b=\87k/^Þx\ 3\97.\1f\80\ fµ¿Tî\9b:çß\8a¶?þÔ\9dçîbYÇ)øB±#9ÏÆç\8f\7f\87(\96Í+cø"\8eS\96oæÜ}1jnó ¶\1f\7fÞ`\17s\1fRô¼\1f\7fïÜÎ\9e¿ÛVsâ)ëØf·5»üùe§VY¬9\eï+²©9\f\97ÍîüuÍ\ 3g,e\ e\ 3Àº\14ÙÔù\0Çx.g\r\96}\87ù\r®æ^\ÖìrÉß\9dþ\ 2˺û\9eiópÆ5\9b\1eaYªc_Üd§/:ÿiæ>èʧ\981{¬¿Ñ\ 5\953\91y|·5_º}Æ\86\87X\96*\7fãî"û0\8eÕ/\8e|¥Èèï g\8cål¤yßyÇ\1aÎ#è¢g]ö´\1c\83ëî\19a{ºNÏííY\18\19\1cÂ<\foLÍw8N69§á\85-¯æ\19\8f|S³,\ 6ö³»Êø¶à¸èÆM/sNC]ýåú\96\7fpd°çKUVsn\8eÎîÞ+§ýý\ 5O±,insß4µAw5~Ñ\13·®ù·\9a\v±úîâ6·k\a\1f¿±Ö\r­¹\10w\1fÜ\8daíÃ\87\7f\9beü÷Áx¦K\9bSçP¼­½W\1e»áÒ\9f3\aÅzöÝ]³ºþN\1a\p-˲f{^Ü\9e£\8fízif}oz\96ÝÕÆ'ü\14\81àÀFËù4qß.\ 5¼.R¦\9c]®;7Ý>\95ÑÙ¦qu³ÞH¹¸4\96bݾ]PN9\`¼Ï\94÷
++?]N\97ý/ô\18\823&Ä\92ÛvÜ\1eßë\95Ë\8d\91Í()\9a\ eÙÛ\9c\8aír¹\13ëÙ²WH\vCE+À\18»Úd!¡¹ÄúSÎ0\18=v{\8bdJü×AS¨GÙá\92§½À\98b\86\91\1a´×:'¨J{¬\96v\111=´×K\e\96Î\99`h\ 3ÖÓ\16¥§bc\98\1c\a\91VXoQÁ2,!lL´Í\8e9ñ¼Ï\ eõMÄäRÒ¶\92S0µý_Ì^\ e\8e\927c~\ 3¦Ë@/Ú<ÇÀa\18\8dÕC´V%x\87Ã\f(gq\99Æ\ 4R]²Hê*ò\1eÈUÀµÔ\93\0\8c\8dL\ 5ÛkÚÌL.b|Ê\90é1\ 3X;áL¦Ë eÂXà\8f\18\1eÆTöÉËdgâ\19\ 4Þ\83¥Ü\84´\89
++\9b\18Ø*F?îùP\94²-ÀÓª¿C\1f\8dgD\19ÚZ\87\87`u«\8a\85éig\19\8d\9bL\89öÈv!XÒ\ 2\93ª)õ\eÖK´{\rØLõáÐ'åÃC\a\98 ª8W\8c\9205\96ø\16\99\94ÅÈa O;ø\18GðP]Ñ®´\vä\7fªËa\89~0w¡r4àÌá\8dËÍxýòTîoïÝQò<¯È\80p\8b:\97!\14bM¦L\86±´ü?æ\9cÄ¢ÝÍ\98Ì\ 5À»\ 5¯)\85÷\b%¾ÄôÕçUe<OÑ\91\7fyz¸ºÜ\8d8Ýq9:\1e\ f¥ð#o\8exßøê\7f\99Þ-\94@\11nF¹\ 3q_Í5Y¼$\98ñ<\17¸\85omjâ     aZðâ%²\88-sG¹\e¡\ 4\86j\98½\82v vä70J 7¥ó²ÿ/\10\b\ 4\ 2\81\10\b\ 4\ 2Á\81\0ùþ\17\b\ 4\ 2\81\10\b\ 4\ 2\81à@À\18ÿÿÒ?þ\93%\93¥3k=õaþÿ\8e\96?obþ¿Ñ9Ýõ\8b¾\7fÅ*æ\9a»Ðï½RÎ\13ázáª#\7f]óÿáü\9aÂÁ&®êÑ¿?ú÷5W\9cë÷ú\8dÏ?\91ÿ\7f\1f?·wÁÞrÞF´sa«í¾à§W=QÎ{\97ú½ëZÞ¸9\7föÎ\9f\96¸\0Eq\aïh\1cç\89y\ 4\7fÕòÅ}uóÒ¢\8f\ f\94\17pwãYO\8c\17ØÓÚßpâ»K\@.ñ\ eÇ\96¿W\99\9c/pVoOãr\ fÇ\ 5lmmýî¶N\16»zñMöå\85g>Èö¶\91¹Î»Z\9dùá\98\81\e\1a\9fù±o|\92\19[¹Ü;¦ÉC¸¬Íïp\1eBæâ\9f\82côá}ËYæj¬ÁA¥ÍÏáxô\9b«ÿ\95ç?x\96Ýׯ0\1ck°£åâ\e\8e\18\vºàSÏlÞÆñ\ 4\9e3¦É\89xIis\r\8eë?ÿ\89§X\96#ÛÓµù\1fÎ\89¸½øÀÔy\ f\1fmÏÃ9;/ú\0Ë\Í\v8¯ôw\1cõçÎ|\9ce!ò\18nj~5\1c\87pWã¿\ fÇ\1a\]lý      \1cË\8fúÄK,³5¯ãåmÞ\87ã\ 2vOÃý\7f¥ùà¾\837ÿ\9ceÙñ}ëgwÏ×0¿ÿ®b3âÔ¿ó¨Ñ\a+\87¿Æ\91¬i<öK?¸éáÊáW<ö=s»û~}û¹,Ã\1cq\7fwMÃÅWÍ\a×\ e\8e¿µrñ\15ûË\r\86yúÌïß\86ãä§¿w;Ëb\8dMÙ5\8eÃÿµkY\96#Ïû\9e±\98\8f§Ww²Ìýí\9cÓùÄÛ\8e8ÿ\99"˦>·+\9b\17¬â1d[}iOËoúèák÷T\99ç±ï\9b&Çd¡öOÉï\17\b\ 4\82ÿoü\ 1æTk\1c\ÜG\1cúhé"k§\8a\8fø¿ÖRÇÏm´ÓpÎ\89þO)×T¡\88\13»\97XØÙ¸\80!àZ\8aËÀ\8f\ fÅ\fèb'ÊæF!\a:\ 5CIþ\92rP#{\15±~$Î4®\9a\86K\xÆÄÈW\14{Fá\ e¬ÇøX\ 4Ì\9erÓätk\ù©r\89\95X\ 6Ø\9eÊÑS\a6À+\åY{ÊÍ\16)GYèâI²§Tmð\ 6\8cªðèëy¸Kæ{Ê\í\8f»Mts8\1fåA\8cn\\Ji£\14¢W\ e\97\e\15JE{Î¥H¹\13\8bþ!\91\97éj\83×£fû~ë³cªÐ6\8cãRn¾À±5\16nj)û\1eþ¥<¦\17\1e\13Ð'ô£\88\bô©m\8eDΧÐ\ fÌ0\ 6R\88èä£\11\97£?<H\181Å~`1hü\ 4\1e:¹«1\14y\93£\1fÏkÇÊ\10Ï\1d¾' \93¦é\f\18L(9ïÐ\8aÇ\1c\91Û'Z>ã\1c\ 5é\90I).\0Þîé\894\14OB1E\94M\10ö£H\ 6K!\ fx\báÀ\96<\18WiC\91\ 2\98J\ 3÷RðxÌ.F\19µÙ\1fw\9f\ 2
++0+dZ\ 5·Ãã\10§åîwy\aK\8cB\f.\19ôá»¶(p\ 4\8fhõA<_x\11P0\ 5æ\bv\81å]LÖÂâ\86¦ÍÒ0<¥OLÎQ0\b,
++Ï\82\b\93\81¹Q°\13\ 5\9aPTGñL\a\8fÇÅ*\91Ù\ 2\9cJ\91çâBz\a\84\12}T¦\ 5\13\ 3ÇÁCì\1cT\87ÍñÀàALN\91\15ñT@eÊ\ 6\8a¶Ë\9av\8a¸\8f©â\86ö\97CtƸ¸\ 1\ 3y0É\96ïµñßÿ£\ f|ú¨Éïx¬_Û·       Éù[O%\89%\15\b\ 4\ 2\81\10\b\ 4\ 2\81à\8dû÷µÖ\85@\893\92õeßUøÿ\ 2\81\10\b\ 4\ 2\81\10¼ù!ßÿ\ 2\81\10\b\ 4\ 2\81\10\1c\b\18ãÿ¿ðÛ·ï\9c,í×8âáz~_oñÌ\13ëí}¡Õ8\9bX?ïÉ\16\8f<>N~||ÁÆÇ.Í\1c»\1ejM´]ãêÝM\8eA¿{\9cìåÙ,K5®ýÞiêÝý°õ·yÇi7sÜw        \91¢Øîvßäúe\ 2\81\10\b\ 4\ 2\81\10¼Ö\98®\ 6ë¤Z -¶?k\\19½¥\14*jLÖå»hù?\1cåÌÈ\94\98A\976dÿ_ \10\b\ 4\ 2\81\10\b\ 4\827?äû_ \10\b\ 4\ 2\81\10\b\ 4\ 2ùþ\17\b\ 4\ 2\81\10\b\ 4\ 2\81@ðfÀXüÿÅû^ùÐdéÌÞÉ¥~5Õ¡þÜû¶\9c\âöµ\9bÑï-juÐ\17}ÿ\8aU\1ccïB¿×o5­\8fÞû\8eõ\\ 3=Û~ï\88¹ÝõGÿäÐ'9¶^¥~oGË#°ðÓË~_ê\+­û½'ÛõK\7fôã\8fóyÊ#Ðoy\ 4nÙþ®\1fÐyg<ÚÿU¹\9eò\ e<·wÁÞrÞFèswkgÁO¯z¢\9c÷\ eý®ou¹'æ/àZìTË{ãiKø¼·\11ú·:óïßû\99Çè|\88Fõ{W6ý?ú*·C¥7û½Ï\96~\8fñø\aïÞ^Îë\1cgõvÌíìyöàÙ/q>\ 5ã¹Æxj6\1dÎ\85°²õ¿e°åÛEf\æ|\a£s;\9dÏ\88ë\9fã\\b¾Ö\81?¬è·
++Ç\ 5Ï\eŲ`8ßÁƦû«s7=˲èXöJ\91QAôO=³y[\91\ 5\9bY\97Ë[\9e\84Í\83íw²,:®I?:N¶Â\16Y\f\8ak\9a_XÆðE\1c§,ßÌzÆXkË?Óò2\9c³ó¢\ f°ß¸Z\v}Nó©ó\ 6\as\9bTy¶Èæ7»\9c5X¹\9ckÙûĺ¸r\1fÕl\1fñ\17¼Te¥®(ì2·ó£Ûglx\88e)p\7fó\8al&\8e\7fºgtPdÎGÖó¦f³\87®Xû2ËbÍ;1ÒtY78ÿf®e¯2ërɡݼ\8f\fö|\89eÚ³=×·ñ\r×¹_Yd\7f\84ãÄg¿u+?\a*ð}ýæ/\1fyäñc¸F¼ªmnmzþÍÌ\95\ 3\96ùää\85'\10\b\ 4\ 2\81@P0>\96ºÖI×N§\12\8b\1d\9c7)G§=\9dá:jTâ^'¬]±LsXØ[®³n|T¥.¼Ò*é0\16\87\1d=5ç´I\11K;ç\83â\1aîÆ%\13s@\v.\18\rA\fQ%\93\15þ\18µË\91\16È&âË$aÙ§}vÊ&¬íµÉTã>*\85»tÈh'×\1a÷Îgôa\8c*qáÞkåÐw\8e¶«#\8fsT\1c>æ¤t6ÙÔû|ôXtj\f     ÊúÉ6ñÊ\19\15\r,\11j|ùP,yw-\9aÅeQu\7f\9e\14³n<\86\v\9b*(\89\ f
++\97U°ÊÆd\82·)«\f\93\9aPô2\ 1£5\ 1\9f\1dè\1f\9dè`\8cÁZ\eËfü\ f\17[\bPØãS,àæ\18\8cÌÇä2>sbƸ\83Ã=\19öðdÉ\88ï\ 6L0úPÞ¸\0\9bjú8¡9ÊX:\93\1d\86#écÂ}è_c6¼¶       ÿ±1Âj\1eÖ6\1a\9a\ff;[\85\v\a\v\a©ÁTc,Éè1\1fP     ú\akmµC,\9a\ 6ÓÉ\93Ã\1f\99å\16_\ eÚèhu7o
++N\97l7\8fø2\f\98¯\0M3ìh]NÕ¾ð2|\8fÅXïS   >\16àh\18J\9d×\bca@Vöÿ\ 5\ 2\81\10\b\ 4\ 2\81@ 8\0 ßÿ\ 2\81\10\b\ 4\ 2\81\10\1c\b\18ãÿ?¸üGÛ&Kû½K
++ÿøf\1c\v~³ô\ 4æ«k×ï\1d·\1f>ÿHã2\1f³÷{Ç3_Ùå~o\ 5QÉg\1c\86ã²\15ï¹\9fùÈNõk|\ 1_\7fØÙå|Ö±ß[ÝÚY¶×=À¼}eû½{ËßW\\88ãÚ\17ßþÃr>\11\9f\7f´ñ\9d¿ºyi\89#ðÁS;¥ßkp¬|ü\88ÿ,¼ý`pþü9]û\13ùü\1c\17@|ë£_ùäã|\9eâ\ 2ÔìîüQÿõ§ëJ]Ã\98a\87õ-î`b½Ãù-Ná­¿\9c\9b²òýÞÖÒþZ\1cK~·íÄ\12Oa¼\9dÕ[?§»~þ¶³\1eb;+˵\ eç´±ýûÕçü\82eÞ1\8fýØr\1fqÿ/zß\16\96i\9d\98\ 3~Ý!]\9b_^xæ\83\91eWÎéæo8Öà³EFü÷¿½cÝ\80c\r¼âþN8´³Ã_<wq­É¨*W}_ksô\81O\1fUe\95\8b¿¬Íçp½Æ5M6\¯ñ fÇùßXóP'c»\|ÈØ}Ënd\99±Üßqmìßûç³vTYàþ\165{®Úzî/ª¬ÆR\\dWáØðÂ?ܱ\rªÞwlëo8îáú2ö3qüÇ\1d\e^ìd\1cO°¸Èè_\e\9f?þ-\1c÷à\15\8fï³\8dÃ?úøwæ°,\ 5\96q\8c\rÍí\9a[Ï{\81kU*Íc¿°µyö\8bK¯g\99­vÙØ|û¼Á.Ö3EϺ\rÈ\98lr,ÅaÍ\97ÝA#Å.\ 6\86©±\14Í?/úÚ¦G\8aÌè\1a×qÂ!\9d¿\1c\ 6\8e\97°Æ²O\8c´ù\e\8e³ØU\9e©\ fãXýâÈW8\96\1acÒÆ°nð3®Å\19\8dcÙH\93­\1d|\9deÙDÖó\95\16×óèák÷°Ìz\8e\85YÜüì¤Á¢\1aK\ 1/äñµø\93áX\8aÕíy¸ç½\7fYc)lõ\89Õ->êc»^\9aYßk\9e\9f\155·ÓEb0\ 4\ 2\81àµEáÍf\1fMLÎàÇ#X\1d°\8eÃϤ\8aÆ\10\a;*\8b5HÔQ¹à\95sÄÔõ\ e\9c£É   ?*Æyb^ç\80\1f\ 3\85\17´§\85\82Â;\Ç\18µ
++!hü Óm\85\17n¢sÊXt\84\13D²Å9\®\J¸ÄgG×@\13M$müzâçÇâ\97\92\ e?)P3\12ÿY\a\1dð»d¬\8e\19*d\83\13      ÷¨è\fV´X\8f@qã³&F¶¥5\8179\aHRi\vZbAIÜ_\a=UƯª\8a\85ÃLôrmH=t`ØF\85\9c\83\1dðÓ\8cu\10F\9eþ\9b½ë\ fÖ«8Ë÷Niùn  \88\ eU\ 6(D $ÅýýC~\14\ 5G\ 61\10
++!!!I\a°¡       \ 4\1ct\18ë\8f\8ee\86X0¥c;\83#:\8cÔi*±\r6\95\8c¨ \13\85q2cÀÐF\1a"MÓKÀ\14hÃXР>Ïî\9eý¾{¿ï^ÿ\91\ e\96}§'å\9e=gÏî»ïîÙó½Ïû¼è\96\16D6ã¤T\1aJT¸N³1¸\ 4\ f\9aç\vÞ8hãBê\9ftPaÊ/&,^Øx8ö\80Ö@I\19\83l\89ö®Øwèt\0Kn\ 2;\1c\ 3ó\92)Ü:cn2\96;Þì\f\94\89ͼ\161\b­ðÿ\18\11C\89m\86\9d0w\85\11\14v\17^Za­\16Ø¢C\1d°
++l_­
++:à\1eh\1fCbr\9fÐ#'½³A[Wp×h\et\1e       ×\87¶¡Ê\81|j£pÙ£â\ 3\ 6\8f\99r¹q[\89\8eD\98\8276°ïQ+AXº\8f\96hx\93\0âÉ|\15\1a\ 3[2ø6B-è\ 1l#¡ÓEô\16ýUÂáÚhñ\0o0\9a\1a\91\16V\11\8c×\9eêJ-Ç< Ø<ò2\f\92\9dÐsô@òc\87\90y\8c?¬4p\93öZï\ 3v_Ü)\1aX­`ÀrÍ1ç´ã\1c\8eyäÃ\15Æ1\95[¶B8/Ñh1E?\9c]\9c\0\98YèMÑ\vÆÊ$=\13ÍïðH¥q7:/\921D\acG/U\9aº0vcxFÃzlÄ\94\87Ù\e|Aêè$ã\ 3$SÆ£\8bè\82ÓÆ\17¬¿¢"p¶Ë«çµ±9ö#R¿¡\8b\95\80ZBj'ÿKÇhÆf\8c\95ÀÚÁqÁ\14Ä\a¯\8fc\83±$\98\8d\165iS®Å¬\rø\88Áøc\1a\el£9\8a\98\85AG¬8\f\98í\1ec\815\ 1\13\92Ë\83ÀU\92`\7få­Á\97\13Ñÿ\ eÝ\ f*M\aÜdp¹\8f¬ADذe0\ 4\969\8d\19\ 5Ëâv\1dí`4\0\16"L~,\17ÍÿߤI\93&M\9a4iÒ¤I\93&M\9a¼+¤ïÿÿäÊK¾1½ôÈñ¥ÉGG\9fÙ\1d\vö-Ê~~\87ó÷Mð<ýewÿ\88Éü|\8a¼\80\80\17Ø\99|h,üÀÇæ¿\9eý£R÷Æ·§z\86q\ 1\vÓsé7üä%?ùD©ß÷Æ\13%]ò\89þó¢\ 5ÿ\9dÎkg{ã»&ºóSyû6÷ºö/<ô¹\eÒù`U¯ø\95\87ýö\a+OÛ\a¿{Ü\7f%¿½\96¸þî9]=g\1dZ\99ð\ 2Ák\¿¥ú\99§úùÃDwþ£¿üSé|\14ZöÆ/>ªÓÃïýÎY¯\15>E31~0]¿\ 1ǵ\ f.þZá\ 5\94ÅÇ\7fTצaÎÀÍÕ/{ÅyK\9fÉ~|\13³\1fø±\89®Í7ONèâã/Ü\7f¯W\9e¾õ\937eß¹RÅ÷zqºo4gàççôï\9bîÇß\9eÆþ\1e\1c\ f\9d³,ã\r¬qÙ÷º½êû¹\87\9fÇ?ØìwÎ>Ô¥8îûÔ\92çrYô¹ï[SÿÈáwåû.\7f!ûÇcéß\ 5\8f|yEÆ\ 6\ 4Y¸ñ¶T|ÊM;¯þó\¦bîÃáÚ÷aÿ¸Iº¦¯÷¶-+'KYȺ¾·â\e\869
++\8fHe\7f\80ãª\83\vîLóDD\9dû°¥ú\96\97>µ|Aö«Ë¢ë\8bRÙ:\1c«ö_xDñ¹\17<Ŧ¤ë«qü\9a¼!û²¥-\18\8dçÓó\88ÃXöò9ç\972\95ïëcO~óص_Ëe1ä¶ì¬öºlÞº½Ù\1f/\vWä¼zß[ç­Ë÷iSp&gÖu`ÅäöG²¯Þ\14\9ec»9ü«\7fµî\99Â\89(²M,¬|\9a»¶.ýÖT¾ÄÝÕw¾tÿ\aO.\18¢\82û¸gN׿U\a\8f{O.\v\ 5ßðZÅ>,ßÿ©sKYÁ\14l\9e\85\83qkZ\vÖ³\9d\ f¬}¥p0\16\1cÆ\869ýû.þR)\vY/'TìÒ÷\1eº1÷Ïy\93Ëö\1fÓ\95]ýÉ\9b\9fËeAf;Û2ÑÍõÛ\1eYòí\\16CîûØÜþóæ\9f\91ñ\rZ\97ûê\9auÍä\83\9fÎ|\90Ñ羿zTµ¥½Wve1\8fû¶cº¹ò£§¬{¾à"\8aÎæMtú\1cæ\91\\91êü\f\8eE{\1eùBW\96Û¹£b-\16MÞüé\\16˺ÔÇZLÇ7Àv{ýû6\1d\95Ë\82Ïe·Õ±]ôÂ\8f=\90×öì\17iÒd\94Ló©ÑõIØ\99\8d1ØH\ah ×\93ö°±È×X$   ¯¡ÇÉDúz½Â*'´Â\9a¥è\18UÊ*\8f\ 5\93\98)\13\15y¦¤ð>9þ´\8a\89\8e*j«°\87\98\89×\v\97Êä\erÒÙ·\897ʤ÷µ iUL¼µÉ\17'ÙÅüî,ú\98î\7f\9e\89\e\ 5*­U"y¯µQè2\1a ¼\13\9eUª@o¸A\ fd$ß\16½Ï$âÂ\16\88Ä[tV\92JÌ'\97¦C\83#ßHÔ\8còA\vg\ 5vK\8eÞW\83±À\v\rB_4.\b!\ 6\83''N*ru¹@\ e,ÃEo\90k\8c\1aÄåh·"Õtõ\15\9aô\14\11\ 2ÆS\98¬\ 6R\85Á\10¬Ç\9f"9ä\f]ítº\eTC\97>=\91ÊG²bYm\1cn%\9b\19\1dz:ù\9ea*\8eÜ\äÇò\18|«³îéz\83½à¦è;ÿ5¶A6ù&±¯\19âZ£CU9cc\7f\0Ôl\1elO¡OX\e¡;´\98ð\ 1Ks\88xe;eè\17\85\11â\1f\8c       ºè%½xR\11\v\80Í\ eÌ\9a^{ã¼7ô^ë\18Ð\10C\ f\1f\81\8e\19i\10È\86Æ«\933\99\ 3I\86aáÞu>ÍHï²ÀÈ\90h­r\84)úCÙ\1cº·Ñ\v¨\95CIr6\15aM0\10CǸJoh<       \1d£Ç\1e\8dóÊ\1aKl\9eÓ^$\\81Ã\9dÉ\r\råÁ\84´Cë¢1Ä5Âîé\81\8ch\12ªAÝ|{¡+D\ 2Àö\1d\1d\95FÏÄ[\86\r\9cÓÉF$ç:\96\ 1Ø\16í\ 4c[íÇ\v«\88ù+þy¢\13¨
++Z²4ªøoÑ:L?×\8dÓÿ#_<F\ 1sÇç\95¦ó_\9b 9=#\89\ 2ñ\ 6F\8bÉ\89§\b\ 4q\98\1d¨\0\86\8b\ 6\a\ e\ fùñ$q"\ì,ÆÍG\a½ÒÝ\f¥Ò_où­åÒìæL¢_\19\ 5        ú`:XÃ` \8aØ^ú¯ñ'\969röa¬dLs\a7`Ý\10\89¦\ fkG \95`\84\1df/ÔE¬\ 4\fÔÒ\92Ñ$N\ 2\178UeÀS5Ö2¨\17Û6,}B\93äPãª:¾Ù'ÏJð\ 4®3\8a¸\1fnáó¼\8d:­ËX¤°°\vÞ\87\a`¹IÏÓz\14\86c\ 6\8c\86¦¹§µ\1e#\96lÉRG\91ï\19,\181ʹ\87\11Ãv\ 2k¿\8a\v\1f\97ÙÂ>¨\12\1e\ 5sÕBa\92OÂÛ\89ä\85\1a\93\fÃÁ¬t\>9\f\9ep\vÇ\8e\13ðB\13Æ\v-­=\ 4\86\vB'¼ïÞ       P\95#0ÉÚ´¢Ø\82S à\ 5\ 3\84£­ãùø\9fv\15\8fÓüÿM\9a4iÒ¤I\93&M\9a4iÒ¤É\ f¿´ïÿ&M\9a4iÒ¤I\93&M\9a4iÒäÝ }üÿ\85_~ÿ£ÓK\8f\1c¿¿bÏï<}ýå\ 5¯>Ö\e\17éw\83e8NݱiYá4ó½ñà       ÷ILèi·.|³plÉÞø}\15?<\95\17ðö\84\8aãÌïîü~âó\13Þõ
++\8e\97\17\ f\9dz(\9d×<¿®â{§âù·\ fðùýzâ\vtVá¹[*f{á?¾7a~]\10\ 6×Wβ}ËO>\94ùü<Î\1fLíOxþ\8f\9côx:\1f\85è\8dß\91ÚOlí©¿pü[\19Ï/q>㢧óùõÆwW\9cÿÏ_wvª?\1aò\ e>Vy\ 4Ï:|`m:\1f}\98\18ßQqÙ+\1e.8~ácÆç\9e\9b°Âä<\rÚµ96\80A\15©ì@\1a\87Ñü\7fO¦û>\87c±\\971÷2\14\fü\9aªÇaüÿî\8aÙ^ö§ëö\95²\981¿\9f­\9ctÿú¥ë^Éeºà¹w\fÄ\ 6ÜU¸\ 1\95+\1c\86i\9c\17ã¸þ\99Ãçç2cr[n©u.÷«_Ìe¶ë_Ò×\9d8v\7fõÊof®>gó}÷T\1e¿m_¹ù@.ËùI'
++\8f#õù\97§®Êú´Êe\9côê\89Φ×\7fký±¹Ì\95þ½Z±ìâ÷Wv±\b*÷a{\8d\e¸iò¢\1cOá]áÀ»»>ïÚÓ¯ù·\1c\e dÆ\96çØ\91\vpÜgV>[8÷|îÃ\86:\ e+'7~¨àø]nËáTF\öåÏ\Qb\ 3bÑ˺Ú\87k÷]ö\99\8e\8f/·sç\9cnîÜþ»Ëþ=\97uq\ 3OÖx\91a\8cÿ\96Y¸úvÍ\82ÿ\7f²êìÇç_ÿtÆãë\82ã\7f­×ͳ?\ ek27 µ>\8fÃ\9eÊ}¸üë_\95¹Ì»\82\81\9fÛÙÄ[G/)÷\85\82¹?P±åÃ\18ÿ~|Ðo\9c\91¹+\95\17"×¹p\0ã?\9dS0ó)\9e\87ã·æ^\95±óÞ\96\98\89Í\15«\7fÍäe\ fd̽*ñ\r9®écc\8cß\90\9bK\99Êun«±DK_úÅ\932\1e¿ãÃ<¡®\ fÃ<\85÷W»~ô\8f\9bSñø»êº5ÌEøê,\\84\9bëºÓ0÷MÞmR±åJ\13\7fî\824£s%[\ 2y\99¨Y\118/\13¨\9c(kÂB5V'\95Ùã|t\ 6k1       ã¬\15Êa\1d\89.J§x=ÿ"\11Y®3hËÌÞ  #®IÒä¼KøÔht ¥\99#¬XzM´ºQA+íÉT«\89}5\1e+\e\9a\12\82\ f\ 4»\ 6¢½\19Öà\1cã\15øVfõ^\10\1dOäsÄ\9b%2K·\11\92\fn\8aÀýD0%±d\11N\1eÐ\17a\8ctØ7\91\14KpýpR\11÷Í@\ 4É&â¿Dd#ø2r¸Ãz]s\81ûè\99\8f\9b1W\91¸caD\80"|d÷\94d\1d¤\96Ó2z¢Ú5\99ù"É·,\1ae\88)G\ 3y%!Ö\1eoå¼Ï!>5°\99\ 4"3\16ÂÉ@82Y¯,^QÚa\11´Ä$\aIr¿È'1¦#uÉvXn\12\85   c\ 5ÚM¢8\1f
++\16v&®:\92û1h\0\ 3o4\ 3?\82\1eÉ\11ö¶ò\91\9f\19   \82Á\ füÃÉQùÔGÅM0*\834\86Ð,\11ÚýØ\ 3G\9c6¡ÙŶñ&7è¢'l^\92Â\8dDØÎe\9d 9P#Ú\1e\18z\89s\ 4}\13\12ÿ µì\19#E,ùî\9c4\1eú$®YS\aV\12È­\89äNhp"úa¨Ä?ÓJ\1d\ 2Un/\93Ý[\99\10ñ"\ 4\8bº=ª -!\87TÃ4Sä\ 5Ç\8e\ 4\88¸Ï08¡äMÇö\8f\8cq\9at\81\83yç;\8c6\94a\12ÛY ñ\19\ 1ð´)M\ 6G#\fµÅð\15MüºK¡)\81`j\ 2À¡d\8c\rL\9d4jDÞÇ\14\r\82f:nu\88óçÈà1N¸²^\bv\82vm±\9d%\9b"vE\82hvCÛõP6îå\84¤Æld$R }¤\10\1ck\8e\906\9c¬)\\86Q/!\ 5\bÑ´\18[J\>ÞÒ\98Ò\89/1Ç \ 4\8e\8d\13TAèsÍYh\15us\°\7fÄ
++á±\1e\18F\14\19\82ÅÓã4\9eN\12?-\94HÖÎ8\ 2ÌB\8b    Ì0\ 5N#\18<\fÀ\ 4<\19ÆH\12\ fByí\82\ry\19¤"<É)a-¸ÙJR¡[ÔäMð\8ckBõèH\19/Ö1ÈùÇP\ 2\19\fÕMµX×ç\ 4\94\1eËN\9a{\8exw.£Âb9\88Áwñ\1f\96ä\97°Õ\14ôÒÙ6Z 2ö_§ø\90\8e\7f\92±J\9ciT\85\ er\13ê\14\17\82®sB¨(\19\85¥1\97Ó\7fcºK\86\r      \86qÀªt\84Ás\85b0\r\9e\14\ 2M\vVe8Õ 8"ü=cÓp\89%Û¦â¸\1a®Ô\f\88à:    kÆH     2\96r\ e2Ö'Â,M\17ËÁñƤï¸\ 6Ù\1e\99bÿ\1d§ >»D¢\ 4ítÇo\ 3Çø\12çs\8c\92w\føÐié%izÖ3Æ\99\e\96\14\15Öÿþ\7fß\9f]¿oú{³Wö\9bÜû\9e}è¤ës<tÄw{ÿ{õÒ\vÞ\9fãó1i{ãÏÏÀç\9f¿7\97àØ8¹ ÅÛ\e\18lo|¬~kN\8dÛß\7fÌèïùÇê\1ewj|þ       Ç\8eþ>ß]÷ÒSãíwÏÂ\8d\7fy-\eæ\9c¿7Õ÷!öå/V½XÊJüí'f\89q?Pcs\87ãØEºï2\1c\87¾¸ú@ù\96+ß:\17ÔøâáØê×úß\17CñÓ\ajÙp\8côÎô=3:\ ezi\8dé\9d\1e³Ü¤I\93&M\9a4iÒ¤I\93wÜï\9c?hn\94é1æ\1d\97þt\9e\12þn*$       ÁøË\11©èSÖ        \86á\vþtBN\ ffáð^ø\14ÚïÈìÀ_?¤u>àûצ,\15dù°L/\152\97Ã`L;ZçLý\1eÎy\ 4ú¿ý\8eæ\8c\98\91+e\86ßäHt\81\e ;M\9dX\83æ\9aÈ\9f\11tÐü½5\90²B\93Ñ%\11?\ 4èM[Ov       ¶\93¿(ñ·\13í\84¶³Åî+§ùC\14\ 6\ 1w%M\90\14!8\93hL oÅ\9f|\13\91\ 1\7fEµä_1)}Gðc#øH\ 69/*7BÃÿ7iÒ¤I\93&M\9a4iÒ¤I\93\ 6éûÿ?þį<=½´7~Kò\15\ fãÕï\9dÅ\7f~\7fÅõ\ eç\96ÿ\9b\8a_\1dÎ-\9fó¹\8fÎ-ÿdÅ÷\ fçz¿=ùºGcÄïHíß\82ã\9c\9e\82Ù.9Ís\fÀC8VÿËßÙRV°×kævý\eæ\96ßP1\bù×W×û\86qà;fá\88ß:\v\ eüÒ\8a\ 1øð¶\9b\9e*xnYò«Wìü0¿úg\a¸Ð§ã\9d·\r\94\1f75öâª\8d\97¾\94±Â^6¬p\93&M\9a4iÒ¤I\93w\8aÔØ\8fw^\1e\83\8ai/yBFÅk¨H׳5\86\91\vÁ0
++\80\91\ 4^j\etLÁ>\fBðÆ\19f\8d\bÆj<=ÁÂ\19hb\19Æ \83´8©%ZBÿ®aÀ\aCw"±ÄÌ\1cop\8e±7L;\80S\8c\v\8a\9ah}\19\b\93ׯ\92g\9e9N\88H\17^;æ¢×\16'ÑR¯\98WÁ8ÆOEÂ\ 5\18\88\r¥\8d.q\18\1aõS\1fÆ\89\14/4\13_>º\13RËE?~Á\ 4\7f?Ρøï9:ÒE\ 6\9aL\89÷(\ÿ\19÷o\14¾/£s\91  L¢ò\18\17¦"Â\9fLØ Óg\964t½£aLàà\98\89!\ 5é0ëGäÈBo\8eÀ}(,\85EAÛøê\81\15\ 2ÃI\98s-¢¾ S®\rk\1c\ 6Å2Æ\ 5£#Ù;Ï\0-\18\87§ËßÑv\88XàÈÃd\18\88\12mP\1dÎÿ\9d\10\8fÓüÿM\9a4iÒ¤I\93&M\9a4iҤɻAúþÿ;\1e~ú·§\97\1e\93Óq½ñÌ\9f»1ñá\ 5\eÿ|:?ÌÿwK\8d\1f\8a3¾Wø\ 2\¯øèéS>ûͳß,\f¦W8Ü\88\15\ fO\\96¹®\ì\8d¯©\9cbs\16\9fü÷é¼\17\12õÌíê\9fÿÆOÿGâ\11\90ä\17Ø_9º\16\1e2ÉGn¬Ð\83ü\7f§þÓ]ßÈçMè\8d÷ÒõÌqÿ\817\17]\94x\a$ùù6Õú×\7füg2\1f\81Òª7~eâÏÚ\88ãÒgOùÏÄGàxý«3ð\vÞ7·ÓÛ OÁÄø\99é÷\96\r8®}pqæòã\8f\96cÉÏ_sÏÿáÏ®\9a,¸     _x÷ês®Û³äþ\8c\9b\102Çó\1f?§+»þ©[ç\17ÜDá\19[]9ÝN\9c·<ã\11H¼2ÖçÖcCo=qý\v¥¬ä³ßQù×\869ù2×"/xcîÚÌ\ f¨}áò[Qñ"k^þ\89¿-X\8c\82q8\90ÊFã4\ e¦>¬Äñý­\1fýNæNð\85_n\7få\9e\eæÝÛÝïû³\8f\1c\9dË\82Ëx\8b\9dÇãXûí3Î/\9c\v\ 5§ñä\9cn|n8pÌ\9dÙN]ámÛPû°ö;{7ä²\8eÇa×ÑÝ\18½qú5y\8c¢.üy\a+ÇÅùó\97¼\9cm\\17¬É\11Gwú|ã\94«_(e&\97}"Ý·n\8c\1cr\17\16\9e?Sp/\97×y0\8cý¸¥bM\96o\ûõ\\16dÆ~lª<\7fËæ­Û\9b¹üd\19¿]\95\aoÕä¥çç2[ìå\88:\8fVL\1eøBÆ\93t¼t¯W.Ða¾\89mUg«\ e\1e÷\9eÂ7Qt}âÑÝ}+&\ fþIá\9b°Y×gÎÂ\9f·¥ò\186\1cJ\93&M\9a¼ý\92\8csLN\1e´u%~4ù\93RÊm鸴\eÅ\14õÌoí\84g\98/]oØ!x\1fdô¸\86\11±dñÓ¤ ¤×\13\eµèI¾&\9ds&e\17·dÚ\12\8a±«ÎÒQ\8b÷\82°\89\f- L'\826\92ó\85\18\98N{\16ß#I\18\ 3½r\9dÿP8<ÚG\e¬\ f±»&Qö1\ 4ÙYOòE¡SzmlÙ\14YÑÈmf¥`,®PÂ8Ò8\ 6\17<[EV6\1fñ\ e¥/\19\7f+*\ 4çBÊ\91\9e¹µÐ·ì\8f\14\f\bV\11mF!\ 3¨\13£\93\96|\ eî\80.\9ctx¯*6\91¡¼è¨\fôÒy£L0FÑãIú»äïã\9e&\91}¡$¤º,Ý\86d-Ô\fñ&á`\10ôV2¯;Ó¾s\90ð\05À}iɪhlÇ£7\90\1f]\92\92W2û|JF\1fÒ\86\10§´÷Ný\80yõ4\86ÅE#Rèuç/-yÝ\99\ e\1eJÁsLæ²NcMÊN\87\86u}\13"qo\1a2­Ù\18éË\85Ñ\89Ùø\ 3¡LO®<iñd\83ÞÁn\´\96Tp\8c\94§\vYf+\83MDX1\1a\84*\18c/¬Ï\19àS6û`BìøDcäI\81A        \853Ðx#\93\7f\9b§¡\87Î~I\ 4\ 1\14fB\18\8em'ÿ(ý×ÝõØêy2\ 62\96]\9a±ÿ\8d\9dÂÿ\88ËÑ@+dǹ\1a²æ  À¥\ 1ÿ*N|.3X8ø\f\95æ\1e*Dû\18$ï18Ú±]\98Ý"ÂÒ   \r`\80>\96\ fB\19 aôNc08¹5q\ 5&ñý  N*CÀ\ 6\14@\9eÓ\88¯\8cH\eI\94\86\96X\aNÏ@
++\ 5\92æÙL"Ê\99ãuZ÷HÏ\87A\13¤^Mä\9a\9c\e\1c\ 5ÒÃ\8eÀ@ð3\97ø\ f\8d.G\82Rh\11´MÉ5\10K\1e9V%W ±Êq(É\85ÀŲr'¼M\9c«ÍÿߤI\93&M\9a4iÒ¤I\93&M\9aüðKûþoÒ¤I\93&M\9a4iÒ¤I\93&MÞ\rÒÇÿ?~ÆÓ_\9c^zäøñ3àÿO©¸ò÷~ä¤ÇÓù(ÄD\89\v\18\9dW~WÅúß°kÌ\15\1cðk\ 3ùè§ç\8e_Ssø\rãÍ\ f\ f\95£rY(üw\9bjNÀ½_YüÒT¼ù\86\81\î;\1eîðæ\19\ 3ýê1ý²éxó\8bj\1f\86ñæ9çÞhÜøýõy«&/¹«`µKν×+\97â0V{¬ÖyÕ¾ÛÎé°ÚYg禲ѹÕï®í\1cέ¾b\96Ü\80·×²\11XíÚ\96\ f¿xk/s\ 6v}XZûwÍä¢\9c\1f\9e\89NSÙ\1d\ 3e\9b3\ faT>ëú±ZgËKÞ¤I\93&M\9a4iÒ¤I\93ÿK\99Ê\1d\98âI¤U¤ï\vÞ\10@/\86ðü\8aé\11\93\b\89\15ÑHguæmt\ 1_i3Ä\1a\råÜ\9b\16£2\18[ScPÈ\94(­÷ø:²vZ{\19\8c"\r\83\1a\fs%z\e\91\88\9e\ 4\83¬Ïh[êö\fÔ\11ÁÈ\1cÏ=C|É\94ïÿ¿~åðãÓõÕ+üòü\8e\9c÷?ì]{ÐÝÅYÎQ\94óåBhÅ\8a5Z\bXB\ 2\97\16\90v\82R\ 6Ò@\ 3Ä\90\10*P\ 2¤\ 4\f\83\96\19\99B[\ 6Ú*\9d:Ãt2\ 3£´P\b-
++-PÀ\89\ 332J\87K!FÅ\10>B\9b\17\94J\10\9fgw\7f{¾ä|'ÿ8hjö¡\aúýöüöòîåìîû¾ÏûÈgOÏghãú½\rÕÏÿÐ\8b\8f|3\9f\9f¥î÷\8eJþ¼Ã~û×Wÿà#ß9teº/ðôÿ\1fð\ 5|ì§Ùß\9e®\15Ý\19uj?ù9Õÿü\8dë?õBN³Å\a{}õ\89~kêÌÛO\97ªü^½³\18\8eYpJõw\7fîÎó^Íw\13z\17\1eý©ï-̤û\87\8fÝ\90ÓbÈçì%{¸Ó8¥úu¿uÜi\9br\9a+ÜüWÍ\1a}ßñfm÷æ®z:¥Yåâ¤óùÔw\1a\8b\92ÌnÂçÛï»àù|o¡]n_öÝþ
++>§\1dÿéìëï}çG^ã5\¾á\9cìï\1eò\18\1fëí\981ú¾ci½Ó\18\8e\83\90ã.\9c\85Ï\1fÈ\v\97X\a%>ÄQµ}W;ä\99Â\13\11rÿ=\å9ì\9b\9ey\e(Ïu\7f³æé\12\aAä6\9c\9fÒèG¾ò¡\15ù\9eÄt~òÇÎ\1c}\87²µÖåÊã.yºÜ¡\88Ü\ f\99[\803hÝ-\97¼ZîIÊ]H\7fæè»\90×f\fÒn¿1§E\9fÇÄÕ5þÅ©[¾sWæÂ\10%æÄÌ:æ\1füüÉÛr\9a)ý¾½ÞÙ\9c¼õ\95ýS\1a½µRÚáuL,\1e¿mFNÃZ\97ÒB»{ihhhhhØwÎ?S\9e\ 5Ò\99ÈX/cô\9dϽ\8däD\ f¡ø!ïîÃ\Ï?Z\19i5é\ e\82Ãÿ\fùõ\9dT\82L\0\ 4&[Iª\a\15\95
++Êá?t\18\82\fVhêÂÈç\10Y\ 1-Y.¶Ñ\85Õ@àà#°³\94&ñF\18欱Á\11\91tëÊ\87D\9f\10ð-z\99KïL©?)\12\18B\fÙ\ 5K?}\1f|Ĺ\8f\fN\8f\9d¥ k¸d¤{\1c\95"]Ï\19¤]\19ÃPìôw'U¿%é\ 1
++1\82T\ e\9eqᜥ
++\19\ 5Rý[:¨gÎzG_s\8f\16
++\9cât\f\ 3\8d'i\0ÊQ(ßû\11¼\ 5\f\ 3/\14é\15\94\rÞ\97>°2Å\r \19\82Åi\94þôé¹£\v¹\15\fP\ fÑ1Ä\81H\15²\1aÍ&³?k\13IÁÁz»DlOOy:Ö'J\ eÈ\8b§ÛhIã@©;ä\8d\97q\9e\0\9cN\ 3ÃÜÓW\1cÏLñÆG\aá|éPN\fdɰtu\17R\8aÁ8êb\1e <Æ\1cðäDp¥OÈ0AïøØqr`KM©0î@\90näù\15Õ39\8dq\b t9\18Ïh=YD0FÐ\878\e\916\0#J³º\96\99£}\86ã\8f\84\1cØý{:ö£µ\90\ 4ÇM°\1aUBeQcäDƲI1\bºr\12QE\8d51|îö\0C\1d8\1f\82ß\8b8S0\8d\12\17AL-Æ\10È\1c\19Z7ûÿ\86\86\86\86\86\86\86\86\86\86\86\86\86\86}\ 1\ 3ýÿGÍ5Oí\9eÚïÝSyû×^±ðõ¬O׺ßûój{¾åì\ fLd}¾7ýÞ\8eª\8bÜ\95÷~ç\1e\a×wÖ¾°vvÖi»\98õ\977×ò×½ÿ¼¬\9b\8e²Øâ?¾\anôÍõ½a\9d\89N­»=°¶ë¡ßüÃñ¬/Ízò\86\86\86\86\86\86\86\86\86\86\86\86\86\9fM\8c°3°\8c°@~~ÍØ\aF\89ÿ\ 3;\12+}¶?\104{q8\7f
++O\ 3\ 5Ul(\90       #9 (¥iÀÑÙRì\1e{`\94ÝI\8d+Ñôÿ\r\r\r\r\r\r\r\r\r\r\r\r\r\rû\ 2\ 6úÿW¾tѲÝS÷ï]\96ü\95©·¿þ@óñì#l¦õ{\eÓ½Á7ð\99ûï\vNÊv\ 1Òô{sjlñ\85\13g\9e\ 5d¿èÿ\87í\b6Ôøíó\1e]pVÖýKß/~çüþ·\17¾]üÀ\91ÿúêW~Ê  ¿úhÖÏ+Õï=^}Ã\8f\99\93éyd>ËRþ\8cÉ~Ãø\827øÜDò\17lLí:\1d\9fCß^¼\88Ï­Tø¾\18ëò_óè/ÿ\1d\9f;©c¿wpò¿þ2>\vvüN\8aµî\8cB>kƺr\8f\9eø£çÒs¯D¿·5=§oõÂ\1dçmÊÏ5êù|­çü\89sÒ÷\83gþOT\1e\84Ï}fþ\ e>\8fÒ\98±Þe)\1fò\12¬ûàÚÌu eáÿÛYë:Ìg°¨ÊuõsWÆ\9cæ\8a\8fýöÊ\ 5p\9a\³5§åXªc½\90ò\9c\9a\97à\9a$³ß¢<¿¹*Ûb\18\19\8b¯|ªÿÔ\\8bç¦<§¶ïX\93ì-¾\80Ï\85?úÜ73g\81\ 4ëû]ûÄ­Ë¿\9fÓ8ú\92ßþô.M\1f]Ò¼P¹.ýT\97©ù\fö\9bÞÕó\9eùË_-ö$\85ûð\9aY]ß\<>=ó>F§²]È\1dIf'às³9gSIó¹}\87LïÚ·rËÇ¿\94íP¤È>ý\ 3¾\86»§]ødæoì¸\163_ÃGñYúã\15\7f\99mTDáʼ-µýZ\8eÑÛ/|¾¤\15\99\9d4ÖÍ\8d\96\83öÀYp]åàXµý½?_x\1fu®gæV\98\9a\13ò¨éÝ\98øÉÝ\17å<\9d\1fnNy^Ì<·Ê;2\9f\ 1Z\9fËKõ\Á~xiѵ9Í\16N\867ë¼Y<¾hn\99Ç!\977g$\9fACCþ\83äC©|òWÔÖ   å\82v*Hº\94:.²ø\87:\18ã¢wZj#C`än'\fþ`TëÀ\90îô8µA!\aïU\14\8c\8c,\1d½>ñ\82ò\8cb.\8c3Æ3ö2Ãd[¼\10\18u\9dÎÄ\82^É>\ 6ç\8a\8f¯\ fn
++_ÏQº\96Éz¤ô¾\146ÇܦBÉ MÙo\96¾ËF\19Cïaüp\ 6Æ\80gpk¶Û»(b\f\81\ 1Ú±\9c\e´%Fì\93,²Ph'\96\9e:l\90ø\88¡¿½ÁV 2\8eµIe2Þ:c¬³v\83\98à\9d\7f«Ò\8clï,²`lyå\95±\ 3\9fW\ 6Ê\86<\92\7f\17L°:ú\14\93Ü\99Ô7\91ÁÔ\1d#ÖË\1aS\1d¯I\ 6S7\8e\91Â\85\92Ø\17I\86̦ã©Ñ\82~ºÆâ7Ô\vOïpå\DºÐ\82~ÈA\1aÊM\91<
++\12@'&\12 Ä\83e£H\1e¾ÁË¢÷â\96A`\18`£Bá°.\91\81®­BÇYzD\9bäÎ\f\9130:úZ       \83ý!}Û%ãÏ{ªñ\ 4\1aå\90.Ð*\eSDp\f lp\ 2Ýfebæ\921\18¯½\86Ø\ 5\9bâÐ\97x\12ù5\85^S\90\9bé\83Ì\r\1fݦ\95\8b\f)î2g\18:\ 6\83\81:¦ßó$G\8d\820V©4LR\b¨_p&¹%ÓIÛà)D&Sôn\8ejH\8f\83\7f·b×c\98¢Þ\9e#HHJ\83Ó\89¼Í\8eîÈ\9e\18oVÑí8¹-s\8b¥0¥ð\9eåïuÄì@ÿ9c© DÍÐä\88=³¤\1e3@´\90\fdKÑb"Yæ¤0\8e4'5Æ8dÀ     \99ÜÛ¥Êuòh%\97\ 3ÍxìÈ)hjPé2\8dÉ\82I,0qH, ={\93QÑ©\83E\19\9cDÔ«b¡@\v\19»\1eË\87ưV^ \r\86m\14ôÆÆPãôÁ¶\ f],Ðf짽失"¤¡À¬°ðD¼HÕ,G(\92±I\16Êk\17\14¸è0 ¼B\89\18=\ 2k\ 3éÎ,ròè3¼\8f\89+t\98Äñ¦8kÑ\91ìÿHòïį\80\1a(ª¨5I\ 1Ð\83l¿v(\vÝLÿpö\85ÆÜ×.¹}CúÈ\1as\ 6ãAC²ìZÏ>3\f\14¯é\ 4\8f\84T=®\a\1a\13§øÜï¥|\ 2*¢m\G%ýßÑã\9azt\89  \92e7\99c/ëôQ\16ªh'ñð\8dâÎ\e¥G\9fÚ_^r]į\ 4F\97&k\ 3ÆUH\9c\81\98ÏøNZ­ð\15\9f&&ZÆ   î(">Ï¿\ 5\9cu\98\12\¿°D\88À\15\ao\ 6¬§\18\92è!\8f)Æñ-9\8c\fy-\ 4¾\85ÿ\8f\ 5Ê[®\a\82¦ê\92?\ 1\82B°\\9eÙÉÌ\ 1?\122-\8dX\v#\87LL£\87\8b¯`Û!\ 1IB\8dÂí\11\9aþ¿¡¡¡¡¡¡¡¡¡¡¡¡¡a\1f@;ÿ74444444444444´ó\7fCCCCCCCCCCCCCCC;ÿ744444444444444ü,`Àÿ·Pn9n÷Ôý{\e\12ïÙ0ÿßæô\9cä_\87\9d~ÄO\12\1fZ\88®ß;)='ÿØ\9f\9eüþGË÷ÉÃ\97øÅ\86yøvV^µy\7fûk\8f'><\19ñý¥éùr|æ¿õõS\13\1f\9e²ºß[R9ÚæO\88\95é¹\13~¬·1}\7fj\9e¼\1dµNÃ<yÛkÚéÇ-{:§\99\989ÑV'\1e²©yò\8e­ñ\fÏÛ|æú\1cÏPÈÌ_¶ºÖqíøÚïæ4\133ïÙ\86ô\1e\9eýë¥ÿ¶+O^¨1\vÿùÞ\8bry.ØÌ?·fVWÞù\9bî\9f\99\82ËiK*'âýw­x2÷\85t¹}W§÷ÈÝö\83ï®ù§ÄÁ&¬\15)í¶\94ögø\9c±}Aæg\13Qg\8e¹/Îêêbö[ñBæ_4*¿·¤Öó\8fï>'§¹\18r\e\96ÌìÚ¾|üÄ»2ç\9b\14\99\97oiå\9f;uËwR\9a\16¢ÔóØ\9a¶ø¥_º%\8f\e¡E\9b \r\r\r\r\r\r\r\r{%\12?§³¦ã\8c\14d|sÑ)¥­pJ\18A\8a?<\10\91¬\8aø(\92îYcøDKÒ\ 3*\11\94%[¡×ÑIrÈ\91\91óÒz§\8d\ f\13GrjZ\17\8cD\92\9fV¸ä¬Ó\93x/I ¨|t8r\18G\96N\14äQ\8d(ð§ç9\80ÄÑ\8a|o\ 19'vE\1d´\95RÅÈü\ 4¹íPE|×h;à\9b³^\90\ 5\14¯\bìÄ\a|\9bÂ\91í0Ú`}(\sF(%-CÆ\99$?ò*2,\9c\f\86L¤N\96\98oJ(I^7J\86|\9aÎ8\ 6B\87ì\84CYN¸LU\8aº¡udIu\9a\f\8d2Fí½²h\eDî´\17\89·ÎáÍDo\19,\19î´\8b¤95<S\18ìó\ 3\84`H+\88¦G\15b$A$\ 4l$\ 3Õ¡ótîgt\10dB\9eÇPê\89\83\87³ï*ÿ'ÄBÖ>i \f#\90\ 5úʹÜÿ\18*ø"Æ\15Z\18ù.Éñdðä`ÕÈȲPÅx|ÁQ¸\89\v\92,\84\9aãÓÊ\18dÐäÁ4,\9d­\96\948czÔ\10EaL\94Ø|\18L\18Ëä}e\8e¶ð\11Bø¨\86·\ 1õÁxÁ`ÏÏ÷JîÉÉçÿeÛç|y÷yÝï½6»;Ï-\9c\91|\ 6V¶ß»µ\9eG\ f\7fä³§çs,ÏóKFðöç38Ï¡W/ú\8d¿/\9cÞ¢ßÛoVwnÿÇÅ\vþ+=ÇBÒÝ/°Ü£&nº ñó\a«ú½\83S}\86\1f«¼ú»òð?;sªû\82~9ßò¼9\7fç¶KÒóèÃXï²z\96\9eóõUù,-DáH_T9Ò?9¾åk9MÙ|¶½¯ò®¯¸·Ü#\b\1fóÙvÃìÑw\f\8fUù^:>¦\vO¿ÊgéÇg\8f¾c\10\atõÿ½\97/?,óô\8b\1eÄBX;þ\85\92¦\.oÛ¤´Wgä4,\ 1ùÞ¢¶ý{·®z"÷©*\üWÔø\ 4§\7fõ¢\17JZ¹Óxb\ fÜÿ×\1d0úNcGåy_ýÃ\13\7f.ßiX\91Ó\9eOýv\10>\97¼xÄñ9-\96~ØPË[ú\8bK^*iE\9e\ fÌ\1a}\17²¾öß\ 5Û\ e¸6§¹ÂU¿½Êåâñ­÷æ4LâÜ·õ®ë\13W\9f\91ùö\85/ý°9\95Ç8\12g¼¬o+Üÿ%FÁ´Ù]=WØK_ÉÜÿ¶pøßQË[1¾ñþÌá\8fU+·}vWÞ\93\9fÍ1
++\94ñ¥\8fî\98=xïâ#2O¿\96Yf\eë\zgæ\99ã\85ÿðô\1f\92ÒÖò~ì\96Kr\9e$\12Íc°¶ïòûÏ|±»ÏÉåm¬å-\1e\7fìörgSò¼oÖ íðr\9f\83Ñ\94Ò\1e\9eôÞ¥7æ4¬ï)íµ:\96þdÿSÆóZ\80\8a¦´9\93ò¼mFN\vÞ´-VCCCCCC»o G»&ǺM{»tÖ\97\fÅ\9e÷\96å¼\9d\rã\r\ fñ_\1cà\18\87\ 3\ae\9c \ 2ÞÆ\19\89\81¬ê8X*\ 66JLù5\8fÿíØïdõ\ f*\85dÀ)Y\973¥ÅÑ\9eAOpú\15\83öugmlºxÎu\82\81.\18\eÂçx  \ egÈÀ°\v\8eq.\18?B\e§É-oT@»Hh\8f]5òö\fÝ\81s#C«\18^R\18\1cB±W\8dØè²\8e\8cC J\\88\143CF1(\açxϰOb\ f<ý8Öh\97xô±ÙË1+P3\1dc\97>ê<\9d¢V\fî\96 rÊ\1eÝ\82\ 63V\82
++vr\7f\8fâú¯ñLR\18\rÖ¢\94Ë#9¶\98\12\9dÆ\ 3sÔ9öÉÞ\18ÿbò\1d\16\8fýzR»FÝǤ.äØs\93ÇMÀ@\bÑ4ûÿ\86\86\86\86\86\86\86\86\86\86\86\86\86\86}\ 1\ 3ý¿?øå\9bvOÝ¿èÕ© ¼aÞG.¢>Î\a5­ß;¿Æ _{ÅÂ׳¾[ë~ï\90\1a×{W{\81ÇRìxê²ç=ºà¬\1c\ 3^ú~ïúIß?èÜ\1cW="\1f\93ʽ\11\9fÇ\9e\99\93ü\v\18Ųß;¶Æ§ßÕ\8eà\8e\94ÿ°\1dA?é\13\7f\17\9fù\8fßö\89ôÜX<߯ê¥_\9e\98;\91ü\11´§?B­ÏQ\13\957V >"Ý\93Ü\80Ï)\9b\ eùÏd_à\14ê¿>éN©\87\9dC\93}\ 1\8d-ú½\aFø5<<«\93çѯ¿÷­ô\KÕï]\95Ê¥Þú\17^<8µ+D\81znOíÚÀwÎxÏ?$;\ 5\ed¿Øî\ fûA\QõßÃö\v;S\9b/ÃçÌÃV>\93ûFÈ¢w= \93ß°ÿÄê\19]\9eÃþ\13wT;\90ÕÏ]\19\8bý\82Èi7WÛ\8b\86§Ryûãó\17\1fZ5^Ò|Ö\ f?ßïÊ[©Ïþ×\9cæ\8b~ÿ\9e\99Ý{\9f¹ge~\8f\1679ÏjÓ1l\13ñfÊ\93_øý9k³Í\80\96%Þü¼\19]_]ñáb3 \8dȾ\ e\87\8fur9Û\9fûrN³EfO¥1AÝÿ¥?T"§uí{xzW\97Õ¯¼ïÁb\13Q|+²O\ 6ÿuß·/Ý\96Óò½îXïñÚ\7fß\9a»*Û\8aXår\eN©u¹òøó\7f\94Ó\ñ»¸¦\8e\1fqëòïg;\v\10Îß\83ïH¿æ¹ì®\8bs\9e!ÛË\8dõ¶\8duï}ú\89³¾\91ÓTñ\7f\997½ë\87\9f~pyî\87¨Mnßöªß\1f\97X\93ì\ 2\9c¤òè#tü\91gf{  ©\8bÏÉu3º±4l÷\90}\88f¦´í_+¶\r6\8fÁÍ3ºº\fÛ6\6£[\ 3ÞøÊÊ\17\8b¯\8a\14Õ>cùøâl\9f\11L\19g\eg\fÒn¿1§E\9fevÐôNfËþei\97\16sÿmKý@{\90÷\1c²æù\94\16U\99\9b\9b«Ì\9eý\95åÛs\9a¶Å\8e¤ÖeØÎb[\1d×\ f~þäm9Í\94ñòÅj\ fòÕ\87\16½\Ò|~oZ­çoÿ`Ó1y\1d\15Ef7W\99\rÛg\_Ó~}ìÔ­9ÍkÛ~H\eöB$ý\91·ÉV\97Ö½Ø[øN/B#O\9aÅêiE\7fè±³14¿t\ 63OØ\81ÎEz,ù2\18\86Õæ\12a]Ö\85\ré\11±\17\91Ô\ eI\13£Ry±ÜS\9ciïT`þ\fj^u8´é44¼E\1d\f~P"~\18#u\98ɬÓZ©£§\ 1\92(  ¿\ 1X\ eP1´Æó÷'Ð\88\96j>ÁåE*[ô@Ò;Ú\932Îø$\1d¢¥©*\8dlÙÈ\12\8f<úh\95\bØøPKWäãñ\8bÈ|\8cp\92\ 6ÐF!\7f\9a\9fÒ\80Ù\18|\95vÝTÿQ-                Ò\f62t½Â\ 3êÈ\84\87\18\821*²\89\96\9aå\ 6gU\8c\ e)!åe©Ý\13X7u\92&\1aÁ ÕØ\ eÑBÛI\ 6:G\9b\a¦f\96Áë\ 5\83bg[kk\1c\83i³¥\9eJÚ¤Ðd\94n\1d(Xä)±\8bB\e%5u¨\10Cgk\94M\vÝ\10´ó\8c/\8fî\8e4\96\96%v7íÀ©´Ó&:\b\9aÚY¬\8a\96zA\1a¼£\85\8e6\91\18\ 4èV,\8a\90\ fí\8eÙu\93lÎU¤U·r\18nh(\9ao\ 6\19\ 3\9cu.crw]å\9eôÔ*Ø(\92\12<@VÓ¦Ô\89K\9aE£S RO\1d°³\92VÂT\ 6S9\19°Érɼ\9c\9a`H\ fCÞRC\9c#\9bc»DËhÏPò\ eC\8câ\r´Å\96Ø\80I
++\ 6\e8KKj\8dB\fÆ\8fTN$3o\89ML 18äJ{y­1\e4MÃ\ 3¦SÀÈCN\11µ\8dT #\7fL\82\1aÏÝàw\17\99rdóG6Íå\98l°ÿÇöû>E¥w\8ayY\ e\0\8fÉ/\93
++\±æX\f°\9b°\90BàSGEºµ´"Gó0\99=^Ã\10Äw5ÕÿÂalbpB<&íyFØýwzpz¹bØ\89N\ f\8e\89\83ê¡\ e2R8\18-\ 3ÿ\ 1ZóKÇÙ\83\rqÉÛcZáè\95í\0h\ f>BG¯\92\91=þÄ\8aÀÕ\81æ­\93\96\13Ïc\80A´Q\95u`¤_\85ð\90¹g\868Ô@F\10rPtú\b´c\10\ 1Û\ 5Le\83ïq AüX 0P8SióÏ.\86\83X1¹1^¹\8a\86@ëvg\9cç\0÷ì)t\19\9ec\19ÂàB\9fÒZ r\80\934\91Ç"Ôµ\81]\81¢¬Oë\97H:\7f\9aKcø«êC±\9bÍ\88Â\98à¶ÇpâÐ)ÁÑj\ 3ÿÆZ\14(c\8c\ fgXd \99\80\8d´îà6\10âH\ 6ûh¿ÆÖÝ$±bj¢1iQ¡»\v\eűÀþEÏ\87½Ñ\87£éÿ\e\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1aþÿ£\9dÿ\e\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1aö\ 5\fìÿwôþjîî©ýÞ­ÕN~W;ÿõÕ&õ\98\89ï\9dXlKcÇ\178Ìÿ\9fùÀh·?ý´\ f<\92\9e{!û½'*OØ®öö\87×ç»òùeþ3ÚU/ÜqÞ¦ü\«~o^åZ\9b{âAï${x!ÅXïÍ\9aÏ0\17Þ\ 3\ 3®¿;\97e»o#\8b=n¶ÿ=\a\9fÿ¸çÂ\1fg{j_øÙ6W^¾O=µîCÙöÙ\14[ò¥)mj\eæ\9b«ÌV\8d\9f?7óÁ©\98ß;¡¶ë\8c-\97\7f¸pÅ\15ûûgk\eV\8e\9ftg±o.ö¸;kÚ0ßþS\938Øvµ\enhhhhhhhhhhhØ\9b0\99×n¤ÿ\9466ûx\91¾\9fþ$Îz-b\10\1ai\82ì\83ô\1cH\9cøV
++r\v
++%\8c\vtoqÁK+,­õ\99µ¡\r>þV\f\0\80g\81Ä\87\ 3\16\91H\8f\8fD®Ç?\ö1°J$o
++#\83ÓbÚ»éÃ%é¯\84:;²M\16>F\8dZE:\13Ð\vj7>Àä\ 3à\9d¡¿Ð\7f³wõ1{Võ¹ïDyZßB§]p\13\11\90H)\ 5Î÷\a"cZ7$Èg\voKKK¨
++ý\0td1N³f#\8a\91\0\8b¸°Í\19\ 4Eh\17\12\98\186Y¨[\11Pð£\92R_\8aÔªT3\885ìw\9dß¹Ïó¼ïóôÝ\1f\13Dø]ñF¸Ïs\9fû|ÝwÏÝßõ»®Ðåt\føtLùþÿÜÃ\9fxqøûÿô¹£¿ÿOo\1epSuþ¯j߸\v÷^X¾ÛS´¹76^~\8f\a÷\1cù\ 2ç·\aú>ÿX9\7f5¾m¿rö·«¦~Õ    wí\9a'î¸ø§\9cëm«\ eú¼\19¾ÏO)mFnò\95\9b.\9c¬Zî©æ\81\1f´ÿo÷Sçö¿Ï\17qÎ/-;þv_Ó¾ÏWí~Ó몶zý»\ 2Ö¸\1f­­~eËë\1dÎ?æ¼ìÛè8kû}\9bùÛ=V½ý+\ 6ò\8f§ç\18\1fÕôá§çç
++\ 4\ 2\81\10\b\ 4\82\97ô\e\95¶ÞîÿúN¥\7f\1d\a3\0ú\t\10¡p1Y[\f\12K¾8
++\1d\9dÓP\8c×t\16IÝðqËZå\80(g4Á&(YPmô¹é\92Jø8\f\1ej\19\ 1â      Êë\ 4\93\ 3\17¯=ã!þ¯\9cs\99îH?\80×bIa§Ï\17CU\ 5\b\eÐ\87oì4"^\96\11^\r/·Ï¨oc\b\8dX\95\8a\97 4\a`\1d0Ò3\80\11\86ç\81ò\91¾o\13ëRìÏûÀ@*\ 3ê\0ð+Ð<\ eÅg°H2\14e\vZ9ÔT8\13Æ\0±,\8f¿h\80\12
++\8d\83ÎQCÞ\ 2ò\ 6°\v É\82K\84£VÆ"fRfÜg\ 3!\8e\fÉ\96dUð\10\16\b\98\95"N\90àKè \9dB?H)'Gw\16þ¿@ \10\b\ 4\ 2\81\10\b\ 4¯~È÷¿@ \10\b\ 4\ 2\81\10\b\ 4¯\ 5ôùÿo¸ïø\ 3§\97ö\ 6\8fß{Þû*ÿ_÷ª'Üp^ÀDó\87:bí1Ï3/_Óyö\82\ 3ïþøÿ<øûÌ\9fW©7ö³æ\vxì¿\7fãLÎQ\ f¹W}¦\86õ\ 2f5\8eþ     {ç]TÎgø\bÎk^W\97\9c¿°´Ç{Kç\17\94óþ}O6oº\85{¯/>kÉy:¿hdþÂì±M\8dÇÿËk>ÄþxÊW¿³Ç\9b\8a»'سMÅ̹û'5­\80\8b¿\7fÞM\9càª\17Úü\96S0ìW7¿ù\a\ e{ÒÝ3Þµå\85¹ëvpYtìËödkË}·¬ÚÆ\9a\ 6¦æ\14¨Ö\87sn¼ô©Z\96¹lS\9b·aOº\8d­ÎaOº+K\1f>KÇ\87\9fýÌWy¾U½ßîæ\93¶arëÝ]\8e\ 6×yCù{§Ít¬~ä>Ï\9et43¥lA\e³aß¹³J\19\ 6à\83»\ eú4\97\ 5Ãcý@[K\13\ f_p,ç¤\10JÙ)Íßð\85ÃÏ\7fºê2Ô¶l)egÒ±÷¶Õ»8ïC;ÖWx°­\93á\9c\90Mãݸ\píºïpYÒÜ÷\89Rç{èXò\93\15ÿRÊ\9cªm\19ô²Ûõ%.ë¼Þî\99Û/{\80ïç\Ík9µÍÑ#\9fZÎy&.Ö|\98]ãÝó¸òþ\15ì¹çº¶\1c0Þ=K\7f\9aoUï<Ëù)W\8cwãòâøy\935¯¥öýÞÒ\96Ñy-¬ÿ\81:\9fÛ|éc\\16ëuKZ[>¹ù§º\9c\17\9e¿«\9b_æ¹Ï|¤Ç¾\9e©Ö¹eÀWoº\96Å®\81²3oæ2£¸\7fëÇûeÓ½ú¾ÐÖÄòÇ\ eùZ-«Þy[Û;iØ«oEË=Zrä9OU?¾ê\8b¸³ÝoØ\8f\80æÆe×qY®ùL\a4ïÏÓvî9°z\97ÂÆJ \10\b\ 4³ªW\99       Jç\102H°ÙÄì2R\1cé?U\8aF\17ËX\r\9atTÑÒ\v=\84¨s2\85ÜL\7f\fe0¤é]N;OÚ\8bdãcP´C\82'\V\ 6N\88F'¸\88åLõ%8õ¥à\1dÜݼ¢ý\v\12z\91O\ei\v¤Cpt\19Là"ý\8b±\11ö\86\89ö*¸§O¦ó\16Ë*jp\8f;\1euTÞÀõr\86÷Ç\rï<ÛFåòjï\92/lî\10U\97ó<Í/\8e9è0yV°\99\8bÅC¹xäÙP¼àt°a0'8\83¸í´\ 3y¸ó\ 5\95+^sÑý\ 6¼\ eáÈ\f?IúYöÙEgúm\85\a#M^PÞ:LBçO§Áf\87q\9a£I°\96ùÔ\81þxL9:\1a\88ÎK\8f¶<N\17\ f:Ú÷ÑÎÖÚ~Ý£|+\e¿Ü\83\eOóiÁ¨Ï1ú\81ëhÕÀA\rÞqؾjøÿÁ\7f\1e1§Y¯DßËß\ 6g\9e½ÿàZ
++'¾ºv\8a5"\92      t\82\81`IÞ.ë\1aÆ\8b´w\8d\1aþ\8b4Àų\ e9òpâÄ#X\%\r\9e)\f\16ý\84\ 6\83nUÎ÷}-i\b©½ÉÛ\1cK®?u\96&1¥î9£a§      £þY´Û;\1amZ´\18cz°\r\92\1d\12õ\1a®\9e\99j
++X\93ÖG\1a\8c\0ßDxhÂpÒÒ\eÂ÷û8Â?q\84\7f*=\15Ôh§\8a$@÷\1e ·LJ\9cc\8f\84\ e\1a\ 3\15± éþ&ºê%Jõ[z)ÑÈ;G+\99ºFu\9bD}Ôð\0µô0Ñ\12µè<\r\ e\96\92¢_i,JxC¦ò\14Òÿ\1c^@H4ðÈ\1f¡'1£\ 6\8f\92cA½¤¥J\1d¡\91À\82¥Å\9dè\8dJ\e`\8d¥%ñ\7f\81\10\b\ 4\ 2\81\10\b^\13èÇÿ_\9c÷ðIÓK{c\8f\97¿\1fXFÇ\91[o]ÆqZÄÉw¶8åñ{\ f[ÃqØ\9c{cûÊyÄ\ 57.>ì¡\1aãR½±\ 5\auõ,Üzë¹å¼ó¾ÓùG\fõ«[ÿðëEÿßxÛ\eÛÚê\9fê\v0¿´ç
++:®ûÉ\9b\1f\93K½±Gçt¿\9fê\17\9c®þ×_tX©?fEç\1f\98ÛÎÿè-\ f±\1e¡¢öÜÐbº\1fþÀ[\1fb\1f\ 1ð\1d\98¿°\1cíÿÕm\1f(çK;O/ñEÄ3\17îÛµ®\9cÏ1Í\1e»¡ô\17\17]4¹ã\8bU×Ðsl\91¹
++£¹\ 4w\95ú@Äø·»\97³v¡
++\81㣿hm\1eæ\19\1c^ÊFó\fvµ±¼|rÃÍ\fj,úöÆ\9b\18ÖX¼f¼\7fÝå_ã2Wù\ 2¬±x6\1dk\1eÛwrå'T\ eB?vzA\ý\f\97yͱá«ZÜøWï>û»\\16\1c·å¦ÆO\18æ \8c·øýÇO^ó,s\10B\8d)ÏÈAhZ\90\8f\9c8Áã\19\9dçñt-\1e\8fß÷{um×Xô\83e\1e\13\9eo1ó\89;×r[\92ª±á-sºy\18æ.\9cÔbÃk'wÞ]u)ý ÿ\ 3ævå;\97ÿ\90u)\8dæ¶ÜÛÖÄ\vï¬k"Ûº^V\97²Sèø\82»\90Ç3\87È÷;µéD\9e»q)Çö!-RʶµçôÜ{6<ÌÜ\ 5¯y}>Ðbí«&O?¹ó¢¨¼\8dr\1d|6VøËöÔ²ÌmùÅì®\9dÿxÿ\9aÊAð\91ça_)\eÍO8¼\8dË\8aÉ\83ÞÁ\1c\ 4c¸Î£\ eê\97­=ºr\17ê¸|b\ 6^æ\1949¯oëzØOãɹý²cø~ÑZ\1eÏ\9bætÏú0wá¦\19x\ 6wÍéÖÙÄ\8fÿì0æ\12¨:\9e\13\ 3þ\1d·sß³\89\æÞØ­³a\ e¢6·\8f\1f²|w-«\1c\92\1aüÓï|÷\ 4~\a«\12\87\12\b\ 4¯m ¾\85\f1QÚÊùHï6g\10õ¤×m@À\©h\8cJ: b­RÔQ¹à\95s\16jb\ eñÅ\1cMN\86~æJÌ\12Òc \8bÒm\10ÑwÞè\18cÙÐè\14B\11!+1=\84%éÿ=BÆ
++ÑÑèukËp\\98¶(ª\84\13\97+q8\1f\e\a\14\97½U\8e\1a¯lÌ\96Zkhk\91\91\96:\9e\8d\838\16ín\82uÑ;\85ð¸
++Þ$üÒ\1aêº7\81÷Z3Äõ Ê\85îÓÕ\88\98\97s\91\ 6\8aÎE\vmoü9c\11]\85\94\97£{\ 6Ew\81r\175\9e\ 67£U\88Ï"\8ej}Ø\ f\a\80*w\95; Z\7f\7f\a9\13Óy\a-þJ§S\89¯R¡       E&\8f6f\86\88Óå\0Á<ð\13°Ô¨SÎá\fºBc©\92ñÁQK,uÆÓ\18C8- @M}¢éM5n\1d#\r\14(\v\ 1ìKåk\9cwZ|yT\8c\97úb]HÙ\15>\ 6ÆØ\80\8c`@\18\0\15\ 3qh\8duch\9a©\89åé\88\99&QÃ\95Ìz¯\10&64æ\9azE¿Ç\7fAH¯{>\11ʦ\85CË+Ó6\89v{~&Ý9DäSÇ\ 514P6\18\1a\91h§éÁS\13ü 7\84\1eIE\v\8eÚçK_hÁ\14æAÔ.£OeãÚ¸)xÌ!N_\9e\ f\9awW\1fsLs!\ 1$\9c\rXiÞ;¬u\ 3¢@ÄcNÕaéÑ+\82Ö;=s\1e˧q:è¥\0Ê\ 2­È\94by/\95>2\97d\1aßå·Ây\0\a£\8c?d\0i%\r¼gh\85«\´\ 3-8\f4\16\83e\1e¯Z§\r=\81     $\ e\7f\81\10\b\ 4\ 2\81\10\b\ 4/7úñÿ·½wÑ\13ÓK\ f\1c{²å[_»àO.-ñódfõj¼yX\17\80\86ù\ 2ÛZ¼ê\1dç\1cý\å\v\84ÞØî\96ë=U\17àÖæÓ7U\17`}\8bùMÕ\ 5Ø2À\17øü\a\7fò¦7¶¸Å2\8fÛû\17\19¼Ñ]ü\7fX\17à¤\96ë>\95/pÏ~ø\ 2\98õgþjá/Jü_;׫¹ÚÃ|\81[ÊùM\18Ó¥¿ÿ_å¼OzöX*ãðy:ÎÖëw\96ñÁßÂÏB<ï\96\81øýû¯å8|\97O}kã\12|äÐË\9fæxº®~\86\10k_RÊæÓ±îGGsü>æêgÈqÕÏѱt÷±\9fæ¸q¶\1c\8fU-N½oÎ\86\1frü7×¼ï£Z<}bçqo¯sYã±\97\94û!6üOé\92\9agî#Ç\9bS\9b£\95\93ë¿ÌñX\959\ 6:¯Å©Ïÿ\9bË~ÀeIsß\97´8üÇ\8f^ÉuF¥¸lcã\v|ïÎ\89§k.y\8dûß[ÊÖÒ±j§¾½æ\92W\r\ 1ÕÆz8\97|Aëû\137}ü\87¼&­ç1s\8d\7f!1W\81\10\b^\9dèbî\95·0ë¥\8eU»¤\ 3íÏ躨­3Ákãi×eR\8a\81\821GÚÕZ\85´t$Yëä¼q1s\865m\a\13b\9eà=\ 4e\15\88\12)9j\8cW\ 6Q\\e"6j\96v\87\88f&ª=(H\ 4xj\ 6ª\ 3UÁkj\96µ OÀ\e.%p <jÊ\1eÖs)#\8dZ©¢9\90\ 2í3\91Én\9cE@5Ù\91\ 6Vßt¥.\8dW&¸\905lË2üãhäB\fÊ\19h&\94\9d¤IÁf\9d\1dÝÏFj³ó\11éßô\ 5PrË\ 3]\19\1dx
++°Î£ÞÀuÏÑ Rk\ñ{Ë.#6NuCéÇi\10\10¨\ 6\ 4|!ë\846z\13\82\ eÙÛ\9c\9a.\ 3bâÆ)Õù«\8f⩼\94|\13^k\1e\f\12ç«ÞÁ`Ìÿ\95¦M@WÁë>gðGB\b\88ãÓ®Ý\8d\8aõ£\1c\\81\8c\ 1\8dÅݰö\8fÚH+Âwº\17#t+hEº\12ÙN\br\83o\0®\8d\ 5³È)\a6\ eìñ@б¡Xß%ð\91\14}0\9a\95Ú\e\112\87\r`.J\0Ôó\0¹-ZèXq!ÒS\r\82gáU8\97˳Hc\855\90©o D\råiEá\19\8a\bÃS\v!ÄAÏ!-\ 1Dýé\8d\9c*O\ 2xJ4»ô\85KK\98\86ßÂ\11Reº0ÑèÑÓ\8a\85«@´H>1\85\ 4\8dÁÃ\ 5*\b]L\ f]ÌÎSM\114$ê\10UoSÇ\97ò4iôdëª\7f\ 1
++\ 6ØFq\94\9e\86Äÿ\ 5\ 2\81\10\b\ 4\ 2\81@ xõC¾ÿ\ 5\ 2\81\10\b\ 4\ 2\81@ x- Ïÿÿã\7fØþÐôÒ\ 3Ç\ em|è«\8eÝq\ 6ó¶Ã¬\8e\87\7f\1d\1d\ f~ûÐç\98{\1d\ol~áV\ fëù1?ú\1c:\8eøõ\19\8b\v?_\83o\7f\9f[ðÝc\7fÍ<ü\9czc»\9a\86Ü\83{\8e|\81ùöAÍ\1eðç»lò¿\8ff\9e¼u¬#ö³R6\9aC¿e\ 6\1f¾[Û½\96ýóú\1dU\1f¯j\9a]=\83\96ÝÎÖ\96õ\93\vïd½:]ùîìµw=\1d\9bßµì[¬Wç\ 2_wuéóh½º\9b\1aÇ\ݲüa.³\86¯{´õáC\8f~ôDÖzs\95뿯i\9a­\9d\9c\ e\9cá¶ìjs²ì¨õÛ\99³¯k\1f8\8f\ 3\9afKw\ù®Në\8d¹ð³\ 6¼è¦k¯=Úr\v\86µ×ØOo´NÚ¡M\17qX\vmA\eÏéZh\ 2\81\10\b\ 4\82ß=\14\18\92\8eÚÃ*0Â\ 4NCÊ\ e
++\80Ð[SIû\94\94qô;$:\18\8b-º3Îç\Ô$\91b UÈÁûhl\8aeûkR\ 2\8b:¸@\95\eÚ/Z°¼=\9dW\96öñV¹\0·º\8c\1c\ 3ãé\8et\83ìÌ .^p&\82?îtD\1a\82\834ZÓpó\ 6Ò\86)ºâ]WûaèæðsöÙQýÔ£\98Bö>Óo :\a©EÍNp\86
++\94\ eP|\8b zuÊ\17\81Hê9²2\92\95¥ 7Eﮯ³Ù×\99Dn\83Î\99f'ù\84d\14\1fb\11¾3\81úF_o\81nK#\81\94\8cH\ 3£\91#\0q=ït\80\ 4!Xù\16#N\r¢º\8c\8bÁ@\ 3Ód[Úë\8bzfÊÔ=¬\14\aþ>}#`\è?\91\89\92!\90Ikh¿ú Ãº\92tʦW2o\7f?Z\81E<´h\8bÒÐÒ Ú\922\82\ f\7f\ fBÌ(}\8eÓ\18\85Ðå§Xz\1eT¢õE\ 3\81|\1a$\97Hü_ \10\b\ 4\ 2\81\10\b\ 4\82×\ 2úñÿmg\9c¶aziolM\8b+OÕù»¢éÎ\1d±ö\98ç9N­molßÁýßÏ_ÍqèLçW·z¦êðm<¸\7f~зïûÍOkÑ\7f¼¾øw\85¤\oì\vå÷\88-\1fóâ\11+\8b>_Ìt~S\8b\9bOÕí\9b\83ï\7fá\84\9f\17\1e\812¹7vxiÏ)t,øú[·\96ó:ÇÞØ½­\9d\v÷^_<ö\92\83~áUýú\aôÿfW\9e\15|ÏÞÁ㣫\96Üâ\16Ï\1eöÏ»¦ù\f\1ezÇÄ#\1dw\80µä®ic²~r\11ûõ9c9F~j\8båÿë\91«Ø\ 3Ð\9bÀ:zÛJ\9d£y\ 5+Z,\7fÃäVö\9e\vÑUO·r\1d¼Ù~p÷¥Ì\9b\b©jå]Ùô\16ÿò\88\15ÜÎh«ÆÞÏÊ\1cÁ\v\eÎzºj\bfîãm\9eÖýdûÕ¬÷ØÕÙk÷ûè\1f\9c
++Ⱦ\94²«JÙh¯»E3ð\1fn\98Á\ao}ã#,Ûó.ö³£Aã1»¤Ü\ fÿX¹ãÌ¿e\1f<­¸\ f74ÎÊÒgì­µ¬r1.9¸ëÃÇþzÙ³Õ?Oñ¼¯\9eÁ[ï¤6\7f\17\»î;\Öùà=Út\10WLîú\12{äu\9en[Æ»uüȧ\96³\9f\9d\8bÕ§qcãp¬Úý¦×1\17#Õµôø\fÚ\8a«\e\17cÅäî/V\1f<Ï}8«ñ;\9eÛ|éc\\16«Î#ûI¾\9b\8eOÎ]ú$ó;|ª\1a\893p?X\93ñ6:ÎÚ~ßfÖV\8cu}Þ3à\83÷\95ë¸,GîÃÆö.\98ؾ¤+Ë<\9e··q\19öÁ;¥qwn¼\7fñ3¬×X$\95à\ 1ØtMOÛ¹çÀêSê¹\ f÷¶¹]zíé?.e&já¡\b\ 4\ 2\81à7\ 5x®Åì\8dJ\1eV\82¦jvý\7f=\ 3[ìÚA5Ð[G\17ÇêµF[\18x¥¹\ 4    ¸¬¡\84ÇÞrJa\83f\83U´¯\80~Û¬N÷\8c\9a\92\ 3m\8fé$ÔÞb\88*\99¬\8a7 ËQǨMD8Ø*U"â6Y_Ü\0\aÚ\82Æ[\84è\8b\7f\9eE\14\94öK.ê\ 1\1fC\13­ó¥-ÙSå\ eþ\94\1e¦mÕûm\94ÿ\1a5$j\bÀUM¸WR\1c}\94\1f\9f\89Ô\bìQt7\1f`D(¨´\99¬ÙG28k\8b²c°\88\1cÃð\ eF\8b  Ú\8f      2|\11ê\8e´\99\81\86{g\82\90_(¦|´;ÏePàe\a\1a'\86¿]ð°è£\95FSí=m \83§Ö\a,!ÄÏéfÆé\14\13¢ÃT\81C'«Þà¨8;µÂé¦\91¨\8a^"\86\95j¡Q¤\81/ý¥I¦5c
++¯ÀÀ$¯\88\jÇZ\81´\91\baÌGsí\12­*Ú£Y[\84\94\85|&\8d¿\86\ ep\11¤³\10xDl\9d¾\er\b`\13\18\1a«¢\1eH\83âèÇÔZ\ 3oJ\fW\80\82×i(N\9a(\ 1\91\0\ 3¬\1c-\ 1ºcÆw-Í\ 1Ô¾iû\fÚA\80©a º}][£âê`5h¬\exV¦Â9¨ã\ 5Z\ 3µ§Ó/TNÑRR>À\14\95ÆØ\r¬á\ 1-G¸q\82=R´\11é\11 \95a!®\98bõz\1cÐ\1cÍxìá:\89\194\96ý¦K¬ß¥\0-Lz\Ê\a\12Þ)\ 6\91\7f\r\8fÄÿ\ 5\ 2\81\10\b\ 4\ 2\81@ x\r@¾ÿ\ 5\ 2\81\10\b\ 4\ 2\81\90ï\7f\81\10\b\ 4\ 2\81\10\b\ 4¯\ 6ôóÿ¿qâ7·O/íÕ|ó»èXðómÿSôüU\f½±ÓK\ eð°Îÿê\92«;¬ó¿¤åé~i\ 3ëüû\80¼ú]åï\1f\86õÿßRêA\ eîÖ\95\v~YòùSȽ±}-§~0?¿ÓÍÇM.\9aÜñEÎÃ7\9es\84\9fo¹ïÃ\9e\ 1\13å>È7ÿû\13Wq¾¹\ e\91ó\80\97´Üéáüý\aÆûeï¿\96Ërâ|óÅoìúú\91C/ç¼x«k\9eº\1aÐ\ 4øé\e¹,Õ<îõ3ø\ 2ÜSêü;:Î>y\ 3çÌÇXóÆ7¶<ç\89;×>˹öJsîô¬\96;½aÛù_æ2S=\11\96ÌíÆx8\ f\7fÛ\9cîºá\û³fð\1ap­ïçn\ZÆÓ¨X}\16\9e\9dGÇÉÇ\9c·\87óðKz\12ÚYú°\9e\8eU;ß{\0\979ÅówcÓ^øÄÁë¾Íe¹æ\9bß~p·Þ\86sôU\9b¿U\93§}¶æÚ×\ô»\ 6ÊÖ\1cɾ\a4\81¥l^ߣ`çqoç|zU½\r\Ëo\1fεßÒÆeåä©wÔ|úT½"æô˾ÉÞ\ 6Ñ8ε\9fßÚ²|òÌ\9b9¿Ý¨º&\9aæÁòÇ\ eù\1a\97q\9eÏìªÍ±\ 2kâéÅ\9fæ2_¯c\9f\85Ñ9ó§ÎíßoªÏÂì±\aÇ»µôçú=OÕ¼øÄ×¥¦ùñ¶Ù\1fØÉeÑòZÚ×4\bÎxúÍ7sμ²\923/\10\b\ 4\82\97\ 3ûÉÑ\9dIãÝd\1d\ 3ô½\91\87=\90W\9eTT\9aj º æÍ\7f\96uùº\16\90<¯÷4\1e\99úÎÛþo2]þRiÅ\97\90\90\ e­ X\9eµË´ST6&\13<¤Ó3ä\ 4 \93\ e\ 1\ 1\a\8dð@möEs?PÛ©Ã\9avæÈ&\862~ Njè¸\aº\98z\9cMÉÚNÔ@\ebÖt\8eÆÏS¯\15$ôc¤ý\9eÏ\89î¡<RÛ©{*õÛ¦Ãÿ²w¥±vU×ù]\89\88k0µÛ2t°\92\8aA6¶\81=\ f-4n\v\8a\91\1c\82Il\83ã\81\14(.6C\90\13!D*\94¢Ê\ 1\ 4\89D$~Xª%¬Ö\f\ 1#¬BC\19*QA\13«q\82\ 1\e\1c@à¼:Ì`\87AÐÒõ­½ï~÷½{\9fû£eH¼>å8øìsö°öÞïíão­où`\92u=ms\93£C¨}¤\11z\9f\92st\10Ë\ 1r\ 5\91\86\9c\ 1Ò0}DÐ}ÎÔ5o\95BH3Çt#\82Ûá\16¤Ñ#\19Äæ@G\ׯKo!\9cnmÀ4XCoçª\8f\ emv\17¨Ü)H\10Ð\84C\85\9e:Îòìd\12\9b#\99\92ê£úÉÚ¾\ 4hcF£Eä5ÙU!ü^\95Àq_ëõ\ 6\8aî©oÎ\9bnþ$Z
++\9f6m\ 2£0×!!FßY_uè#v\872\93hSL¦Y\0\81\7f²TN!Z²_¤aB  A\1dßѲ"S(ëh\81\91\15mJ1QÍ.Ñ`¨&\8bõ§bäÈ|O£¡©¥ªiùÓÊ£½B«\866P\86$\0BíÙpô\19\ 3ý\ 3\16½PP\ 6ð\89\16\rÙÖjÔ\ 6Õ\ 4l\98¤yÎ\13}K \13\86f7@&\83µ\18x,©ì0²hÂ\8e§?iO8²n0uÅÓ¶ÁÊ Ys\ e\82\14\916±Å\86¡­\83el°«ÈJdJê\81ÕX¡\99ö\e~\10\91)ð³"»È¹$\90/\0
++\ 4!ªª\v@oЦuü\ 5\ 5µ/åëº\85\9e\18ý¿óØ5Ô\8b\8fB\17\7f\81\10\b\ 4\ 2\81\10\b~ó!ßÿ\ 2\81\10\b\ 4\ 2\81\10\1c\b\18óÿ\7f"Îxqbi·³\9eý\88o£ëè·ç̯ùí\·sf_\9e¿þ¼\80×4?ÿc¾>÷¿JÎ-­{yø\90\90\85\9fûW¾\1f\15Ý\7f¸ù"\9f´wú×ø~Ö\91ÚmùñÆÇ\17Lçç/£ëÆW\7f÷\11¾\9f\êv\1e\bk\1e=âß8\8e@ÛÜíl\9f$ïà>ö¹^J×ì÷oý"îg®\7f[ëÏì½\8aó\væ ¨?op=ðo\9eýÁ\9eÕ|?Ç4¥3¿ù¦Ï¸ueÉ\8f§Tõ\a¿\8cß\19\9e\ep{ëï²{Ï.yüT̥젶ù÷éZ¨×\94||:U\9fý\1dÍ?{ç\9dç½^â\ el\8d\1fØÕê|pãÊm5o`\98\98#nÕkG>PÊ\82­ùθNäñ{ö\9e\85/Õ2_ÚÛÝüùï»ç\92=¥,\85þ¼\81\9e°ô§%&Aõòê±]\86Ç+\94¼zÃc\12\8a\1fùðü\7f_ikn0îà¾öÞû·®ªq\aÖ\95yØÝâ\1c\96?´¬\94¹^ν;¸l¸¯ÿƶv\96\8d^4³\94Y]Ê6µ¼\81Crçµ\9c\89\83¹óÎmeKþö\92\9f\97²¤ËØ·öùå\9fq\7fõõWeì[\9a­wn¸ò¹²¯¬/ã;¨\8da0\97ݦVç\19£\9b\ e-e):ùÁ'\10\b\ 4\ 2Áo4ØÏÛª\0\8fû\9as\fNäÙ\ 4N±æ©D9\15áþOGÝlLtt!\11\9cóÎá\ eò¢ùlT2\1e\11\vÑf:ê\18ËiÜ\ 2üö}\f\96\13ë\ eÉÿæM\b:dúkâüpÃò\90\19¯MÒ!Æêcn\82\8b±Ï\9f~dB\1e9v\8dgßmªX;8Z»¬\9c\8e>7ßv\8dè\aþÓÊGês\8a5\ f^\86Ã;\9c¾\9dU%\8f]\7fÎ5\9c´£\89\89\8cààõ\1f\ 2=\9b\94BªEôQY«R¤\83.\1d\91\95£*\90\9d\ eçsj*'6\9cG\96\96Ã'\91÷8\84ÃQ\9f\ eÀQ«@æH!p\92\8f§|FÚ9\84\14ö\e\93Òï\9b\1f\15\8d5¦þ¼\8f\0[k\1dl`\1frä¾K\ 1\1eá\88å\88½¸\8c\9awÑ#µcrQkå\ 3b(È\0è±CÜ
++V\ e>1\10zA+\86\ 6L}°6¢\7f\96zOVÉ9iÄr\18­2½\88Ð\aca)tD\99hCò\bh0t\9b\83.\fµ\b\ fv\8f\b\8aLÝ£ú\\8a\88v êmêõ/¨ È´\81¦\96\8c\93i\1dej\12!'\88L\bÈl\89EÁSB\ 3\b\8e\962}?Ò@©vj*&øï#Ê\82Ê\15­*\9f9êÃQSè´ál\88´~\91·/ÚH\83³øD\8b4·Hà\97ñ\98ñH\aH\ 6\b´ìè\8cÏé\ 6Ù\89?#l$ØjK\9aëþ|\97TCF\10\ 2f÷Ó\1a¯#ü¿@ \10\b\ 4\ 2\81\10\b\ 4\a\ 2Æøÿk¿½íæ\89¥\aW\1e\17üá5s^8£p a¤Û¹¾q¸³\1e\9d³\84¹X\ fÞþTæ®o¤ë±'g¼UtÎ\82ëv\16\17°¬q¬s÷:æ\90\9dW¶Û\19i|çÔ/\1cñ#Ö\vT*u;Û¹~ðß«\96Ì~\93ï{Kí®k<çx\9e\7fWã~Çë\b®jý9ý½\93¸\1eÈ{t;\9bùypáG\9f\87Ìó+­¦t®æç×ѵüö\85OV}A]8Önã_\aµ\a\8fåþ\82\97þç{+\9f\8d\7f\ 2ä²+Ú\18ÿþ\98\15?«º\84±pÈ'÷é\ 4^|Káù\8d.eóúÊ®;¦h\b\9aP¸à\ fú4\v\vv\7f«×Þ\8c;Ï.¾
++NW_\85s\9b\1f\83ÚX¹ü`«\8eÞá\8d[_»yE\19C\8aU\13nzÓÃ[ýê³ëJYòe|¯´±\ frù]\1eû<ºÖ»\15OW.?\16\1e|.¿\a\8eü©\1f®y¦pùÞ\17\9f\83\19Ü\97%t}C_ðJÑ\ 2ôªØåÜfÏ\ fOYSt\ 2­«í­mþ\ f\83º}ó÷£Û·¡iÞ­½\7fñ/JYNÅ\9e;úøúÓî*|½®\9a\85ûx\f\17¡½Ýú\8eªéW}?öµ½3¨ÍWôþ¾G×\19»îÿDzOz\1a\90û\9aVåCÇ}s´pù¶\96=6©6\9f\10\b\ 4\ 2\ 1ø^\15Ó\98n\9eÊàÒc\82¤\1a´ç\1c(H\9d¬Ö\1aÊs\9e\8eP6Ð!Ä{\bËi\10áY»\94\945\86å×|h\9a\84ãy|æEé\18¢\98Ww PCîé\9e\19¯\1cß·`W=\v®Ñ\91Ì\99Èr\88ôÙ\0áhè\b\82Qw1&\9dÁ\85\1dx0·L\8a\82\1c¦\ 2\eY®1Pç3N\84&C².Yê¶JÐ}ôÊ;\b@&\ fYA\83\8a\14\12¤Þ&è¬Yí\1d÷Ñq-*%\9dà_\0i=\ 3\9aV[Ъ^\83Gµt\88V¸Mg[²\ eh\7fx\13\98\98a\rÈÿÑ«\86ίT\13<n'ÑÏ+Zt>+n\85&£éáQ]ÎÔì\13A\86\83\81\92± ·!;7\99\1eád\1a\96ÃtýL´\8eý\11h\14dÛè¨\11\16ü\86m¬b{8\1a§ö\89\få|¿ö¢V1`D4\8b4\15ÌYÃí"è\9c<F\9eè%ú¼";E\9a]k,´\v\1dU\923{Jd(\1eª\90i\89Ec1v\a1LL¾\ e.PådN\ 5yAªÈУo!êR°9;°áôµE-R\ 3Ù\99\9eß\80\80I\99ll]Nãü\1d¨>ÇÊ\88       "\89\81¬\89µoá\95á\94Ã\9aÂr²!Ó=^*hYÁ\9841ô©e!Ë\193¾l³\85O0-\82àØ¥\85\ 2-ù \8a/\a\9e\9d<z£ "I&bKRm\99n°·\80Ï\9aÖ5\9c+h\87Ñ6T\99ö\ 3\r\9cì\91±)T\84àa¶´Ø¡fIûÌEø9äD\9f\ 1\ eÊ\8f´â0ðlÈ\10´ºá%\80§Ùq\82VQ°        NÊ\ e=\87«\89ðÿ\ 2\81\10\b\ 4\ 2\81\10\1c\10\18ãÿ¯øÁ\1f,\9aXÚí¼Á<æ9t\1d½uÓ9%\8e\e\1eãûÌç\9f5ó­ÂûæÐíìi¹è~rÆ\9cÿf\1eÒ\ 6ß­\9cõ`Üþùíùñ|þ\ e~~\90\87ßÜî\ fƪ/àº\86Çy_ÅeÃøX\81\10\b\ 4\ 2\81\10üïø$ô\12&Ñ|Ð>$\aWàêÏ0\99\9f\84ñ1GÄÕS}ðäõV9ꨲ\11T¾3ðl¡î\ 5dO\8c`á-F\96!pá\9dÒNg\15¼Ix\12R\ 4Ñ\9bPtÛö§³0\89?ÂÇé\87\90\13ú\90àJ\11¢ã§\85ÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81àÀÀ\18ÿ?å¨wÖL,ív¶2ß>\18ç?\95ã\8d\aõüß\9d\84ç/±Òàùg==\87ãÿCÈtÿê\16#þÂW?·\97ãóctÝÎ\eMËþ3_û,ëÿǬT·sÇP¿\80nçæ\16\87>^\9f\7fzëÏâc\96\97¸}$0\18a\1dúýÄØ\1fÔÚ\1f\8c\95¿¯\8dåÊ?=ÿåb\93\90jì:\97]G×\85/\7fç\a%\8e¾\17¿]´\14 ë\7fÏ\91\17<_|)zñÛ\1fLíÙáñ?>»ÄÊGWãè\1fi6\1aÔ¶ßÖúyÕ´Õ%æ]çTbÞ¯oñþ\97ß¾ú).3,û\882nïR\94ݲúõ\1aó®J{3ö\13óþ|Ó_¸ù¡S\7fYâÓYú\95ÊÖ5{NÔ\9a\9fÒy·é0,ºa\ 1ûmX\13µ\92\r(\10\b\ 4\ 2\81@pÀ\ 2üi¢Ã¼UPÄO>;D³CËÜF:G"\b\9eN¶Êd\17µµ.\83C\8eÆX\r\1d\ 2çL0>\18ã!íïA¨ºl £®U\8cP2pÖd\96\16\16íÅ\1c|\7fìûDÍö\89±÷)ÛD\1f\ 1\ 11úÎÑQ\1aÊò:\9ad3\9de©Z\e½ÉÐPÐ\90»wÔ\ 5­è)\râ×D\8f¬\b`a\ 3¤þ\11\ 3\ f\9aÛSÏtD\84·RÔ.·       z\1c\94pfvX\19ú\86\0ßí¨ù¤"óØ\19º\ 3\11Áá\ e¡Ý%\81\16çF0\1e\1a\ 6Ð\7f\a§L\ faD\ e¯\15í\ 12\19Þ\87ÙÈ$9d\r\92Û¦\91\9a+\82¦\80\ 6ã0Hº­\ 2¬K\7f\ 6ú\8e³\1aY¼\p\b»O\9afÂgÌ\ 2ÒTѼq¢\0o4$\ 4\9c\ 5¨\1c$\ fù|¤\98@`\7fð\10¾W!û\94 EAök:\ 2Á»^¾\87ay\1a&ãô{¹\10\86é'Xx\eÀö:ë\94 ó\1f>\11¿\ 5¬\aÄÿ;ª\9ef38úÖ¤Å\83¬\ 4\18#­L\87: 8ax>\83Á: \19§:5´\1aLR<WÙù\bõÿ\9cé\11²\82Å\92PÙÓzLÔ   ÖÀp¨\99\16µQ9\ 5\1d0Nª-$hR@K Òü\8c\bÿ/\10\b\ 4\ 2\81\10\b\ 4\ 2Á\81\811þÿ{û®ýüÄÒng\1eóÄ·ÑuôÛsæ×\1cö®ÛÙ:\ 5÷Áõ\9e¸÷ò?+¼ºñÝ>Þ|Á¼ß\7f´pÀÆt;oð¿3@G`öÖM_æûÎû\1eÿ?èG0\95¹ò-tÍzsÛ;ìG bèv¶s=ðG8úG×=Sò\ 5À¿àä¦á>^ÿ¿Ûò´\9fðæï¼Ï:ÿÔ¡nåÛÑÏ\v¿ø\87?.~\ 4V÷ü\ 5PÿyÏØ;ëx«nûƦyð«ëÿêÅR櫾üÔ¦\ 5\7fÉèOfV-\7fW8óÍ­Ï«v^\99KY¨\9aõû¦ôú±Ü~õ¹R\16sáögMm}ÙµxCñOPºpí;Z^\86KGO¿¡\94åê\83p8¿\a_\88¿üåÚ\9a\1f@U]úµ\87öÆðÞa«_(eÑ\95÷^á÷ðÀ\ 5Ï_|kÍ\ 1\90K?gñØÏ¦kýµ\8b\7f^Êr,cßsHo\fö\84\9a; *SÚû\80Çw7]ç>þ /e!\94÷^\99Ö\eßùOß?µ\94¥\9a\e\94^ÙÅÛ\96ÜVô%ø\9f8©ì»ûÉ9ðFÓÈ\1fô\95Ø5­7ö/_½¨\96ÅjÏ\87\9b\ eÅ{\7f´ä?\8b\1f\85u%çÀ5\'\9ccVîþ\8b\83J\99«öÜÂ}\19\9e\8f`:¯   hù\9fùÄYõ½\}OÞmëuåèÜû\8bo\86³¥½\ 5\87ööÄåÿ´æ\89¢c\11UYK»§ôÆðøß-}½\96Õü\ eÇ6ÿ\8b\17Í,9\ e¬®>$\87ôê|ëî¿.u\86èJ_6r?\87ç*8¿­\97\1dG--ãËÖ\97÷\96\1dÚ\9b÷\9d\e®|®ø\82X_lýn{ïo\ e^Ps\15xΩ \10\b\ 4\82ÿ_ô4Ä\87ä\ e7\99\81\13íå[\ fÑsþt0V:\87\90\9eMÌ.ãÇ4ý\15   µé´\91-ýª£_"QE\8b\ 4Û\ 1\99²9!<~}ä\90\9d1)\a:_pºê\18\14\9d&\82¡§@ciPjPçÎ\99êK\965©½\ 3ÛF¿#\83¢\13\97\ 6×\1a\1dHªàè5\vB\95þÃØ¨\ 3²k\a\ 4ÅfÐ¥¥ï\19D^ Ã\1a¸È\1eg9!ç|T
++2ñ4,\97²\1f\19\97S\1e\ 1¿HA\1e\fÇóR_\¥òд÷1Se\81£qUöÞA\vß\ 4C5\83ÊËT%âl\13¢\80\83µ\1eCrºöÃ\82\97ôÈÖmBèËS\8fc\eõÑè:\ 6ÄáB\8dÛV­v²¾\ 6Ké|JPl§?\râ\8e!\89_³x\83²\ 6ͧ½£ÎBÑ=j\8b\96l£r0P]O Di\10`Z£ÃÄ"L:ZEO\19\10ç}\©U\993\9dÛ\1a»LuÓÿl`®Rqþt\9aD8wæ26ä$ÏN1õÚ\9f\93þ×(G{´ @­\1dËM@\93ÍûÃ\86\9e\9e=5\1dà/\0izd\11H\96ë*ÿ\1dè\ 5
++Ý\vHä®h×$dX\ fÈ\84\0Ö\96f\ fáÚXWÔK\1a\18f-¯\81\1e¡Q°ÏB \9bÐ\8cx\ 3\1a]!ç\ 2í\1a\ 56ÚÓ¬Aï\9d6bvÕÎ\1fg\9c\ 1\8dÞsa\ e}?WhI¡»\8aSÐk\8c:"×\82£ñ"Þ\9d¬îÈh\1ejôd\ 1Ï\96\0YOV3\b²OÔÓ@[\8aºe±A±4\87ø\\fË?\80}\87õ\92z9\10>¢¼\fð\12!Óå\14°\ioà-GÖ¤5ï°_Ñw\9a¸\80Ji\93&2\a~tÑ£d\ 2\9a7\151«ÆÂ    @¡\97ÔIOK&À]"Ð\90ÀÙ\e¸#°ó\b\82¤?\96\8e¢u\e|¢½\8d\1f¢\1aµ\19\98%A\8fÀ\93éàd\91Ñ     ZçôSQÓ¤ZöQÁ\8f,¬~Þ\f\89\93ÒµÜ\1eØ÷p3èýÜ  0-ýÄð%\7f\9bðÿ\ 2\81\10\b\ 4\ 2\81\10\1c\b\18ãÿç½½÷µ\89¥\aw\ãï\9fî¾Tâ¶ÝH·sÙ$y\ 1Ö·Üæ'þû´]\85\83T©§#0ÈçoiÏ\8fçó\15ß_L×\r£s~Å÷³£çÏn\1cüéï\9dÄù\ 2\10\12Ôí¬j±î\9fùÅï1\9f\9f²òÝÎ\99íþx\9eÿúæ§ðþæ\95\1fé\15G\98¯o¼û _\7f\13\97\81'Þyçy¯\17ÞÝVþõ»\8dϾ`û³\ f\95²àûùóá|ýÆÆK\ fròs[ÿ\au\bÖ5\9f\835£s\8b~\813\95C\9eßÞ{pãÊmµ¬j\rÌà2\fäÒ\17/\9d\vr\19\97\18®_°\85û9Ü?à\11~o\ 5]ïl¹ðÕR\16]áÖïh\÷E£»ï-|}ôý¼û<ºÖ»\15OsY\ e±\8cý&\1e\1f¸üo=°¦ðõ&¤2önó\ 1XôÂÚ?á2ëSéËÜf\97\8f\14n\1dÿØÉeWs{àÁ\8f8þü\9fU\8eÜ\16\8e|s{oùèñ\85?\8fÖ\96¾<Æe§ /\87-z¾\94ùª³0«½·tô´»
++\7f®«\7fÀ±}e_º¥rëÌå\v\ 4\ 2\81\10|\92ø\94Ŷӱ\19þ
++\11G%OMf\1cú*§9Ôÿ#DKGX\17è\9cî#\b\eÙí\81:\81LñÆ"Ã:\ 2©é\ f£\H\ 62í)j¯Ø¯"Rß\10\ 5Nß*\9eF\9cè\1ddVÏÖµv\e§êÉ84\124\ 6~V#n¼dtW\b\97\a\1f\8d¨p\84æ#¢Û\84\90©\!w} J\1dÈa\ 3'gMß\rHÞÞÇ×RÿØ\7f%$öQH\81lH\13\ 1n½çc22\89\7f\v\a×Ó×\ 6{K \12Ü{G3\bW
++D\8d'ët`/\19:{'ã³\8eÚ8LFõAÑÞÀ\1d'Qc)à#\ 2í£¯ôÝ zý«:     \8eÚ&SÅ@Uów\ 3ûR\ 4\eú|*ÀF\aãè\81:Gô·ô\11ëïÿZò÷ð    \ e¬K\10\1dÛ)ÂÑC%\88\rÔ9\9fè/ÔïÇ\ 2ï\93d°/\1d\9c.44\1a4v¥wd» ÈZ\1e\9b\ e~'
++\v\ 1{Ãp\97}\10þ_ \10\b\ 4\ 2\81\10\b\ 4\82\ 3\ 1cüÿÈ\85ßùÆÄÒng[\8b3?qïâÓ
++Onu·³µÝ\9f½wÅNæÛ£ÍS:ÛÇbº\7fúõãkìy*\9cô\1e.\83vÿ³÷,|©pÒÁ\17~u\1e\97\rç\9dOnm-\1d½ýÆÂ¡æ\18\ 4\ 2\81\10\b\ 4\ 2\81@ð1 úD|\9aüf\9a®\85u!@ #Y\1f\17)dê!T\17\1c|T¢ÏZâÿ\ 5\ 2\81\10\b\ 4\ 2\81@ 8 0Æÿ\7fá±»\16M,ívö5}þ«Oýì\8f\8b\8e·SÝÎ5\1cÓ\8dàæãß;îm\8eÏ×:Òý¦\170>\9e¿ÄÆ\ fêðoçøèÍ([ôÛÿÁñù>é)\9duüüp]ü\7fáw\86Çà¯ßO\fþ\ 2~ï,º.yɨâ\9b\10Lñ?ØÑâÂß?eáÓµÌ\95÷nn¹\ 2\ 6\9foqè«^;ò\81êÓ`K\øM-îýâÑSmÕ¾W%\ e}Óa½÷\ 65ìK.\83y#Ãbâ7·~>õÃ5Ï\14\r\8b\7fÅ®¦1°bô\86ÏW-úªµ\7fU\eÃUÓV?YµèküúA\ç\11t]ñís^.qö=\rû\19ü\1e\8f\9aya\89ÁGÐR±\v·÷çt}åÕeÿPâì\95\1dÛt\12>\9cº¸¼çSÕ\9b\7f¸µ÷­»W¼X´è{Z\b{\9a\ eÿ\953\97\97÷¢R¥l\ 6\97\rשßÀíÝJ×\99Ï>xw)\8bu\8e64\1d\81\87\8eûfÕ¢·Abð\ 5\ 2\81\10\bÆ\ 3ºóƤÂ'&\10\92AAÌ?\8då\ 4ø?Å\1e÷åª×\86J´·ý1î½xò\9c³CBt:Èjo\rÁ¸\98¬E ¶å¼ò(\84Ü~B\ 46²3Ð]o\11¥mMÖ*\a\16ð§\ 3;uÏ!cEtô°BætDlge ¸¯\95§±\ 4dOG\ 48UBCBrwç\¦\16\9e³æT÷\ 6rë.\ 4(¯Óa?úªKï]\0á\8bÌ\e\9cÕ\0\ e©\19\r\8d~d²È\1eÝÖT/\98à\8ct\14\81ÃÄm\88ÿÃÞÕ\aÛY\94÷Ü\ eÖs\93\0\ 1+3"P\ 4\12q÷Ýo\ 5Ê´0~4\86ð\15C¼i¢ E¹\18e\98)£¶2S¦`eøpÐÒ\91R¦0\ 3\f\bØFñ«b\1d\93\10?Jj\11ã%Ø\bÚh\v\15Çþ~Ïî»÷æ¾'÷\1f\vÂd\9f\99Ã\90wÏÙw÷Ùg÷¼çþ~Ïï¡\1f­î\92¢\93r\9f*ÄE{ÑÅß\9bN\ 2¦§=~.±8\816\96?\80:\97p¿\88gbø\1f?¤0PxÎ\18
++!P9^Ê5P\97\0\9f\88¢ß/ùø^ax\98N\8c\96
++ÿªcµ\f\8c\13ëfø\10ÍñDô\8eµ¦ì\81Ö¬gÀ\1a\15\984ë#\18¦õS*!F\f*8ö\94\1cÝ\1dS Ü\822{Ñ3 >A n\17+&PÄ\80J     Q´      r±\8b.\8f¶c­\10\16/¡Î\ 1ë`8¹>«© \1c+\v0À¬\8b¹Æ\81WVÁ\87XGxEÞc1~§\9cg\95\80\18¤NÕs\w¡¯É2·\ eÇ8-\0\86\1fK´À7NÆ\8eEAXàG3b\v\81j\8b\1eC\80aC!ø±è¢Ç\80ÐÖ\8a¤\ 3\8bU\81/MÓÿoÖ¬Y³fÍ\9a5kÖ¬Y³fÍö\r\9bÅÿ\8fÿÚݯ\9dßúâR×\9eàêeGmZ-ø¼¦þ\7f®ù>Ôÿ¿£âÿ{êÿ\8fêõåÿx\7f®# |\1aM\1cRkÇ\7fjËË¿*|\81Î\99ÑÄ\8a\8a\11?¾ûðÝrݰ^À\8d|«ð\ en¹`ù/xÝyÞ7J?Wâµòß\ eû_^÷¾ÃõÃ\96öýlY\7f´Ô\11\b\91÷}`Ôßwn]\0\8csqßÿï\9es\9cÜ\97\7f0\9c\9c8¹ò\11N?aí¶ÌG°\85\8f0-5Ù?\8e×izzGn\8b¥VýÆZ\8fþÃ\9b3\9e­ù\17\eiÛOî5¾&ÀaÒF\1cümaãã\99\8fàJíøseNã9\a\87T\9cÿo\ fß\90Çé:\9fñúí2ç«ñúôëÏþFn³>÷ù¡\ 5j\ 2¬¬ú\v\17Ìl¹§×öÏ\9c\83\K`¼îÿ\99Kú>Ïûá)¿QbDe\8eÃjé\93¼\8f×ÇuÛ\v7¢Ë}n\1eõó\er#²\ eÿI\8bÆq#®¯µ!θä¬Ì\1dPAç±\1cRuø\87Ü\88\8bÅg×àµzÛéû\15nDñu¬\1c\8e\r3oþhæFÄ2\87K\96̶­<±¯APüRy\1a\17~vz[æF\ 4Uô,jL®¿w*\8fÓF\9dÛ¶,îãå¯ây\857áB^¿­£Þ\9fS3»nȼ       ]¸-w\8fú±¬\9f\9d¥-æ9\9c¹´\1fË\7f}úÝy,X£Üvò\92Þg\17}qÍ\ fz.FáÒÌéó_\8eÈ\\8c®pbÎ[ÒÇçÃw­}¬Ô<(kty塬\9bY\95ë/ð¯æÒö\15i\9bâ^yìäËr\9b+~9TÖh<\87ã\8aº¶ß>xÝ.iKÆå9<´¸\8f\97·<úù»òÙ¢|\1eç¥Kúµ]µý\8b·ôm¹Ï\aêþ[5sdù\9c6±})4kök·ZwÚ;\ 2+Ö͹6\ e\vëky\a)7î¥\96´¥¾4Ë\83\e\9c2\91@\98óA
++"w^áM\89åèMbÁêÈç\17\1ca\9a\12Ó\16G\v¾Ç\12\13ÞdAuí¨×MQkb\9aÔ\ 6g\8e&S*\95\89I©è\1cAAÜKEÅ\Pê|;\82Z\89,5b;.Y"}Ak\859\19âh\81é\9eVc&
++M¤1\ 6\f%yª\96+Ajp\ fc:\85§()\87NèTÊ\8a+\8bïD*[+JJ\e¯XÔ\1e³Ô¦\13½s\16¹'ê\175\19\82:\84d\1d\97s î\88îM\9cãS¸\99\ 3Ö]\8f¿%LBp8Ì\ 5ß$\84´02ë|Ö\ 6ï¬b\9dô\ e\8fGTÓ6LIÅü­ÑÔ\\87'=<¨=\1cIx*QÃ\eK©1\ 1)´D´¶£\8a;¥È\89\8báMX\8c.%\8f\96(}áÆDg#\\8dá+x\96\89®\1c\17\87¡     ¸Á\ 3n\16ëó\18_ÖQ\87S\88ý«\18H©!þ,ê\8eK\ 1r\1d{\1cX{Ä«\8f\19[DSÆ÷¼'F\9e¨\1e\1f\ 4\89\9eõ½3,]\9eUäµ {\ 6\8aªõ\84\8c\13\9fá\18\f\9dâÈTr\111I_$¼½£?CJ&\18"¥Ö\87`©^ÏJìä°btDhqß\94W+z¯\rßM!ýD\9cÚD>HX"\95µÆ:ã\8aùÍ\8439ôà\19YʨÙ\98¡\9e>\85ôYÿ=Ám¡Ä\ e!\7f8/bZÁí\ 5\83%¤K¶\0\1aðl\80-h\ 4¦ÏÿO7±L;b\1a\e\8e\95è  eGBÂ\9eì\81(Õå      Å\12øgØbC\ 4ê¸ã\v\á-\8e¨1ñ}\1c\ 6]\97\9ek\rça\aª\80£À%OØ\1f«\8fí^æÔ\91\85\808ïõî_HÜ\83_\95\8b\ 1'±B\ 2\ 3=\98Òç³]Wa~}\ 1,8æ\8e!õë1¯~ý¸z\bè\8dÇ\89%\v\ 2S\8c<W"\1cÏiá\80W83\11(Üö\81    öp¶ãÂaìØOr^c\ 5,/ñxC×\1aËË@e\8cbÀØè\1dW°÷\11\ f¦\0Gp3õg%®{Ó\7f7a#&2 È\1c@\9cá\90E´àÌÇO\ 3\93¤È\0I\0\ 1?¼¸³#\82F\91]Á=\8aEv<Õ\f¾\87p\11\81\80¥ÇÉgéT\96\fH<a©\1c`q\8dç\11Î\v\84¸e=\ 2\ 42Nu\1dù]\85oKl\84Äó\8f\11®°¢Ô"ÀZ\19|·a¦ø\av\82\7f³fÍ\9a5kÖ¬Y³fÍ\9a5k¶/Ø,þ\7fö\r«\1f\9cß:9qqÍǾð¨MßÏØ¶.uÖ¯®¸ð\98\9aö\15¯{ÿ¡\9b\1eËøuÎa\98\9c¸±â\83C<y\16;|ÏÌbSðÝ.ã\8a×Êý¦\171ÿû÷
++NkK\9dõ+j\1eþÙO¼þÄ\82ïv¹m\8b´\8dÇ\157K\ek\12¼ä°é\×=u¦Õ\16hÖ¬Y³fÍ\9a5kÖ¬Y³gÇzü\1f\92ðB\f\85\ 6fù^TEè\9c\15\8d\1eiç:e\83Ñ\9dò\ 6?H\83{¡ñ5È\ 1S\9a36J9ëU\17gçË\8fhÝY\17#Ù7øoG>\12þ·C\ f\98\84ê\84\15\99\ 6N\93\9d\13(Ç`´I\8eô\a\91H\88Nyíµ#%\0\13Áì(ÿO\ 2\aÝ\8c\916ü¿Y³fÍ\9a5kÖ¬Y³fÍ\9a\17l\16ÿ?à©[\9e\98ß:\9a\98\92¿\ f0WyÓÅÇýDðxeÌhâFÉ«e>ÿÑ÷/\7f\17§þÿ¡5\9føUï9æ©\8cíkæó×ëG¼\7fÅ/J®­\1eM<µ¸ïgO]\80\15\92S?¬;p|½¾ø´Wþ\83\\ f
++ý<"××àuåÌrÉó·ÉúÑÄ\97j\9eòyo=VÆï\9cÁ8¯¯¹Û+v\7fü\9dr=ºn4±Kr\9eOâ¼¾ú\8a-R§@'¼\7fYå       \1c~ÊA¿Ìz\ 1Zõõ\11\86:\ 2\9b%\97y\1d^Çþü¶·ÈõÎ\99É¢SÀù\9eó°¹3ûS\17\rûsåÞ\97ãµþöÓ¾\99Û:\9dó¦·W>ÅÏ®xWæa(gsÛ.icÎøçïY\975\ 6\94÷\993±£r4Þ;3\99ù\14º¯ypqÍ5ÿË×m\98)m!÷yÐ\81}ÛP·àK\95\8eÇ/:"s;Táa,ª:   \87\1eYê60·OÚ6/©mw®}0ë\16h\935\14\8e\96>Çk\13¬\96µý(}ü\9f\1fùT\8e©>\87ûxés¼þ\80]@càrÉ\89ÿ4^\e\1fü²+mE\ f çîs­ÏüÍÕ\99»ÂZ\9cÒ¶µê$¼sç\ 1\97em\ 2_Öï¢\9a\9e\99\1d\99×\12\83Ëc\99ªz\13ë\8fZ\97ýÂ|Hi{¨jD<}TY¿dÊÚ^²¸\8fÇ¡ÞÁÒº§\86z\aÇKü\8dçÊì¬Ú\1av¿©ï\97¶â\97[«ÞÇúGO½&ë\1dh\95ç¾r²\9fßP\vaT×ýmW\9eÿ­ÒV4\r>wÀìçæë$¬¬z\e\ fþÙº'\8bNB©å\91óú9\96µ;^óÊ¢%bòý¶×±¬\9f9æÕY\9bÀ\98ì\97e5æ×Í\9crWÑ&(s\7f¤\9eg?ûÄú\1f\946\9bûüJÝ\9bë¶\1dü\85¢[`²?·\8b¯Çs\88\9e\99£wpûU¹-\85Æ!j¶/\9bä\10ãÈ\11ía\13;\81løÝ\13q¶1m\99X\86ç\81Åüþ\8eÙÞ!ðË\16ïaF8³X\8dî\ 2\13ø\99Å\9c\82\bh\vêÂLVÇLaÕ\85\88\a\ 6§"s}\1d¾\12\ 3þ'R\13Y\ 4\99)x\1cS$t"9Ç6v!yÜÅò&Ö\ 5\1f\92Â?\ 3õ|t\10ÙiC%g¥]²ÊDäñ\94ÆèFKv¶J\8aY¥Ýó´\1e4>Ë\8csÇ$^\ e\95ßð:g\9a+c\8dJ"Ü\8dï\94 \82ÀjÞS\a\áñÌy¬\87e\8e.U\ 6¨<ÀÒ?1ãr¡#zåDÌ:õù        7¦Xvù·Á"X¦\99\eoK¥\16µ`uèñÿ#oYÓc\82Äa)S\1fw\81
++ÝJ4 \98bë;ïB >¹Ñ¶\1fë\98|çyùÆ]`\9el2®ÿ·Óø¶\80«Â¢ç$?:c\81.)Yp|¬¯å\1d\8cu¢3ÀH!¬\18\99tll\8a}î¾z¡á¡X~ì\19Ü0ñ0ÀNH6\19J!à\11\83\8a\15X|\82Â\18"\ 2\95\19Ð\18\1a+XIÇxäK\1c\1düà)\0\80eÄÖV&ȾÆ(1\99@\19w\85£#¡¿hD\a\ 1»\82ó\80\v\15FÈ]\8e#+z\1c2\16\1f3ܸ\96úò\81R\16\11Ï\87¼'·e\19ós\85ÓÊÙ\85\85òÁSã\84\aDê¼,#>Jùz      Ää¹ \81ú\e\1dEEpO^¡\8b0\18\1ct\88\10ë\8f\91\18\81Ù)§\80\eSæ¢ÄNbí¯NÄHXÄ\80C[ô<ÔR\91±âÝ\925¯fkR`ä!r(²_\13ã!ö\9a\16èÞÎÕ\8aÉZ\15\b4\99\1f<?{-kvà\90¡TGä£:Â\f±è^p9þ\95CA\9d\95D)\17Ï\13Q4\16\1aþ߬Y³fÍ\9a5kÖ¬Y³fÍ\9aí\v6\8bÿ¿cé\8aoÎo\1dMl\14lk\88ÃgMqêÿ\1f»åÖ3äºunTê¾\ fuûï«ØïÒ7¼ìk\82·+Ö\ 5xJú\1fêö?Uu×_³û\8f¾#×C\87û^Wñö\17ýà\10\19OLÊMN\>\8b;ß¶!cËJ\15lùbÁ4ß\87×\9a#Ög\]«¢ï~QÕ\85ß4sÁM\19çîJ\rûGj\rû³ÿfúÑÒV4ñ\97íß·}çÎs\9eÌm¦à\96\8d8â;\1fúî½¹Í\17\9dö\8dÒ6\1e;Ϻ\bã5ÿ/ªøÿÓû\9f\9fÇb\82Íxç¡UóÿË7oØ\9aqõ®Ç&+F|úuïþ~iK¹mj\ 1\1d\86ã«fü\a_5\95ý\19\8cÊ÷;³bÄC]ÿÏÉçÆcç'Õ¹\ fuýß·\80îCÆ\8fOZ4\ e\ 3ßZÇù­/L?\9c1pçò\1c¶×ú\ 3C,ûÌ\1aG\17ÞÞãÕZe¬w?i;\15¯Ý·mÜYÚ\8a^þÑ5^6̬ÈÚö\9d5ù~\97V\1eÆÁ¯þÃ\8cÇ\130\91\9dû÷÷ûå   ÓßÌm¶`ü+\97ö\9fûä½ç\96z\0.ÌÕ½\1f\8f\81ïZÒÏýeÇ\9cû\8dÜfJÛÝ5&>pÂùYóß\85²~?®ñù¶o}F\976\9fÛî¨|\99_.]Sê\ fÄ2÷¬÷±\89>»éü'K\8d\81²î[êX\865\ 6n­\\9ba\1d\81gj-\8b3\1e\7fÿ(·õ\9c\82\9dõs«f\1e¸½h÷\97>\97.íãúÞOþþ÷öÔõ¿º\9e5ß¹ñ\ 3ÿ\91Û\8cËë~]Ý\ f\7fÿçoÞ\99ÛD\8a¹Y³fÍ\9a5ûµYæ¨d<\92ì\14
++ÔÏÑÛg\1dyC¢\873\96`vÅ<\8dJi\8cîþ\Ì8k¥ë¤½NÑâ»YðÓ.xò2l\7fï  ¥-yÖZ{³\90î9Ë;\18\83g?4I­\bª²\v/\86\83ñ\9dÔNðÔè'Á\87d\12¯YÏ\b\ 3õRQ]¡kKÞGÇ\81\ 4ò\ 3\bóëÈ\8a\vÞ\18G¨¾ê½w&\ 6³\06;¿>ºÑÁ\13\946RÊ\81\84S5ëO2\19\88\9cZí1\91¢'ï\89¹\87.âA2\ 4\93b\98åb\8c©Ç>¶\16É\9cú\ fã0ê\\97^iC\ e\1d\10\8au\r,90\ 1\b\ 5\16.À¸]â\94H  v=\v\8588\0·¶\92\ 6\8fç0¢ÐÂé 8\9cÐ\ 2ß)\92©]\8c²\96x~\17|\9fí\98\19É-½~=æ\8f\1el\82K     Î[\85G·Äò\f&\1aÌ\18÷\8d\1dú\8fÆ'LƳÖ<\1e¨°B\9eµêYÙ\9eµF\8cÇcV©%R±ôù\9c©\8cÛGϪ\13¦Ä\19þ\11\a¼\1dDf\ þȯ\ïàyV¿\845A¸gù\11þ$Ä6\88ð\18>\18±]XÜ\ 3îæOSìARB´1X/ͨÀ\097\f\88\1dR,!p\17\ 3ÓäÔB\10ðß`¦!"ÂqW\87\rÿoÖ¬Y³fÍ\9a5kÖ¬Y³fÍö\ 5\9bÅÿ\97Ýö¦?\99ßÚçÿ\13\83;n÷\9aSJþ¿\1eM\9c¼\17]\80k+¶¸§.À¥r}\98ÿ\7fyÅ)W\9eôòû3¿ ëF¥Æý0Ï\7f\ 5¼v÷²·ËõÄþï\10\9ct3ïû\93­ÿ#¼\ 3EÞÁû&ûû\1eóôoÿ·\×|ÿÖ%ýø÷ä),\9b£\v`¿.×\9d¼2®Íy\1dþµ\8f>\9c¯Û8\9a\18É}É-¸êG/½O®G^¿¸âõ\9b>øÚ¬;Ð\19Ìëê\9aï|Ë\ 5ËÅ\ fÎ;\8cçÖ\ 3fï;W\8f\81ý}WüÓ\8b\ 4sõQÙÑÄ\96ʳزþhÑ;\b\91º  9§\9føí\ 3O\1cþtæGx5\9a°õ¾\1fùð±?\15=\ 2mÑÏÍr}¨S°Cú\1f¯E0\9b#þö\99Go(m.ãÜo¬þ\1eê\14\T×ú¯\8fø\83\9cãÏ?8æ>kÛé'¬Ý\96Ûlá\r,«¾?gû\9a\e3\9fB\95<÷»k<\fù\e\97Lö¾\18ò7vÔº\16CþÆ\ 35\1f\7f¨}°¨âÎú\16\ fÉýNÃëÜmÏ\9c\98Ûláhd^ÌïàµæS\e\1e\a)ûìæºöÓ3+n*\1c\8dÂ)X+}\92OñÝ¿;í\87¹Í»Ü§\9aì×aÈÃ8Hæ0^ßà\8eÚç\90£q|íóí?Z~}æh\98^£a\ 1}\83«\ fè×è]\ f]øºÌѰÅ/\1fZÚ÷9äad\9d\8cÓñ:ëqskië2Æ\7fc½ß\90kq}Õ\ 19ãs\17|=·9]ê}Lö±tö\91ÓßÍ\\v]x4+\16÷mC\1eÆ}\93ýº\ fy\18\8b*¿áÂÏNo+:\ 5ªð\rê^\\7fïTù\¯}pyå\99\fy\18\e\17àSLW~Ñ\a^\9d\vªÿ\Ýã\ fßµö±¢aPx4ÏÌÑ>8õ¦ÜÖ\95q^W5\13\86|\8a\9dõ<<ëÊ\95\12\v\92#Ö¬Y³ló°=\e    \f%Á׿ç\9avø:&\92Ê\9c|æØ\a\97\17Y\ 6Ý\99\1eÏ\\b\9f4\9dò\9dñ\9dõjA̳Ç];\9dLÌõÖ\89\15\11\98©ªµRÄõ4k×ã1Ä\ 5f¹óA(y\8b\ f)<»9|Ãù.t  \1d{\82\93\9aÿbÂú¢Y¼´`\88]`Ö®·®ä£/\94ç¿·º÷\ 4Ã\8c\8a\9e*\ 2|ä£{ò\1c<õ \8cu³}<\9bùÎók|¿`sÑû\9cå½`õ\89\10\ 1ëkYü¼Ç¯çi«\e¼\ fÃW\92þÝ÷í\rFLå\0\ 4\8a¨Cà\19ÔDO¦\81e\90ÁIt\8aÂ\7fTp\8e\9a\1c\96±\80\r²h\8cN\ 6\1f§ì<~\ 2\86æeO9j  `Þ\86
++\ 4)\8415Ö\ 5ÿU\8a2!X"l\87ò\9e¨D \84\fteÊø\9f/ú#\1aËfy \836\ 4\19¯+1Fó\ 1\9b\8dÛ±ãþóøt\f\9e\12\v1ûÝ0xðÌay;Ez%SÂ-5\914=\19  Z{!b\18\85ÑS¨\83X0ÆÑ©â£\84c!D25¨©ï©\13\12±\9c¸%Ç\86_w\88U\ 4<\1e?ñÐ@\82\aO\90\88\aG¢ê¡\10<\1ce\1fø\13\11ËÈ]ÄÌ}ÌK\ 4É8}\11\80p\12wð0÷Ï|^\aUL\82'áÀû9g@Ö&@ÔQfÃc^
++\e;Pc\ 2^D¬\92ñl\145M°\91\89èGì,\16        \88\94È \N\8a\ 3        \1c8 8(¥\19´x\16C\94yÒ,¼E\94ò\8cá¢\8bp\v\ 2\91>\14Ò\80¢B\ 6\86®e3köFÏ\93\1a\81\87/\84\19\89\83@hx&ò;\99Ïs\8açËw\ 1\ e\8aD\82\10Î\8fâÛ½rZ\1aþ߬Y³fÍ\9a5kÖ¬Y³fÍ\9aí\v6\8bÿ\1fõ±¿xÅüÖ\17\9aï|éòGWeüÊ/êqì!/`T5´\8fûç\ 3·\97|å8\9aØ.¸Ô\10ÿ?ºæEÿé\9b\7f+ãÿ\9d\r£\89ä\9f!®~\90`mC\9dÿÕÒÏÇðZþÓ7H>··\1d®?Rñü=u\ 4Nª|\847=\9dñyþ\19f4qGÍ_ßSçÿ\90ª%¿ô¬\97ü«\wQON<Tuò\87Úû˪&ÁÏïî5        BÁ\1a\ f«ó\9eº§àÝ*¤\8c[O/\80\85?Só³\87¸õ\1d\7f\88[_Qû\1cêò?5G\ 3áÉ%¹-\96>s.üex}û3g~oOüùÚÊ\ 1ù÷{Þ½#ë\aôùü\ fT¿<øºµy,Á\96\80~Àféó\13x\9d\ 5\19'\ f¡`©ÏT\9f}èÀó3v«E\8e¸r\v¸nSî½O\14\8dù\82õïª\98èÔÌÎ[2>k\Æ=÷\93>ÇãºWTí\8ba~ýAu\ eS3»n(ØmÑx¸¶êF\f±Û­u,CÝúûäs'àõÇû\9fõHnse~×\1fÐûz¨[¿YÚ¦è³ÇN¾,·¹2\87\95\12/×àµjû\17oÙ3OþÇuOÎÏ\85\9f\9c8´îïU3ï½*·¥ÂÿØQu\1cV=öÒ\9bò\9eU\ 5\97ßÑpäfÍ\9a5{\ 1\19±So\1dË\96Xíj®õ¯\ 3\17ÌùÁÉù.XbÁ\8e X¯ÙßcÜÎ3?×I"t³\91bª3\810Gùpªd\13ñJ\84p\89\97y\ 1á©´Nav\81t\9d&lm\12y\ 1\94\96¹Ç\87\ 3\99\ 6ÚR¿\9céÐ\9eX]À£dVsw¬\ e\11XM E*ú;R3ð\1c«JÞ·£
++¿ÊÕ\15´d¡\13LW¬\ 2 ¨\ 4.³±\ 6_\97©³Ì}\8føvT\92æ¯uÇ\87Ã\90\b\r²\ 2\85õ!XV\ 3\97!\ 2í8j¢\99)g-G\8e\9cïNÚ§ÄÂé&ò!\84\8c\ 5ßóP\16Âþ÷\86\v>[5#z\f\9f  í,ÚÎ\ 4ød#«\1d¹¹Zì{ÃÉ÷¦M/   ïÞQR\0=Æè\9cÃ
++"\18à\12¦~3¿_\94\11pÏH¦       \96Ѳ\80FÏy\98Ç\ 1a-\10D\80\97<tø^Æl²¦ü ¿?RÆ\1e\8fM}í     å<ü\18\95&\9cL\95{\ 4\15!}@øB\18¬cý\84(4\ 3>Þv¬7Â\ 1Ó­Fs8¬Æ\80EÕ.\11èÇ\96ÁÓ\1ev\1cB\82E\16àQ\8a\ ep;q],94Ø^.`u0 .ÉÖÐ]áÚ(Ƶ\8f\9c\97åÃfå\17Á\85\99«\14\85ÁCj\11Æ\8d¥Åöó>×§×\8e\b8+} Ì¸¦Ô  ó³\93¼wøZSÁ\81\eØ3¯\9d\8bK^\ eN\ 6\84\83Ã#ºð/°W\18\15É\92\8eD\ 2¯'\1a\8fí\8féa=ÆéSì­v\aza
++¾eäâÇHd.>\8b)0µ?`¿Á=\91<\9f\ eþÀ\ 34½Ha\ 4\922\8c0\90ÈG²¢\95ÀZ\ 5\18\11\ 6WLbßI\1e¾ætu@gð\9a\ 3t\97x#a^Ä\0\97:
++o\90\7fì]k\8c]Õy\9d« q\aÛ\84&VB\84«6N\8a\rvÈ~?Ê£\ 6\99Öm\r\ 1bÌ`0&*\ 4\9bÚ\98PG²\10mùA[J\11¸ÍCHu+ÔZ©\ 3\ e\98Æ\11\ e\98\80\10\11\96ê*¦8Á\10\a\1c\83¦¦5¤`  HÓoío\9f}ï̹3ý\81yÅ{I7Ág\9f³Ï~\9e{î¬õ­\8fj¡u`¡ºÀº§+Ð\0K»YÓ³\8aö\ 5n\83\f\0\ 6²\11¸aÐ\93\ 5F^\10\12À;"`g\8b´­hß¡:Ø\18\99¦\1d@\eÄÁr\82\1aå-j\8a\16i7ÒóÅ
++\81õ\89\ 4\vͼ6y\ eÆëJ\86Æû\8aTþ¿¢¢¢¢¢¢¢¢¢¢¢¢¢âp@\8fÿÿë\a\1f_zdçÓ\85¯\1cËÿï-qécãüGÊù'\1d\9c~)Ç\ 1GÝí¬-\9eÜßÚñ\89\87\13o¯,\1d\7f(\1dGüï'\7fqöü\14÷.áÿÿJñÂ_~Á\89\1c?o5\1d¿x\82xø©%§ùØxøë\vÿ\7fâÁK\12ÿ\1f¼¦ã\17\1d\17K\13\9fï\84\1fî,/±ßm>\7f{âg\aç\118¦´÷\9aãWsÜ»\94\81ùàE%FýªÑaö¶G\1cR*»aJÓ\9fvlûÕ¥ííØöÛ\8a\ e \1dÛÎÜûà\1c\ 3\vR\198í7O=\97½ôñ·åTöPO#p×Èã9F=Ç~ïIý\e\1c\87>R®Ó\9f\18söBñý8ßÁ¼¡AÞýW§¶\@\9f/ËË\ f0\9foEÖ$\14íD\9bë\ fE\aÐöîß\â´Ûqá{ÊÚ\6zÙÌìÏ\1fùºyå~í¸pÖ\8a\fÖ\16l+sÛÖ\16\8c\95]9+ë\a$¯¥ÙÅ\7f í³\7f{ºnp\øôI4\ 2\97¦²Á:\0\91æopþú5e\9d-\19ÝÄþüQyæóg\97øõ¶\97þ+e<Ï\1e\9d?3{w¤\98ÿ\8a\8a\8a\8a\8a\8a\8a1¹Ç{±ÌÂÊâoÐ\8e¹\9fÈ\17b¼'\ 4hr\ f®YZªÁ8/-Þ|­¥\8bá~ aU 9+:<)\84tQ\83\8dD,²°\9e3Ø'¶2\98\10\87\ e\ 5\9fÎ\9e\ 1Æûw\98«eO~mì{á§\9f=î'Ò2\14\9f\82·éSÿ®Ç\8fÓ\18\8f\9bÒ*SaL^\8a\18£¡×CT,-lði)Â\19"\99s¤ñB¡\81K  "æa\92\ 1ë\ 5\8d¨z8:ÐÔ;ú\8f¤¶Iók\14MªA&\ 6h",ì\v\1cÈm\ 1\1f\88ä¶\80\88\84ú\ 1\11\91¡vÐ\1d#ÄDQ¦)¤WgZÆÎ!±\84£ºíÿçÁâ\ 4d4tj\80=
++\rK\98Ô?b²Ü\e\8d'\8a'h\bWh\9fùæ\9aA±ø&¹FЮB\82\v\93\\1e\14äJ4É\96Öe²j¡\81A:\ 2Ø\18Ð\92\82Ë\ 1í`j\11UF=\86é\ 6]J3&\90ÀC³vb¢<\13\ 3¼$\8aö£òÿ\15\15\15\15\15\15\15\15\15\15\15\15\15\15\87\ 3züÿ7þiÆÞñ¥Gv®+¾Þ7\1fc>\97ãóé8Çi\83p¼eöé+\98oWCÝÎöâÿ?çû\8fòù\ 2\82Âÿ\8f\8dó\17Å'\7f¬?ÿÜ>?ü~\1fþK\8b¿ÀX\1fþs&Ò\11\14¯ì±:\82Ù\85w\1f«#X\93Î\9fG\9fÙ\ f\1f·#é\ 5d¤ó7\17?î±¾ú³\v\a:VG°°´sù\93ׯÌùgn{Cº÷×ès®\Éqó\92=L\87\94\ðí\18þ©éºÁ¼þ)e|Ûñý\9bR\e\aûÒï.~öoLûcÖ\11h\9fËæ\17^xåè\89w7z\80\9c{>\8dÇ`?û\87\8eê]7ÞÏ~}\89\1d_þâÇ\1eÈ:\ 2\9d\v×ÜÖ\11,(u®\1a\9d¯³\9f½è÷\9e\1fì\190?õï+ô9ÿÀ\1cæÄaÞ\9bÊö\17/\89ÓNX̼¾Lv¨ð`8º\99\87?}`%óóÊ\ 5æ½\7f³\8cõ[G­z\86õ\01s÷¬\7f9\83>\8b^¸ø\e¬\a\10Y³±§x\r´ý\ 4æ\17ÍÆ²\ 3\1fùPÖ\ 3díż¢-ik\ 5ö\94qY:ºà®¬\15\b\öHYûm\1f\82\91£\9bû}þù/u¹,d\8d\ 1ë\1d\ 6ë\bö\96u=òô¢[¹,æy__ü\ 4v\7f|   ë9b£\85\98[ô9Õ\17 ¢¢¢âW\aM\9c9\88.\87¬Ø²ð]\83|Úa\f¯|t\ 1\82;\80w^\ 4\15EòÈ7Ñã\v\!
++>Ð\eNb¶uÐ6¹â§|á:1¨\85g\9b ^<µÉG«\ 4¾¿@»\r\rMÆÿ\râÐ$ò|OÀå5ñêC}ñáï\ 4\1fo1L!ÅU[ê;b\87=\1c\14\fî#R8<½Ô*\1aN*\15J¤Q\90ÞÂhÀ
++:\1c\ 3"ñaG\1féÂ`\1d\1cÓ\91¼\9cZM£¢]°\81SCh°\8cHjnà,o-MD4ôÊL/\85È| h6i\90ìÐX?\ 6¤\86¢WX\99\ 2¢\85rÆE  K|\183(z!vô®FÃ(\91çAÀ*ÝiDÁC\1aì=\92\ fx¤ §&E\84R;ºÒ\eØL\806¦&\82q6Æc\96\87§a\87\ 6B#\ 3FDD9Zb`g\0Þ[\ fÊ1OëHÃT\ 1Î
++"ùµÓR¥5H\9dL]¦®ê\88´ï\ 1t;\ 4\17àû%uÚÐBÓ)o\0è\7f-Á·\83\90¶ï|,:X\7fN\18B׺ÉófÐ\12\93\b G¢\82Ì\7f·âéßf\1e\87AùK&äÅÁèC<\ 1Û|ÍûÑÓÌökCLÒA\v\18\98ó\8c¼_½=&Ï¡A3\aÅ\br²@\10\8eþ§\a\98¡e+ñ\1c£\ 6¤µM+\9f6,\9a«Ø)@ù4ÀÔ\ 2\f\82CWp<Ï\9fÀ¾R²ÉÃq¨óºTþ¿¢¢¢¢¢¢¢¢¢¢¢¢¢âp@\8fÿ\7fì¥\13®\1a_zdç\86ÄÛµyþsJ¼ôÂy\9fx4Çþ\96|õàù\9e?8ó`âçµwÃ\9d0I¾õýÅ+¾Íyo)üzÛ\9b~y©säî+ÿ\9bó\91\vÉ\9cédñãÿSÊÚñãë
++\ f{þ¾5'çXï\1cÇ?RøÍÇÿrÉϲW|nË\86R¶æþÅìÏîbಭ¥\9dm\1eöú¾\18ê±>ë\15\15\15\15\15\15\15\15\15\15\15\15\15ï=&Ë\9d\11µãÜ\ 5ÂKx.4Z\f:) Q\83S\ e\ eaÂöbôûõLÒ*¡a(a\92V _\v\93\0\19l_N\8f\894OÐ\81\1cbH\89BÔ8­Nã[Qãÿ+*************\ e\eôøÿ¿ù5y`|i·scáÊÇúöß\90â\87á\85\7fë\v\1f}$\1d\ f\88Ã_W¸îþxûáN(>\ 2m\9fûE%Ö\7fõèïßÂe10?αë\88ë¿ê¿\94È~õÙ;\7fa\89\17oûÕ¯,1Ó×\9ev\19k\ 3¬ËurþrÔyþózcæÿ\15Ç)o\9c$?ûd1Ó\9c¯`P\9eõ\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8aw\và\97\8dÖ)k½\83¿\ 5âûµ\81\91\ 1òÚ\a\18î{d®×Âà·\8e\94Èh/\857\8eÎ\81q\97\8d\89ÌF®\0e\92\ 49+\9a\\f\13ÅÿGøÚ{\ fw\85\888v\15³\87B\88ÖÓo)£\94\81Ã\82s0\7f\10\ 2)\11\90¿^h-\82\97^\18g\851Zp\94{\88Ñ#S\ 2\9df,\D\90\1e\0i\ 1¬¥v;8dÐÝ|Jà\ 6º<%
++°\89O\aß.RV\ 1\rÑ£3t@[!£\85\91\85\ 3­Nc¥\fý\8f\rZ¡ÙtCI\ 3èi `]¡\11Ùo\9c÷ÆÃ7$\86\94K\r\ 6\ f\12\19»@¿ÓÕ*À\85\0\1c\ 5\1d§ipt\8e\89Ê»Ðè\ 3r>\90\89¼I\92\ f\bõ\9f~}ÃmÀÃ\b M\10Ü\ 44Ò0h\1aYj<\8d%Ò0Hc\fü:"F\vî!!hç\91\83ÂÐLÂhCÖøÿ\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8aÃ\ 3\7fÖk\97=1¾´Ûùj\89kÿÔy³^æ\18ûèº\9dÝ\89ï¾\95\7f4ãeæÂ\9dévÖ\97\9f=xÌ\17\12\ f\1eáç¿¶øç\8fõáï¦óÿ\8e>s^ù½\14\8bï\8c¢ú\97÷ùê_òdòÛ÷:v;·§ó\91\8b\99Ó\7f\99üö\85\14Ã\9dÛzú\82\1fëä\83\9d8\ 4n~{ú\e\aü\ 5¾{ï\12ö\17À\9f\84R\19ç\r@»®9~õ³ìÅ/s¼ÿÕ%ÏüR\9d=õ¥\8f¬/àxÿÁz\86G&ñé_\97ê\1cìÅ¿²\8c\8b\7fá$^ü7\17\8dÆ÷6,Û\99ýösn÷ýS\9a:Ï»mų¹,rÙ\814.\97Ðçç[®x!\959o¸\ f;'ñÛï\16\ føU;/¸\83×\84\8aýÚ
++ÌÏ\96\13Ù#\ 1\16¤|ݦ4Gð¿\7fâ¾\95?f/~kÙoÿ\88T6ا\7f[Ñy´½\1cÞ*sÔörØ=¥¹ßç·®z\8cˬäyØZ<'Úþþ×\95±^6ºð´Æ\ 3\82Ûy}*\eìï¿3­Í¿ÂXßyÅÞ\\16¹\9d»\8a\17ÿ®-#Ï\8eõ\8eX^rQ\ôÄw$ûû{Ç㹣짥£ÿþ)ÞgÊðý\1eJ}8\15}\98v>ßÏÛ<.#i\àÃñê×\97²\1fE\90\86×Ë\8cÔ\96oÒç\9c§¿w\ f\97ù¼^\1e)û¨íï\7fÝ$þþ¯\97uöàßÿáOûõ/4ÖS\9b:\7f÷\89§>Ë^!ÂÊú𭨨¨xÏ\91âFé\v\1e\9eñ`\972\9f÷AÊõmèì\12\e\e©\rôº\98\12r'ÏuæÐ\14µFZg\9c¤\9b{j=r­{¸¼\vº3\bA0\80R\18X©+a\1cl²©\ 6/-½¨háé\9e\12\f¥¢\7f« \ 3]\ 3æ/jÓ\8bË\9d \7f:lÙ%\82\80\95§º\86\1f
++\9fð\ 1y\v´¢ëµ\83\89¹×\9c\97À#Î8\9a¡\î\r²Â\9bì\8f\8fÔ\ 21xXÍ\8b4~4­4    È/\ eÆ\16±Î2\1a\8by\vô\8aL\97{\98\8e\a\81\91\ 6\9bZ\84U\10ár\1fA8Ó{(\18J\11¼ñ\98\9bÓ\12³\80\9a\10\ e\ 2tkOÓ\17\8cW1Ù¾KÕ\8b\8d¦\91´È~®\12Ñ\8c\7f¸\94ÃÝÒ«\8eL©Ò½\95ýã©-\8d¹\vÈ2 \85ÇÚU¸\ 5\9d\18"-Aê\8f\84S}@f\ 6'è%\1a\1d¥UM\13f<lþ\15\9cûÑ\14\13ÁE#ã:] <\15ÐùΠ\99ÖÒ²0\96.\bh\81\94\9cà\0Q×αÇ}¤r¸É{\ frZË<î´\ 6m\9c\84ç=ä\1eï)g\0V®³4\19\b\rÇz³ý±àïÇü\r^a\17Yc\90\ 6 Ùã´ý\13[Oí7M\fûD9>\ 4æÆc¡ÑÖKù\ 1\10ª\8fl\b\966\8f\bTQ\10tS\81­E³\8f\9fo\86*¦µ\v%\ 1$\ 1ô31:K\9dÓô\b\88\ 6     ;\ 2\9e\854>T¹¢\9dLÏ5A\15)z\90H<A\8cÃ\ e\ 1¡\90P\80n@\9d/ks\N\8añþþ4oÚ%}\ 2-.zæÈÜ\97AZ\8b&\97\ 2=ThY[\89eMõ\akiUbKâ9AÏZè/èá@\1d¥Í\8dl\11Ô*\83ÉF\e*ÿ_QQQQQQQQQQQQQq8 Çÿw§­zl|i·s}âîî ÏÌ׿,ȼºévnL<!øÅÕkOz\89\8fkÝÍü!øÊ\93\ e^s:sæÊv;[û\8eO¿\94yáHç3çÝÖ\11ìJüå\16úÌ~içÏ\93¿\80ð®Û9¢p\90'¼ñ[¯¥ã\12ú\82\ 3¥=ýy\aº\9d\9dåø\8e¥³_åü\ 5.v;s\vo|ÅYÇý\eë\b´ìvÌ´¦\9d'\1e\14KÓq'|ãý?X_\10J\9b^½ù\8ḇ\vk\98\87Ý^¸ëóN\1dù!\8f\87É\1a\82O\97:\97?ymä2'¸Î·úò\1e¬¾\8fõ\ 5&óö\vJN\86/¼0g=óï:û\1e\95ßÞóDhå!\b©ß\83¹äýeî\96\8c\9eywæ\92³\9eaí$¹â\17}¸wÝ\9d\r\97ì¹\9dÓË\98ýúðYÏ1'ì\93ÏBEEEEEEEEů.2\ f. )6Ò\e\eR\88´V\ 2é×Áê:¤\95GÊö\14\ 2®\82qF     £\91Ö>i\1e´J\91Ð"zë¨\8:\17ê\ 5\95\bè\18é\9cÄ\8cJëé=Øxí!óÀ«»w\16\8c¯\8f8MYÈJ,ýdPÆH+\93l\ 5r\14\17Ág;\9dùÙ(Cærß\16ï\9a¸ßè\rÝ\f\ eò\8eî\1e\8cQAD\aý\82wQPÓ\ 35\89~<aX a±\10Ü\b¤\9dOZ\1a(g\f\ ey(vèW\90\8e\ eê\8d¤\990 ¦cp\186z¯öÐÒ(h\1c<\94Át\8dÐ4>N¨¨\ 3µÏÒ\98\ 6È\11¼ÔÚÑ\7fx\9f\948\b §*£\84h%ÊèhF\82\83@\ 4\12 :j©ëÑË à\1d\80\98rhv ì¡ÆzG¿¨P\e\1c\aR\0º´\ 6â\ 1\88\114ÞÎÑ\156éS´¦Ñ@\88<d.ЩÄ<N\13øÜ\ fõñÿÙ÷Þ¡\9e@}\93ÎY\9a>\b&\84Î|ùdÞøR\ 5:`uÒo'¾Ý*\8b\18û<WP:к\140Gðù\1c\9aRLVhâ÷MH\1a\99Ь\8f\85÷\9d&¡òÿ\15\15\15\15\15\15\15\15\15\15\15\15\15\15\87\ 3züÿ_|å\82¿\1d_Úíì\19Æÿ·ùÿ\19I\17p!\8eïØx!Ç\87[ßíÜ\98þ\9e\90ü\ 2¾4÷\17\1c\a,e·3¿Ä8Ïùþ£\9fããàá\17¦úÛy\ 4f\f7õü˪9©\1eëPÿ1\89onû\ 5lKç#\9e{ßE¿\91ø\7fï=µs\7fâ\99Ûüÿ\96>\7f\81u\89\97\ f\ 6õo-ù\v¶¿8ó\8dt<:Ñͱäm]À¶Ôß\eé³ôÎs\7fÄã£dæÛSYâéG÷ýc.³Ì\9bß\96ÊÀÓ¿¹y\19ç.\80­d*ÛUîuÕè\ ff±.@\9b\1c\9f=Ü+\eÖY3\90ó!¬\99$ÇÂüÔ/Ä¿yê¹Oå<
++9\8e|ná÷ÛÞ\ 2{R[~\87>\8b¿µìù\\96ãÁMáð·~ûªý\\16\1cÇÉo\1fnú÷¯3\97±îÁ*Ç×m+±é?¹wÅsì;À¹-\87;kÓºú:}Î=m\15ß\ f\81f©lg\19\97+G\9f»\97u\ fÞrÿDêÃ<ú¬7\97pÿ¢ó<.Û§4kãÍo.gÝ\ 3þüÉc\9dÚr\ 1}¾,/ç\98v\ 4Þ¤²Íe\8d,\e\9d{?{\ 4\18Íý»úè^Ùe3Ù#@EnËÜÒ÷·\8e\f\97EÃqò7Lâ\1f°²xQ´=\ 2¦\97y¿xôhö\ 1°JñzÙ9ܬ³\8b\9e»é\14.\vÙsag_>\8b\ 5I·¢\9c\fÜ\96\rÓzeã½\ 5Ìp3Gmÿ\0Öu\fÖ|°.h°·ÀHy\ 6´½\ 5\8e-ý;{tû\9dÙ? \8fÙ®t?øi\9cµï»w7Þ\ 2ÜÎMåyóÀM\7f°\9fËL^g\e§5×\9dý\9f\1fýçT\96ÿ\1e\QQQ1\b\99¿á\9cÉÎ:Dÿ6<\911*N\12ÛûnûX[é{±¥¨=ÅE\e¯\84\88î\ 3Æ­*ÄYS\99Ï1¯\bpG\1fi4\10ʬD\9a\ fc\93        w\13/\8b\10|°i\ 2ï@4O
++öÜ\8e\1aHïfH\97M\17Ò\88\1aï\83\8c\9eÎI\81ë\16­VôÅ*10\88Ë÷\892¤&Ù\88o\7f8\17P×é\ 5Õ"\bÚ!ú\9fz\87\97\14Я
++\15     \18§ÓD\v\99yE)\fÞ\8c|\93ï{`Lò\ 4¾\ 4\87Â\ 3ÀÓ\94÷¯]\8e5§R     Ç\ 6ZM\91Î\15\81æ78\13\11`®@íÂ\ f\9e\16\85·\88\82§^à\16Áó\1cx\9a{\v\12\9a^\9a\83¶TL\vYhOËÈÒ@\80ÓE3i(=\9cÒ5V>­^Z(ôVc\10?néÝÀ v\1dwPÎGÙ̯\v°\8cH\ 1ÿQ\1a\84\9a\vð»´*C\14ð\ 5@\86õ\88é2\88\7f¦AA\87%æQ¥é£Þ+PÅV\81e\86³Cr\9a\88ÞɨÒÂ\ eÔ?\8d{F,8Z½
++ÉÚi°=v/-?¡°\19\1cBæEx_û `\e:º'­\ 1zrdß|\11i\8d{\ 3¿
++8ÖÛæ9dÒ
++\164;4\94\86ÓÇc8¥F÷m²\14\80\17¿Àá¨M\90P\b`;ÓÈFìD,\10º\14¬4\8c#tyÎø\0ºßÓ\1e\86\97<=\8fhÿË\94½\9e\1e\8e\9aFÒYì"ª\11O\ e¬\10\9a<\95¤\ 1Ö5¼ý\80\ f\92×\bÞ"\1dÔ\1ay¼é¡\95¶´ó!øwXÛQÖ\83¦\81\15ôsKbí((LzkÅÒ\97\ 1Æ\84\96\14m²t| .¢òÿ\15\15\15\15\15\15\15\15\15\15\15\15\15\15\87\ 3züÿ\8a}÷m\1e_zdgcñ\1f¿aξ³\99[tt|y\89A¿eöé+\98WWCÝìÿÎqþ\8bÏ̾\0²\9bãçQøÉ+Ox\9d9_©»\9dµ\1fî\9dßï\v°£ðÿcu\ 4¯¤ö\80#ýÁÙsþ7\1d×ÎvsL|Û\17`wiÿÜ\83&yÀ\e+¨þ¡\12\v?6\1fÁ+ŧ}öS¬;p.\86ngjêW[_Ðã²Çê\vØ\9b}\1eêyø¸\1dIG #Õ\7fõpSÿX}\ 1\8fÏkÐíÜX¸ä±>\ 5=/ö3þè¤Ô\1eüÁk¸sYá\82Û\9a\83­e¬Ûº\82cÓx|\8d>çÊ\95ÌÉ\83Í\18êyÉ£ï\7f¾\85}\ 3¤²\82¹ç\8d\85Ó½|×Ó\ fr\99³ÌÍn(c¿zôgSXs\102\9f½¡ôkÆ]#\8f7\9a\83ìa\90ê\84\8fþîï,ú)\979Ëm96\95­£Ï='_ø\1f¬+0\8eyâ©E\1f°jtǽM>\ 3æë/M}\18¡Ïú\9b\16ÿ\84Ë¢ç>ì)^\10ú3K\1e\81P<f\9b˸|ûc\97ïå2\9dùìuýû\8dÏ\91 Ò:Â\86:9,Ù\93Ë\14·eoÉ\9fpÙS÷Oå²\90óQÌ.¹*Öl¾d4k\1c\ 2·eo\19³¥Ç/á|\14QI¾®\97\8fâ\8b»®ùm.3\81Û²\7f¸Y\8bmmÄÂ4G\8bésÚ  \8b_dý\83ÎíÜ4µYÛæ\88\8bY\8f MÓ\872·mmÄ®²^Ú¹\156\15\9dÎÇg]1\9au\13\9aû·§¯Îñ\9a\8aùS\9b¾ß3tÅã\Öh\1c\8e\8e\7f\bYßa­ç:ç\17\rÀ²\ 3\1fùPÖFäu6½ä$ùåÔÅùº\905\akút\13+ï`Ý\84\88Ü¿ýé:hi^¾gÅ\ f¹Ìçë¶õ]wÂ,ÖThÍc=·ÜoÑÌó\9eÍù\13$·ekyn¶õ\ f\8fLmúÐÖ?|µ<'Ûy\17^/ëúÉÛ¯}\86Ë´åûm)Ï¡?\91g<Ëþ\e&¯³ç¦6uþÙ\91\vG¹ÌfÍÈ\9e>\9dÆÆ)\\16¼©_¤\15\15\ 31\9eÃ\9e\80·\19\13[<Î\9b½É«í\94
++Ìý¨à\15^|\8cÕôøLÉ\85\ 6pèÌ-\e\11\ f\ 1oG\8f\0Ã1´p%§\8b\fXOº\144»2\9eN\v:¦àa-\9dñô¥\8c\81Z(BHÝ\81\ 5\83´t\90º\1f\81\e\98ì#\14\18´-½\ 6\80|£/\1a\87`]ïè\10â\8cÁ\90
++A\ f\ed(§\978:\eüVô)Ë8ÝÖ*mé \ 1kFÿPÆ¥|Ú\ 2Y²}´Áò÷hÊ\87®@ç#\199B\93\8dð=îÌ\ 5Éý4à»!_ æÐÓ\8fÞjÀ/ÓÛ/½à\bëé­\90\86\9f\86\ 2\11¸Ð¾R\9f$(o£­¡9\88Î\821\ 6ß\ fûv\r&\19öòÔE0®ZÁ·\9eÚ
++²[\ 4D\ 4\83÷\ 3CO\87¡ø É\ 4ÿMËF&Í        B²\91T\1d\82\91&\ 6\19\88\9aÆ£[\1aa£sÊ;Çù\a¤ED6"\90ñªCÇpS(&ÿ\8f½k\81¹¬*¯ÿm\88Ü\19f\ 6\94\84R
++¶\ 3\ 2²ß\8f
++\94R)\8fNy9à8Î\0\16¨È\f\ f\91\18c¤%))(\16°µM\13\80\84Á'D\14*\ 5L3I\89\9d´c\15E\8a\80\ e#\b\14jEhÚµöwÎùïÌý\7f\9a4¡"ó­äÌãì{ÎÙï{öýÖ^\8b\9aìh.d30jÌà~@±Ð\86\96AVns\8ex\87«¥ñ+¢k¹¡J;%¯\8c\1d\9e\0W³uÝ^èÆGAGô4D'\83À´½ÞµÕ\ 4\9a\83\81e<\12í\93Iú@ëÑ\ 5\1eÏ¡ûBf\9fD\eò«\99¡U|¥\18       ÎÆ\1dù8\94 gd´\ 4ªï§^7}¾xçäá\eÅ\81ávù|-ÔÞ'\ 5\83\18\ 2^Ú¿çÓÐO\1du\85f¦SÀ\84§\ 2ê9³»\90ÔáÑ:Y|\1f\1c{\0޳ɱ¨¶;\87&\90¿ÑШDÓ¨
++´\11 b~E-\95bY[\18KµÖH÷øÂÚN\8eÕÃ\11\8aúÀ³IÙÀ«GäS3cÄøTW®\85öº÷Úð\ eã0\ f\¦¦F\80÷ï\9a[[1>ý2>\ 4±\ 6nÕg\9fÀ\0Ç\Cã\8a@÷ø\80Znv\fX0¡àh^o¸©Ü£\1ffÎG\86;ÙI\ fâÔá8DQ
++´´óä(a\98'\83Î\900ªÄÒÀ·Î\81JAO¥#\18¦\84\1a°\1có\99ÕÍQ\8f¢\95\9e\83Õª\fÃÜq\12Eϵ2&\rÝ\10\v\93ÑyÉm \8f\ 2ê\93Ó\1a¦\1cäÞ\92\8fãÐú\95.h$\13¡«\93ISÉ\12@u\92QÑÔ\1c\18öG§\f¼3f\eG1\ 5º*\94ÀWîB\8eDm¶\ f¡ç"í¤!@Å\ 4:8Ä®ÏÑ{\83³m\9eè\976qÜ;;è\10,àuÑ<\13ð(ö×4áu!ß\158\8d1V(GáÈ\1eË)\9b\8a\br\99\e½È\93£\82\1cÖ@\85\0\92zjÕø¿B¡P(\14
++\85B¡P(\14¯}èú_¡P(\14
++\85B¡P(\14\8a]\ 1süÿ\ f\9eø\17S¿\ 5ìÞé\9c\91Wüñ½\82èö¹03\1e}|\ 1\9f?ñá\9bÖ\ 5¼¤ñb¯Å±òÁý\7f*¼zòÕW¶ÏÏÏW?~ÎsoJÏnõÀß_ý\85\v~(<iÓqi×\ ezaïúÑÛ\8eê4Ý:>÷\95\83\87\8f\/ÜÝ\98;\ f¼ë[Ú|ºf
++\85B¡P(\14
++\85\98ÃNû\9c\8d\8b_\93\12c¢ì¡\bM¯ÜP\80±V'×ÑËÎ÷\9cøWP;ï\95Ô³\9c\90»pªC\86ðq\e\93ʰ\96äûФ\17ièGKÂà­Áø9&Ød\13jÌqÛ\12\9fïp\82Z\93\14\88§ú¡£\13!7\8eµ}<Ü;\8cÕ-
++\19Bi÷\8aÜ\ eDÇD\1f¸»ªÛÙPMÓ\96M\96;°"\1eà4þ¯P(\14
++\85B¡P(\14
++Å®\0]ÿ+\14
++\85B¡P(\14
++\85B±+`\8eÿ¿ýÇ7\1c»sêî£û\9a\86ô´Îÿn\8dcÿi\1c\aüø\90ã\85·oÃx´|Ðð>ü¹½ÞÓö\vÔ¦Ãß~g¸\ 4ÇuOí½©éð\97\9dV8ùøK\8e{ã×\9a\ e¿18¿iÐÃ>ô¹??¯\9d\8dGW\ e\1aÚ;êó?0èá\9fðÂáMÏ\9f\12¢ãÑ\r\ f\r/¶óÞò>MÇzg½ýE£mÃþ\80}o9Kté\8déôÂ7\ ey}ñÖ>-\aÑ\90_µ¸O[{Çêû»´*\1aÝç\ fe?ãÀuß\92½\12Æ\8a\9eö}{ö×\9dvdw\1d5\egæ´ç¹ÿáüï|¸JZê¼é·íÙ×ûþvÃ÷eo\84«\92\97ó\a\8dî\8bg/þ\8a¤\85Úéî\ f\1eóïÎg?!\9aü±ËË\96Acý\9e\9bÎÚ"ºû®Ó\12¿¡Ýs~Ý}Ñë\9f_[ÿ\9b­\fËq¬\7f|ÅQ²\1f¤võ¹vqß6çm[v\95ìáHNÊwü å\7fÁìÖ;:\1dü({?BËçü\1aù·\ ezïë\9fzøjI+Q4ò7/ë¯{á×ÖÈuÕwí·eÏ>íÅ[:\r\83äó\88ö¼?Ãqú\93\87Ⱦ\10S½\·²ås~ýü#Zùæ×Ï\7ffY\9fÏé=*\87\ eíð\91\7fKÒj\91çí³¤¯³Õ[\ fûeÙ¿b¼\94ïÍÃuÓ{[n\1föÄLëàß:¡Y\7füçEÏÞvzï\87.îÇÕew\9dñ¸¤Õ"}bà!ÿá\15â\vá²é\9e\86\8eÄqùÒÓ\1f\95´Ø\95á¾aïÐ\9aÙ\93Ä;\80n«-Mü:nÁqÊÃ÷Ü&i¹ë\83\9b&®ûÌu\92\94A<\1c>\81ã¤\87îºyR\a_¡P(~\96è¹­%%\9an\97ÚÔ²\8bãDúrºÏ¯2\rz1\12·eðÁ^H\8fÝúä\9bþ¸Ë\85Yl\1aÖÆzkÈ£\8dt\1d2t\r\b\86\81^\ 49ãá!Ô\88\92\84lc-d\0ãk\81Ü^\8a\8d#;>\94\14LhÚý\14B\8fÍ\17\9c\85«H¡\96<n[c)­®kÌÔëvdÜâ
++T\9c-ÆÐÞ\80\1e      Æ£\9cÙf\13R4\ 1ù¡»8=\8fðX\14\18\1f\v\8d/KkpZ\1aÄÈ\97!* #«\99®\ 2ThOÍ$<\ e:ó¯\8cþ}k&T²¥íC!\89×̼ÒÚòd\ e£\14ÆMð³Q\88h&½ \fÕËKÅ\9b\v%ö]B÷±\ 6­YQ\ 6W\93I\195ÆNâÚ[\8a+ ÙD\7f©x\ 5DN\ 3Z\bý\14\8f®ìÀ       WæÀf¢­;ú\10\1dáC 7R\bM\ 3½\ 6Ô
++«·b\fÑ\91\80*û¨\96\84×1\f)ñÑH>ý\9cùÉ/äG\81n\96i4\10\ew=Úö7\a\ 1ë    íØ\f\9e\8a }y¶\86\8cW\9e3-W\19\13\0\86\14Iê8á1ßÔÈ\86K\9c\8að>\8b.\88\8eP\90+rÅ©m︸Él*Oõø\902\1a§XÇÞä1\8f\91xϾ\84;       \9b\1dí\84^\87O£t¨~ǪK´1©.§Ò\95µ\rÖ\84y\85Ôu*íÇ\18P\11\1c Tå/\1e\8dÑ\9c
++øNO\92{F9ÙÉ:/\14ö\1eÜ\9e&\156\97\99\1d´ðQ}¦ù"\84À1\87Rào4MÛ\8f\80\1a\8e\vpòé\81\80aXQ(n*hÙ'Á\1fý&cBJ´\81@&s\9b\92h/Ãi\17Åe} Î
++}3*Ê\81t\93ðÙÚF<;3\8d\10\+­\8d¨Ù\82é+³M\9a#\ 5æ\1e\8cë\ù1´paÇÄ\f\8d\1e\89\1ab÷c·Â4\8f:I~fÎ\ac\1e¿\89\1aÛ\9c\8b\1e\94ä»\86S=úmíë\1d_\17\98\ 5|ÛÎ@³5£ñ\7f\85B¡P(\14
++\85B¡P(v\rÌÅÿ÷{ÝqiçÔÝG«\86\95\87|ÿ$\89\e¦\99\8fM\ fì+Þ¾ß?uþÑf<Ú¿ÅC\19\83üÜæ_ü\87\16çwÑ\8fG«Z¬p:þ/ñÓ?ÅqÈóÇ}»Åó\83K¸ÿ\10ÿ?ì¹\ f6Oö\14\9d\1d\8f\96\ fqÓ·>\7fNó2çÏ$ã\91i\9fç\1f\1fý÷<ßâù6\84E£-í¹WãX÷\99S¿Õé\vZ\895®^Òçi:.¿×\10k¼hö_VH\9a\ f\12\87\>ð\0þêÀ3ÿµKË\12·Þÿå4\v\aîÂtÌþè!í;\9f?çiIóQ\9e·ï\10\9f½xö\84k%­\16\89³>0<ïܯ¿ÿ`\89ç\9b"1æ½\96Î]wÍ\81\92æ\92ÄK¯l×\9dÊëî\7fIâò>\ 4¹§h+þ\ 6ëåsg       G\80?Ù¶´qk/ò&\1eþâ©Û%-E¹nÛÐ\ 6w~ñ¢m\92V\92äeåÀ«07­ùºp\ 4¨$Ù|Ê\17÷}ÉüÉ\99=\7fÀI>\9f\1c8\ 2ço?ö\17:=I#ñîg\86¾yáìÛ½¤%#u½²\95o~Þ\81ø¢³\f«^wÊ\ fº´\8es±ÛÀ\17yÏS\87Ü ü\ 1ß]wÉP\9fÓ\9c\84¿\Ößóö·¬\91ö«¶ó§?h\8f¾\8d~ÿ\9b\97þº¤µ\9fn\91f\96õuö\8e+Nïx\a¹ë/ÂÿØ\80㬭¿µ[Ç\1f0\9d¯ýP\9f\97~f}\e7ÎÙ®ì-û3§á8ý        ¿±Këêú \81\ 3qùÝ\eäy.\15)_\188\10oZñ^IóÎËó\8e\1eÆÃÚÙM\12³\ f!ÈóÎ\1eæ\82K¿¼Ax\a!\eé»ÛZÙÉ\81XwïZ¹g(¶\8bç/êË0ÍWØwàqLó\15>ÔÒ.æón\ÿtÇWèúĪ!\9fÓ\\86#öèóùÎ?ºè»\92V¬<ïÑ\81o²föä\e\85[àº2l\9eã\l?n¿\96Vû1¶yÑÜu\9f=PÒ\\96´Õ­ïÎÇIX4z~Ißîw\7fìÄm\92\16\92Ôõ%Ãx?iö¢ë$­vsÖÖ=æÒÞ~\80Ì»®ëKÂ\9dà\1cò\ 1{ÌcÝ\9cÜñb\8e\18øQ¿´èw·JZöRöû\96ÌÝsã\1e\92V²ÔÙ\93\ 3oä¤\1fì}£è¿\8aϰB¡\98ÆÏ ö¼\83~\16=Ûq\ 5\8dÚ9e\ 6ÇP^r\ e_\8d\99¡{ÌkT\88ʹØ\9a--£\196d\84Êe\92\r\18Ù«Ùçf-N\ fì\8aÛ\19FDQ"o\90ãÂXe4±\ 5âK¤ô\165¥Hl(\15\856öU\1a{d\849¤RC\8b\ f\17Ò\1a0   \86\0îPI\86ÀÙPMÀ[FµÂÍ0Ñ.àÁ\8d\12$<\8eñuÏú§Uz-\99jc,"òíIêÃe¬N\8ay1ú\1d\19?.­ÚÑ\98ÞÑ\97\9b\ 1P68&^ç3£Ñ\95Êf5'\16/YÆ31%g\ 6\99ÑC\18\0f·`íâÕÌ£\1eLÌèH% \a\84uu\87Øh\88\8cS\17Ö\12s\91sW\86\84&(|Lb,ÓT\83÷@\12\10ð\17\9b\13\8dΠ(¾\9c\fÈ\15W\17²^\13>\13\1c2\8eúG£9´\14JëÌ\\8còÿ\99ï!ÚqÈ\10¥ÐÚ\98 YÂû\14\ 3=éq×¹ú FZëh\1d_%\94Ö6\13÷Á°\(ÎÊ`­C\vuqU\92\ fp-uïÐ\ 4\19]!/\1co\9dl\8fª6\8cR\97X)Ô\86LXvxË`2\8aH\ e\b®ôè \9c\e0+ >És@\87 ­\ 1\83\16ÓJäû)zy0\94\92C­²r<Û£\90\16\11]\8c\83MPL\r3\1dwÇòYÈ\ 6Æ.Ëç°¢èËO\1f{\8cðħwm\8aQ$÷ñ\f\9f\93\82433ác\1fÚ\98Ç\béýíÑG\91;2.\90éj\e«\b£\v\ 3\83á\ e\18fÒß\9a\92^äÜ\12,Ç:*°='s,c\88YjÚ±\e¶ü9R(0A\ 44;§(üé8\ 1qºÃ\ 4Æ8<\8b\84\8dXÑ`\0f\96#Q+\ f}ÅTT\1e©\ 3$Ya\86`oÊ\94)L\1cú\19\13\87\8a\1f8=Óº~xR\914T/[®ã&ÌÇ;ð¼0¢¸\19gz®\86A¯æô\13c\15nTd\9b\17VKõäTaðp\8e#\97Ø\91Ôáä\e"cvv\96Lu\8c\ fCz\15Æ-j\89\83Íò\7f\18á\9d¦"\87q"Á ø\98º¾J\8a\ 2
++\8dbRp0jü_¡P(\14
++\85B¡P(\14\8a]\ 3sñÿõ_~ü};§\8eGçOøü\9dq¬ÄϽ\1d\8f\9eÙsîü¤ÿßê!\9eù+\17\1cü\13\89åZ?\1e}u8\7fð\v¿úã\16ÿ·6/\1a=ÐÎÏ\1f\9fß2Ä8§÷Ôo\eöÍOÇà_\9a\88\97_xc\17\92¶að\r\9c\8eÁK\1có*\1c\ f|iÕ÷v\8cm\v\1fá6\1cg\7fã\9eØÅ\9aS\17»\1föé_¸å\9d\9f\96¸°«rÝ\9dC¼uz¯úÆ\97Ù\8f~ëPöé=àsqè³fO¼Fb¸¥\8b\7f>?ÔËK\8b/|Db¸5H,O¼\ fç\8fÓJ\xþ8í'\aÎÅ;\9exÿXör\97©xë\9aÙc¿ qSÛbÔ
++\85B¡P(\14
++Å®\8e>6N6\ f\95d\9cêr\rÕ\93"\83×ø\92\9dmòR\96\92\ 4ÙdÏ\rç\89;Ç]\13\12H9Tª\11¸BS<\93|u1'ã\19s¦Ë\eI&¤\eyú¨WܯøÆ\8f\89¤up¿y2XÁY:çåP\92M)à2\1f\13µ\17¬Ã"\8a!b¬møÌX\Ï\91X\80?§áÒH^Hϧ\10\9e\84\89\8cfÇ    \9eÀB\9c\88\9d\96*\v$z\ 4dØw\1a)ÝÞþ\9d5(È~4ä+tZ\0½öÈ«\85\a\85*Ã?\ 3ª5\94ji\83Hãû\84ö§\12\81\8d\19í\1a\ 3ÖZ©âI\96¢,d\15»æí\17c@7`®cI\14XA­Y
++WPþ ¦h)ìá©ìÑÔZ¨\88aI¨@\egÖ%\1e\85²¹INKû7=\ 4ùo\8dÿ+\14
++\85B¡P(\14
++\85BñÚ\87®ÿ\15
++\85B¡P(\14
++\85B¡Ø\150Çÿ\7fî\96³·í\9cÚ{\83\9dÜ¥wZb\8dO®P(\14
++\85B¡P(\14
++\85â\95AÛ;bS²&Tnw·6\ 6\93\89»\17\8a§Îw¡D©/ŧf<X,7wdº\eÒKÒqS        ÿLÆG\8dÿ+\14
++\85B¡P(\14
++\85B±K`.þ¿øê§\8fÚ9u<Z²\80þßC\83\7fÕ\81§­øwѵ«i<:·}þv\1c\a=»å?\9bÎ\9fÉ8ÿ\93A\97nÉqoü\1aÏGcÊxtJ;\7f-\8e\95\ fîÿÓæç\97\\1e\8fÆ\83çÖaϾáE\9e/Þºñh·Á«ê-Ï]ß4ìJ\88øüÑ\83¿Õ1ç¼õ¹æÿ\17Ú}\9aVÞ­¼×é¯ÿçv>\16;éyuÑì"ñ\8e£NÄLóØ\1a<¯~ï\89Ë:ß<Óù®ÝÙîGoµ\8b¶;#iýu\8f\ e\87¤\95ÎÃïÉáy\ef\ f\15MBÚ§ÌÌùíñ\ 3çm[v\95Ôer¢W(>\84Gã¸!\9cù h\ 4¦,ÏÛ<´Á´wÜ>C\19Þõ£·\1d\81ÑI\19N\19´\ 5ÿûÈ\r¢-èC§;xÄP\86\e>-\1ei¦J>7-\99K;x\85è\0úÎCl\9f\96v\v\8eS\1e¾ç6Ñ\ 1Ì\9d×Ù3\83/Ùª\ 3N{L<Ò¼\15/·C\87v»÷S¿ó½\1d\96\92íèu¦P(\14
++\85B¡ø¿£Ó\ 4Ë\96\96i>Åîÿµâ\ 5ºÒè\8d/\8e¡\84ä\ 2ÝÜj¢#\19\98\18è \17\82¥c¡¥Ü\1a\92ðRH\95´\9aèÌ\9d\88\ fQ±.\a\14Ê\9e¥HkÁd+>H]¹¦°æjs\8bt\91f\84&\84PñÄÊõFµÍ\1aÐE\9a¿¥\14é\f\87{Ç4³\83§ÞÎÞt6¦\12l4í]sР\v%;,J\f\8déè3-¾~\96\12l6W\14+Óû0Ed¤\ 6\9a Ò\1d±ä\9a\e\ 3¢+ÖbÝAgD*æá\8aR¨Â\96«ÇÓ\8d7\14Ã+Ô}£d\1cÞô\9dOÙEª¶yêì\99B÷Jc¨îf--\10éUç"½Ù¼÷¸MHxBa^#ïT#«ªyhbÝD}»\18\90\1dQÝË4\8fk\86\8c´¶ólª&[\87\95Nm\96\89\16ué,\960t\1aM\8c\10\17ä'P6Î:\94¸p±Ñ÷\83\92\9b\8d\9fwLO\96^\8d¨\7fO\91:\94\ 2\91Jxx¬s¦"\83\85\9e\84¼\85\8fM»Ïfo\9aÿ\9fC¾S\fÍC3 \13à9è\11\1e­á3Û×\15\8f|¢¦q\ e­\11ÐU\f\16\ 6¨ï\12\9d¡4!>j½g¸;çÖ;h\80j,\8d\ 3³\89\15+!ÚG&\9am²[R¸Ï¢\7f±\0ô«l\99\9d\11õÝD\12-ïF×ÁV    ¨tÏê@\9b#\13¨)¬=Q\8cæ¥Ju>V+U\ 1-\17GM{\10Ù¥©¨\9f\99ô>¤ô\9e\1eb0\fÆ\8b+);\8b5\8d1\8fÞ\86n\90ÑÉ\ 2\ 5\16}DmZÚN\ 6\1a0Zú\81Òó\94£       M\82ë"}\0\91a4\7f\96H)í^\91R\82(\ 1\1a\1f\99÷\85¾©¦yÆ¢x\Èâ\ 1n.\8f\86Þ\9e\18\99è²\92O´GÕø¿B¡P(\14
++\85B¡P(\14¯}èú_¡P(\14
++\85B¡P(\14\8a]\ 1süÿ¿ùÈ#\ewNÝ\91ÿ\7féo
++OÞÅqç\17?Íóß§\9d'\9fûæ\v\ fù¯ÆóOäç?9xÈ¿õùs\1a\8f\9dì ñè¡áó'¼pø³\8dÏo\]4º³ñÂ_\8fã\9c\87Îøëö\g:nû^C\9e.\9e½P¸ôÎYáËïÛ®»\ 6Ç{\7føÑϵ´ÔóÉg\86=\bw}aí7\84go\93\·|¸ç\ 5³\8b}dzwâq/û\ 1Þ\88#ì¶Vøë68áÄÏ\fÜýuß?ù\13\9d\11nûK\ 3\97~íì¶\9b[Zð1´´ñP¾w\7fûK¶¥Å\9c:^\7fK#_þ\ 3ö\98Ç\84÷\1e\8ap÷7\ e|ù?Ø}嬤Ţz\8c
++\85B¡P(\14
++\85â\7fCã´\93\ 4\9fS\99ØGÑøá6Åä\8a\ f\1d¯ýç\92Ã_BN.¤Z»2p/\84\8d&1K\À5þ¾m{^lÍLC&\91­®Ì\ 5%±(¨!ç?´lÅd3
++\8dü\19n¿ÈÑUî\95ÀBÒ»@*¿Á§ðïRQ\90P¢7(y²!\16._M\88¬nÔ@å\1dL­x¤åv\8aZ½÷¶zÇå#êÞ\94\82ûáñ¤ö·vB\81-.ôÝÞ\16o¼K5\98\82ú/f¦ãô»\92\1dj;\86\88\ 2ʦu\9ewÜKP\ 3ê#\15n\11è>¿Ãúÿ¡\7füÐÔú\7f÷Ñ'\97õëÔ\8fï\15NnëM\17fÆ£Ë&~\17ØïÜnÿ\7f\1d\8f¶.í?\7fÀ×®ù·ö»\0ªa<z }þ\12\1c×=µ÷¦v¾ðüW\97õkëÍë\ eú\ f\9eÏ%aýÿ¡v~w\1c\7f\9a\1dHIÖã\9f]Ú¯ãO;rõýò\9bD¨²æ¾zXã¯óï~DÒr\97vÊP\96ó¾ùð½ò»A\8a²þß¼´/Ïôþü\8díº7áxø\8b§n\97´\14e­þ\93¥}þ¿{Çû¶Êï\r%J>·´´å8Ö?¾¢íÁGV¼äå#{ö¿\eLïù¿}i_öËïÞ ûú]*rÝõËæ~SØt\97ü¦\10\82ü.rÓpݧî=W®\v\18\b-mÃð»Á7þxÍÓ\92\96;m\82ë[\1a{Ã¥7®\974vÚ\96ö÷Kûë.»ë\8cÇ%­\16¹nÕð»Èå·\9dùX\9f\16'~£a]¯¹ÿM_\11=\0\96vüPöÕÛ\8fÛOô\0L\91º¾bø=èî\8f\9d¸Mô\00\80\11Ã=\7fûÛ\ f\1e.¿}\98®ýÎ]¶Ðï"\8bFo\1eúØé×®Ü.}8·1 P(\14
++\85B¡P¼
++×è\16+·¶\8e«1q]\8bÕº\17}\ 3¬\1d±x\9cÔA(!$\87\85uÍø\e+&îÅÏ\ 6KJkSu¡Ô~=op3\97C\88XV»ÿaïúcö¬Êsß\fÇÛö+TÃÔm\9d\16\14¥?¬ç÷\8fÁ\18q5ë\Õ\ 2-´å+à\80Ñ@¡à\16CÔ¹f\9a\8dø\ 30\13³d\1di6²U`(¡\99,2a\ 6#Nbp¨\13DeP?
++"Ã\14\11f\8d»®sÎó|/ßû}_â\1fL´÷\95<\84>çyιÏ}Îó¼Ïùîû\W0%.Yêε°1\84¨Úº9s\8b?\96õX«sUT¿ãÉA\10\ 2\9f{ÔQI[\83r\99\8fUkr$0èÖªÏ_»òpø®¯\7f\1a\ 5kÿ¨FÊ
++\17\9bÂÚ\1dKwÓêŲ\90;ï¹.ÎÊ¡Å\ÖÅX\1f+\1d\8271`Ùm\94mõ`9ê±\96\88SÁâ\92\14i\v\92F߬U)ê\88Õ\85WXi\93]\82\12²\19à2WöÓ\93\8a\82\14\14p\933\81\vx\1dc,\8bQ¬ØB!¥(\7f?Àj±lÓ§­^qs¿'÷¾Ï.º®\ f\19\8by\9d°@oÿ\1eáH\80»}fß\13|\85\95;F0á^²;Ĭ±l´\9a4\ f¨\91\ 1rÇ¿`¸L{a)\99,`¯ã0\ 6C\1e
++²\14$^\81Î\93\82 Æò\a\0\8bA\8c      ^µÞx¬þ$ÿ_ \10\b\ 4\ 2\81\10\b\ 4\82Ã\ 1Óñÿ¬Þ÷ÌÌÒ#\eÇüxü\7fc\7f~Õç¿PÏ«\90\87\83\ 3='ý\8aç\8e\7f¦Äùµ\8eÃÁÝ}.üê\83×^Pö\ 5$o\86\83gËõÜ\17°â§Çn+ñÿ\98ÝÂÁ\9eybüOÏ\93ÿ\7fO\1fç¾|ÙÎG+\a\7fý;ÔÂÁ\95}[Û\9f|ù¿µ8¾­¼÷Oõ÷Ývë¥\ajY
++5&]÷",Åñ\9ecÛ¾\81hU\8dsWîþkqÜúò\v\1ejem¿Á®Ò\1eãñ÷ýöæ\9aÃ\10\r¸³ôïã8N=ù\92ÇjYÔõ¾½¥\8cù\ 6ûVÖX½Î:Ô>lï9ñÏ\9eºêw\e¯\7f¨}\98(÷}\14Ç\86¯\9dvD-˺ÆÀ\9f\9a'oà¡ÞÎñ¼\81\8c±ómwL¶²Ôì\Ûk4LN=q]Ë\ehñø\r#Z\ 1ënne-\1e¿»¯s<o`¢øzv\1d\81\1dý\9cÛüí\8dWײ\9cknÀ³ýþ\92·>ü¯\9fìt\ 4ª-\ fö{-fæ\r\b\ 4\ 2\81\10\b~v\94\98¯vÑÇ`ºÜñì½&¹=\93ªGbÓ9foTò¤Þ7\8d\93?æàË=\8cxRÞI1Y:Ôzç\88£2f\9dL
++ÌâÎh#¶Øólqã.v^«öV§ÎfçP»å\1d\96\vO¾w\8doJ\8d²¬É\92OÎ÷òÿ\ 1ßÒÙk\ 3Ë]$O\7f\91
++HQ\eþKÛdÐlÂù@Q\ 4R«Ì@1³Ý±6JÆG]bµ\ 1Î2p\91!ï¿"Ï>#ö\8c\1c(\89\10³ÕÙu9Ý-æOJ\7f¬\ 2HÉO\ ex\13ñ\8d^}\14È)\ fOÑ$¬\91T°ª\ 4y½M0\91®\ eÙd\92ù3\16\1c\82Åÿ{,ÊÐsc"<\82N\ 1\16\16\1eÿ\ eEµ!ÇÀÔt\8el¢Ü|`\1c:\ 64í³Áp±çtµÏè\ 6þ\8dn(¥µJÕï\96â\a\964øXG¥àt\11f0
++\15`L` cL=\93\1e\1fÕÑ{Ì\83·¨Ëat1GLR%ß 3A\0Vq\7f@N\8dí^en\13H\9er\10p\9ccÍÖave\f\14Ãê\85V\9fº        &Gt6¸\91ü\82ê·¨\8aN\85ÒÌ\a\8b¦yA \ 1k£Çã\12u×'*:\18&ÿ/\98;?Ca2µ\99k1\89ÿ\v\ 4\ 2\81\10\b\ 4\ 2\81@p8`:þÿðuO½nfé°í¹f`ùØ\8bV<[÷·k;\1cÜÙÇó×\1c<æÜ\1a£Î8\7f¨ü=\81±Ö5_<úÁÊk§ÒppûâR\1f\8e÷¿å7¾Ðò\bâp°¼ÄtÇy\ 16\94ëÏÀqÕÔªÂ\và²\v\1d\8f íÙù\9eÊ\17è\ry\ 4oZÜ\9d\1få\11\1c\ e\9e*ö°\917üàe?.ç­6\1dï\0íyÉw_ù¥r>+?\1c,-õ\90{ïî'\8f\9e\ fj8(U/ø\14ëÚôÒ/ó|öI\ f\9f\95\87\ e\\Îç\98\16\ e\9eíy\b\96\9c\9a3 TÛûÿl\1fo\1fç68ÔÛ5ùé\96÷ b®qìO-él»ÿæój^\80±m\ fÿ\11}\8c{\16n\83£ºûÎ\8açÖ\\ 3ë[^À\8eRv\1a\8eK\1f\96\ 5Scñû{[\96ݼ¹öÁéÖ\87åóð,Ö\1c\10Þgß°õ+5·\ 1\83QÊnêí¼äÞ3o¨¼\a&×öNXÜ\8dÕ;¾¿jw-³­½õ=Ïâ8_Â5\13Ý\9yÅ\19OÖ¼\aÛø\19+w#ÇgË\93'\9eÜò%\9a-w÷9\11ã¹\14Oõ}xïÑ\17\7f½åR¤Z¶«Ì©·ã8ø\89s\ f4ÎGWýy×ÑÝØ¾âõ\17Ö|       klm¯æ¦0¯cÒ_Zí´>×:ï*}\7f\13\8e\8dß\9füÇ\9ag¡ZN\8b[ÜÙ9Î#y½¿KÛk{ÞÇÖ^\99/³ó:ìíëÜ:uc\97K\11«¯¿±¨³ó¥Ëw<Tù\19L\e\87»\97LßwÓkZY¬¾\1eNtólãq§Õ¼\8elu½ï\95ýópÿ\9ew\7f§ægX_ËR±Eø\19\ 4\ 2\81àðAÑËÖ$\ac\80\91{T½SѹÌ0¬M\96|`ø\1c4ÆR±<'|Ó0\16\8c\1f\ e\8dÏ2êÕ\e\8f_\18þ7àç\84õá\ 2×êõ¤ \8b\961G«u\8a~¦Î}
++Îóg\ f\97º>.l\93²\f\1dÆ,sÕFw\89bÝ9u<isí\89æ.bÅ~ \vä(ÓÜw\b|äGãNhWv\15Ǩb11\ 4jÈ£MÆ]a<  Òðk˰\9dç§C\1aÑñ\9eÉgf\9b¾:C±Ìçd\84\99AlÞ\95ð\81ÄP\1fC½¦ªÔãW\15Å\ eý`\80<0\fÌó5öM­y|sD\ 6çák\13ÝÏe\1fµU\14\84=Ú+Ün\19­dîiGÏ¢Åý6SF=1¬\1eñEêY3m7>òÛ5Ñ\99°\94\v\0:Þ·½Ö.Æ\1aã÷jdÿ9º\8d\15M,Á|m\1d?\9a1æÎ\99\94"ãÍ1Çà)\96\ e«èT\8c\81ÇÊ%W\8fê\94\12÷[gLAÌ@\85\vb\82¯`\95b\94ÞX¸Ë£G\18*\1d\9dJ¨=¨2\ 50GX\9dGS^3\9f\0\9fºÙrڤıð¬){\86\8b1EQ?\1c\18\ 2ça\841ÊÇ\88\91\8eÓûæÿ?÷\8e\97\1c
++åù\fø¶¯\7ft?»Õ9pø1@pµ­ñhÌ\11<ªtR¤A!0J\8eî[\86Ú-\1e       \8dUUö\fµã\83Ú\91M/sF\85\a_:F¸µÁh%£[\1e\a
++»ç\ 3N#É\9d&\r\1e\9cè\83j×XçK|\1cnÄT\8dݳ\8aQ±sq\16\90ÎïEÆ\ 1\88G!¢íêÁ\91|\ 6\8c[Íqq\1cªÄl     \951¯³­9"¨Ýæ\92Ûb9)ës\8dIá%þ/\10\b\ 4\ 2\81\10\b\ 4\ 2Á/?dý/\10\b\ 4\ 2\81\10\b\ 4\ 2Áá\80éüÿcïØtßÌÒ.\8f\9dùÅ\7f¾o[ÍU'+G){¢ß\ 3°sê\7f\16×ÜñÔòÑ\9fêó}oYpá}5×9\15\ e;\81\10\b\ 4\ 2\81\10\b\ 4/\1czÞÃ\öÙ\18]v\1eO¯ÿ_rõqOϼg8ø\9b~\8dÿÆ\83KßQöæfòùßÔ¯ïG÷Ï/l<ÿ³ïQ\7fh\9e¿%ìëËÆ¹òoïõâÇ÷~ïîyûOßµ©î\7fVQW^û]ý~ëñ}Ì\az;gîU\16\b\ 4\ 2\81\10\b\ 4\ 2\81à\ 5X\93ÏÅSR¹H¸m\9f² \v\9eÇuÐkf\8cð-ÌÅ\vQÖùsñ{Hþ¿@ \10\b\ 4\ 2\81\10\b\ 4\87\ 3¦ãÿ×ýÁ\82Ëg\96\ e\akK\9c\9cÜÜk~²æ'\8d\aÝ\r\a\9b\v\ f8ÿó\9aËWÿ¤òyk=\1c\S®_\8ac×ÚW}©j­;5\1cl(\ëã|þWôõ<\9fÏÿ²>¿`Ç\17~íó<\1f´ÍÃÁ¾r=ó\ 4\1e>ëÕ\ay>Æ\b{&\v÷ø)8NøÜoÞSò\11t\8eæ5Ï\1c\80ãÞ|ÌO\v?¿Òjáà«\85süJ\1cÛn<õë\95gßè\9a\8bpe¯U°Í\9eU¸Êµ\8e¹æ\rì\99'\87a²ç\9aÿ£Çþô5u?\84R\95\8b}{ßÏË\97í|´\96U®É\85\83}ÅÆÙ¹ô_ÛûA]߸ô\835\95ûýµÅγqühß\85߯eÑÕ:\8f\8d\83úÈÙߪeÙÔ>ì-unƱû\83gte±õ½ØI~þó\1føÌDÍÃHM\9b`iÏ\19\7fÑÔþO×<\8cèk{Uß\81~Þ·rkÍûÈ:Ô²Õ}®ÅsËÏ|´ñó»Ê\19\7f}Ïýî\8e\98¬y\18Ú5îþÛ\8b-\1fűák§\1dÑæ^Ó-¸f\1eNüS\96tun»c²æ\84¸¤«?÷ö:\ 2gíÿàI\95/?5;÷\95²Ùùò'úö¶M­x})\8bÖVÝ\82\ f\8cpéÏäÄ¿bÎ<\13ô½\9f\13ßxÅÖ'ZYëÃî~\9eßqü»¦êsdÛ\9cøX¯uñ¾#×·2\9f\9c¼Ì\ 4\ 2\81@ ø\99\r\9esJ¤K\8fÖåTâl$Ë\ eäf\ f>Z\95\93²øù/dÞÆXE\89\1fKÅ{ÊÞ\eåB"U|HQ{å½UTn×dÏǧ¢7É&Ü\13\93Ư½\9bÎË\rÑçöÿT      `\80íâ~&\17
++v\9dPµóAwÚðshÂSFÝ\94°bQ··(ÑÚ\ 4cb`r¬\ f0ÏyíbäG2®¡Ú\ 2\ 5â­.\82ð984\17\v!{Q)÷Ù\90Ð\9ebí1Y\15¼JÔ±Go\18·\f eh\84\15)\93RNø\82Ó\95C=\99\98\ 3ZqlÄù\18¢J&ÃE0É¡íX¤\v,\9c¢\94öÙ)\9bàI¸&WÞr¯h8\1cFÂx¯BáA\7f1q²sÌ9ØÚR\ 1\1e\8dv:ë^\eê#\14M¥Y´ÙgrÑS     \ 1\1f\86Ù'\8f®Ös\9e¥%¶Ëé\80!mã\8eûjL·pºë\fs\1dG\87\fù\98\98õÿ\ 3¾\953\8cÀ\90¹H}\81"q\90èoüKc\86\ 4\13Ð\e\e(h\8fµ\8fV\99\82\f°       Ë\16\â©&AÝzL\14Ì@x\b\1dÂÄwTgPT\84ð9PÎ>â\8b6»nN¾@ú\17\1e½0\18\99ðsÐ9\80ë\8bv\84¦´\16\rU "%\bªm\18gÇç\8côú\98¼\98\98b¢ å\8cÞ9\8ar\95±Äzj\1e½\8d \9cr|ýxôl$~Ï×\11\87@a&ÚÌZbäs\897BâÜ£\86  &\82\87ÃtѤàèòáa®<¦»\83U6¨ìÙbT\8a\92*Fâÿ\ 2\81\10\b\ 4\ 2\81\10\1c\ e\98\8eÿ_váǾ;³tØb\9b7à8î\99Uëj\9c\»áà\9a\12\9fÜÂó÷ìÝRãÄ>\ e\a\93åzÆ\8f×|ñè\ak|U¥áàúòw\86ñ|\81SúØé\e\ f~öÍõ¼ËÃÁ®R?ã×\8bN}õ¿\97óQáúµ}lþ\9fïùõÏ\95<\ 2ãíppe¯=¾ýÌ\955\8fÀ[Ø\93úvÿé\92U¥]\1fhçõ\v»vW\1f¼ö\82r>y3\1clìõÍßpð]%Þ\1e¼A»5öÍúOx Ö\13Bf¿fÍ/Àù\12÷Ý\8a\8f?ñÖr¾ØYcÌ\9fÂ1±é¥_.ç}Ò\v\aª\8féþðÃ\7füHõ³w5&\7fþDçÓí÷¿;×|\84 *ÿÁ]\v;»¶üý\8e\87k>\82i\9aòûû²q.\86ËúöÆó\11>pTwßYñÜÇj\99oq÷]Guþ\19ç|¼b¢«ó¶[/=PÊ\
++5\ e~¨ØÂ\vv>²óèRæC³sý<¹
++w\95:gÏUXÞëÔoüÕ\rµ\ füûm)[¶¨³ó¢©E¶æ#\ 4ScùO\94\81ã\9cý¿×ò
++\ËÓ\18\96û\98ñåÉ\13O®eÞÔ²\a\17vsï\9d7^ü_¥ÌhU}¶¾Üw\1a\8eM\8fÙ½­¬åiìém9gjõgj\99³Õ/\9b\8b?\99«pÅ_lù^-óml×öÏÀé·]ò\95V¦«-wNL×ù\96\ fÕ²Ôr\15\9f\91³®êììò\1fÖ\95û\98\8a×_Xs#øGÖRvûH\9dëkß­OÕÎÕ½-ïü\97\1d_«9\15QÕ:\97õy\f÷ýeÍý@Y\9b\13\9bçÉŸ³\7f\ 6'§.ª9\15ÞêÚ\87\r\13Ý8\9cóÄË~¥åi4î\8eËz[Î|ÿ¥ßªy\1aI×\\f5ѵ÷g·\9c]ó-ð\9cÖ²óË3ù;,[²©ò\81D\9fê\ÚÓ÷}ëÔÛê\18%×q\93\94ñ\9bÄqê£kÿª\96ùÖ÷u\8b¦ï»ñêZ\96cµs×<y!'Í\93ß±·\7fnÿD¿é\91\96C\95ê\18]vTçëßZøÖýµ,¶<\94Ýý\ÚtÕúÇK\99\89%f \10\b~1Ñï\ 5¥¨µ¥â»·xe\97ÄÂ.^¬cÈøõ¶9XGIt[u¯5.Öóì\rM\8cµ1Ýn\ e\8dè\1a§Ô\8c«áýc4#u\19ï¾\1a\8f
++\8c#SazZ\87ÚY[TÓ\ 3ã^\fb[G!vꪧ\94\15\ 3Ô1ã\ 3\8f¹s\9aQ«¤UtE\ 6\1c=òÙd\15\19\16ÇuÖ¨\11ΪçÇRqIt\fë¢GÁû\94(×®rÀgJ\80'\14ã÷\fÒ\19\1f\19àÍY{í-c^0P;8#0\9aÎÈ<\95´\1d\f\96¹Ò\a\13KÌSG\86/\1düu\9fn,¾4>³¡\94Ât¿uV^Ï\927\90\82óü9`lNw\9aã3âÀu\9c\14¾ç\12Ãî48ÃÑ\19ýWEhÞ\9bà­ÓøE\85Ó\14\85Í\1dlTÎâ2]â\8bxË3ì©\18\ 5
++¸6{k\18ø5\1aFiFöáp\1fuN.b<á\8a\92a\10ð­ÁP&/3\9e\91M|5\a¸\16\1e+±d4Å\1fP\1dR°-¾\8b{ñ­\9f´Î>Ã)¦ö£Ó ç§\ 6~tJ\8c²$kÒ/\8eÉ YqÐ{íueUà¨u±ÒÀ\88<\93[Sƽôà\88\7f\ 3èçÇ\v\11\e-zë\18\88ÛX3q\ 3\rÁ±&\84\91ø<Æ*\18\v·\ 5\15m³i®¼\0\ 6¼á\vÚby­EÏ2g\1afiiÓG\8c#S |\82ã-ÍS\8c»ãÁÁ´Á³\89>Ánf%`Ü\1c\13/\8c+\ f¾w\98¨\f+\96Ä+9\85`n\88¹Ë#Áøb²\e̱ÄÔ\ eü×ð~¦\89àS\88\94|\15\f\84w\ e\ f\r&@Äw  &\8fÅ:\ 5\8f\18\1eE\f!\a `:q<Ñ"\1e`8\8c 1|\85`R\94ñuJ9¯<
++1Çbjãl\99\9fÁ\88ýèü\8fX^`\1ej¾â\92v>Ôg?3d\8f×AÆ\8b\87\1dµ]®\ 4>!\ 3¾õ\99ÐÀwKÀû\ 1s\91/\19¾}\12<\b\1fX\95ù\861t\97+\8f\12ó
++pG*s ø3`\16rÂâ\15ÂY¢øêÃHböp²¢ã\11ÎGíA\95´\ 5<B¬\ e¾A\1f\98Sa9,LuÀ ¸\84n ¦\8coô̤\ 3¦û¨2ÆÌ+\80\91å)T)yï1Z\81\8f({\86\97(*úÍÑOè  \1e \f,ª°\9dÏð¾Â¥\18%L\97\96\84¤\8c9˧\9c\13ÒÐ>çx\ 63Cc0\15ª
++\ e\95Á\7f°Û\96W;S?0p\9c.Iöÿ\v\ 4\ 2\81\10\b\ 4\ 2\81@p8@Öÿ\ 2\81\10\b\ 4\ 2\81\10\1c\ e\98Îÿÿê¾Í\8fÌ,\1dÕÉcùhn¯@ \10\b\ 4\ 2\81\10\b\ 4\82\17\17Ê\1e\1aOÎÒL\8eÄPöDIþ¿@ \10\b\ 4\ 2\81\10\b\ 4\87        ¦ãÿ×.ÙõôÌÒ#\aw÷üV\1fXõðÛ*\ fWÀù{ÊyrÒ}x©{{å\9ar\v\86\83½=ÿÖóõ\ 2O*y\ 4ãü\7fëËù}8NøÁ½?*|~*\86á`Y\7fý\8aç\8e\7f¦\9c×:\ e\a¯<ªk÷¸ÿøÐ7ËyïÒppM±g\9cÿïÐ\1c|~w\15n®«p¬\7f`ùÿV>?\83ë÷öüok\9e\81r>R\8fp]\7f~ÅO\8fÝVu\aÙ¯\89£»úW\1e<ûþ¢;\18©SX9ÊÆùÿ\96÷¼{o:oMÑ/Ì\8eíVÞAÖ¿òÐ\81\8bËù\1cS§;7;/àÆyx\ 1\1fêÇmçÔ%ÿÐx\ 1u-ûX\7fßù_¹|EÓ)l<o÷,éü8Îý·º\1f\93ç\96\\¹\ 6mt\95{líâéöfò\ 2^Yl!\1fÝg¯?çÞÊ\vh\1a×Ù{{þÄoßzêãµ,øZçê2Ö×à¸åÄ-ÿY9\ 3]¨¶ÜÛëø\8dó î\9fGÃp]Ïã¸ù\93\17}¯j\18ª¦Çw{?·.¹÷Ì\ej\99ÉÕ\96cz\1dÆm¯ÛZ5!I\88TÊÎ-u\9e\82c·;û\81Æ5\18ë}\87zþÉÓwmªüw\94àY0Íá÷×86=±ªòÊ©l[\1f\16uÏÑ8/àÒ~Î\8dóô-è9àÆùö¶Ïé·lDßpÇ\r\957OåZçä¢é²u77]ÄTÇáÁ¾½q¾½ÛGî\9b©\99Xù.iËé\8f]>¬e\1d\7fáe}ß\7føñmß­\9cz\98\15¥ìé\9e\9bò\9b\9fÜüh+óµì¶ÅÝ\9cØüøï¿ªòíuózO?îã:\8cçöctÇßþá\7f×wS§¿Yu;9î÷ïy÷wj\99õõ¾gûwËÛ¦.½º\96å¦!zg©s6~?\81@ øe\ 2ù¾¢sÊX[\14çb\9cæ&$?\15uÚ:ݳL\ 5;\13|\8cäÓ²ºã\7fÓÁ\86yxà´öd°Sä#\eå\ 6ì8Ø
++ç\9afëø~ÄoPn¼t\væá"\83¹Ùàw5tüh³qûák\84âh¦ñ·ás\ 1\86©HÎ.oíôuèP2®°\fS\89XùÊÏHÅ5Ê\87Q7\8dB}ÉRe\8cr{Î\19\eðCã©®\97¨µ¦H\ 6FmACm1ëçÓ   £f\9a7¹è¡¡\98:p\ 6\9f\92Ê\90ôL+ê\ 1:ÜAn0Ê\93é\0\97âÃ\91\12\8b÷\vÚÔ¤_Ä\a\ 2L!;\1f©Ç8$\96ßK¥r\94¤R\97'\ 3¤â\98Pn\8d$c\14À#ï!éÚ4µÿ<\1a0sóýÍÂ\vhRÈ\9c\19ÔÔ£.\Dû¥oÖ\85@rÂ\ 4\1f4-¼¹4Ö\fe»uʺ\10¾)8?dMyÂL½Å\8cÙ\14\ 3¼\80\8eñ\ 3Ê\ 6´ \13haþ?ö®\ 6fÏê,÷M\98}«Å6\8eÉ~\1a\18PGG¡\9cÿsn7g·t\819èÚR ´\1f\14\ 3\8c¿\8f\96!NDc0\12X\16\ 2\8bûÉ\8c\9d!Bfql\9d\822\87\91A0à¨\19K\81\rÄ\8eAùè Ì\8d2\ 3\ eÔë:çy\9f÷ë×\1f\8dÉ\16µ÷\15ß\95ï9ÏsÎ}îsÞ7ÏñºïëöT        \f\11Þ\85o0'JÅ%<Ye\13ñò\8a÷e8\1cÏ\86À÷G8\89Õÿ\ 4ÎC7\9eJ\98"\94ÓÃ\9b` Ä&ëËù¦Ç     Ï±À\ÀäLÛ#µ\fáORËí\0:zûª-8ë¿Ð)¤\f"6\ 36\1c\16~TÓ0P\8f\90R\91øvÆBá½\98\ 2ám\11\96\b\r\85)\v]\991\18\97*°¨^\84\8f³$ì\11~\15(\1c\88ï3\\1cðeåþg-LÖ_\8cÕcØj¦ð{G­N\9eMXç\91_ÃH\83\84"\9bR\7fK°Ið\fuDsW\7fpº¦éþ´*]Jµh¦°Ra®\8a {ø\84ª\7fµþ¤Ã·\91¿;}\8dÆ\82eKÞ\8f~Ëfê\92\85åA\13¥:Ñ3Ö\ 6{¯x\87s\12\9fã·\18\9b+ñ[Zð;\14±ü\85?wüQÃ\967\99\95\16\1d§\90\8d\r\94²Äï\bv\93D,Q0p}¢®8ÜÄ¢\97X8j©Ö\1f\v\13ø\83T"7\84á»fª
++¬®P/\12\8b\92¨g-4\ 2ß\1f\9cuñó\92½òÿ
++\85B¡P(\14
++\85B¡P\1c\f\18óÿ\97ÎþúM3[g\ f®¬\#9µëß±qEå¥-yþÉ\9e\83\²û\8c÷7^ÚÛáà\9a1Ï¿êØ\97\1a\87*i8ØUy;Ö\v<nëæÓ*\1f\16b\9cÓÕÉ[\8aÏUï\9aØÖxã`\1agwr?öÞ\1cïêÚFÞx"nø~Ç\81vm¯Ô6ro\9f+\175\ e4ÆÜÕÏêíÞ\9bËÜQÛÈÿ®}ôð¯v5À|ãj?Ñ·­Ù¾zTçKD7\90B¡P(\14
++\85B¡Pü¯C­µè\8dsÙ'Wk%Ö²£\8eQHÁÇdyF´\85W+u\1ec`\8c\80KÎKÆcQ\ 4÷z\8bó¬a\1c\83g½ÉÒ×õÜ£\96\16÷eVû\93P¬°Jêôz\95\8c*p%×{c*¬<h»\18\ 2aÅOÃúÒÖ¸îZ\11\97k\b\81óA\12ìg\8cD,!\ 6Ï"¦5\92'alaHkr6{\98\96a\8f¤fO\f%¦ZÊ3\9b.þ#\15\9cã\95ÿW(\14
++\85B¡P(\14
++\85â`À\98ÿÿð\82\8f~wfëp\9aþÿ7\96/þ÷ÊÛû\14ç\f\1e©×\99¿{êÓ\7f³e\943kÕ¡
++\85B¡P(\14
++\85B¡PüTPu      ²¡\9a\83\14\8a\941® PW\85Òÿ.åà]ôVõÿ\15
++\85B¡P(\14
++\85B¡880æÿWÚÉ\1d3[ç\f.ª<ÿ§»ö¦1ßô \15
++\85B¡P(\14
++\85B¡Pì Ö)\91@    þl­\89Éy\9f²Ë&D\96z0Ö ÉùèYµAÐj\9cqÁûÌÚ\ 6Þ\99hpY\8aeI\10g\8dàÁ\12\13«
++°h\87õÉPÔ Äb½s¸ì)rà"¥\aðp´,U\17ÑSf)\11k\fº÷µF\97òÿ
++\85B¡P(\14
++\85B¡P\1c\f\18óÿ·<±þÈ\99­³\a÷÷uÖo\ôÞ\8bkÝûâf\r»:ÜMÿÿ\8a÷¶¸\0\17\87]]vêä/¼÷ºU­\9e{HÃÁ\9a¾&û¢\a\16\9fÙ´üm\1e\ eî¬÷ÏÇçgW\1eyoÕ\11ÈÆ\ e\a\vkÜÁåøÜôâ\eïçõPB\19\ e&k?Ôö\7f\91»«=9\87á`Gí\87\8d\1fxõÄ\1fòz1NFú\ 5¬ß}á©o{¨Ö/0Þ\8ej˳ÿ3\8e9û±f¿éêÜ\7fª>³
++\9f\rÏ;Ój\12$×ê\96¿Ò\8f³ê³\17?ÓÕ²\97V+|Qï\93˦¶ÞUÛR\ e­\96Á\95\87\8eÛ\96ùV\93>\99V[àªÚöe|ÞUÖ>Ùµ¹öÜ\82Þþ¿\98uá¶Vç ¤öܦ¾\16ú#w®i5ÍC\8eÍ\96\1fôu\18®¼û\8cgGuÙ[Û°×nXþÜ\eo©>wÆ\eý2(\14
++\85B¡P(\14ÿ#T\8d÷(\ 6g\1cq%ÛNs\1d'\1e×kÀ\8bx±1\84à\9d+\ 1oõ19¼¿[\1f\8b\97Z\fÞÛ\14rH\81ÅëK\88Þ\14Ü\87.\9dÇ\15g\13\9e±\11\17½uElÎ,5\9f
++K»\8béËz\96|\ fΤè\1cN\14¸ÄºñâÉ\0Û\92½µ>D\83»\99'.Y¼É\1eÃFç#.\ 6üéð\87\vÉ\8e\8dx\9aÚù¸\ 37Ðâ\80ÿM8\9b¡»\9c\r,VO |X-\9968oL%¸aµ\ f,d\1f2Uö\rgí(aOc\ 4-1y\9cD\92ÄR¨[/Ñ»ì\ 5­L\\17¡Ø~Õñ7VXÜ\1eW\1cµì\1d\é]Ì5÷=rÎÙÁ\88d\9aßm   8P\85$Ý:ÔkÆe>'¡[/x Y\8c\829\ 4\1f»<z)±>/1»\X-À°>@ÊÎ\16\83A\1cóëÉÂ\e¬2\16 aðÀ"\ 310N\1eÓ\17ôØ\15\19\88\82ÙqYcÄ¡1\91ý\87˲5    «]Râcu¼\88~\1c¦^Ð\ĹÄJ\ 58\81Z_ð\8fÇJÃ3Eªë`m §/\1c\95\11\ 6Ø\ f8u:F\1688©8Û|`á½Z\v\0[\12ÖÇ4Kù\7f\85B¡P(\14
++\85B¡P(\ e\ e\8cù\7fóÁ\8f¾0³uöà\a=\9f\7fÃüð¡Æ\15\87YÃÁ\83=÷<½.Àpð\89z\9d\17·¾å¾ÊÛ»è\87\83\89z\9d\9cóq¯í¼´òð\92Ë\9cÁ»{^|ÃÔ7\8em<¼\ f\1d\8f}ÑãWKkKÆÖ¶Cúº\ 4gýéäÓµÍ9qµmißçäÔñ·t\1c½o|ú²Úçáøl¿cåó­-ÅÆí\7f¬·ý/\8f^ÿh\8bQpIjÛêÚçgðYù\9e˾×8úl\9b\9d\vz[Öl¹ä\85ÚVZ=Ç9\83]}ÜÃe\ f\9fùç­ÍI\e/ô±\f?¾í¢©ÊÑ\e\1fÚs7÷q\ 6§]sz×\96ítÞ\9fó;gêÆ_­m6¦6÷ÛûØ\85Ó¿ç7×6g]\8bk8¹\8f%8káäö\16K`»\98\87Y}\9fë§Î?ºµ9iã}¹÷ÙDÜðýÖ\16;_¯¨}¾\ f\9fÕ/N|¾Å \18Û­QßçÄÔÎ?km>¶ñʼÑÜ?Wº¹³þf[£CGsß;váS½¯¯>öìö\6¦ùsA\1dïMøüè3g·ç
++V·¶-ª}2\8eeÍó'\1dQÛÄ\94¶'>ÛÛ¹vêöcZ\ez­mOõëðíÃ×îjm£9\84¾í\9e?þàwG50\9a\9dK{_?~óÕßim>¶µ\róFã-\9fZV}Íÿ\ fnóõåý÷ê7ìû\9eim¡\88þP)\14
++\85B¡PüTAÞ\14'\88èD\12þ;\eIÓë¹ïÁ©VÞ8\15\9bB¬¤·Ø \86´v..E_¤2ðx£ÅK&\8e\17Áxò»øïhm¶É9\97£'Ë\ fx\89\8e¡\0ø;e\97ðpN\96ä~\8e¹\ 4±>e±¸\16ð\f,01[\97sÂ8R0\ 6\f\ eÉàuÜ4ÞÜ    Ã\0rc\96;n|ô\91`Å&1\9e<~WÓÞ1ì\80½åL\ 2ÛÛ\8e+÷.×@\84zN«±\ eIøW)\ es\r\18Al½Ï
++      uØkY±¾Ý\8bÁ3óßc`n;Þ\98¥ù\97,zåüM´Óì­\98\19<j»u`
++½-\99\81\bLp\17\1fâ~õíëº\19\8b¥q¶\9b\19ÒEC'I=ÃT;s\12[\8a\97\84ó\17¬åa±®kÆ¢\ 5¦ä'\9e\L\94ÞgXáÐ|\11\82ÐNXRùu.\ 1®¡\1fL\13Æx)pwI\8c\96à\12ã8æ3nÁ}x\96s\83!\89ËÏë]¼BJ\ 1ëW¤ª\0àùæ;\18á\v,\87\99Ìì\17\83£rò¶à\1f\9c\1fÄp`\86q`;p\19=×ÙäPÃ\a¸}±åp\88Ä\ 1\ 6÷y\ 6\98+ÿ¯P(\14
++\85B¡P(\14
++ÅÁ\801ÿÿÊço>jfëpð0)ÓÊ©n¼jIÍ«·Æûáà\94\9ec_²û°sëu\11\ß1otÿ\92×\97¼Þ¸i       ÃÁÎÚ\ fyðÅ\7fÿ@\8b#0I\86]>=yÒ?øµ·>ÐÅ\17äá`Vígo]\80]ýýsOzÓ×y=\1aS\86\83Cª=KñYtßÛ¶Öü\7f+èç©\9ek=n÷9\8f×ëÙË\88cf?\vn[¿­ÍËøÆÏ¾6wÔ6q×\9a\16\a`²4Nûwëøä­ÿè\97×Ou1       ¹qá\7fÛÏñ\82G¶ßÓb\12RlÏ]y\0M\81\a{þyrê¸--&\ 1­µmblç\97Öl\eµ5;'{\8eùïn]ÿp\17çÐñÏ\vk\9fkðÙôñ3þ¹i\11Hgç\rµOÖt¸ã\17/xªÅ2øî¹Íu\ e\87ásé³Ç¾§µI7Þ8\ e`õϬx®k\93Öö`¿îW¼õ¼\16\1f!¶Ó7¸ö\0ñ\ 3ç÷\ÿ¶ëÖþË\9e\1a\ 6\9cý\8e\13\8el1\ 2¦ó˦>6dÝ·þʶ¶\9c\9a?·ö\9a\15ëv|üÝ­m¤\99ðdÏÙï\1d[ðZ¿WÖN½\7fK\17?`ZL·§Å\b\96ÖæL{n~}n\ 2\9f\95Ï-»¾µÅ®m¬\93±|jÃMmß\8bmso\9a\10Êõ+\14
++\85B¡Pì\8d\ foÜXBHÎD¼oâß\94\92\9a3iwS\98lÝqÖÞ\a\17<^×I¯2¿»Ëùv\12£5\ 1\92ý\88§Ç[¶o\1cnqY\12\8e\fè\9c\99Ú9eS\9c\18ü\99m\90Ì`_G>·xcl\94`|ñ\11c\88TÎ×Û8\8a\ 5ÈÙ¸`\8c«öù\10ëØ&ÃBß\8f»?\ e\1c\86Øè%8S\12þ/ØJ|;\93\ 29ôÊEc\16x±f¬3^@\13þA¿xK\rÑò\9dÓ\15\9cª¨H\86)0j\80̲\14q¾À\ 2#ð@)Ñ\86\84\ ec`Ï0Ð\19)É&æ·£·Tp\97Ã\8cmNÁ\8cüdst¸±\86\11\ 5\8eÇ\e|H¥\90e\86U\ 1\8e\86å\ 5ëÀ¨\ 6\97\8aÁáÇ\16\9cq¼      Å\ 4\9f0¼É8c\19¦ý\17úGp¤;\10§Ï¥²$á]65F\9b¶`Ñr}O\86­°Eð®=âäc\ eÙÁ\99i\7fq\19\96Q\e½¿\ f-\ 1Î=\90ÓÏ®¤\18\vö\1d\9c*\89Úû9áN)0\9ebw9ĪI\10)`\809\ 5Ï,}Á¬%TM\ 3FY`gz¡3BÍÁO>ý¤òû\r\97\16ýcàèCÓ\8fëæÊ`\14\1c\81\17¬Å\17¦\8bãPþ_¡P(\14
++\85B¡P(\14\8a\83\ 2cþÿâ¯\9dw÷ÌÖáàöÊ\a\9f\85ÏÑ[7\9fÕ8ß\98\87\83·÷\÷\92\7f\98÷dÇÍ\96á`¢r¡7áóàc\v^jùÙ)\f\a+ú~\8eÛºù´Êu\86\18\87\9d\ e?ùÑ\13wÏÿõz]X\17`i½\9f\ 4é;_ý¥\7f­:\ 2\96×ÇyêÇïþô\ 5\95ÿ/Ñ\r\a×Ôë\7f\88Ïâ\97\16¯§àÒppyåXoÄç\94'Þþoõzrèçä>ÏzÑ\13\8b_o×\ 5ö\ fëýkiç\8fo;µê\14\82]Óâ\bÌÙõz2yÎÀô<ôyÿä¿Ôb\ 5¬k\9cÿX\83ÿ#\v66¾ÜÛ.Ïûü\9eÛÞøÌÆyMk u\9cø¹}M\84ß9jb[ÇÏ\8frÜk\9fKñÙ\14Îy¢ñì)·¶Ã\ eP+à\90¾Ï+þzòÑ\8egï8ê0wdËÄÔ®?i\9c¸íâ\16\96M㽿pSã¶%7Îÿò\ 3ä¿\1f¦yì
++\85B¡P(\14ÿ\aAî0\85ÈW>r¼v\94\17\9ek\ 6zj|i)\86\88\7f\8f$*³Ç[6uâkêq\93\11o\951\8b-¼JòYbDçø/
++±gÊ\9f\8bà^OétC-xOι\8cÇÅÓ\99\8cç\94¡\82)Öø,ÞErä¥X¦Z{+\19=9ϱkR7m  \96½ºÂ;½3&cì\16×K»\r\93$ç|4É¡g²ú¸`Ä1߽ʸÛ\10\15\8c`£8S\L\ 1'\16/\98\9cóÉ¢çD~\18îÁ°-ï\1e\962ªÀÕ\98\85\80\81\188\80?\9d°|;æMÉyk8\ 6©Zø&y\18é-&á*)\ f\9fY¦r»@>\9aYúð\95eJ>n*©
++\13 ¥Ô¾"ß´\99\ 3£\11\9fyõh\83·\99\0\8f\ 1\ fûâ<\9cÁ)¦t\80ø\ 4~²3Ö
++¼@i\83\8eWo¹é®júcH²éð^ÇKc$\8fÞ\rIþ}h\aX\ 3\1f\97L\86ÜT½\7fx"R\7f+\91\a§\ 3Ä
++v     ú¦\ fðxf\95û\82\ 3Q";\1e\ 5[\ fæc\9b\ 3\8bÂ\ 4y\9cýȨ\9b\92\ 3\97N¤8ì9.({bJ?ü\8d¡sð¦\84ì¤J5`UöÐýÏ%£ï\9ca\14\83\1a,k\1cØZi\0\8bà\13\ e;12\0ò\10\80\19\98FJ\1e{½Î-ÃèÌA±!«¾\ 3£\86±Ñpf\8d8/Û\88G`\8d¡\1c\0\1c\rß\16¬1¾\ 6µZ\80dn\ flA|m°\88\99%\12\8a\8f5\f)Sì 3\12\ 5_@\7\98\0\16+$V5 r\84q\14\84À\0ðG¯§ÀÈ\ 1Ç\85\9d¥ùÿ
++\85B¡P(\14
++\85B¡P\1c\fÐó¿B¡P(\14
++\85B¡P(\14zþW(\14
++\85B¡P(\14
++\85Bñÿ\ 1ãüÿ7üã\92OÎl\9d=\98Ûç\7f_»øéå-Ï?Q\17 Ï{_xïu«\9aö|HÃÁæþþ%»\8f8¿Õ»\17\19\ e6Õ|÷3ð¹qjñ\8fj>¿ðþ¦}O]ü£^_¾¬æó[æç_4wÔÏ\9e\ f÷×OØý[UÏ?eg\86\83\8fÕþ\7f\81ã¾|Þ\13íºÇý+ú\9cø7<ûæ\87ªþ¿\988\1c\1cÖ×/Ø3\9f\7fn\7f}ÃÔ\1cßéûw:ýó«­ÔÍ_i'w´¶"­mVÿÜÆ©ËniÚÿζ\1cúq]\80ó¿ù\91w6\1d\80Qíù\97Çúþ\v×}§Ó\bðí¹\9bësÌ¡_\97Ïm\9aú>ÚV{þµ^7ÿ+wlØÙü_Rëók}\8d\ 4sëÚo6í\7fïÚs×ö}®ÙrÉ\vm}\8cíê      ôu\ fîÞÒé\ e\14\9b\9a-_éý~ÉÔ\8e»Z[\8eM[`õÜ\91ï/}qûÇZ[ÓÜ\9c3¸²×q8í\9aÓk½\ 4g²mÏíìk\ 6\84C&\9eiµ"\82ks0u~gâó\9bö\82]­-\9afË+½\9dën¼´j=8WlÓ\1dxª_ï³\16Nno\1a\b¶óÙ!½¯ÿãW&\1fkm!4Í\855õ¹ë¹\17¿páSM\1fÁtz\fo>tdçÙ÷L´9\84Ñxóûu\9f\98úùcÚ÷ùöÜ#ýºï]£`i\1doß5
++6õ¾^;µü\10Lëóøy£>×>zøW»6ß\9e;eZý\82\99Z\r\vz-\8a½µ\1avökô{³O\99jZ\r±\ 4ýqT(\14
++\85BñßDÍ\1fÇ»¨·9\18\8b7¥Òç\883±=û\ 1ê¬Û\8cW^[\82eJza\ 2»\19·ù\90\92Å+Uñ1u:ÿûÓ\8d÷,\97î\98\ 2ÞÙ\18r\18Õ\99·Ô×\9aVs¾Ö\89\8fÑ\16W\12õí\ 5\1dæ®\1f\e(¿\9fM)\14)\bMbÞ¸$x§\8f\19\7f\1aô|\96o¯ þxSÌÉS\fß;\97©­_(Ï\8eG\99\ 1n\98çî\9a\rÔ=\88&e\8ehº<tt\83\8b!YˤzV\1a³LS·ÙøÀ\19\85\9a'ÎDyV\ 6p\89\8aøÞ0\1f<åBÉ\85Zm\9e\16EïX\89¾Óó\97V³Þ°(}1\12ƾ\8b,\81P(Èob¢\ 6\0\9d\18¨6\8fÕäÝ\ e]q%°XÞ0¹Üû\8cE¢ÑÌh\17)\1c-9X\8c\a)IO\v(tà\93¡0D\89\85\19ü¸L\8fPÈ °\9a\9d³Àíè/`­áHtïK\1cÛF\8fá\80\90ñ\8aÝÎ:ô\e\13ôk®=6\bm¬Õ\19\ 2Ü\18sI\12£ØB\85\ 6+\9eªý,sÀeÅfHâ±6E¨X\103\v,PË\82}W¡²}i\15DÎ'\ 5çR6Ý~\9bYs\0\vêJÝ\9bØ©.\15\9fXD\f&'\9c\aáAJÀÁÅ\82uÇöÅA\89\96&,¤§ðA.tK@\1f\91\8eÆÊ²\b\85P/\83;\a\ fÀ~J\ f\84\14([\10yh\b1Pg\0_8\16m0¬þ\90¥$¼Ý·µö¥æýS/BøUâ\13ÉÒ\7fÊÿ+\14
++\85B¡P(\14
++\85Bq0`Ìÿ\7fòÒßÿí\99­³\a·ö\9câtþ\7f\vOâðúwl\Qùs\ef\r\a÷W.\91\鯫\96ü°éá{?ì´éÉ1\1e³êØ\97º¸\804\1cÜYï§.ý5Ë\8ex¨Ó\897ÃÁÍ?7º\7fOýÿ1GýÅ­o¹¯^¯úü\13ûÑÿ¿¡ç»÷Ôù_ÓÛó\81WO¬v\16ãd88¥×Â?á?Ù»Ö\18»ªëì[\11qÇc\ 3J\b\9b\18;\r~@ØïGxÈ¥&B\96cl°\8d\ 3cl\84\11.\1ec'ò\ f\ 4A\89\ 4
++\10»$U\89\94(V\8aT\ 4æQ\1e\85´´¤-©\88lµ®pÊ3à\16˸×\86`b
++      ¸@ÒoíuÎ\9eaf<ý\ 3\15í¬\ f\1f<sÖÙ{¯½ö>÷\9eãµÖ·^ÿø;å¼Õ¦ÛÙÚßÚaÎ\eß)üùÉQ\1d\847+\aþÍ_\9fófc\a×í<U®\1f]G`iõÛ\9f}Ùçß(ç\9d\89}\9d\15u^ÓîZžw¥,ûnçW_ñ¥½½?d\99ñ\\97~um7ð×+\9ef\19s\9aö5±\ fGãøþ\17\9aX\86È~ä\9dým»\95\89;Ð1óx\9f­¶9<uÝ^\8e;\88\8eýÖCq\19\ez¿ìgYòìG~ öù\973V±.Þ\ 4Ös~m·¾·\93ã\aBtìëwǶ{@ýñ%ÿƲlX\97\85ÕgoOmb\19¢2Üçâº\a×¾rÎï4µ)\14Ç\1d|§´{\10Çê'ÿÞ³,\ 4\9eûÕÕ\87¾~×\85wó^4M\1cÇQC¶>8w+Ël³\ eªÆ\98\8c\8es\98_õ\ù¹\8bØ\9eÄÛZd\ 3Å.ó&\8dU³a[\19\8fâbÎ\9a½ü5\8es°M\fÄîb3\8a\8dYö²ÝÆq\ eº\89ã8®Þ\97«z§p\8c\80q\96Û\9d;eH¶`s\13\1fÑØecÕst|\84ªq\1cËön:\9de>ñ^Z[÷Ä\93ß¼è\97\88\87jY\8c®\1f±©Þ\7f×\9c¼\92c'¢jjY<Òß\8ewÁË_鲬Õóаº\13çÜϱ\fZñºo)º\9cHk8}\90c5²iÖèö\1aËðÜ\89\17qÜH¶\9eçwõÔV\17©I!\10\b\ 4\82\ f\v\1f\0\7fø¤1øõÉõk\8bßS¥lU´N\ao-ûuñT\91?d.{H\14\11ôGGDûC¾ø2_MUæmññ\17²õâ\7f´ÁV¿¼òºè\1e\ 29ÈS.Þãd\12ë\7fD\ eyC®{hÒø|\ 3&DLè\ 6æ+5Ü­CGxìÕ\86\1cË97¾Ù\80Þ\13ÑÁ\aK\1eæ¬(`\0\96Ä_°*F\88x\88\81\11iXÌÉÚâªu¥\1c»±
++6ÉP\ 1\ f\10¸®úäÇ\88m ß\8a?=8öE\ab|Ç\7fmÍúaõ\12ª?ö\b\1cûØ*Aáù\10\89¸ÿcv\99Â1ñ«"¯8¦a\89ã\1f*`QM\82¶QçT\16\11ëïrÀ\v\ 5,\e4v\81Í\14q\8a÷\b\17\fU\0 '0úHÄ\f\9f3úK\96
++,@\87âaV\1a{ÒRq\ 2\\86ij,\13\9a\86\88\1fð\8cE\11\1cX<CcúÔÖ\987´C1\1d\9e`äTÖå£ÈíÏë\81»\ e\8bå\9b}âRÑ%¥v\9fú\90\1c\85\eÇæ\9eS        ·R°¶\89\ 3À\90\89¢»qóåTbErÄ\18¥¾C\8eJs\\ 2yñ]h÷bÙJô.\11ÚßñBBq\13Øs±µc     âP\ es1X<ºË|­Ñ (\86\ 2óÆÿ\94w\16\86À\e\14nqåK\18\85÷Úf*\1f\ 1kãc\ 1÷\90§°\13l\19|öP9\ e\9f(0\84¶¿¢Çå²9Åÿ/\10\b\ 4\ 2\81\10\b\ 4\ 2ÁDÀ\90ÿ\7fñ\8f~pÒHi·ó\õû\9dtåì·Ù7«m_çí\9ag=:\97ú@mó{}_ÚÇ~¶h½\18\10\b\ 4\ 2\81\10\b\ 4\82\ f\14%ÆAyC±¯\rß\85ůİ\90Z.\ 3â¼\10ÿ¿@ \10\b\ 4\ 2\81\10\b\ 4\13\ 1Cþÿu\vNÞ9RÚíl©9³O,\9aû\9bâË·Áw;óJ~îh¾ý\e*÷üÇ.ýtÉÏ\8fY©ngi½~λ\aÖ\95¼÷\1cS_gg9\7f\13\8e\95÷,y¦Ém×\1cGðã\9a\ 3<Ø;\859õ)-\87eE¯Kp¼õð\15\aÛ|ræA¿·ÈÆÎ'ç<fâð\7fè\84Ë÷p^¸mxÐo¯:\8eÎï\9eVd\94KÿÎ]k\e\1e\9a|ù:ç\a']ñ$ÇB´\î·×|ëw'¯\7f\91eÙq>ò\8e:¿\81Þ\81;9§ºÍU~¬\8e÷\83\7fXÓpÎûÈz.­ùò_ý«Á§\9b\lŲ-¥ÝØ\õ\9bÆáª_SóÉWöν¯ÉáN¬Ë#Ãr±GòÑsN5åÒ\7fñÙçOãX\ fÕä~¯­í\16õ¶õ³,Eîó\94jëEû?QÖÖ\12\ei\91\rÖ9,»eá+,\8b%÷K \10\b\ 4\ 2\81@ ø¿\86\96g?ú¤K©\80èuÃ\13\90\93
++\94k\9e\88`ÞYãmÃ\7fà\9cÉcä\9dã*¢u ò\0\ 1/\a*\13\7fD¤¬oå\f±ó\13\99¼×\8aj\19\1c:&îû\14µWÞ[\15\892Á©\80\91\947É&´\89\89\b\ f\1cóW¨\1c\98w?§Âå r$\ 2\0â3p\14Ð}\84º\ 5Vgº\88\9dU¶Î9\13½\ 5zÏ!Ó\9b\1c×­*ÜôÆêqj.\1c©\9e\ 4ÛF§ú3M¡¤Ðë\92ïî (Qþ\9b\18¨è\98§ê\ 5Îk\17\1cqM!\1dðD\1f`¢'­\9d¦Ú\11\ 3âù'v\ e¯L©ø\90¬
++^%â§\80µ(G?$È0\b\88P"9\8cLó'Ò\ 2\8a&T\1e\ fKÙýx÷3X`üqº\14À0
++Ã\10áE*Éÿ\9a\862Ù@Ñ`\88\1aÄ&Z>è\ eÓaw\90Ý2^\ 4±m|θ$e¼k\12ëFÆ\12ãmU»¢·£\9e­\83%2Ñ8@{Gtd\89êOäR&À        ÿ¿@ \10\b\ 4\ 2\81\10\b\ 4\13\ 5ÃüÿÛÿù\82\91Ò£;¯V®ô-ǹóØ\17K<ÿ\ 3åüF\1cß>ø\89Ç\v\ f\7fr©¯óTñÝ\12±÷å{ÖßÕÔ\9eoøè÷T¾öÑÜêSJ\7fó&\8dÅ\91þê8¾÷§J;\8aO8<ýÂý\r\7fzÃ+¿³r\14\8cö½/\1c\87Ï\9cã\ eÆæ,\7f³Ê\96Î8ÿ¥\86_¼ðD
++\ 4\ 2\81\10\b\ 4\ 2\81àÃÁ8u$¢%G·µ#¹ýÛx\ 6\14©¼\84²T®"\9bè>\90z\1d#9þ5Ô\88ä{7\86¢,t\bT|A)j\9et J\1e
++CFå\82WÎYe0\12:È9R¯T¤Ãk*\83@Lþ\8a
++\1c\ eá¼Ñ1F­B\bd\ 2jVâ3Ú8\11\\18³öTº#¹Hú\19®s ).BÅ`BÎ\14¿-þ\7f\81\10\b\ 4\ 2\81\10\b&\ 2\86üÿ×Ï>ñ\9d\91Ò£;ûj=ô\e?·aqSß~R·3¯Æ\ 5|ö'ß<\9fsó]èvvW\9fûõ\v>µ½\89\17\88ÝΡ\9a³>yÉg~RÎG¥»\9d\ 3%\7füa\1c³^ßõV\89#P\11ý¼;¥í\7fÆ?m~¡\9c÷.u;\83Õß¿ãµ\19\87é|ÊAu;;j-ñ÷ó\v¬¨z^ö\82½\8fù\ 5´iòÓË\18cs\ f\1c_k\9a_ÚÛûÃFæ¹þøÖ\9a×~U¯Ï\16\19ý»J\91ÝZóá/Û½ü¶"3J3\17Àî¢#]px꺽Ef£ãvûjnþ`oÎýlOm\99{à±þÖ¦êö\8b~ÖÄT4uà»e\ ecó ÜPæ¾\ 2ÇÖo-oy\10"Ïo[åuXqÿ\95¿àX\f®wÙò\ 4Ðx\8fÞ?ð$Ët`\9b­®ó[¿ë»Yf2ÏáÐ\94Öf\97\1f8æF\96\85ÆÖ÷\16\9bý)\8ee¯Î½\91c8²e]\8e«s\1f]Ë~é°:÷\vÏjkÒ³ìÕþV6Ð{\9cÛ9×Ìýku~O=¼â¥÷ÇwÜVãP.Þ÷­3\98\a¡åkØUuYÙ\e¼\9by\10Tæñ\1e\9bڮߦG\97ÿ\aËrâ>§\17Ù\99\9bº\8ckÒG\9fx~\87Æ©sÿTíst½ú£¦´º,êí¸§Ü3J\95ø\15\81\10\b\ 4\13\17ÅÇhJÍù±r®GÖ-çëUÊVEëtðv(7ûÃÎ%ÿ¨äf\eJ\86¦\8a÷Å\1f¬h\98\90\8d\ fÙhx=w\8bQ]ðxâÖ¶dX{ôOåéaXr\ 1\93\1d1Mãt\8a     Jé¨\r\86\85\8d'\1d±Î;Ô\fÅ_\9b\18³Ò\94ô\9f³N\rW»EçNQ\1ayjÛøXrÄs0\81\94ÏÍy\9d\8dÑÌSÖ®±¡w\1c\98[\r;\97\9dM´¬Xg¬*\f\19,V6aY££=BÞp\17ñ´\8b%K\98\v\15¢O\ 1oK\94Ø\1fðC\8c\94\99nÉù¬´Ë\9a\18æ3ôÉXîà\94¦|tC\8b\ 53er¤£ûâ|Æ8´Ù\92Ç\1c\82\82\1d\ 3e§g,\8bKI\97ZöÉ©LJ`IC wz´\95'\ 1J)\95\8b\7f\9d^Ï`Zí±¹Ð\1e»\15Ë\8feÏ´ïð\1e\18п\83Å)·^Q·\14{\9e\8c}c¼ó\11\16\f\84Zx¥IÄ)@.y,\ 3v\eLn²s\91¢
++(M\1f+â0á\80­\9fMÊè\a£c¯`ÛâÕ\ 5¯(Ì\8dà1¤Bï\18m\98½¡4v\8eÇû\88±¹Y\eJÕ·\94þ\ f\89%\1d3ó;\10¥\83G\a\8a\88\10Ȱ\89´ÅH\ 1ö±\858Àå\8cÍ\92\93\86V¸)LÀÛ\1aE(à^\82yq\8fZ¼¦xZCÚÔX@S8\ax\9f\e\\fõbÙÏ\1e+EÆÃn3âÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81`"`Èÿ¿à\8eý3GJ\8fnòùÉ\11yˬ?ø£Âç\9f̤n\93\aÿm\1c;\9e\99ö\9fìÓ\f®ÛYSÎ\8fä\ 5èvî-~Üóq\9côÞ¢ùtÞk\13»\9d-5\ f\7fõ§½^Î\eª#0Pý·³\9e\9fû^©/\10rêë<0\8eÏþ\81þvìå3W²L+;ԫK;òiÿÙÌKþ\95e6²ozkiG>íµ?¿&7þ|ŲCãøúw\14\1d©\96À\12\8fe©ñ\85oª~ݯLÛ°\9f}ý:±\8fù{Õ¯»¡·y&ËL`ßû\r¥Ý<\1cW\9fÞøÞ­Sì\7fNãÄ\bl©ó\9b\8a'[\19÷¹µÚø\91\87®:À2þ·ª¾Î7ªÏ~ÃK\e\8e-2\1f2Ûsk\91\8d]\ fá\8cZcáÙ¿\1d|\81ýùÞs\9fkj»/¿v:ûìµ7\1c;qÓ0\7fþH_?óCP\9f\17<²þg,ó\9aÛÝ:e¨Ý\9a\19\1c\a`2Ûsa\8dW\18]\7faziw6\8e¥\a\aîà8\0¥ymo¨º\fô®<\99ã\0¬æù-­}^sæ:®±àcÃ\ 1ñø°\18\81ÙÜ.Z˲ÕÃj%\9c÷ç\+Á\94Ú\f\ 2\81\10\b\ 4ÿ\13\88/Ýé¬CVÖj\1d[®t¥È\11íñ\14ãñhhUÀ\ 3\94\11t\94¯\1c£vÁ9rÊj\17µÏ\89|ÙN\19«\14\1eE¬÷D\90E\ eÛâ&×ä,Ä)òà\17Ww
++>X\85n³/9ÓäÏ\8e\14W\19u4äô¶Åw\9a\ 2\8dì1\1e\9e¾mÄ%¸Î\1a\97\rùÅ3D¾\9cg\1fu6\16\82@\1e\9asÆ+òM&r(ã¤*5Ë­óøÝÇâ}ÿ¨Ä\11\948\ 1\96\fìØÏÚòäÛTü×è½ØØéH\1eW§bãï\85>DÒî\9b\18\81\94a?rÃc¤\1c¢\r\14Áá\13:µ´0A'M½\98LTcP$Z\ 3ea7ØYµ~òìÈ\8d\ ec(ØÀÚ\80\15¡Lq§a=\15ÊÒc=\12µ±
++í)c\9eâ\12Ð\17¦¬sÆ ÖÓ43\1aÂ\90\14\19 È%o\ 3F³°D\82%K\1c\b¬\r\9bb³hzêÇ\9eËΣ§HiõZa£)lªIÃbNþwóà\ 3yÑ¡`\89\8b1\98¼\rÆa{´1\ 5\90°±é^È\916±¦§ô ±|äÏOXÔ\ 4\vá:ì.L\98\1d\94ȹh\81í\83i\86\1c\85µ¦Û\ 67\ 5m>\1d\\88\ 1\93Ân¢$ü¤È×o19\9b\98\98\9fÇ\88\18 ãf\18¾ß1\12¬©\86îuºÉ\92ÊnR\13Ïc0\18½¿Àöè\ f3\88 7ªÏ\98¾Ë\14U`ÊÍ\10I\1d|pàÃÃb¢)Ó\ eô%8\b\b\ 2|XdÉÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81`b`Èÿ¿üW\8b\8e\e)í6ù×wã\98ñë¹ç6ùó®åÏ'Nþëþn\909òMHÂ\83/\10\b\ 4\ 2\81\10\b\ 4\82ÿï \9cÿ\90,ó;¨ t¢P\93è|¢\18\9el\8dRÞ¸\98½      Þ:í¢\8f%ìÁ$\17\9cQÎâ2m\93¦ð\8a\982U\18\88\1e¯ÔF\ 5\KL\11¦\90\15\86)l\14ÚG\9d\93\8b6\12=\aQ>ÄàU¡ü§Ë\8c§
++\0ÞÆ`\9cÓ^\87h)F\9fâs\88û Xñÿ\v\ 4\ 2\81\10\b\ 4\ 2\81@0\11 ïÿ\ 2\81\10\b\ 4\ 2\81\10L\ 4\fÅÿÿî¯\9eX?RÚí\1c_ëù\rnÿäO\v\ f\9f¶¹ÛÙXÎß\82cáóÓÿ\8bùù\88Ïo^½þc\97\1f\v_`VªÛÙWxÑNÄ1ã\9cã\7f[êó)\8dó{*_Ú\9c7ÔÊr>¨Ø×\996NݾÕu\8cÑ\wç\1eÛ\8eóï\ f-y\85eÁ37ÛÚÚÎ\9eÚÔÑ\8bªá¥Sµ>áµ'5¼{Ñ6|oï\16\1d?\89ãº\a/y©­ûæeó\b\ 4\ 2\81\10\b\ 4\ 2ÁG\ 6µö¡ñT.Ï\94\82\8aôKÐ\»O\19«£OT©/»HÔ\94ÌM\19S8B\r?\1d,1\1d¢?\17K=I\83.J\8d½\90½vTyÏeåÐkæ1\1aNK\13\©ÓI\f\88Zk\93\9d¡J\8bD$h\8cvÎjª³\19\93\ e\8eÊCZïHµl\88RS\17\ 6H­  KÎ\19b\ 4¥â\81ZS\1a\0tõ&ç\0I*}A\8d\15³\85\1aQe*;\18uV\85C1hâ²ô\18À\88ÿ_ \10\b\ 4\ 2\81\10\b\ 4\82\89\0yÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81`"`(þÿ»ñªQÿ\16ÐíÜÔO\7fS\1cþ¬ís/äúð:v;»jMù\93®\9cýv9\1f´ívn\9dÚ^?÷§ÛÏ£óTJ´ÛQ}¥?\1c×/øÔörÞ8ôÃuÖOÀñÄ¢¹¿)çmðÝN*×\7f\19Ç\9c\9dÛ.(ç\9dÇùÅÔŤ\87I\9f×w½Eç\9d\8a¡Û\996µÕgöáßÿu9¯IÏ­E\7f\8aÝ\7fù\8d\19o\94ó\96®ßSõßpíi¯Óyo¬év¶\94zñ£ó\1a6V=g=?÷=>\9fS·³ð\by\ró«>7\7f\9bå¼v®Û9ã\98öüÙ\97}¾è\93\9d\89m=\85\8d8\96Ï\ùL±'\15Z\98\a³\8a-¨ÖÂ÷¿°ªÇ²@¥U!\9bVd\94?±¡·yf\91Y\138\17bG\7f«óÅqõË,óM\9fo\16\19å;¼sæ\92çY\16\1cçW,.û`3\8e+~qó_ðÚ*¢\8b\84ì¦2/j|ù\9eõw±Ìfnwh\9c\1c\8aï\15=¿\8bã¡\13.ßÓÈ\9a>Sé\93\f\7féÁ¹[\8b,Ù&\9fc~­3ñÎ]k¹Î\84²\8eeGõµó;<ýÂýE¦­SEö\±ó \8eUûþð(\969Ź\1e\ f\97¹\7f\9cö×k§\9fÅ2ßä\81l+ºü      \8eÅO\9fß´Ë\8dͦ×=üÕ{Ö=Ë5/´JE¶±¿]\87U½S\1ee\99³¬Ë)S\87d\v6³,©Pdj\98l!ëb}âvçNnÇ{wòú\17Y\96\1dë2¿ìÓ³q,=8pG\91Q]Ð"»µî\89\81Þ\81;Yf=·ÛÔßÚzžS?Sd^YÖÅM\1djwÌL\96\19ÃûìÇ5\1fçâg\7f¤Y\16\ 3¯í\9acÚuøí\94å¼F>5z\ eÖ>Wöþ\85û\8c¦ÙgG\959\9c\89㺩Ëö°Ì'\1eïk¥Ï\ 1\1cKöÏ¿±È\12\14e\9bMnÇ[:ã|Îǡ¸¼?§´ã-êí¸\87?\7fT£Ë\9eºî_Úû7÷7²Àºì\9eÜ®û¢Ý\8fÞÙÊx¼oô·ëðóÛ®y\91eÖK­\13\81àý(±\96\8e
++\1fç\14\88Þ\18\1fò1XåL²¥ÀuÀ¹H\1fà&PôcJ1y£\
++ø²\8b\1a_ýø!Fc²¡²à\11ß\80Y\9b¨|Ö9PIó\80\ f9ª.n¨\987>{sÔ       íMÌ     \9fý¸ÑuðÉk|4)«©7C\85·\93KI{g©@¶Ê¤\ 4>ðñ½\8e¯ÃR\13Z{\1f3\95\85<\19\7f\9b¡ØÑà\1dÅwf(S~Çã  Õú¶\9eÊTã;\f\8a@©`µkÊT[\1f¸ÃDg\8b
++Þ;o\ 2E Zôc\8cÏ\19×Z*q­¨Þ:&KZê¦î3\8f\83\8fIo)L4\ 5üq\1aͨ³à¨\8csL$ö\9aÊ\96ÃZ&¡ïl¨8ºVÐ\82>+é;&SÕpçaZíÉn95ѠР  æ\83©\©\81î¨g<a\19Z8M\ 5¤KØiÂU\ 66Ö1\94ïU\9a·¦"ß\8eVQã\8b#\9bèxÝ).µÔ2\87
++Xt*O\8få %\82Ú\11\e\0ý(o¼\8dø®\8dTA\9bÊ\89;\1aGá*üLeнK¥â9þ8,\88Ò\89Ê|cí°\e2õ rÖè\9aæ\9a³µ\96j^Ó×0´U\14{\8bݧi\82E'OuÀ)Æ\17­u©Ô\8e\87#l\b\18\QÈ/¾ö\ 3\15BÇ´\8d£uÂ6\8d\14+Ks6\14o\8bA-ö0\95\ f1ºHüÜ9\95g%h\ 1ëÐÎÍ\1cÍ\9b°ß,]]\b¿©à½\851a\ 6Ì+¤0lmã\7f³w­ÁzUå9_g\98|\aN.¶ñN\11B$\81\84°Ö^wA\8cN(\91"·F\b          ±D      \93\ 3\ 1ÊX\ 6µvZ¦¢EÊtt&­´2\85\1fA\91À4\16\ 4!\94¡EÛL\8d\12ä~\91Ë1Á\14\87\86V\18\ fµÏ³ÖÚë;9ßwòËt"Yï°C²×·×^\97wí½ßõ<ïû:f\83\17MÌO\8e!\88üa\13\18ó\89§ß6P\1c\12\92ñ&\8d\18\1a\81ê\99Ù^꤫\12ë\ 1
++\ 45aHq\12}EªÃ`¦\98Ý\1e\9f¥PÈ\14§\1c¢\981Ýa\ 1Æ9ŪµFƨâÔ
++è+f\8d!Ç©A^aY¡ãÐ8¬W\12\8f\9dÄpa\ 2rþzþ\e:¡µ\93\1c\ek\bÓ`\99¾\9céÕ± 0\86L¦Î\81DÓQ/´\11úËóe\ö+ntä\81{\f<Öé¸uÙ\1eX\ 5h@ð>r¼Ñ\8eÆj\93ç\rÓ\ 5µðL\ 3o\1dT\175\94ë±Ú\1c\9f
++ÌÈ\1e¨\ 5.\959ÅŦT;ïè2~\ 3\85Íz£â|C31!\18\1c¬ô\18Ï=ýÝâ9À¥*\18\92­\8e\9e9Ïi±|0òé`±: ¶|N¡\9b\ 2K\90Ï\\81õ\81\9f\18Î\\13Ûŧ¯a\86x,o̲¶X\a\1e\8f\88\0íÆºÀ\97Vh\9f\ 5x6\1aV6N/\aòìÑ\0.`+\18ø\1e/\a(t\1eßÀiÓ\ 1\1a\8bª<çÏ\8b\80Ud¬Ã:\r\18^>\94Ñ<>\fÐu,9|\975
++k\16O.<ÊÑ\18\9e¢Ê;,I\85©ÆK#®§\94í\1e\17\12½g\a¡X\98a<f\18_\1fú§ø(Ä«\ 1za0VxNZê\r\1e\ 4"$Õõì\ 4V1&\8dwÀ(\90â\ f»Fr \ 6Íõ\83\99´qÞ°È «|\1f`*5µ\1f½\13\1c{,"\ïÐht\97\83\8bµbð4fø\7f\ 6ï\17\1c3\8e¦Ò|Éé¨#(Àë1ö/.QÏw\85 Am¢ÞQ=\98\ 5Àñ\15\99ç\80\7fE»`èå\7fcÅÁbÇ\1cNé÷_\18oÿ/ýúûÿxâû|jg¬Øf×ÍûðEÑ\9f\1f_èÝβò]¿p÷å\1fN6i\ 3û|l\92ý\ 21î÷\87­I6^\bÝlsð÷\v¿?ã©l\8fÀ®N6E¿ý¿aF[ϱ»?\1d}ø±Àe·sÞ´ÁvûáÃ\83íöd\87Ó\168úWGĸ\ 3Î\ 5Øç÷O\1f\ fuºÅÆyü¶\v~\1eÛ\8fùJöÁÖ^<\829+\9eM¶´TÉ®ØUö\ 1.;týOs\99O6㮲\aq×?^²#Å*ð6Ù~~¸­SÜ\9cc\15X,ÇXvÃ\8cvOãé;/z1\95y\93l¸%ÓZ\e\|yÕÓ©\f\8f\82X\96b3,ÃqÃ\97ÎnËò>Âá%\ eÃÅ£\8bU²Ïm¶m\97ĶÜ\81cõÃ÷\99\fÓugÄëfáX÷ÒÜ\13SYȶû¢Ò\87{6åý\0<ÂÓ¸Ì)1\15.\7fÏ\ 5io"´¶ô\82bk~jûå\1fHe:\8fÙØ\8cÉmé9Ó&·mÇ\86Ûùþ\83\9d\97u\93­Ù^·m/¶ææ\12Oâm\87\8f$\e\15ï\8cÔ¿í3Z\9dذeñÎd\17j\97Ú9s¸\9dÛß\1dúX\9c\8c\97gNkÛrÚO\7f禴\17&â^A\95*UªT©R¥Ê>Þ«\e´ç ¸G\ 3KÅgÛ~2{UÂ\b\9e\80\15\18m÷Æ
++\9a\8cv9¾¦a*\1aX\81\9eIθ\vÆÍ
++\98°E\14\93\9eYf/\83Í\19$­ä`aõÃ.·4HaZÅ-<\aë\93Ö9\f\1an"ÀtäÖ\19êó*î·\18Í\1d6Ø2V\bÅ\8d\ 3ü\8c\9b\89Ö¸    Ü\88\83=Ì=\ 6¶Òã\9b\95÷ä¶R¶\85д@ã\8aÛ\86\93\r\17\1c\7f\8cûjÍ\ f¶  û5ü7,4\98p°]a9¶{\ 3´U\eت¨,øýt?£\81YÏÍ>ÓÎmÃý1\fu´Å-íYØ£\8d\80\ 2\93¹·ûU\82\9bBVÁøt0ám;~\8dÓ4^\15oâ]ú=Z\86\12çÎZ+öñ^éĽ\97}º§À\1dFg5÷ulkocʹ]"\18\b\80\9bÕ\18\b´¹ÑÖ{©â&®\ e!\18î\1aâj\13wb¸I"=F\r\ 6\83\17ZYt\9b\8eíÀ¯Ê¸\ac9ÈÆÄ\9dÊ\88áE½Â 5q\93 ÁbÁÐ8\93Ú\12â^"\14Jr\83\cm¡\15\ 1\8b-ë6·$0\1a¹\9eÊÿ¯R¥J\95*UªT©R¥J\95*U\ e\béáÿ\7fûä?¬\9cXÚÍøõ7pÌþ\9fùKr\1c~ÝÍ\9cfþqäYsÿ+ãù¶Û9¡àüÇí¾ï¤\8c\89\86nçO'áÕ¯\9d$_À­\85s{ÐKïúw\9e÷A\98nænß\8ecøãoû\8f\88Ï\e/QOÁw\8f\19Û±.\9e\ fÎ\ fu\1e\82þ<\ 2óJ[/\19ýÁÜÄaP:á¾Kg´õýáÎ+2¯^dþø\9aÂ1\1e\19=fS\9b\7f aÉ\8b\v¦\7fÖ\86\8b^HeMHun(ü㵯¼ãÞ\9c\9b@%\1c=åS¸\1eÇ\1dÇ\9fû£Ä\9bÐ6áý\9f-÷»xtë\9d       ·w\99ç¾(öa0¯þú2\86+\8fZ\9ex     Ü_\9cÒà\89]?¹iYâÎ{\999\ 4\e"\1e~\v\8e3\9e¹ï\8eTæb\9dUªT©R¥J\95*U~½\12±f-¢?\01ÔD@ׯgüÎÙ&ò~5y\94.\92¼ñÅÚX#\e\13\btâ;­     Þ\ 5gM£\ 4!g\12ñ¥×¦Ñ.$\16¾ô\11\87tA5Æ
++%\bsz¯ *
++º\134Ê:\12'é@ÃÖxz9\bÒÑ\8d\94¤.\93\18bäJ)T£­$̨½3¬)\18\89\96G_\v#\84ÊX¦\92\81 :IÙZ     µßrþ\89Y\13\7f\ e°\13ð)MD¸\87\83\eT\8aQ\8a¾\86û¹\9fÎàØõÂ
++Úih\17\94*º©¨F\88¨\1cè4éùÚ\19:nÑ\89\ 4öG#´
++ôì¦ß\8bjHê'A\ 2ãàØCg\ 2\9dD\9cƼ\86\80ßD\ f\12iÈìÐN9úÞÐÜrähе\8a?k\f\8c\82ªj\8c\8d\8c~\f¸\15\93ª\91¥¡2\9f\ 2C\1a8\96tÎÅ4ã×Î+Eç/\159ñ,¤;\83§×\17\19\ 28\8bÖÈÆE\7f\97`cÅtÂ\89³¨ÑLüXpdé%\ 6\8d C\83\84\1axNº\8e^gÑ\9b¡       ôYÓ:à\8eøA¤¨\90¦ß°á\98\b\12\16`¸9Ó\8e«àÊT¡ÅÕq        Ç\v*Öóu(y\ 2´Wh+\86\ 1\13o<\17¯Áz\8b:c\85q\18\ 4k8è\9e+\17\93\ 1³LÒ\13\84\18«@\ e\ 4ݧHýÇ0\18úÑ[2\ e \ 1*úI\99¸ÂÐA,]ÓDN\ 3&TÐ\1f\8bî\1a\86\8cð@²J¨ø\7f\95*UªT©R¥J\95*UªT©r H\ fÿßyÃ\89ë'\96v;»\8a\9eqòzñðÖ\9esL:o\94ëæøpý~õ;âùE8æ=ðÞ­\11Ï\97ÁuÇÅF;f÷õ\8fÄóÚàü\8bãÎ\8bXO°Â\ru\ e\8f磯ý-ç'\9fr!²?¶(Xÿ'·?³%ùè[\93°þ\14\ f\8eek~xÙÑ\19ÏÏqÖ6îÅ/~^¼\8e|\83ãýò§²ï{\93®K1\10\ 6û°\ f\97¶,ûá\8aù)\8e\9c\94\13y\aý±ân\8ce\83ãºÝ0.>Ûĸnc%\ ea¿\9fú¬Ø¿Á±Í\16W_ô*UªT©R¥J\95*\a¤¤8\880&\84\14Ö:׿\82wJ\9aqqÿ\1a\86'eà\0-S\1c¯Éb\ 6Lâ3O\f\a\9e|\84 \19-`R_ú_glE\94¡}Áz\86zlÈ|pÖ      ß\ 4\11c,èà\18\9e®á=<Ì\ 3i\82\16Ê+\13£*Ä\98\84l®ACÐ\b¯\19\99\8eÑí\9cTÆ«\10\ 3·¢íÚi«\19Y\13V\1cì+ü\8e12\15Î\90e¡¼48©$úN&\86n¼õ\fÃ\1aÈø`\ 4P\8dsÂ2è%\ 6\14}6R\ 4\85¡\14Ò\13ïVÚ0î\1ecY2\12¡pÊ2¦(Z©\82¦Ç>cßi+#/C£M΢uƶñ4'ÄÂ\9bÌ\8f~\7f\8c\eºOâ\fTü¿J\95*UªT©R¥J\95*UªTyëKµÿ«T©R¥J\95*UªT©R¥J\95\ 3Azüÿgv½ûü\89¥Ss\=rί\9eÿüi)§\9aÅùKã¾\ 1ùí×ÎÔ§'Þ¸\9eÒí\8cÅóýq\ 1uÉY·ðÍ\85oæ¼êºÛY]r\9c\9fºèÝ\ f¥<iMÓí¼~p{ß\ 5»¿úÉè_à\rý\ eb=\ 3òü\95x}\v_» æ³gô\87nç]%\7füó+Þ·;ù#8Üwx\12¿\83µ¥={Æ\1düÊ!m¿>rÁÂX\ f\ 3J´y\ 4ûã\11Î\9cÄ\7f¡\17ï°ß\7fáÊ8Ö×àXùÍ3\7f\9cÊb*bÆù;¸íÇwî\>\9aʬMñú\16\15_\83µ\8f_\15R\1cC+\92ÏÀ¬â§Ñ\9f·ðæ\92³~ýèú»S\99α
++ÇJ\7fûó\16n\8fu\9e\85ã\92\97\e\91Êl\93rÛ}·ä\1füå\aÏ|"\97å|ï#{\89\9bxW¼ß\87p\9cý­ówæ²\90â-¾~Hïº\ 5\98\8aÙ_bI\99¯ûn>\7f[.˾\r[\8b¯H\7f\ eÅ\rñºU8~±ùÂÿlc*¦þug´}øÌ\119o¡S"õo^ñ#¹xÛ9ßHúÝ\84TöÙCÚ9ºâöUi\8e¼ó©\ fSJ[úc1&\1f\e^÷ÆQyn\83ÒiÞOÝK.Ä¥¥ÎÏÎX÷㼦|ºn$\96\9d\8ec÷-«w$\1f\13©SßW\975ñι\17Æû5ªQ©\9d\97\96\9c\8d¿úàHªSéÜ\963ÊÚ~ø/\96ÿ<ù\9f¸¬Kñït ºü¦u©\8cI\9ccÙk%×f\7fîÅnY'ËGOÚ\94ãPæ8\9bW\97gÌòGÞyw*Ó*û×Äv\ eÎÙ¸ ø´|ìùïljý]\92\ en,z½åk¿ÿ\93=}aÎ+1MïýÒ);rìR\9bÚâËúÛòþO\8f¦çT\egóêRç\9fL=5\97\19¯ëË¥J\95*oAùÔúõ\86,ZæAÇ32rfñnµ\91',\9c\94^µyË\9b\80÷ÿ¸ØuZ\92á,ð/\eB˱6Ú\9b\18\81Ë:Ñru-\89×\96±å¬Áë7x¡bÚmϸp$ç\92\8dË jø£ÁsÚ3Ô\9dõN\1a\11óz» ¥Æ£\1d73\8dW\1e×\90\85\8b7ë¤ñÜ\18&\8ea\9eM\bÞ\ 4\ 6\8bó¨\85D^ÉÀg\12oWÁ\94ßR)\1d\98\90,æLG»\1a¼"\19D\8e  Ö\1c\9e¿h´`8;ç\98·]+ÜÚyôZ\19&\1eO|s£Sν\10£¤©\9c³{b^õÄßv\91L­U;>
++wbD44\80\91ý\ 4     ¾Þb$É6o\18(\8féÔP±\10Î\18Ǽë\91"î]á²OÈ\a·/s§\951ç·T̽§\18\ 5ÎÄ\84ìÆã{\87ÔiæfÇw²$¹Ü3E\9cÆ\1cÈà$)ëLUÇ\bs\8dc\052©\83S\8eÉÝcl<|O\19ÁÈo\rûj\8dðÌ(\87Ù\8fÉÔñuÀôï¬H4Þ\aÏTðãâ-N\19߯Irá¡ß"Æ\96\13Rx\99b2\ 6&Y³\8c@Èdñi\1c¡\10FDÎ6Cú\85àÚ|yZ\92'\8f\89QÔ   £\85Ã`3ü¡ò¸\86Aæ|Cb¶²1\98\9e\97LbèhA9ª\19\93'òO+Tä©Ã\94¡jZë¼wãr2\1am¡c\8as\10#öYfÜ£·\80b\18½8d°RBL-\8f\8fB\8c\8a\10\81)ú,[\80»C\v \19P\a,»FæuLJ¾Kµ¶¾\f¿aq(Ñp1YÞG\86\98D-x\18`}s\f¥k\92¾2÷ \11\96«\9eN\1cÌq(©oP/\ 6"\94|"åù\1d\90\1f\10\1aíÇû\91ìWñ.+þ_¥J\95*UªT©R¥J\95*Uª\1c\bÒÃÿ\1f:ùèg'\96v;W\16üqÞCóÏIyé¤ëf¬z\0Î_°Ú\85»\ f[\93Ï\87ngNÉE÷ç§¼ç¡Ì\17@=KâùͬÿÕm¿ày-\1cêY:½­gÁn\1d±[m\84êvVÇóÄ\9e\8fxó´Å\91\17 \89Ã?5Ôûýx¾À\83\11Óëç\vÜ?ÔökÁ¿\1e\14ñJë\85îfÜ\9b\9d;öÕßþeÄÿ\95lZ\\9bøßß|àüÑ\8c±ç\18\81³â\1e
++sð\9d)G^Le>cÂO\95\1f½8a×ÜH\8ee;b\e\ 6\9bÇ]7\11\9bï\16\8cöÐ9+\9eÍØ¼Ju^\eçk\11\8e+\8fÏØµÒ"aå×\f·}[ÿÂú\19i.mH}\98\19Ë\ 6ãá\8bJ\9cçï¼(õÏú\9c+pJì;±rñåUmìÄ&ñ\19¶Æ²Áq\15\9f\9bÞ\8eY\7fÞB_æ`íË'ýV*3\19/^V¸\ ek\9e¸g8\95ùÌ\83Ø\18ËfáX÷ÒÜ\13SYÈÜ\8a\a\v\9eMy\¸w\99Ú9½íãw\8f<\19±daL\1a³]\85Wrî+Ç\9f\980vÓ$LxAÑé\15×­{4aì^¦>$\1c}0ƾuF;·ç\8f®\99\9dËB\1aëç\86Ú:ûñ÷¯\14¼\7fìà\8b\9fMe!cú\8b˺ë\8f\rùØP¯ìÁ\14oRë<·W\17¾Æåÿ4òHÆô3\8e¾½pvVn9/õA·ý[V8\v\7fçצ2c\êß]\85#±âÑoËTælZ\ f7\17¼\7fåèÑs\13\17@©T¶±¬\87þ\9c\943\v\1fhùèé7¥²&·ó\86q\1c\82ÓîÉ<\ 1\91Ç,Îà\\96C\9d[\ fnï·töY/¤\98\99J&}ÙVæè´Ñï}3ó\ 4òXß8­WvÉ_¥²\90y:Û\87ze\8bgg>Sæk\8c\94uôñëN}9=\ 3\9d¬±6«T©²7ÙK^2ü\ 5o9fî
++\ 5\7f\9c2\bo\9d\ 4Ó$¦Ë/\12ÇHdù\1aÃ\10a^;)\85±\8d"\ eç\ 4¡;©\19\1c\rUà3\85\10o°Dâ\ 5Ca9b\83
++u\v\1fS\81\113n\18¦K\10ÛÇ»Ï\11´\92Ê
++<ðñù\80\17I\13\86ùºpG/ùÖ\95\f\17m\88Äiï\88K¢zå3\96Æd_®Ñ\8c`%\85âw\86ÎØ\9d´f_ÅÈ\8a±Ä¬\89\1c\ 6í´lÇÕz\85zC\8bm\13á÷¤)X¦OÃp:æ\10k<{NF¢b\9dÚ5\96¨\9f÷Î3ð\98g\140\ 2\8b\84\85\19X.`d\eé\84$xï\84     \18â`\1ao1ð\8cêÆìfL\b\17\9cÄ<2Ì\98Ç\98
++f@Ã÷®ÄkV\10\11ù\8f`.º¬8\99\11øx±\f¸f\1cñP¼|\88+ç±\v:ü?ð.
++\1e:\81{áÙq©\eñ\e\97û- \99Ns<¨P¦ä\80\8e\95éMâ\80²_¤\8a`$BÌ÷§\12\97\91z\8dA\82â6l±\8dk\1aÝ\9f°\8eÑS\esB:ü\1fM\8eã\ 4\1fs(ÆyöRçÜxÐ\rÆ0gDAm¡'¨<\18Ü
++Z\1dÈph"ñÃ1á\9d\r\ 26\82"\13\80ü\e\98D\91_P\98\19¨ó¸\\8cÁÅL\83|4\99ü|à4Åh}\8d6z?ÏÏØx\83¾âÆ\1c\9e¬\1f¨ÔÅÇ\ 5t#@\83-óø\19¯©êPú8c\96-ágª%a\bó\rÅásX\8cÓ\15ê"\a\93Ï<<A\9cËã\83\9b)ÒAȤ\91ºâÿUªT©R¥J\95*UªT©R¥Ê\ 1"=ü\7fi÷s\97L,\9dÚùnÁòÆûùOíÌ\8bø\18Áµ/\1cµþ\8cèß.éÿÿZÁ­\17î\9eµ:ù+\aÕíÜ:ÜÖ³ðû3\9eJ\98 ðÝ\8c¥\11\83ûÁióÿ7Ö¯¬ió\ 2\12\97<øÌ÷ýs<ï\84ìvv\15ì{øä·ÿ[Äù\ 5ë9¡øüîéÿßó­ÞÓÿÿ\8còûcÆv¬\8bí\ fÎ\ fu6\96þ^ð¤º-ùÙË&áÄ\87\96>\7fbôù¿Ïþù&a\9e§\16¿þ¯\1f¹êG\89\ 3 \ºN\17\ eE\7f^§
++\96¸~ô£×¥²à\13\1e\9arúqlV¸ÕÉ'^\19\99\92\97ñ\8d\9eOeN§ë¶MoÛrèmË\1enýì\13®\99ü¦¿\80ã±o/ýI*³&]wElç_â¸ðg_üVÂë[ßè¥\ 5\vîç\0\Yðó~\ eÀ\8d¥-êØì\83ïDÆÏ§\14>B?Î?6ÜÖÙ\8fÉ\8f\15¬{Õèu\1fÊ\98¼Møë\83\ 5c½òÏÎýYÂäM\8e\85ðZÑ\9d\8c<\93ðs\99Çsd\NÆ\89\98ü\9aÂýøÚ\965\19\a7.ãüE\7f·o^öÂ\9e>ñ#ÅϾ\1f#_Rðå\95£KnËþò>µå\9aÒ\87Ïݱ*Õi[\9d¸¦èÄUsW¦:\9dȱ  ®\98Þ«s"¶>s/\18ù\8eé½²[\8f̹#]\1aë^ü\88~\8cüõr]?Fþ\¼npÎÉYe­<~ãUϦ2eR\9d ¯çý6lY¼3ûà»ñ95\aãî\8f\95çËï=úÄq      w\17y\8dÝ5­Õ³S^|ej*Ó&]w\7f¹ß\1fÉ\8f¼\90Ëâ~}\95*UªT©òV\94\ 1<\ 6âøºÑønÅ+Pja\ 2ɲÖ
++IäP\1a²\r\8c¦Ó7\91\89Üzâ\8fÄ\8c\8d¡g6=ø\8d·Ä\84#\7f$4\r\r¾wIºPÄq5\83\e\ 4MôYÒý\9fÌ\a\v!B\1a\95!æë\f9-ÞãB\9d|íYoã\83#\8fC¶9ÜTã\1d9*\f\1a|e$\8cØ8ãI\95ÁÇ\8a\91¦ý­H¹ìdP~\12¼xo<\93\98ý\8dÄ\8a\80Ï\8eI|Ã\19\99À7\11¶&z\9b9:Ò÷pkC>E\88\8eû1\86BÎÿÇø\ 4\92\8df\829ít\8e\8d\11\ 5ò§\8du:Æ\0HçaCpü]ô;×øð2ÂXK¢\86ózÜüî\87¹ì\ 6ñ\8e\18Æ@\93,\10"\9bÈ7^eÞ\93\8e1\r\C-¤öáæ¹\9eA±D0¶ÚDÞ\81·¼»R½{¶>ý½Ü\8a\86S£%UÈ\93È\90ç\9010"\8e\1eùR\11[o¼`Ð\ 1'&É\ 1\99âF\18¡÷       i9\11\9e\f\aå,ñ\7f­#\9d\aë\ 5·\82Z0\9f¡!\e$8L\94$MJ\93C\0+70Cbàºð\91\r\80ÿ\18\86#Rs\fù0\98\1a\96@\90\91Z@î=F\80\1c\8b\86¤\10¬5\8cºÖ¸=É\v\15ÿ¯R¥J\95*UªT©R¥J\95*U\ e\béáÿ_u³.\9eX:µs×$qþ·\95ó{Æ\ 5x=ú¿\9e\8bcöÖ\8dçfL\17ç¿W°»=ã\ 2ì*Øø\9e¼\80e±~b ;wÏ\8e¸½V\8c\v "æx6\8eëFçÿw<\1f\ f\17\9cyO^ÀÍ%NÁúÏ\1c÷j<ß\90\17Ð\8bS°g¼\80±â'>òÐÛÿ%ò\b¤B;\ f\8díÿk\1có_;9úz[Ýà¾Ï\15,ó O\1cö@ä\17\ 4\9d\8d%VúGßH÷eèX\8cClÏ"\8eÛ\ 3ïÝ\1aÏË\80ñ¹}Fûû/~þ\98×2\9fB\ fu¦Ä~\ræ\1c\ZÚÚÏ9¸½\8c÷%£C*Ç+È1úO(~ë+U\8e\1f ]È>û{É\17p}Á³?¿9aÏÜðJ8ê\8bÅ/¿\9fãp\7fÁºû9\ esbÙ\998Ö<2vb\8eW\90y\f;Êuýù\ 26Çq$\7fcí+ï¸7ó\18Tj˵±ìÿØ»\1eX»Ë³|\8f\96ìÜQ@\94IeÕ5\85Ñ®·«ßÿ?\eCD\92u¤TÚ\15¸íZÚI\95\ 2\17Ú\10\8c\84°¸dÄ i
++\89hXÒe\ 4\9a¥l,+Ú\ 4\r*\9bA[µnÌU\84\ 6gÃÊ\1d\18-He¨ïó~ßùîí=ç^\17g\17 ïC~·Ûï;¿ïÿ¹÷|ç}Þç9\9b®oÿé\8a\17\8fç8\94<y\8e\9f_¸ñß«\ 6BíËV\9eëÁ\1a\bgÍÀc¸÷\8c^\9d£_¹¾Ô\99T\8d\91Ï\9dÁ/ ø\1aü!]W\1c\1e)\1aö*×1tÛ|\8e\13#\85ã «nĬÆÅp³Ö\96\98<\12ç¸ì>®ó*º~[ÿæáÊ\8d¨ü\87Y§öæ¬_Ë`n\9bë~NŪ\96{¿~|qá\ e\18\17\1e\9fÁKàõ\19ô
++Ör_.¦kÕKk¿Px\13ª\8eo_k¯_ËàÎÓ'ʦj\19ÜÚòùû¹\18\8b'é#\_¸\11ÞVÿ\85      \8d\93\82}Mÿaýá\9fýéR\96*\97\f\1c\8ey­¬_¯ \9d:Q6\95\8b±{bÝ¿½ê®R\96«\ fFá2a_\9f9oì`åiÔ¾\1c\9aAËàîVÖÏ©\98sj¯½~Þ\84\9cªe \10\bÞ¾(Zæ9z\ f\14r²H\7fWI+ËzÜÈ\8dM\10ì\ e\88\1eED\ 6­CÞp°ô+\95~S;\9dUð&á\95\96\15æM\88¹ê×\17½pï\918\1csâà`O˾ÅȦ\89\83N\17û¥_¬1\18\17\95\1d\14û\9b.¯vZÝ\0\13S\18\94\17;MüxêECö\88\13ÒoZÎ\8a\8eÚeÎ!Æ\1fx\8e/R\vøû\145¢§&Ø\f\19t\9aT\ 55vºY\94ÐMda~z\14\83¡"Ï÷kì\98\15í\15ÍEÊÊñÈ\8c¢×i«|¤ÿ«¸\93\b\9drò·K\1aÊ\ 3\1c\1d6\11yÇl\b@\8f\8aj§$\8e\19Ãa !ü\vû\ 1\13è5\1a\92ù\19¹û9¨\10\ 3=\935ò¥\15$\ 4¨÷P÷G08Â4 BÎÞFÅc
++ôdt4 \844|ú\94\86\f~\1a8¢º\8euÑ3\8d\8fª¡ºñ\17\r\8bL#q\90¥\80\7f\82-k\172\1c\ e\10£ÄXivK~;=E§\vÕÓ·à<xü)R\b\80\86^Ì6Ñx\ 3m\19\a³\0ê_ Y3TO0X\18Z\ 3^\ ek\92¥9C6º¥m\8f´ùÌ{\ 4F\\90·\b1ö|)\94§·FD3\8a÷+ò°Á\8d\fÐÐG"=fÄCS ±=\ 1µ@\83¡ú}\80²¾§\8d\81Ô~(\14d¸%dÈâÓ¹\ 1jü*EDù©õ\ 4S\ 3¨. &\9a\12z\8aúá#}Æ¢Mo\90v\8f\82\89ÜwzCzzÞc;\9b84ô¿ú\16\f\88W÷4\ 6\8e\8bq÷ø\115æ>Hó\9fV\1eo\vdºkì\e¨ éÂ.PÖa+\81\ 6\92\ 3&\b\99õ&\ 4v§ ©õ!&Z]Ï»\1e»Öã£b\9aÐ\f8ÑÚ\13\9cêOÏQ+\86^Åä\95²¿2[tÐï\98\90@]QÇ¿ßi6a£\0B\ 1Ô\e@\QðoЦ\88\98Ð[\ 1z\148EAU\80~ÿ(Ko6\88\1a\18h=Ðb+üºÂD§ÞÞ\1a _0T¸)Åw\80\8a M@¿\ e\ 2>ý*\9fëZf\9a?ÚQyâ\99\9e¦\ 6äÇ"Í\f´O@Ç/÷hqz\1a\12Sù3\12ÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81àdÀDü\7f×Ç>õÉ©¥ïê<ß<Ûï\18yvy\89\7f\85¡ng\vÇ\86¾H×ü×F\96Ö<y×­Þâ\bb}àØû_ãø¼\ 6/ ä\96÷ëöÿ°ÅÉ>xäw\9e.yûFu;çµ<ç½ß\9b\7f\8cãä9Ðý\r\1c\1fÛE×ì+Îü:ÇÉ}ÒÃ\9d¹-\97¼?NþDËñ]}ÿسU\83¿êÞ\1f\9d!¦]r\91\aç¼\8f¶Øf\7f<xm\8b©\rð\88ouÞ|Î5%§\1f_»rÙ\84FB¿×û=-îyýø»K<\1fß\fqÙ3m\fo<XóÌ!5ËeE¿ap\8c¹h)\8cѵþЯͪqäê½~\ 1?78\8e¼\90\9f\eì-¿ãôÞøúóï\9f\9a¤{¿¬Ä\9f­O%\8e|\88Ë\ 6ëÐïm{ªßw~K«s@\·íÝ\ 1ùð3xÒßÛ8\17£/~ô\97J,UÕ~^ÞúòÔÙk\ e×8k\8dM\7fµqMú½å/o\9e\ 6SsÐ\ 5\ 2\81\10¼½15/{\90gzPAÁ+Ëéè|â4i\10\18Ý\9b\0'\aút\ 3\13\ 1$%»à\8cr\96^¦-ò®­aGw\85\8ca*W\81^\8bÈ´áà{fÛx\b¸k\18Ï'\17mDØ\14\12V1Ðç0º\93ñ2ã!gï-(\15à\14°\>dða<\1fR(¹×ÇÅ\86ÿ\9f½ëK|\1dÒéÁ\ 6«"H
++¦7GÓäO\ fòW§~;¸°»\9aç\ret0G,SU@\18U\93¸!EM\9eæ=EEã¤\19\ 4¯\85þ'M gb\ 5Ç\91é,ã©uj<"·?@ß\80Î\19*\17ÚFò*Ð\82xDp#B´\ 1\94\ 5\ 4ªA#É.N\8a¡kÈ%è\98U6T\93\ 3)\16n\17ÎPãÐ\91\8f\99\16\ 6\81wZZ\10)h\89x+\14f\b\r\ 4\8a ÌÉ¡\99SØH \1a\rôa\1cT\15\ 3o\ e\ f\85\ 5êdt*!\e_q\b^#]\1d\vå¨Ï!ÑÖ\ 1µ\a±õ\94À\87ñ¨){Ø °&\80WÊ2ÏF¥LS`a)ak\ e¾MÔvb\1d\b\v>HÖ'\94\9b\fT\a,\bfÐ7x+rX hA5\98\1e\87 ÐTh÷OÖ      8\ 1\9e\btD¡÷e²v\92Æ\ 2\8d+\fò\97èq\f$þ/\10\b\ 4\ 2\81\10\b\ 4\ 2ÁI\09ÿ\v\ 4\ 2\81\10\b\ 4\ 2\81@p2`\82ÿÿØ\9f§-SK»\9d\1dÌwî×óÛÅ|fð¼\97¼¹äÍÂ\ fÏ®ÛÙÏ\1cè»èÚûäÜW
++¯:¸\9e>\1fêY´oçÇ\99ÿì¼ïv>Ýxô_Þ÷\v¬\9fç\8c·ÝÎN®§ß·ogÓ®;å¹9ÿPò\ 2\14Õs_ã\81/:¢Öq^@Pq²×X¿ÖÝXãÔo\1e¿ñ\81\9a\17P5Èör;ÈW¸éE£\8a.]O?ïñæ#÷W;Ö?QôåLåyomzaýºtwp{wÓõð\87W\17½>ïBá\8e\97ü\85ÁÞ{w·¹îÏCØ×8î7\8e_Rò\ 2b¨ù\ 4··<\84\8d\a\1e\9d]ÊR(Ïíj¹\ 6ý9
++\9b\1a\1c\94E_½ð¸Nh\90í^T¸ø:So¸ìhÓ\ e<6ïªï\96=a]áÍoi|û~í¹Mm\ f|bÛ\rÿRr\ 6\92.c/ºt\9béºù\81\e¾_5Ö*Oÿ\89Iüþ\7f,¾uàó\fMxè]?\84Ü\ 6ýPÕ_«>\8eų\ f?þò\ f.}¾ê¡\85Ò\97\8dÓzÌ    \ 4\ 2\81\10ü¨`þ4\94É\82§\8f\94ħ\14_xÀ\ 1ÊoÙ'\1fSÕó\9a\96û\1e\83\81OZÒÁA\82\16R\85^C\19­\94Ó'I\18\87\81 Î\19\ 2¨Ù\81®n\13ý\ 3½:Míd\ fÖ¿vÎÁQ,[E/\ 4\87\10\1d¬ù´É C\17~÷[Ƨl\92wÛÀ\9c
++\1dl\98ìë¦b\80\12\9a§ÑR\975t\18©ý sò`\9a'íSR4X\ 5\8a½5\16}s´(Ô\1f\81\ eO½ÎÁûh,t$\1d\88Øô\99\9bzæB\84\19_\84z M\fÝWàÄã#¤ÍÙepÑ\8d§\16©\81ì\1a\9fݸè4s¯\9dgs½^ßéø¢Ù\eÎ8\1e}ÂDÐF  \11Ú\81!P5ÊÁU\10k\bñJ\v\8d¹\0\95A\9aAZV\93àègA\v\8fÐ&t\99³-4ÕâØ.Ï\82ý\1e"-\85ªZ\9a°¡F×5'\84п¦jobCD:è°Æ'v\901È$p\96Ö\9d\1fJ¸K½£]ê\1dohÚ\4\18$\ 5dz-Dõ \f\1a¬õ°\ 3t\93yïCÓhm\1a\aýQ¤¥Ðªú\84$       \1f"U\89ê\95\8f!§à\91\ 4\83UÀù3aë;Z\16¨\85\86\98Ñ\1e¶!\122h\7f\91Þ.\1eJyÙò~óìÆH]S     »Âa\1eURØ×Ð#ôp,Ï8!äIº\9e\8e^¯­\82ÚdòàÞÇDS\03D\8d·\98¦ý¤\90î¡­\ 5k\1fF\92\ 6
++£4i\ eo]xaÂ
++ÒcQéÍá\14öU\8c,6h©k1!u\0{ÒN§kyBµZ%þ/\10\b\ 4\ 2\81\10\b\ 4\ 2ÁÉ\80\89øÿE\v»\1f\9eZÚí,k~Tç}í÷V\96x6üö¶7?´Ï\zÎ\9eê\v\b\9f¿iâü\v[|þx¿½Å|¿ßWï/Zý×^ö^\8eógeõpç©\16+^ù\91Ñ\7f.ñ|Wãù·6¯µMOß\96«ç]Õ\9e»\95\9f\ 3\9fà³\1fZ?^ËbÕùkmÍ=¯r\ 4 ¡Âe\ fñs\83ãù\89Ë\10\84Þü\9dÍgT/¹ª+x\90Ë\ 6{Émmñõþ\98ý\866¾uç¯)}ɦêÙ]ÒÆpìü5e\fÙºÒ^ñØ»\88®íîê\ 3U\1f0\96xþ§gð\92ÛÙâÝý¾o;\9aߨZ\7fÓ÷ª^_\1dßh\9b³\87\87®ýV)K\95\ap÷$\8f¶ÓK\\1eâ\13e®[_ú½Ö.j\9a\8fÿ=ûÊñêµVu\ 5\vG\0ú\80¯<|]Ñ\a¤ù,e\eø9¼à\96G¯|®\94åTø\ 3_m\9c\84Û\16\14}G\13\95\9aì=8Ø£íñ6\86åãç}¥ð\0´-ãÛÒÆþô}·ý[)³>Ê/\13\81\10\b\ 4\82w,À\8d\80\8f\1dl\97ÙçQ©\12§õ\8aîDè²\85^|?:Å1e\9d´1`DäèÙÃOé¡é|\a§ó\86\e\10\1fÖP§\83 \6Î" \9cªf_öÁþ\ 4<õÀ/± l@¸2ÁX¸êÑù\9c<s\r 
++¨\v_¹ø4:öÌ\84ÁgÈ\90.Ôq
++G\0TòÌu\aÏ^¡\ e!sê\92Õ*»\84SOáÏÀ#´>ó\13á.¼\ 5ý c\ 2O\ 4ä\aðw\ 2-\ 1Ø\ 5\1a¼\0glP4\1eð \92\8eP\r\ 5S\0ü\ 4p>h^$þ/\10\b\ 4\ 2\81\10\b\ 4\ 2Á;\1f\17\b\ 4\ 2\81\10\b\ 4\ 2\81àdÀ\ 4ÿÿççÿÔ#SK»\9d\83Ì\91\ 6_{ñß\9eÂúk!)×í¬j|ó\85\7fýÞ}¬Ã§s\1cî\1cmz{\9f?÷ê¢q\aÃÐ!ð¦÷s\19øò\9f|id{Ñ\95³¶p÷ï\99\81¿þÃI<íå\8f\16\9e¶S\95\83ßüØûµÜ\96¶öÄs] \10\b\ 4\ 2\81\10\b\ 4ÿ\17\fÐqÌÚ\ 4\8e%Ç!\99\98\ 3\1d\89]@\96\88\8f!ªd2\1dMMD¾º\8eQ\9b\b¹C«\94öÙAM\12\ 2\7f9ÿ¸\9c~Ö-ä\\84\948w"@aÔ"Ý¢\97\8dWÈ«8îü\8fó}ÿùÿðÀó¿ì\0\81\10\b\ 4\ 2\81\10\bÞ²ßYô}\17 ü\7f\81\10\b\ 4\ 2\81\10\bN\ 6LÄÿ\97í¹ü\81©¥ÝÎËM\a\91³6\14^~¶ÝÎÒ¦Çþî\15ïû\1asë£ÒÝÎ,~=¼ê_82ÿ\bî;\eC·3\97ï_I×¶ñ\91Wù~\86\8fÀãM»ýcÇ~ù\a\9cG Lîvn\19¨ÿß­\1eóøñû¿»è(ß×Îu;\973Oa\17]³¯8óë|ß'z}·å\ e,:¢Öñý âpg-×s']ë¾´âI\1e\97b\eÌ¡áÎí­O¯ný­ï\942_uö\1fj\1aõ7\9f¿¹\94i\9dJ~ÃËìGÿ+\18ç\97׿P¼\ 2h¶¸ìPë÷Ê{¯+Ï9\93\8bÖü\8e6Ö?\99¿¾x\1axSs\18\8erÙYtÝðÜ\82\v\8bW@®9\13[Û\ß|Î5¥½¬«\8f\80âö Ý¿{Ñ\9aïײªÏ\7f\13>\ 2o<¸©hâ+ëJ\9d£3ø\ 1ÜÇÏý:]G\1eÜÀ¹\16p³-\1aü³y\9e/¦kÕKk¿ÀeNU\8f\81Ãm\ fõëì??\83Îþ\9d³{sÖ\9fÛ±\9f\9f\83/ÃòïþÜ\ 3Å\7fBY%oh\81\10\b\ 4\82·\ 5\ 6ð©£Ê¡xÃë\10´r\19iÄZ{§¢s9@^=Yúüi\92KÆØ\94lÈI\e\b¯gK5¥\1c"¬Ø=¤ÔégP\965ãM°Ñè\98,\8cÚ³f\17xgS\802¿\vÆÀ8\1d\12ñJ³Sº\8fд§\97\19\97"?o¡\88\1fX>\1e\ 6öÑ\14-zë\95Îô\98\81B\7fO/\1e\90qW:\18\9f,½ZCtÞD:\83@\12\9f>\a;¯]\8cH\9eÖ \8a\83ä\rùw\13©ã98\r/\80HG«\10\82cG{OMÐY\ 5ý
++^%(Ú{:\9eD\88ÎS\195\82\8a\94I)'G-³n=µhlήÎu¤zLp>\ fõ¼\ 2<\ 6\13s¢A\98lªç\80ñN+Ì9M7\86\ 6Ç4\réy\1déÀ`é\96\83¨}\80ø½Ã8Cà\19¥\8fð>Ð\98\1c<\12\f\ e\86ÚzK\1dHfh²n?t÷\ 3­cªÞ\0Z©D³b\83¥\99Çj4\ f\ 5e-?§h\96©\87Ö*\1ar AV\ f\ 4G㣣Ao<*Ç@Ó\ 1®=õá8\r\7fönp¨\9b\1a\8fô/M¬ê­\17\93ò\9dsQ\83\9bOë@=N:Q\7fhý´æÑGzIä\r\91i³P\9bTäù~\8d±'\8d(»Êô*Z\8c@e>;Gë\ 1±ÿ\14©k\9eæ([\v£\ 5:<:ohæKÍ:¥D\e\80\8exÆÓ\8e¥\ 1ÒV¥etXv8\1aXZ\ 2\ fÓ\ 4\eà,\91¨ö x\19h\9dP\1dR\ 4<Æn­¥j°t\89V"E\8f\9a²§·\18½7ð\96PÊJü_ \10\b\ 4\ 2\81\10\b\ 4\82\93\ 1\13ñÿ=Wmü§©¥ïêÜÊqV\ 4b·-üÕë\10g\8dÉ\fu;ó8Þ{\17]{\9f\9cûJñU\ f®ÛÙÅ÷\11\1fÿÆò\91ÿ⸬\r¾ÛÙÝbê\1f8öþ×8þ¯uìv\ e5½ÀS\9e\9bÃqþ\94\95ïñ\ 2Öеè\8d\a/㸽ñv¸³·Åóo\1aÿÆ\82ª/èJ,y\ e?s5]ÿ±ûÚ\97¸,DWbÉEÇ\0|\85\8fÿÙ\8dß,±k¯K,ù\9e\19|çgÒ\1eÜׯºjþJ\8eé\9blu\89£ï\9a\14×¾é®\12»Îz2\87 \94]2¿è\12\9aTúyG\9b§_\1c¾ìP)\8bø
++K \10\b\ 4\ 2\81\10\bN\b\98'\ 1\aú\80øqð\91\ e\98£\7fuR\bC+c\8dµ^+çé\87Q.$\84³C\8a`#x«À\92ÐN\ 5\ 4\9a½\ 1\11\82î%M'$Çõ\83\8f\0²\ 3ëåÑ+¼\8e1ÙÒ¶¶ÉY£\83Bª:ø\171\1f\17ÃÇiIiouÕ³³*èlB\ eÔ1¯\ 2õFqçsPÙ\98\8dÆ Fî\1cîX\9dµÏF%CãËt¼ÊA{c\ 3È\174\f­}\fÖÅÊ-P1$\1dÁnÐ9\82\ 4 Á^¦\ 6\13uÚ«¤=u\86jW\bßÓ¤\18\9a"g\9cÏ\99¹\11\bµkE]ñ>\1a\93\89\ 2ùCÓìRåÔ;¨ÿÑ\80è¾¢£ \ 1Í\19l\8d\f¢\0M\916Ô@v\86u\ 6\13µ­\12\1e£Ã-ó[ÚÜXÄù\r\r^\81Ü\122\r½ò=\82I¬KH\93\94 ùÁ3\12ÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81à\9d\ f9ÿ\v\ 4\ 2\81\10\b\ 4\ 2\81@p2`\82ÿÿ¹\97\1f{lji·3Æzp«é\9a¿oçê¢?çc·êçáǹ+\170ÿ\1f\8a\eÝÎÁiôÿ66\8d»±=ïù\eö\11Ô6w;[\98C¿\8d®e\aæý'ß\ f\86ê?Èõ÷óÿo\9fA\7f¯ðø¡k÷Ù\ f­\1f/e!\16Îý²öÜêûÇ\9eå2crÕµã²Áº}¯·ñüë#×\1d*9\ 5É\a.\eã²Á9\ 5?sF¯/g/¸¶ä\14@\0\83Ëö\9eÖëËþÝ£%oÀE_r\18.hù\16£\87>ø¾\92\8b lio{Ë\eX7>öE.\v*+.\9bÃí}\84®O\9dvÅÁ\92\8fáS\19ßè\fy
++K§ÍE\10\b\ 4\ 2\81\10\b\ 4?:À\1d÷!A¹\8d?k³Þ]ÌÑÃæÝ§\90\93õV9\95´²¬÷æ\f\9cÜ5俬Î1\e\a1?ã2ÈèÞ)\1cJTð&á\95\96Õ     M\88Y×¶²\a??G«A\ e\87ÊÛ\89çÆÇ¨\8cSÊ4þy\fÔn²Üeê/\ 4¹\99¯\1fS\18À?\9fNÏ/G¥{\9cö\1f[¯q\1amC­²§\93¦Cþ\ 2Í#MÿPÍK NðXtvÁë`5µ\9c\92÷\9eV!xÈ\ 2fZ(ëè ¨1u)Òdeä\ 5к¤\s\18¦åâ;\ 5ñJ\93\9dQ\ 6"\80\8a
++k\91\8a©UZd\9aÎ\8cá\19ºAûB+Z-\97\9c3YÑsÔ$-
++ýGsëi½i«¹Äuyj:Ó\fê#­\10MoR\91ö\ em<ç\83\86>¤§\ 6Ìñçÿ\15\17ÞøÂÔ=<ÜÙÄgÇ?®ååü\1fµ\95··@ \10\b\ 4\ 2\81\10\b\ 4\83¾\v¢#7Îö\9eÎåP>pY\ 5«lL&xK§õLç\7f\13øû     \13\9c²&\ 4\9ba, á\v\ eÂk|Ýa¡
++\10\82Æ\97\ 4z8â\e\1eí¢\8f       6\19øN\88î9z&\e£ \1f\10c vr\82R\83Ç×/J³Q\9cðÿ\ 5\ 2\81\10\b\ 4\ 2\81@ 8\190\11ÿ_°åþS§\96v;ó\1a?|É\91³6\14\1fùl»\95ß~&îÿÝ\19ÏT\9ezêvö³g;xþ\9f¹ô\9c\97ÝÅnçèp¯\9eÅG\1c\9dWTÏ3üú+éÚ6>ò*ßÏ.t;³\9a/Àì\8f¾çïqß+Ô¿\9d¿¯\0\97}ÓU\8b~À÷½¥ú/ázúó\b.hÜ÷\85\aFÞ,÷3Õó:÷\aþñK\8e^s\80ïGkº\9d¥-¯áâk\96pþBv&\ ewná¹¹\93®u_Zñ$Ï\832UÏ\7f"·á\8d]ë¿UÊ¢«\1e\ 1Üß?¢k\85\1e\ 3:eÏe\8b\9b\87ýo¼p˹\f\95*9\ 2ÝÙ½~\1c\86\92¯`£+Ïý\ f{W\1f³gUÞû$8\9e·\9f.i"Nâ¤vP Ôsîó-Â:W\16FºZ°HÁ·P·*\rýb¤\8b\1dÑ\84L".4K\97\19C2fH4\13\ 4'\r8\99\88\13\0\a+\bå± 2Lu+±\8cý~ç:÷ý~<Oß?\ 6U\90s\91\exïsßç>ç:×9Ï}îëwý®ã涺Ü<8å\8b%^¡Ä\bHÜÄèX\86%ó'î[ú\19)k\8cÄ\ f¬Í÷]\83ã{_Zó#)óN\9ew8÷\9d\ fÝöä¶\ 5¹Ìù\12;±¦ë»9í¢\a\ 4\1f¢\1ayÞñ];·\fV\18)óJò\1cHìÄ(\ÉXÏæ¶,ıé©\93Î\94²d$^áê¬Ï7áXó[«\7f\92\94½-?\8f1\17¿¼i£Ä\(c¥lCî\ 3c5\1eùÊæ\1fJ\99sÒ÷%ù>ÆxØcÆ%>\ 2\8a\91²å]LÉp\1cÇò®\7f\97\fV\9e)e.Ê}\8b\17´í\1cw[\9f+eEgë»q\18\1f|KrJX[òT,\9e!Æãì.6d|ðì§¥L;\89}\99»`â¾³ÿ©\94EÉaqûì¶\7f\1fÝ}±ô\ fs@Ævq.\eç8üxÅ5\92ß\ 2\13SÆ6×y\13\8eÕûîÚ-eÁKÙx×Î\8b\ 6·¼]bJ\9a í\9cÛÍÑë¾¶âiÉ}\91!c(»jv{ߪÁ\8ds$Þ$\12\1aU¥J\95*U\8e²´\1cÚäÏÖNyüê\9aFpºÆYÍÌã\96ù¹£NÑú\82ßM\84\9eÚ\14\9a\88\97\82H\fjTLÝí|ðI¥Ä´Õ\84\15%c\8f\1djWLFn\fÞ#\12~\8b\92å©À\84Öx\88I>*m[\8co\83\97\e\ 2f  uMx\1a~\83òs=¹®µ7IJ&ml\8aÅ\97¦\b\8euÌõî\92\95w-\9cÇÿû&Ú@\±o\fse\aÅôÚÚ*­\98mÝàe\11MH\9eÄÚªAó\ 2ê¡\ 2Èä\8d~0S9Ó§'ÜÈTäÌ^N\90®ñª     ÆG<Ó4\99û¼i\98D;Ù¨ù&\81·\97dñ*\8a\97´\18p?:¯L,XcKX®\8b\89¹âí«(/|d~v¾êd<tôÌxn̬)\ë\ 1ã,cD¼1F\11F\11      #V\13×½ª0Í\99?Þg=\1f­üõ£òÇkO\86xüSÆ\9c\øè\1aì\v\r\87ýá1Ø\90àÚ\8cw×. 2g\99,\9ehwM¾{¼\bq<Ð\7fçØ0Z\84\8b\9eýË6Mo®¡Û×ajf\e\82ió¡\18\15\14k\9a\93
++\81\98±ºy%ðóSx÷aÒÔ\1fƪãäoñò0az }\93\9f       Ó\9dt\1fýØîÕê\ 3g»`
++©´\95ú\86\99Ñ\1el\9b_ «\1f£ÃH\0Nx\18a^\9fX?ç\19L\92æea\91\12¿\900\13ð\®$\8eæí±\aÆ\bä \8c\86ë \v-W<k©\10\9a$\16\ f\f\14ÌbØ
++þ'÷,¯\9fx\ e\f"ªHÓñ\8e3\ 1ýÅ\85NÇ&¯\0MÊv\rÍ%è\14Û    ,\8b°;Åx\8e\9c±\ e\96\ 4ýx\ fÃã\82\1ar\f{õÿW©R¥J\95*UªT©R¥J\95\a\99ðÿïÚ8û\9eé¥-ÿ\1f}\87Ûv,û\99ø¶\8dé÷Æ;ÿÿâo|ü<ñ\17Óoÿxç·~û\9f/}Q|\7fZ÷{{;®¼«V¼õ^ñûYÕïí\9fßÖ³è;×þPp\ 1\8b/\97¾ñ\93_:a\1dÏó\ 3k¿w|~îr\1cK¾ù\96=<ÏO¤ýÂ\8dG\7f뢳\16¾\94ýöJ£þþ\11x\ 4\ fåúù¯\ f\f\9eøtñç;ñëÞßù6·\ eî;I|öÆ\8aßsC®\8fþîuæý\8fIY(þçË;\1fì¶Á\96Ï\14\8eA-þÙc:\1cÂ0ÿàWgÀ\ 1Ü2¯íï\8eÓÇ\ 5[`¬\12?ë¡ù\13Ïû¯9R\16\v\8fà³óÚ²a\8cÀöÎ7½ï¶s\9f\99ê뿽óç«Ï\16\7f¾7\8dø\91¯ït\7f½½ø\a\82\ 5ñAî³Y\9f\17àø\výÁgÅ\87î\94ôýêymÿ.|îô3KYÁ\b<ßáE>²`ÓÃR\96
++oáÎ\v\1e\8eó\9f67
++¿¢.m9ܵóðì-\8f\89\7f=Y)Û¹ µµ+þyóC\85_±ø´¯ëÆïÊ36I\99\vJúpL§³a\1fúó]\9d\17|lë\7fJYÔrßóù¾Ñ~òG\17´}ÿ\93'þå\8b2\1f\94\17½Ü0¯µÁsö?wl\99\13BËQ¥J\95*UªT©òk\92ì×µV5Æd¤B\bÅ\1f\9a\91\ 6*F\1déCw\9aNVò¢\19ºZ\9d¦o\15ï2\84\ 1\10\10`£Æû\90Ò\8d'j"9Ýdç3ne\ 6\84óâO5\ 6oNtaFñIã*£#þCØ\ 2\8b\2\8anW£\89[\89\ 4\10x\C «KMR\81)æq]\8biiø4íC(\1c|h\81£¿Þ:¢Y\9a\8c}8Ú<y\rÞ\92é_6&#\ 2\92¦\7f\1dï«\19\97\9b¹ûðGÓä\9bµm\8aO:f\8e¼\94µ\86M\ 6}Ó   \8d0l\8b±xó6Ð\972.Zº\92\1d;\105½ÑM"½·oÐ*¨\9f\98\ 2ôªíçkÆ7-zq´\1aÂ\ 5p\aþð\99\17\10\15g|Á(<B¶#\f\9e\8d\18\92Í\18\16E\b\8dOèo*ø\f±c¨b\ 6ÞB\82 `¯xÑ'°\88H\93àaõ°2ü\89ëR h\99cÒD¼Öà,ZdHð\98ñ\ 4´nÛ¨\80\9eG?\19/\13=&\815h¢åü\81uä~\19öÓ\11é\0űÝ1䮢\1d\84Dh(\Cgä\8a\84½{l$\1c\91?\98]°c\92\12F\ 5»Âö\89 &á\9bTy̰\15Æ\1c\10\8c\14ª\86&\9cI\18ôêÿ¯R¥J\95*UªT©R¥J\95*U~ó¥îÿ«T©R¥J\95*UªT©R¥J\95×\83Làÿ¿ü\9e7|{zé±\85ÿ\8føü\9do´ï)|~8o3®\99ØåkNܶ:ãêµ\9dÕ/¼g\ 46\9fpÙÉ\87\ 4?®M¿\17\8f\10\17°\7f^[ÿ©ÿv·Ô¯|ê÷¾>\92Ïo¬wv\87\17\1fæÚ[\9dË\88±¿âÄmO
++6_GÁZ¯ÉϹ\16Ç¥?ùë/H»TÁho\9cÄS·çËR\16lá2Ëý\1fÍEw¨kû\96û/È\m:6\85Ûou\87%¿l°_ê\8cÁ       \aÚò\ eK>ÌE·!\97\8dÆÑo\9e\ 1\ f\7f óÛ½\aÇÁ\9bÖ\1f(e\ 5\ fÿÕ\ç»q¬ùéø?
++\1e^\95¸\84Õ3`å×ÏÀ)wOÖËhÞ8\9bËþ\16ǪGïü\\8by\97²ûç´c4Ì\r÷x§³U\83\15\8b\ 4\ fßÄX'i\95*UªT©R¥Ê\11e\ 6\ eÇÆjïµ"9\1aÉÌ\9cÅk³M¤í3Ñð=2ÚØ4&FãSÔ\fnÔɸ còA+Ó8C8¹3^\197
++Wßr¼\1d)§ûQÃ÷¿Ê¸\a3\87\BÿLðJãV«UL\ 1×\85&\9a\ 4]:h1à       Äu³ï$Ö$cd$²\9b\10\7fGn>2_zM:M¥#I,\1d)\ 2Éu\8dK\13ÚÊ \v\8c\ eºl0RMÃ\8ecOCL¹ÅãÙÄ\ eo\9e08ä:$idÁÖ7I\aOîK2r\16lú(^CX\13º§H\9e\97RáÙÔ\8el\9cJ\98\14uf¶4(f\98\bÆ>A\93ä.´¤ÕL\rÆ%9\98X Î\12\89.©wtÄ\ 4Cä¼\85\ra\a I¯¨\r\99-\1dYþHü\99dT#\99þxuÒh\ 3\ 3%L$ñ5Ô\16|lc\ 5\8e"G)Úî\1a\18WæÚÎø}\8cl\13\83\1aÁí9\1dÃ\7f4ãet\ e>°Ö\ 6MMâò\14Ñø\88{1fZg¶Ë\80KB&tÄC9\88\9eS\95ç§îÿ/\9aû\99\ f\1fiÿÏ=ÙÕ§>±Jâ¥=öù\13ñ×+\97¿ùî²Wkú½\ 3óÛ}þ\1f¿ð\8eÌ\17\809\84ýüD¬ú)\awå}f´.L\8e\8b¿òÌ\r?)Üò\85\9b|e.Û\8d\83w¹Â\1fïe¯\7fü\f{háPß\8cã\92ý\7fxLás/ñô»æ\1fy\ f½¿kã%\83\r\8b
++×{\9a¼g\1fͽ¾´ãBø£G~ð\ eÑ\85ÊeUªT©R¥J\95*UªT©ò\1aú\9e$û]l °uÆÆ92å\ 4þM
++\82\9c¾¢0ìcO\89\9d3öìÎZl¬±E\rØÌó{
++6ÿ*Év42\80\1fÛ¦`4wØÉ{\86À\aìtI\7f\90l8Jß\88\843À¢Vl¢Ó¤~%ã¹gOÜ{3      \ 46êh\888qGìí\1dS\8eä­zpºÍó09ï\81m¼b·\12\13x$lÝ-ªF\ 5MTÌ
++\82î\90à\81\9fÒT@ÃÑê@¶³L\84à\83MdSh"?Z¨\9cú xeBæ\1a@ÇùŦÑÑ\90§.¡¾hò·\11GõxÇÜ\ fÊdæ\ 1è6BÏÞ\ 6~Âóø\93ûÿÀÏ`\11ûg>\93\9f\95fUü\7f\95*UªT©R¥J\95*UªT©òú\90    ÿÿms\1e\1fJÃÝïíé0ÙË\ e\a\82©o\¿·3\7f7\18Æù«¹\13×/\/\1cñ        çWgÜ7ó\b,{qÙ\8b\85çÝö{ßêøØ§â\bVt¸\80ûV\9dú¿ù¼ñxî-c<Oÿý    /®ZÁóN7\1dÿÿôx\81~áºg=÷<·è\85\8c;H^õ{\87øÈ¡¼\0ýÞ¬Ü/òµ\9frøÀ¦|>\858Ö;ÐÅ\1d\1c\7fS\ew J\1cÀ\1d]Ùyg¬}HtdKN\0\89c 6`ã÷¯LRæ\v\9eÿùNW[\a\945\82}X:C¾\80\9d]\9d\1fÜ»ïkRæ\v\16A¸ïs;\17\97ü\ 4Ä4Í\9aà©\1f\9d\13`sÖëïãxß\17.yº\94%ÁL¬\19kÛ2\8cÑX\98õu1\8eÿ¹ýÒ\9f¶±\13\82\99ØØ\8d­9­ä\12\bªðþ_\95íáV\1c§Ç\8b\1e\8e\e?Ï÷}
++ǹgn\91\84 %~àò.æâC{¯x§Ø\97\8dò¼«»\  Ãù      nÉíü;\1cç?{ªÄ+ðc\.;\9cõ9\1a/"y.h·ö\98ñ'KYiçÞ.GÅp^\83«;\9b¸âæM\8f\14\9c\89\92vJ®\84ѱ\1a÷wù6vüÕ\85?\91²6þãúÜ\ab^Þ{Ç\96\aJ\99\96ç]7     »rεR\16\95\8cí\81n\1c^:c³äX0¶ÄÌl\9fÝ\8eíÞÛ×>Yâ?J\ e\89åsÚ9¾ýÎ÷=%\98\97\14¥ì\86¹m;?ºûâ'Û2ÑõÏûm[Ö\rNÎù3ø­VÊ>\99õyYÖµ¾EâFÐ{¹¯ÓÙ÷o¸ò1\89\r1NæÑÎÜ¿Q¹\12`gÝÚrþ߬|Fb\94BÎO\¥J\95*\93åWÀ÷}$\7fÒËÍÅÍìí\81¹ì3Ó´õ\ 1O%\95´K:²UÄ\ 1çDò!FrL+í\89D\ e11Cµ\vâÅ\8bÌ\e\1em\14¾lf\93\8fM."\9bxËWNU0mºwÁ¨D^iºé"1Õ\ 4þ\12é«\95\18\9aC\ 5|\1eÚæTö\ 3\92âÜ*oðÓ\85G\11\12«\88ðMÆ\16^oÇú\12\9e\82»è±*<éÓp¶¦ÁÀ\18zíTæBo\143¬GÂ\8b\99¼½A\v\93fª{&\12o0r>x´\90üêx2n\8c\1ejN|\911!4ÎB\ 5Vc\10TÆÉzÜ\19,}j¤7Ç\9b\10\99Ñ-\ 6Ñ{ü<\12I\9dlâóQw\13\13³¬ã¥\155Àl\fÆÊ\b\16\9a`^TQpÈ\ 4\9c7\ e5\93L]Scr>\91\9a\e}Kh²%è¸ä\16'Y{¢×Ô¢<¢\ 45¡n¼ï \92Ä$çÊ Ê`½%²:Zè7â:b¤ÑqGô9ÆØá$£%\13íÎr0|C¯*ñçô4\92\87ÜC¹\ 4\8b\187f[W\18R:c\8duôÁ\92'<ѹ\1a\18
++\f\84I\96\88h\8e\vÌ¡õ\9b¾Â±\ 4°2«óø\aªREh:¶úqÄ\99ÓñÊî[\89õ\15L»Ïüø\ftðDðÓÁ<ë\88\9a&ÝÎ}âÄ\7fÅ~m\18kæ¬Ïv\15<\15ä}ñ!¿l\9e÷âÇÎzÁB\86\89©\9c'\82<\86\ f-3m\ e\0¬a4Sh\163\13õqú`3\13±\8b01eË\80\89ÃèÑ\18\8bGùì\8cfO©\18hÆÐú\1a¦0à\1aHu8\9f3\ 2¤ÀU5{Ä#ÍÃc%À9[´é\bXg(\ 1\f\99+\87ãÔÆr¦Êº9)×Á«1¶ãHy\ 2°>b:p)£\17?Û·Ø(\97"®?\11K$«+q\16|\bf±g\9c\f·»¤ÿÏçq-í\12\15Ù\1cÑ\11\19Üá\89\r\80}@Ñ
++\1a±\±±\9ca}ãâdÙDüN`2Ã\84ñû\80á2\ê\ 3£#lÊ­Ñ\BÐe,Û\\19±¼+ÏÍAõÿW©R¥J\95*UªT©R¥J\95\a\99ðÿ_é¿û³é¥Çön;µéü\7fýI¼\0Ë\ e¾ï,ñ\87\eÝï\1d7»½~ñ7>~\9eø\91­ï÷\96\97Ü}ê\ 5âCÖ¡ß\9bÛÕ¿ìß\17<*ü\ 2*ö{ã\1dïàT^ÀõÙGH\1fèU+Þzoñ\ 3*\9cÏõÓwø\85=oþ&ÏÛìÏ\7fWç+_ô\9dk3O\80u\16õ\1f×ùnO~é\84u<\1f\ 2ñ\b+;^\837|à­¹\9e\90\14ê¿¡ó\85Nå5X\9fÏ/g¿¾ù\96=ù¼NèסÎçú\86§\8e»Wp\aÊõ{×g_ú0îàPÇ\8føî?[v0\9f·ä;Ü\91ûõ       \1cën>÷aÑs£Åïykǵð\8b\9d\1f\12¾Cå\8a_wé\f\98\84Øév\18\93`gÂ$tc8\8c;\10Î\ 5êóO\9fÞþvÁ\1d¨Ö\87>ÖêhÇéã\82\9d0V\89\ f}cçÓþå\19ç\8aÏ\9e\1c ¹ìmY·£1    Ïç²7áØwÛ¹ÏH\99wÒÎ˳\8fy\17\8eݧ_ø]±5ëÅ¿~h\ 6,Ã×s\1fFc\12æf½ð_\1f<0ÿ\1aásôÅoýÆÙ­Î\86¹\1egÍo\9f÷ÂÛ.ø±`\ 4\96<®³µ\8f,ØôpÁÄD\19¿µ¹Îcq|ô_7\ fÄ\9fï£\8c_¿\e£a\9e\8aGç´ãpþ\13ÛO\972W80ûÙ&Gó@^\9eë¼\86öró¥\8f\97²\827\89ÝóÆ\a\a>'eÆ\89>×ÌoÛù÷_Û í´.\bF`M§\97u\83Í\9f\17\8c\80JÒ÷YsZ}\ eói¬îæÂ0îà[\9d¯\7f\18wpynË\19,\9bw¾ô\ 1à}X\99û~\13\8eÕûîÚ-¸\83P8)\17ví\5¸çæÂWimýq¨R¥ÊÿS^\81|Ý¿\ e\8cB\17\e;"wõHÿltIe'x\fzRlmðQüãô¥ño\bÝý>Ä\98sw\13\16 \9dËÎV\17\rÞv2t¡   \1e\13<6ôÎ\85À\17*ÍôÛt\886Þèì\80Ld
++K\81\8e0\9d³\8cÓCêT\93\99¶"4ç\b\fðD$X<\18¿ñ¤ú¢³\8c(\8a\98"ݼÓâw£·èm
++\16ï\vºíßËÄl¼Ü\1câÓã\96Gñ±\1dÉG\8eÑgHpD\87È        6k¦ÜãÒW"G¼\13Î3kIè\96G\87$\7f\93|îÝ\18\8fÈ«>\1d\ f1=\17;]Ö
++æHt\86¦yy\ 2\ f\8c\ 3\1aJ0Q¼ Á¼\88nÁÍøÃ\10æBÈ       5\81\1ft2º\ 5*0åÈg\rÅAã\81\1eR(ÕÚ@¾»H\8f+n\88ôúj-À\10\e\12\14Ì\81krVúÒî\97Ë¥Æ9\95\88 iØ'¨ÞF\8c°¥åä    Üpʳ\10ý¡g\9a\ ex\12è9\82O\9a\90ó´'L\ fÓdOzæ¤Ã¤ÀôÆ\84ãäö\8e\9e\b\89ìb±ÉVߤÌÂ\87\89\ 1eà¥Å¢\8f1q/\96\bÃP\r\15\86ª¼#{\1eênÇ\ 5ó¬\89y¼XÂ\8bhiÄ\14\14_7\1dÅmì¼b,>a6$ë\16ÜÐ(Ü\ 5\11\ 1:óÝaö\1c\81wÐÐ!\8eAã0k\15£s\18\1dUNh\ 3\86\12cÆe-bDa\9cз%èÇ´¶\9e\18\1f\1fcÇcøÚÂÏÀ,\f\97¯Ä       \8fß\ 2ì \88\9dh\b
++\8b\ 44\84\19\90\87\10\96O\18\11ÚÎWní±\928zÿ\89\9f\ 6u5yZ ©ÄW\91#Òe$\17\8cEEÚ8¹\r¹j\91\8b\92&ï8a\13Q·©úÿ«T©R¥J\95*UªT©R¥J\95ß|©ûÿ*UªT©R¥J\95*UªT©Råõ \13øÿï}iÍ\8f¦\97\8eõvd,õ5¥|2κJ\95*UªT©R¥J\95*UªT©2³H\1c\8d5\81\ 4\84Ú*\97HXï3'`Ã\88\97\14Iÿ\18µO\ 1ç\bìgTq\93y\f\9d\17£¥\1cc\96¼¶Ak\ 6\970\1cÃy§SÌñU®É\88\7f2\97j\ 6(i¯B`à\88oRÈQä\13ûÿ¿üö\92«¦·³?)6vj\9cÿDÌó;\ eÞu\96ÄÌÚÔï=\9b¿\17\fÇíߨÅÃ\7fì\9cß¹»ð\b\84~ù¾p!\8eSöÜøÞ|Þ:\87ë»ü\ 2'¿ð{ÿ\9dãö5ù\ 2vuüèO\1f\\94ãä¡Bßïmè¸í\97\1e´\ fH\9c¿2ýÞg;~\81©ñÿ\e»ëO;øáïç|\ 1¡QýÞ\92\8eÿ\7f*/À»f·ÏݳnÉ/òùÈ~­\99×¶s*/À1\1d?Â)\awåøûh\1dÚ¿7÷\97\8bÎZøR\8eóW\1aÏýäÈøÿ~ï\8e\8e'\7fîù¿ý\1fù¼\8bÐÿG:þ\82©y
++\16vñæW\9c¸M8\ 1`7\12W½½ëóÖÁ}'I\99±\12\ 3}v×Þm\83m_\91Ø~\9b¤ìÖ|ß¹86<tøÌ\12¿o%æZb¼\99\8faë3\8d*ñû\85/à«cm\9fî¸më\ 1ùv$±\84c½½ù¾Ñ1ú;æµ}\18\8eÑ\978nÆ\9b?øÎµ\ 3\89Ñ·Nxî?\9bu2:oÀ\1d\1d\86\1fÜ9WÊ¢\97ûîÏí\\88cÓS'IÿB*¹\1d6vü\11[î¿àó\12Û\9fC%Ù\87.ö}û­\17\ f\7f\14~\82\95\1d\1f¦\9fîû\84\94ÅÒÎwu}øåM\e%f^\19+ÏÛ\9fï;B\9e\82±¶-k\1fxÿ©Â\17 KüþÙ¹lt\ e\83=cíØ^2Xz§p   X#ã°\7f¬µëá|\ 3ÇÍ\90oàö±v>_¸xó>á\19À*\95Ë6Ï\90oàÑ\8eó`÷¬K\1f\94\84ÒÎ\8eÃãðì-\8fIY*y\11vÍÀAÐïr\ 3¬Ý\7fÚï\16\ e\91\92×bÅü\89û.\93\\ 4Îh)[ß\8dß?Ä2\ e\f\86Ëe\eò¼\eÍ%°t~«³_|j\9dð\13Dm¥Î\8d¹lt~\83³»ùwÑà\96Ì\91Ѥ&È8¬èÊV\r\16\7fQÖM\9d9¢«T©ò\1ax\9fû\15r\89ëdbæúfp2n-\1cß\99sÀZßàm21o4^ôÔ\f\9càx\84\8eö\f¨\9e5%þ\7f\88{\7fD<xT9ø\9e\86/\9f\85'\0¿ä\ eË,ãWñ{H¢sF3£{\86!Ñ9d\1f=fì-Öb\8b\9f\ 64#\19\85\vÉ\1c\1f\8d\ fäA·xq%Q¿pc3o\81âõ-Ç»b­\ 1õ8ùÍÍqǶI¯¶\18ÛW æyd\9c\ 6è?Þú\ 3s£3\ eÞá×\12jböô\18RðÿÇÞµÇzVUçûkhø\rÌ\80Æ\ 1¬%Tf\88\f\fÐý~´\80¤Å\88:åU\1eÃ8Ã@\19âT\ 6\86!´ÚúÀTbµ\10ÐT\r\89Ój\ 2\8d@)\85J4"UÓ`0H[(¥VA\1d\ 5/\ 5y\88CU"¦ý¾µ÷ïÜ;÷7Ã?-\96\83Ãå\9e}Î>ûuÎ=ë¬o}KÒ$0C:ziñþÉÌé-\8a\1d=§u\90)\ f\9e0o\1c\ 6FE\aJ(X
++V`¼"­ Ïüáè$G\8e¡Ü\18¨Èê(M\8f\1eQRÜ£\1aæ\8a(ø+\b\13\855ÕÈ0õR)ó\8f%&qÚ\f\9dÎmU\98\99\9eØYlþKU¯>ã¦\9d\7fÏpáì*×üB\rþ]æ\b©\91\fÅÇ]Â>õùö]\97Á0\9f<¬Ç\96M\82\86\9dá"Åpyª\fD¬s\18\8e¸T¥6<­\v\98\8b\86Ò\ e\8e¹'ðp0\94\90È\\15óîy¶Åá1á¤\9d&6;Ô\e\83\9b\19ãÞÛF\15{\8cFÎ\\aÞ\86\1dû\87ç]áM\19`kJR.ѲÇQ¿HM{YW1t­\80\12_¢yCðPÁ\ 3/ã¨\1c1^|B:
++\9eàNÀcJD\19
++÷&\8a\8bàyÁ¼\10\98D_35\1d°d¨\1e\81>\19>«|D\17Ë Y\82\8baþø4ÅÍ^øK²;ÕcPþ¿B¡P(\14
++\85B¡P(\14»\ 3æüÿ[Þyî\1f-,\1dwMôiÝþ¥»Ðç\9f\19ü\9e;úÏ\7f(~o:¹>tÙáÏ\8a¿Ú\860Ñ¢o~ç\v¯íyî»Oó\9aÁ\97ý\8d\9bÏ{º\95ù\9e\9b|Å }¿åÀÍ\8fö<÷=\ f|Óŧßò]\aw½ùìMóÙ®\96vì¿:øà¦ý¤Çí;iË\83\7f»úÑîóëþÜ\7f}\ 1\9fßÑR¶\16Û)\8f\1eß®W¢i}h\\89æó»èê6\86UX\19
++\85B¡P(\14
++\85Bñ¿\89\89Ï~çy\1e¦tû\1d\199t\85û¹s­«9¸\10jv%ÅX
++é'\86òü1åTM­¤\99Xëb\ e±¸Za;Fo\98\88ÃK~\ 3f3\bÜ\95É
++      Öú\9a\8a±\92'\82\8c\ eÇ\9aIÃȾ\96Ö6\9b`\ 2ú\1c\r9ï»È?ò\8bä\1a\90cEß|µ\86ô\ eöªí\7f r\ eÚ|\93Å\94BäX©ÿ_¡P(\14
++\85B¡P(\14\8aÝ\ 1sþÿw\1fµñ\93\vKÇ£'$îöFlË~¼ò\84\16ÿoøÇÕNÇó·øÞéxþ­\83/\7fã\99\87K\9c|\8c\1eÇ_³Ó8ùE£²ï¤þ\ 3oXß|øÆô\98ì£\87k\7frùÙÿÒãØsó·oÜ¥^á$&{çñèFÊ\18ô{þ¶\vo\902~\8f\91²k\84\17ð1l\9fÙÿüm\9dOÐs\87ß6Ä\ 2\9aóZÌy\95ð Æ±\ f<\84¯ß¾éÁÆ5\88±]oÛ\90O~Ý÷NúHã\1aXÓú÷Áá¼K>»é\81\16ë\9c;gà\9e¡\ f÷\7f`ÍÓ½¬s"Ö\ em\99Î\8d~òÀ_øãC×µXçl:'âÒa\ eÖÌ\9etmç/ôë\1d7ð6¾ô\89·|·çFï}\9fãt¼wÏUR§·±hÞt\85B¡P(\14
++Åÿ\15DÇ"\ 6\9fr\92\÷É$cKM\81¢Q\85ùë«wÆ\880B¤\9a@\10)\0ïMÉ®\84\14\9c¡L\ 4óÍ[ú~EÍÂÔ\1c\13ÊM±\95"\ eâ\98­\15Ç\88Â\83\8dÙÖ\12²ÏÞ8o,\93ÆGCQ\80ÊÃ\\8c\85Ê\17\94\b\b6ÚD¡ \\8a/ë6\95ä{¼?Å\18|¥s7áß`\9b~\85¡Ç\1aí/,\8e46\9c\13ý\80\84\1f\14}³&DK\8e±+\86ê\12®Â ¢âA­Ô\85¨Î\17\8a\90Ô(J\14°\8e\12Ýú¬\19\96\1a:W\12Õ\ 1J@m\89:\ eT\8aC\aB×lÈ\9e;½oþÿhÂ\ eÚ\ 4\91 Øy\9bc±¶Æ\1ar\98§7\10ÐnX\v5» çzƪGª5¸\94\ 6\1d\b\93,cã]¡Ô\81\ fµtí\ f6=Á\ 63°}¨wÒ¯WÑ3:ý;gáE\8d±Ï\18RY_è\96¥\1cHßO\8f<&\ 5\ 3\1d<5*\8a\7féèý±½¦Ê\8aô´mÕÿ¯P(\14
++\85B¡P(\14
++ÅË\1fjÿ+\14
++\85B¡P(\14
++\85B±;`\8eÿ\7fÅì\8fÏYX:\1e]'\1cï3°]5»RòÞ\85\1aÒ¢ÑVÙÏÜY\9fÿÜ\9a\96ṳ̂\9eOíùA×nýì\86e-\8f\97«\9aËJ¡P(\14
++\85B¡P(\14\8ai0FÂ\9b\9eÇ0P]\90Q\1a\96Z\826eg\9d'\8dßø@F?Ã\ 3jb:IF\85¸\94\98ç\93©]cÊ\85á\ e<\9eq\ 5Ìeê+\13?2Æb¾ýÿì\8d\9c¶ÿï\18\97o9âç=/µ\1d\8fn\eâóW\1d÷+-þß:7\1e\1d-û/Ævõ\93¯ºS¾\17\94PÆ£{eÿ¼\0\8bF7\rõø#×Ü×bë\8dëyË\87ï\bo\9fÝË·ØúäÚ7\862\94­\9bÝtc\8buÇ8HÙ
++)cüü\8fnýý\16?\9frÏ#þ\1f/\10\aÿȼ:\ fk¹Â³÷Q\97¢B¡P(\14
++\85B¡PìN¶¸³\ 5\ 6n(Ñ×\1c\ 4¥ÆL­\ 4\14\18ê\bÐ./ÆdçL\81\91nDH\ 2\ 6mHÑ\84@1\ 2Xò8«f\a\e<w1\ 2XîÌ?à©ç\10`Æ2\86?ç,\ euÊ        ð´\12%×@ÈYt\ e|\12½\85h\99\1a 3mÃ\våsØ¥.\81òÿ\15
++\85B¡P(\14
++\85B¡Ø\1d0çÿÏÛ^÷\93\85¥ãÑFÑ\86\9fÖÿ_=hðïèÿ?dðçoºk¿¯p\7f²¾.\1a\1d1§ç\7fÈ[¿#õP*sF4æ¥.r\ 36>µÿßwÍ~ï¤léàËßï°\r¢õïbÓw\4:GÎc\fÂ_\94\8dÍ\97OMG)û°\9cG\86Ã%×^Ðtò\935í¼Ó\ 6½ûu³'ÜÜËJã\a\1c=¯ì\1f\977\ e\80\v­\9dAê\\8bí\94G\8fÿÓ¦\93\1fE'_¡P(\14
++\85B¡P(^Î\98ø\9bM¬ÕºR`\16Æ\92æöw\1fu*6Ìü\7f˽\80CqaÔ\93²ä7ÀÅ\93p\0j¨ò{Í\ 1\15T44¡Æ\12\ 2³\1e ©1åT\r\9aSp\19ë"»ê0>\11×4hPð\1e¶m\85½Y\99ÝÁ \ 2\f\87\85\89\9c8\80äü\97j,\8eŨ\96\88\83r.¹Ú\8aþX\ e\80\8c«![ïC%\97 ;ç­ÁH \11ÉEæ\b\80É\8a+\16\1eá\ 2\8a¬ÉÙâÌà1+¹ ³>b$¼úÿ\15
++\85B¡P(\14
++\85B¡Ø-0çÿÿ«¯üÔ-,Ýst±ø¼_\89íÊW\84\93ÄÏïÂÌx\9e\ fý¨íg¼¡ñ\ 2¼\1d\8f®Ügrü\8a»V\9e)û£ÍãÑ5\83\8eÀÁo?ì§²?Y?\1emXÌýga[vÏõgµøÿ\88ã¯ßw®þ\836ÈþRë\84wÀú\97Ý}Å\83¢/\10©/°i\9f\9f¾p¥è\14ÄÄzî\1dâýW|³íO©âx#û÷ÃvϺ\15¢k\98KBý7\ríü­ó\8eÚÎý5¸¼hôì\92ÉuÏ{ÐßÜy\10®ñ\ 2î\95>Póà\8cåëþMÊH\92\90²;\86~\4»¨i\1802£\95\rc¸yöMWI\99«¥\95]>è%üÞc\97.o|        c\1a·aÕ0'\eîÛrX/+MûàÝR'ù\12?;æ\94o¶²Ôù\vc){=Ûù7ë\1fk<\v[{\9d\ 3\9fãï\96­\7f Í\9bK­l\9ef±\e~ÐÊRoç\97å¼ÕضþÙ\19ßjóZsãnÜ6ð3îÿ\8dÕM#2\87Ø8\18ÇÉxràÎ}råÖ6¿ÞçVçÀùøúí\9bd\8e\9d\89±õoµ\9c÷çØN\7fbeã`\98Ú¹"¯\1eÚùÜkÏ|Tʬ\ fí¼UK&c}öìU¯oe1µóN^2iç\ 1\87¾m¶ëUúÖ÷'\86²i\8eÉ     ó¸"\v5(¾¼xÒ\87\7fÑ·ZY±mÌ>5ð]~÷±-ãÆ1)\9d\9brΰþÞ»çªÙÆ«\89\9d\9br°\96N\9c½~ïVVrÐ\87\98B¡P(\14\8a\97\18$N9×\1c#\1d¢xÉ.LË\1eL\81Á\90ñê\16\99Ͼ\14kKòÞÖ\]p\9e\11Õ5ù yÛñ\92jRt\85GÒe\9cñf\9a«muSì\f¯\9cÑ£^/þhc½5</Z\8a£%zFñßTBñÖælC
++¡¢>fQ\8f\95\1eÔÂ\90ic\q>F¾4\96\14LÈÌ\f\8f\82\12\9døj=]¨\85¹à\99ç¾ÆRÄ_\8b\16ãµ½t¿7.W\9a_ÜÁ>(\15¯Ñ\14hs)¤j\rZ\80¾xW\93I9\99à*\ 6ÅEã\93C÷+½Âµú\9c1*\91¼ã䳩\85AÞ8S\Ý%23¼O0Kj\b\99QÝÁ\99Rð[u¨\ 6u;XJÁÒ\89\8d\1aèìÅ\bø\99y¾øì\98u\9eÙæñ\9a\9bú\1cáRÎf\f"æEÔã\8a     \1eã\80\v\ 6t\8a\13b\9d$\8fç\fD\1ciP;¬Á\92\87\18sF¼÷ÿÏ\18N\v[\am(5ökX\f\9e+>ôß3à\19\98\9eK\91¸ö\12\r=ȶ¶cl1¥rð1\18Ñ7ÿ|®)\ e<\ 3Lit\11Ãí\1cÛ\9d\vG\ fWMXS\1eͳ1Ô*ëÃb\94°\\1c]íd|Ã\ eC\1fØM¼¶G\83ƳÑ\1eGñº|Í·d\v\by\0?\9bf^Áq6a9fدÎa%ÌÌÅØc¤\12       \aXâ©·ßË\90Ùìûz\rbÿ\99\8cfÔêz\1f\8dp\1c°4Ð\1e\1a\17\12Ço"Ö\95\8fv^ý\89«\13ÿĹ}X¹X\9d\Ä0\849Ç0W¹n\ 3&\ 3Ë.\98låØê¹+ãW\f\a֨㤨ÿ_¡P(\14
++\85B¡P(\14\8a\97?ÔþW(\14
++\85B¡P(\14
++\85bwÀ\1cÿ\7fåò\e\9fYX:\1eÝ)<æÆÃ_zNËÁWýx´U8Ì·a[ñ̽?\11\1e¾Éi<:pïÉñGl\ f÷5~¾Áñ\9b\84G}\ 6¶«fW
++ß>Ô\80ãO\93úÉ;_üÆýî\16Þ¾1e<Z%õ\9c\8aíà\9f\9fx¼ì·.\8fGG\f<î#·ÿ¡Ô\9f¢³ãÑkåøi>ÿ-²\9f'½é¹_\7f\86û)\9f\80~I=\a`[ö\86¥ÿ%<\7fcÍxt²p¬oa{N\7få?ÉþXì¢Ñ*i'yà\9fÿÜ\9aÆegz\86\19áñ\ f}8õ\98Õ\8d;oCm\ö\13\86ñ\9bæÿÏ\f\9cûu¾k"ÚÜÏûêp½Ënky
++­\8b¦ñÕ7.\9e\8cÍE\8f;Ó9þ½Î=¤¿;çÿ/Ý{r½/^·þÞÆÿw\94¼\18øñ¬xóÃ\9b÷í\1cÿÚ®wüÀ\81\9fæñ¯]<9oããoø¥\1e¿Ñ¹ì\9fÚ{R6Íñ\7fh¨óÒ[Înu\96\\1a¯þ¦a\rMç}4C\1cÆêûÞº²ñø\81v\9e|Ë:\13Û\1fØó\9fè\1c\7fÓÊZÜ\09÷g=õ\9bÇö²\9egò¡a­\9dþ\98¿^Ê\9cu\8dsÿü°ÞÖϾù\8aV6áê\9bÅ\935´6^ôT\8b\e\88\8e\1eæá\92Ïnj9(C6m¬¿<ôo:nàÎa\1d¿çÖ³\1fne\93\98\90G\96LÊþóãë¾ßô'mèù0\87:×Ì\9etm+sýz->egº\95\93\98\90\8f`;ñ¡/|ºå÷4I5-\15
++\85BñR\ 1ù¯¡Zã²)Å\16æ¼&SØ\19ü\81´ÞÄ\8c_\r3\[¦¹ÂîêC±\99©µð\92ã\®Ì\96E23Nu\11¯\99.Sez'<d¼¢ùÔùµ/Ä÷õÅù\1c\1dêv)      \8f\97ÄåÀTÝ5\98\90Ð$¾\85ÆXQ9Õº*¹Û.9\Ç¡\0\15W\8f6\16ê|¡\aÎ\92¶-,å\12\ 1\97\93\8d\9c\1c:QçÚÁ7C\8f÷®BVw\r9t^q
++Þ\17\1c]\13ùÅ$"£÷è(~à*ÕPÚ:WoH\19ö\96lébM\ e       Ç\ 4\87!­®\9a\19æ\82w¦Ï\ 1¥ÄÐMoMÅ\0W²¹'\äI¾roªè¤¥\82\v¢wäé\a\8c\15²(¹ÉEðÖj}Á\ f\9f1ÊxÓ®Bµ·!\ 4\87ɬÌ\98\968\16Å'ô*\92Ï^I\88o\9cfWcò\ 3\ f¼º\99\17Y\9bMæÜ¢aL×\86Õ\92û8Oøè\85yÖ1t\86í¨Î³\9b8\1fÓêf^Ì<î¸Vä*gü\ 2\a\17/à¶µ5¶ù¨\ 5ïë.Å\9c\99pÎKlòdÜR\8e2WÑó6j­±Â(÷¸³\98J.rj\18È\90\98:\ eëÈ¡\8b\98,ïH'¯\15\87;4\18w\18eê2c\ 2Ð\85\90Éi¯Eì\ f\ e29÷¨ÉU\9c\8d¹Á\8cðh\11\ 2ä@ù\92pL¨¸ÑJ\8fI b]Á°\94DY@\8b£\13\17+.ì3-\17OÎ~ÀÍÇ\9b\1d·n\89Î\84«P\1e\ fW0\98"\87\89`B=ç\a\15Ö\ 4Ã?\12
++Ã\ 2C\9añè@\87-^\99Ù\r¬\ f\\87\ 1\a\ 5íÎÉxËÚx\aÉbİ2`#`$Ð\b\ 6\12'\9c\11³\97û£Ø\ 43\ ee\99÷YB¿qOò\86ã\9d\88»9'          áÝæ\18ö\12D\ 2\91ó\8a3\8aÜý\12\17\83Ë\1a.A,aF1\18.#\87û\80á"l\10\16§)\1cU#Ë\ 6cÌê".\15qãaÞ\18^Ã¥\86\ 6ã)\12Y\13\9e\81Xñ2·x\0úùö\7fúÑ¢wLÛÿï\ebÍW~å®\16ÿo$N~\88·ß1Nþ£rü&ÚK\8füö\1eÍÎ
++=nýÃûLìÁuß;é#ÝÎ2Í\1e|ç¾\13{p:\ 6û«ûÌÙ`\e\96õ²Z¤ì}C;îÿÀ\9a§»\9d\15\9bms\8f\94Ý\80íäo\7fñÖf÷änïÞ1´eõão<HÊê$\86~ëPç¿\1f°¦Ù\91ÕG\8d³V(\14
++\85B¡P(\14\8aÿÑ7=ùÄD¿`·ù)\b\ 1#7\15ù\96ÃÐyXãý\9bÛÂøw~\e\89\ e6|ÿ\96Q+U\11\1cEða\f\a~X
++T4 \91ïEÃ\81\85ÁÃ\1c¦u\1f"?vD
++*8\18ÄÕ\9a\9a$!\0?FÈ· \98´0­©@à<¿\ 6\81\ 6´\89hUJL\1c\8b       löÊo\13!T\±R\v\8fI\11\18\9cO       \81\90\12Õ\ 4\12ê\8e½\9f\83ND\8dÑÒ\80·0Ê'Z\f¥}       \f±\14~}Ä\7f\1d51ð¿\ e5ÈGÏÈ/TÖÐÞ\8f\96_'3?   xëkäç.\17-ì}~\bJ6R¹\ 2\1dAï(n\90½±ü4\85\96*ÿ_¡P(\14
++\85B¡P(\14\8aÝ\ 1sþÿïoÜþµ\85¥ãÑñ\83\1eùò-Gü¼ùÿ­\1d\8fÞ-\drÉßÿæ×ÜÕó\ 2äñhµp\8dÉQ~lû2á\ 5\ 4ϸ\80çå;\ 35ò¯~òUwÊþBÝþã\ 6\91Ûßñ\ráóggÆ£GvÁç_1pí\7fùÜ\83þAöW\83ã¯\<iç\8e<ÿ\8f\ eüí÷\9f\97ì±\7f¼×¤\9e·ýί~­ñÿ\99¿àò%\93z>tÙáÏÊ~\e¸s\17¦ã\ 2\1a\83ØÖýõ)Mûß\88T$y\ 4C[\7fvËúû[Yãf-\1a\1d7//À?\1fÚ¸ÿ>4n       ÃyÓq\ 1'\ fí>ð\90^Æ´\973s|t¶}Ë\81\9b\1fíe¥ñ$.\1eÆyóì\15=\9f\80K­Î\9b\86ó\9e[rÁ÷ZY\ e\8dsþü\103`®[s_Ó÷÷\13nü"\96ñ\80ó·]xC/«­-WÊy;Ï\vpÝÐ?\7fd¯3\9bÎÅßcÐÍ\7f×ÁkÛ\98eoZ[VKß?\86í3û\9f¿­\97¥ù\1c÷\8fc;åØ\v[n\83\9cm+[*eäþ_ðä·?Øb\rJ\8f_8yn¬_·¦\8dgu¶\95].} 'åg7tí\7fÒ\8d¤ìÕ²\1e\18Ïrìag<Õs\r¸Æ\1fÙ4¬Ý°ÇÚ\87;\a¦\97\1d?ÌÃt\1e\82kæÅ\1a\1cñ\85Æ\8f  ¾\9dwép_½óOÎúA+\9bÄ6üt¯¹ó\16Æ(,\1ebL\9eßëÂï4îL\rmþN\935(\1c\98G\8eüµ\96ÛÀøvÞ\ f÷\9aô}:ïÁViçfl\97\{AãÜ$Û¯wùÀ«Y;ûÄ_ö²ØÚù
++©ó\18lïYrú¶\96÷ \96\1eÓ2ÄgLçDX:ð\7f¦c\e.\1eò\81¬yà\80Û[YðmÍ\9f\838mÙ©\ fw\1e\8fmówǰæ¿ô\89·|w~ÜâÑ=Ã\1c\9d8{ÑÕ­¬Z§\7f,\14
++ÅË\ 4ä-{\12B½h\83[[miüæ\1a\92MÛàïd\8c!ÇÄTÛ      ¯B\85:ÜÅâ\ f\13ãõ\¬6[\17(tîgºÆwÏ\91-ÒÛ\9e\92ðo Î99´\89\16ç\92álIèw¢G\9dðÃ\16_¬      Ñ2>\8d\7fÃpEWC$Û<\92«[é\89+t|Õ(­£k-82ªù·9:\92\85-   ö\81\7fÆÙ=G~rN¡û\10'\1aè\8dK_cæ±è\ e\1eþ6\91\8f]\8cÉ\ e\8d\89jæ¦d¼\9c`@L\bd£ÇÀ\9cÛx\93©Åá0ÒnÉØ&!ܳ?Á%´ßáå#K\80
++Ä     \1896\94{'»¼\84DFöį\99MM/¦\96ù®b\18,ú ñ\ eÉGï3Þ'B¶Âß\ f%Qo\1eu\a¾@JÛ\9d\972²ð)Oßç{\8aG\8e³j÷k:Ìt®EHßó5Ë\9d  \ 6£dbâÀa\1d\85I{v\8cmÀ+\87\95qK¡µ\13ë\88Lq߯í\1d^§I\1a\9f×\16,²B×®\88ùcùPnßHÒó\88Õnð\ 2À\80\11\aµb\91¡     Ì
++\8f\91§s\15/$\9eLu\99\80èÈúöäÞÓ#\1zÕI\92z¬.ë\99\83 2y|óÈb\91b4ɲÇì\18ÇÄö\89ñ(¦ìRÇ\1eu\88f»crz4'Öÿfïê\83íª®z®CÍ}6\ 4\80\96Ö4"\13\9a\88ûûCH\e\15f"\86\10\81@\80\92B\b/@i\14Ä\80hëH\91\81Ì´Îı:Ì\80SZ¡@\e%\8a\85\8eãX\1cã\98\16\8ai\9a\96L\1a\1f      ¥\88@-X\10×o¯}÷=y÷åýÃÈP²~\93\9b¼}öÙ_kïór×YkýÖ\812}]sÁ\17ßuzÚ\ 6q\ eJáÄ!¡\80SÅß=Ó\13A\8f Â¯\82hId6G$&À\14#=Ò\9e7\13§#"\1e9\954     4UÅFrÏkö\8e¾{ÃrNÏ×`\9fc\91j0?iþóíÌi¤h g¾\9eã\18Á¼¯Lù}ê \13<\91´3tò\90°«\9c\a\9bà|P\8cú$+:F%4\88\9eQ\92fB\9e\ 4üv¡\83\9fè\94Ñ=\1a\91$th­.\874#ª\82æ\11Ë£\8dß\81\19ÑΦDH\91èé7VB\1e\0zÊJ"\8b\84\18!zZ¨#\85à\9f\ 4w\ 2±ÿ\v\ 4\ 2\81\10\b\ 4\ 2\81@p(`hÿ_k6Þ1¹vfï®Æ\v÷GÇ_¹¬ÚÃgô{\8f5ûõ\89Ï¿o\rÛTsîW¾´Q¾\80¡ýù@^À-\1d>¿®ý?5»Þ\82\7fzK±1\86¤\¿wSó;8Ðþ¿¦ù)\1cÈG°»ñ
++üé/¯\9a¨ü{Õ\ eÍ6U\8cqñ®sng\8e=¥Ùvxl³9^9±þ\ e®3\95gnk³U~dÿ\86jKW\95ã`Cã\ e\18µÁoo2\e\9føÀ½Ì¿§«½õ¦f\8fÜúå+öq]
++lû]ÓlÔ_\9a»\8aù\ 5½ <ÞæR·\89\9ftÞ7¸Î\ 5¶ï.ikX?±í\ 1¶ÁGÇ}Î+k\98Úξ£Él\94ïoSi\a\9bê\8a{×}\9f÷]U\9bê¾¶÷ë·\9fû\ 5®+i&agoû¼nbï\ 3\95ïϳ\ÖNÃ\ 5ÈöäOÓgùÓó\99»NeËû7ÞÎÔ¨Ý{uës\94Ob[óñ\18å\8c8rÈ\v1b\13_ÜÎÞu\v/gN?\1f«ÌÖÌ\1eÈó¹û/ã:\92u×Î\8eºs?qÅw¸.in§Ú¹Ýðà9ÿ1àûã¹ìj2;\7f\83Õ¶]9 7\94vSsú­îØËÿê6®Ë\91÷èìö<\8fò^ì+}\82ÏðmsÆÙ>\9fMåk<z\1a[úî&\97oÝ~Ý\13üÌ[Ïu©Éú+7\9f\8fë\=»sf\ fúü¸þÕÒ'^\96rݲö\1cÝ0sÉ\ 4×ùÄòdß\19<\7fK\9f\ eö=RÕOâªÆ\91¸üÖ%Oq],v\16\81\10\b\ 4¯\1f\85gÛ2¨å\9c*tuÕ\17\ 1ÿ\83\a0õU_\0ã\92\85\99\93¾\81Ð7\9b\ 4C0ìðÅ\87$(\1fé[RðÎf8B$\r\9b¼\86/\ 6\fÛÞ\15\ f6"\9aÛj­=øòà\\0+)\98!­¡6ÚÑL\12é\ f qåàþCÖ{º\f\ f\ eX\813Ü<\8cÎSùHh¸¥ä\1c\aó·)\ eÖØ\8dK\1fÄy\ f¸ø2Ìó4\83\|[,û*vü+´\8fÅ7\ 6\8c×X\8aò5\1f<}Íö&E5\18\9cñ\93béÙGÂ9öÇÐ1Ð\9a\v\ 3ã`ÎSÄ\9ewm×¼.\1aÔXx*Ðú\r+:ÅN\ f+½·ÔVÇÔ\19oR¾{ök)\1eCÉÛ\1cý\14>$\ 6.Ó¤?êbØW´p\12\ eÌ×pÞ09¨\10\83rp\9e1åÛ¸Ið3Î\ eTôð\90¡\9d \89Ñv\83\1a\12.  ð]\81+\ fBûIÃ\ 2+\80s1\85àà\8eDJ\89£­\86kC¦oÆ\19¡ö:\83[2døNØ\19ÓÙí\vé¨N\838~RGH®!Á\87\81ö«\\ 3q#\1d\1eøé\94s?Ê[ðÿËQÙ夤\ 3ªùy*Î\ 6ð\ 50ðÊ\80ú%ùÿ\ 4\ 2\81\10\b\ 4\ 2\81@ 8\ 4 ú¿@ \10\b\ 4\ 2\81\10\b\ 4\87\ 2\86þÿ\7fsþ5³'×ö«¯í¨?ÿ¦Æ+¶dÑ1Ìÿ§\8d\19ø:\83£í7õø^ö·OÕ\a\9cóêÁowí3ïü
++û¸\87êË}ló\91>këú¯W~3]}Ü;ùÿ&ûy/h¾À£¼a÷\95vëÐn¯¾»ò\86\19öáß×|øOßó·÷\ eø¿¸\8ec\18¦Ê\89>Ö{ú ¾Ç\ 2\81\10\b\ 4\ 2\81@ðF@á¨\8bªä¸S\1aÜ\96Õ\97ÝfmUÉ`\17µö\85×.dº`½ÒÙÃ!?\18gIÅÉÆÑ_>Y\13U   {ÐÚ\80Ì<Â\ 5ßF°\ 4\86\18]DLBNÚ\82\9dÎ\83I1èBÿH­M\ 2\9b"îÎ:ä\9cÁä\98@\ eí²\89!\rüé3µm<\91>#\8d\1e\Û}
++\95¿\93&dà\81o-øíL\88:\81¨\11Q\v\ e¼x Ä\83þ\r\85î.\81\9b\13\ 4\98&auÖGZ,Ft         ´ZS/Î9\10þ!º DRpU¨ü\92* NÀ\ 5Ub;¦âp\9c*\86ÂgGã:\92\91ò\ 1±\13\91¤\ 6\9aBíh.`ö³ÞÂu?S­"É\90\88#b3h@O»\93I\82\88\ 50Zej\98<iÉ\1614\86\ 4«\f\8d\93|\ 2\93§-\93\ 6\19av$yES\891;\8fH\15\84/Щ{\9bjÜÁH¬BWÿ?ã?OøËÉçffï±\16Ó}Ë\91î\8cÊó\8f÷\ 2E·¾\8d>\8f<~ìs¬w\a×ï\8d7=þÆSÞ÷/5¦Wõ{Û\9b\ e\7f`\9c¿júô\89/\¼\93¯[Óï=VîGüö\9e\v~®ÄóG:^ýÞ¦rÿ"úÌû\87÷l+|þ$ø±\9a§\80ùôÇl\8dó7üÞaW\e{4î\9eßWLÍE¿»Ía4\ e~^\8b]\1e\8d\83ߨxÕ?ü\83ù\9få:[ã¨÷Í\1eÌÿ³î¢\9dÌ7\1f"Ïsw\9bËÆ#.\7f\9c¹ásåG¿é\88á;\90ÉÜðóZ»ó\8e\eÿ.ǺkͱÒÛ[|ùh¬û-­Ï\95\13³\7f\9eãÙéÉâw ­îÂ\89Å_¬<î5þzeÛãÑXw~¯25Çûâ!ßüAbϧ\8e!\7f¶µ;mï33ë\99òÂÇ.\10\b\ 4\ 2\81\10\14\15ÝG!\19\ 1©Ù|íµæõ8\18/\81¦a\12Ý\8c\b÷\1cK\1e\ 5dg
++¤¹ ¯\0\9eôwj¨@ÏO
+++(Ö\9cqÐì\919\ 3¯\1cH'ÎÁ\93bnS¤Y\82Ñ\ 1\ 4ø¤\97\aê\9c\14\RaI\8b'=")\98\99A!esvÈР\f\12\0Ù\99Aì;iÁfr\1c|L±¤»°`\1e\80.\ 3Z\88\fJ}çHÇW\8a&\80\ 4$\1aÉ? \90\ 4¢\ 6R¿ \88s^\13\9bJ\9e\14¼3À{\ 2däP\8dã Ëù0ÈW1\99÷ (§°:\92Kv%¿CÌ\18#u¹1è~C\93NØ.\83ì"1D\95HS¢"éí9"±\99Á\e\17\92                %;H\87\ 4O\83\ 1Q^jtx ²6\ 1¬\b\98\9føÿ\v\ 4\ 2\81\10\b\ 4\ 2\81@pH`hÿ¿ü\86øéɵ3{×6Ûù'çïYÊ6â@×W6\9eô\ 3ó\ 2ìm|ßï_wÂ\8bÌ9¯íÀ/à<úÌÝv×ylK÷±ß[ѸíïÙvLáówÆÓý/\94~ÎD?¯,=\ 5×½6tÿ\82ÆÙ\7f`^\80Eå:¸Ëç\9eúöWË|\94Vc½\17[\9cÂ\8fï[Å<÷p[\99Qøñ\e¿ú¨ÏÀ#Íþ=Êÿ\7fUëóØã.x¢rü[®[=k0ï+\9e2\8aë\ 6}.n\9cægn¾ì{ì\87`2Ûâ?3Ml\ 4sçÿ1}.ýþ§îa\99\ eâ\11\16·5\8crüsÞû©ý\17öµý[ûÔ©?U÷£ÆMìjÜù/\1d\7f>·Ë¶ÊlKésj>þ\19EfgÐçùϯÞÇ>
++Úuý\10 ³W\17\8e³o\83uµÏeÍ\a\9e\r'q\9dO,ϵMÖ÷ϸôQ®K\81ó\ 6Ìjëû³\87×0Ç¿ó\91å²¢\9dÛQÿ\85»JÝÔ>
++\e§É5\7fã4¹æ\8f\ev¼ëü§+?¾çñ^~ë n4×ü\vm¼¥\13ÇÕ8\14]û\Óò0<ü\v¿]9ðmm·£ññ\8frç?Û|>Þ;vú^®\8b\96Ïà¶#\86ãÝõV®K 6\15\b\ 4\ 2\81@p\b Ø\ 4é«0\1c°\a6^§S×f\8atXF'£Õ\8c\83r¾ël¼BâòBæ\8fBÐ|]yðÙ{\17¼aÖyT\9b\10À`n<}ÉAry¤/Ï>eo`Wuô\95P+úB©\fzt)Yú6\v¶xm2ÈÝõ\e\96/~ðIÙ&mi|ÈÕѬrô$5\93l\8eZA\14Ñ\9b\f\86\v·£\9eiÅ       \96h\12Oô°\16\93\bé\ f¨ß\95Np\1c÷%_\ 1¼îI8Y\17\ ezä[\83\v|.Þð$\91\80\99:úBJm¢®y\17T\91\81ñ}´rò#\ 3|\84/z±\1e»\10µ§Åfï³NÁQÿ\19\1d\88\aÒ¤\ 2VEûç¨K8ÐC\ 4Tç±G\ 3?\0\13IBy\90¿arÎ\ 2ãsòlG/vèf7Ç\8a\91¿Þ\84Xr¨\1dÄïÿ5û/Ð.»\90r\8b-ð^{æÅ\ f$nZµ\8dH\14áH=t9Ð\8f6Qß\1a+4¤sÐIÌÔ?\8dAÒñ\91:&±©\12A\0ÿ{\e\94ågÆ\93º\0v}\9aH°ì\1fàUL5\ 6\83N\ 3Lõ´ª\8cü\16Ê©D½D\84"ÐléÀk4£]\8d\88¸ ­ËÐd,­\94vËá|\93<q§5JÑA
++1wò,\94ñ\91Çm\9a¼\rðR@\94@É1&ö\7f\81\10\b\ 4\ 2\81\10\b\ e\ 5\fíÿÿûÈ;Ghìú½%\8dÿïÄ\7f>bWÍ\87\9eú½\17\9b\13§½ûk\95\17 ö{×¶\1câ\aÚá7·¸ýkOªùæ­Sl§ÞÑúzèÎUÛ«]¼Ú9W·þ¶|\80ã×uÖÕþ»©µ{ùgÖ?Á¶á\íÍ»\9b}tóçì¯yÇË;K\81\10\b\ 4\ 2\81\10\b^\vàû\11\9c7)G§=<iØ\97ÁFð\1d\82r\0ÞÐ&\1aç§õ\9bqÎäâG\82\18ÿè\8c±.\87h\83\ 3!ZrÞY]<D\92Ö\ 1þãÙê\18\f\9c\10\94\89 a\bF\15?\80`ÁE`=|5¢\87ÏNJ:'W¹\1fá\19 ö\7f\81\10\b\ 4\ 2\81\10\bÞü\10ý_ \10\b\ 4\ 2\81\10\b\ 4\82C\ 1Cÿÿg×<þo\93kgÖ¼}£ùÿ8oÞ\17è3÷¿ç/f^=íú½Ííþy_\9b\7fn¹îuì÷^n<g¿ôüC§V\7füÜïÝÝøÝ\ eäÿ\eò©}nýüW
++ÿ_\0_à²r\1d~ýóvòõ\10rê÷\1ei\p\aæ\v<ºÌó\1dôÙvá¼\1f\96ë)ä±\9ek\1ci?¼å\12æâS¾òÑmo\9c\84+\1fXñÍÊ\19\98\99\8fnF\8b+¸úø+¹\9dÖ\95«î\94ÖçK\87\87c\1c¢«|\82CÎÀ/®xt\90\83\90óÛ¥Y\ 3Ù\8cO,¸£Æ?ÔÜ~w\1f>h÷¥¹«x.Þ\ 4æyÛÔêÔ\9d5waÀî N5\9e·Q^Àµe¼\8bèó£-\97þ`PÇ1\15[\ e\1fÈë;\ f\97ëRå\fÜVêî§ÏêG\1fòÌ\19\18\ 2ËlÇ4¼\80\9bK;ðû\9d÷ÌI\1fä¼\86¾æX|ºÈ\ 5¹\ 4ÏÚºþëÌ\19è5×1ß\1eb?Vú+\9e©¼\80\99û\1co\1c\85\7f\9eÖ2÷\9f÷\91Ûmigð\82\7fÿkÍu1ð>ì\9b\86\17ðèYú\7få|\88à\89)u{;¼\80§ÞËÜ\7fZñx×\1e>8\13ß¾wÅ\93µ®ÊìäÆW¹â»g߯u9s;æ²\9c:\1fâ\86Æë(<}\ 2\81\10\b^\ f\f8ÒtðH îjþðn\8e3\94sÌÞ¨ä\95\ 5û\eß\13\9c\89ÈË\ e¦¸\8c\9cì±rö\ 5ºì\83\v\9a:\8dVeäW£\7fAp\87\8cn%\9792©#\9dºQ.$\ 3î¹\14µWÞ[\ 5/jíÀïGe\9aS¢6È6\9f­\9bÑÍù\86\14éö\rÊ\11\18\92vM¶!\14§p\9a\14(Û´\v\95G\ fIêØ?Ü\82.\91Æ\82Ûø\8cÊçgK\1ez\95i_¢\83¬¨\ fã+ç\9eq&(\9dI#"ÙÑt"Í\89\84\9e¨¨\90\r¾|%×\ e\94u*Z\93\\b\11\19ÆI(\1a)¼3VE³\ fÚ\92\902¾5+Ò`\90w\8e$H²Âú\91q/Ó÷Ô\98àq\9e\82w\81öÛ+\1d\14\88ïèx\90 RÐ$\98\bª¼\0¹ÑÉ\89\1a©çI_À\98 6¬gÊ\81v\8f\99Î\10\92ØgËþñ&ù¬
++Ñ!r\ 2Ö{+§¤Î\119øh\9b"\9d\8dºöH\r\ f\92ûp\98[O\ 5ì\91\v´üÆ\97§hî\90¶U¤\ 1\ 6Z\12ûò«HK¢-\8a$\rc\94U\9dç\82\ 4@WSª9öè\\ 5Ú*k\e× ¢} 9:\10®Ó\19¤©\80°Ï\e\87'&\80AÓEz
++,¶\85\81N\90£Ó\87>IRô\\80)S\819\92ê\15       Òg\10\1d\96\ 3\98\v\r!X\10I\ 2ðç\8f6âñ\ 1UgÄ>Ð\95\8cÛH!J`Õ$Q8G\92¤\a\90\16\ 3¢Å\8có\\ 2ì;úÿB}ÍÍ\93\7f\ fôknùQ}~YÑ\87¶àú\7fmÿQÑÛIæý^¿éÛû\9f\9f[ôpgqý°¦\8f.xÞ\15=ÏÑS×ïÝw\10ý|Q¹þ!ú\9csϪýU_®zÓÉ\1dÝö\14[õPÅúë\9cÆ\99þãÏW½PYÇzö榻¿4ç\ÖÓ@BÀzè\11\a×Qw·üó\17ì½ùdÖ'\a\1cô\8fLÃÃ~c[Ûò[\97<ÅïN¢Vòß\8b\10\b\ 4\ 2\81@ xs¼7ÒÙÙ\84×;\ 1ê­&å4XåL²%\98\9dtdÒ«I!3¤hgÒ cò¤û¦ éVm-¨øI­7¤\8e{Rg\95vYCÉÏ:\aÒ\9cSp\8a´À\0^þèKr\ 5\9d¨½\89È\rAã8\1d|òº¼¸ÐèÍàÝ\ f\12Ihïð\92Ç©\8cI\90r\17\ 2µðí=\80ÉÞ#@\9fz¢!h\ 2õ½BT9\1cì}\ 4¿Ç±¤\94Çd­V¤Â\93\1e\9eH\97§\89&Òòi¢ ð/³Ð\85±ßÓ\9dÊÑmÆ¥XÞ¡)äoÈ6#\8b\81±\9cO¬ä\11ð1khðE¡§\7fÍ´ï%\ eÆ÷ïñÒ\80
++aªwJâÿ/\10\b\ 4\ 2\81\10\b\ 4\ 2Á¡\80¡ý\7f×Â\9b¿=¹¶ß»å vþ«\8amûVú,Ù9ç\7fØ\ fßÄ~oIóõ>ñ\85\8bw\96ëÑ\9a±ÞgÊuØÐ?<±ç/Ø§Þø®ÿ4üØÏ\XýíµËl³ç|ì¸aë\97¯ØÇ~\0)°ÍþÚæ\93½nb/û¸§èÙ.¿¨ÙÞ¯~÷ÅûkÞ\80ê#p{\19o\9c>«öþÚalëwÕ\97{qó»^9±ïs\9cS~\90Ç}E³õ¿:ë\9cês\9e\81Ye.ëJ\9fúî\9a7Þ°ïøêÒ'üØß6g\9cóÍgS}ÿolòZúäQw°\8f\0¿Ó\11\b\ 4\ 2\81\10\b\ 4oL4_r\ f¯l\15`Ê6ªúäk\ f\13w´Ú¨P2Ãûjo®q
++9Â1ÞDíHÓ(m\9cÏ\11êCÉã\9eH9ÑÚ8\9f\12,¿ô7(á\rýhLôð\137%>B+í\9dC@@ÄøA[m³O*\aãµ\8e  \ 4óA{xÎG\87 \ 1\9bR    À\80I8»Xâ\13HÙ1\ 6\161\1cpÕOÆ\86\808\ e\91\8d\80@\ag4BC\94V0H\9bDZ^°\1e¦ð\f/s$´§\91¨\17ç\\82O;\18îi¸ ÂÐvN\9a\ eu¢r\8d_øIô\1d õ§D[I3\8dÅâ?\88\89\83\82³?lþ1×ó@û\800      ÚBZ\ 5Ý¢àv@ÒE\1cLL$0\ 4J\90Îi,d\898\ e]Øþiuθ\84ü\0\8aÚѺ _º)\85\12\94C5©ôåá\81N3Ï42í\17É#©Xb'¨\8e\96\85\0        \1a@ìÿ\ 2\81\10\b\ 4\ 2\81\10\1c"\18ÚÿÁÛ6¹v¬7^lÞSñº      \ 4\ 2\81\10\b\ 4\ 2\81\18Å\e\91\93Rìÿ\ 2\81\10\b\ 4\ 2\81\10¼ù!ú¿@ \10\b\ 4\ 2\81\10\b\ 4\87\ 2\86þÿÏÝðÕK&×ö{/tòöýÉGáÿï\937ýÞ®Æ\857oçüW\98ÿ/§±Þör\1d\~\ fݹj{Íe_R\r\8eõ^lu£ùê×\94º©óÀomsX5±f.ç\817\99¹üv´º\95\13ÿø óõ¹\9aË~Sëó\1d'¬ù\ 6óõYËyÙooü\80×ß\7fÑ÷8\ f|N\9c#~cË\ 5xÖþ\8fõ9\ f|RÜîï[>Äó¿ù®¿c\9e?ÎÙ0ÖÛÐÖ÷­Û¯{¢pù)ë£\1c2\81\10\b\ 4\ 2\81@ 8$pÉ\95WZ£\ 2üð]P\853\90\94^\97Á\11\98\96®\81zÐZæ\r4:ë sr!:Ä\fx\ 5"@\9f´Î>»\88´}\8doÒ»äCpÆ\84¨jNBM:u¨õT\13ÁãètD¸\81SQ\ fÛ&\13cWÿ¿þðå»'Ï}¬÷Õ¢Ó.¬õ¬\vû$ñÿ\ 2\81\10\b\ 4\ 2\81\10¼¾ï\16´Î.xÒúµÕHEà½\8b>xkLÈÚ%¼[HÚ\18§SLH\1a\10µq !\80M~Vù\1cÖ£~ÔìáÏæg\87?\87£\86?Ç·\ f\7fN°ý\1f9ã-½\92\ 3\81~>ºSÆû\81c:e\8cõ\9eN\19vö÷vʰ\91Ï\19\96K\ e\85÷wÊÈ£w|§\f[ü¼N\19ö÷ùòÅý\v:eÌç\17;eÌçÄN\19>\bªSFÿºSÆüü°ìP\97:e´Ï\9d2î=©SFû\93;e´ýà°ì1ö\87:eô¿¨SÆü\7f¥SÆü\7f}X\ e¸ÿ´N\19÷ÿF§\8cûOï\941¿3:eÌoY§\8cù\9d9,GÌï¬N\19ã\9dÝ)c¼å\9d2Æ;·SÆx\17\ eË      íWuʸÿ#\9d2äÿÑN¹¼Û\1a\963æsi§\8cþÖvÊ\98Ïe\9d2ú_×)c¿>VÊ?Íç\97:¸º[¦\ e>Þ-S\a\eºeêà·ºeZà5Ý2  ôwºeZÀïvÊ\9aÆÛØ-Óx×wË4ÞïuËÔÿïwËÔÿ\1ftË´a\7fØ)ã\81ùT·Líoî\96IÀ·ü\1f\ 2fEq¥ç
++ê¼\18\90\10\83f"**
++\13èîªîªBDbPQg\15\f\92\ 1'\80á!ê\b\8a/\82¨¬\8fh⨠¨(\90\105\88ë( D\13\97à\v\1fÑI|ðZt@ÔÉ\88\ 6\10\ 1WÄ1î\7fªúÞ9sG\93õû\92|»ZçSÇ¿«ë\9cS§N×£o\9fS\1ckw\96g\16Ó\ 1\947q\1cº\1c 9\f~·q\8cú·s\8cöÎfX\82ß\\8ea¿ù\1c£þÝ\fÓ\ 3p\ fǰϯ9\86}\16p\f~÷r\fýîç\18úÔ1L\a\88>À1ä-æ\18ü\1eâ\18öz\98cåÎDÍaèÿ(Ãô\80ü\8ecèû\9f\1cC¿Ç9\86~O3L\ fÄ3\1cãþç8\86ü?p\8cú¯0L\87§¾Ê1ô[É1î_Õ\82£\0öXË1ä¯ã\18ò_ã\18öx\9dcÈÛÀ0M\bop\f{lä\18ýù6ÇàßÄ1ôÝÄ0M\b[8Æý[9\86>ïs\f}>à\18íÝÎ0ù÷\ e\8e¡ßN\8e¡ß\87\1cÃ\1e\1fq\fù\1fs\fy\9fp\f\f\93ÿ\7fÊ1äý\95cÈû\8ccÈËd\18\86¼=8F{Ûs\f{íÅ0M({s\fy%\1c\83_)Çà·\ fÃô<|\83cèóM\8eQ¿+Ç\90¿\1fÇh\7f9Ã4A\1cÀ1\9e¯\ 39\86ü\838\86=\ fæ\18ü\ fc\98~\808\9ccð;\82cè×\93cðÿ.ÇЯ7Ã4¡\ 4\1c\83¿ä\18õû¶`AóC?\8e!¿?Ǹÿû\f\93ÿ\ fä\18õOà\18í=\91c´·\92aòÿ\7fã\18üNæ\18üNá\18ýõ\ 3\8eÁÿ4\8eÑþá\f\93\7fÿ\88cÜ?\8acÜ?\9aaòç38\86>c8\ 6¿±\1cÃ>ã8Fÿ\9cÉ1äMà\18í?\9baòçs8\86¼s9\86¼I\1c\83ÿù\1c\83ÿd\8eÁÿ\ 2\8eѾ\v\19¦ùá"\8e!ïb\8eaïK8\86ü)\1c£½?á\18úLå\18þq9ôÀº\82\9bÎ1äý;Ç\90w%Ç\90w\rÇhïO9F{\7fÆ0-À~Î1ø_Ï1øßÂ0-°nã\18ònç\18í»\83cÈ¿\93\9f\ 3<«]\8a\8dÛ¿äæ\8f0\ fGmç£VåòËÏO­êë<l¾üüÅë\87\85²íüÖª<Éêíüתܴ\9d\ fyy\94g¿(O¿(O?úèúËΧ­êë\7füüÊùÓ\86,\7f¾mU\9e´\9d\7f[\95ë\7fü|ÌùÓxö÷æçV÷«¶óu«ró÷ço~\7f\9c׿qª\9fÌbù¿{\7f0\82íÑH¥ßó5)t~\89¯\19ÑÆ'ù\9a\13:½ÀË¡s        p\97\82â=j&]pa¯ñ\93.\9a8¶ àx¶o¥ÇþE^\a<þÈ1Ú±&o\1cèËöÍdÖ)|_\ 5¥Ç²}"µá(v?É»\9aïs £`ûz*\7f/ï¹y+ï9\1eÉø\93Ù\97q\e\e8\7f\16{¯AÝ6\8fïs`Ã#Ø{\v\92ÿ<·)\1aÐ\83\95\93[\9fÇÛ\výÏeûX*\1fÎú\90p5Ó\97\86\89\85|\1f\ 4}\8fcýáÞaäÞéÈ\1aÆ\9bl},»\97x\8fa¼    Ob÷S[®â{R\¸\9ccØrWÞ3ü\vn\eàßrÛÂØ    ëK²ý»ycÞ
++n;ð¿\93óC\85?qßBù\12¾gC_Ldú\93-ú0ß !'b\98Êÿ\927¦~\9fÙ\87î\9fÅ÷ÀP¾\92½S¡GòbÞ\97\9c7&ÿWÞ\1cw=÷-\18ü\ff\7f\92÷+Þ^Ø»CK_\86\ fò¶¢!\8f\82÷@¦;Ùy:ï+\¨b~Eå\ryóçSÜöà?\9aéFm-gÏ\ 1Õ_\9f\ ea¶!ß\99ÊåÃq\ f\ 1ñû%o+lñ\bo\ fî¿\8bûy@ß.µ\1e\1fwçÍ\ f\83\98|zNÞÉ\9bo;¶ØRlË\9bûVç­]\8a¹,(«\98ßÒxs\1dïG\94×s¿\84íNfº\90­\8ea}Cm?\80Ù\92üð7¼o¡ë"\8e!ðfî\87`ð,ï+\bèÆø\91í÷iik\\98i=ÏÌáv\aïv\99ÖóÚ\9byë å¼_ ì\7fçÍëÃ\98_QÛ~Êm\ 3yÝY¿\93í\1aóÖMÿÁû\19üÏaÏ0=\13=Ù3Kýúç¼uÖËÜö  Í\99-}E÷_Ëõ\81\ 2\872}\88ÿéL\7f²Ý\fnkè\7f+Çä\b\99Öë\86\99¼\1cü\9fà}\13¸\98´´/Ìþ¬\9f\83\99.46ÝÁû\ 6~¸g¦õ\9aâ>n+èÒ\81÷-p\19ǰeG\8eQ¿\13ßÓC·Î\1cC\81.\1cCÁ}9\86m¿Å1äíÏ÷ôà÷m\8e¡ÿw8\86mºq\fãwç\18ú\1dÂ÷ôàw(Çà×\83cðëÅ1ô©à\18íïÃ÷ü¨\1fr\8cú\11Çh¯à\18úÅ\1c\83\7fÂ1ø+\8e¡¿æï\f ¿á\18ò\8fä\18ò\8fâ\18ò\8eæ\18ò\ 6p\fyßã\18ò\8eáï\18 ïX\8eÁÿ8\8eѾã9\86¼A\1c£\7f\18ü\aów\f¨?\84cÔ?\95\1fÊ1ô\1dÆß9@¿\1fr\f{Tq\fÿ\eÁ1ä\9dÎ1äUs\fy#9\86¼\1fów\ eà7\9e\7f\16Çh_\r\7fg\80û'r\fùçq\8cú\97ò=?úg\1aÇ\90\7f\19Çà\7f\15ß³Cÿ«9\ 6¿k9Æý×ñ=;ìUË1ô¹\81cð»\91cð»\89cè7\83cè7\93cÈ»\99ïé!o\16Ç4öq\f\7f\9a\r<?»ç\87¼¹À3Úµ#<³z\8f\82\82º\ f\ 6ÝR\8f\95\93.¿¥\12\7f¯ë[2«tOì\85f\1f?ksqAAïdܬæ½áW3ï\9dE¿\1f4\1e´äÖæÂ\82\82UÃ×Þ¾\f¼\96.*¿³\ e\9b\8ea\13\ e¿\93xß\V1§b/ì\19^Oæ5\83Ïqµ·þrY{ü}ï\9aù\9bñ·xǺ_Õ\15a\8d¿¬×]µí Û¬\93ï¢uÐ\89eáÝ\9bqÿÖm\eï\99F×o¨øu5pÏ\92[\16\94\83ß^ÅÝï­\86\1e¿\98¶æÞRü\9dq÷캺2¬ßÞ~¤®\14üú\1e\ 3uÐ÷ð߬\7f \16í*­ÝòÀ2´§þªk\16ÕЦhüé\8bë¡w§û\97,.-\85ß,\1d¼¤\1fî¿ç\88åKJÁ¿¬ÇÓKÊQï¶\e\17?T\89¿\8b\8fßòP\ 3êWo8éájè3ekÁïjPÿ¯\8b\7f¸|3ð1{\ f_^\8bzÓ¿9gùfÜ÷üÊÝOÔ\81ïä·¯~²\ 1ú\r¬(\7fº\1fô\9f=ꦧûA¿\8b/èú\fý¾úÂ\8e\94Bnͺâgëñ÷ÄEß~¶\ 6ü¦=rÖ³\15¨WØkÀ\vu°Sï÷:þq3ø-Øoæ\9f\7f×K\9e\ 2ü¦Ü¸õeZ³\96u»ö\95f\94/|jý+ýpÿü]\8b\87>W\8eÞk%=#½{\96­,\87ÜN\13~¼ª\16rÊÇܾª\12¸qÒù«)\82ºË\9aõ«ëa¿Ûv´_S\aùc?úÉ\9a¹hGE窵´¾\99*G®­@ùcûì¹n\1aäLݯ׺zÔ\9b½ Ãësa\9fgÏ?¾¡\ eú.|èì\r\9b¡_ía\97½Q
++=\164Üÿf%ø=Ñ|É[ô~{êäLã4Èo?¾sc9þÎ~uZc%ì8·öÝÆZÔ{uW\8f&zOÝüéÙïÐï\9freý»u\90sâI\7f\ 1÷%\1dÆm©\ 6\1e¹nÜûý ß\8aþ\9d·\95¢^ýÍÇl«\85~Sç­ÝV\v¹U[÷Þ^\v}úõ?u;\8d9\9d\aÏÚ^\83û/\9e¶ÿÎz´»òÅ\13v6À~ý;\8dØY\8fò\89O¿´s\1aÊ\97Î~ãÃ
++´O_±þ£\1a´ëç·wþx.ø\8cþhÝÇ4V4\9c¢v7\80ÿÙ7öÝ]\ 1\8e\9e¹{\1aþ¾ð\9dGwW@¯ù\9bJ>é\a<}ÌÑ\9fT@¯Ã¶W5Ó:þòY·6Ó\1as|à   \9fÒ{d9rѧËpß\8aA\87|FÑíû÷]ñÙ²"\9fÿÏ\93'O\9e<yòäÉ\93'O\9e<yúzPKüÿ}\8bîÝ3¿´0s\ f\85\ 5Øüz½w\1c0ÖæìÓÆ\14f\1asy÷úìX~¬Ëu'q}¨½\9f~S.\1eÒíI{]\ 5aa¦\8e~\9a´¿eß´å\e+èºÔR\17fv\96Z9øwÏ3\ ex\8a®+\13\ 4\85\99z{\9d*\9dðq\9f\ fèº\ e"ð//Ë^?fLï\1dtÝÈH\15ejíu\8aI\98|Ø$\9bÏ/\fí'
++\ 5E\99~¥Y]'6½ÔÃ\95ÙOÔP6À֣߿Æ4\f\9boË¢ tùü\ 6\94fy®{pÌû®Ì~j\86²)¶\1eÅILغïï]\9eÃÄÆ\19\14eVäÚÔ6Ïa³-£o\8d\8fÔ#\1al\99Jìç<E\99MÖ¦ôýÀн\ 6¿ãÊ\8cý\8d¿(36'ï\9c-\e®sý c\97\93°}ǬM~0ý´&\9b£!Pi\e*rõ\86o=²¿-\vãÈåU<Ä֣ߣ\ 6¯>µ½+3¡Óó·9]ªã\89[]ÎÅØ¸öuÍå9l.>÷\rWf¤«×åoäclÈÙsÕÒ*\97sQªÔ\9e\8c¾Ñ\1fÕ\18Ö¹¼\8a¢ÌBÛ\ 6ú®aÈ;\ 3¯ueqàê\1d\98\937¢©®»-3ö§¥\82l.JêÛãÖ¾ÖÇúb\18d?¥ñäÉ\93'O\9e<yòô%)\9bG,JL\14\19\85åZ\10+%\f}G`cH#)",á´\10\94\83,J°$\8dD\92P\1e2)B\93\b¥\ 2\91Ð\ 1å2
++\93H\8b \f\ 2l\16"­D\94\88XEXþF*\91FD±À\92=Lh)\19        A§£'J\ 4  }C\99Íeæ¾\ 1U\94eÍds¡\99XDPI\89PC\1fchQì¾ó\15¡û\ 6G\980\ 6W°Ô2\12XQGX\93\86"ÖÂ@×0 ¡J&\92\92¯i\19\8b@ã¾0ÆF\0WHm¡Ã\18\17\ 5Ô6!Z$#\88J¢P\98(\942\14à\8bkA\12Ã\14*Á%\15\87\81ÁB4À6CQ³d\1cànÀÀ(\9b\r\ ebc¬¶qQ\ 2¬Ð)       ]\9c\1f¬¢ \ 1l\98\84\ e\7f\87Ñ¢(Ða\ 2sB?\15B\89$\ eШ\0\86\92!mØTd`#T\8bÃPư}@M\8bcJÎ\1eH4D)\15\ 6   Z¬©\87¢XÇî\eÙ\98N¬·ß½¹o\15Ѭ(\81Ò\91ý¾Ö}\97\ 4\ f\90\ 1úEÙï\8d]¼Nh(ã\1c,\1e¹ïþtBgÕ£s¥Nû \88©Të\0
++é´\1fÑð $)"\bb   E4ó3£$åÍ\83§A-t\ 3,\1d\98\ 4}\95¨\ 4Ò\8cÖ:
++¡«\ 2?\92\1c\87è®\0²á\7fð        ¨m$]\ 2\ 3¨\826\98\84\84»ø\ 34+\8am\1cuV\1eø\9bôÿ\85mshÀT¢Qpix_¤Üÿ\83-\\ 1»F\Pð2t%¼\16Ý\10\11
++\85\8e\92(ÑäúðzIæD?ÃØè¦\10.¬¡p¨È!á\1cø\v¯\8a¡ ¬\8aÖbgH½\8d\ e\83\14ò\ e4!µ1n¦\1d®¢¨\7f#uh(¨Ê~§\1d£6=-p´¸¥=p?\ 1w\93\1a~\99Àð\86\82äüïÿ\9e<yòäÉ\93'O\9e<yòäÉÓW\9füþß\93'O\9e<yòäÉ\93'O\9e<yòû\7fO\9e<yòäÉ\93'O\9e<yòäÉÓW\81Zâÿ'\ fx,Ê/-Ìt¡ì\95iüÿ0\eçO\81#\85\99\81¥-×'\7fÏÅÔGqafs\11\9cô\a×/\1cîbØcU\98i´ï\19(F½û©=¶§y\ 4\92Â\feYÌòé2Ú^7F\14f*m¾\0\8aÝîõÌs§¸ü\ 2\89\81>6\16\9cÎÞ:ü\83\97?²y\ 4\ 2\ 5>õ¹Xï\83_¸þu{=¦ü\ 2ç}AÞ\81eV\7f:ó¬òµ\ 3wÓõ$\89 çÒ\96|\ 4\7fîú¢Í;`\ 2´K\96dõÿÙ\15=wÚ¼\ 3¡\94E\99¡¹XøòûF­tö  \84\8bÙß\95+«~´jµ+SÆÅ´\ f²ö \ÑCÂ\9aFg?móW\17e6\16gm2©éÜ»]Þ\ 1{\ 4 ÊfX\9e\14C?ü®\9a·Ò²4.¿´¤¥Þ    7º2£\1dÏ\19¶_(çúØÕÍ6\ f@(¤teKs<OW£ßueq\9a\a`£-£\9cÔë\1f=Ëé\99\ e\hË(×Ã¥\aU»¶+\9b\96\98r\19\14fÛ÷ð¾ã6¦e\89\8bÙ_hë\91¡'¼wì\1e©\8f\ 4\8eçè\ eÙ²q\9bÊ®u~\92¤y\0v\16gu\99¼ÿ\18§§±G@PÎ\ 5+\8fò\15,í9âý´,qe]K²¾1~Õä¾®Ì\86!¡l³õ'ÊIÞÿ\88a.ÏA(Ò|\f\8b-ÏÏÏ\9d°Íò¤3\12O{W,´eQ\98æx¨ÎÙlÊ\95ÃÿâÊâÀµ¡Ò\96íMºö8Óåj\10öx\12\945\16eý¥m^\85\86\^\8dÉ\8fÔ¬Ns'¤9\10vuÈö_Û¼
++\15%Yyóô\ 4'/\8e\95\93wuÎ?§\1eu\8eã\19«´ÿ¦\17eåm_r\96+KTªËÆ\ eÙö]¶d¤\93\97dý¬S._È\88¦SîNó8¤z\ eú\e9\1e\ 6Z=)_ùà\rË\97¸2\95úËó¹\1c\1dU\e\86ÞäÊ\8cqmèTÒ"/?ÿÃÀ\ûÖÍ\9fú\86\eCìQP(«Íå\8d8¹iàÁ.7D\94úÄÆÂ¬Í\1e?ôâ&W\96õÝ\9a\ e\16\96¸2­¤\9fH<yú§Ó\17Ä FBa^Mb\\8dè¢\8a\,¤\8d\87\f\94.pg3Pô§\91\13ü#C\eð\19\ 5\14},C¥©8¦   \85æÓ\88¢6\r\ 5/ë0\90qHùf"\1dÐ\89Ê\91\911E]ÆÆà\16\rut ÂÀÄöôåP&`\18Kâ,d\1c\ 5F'aB1»\14w©)PÔ¨0TI6\8e\132ètf\rÕTìâb5ÉO"è!L\18b=\81ÿ \1eZ\80¹"V\91\8bêU\8647\14È\eÇ\ 1ÔU\91\81~ID÷\13Òö\98D\1eË\8aÊ\10\12ÓJMcÄ\16±\bd@±¦\8aB¬É\ eZc\19\92\b\11\1ae"\19    \8a46\89Àt"\ 3XÉP\1c³¦;1G\ 6
++\ 6\19\93L"MA©A\9cDB$
++Ã0\f CÔ\fPD©\93\16V\13A\14DR\b\85y_\80S\f%\8c\81h\81ª\14\1e\eÀ\1e        æE\8ah\86¬$\88°xбv& \0p\ 5\85\15\95ã\10½/cpRR«\88"«a{Íb_Ã8ÑèÝÀ\9e3íÎQ¢äI\18ÓÑ\ 6!]þ¥ôÞ\¼,n¡àsÌPI\92òJ4VEîì      Lö\89\8cÓ8sLF\92\9c\86´G\8b58J¥\85@S¡.Å\1cS!\85ÿj)CÔÃ\\ 3gC\11µ\ 3.g\12\eP\1c%BÛXe¸0ì¦\ 3ò.ø5\96 \14½l({\11\1c\93<,¢\12\8aÌ\8e(\98[Ji ÑÐÚ\9c\82ª¥\rá\8eÈ\19cz2ÀÛ®Ùì9DB`f¥jd=ø\ f\f\809\f\7f0ÿA\10\1e\1e
++C\87
++\82¢Ó\ 5\ 5#+0¢àe¬îLdàîpMEñýAÎnÿÊx\7fÜ\14iw\8e\eÅeGôPC#Ø3 ç\1fÒ >\9e90\80&`\rÍ\89wd\1fB´5¤&QG¡ÛÈÅbzÎè\0u¥áàx°Q¢-¯\98\ 3¬7\84¤èþôiÇ\96\80âèÑJ4\ 4\8e\14§ã\90\813\ 6\92\1e\14%R{Ó\83©ÁUf}ñ_\1cÃ\ fÓQãñìP
++\ 3©dvLø\82Ü\b®LÂ\11\82\ fà©\11\8a|\f=\86'\12Âp\rjJ¸+Y]k¥1ÎI\8c\15\ eCi\13\94²\1eJJaÜ\80Kb]ià\ 3\ 6Ã\a\86¾\90ÆNò~\1a4\r9
++ù\9b¡pù\80\9e\10¨\1eÆ*  hÝ\95X/\85OclÂ3D\83\fº!¡Þ\8e\13\10+aÏB\ 3ï\80Æi8Aú\9c\vJJ\10Ã)¡jâÎXA5<\9døO`yáÙÀ8\8a\ e)1å\ ·Ñ\14\9a¯Ð\8f1Y\19\83
++\86tô(L\8a\15\1a%££\a0vr(/\81=w=rs\r\8cêÆr\19 g0 :6ö\,wF\13\8dV\18\900^ºó¨l\e
++ÜY°\18ŵ\16\85
++"Hëh<¨ÚHw~4
++0¤áÑÁã        Gt÷(\8c|pd<cÒí%ÝÙã\18\96°tGã0^»£\ 1ÝYM´¤mÙÿ/h×í̶ûÿÂ\8e\9f·O.ÊÈ\96¼y¯\8b\aÝÞ6L×òçÙ2:óêG÷\ fYãÊÜ\91\99Ø«äò÷}X;ÞåéCO¸²±¹½ÃĦ"áöÄIäö\15\13ʲkò;ú\8ejJË\94«·ØêHçÙï¸oô¦t/\96îU\ 6\95\93U\8dßíæö8\81p{ÍÙ¹}ïg¥ÃÒ½\91\rÍéùø\9c\93Þt{\87 \11~      æÉ\93'O\9e<yòäÉ\93§¯×;X\15Q\96¾Ø¾\9c1é{\ ez;\82]u\10Ùý°²I\12m\8eõt_kT\10º÷\1fØ\95\871öê¡ÝOcß\1f\86Ø\97FØî«\90\120jzÃ!\15öáFá\1ez3\13aç*èu\ 1½G\92!½^\81¸Ð¾  \8b\rØQ&>lû±=Oâ@Óû'ìº%¶á\89¦÷\1fö\85\13nÐÚh        Éî|[J\1e¨uö=Íÿ±wIPMB\89$\88q7Ú%éG;«gH/X¤      \ 5%\0\8c%¤KCª\v\9d\8a¦W\96h\97H\8c\86aé½\8f\88\15ýÚ®(« LHïNE\12\b\9fÿÏ\93'O\9e<yòäÉ\93'O\9e<yúzPËïÿó^¼r]~iQfSî7ù¶ß\94ßc\7f?ÿüoÊç羯\1dÕTÙ?=?N»ïr7ç~Ë\9fóøX÷»»\8c\95û¾v§-ûüï\80w}á÷¼\9e<yòäÉ\93'O\9e<yòäÉ\13QîL¿Pÿ\7f\8b×)ø'Å\84Ù\98\ 5ÿû¿'O\9e<yòäÉ\93'O\9e<yòôÕ'¿ÿ÷äÉ\93'O\9e<yòäÉ\93'O\9eüþß\93'O\9e<yòäÉ\93'O\9e<yòôU \96øÿÅÝ«/Ê/-̬ÊåÁ?èì#v¹óßBQ\98æÜ§óÁ\8a\87t{ÒÆâ« ,Ì<Ñ1{ÿ¤Kûü\ f\1e«YUÝçkmùæ\89(TªÆ\8e@Ë03\8eûýè ¥v¨Ô\80\8fÂÀ\030\86!L\9dËCB\ebiKRS\1f¥@\e4&¥í¤\90\16ì\ 3h°iEÑ\18\fX©AAQ¤\96âp\ 5\f\1a,\90ö÷[{\9f}ïÜï»Ó?\ 4\eÊ^\99ï&sö9û±ÖÚûì}Öã÷=^÷Æ\9añè\91\96\ f`ýÞ\ f\9e\937C\ eþé\18y\ f¶²\7f8ì¬RæM(¸_\8f5¼¿IL·=Òç7âwòw¶þUÉ/ *~Þu\r{n\12\ f`\8d\94]\80ßE×îúÏ\82k¦+.Ý\>\83I\³\aæa\89\9d\7feÉK\90+ÞÁÝ­½7ïyü\80\82\17æ¼é\8aשS§N\9d:uêÔ©S§N?2      >¤ò\8c\94÷\15\9bTGMXKç¢\8e8\8d\9a`s2\89@§*\18¯qQ\e\eq\vî³Lì\8f[\88Pè½\\97:\98º_[¥|ÎÉg&ðO8§fKüÄLxöLL@G\0D\97\89×\18\8d±L¸\8fv    »\17\8cñhA{\ 2d¢      §\b1\10\99Ã?;K<Í\84F­G£¶áó\ry\væc+x¥3\ 1\113\8e\98¼\8fñÿ:\12å¶`\91j\f\ fÝ\89íYeíb\98¦óÏÿ+>»f\ 2Þî\80Ñ5K\87³í{Ö=ô\96r^\ eKÆ#'¸ÛÄ\0¿à\92\rß+çvkÇ£Û\e\1e÷\86½\ao/çò\8cë«\97\ fgùß\7fó+ï\90s°qq<ºP°¶OÃoí]×\9f\9d÷ãÑöñôï\v{Z>Â×ï}é;äzÖ¨§`Ê\13Çý\8aÙußçu\97]\18W<râ´¿öÙ·l\92ï\ eÐ\85ñè\96\86µ>sÇ!\9f\11\CmóxtÕ²¡þµ{¯\92o\ eÉyÜ\7fùò¹ëg~U®GÞ\7f骡\9esO|Õçx=+\8b~\9e°|ø\ eòþß[û¤\×Î\8d\93ûOg=Oßp¢\7\1eüÙÑî\7fãÙ\eöÊuÇ~~\úy\13å³ù ÏËu\9fôÒÑÛV\fí¾ú\86³î)üW¶`\9b\7fwÙPöôMCY¬\18\8b\aK}\17\92W\87o+Ø\8c\82yxY{î/\ e\8b¥ÌÆòÝäSmü\93Ø\8cï\93ç¦c3º\15Ãw\9a\1d_x×Q%G¤ªy ¯\91ç¦ç\8f¼jù ÿ§ßðöûKYp¥/ïi:03»öF)sº~Ã9Tôà*ünÞxZ\19\83\8coɪ¡NõGgþ[ù\96\95MáÙM­½ß~íÖ³hU\1d\9f\8cáfü¶ßs\9b/e!TÌJÁ\83ÿ\10ÇqÌy\8f\96\ 1Rv±Ôù
++~\87úé·}³\94å\Ú+y5\89=¹åÆw~[ÊRÁ'^:\9aY6|3:ç\91Uï-e¡bk®^±øw¯\93W\ ec¸ïc3_\93¹ª¼/¼ÞÝôë¤Ë6\97\9c\9b\84[\91²;¥ìTü~S\9fó\98\94\11,YʶH{/ã\1c}|ã1µÌ\94opÇ7\1d¼ôÀ]_.e9\15¾\Òtâ\15G\9e[Ú³Æ\96ç\9eY9Èï¬Ù\1d\87Õ²\úr×xñowO-\eÆpÏ\1f\9c^¾Ï¹è\v¯gV\fun\9d]uxY§°\8cKÙÕM¯ßý\86]_*e±Êv÷Òa|g=ö²\9f¬\18 u\1e]¸b\90Ñ$>è\9aå\83\8cÎØó\81£kY(cxi[3·ÍÎ|¤|GÄ\8a]twé £'nþ\8dÒ\97\10k\9dK\1a\1eé»\8fÜVÚ\8bªösÜÖÛï\7fhÛÃåû£vEç\vn*õì Õ3\ fJY6u\fÛ\97Ï}·üÛÃkY,}¹º­\81\vó©.\1d\1d½rèË\87?¹éÑRæb\19ßÖåsß;7\1dV¾i\1aÑÁN\9d\16ìÅ\16îW\b:O¬å`\ 4S^`Å\v¤µõA{¦?J¼*°ÏÞ;o\88%\8e¥#2GRÆÆ\89Øà\89HôÁb»Ddh\9d\9e»}^Ù'a«G\b\85í\9au|\1aµâoH.¡u¬ðx§8\82Y\13ÁÙgîö\98Ä        ûC\ 1º÷ؽ9\ 2]\v\ 4\95FAò\92W
++ÿåz;\13H\1aïrÁ1Ç\90ÑBò\18¥\9f\87'-}A\e\915\80}\99/j\8eÓÄ\14$\9f\15X\85w\8aÂ\94&~{À8°7%\90;\11Þ±A\8dÁ£S\84³"#4ö2Dw/\Р »AìI    ·\1eÐ\e6\94\923\8epZ\94\8aÅKÜcW\87\8eN%Ô\1e\14áÍÁJ\ e\1doV\a\ 6B´[Tã\ 2Z\0GRô¬){¦À\ 2kP?ö&\v°Ð\eV6
++Ý<|°%óð°\9f\8f¼W\14¶`s\13Æ\9e\ 1ÿ+\839\90°\8f\91ã³zÀê¶¥¿>º\88ê²à\88\83×\ e#ÖT#H&çáÜ\91¡aÁùúÿ\96w,P#\8cÀ\85\17\99j\9e\ep¤0Ø\81@®&ùáÞ\b"${\0§¢ðÂRO17\96\ e\9fËm&\bhØásr@\86\1a\8f\81\15\19û-\ f\1d\15Ö¡MÂ\9a\11à\fªCTw9- ßà)ÔÏ\ 5<
++\ eA\8dQh¦\9e\19\84'.@%\ 2Þ\94>Ô±¢\16¯æa\9f£yv<\10½M»¹¹µ8®\19\94\80\1dYâÔ\8cÙeÔ\ 4\16%\958q¡ÅÄP³<ë@\9dÑ\83ÈÝ\86$PÃ+43\v\9bIÄtS\98÷Fàã£\83ð¡\17P\1fN~4Ç%\ 4õ%Ë\85\ 3\92åJ\ 3^B¯-Áßp\e\81ìC\0s3\17$H\9d³\85Ðo\90\89a\9b>\195¬mÐ=®c\9a\88íè\r_È<+\12îÍsQp¢;\90\1eñã¼,\ e\98ÄX¼0ýyàó\16ÂÊ\84¬Ç¸3aîx.\f2\0.X\9aªOØ;ÈÇPÕ0\9dÁzü?Hö9Lp0\1aªàc"$\à\99\14ÒÂ3\14¿ç\82\18©Õ9¡\r\9c\8a\1e¨4\87Ë\97!_\9e\17q(M\82\17o\12\96\84\95D9\f\18Uc¡ò\18bàÉ\96bÐe&\83\83\98s8µråà\99\18\r¢3\9a»\ 1\8c\ 5\8beì#à\1f\17C\83¡cÚEÑwM¾\r¸÷\8a#  \92\82Ïc©U\8e\8b%Ô+0\19_$\ 6\1f\96H(\80s¼B±c\88
++í°W8\8báå\ 1ÞPݰ ¡÷P`Ù°\fz\87\89\rÅ\82\86\81Ç\10\9cò¥o\9cj\9c\14P4g)\93dk\9f¡Üh\ 5Maf$.®ä9'"\14\15µgª\8f¥à¹p\82I\9a/1\1eæ¡\ f\90\ 3×øÈ,\81\96K\16êÂÊ\e\ 4­\90³\ fL\8c\ 4HTT\0\9eÉÿÐ\16ÎF¸ì¸\x\9eN2\85\93E\87ÐK.¹\18"_§<aiÉ)\88\ 3>êɲ0ç\101=\84Ý\81+\vß2Ô\95Ä׫¼ý¸
++xnŹ vÿÿN\9d:uêÔ©S§N\9d:uêÔéÅ@söÿÝ[W=¸°t<º¼ùóïëÿ?Ó®\1fþëG>Ql\94\99öö\95íú»Ö?[ìFZ\8fG\974\9bßë÷Þv\µ'åqÅû\9b´çomõ\1cõÃ\9fÿ\81Øó5¯_ºH|Áv©çOð[÷ä\9bî\13{¾3èÏ\ e±áÑnv×¶5â\17À¯Y¸¿Å\16ìk·/68Ú\ 3×>óÈ.¹\9ecZ:zªÙù'mãïivÂÓþræ¡\82\91hr±=^Ób\ 3\13KL\ 1}\13Îÿ\96QÕÆ]mêÏ4\eÛÌìúk\8b\8dÛØb·»´Ù]o»î¬»kYÅH<´Ùkw>þ3\9f(eü\92+öÌ\95ÃsêºÓ¿PdiM±=\16;/\e=çÁón¨e5\ ecKã\95}]}.ªj\ 3.~\ eôOØ\98N\7f ÚÆMí§´7Ýn®¤Lü\ 2î¿uE)K¡Ø3×K{\aã·ëá#\8f©vójÏ<¸ÙH'íæ[\9a\8cn½±Úði\1f\91²[\9a\9d³Ë\8aÿ\ 2¿\ 4\92¦#î%[¿QìØ®\8eáÉ6öI\e÷õò\1cÿl{è­\7f,eté\91²\99y6îõ·\962Wå§\9a¾Ü{Ë\96oìkÇ.6uÚ\87\ f9jÇ\17\8b]ÙVß\86\7fÚ\8f=zgÓ³I\9b³Z5\8cïwn>³´\17\ 6\1d¼[ê|\ 3ËVn.¶ãèëø\9e\99\17órÜ\8dÕæ¬\8aÜ75ûð×nÜòÍZæ«üVÌ=÷7W\96²\1c\v_®i<Ûò­7½¦Ø£\a\7f\90c¥½évìã[\1cÒ'>ðæGêúQc\81V·µâw\ f8a¶Ø£Á\98¾¸wêÔ©S§\1f\ 3\89\ f\ 1½\14¼sÎ\1a\93\1c½>è9\12µõÉf\1an±Ç\f.ºàtöt8°\8a\1e\17´îZ\1:à\19íq\91\1eU\99~¿Î¤@ï?K3¯Ó´|ã\9a
++\1e{\8d\18p)z-\16d¥t¢­Ñ:¯p7þ«2¶M*Z4\8bM²ÇEì@"­ÀÆ\ 5ÝüK²¸ ëä\ 2= tµm\ez:Ó\90«´ó)ÌÙQ³§M3\8b\93B¢Å<U\9f\14\9d±Ù¢\r<Òæ\1d-\1d@¬ø2'\15\95\ eè2:\fÎ([ÛÐØc\8a?\ 5FBCªÍ´ÙÒ\99SÕ:-:\9b\8bÏ\ 5\ 1ÙB\fé\7fñ#\10\a\9bàéB\ 4¦¤ä½\a\8b\82§;PÖ.áî Þ6àV2>Óg\b\12HÙÖqÓ\13B\87\15±KgE#«\1dü/T@Õ1ûäc\1aü>\ 2\a\87ÁÓB\e\ 5\11®ö\9fìóvðO*öf\13\aßì\17¢Ï\83ñ
++íc\8f¨©Â®ø\15\8b\ f\93ó¸1ÇA¶xZü@\94Çf3R\8d\94è\8e³t ¥\7f  MÕ\99ÝÌÎ\137\ fUB=è>\8bAAò\10\1aMÚ`\1fzC\14¾\9ciô§k\13\18\a.\e\8c\8a\18\92¡T,\rß\98:\98^\10>\9a\8eÐøä"ö\98t½Ð&ÏÉ¡ú\1d\81\97Pcq[ 5~Éþ|\ 5°Ù\ e2/ÈcÈ\íÇ·\ 1O\8a\9cçû8`\83\9cè]¥«n-ôÝ_\18·À\1fÄåq\ 4 \8fA¤3\14µÏÑ\9bÍ\12\90<¤t²¸\97a5\80*+h\r¤\1fè\7f\910e\9cñè$X\0&é}|uºý¿S§N\9d:uêÔ©S§N\9d:uzQÐ\9cýÿÒ\ fÿâ/-,=`tU³åí\eÿ¯Úõ\r{O9®Æÿëñhw³1ï\eç\7fÍ"vþ=ÍÞ¾áɳ%Î;DÚóK\8c\87\1f:ãç$\1e>ÆèÆ5'àd|þ\8efûý©\87\ f\15{~ÊÊ\8fGWK?\17Æá/\1dÝÛlèÛì\19ÿ^ìù±Æf\8fe\f\1fÄïízfO)K¹ØK¿"í\1c\8bß%\e«\8dÙ:Uì\97GK\9dÓíù\97·ØóÉxö§\9a\8d\9eÿ@³\aOƬ?Ól©;¿uÜO\14;¹Wóãà§ÛåoÚ\8f]þú&¿I\ez±?S&Oß°³Æ\90[Wúò©\16ÏþÃÕ§\16{0\19³d.\aât[øîU\83ü7?tñÆ\12\vîSiϵöþô\93;J{\90uáË-«\86±Oæq\¿\9fXð;\e¯'cÁ\1fkºrñ­§<<ØÉK{\9fjq÷[¾~ò`ÓÎÅþ|]ó¹8ñ¡\7f¾±Ø¦UåÙLãËd\1cõ½\8bæ\86\9cïÇñ\96o¾üÚ2\8fÊwóN\9d:uêÔ©S§ç\83ÄþÏØr\9aF±_¶~ß|\ 6̸ñ<Ù&§åQà\16Í\9aÌ\14\ 6
++»Q¹\16U\ e\12¿\1eQ¿JØü1ýA½?D\9f§Å¶KR\ 4\9d|Íù\80áY\17R\96ü\ eÙ±WQÓ`m,s_DÅt\19´[« i=lÄP3J\95Q\12-\8eý¶Å¾Ì£Wh\8b\91ÕÁÐíB9´a\19m\8dblô\15\13\9e$ìk%m\85\ 5ËL\1dI3C\13¸\97\9dgV\aG«¿R¨Þ¦\96k¡ä\9f\18ìé/H\9f\ 1\1c=Ò~ò%\80\ 3fZî\8bb37J¬êNò¸,Y\98\ f¯¤\8cñ\fù\87ô¨F%×\ 4\18\12Ñ!¦1Á\98Á~Z÷=\ e\8bô?`²\ 1\88\9c\953½Oèà\81\91F¨*ä«^\80¾<CÎ\94©9\09ÿÐ\95Àì\84FÍùÞtû\7f§N\9d:uêÔ©S§N\9d:uêôÿ\9fúù¿S§N\9d:uêÔ©S§N\9d:uz1Ð\9cÿÿ\ 3\17üà\8d\vKÇ£íâ\87ü\11ü\ eûÁºã\8b\9f¿vãÑW\ 4§\8b9Å6<»áÙ\9a\17\r×o\97ëô\93ÞðÙ\ 3\1f¨~Ùi<º¥áù]¶é5\9f«¾Îj<º¾aPí\e/°½ùËï\8bÿ÷]©\87¾Ýë÷:ÉEç¼²ãÑ\11âKM\»+¿óòÛåzrh÷:ÉOw\ 5~'Ü¿ú¿$¾ \10Wo½ø¹\1f\8bß\9aO¿ê.\89\17Ð\19×\8fnXZ\87\1d\7f\97¼\80\1aý¼©µ»v¯Ú&×\83ÂýkäûÉd¾ÀcÇC\7f&qö>Ür§]ô\v\17\94éêóþäxàÇd\Âu\r\82Ùó®­y\ 6+6Ú\85û\89K(\98\7f\8bàìI\19;ôÃ\95»JîB\ekÙ«\85wïÅï+\1f=ù?j.A_Ê
++FÝ"ñ\ 5Rçôü}\ f¶¼\7fçÝ}êGJ|\81©±\15\1ctê¢W\9e]°ô²@\95°ÎUÃs\93¸wW\8bìgð;kϯ¼¤æï«yêî\95¾0&có£öú\9a£¯æ<¼Wê|+~{oØþH-sóó!R\ e§\1d1óõ\12\97 «üînr\98įÛÔüö'ã\19\1ctk«?ÿñZVóD^Òâ.n^rî=¥lÀ\93{JʦcâÝÞò\fn\9d}ä¯K\99õ¥\9f··9tÑ?Î|©æ\19T%\9eÁµX\87I,½Ë\9a\1c¶}rk\8d»H\15Óðv\19ûô¸\8b#ä9ÆküYªñ!tÎ\92²\9dK\aù\9dqßGu\8d»\bEî'/\eÚ\9bÌOøÌx\98+\93\98xO¶±o\9bý×\12ç\11M\8d©9ºÕ9\89\97wiëËd,GÉÛ8=?áî&÷I,½\9b\9a^ÿê}÷¿¾¬oÊ\97¾\9cÜbU\16ÆytêôB¦ÿ\ 3¬<¶\19\14î¦k¯÷â»\8b§=S\8c\e\16 \ 1·\båIø1\8f׫ªxnóý\83\17Å~z\1epç43¦1±\14\93<UßÞi¾Ëxá\ 5"\17Z»d_\9fëê\a<-\aÕ|\7f\ fF#\b\80ÁÒÃ\98ÀÕtàMÄ\bL)+.\93t'u&Zz\99Ò\83[¡>\ 1c´¨\Àñ\88I\r¾T\7fÑiy²\16ÃÌ[4GØ\vͧ\16U\vÒ\1f¡ú4Ó\80\b\9ek¢ÛA\989A\r\bÂHôBÍ|tLÿeÈ
++(\ 4\ 1¹\fq¿©\9fA\8bo9QÙ,qͼÎI'K\9c4AûÊ\8ej\ 6iiì+#%\vùA\b%O\9c
++\9an×N û\b\1c.;\15\8c\8a¸hTu:^ã½O¶£      G`Az8\vð3vÂ\ e\12µt9×Ò7æZ\96Äz(IR\97ç\109\13,¡Í      °\96\14\89iFÈ3\82\ 1Så¸/vâ4\1fmL\v+>÷A\81\13ECIÀÆ\0%Àü\10 JO\ 4<'ðuÖÒ}=AôF\11V-hê.ú,\91\ 5\10\95\ f(WÐ\ eÏ,r\86p\8câto$Ó\9ffò¹\84%$Z.-ÌØG\7f\84ó6¬\14\89\8b
++&\85#6"\83\8c       \93Ç\8d\ 6=ÖkÞ7\8a\bÃà\82Fç|0Cr¹\ 5,]%o\9aÃ\14\0×\98\9031D\85ý«\12ÿy\ayE\81 µÌ_§\ 4AÏ&h\16\17ä3\84,\12ýù\9d÷\9a@z\9c\85Äî\8b\83ß?\94²è\19Aç]\80l\8a¯<§\95@9B±ýÜ\1a\ 1\ 5O\f:\0ÿ#\81\1c\9bï}æ4\88%JCÍ»ÿ9ÀJEï<\11\8eSL\9e\vüÏ\17â¿þÈ~ùSð(-Ûg\88/çMÉÉǵ\84\80\88\14(ÞM\11o N!H\83ûÿÄÇ-#PD\81¸NY(\10´4b     2\f\9eàß\80\9e\95\9c\8d\19K~LDªe\8e¿@콤°V\18Æ£0Ê\ 3Ê\vöâx¤0-Uy;`S\19   à\17+À-\96\ fËW\85\ 6\ f\19ÅÁy\1f¡0
++s\9d¯">&:\ 1~
++\8a"æKbæLü%»¸6\98\8aì\b9@ÐP\ 4¬?Ð\ 3p$\12¦\15S\ 1ïI\95\8b\b\13\ 5\1205ø\1ef:C¼\ fÐ\1dËõ\ fo6\86\9dÿ7>ñùe\93çÿ\8f¯\9av®ÆùáÀÅÏ\9b\17\1fâwî·ßÿw%f]Õxöõ-þz!æt§N\9d:uêÔ©S§N\9d:uê´È·ç\1f÷¹Ü\1açòsð\r#e\9b´\8d\81\9fÌ\9dÓ*ñë\96\8e\1cù-ÒókF\8ex\8cßlÙ(³B¤Ì¯\9b\99ù\13\92´\82\7f\8eI\16øqÛ\13\1e\ 3-eÖ rÖ\92ë\82CµÖêl\r¡É\b\97\91\12êCóü¼×ýÿ;uêÔ©S§N\9d:uêÔ©S§\17\ 5ÍÙÿ\ fúó»\8fXX:\1e­o8ô\eö^ôËÅ\1fÝøqÅ>¿\12¿;¿üê'\8aïmpãÑöæ\a»î3w¼µØ÷CÆõf÷?áØ\9f-~þÚ\98\99\7f
++~WÌ®û¾ø\17d\17Æ£\97¶|þ+ÞtÈ¿ðºW\8c#xªùÎï<uí÷亷q<:´Ý?sÇ!\9f\11?\7fmÑnj¹à_·÷·$^ x£Ç£\8b[=kî_÷l\89\vÈiÀ5\10\1c\81w¼æÓ\82;\90\95B=Â\87c\97,\8c\17¸dùpÿ¹'¾ês%^\808\b\97ÉuúǯØ|ÐçåºO¸\9e¤ÝÉx\81MÍ¿}çWß\9d\v\9f\83*þÃ[[þüóg\97ÚZVq\ 5^ràðÜÙ\ f\9c²»Ä\ 4(]üÆ·´ç.\98ýµ+JÙàW½?\1f\8dC[^úI\\81\82§0Ý·_É\98§ã\ 3\1c/urð']¶¹\96ÅÚÏ\13\1aON{|ã1Å\7fß\9bâ\8f]ð$¦ûèïl:uÆ\15»î+e\83\9fúêýà
++|·ù©Oâ
++¸æ3\7fÈQ;¾XüÔmõo¿°ñsÛìñ\7f_üÔu*}Im|\93Ø\ 1G4\8c\8b\93\1e}׸Ì\95Tùyy\9b\7fé\15\1f+¾èÎVùI_nÀïm_¿íæR\16EF\9d:uêÔ©S§\1f\ fU¿é!ïü\8fì\v^qÁ5Ã\a°\87R\19OYg\82×Ì\fÏ@\rFp¤\98#v¬VÑí\9f\ eÚØp\88ë|ñÎÖ)1\82\0[0ã\83²\8a\8c\98 Ê8öIÆ0\8f½gÄ\81e\8ev\95P{P\8a\91   Z3$\87þÃÆ3Ï¿µ\16Õ¸ \99\9aÝ¥èYSö:£\9f\99îÐJYÁ,7V\ fq4ÞÑ\15Ýó!ºxë ^ãt¾W\f\ 5ÊÒP\ e\ 4z\17\98tì±é\ 3\8e\10Ñ\8aõâeNwvo\r\17ÅY×*\82×\91µ`ãMïf\r~¨ ±£5\9e\19ø}J
++\ 3Wd\v*ã6\18\8c@-Ò\a\ eAã(\12¼\8fÌ\95.á£\86.óè¶\v¨Ü\98H   )&\93O\8aÇ\13\v\9c\19¼Ä\8cøh\11\rdg\16\8b\87¡·>a\10\bc¯Ý\10+á½&\1f\18\0Tã%\ 2\ 3oh!\ 6\9f2#w¢®q\14Ä\r\90°\84¨\ 6ì\83çÚ\97½b7p»\ fá\ 5\9a\94-*w¹Ä\17PÕJ¬BLa±üû\10\81\ e\92¿?2&)3¡\7f`\84  \9dÎK¿3øfÀ\fò×3\ 4%@k\93µ90\82\8afr\16\19\9d\ 2  xª\rÎr\18Q\14¬\87\1c$HÃ\ 4\8cS;¢\16 \v.©ÄÐ\9bà\19­\12¨\9c\8añ\13\96E÷0\1fhÐw`\13ZÌ4ìg-!g\86A .ü\ f\1flWUÝñÜ)67\90\0mEÀ¦\b!\b!\80û÷\8f\16\90vbK\9d\10H\80\18CB°¤%BÂ\ 3&C\19*Sgp,V\ 6é¨\1d\94\19\99
++\b\13°Lå7v\8aCf¤\ 5\ 4ä\87\142!}\ 1\84¨\ 4i2&N×w¯}ö}y÷½ô\1f\83JÖw¸@Î>gÿ:ûÜ\9c}×Z\9f\15\901\80\ 6\1e»<\10tÿèm\9d\9e\ e\84\18\89±¹!4ZE¤\10uÔÛz¯Çå\92 ç\a1\12¾äý\1a\13·e²\r®ÜGê~=&ö\7f\91H$\12\89D"\91H$\12\89Dï \ 6öÿ÷Ü?åüñ¥ýÊ,ÿ\8e\tô\9bÌkË¡ß;|püÒãv²\9d_ë~ïÔfW\7flÁÜ\9f\97ã6ø~ï\86r|\ 2\9e\9bÎÙ~ÔÛÅþ¯uì÷îo<´Û\1f=´Øá\9dñ¶ß»»\9dÿõ5l·÷ÁÓù×Nbÿ\9fÙ\18aÇoýËçÊñhT¿wS9\1f\8dç|`k±óÇèú½µ-_ûú-³¶\17;\7f\ et>sÖÆÛó»Üö¨ç\9eo-\1de>b\blÛevâ\97é³P¯ÞÄvûTYwªÙ}W>qé\1cæ't\9c±ÛÚ\ýì¤\85ÏsY¨\³;\9aÍûÁ\9bV<ÎL>Síöw4vá\8bÿºðµ]y}\83¼÷ß\9cµ¢°à´7\81mì_j|²\91\97G\ eರ\v\97\ eã[{ǹ<¾\14\13_·¬ù\1e\f\9e-e௹}\96½\\99|\95\ fxÛþÝ=9wôº\ fW{\7fàöÖ\97²¿£Ï\19O/ª,¿\¹{ó\9b\8aÑãîc{¿³\ç\19Ó»9;óî5Op\99×u|m-íØwÍKì\v\90«\ f\ 1ÛôO¢ÏU3ÎÞÀ¶y\9f¸/óÚÚY:zúרþn*?ïÔé\83²ot\f¹È¾\ eÛ¦wó2Ì\97;¯=\1fgÍZÄó\82 ¡)\ 3î\1eü\ 4NÛxÏ:~¦Tàû~c\9b³\ 5£³k\99.~\ 2"\91H$\12\89D¿\f\8d±wZ£\82±Á¸ J>r\ f÷\88\87ô\8e\8f\10a®tÚ)zU.\bP\eMBl´U0°[\eÁ«£\8a\aâO[X\91\v\81¸\83Ç\0 \886(\13mH>1\96Ó\ 2\v\bÈ¡\ 3õÒ{\1dcv\9ej\8a.EXP©z\9bvÇÞô!ÁsBÇÁ\98è-Ò \96<vçX\17\ 2à\82\89:\95\açå\ 4\8bl\82\eA\88®ØÝ+7\13\8d;\15Ñ\90¥×êèêqï¸~*\81½\9bf\83Ú©\1cBgò\ 4ì<êD´\88H\8f)Åâo ¼þuô!±\89ÚI\85£        ?\v\9f«ÿCõ9Hð\vÁv¡Î-UcÚýH\81*t\0Ù9ø\97D\\Ö\1dü.¨%\80:i>\93\ 3üÿ\81ö\10t\15¢ð\1d<=l\99ª\ 4ÿ\1cú\13½G\eðjéx\80C\82Ñe±\81®G{T«è\14\ fJ¢)>\eô_Z9\187Ý7\9a¥`\14\b\ 4`\83Rë4|Ú\ 4uìÅ\89X\85\80ÚÒ\r*ÔJ \e½w\91ö°è?u=ÁÇ\80\96/Í>í³03ÔI\aC~åÁjº²0\ e\87"Y×ñ"ñL\80'i\15¯+\ 3Ög¦j\\0¥Uw~\r´(\94¦Õ\89½\83ØÿE"\91H$\12\89D"\91H$z÷Köÿ"\91H$\12\89D"\91H$\12í\r\1aøÿÿãÕ\9b\86~\v\98Ú»¿±à®;æ\ f?Yüä\93\99Ò¯þäãùyc9o\97Î\1cÙ̾ëºú\84ohu}â\8d¹7°/¹­ì¸×\e#m\98\ 1·¤ù®\ fûo3Wp\19}\16n\9e÷7ìkí\950ÒD"\91H$\12\89D"\91H´'Tüí½qÆ;ßùé×\18\ emrt@øE\93\82÷)!,Cå\80\98\96\18²Ê\19á\17\80êGÀürÖ\1epDe¬³\85{\bÊ¡Ã!\ 4ÉD§µÍ!)\r¦`0 7Ò\95»aJº\14³1ÔÈD|ʱûÿ¨?»sü¸ú½ée\7f=\1c·?`¯ï\1a\9f¿£ÅZï\1a\87ÿÞ\16¿|ìVµ¼ÄÏ\a\15§õ®i¿\17üôÚ¿x\99ãç½ãøë\99-¶þ¯ïZαçÆ+.cnú"ú\ü\9aQ5F¾2ñ¿R®û0}\16ß¾âU\8e\83×5þú\92ö»Å\95'¯üa\8du¯LüM3ºß'\86ãà7´Xð5£\8f~\8byùÑqìùÌÆ\1e°Ç/}\82\99øªþvñãVç0Kÿ¸rÝ\9dô9ïÉ\a=\97\85\1a\aÿJé'bùÏúÍ36WÎ~æßJ\9em÷ä\99{Wÿ\80YúÞs_®iý\1c\8e­ß§±í\87cäg7\1eÂÁG_ÀL|\0\føõ\7f\84¾¼±ì_\98\97¯4Ç¥ok\9cý\15¯ÿöo0/?Õßt64\96ÂW\1e\9a÷*Ǭ»È¿\ 5\1d2&\9e}Þ¬\9a\ f"I<»H$\12\89D"\91h/Ù?\968w\17\0\7fÇ>/&lÔ\ 2v\80ô\8en\81Ï·\91v^Ù§ì\81ϧý¥\ 3Ó #«=\b\vÈ\0@;M\90\15\fm+iOÙê\1d\eO¿\v×¾ÆÛ\8fg6´XûàbÙ[\1a\938\17\81  Ô\85@\9b"Dß\9b\98\9azD;Z\10\16\fõ\866\96H9@\15Q\9fB\88\9azR\0üÔ¹\f\8a¿IØüª@;Q\1f\83²±äË -«É\9aêHÈ´\90\97¨[Ø3»\0Þ¿ÒA!\11\ 1vÈÑ¥ \ 3u\ e©\ eÀ$\88 \19Ðæ7$Ú?¡M`ñy^­§-3\98ùÈ·\91\82º_G6     \85\1d´)\80±  x\v\86\1c[\8fD\1e4á \0 P\1f\99*RÉ\87\80»£KÖ\8bhÀR b\87<\0!g*òåxÍ\rÁ¬\ 6\9a0Ú¢Óüh\97éDÚñ{î\ f\r\9aæ%¥.\9f@ +52&heKÖ\8c¤\9cM\ 1ì\7f\9a1\92Ë\98pEÿRÑ{:S¹Ò|\8aeßO\13\8a[Cýö%ÿ\80Ñ6\ 2F\91\8dF\16\ eºg^üÿE"\91H$\12\89D"\91H$Ú+4°ÿoÿû«þk|éÔÊ·\87\9dö3s7.`ûn ã¯4Æùµ\aºÓ\8býÖ¸)ýÞÃå8\8cÐG\8g\eÛɵí÷nn¼û¹ßy\84ÏW!\8fåü_ýÑ÷?Rë\89ýêó\ fûþ\11;\17Ì+\9c\7fmâØ|\ 1#\7fõ¡\9f\94ãÆ\9a\94Ò.ìÐ'¼uþóÌù·¦ãÉ_B\9fÅG.ÿ>3øUåÉ?Õ|\ 1.ûà\bû\1eh]sÄ\1fØú»ê¹+3\97\ 5Åe©´\ 5[ù?üþ\8aÑZ\16ÙÆ¾£ÍË0×\9fó\ 1`¬3g\9fóR\8d\8d°\çY\8d\v\7fN<\8f}\16¬¯ý\9c·\9b|\0©ÅM¬Úò¾\a*óßr_®/×M\9c\ fàá1þ\fólõ=Pl\9b\9f¾\e¿\84·Z\9dÃ~  ëÛ\18\96¬»\90}+\92ªlûù»\89ýxªÍÙp\1e\ 1ׯ>ì³ðíæwqÎu\17=ÃeI3\9fÿ¶6/go\û\aìÏàë½=®­¹;§\ð$\97¥ÀíÍnù\ e¾úÐJö\83p>r\9d\97´¾\öo«\9fæ²Xó\ 1¼Þ\9e\93\17\1eÍÏ\89Õìçñíæ¯qÐ\9c\95ß«e\96Ë>ÝêüØÕ\17ÿw)\vIó=ZUæe¢Ø\96i½Õcr\13\8cÏ?°¡­Ýáü\ 3gMïîÃG7m\99Ê~\17Î\eù"\14\89D"\91Hôÿ¨ðó\95f\1e9½çh¯BÔ@ös\99\ eªud\eªÛÓ~Ð&*oL¦\17æ)\93r×é\82\8a\ 1¦Y3eR\96ÿD¹ìµÓ©Úh\93\9fÀ^>Äå\8f\1e\978m\12:ë|PÍ\16o\91d\9ez\8bÌö°½{ú\ fµçmN\85ß>\19ßÞdï5 û:G\eºþ\87bÛåÜ\ 51Ò%H£\10\9cõNù<i\9e\83  mÁ¿¦ö}z\ 5wºÜs\ 5 >\r\9c\16\ e­\19ºC´Ú\14¸þ.á^FZD´ü\0î§úèNb%:Z_´Æ\90\84ÂÓ¤P»N¹âGO\ 5©8ZÐHÁѧ\8e\ 6«°iõÅ\97ÞÐ\ 4g\86éÓz\rþöTkD\8e\vj\8aê¤Nû\88\91\8eÀed>Àj§¹¡;M\ 54þl\91y!Ã\83ßÓLÁo¡df \ 1ä\9a\9fÂ`\8a\12\8d\18¾\a\95ç\8fõZü\1ab[\v4\ fÈ­`,\r\8eæ\97º2ÈgAÛe\8fû'ü\7f\91H$\12\89D"\91H$\12\89ö\16\rìÿ×Ì}Þ\8d/í÷>ÝìíG.:úM¶ÛæÐ\1f\93û}W{þ\19Í&»kü\7fj±àë·ÌÚ\8eãT\8d\9aÖ»¾Ô3±}Þµ\18ñ\8bG§Ùjg¯1þ\ fïßµ?lg\9fÝâÜ\87íåÏ\96²Åô9yÎâ-\1c\1fok^úKÚX\9füìÒ\1fUû®g{«j¾\ 2?X·d3ÛTµg\eî\92\85ôY±IßVóÄ\enïðIó¶w¬D\8cá\8f\9fyþCl\8bUå7L\91H$\12\89D"\91H$z§UmÆãý\e\8a\1dÙ&E;®\0;³Õ\ 6\99ê«=\9a\99\ 2!\19g\8d\81ÁßÂ\9e\ e³}26\ 4°é\9cÕ9\80g`C¦cÎh¤²WZ©¨à4aM°0\81Ç\f7\8eláK«©\16ç\1cÕAÕÂß\846\9c*LêÇa\95¢\13\81M ö¼³Ád\1db\ eFyº>Zïi_\1a\93\86\ f\89E4¾\86}_§\b\8a_\ 4K.\15s?\8d[\19ê¤65N?\84àá\8bBÛT\1d\8bgJ9î£O8dáüQ}N&òÙ0\99\1aät>\1c>$j\9bý¤ßi?\ 6±ÿ\8bD"\91H$\12\89D"\91Hôî\97ìÿE"\91H$\12\89D"\91H$Ú\e4ðÿÿîQ7-\e_:µ÷Tó_\1fËÿë÷Vî\87ã·ÒgÖÛsOå¼}Úõ{oíÛ\9d\7fÂÖÅ\1fáãV÷{w\17\83è3rÅ        ?©Çm¿7å\80Áù\87­¬ñ\ 5¹ß{ªÔ\838\82ù§\1cúHÍ\ fgú½~9\8ex\81/¼ñ;\ f\97¼\83É¥~ïS\85y6Ì\ 5d\7f\7f\1cÿú\9a¹;Ëñàc¿w×ô®Ýã·^^¸rÁ\eêç\81Ó»~>ºü\98\9fâ8¨\rýÊ
++D\7fÞó\89ÃJ¾Ã\98\95ê÷^oÌ»±q\rý\9ekç_pÚï~·ä;,ó°­ô\7f)}\8eýÙ-§\95ãÆÛi½³öëú9\9c\añ\95\16;1Ì)|¶qà.\1e}ìh.³\8ec\168ßß\97é³P¯ÞÄe)süÄ)mÞGF×|\8ds+\9a\9aÓïÆé\83²\91{¹Ìe®sÀw¼tæÈæÊ0¬¬>\8e  YH\9f\95Oï8\99Ë\9cãöf·Ø\8aí3.ÚÈe±\96]?cÐÞ\8föã²Tã.^ØM¾Fæ\ 6~\1esüÃÏÝάI\15ø:æA\9eK\9fÿ½ë\827º|\8dÜÏcJÙÄ\fÃó\1a\eð¾uË\9eäõ¨\ 3ÏË\vûvkã²÷\9fÏ\8cƬ+3ñÑݰ\b¯mã[1ºrVÍ­\98ùº/\95²\89s+>>\86)øð}\æê\18nØ¿ëËò\87\96UNa×Þý-þe\987xG[\97W\9et\113\f}T<\9fo5Fã9\9bþöÄ\9a˱r\11o\9aÞÕùæ\9d\9fäëh>9NçÄÖÏå£ÿyd)\8b¦ÆÛ\1cØ8\8cg¾zi\9fËRÍ\7fywûnY:ú\91u5¦F1§ð\8a\13³\ fïn\fÃ%¯ýÉa¥,w±?w\8d©ó6îK6\91Ë^hß\11Ï\1e¼ôu.³\9eÇ0½\8daÁèúop\9c\8eªã[5£\eÃi\eï©1<ª®\89}Ú|>wã\95/q\99õ¼\96æµï¼³¯\9bÿ\1a³M£Vò\97\8eH$ú\15\12üPéÍ Òw³3ô\17\10\88\\ 1°.¥¢1\8aþ\ 6\8cô¶¦RÔQ¹àé\8b\11\90Y\8b^Ö"ý]F_øÆy­\9dÏð¢¥W\1dï5hb\8eÞªb¤o½\10\ 2<\88qYa¨íQ\1e\¶¡ä7S*%\1f,u)\96¬Y\95\19ÆþÁt½       9\18c½¢"\a\aYO\aT6\86ºV\86D\ 3r\ eG\80\99¦\82^\7f\91\1aÓô\86YRi\aôÓÇ`Krã        ryáµD!nÖi\f\ 6|¹l\8dRÞ8ÐÙ\ 2õM»èc\99b`Õ\1c\ 2ëe\93\86¿sÉ\ 6§r¤W\9fhT ssñbvt\8f\80ÛÓ ð\81Ææ¢\8d\16îÀÚÀ%\9aÚ¥Fp\9a¡Y\86#p\f4í4\9b\0dGj\8a&\ 1nÐxqB®8¸`ÃÅ9RëÔ¨í8k\931ãB\996G3A/ÖV夨ZxR+ª\1a\1d¡\ 1À\v\1a®Ð4,\9a,ðÎh)yåq÷b¦eC+ÎÐ\9fM\ 2\1eOE\1aQ¶nÀ,£w0º\19ôNHSÐ1Îè<OË"L\90{=\81¤Fã\84\v5\rU%Ì\9c¦\99¥ëéµ\9aÞ\86"]\1aiüT±Å"D&½\84\ê4¼èÑ\12-\ fú\a\f\85.rÖ\94÷D$Ý£>{Z>XþpoÏÅÓ]ÑÌ\80<HOG¢k"ó\11\ 3ÍKY\13ô\b\19z_¤§#é.\aÝ\18\16Û\98¼{¿\88|s<GX\ 4tÓ»{8\89ϾÏ\ e\19\ 4#¸q\81n\17\11Cvà×Q\93p+·x̨\rº£ÊÐ#H]ó\0>z\1a\r\96 \9e[j(Ó\85xä¨\1fð¿×\96\9eøhé\8d\1d\13\ 2\9cï©ez[EÖrúrÈ´4¨>\a ¢\a\ÙÔ1\e©\1c\8b\ 5dɬé\86ùqó4\8e}×±\0\ 4\8f \ 2W¯Ù\1d\13¯,\81®ÎD\v\ 1Îò\8e*°üLÐ\1d\v¸\vÖvue\9dÆô\83¶v\ 6üÉL\ f\86Ã\17\9f4@<¸¸\18¥´k£»\8f\95cx2è\v\97¿EcF\f\17§÷
++P@\83º\ 2\82\ 1\84\87¦ÝÃÂ\9c´\96¾=-\1e\1e¬\10Ë|ïÆø£ï«Ýä\1aôøâ U\1cÆîÿ±g\eÿ÷BÇQ\9fhO'\12\89D"\91H$\12\89D"\91h\8füFû\vÿ=AüÿE"\91H$\12\89D"\91H$Ú\e4°ÿO[tÀæñ¥ýÞ1Íoû\88\vçlc?jmû½\rÍ'ý±\ 5s\7f^|[mðýÞ!ÍÿöØ­jyño\ f*vþß\13û\9bs\ e\80\89}µ¯h>´Ã>ש\94\9dB\9f\eܹÌùÏ!²/óÌæ\1fíöYö2sþ]åüÿ¸\8dií}\8bÿ\87}\99sbßâ\1dm\Ã\9cÿmc|\8b\17°?6À\8bS\ 6¹
++n¡Ï\19/>x'\97Åê\8bþÞÖÞx¿c\91H$\12\89D"\91H$úe«ù\91ÃÆ\9c\9dN.$çC\17G\90sv&\e\ 3\8f\7fo\1c\95\1a\17\93µ%\98¦°æQè\10\9c\ eÎ[MG=\15Á÷\9föo9\94à\13\13l*±<ÎDG'«\84@\9bàSV\88îÉÈ\86\96\0Üw\86\11üÚx\83\0#ç\¦\163\ 2\8d².»0\83à\16\17\82\8fY\aªÛר\9b\9c\10É\91B2\bX-\99\ 4\ 6ã\9b\84å?>n¢\9c\e\95\87Õ½ägCN\84\84|\ 6\88!q\ 6u\80ͯ\11\9d36(\15¼G\80\88F\0U¦Á!.\ 6\91R\b\94ØMlÒ\9e\8e§)q+Ô¯2?bÿ\17\89D"\91H$\12\89D"\91hoÐÀþÿü\17/ÿ\8fñ¥S{\87\17ö\15rÔ_{ ;\9d\19VnJ¿wb³\85ïÊù[=        Ïï\92\vôYÿý\99o2\a,¸~ï\8c\b®mܾ9Û\8fz»pþ´\8eýÞ!\8d·uû£\87\16\ e\9f3Þö{ó\9b\9fÀ«[gm-Çm\fýÞ)­\9e?ÝÎ\@¤s\9cÖûTãµýó\91ç~¯ró"û#¼Õx_\7föêÚ#\99y *\97làß02úùZf\ 2ó¾î\9fÞ]·jËû\1e(e.Xö\ fXÙúýÍY+\9ef\8e\9d        \§*uââ\91\97G\ e¨\8c»Ì×Í.e\80\ 3þù\865·°o\84ÍÜOfÀMì7qcãØÙã\97\8c;\1ax)s\8dY¸dÝ\85ÌÔK\9c\7frZoC»ßk\1eÿØ­\f*3pý\8cn\8e'óÅ\98J\9fí\1f\:Êe¶ò\vWíßÕ¹ä\89sæ²/\86®¾\1fóK\9d\8bèsö«öfææiÃܵÇË|\9eN\9f­·\9c÷J-«L¶SZ{W=°\9aùw&$\1eÃÌvo?>{õ\8bÌÛÓ\9a¯»©±ÿ\96ù\8b·p\99¯s}s\9b³\1dû®y\89Ërmï3ûwí}õ¡\95\95·çcåÑ\95ë&æííh×ýSZÅ×y\1fù>\9c:\86\9b·úVöCQ\99}T\98+\879[úôÁ÷V_\13Ës}ø\ 1Ý\18~ëðÕ\e*ãÎòØï\98ѵ÷ÐQ\97\8f27ÓV?\94~{\16~oÚi\9b¸,Zay\88D"\91H$úU\13l\96@Óé\14\91\18\1dà¸\fª\eÇCg\98\7f\81}ô©2õ\9c\ eA+\97ñ:¯µw*:\97\ 3ý¯M\16ï\96É%clJ6\14pb\ 2\vÏGÐ\19#ma`\1f\ 6\9fÎ\ 6eK\e\ e\ 1Ó^Å\0Ä^e°i\1f\862\1dt\96\9aðl7¦?ØDgæ\0n#½Ê!1½\ 5cÐQ'³\ 2Ô/f«\9c\89\16     í-xÇÑ\ 5\ 1g\98Krx\93-\9dga\10.ö`\17c\99\ 3gÀ¨ó \ 5NÀ¾\9bÔ\9e\9cu\f\81\92Y\8fÑ8Á\95ÔYQ_"÷\1d4EÐøReÜ1C/[pî¢MÙSw\v[Ñzz{wF5^\9e\ 3P2tü¹Éìí\16Áê@\83\86\10c7\8f4±¥ïN×1áVÒ\15\1d?o\ fÛÂéæ;¾\9f`\16\16\14fTu\1c49^ózò\9eê¦\9e\18pQi\19zf4*Uü\0B²m¾2\9dJ[\94H\1dÕt3MÇ\1e\ 4\v±\9b/ZJt'P©Î\110G\1aµ\ 1\8c\r\0MÑÓ$P«
++xG\1a ø\93\8e6\e´ÒAWÍ Vª\90\ 3m#À\ 2Ôô@Р\13|1h¦"&\9e\9aK4K\9e\8e+p\1eé.Ó¦1»ì1i´Ø\81pÌ´;\13û¿H$\12\89D"\91H$\12\89Dï~Éþ_$\12\89D"\91H$\12\89D¢½A\ 3ÿÿ/Î÷O\8c/í÷6´\9cç'ì<a'ûng×ï­/~ÔÃþük\8b\8fñÇésì£7\9fY|\8c\9d÷ýÞêR\ f|¤÷]ø\81\7f/Ç£ÒýÞõ­þ]ýö×\96úá\8b½ú\91\83¾\83ãAÛÜïý\1f\1eãWq\9dý\93hÙ]¯\rMHC\8bK\12C±Á\90Ìû\11ò°\88ÛF©¡¶Y`1k\8c\84)\ 4\f\ 6\1a!\8b\82dQ\ 4´A\84¨´¢
++mQ¡\r\ 4\ 2¦8ÅmR \11\15\r\84\97Ã+np\96\ 5\1c\1eÁiM¡¥ß73wvñoíþÑ$
++ñ|Òµwï¹3wæÌ̽s÷\9có\9dýgv×oZ1ÿÇ<ï\83Ãù\9c·}!\8eùß:`Sòó\97Ñ\ fôFSý¬ì\88×Þóf:¯¥Âõ5Çýa¯_\9düñ\83±~°wïPwß97¯Ìùß\85(¾Õ\8bÒ½¯À±â\96¥\8fg\99\92Ùw|ß\99]¹7×wå|ñ\7f¿¨öeì®ÑÇ\8a¬øðo\1e¤\8c~Þ§>}üõ\99\17QÈìç½±\96»ûÆ\95\ fåx\ 2U|¹7¥û]\8ecó×Fþ½Ä\1aØì§/\92\8c
++Ùxç9\13Y\16\ö+_Uû'n,q\ 1N\17\7fûKëýúc\ 6\96$\9fóõ8\8e\fË\9fÎ2Wø\14³Oý~8ÎúÁ¼\9c#ÒÇ¢³\894\1fè«>òËK\9e\98eWÖû}ýö±¬³ K^õ\91\9aãý´\89Ù\97g\99SYvÓPWç\86Ã\96¿Râ\10J\9eúÌÃÈyÐÏ        yMÍaÿÄ?­~*ÍYamîC\8e\97øS\1cÇm[\90óÍ\8bXb7¶¥1\9a>FaFÒËô1
++\ fU\ eʵ\97\9cøR\96Y\91ûpojËôñ\ 4\17\ruã÷Èe¹\7fÊx\9be\ f$\19c7Þ\1e>¾Ä\13\84r¿+\87º9Ý\1fO°ªöý\84?:ç\99,\v2ëea]\83\17ßqòs\1d\1ff\91Íìê\>~Ë\17r\1cBôyüÆfMÊn=¨Ä!ø|¿\1dµ\9d#s\97=W8/K\8cÉh-wÌø¢¹9\ eA\85Ð\1eÆ\r\r\r\rÿo$\7f^\8d§¸\11Ai\1f\8aßïOÅ?Ù
++\85\a»¥\1fµ\8d&ïyè\17\8b\92\94û<\11e±MxûEÜVÑk;ùËâ\1a\19r¬ÜÿáC\8bn\90Ù\8bT[\14³©Å\ fWËt\ f\1d\98 Ý        «\rª¬~ÍØQ\18¼"µ$1\99¤çpÑ\8fdÂq#¼Ðl&^\¦ôǦú\ 2$\92ô`Þ1¹\96Ð\9d?µ`\12ö ¢\99l³¤kqr\13¦¯x\806Ñ-å\14Ê¢\83\rh-úä¹)Å5ôF'k\18Þ{x±c\87b =\8f\1eò\96loDu\82LiÊ£/Î
++tÀÑ«\99~È.PçF±"Á\81\v\ 6wfÛ\82\v)+8ú\16%ÝÒ\9dC\e\Î{.-tJz2¨$âN\92ú¢;3þ\85z¬5ÒX¶Ú\ 6G²·\94\ f>²ët¶2\86ÔO\8b®`û\13\rÓ\8f\8a>z2©a^ard¿m4;8k\8a~P«Ã=­\8e!ùA£×Á%ÿríôT\1fw\EÝ\93ÎMZì3p+Ö\81\r\8eK¾þ\98\8b¼\93H9Ø\9dvS}Ç\7f\9eüª§ä\86Çæ\1a³?¢mÑpà±Ës\1e«2¢¬bbv/=
++â\9e
++u£r¬YÜ\ 5\1dÀ*IóM\91\8b.JÞ\83¼xÆ1è\96ÎûظG'Ð4,Xæ\81ÇRÔ\98j\8c\ fÆèD,S\8fáFw\f\ 5\ 6\1f#\8f\92Ìþ\8eYÉÑ×äÞ\8bÆ`<\9cÁ,B\97Ñ\1d\85jP7vz\1c\135àa\82e`ôO\82ûN[¨\vÏ\18\1aL >^¸@0#1ï\18\1fË\ f\ 1Îx\14ǼL\8b\1eM¬E'#\9a\88\ f\rX§5\96\9d
++¦Æ\f\b#\84ÁJÁS\v#ìCY§\98Q\9a\14\7f\ 1\r\83\ 6Ù;ûÓ\88\17Á¨AÿP\ 4V\17Ê¢$f\10\1e«èzÐQó^è\18\9e\93Xóx`â«SCë\86\ f'FdX®j<\9d1aù¡\8aqÇCÁpacòèÈo\vè9\18\9cCïÑ><\9e0|\16+\15Ï1Á\1eóÉ\r\ 5àjü*"\1fèPµ\14\98@\16'\r~Uä24üÔ\9aüþ?ð¾K\8eïÿþ\7fuJ<ÿd\9cÿ`oû>»þ\8e\969s|ë]ùÛ\r/\88öZnhhhhhhhhhhhhhøYý]xÆ\94¿Ç6ÿÿ\86\86\86\86\86\86\86\86\86\86\86\86\86\86=\ 2\93öÿ\1d\7f~ÁÒ\9d¥\ 3½3vÁ«\7fcå¬\7f§_ý\8déúå8\ e{óæ£y>*«\a{ëÓõÓû\8f\9fR} Nºê¬'²\9ft\90Ùßy]åA\1f}v¤ó?\8eÙ'ý\9aÊg~Ï\97~7ùÀk!\8a\7fü5ût²ÆuÞÐÐÐÐÐÐÐÐÐÐÐðó\89\14\93C¼)¹\b¦Æ\12½«üëS|\817r7qM(o\95\b\96aHÊÏ\986\17\83f\18\8br\11\1dÕV8\868¤Ä\bÑ1>\aºR\1e·\93\ 6\19tSÚ\88J\95u\ 6\1dÔÑ1zÄ1èÈ\ 5%¥õN\e\1f\1aÿ_CCCCCCCCCCCCCÃ\9e\81IûÿòOý£ÞY:ÐÛ·Úß\ fþæeË2\97\9cq\ 3½\8f¥óä÷úö1\vþ'Ù×µ³\ 3½\1d\95ïmîoí÷v²ÿ\v)\ 6{OÏî®?É\9f\92sÇk[r²oO2ò\ 5¬\19\7fef\96\85ÂwöhÍåÞÏ\81wpmÃ\85óVd.4/Dæ-\e\9bq,yöî;²ß\80\rxCCCCCCCCCCCÃ/\f¦rCzKzH#ñí§\82\89É\18øH.nEjNí\ 3\7fq²ð\7fÒöï\95U\993=ÅË;gHµ\19\95ѸZÑ0OÛ}@!\11H\ré¼I\\80ù|$«¢Rä\8e´Ê\ 4ã\94ñAëdÀÇ)M³½5d#4F:²\19\92>\14"å5Y?£søÁãC7à"r4z\83\8bE qßYRµ:\19\95A%ÆPE       Ê[\92»
++cLÄ\1d#}!")\fÉ\9b\18\14ªr$Wt¨Û\92sµÙÿ\e\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a~ñѾÿ\e\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1aö\ 4Lúÿ/¾ä\e·í,\1dè\9d[}ó§æÿ\eè\8d¥ó\8c\v\98\7fÿ\82\13Òy+ý@o8å\19?\11ÇÜM7\9d\98yþ,Îo¬9Í\ fZ6ïG9'`t\ 3½\83gNÖ\7fàªr>\ eô.\9drßýNÉyÜ£\1eè\9d\92®g\1eóu\8b\ e|0óú\191Ð[Tã\vÞ\19\8f°W½~hé\a¾\99Î{\81öO¤\1cäLxxÕø\82\1f'^Ãȸ\86\91t=ã\rVßÿ¾\7fáy'5Ú³_ÍixÄë\17¤|\87Î*Ô³\7f:\7f\15õ÷ä\aÿ+\9dw
++ýÍ9Îß\83ãз?´\82ç½\8ff wEÍ  ¿iÅüt_\1f\1cê_?ÔÝ÷ô£\ fx0ÇMPÏ×\ e\1cöÖÄYé|ôa°·eVwý\9bëW>\92Ç%çÞ\1dì­­}\18»kô±"\8b9ïü}UOç\1f²&åe\97R\86,û\Õù9ãß\9e\97\94\9cô5\ eã¯\ f:ù;Eæs¹µSÊ\rê,s*Çaì\97ÚÂ<÷\7fñÑ\95ãEæs;o­yà×\8c\9f}C\92)%s\9dógví<ñoV\7f¿Èb.wi\95}÷¶S_É2]âE¶\fuórÕÃç\1d\9acIDÈ<\93\9b\85\1e9\96\8dȲ\r³»yòæÇ\97>\99eÎä¶\9c1Üõ}Îm£¹\9c\93ìÚ:Îg¼ü«ÿ\9ceNçv^\97îÇX\98gï\úb\91Ù¬\97\a\86ºyðÌ]\9fÝ\9aóg\86ä\933Ø»)Í©Q\1c×ýÉñÏdY,:Û^ÇA\1fQònz¡2\1fæâY\9d®\1fùèhÖµ7¥Î·ê\18\9d=¾H\17þM\11r\1fRÿîÀqÊ#wÛ"sù~«guú<û¡\13¾\92×§\8a¹\ fkS9þsÚÄì˳̩¬³u³ºþ\9dÿë§æx\1f¦­ÍãWÇhôá\93\16¤Ø\1cLÂ\n2Nè\8d\ f\9eð|\96a\90\87º1:vãÙ\ fg\9eP+sß\17ÖçÈÊñÏ|¾p\88\8aÜ÷\ru=ôó\8bΩ²·\86Îþ^\92éhr\ÒºZçØøÄ\97\93Ìh\9beçÖyý¥{VåØ#c}®sõP×\87G7\8c>\97e¾ÌÏõU/+î\19+庶\9c;ÜÕù\97á\8c,c.ܬ³áNg'=ñ5\99eÞåq¸u¨kç\8añ\7f=(ÇA©2w¿1sRvè¼,ÓºÄHÕõ·|ü\98¯ç\18)#ò¸ÏØ\rïê¢\99ݸ\8f¾ø;\a&YìÖØ\ 3³º¾\8fÌ]\96û\1eµÌkeImË1ã\ fÜRøZ\8b®\17Î\9e\94\1d|{\96I\9dçËõõ]óÛO<ù\91üÌ\176÷ïÞÚ\96Ïl}yïò>°¹\ fcSîwÓÌ,\vLóÝÐÐð3Fò¹µ\1a\8f\9fè±\ e\1d^#\91I»Éo%¥\10XïÂ9\9fÞsé\Ä%^áUk´Ð\93~»x\8f\ 4þo]0Ò
++Y8³¤\88\16;/c¬\95ÌboKÞo¼=\9cÃûÌ\ 6m],u+á\98ãÜ8áuÊG.ddru´H%N.\91|\81¥1*vyÜQ\aî\1ct$w\167\0S|\89\15\19»btõ÷\9cß\9e?;a\ 43ÉãQ\1eÍ\94|õx­9]¯w\11»\eÏ\84õÖCAÁç\9cåØ\1a\92\ 5\rÅM\14\ 6\98}\94\v§Xò5Fafrg>¯\10\99G\9e|`ÚDç±\81\81æl0t5¶$\11\vØ|IC
++5²o3q¹P\1eûØè\94H¾Ï>zËÔó\16w\ eLÓnDÀ\86ßGævWÌä\8eÝ¢Ó\18\1c\1f\95Ám\14ZF\850\8f»aNz«\ 2¯DÍ\ 25»¼ïdÝ^\eò·¹ Mú\1d\83\15\82³I'\9c\11\12=W^ØÂ\8b\86Ú\1dFÅA3ì½Âî\19­¶èb\10\ 1ÓB      ´IÒuÚc\10ñâÂÜ\911$ò3zcGzMã\9d\85í»p:òm\89~\18Ü\15­\84²%ê\bZ0\9d\vÔ\ 4[ìó\98\r\ eó\11jÀ|ð&8é\1c\86<29½Ç\ fP1Ôè\ 2öH¼§\rªø\89ûèl7'8\15\85\82¦0\15\83\19I'\87­\0\1f¾ó-\17"`ã\87É\0}a®vua&p6\86\0½b4ê\ãü\ ehªÔô\14\8fÞÛn½\18¨Å\bO"9\r­ñE\97ýÙeâͳF
++æ·wXlÐ\0wá2ù\8c£\ 4æ       ç\97±\985P'Ö\15\86\ eÓ\1dó\1aËÒ:\8f\96×ceHÌ\vl\92\82ªmÚ\95\1f<¦BDq\891󲬽©\aæ\990åç\80\96CÏVACZ)¡\8b\1e¬·\81\r×tæ/}õ\0\1f!hWðé\99 0f¸\8dÆ\86\ 2=ÄPfÝrû$éø.\ 3\89÷Ð\81Ü.\f§ïÚ>\rÿ^\9e\7fè\13§\80ÁÌ\88P6Äd\aÄeäÛ\v\12_\a\98\ 4Ø\ fB\89X\f\9c£2­°ô!FÏ~ì\8aP\ ek\96­ÇE\98_|H@\12R]XÚôä\ fQ\e²\10¢ùP\ 2f'\16 ¶í\92L\85\98\18¶´\19KÜ*4UauG>a°\,\16¡Ã\9aÄm0f\ 6\e4\8b\81ÁSJñ\11è\ 2\ 3\1c¸'çB\ eÂh\87\87$g\88\17\98\9a¸ªÙÿ\e\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1aö\ 4LÚÿ?öâÅ;v\96îÝ»·Ú^®Ü×ü^²¡(3c ·±æ×ûÐ\99\87îÈ6J©\az\ fÔóï´óo©\}\ f¼<÷\8d\94/0:1Ø»®ÚÕW\8f\1fv{g[Ív»ëk^@qc±u:Þ\9d²\89Ô®ém\96\9bk^Àc×\1d\97íhÂËlKÚ\9cê¤\8díýóNÏ2þ1+ÉvÔûõÛ\ 2\1f­ö©±ñÙÙÆf\95Ê÷[WmÇï;tÕw²Lë©¶\Ê~tÇg\93-\9e\7f"Ëu^]m\9dOÝ>\9am\9dAv6à*û\ 3yÔsÅ®\15b\9b°\r\r\r\r\r\r\r\r\r\r\rïR$\1f\0\19ñé\18\83ÁwQ²ÍÓ ÀÑ[TJ\9fØï²ý[\93Ä\8f\ 6\1fWJ\v\91Ï\9bäk,¼S.Æâ;\94¯×Q\91\82¯ó?y\17ú\93dîA\95|\15P»TÊ\ 4«£Oþ\1c\9e9\ 6QGéßÎþP\ e\8dÍz\bB\8bàè\1f¡Q\ 3]\88ªoS³ÿ74444444444444ì     \98´ÿ_ýåß?ggéÞ%\8e\9dvïK\17|ÿ\98lÛv3\ 6J|v?/À@\8d\e}'/Àâ\1ag»xá¯Ý\9fíÙJ\r\94\98óþxþWÓõ\eXÏk\ fýg\8aÏ\17Þu¼\0\9a?üÈk<o\95F=«j{\ e\7fýÏNKç\83Åù\1c/Íøì\ fo?5Åu3³Â@oNjçBÖÿ­\ 36%\7f\ 4\19ÑÎû\86»ú\8f:õï§x{Ãxþ\1c«¾\1eÇðq¿òoé¼\rr°÷h\8dË=õ)}[Ö\83,1Ðg¤6]\81cÅ-K\1fϲ\14\82Rch§\8fß?|7ñí¯Öö\9d7gÍó9N]\86ìÛ0R¹\ eúcØS\91\19\9fÄqüWW¾Pü,J<ï\15³º:7ÞyÎD\96åÜ\17\83½±¤§Ïã8ý¥?þjöÁ\10%ÿâD\92M\1fþ°Æ\ 1\8fÞ~æKÙ\ fD\948à±\1a§þÆ!Ës\9czÔ¥ï\135\ 6úÍ\9bK\f´Ð&\97;·ÖÙ\1f\e~M\1aç£p\8cüpìïr\µ(1å«R¹\14¯¼õ\88\ fä9,\8a\7fÆ\8d5\86}l|Û_eÿ\fYb\8b7W\1f\8cþü\92\13éïf\1fÇqñ¬ã¶d\99\r¹\ fë\87»¹Ø\1fWýêìIÙ­Ù\8f$*_t]ïwí=\8b^È1ÐÆç±ÝPÇý7\ 6\8fÞ\9a×\89/qÜ\93\1c\ 4Ç<ÿÞ\e²\8fN\8e\9fjhhhhhØ\93\919\ 6¢qV:\86â2äÚZã­³Z)\17±ßÑ\ 6\9b\17ZØdð\81V2/\95Q2D=cJ\9cÿ.âô»\18ë\88ýÖ4ñÉÙ\8e§\ 3\93|)\91"±ßñ\92éÇ\94wtNµLDÆ\88`ï¹\11Å5\8c\1af\18/öÉÞ\92\rÁHÆÉû\14\fc\7f¥\15Ì\16¦|ÐÂY\11´ÄÞE _\9a\e1Áð|V$T\b1\18Ü9ÅÚ\e\8dËcÀ>XcG¦=ó\85© \13q\80Ã9Æ\83\18õ\8cæc\17-h²Ä¥Rk\87\1f¼OÙÆ,#Ç¥a(²\80º¢\8bÌ\98\86MWd\9a36\1ajFO +ô\95Á×ÌKÆìeP\16\8d§\92µ)Æ¢\aò
++X£\1d÷I\91\8d\1cZ®mâg\80ª0VÞ©\8e\8bAX\85¯
++\1fÊØ R\ 6§KÕÅ\87+Z;­1AéèÊ9\81\9fX\17t
++å\19[Êân\1e=      \9aaó)â\9d\81ÒèHHÑø\8a\81Ý©\9521\1aXêÚà2e0øÉî\8av`Ö Ó\8eì@ÐÅä|Áv1ÿï\ 5¶£Bí.&\1d;6ô_ÄÂ[\81[z\1a\85ÙwÃ\8d^²Ù\ 6\8c°\8fÐ\11\ 6\ 3£eÑåh0z\ 1ÊÁlD\11|\ e     \86«\a\ 6\83ÎzöÊ£DHqá\89Ë\ 1ê\17$!\b\98\16´\1a+IÒ\bç¹1æÀHo\ 4Æ       ³ Ñ\ 2HiY\1d4
++½£MZ\93\12\82T\ 2\188(²¦h\99\92\ eC\8eú\85ȼ\1a\98³\98\b\86\9c\1d!ÙøgLÇ\89Á¬x\96v÷PÆ\13kÏ+c\8c\97^q\81\92\90x\ 2*Bc\12s\ 1z¤|\1a\bÚù\1dg\1d\96!Ïï6g_æ\10±ä\9b\10\8eSZ\89]r\15p\90¡/<\17ðèP\8cÊ÷Î\8b ¢Hv\7f\83ÙíSS¡n-P:\1a\81Åe\93¥?ñqè ±ÀX/¦>\97\ 3Mþ¸\18%9\87µ·x\9c@a\12סÃXÒ\ 2WágRyXÎA2+8R@`NcfZæ\rÄ|\8d¬A@ß©ÉäÌÓdå\80²¸Þñ\8d\10ÌcIJ\81]ò£4û\7fCCCCCCCCCCCCCÃ\9e\80Iûÿð\89\7fûüÎÒ½{ó\93M\92ÆÇË\ fY³$Ù½%ãÿ\ fO¶ß¯à\98û\1f\v>]ìÞf ÷P²Söóí\ f§¿3\9c\8bã\v?|ï}É\9e\1fL\18èmß\85Ý~í.xøGªm|þ\93\vþ;óíÇÐÙç\17ÎØÙ\9e¿¨ò¥ÿÒ\ fö\7f\ e\b;Ø[]ë\9fssg\7f\17\85Óý\8aÊÅßÏ\9f¿Wå1èçÏß¶\eþüµÕ®ÝÏ\83?QËõóàgnöéyð·Tß\83~®û\1d\83\94Q)oÌ:+\97ÓÞd{ñ\9c\9a;àïç®Ìý³Êe_\80íÕÆ~á'Ve»½u!\97»h¨ëC?¿üÕIFÿ\88#Ãò§\v\1f\83Êm\19¨üäg\8eo½+û\ 2x\9bíÚûV_\80~{ÿ\8e\99]\1fúy\1c&ê8ôû\ 2dÞöÕ8VnýÔ^YfDîß~Õ\1fäÄ\97\8füD\96ÙÂ\9fÿ¹:\17O\1e¿ê\93EV8%FR¹/âXòزR'WBê_ÕçEû\9cõx\91\15_\80m»á\9eßVûÞÏEqiÕÙÊñUs\8b,æ¾\1f\9cÊ]\8ecÙ-§o)¾\ eqª_Éô¼ôëëÚ<ÿ\1fV?VxéE\96m®¼\1d\8f\¶ü\95wrÖß[Ëõó[¬«óóíáã\vg}(ü\16\ 3\86÷»á¬W\8aoEáä_8\85\97þÓ·\15YÈåLõ êçÌxµ\8eß±/\9c7\90ý.:\9eÿ-\83][úù4æÔþm~ÿòm\85\97¾pùï\8e\97~ÿY\93²\9d\87ë³å»×_ø½,Ó6ÏÝíumösÖ/\9eÝ\8dÑ=¿yÁx\96éâS³¸qÖ744üD°\9bxZòuÓ²¦§Ú·C´\1eÏS²º\v\92#<\bá\95\12\ 1Û\15¡±¿ðÒ\vã,\1e\90Z(²\8aÓøäñnR¸Ì$îêèH毥µ\92\86¦bïIïO6jÇbÁîÌ\97^øðIN\1fii4\1aoJ£4Mãx\17Im\83\8eÉ\0\8d\86\19o\9c\91ÑÆ`,Ú\84ë$m\7f8C\8b·Æc\1f'µT!ÒöjTpÌL£#\19¼i]38G®zEBvch«\8ex@\v\81\87­æ®Íâ)\1fñ«\88>jáµ£½N[\9cD·½bì­q\1d\a\7fÇéß\1dÎ(\9aàqÚÓ¼mh\82ËvM\9dü\ 4¦æ\bP\81)\ e$4\17\ 2Mûø\97ôýÉM@y\e¡zeÑG¨\8fZ¡ñÎÓnéÈ)\1eíÿ²wõ±~\95wýÞXõ\16(eq\99,\90Y\81\rh±<ï/at¸@2µ0ÚA_\80\96:`\14(ÜJ:³L\8cü±H\13    6q#$Ã\85(1à\98¶¡º²)C\123\12\9a8\aS È*/\17X {éêèFÕÏçû\9csîí}ûÇÉ\18ý~Èi¹çù\9dç<oç×óÜïçûù\14S[H´D\93\18þgó3ÃÑ\89\ 2ß\99ÿZ\91³\10ò4ß\80éùÑ\94\94O¯µÄJAò\82wÞêId¨|\1d­Å°\1aë}¨\9cs6\13s\81q\b\f'&\ 6Ö3§¡ð\13è4%Ó1ëä]àÕ\85\84\7f\99\91©\1e\v¾0 \99\81     Ô!×\91ùü\16|q\8c\9abl°²gÉ\1f\9fîå0\9bÿÃl\9aòèH4Sx\ 2]üÞ{©#bѦB\82\ 2ú$\9dÅõ\86ÔÛ\8a\a*\93T\82Ö\17L\f>\19øÖoÉ\14À \87\a\96\ e­-ª¡[\82\9e\84\13,\ 1çñù\84\15èj\8cX¥!â\82Â\96Y\1a4\ 5\ eyÅ3ã\7f\1añè>'\1cK]\14çy        æ¶\19:µúC\15\8e\88ãâHd ØÐñ\13\8a!    \9bYsÑ10\1cWFðÛXR;¿b
++\ 2\19*\18¸ì]nÿϯ¢\8a\ 108\91É%\10:Ca»\13I"E\94ë90\18Ä@Z\a\9eA®þÌõ\89\8f\ 2\9c<_d¢P\14\9f\1e\15.8º'ðÛ\v_@¸\v\9f\\fÔ\94\úö\1dg\8a<Ѥ¢øÆ        \98Ó?À\91Ë\8dFõ^\rÉ$C=»À\8d\ f¾[\12¾¬\1c.!É\ 2_²\Â$ªÈ×$%\ 4ð\18\aÏå\89o$T\8enòy&\v\0å\ 6ßb\91\8e(\1c\b¬âZhåaÅ        \83ë9ãÙ3γ        \99\1a\ 2¤\8bðcx\82È$ò\18t|\99E+c\8b[áñ*T\11ð\9d×\ 4¦\97ÏbÇ\7f\99\95w¢ñ\7f\85B¡P(\14
++\85B¡P(\8e\ 6LÆÿ7\1düî,ñÿÏ\ e¹Ów\9cñ\9b×5¿z726z÷à\vpd\9eÿÎ!vwdü¿Å]gÆÿß\18âÍ\9b×.mùüÑç^o\9f÷ýÝ\89ç¿ÐåÎÇ\16\e=a\9e8û¤_Áæ§?]»8»iq·M\83×ÀøÄøWZ,=ÔÎ7^®[\85ãêo½¹¢ó\86ïâåÛ\87¶Ìô9\7fQê¤Çûî¥-nÊ_Gv¾ÕÒ·58V\9c¹f\7f\17£vSóÕ\19;¼ù\8b}\¸÷G¿uÈç¾ôùmç´Øoì8\ 6o\ e}\98éCð\99a\fú\80_-×]Á>¾|þm-6\1a»Øï#\8bûþÍôóþÈпw-Ù²¯ËWïx\12{\87\18üÌ|õ0è@L\8f\7f*\14
++\85B¡P(\14G+$.ë(\r_r\90üöN»Ý3\a<fÑ: \89|HLt7¢\91\80ýE®É\19\89\1cûHN
++íè\vÃã$JD²oJ¦ÊAö¢5Ai\ 1oÉßp^D\12ºX¶54T+$ÜøPËÏ\8c\aÔxJ¸!\15ó\9b\9e\83ðTfÍÉ\9fÆï¨\14\17H\95²\ 5¶×\ fÀ\9d©Ñá\84«`¨ñïHvr쨵ÆXfÍs/FÝ\81ìZë1¦Á¡j48FÃæ¸\9aPµãçùSq¥ó\17\98\8d?B\19\ 5Jed\8c\8c\14çIÝ\90\9a\ 3¹\15\99\9e\0±\14J6\18Z      Ä\94ÑöZ)Í`15¤\15°g¨\16\13ï°«\15Æ\16ù[\81§2E\eÐX_9ß2V\8ej\18µ¦yô\16°aËè       i`\8e\84\ e¬\8dÖ6\8dÿ+\14
++\85B¡P(\14
++\85Bq4`2þ\7fÞ\89\9f|ïôұѭ\83Æûø§\96\7f¿Óù÷c\9dw}Óÿ\7fßÕ-&^ëX§ÑÎÏ/?¼üp\97\v\1d\0?\7fö\81\87/èbÅøüd\1cüH_\803ä÷\12ëq,Ý{ßÇä|\88\8bGÏä\17\98ãúz¾´÷½\8f
++¿ÀE´³Hý«qüúá\8bÎ\17~\81¥\9eÿd^ýTÞÁØ\94¼ò#õ\ 5Ö\rýÚ»á\8c\83\8d\a\91Ðþ{\ 6?\82ß:Ôü\bøk6Ô#¹Èç\8dL×#8n\18\87¥\a6>-ç3u\r6\ fyâ×^x\92è\14TñS¸oÈ[>Ò\8fà\84!\ f\9b¯Ü çk.\v\9cG×`Ç0F«Ïít\r\983$e¯Èu³ó&N\e8\15W=»æ\9eÆ\9b0]\1eþÉ\83ÖýLí\82=\8bû6~üÕm§vú\ 4]\1eþ]\83ÆÂɧ]þíÎÇÀ·ë\96Ìãq°}\98\9fËó¦æcàc\97\87ßòÛwàØuÎúo6NJH]\99ôav\1f\83\ fJ\9d\1c\80köÝx\7f\9dÞý2ï\eqüh÷µ¯·²\1cZ[öH\1fîıjÅ\8d­-9w¹ý;äºwã¸á¥Ó\e\9f$×n\1eZ¾ùì\9c\91\ 5CnøLo\84\17\17öc}ýÄ1¾\95%×òÛ\8bô}-\8eOÚk^ë´\vºù»gq?Ö3õ       ¶\ fÚ\ 53y({\87ù\9bÉCÙ7è\füyét\e\98`42©]Àõrù¿ÿ\9dme95.Í\82\ 2¶J\9d\ 5LêRÌðb¸ç\98þÙ<xç\86\97º¼ÿЮ[7¬\97\99\9a\0·ÏãŰoqß¿\999úû\86\1c}\85BñvÅ\94¼×ÿkî°\8f\fó1 \98c`Ü\90\8aá\12æ£\8dµ$\97\16\9e\15\18\83\ 4\9b\18ÈÌ\fóÕêh­\8dwD\93bò>Ò\1e;Ø^ï»fÉzÍ\94\92ïãihg\95\12\95C)ïæm¯\8f\1eÑ\95\14"êa´4 bo$É<zÜ\85ÙüTë¯\94Ðg.z\12ÓnfÊ3±^$õñ&\bø\1a\1de\ 5ðsÊ.áâ\9c(©ÍDÞ\12*¾õ\99\aÏ\ 4Û\96\8d\1f9J´\e\8fµà\1eLþM\f\11\9a2o¬Í2&÷3ȳÇ(\85\919⤽\1eÁ\9ø³éåÛj¢ø\b\ 4q\1e0¥pR\83Di\1d\87\1c\9dÃ\10E   ³2ÏÜð4Þa\8a¥Ó\0S\9c1úL\0\17\81}\\8a\96\1aÔ\84ó-o9\8a\ eÄ\ñi,cO;\84Ê\85\8aW\aÌ\ 3ç\8dB\ 6\ e\1dÈx[O\91\85\92ñ\9cCËEÊÁ\89A"ç¨\9f\92ë\r6¢.')ú\98\92Úêx\9fÄRB¯L¡¯\0ã¯ÔÕ¢\86;m\ 6¢åº*\98«:\8fÎ|1bÔ@µ\ 6\ 6\9a\9b\1f\13Ï[z7\14ÏÔz4¬\98n=÷1o¼\f\8f·yü\9dR\92\18vâD%êíã9 y\83ñ"í\80«±:\fe£ð¤\1aj»cE\86ÄPuI%Ó\r\82Qc¬0ËH¾ÃÏ\8eF\148W¤¿#S}
++\9aîB¥é\0E)8
++-æÎç\aß\a\94^(}.¼aP\9e\1e[ü¦\bT>à\8e(F¦øsåVïÄà"s"0Ï\185OÇ\ 1®yÌSS½\10G\82\82\88ïªÞG£q\118=\98\83.þÿvÒÔÏ\9e¦\aÞÏÆK\98Kw\ 5\ f-\16
++'\84Î\ 6¾öý\92e\87ÎbL\18äÇw\9e9B\97bºÇ\ 5¾\12\8a(\9e\98Éçu6.I¯É0«&\89Æÿ\15
++\85B¡P(\14
++\85B¡8\1a0\19ÿ\7fcÅC·N/\1d\e½Ebd3ãÞ·\fqµÇö\9fr¨éê'Óç\8b3nöÐ\97»ø%Ó=F\187{Lbx\9fñÊni~ñÌ4\91²\9d\83\aýê»®kºúÁu¹ùw\ fùð\9b÷¿ç\1f[\19\7f[(\9aí\ 3\7fÀÿÆeÿÚ⬦ÓsoÜ\82]86=ñpì4é;=÷ÏH\9d³Ç`/\1eú0S\93þ³R6»¶ü¦y´å\1f\19â¬ÿsî\96\16\83õ¡\8bë®\e8\r3õη\rãòµÏÿÎ\7fvÚä]\1cr³æØ+\14
++\85B¡P(\14osHL7\8baEè8\15sqF\84\aÀ ¹a°:õq÷LZMíy\ 36{Æ\87#i=%djÙ£Ü'\92iBt\811z\93È\92\89\9e\91å\9aÈ\180ÂV°9z\8f»\98"òóÌG\17¹}\13\ eË3Ó\9fÆ\1c\86Ä\9f\12KK\99÷"<àpÇbqq´h}\88¨)\87\92\19mGõ¾ôqêÙ¼\ 4RÈy\1e\8e\84£Z\0-,*\9a\1dªCõÕ[æñ\17
++ë\93aÄÊ¢Ç^/ÓÍ#%*æ3\1an¹uª©\ 6ç
++\13ì\8dÐ~r2>\vÏ©\1a窥\9c\81§\9e\E}Å\93\8c\94b\10g\ 64È0\88Î8>ú\93Ð>\fj%É)ã\7f0&6Qe?9Þ\93\14\82Öæà\8dðlzÿ\88é\1e        ³j\ 6ø\82>\97\ 1ÒÞcµ\9d×Â[ä     ¢ñ\7f\85B¡P(\14
++\85B¡P(ÞùÐý¿B¡P(\14
++\85B¡P(\14ºÿW(\14
++\85B¡P(\14
++\85BñNÀdþÿï¯ý\15?½´×ÿ¿\ 3ÇÊg\96ü¸éỼpÔÈù\ fáXó¥+\9böy°¢e¨P(\14
++\85B¡P(\14
++ÅÏ;D»Àggsñ4å¨V\9c!\82/)\88\9d\ 5\rEB¥@\81Á\1f\98é§A­ÿPrÓ60ÉR^ \88-\ 6Í;¨ù\10P]p.Ó\1e\82\ 2\ 3>\ 6çm®¬ÎáDÁ5&\aÔ\12\82£\8b\aÅ\ 2¬x¦å\92¢«5¡¤H]ÑÒd\84¾\19´\171\952\ 3Y|;h+`Q\9d\8b¸\81;rÿ¿ôàʧfîÿo\194æÎøú²µÍSÍbÿ¿CÎoåþÿÔ\rÿÖ´üLçÃv\82\94]?B\8d<û@óÜB»tù(\14
++\85B¡P(\14
++\85âí³¿OÅ\ 5qü+4ÿ£©d¶\85\ 6¡ôÌ\vtGôØS{zB¦À­4ö÷ÖPÈÐ\95ì\1döÕüõ@u9\85\8aMºç\1e=\ 5lÍE61\9a\94½I&u:\7f±\1a1\e\9fw¿_0ÆRÆ=°À\a|\98Î\9fø\13ûûB\1d¿l\ 3ê«\91&\81ÙÆJ\87Ð\12\8cóF¬Pé\12èCIh¬øý¡ à\14Õ\ 2=-B\vý/\rª­±\14åÿ+\14
++\85B¡P(\14
++\85Bq4`2þ¿þý/|azéØèæÁ_ïÚ\vOz\9c±üj¼\1dë¼üøÇ\87¯Z~@Î\a\97Ç:^À/àXzÀl\90óÉä\85£#óð\ 5\ e^\82OÿÍUÍ\8b\8ff\15R¶@î¿\1aÇMßqFÊ|rÍ3ðÞy|\ 1·Êu;pì:gý7\eo!¤v¿=CÛ?vë¥\9d¿_¶ÍûïöE}û7NÜñ¡Îïó\fÜ)íü(\8e\ 3÷ozEÊÈÜ\90²í\83gà¯\9e~m«Ó;ß¼ÿÖI[èïwóßoiþ~!\9bÖ¿×ä~ôWüÃ]\e_hÞ\7fµ´þ5¯Az\14¾kÉ\96}RV\9do>\84\ f\fã|ÙÄ\ 3§veÙHÙ\8ea\.|þ¡¿í=\ 3mkçп\8b&núÓVVmëßSR¦~\82
++\85B¡P(\14
++Åÿ/>1>Þ\1f.bkàª5Æ\9ab»8ñ,>\80ÎÓÃÍEy¯§Ï^bä\17ÿuÞr³úÍECR9
++l\8d5dñ\1fçgC\8a.zWlÎ\85f}Éc'å¢õ\ 5\7f1ÞM§»*adlx\ 2=þª7ø +¡\14\9fP\13\9d\ 6]5µ¸æaç\v.\8chaFuâSXm\11þ{ÁÞÎVìd\\89%8´;eé\88K&fì~R\f\1e\1f.lOÌÅ\92·nkð1Ø\94+ã×9{Çp6Ú\83f\87\8c¶Vt½úà\1dû\e¼ñ¥\1aS8&\81±zS°\93      \81C\14-NT2Òë[\1doç8`\7fç\1cëÀ¬¢\1fµäÆ;p®\fk XT+\15:\83¹°%Ç)e    w       ÕúÌ\ 1\b&£uL)ðÅ£O\9c\11\876`VjÁÍ8×>b{[S¶F\18       ônôÉø¨ú\7f
++\85B¡P(\14
++\85B¡P\1c\15\98\8cÿ/{|Ѫé¥}ü\9f\81áSW\9fþ\ 3\89£\97\9aÆF·\ eqä³\ f<|A\8b#\87:6z×qýçÏ<ôþÿâù`mF=r\9eqîW\ f\9c"|\81à3ê9Mêgìÿ\8cg\96\1d\82µ\8c\8d^"ç\19Ã^þë\9e\91óÙ»±ÑÛåüyüü£'íåùb+ê¿Uê'Oá\17_:Qx
++¥\9a¸ptûÐ\9e\83·\7fBâëü]O\8b\1c®ùÉÎ+\9fhe¹+{Vî3;_aïÀ\89X}îºoµ²P[\~?ëÿbËó\8dËàj«ó\12¹\1fãë×<ùÜ×ZY\8a-.ÿäñýx\8eO|÷ØÆs(\1d\ab\9dÔI\1eÀs\ f®úNÇs\88\8d#p\9fÔ¹\13Ç9å²g¥,'×x\0+\85\vǦ'\1e\8e]YÇexqà\bÜðúsÛÛ¼\96\98¤ì©¡-×O\1c㥬&×ʶÉukp¬8sÍþÆ\8fðÝý>x|?ÇaÁ\15\8dË`CW\16\8eëÇåÉÝë^è8\10]ÿn\19ø\11?Øu]ãG¤Üñ*Þ=¬¿m_]óRÏ\8f\9d0´sÃÄ\99§KYö¾\8dË\e\ 3¯âà\9d\eÚu\ 5£&e\9f\1a®\9bÎ\81P(\14
++\85B¡PÌ\ 4c\9852þZ³·%\15W+ɳ\12_\8e6òï\9c\99@m
++ÞýKi׸\1a#é²¹\16c+^\89û\984^W%.\1ckMxçex[î!áîèíp}õÕÆ\10\98\9d]\ 2£¬\8cÔfëcñÕ3&ÊDë\1cR`p»\84èMÁçl´Î[Æ®\13®±\11'=ê®TF\v\ eÍOx\81­äñâ=¶\ 4\9c3\89\rÍ     §r´¦zk\8c±\85á\\1f¢Á§\19\9b¯¹2Ä\8bÛFç#N\ 6üèð\83\vÉJnwª\fD\97âB5ÁæXm\1fÃõ\86\ 2n\f­»\80Ý\88O®Jd\e\97£sÙGÖG)8\8c\0jµÁ2\86\8c&¸àb&ÿ¹HH\19\83cH \96 ?ëE«\198÷5ùÀ˼é¸\ 2¡àÃ9\18ëBéæ\8aC\84·ú\98s\88¤     \84\91\81\87 )é\98ÀØÍE
++NbÛè\85©Ì\83Ï-Æ\8f\9d\8de\8cÛ\96\90X\9b5ÝÜqÞ,sÝ­\97Í\81Ô\89\8fà\9cÍ\93÷Á-°;¢r^Í\7\14És\18\alé08T«Ë)\e,0\83\1f3÷X\fÇ»Lê\0ÆÐÆ\1a\8c/\18}\8bÕÑÖXòS¹\14oql\1fÓ\93°¸±\83u\9cut%`õÄ\82\1f\r&\8f²\80\9eú|\98
++Ô\80;%\8cP-\\9fÔ\19\b\80ÅÍç\0\93\8bG$'ã³ô\1dÃ\8eÁÎ\94%0|TP_ÁÐ:\92%0µ        \ 3\9b°ªd$0Ñ%Ù\84\87\81¡ÿ\84\1f1h>SV°`ÿÇ{Æ"û2\8dÿ+\14
++\85B¡P(\14
++\85BñÎ\87îÿ\15
++\85B¡P(\14
++\85B¡8\1a0Éÿ\7fù¶ÿxtzéØè#£^\8fã\94½÷­o\1cò\98ÇF\17\f¾\80Ëþùë\1fm\1cêTÇF?2p¹o=ÿ}\8f7\r¹`ÆFO\1cxñÿrѲÿ\96ó>űÑï\1dËó,\1cÿ\83³¿ÏóÑ\91çÿä±ýç7¯]ÚÎG\8fû\1a©ç\ e\1c+\9fYòã\96/@ÝÁÇäó3u\aÏ\97v\92«\7fòý=Çßt\1az{å\1ajö=ôåË&ZYJ\8d#¾nÈK¸ù\ 3ã-oÀÚÒ¸ú{\8eíëÜà/ÿv+Ë\1dÿÿ8á¹\7f\ eÇ*»åÅVVjã¤ß>´q|bü+\8dÿ\1fjã²\9f<ä;|üÕm§6þ¿1M?pÇ0F¿wòøË­¬ñª\16\8e\8eÈýø\81köÝx¿\94%_[;ï\95²\8d8~´ûÚ×[Y\ eíº\8be\fÏ\eX0è\0Þø\8dµ\7fÝr\ 3\87³\ 6MÂÝK/kZ\8dÕ¦VgÓ\ü3\1c\97¾¶ì¶¦«X;=Æ\13\17÷ý[¿ÿ\9c\15\9d®¢ký{m\18\97+'ÎújÓU\f~j\ eC+ûí?ieÅ´9Ú=åº\95­N\1fK»î\91a\8e>}î\r-§ fÓú`\8eïû0SWñ\9ecûvN×NT(\14
++\85B¡øi£ç,SIÍÅ ¹\91sèÁ5\1fò\1c\85óìKî9Ïxi
++M\v\ e¯,\ 6/\82ô\0¯Ö\87Z¦Ôï]$ÿ¸ãÕg\8f×Së½èÀ\91v]B¶ÖÄäð\82\9e]6\81Ên\ 1wOB\89öÙ\15¦\83\fÞÒ|Æ~\80\88ÖÕZ¬õ¸\94ôx\13JD\v|&×Ýúd\ö©Äb=\9bà\85èîpÇbq1Z\94kÀ+¾Ç\vj¦¾\1cª÷¥Ï\11HÙÛ\98B²6ÅìM-\86ù\aÆ\16z¦£%¬/Z4\15\7f8\13RASK*ÙFTí\rê¶è\ 2Z\83\9f]¡4\1dú/zq\1d\17\9etÿÜ\14ð:\ e\811dz\ 3\99Ù¢\9b6ò¶óooë£æH
++|,Ì\8cEw\ 3¦\ 2{\1cÚÏ\ 5TWpï\92¼·\15ÍA«\ 2ÛÄ\ 4\ 1òâ\ 3êÅí\v?éű\1eÝ­½¦ ¦@²'\f*Íud>mº\84ÛâVX¾\98\ 1À\92°\16\8dÇ\vt\f\98þ.ïÀP¥°T¼ý{&\13`V±¸\vo\82ùÁ¦-eTÅÄ\ 2ºåy,:îg*ÚY}Î|02%ð°¬*\ 5\ 2Sa^\ 3\98=\8c'\19ô5\ 4\8ciÂ@\e\ 6Zõa\89T\8c(êÁÝ+µ
++\13Æ\a\v¸ÏMÁôq0°F»¾ã*J!¢Nf1wy\14\I\18.L\ 2O¢%ÒwËåÙ?_?Oy*S÷ÿ?YV\96LÿNúåÑ\ad¯Ä\8däm\1f\18¿XöÕ6\8c\8cuùãÜ{-?°æ\82¶w¦/À?\fÚúGê\ 5\84!\1f{ùáå\87Ûþ¯\86±ÑKæÐ\11¸{ø=Â1«~í\9fä|6¨\7fϰ/\7flÿ)\87Z\9e\7f2\vG_\91z¶sOþÅU-_\9f\vMöt',\9e{¿¾rQÿ;\80?Ú½¡ý\ e\80*\99m/?ôåТ\eZ.?¾\9eÚ\1erßÐî-\13gýeËÉwÝ\9eõ\eÃu{\1e¼é\95VVR+Û¼¸ÿýÀ\83ï¹f_Ûwûä§ì\9f¹/½ä\97.nûü\»v6}\80Ù÷äß;¾ïö\9d\e[\1fJ.mo½}\9e\þ7\86±<´díË].\7fhíÜ»hî}÷+\83þÁúÓ¶<×öݶÓFhZ\ 5\1ff\1f^¿â¯Z\9e\ 6Úï?\86\þ'þ¸ýî`R\ 3àîEsï×ï\9dÇ#á\87\83®Àÿ²w-°v\15×Õ·%á\9agc7q\14Ji\ 1ãÄ|\9dù\7f\12\b$5\85Rpù\180ÆÆ L0ðøÄrÓ\88ºI$$        "¨¢\12UH\8a\14KuÁ\ 4\90Ü4\11\14BE\ 5I]Å\84ÿ·\ 4Ì\8b¡|e\92\82J\9a®={ÎÜçwß{R[EIñ^ÒÁøìsæ³gÎõ\99³÷¬uùB\1e\93UïÛ:\r\81e\1c\8e 2g\9fÊß\0¢O<îû´oUKç\9fÌõáá\8aã¾cÐ\ 5ÿøåã¶×ù\1a²¼¾\b\ 4\ 2\81\10ü:\7fgÑ´:Ô´Â._0°\8e´u½\8bU\96ÁR¹~{±\9a>F8\15±´)\92ï\91¿\17Ð"\9föàÓÒ\10+ï¤êÞyZY¶=ôe£:\96\81QÓ~u\94ZÖ«XÍ*bÖ§­ÜXNâ\12Ú\9bM\1f       pIÆ«¹÷å|]oò·\9d©xû'ÝSOûÑñª\9eÇíçç>ÛdÊÒ]\17þ\0¬^±\14Fw±Ü\8e´Õ\9f¶¬{íb$B5MÛïÑ=,u±
++\8d\ f\8fÑò\98Ä\0B þc1\8avañnbB\9d\9e\16ñ\81¾¸\94Íò\89Úìh5K\8eNXè¢æòý        \8b(r,}\16É\9a\ 3\8c¦ ¡Ý\1aÜ¢k\99>\12\90úAáTPÚ\9b\14\15û\ 6=Ų\8aøíé[AÖ\ 3\1fLò=\accS\19SÏßȼÇZ\1e¯ü¨\90H)Êbqüw5b\1fÐX~©n.\10)\81×\81>Ù`qî=úé\ 3\11\e\ e\ eE\9f\89Í\80Ö^Ô\1a\8c«£\ f\1du.Á\99\18*K\9f\8dÐè\ 4o²æ\81
++ô\8d\1eú°¢É\9dð   \ 6\ f\1a4ú¬\85ñQ\96Ö_¨Édj\18ºA³%§úuHe_Z¥]\19\eG%[\87ÑÎD\ 5\80\11*\9f¡èS\9fÁèÂ=Nöÿ\v\ 4\ 2\81\10\b\ 4\ 2\81@°k@Öÿ\ 2\81\10\b\ 4\ 2\81\10ì
++\18äÿo\7fîöý&Zû½§Û^ð\ 5÷^y2ç²»Ðï­kùè;ïÿßPò£\89/àà-\eO)ç\9d÷ýÞÃãòüç\9eSÎgÒ\ 5LåzÒ\93»vì\90\9f\16]ÀLåï×ö\8b\1fô\8býË~~Ú Ôï]×ö\83ï¼Ïÿöiôú6·Üòa½¾ËÆéîMÜ\93\7fuËW\1fÞw\7f\81¿{ê­5ÿ¿æñ¯i6{Øò\a9\8f_Õ½îwµ\öµ{\9fûRÝ?¯¸Ì\8d-\8fÿ\9d\8fV>\82\1eá»ÓèîÝÔê{w\8f\8bÿ\8dóñsÕÏ{£ÜGIò+Æ^ù\ 6çÎëª98ÐX<å¥Ïö9\a¾ËñwÍÏKÆ\1e¸¥î\83¯e^ßrà¿°ûñcÌñà\13Û\1e\9f=¸oã\bÛ\12¥M        \ 4\ 2\81\10\b\ 4\82ÿ\ 5ÆéÜiE)ßÁ\ 6«¢·\8eù»ÆëßyOûÄ£ñ\86÷\1f\17½Eí¢\8fÁü\12u\bIú±ì:w:xkk^½\8b±åç\ fï·\9fÈ{¡5úE\7f\12_BÙO¡Ô¯DÓ/:ºÙ\96]\131\ eö\18x\87\ 5¦¦L{M[\14à8ÚÑ¡\r\1aJÍ"ÍGçs\88QÅB\99\10\ 3\95\f'§Îú²\ 3D\11c\865´;dÆ@\1f2+*ÈV\1e\ 6"u ñ\b¦p6ÀßÄá@t\10$ïW62$:KIÿp­+\ 4\ 5\18Õ\8ce'\89\ 5\1a\92\1cÔ\89\98\1e\82E½p\84\9a\12ÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81à½\ fYÿ\v\ 4\ 2\81\10\b\ 4\ 2\81@ ë\7f\81\10\b\ 4\ 2\81\10\b\ 4²þ\17\b\ 4\ 2\81\10\b\ 4\ 2\81@ðÿ\ 1\ 3þ¿Ë?ýøû'ZwïÝWôÕ\89çï\9a¹\8e\8c\9bÑï-n<v\8b~¾èçÌGGü|ÛÛõ;ó\ 2n.ç\89£î\8aãö¾¿\96\13û½M\85K\8e´Ö\7f¸ä\90ÿ*çmðýÞ\82ÂM7\17Ç\1e'í{o9\1f\95î÷F\e¿Ü¡;\áÖs^Ù~ïóå<ñÿ}õÕ\ fÞWÎ'\97ú½ëK9Ãü\82÷µz×\9c\9btÞ{\8böl\9bÕ\95\7fØ\8e?}\82Î\87h\14Ú_¾\93\10WÞ¢·Î}\92Ï[ÓïÍj~زòÀR~LÔ_æ\ e¤Â\ e\ 3ÿIç\93Õ¸þЦ-ÿÀkóß)çs@ùï\96zÉøés\17í(¼\86ÎÄ\99½\ríüO¯ùLÑ¢'î\8bªSßø\ 2ÿúã«\98/\90X(\8am]³}qóJ¶\91\8ah±¹b;\92ürë*æ t:3?á\8d\8dÛïä\e.x¡ò\1aV>ÄWÊ}·ãøDZþ4ó\1a\86ÊA8£øçÃ8\96¾ÿDæJ\8c¹r,no¾^vÛ\85ÿ^l\895KgöîjóâÎÛV<Ä6\1d\98\9fp}\9bK\17o=ýf¶\99ì\8bíñY\9d\7fÏyõ\90\eÙf-\97ù@iËQ8ntg=É<\8a!ò}+fwý;åK§\16¿\18\92?-¶ëZ}Ë\1e\10\9eÓ@±-\1d!Û(\8eUÛ~\7f7¶9Å>{»Í\ 1·Û\8a\17ª­úeAã\9e\?ç¢Gës\92x\1c\8e\1délü\8d\87\96>\EãpËùÏ\15\eªãûú#ÝØ~í\9eÕÜ\aç#\8fQ\1aé\9e\9bµß\1e}\84mQ±m{ëûCW.\7f½Ú<ÛFgu÷}è Õ?*6Ï:¬3{\97ÍîêûzZÃõ\11çH±íÕ\9e\8bU¯|à7Ù\96ê8¬oÏÀ\99Û¾|xµ\ 5öõÜÆ»¹rlôfæ¥T\99}öô\9cî¾aÎÊ\ 3Gº>¬»ó´\17Ù\96\13÷aîH7Ï._ÈsÞD¥xÜO\1céê[>öÇß,¶dª_¾Wl\7f\87ãÄgï¾\83m±ry¾1³«ï\9e¯ýÑ\8f+\ ffµÍkÏØ=\1fù\åÁ´Å&\10\b\ 4¿n .)\13\1d©\96»Ê³5\95\1e·!ílbÇ¢sÚU\rk\1f\94       É\ 6\18\89V,àn¥\89\90+á­*G\12Çv:¥\105®tÄÏ¥}LÖXë"\11h\19\94\10£ÉÊeâ«òÚ\90\890àúà\$n0ü#á<nH(¸\88U+R½\8e9\ 5üº\16n0â³ò
++ÕØB\82\8cs1á\9fq\13ñRæHµ\\13\17\98Î$aî\1c\15®\82'ÅrtÊ\18E\82ÝIYcH÷\eM*<cx\v\98N\eÞë\8cÞ&ßi\93£ÉÑ\ec¢    ãyÊ\8aï\12Izkü«\9c\12É¥ã¿\86ÄÐIzÝD4Ã(ü\vJ\8cjJ£y^{\13©/\ 1ýµÙ'\95Y">¡\8b$©NÌd\11¯hè~B\1f-\1c\8e\11Ô\953^\143i\89cT\r^z\ 3þQÇ«\10\8a0¶ð\9a\91ÑÑ\b\ 31\81\91\f<L(\88ÔÛQ*þ\a½°p\19\ 6\11¯\9d\ e\17+R\16Ç\b¥\8c\11ÇÛ!^;áߢüÎTox\9f4\18\1cÞ¨cÂ\ 5\16þ.Tk4Ð$DNÄd\ 1ew>ÃM8\81÷\1f\17¢\9b\1d]UD\92¦\ 2M\94:GIë\£ï]9X"Ðý(+xü       _Ãa
++3,ä\ïq)\92\8f
++\87ÛT\9c\9b
++m\1dý=©"nO£\81\89\83×\83®MèÑt\9aóxcuôÚ£Éá\1a/·®¶ÛÒ8\91Ìû\8cÆí\86IÍúó)ûHºì\ 6/vô,\10\7f\R\8a¦'ÊÃ;\ej\8ap\8b\v\1e>&\ 2\88Ä-G\9aµ±\12Ày\1a\ 2r=zçð
++åС\18#¹/ÐT.\83áKÿ1Ýè\1d¹ñíez@0ë\1d=mA\8fã\ e\84+˳\90á\ eæ\9fS:\13É\1d¦\81)\~\16\8d¥Y\86\9a\v«\1dºlSp©°\10\ 2.\13\15\9dÂ\7fTôô\v\0Ï\13Ë`\8a¥n<J¥\9e\88ç]a\ 6Òó«éq°e<\7fYÜzh?\9a\8b'ÎaDáy\9bè\17ÌáÉÃàe\v\8fÁ\91ÁEü\10éì1Mñô¤T~.Q{F¡\ 1÷à\87'Ñb\ eS\1e\rp\ 6¿Vxö0Òø     À\fÀ\ 3\80'\1d\93ÈÐäÆ/\1a¦\1df\8bRD\9c\88Ùm±`ÅÕø«Ê±°$¢Z\8f\1fF\9cDßà\10Ü\8a\9e\17~GÌD4?×ù\94\13~\ f0ÿ\921x\80ðÓfu\9dÇt\9e\1eµD\1d´.§!®Gü\8aàÇ\8c~DL\80\7f\9còYâÿ\ 2\81\10\b\ 4\ 2\81\10ì\1a\18Äÿ_üîêg&ZûUë\8db¢ó\7fð\95§8ÞîÒÌÞ¶\12û¢XÛÚ\8f^Êqb­\13Çè6¶xï\13ß:÷u\8e\1agü^±M\1e{^Pl§ãø\13}Þ+\1c\8aË|·é\r.{véW9F\97ë}ë[}Kç\9fÌñ×lk|ynkÿ\1f<öäÇ8F§J,Q \10\b\ 4\ 2\81\10\b\ 4ï-\94|!å)gÃX«\94wA\19\8e\8fç\98½QÉ+K\91v¾ÖG\9f\0\vH¯k^\88v\99.P)\91\88\9eãT eBÖVù\88¿ªr\ 3¥\rát¶.éHi\19&\90\8cb¦,'J\8cÀ­¤ÈHA}k8×Å\91\96¢\8aÔ\0\e²\89\9cg\15q\r\96Ó8áRîÚ\80ê\8c!-C\83:£Í)V]ÅÿC.\86Äÿ\ 5\ 2\81\10\b\ 4\ 2\81@ xïCÖÿ\ 2\81\10\b\ 4\ 2\81\10ì
++\18äÿ÷\9fZÿâDk¿·©äÝß\8ccþÏ\ e9\96ùç´ë÷R9\7f\ 6\8e\83·l<¥äÕ;ï;>¿\93qìÿó%\8b\v¯\9e6±ß[Öxåþâ\8b\a¿Uøí´C9Ç6N²\9dyïÞ.|d\93ï/\98×8Õþæ\80³~Ä6\eÙÆ<\83ÄÅöÌ?\°­Ø\ 2s¶Ìì­)m ¾®\87\8c9ñ¢«¶Ë\1açØ\9a\97\8fþ\r¶yŶõ¥¾;p\9cýÐݾòÞ\ 5æbã½\aóp\ôâÂOVÞ»Ê\7fÆÜ\83\93sâmi¼wko¹è±²gÁhÅÜhjÏÎvæµ\9d-éÊqÖø\ fW\8d\1dÿIæ\8có\89yÓ®ký\eæ\85{¸ñå-ÛvؾÌŦ*¿Û>¥ÌÉ9ÜTã+|ê¶e?á}\17ºúì¹Y]ÿ~k¿Qæ¨Ë¦ÞwÃ\9c®\9dËÇ6\1dPm\91Û¹º\959¼_cÙì®\9dÇm{mwÞ¯á<ûzÀMø»3OØÆ¶h½<Ä\ 2\81\10\b\ 4ïi\14^´ì\83\89\ e+\ eíM0¾ò£éà]áM\8bQ\19§Táª+\ 4qÊE«\rñìé\14ýt9á\9c\95\9b\82\ 3\93(\10\89_2S\92x,\8c\89\93r  æ\92ý\8dK¦Éó6ÄØG´\8eÙ$ãp:;¼\bû\84¿ªD\94w*£\b¢l\8c*\12³\\b\91Ø£\vÑb\88.\13[£IÄ\8d\88®eãcP6:¸FgE\ 4\7fD)h\15Ñ'¢¼d\r\17\15æM¥\83Bs4qúE\97\82\ eÁá6ë\ 3þ\1a\89=\8fØ\15\13Ö9T§O¦ò\ 3\1a\17\8b\8f­'JÂhQ\99wÄ=§]¥$¤"\88\1f\9a\88¼Q\13õÂ{G>3Df\17\89\920gCÝ¢túà\83µ\9e\9aæ
++\ f÷4\9c¤Äs§pOp´pK\19F8\bÃ\87FeTà­+\84w\85:\91Üå0ð\96('mB\8f¬\89\89\12÷sô\ 1v\85\ eûì)EßÁQ9'\1a2MÌ¢äeÌ\98\88.R\1a?\96\17ÎdºÌx¢·ô6\ 6ãh/@¡Ï$ZÌ\80\12à1[¹÷p±   \8ehöJN\7f\ eµ\ fɺ\902ͯä0V
++Π1üRãxHËþ\0ôÌc2'ÛÍ{\93¢vD\8d\98\9drIJJlóÞÃ×Áeb¥Ä\8c\83\97cJ\18é\8caÉè9z\r\87)\1f\99\95\146\ fç$áÿ\13\b\ 4\ 2\81\10\b\ 4\ 2\81`\17Á þ¿aôÈK&Zwï}§ñçí¬ÿ÷\\8bï.ÚqÚÑ\9c\17`u¿÷ö¸ók?űyãûU[\8dÏÏ;\9b5Ù²íW}´a\1dÁ-³»z\17}\7fÎÓ5^\9dú½Ã[üûc;æ\9e\93uì÷>¿gWÎK;æ\97<\ 2gcè÷V4\9d±Ãv|®è\ 5\ 6oÐÎcËùa=¿\e[nÁù'üο\94|\ 4ôkfïºiø\ e7µ:.\19ûáÂ\9a\8fà8îþ\)ï$\1c«\1fy\97ó\ 3¬s¬I¶_Ë\95¸äe£Ø\16\fÛ\1ehý¼tìõ\11¶¥Ê¡x{\8b\9f_þÉÕ¬§çCâûöi÷]<¶ØÖ\\85\9aWpTëÛ°ÖÞ+-ÿaXOïúY\9d¯.zõÙ«ÙÖåT¬\9bÓù}íÞç2\9fcîò\18ökm¹pl\ f[uø\fß·¡Í«a­½Û\8b?'ç\81ÜÔÊ\1¶ýo9ÇÁzÖÌÛ6MþÃ5\8d#òáÍË^ØYû®ßú°ò\9e\15õ¾.ßbã¬A}{r\1e\ 3\89þ\14Û»s\ 6\v\17VÍ<ÍýÛ«µsåØ±ßª\1av\89ÛÉ9/GàøóÙ§rÞDôU\13pS©ïÂ\19¤3¨7U\9d:Ã}¿ºåi\9cðüwoë´èØvv\9b\9f7ܳø%¶¹Èãà\1awæD\ eL\8cCÓö\9b¨a\87¾·y½dlã\bÛRä>l\99ÓµeÉO>øMþ]`½\1c\81\10\b\ 4\82ÿ    :­>ëR°::¥ñ&\96Æiç\19Rn£ ¶-\91å@\9a\8f\96\9cr\16o\97\12`·Á\91X["m<\12õ3      o÷ÁR\b4f\8aÖæ¢\9e¦Iî͹D±aCz\92V\ 5Jú­õuÇTú~3Æi\10Z\12Ó\v^\97\b²Âû±÷xÁ\f\14^\ e$7i\9d\ eI\eãð
++\95H90¢oèIît8=ZNz\8chqÒ¡òÖe\9dÆéñ\95¼\ 2â\99#á;ír6\86\ 5±»v\ 6çMʤ\897\88¥+Ê'0\89¨àH\1cN\17²:R´#\89Cx!\1aV\16\8c\99|\96ILÐ{EAd\93Ñò`èzú[2©j+NÊ\917\89&'k\aRÌ9â¿èK*Ú\8f3:=F\8c$©z*\9dM6­\9c©ó2~\99\|\94KBAsj}Ö9ÆÚ\1e\eV¨,Ù\ 3\812\1dH\9eÓ\92Ô&Í7Ê\8e m@ô\1fsÉ \ 1\99R#\ 2ÅØ\93\r\91ôH\9d6Y\91Øh\8dãÓ\ 4     xÏV±°ôÕÜ
++MÙ\bÑæ\88÷lÌõ\9cu\9aR\13s2ÍKJm ¤\rÒýsv0/º\9c\82\89\9a\98\12ÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81`\97À þÿØû\ eøþDk¿·®ÅÕ/ýü¢7k\9cßö{oµ¸ýÎñö\9bZÜ~¼^`¿whÛÓ>ë\98\ fý ð\ 2(\8aç¯hqË5§\1f\Ê÷ÞÆ~\8dåRìñÐ\1d\7fu^9\9f¼é÷®\99"n\7fÓ\9c®üñqûþ¸\18æÁ;ÔÊr>¨8³7o\9axþÖ\16\9b^óÄå\99m¡Æ\9fïj¶ó\1e\1eÖ6\f5\96\9aZ\9c\83\9f=\88cöªîÍ¿©õÿî\r«¶²î¡©qVÎ\1f¸\ eÇ\1d\9f8\83ù\f¼\v\1cgÝÞú¥6,\7f\90ù\f(\ 3£´¥ùú3\ f¯ý8Ç×ËçRØfµ~¯\1a;ôNæ\10p\96ÛòF)s.\8eS¾sñ\83\9aµ\14\1c\81_\1c1ú(ó\v8DZéÃ[[î\98qþClK\81ëÛ6»+sí·G\1f©ñuU9\vZ[\96\8f\1d}[å\10P\\9f\eg[ÂíLNq}\8bK}+p\9cô\93ÅW±Í×27\ eò\a\86ô ·6¿\fÇ»\8f/õ      \87\80\10\b\ 4\ 2\81à×\11SiÁá\95U\95xoJ\94Ì\90(,ÝÅ«'\89ÍÛdl¤´Õ\88ë¦\89½·xñ\141xcUÎÝ5Ö\85@\eã\93õ¡îq\1fÚ¯\1eTÐÄ\r\80ws\9bqG®ñlë°\18\89Y\93\ e\9d±üÞ>E\ e\ 1ºnC\97\17âP\99¥-ø(Ñ', ¼\ f\11\8b\17J\ 5Q>\86\ 6\96\12\r(^ïc¢t\r\87U\11e!\ 4Ú\82O\19"\14\14\b\94\85EJ0\9evêgë¬!\9fa\95dSÆâ\94ø\1c\1cå\92`\r\87Ó\8eè\1d<\r\8cÜ\r6rò\85/"GôÈ\91:\1f\9a\94\12VLI\11-\ 3\9a\172\9c\96Ð"J\84\ 2\8aëchàZ,­la\90 >  G§"µÛaôrÀиq9 \93i\15\9a\18)\19F%Ü\91j¾G¦D\vÔ\89\82uL\83\98)\85\8b¨`l0\18Õh%þ/\10\b\ 4\ 2\81\10\b\ 4\ 2Á®\80Aüÿìw\16ï?Ѻ{Ý7M\9b\92¯=ðS\17P¼4&3£ßKm\7fóÎûü\1fnqÙ\ 5÷^y2ǹ]èâÿÃûù\17´Xí!ÿ|?ó\v¨\90ûãâÞW\1c·÷ý\95w ö{o\95ï\15\14gÞã¤}ï-ç£ÒýÞ²\11:¿\19Ç\81oný\8f\92w Êþÿ¦/pÐ;\1fùY9¯\89/`kãß¿uËoÿS9o¼í÷Nlñï\9dó\14\ e/×ÿ%µó­c
++'\7fp\ 6å\9f8E>º¶\17ýù3÷-ù\111Fׯ|
++\9c\8f\13t>E\8bþÎjíyß\8b{\95ü\85\94\15üyWÛ·þÀkóßáóAõ{j¤ë×κ   ªñü\9f3öü78_Ãx\8e\8b_VÚz\19\8eÓ\ eXù(\8f\99Ò\9cKðÜ4\1c\ 6Ì\95@}ùâæ\95¬\9b\80Áã\18ý\8cq<\ 5\7fx-ÛrÇE0Ò\8díp>ÄúÆåÿÙ}.em\ 4«kîÂ^#\832'r\1fð^ý#©\ f·®b¾\ 1§kÜÿK¥-Wáxüï\97þ\98mÁs[V·ü\8bá<\8a~Ëq\19Ö\8c\98×ò\1aþlÿÊ\99\10­â2\8f\9fFOâ\8d\1fn\9c\86káñ6~çmßó*¶\85ºÿ\7fÅ4\\v\aN£'1¯q\18\fç\82\ft\1aV\8d\1d÷\95ª5Qu/\96¶gð\8c\ 5£Ïr¾\87®óå¨6'>¼ð|æL°Æò8,\eÇÑp\1f×G\9bì\8am·ö<>tåò×wæaØg\1a\8d\8am{\ eÊ\9cÈÃ0:Î6\91\87a{kç×Ó\1an'qÓ\16Û+{tý»ü\88\8b8gÅÇ:¶Û\9aÏV\8e\8dÞÌü\r*OÌ\9f\8aK\9ea[Ò|ßQ­\7fëî<íE¶åT\9f£9\832ÿ\95û\10\8dã±Ý«Õ7\9c#³[{\8e\86s]öÛ³ùìåc~\8fµ4ºglû4ú\1cG\8dt¿+Ã\1a\1c£ÓäÏllÏí\17v?¾òEøÊk1àf\99È\17!\10\b\ 4¿J\94ø%^¶Ê\9ed¥3~Í)\12\88­M\15ã\9cÈó>\15·;\ 5\1d\93U9\ 5¢#ÇK\ 3íBvÿÍÞµÇlVÜå}\95ºï\a\16Z\8c\ 5\96]ÚÎý\12.R\ 3¡UØ.[.»\94[\ 4d¹ek\83\91Ô6!\86¤h7@\15\8d\89h\1aÙDn- \18z¡¥1Ú¢nÚZ\81\ 2%d\85õcm·\14XÀE.ú<¿\993߻߻ßç?bJv\1er6»gÎ\99\9b\99sæåùý\9e\9fIøJFz~ZÞá"¾*xñ¦\14\13\13éR\92\9fx¬"¹\87÷5\9e\86\1d®CKñmÊ:\a´5\ 5\87\1eä\80\89\1eßùÌ@xT\1f\19c\8cç843y-\82ð\9aµ\19v\97\ 1ÉÚ;ËÐd\95Ù\b£}ÀöÂz±\8b\89(\99ä\81'tô\am}çÉr\1a#Zå
++fAÓ\15\19»ìð1`\9e'\89Ã\97Xc\98Ác×\80ï#ö\93&F\ 6\9dÃ,\f\8cרÊ2~?\ 6çI\ 2kT\1d\fö±\81\11Ö
++\9f\ eX
++c\94\1e-uü­Æ\a\13w)<:b\ f\93`Av\8c\ 5U\87\1fÛf-:ýTAG£\ew¼û<\0%\16]EÍ=X\18ÆØzlÈ0K\Ô\95/×Êq§\19\87k\9a\8d$\0]\97ýâ|\8eÜ$Ø\ 6=­<ìî¸y\8ce\126\9cr÷°£Ï\18\90\18Báß1\82è¾ÇîI\87\8ci IR³é\86µX\8f1¡²¾1\9e±ÿ\81íÅ®\ 1£cqk@Ó\12ºE½wa¯³cø?ú¯\ 3gW\0\ff\8eY4§\82\8f¹¶\80¾\0\9e-±å\ 6Í]\90ïÜs\89QW\14H`Î\0Ï_\18
++\158\87?a\86\1a\86\bÎq\92³7>'Î7G!~\19g®>ÊC8\19ÊÀì\fI\82ïU\14      \86D\8e_ñG¤O\93s\193Ð-\96[\0s\8câ\10\98\ 4XÆY\vë\8f\15\1c\9cÈ\ 5`«i¸\ 4±\8að\87\8aØCb\16;ú/`ù\ fÏ\184þa\v\9b\16\89ó÷:\9aÒ\16\f\f,íí`KzI`\13\9b\8c×·òh.\83%\13:\19  =M2W0­©*Qµ$<Þ\ 5*Rç?\fÚ\ 2¶¬\ 5\8cm@DZàÐÕÎÿwtttttttttttttì       \98ãÿß|åÿ5¿téh,<\11\89¤Ï\1c¹aµðÌ\9aúÿ\17Nðÿ\93úÿ[äúi½\80õ\8d¯>ôò£w\16\8eUãüõ¤ß\96¬ÃqØæÛÖ\15\9eÔÇñh<\1e®?|ÍQ/\16\1e4\aÔ#üÓ\8d8\1ezôà\17\v\87\16Üxt@ãÈvõ#\98ãùwõ#xh\86çÉ\7f}gÕÊ7å¼\r~<ÚÙ¸Ä]ó\v\94\9cõÓþ\ 5\aÉõgá¸avåËr>Óßa£´\87Úþ\87¾±ê$ñ#Ð\ 6õ\9cØì°áw?Pô\ e\fý\ 5\8eÙ{xî®z\aª\9dß5\7fÁÍ3C\7f\8fùæ;\84G\r\ e¯K{ÎÁ±âµÛO\93ñ\12¿\86µRÏ=\1cË3ßùm9ï\93\1eøæëq\9cwçé\8fV\7f\ 1]xÕer\ f¹Ó/ß\7fNá·U\b\85WݹÏ`×sï_ûH)\8b¹p\84«\e·8­­pDã\×\1c_ïÓ®òâ\ f/\1dî[÷\97W>]|     L.mÙÒô\1a\1eÿâE?)e¶òÆ'I\9dôÁø\8dÿ¸úðêgP¹S\99ºÂÕ¾vüéOÔ\1c\v\95s]ÒÚ2­Épðx(\9bö\17\8dÉU³\9bï/eÑ\15ÎuûÒáyÓþ\ 2\83=§ý\ 5\967\9b­½ûò\92Ó!©ÊǾ¾tX\83Ó>\ 1;\9b\ fÂÕ÷\9c_êL1\95¾ojüï}+
++×ÎРêc1\1eú0\9d\9baçÌPçk·WÎ\9cT\85\94­müïG¯=³\96E]êÜ_\9e÷G8Îܾ²è50\81­\94=°l\98¯Óù\1e\94´e÷ù\1en\9b\19ÆvÝsÇ\9ePËL\1dÛ\99a\8c¦}\1e®\99\19ÆaZãâúÖ¿O\7fíÊÒ\a\13Réß\ 1ml§}\17\ e\9a(\9bï\83°u<ôïcßÿ[]}   B\19÷±<o\ 3Ûyë\15?©¹ ª\8fÅ\11ãalÏ\9dÝþ\17µ¬ríǵçMç\90ؼïп\17ャø.`\ e\96²4qßÑÅ\1f"Z[Ú²efx?¿ü'çý{õ3p¥-O.¢ÅQ|\87v¯ÅqÍ"þ    ã½çê¼ëðê\83\10ËZ¹if([5ûÐ\9d5\9f\83Û{®ì\88\9aëBÛ2\ e\a·÷ÒtÎ\8a\af\ 6{þÚÖç\96\962çÍ\1eôE\17N2\ 6\ 6\1c°nµÓVí\9e×\9aàÈ\98BÆqÙMò\9f\95·¡\9e0¾ÊÁ¼\85úËX.9zO/ÂD\8f\19o\95S        \9b\87H©ng4¹K¼÷¬Õ9fã\8ce¾ié ¹$§\99I\1au;êZ\93¡ÁzÈ\95+!mǬÎ\91\14jåÝæò1W^\13½ágÃç\9c<ó%Ç\84û3¹"Ê>k\9d\13ºãÈj1Ó2Y)Cª\88ì\15é2rp&R\1f
++ãPD\ eW\93\94²0DL0\92õèµ]2?\ e\93í        ÉÎé5\a\rSY\86r\ e1\9cd\ 3)?M\1aUS\90g^\8eq4\ f/\15ÊFóE êæUg;á\ec\ 2zÏìÜVW^/ª\1cæÇ×:Ø|\92Û\1ctÇMöÁÎÓDß\85\ 3U\92_\eCÀ¤3\95\87%e\89^(,wm\19ª\8b\91Í\f\8cM$ya\¼\1eI\96ZKeqXÔI\1aof\1eÇ\1dI²TËØ\aÔʰØD\9e\143\94Ý\87å"\9døð©\13\9f<#\80IÑ¢\8f¤\ eµÇ£<µ°­å\14\82E)?îRô¬   ó\90êÚ\98\17¨E        ÷M¦Ö¤¨\16à{9}\12ÉgØ\92áÄÊç\9a«Ü2æYµqZ(v\1aS\8f
++ì¾ÎÉÝù\1cü\9fç÷^$ÖÚð\95Éy\0Pn< NYëÜþÁ2Z\ 6\a\v\ek\15ó\8a\83\8b¹\96\83
++1`í²>ñÎC;,Y~¦óÂ\ 2óÎÓ§-ØH¹sæC§\8e?óÐ{¶Ý2c=f\ 1º\150@\8c\8erýh\æW\83\1d\80ñ\9cæb¡\9bbá9#:\10$\85<G\1f\vé¢\ f<§ðÞBùS'=Á
++QL\87\17\ e7,X\12\89éê\1dF\15£\8ckÄAÁÓÕÀD\ 6\99c\97Èá§À;6½N¢Ä1ùäí\97ðãÂÓ(øVc\90IDc$ùJbE\18Å\84U\87'\ fëãíè\v\82×"'"\17\ e¯Ç\16×p\8d³\ 5¤í³,¶\1cèè!®\15!\bk\8eþyÌ%íØXCçlÍ8{\9b\93©þ\ 4o]¬<f\193,`ªáSÒ|0\ 29tú¬`\85D´#Îå&À+\13õÑvÖãu\8c/\ eÝLp\82>\14t>\89LØàð.á\19L
++,LLZ¼\930\ 6¨+p\95È+9°Í0±\95¤[2gùº¦4Á°¶ñ\86ÇxÒ\7f\ 1­ÓÌÿ\80\ 1\89ß\ 4|ê`\v\85§)¾þ`0L\1f¾ðð=\12;óU\85\89\8e¯\16\16\98Åk\82Ro\86î\ 5\18\1a¼*øâÇÈ0ã\ 5Ì\96\14ý\ 10øX\9c\99Î\14x\85âë\8cÅ\8d\9f§¦¬\1dïºþ\7fGGGGGGGGGGGGGÇ\1e\819þÿs\97\9c³|~é\10sLnç¢'Ïú|á]UåûJ\8cûgq\ú£ßÿBáAUåa>Þb]§óÐ\9fÚâg§µâ]\8bwÿäQ%ÖÜD¥º>{GGGGGGGGGGGGÇÿ7Ä·$\ 4:¸¥l\9c¥c\17\ 5\9ev\93gÁ*kBv\8a§S\8dÃç\91èµcñ{X3¯\80¸lø #ªÉQ3\87\ 2kÉLT q\1d\9d%\f¥\ 4¨\r\80GFO\ f\az{\ 5M\17    ü\1cW\ e7Iþ\82Ì\1aTÎZ\1cótÊÙÒcÎ\1aºÆ\1aü>O    õáñIEÝùÿ\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e=\ 2süÿcÇ=µv~éx´MâÞ§ãù\1f\9eÿZùÿ      ÓñüËäúé¸ýíM÷ú\ 3;¾~r\89óty\5çoÀqê\13\87ü\97Ä·\aÆÏoj~\ 5ïÛñ;\8f\17½}£Æ£ÏK;YÙû^x×k¢\93\19\8fÖK{¦õó\9f\97çNÇÃonqØÓ1èw5]ìK\1e~êÁR\16j¬î¦E4ëUÓ\9e\9f\8e3\7f¬é\85¯ùÓË\9e©e¹\94½$÷ý1\8e¿yÏ%[j,y½ïù\16«;í_ñäÞ\83-¦õå\9fo±³¯\1eYcú³u¥\7f\9bZ\ 6'\1c}Ös%ÖZ$<\19ûÜ4òÝ^ç\16½p4´\94íÕr LÇho\17»|\ eÇêGÖìUÊrÕ\90¿¥i\bü÷ñW>Z4ä]mKÚw°Ë´NüÖfëé8ìm\8bhºïl:\ 1\17l\7f×Ï\96²4èî·þ}úÞó\9f\19tÛË}\e\9bîþtÌô7~~\98/?¸{í³µ¬Æô/\99\88§þÈ­¥ÌT?\97keþ]ζlÕwÕ²\1aÓ\7f[\8b§>ç\91÷~¥ÆaרçmûÌÕ¹k<uGGGGGÇO\e\16Õª~ët\1f&õ³\aí\7f\1d\95*qû\8cÆUTÜ6²!ù)\8cÑ\1dò¼\17ý\ 1\87z\82£¼\83\1abøçi
++,¤ûÑâ\9dE?BSjß1\92=Y&«\8aåï襦<\87   ¶Ô\8at\ 3:aø/ìf\r5Úq>8\8b­\9fFOs\8c\8cQ§n\ 6.AÛE\13\83*ôh\95§
++\ 1\ 52` `TL\f¡\ fx
++\86\11cé*\1f\8a\e\9d°\93\89D%\13¹3|Ý\86ÀÌ\ 3\8e\fÁgb\ 5<\98áõ´\1eÆYahÐø`){\10\99sÀeQ½Ð¨\85\92=ÆZ*\14 \87*Pl§ik¼½t)`áÈÄ\12~\81|ïTñ§0Bf´~\94\bùAK"RO>W½\8f\85\16Ò\16\ 6J\97 ÿ\81
++"zÐ\91¯z!ós&`´8·\98¾\81*\ 6\\bÔjÀ\b*ÆÑÃè\ evÇpa\ 5\fIí \99\17BQ\10\80:\0ÌZÏ\17\83ä6\809\82$\1e@I\92º<Uûɺ[ʳ0 \9f$6ó=h6\90\93Ãã\ 1µýÔcÐL¸\80Y\9d\99Ib¢¿\96\ 3fÙT¼\90\12Z&\81úXé|ßhÑùÀ+\89R\ fØ]\eÎ|ré\16Ó\19\8d f\asdeþRs\98õV{ê/äT[¤2e\180ôNt#\1c\98E\14\80Ð\14ï\90®s¬\99}\ 1kvX\v\v\14­\ 2\1aÇQ(Ã)ÑmÈ\1ao:¬,Oa\1d\8böÚL3'.G.~æAÐÌM\82\95iE\ 3\83i\11¬¦\8e\r\85\1cðã¦óÿ\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d{\ 2æøÿc\9eþò·æ\97\8eG×6\1ev\92ç\9f©:üäY_»ç\82\7f­úï\95»½Eî!\7f¹þñOæ¢ñ\1eª\9e\ 5¸      Ç½Ç®û\9e\94y\17
++\1fü\8d\96«{Z\1fýê\96çzý\ f\99êWP5´oj<ë´\96ùCM7þÕCÎ~¶rÚU«ýæÆË\7fj¿+\1e­Üt\9aÔ\9bg.ù5w^ZrgS&SÊîY\90\9bîèèèèèèèèèèèè\98\83ä\IÖ\85\94Ýn|Xª\9f\8a§ß\v³Jè@¯\0Ýò Ì÷;hy\¼\8f\99n5ôØ\90Ô\a\80õA\19<0Ð\e%J¢\16­ð\1fóº¸\90c°øA¨Sb¶\8d \1cþa\99\1ak]$mn\98\99 â¹ô:Òô\17Aëµ\89ôRQøíê"ó\85$zIÐq\86\9e\v\99$\83\r   ¡ä°ð^\8b\ f\87£\8f\93ÎÙX\93\ 3
++ª/þ\a\182\13òXºñй\ 4-Ñôo`
++      ï\84ñ÷ô\88±\86)m´gn\ 5ifF\87³\15\r\0¯\9dU6e¥\12=\99\983Áª¤¨5À\9c\f\1e&5\99ÞÆ¹óÿ\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d{\ 2æøÿW®]süüÒ¥£\ 3Z¼ýu+\9f^Ub¦Ã\92ñhKãÿ\97\9drà?I¾z¥Òx4nׯØq¾Äç§hóxtp»þÒÓ~ñ\9f%Þ^Y=3:¢]¿aöÃ7\94\98ú!îúÉ\89²ÏÖ¼î&\94xíe­¾é\98ú\87\17É\89~P«ó\82ÙSK¬ºõ©ø\ 3l[0÷ÀÌh¹\94Ý\8ecõS_¿·ÄdÇÐ9ÿ\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e·\17\ 6]\80ªm0÷ï¬Sý{ÎÙQ\f\80Z\1e\9er\ 5Á¸\98¬ÍÁ\18\8bSV±\90Ò\18É9\1d\9c·\1ag=\8aL´&k\95\83\88màGj\12\95\ 6g¢ÃÅ\8aª\ 1:x*\eP\1cC+¯\13E\1d\9c)aúÚx\93\83Uι\8c\ 2\8bf\99ä\94¡s\ 2E\ 6èù\10P·¯>\11V{7ô\81R\16\9c\ 5\9dÿïèèèèèèèèèèèèèØ\130Çÿ¿°ü¶4¿téèC¢o>\9fÿ_:z©iáoÜß}Dtû\8dÃùk\9a\ eÿg\8eܰZx~í\96\8cG_Z@ç\7fcãñ¿°ù\17þ\8eç\9dñv<z©é\9c\1f³Ãý\8b\9c÷
++ç¯\93ú?\8eãÆ\1f¿ûïå|ri<ºKêY\83ãÐ7V\9d\b\9aù\ 2n\93çò¦¿ºjå\er>0\1fÁ©­ýÇ|ó\1d\12Ã\1f\92rãѸÅöÿêEïß!íw&Î\8cÖËùëq\9cwçé\8f\16½\ 3     1¡V@Ó±\9fÖB\18/\eÊν\7fí#µ,\17-\84m\139\ 3®ºµæ\1aÐ¥l§\94íÏ:\8f\89âû\10\);bÙ`ã\rÏlدh(\84ªMpHÓ^¸ø\89¯.+:     )\14-\84\9bÅFïÅqÆÏ­~¶\94å\ü)ö_6ÜwÕwϾ£øL\98\|\1f\96-\92\17à\ 1¹o÷ú
++\17¶Ü\11Ó9\ 3\9cÜw6\8eßÖ\97l¯9\ 3ªFĦ6WÎ\9f½áWjY(ýÛÞlý\89;¯ø¾\94\19\1e\Üt .\98=æ«¥ÌÙò¼\8b\9b\86ÿ5¿·îG¥lxÞAM\ab:\ fÁ§ö\eæÃt\1e\82½\9a\9fÉ\9f§õÅ_\84AHR¦Z\1fÎ\9b½ò\8e\92O@åÒ\96Ǥl\ 3ûpë\15¥N&ó\94²\87Û}çÌ\9e|wÍ' J\9d\e\97\r}\98ÎCpjÓ¹\98ÎCàZÙ\19\87­)ã\90­®ù Zî\86UϾûÖ²\8e\95íù\ 4::::::Þ¾\98\88;.q×Þéú÷\bX\92\821¥Èë°¿´\12_­cÐØâ0ú¸ê\92'ë±/ÅÖ­ièS\1a\94tÊÊIªq£LÈÚ*\1fñO¥D½\9cúé\14\83\8abä&Pª\9cºçÉ[\17p+³*P¨Þ\9aÿMÿÜ ñ\14ÿw~îÜB1ß%÷C¦\10ºò9'\9f)\18\9fpm¶ìtæ6;S\aÝEm-zCÉ}æ.Ph ¶~AÂĽ\89Øx2ÖÜeã\14%íc\14Q|\8b\84\ e\85°s¹\ 5\98Y\0]Óy.^}\ 1\1d}\93\14\13\ 2D%Ülö\91ºð\86*úVcP(ó¯Ð$\95t\88ÊZ\95"\86Ã\ 5¯\1c¶´d\9aÙf4\1a½ÆeN4ðI\13\93\1eÆ\90£\ fL
++\8fnGl-CàH\va̹\80{ÑC\15\9c«.>ÌËàp\91\85\9fÌ=Á»)Ø\8f;\8b\ fµðË\8eºò
++\rÓ\92\9a!ºEs\11H}É&\12âFiѢǯ*\8d       \81ù\10TÔL\91\91Ø\v\87qÒ9â\1af\ 1À\10àá&2`\1e¿~PÀd\10ZØqF¼{f®ÀüIVÁ2\89ù#¼ò\ e\8f\ e\89úÿ\920\82¤wÂÌÂ\93ÙF\951¿\ 3¬Æä\ 4¾æ Ðî-ÓØ\97g:\85ÑP>\94ËS\9d×óµ\f$\97\81Ì\19Íy\8a)\8cö3?        ÖKÍé\80ià`\ÌhL\86\82\90½gú\ eÎâ\8c9J£F\8a\a`}ánË\f\15\9cÿ\8a\892`C#\19,ð£9wþ¿£££££££££££££cÏÀ\1cÿ\7fã¾WþãüÒ¥£\87\84ã$ñxÃò\ f^F~0&C>_¸Ý;p\1cöÊÊ\ f\15^[»ñhónó\ 5\8cGÏK=䳯=é\97%þßj§Æ£\8d\8d\9büΪ\95oÊy\eüxt\9fp\9dëp¬Ø|ÛGå¼ó8_ô\bîñü\85ïþ§ðÿ*\86ñè\9aÆ\v_ù­\ 3ÿAø|MÝ\81ý¥\9d\7f\88cåK§\b_\1c\9cÁõ\9bÚs\1fzî°WE§ \a´çf©ç\1eöùÌw~[ø\7f\9fôxtFãêWìPçÉù "ê\91úÉ\9f®x}Û\15r>Ç43º©ñé\17ýÀ~±Ú§æw\7f Ùèå\8d¿ùL)ó\95oÞÖü!¦ý\ 5ÖNø\vløJñ\17p¹æ\93o9ã/yø©\aKYðå¾¢\87À6®\7fî=_+Z ü?®sü/\9f÷×\87]P\9eçM(|óÎEò1¬nm¹|vëýUcÁ\17\1eþ¸}\86ç]ñã§®/ei\97<\ eôA¸oEáÓ)ñYî;Ilv"\8e[ÜùOÔ<\ e±ø ,i}X÷ܱ'T\9f\0SÚùdãý§ý\ 5¶,\98«af\94Z\1fÎ\9d½ü¨Âß[]Ú¹¼ù_\1cxôÅß«e¶\94]×ü/>¶õ\ f\8e+e©öáêVçy³G\97:£µ¥\ f\17·¶<øg¿þoÅ\aFUÍ\8aMÍOå\97fNÛZÖG¬÷\9d+u\92÷?ó\86S\7fX8ú¨;GßÑÑÑÑÑñÖ\82Ü\9báFEçäBt-¶Ö%\92£\ e[;Ç\84ì\13±Ã\123L:Ùd\9b%W¸u¶rÂ¥¾\98Â\ 29Ýßv9ê\13\1ej(JîÈØêDiòLú\16\15\1d<ÙZ´Ã\18\ 5S¤DÃ\90¯·\9e6ðÑE£Tæßñ\17flw\ eOÏC<³òhO\8c\fY\96\7f{Rà$\£\87í1\ 4®Rਯ8\ 5$\9eeâõì½c\9bL@}\91\14\86ÑÙt] \96ºõ\ 6&rz°½ò\ 1\16N\8a<k¦ººåF\93>
++1*&®Ï:£FRÌBQG\f\911      m\f¨Õùla\v\e\19\ 1\9ea'\9f9d\18Cì¹\8dJ\91\99èMFß9qHÕ\93&v\1aw)<::\8b\99@±y\f,
++råÛ3  kÒ·Tv¯|½
++
++}\b\8e\9bòD\9d|\f¸R2\11Ðaz!`§\eÅu\0ýÃÏ\1eEYyü,J\98'h7Ý T\8e> \\ 5\\9b\85åÆÓ1¾\89Î\1a\1a\91s>Ú\b\93Ó\85Ccê)q·àeÆÓû£»ÆÑ\ fDBÜ\19º\ e\eÂ@¡´\15ç\1c=)\\1d?\98\87\11ë2,\9c\91\11\ 3"ë%© \15¶Ò¸\1f\96àn¼^\8f     \83ó\9c\190
++\86°\9eÇX²?©Î\93Ýå\12\98âØéM1\997 c^ày\1cJíjÎ\80\8c¥\8aå\95\ 2Í\87a¢÷
++V\9fEé2géù\0;\ 5:·`M&L!¼  0\82t'    \81~"\12½O\a\fEo\19\fó&`dRàÄ¢l\0\1d\eÐÝÌÅ\83êÅ\81\85qþT\ 3ð0<\16¯fm\18%ÎP,AñIHLD\87FðGNà\12\8aì\ f§7W\9cøòÐë\85D?\9eíi\9c       ÿ\9e \1cÚ
++\vcIºÎÿwtttttttttttttì \98ãÿO¹Úm\99_:\1e}I8Ëi\9e\7fSÓÑ\7fÿ\8eO|PÎkãÇ£\9b\1fpaápÿ\87½«\ f¶«ªîï¶ÐÜ÷\b\ 1+V*©EÌ(\12\9aÙß\1fòÑ\fB¡N\8aA\ 2\ 4\b$\96OåA\80Ò6CQ3SfH[\ 6\98\ e¶tÊ8NuÚÇ@\v\8c´2~ëØBm¦\ 3£hE\8c\f¤OBÁÊÇ\8c¶Æ¡¿ßÞû\9cûÞ»/ù§\ 2\ f/\92³ïÙ{¯µ×Þçܬµ~+Ûá`[\9f\97¾ê_\ fz¬úLY/àÂþûóy\ 1¶ö~éýÿóÐ\7f«þyå'\a[zÿøx®ý­}>ö_½scõWë\10kÛLi[\8fÏí\7fzæwj\Bnm[ûØ\84?zË\86Úg´\8d÷ÿö½øÀ?ÑËtñׯ~g\95µü50ïëçòã;Zn8ÿʨ´]Úç\94\7f\9aÙêëõ%'D \10\b\ 4\ 2\81\10\b~^Q|öÁ\90c?\ 5çMÊÑißÇbt>z£RbX\ 1ã\ 2BÇOð\1a\8a\7f¨1,¹Üm[lBÇË¡\83õÖFôébÇÍ\91£ÒE~\95Ã\88ÿBGo\18«bèéÇôc$\a\82\v)i²\16@o9C\ 4\f\7f\82!M\ 1£q\82ñøQ\9d ~PÙ3v!*\b\83o\89ÿ_ \10\b\ 4\ 2\81\10\b\ 4\82}\ 1#ÿÿÖwýZXØ:\1c\v{\11ÿÿî¾.À|ÿÿõ}\1eú\91\ f¬<«æ\93ë8lyÑã¼\0?êýükVÿê\ 3Õ\17nÌp°b\92×Çù\ 2¶ôß\9f_/à\90~>óë\ 5Ô8\82ñz\ 1\95ç\7f¼^À±=\9fý¥g\1dõ\¹î-®ï,ó\19ç\11\8c{\13çÿèáÿ[®\aösJ\9f\ 3ÿ\8e\97ÞRø\ 2bÌäG(\7fß²\9aúùòaÛK\\83Îøþ\96%\9d\\97üÎaEÞ¬¬\1e\ eö;°ÓÛ\9f|ø¨\17[=\ 5ô³¶Ä\10\8có\14\8c8ðçò\14L\ e\\99ÿGð9MOï¬ë\95\1a¿ÿºa'óÙ\7f3ýD«CÐê        Ì\94ñOÃçÂGv\1f\108Wï»\7fª\9bóç?±ñ¡Ê+`Z>û-¥\8dyþ;>yÚÓ\8dsÀ×ûf¦:\99îÿä\15OÕ¶\14*7þº¢ÿÅã4¦\87]\9fãõ\v¶Lu2¬¿û\ 3ÿU9\aTã¸\9f)kÁ\8e/zjÙ\rµ-4.\ 6WúdnýÕoº`Wã#hõ\ 4~Ðs8\8cÇw|¶·çÓ·\9eÑâ;¢®m[ûµ¼î Ëj=\ 1\9dS\95¡ò\18¼\a\9f\17îØôT«_à\i[Ús\ e\9c~ÿå\ f·\1a\ 5ºr\1cÜWÚØñ\a?7]Ç3!Uù6ô{âÞ\89K¾Vë\17t|\ 4ªçÅØ=uùwk[nãÝUä;\81ú|vÃßVn\ 4ÕêOÜ^ôr\ 3÷È\9d\97<ÞÚ\9a\1dv6¶avÙ[k,\8f1µ-í\857aûd·'6>óË¿Øx\13l\95azY·Fã\9c
++ÛK\9f\8b×K¸­\1fïù{ßÿHm\8bM¾åý\1e<}×UÃÊÅ\90Ú}kz\19Æë,T¾\85Åk)ü`Ùè¾÷|¼¶\19UmþñÉQÛ\9d7×¶\1c«|_\9cêä[ÿôÉo®5\18Tª6ÿâ\9c>ïªúÌ&Ö¶Kû¶SgWÜ]㣴­z\99è×ý[\1f»ö»µÍú:Þõý\9e¾í\v'îjqU1É\ 3ïg\ 2sj\v[Ö!y\8dù3´R$t±ÁªH"oÓ8­{_\a:\85tÉæ`\1di\92YPd/¼Æ\96lÖÌå¥NRɱ®ãX\1f\14\8e9&=j\15\v)7Ód59¼\1d\9e\v\14Éá\162!\a\85q\98¬\e\99§\89qIÇlÐCd:­ËÌ\a&ó8n\80®\98\96\f\1d2ÕÖó q\1e7$t\1c5&¯\1c©Ás
++¡p{ÏË\99d¾2\ 6Ç\12à«
++S²Ì§\8edÛvÌ\19Vd²¶P!æ\9cѪ\8c*\15\97É©\8e\ 5õ*\95å l\10&ãFªÒXæ¥2IS1±9áanYXÚ\16âif\7fc\ 5\95g\16tv\9e\1e#Rpc!нMÍ'f\98ê­Uñ\ f±ìR\9fkþ3\98Ó\8cuÂ*8ª(8\18\80ò¹ñ¢\87ÌLa¨Û\91[>2Ù·ø\0-5«²ëöO­Õ\rÛÇ\1eÉ%w\1c\82%\133\84à\ 2\91\11=\86¨\12\97?\90ï;c\11"V\1fz\85lª°hÛd=\8c¯ÔÈÆò`Á`úxe²\85³\¥\f\e·LɵÍö\1dlc\11>\0l4\aÍÛÂnÎC\7f/|è\vó\94±\r²*,ú)êÆ±Îty\ 3y ñèK_dõ\ e\9ecÁRmÍ\8bfê2¶Eëç\95æ¼ç\99¥\99\7f\8fç\1c³\8f]N\13/\9b¯²änsñ\1cv­æ\1aÂÜ2é\ fp,aݰ\8a\98za@ÀZ\93Â\9dº    Ì´Æ¶áõ\89\92\r\ f?\98¡Ï£s\8c\9a\86áJ       \ 3*¢¼©A_0v\92ÀÃ(è¼u\86ôø\86Ãá\ 2÷\ f\ 3\92Y\ 5\1evg¹u¹¥x²`õh¨hI¥/Ï\93\90\15Ù-\97
++oW6á\1d\92\1cð\9a\85\ 2È]\8f\93Áwóö\C(¨0Jp\18\18\15\96ÊÔ\83ÂGS«\ 2Àþ\1dl\93\85\0¼W4\eCþ   lTEÚÿHÆ\b3\92\13zrùåà\96¯ùùÉÏy.Ìåyè¸î_éÚ\a#^\0\eʾÅ2Â\88!¡¥\9dã ÂFÎ\z\9c\fÌÑO4\15\18 \rå!\9a¨   <Dñ¤\8eÜ:\9eG\1eþ\1d î×\1cw\87øÿ\ 5\ 2\81\10\b\ 4\ 2\81@ Ø\170òÿ¿áK\7fù\86\85­KZN=} 7\1eìÞS¹ÇÝÄܼý£^¸¥øÝ\92óq8¸¾Ïm\9fë¯îrÞ\17÷\aß³\17\9fèL\9fï\7fö\8aé\1dÕ\7f©umÛÚÏáÔÙ\13\8f\ 3I|\\ 2\81\10\b\ 4\ 2\81@ x5ÐÅ\eì!®i±ø\13Ç@\r¯b`øJ\8bÕ0:ÛôÓ\8eW\10ÿ¿@ \10\b\ 4\ 2\81\10\b\ 4û\ 2FþÿwýÖù\17/l]Òøü\99·zÃÛ6¯mþü\89á`g\1f\17°ò\9f\1f¨q\ 1*äáà¡\9eK\7f~Þþíýõ©Ó~ýKåzTz8ØÖû÷÷\7fß\9bK>\7fÌ
++ßß='¾àüo\95ø\82hóäà®~>ï\9b}â£\95\8fÀø\9a·{]ß¶ùÉÍ\a\81Ðr\96¿2ºïÙ\95·×\1cpÛr\8fïïÇÚ8{á\115ÆÀä\96çÝÏo<·úñþ¾\r³_ùLÍ\91v®¶m\99Ó¶°¶ü5}Ûx\9eð\8fæÄ4<xg«\11ï¤6\80\10\b\ 4\ 2\81\10¼ö0\87\83 YO\96\12£
++w\8b±ºÄ (&òGUxq\94Î*+\93³&ÿ\85ó\99ô\råûsù\15\*\1c.)-ÂUS¹\ e¼×$ Ð9\16.®n\ eâÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81`_ÀÈÿ?Ø\7fõï/líxæI\f°y˪窿ÝÚáàÐ>Ï\7f>\9fÿÇÊõ³ñ9jûÌéÅ\7fí¼\1f\ eföÀÿn\ f<üÏô¼÷\7fwùÊ\9f\94ë\81ü\ 2£¸\80ßxá\ fK\@\88F\r\aGöñ\bGÿËþ\85#<$å&\akz\8eìåwlüZ\9d¿j~ÿ\eû{.úú\8e/TÞûà+ÿù±}Û\85\ f\8eÊ{ßñuÿG\99\ec\19~|Üi\8fÖ¶àê}\a÷|ÝÓ³G\7f¼qâÛzß±Ë:\99Þ{Ûû\9flm¹r\87\1fÙ·\8dsâ×Z\v\9cËú\87Ï]Yùäuãi?dY×vî7ÿQ×8\83\18*¯B\8d\aøKKÏ\9cm\9cê\8dW!Íá\15\9f\1fg09xêÀQÛ|^\85\8eÇ\81q\14ïÞùý%-¾\83\14¥\ 2\81\10\b\ 4\ 2\81àU\ 2kD\0\96Ì÷1¥Ø×\90\ f\ 2J«{`YD\80´ù\81ER&FõBr,\95bXÖÄw5\12\16ÔߨuEL\fÆæ¾&\a\8b\7f¼Lµ\ 4^é:\ 1\vkthGV\7fVáɺÔQ*õi\1cîÂÏ­d}h¹ûÖ:ãl\84\90¬PÁr)õzf\ 1\1e\16Æ(÷%\87ÿ\ e\8aÝ%\16fêê\82`\9a,:Â\89·1¬§(Ñ\ 6ÖÇa­\rV\ 1(¢`LH\81\91\12¯\ 6m\144ìXoÄpQ"EÉ\19ßµT\83ÂÒ[Ë\9a\1cè½õ-þ\7f\81\10\b\ 4\ 2\81\10\bö     \8cüÿ«.þè¶\85­ÃÁu½/xÕ\vg\9eÔüÿz8pÅ\7fL?ÿ\11ÛgήµØé\9f¿¥÷·ÿñ»ßô@«\17\80ë·\95ë÷ásäs\ fý°øÿU\f\93\83õ\avßÿñ=\9d\7f\9a³¿¦ø\9aïÅgÓ×>ïë\18!Ô¶Må>ú¶ÿçð³j\8dnm]õ\97ßRÚ\18SpÆ.;Óê \98êÛÞYÚ\16¯5\90J\eë\85\9fñÄ5ÇÔ\\7f\9fª\9f}kïó\1f¯k¾¥×Ñxýî5¥Müå\ 2\81\10\b\ 4\ 2Ák\17ôáz£èX\8dN§À\0ß\ 5>^ã}õ\85\17\17­O\86\95ÞcÆÿ\9by9àÚè¬\83ÎÉ\85È|íà¬-\95â\83Mté*:\99­N¬%\9fRV&²Z¼UÎD\8bñYE\9e¿\98Bq\f[å³É*j\93-¾gM\9d×O»Æ½\81H\11òiã\13î \8bÚ)LÃ\96ºõ\ e\12\vÛ\aL0Çl0/ú¬!\91+>l§é\8d6\89ßÄ\14Uô&@GM¯6xWb\10\1c&§r
++\90Saü\18(4ækñû\10]«¨Ð\9f     
++²¦\14\13ÖÃ%H©#\94BqéLÏ\86\11cbm"´£sÈ\18:`\1a9\aÊ\1e½V)CXC\9dr\810\ e\14æ\13\160BdÍÞ¸\12TS\82ölÀ\7f©ÌI\18íñ\8bTCY¶è\19ÓÁ\b!\e²ü£7\97\1e\7fT)\1av\82\90\8f
++
++Å\92C¿\18\11j\82Ö#4\94¡(h\1dS\b6\9b2<ÖÖà[
++Âh\86<XòÝeô\aU`JÐ\16½ÿ^é h\90ä
++\88TD\b.r\19\ 3þ\b\83ÀÊãZÂl9&ì\91¿OÅÿ/\10\b\ 4\ 2\81\10\b\ 4\ 2ÁÏ?ä÷¿@ \10\b\ 4\ 2\81\10\b\ 4û\ 2Fñÿ×¾þø\95\v[\97\f\ eícÛ¯_ùÄ©5î=L\f\a\a\1fÀëãü\7f+Ê÷Çó\ 2^\9cê¾ÿÖ÷¾ýùZ\7f/\87á`?\86Æ\17~ÁU?Yõ\93\1aÇ\9f\vH^»#¾úgß.ù\ 2\9e|\81kK?ã<\82«K?Ì#Xzò\e¾Zø\ 2\95Âõ\89\vN\97ùÿ9>+_<ù\9b\85\19ÌgÃ\ 1\9d¼óù\ 5\9fês\ 3V½xÁ£õº5ÃÁg{n¾¹¼\83ÃÁú\92»°\1a\9f#¿|ØöR¿Pg\8c;ìû\9f[×p8Ø2Éëo¤¼'\1dòR©³¨4Æ];Ùéí\84\vV½P®;Î\7f¿9ý¨óÊõ âäàñ©n>\17|ÛþCͧЦæ0l*}1gâê·m®ü\83Z·ü\86Çú<\8c÷\1e·þ\91ÚæråIÜÝÛÀ\15³\93¶¶\ 5S9\ 6·õ÷\9dgÏýnm\8bí¾åK»û6Ï^^¹\10\8d\85;\ f\1cµmþtms\8d\vqbÎ}¿}SmË©\8e7Ó¯Ãïîºæ­\8d\97QÕú\8f§LvsY¾¢ÍÅâ\9fÒv[ÏWyÕòÍßkm\8dÓð\8býZm9fCÍA±NÕü\8dǦº¹LÏ\1euwåeÔ-ïã\942ÏßÄç̿߸«µå:\97¥\a\8eî[È\ 3¹©¬Ýâu*\87ý}\97ÏnÿTÝW±Ëk)ã\9d\8fÏ\ fï»äÙ®­ÊPs^¸\8f¾ó©÷ï¬mÉ×y^YöÀGðùä¯\ôxÝ\936T]\7f¬èì\1e|\8eIç<ÖrlLã¹ìeÿÀìT]÷\1cLísy¿î×\1dtÙ7Ú¾MU\86\83û¶«ï¼ì\9b-ÇFÕy\ e\8b®\17Ï¿©96Kðùàç¦+_¥     ©ÚÒ¶~\7f\9f{S×gÒU\86\9c£³WLï¨y;°Þº\ eý>\19¯ÑyK\91\9d9=WÿÓô#µ-ªÚç\17§º½2Î\9d¹z²ëó¼ÙSÊ\1e3A§Úö\83¥Ý}×¾ý¼z_TªÚî\8a¥\9dí\9e¾ëªamKªêóðÞæÇk\82\1e~@·§×ïX×µ5;{¨Ï/ZÿôÉo®¹G\1dO©; ;S^wøôã-/©q\9f\1eÛ\8fwêì\8a»+ÿ§¶U/iNÛ\157×¶¬ëÚÎô\9c¢¿§Ox²å3¥:\975ý3áCKÖÌÖ6ßôrâä¨Ï\99\ 3j[\8aR×TðZÆ\9c8^¾¶dÆ­\ 6ï\r\9e¸¦ñfi­¼Ò\1a\e\ fÏ)ï\822©^Ï\ 6×M0        [2ñ\ fA\17¾'þÙ\ec¢   ¡ÔnÊ6k\8fCËâÄÃ3\ 4§ºÁ9¥­O6\97@W«\83\8b.àÙãsrÞª\84ïi¼çX\1xTÛ¤=.\92Å7ë\18\19F\e\12ÃV3Ï^ÍHT\cL®Áé\8fK\8c\89ÍV+¥°I\19eì0W\9bñG\95\19|\8cÇ\aÄ2Öã¢Ã\1f\r¹²\Я\ 2\9e¸´º\ fæ\ 6íC\7fÐknµ¯ð¸M\ e*Ñqþ\1aN,Âû\ 5y=fî1\15eÚ÷\rnf¸1Tc(#\94Tâ¢-õ\rYÐFýέñ\ 5\9d\85\9c\93\e-{k\1cäc®h°X\95\vV\ 4½j\86`c] 0WÝâ>ϼQ¬ Í#`\91ñ\0Ð>3P\1cêÑ\ eÏl\1c§\11ZÏÐb°\85\8a\8d=a®\I\f\1d¡ìä eE\9bÃ+Õh\8e0 ¨\13/K4\e¬\96\9b¯\17R\92\95UgX´µóí\1eBÓî1&\16:&\8bÁ`°\86lÙΦà\12\16\ 6\16Ë\0ð\1aÏ^"¾}äZ\91#Íá     _t\1a\7f\16\0cÂX\91\ 1à
++z\80- ;\83^q\87µ¬fÆ\92fX\83\90\f9ä`R^yØ~$õ\1a-\ f;ÊCu\10UÅÄ\80x×xä\ 2v
++T\90¡}ì<|e¾¬Á\97y\94õ\84\91©\979Þ=\ 6L ÊíËù¡26xt\94\ fßC÷Íf\15ó\ 10\80\1aÙø¢\9ctL\ 2\80\11Ô³Ã\aÛÉ¥É\ 3\87S\86áñ-/`âeâêÃ\e\ f\19ÊñN\8b+\1d\7f :Je¿r÷àØ\80Á\ 6ü\ f6\80_\94ÜGÔ#ú-\9b\v\ 2\1d\8f\913£Þ\13\97\s\1f\1a¼3e2§;\ fY0m¼\94f,§M*R{xÕL84\ 2mÚ±g\9c^\86\89\ 4\9aB8ô\160+XDÄO\95PÞ­_\86\1c        \1a\89\19ßË0\7f\9eh\11\87_Âî+ñüøm\85ó\f?EaÏØ    ªh\1f\12Á_ê\ 1zC\ 1¼móÃ÷ðefG`\v\9aú£\87{7³\ fn|\8béâ`Æ.Ç£\ 1¿\96¡\1a\8b\87
++&\1a¨-\9c\ 28-8I\9cc8\93 5%þ\7f\81\10\b\ 4\ 2\81\10\bö\ 5\8cüÿ\ f]|ë\83\v[\974\7fûBÿÿ\92Áº¾\ eÜ\roÛ¼¶ø\9fµ\9b\18\ e\9eéýÕóýü×ìÁÏÿ\89â»»\19\9f\a¿±üùê\13\vô\9f÷>¨£_p\ fWÿ¿²\9d\9f\9fþ§KÏ:ªÔ#ôÞÒ\9f_æ3îÏßo\8e?ÿ\ fJ?Á\e=\1c¬+rÑï¹ô\8c×ý{\99¿OzrpJégq>Â\eËØôO~ø¾êÛÓÆ«æóìýîãµ\ 4ï)÷\9d\86Ï\85\8fì>¾ù\97]õ .ï¹
++¯xÚ¨VKp\9eo½úÁÿû\80Ú\96|õO~e\8e\7fy¡_zS¿6\97>}Ò/´\18\8cæg|°Ü÷\17\9cÏñ\97W\9f5ÿ\92¹´]YÚè/\÷Kk«\8f<ææË¿±÷é~æîæ#O:TùvOvã]ôÔ²\ej[h1\aG÷>ÏË\9eݱ­¶u~éMeíWãs»;ÿÑæ_\8eUö»öÂï¸bª³%·ß\86'k\9bk>ëc§ºñÎþþ1Ç×6oª\7fòÊÞ¦6Î\1e]}ÁÆ5\9füÌ^üËé®í¥ã¦«¯\eë×üõž\16÷!ߺ´³\89ñÚ\8c·öò\8dû\97«/\98ÿÚ0ûÌG\9b\7f¹ÙÒÚ¾þå9³§V\19\92k6¸¡\1fï\9cGÞøéÖÖ|º\87\96ynàº\7fïÄ\ej\9bo󼦴Ý\81ÏÚ\1d\9f¿·¶Å.>`Ùh¼\85~éýz\19Æ}Áî n\1dNýÞë?^y@UÓõ×'»õ;ã¦5O×¶¨\95\1cÆ\ 2\81@ðÿ\ 2}ÖÊ\1aú°sñ\93Ùú\fXÄï]½z\8doKG«öP\83\8a~i\8d×5\9d\1c:ðA7\9f\19£\1a²ÁÃ\89\8ec7â5ÃS@Ó3©2Îuëø"d|v$0£Ã:Å\8cÇ \1dÇd/3t\9d:OV3²Tá\8e\89Å·\1aðÌ0ô6&G¿ â0Æ\86\88÷.Kb.\1d\9dJè=(å4\ 3\a<»ó\18Êë\90\8cµtÑÒ\97\9c\12&\15={Ê^ç\8c·Rºë\94êü£\vã.è\1fÄ\98.GrlyLÀ±úYÐÖ\87\18 Zæ4é\12\8eÎ'²nyúÛ\14Õ\8dÇ`ÈPK¦§SE
++\0mb9èùçúäìèÜô\81/'\ eZ\85ôÉZ\12\92Ñ\ 5\ fÍ0*\82OS2\91\910\fW½%[\99ÅZ`\1a\8c>ÅLm*c9\83\ 1\1c½ô\8c\1dð¤\89\v\14Ry\9d Np\85    ­D¥\90XN9È\85\113\ 3,².o\10\86\14u.\ 4²Õ\ 5ôí[¬\ 4}\95\11¯-¦ø ]bh\81S\1a³nq,A\91t\r·$\ 6ªX\97ÓÈ\ e¼Ã»\1eG\ fQµ:h{\8b7ÀO\ 2³Çús]|\80"\9f\1aÖ¤Z¸f    ;úk5}ëÐ\9e\87ù\96\88\92\98éQf\14­õ0\1c\98ºá~\b\86ßç\9f\1880±Wߪw0SO\86½È\10\1dSHöðvÎ\98\93`\18³A&5ÆØ0:\ 3\ 6\82¹dF´\84B\15\a;uôâÂ\94\14yåÚ^Ò6\96÷$£1\1d¬Kò£Ø\ 3,Þ^bZöÆ%\bc¢Z}      îÀ¶Ï
++ëÌø\86à-ì\81\ 6F\991¡àp>\84B0\aíGMUFH\0\1d\1a\96¬ÃÖ\f\81\9eõP,\f\9bU3P\bV\90è\1e\ 2®Áæ<t¢<½Ø°\8fàsbD\ 6\ 4\ eT±ªv\10\13©õ"Ì\95º\b\10\87G\89\ 4\8e&|\13\9b\8b\ e\0¡ÌH
++\1e^\85\86Ï\87>F!B¸È\80\16\8c\f)\15Y\13±>^%è$)(ZñøÀ\ 2\1a¥y`xl\ 1F\12q«k\152\86Â2cBÙ1\98\81\91TP\19¶s\82\ 2è}WT.& \19\ 2+\eR\eÊPH\f\80\8dVk!R'¸\v{ÃY_×µñ=\96ÿÆ>ÇA\14KÌOH8\80Rv?\8bñ?âÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81`_ÀÈÿÿÒ_ÿ\1f{W\1flgQÞï\19qrn\bÑZ*¶¦¢!\96@¢î¾û-hcÇV\86BZP Æ\ 4\9c\11\9a\98&\84vÒ6£82S¦~¥H;­c§t\9a\19\99\12$bÔt\0Ñ!ÌÐJÇLEAù
++J1\¡F\94Iü ~õ÷{vß½7÷\9cÜ?:F©Ùgr&É»çÝ÷ÙÝg÷ì¾Ïóü~£Ù\98Ã\19~Ê/¬\ö\13ñÕ\19ï\86\83]rý\1a|Îyè¥ÿ#~uϼôk«_úðüöUâG\Íë?¼ñ\ñ·wÎô\1c\7fãóÎs\8c\81ä²ï»p{ö©+\9dý\99ë«\1ftL^¶<\8b\8a\9cÿá·\7f½ä^\97Üò\15RF\1fþ½¯^\95}øÁ\16\7fôn)\eï\eßYÛµfê\89\e²\9f׸ì¯Í±\a\7f\83ÏÊ}·ß\90óe\95øO\9b4iÒ¤I\93&M\9a4iÒäHRüÇ)2¦"Ò-í\83\95Üòi?¿ULJ§Û\97Ìwtl\v\82\92ÑÄG\b\8c\ 1`\18\ 1Î&\9dÑt)KÂ;³À%\90\99\11%]R¸Ï1v\82øX!z\ 1\f@I\94º\1c£\13\88\90`,ÑBJf}R\82Ëá5\11E\1c\1e\90c\ fBò®à\b\ 4ßÑc\9eÛÁÔóÔy iqÊwÊ*\ 1vH\9eÁ-tT\13ê\ 3\15ZË+\8cCq©S\11UÛ¤qfô\9aq\bô\82{\ 6<¸@8\858ñl\8euèñ\16\f\9f\99¬\12h\1751#\1e\86\112J"q\82&1`à\17\15\11-\18\10\90\ 4ñÁ\12\9f\81(\12*¹hºÀ¾'VAÇñ\v)\99`\88\1a`}\b\96È\16\ 6º\18\8c:\ 3\90tÇ`\9c\94­#²eüvÒ>%Ư\98È@b2\13úÈ3oóÿ7iÒ¤I\93&M\9a4iÒ¤I\93&¿üÒÎÿM\9a4iÒ¤I\93&M\9a4iҤɱ Óñÿ_¿ñ_?6»t88Pùí^ù\1fÏÛ\97qÊÈ«·FbÞ\89{vÕë_òù\82ý¥\86\ 5'\8e×ç\9f\9dr=(=,\9cR»ñYúô=ß\17<?\15|\8fÛG,°'\ f.\16~;kxý¥5¾ÿpܾçK\8cþhÞÁÕ\95\97jéCË~\9c¯'è¹»ÖsúÁk%¿ Zò\11.©y\aÏ}üE¢\7f\r\aË+OÜûÞ}ú¡\82kh'\aWÏÁsw@ÚF~µóôÆÌ½¦3ïÅdá\ 1\1cÏ\81wfÅH\eå²\9b¨9\f£|u{«\8e·~êò'r~Cô\19[íÖÚ®O.¾$çS¸Îç:ï\9eæ\11ûâ[\96el<ÝóñI\19q\b/xÒì(¼l]Îo¸NÚ>\9e³í\aµ}\97L\9dý\81\82\9b\ 6\ fT]>1±îÞ\8c\9b\17}názß\9a©\85§d»êº\8cc·oFÙ\86Ss\99ѹÎ\8c\81ÏÛ¯wf<º®`\r\87£\h?\9a\81\9b·ó\94Â\85\16\82:\ eç>vÛÇûü\8dÂ\8bx|ß\86\a·¿ãk¹Ì¸<î\19\8b\8f¹$w¼üÏ\vßYÏ«÷hÕåìýOÍ+óÃåö]Wm¾áß5iÒ¤I\93&Mþ¯Â\98c\ 2á\912Ñû\10
++®\9d!~!þöÖ\18A^ôä\90#\a\9f±\1eÛIb3F\86z\a¢/\1ae»`ÈöHÄ;\15¬ÀÝ\91N.a\1f\15\87ïõÜq:Y\ 2¦¥èq\8fÒ\ 1»vV\10\8d\90\91y\\vÊØÐyF©Ç\18"  \13\93I@Gª5\ 2\8eô\888!\90\1c0àI:ùäºè     \90ÆØq\%¡["\88\1cõ\13`8ETD\17\1d\83Â\15÷\^Z% {ÚYCø=\95¨D§\9d'Ñ¥\v\8cËv¤b\8b6\90\93Ó\13ï\8f\0\83\84\9e$\1e\9b\12*Ng\b×\88'\eEÀ7c\82\ eÄ\ 4TD\99K)jÂÒu¤ÁTÄ6dk\19L\ f\1dÐ\8bÆG\173\f\11«\11Od\8f;§CHÖ¡¦`c N ª7±Ç6,Ü\7f\12\ 5Î\86$ôÆQà¤C·:Â7[T¥+¶ç,\9e¹gY~\81\8f´9B\92\1aØ&J=MÁ\90\ 1Ô*h\95\ 4;\ f\1d\80k\96·\12ÅOÁøÐ;\8c®7¤(\f\8cx·IzD\93.Uè@\85Þ\11æ«<\ f,\99çQ       ¾&j\88ÚOç\`îDù\emíÐ\89\ 5Ër\1c'£S!ö÷y\ 5\15#\86È9Áÿë\92#Å*¡\e%H¿ç\88e~\ 1ÛFFÅÄv\ 5='\8e«<\9bv7\9bï\11zx¢\94Îàï\84%y28\ 6i_\8an&ßéÌóÿý\v\9fsÿìueÞ`çXüÿáàn\1e{&>\8aÏâï-;«ðÌÛá`i}_°äο:?\9fM-Îóï­øøK?·ì¢|.Õ8\87ï\9a×\9fe\ fç\v\88\7fÙ¿}î\ fò¹Ë§á`{=\87\9f³â×?\97ÏU]7\1c\1c7\7füû\88Ì\rþf\9eÿ÷îx£\Ç4\1c\ eö\fÇ¿\8f¸Kê¹\90ï\18¦\96}W®'ê¿þ\84\e6å÷\vÎó=®ùãßS,ª\1cï¯xú\ 5?\94÷\vP\14õ/\1cÿÞa(ï\10\88½¿øwOü©¼w\80\11N\ eΪýù¶\87ÍÍ¥\9fËywGåÔ¾|ê\v§æ÷\ e0\12)[Q¹ÔÿáÕ\97d\9c\ 3íC>\7f~¦r(<xóÛ¾\9dßI\98Â+pß\1c\\ 5{\17öï\b
++öÕw\12£\98\v{&ûóõú§^øÙ\\ 6\9b\94²¥s¼¯ÈØ\10×òýÁ\19oþR.³¾`ä×ûÔõ«¿\98ùîMy_±EÆ\96\ 3pÙ£\9bn,e)÷Ù\96\8a=ÿÈ-oÏïj|ÏG\901*hCê¯/~$\97¥®ð¥Wü\87MS¯7\19\eÂ\17\1dRF.\893âê}¥¬ð\11¨ú\8eà\99ßZ\9dÇ\ 1Ë^nûU¢ç\8a\89\a[ë{´û?½ña\99\15Éuî\12Ûº\b\9f\97\1d(\1c\a*·/s\a\10\8bâ\ f¿|þq\85gC\97÷8\95ÇàÊçýñWJY̺ì\99×\97ýéM=ÿ\81.íÛ6Ù·á¤S×e®\ 2üÀå1ºªÖù£ù\9b¾\96ËRy7´Tô|\ fmâ¦u\99\7f\9e?ËR¶f\9a·~ÿ+N.ï\15\v~ÇÎÉÞæÇð&T[ºäÀ\v\9eSx\13
++§ý4¯À»>qqæ\85Àïb¾ïÄùG~ot ®5«¾ú¦\9eã åöí\9eßÛõ\1dÿøûÿ5\13Û£\7f/\96\97\94÷Fºð-\?ÿÈï\8dÞ[çôïÝÿЫòZ¥
++¿Ãî\ 5G~§\94¹UÆñ-49föù³1Ü{¾jâp+þvZ\ 2ÚDIù#Ù´\0«;fFZIk\14úul\1c±çÀö       _Ó²\871\9d \c_\8bú\ 3Ù\98±%uÜÄb\ f/\e_\82
++\v*7Ö\f\8bí>ó\18\85íÜ;%pÔü\1av:\91hØXÿ°GwZ`Ê\ 5\0\1c5øè3×v0\ 4a7æg\81\ fýÿñ\1cr$\8eo<'æ=9Ñ®\15s[;Y¼û=ß8\tE\94k\1cã »\8bý>\969¦Áñ<\80\9dgæ/\9a\ 3ç|ö>õç¹çÖ</\bf¶Ã\8eÇa[L|îþü\9aù×ûsìDåeG\93\98ÈÚ\9fY0\ 5H`N \7fö?w::gÙbìa\1cB\ e\80ßÖ xöA\97{a¨'Þ·Ç\91Ærðy\92ãé\8e?m±ä6k2\8a\9b\82ÉîÐ|\1f9¨Ä\19w4
++´\9an\19ì\10SàôÀ©*\92A\1d\1dÊ\9d\18©Ôy\14´\98\ e\8e\87K\1eÍ¡\fúO\93\13\ 6Ì;\9a9æ#¡¹1}Ȱ`\89wn´\10\94+2\9dÃÞp\1aÏýEjô `a\91íb\8fuLw\869bn:\81ÃÇï\ 2\8fm4y\9c?9#ä\14\0³åS±\14xÜJät&m\9b\82¹\8f¾&Ï»$-ó?^\971ày\90\16õi¢Ú³ÿåß\1e3\95U*.\13ä[\10Ê\87È,i&m\e²·ûÈ\ 6\92Ì\0\83sàÜC¿)|\ 5\1acöÉÙ\87³Ð\91E\9e'W\1c\83
++\11J&O*\83\90`v=W{\7fÆÒÌòîÈÐÀÔì\80q\vý\9cøÙs\ 4à\vX2\ 35ô3rº\13\9a"¶Ò)Î61òT¸\13xºÅ\8cQr\96Ç\88s¢Ø2oI¹ \19à\9d\15þ\rÇé*C\87\85ÆM×\8f\ 6ø|vdKP?g&úÅ\10½\1ek;ì2\9a$\v\19'Y\80!qÒÃ\88°ÐG\99&<¡:NS¬ô\ e\1711ðû\0ݰLz2u\19¦¼Ãb¹\¡\8d\9e\87Ô\80!±\ó\98M\8fî\88\z =\ 6.ñ|Ì\11QÁà±\ e\86\8d\8b\96L\17ø\ fFN\vÇ\ 5\17\14²\8aØ\14åÝ\ 6\89\11p\ 3\16RK¾\b2y\90±\ 3\93Ïgb\83È«²\84:,P\1d×\1dôe 7\ 5~YÈ\82A\93G7\1aÌW®²õ\1dF9\9f\1f\r¾\ 6ùq\9a\ eJ\95\\7ft\ eÖ\15.Ê=W\86\8dh&\7f\ 6¡\83\8b$>!®@Ç\97\1a\1e\16\8a\1fA,½\18\ fhb\f\90þÂò'\fÖè  ¥À\95Õðm\0Ì\95k\91,\1d\80\99\8c_\91ÀEO\11ä@E²!\90g\ 4ã\8cÝ#~LHïÁ\13Kbǧ1\98\f\89;\ 1EÞ/\96L´øÿ&M\9a4iÒ¤I\93&M\9a4iÒäØ\90iÿÿ\15\e?rÛìÒa\89'\1fõçOÇS¿òà\89o;Ëd\86\83ý\95/|ùA+~Yë\94\99\1cl¯~Ðwï^\9bý |K=qx\fùÆ©å\1f)¾ãÂ\15\94}\0\9fuß|ßDzO¶÷¿í­º]úÐí\v²ß5úìC|Bô\18ÏeÿhÍ\15Xõñ\rßÌ1\aÙ\9f29ØWýóo^²ñ«Ù\9f©\8bÿtb\8e\1dÕÿýÙ÷\9fýD.³¾ùæ\9a4iÒ¤I\93&M\9a4iÒäè\8bÄ\$\13û8\8aN\9b ñ\92\9dfôOê¢;RÌ\7fÄmø¶g<\92µ\12öå¼\ e]4)0ÞÁ\99àºDG=sh\18\9cÄH\82Ȩ5T\1f\9c\8d\8eô\aøc]$e\1d\93L\9cøï\89ä¯TJZ\ 2wtÄ¡Ù\18¨Éh+\ 6\18Q\1f\1eÏ\94\88Ò\86.ÿm\9d\10\ 1\94Ø\93qñ(LþaR\86\8b.Ä>GÁ\85\80*\99Òâ\19f \ª±%ÍÿߤI\93&M\9a4iÒ¤I\93&M\9a\1c\132íÿßyæ\81\17Ï.\9d7Ø"ù¨ô±o{¾Íyø\9d\9d\18\ evÉuú»_¶á´\1fd¿¼6ÃÁ¥r=ûÿÿþ2É\93\8f®\e\ e®\10ÿølܾÉÁ\1eùþ\15ø\xÊÚ¯ä<uUüí×V¼º·í»p{\8e\19P:ç×¾Wî\e\8f\9dwbõá/ZR°ú\98º(e{\8eïõ\1eÅÕ[¿ Þwóª{s\1c\82.¹ÅÇU<¾Q̽\a¤Îñ1
++Vr}/Æçû»×}+\97\ 5\9b\9fw¦ÔIÜÀO½ð²Gs\8cB\9fë{\8fÔÉx\89{_½*ÇK\ 4[òÔ?,u\12£àµ§]øTÎã6}¾yÍI¾xê\9aß.¹á>ÇYØÚ/£ùßëk>ýhÜÃõ\15\ 3璘Ù\98ï3¶ä°ï<¾\1f\87\v\1eÛrF.s1÷õßU]ÖLÝu{Îÿ¶¥íß©9У9Þ\8bDÏñyÜWTûZ=uS\9f«\1dJþ·ÜÇÜ÷\95ûn¿aV®vµãÙ9×M\9a4iÒ¤I\93&¿H9\ 2w8³¨\95øò:Å$è`uôF\8dÅoëùØ\9fM>Ì\9c£ml\8f=f\99\14\89ÔS*ùõc±ÔÆäÄ\13ú\82Yý²w\93\\7fB0(æ\94;b.(fÅ[EÜ\ 1K,\91\10\15\bæ¡mÐ.1å>Z\82\97\b}<³¨\8d\87\15\f6ÅÌz&\88\93®^'\948\92Ë+\9f\¬¾d/Tö\84\9bð.\10|D1g[:©#r A\1f\98\1dÎ\14ñNYO\18\81è#\1e¯\1ck\ eè;èhР     ÐË@\rE&÷d¦±> \9e!É;\99Þ\95`\89\10ï\94 ²@o\8d\91
++¡\14ÐHM=a\e´\ 6¦Ù»(jãt£\bo¢ ÔuD\f\91Ãqãp,\10¼\8d\88ô¸\1c´\erÚÛNá,\84>Ô9×]\11UÁjñ;CO\ 2VtÄcèÐ\b\82\8aDv\8df\1e:±Â\89m\97èÜF\9f\12k\ 5#\94\11\ 1U"äJ\84ýzO\13gÍ0¢\8e`/Dg\88\ 2=H(\19\182¡2z|\bê¤9\fD\0Ñ\82²ÀI¥8*\84\0H\82ºb    ë\98Ð]xNÄø)q¯k<$\10à%\99`\ 2\87`9:&a¢ \8d°3<\91\b2)£$F\8f£/¿- ;Ä\1d0P\10j\13\ 1\89Ãb\11\9e\8aÍÿߤI\93&M\9a4iÒ¤I\93&M\9aüòK;ÿ7iÒ¤I\93&M\9a4iÒ¤I\93\82LÇÿ\1f·ý]×Ì.\1d\ eöÔXìÍ[_ùtæ\9f3f8ØZcó\ fÇ\ 5Ü&×?\88ÏÝ_Y$|~d\81\19\ e®]Ø\7fÿp>¿E\12w>ÊÏ·_®\93ÿlþy'ß)×\83ÒÃÁÕ\vz}\9e<¸ø à\v\1aòö]-ï1\98GðÁoýê]r=Ú8,qߣ|~\8bj<ÿæw¾JÚå:Ó\r\aÃ\1a³~xþ¾\8a\8a\83\7fñ ä/\84N\r\a÷T\fÂåÿþ\áÒóQ¡½ÇU\8e÷½k\97ÊsCd{ßZyÁÖ\9dûâÏg\9e?\83v)©\7f5ûá\877\9e+×;\87~^Rõ9ý Z+×½
++\93\83++OØm·\14^9å\vöáw&û¾\18Í©X.õ­Àgë\19kî-ü~ªä1Ô6n\9eúöñ¹,\16^ÀC¢71\13ßñÚK3f¢ó%&\7fãü¾­£\9cz××q\1fÅh\T9\ fG1\1a3~#¿pÙ\13\vß\931\1a}ák[0\aÿÝľ_ÞõÙ\8d\99«®ó1×9\9c\ 3ÛñÖZ6\9aãpé\1c9\ eQÚð;l÷ÖüKá¸Ó¹l}å\86\1cÍ\7fXpBß\9f÷í^\95s\1cl(}½|áô}\eN͹\11Fç>{~í\97·ì\7fÿ\99\85ÿÎç:\97V[Y;µñ£9oB¥<¶[Å\1e_Ã~9á\82ÌÅ\17\Éý¸µâa>üñUßÈ9\15º\8cߣU\97ÕS+s\e\18<\97m¢æT¬þòI\9f.e\85ÿîÐóz=Wý÷\e^"eIŬˡ:÷\1e8iu\1e¿d\\1e\87\8dÒ\86ñ9\1cÓØ¢+§.ÿ`.K:ë²mFÙë\17\17\92×c\17L\97í8>\97Å`ÛâߤI\93cH~\ 1ñÒ$sìã¦\8fÄ{¨cr\81ñ¼\1d£cQ+ùû¢R¤|\8cÚ\93yKÅ \83²Þ)kÉØEö¶\88Í\ 2É®B!\12s\89\11ÐØN¡z\8b\9f>2b\ 5ÒÍac\84Ý\83çmÂ\7f\9dÈ\8fG2@m\93Ä%§\12\e}´¸õÆÅí\8fÅï"ï_ C¡N\ 1M
++\9aÔv^'t±#\ 3=úTu\96ü\83A\elXɼ\89Æ\93\9c\ f­g\983Z\9b¼Cw\1aò(\92Õ1\92)N{ëÉÉ\87Ö\91.\13\15uQ\91:\9b0Õd\bÃ\80£_ÑJÒÞ'ÛÍ\85\99\96¹í4:\1eû\19\91$\90¬\89QÚGÆ5-\f\8cP\13\8a2\88\1a\1dÉ`\7f\14\9e9ððð\899xÑ\8f\16¯£fv\83\17ZÒ 
++NZ\8e\8dw\8cãg\84<öT\1dz5Nc¥IN\ 5ÚCZQì\rñT²\1a\ 4­#Õ#³%¢&\93!©úÈ\0­1\1c0\ 2\ e¦ïÔ³4.\1dÿ23ãÓ\1d   _\95Ê|òäJD_\87\19¼ólf\82ÒX6 4Úe\95$CàX\92È\16ÛÉtİà8ÈÐsL\7f\970\8d;ç1»Ð¹Ð 3\18P´<vÌDðÆ\868\83ïp\94Wo,®]É\891\ 6\13\80\99\91ënÆxÎü\90Ü1\92~Ox#I\\8b§\97y\17I]ê½C·\90 R\99rýhr\16Êbé\9d\16V]f9àþà<\93;\98\11AjP¬\ 5ìÊ\18"\83ý1\8f,\93mzÎSO\85IÀ©Ø\15ZÀæe\róì)Ü\8e[úgѺ8\81È\14+íÇzÆ\94\81æÿoÒ¤I\93&M\9a4iÒ¤I\93&M\8e\ 5\99öÿÿÆ'®üäìÒy\83»Å\1fG\aÚ5K_÷öìÇî&\86ÅGÉÂSþdù\8f³/Nëáà­Õ¯ù\85\95Ë~"×\8dwÃÁ
++ñÁ\8dúùÏ\11?án|\96>}Ï÷Å?¯ÂaþùÓ\9eyù÷äºÖa8X#¾ØQ?ÿ¶ê\9f^\7fÑéÙ\9fï\f¾ÿ\80øÂÿ\16\9fe\87Þp¿øçmGþBÑ\93~âÇÞr²Ä\11\84\10ìpp\96\\1fõÛß*×é\1f~îã/\12¿}L
++ú_WÛ{÷S\8b\9fÉ×=ã\ 2&ûï\1fîç¿NÚµ\8b}zÁ¯ü§\wQO\ eöÖø\85Q\9fýÆ\1a3ðϧ\ü¥\fBÁØ«~ëó_³ê˹Ì\16\1fúîê\ f¾|jÒä2ße\9fýÞ\8aé·Ö\14\8cD\1dÊ}{ê}\9b§6\7f:ã.Ú\94}°oªþüËîûê\1d¹Ì»¬Ëus`2ÞUÛ0\8aɸµ>oÓÔÞ[z\8cÄì+Þ&e\8c\ 3yçËJ¼B0*·!cP~\b\9fó^»éÉ\\16tÖ3c+\8eçxüÌü~ì·ìº8ÇNÄü^qrpß        ½Ý½ñª\v\80
++\ 5sòÊZç3/½è\e\ 5w±è¹w²oÃ(î¢\9aì\9fwÒ©ër\9d|\19=1\8d\18\885îò§JlAÊ÷]YÛþk§]ú¥\12\a`J\EmÃ?Åõ¹N¾\8fÌö²°¿ï¢¿¼ü\91\1c\a\10uî³ýÕ¾¿û¡µ\8f\17_¿Íun©sh4\ eà>±\97\rø\²_ïÌe]\89ÇX?G\8cÀÎù}\7f\8eúú£ôËx_ÿ\99\15§s6\9fæäà\9c\9b\93çîÏþü`rûÔ|ýM\9a4ùYÊ\1fmÞì».>[1¦&føÛµr>ág\r\9b\b%~Mú(;~ÛÐ]\8a\1a\92NÖA\7fOl)èF\8fr\17ñãê\9d¡[\15\vgg\82·\8eN5íRðTÅã×¢SXRéêK)vôÌÑåÎ\9e°\1aw)<:X£¢\r]\92\98\ 1Ý\15ßTç\94\9dËwå\898§=!èØ»6e¿ 4´\13cüvx¬=\f¯ìç\1cÛ0\9b\93\8b^5\87§Äâ£ûyÇ5t>¸$ý\85Ñ&\1a_$0\1f}\92\81cÉo¢iF'±\ 1ã\13®YÂ\811"@Ñ    ÚEZ±\81ÖÄ\1eÃà'ÃØCôªgè"\8c\9bÐo\1e[0\fÕQ÷\91\8eÃ\ 4ì\9c'F\9a\93\ 1\7fÅ!Á¡\ 4V\8bZh\7f\98\86\8c!è0\8eh\8c7\89A\a\98¤°\ 6(i8³:º\8aé\87öD\9dð`:ÁÀ       gh\83\1c¦!TÇ5ÌSÇ0\10\86F\ 4B\16Âl\88êç0k\19\ f¢â\9c\14\f'À(XéÍé¹
++ÃÕ\8cîÀü\17¿4z\1e\93\1cë\a¬\93m5\11õD\8f§$Æj`Q\99ö\93C\958ÿÍ.Å\83]\90û\fã-\9cï1\12ñ\ 4GͱÊ8\89`É×a«9>\ 5\8fcx
++'\ f¬\1c\ f³.ë\17±~@ã2\1e\1d#\`·\82·=\a·\1cú\89Æ\87\15@glõ¢#\ 34°|aA\81aÊý4\ fÇ0\80Èà\8fNwE_Ø\82è\85§Á\10±\82B7Ë\83\ 6úÀZ¨ÅÅ(âÀâ\19¶B\18=\ 6\9f \16\8cJH9ò\ 4\8f\8e°\82@\13öèG|!D\86Ëh\18\ f­\14#\f\f1x\88U\91\92\90\12¬¿¬ÎáQ\ eë#ú\13\v¯a\18JÄÊ\11\83cMÉiF\88pÝwJ\89¾É2¸&EL\10Ì(¬Ö°Mhk$h\ 4æ­\18·\ 2ccð\10Ú\80ÅEaQÁ\92\87æÑ\16\15;\ e³\92\13\1\1a\89 \8d°BÏ%Ës!gÜ\ 5®:\ 1ôĤVü\19AÇá9V{,\ 3\f¨Pl\92L8Î&¨,ø\91Xèþ\97½k\rÖ«:Ëù\9c8|i\12\92j\10ì0\15\ 2B\biX÷\v\ 5L5Tʤ\b\12\93p\92 \r5\9d\1c\bfbe4\8e\8c:¥S0Ò\11\fÓé\03\ 5Á\ 26ÊUZg¨ \13Ç´\84B¹5r9\r1¥©\ 1+
++\13ßç]k¯sr¾sòÇ\89
++y\1ffC»×Þk¯½ÖÚûìõ=Ïû¼\19\8dÀÂ$Ð\19>Záÿ\ 5\ 2\81\10\b\ 4\ 2\81@ 8\1a0Êÿ\9f\ 3\8bÇ\97ö{³\99k\e\8cÿ_ß8¿\85\a6\7f¬ðÇÆ÷{\8aùüÁ¼\80s\1aÿûÇ\17~èñ\9aG0ö{×òþA]ÀÔÆ\eNÄÿ\83\7f\9eûäõÏó~\ fþ\7fÑ$ü\7fÑ\17\fÆó÷\eÿ=üøqßb]\80¶¹ß[9½;þÐ8ÿ\r-®üP½À\92i]ÿ\1cª\17øf»îü\ 3\9e\14Qÿ\86\16k}¨^à±Öo¿ü©\85\\7fv\86Ú¿\8f÷\83S\9fÿÎ\9e\8d¼?Ç4­7ozWÏæÓ6½Rú_×\98ôÂû#¯à¥z¸Äãã\97h.ÛßúiÕ­Ã/\17þÞä±<5Çê\7fû·Ï¨ü}\8dÙ\9eÑô\f\83üý\9cÆ}o\1a¹¾òþ&\14®ýFæè/E\9dO¿s^õ\ep¥-K\1a\9f~Y¼¼ð÷ÖWÍÃz®s)mWí5ª\94\85k¹O~\89\15\7fµîõ\9a§1\17nxK\e×Go_·³\94\99Ê)ïâóÀµ¿ôõK÷\96²àK\9d'Mëú\7f0¿ãç¹\9d7ÒvßGW\15ý\85w¡´såa|\11\16ñõР+v_ygy\16l.}6Äc´\92¶[¾°âÅR\96c\19\87\13\9b\95#\8b\8bn#\ 6U4\b%/ä}´]þÔ£¾\96U\9dÁI\1fhã7àµpBÓ \fj\1e\1eá²Eh\8b\1c\97å\10«^\80Ç\ fZ\82g\1e\1a~¾è!¼/ý2õ0y(]{Þ7ßµñ\99âàë=l\9dÞ\8díò×í\1dµÌ\94þ<§Ýûº\91\ 5EK`\9c-u^ݼH®ù£UÿZÊ:ß\87w\ e£±xaL\9dëçÖ²\Ú²¸Íëw>på÷KYv¥-W·wÁÐÈ\9e¯\16\8f\86N»pu{?=õ¹Õ?:Ô¿aQ{g®ùÆPi\8bKU\97RüKØ\17áÕ\8füBÑm¨ªéx³åTÝòð\8a׺¼\97å¼K\9a\9fÈ`NÌ\13Ú¼þàIÃÅÛ!\9b\9a·ô\81öl^4òÄ]UcQïow»\87ñ:
++\81àhÃ\18\1eù\10ny\n,úó\15\ 2½s}²>t±¨ÈÉt\18\ e\90þZ á\1a\b(zç\1ap\92`ѽ¶               ¾b\ 4CO\7f¡A5S]\ e\99Ø2hÕÀô\8d\rÑ!Ë\9b6Y\81ëi|ZL \80\90Ã\råA\83ãÖÌ\ 2R\1d6(E\7fÝ\90pK\83pFP)ò\94\19¦\8b|\18«e\18ÇóÑ\9fZ\8e\93\9d\96\8auW>   g?Y\8c=ÝCÔ ¦«fáHòÇ\13\88̦*\93Í\88;F\82gUµ        ô·ò0ñÄZ+\ f\1eÖXz\81Ò\80ÒuJ\f»÷\1aÉÝ´µPTÄèG¯\1d\9524"\81\1aY¾¿\9aF#Xî\7fg-3\99\ 1<·Ê
++\93Ë"\1f\1f(ά\10`\1f3(ÄhAÂc\ 6©èxú \847sg\9al#øþê+\0\85\0ýý¦\8b&\84ÝG\9aÒ\16ò\14\9aàáó4³ [°\88ë¦
++©¶\88\bÔ\ 6C\9d\ 3}xÒXÒ\r)¦ÎA'Ò5\r2\88A4\ 2        \ 3\9c\ 2r¦ú\92em\8a\ 3õ\ fÍ9\8bäft\18\88Í\10¨\8b3\ 62:ø\0D¤6£O\12\b\12
++Ö¾¥yb\1cu\16?oh+Õi\90å\ f9Î@²\83³Ç#\ 5\82Û\14\95DÌÐ.d\b\83\ 4áÝÔ\8fY\a\88@\90\1d\ e\8cpÍWç\90\16\r
++\1d\9a,̳³±\83.\1eUG0×\1e\r~¤ÙG]\84\99\84\19\16#u\1c])%\8c&ÕC\ f\aóá\9a¹j(U`'\ 1¯+z.\RÔ\18\9aöà\8d1\99,\1d\85÷Ivx3DÌIj4xì\bU\88\83Ö\ao+CO\15u\0\88y\1a*\ 5\19R¤¦@\8c\ 4\17\89L×Ã+\80Þ3ô\18Á\v\ 1\f\80\9e|\85\871ùTºÛr\a\80\fõx\922MyªÏa6)j\94²ÉwãH\9fï\9a\9e?\93puç\83\1aåþ«Ö\0\86\ 1ÔVjxéÂÔå\1ctôB¥IHÝgèê û¡Ëà|\82AÑ,Ì\98f\16\8f.Þ£ô2ÒxI\80r§Ù\80ÑòPµÀ¿\ 1Ó\ 5~\ f\8e\1e-¼ÿàÔ\81¼\95Ô8\1a&z®T\82ÒÇAÿBë\eäÇ\84O\84Ç\83\9a¡je-\11\e\10È`d©©~¢ü\93ÑB\b`mÓeL\923q2-\a-N ¶¡\17"Mdv¯À §àØJ\ 4B\15È\0ðn \89\1dé}HSͱ¥F\8aí}\12p?F7ß\fZ\82âf\91\87\13\1e\19\11\17ãw_\ e\90\15Q·¡'Äÿ_ \10\b\ 4\ 2\81\10\b\ 4\82£\ 3£üÿC·\9eö¡ñ¥Çôîn\1eß7Ìv\17WÞ~J¿Æ-\ fòüÃ-~úP_\80ý\8dK;ëÀ£ç×xÞܯ\1cð Ï?u\928ÿÂï\ eúù\9fÃ\1c\18\93ß½h1óü\1aüù9\93øüïjí9T\17ðùI|þo\9e\84ÿ\1fâýàçÏ8xò\9a²?Óþ­­\1f>ñv¹.~\1aì÷Tó¼\9f\9c\83Å\17@Sý7òñãýÿ§õfóñà'\87î¯ñý*V\ eyßaâû÷7\7f\83?ܾ¦ð½øejʨÏÿÄ\þ\rcr\0\8cçòG=\ 3NüÚʧ*ï^yÆ)Íï}Ó+\9bfU\1e¼ê
++\1ehu\ eÆ÷_ÐøÐ\r{Ïÿ©ÂY{UøÐKø·©\89¹îy|½9´m|íôójî\80Ú\96\9d\ fßS=\ 3\10G4eÔÏ~b\1eüê\16\8b¿}~át\11\9eUxâ\9bøzÃS\10ÿþ+S\v×íª·Á2¾\87\89ó\11ÜØúzë¬\8d\80ÎÕwÿ?\9a·Æ\9a\97/þbÇ\91\97{ØÕúlÝÈ\85×\97²Tûå\846\87\ 6=\ 3æ´ØÿÍ\7f;ütå¥Uá\90Omz\8bÁ\9c\ 3ý6Ï~ïÜ\8då<\1f«ÏÂ#í¼\833VT¯\81T9äg[,þ g}cÓÀ¬\1e9ÿ\9eê'Pûì\9b|½;i»ä¥Gï+e±ê4n\989zÞ]\7fVÊr\1c\9b\17\ 2mY6wé+ÕO ú:Ìh\1a\9a\807\9bnèãÏ<wVáºUõ­8±ÍÝ\v_}ã\98Ræ|éϯ4ÍÁòmKö\96÷_äøS\81\10\8câ½Ê?ÿoÇé\1f!_{\13­ó\1d'8\8eãÆ\9dwe\1eô$§2\88^w\9c¡MÑ2gmkìõ$1á\19\9a;Ã$3Ä,ô±¦Kýɺ\90²;\82y\14\1c\7fß*\ 4áç\yÕ\9ci¾dðÄôÑe\1c\ 45\ el*\eÔ³w\ 3
++\1d²\18 B\1a\13\8föR¯iðÚÔN\9aª`\8dá\0ÀN\14ÎP\9f;\9a¬ ò\83\87\f# Ð[Aç\118k\0Süô=\rá\ 6Í\aZ\81PO`ài\94`'a\10ÒN\13\eâ\15jzìÆ` ~>\81¢¦k\8eñ¬?âþúT;_\a\9d\82\94\10\13\16cëá\96@7|\98¼\bãó\ 3\fø\ 5D\as\r\8bQK¸i\9eg\11½Â2\1eDáC\931Ö§\9f\r&Æè\ 52$KP\82À\15ߨ\92\9bã6\81Ø\ f
++v÷iÔ#b¬\96«Óqa\ 2е ¤Ðl}\ 1S(h¶ð,QÍj\ 2?\8fÌ3\92Ö£8ÎÁ÷\84Þ:x\17Ñ4à|\ eôî\89Ð\Ð\108z9ÐÔ\86úÛ{ê \8c\86Æ«N\97Ì\ 3àäéý\94-\\b²£^óLÄ£Ï\90\ 3Ä¥1mO¥Äù\94 (£\7f\84Q°°(n\14ô`@\89¢àQ\80d*\91.nafa齦rIÁ\91ðpÒ|\80$"¦!@\12\10éI\83?\ 4ÍZáÿ\ 5\ 2\81\10\b\ 4\ 2\81@ xÿCÖÿ\ 2\81\10\b\ 4\ 2\81\10\1c\r\18ÕÿoXÿÃ\vÇ\97ö{\8b\9a\16\81\ f¯/zé\9cûÕÛ\f\85ÿ8ë\85êc\95:\8dñçi[s×¥%\8f\9dâ´\ e\19t¶¿1òò\97k\99/úÜÅM¯þàý«\8b.\e²).K­ìKg¯\e©:÷ê\95¶¤åß\eô³{§é\8f\87GæßÓéÕK\9dË\ eã!· é²\aµìwó=ü9mË÷\9dy]ñC˶\94ík¹ÕÜÔ¡WªF¼ú¡\15ýøÄ\1añ]­\8f\87F\1e+\9egH¶Âeë¹l\13m\9boÛX|Æ\82®:ðggvc°úéã\1fªy×l9ovËÓ·ò¥e\9d\86ºÞß¾¦\93\1e\9f\93\10\b\ 4\ 2\81\10\14\8cÓ\8aç¨t§×vV¹ÃyKº\ 4kG\ 5õxòÐ~Ç\84Ü\82\16zz\ 4\8cà`\87$pP\8dèÐ@¥\8eì\95& ´\ 1yìhÁ\0ßL\97\rò\1a"W\1cÜ>\9d\85ÿc2\81>á!
++oÚx\ f_?D+\84¨j|\ 1Âgp\8aN. #`\97GÓyäÁ4õ¾²7*yÈäM\8bS°É°\1d\1e+ù­3\91eí&\ 6$Çö\b\ 6q^;º/\9d\91g\91\13\8a\ 6å\84\8b\19\19Msd£S\8e \80+\9fW\86£D\92U\81\96\8epøôÊsâÍ\ 4\ f=NL \85}Ê     Òwö\ e\84Ë]BjU\ 4É\98਻q*\92@\9a\1c\ 69ܤaWe\93à·\9d±°³p^t>\1a§\83\8d°Q\85\9d£E\\10\82d Ó·\88ýÈÎÁ3\9bú]¥Dÿ\ f)2á\16\8dÕ\13$ù:Ã\87\95:\e¶Ô<'\82ó\bO\85\97c\8b\1f\1d©ø\99ñùS\85ÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81à¨À(ÿ?wå\87¿5¾´ß\9b3I>¿=-\1fÕÂw\17¾[}Í\¿·\80÷\8fÏ«7­çxÿÄ^n§¶s\ e\9e;\<Ҭ㼠\ 2\81\10\b\ 4\ 2\81\10\1c)Là\87¨u´jL\8eÐ÷¢ÇiÒÐ]$«a\8a©uRÐ{\vÿ/\10\b\ 4\ 2\81\10\b\ 4\ 2ÁÑ\80Qþÿ;\e\83ãKû5Nþ/i\9bûïg^Pâòµ\9bVóí!îþí\93\a\85ÿ·Nòb    \ 4\ 2\81\10\b\ 4\ 2\81àý\ 6öX@\86G${D&Ç\9cØè\8esaª t\82íAt>e\1dr¶F)o\1cÜ\15\ 2Ò\15ºè#§\15\85\19ål\86²>ic­AbM£rô\81ÊU c\91\81ѰYAΠ  \81þÚ"·£Îta\e­2\bÿ×\11ú\04\ 5\87\19\8f\96y\8b\14\93ð\10à4\97l\b\91á}\80dÛÂÿ\v\ 4\ 2\81\10\b\ 4\ 2\81@ðþ\87¬ÿ\ 5\ 2\81\10\b\ 4\ 2\81@ 8\1a0ªÿÿø\13·=;¾´ß[ÌyäàÿwÊÒÓÿ­æÿ\výêÙ7\98\17ð\851ûç\Îûs¶ýÞVÞ¿\82¶m#g¾\85ý.;ªç\1a®\1fÞ\7f3~õ¸'±ß+\95h\7f«ç#\a~÷{ì#\18\8dê÷vóþ\9f¡í\8c\83'¯Áþ\18á;x-×\83x\84\98û6öS3Õ´Þ½Çvõ\5òϧ\97Ü\81ÖÙ)ð\1d\1c\ 3¿÷µOý¨ä\ e´¾\94­?¶»Îo¾¾å\14.³J\95üyo6¿Â\13O½ìû¥\8cþá²Ë\916pÊ"Ú®ùèÐS¥Ì©\92\ 3pCóR|{æÆ\92«ÐFç¹ì\8eÖ\ fêöÕß.>\8bÖ¸)\87æ1¼rdÇý¥,ºRçP;oÍi«K[²Ñ%?à¼Y][nqk\9f+e!\96ë];³\e\8fóÎXñF\8dߨ¹
++÷sÙRÚ\96¿nïà2£k[vµ{¿lÛÆgJYÒ¥Ï\96µ¶¬:uø¥âã¨u9oqëë]ÛW\96Ü\88.Ö¾¾\99Ï\9bMÛqg¬ÿNÉ%iíØ\1c\878ïà\8c\15#¥,¹Rçv>oâÜ\88[[NÅ5#ÿÄãg\90û\83˾ÂcôEÚ.záᯢ\8c\866\94¶¸\99Ý\18ýÝ\17.ÜSÊ\(ã¾¥å¡üÆ/~\96ÛBÃÎç   \ 4\ 2\81\10\b
++à;\96éÃ\8b>s\8d±\8e¾>mpVYú\84óÎjoUÐIë \9d¡U\82\8eÁè\b·³è\r}ªr>::\biÏèK\92Ê4LÖè\88\90i\87õJg\8fdpÁ8K§eãè_>Y\13U¤e\a\92Ô)ºrDú7\e\91_-Äè"4Ö\99>Z\91\95ÎÓ?øj¤¯æìØg-h\8b£Y´\9d\8d   6\ 5:\ 6.o!\85rOðvã\vTo5\ruv´\19ùüB\823[*û©¡Æpn=å#\1d\90"ï÷*¦.O\1f}zZ4\f­SÔ)ÁÐ\95#n\9e\15ßÖ{M\15\8d\14\82H*è\91ê-Ñ׬ñÔ\9dðtS°\91ÓÈ!\88nòåÚ69K+\ 1\ 5±9òËÅÌû©ÿm¢\8eÎ\ 1Zsä ³0\96£îpHµ§ð\99\1c3\1dOצ¯wj[ÒÔ\89\81\8eqÆ*OýD­@ÎAêt£ª\ e>$\87tæ±ë\9fl\13öÓ*%ã¿\8auí:«Ñv \83_æÿ&Ú\9b\82Òt\12òöe]ûNC\10\9f\13\8d\99ã\1c\84&Æ.ßâÿA>Eº\ 47Á¢ßiÆ$\8b£\91æ\90ê´\81\16\10\1eY\r\93\8ePîk\97\12®\87\98\0ë\ 3÷A
++\98\96>â>ð\8ef\9eö.h\8d|\86Èj¯ËLW´HUÈýç<=54\9f\1dò/\86ÀÙ\ 4iü} 9á\90\8f\92\1e.d\ 3¤ÙBó«Ä\1fÐ\b:Ý]#:\87\87\8537ÆØ\8d\8f\1f²þßÿöÆ3\a×ÿ\8f´<ò§þýç\96ò\1aÒaݾs\92\ 3m½½à\80ãu¬ó\8aö/âã·Ñ¶ä¹\93þ\93×óÁÄ~ÍE\8fú\17üÃOó\1a\8e\9bÖ\9bÑÖÊoÝðéW\8aï\80w%_ÀÎìé§ÎêÖh_:{ÝH)£^-kÉv­OïÚ|vi3\8d\13\97í8Ìzø\9d¶®Ý:kãwk®\83dƬ±\8f§mÈ_Uγ4\ fƬ\95ÑΡ\91\1aÔ\eSÊNä²\19\¶ïËuíêËúô\81\99];W?}üC\FÏriç\9eö»Ä'_~ð\9eníZÎ;õØÉ×µ»Úy\17ýàgoã2£¬ø5\b\ 4\ 2\81\10\b\ 4ï\89ßUhÕ\98|àpîȼä\91ü-áÿáo0eýì\15\9d\10iY\95\82\1a³_å\b\13|C·Hk䲿õ´¦¦þP\8aVâ HÑ_ÆxüÆ\94i\ 5]\8eÉðäOíw\9eÈaúÁ \ f\1c~\1eHQ[Zª»¤³u¾¬µiù\ 5;~´<[ü\90`\f.«©i\ 6\9dí`Èoiñju¤\9bqàgñ«\17~V1.9g2\86\8dzQ3\8f\1c\86\1aB%\89ë¢;Ç\ f3\89.©#\r6~2A¦\0¯©,Ð\98à'\rëM»ÿÒ\a)!Ü?Q÷\ 5\8c\vÔ\ 4ü \94é*SDÿ/\10\b\ 4\ 2\81\10\b\ 4\ 2ÁÑ\81\7fÎãk>;¾ô\98ÞÖÆÿß0Û]\xc7¥ßÛÏû\8f£mÓ5\v\7f\øykû½>óÚ«h\9b»ã\8eU¼?úØ\1f£}?4\8eàÆc»ãçï¸ã׸~ç}¿÷\ 4k´·Ó6ïÇ;\7fÂ:\ 2\15ô^âýàâ\97\9e»òéÂï»\fÝÉ´Þ¾¦\vØ4²é¡¢çw¹ðß[\9b¦ýª½F\15í}0E\v_b\r®£íÙ¿Yö/Eã\10|Õå·ëýõÜuåzÞT=ø\ 53º>xñþϼZtùÉ\17ýù«|½¿ íë?wÅîÒ\ f¶rñ;¹l\ em\e_;ý¼R\96\87¢M\87~a˽k\8b~!ÅT®·¾é  Ö\8d,x¸hï\9d-\1a\85\9d\83Úû\12\93p.m\7f0sùî¢\85÷U¿po»\87åÛ\96ì-ã\eµè\ 2\ 4\ 2\81\10\b\ 4c\ 1~1û`Çj½\15í\80ØØ{f\83½+ÇYhª\83×ìX®RòÞ»è\ 3\bé\0\99´uôѬéC\16ß¹ A#}´\eZ\1cØî|ª\89µä´¾\0W\vYµÉ6ãlc\8b.\965øô?­Ê)ÀV\9d>¶c\80\88=Y\ e>\b´\ f\9aêh\ 2XÚD×òF!}:\1dª­\r\ 1úo\ 3ÒÛC}Mk
++\8d,ðYÓuÀ.;¥s\ e\88\83\8d\9en#C\f\ e\8d<\v¼\95£\9bð\89n\1c\89Ü5j\83²Þ$\97\92f\1e>9\95Ñ\b£}\b\90\84\8b§\8e1\1e
++ûÈ\8eï,²§®\83v?P»#ÈõD××\9e
++\1cu\8bRÙ*:\90«¶!B\8bî´É
++í(ñ\16Î\81ïÏ\19ùäC\b\1cCAk6pøÎ@hO7\ 3\9d\18¨J§©ß¡.×\19Ô55#Qý\90²Û¤\95ó:yêò¤¸¿3\ 2\1fhHÐ\179U&\9aF\9eG\96Ú\8e\1có\ e5Ó*Î`04Í\89Ä\94\a54j\1d\83«\½Ó ®i]GS\81\18o\8f\e\84\18!zêt\ e;0\ eT7Rܳá~Â^îb\9aKÐâS{m\8e
++Á\ 3\99\8eµ\90ü«@ó\93\ 6\13£ ë\1cáú­£E\13Õ¢\rM$\9bsÕN\18ª9R'hãSÈ     Íp\8a:\80\ e\85Æß@ÑOõR\9d:G¨\1c\95\ 3Í)´Ói\Ñ$\1c        «ÿHí\8a\beè®;\10#\91èÿ£% ÷µ£\11\83 >p\1c\ 4-Ý<f\96w\8eî\15ê\ 4\8dX\ ezBh*@#@÷­qç\ 6\8d\85\ 6\0â\ 4\85\9c\ 1Ô<z¸tN\18>L\ eD\bd\aµ\ 1u\98\ e\98å4+\ 2\bÿ/\10\b\ 4\ 2\81\10\b\ 4\ 2ÁQ\81Qþÿõ{õ\8bãK\8féí\98\86ÿ\82$Þ6ïc\9fa¿½dhÿâéÝþëNÛt  ög\r]À<æ¶\au\ 1[øøA\1f\81>\1f\ fÞzÉ¢\9f\7f¼xª\19Óï­d.\7f<ÿßïñ%¹\9e¹O^ÿ|ñ\17p©ßû\13þ\1d\ 3\95múý³øºÞXªg\88¯\vÿ¸yÏ\9dùnñ\1dÈtüÝÓ»vîX3ï­r_!÷{\17p{VÓ6ÿ¿îü$ß\97ñÔþk¹~pïó\ f\1dÌAÅi½EÍ\13îÁûW\17¾^\85P4\0EWp5m+NYóÝ¢UP\95\93\7flzWß \87ÁM|-h\a.ÕÃEW S.z\84\9bftçm\1a¹ò¶¢q0ºÄÿß<£»×U·\ e¿\˪\17Á-ÓGÏûĶR\96S©³h\0&ÖFÌn>zÃ#óï)㦫7ß9Ó»±{ôöu;K\99©\1a\87\fÿºb÷\95wV?Ã\ÚY¼\1dÖÒö\93í¿õÃÎϰø\e<ÁçÁ\vPýéÚ\17KY6E\eq;·å>Ú.ÿoö®6X¯ê*çUÆÜ\90\90`¥àGlk\1a%&\ 1ö÷\87\ 1\1a:ÐR\86ò\11"ä³P    $@ \ 5\996Ã8C\7f0Bi&Ä\ eÖ:2\9a\19\19\8d\ 3\12*q\8aÒ/g\98\ 1GF\89\80\ 4D\88\90y      4\ 4ì\8d:X:ø<{\9f³ors\13\7f´©´Y\ f\1cHÎ>gïµ×Þï½{½k­g=õM_ã&Bè¸\1dÚþZõü#Ój[êÖamãZøô\eóî©1\15\8b·\98ßöñU»§ß^Û\82©r®?¶\9fßÁÜ\8aï4}^;<ÖvÜ\8a¦\8bý(\9f\19ò0\ôÌ¢c:¾\88nÝ7·ñV¾|áïuÜ\8aªÊrLÓõåÃóÏì¸$R\8dïØ1¥ßg\7fô­U\95\aÑùXu}Bã\8bXþì_ëÊ3\11C]¿;Êxä}¸|Ïû~ºãOìæ¾sJ?ÞÊá¹\ ft\1c\14©Ê¹{F¿\97n9ye\1d/*Uû\9cSö˵ìs\97¾¿òS\98Ng©éeÙð\82G:î
++U×hÏÔþ3ºã¤e{J[¶¾\8ewBû\\7fìÙçO«?\aTáÃ\10\b\ 4\ 2ÁáAn/c\v#U,¹\9ez\8c\18æ¨æLG\93É\9a\9eCkbýsÀï&ºæ\14ËK\87\84.\14~ᦨ\99lk´¥70$Ü\ f\8e¾8\8d_W9FúM\99D\8cG|Ô\85_\8b^(\9c7<³qI¶å\98\89¬br\86¾-æ\ 2g«sïûë¹Á\8a/\fG5\8fþbç§óÙÑÃI\9f\96Ç\9c -~ù8z:\9dÂñ
++¿m¬·\11£àW®U\90Üá×¹\8e\9e     È^¥R"\9b´[ETÅ<iz\81\99d\8b£\8b¢s1ù¤éþc±mü\1d\12:²¡yH\11³óè      \a\92H\7f+º·©Ë\9f5tf¦à]ïÓÃ\99&\14_\9eÒ\98t¤¯5Z::­­\kè\9bzÁÜ2¤TQO:TÞ2i\94¡U® )\87\85¶vt c)èÛUÐy\b\1e+Cé+\7f\1cæÌ_Â:Z\97«?\9eÞä\98}ò5~´pª±H8\16u¿÷ð[\1d\90åê\19\93ú\8fP\ fIÅ SÝÝÃB;zÞyt*Þ×@\17¸\r\81óÂÎÈ\81þj\8b~,½ÊX$\8bµ¢ÀP\8cűÐC\9d\91\19Ü\8e\ eURËéà\9cKe   ¼Â\8eTA\85±yãl\87Ý\99lq±òÐY¹æ\8e\84ϼÆ3@î~]Éä§}ä¶óÝü\ få7vV¹\9a{\8f-n\ 2c\ 4,fc\14V\9b¾X\98 \99\95Ûq1È\ 1Ö\8aã\1d(Lûl\14>>P\bV-\al!\8b\8f)tÅ\82ò8ÁaÞ©ãs3\ 1Ó\82å\82­Ï,ø\f\1d2\r\1f\e\8f»Ô`\86Ì\13·ü\fY\16\94\ f¬\f_\ 6Á:¹\1c2ÆOÌmW8\85\9b\12¦Àø\0f\91ã#\8bÏ/)\ 2é>G\7fÉ\96\1c|OZ@Ö\93\ fJY&¸ã1\ 6L\84\80åÈtÆãç\ 5Ùç\98Þ\8e£67\ 44o\1a\8f_<\ 6¦À%#\1d\1d\b¯Èë¨tb.?  \10ÈxÀ \bü\aÃa¡\12ýøQ{ì\13Ì\88ÛÃAÅØÏ\10\12?:q/\91,±~\9eñ#\85|\90)\95ü|Å\80\18Æ\ exZ~Ø2Æá]¬¾#· ~Ä:|>8Yz÷}&\8b!\8fÒ\16\1f\0\84^¬£"\ù\19\83\86T6=·\1d\18ÿ@2\a¬Iùy\80%r\9a,\ 2å§%ä¶\92ÿ/\10\b\ 4\ 2\81\10\b\ 4\ 2ÁÑ\0±ÿ\ 5\ 2\81\10\b\ 4\ 2\81@ 8\1a0\16ÿ?ãÚï}i|ëä.f\97ñ¼·Í{ù\82\1a?\1c&\1dXÿ靈j\8cº!o_\89Efüö±\17\7fðïJ\1coTzd°»ñ̽6:k´Äí[Æó¿Uúgݽ\8dÃy%\ eßeæ\ 5<Üâ\8f×\6·Æó{\eG\ 6·5\8e¿SF?÷\\89ç\8fF¡ÿ\16;=wtSáéK\8e¼\83ÓÊó¬Ï7ë\9c\13Þ-qûJ«)\83\9d\8d/o¥]^c»uìx\ 4w5®Â\eg®{µÆÃë®NàÂÒßB\ë\17¬xª¶9Uc´\1flµãß>îº\1a\7fo£«1Ó;ZÛÃ\ fݰ»ÆÊר¯\9e\8b¸V\7fç\v\7fYcÞûº}³gôrª{\97mïâèM\8d\99¾£q0\1eÌ?¸¯Å¼¯yý\9c\9fêx\18Umûù"Ë\97q]|æõ¯Õ¶¨ëxóÛº\1e\1c×>¿Õ\10\ºwA\8dO×ÞTn§§õã\1d\1c×>©í\89K\1e¾~{móº¾÷í\96ÿ±|ãuÏÖ¶ÔÉr|Ë­8éäÕ5\ 6\9dE.K\9bj\9c\8d\8bî[]9\r\19Ò3i¬î"_~êw\97½YÛ¢¯}~¾í\9f\15ÃkO®ûÙv1ý\9b§÷{îÝi\97\ e»XyWu]ëZN\1có>»Õ\87|nó-/Õº\8bÖw1ýÓû9|ëW?;¬qí=\ fä\9eãúñ~[\7fô\95ÚæJ¬\9e\10\b\ 4\ 2Á\ f\ 3G¸æxÊ\16ç¶\18\18Îì\   Éf\88¸I6G­\18²\1fqVdýtÖ\9a7\8e\9cp
++OáÏ)\93ë-y\86Ðã_Ç r\86\{¦>0i\80\9cY)\8e¼t93\ 5!\97l\ 4N\80\95Î\9cÃð$£\e\9f3aBô¹ò\15z\16S\8b9\95Bs¦\8fë7*\18\e\8c\vªÄ\80\a\9c\9e\ 2k·ù\12l\9dµË\8aáÔ,\fïmÊ*[\f\1dJ?&°~|(\81õ\1eV\84F\17\98\90eU;ÃT\ 1Æõ\a²æAÕ\ 1/Gf
++\94ÊrÉaþä\89Ã=\87wÈàæ\99yCJ<\9f\13£Ì=E\83¶UÍ\ 5\18_G¾¯õ^*ñqA¡'SâË\19R\9eTvû­=t\1d\99\1dse¬bá@æT0ó¦Äì\eôbJ\82\r\93+<+\8b\17\1d¹R/\9eÌt¹ä\121Ý _w\13KH¿±\ e»\86YB8üÂørV\97\15M\9a\190\10\8b\19\1dXMf\17\90Ç\8ee       ÷«Ww(þHæuX.2ËÖ%«°\80?ò|\14t\1cc/§õ\18"$&\11h¦ð0   \ 1=ÓD\84å\8a\85Ä\ 1\1f\92\83'\1dcûµgR\85µ.²Ä¢A\ f1\1a|Ðrɰ\80@xÁDJ¯\18ó\1f¹WI\ fè\99\90Å,\1c\92&*²/b÷b£\159\ 2?-4\ 6ñÉÃ.r9í\97Ë\82\ f\ 2\15Ó×1dÆ\8bá¢w:\85ø.$n\8d1ûÿÎ\8f]¸füÏ\8c\91Îþd^î\9cÇæ]Vùï5ìêÔìíÓF¿yNµy\\1e\19¬oùö\8fï\9dõv±Ãs\80}¾¹å\8a¯þä/ýCµÃ­\1e\19\9c0½·Õ¾pëÜ}\1d\8f\80\e\19<X\9e?8\ f\7fq\19÷AÚ\9a¿ù³ÿXîû¤§\fN\9fÑÛY\açáo\99zh[ÿ¢fï\1e\9cO\7fz³Ï\9e{àÊ7k\9bíìÈ\99Í.\9fùÀ\92§ú¼øÚç×Ë\9c&Îo¯öàÄùíç\96¶%¸î¹óÒ¾-V\9bvÓÔ~~OýÆ\92:¿è:[\7fñ\8cþ;\8eÅ?sÑ«]=\81n~5÷}â\ôiÅf¿\10×è_\±»³Ù;{÷ì\19\87¶Ëg7;ùémK^9о>}zÿ=Àò]w\9eÞÙСËí/ã­ÃuÓ\9f^÷f\97oÞ}'q~[\87eÃs¶VûZ«jë¯8L¾ùæécïÝÿá\9aSnbý^%µ>/\18>~_Ý£ª\9bßW¦\1eÚf¿·}¯"5\11\ 4\ 2\81\10ü\10mqR§[Ò±kX²äcÏ5\17=æà\ f°¹p\Ûß\8e=²yæ\9a\89×4JYìÜ£k\b\b\vû\ 5f\7fb9qË,zئx\9f²Ã^Å\11?\92ñ\81       èüoÀQêGm£±DºÆùÎç\9c|f¡ôD»ÚFÚe<ÒgÖ´wL.Çü4³©¡\1c\16\13p\8eæ&¹Ô¡:X7\89O\18ÚôÌA'o\ 6&\91\8bé\8fÙÂÆ·Ífå7\0\86yÙ4Û¡Û\14»:ëI³Ò:\894`\99\19Úx\90É\99\94"yóa|\ 4,\82b¹ødH+Or\8bÈïY"ÞH\89Ìí\85w\1e\9aT¤:Hä\8a×^Ñì6äÃðdz·ÌÁW      ½\aU¾¶Ñ¤¡àÂÁÚÓäò°¤¯çW=)A¨èÙSö:g*\80iêÊNÀ\1d\81±±ØÁù\9e7"{æÁ\93\15\ 1gy~Ã\90:\9e\bتJåÂ\81\81×Iý¡ÊW\1e4gaãbçÁÎ\84ÝP
++\10¸\9cÑ\11©é9?fºóË\ 6òm\91l?aG`Çzò\ 2\90\94\ 2ÛÌôÜ\16\87¨ùp¤óõÑ\97ó\85ßÃgU¾|«yìû\94\9eû¡ÿ\ e¦ÙßFsßaKbS\93Ï\ 3\1d¼'yX$þ_ \10\b\ 4\ 2\81\10\b\ 4\82\9f|\88ý/\10\b\ 4\ 2\81\10\b\ 4\ 2ÁÑ\80±øÿ?ù÷«ÿp|ëÈàîCÄÿ\9fÛî\1fX\87ïæ\96\89·k\1d>\86Ýô±Ø\13ç¿o)m\13ǽ¯hã\1c\×í¶Ò6q^ùg\ e\13O>§Éò\8d;ÏÛÝå.\84Ú6{¿\98ñ\eîªmY\eÙ(\ 2\81\10\b\ 4\ 2\81\13\8f>¦_;\1f\19<ß×ë\1cǯ0Q\1dÍ\89jpV>\ 12\ 1Àäìî\8dç \98(ßà\88äW\88ÿ_ \10\b\ 4\ 2\81\10\b\ 4\82£\ 1cþÿų\16½2¾uÊ`wãág{åW³:\8aâ\ 4\ 2\81\10\b\ 4\ 2\81@ xÏ\811\ 6ä\7f4\8eÞ\7f](7£\93ü\7f\81\10\b\ 4\ 2\81\10\b\8e\ e\8cùÿ\9fù¯Õ\7f0¾uò`gË¿ßp¼»°ÖBs¸?V_þö_[wQW·oÒÈ`g©ÕÆüùSG?°ªäë§Ìº\80åþR\s\9fØrIéÇy?2x¢ÔØÛ\86\7f<ùß\85G@Å0Òåý³\9fù£n{å\17PvdðV©Í¶\bׯ|ÿ\82³yßk\13G\ 67·qO\19ýÜs¼\1f¢Q\90§Õ\17<\90\8fàñV7î\86á?\9d\k\ 2ZWkØ=1½\9fó\95/\º¹ÖýSºÖ°Û\ä}\1f®ßzíæRoN×2\9a­¶üB\ë\17¬¨5\ 1­S\95ã`×´^\8e·\8f»îåÚ\16\9d/m/4Ù×\ eçník        V\8e\83ÊcÀñÖì=ñ\eµ-ØÊ\8dpv\8b͸åÌUß©Ü\f!Õ>¿ÝjÒ«{\97\9c
++\9¶=ÝÆ»~x¶­\9c
++AÕùí+m_Æuñ\99׿VÛbW÷oÓ\8c~~÷¸O=_Úr\88u¼+\ eÃŰ­Õ\8a¼|xÞ\17»Z\82]Ý¿\1dM\96\15ÃG\1f©µ\ 4]W+ñɶÇV\f÷üqW/Ð׺\7f\e\8eë×hÉ\8b\8bïªü\ e9×ñ\1e\1d\\13ðáãúu8\98ûá¶6Þy»öN.mÚùªë\17öã\85Ø2µ¶%~\85&\10\b\ 4\ 2\81@ ø?Ðå@[o\95\ 6\13½c\1dsV¶c\ 5;g=Ny>f\9dx7àì\9d½Ç9\8cõ\ 3\8dÍQ±XbƳ\96eüTðÁZæE'§ÓXÿ\93\ e¨-\9f\821x¬«\7fnpLÖ\ 1\ 6\ 5\vÝÃnA'V\95\ 2\7fÞ¢Çlµbe¿Ì,jÖ\ 1\fÁâÏ\90-jô\ 3\81-\8e¡¦$b³\96bЬB\171@Ê\91Õ\19µ\8b>&\96Q\f¬A\18\83Ã;Ù°H \8c\95\180NN¬Hç\99ò­´Vµ\9e^\8eèO%O\17m©   ^d·I³\8c£ÂA5æCæ£×:}Î&\96Á\vÑZ¥£\8d\98\973¬=\1f\1dçOï¯\83 0\81lJ1a4\97XF\9ee\11Yú1²r\9c\81:YUÎ1Í\yÌ @®\ 4U`<\96»Çl rf1Gt\1f3ËÓ)çtðɳ ¤bi²p\\95\94´wXçäT¦\10\ 6Ê
++xÃ\97\84£y\11ÏX\ak\82Õí\94õÉá\15íYì2iV´3\99açx-ZVÈ\83\80\90D\95\zh´ßS\«ì\14V5¦N/ãsí¡Ù\145¦¢=\9et!Bà\84ùy\96àceÈ\f\ 1¹Óbb­À\8c­    ]é\98XSR± ¥CsɰÇÔêz@4\16\9c\17\e\13\9b\8a\ 4\0½LãsûY¡\92\1d@¿>ÕÚ\95ø{à¨\9c\a+þqJ¬ÛÇ=\9f,+\ 6jkXÔÑb·\ 4\88\15¬\94ÂÞM¬yhÊ\12øR\871\96Ý\17úÚ\89\906\18¯¸é [·ÿ18Ä\8fJüÿ\ 2\81\10\b\ 4\ 2\81\10\1c\r\18óÿ\9bÇ^¼z|ëäÎïI\9fèÆ9g]C¿gLfÒÈ`[ó\9f\9f:zé9Å\17¬¬\1e\19¬m~ÙSÿ~Æ\vÅ÷êU\1a\19,)÷é\8f>\7fá/<Vý§Æ\8c\f\1e\9c6zü§ËýÌú\ 2Û\8a_ø3¸îzãç\1e-þÿÄú\ 2w\97~èó^sÙÜâÏ÷Þ¶z\ 4_Â5oßÇ\9f\7fgÂÈ`Mó\ 5Ï\1dU+K\9cBPqÊ`v\93gÅ×\96<Så\8f¹ú\96w\1fÆç>¿¼w\12®\17\1fºøõ®ÍW\1føýÓú>ÿjÖåµOoúº\ 2e\9e\9bp}uÁÒ\7f®m.T\7fü1¥íý¸þík×쪾úä«\7füþ6ß%[¯­>þ¤
++ÿÂ\94Á\15m\ e\8flíâ\r\92\ eu\ e\9b§õëvÕîé·×¶`jÛ£å½\85\93&òã\7f¾Å7,Ý»à̲~\98D\9dÃÝÍW\7fùp~õÕ\eg«_ý\9d\19cm«f\956krõã\7f¥éåÝ3ÖþKms®\8baØ/6àü:\9eõ©ö9³Å0¼sìõ/Õ¶ìªÎj|Ãí¸\16Ý·zg\8d\eP¹öùõ¶§V\ eÏ} \8b\eHõ½sËx\8cSøîW¯y¦¶E'~|\81\10\b\ 4\82ÿ?ô¾l\1d-ý»Õ\13\e¼ã½¨¬->Ýì#n3b@1F D\83c±¢K\14'`>¥RÄÓ8\9a\18\1d\83\ 5r¤§4v\81\ 6>\a«h¶x¯a,(G·w\8cdm'kzàkÉ\17\r\95\97=d<Jæt\97\95ÓÑÃbhþø\ 4\83Æ%os,ïd\e\8aÌA\aß=\93\ 2\86H9\92«½\8f\19\87Z\83\ 3ª¶FóP\ÞQtÊÃæH\19æ\90u¹Æ\ah\1fa}9º¾\83³Þ)_ýÏ?¨ÏX«ì¡fç \b\12Çû\8eÓ^ãõ̹¸d½Õ\19¢\9aä¡vô\a\95\eÏ\90\fåcÈ\ HJ\97¹fì\83¦~\19\8e\80\89\86\98\19£Añ"\ 5óèËÐ)O\99 &\87\89GªU1øB%\8fep\ 1c©¤p\9b«b<\89õ!°Ñy|l\a¦ LH\f0\80      \a\99ð\10VU[¬7º\89Ø\1f\16ÚNôôc\8d\19åM\97¿5Ö\16!\12\f\8e\10±1\94ËÜK^\9b\84\17°½¨:Øh\ emÞ§À\98\84\18\12:\8e\9a\ 1ÓÐ\8d\8b\98y°5®ÀC\r\91n}¥3ghi8\99È\99ô\84¾¡\ fo0BÒ\l\86U\e\f\85÷<ã\8c3\ 466b\8bØ\9c³ö\90\1c\ 3`5]À®\8e\8e!\12\19*`E\ 1nYôÄ­`9Y\1f¡½DAKH\8b6u_0\\86» \1e"î@òÿ\ 5\ 2\81\10\b\ 4\ 2\81@ 8*0æÿßð\91Çþu|ë\94Á\8eÃø­×\14\9fïïãzèÄ«vÖ\q\eöÏ¡§ãwÉ®S>ØÅ\ 1\94\9cv\81\10\b\ 4\ 2\81\10\b~\10\94ø\90¨\8cSʼ\ac\164ÞG7Ù\19\95\ 2þuºÊ¢\82#¥@\89ëð^g­ÈÀ`\92  \86!\e6iå¼&'\ 49Ó2\99\10Hü`µ'\17CN\183©È\b\ e­RÂØ\ 1\1dÂDGÏ\16b\90\fB3\84Æ¡·\90ð\94É%|Á1ÆZüÿ\ 2\81\10\b\ 4\ 2\81\10\1c\r\18óÿßøþ_Þ0¾udðtËë>0Ïÿéýòÿo:«òç\e?2ØÓê\ 5ÌylÞe5^\80ùü3Ëýñ<ÿ=\8f;ûY7\÷·\95kßå\1aC0­qÊ\7fï\8c\8bk\9eº\r®æ°W\1e÷\aq-HË^è8ìMÍ\e\7fë0\1cöûZ®ýM¿xem˺ã¾_Óxÿ\97l_>¯æ¾\ 3\93ÆòÍ'Î\8b¿£ÍáSÃ\8d\1féÚBÍEßUæÀ\1cö¥³×¾Xsص®ñ\13O\1e&gþwÊx\1fŵø\8d\15\7fÖå·w²\8cñé¯\18îþóÚf}ísSã\vxzÛ\92Wj[ôuî{Z>ý-g\Wsß}T5ï\7fKy\8f\8a[¾ëÎÓk[
++U\96=-ï\7fÙð¾\9ek?V\ e\82\1d\8d\1fbÉë\1fÿ@åÚW]þþ\8e¦³O¾ü7[+×¾*ü\ 4\ 2\81\10\b\ 4\ 2Á\91F\9f§ÿ\1eåþ\1fãð÷ô9çh5Îß&g]Û}tÑ(\95C?\8fLj\0ï\9cc\16¹361óÝÁÎñÉæBæo1Ïè`1e\fé¼U   ÏQz\8b;\ 6Ó±I{Ü´\1açyúÎ\9dÁ\90¤æç4\9c¶¤ìwF\ 5o\f¬+Ü"ï?5\ 4¹\13ýâ\16zÄÓø«Ê1[\15-\86\85Z<n:ü\95³Ä4u©?\8f×H·\10\98l?©ó×C%¬÷\15u\84é\ 3%f:ã\13V$\18ªÜ@Ö\88\9c\85Y\b­\az½½/÷\ fÉ\9fP×9bõ`ÛaH,xå½·©pðãf\82º,ÆÁzºj7\92G\ 1 ÚCL)þ\98ÖShûÈX(?\97ýb4Ä+ü\15>+l\80Ì\12\b´]Åÿ/\10\b\ 4\ 2\81\10\b\ 4\ 2ÁÑ\801ÿÿÞ\13w\ fÇ·N\1el\9aÊÿÓ'¾áxwañá\1a7id°¾Õ³ÿð¢\93¿[ùås\18\19<Ù¸Þ\ fäùß]î/Å5÷\89-\97\94ûÎû\91\81+÷é\8f\7fmtÖh\89\v°\11ý|¨ù\9cO\19ýl©'\1f¼Ñ#\83ÍÅO½\91ý?ÿ¡ÿ)÷\83\89\90§ÈI¿÷\9cçç}¿ÞÏid°kj/ç\17n\9d»¯ðÿkç¦\fÎoòÿç\86«_©q\r¾ã¤ßÕÆ¾a8ÅÖØ\86\9f|Ú´^\1fW¾péæ\1a¯ tõ\93»âï\9e\8cëÖm+\87µÍ«ñ<÷ë\86\9fØXÛrª}ÞÛú\µýÆ_¯q\ eÍ\87Þô9söò\97j\eþ)m³Û\1cn\9c¹îÕ®-UYî-ó^\88\82®6\80uªöyz\8bÝX;\9c»õ\7fÙ»Ú »ªêü^\8bÍ\rI\bVl©¦\16\ 3S\83Iq\7f\7f 8ÔBý(""H\f        Á\92h\8co\0)N\19\ 4\87±\1de\94bÚA\87\8eئ\95©ÄIù¨Q°µ¤u\98©Ö´F\89R\101Õx\r\88\15&X±¦¥ëÙk\9f}oÞ{ß÷O\91\81Éz\98\eà¬{öÙ_çÞsó¬õ<ìa -û\rÜÙÖcÜ\8bà5m\f\9b\ 6§Ú\9asQs'N/y\0·Óë\82{îò5Vs V·6Ýa«9'A»\9a«q ôå\rôÚ¿õ\82}ì) «Æÿêr½É9\10\1a­\1eÜÍ^\ 4ιÚ\97EݼÜóþU?:8\aâ\94r=ä\94¼àøu_ã<\a[Çþø\82®\9fWÝ~>÷3tktf9ïdÄ\16\9dÃ~\ 3Ñ'\1eße#ù\11§ÝÊù\11Zqnȵ\v»}ùÍ[W~¿Æê|^3rÞ\e>Á1£¸\9f\9bËõ6Òkí^½­Æª\7f\83jëwÆàæ\ 5|\8f¥(\1e\ 6\ 2\81\10\ 1mn\87Êâ\80Ò_ÐzNE=5\9b_÷ÿ×#ÝDT-\aç«\a:\9e\9d\9eNË>CY\9c\8fOòO/ï7\1eÊò®<C\15îÙ\83\12\86ú¹Ò\85+ïÚÍ9h\9b /Îçe\bÑ;\9d\1cÔÓ\83\1eõª÷tH{ö²ê®\13B\80~}Ö
++òÿ¨¨f\8e׺\10hd>Y\1f\9a\8fûdÍúNw\9f\ 6ïFµâ­\87\r\0Í\1dM\8c\83¶¾vÕ\ 6\80ÚÔÞÇ\fó,¬\88¡\96\ 6\85âÆæ\b\e\0Z
++\1a=,\ 4\14ê­7`b;\rÿÖÿL«¨\13?O>Eü6\1c\ eh\12!\ 5\ f\96Ù\1a\14\88Ó\13²Õ\8a\ 6\10\91Ë\0\8b\ 1K?^hI©\89\8d\1d¡\15-¬KÐðWt\9eÇZà·CL¡\10Ã\14I¥-¯]\ 2³\9cmq±¯\15åY\15\8f\ 4\9a\ 5lHºÀ\b·N\8b\99i¹hÉh\89£c\9e?»à1\95¶T¤Ó\FHÜclt!ºF(N        ôÈ\9aÐ)\1a»34±uo\85d\90Ñ\80Òw[V#\80\16·pcp\8aF\9d\8b\9e¾E­=*ç\ 3\14ôµRQi\93hßS?iV#t÷]¦A#I\81¦\88\86jh\ ehãÓí£\82ªù\0Ô\17Ú\94\88(ò§\9bÐÑ\r\86yJ\16¼|¢Óh6\12]\8eú\fáþLíã\97nÔª´\1eñg »\91Û3\81n\búåià\10\1dõA{º}\93JXl\95\91¤\80ÓTDvE v2\ 4û3ÆI\97¦U¦u {H\95´\13PÿÑÑ\96¥ÕÀÍ\ 4\9b\vÚÆ´\1d©½\84»\1c"\ 6ŵ\80¶´R\16\e\85Þ\86$\84\10hÛelîè°¿"¶I¢ßd¸&ýt\91ú\7f\81\10\b\ 4\ 2\81\10\b\ e\15\fùÿøÞs\9f33:¯§
++\97:Îÿ_ݸç\97l<þ  æ\89µí÷\9e\18Ñ\v\ 2®¯Ït|C«KÿÊ\19Ëÿ·´c\83ï÷\8e.ÇÇùÿ=\85\8b}3½®\e,ÿq9\9e\1d\1d\1c\a\1f¾ðÕ/ø\17\1c÷J¥~oKãù?¹\89ù\7f\1f|ì÷nl\éoîÿ\83ûJ^@4ªß[ÙjÓOxüÂûù¸5ýÊÓ£?;×,+×\8d)ä~ï\94Å]û¯ºð\84ÒÏìL\9cß[Ñjê\97l]Ë<»R\96kãokù\0\9f»c\15ç\ 3ÀZ´Ä.XÔ\9d·ú\8e\95_çXÌ\95ß-c¹\ 4ã?vÍ78ÿ@UÍ\0×®÷\17Ç\9eÏ~\føË«\12ÛÒbklÍ\15Ð1s_¶·<\8eñ¼\85?:¢[\9b·üÕôw8f2sÛ\8f6þú¾[.ü\11ÇlåÒoly\vëw?¸\83cÁW}\86¦¥0\9eÓ°¤­ÕxÞÂm¥ÍS¦&å-LÏ\91·pu\99ÏÉ>\15G¶¹V7­ú*ïUìbľ¸ Û\aïüá\83×p\1eK\97ï°ºå;l\1c\1cÎù\ ep^-±3\9bΟVľÒÏséõn½þ\91ª\a¡8¶bA׿¸VDjù\0k\a+8§Á8Ëc¿¹­í\81Ã7}\9bµ"rÍ\93\9c79OâȦw±fÇê\ 1ÇRÕÂØ\Î\9bäÑ1¿÷@ëçêÁ\11ÇrÌ\18îg¿Íç¸\8eÄ%mÝÏ»÷3ºÆ\ 2Ç\ e´Ï\865\83ã_Ê9\14ÖrlY[Ûñ\\88ݳêHÌï­+mþ      ½Îxàï?ÙÅø¼³Gò$\8e«çiËûlg\9bÏû¶\ñm\8eY_ïÛ\ 5Ãó.ú0Dzæ±OµýrÆ÷\9fÿ    þ<Tv4¯\ 6s}Îu§?̱X8\ f\81\10<³P|±Q·\1d\12}R;\87/£R'¬r\9eÀ{óûa-®À!{x\89+T];ú3$\aßõHí\ 4çPà«]Ô>§\1cQªKm\96\92s(\85[\87â_Wø\7f\85Êm\ 3\1a?\16ê4\81_¦o\94\90}*5»\9a\ eÀ\91Ü\ fû0\89§7hÔêHý¢oø4R\aíÀ¦C\11\#Ñ@\87Â:kT$£ûð±w>\a\98\94C\81Ü\84\90Q;L_\95\ 4z¼°ÔÔ\ 64ÐÁ`\ f9ü§\82ß\8e¨\11϶<7ÎÔpGù´N*9ÍÏ\87OA.\84Fu¿Á\9a $?R\8fãÁµá´\13â\1c9\ e\13ó3@?#u\81v\12M\ 3?\ f4®Ü\ 6´KÍÐb£¤\1fLoá\8e+\aýÌÒ©G>\ 5]\89\ 6\82êù\1cãȾ+Æóe\ e½\ 2×\9f\15\98úlsÑ¥§\8b\8däC /ôR\ 1¥ð \9b\9b¾\ 1:J3\8f\85¯mc¥0@jÈÒ^¢\87z5\92\13\12}ÑÏG\1e\ 3úg\95\9b-'\84\86^r>&Õþ£ú\9e6\82J I\1c®TÁ\eH=ÐÅ<ݧx3ÝØ\ eé\15H´ §dTûÓ"Ð\18#tó\13¤\ 2èTÚ¾´=)Xr èöÄ$jÓÆ2AçÀ[\\86ï:\8d\84\0d*ÐÍHO¿
++)8%\83Åa\9e2}à(ºõi=\91\83\ 1­~\83<\8eHû9ZÜe\8eÚu´\vp+\16=<ê;õ\ eª\ 3\99³D\12T)ðîL+\9b!\8e`i=i¹\91\15Ñåæ\94\97ðÿ\ 2\81\10\b\ 4\ 2\81\10\1c
++\18òÿ_8nÕ\17fFçõ®oºð×-û­w0\1fn¦ú½#\e÷{°Îÿ\8d\8dÛ=X\17àÑÆm\9e°ÿÅëêñÜïÝ]Þ\8fzì«O}ñ\97¹\96Ù©~ï\89Yt\ 1\98cCû\17¿çå\8f\15\9eß\80·¿¾qØ\eÎ}\19\1f÷\96ú3Õ¸¼\15û?²¾\1cO\9eÞ¿­¼ÿOéµüñWß[ø\7fg¨ýÍ\8dó=Xw`[9\ e.ÿ;çýzéO\8cÑQ?[û/Û¿¹p¡É!ïà¦\85Ããç\97¼\83\14-\8dwOË\9b\18Õ#èò\vVáý?ÛúúrÜxÛï¥#\86í¨5åxPq~ïæ\85]\7fƵ\ 6n,m\9d\8b\1e6ªú&\98Q\9dÿÉ\1cú²ÆëÞuÓÚ]\1c3\95K]XÆ9\99_ßÖ´\17®xåº\1fp,ÔºùÃZ¾Æ8÷¾ïðníÕ\1f\9fÿ-\8e\1cì\966ß÷\9c¸\92Ç\17]åå\99·\9eÌÙ?qxwÞ϶n`¾\e\12\9d%v å@\8csö;Ëõ¦§PoÿÛ\87U\8d\82\7få\1cÞ\ fë\1a\8f|åâw~\83c¹ê\ 2¤Òædm\83/¶ý}ùûÞò\ 3\8eu9\ 2\8f¶9»}êí÷0×ßy1\1c7\87÷Ãt»7Æu\ f\1e\1fÑK\98Éç_Óæúã©Î\19êáJì\81ûû\7fÜ\17â¶6\86\84Ýí¾X3øW¾^4Õ»Ã-\1aÆfæ\ 1\9cÞîãq½\ 4Ö»\98¬\89°y$\7f`\e_\8f\12óò\9cÿ19\7f`{ËKºaÇ©\ fqÌE\1eß¿·}ýûúUß­\9fM\89çåÑ\96\ fôkó_¿\97\8eAµñ\89>\83\10\98¡\99\9e\97\ 5}H»\f^=ÒáÆIv\9cï3Í3|F\8d|\ 6?  ¢^»\<Â3ç+\ 4å\94Ãð¼Ï®ãMi\bÑ ÉÖyk\91}\90»\1aýä»<\82   \å\98FøÓ]\93=[\1eC­9\9fM»ÀÐ\1c\95\ f`mSL\9d\1eÀ\fí\83a­þl\1a\ 6ãÜ1óÙÁ\86Ñó\9fâÚqz\83ëÚ\86ì\80¦ ö$6Uw\9c~a\19Ö2p\1a¢ñ´óh+\96Úûºv°\92§yó)!#\81þD\9a\84Q°.`\17\ 2Ú"\16vñp\ e\80pB\ 4?\ f\13\ 3\9b}R\99Ó6\12-        -³Ç6\8e\ e\ 5í4\ eÚÔÐú7\86&½éBP'QË^yÿÙô\eÊ"OÒG\98E»_\aäJà\87B\82É\ 1îØªùài2#-\18¤óqwY<\88\83\8bÇ]\81¾Ñ½H?\b!1\80Faûf°\e!@\804\17\8b}KÛÐÛ\9c³ö\99îÎL·¹\86\a\0=¢!­\84>(\f6 E2\8c¥ÉÔp< KGºs\13} ä\92Ç£M\1d\9b\82ëC\80\8e¿¥iÃ6Ä©t@Q\7fÐ`\84Ø\81£ùÆ\11\94úÓB¨D\1f*´wè7!Í3Ý6è-ÝfÈ\8c@\ eDõ|p4\9d4Lú¬\89      \13\ 5Õ
++,\91¥\157\183*ùsI\1f¢\ f\10ºõè.\87ÌE(6\ 16Ðå=]\9cº\fO\81Ú_\8f5\8b      ¿\v\84ÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81àPÀ\90ÿ\7fá-Ûÿzf´ßÛY8·íôZöØ®\9f\14\1e^\81\87ÿÇækÿ7;\7fõ\våxá«Õ,<üõ³èùßÙjf\ f®·¿­ñk¯ý)óüI\19:~CiçWèµô´£\9e,|¸Òª_ë\80Çyu®\v¿\8d^\vÏyÞ¿\95ã>Ñu¯,ï\a'ø²\ 3ûÞY\8eç\98:N\93µÿ¿òÒZ_ï\98C½©\9c\ 3\9eôÏN\;¨¾\0\919ÔÇ稡g­\81É|ü\96V\13==Xñ\89ʹ×zâÍmLgÝð\8eïÖXæ¾\fùÇ;?}Ñ>\8e¥Àç-,±\95ôºñ\83oîxõÚO®MÇ ßúÃå72wn«^Á°^zã`ï\1d\1c\8b\9e¹Ð»[¾Á8¯~y\9b³ñ\9aömm|k\a¯û\10óÜI1\9fûŶ\ 6ç|ç²W0ÏM\8bSb\97µ¹þØ\8euµnÝG\1eû\99­\9f«\a\e_Z5üu­[ouùãõçW6¾úÇ\1f]ó½Ê-»êm0G=ø¶6g¯Ûû\9fó*\ fìy|»Úº\8fsÄÛ[®ÇL\8e\10\b\ 4\ 2\81àPCãàá
++`\82\8f\11JüV»©\91:qäC\82É\84È\ 1þ'è¡þÁ\b\879\92Ëñlôk§§E\1d\14£N åD\e\9f\1dõ:\81\9cN1Óã+\ 4)èDd\9dh\9a2ãbfe\ 5\9dR2\9eº`\8d§Ë*PÅ)9\83¬\11PêÆÒ\ f\14¯,:\84\9c\8a\84JqU$\1f´\86D\ 5ò\0\90u\82T\fKÍ@&\82:ìèÁ\1f-eOCÖ¥^Ý+eçàæ»Úû\96«ðsà®s©Æ×:Ρ¹0[Þ\v\8d\bù\ 1ESc6½\ 14M\9d\vd`\98\98h?øl\ )¡ÆhV]ÎÙ£ò¾Ì;T?°Iu¢\91Ñ\16H\8a\16Ze\8f}\16\15¤=\92\99\90\83¢á\1c\91!<\82¤\rd\ 5Õ\1c\a\1a\11]=\8fÜ\v\99\86:ÌUBJ\91\v¹k\v>\r%WÈ@þ?EWô7¦fÓZÀLÑ\14«Ò¾ðÿ\ 2\81\10\b\ 4\ 2\81\10\1c
++\18òÿË?~Ï\97gFçõTãSGõÿçõ64Nô\ 3¿qñ\99\95o\9fê÷®m5Ö'|iñ\ 3US<õ+g;®ÿ\7f\87Wìw%/Àyeû½Ý\8b»÷/»\9fõüCÈÔÎ\9d­®ø`=ÿ%\8dK>þÉ\97¬áúüìú½Ç[û£uøó{KæÐßg¾w²þþÎvýñü\80©VG=\9e\1f°½é%\8cëï_?GîÀ#­Öý÷\1eºìت£_ëÒ\87^\v\17\ f>Tc&0g}RéË)S\93tô_Ór7þvéZ\1e»7\81Û<µô\ 5\83\¿gÓÖZ¯_ç岯»o\1aìäü\80\10\1d·9¬gÿÖ\1dïØË±®&\7f\99ßððiÏáZ~_s\0®,ý¼\9d^\17Üs\97çX¨¹\ 3[ZýõÊ[7²®@âZ¸ù½kÚþ[¿ï\88\ fp,ÔZð-sè\ 3\ÞöçÛv_z"kú»ê=pyi\13z\ 4÷þÝô79ÇÁ{\1eß\zÿ\9c{2Y;à°Ò\97É^\0\9f\17oºsÓW«\ 6\80æó6´}6\9e7ñH[¿'O\9e\ 1ë\1cÏÙê9¼\0vµý2®\1d°«õå\ 5ǯûZÍ©¨º\10j\ eMÿé\ 5Ý:¬\1e<òç¬\ 1 «\aÄ\81òw\8b\93ëõ\87^\0«\ 6g°×\ 1D\92§\86\1a\aX÷³\97\9eź\ 2\10ó\9d\1aj#L®ågí\87Ézÿý\91\9aüS\97r.\86©ë¾§i\96¼wÞé\ 3\8eùÄó²pQ\17\93\1c\ e\81@ xö£«³~\1aëÚ¹\16]»H_\9d\85\13T(©\ e(\12\ f¡rs)8oR\86\ e\7fó\96\a}\97P\84\1cLÀ·µòyè\ 3`T ®\19\17\92'ú±«¬ ;n«¾þÓª\8dþTø\ 3\ 3\98ä\7f UöÁD\aýz\10³¾ò§ô\18J]KE\17A+\vÝt\9d\15D~x\1eG¹Õ\99y\ 5\9dv?R:i\1c`uuÙ\ e\10óy
++¼\b\9eu~ñ³pÊÑ"QÀÚ©¹|\ eèÑ\9d6wTu®éaÏ\14%|CÓU´\ 3LLèÝ\üüÓí½AÛ     "ýp|H1ÎêÿÀ{]Y;«¦ÆÓ«Ë@\1fVe|\8e:\95ñY\16y\r Ê Fr4\84ÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81à\90À\90ÿ\7fì§ï¾hf´ßÛ;K}þqåø¸^=×\9eϬ·\9fßû|ã,ÇùvÖ\0@MÿÙ¿x&ûÁÇ\}ë¯\9e\83\93ÝÕôÎßtõ9µ&=VN}_Ë\1føé1ç²\8e8\bð\12»{q׿¥\9f\9dþzÕI¯^ã\aæÐPßÓøïqÝòÝC~øÁ³?Ì|fÎÌåÞÜÚÜñ±ßý\8f\83=Êo\9aã|sã]\7fçÞû_ÎÜ£*ܪ@ \10\b\ 4\ 2\81\10ü<ðsÖ¸\9f\99\aàaíPÒM¢×5¿\80s]è:0±ïr3è÷\,Z[F\87¬M6És¾\b¸pXv\fÏ\9dU+`¦\1fÁ³L\8b¡å§ \11\ 6v^Ñ\84âu\12³§é÷HW1Õ;DÃÒ\8b&Ú ×E²ÂHý¿@ \10\b\ 4\ 2\81\10\b\ 4\87\ 6\86üÿsßtë\8bfF;\1d~ðÿ\ fí_Z|ï\9d\85þÿÍ\8dÏ\7fî[_\ôÿcVª_õ×¹Þ~sáÖ\93ó±Ó¹Çû\97l]ËõèJUÝù¡\ eüÚG~é\17ªÇx\8d\ryüq?pÖÜßJ¯3\1f¼ëv\8eÅÊ«ïi×\9b©ç.\10\b\ 4\ 2\81\10\b\ 4\82C\ 3àÇsv&#IÀho\1c\f        \LÖ\96\ 4\87¢\a\80 Cv\ 1\\1d À@G½\85óCÑÎÈ!Ð\7fD\13l\82«\ 1µ\16\1d½Y%$?\ 4\9f²2\ 1d½ò:\99\10\82\12Ô\88ñ&Ã\93¹LW¤7\14)\aH\14\18Pó.\ 4°ô\81Úö]N\ 22-J¾\ 35Pr\16¼7ôÎ\98\93Ò\99\9aítý\91n\0E\ 3äBh7\927Á¾\fè\86\90\\11\85ÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81àÐÀ\90ÿ¿ê/?{ÅÌh¿wváÑ?E¯¥ÿµü5ÌÛk×ï]ÒêÖGuõûµ\9e}¼þÿ²V˾á¾+rÕÆ¯:è×6\8d\81Ëß÷\96\1fT\1dô\1a»fÄëýnÖ        \87Àª,\9c\10\b\ 4\ 2\81\10<£ÑùÙ;xTd\94Âë\98\86Ç!, \9cW>À]"ÅÔy8<Ëêòé\97-ý¶M98jÏ'\8c\95.®Té\94§î[W\8c\85ÍCrÁÑÈ-l;\8a?\8551Á\13 G\1f\ 2½7{Xm¸hèZ        Æ\eº¸0Àç#Úhaq\0\97\ fø: ¼\1fo3\1e)\ 5ÞÒ\149xz\94\94\ 5¤"\ 4j!$$Ê\vÿ/\10\b\ 4\ 2\81\10\b\ 4\ 2Á¡\80!ÿÿíÁ{_13:¯\97\8aÿ5xûk\8fto(uôÆÁ\17 ùÙ\1f÷Oï?«ðùÎ\85~ï¨vü\84/-~\80kùUêW\1ft4vì»VüOÕ¹×ýÞÑ¥}Ôéÿáë^øÏµýØïm/\7f\9d\1eÛõ\93¢;  ; J;È\aX±ß\15Ïtç\95í÷N*y
++\97ÐëÃ?|þÝåxrtÝí%\7fàÍôºn°¼ø\17¸\8c~n[Üõçâ÷¼ü1\1c÷Æ\1aj§´\7f\1d½N¿ÿ\98ÿÆñ\10\fõç¨#º~\1e¬wp`A;þ½£¿\ò ²òýÞ\91m\o\7fý\8bÊñ¬¬\9eßÛÙüç/ü¦½¥æSt¾õeÌóèõ¹;V\r8\16\ 2k\1dìnz\ 6g\9d\13´Ë£\1a       hsýî\aw\94\18þ\8a¬Ä\8ejz\f\17\ f^{\1dÇrbÏ\82©\96\93±î«ï:¾Ä¬Jì\91°¡y¢¿kÉÅìÉ`uõK¿¼ÄÞ\88ó¾~à\95\1cs\8eÛ¼¦\8c\ 1Þ
++?;ù\8d÷s,8î\8b\8daÉ-+Y\ 3Âéªó°°õsÓ`ç\1d%\16bõkXRúù\11z}ú\97×ïa\7f\b[u\1eXo\ 2\roxø´çpÌ+\9e³\re\r>\8a¾¾rÓC\1c\8b\9aÏ;¦éJ¬¼ucÉ9ÑIU\8fùKÊ\18\90\8f\v/äó²V<öÓÛýð¶Ý\97\9eÈ1Wçå\89\85Ýyãy,7´µ½ê\1f¦Ù«Â\84Ä×[ÖæåÉ\93§¿Qb4\9f¦ÄR\9b\97Õ\83}\9fäü\17ëÙ\9bþ\82E]\9b\1fÛ±\8eÛt>òøöµ}vÞ½\9fÑ|\1fÆÀktóáÝ\9c\9d·÷\83'U½\8dÀcXÒ®·f0ý©\12\v*ó:\1c³¨\eßU·\9fÿ]\8eu{éè\91ófzc\1ch±U\8338\87\a\15O%ƾ ðþxÞ1ÓemQ)ÅóräÈyÛ\8e­±È}Ù¹°[¿³\97\9eÅ}\81Én\89íi÷¤h\7f\b\ 4\ 2Á3\ 3Å\83]¥ä\ 3}\7f«\bÓøÎW<\12è        #\84\98\12|¬cHÅOÜYå¦\8a\8b\1c\8a\a¹³Éª\9c\ 2(4z\18\80\e½3É\163ö@Ç¢²ôö\0³zj.y£`qNoÕÖ\ 6ú\8f\18KE®7:*z\8eÒ03Ï:\aX\87\a§4\èQíëé{?G\9dè|SD³Q»\8b
++_¯\8bÙºFk\ 6&Ûô´\99´w6à»-£\13F{zvÔôÍS´º\8d7Îxç;ýr\ 5\9f\9a¡\9eجa\eN\7fxz\18´¨Bö\11*æNë\98\833:+Mßa^Á&ÝP?u\80\19ºÆÿ%ú§Î¡¡CÙ;\97\8c͵~¸«ÿ\9däÛn"õ\16ÿ¦«&zÞ\8aU+\9c¦\80æ!GG\ 3Ò\95\9f\1dõ\ e§¯vWj\92\9d
++\1a\16òÎ`¦iÄ\10swÎj\ 5MxjÒÁD\9e\9eW\f}7Óh\1dÄÚuÂ`i¡P]mÀ\ 2\e\8fñ\83Ò\8c)xC\93O\91TÚú?ö®\ 5fϪ¾\7f\8d·\17\98¨k&7¡\\84s¿\fu8\991¬r-\97ÖÖâ\84\81òÑ\ 2a¦qÎ\10\r"\98\11C2¶\90IF\99r\v,¢¢2ÃB\97u\13E\11±Ó\8aå£Õ\8a\97â\ 6\13Æ~¿ó?Ïù¾~ßW\92eº \9c_úRú\9c÷9ÏÿüÏÿ\9c÷y\9eÿåçYá\1dÚÍÖáæ\8dÅå\93"»½Çí¯\87êIÆ\8e\v\18\19+}²¤;gás\ep³ yÐ\ 6\8a\83\88Ñpv\87Úï{ó5ã^\8f:ÁÌ
++/=tÎZô\89\9aÍ.ºªëùxà\8d"\1d{\80úM\b\9a\1a\ 4êÃ\17\f\9b\9a\8f\89Þ`\8c0³T{(ùÜ\ 6\ 6\81¥\a\17j'I<,ÑÒ6\98\ 5\9eYK\9fÔð>\94\fô\1cY\9d¿8\94\13\86\bK¦£W\98å}\84\1dSL\9f\13®A't é(©¿\8f[wt\86[Ãd=SÂ'fä\9aÃ\12a\ 2\96Ó\v½Á*t)¬O\8f4     í!<\9a=o\8e¹\9a\80¿t²¸\ e&\8eõçMR°UÌ2nL)1×UNu\16UæòÂRrÌ\90÷\8e=ð\f\176-;\15\7fÝ`\rBF7Ì\1dÌRÑ-\ fëãÚ\83éb±2¿\9eë\1e\eCqÞg\18´¢\rC£d\b\80º\15u\96´ãÂÇ^A\9a\ 1\8fM#'Ób\10f\7f¸d8N\b\1e\8d}¢}WC¶H9\rW\82Õ\81r$\ 5C\83 \94*\ e~\bå\ 2\f\10\82É\8aN9c\r§B\9a\98%\ 1X
++\0ºÄö\ 5Ýa xRáÃ\1fwÄR\1c@j\0`© »!f¢¨\1f\86\8c\95mx}\98±p d\1f$\ e!avS.vÌ-\ fÂ%
++0Ä\tÿ\7fGGGGGGGGGGGGGÇË\ 1ÓþÿÓ?ð\93µ³[Ç£+\9b¿ýØÝ\97½IüÎÆ\8f\14\1fÛ5øl~xÙOÅß\17Üà·§ïmÅ ¯\12\7f¾6f<:§\1c_\85ÏQ[6\9dQ\8e;\8f~.oq\ 1{úá\174ÿóÍ\17\1f\ 5|ðq<zzÑ Ïëv¿·øÿ\837z<ÚÕ8\ 4\8e}ê]ÅïÌt\87\ 1\9f\80Ïò/ýö\96â\9f×\19ý¬hýÌä)\18\8f>µïôñ\99u\r\1e,>èÕ<þó[ÞVüùÆÛñèÔ\19ßWkËñ âÂÑ\1dÍÿ¿æÓÕ_¯b\16_ðÖ¦ÓõS_>Btj\9dømoXÈ6úºOÓ\93Û¥-eñ£®l¾ç¹~þ\95m<\e¦®:Tüî&\88?ô#åz§ózß7ªúä\8dô¹|ñôy?Z,mÉ\8b,+\9a\9c\93SÇ|BüõÆVÿë¢a~î¹ký\ ei\93\v\96>¯ÅçÎãW}µ´y\17Äg}aé\93_8\7fÛÅ·\88\9fßV½ÜÛb\aþôà5\ fU?¿\129\ fju%\8eO«·J\9bø\ e\16\8e\8e)sO?øåw¼Câ&RL¹´\9dÚüÄÏ\1ct¶ðG@×rÞ³Í\9fí\16¬\11\1f2\ 6(m\12ïÁ\93×>vÊÇÄ_\8f\19,m÷\94ó~\1f\9f\95?\ówâwWZÆðlóóÏõÉonq\1as}òW.\1cd\99ë[?µÍí\ßú\ 1\8b\a»?cç¥ciK5þÁµ8\86\9f}|íã\95;ÃUî\8c¢\975´³'Nü°´y%rnj6½zê\93×H[\8eÕ·Þâ{ÎùöÊ¡-\8b®·-\1at=×'ïÊØ?\86ÏÉ[?w³øäU\8dá¸dáÐç[¾ñèq²g¨j×[[\9cÎ\aöY1%m>\89-mmz9yjÓbiK|åßÑÑÑñ¢Ã^ø­÷æcÄÿÓ\9d\1c5¶Ã`,óT#½CNã÷F\ 5z\12½\8dØÔ3Z\95QÆY\eÑ\8fµFy\95Jª¨¶¬r­2N¤Û\9d^/:jmPø\11          ×,îfËôR:b]Ò8Ùë\183nÐÐ\1f]ªZ)toÓ oÆÍ\12=\8a\81euõ\9dÎü@2Å.\83\89\1eÒ\ 6ËLÛâî\82@BF\9dx´¸Ï½w¬Mm0\f\bj F6¬º\8d[\1f\15 µõ\86\1eöÁ\17\8d\9f\95à\8a\7fËRB¯4tTü¯\96ZQy\86<{ó     ïá\9bÕ¸\88\r>[Vò¶*Zºú­\9dþ¾\8a\81U¶=n9s,¾YÌ\ 1ÉÑ\93§\8f9á§)a\16ð=&*C­ÌÆÅHr.^>¦\bcÞrÀð\8d\84\ e\1a\86C@\ 2\17Ð94¦\18Ú@¢î¤xël\95Ã\rRvôú*Cg..\90a!Åÿ\97 \0¦úZüz'&FÓ'\|´AáÞ"§à\99XÌ«hú\875'\80á\13\1eC\8b\99º\8dL\v\f= /Ôá®Êg£¡b\aa#  ×\15\1dÔ*qÔ\ e
++d\8c(\ eÓKɬèLW&ôÑü¥óð\8c36ÁÒ\91kíÄ<~Ìbë\ e\10\0r\96ìç@\8b\81\1dÅ_\90Ram \vf4ãâ\8e6\99ib¡\84^`m8FX@pÅ\8b\9aÏÇ\85n2Ã\ f\ÆÚ\81Ê\12ã\10`5\81k\ 5JSX7\89\ 3\80º\1dF\82Ùó,
++\8fE\8a\ 5Vt\80)§g\qñE\87%\90C\82\15¶ø\88¹¾V¨6\19h\1c«\12ã¡×7\86¨Ð9æ\17Æ\ 2Y\18\9cj"§\12\97ÒX\89´\ 4Ïð\8a<c]\r\9cïº|\19\8aÀy8Ç\ 4\93N\81K\80¦i$û\1d}£ÙA£\fT\b\f)àñêçgÜ\ 5F\ 2\15sEk5ÈÊ@\16\98cYk\8cNñ¸\10.\ 2\13³´V\98  t\95l.Á4XÄØ³\82ãæ\85n`\1fø\1e£\15`\9a\9e\11\1a\16v\87\83\94\19Å\ 1m\87ÄÐ\18\86-8,\94ä\18\9f\11XØ>\ 6\1c\r#"\14#3,\9f\8e°Æ-\8c\90\eYY\99¸,\16\ 4¬\ 3\8cYÀ?\8c\vÜ\ 3,\97#\86ÊRþ\1eªPXú\f\95ÀcYf\ 6½)nw¨ß9\1eaý}Ø;&Â\a\aá0\91\9añ\15\9a\8f\ 1L\93u1Õø\12ïÄÆ¡\12æÜ3â\0_)¹ÿ°\eì¢\9ef\8a.a\96\8eÛ0ö1îo k\8cq+\8cc0\8c}\89Pk´\9c9¬û\88\vh\86!\94Xi\1a\eÖ¯.åý\19Y\93\18íÁo\97B\ 2\\e6AJØ\f\9e¹ÓÀ\130O|\ f#!(¢Õõ;\;\98\8aÀ0(>ètÿ\7fGGGGGGGGGGGGGÇË\ 1ÓþÿS\ e~þáÙ­û\8c\9ej~Ð\8f.\7fÓ»KÞ{2\13ã\91ÚK^½øiçúí\ fkþù#\9f?¸øÉù\82y\s×é£Ü²vùϤÿ\90Ç£÷\97ã'Lìé·\1fò¶Å_}±ø¤\8d©¾×qËéþæmïú\91´ÙêË^ÒrÝçúÎ\1f)çÍ\9f³¾ ]ï=SÛ?]}Ë^r¥\85\9b`\12\9fuÛß¼ ú\8f\95øB'Úyë¦\8e\91\9cgãªï\rºç÷\1fß;#\8fú­·\89\1fXW\7fç}m|×\7fñÄ\9dâC-¯¦::::::::::::þWØKÜÂìØ\98_Vî½I,) \8dó)¡1à¿ÆXg\14Ë\1fH%\ 3ã\19q\81«{ç¼ö&Ò\8fÍB\b6{\86o\94°\87äUÐA{zÃ#Óö\83eQ\ 6Ëø\ 1c²cm\11\86\19i\96Ø\98\99çÏê\v\86\11!,\99\10!W\9cæ%\88ÎѹÏ\8a\ f)Êñ_DüÅ/"&\84\91<,TBJ\85\94È\a\10æ­§\92\14µ\1a¨5F|©ò,Úýÿ\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d/}ôçÿ\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8e\8eþüßÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ\9fÿ;::::::::::::::~\150]ÿïþ\ f\³ÏìÖ}F'¶ºyWïïN)5ç\8c\9b\18\8f&Ûñå\ f\1c}¶p¼é8\1e=RøÁXÏïØç\8e}Njâ±Îß¶ÆÕuÜî/üA­]\97Ç£sZ?GÿÓ\ 3Ò¿bý?×jÝ}ùä£ÿ»\1c·Á\8fG7\16®0rÙ\1düÜÉ'\96ú\82Úàº÷\8e\87ï_xöQÂ#è-\8eoo\9c\1f\95z\84!ä4\1emn¼i{ò\ 5^Rä?ab6_àõEN^ä×\1e\7få¿\94ãYA\9e\9b\8a\9c³y\ 1\17\8e^Y®ËÎÞ9õØß\bÿ\9fñR\e05]Ìåÿ»náp\9dÓßPy\ 3Y\a¢´½¾\9c7?7àMmü«þvò±Z\171\9bÒvØ¢a¬\7f´óòÊ\r¨j\9dÂ\83\9aþÏûÊ¥GÖ¶$u
++\9f.ºø0>\8füÃÊï
++Ç_ðr½»\97\fãÛð½\rKeþC½Þu\85?î*|.øÁ\9fß*\1c\7f\ 3×Û×\8a,óóÿÝÑø\ 6/\9eÚ"µ\16C¬\}ã2_óóÿm+c¿\13\9fs\1fú\82¯mAdyªèó\0|.zü\887J[¶¢Ïg\eWåÚÃW\7f§´e£\85\1fïÆ¢\97¿ÄçÌ]G\v?\9eÊVú\Qæül|þD\9f¿KlÜ+\19ÃÕ\8d÷ñýK/z¸Ú\7f\92ó&ÛøæÖ\84|jFÛ\8a"§±¾ÎÃ\15E\96\ 3ñYã×?YÛª®·.\1e®wçÄ\ 5\ fI[
++R\9frûâaþNÿä\ 5Ûj\9dÉzÞ\15û\ eówÎö×½F¸\b\95\95±ÿ¸É²fj¿C¥Í\18\91¢kn\14\7f\9d.\14~C\12þ\94¶{\1agçå\9f;ëñ\81Ãp&¯¥ÔµüWé3\9aZcó¾ÆÑø­ÛÏy¢ò\14z\91åkãá¼ÕS§|BÚLå)\и+O\9eÚüÉÊ)è¤V¦kuH¿øW\7føÝ=ù\ 6Ç\8d»òó\7f\8eº\17\85Ü\7f\f::^t(¼K1°º\91ÍäbÒNsÓ,üo\8a4IÁ\9aD\92*ërj5\9bBÒN8ÒLP,\ 3\95±q\901)»L
++QüS\91Ù®lë\9adsQE2Q\85\10¹c\93\18Êàç'\87ì\fú\ f¸(~©Èتl,õ\99²"\81\16úHdfË\19ý%[ø\9a¼#³\1d~\13\82R¶TkÒÑ¥ C\80ø\99\ 4xѱ.TÔ8\96ð[Åkúd*ÿ\96ɾp|     ç\9cI\91|\7f¥ú\93Ã\17=+${\ f\85\90±JS|2çE\92¼\85\8ckf\9btLÙaD>JU-´yò¤åÒ\7fr\90_Ab\8e#\84 J\9d\vAU\95ÁùR\v˨"\83M\85ÍK±àp\9eæl{\91ò\13Îä\9a+¶àÈp\1745\82Is*êZÃ\v¿\87C\8d¯_1\9e3\7³X\9b\1fø¿fs{\95Zm9y¶AÇÊ\84d1%ä&äȰnp)Ü?â\97/ÂZ­Ã\ 2£u\ 5åx7J3£Ú\v! '2ÄÈÂd¹X¶fE8Üx£\ 1ß\ f\18   lÖ'²È9r$Zò¢a¥8V\˰ð6\17¿\88\9ag\895äHÕÌ1\ 6\165\vX­X"±°ó\89\8dc² 8\ 6Æ)ÒIÍâ¨äÔ8\18$.\89ÉrX\rX\86¸mD/d\85ó¤.\84\9bÌZu$CdåoCºKë=\8bÜaÑá
++\81Äye\r°F\9d\1c¦&aSà\9a+,\89X\8ahÖ¬e§ EH\1c\fÆiÄ\ 6#-R\99¢\eÜ\84Qv®`\võ\91äÍi\95\96\ 1\85à,E\9aD\b\92Iܨ¹<\1c¶5ØPbM;ìkÑc%\91\ 6\ f\7fH_¨8xOJ?X\1d\19èpï\9f\1fL\7f\10\19{\b-\ 26\fóE\7f¸|â")¶\83\1d\11S   Uúr\8f\8cÅðË3\v÷
++ÍÊx
++\96\12r6m\ f\83q;²MF[mÔ$\9fU¹0¹/«ÝRuÐ,Ôª¸¸3+\r\96\9a{0ÖÂé    \ 5BN²òqñ\ 6L04ÂÍ\b»EÆ/\80\98\19ì£ÜÁb^±\8e¡q\12ìÁÔa_Ø\8f\ 2\95R\9f\ f\8b\80{/\17\ egÔrwÏ0_\98¨\83Aaôø}\80QÃü2\99­¹yB^Çò\80\96·ë\85S2Q»\89t\9dø\85À®dë~\82ý\18Û\16z!q©\93%
++\91I\16\88Í\15ú(į\98Q\1eÆH±O\a\vÃ\bÜÝ2W\95\87ºq*ÙDÑ\13\8eOü29\rg>ÿ\1f\86ãgÿö\8eë³\ e\9f\ f\8fýç¥[ës\ 2\9e\9f·\95ûkÖÌ_tÚkþ±ÜCc\99\8cG\ f¶ûî#\9f\7f\14^\0Í÷\ 2×\96~.Áç\9a\1fþæýå8~\8eÆ£e\8dß{&_ÀÂÑýûíýùùÊ¥Ã3ÏÏïX'<ñJ8sñ\f¹ßð¬{á\93¯ø|}f­ÏmRË\9fÏQß¾ë´ïïù<{õÒ½?{nlüòÏ\1c¾Zøå1wÒç\89­íç·Ôç!\ 5ÝNLóÒSÎçß0)Ï\82ÖÕó\ã\1cøé\9dïþº<+Åúìrn{÷ñ¾#ÖJ\9fQ)\91ó\8a¥ÓÏC³¹Ù\7fÜÆþ¶Ç>sûðÌ£û-dGGGGGGGGGGǯæ»àòÞ\92/4\15_n\84¹ï*K\13\9eÈ+\7f\ 1\1e\98\8b\ 3\9e\89E\85g{>\8a«¤C}/\112ßfðÝ\a\9fÛ£Ïz>î\ 3¾`\92w¥Iã\81\e\ fë9òýZT9\94wNÁy>\8eáÉß\r×g  ~>ð§\Þ~&C\87Xyï£T{\17å½öÃûÞ\94}41á¡Þ)¾k#¿BR
++Oø\94\97oGU\8a8\e\8f®Ê9«\f\19\19ø"'\9a\9cÊ\8b\0¯\v\ 3\83U|e\89®ù\ 6\9cï¡b\8cZ\85\10(\12OK¾Çÿwttttttttttttt¼ôÑ\9fÿ;:::::::::::::^\ e\98\8eÿßü\95'o\9cÝ:\1e][rsWásÈ\96M«$\7fÚ3ß¾äóÞ\8dÏò\9f\9f%\9e_Å0\1eÝQò\8a\99ÿ¿s÷!»ËqËã»J?sãÿï+9¼sóöw\94ã\1fÅgÅ£\aý\97äí3ÏÿéÒÿ   \13³óóßZbßgçá\8fGû·xù£v«µåxPø¾Äæ3Vþ¨gw\T\8eç\98\16\8e6\169\19Ïÿ\99O×X\7f\86LL0¾~Y\8bç\9f\9b\9b\7f}y\8fÂ<\89\v¿ù¾,m¡æ\84O4\19ÖO-´µÍH<ÿ²2Îùsú_Ùò\9b7Lmø¬äô»,9Ì\1fY2Ȳ찷KîºÕV®·y¿éó®ªùþ&\88\9c÷µ¶É©£n\97\1c\b]ó¾/)ºý=|κuÝÎÚ\96%çâ\806ö/Ü´îAi35\9fú\84¥Ã\18îzÅùÛÄFlmÛ¼ï \97ó\1eýÜ\12iKU\9f\9bZ^ûÊ_?õ\89\9a\9b_õ)¹\1a\1cäù;ö+ù÷\9a\99t¥mKË19ã\8a3kÎEÔ\92ó>Ñìé\99\83Î\96\rmk\1eÇÝ\8b\87>×>vÊÇ$ÿ^+¹Þ§Êü±®Ä\99;í¦Úf$\1fãÚV'`Õa\93ß\96<\ eÌ|i»¢ÙË\81G\ ²XcEg÷7]¯\9b\90Ú\96EÎ5û\ eöwæc\97\1f?äûËø¶¶\1a\ 2Ï.ºø;Ò\96knÈ#-oä·\8e<ï«\92\8fc\87ù[4È277\7fGË)y~ÉYµ-\r}.\1eú\9c\9b\8b²µåù\9cý¡õÿ.mI\8b}n\4¬õ\9f}|íã5oß\89,ÛÛ¼¯þú\81\9f\956geì©Íß#\a®\96ú       Ùz¹ÞMMg'O­¿FrX²\96\9c\99]­VÅ[¾ñèq¥M+/:;¬åá|ñµï\9d\926±Á\8e\8e\8e\8e\97\1a\18+\9a±¥b\7fL!Z«ð£ËlRg\98·\1dùëlUd2¢  L6M)&o\14Ë\10à«Ú\96\94ö\18Y%\88éÔQ1{ÕDå³Î!{\93\82Søõgª¸a\9ezÊø\8dÅù\86\99Ñ\1a×q:øäu)\88 Ù\9ba\98-îêðûà\98\88Ëb3\81Éü>0        ÞG;³.\ 3\83       >F\ 6¬Z]ó³\8d\86¨Ì±Å­\87\ e\99      Õ:ÖXÚà¬M1\98\1cX\8f\0Wcr²e\ e4\ 6\9dpñh\1cÓæ\99îÏlz[ÒÝ]Àw\9c±\18\99ɸQ\80.ð½!G^ó'R{¦Å&W\86f^ôõ\r,\93¹C\fé\ 5j`Ì\8eQf4±f\12½+©Ç\96éÞ¬J\80\9f\ f3]\9eÅ(ð;\8c\9b\9b\98\rkeà@bæ:\8c wëÎp6 ¢.9ð¼\8fó\ 6\ 6\82\96TúòL¥g¤³uÌj\87]1\89\12\8f\fóàM/. úu\98¦2§Æ¤:ï.K|6\ 4fº¿O¬\1eäñ=¨RYL,\86\8dËÀ¾p/Ȭu\88     i\19)]
++\83\8ac^8\8c\97ßÄ,¨èq/SêKý\7fÇV\17Û2,ÿ\91¢£Àµ&C\80Å@w\90_a¾\f«ma\15\aWR¿\8dá`Ķ\8bô¬Â \1c¾\86\19\88C^=\95\rSÅòÄâ\1d\15Í<f\9¦\96[\8f9+rÐö\82cººj9üÿ·:\f¬f\0åÁ\8cj\7f¿¬\1cõ!F\1eóÉò\ e\89f       \reÌñÌz\ eå;ÖâZè±Î7æ\1e&\9d±\ 4 nþ;b¹\95\14|lhUo2'¬\9e\12¼\ebð±\ eÂ\8c:,^Å$uh /SJªÀ8j\1c?\14©q\ 5\16\ f\bøãt\11À¨@[ÅD³Ù³<\ 5wZl\19ؾX1\ 6\82À\98\92WЯÂ\80X\86À³
++\82ç\9e\9bS]=*sëÅ6ë8\7fÞ±g\v\83㦯)vY¦,wÂ\8a\12:\ 6\83e\v°~±Ëâ^¾È\99X\0"(ÏJ\1fµ\8eK÷ÿwttttttttttttt¼ôÑ\9fÿ;:::::::::::::^\ e\98\8eÿ¿÷\83\1fÝ<»u\9fÑ\95-\8ewOþ¿ÍK\86ã{òÿíh\1c`\a¿çȧ¥\8e¾¶ãÑëK|îÜ<\82\v\97\fß?ôÒc\9e\93x_­Ç£\8d-\ 6úC'½ú\81z]ò\v¶Xå=y\a®nü|·nyÕ\97J~A\89ÿ_Yú\9fËówÝ4\9fß;\7f§|?f¥Æ£ÔâÇ7?yÈ3Âó\17Ô\90ï@þ¹%gþÆ¿\95|\ 1\9fôÀÍ6?OÁ¦\16£?\97§à©\96\ fqÖ¡k\1f\96¸\7fUcÊ\17´XíË\ eßð=iÓ56ü\80ÆO¸ñø5Ò§uJâÛ\97µóÞ\1eÏ\95ø}ëk\9f»¦ó\ 5n;ç¡!î¿æ\ 4\94óæ\8fû?µqÈÍå\0¼¾ÍÝ=w­ß!m)\88,»ÊüÍÏ»·\7fã\97{ÏÔváZHÑKl¸ð)2¦ü²W¿Kd!ÝGiÛØlî\8f¿vÙïJ\9bKÒö©\96\17r\83{Ç£Ò\16¢È9ÑbØ¿ñÙÉoI¾\80÷"çþ¥m\12\9fuÛß¼@ò\ 5\åF|zñ \8b[°æ{µ­r\ e^ßâ÷W=yü\e+\a \91ón(}\9e\82Ïî[ÎÝQs     j<½Ä°³Ï\8d\1f\ 3i\e¸\ 3ïk¹\ 4\7föùI\89Ñ7!\89Înh9$ë¦NºJÚ\92\92Xû+_ ?áÚ\17ÈOp/ÀOqc»Þ\9a©\1d7\v\10£\7fõ\vð\ 3¾¿Åï¯\9d\9aü{É\17PYt6Ù¸8çòZÜ»tú¼Ùü\80ÂU(mG\1e!mÖÊyçµy8cç¥ci\eô²µÉ9\97\7fØ»ö ;\8bò\9eÓÑrrÅv \835b        )·@Ø}÷>R\9bÒP¨\ 3\99ÈD        ð%Ð\12J\80\90\ 4\9a\8c\97Ê\14F£bKg°\93\992\1d\86q$\16,P3åªX\87\16
++\1a\ 5\11\90\81ø\11î`"B\vµ¿ßî¾{Îw.\9f\7f´8@ö7\9e\ fóî{öÝÝg÷=ûìó<¿çòØ\96/ã³üѯß\94Ê\\8eYÙ2M\8e\8d\eË\9c\1fÎ+øXÉ\89ùÁ\9dÏï\93b\10\1d+***þ_\11ý{=vWظ\84ÆÑ\a\9eyÙLÐt\86§\97¼wÁÙ\986\8b\9eð\rݦé¼îèuìð\r\1f³\ 2F¿j+\94h\985\909Ѥ\11ü¡kèïnè\80¯\98¯PxÔn\ 5Sz\19\89ß:Tgð(#­o\94¢{¶¶x\82\9caMÁ`\13!ñæDýB¨i¸°\8bÏ\7f`6.úÏòÇT{mÑZ¯Tt*Æ%EWb£é\ 5Ìè\ 3&mÄU&ò¢ï<ö   Árwç\1a«|Ì\ 4§\e\87æzAoZF+0\7f\18\e%\8côLæcô\ 3*Á8Щ[k\1dðÄ@çn\92\8cëèÊÝÐù\96Q\ 2\16u·ùöè\9e«èòË\f\8côù\r\9b)¯Ü\10ï¹cîÀ Lö\8dfêJÉ<i\18eFb´~Ü\91Ç<Ðï\9b>ÛJc\17¥,½\9d\rsû)\193ËAö\96\1eË\81\999\eé\98õ\92}\80 ÄØ\\84\92é×\ü\1d\8d\98}ÎjæP³}¾Ø%\1e\0£k±Å       m\HæH\1fÌ=ç¬WãrËÅ\m1»\9a\94.\8e\81Ò1\16B0õ¡`¼\80a®CÁL\8f\1a\7f1\12\9eñ&\10\9eÅTà$\87\ 4Lðä\97ÇdÀo}\fú0\f*e\80\8c\8ey%\ 5³EÆùÉ$\8eØ\93Z\83ÉÄDæÆÇ\18\rÎ@\162dFµ~ã=\7fóQùó8[ øè\10/u\8a\99p\9e!8Ìû\87u\87"¶U2ë\1f\17¢ÂÚÄÎ\9cÎå\92\ 1\r\81\91\12B5M\f×1vLÞONq¦CÅn+¶§ñ)c¨FÓ1A-þr\1ap\8e5\90qLhgØSL<<\16B\81\14\1d_\11\98¿è/Ö D\8dõ\ fñch\fG\ 4\8b\10«\80ôúN1¿eì\90mßû¹û\19+\12ç&VJ\8cY\91\fRÒè"\93\ 4B^\ eRa\18\vÖ7ã\92\ fêU\16\v\83\81©L®\8a1¤Å\12f^>¾|02*å\14\14P\95´\11Æ2\80Ã;\9fç\16ã{Òú\84\80\8d\10ræèÇ<Ã\ 2Á\83\18å\83U"¦æ\ 1x\ 3cUú?LîÈà!´ÚÅ(\91¾µú\7f\8a'é×ÿÕ­ó÷\fþÆt;Û\8a¾²áâÅ/%\1dVA¯ÞZöù\8bw\1f¸&ép!t;;\8a^}â\92w'½\1d/ÇnG\8cÑçç\97ýûá?;(Æç3ð    õ\97øï£^úÕÿ\8ez8*êv\96Î\19­\9fïWöåÇ\9eµ8ò\ eðåßí<<2þ¿?>ù¬\1f¨\7f\929¾üÅ\92\93ðÂù\e\9e̱õYÏ\Xt\8aáØúmÓÄÈo/ãò\8f\vÎHÜ\ 1\90vÒÃ\12\15øÜôþS¿\9dÊðþ\89ew\15\91\9bÏMü\0ÖçÜè\97Ï\e¯G/\8fýûkê7ß=9ëµ!ë\84×\97¶\tÝù\ f´qð¾ï,`´\9eÙÝw¼.¹§ä\1e\1c\8eg¿º\8cËp<ûce¬¿ó©Ó^Hz&æx,;¬èS§ïüì19f=ç¶ïÎ\1d¯gê2\17\86óÐ÷ë\99\83º¤/Ü\15Ãñì)\ e~t\8eú\899ãuÉW\8a\1c\96=|ûµSõÅ+J\9d[î\úTÎCïRÿæÌmûðÞ\99'íLëÈÅvVTTTTTTT¼\11çJ\96\1a.OEzz\86aÖt\ 1í.Æ\933±¹ô?ï,ä­t\9e\93bØMCæ\ 5\9fÏ\16ð4*ý\8aÚ¹çÁE\9fÞ>\8e¿BE\9d\1d\8dâá\ fú\0Ý\94]Hÿ\1f\8d\95\fÕ\16¸àxn\16\8fî<ãì\19ô®\18\1d\ e\8d»á\89\vt\a\19\89#¨iC\13W\ 2·@¹¥:ÎÓ\172w ¹¤¸ày\0µB2\eð¼        O\87\ 6*C\e\v\ eÁ¡E<uÂ\13s\7f\19³\8e:ãhA¹6ñ\9cÎ\ 6v\97'G\10!Ï¡4Ïo¨¹
++¨öè\ 6ù\1c\18gÞÐ\90éBPN\91!@[\8c\82\83
++® \87£ñ¨Oò´PF\8a\ 22Nx´Jñn\92z\ 4\1el@Gå1N`×ûe@Æ\ 5\88\85ô\1fÐ\9e\19¿^Ê rÍs\ 1¥â        [\90ÔcñÌÐò\1d\90Á!Ê\ 6m\88º1äÌ\19 \7f\17gPîû0/C9wÒÔãÑK\12\1f\18ÏCUc]\8aé·Â8h\12h\85bãx`
++}Z\92\13\82T,h\1côw\9eýð\88\86\a\1f\18dC=\17ó'ð¼Nñ¸\8f\87
++J(L^á¹ÎЪ¨µãr<Õ3\18!\1eÚ@aëãpÀ,à\99\865}ü\ 4½ó\81\80©\88ÉÊ32HÍè¾ó\ 1R\9e`\16ªv­òð\10wD\1d«úÿWTTTTTTTTTTTTTì\rèÙÿÿôÂû\17\f\96î\93m©üóéC6,\8fösIÿÿä\87?ìÏ\7fIáè^üoû>\9cl¶Âw;[ÊõEÿrw\8a#\106t;\13\85Ï|ª?ÿ}Åf<çøýï\8dy\ 1\ 4ëYRìÿSó\ 5\YláGîþÂÙñº7M7Ûù\87ó\bÜ\11¯Ó\96ýøéïÛ\9dü\ e\9cîv^)Ï\9d\1a\17°©øù÷û#´~ü£s\ 2\R|\f\86s\ 2líù\1f\91«\13·¿È\1cö\ f\16;û'·%?i\89ALþÕ\89O\9fã%>¿ú\91ä\ f\10\9aô¼\aç¶m\ûôq¿\94e\92m÷ÉæÏø\85÷ûÓ\1eNe6û²¿VüêWÞ\7fú¢ä+\0IJM±-§àó'òìg³\9f{îÃÊø½Ñ>\ 6W\16ûü\19\93\9eü\b´JÏK9\1fÈû?aÖ?\9f}\ 5Bæx/þêÃ\1cöÛ§ñ\11ß/>ï<>o§¼>ûzg\7f\8e/\96\9c6¹ìöÌE\9fÇsÝ4¾Þ[Êx®|úø\ 3\13O½ð9n ¯ÎëS[ \86TöX\89Ã\18¶ëßU¾·lré\82ì\1f\93}K6îÛ+Û:;\95y§ëKª¢¢¢¢¢¢¢\ fÑ>H×hOæpÁä\ 1Aéäëü\ 6ú&7^0\0Ä\89\ f¼\19íà½Ü\13\89×]I)\ 4©ü­u.ûݧû\98\1f\82\1e\ e\8aÆ\7f\89®K6Æ\8aF\vM\16\9cP´Û\92åÝ\92!\1f5¡q\18\14ÕXeè\92M˶\ eÑ\v\1d±:\9aß\15Ã=1\12Â\8a\1e\95ç"ñ·Ó\e!\ 4[|\13h\9e\87\b\eå|î\8fÁ \948\87à¹á\95\8e\12\88rñJ[\1fô\9b0÷C¿-\9bq.Ürki´ìë?ó\1cH\ 6\eaz\16Ûuà\143\18I\f#d¬¼aä\ 6æ¾ñ*Ä\84&\1ch§Ñ\9f`è ¡\ 4#\9aè\8b\0©\19¶Byè/\9eÊ\9b\ fl©fÀ\ eÓ\93\ 4\8e\bæ:T\ 3\f\93e\92\ 5\87é¥\99û\ 4\93H\bF\fP\94Ú0\86\ 1ÿ\14\9c]\ 2­\93\90\94\b\rÇ5\8c³ÑV\8e\88Á)²ÕL\aàÐ\f\89AÓÉ\9dF@¼\98Ü\98Ùx`LRÀP©(0,kfv\89\91,\8dãÂ\89Îýø*\94#\81\9a\97\ 3AÄü\f\9aéü)b\8cEµÿWTTTTTTTTTTTTTì\rèÙÿo}ôww\f\96v;¯E[-mÃ\vÿùS'§\98vm»\9d«Æðÿm\19ã\17°$Ú=·ñþ\97îûiäç\13ζ¼\0üsí\ 5\8b"ÿ\9f±¼ÿ¾\12g\7fÔî?û~âíkD7Çß\ fóùùâ§0\95/`E©gjüÿ®i¸ù¶Å3\91ÑÜ|;J¿\87múW\14ûíúÉ\99*\975)¶|[± \9fzͺÇ\93M¿É6ï\85³Ûïm\98Üp[*Ó!Å\88û\12Wÿ\87OmÊ|\ 3"óÓí\99ÝöaþÂÓ\7f\98y
++TjËæ}{u¾0;\95ù\1cWßã\17üè\aÖ<\93dg}jç\89ñy\9fÃç\9cg>ó\95ä_ÐÆ«\1f\19Ç\85\ f=û±\v¾\9cÊTHÏÛ^Æù\82Éí\89\8bÀ:\9dìá+â÷VãóÓmç<×\96%\9b\9f\18íÏpå¾íX¯yèö9i.y\9b¹\bb\9d£ù\ 5ß\11ç\14ý\vVüòò'sYöÉèñJ\9c½kÞ§\13g\82Í~\ 2ÇÄ:é{°éÆÕ\93\99OÁ§±\9e_ü5\86¹\a\13ïâh\ eA?«\1d\973&×,È\9c !}oF\1f×Â\89\1fh9\13Ò\98\8aÑ>\12{b[\8eeÿ\9e\9bøRâL\10Ù_cc\1f7ß oß\83óÚþýí\9dk\92o\856.Éö\92"\87\8bþiÝw3\ fCæÊ[:«]£Ã\1c\r\9bʺ[¹ó¨÷e\7f\1f\95dtÉì^[\ 6y\ 2_,~?û\1f¾æÛ©LåïÍ\9fÕ\96ýø¦sS[0_R\1f^,\\8e§\ºþ\91Tæe\9a»K§á}ØVü\86\86¹\a\97Ävþ\16>\9f\98ûáÇR\99ñ©\9d\87\15>ÐaÞ\87ËÊ»qå£+Zß\91Ì\9bùb\91òÉ{®Ë¼\ f¹\ f\89\93\84kú¤Ço½¡å\84Hò»±ï{\vs\19\8c\1eo&\9f÷{\ f<ttò\ f\11&}ïò>ß\91A¿\92+Æò\12¶>5\1c³?ßçÄÉTf|ææ\98×\96U\ e\8a\8a\8a·/Æp\83\ræ\90w\8a¤~J\95X]iôÈ\18S\eS\7f\93\ f\10\9b9%\ 2yÈHýåiodÐ1£\8c\99\0\e\7f\1a¡­'=¡õN\1a\11¹Å\18ÚË\fíø-1\r  ïpÍÇøÙÌ\1d÷\8båo\9b1M,qü\825Ø   ±IÞ\ecðãh\ríߤ`#ç[\1cEî%h@uØÜa`C\8e1\8f¶[\87¦
++æ\ 2§Y0\8fá\ei¿G\93CâÔ£­ÓÑzn[\9bò\88\1c飸ü¦Ä#\ fð\ 1\97\90â´\1d\826Q
++×q[@þÂA¾¾1\9c~ãx$Ëx\8e°©·ü\81£låãrË\8fâ(Ä\1d\86\ 6\7fÝ\8eMÐÊs\8acÎc\86;EK­Æ\r\91@\11â\11ØFit\8e\86\\8f9\0Ic\82Ñ\97\ 1\83I\93µs\91µ\0\13РZ\86ÉÔ\18\9c¾\98¢\92ùàÉ\88ÀDð\81\8e\b\82¡÷t\93\10dM0\1e\1dsV\90¦ÓF¦7Òâa\93¢\95å¤\ fl\ 4&·¥\91\e«1\8e¿¤ç¬Öô¢àDU\81Áì\8c\85Oä}Mb\bm\$\8a\83lILh9\84¼\9eú-\94\8fVu\91sÉGÞH\Ã\0Pfh\1a\9bk,jóx\7fÐFn(éÀàx¼XP1Ý\f\ 4î¢Õ=ÐFí#»$þ§±ÿ\8a¯\vC~\88&îßqk\b2N\arÍÑ5#D/\rÁ´ö\90\94\86$$Ý\ eÒü\93~\14§\ 3Ö\81\85\90ñJó\91+ Î\aÚÚ\1dÉ\r4©        |\13LösùÅr!öâùq\aú\fÑ&ý#¾\7f\1aç}â\9e ë&­ù*.w\12¹§5©"Í\1fßNå\1d""\8f\86\80,d²ûKúhÛè\aàtµÿWTTTTTTTTTTTTT¼ýQõÿ\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a½\ 1=ÿÿÿºçk¯\f\96v;\a\14ÿÐ\83O>ôÇ9Ï\9fíöå1\7f\82È\9f§\95³ý9Å\87ùð\ e+eÃþêÇLã¯.JÙy\93³TÎíÞ$\1fÜg\8b/íp\1eöw\95ç\rç¹{Gñ\ 3\9f\98|öï\92¯°Ì¾´KbÙ¨|n\15\15\15\15\15\15\15\15\15\15\15\15\15o~dNA\92\15ºàcbÂ6¿eãpÍ8Ûôå\18dH´&Õy\e\8f\93cfúù#ßj9.Ñg\ 6\1cX)ñø\18ìÞ§ÿ/ظpDü\7f\8a\9bý{\96¿¼è\84\14'/uË\87\v\9cö\`ñë\8b\9cð¸\7fIáç?z÷×\8fË\9cè¡ÛYZâ\80/Yzà¿çØTÑíìWbÔ¿µlÑÿÄëÊ\9angs\89IÝð±£\13ÿ\7fÃøÿ#Ë9ÅT\1e\81M\85o}j^\80u¥=Gì^\1dù\ 5¼ShÏ\8eRÿg>yÄ\9e\9cï\0íÿx¬\87üùs>ü+ÿ\19¯\e\9doôÕÓÏ/°sÞøs\90µ±­_ÀçCrÝÎTæC\8aE>s\9a¼\0G\961_sÿ\85\87g.\80\1c/¾+Æ"\9f\8cÏú§\e\91ÊZî\81\89Ò§\93·\9cûD\92U\93ù\ 5®*í\1f\8eÛ_ZÎx\1e¹ùÜÔNësìó\99%>}8Æþê\92×~å\rç%~\ 1\9fÖÑÌÎÅ%\16y8þ~ã¼Þ9ÏÎ\9bsü½I}\7f¶ð \9cÿÜ£\9bSYÛ\96cÊ9ϪCNKçJ\fä\8ae+
++\87ÀpÜþ\92\12óþÀmë~\10çª0&õý\96"¿×f]ðÃ\14\7f\1früö]%\ 6}8Vþâ2ß&&Ï;4ǵç¶,\9f&>}Kéûi\93ÇÝ\90ãÌ3\87À1sze\839
++f\94þ\rÇ _UbÞÿX\1eûD^[1\9e¨¢¢¢¢¢¢b¯Ð}\8c\fÀfÎr(\v\fh§¶Ñ\18©¨²\90Ï^bG\e"\r\ 2\9a\91ÙAA\97°1\9c\aWÈÌá²   \82±ç%Þ\9eêFÌ\1eßè\18\9b\ 506¶¾/\9e\99\ 4ôÐY\14Õ\12#\19ö\9d¿\8bæº\86\e\7f¨MªIÄW9ç\80 \1dRK§ñl¦\94\ 1ÚG&\ 5k\94\8e
++\9dÂö\98Ä\ f¨]0e»\951f\1d\1a\11G@0:\1dåÂâÞ@Â\ 6§\1d´\95àIA Éxà\18'íÐ~RG0²ÚB!Ä\95ÀÛ\1aC5Ë(è\8d\9a\1cîQ\8d£z\86M\1d6ÊVÍ\18ÇÛßãHÀ\8dØ73ù\81TL5\ f¥\ e»ÌÆ{T\1a¼\vx     ÝÑd\ 6èãѱ\8b):\1f\e`\ f\91D>\b+ÐD\88\96l÷ÔZ©Þ5\90\19É\98H\f\80q\12Þ0\83=)õ1ƤÆ`Ì:³Í3-\ 1i%È×á=\1aå\fk
++\86j'$K\1a\ e\11y\ 3p\8bå xel?\1fÃ\98üód³ÀÜ\82\86<µß£x'¨-ã±¢?\aB¬Ã`¾6:Z|Éd%L\9e\ 3ÌIÐò\90\fpH4\14\10n7¡èýQ_oHú¡8\16²\89\18î\8dàÉBà-y\1f\9c\8e\19\1cFs? &¶Á
++-4)%\8c\16FðF \84+ÉI(ò\96s\1a\12\ 1ÄÁ\ 4\14\91\96\ 4Rõì(d)"³\85t\9c÷Â\b\1f§¥T<eÀ¼ÅÓÐ#t\9aI\19 ^´\A5#©BäVix¶`H»A\8d\ 6+>@4¨\ f¢åºFõ*ò½Uÿÿ\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a·?ªþ_QQQQQQQQQQQQQ±7 çÿÿÕ;Ü¢ÁÒ\99\9dÇúrÚ}ëÐä«®tòYÞU|ôOwg>\95|ÎMÎ\93·­ç\97|ÿé\8bR\1c\80Ì9Êî\89eô+¿ø/N}&Åå\9b\9cCïªRö\89\9bV?ÑúH'?ö\9d¥-\83\15\15\15\15\15\15\15\15\15\15\15\15\15\15oUÄ8      Ñ0\ f§\972\98 S~ú\94sT\bŰ\ 1ë\¾Ö\b-\846ÂXËD«Î\ fÄ\0\9d§\96^K\86Ôx©\r\ 3/ªý¿¢¢¢¢¢¢¢¢¢¢¢¢¢bo@Ïþÿê»¶^3XÚí|±ØÜ\17ï¾èw\92ý¿1ÝÎ\ 1cxþ\96\8eáí»cV{\7f\7f¾\80nGÄzè'°àÞÏE\ e6m´ïv®\8f|hä³;èõeK#o\9fl\·³µð¤Måó\9b\88¼kä\87[¼ç¬\87x\9dt\1cÝÎÚX?yÜÞù\a\a~\93×]\10¢Ûy6ÞÏ?¿ÿjâ\11ô¢     Ý̧¶\ 4\9fþù\9eíñº\fxîå³ÛçNå\v\1·Ôÿ£\ 3"\7f¡\ f\ 2ý]>»½~ÎIï\89×\83P²Û¹gN¯\9e\1e_`·/\8fÁ\11¯í:?^\ fÎÏì\\11ëÙ\8cϪë>ô½Ä¿ØH\9eùÌìLÌnûð\93Ëÿ(ñú  £SÙ     åù\137gþAáBò±x0¶a#>\1f9xUª\93¤\8e±lÝìV~\17\1d²!Õ)¥OßÛQÚ>ì\v²¥ð\16®ýþGC*³¢?\9fBúÞL\95Ë27áÆ"\9fU*ç\84\90\b\8aÒ\96S¯Y÷xâBlBêßò³·arÃm©LgNÃ¥eN\9d½ãÑ;S\995ý¾'üò\85ó7<\99sPd>À\1d³Ú²Wç\9e\9f\9e§\9cNíÜR¸û\869\14\1f,²[ûü¯}-\95Y\95Ú¹¹|ï\96¯®ß\95Ê\12çÉÌÎÊÂ?(>¿ú\91į\18\9aÔ÷ÍsÛ²\8f\1d\9dį¨DjËæ2\17/\98\\9aÆÓÙ\9c×b]Y\7fÃÜ\8b»fµc}û\r¹NòÏIJ­ñ{ûà³éÆÕ\93\99{Ñ'\1eÁ[¦áW\;Mn\8e\17gµké*½ú¡\æ²Üç¶í|õ7Ny2½?Tæ\9dL\9c££sz\9cPä¾zò/\7f;\97Ù4Öß(íüø¾ç\7f/¿\93|*Û^æÙp.\90;æ¶ï¦a\7f¤\eK\9d§.\÷hâ\81\94y­¬,r8crÍ\82\84Tçæø=òcN\98õϧ2\93çîeeÌ&&w]\9bø#\95Iun-ü\98ÃyI..óå\94K×?\92ʼLãyu©sÕä\7f\1c\1cË\£óº-ýûÉ߬úQö\9bÒIF¯Å²Q¹Nð~)9RV>}ü\81±,´|£'\169,\9b¼çºÄç*2?æe³{e\voHeR¥qÙ9«W¶þ¯RYÈï³ëË;ù½3OÚ\99ø*\9d2õGº¢¢b\0Óðy\93»«i¬RjF\8f£ÌJkð_ç\9dô\8dÃæ\90|vVz¼Îe\90ª!\19\9a²BX\83÷4~\18\1d\19âðcí\85®Ã7$ß\8a¶7g\ 3v\f*X¥\9dÔR\89Ì\r¦"Ç\18\85ç,\ 4rÎù\96\7f\eû3!ÉÂ\8d\97¥ÑV4~\8a\8d.Þã\15YåL#¸GòJ7\ e;nt\a\8e´z\8do´A\9f\1d7¦¸G\92ÍÛ\90±®qFI\92â¡ \12úE¶pöÆ\b2\8d7Î+tO ËøMA\ 3\9c"¡³hð\10V\84æøà5\9e<\r'\9f\13\82\8fÄFE'ÎêÈ·æHù'¼\96i/\15yÑI\88\86Í\9cÒÁG~7üpFÞ?gÈ\99\86\16C"Á¨àUäf\13\8a,h"\8cá\8e\9bÂÑ>Èc^d\9c¸Û\93=\14¿9Ü\ f\v4\1f»TTÞh\8d¿ÖkÊÜ¡>«u \11\1eäh\ 2)\fI\9e\ eÑD26Ã\r\89·ZÄaBs\94\8fä\88\ 2ÿ$\87´5V±ÍÁx? C¶ÜGy\e²\b
++ë$iÜR¿\fYÙÉ\1c\18\89\ 4}ÜÌǶ+2´a~ 5\1c?-ÉkHú>Ùrâa\ 3H\8e<çó¼\1egóÅtÕ\98(Ö8G®?%Û1Å\13m£m\b­\8cÞ:ÜõyN`õB¢\10\17ä\82a5ÎC\0\ 6KÎê\0± i21K6(À
++\b\8a¬\88\18L'\8cCÅ(\8e¬\89>\12asLÑïÆ\ 5l¤HÐ\87­\1dæ\98\13\1e;\1düÓ\91³\9dS\ 5}T\rV\8f\88OFo1¬Mhù\aÇñ\ 5Ê\86\12Ã;àçp\19&>CGMËqÒ\92¸/\90e°oN)\89\1dbÊC |\1f÷ â^5®/Ã7\9a6enàåÃÎbB\19¾\80b\1dèg\13\87\ 1\vBUû\7fEEEEEEEEEEEEEÅÞ\81\9eýÿKóç½<XÚÍ6 ÚR\ f»{Ñ)Ñ\86g¤ëvÖ\16ûò¥\1füõ»£­¦Ñ¸~LÉ5wø«¿ùr´çKÞ\7f\93\7feû»£\1d^7Fu;W\94ës\8eßÿÞhÏ\17Âw;'\94ç\1eù¯ï|!Úó½ÐÝÎűþ%3\ 6íóÛ\8b=jª}~¿b\87[pÜ~?Kvx)ºÿËÞÕÇØUÜ×]Õ\88ç@0UÓ\86\ 5CÁÆ\ 6æû#\80K©S\bu\bP\12À±ãPLø°\8d\81\86\14µi\83\9a(D\ 1\19H\91j)4\8a\82Õ\18°øh]\11
++\ 1\12¡\96\85\0Å\ 4\8b\12p6\90\1apcÚB1¥çÌÌ\9d÷vßÛÍ?qeÉs¤\8bwïÜ{çó¾\9dÇ9¿ó\eßZùÀA~~ö¸©õ\9eÿ¬¾£ä;,ùéLª\9b\1cé½÷,Í\1c©p.óhÛf౯ªcuðá¥\8céERÙõÿ\ flXñXá\95\vÿöÉ\ 3º¶?÷wgü´ðÊ6ó}\8fU®l\98W¾,õá\ 6\1cw\1f\ fò\9c\19\97¹¹Ëj[Ä\86¥\8f\193\97Ê\16V®S\1f]ʼ(¼ëþ©\7fÌ\7fx\XºµpÎ*×wÿ\f¹\0s\1e½³q\)/Ø^øÚ­nO÷Ý\88ãô§Î\9cUøÚ­>9\ 3_û|ê;µ!\1f}Yo,e¥\ f³ê}Ã|í¦:Öï\9c°:óÃÚ\14½ÄÕûu}\18æk7Ôû\86s\ 1n®ën8oßúôÌKp¬Ø&7å2UÖÒC3ð§W×¹}ð«¿ÿ£RVÖÄ\81sú÷MåO\97Ôü\90¿÷ô\ f\8fÍü©(ÜqÖgppNÝöê¾%\17 Uí\ 3°¡¡¡¡¡a·!åN˹î\92ø` \9føt¼\9f\vÊhEZ]kòÏÊQ· \9d\13Ê\bC&\8f\14¿v\11ç\12}\1f\18\10,¼`\80¯Æ\16\92\8fLC\16\13#\89
++\9c1&¤ô`䤵pÂ\8d\rr\8a*F\1d\99\15\8e5\a\9b¬9Úf\83\8e¨\9b<­3\1e\9bI\ 6$\acµ`Æ9|%À.\8b¹\ 3\1dîÁþ.\ 4\8dfD\89\16\1a\15\1c3<먤1R\93ä5J8
++7¼Ã)oÑqͬd\18\ 56Ó`\7f¨#~\15ÑGÒí¨Öb7\86\93\ 6¿*ü¢\8c\93\16¬9Ü\8b\16£Ó\1cè¤\19\901b\97IE\ 4³\1ajåóÏ\ e\17GtD0\r s⥴|\81ܯ£ú#(j\a8\ 5$ıádû<¾\1d`È1\94AYOÍ\bçÊà_\8c\ 6¥\ 5\82:\13\83\9d²\ f\94b8Òáè\15&¿ä½cý\1c@Óñ¶ØÏ±­\91I\b©\9f\18ÈuG5\85èøâ\88­]÷3öð®ê\1e&ë(ÐZ\9d²        :æ>\14øö£\8dÓ20ß` Aï\99QPcN<¥\ 6Ì4(\ 5f\98é!I_G\15\ 5Æ jÏõ\985\f\98\ 6\93ùmÒËX[E\9f`\19ª.¸Ò0©\9d6\84\ 4=z\87\913Q\18\94\8bàÝq\ 5%"Xj2ð¹)í¤PX\ 6h´Ç¯"5Äà"\9cÆ[\15°Ü\98ÄÑ1;\1e':X\8c\ 4ne6B\8aM´ª\|¤þS¥¤|L\15\89·Eæ\9c\95&½»X\83\8cÈO/Sì´=\86\99\1c\99y2V½\ 6ª\88\f˨ËEhР    Íô\91è\98\rLúh\9d§\ 6\83Ù\191\b\91I15%FLèh} ü\ 6O¥`@:\8c\98å\9b\8feCá\92ų\14E\1dTù°\97X2\fô×\18+¼B\81*\16ÃÏ\b\11°\\f\92\19\1f#\ 5Mxë\eÿßÐÐÐÐÐÐÐÐÐÐÐÐа7 Ïÿ\9f³ò\e\8b§\96öÆW׸îÿóÅ33Ïl\oÀßÿ\98ïÍI|°²äíÅl\9e'?yìÎ\a>\98ùI\13{ã'VÞyÉ\89¿\9eõ\ 2R©Þø#5\86}²^àùýºçOö\ 5Èqí\8c]¿þ\95_y8\9d\ f<\9f\8fáX7±à?ÓùÈv¾Q¹âÉ>\ 2\aÍîê]û§9þß*ú\ 5lJÿ?ä+8\16¼~râ\9d\9dQxβĭ®cû\7fxÈÿ¤ó\8eÏ1µ¿Gïüãg²ï\80\12½ñ^}þd\7f\81Ggwã0Ù\17àõ:\ e'\9d\7fLòG`0Íì¢_\18\1dÿ\7fÖ\fz\84Ì\ 5\8f\8eÿß^=\14\86ãñ·Õøñgî8ÿµ\1c;¯mæ\9e\1fÚ¯«ïs\9b\97çúèP\99Êz\95\97^;ñ¡u¹¬ËÛðH]++\1f¿|~Ö?tqÄ\87\ fÄñ_{X.S.k\aNIsq\ 6ï{j×¢\fJ<þ·ú\9a\8a;ÎɱìFê|ßÖªcøÛ¹+rß­r\99\93¿)é\ 3Fk#n®}ÿ\93E+sì¼u¥\ f\98ñæµ/®\9d\8a>ààý»qyâ\ 3çäqñÆæyØZß\9f5\8f\9d}[\8e«W1?óÄZö©'¯ø@\8e\8f\8b ¤uò\978>º}Á5éý\12±x
++ÌKõ­\1e£®àw\8b\14ÍÁ®:\ f+&\16Þ\97µ\11Fç±ÞRÇìãë:ME\90ynçÍîúðÞ#/\9c(±ì:?óÉÙýg.YT´\11eþö¯¾\ 1_}pe¾ÏX\9f\9fysõSxâ\8bK_Ëe¾¬¥y5&}ù\83ËÊ}][\ e¯>\13Ë&\ eȱìV©Ü÷]u\1e>¾íËÇç²àò\98ͪ\9e$ùCÎ\9a!\ 6~kêßh\9dÆ\96Ú÷¥\13·_\9fË¢Ïëì\8d^׿-ï]\9aµ-±\8bãß2 ï\98\1a\ 3¿ãÝÝ\98=ø[\9f\99È\9f\85:é;\1a\1a\1av?\12wE]_P²ðpScc\19\ 1\17\1d\97ãðY9)Æ\97\7f\86e\88øÓ¢\ 5ã\q«dhu\14N«è\84óN\18\15¥$Ûª\9d
++NGɨި½g &ý9\9cö"\92èq¸Ó\e\8f'2¼\16\1f\a\8cÌ5Æ\aç\8cQ"à\8f\86!ÕK\87\11|\ 2E\ 6²Ê\88'à#Nó#~lJìùÿ;\87,l\88\18#\8c\93"\8b,\13\ 1Gf\18\7fÐ9\96^1\96\98ªHÖE\15¦¶Ø=`\17\85Ñ\8a¨\9c×ó7\fGçiMê\91\8dï86\81¿¹Á3¤UÈHæKÓ\18\86Ü\1dú\81\86*\8e°%\a\eRX¼÷¬\1c½²ÎRï\165ûï\19ÉL\12ØF\12£ØßI2´ÁÓa[EÌ\87£ñ\b\83ð±IÅ\8ci\89ÖZ\8f¿£X$h\14yA©bi#Æ.­\9f\88.\92åÅØâ~ç8\99\18L\85'K\87aÆÝ\1e\vÊ8+\f\1e\95G\ 3SéIÆá2\86\89$)\ 5\10T\90±ó¤\99±±\93\813\87¿w6Å\98kc3w¯Fq±øS\9b8ðQñúÒ\91\17$\1586£Ï8ÉÆºÞC\8e\9e66\ 4Z\và¿\8aÆ\ 1´)PÞ&òÕ2:\1ece±KÃÄxƽ;j]#¶\v\11[L\86²\93LuÒ\92¾ô\f\85\86=ÿ:rþ\8cßÓ8ÒÒ\7fc\19Ã\1e\1c\19r¬2ï»±ã»\89\15ÅØo×\9d\9b\9eL3FÌS\19àDwÎ\902Ç&\14o\f\96\96äºI1òX2\86\1f-&­
++.pÃ%é¨t ó\06 è8ºÌë=ÙnË-[èû! ¡Þ¡¯äô}©Ïò\13m7ÅÒw\1e\18\9d>\80o\82$ao\12\ 5¯i1A\15\bÞ'¼&\9e\16\13´åÀ¤qùaú\r\85\1c\92ï.:KC\ 2|\bâÅÁÌñu¦®\0\13Ï\80z\94\84ô,Kõ\aº\82i¥Ú\ 4³\18°\ 4©\8d Å½ä\87\1aÖ\82í\8fIàxáÕ\12\80×Y\88~|¾\91aOòà\88Ô/pâ¥\89ülM_\1cØ\a|\80q\e\8aõ`º÷\9d²\ e̵Cs­+\7fø\84\92'  þHàÝâG+fÎc\8dø<\1e\8dÿohhhhhhhhhhhhhØ\eÐçÿ¿tÂÎ\13§\96ö\8aÿ5  «C/\99ÿF\8e\17\97ºW¼¶\87ýÿ7WnùØ\9d\a\9e\97¸­H>_$Îk3\8eyÿñØ\7f'~^Ðÿÿæéü\ 2j,ódþ\7f\84¿èì£2oo5®\ f\95÷<zçgR캳Jö
++Ï8ìÿ\7fÿ4þü7WïñÉ>ü«ë8\f{íß4À}¯¹¥øÔËÌ\1f\1eR½áÿðåO\17~[t\må\7f\87yñGkþ\83K\7fªD.ë8ú\ 3\ fè×÷Ú~¹,\14^5ë\bFóÛ\9f­mYõÊs_Ê\t(<õM}ÿ\82!\8f÷»j}Ã\1eïë+ÿûÖ­\17e\1eWh\93ùÑìIN¿ò§ÿaõ³¹ÌÚAÏ\80Ñ1üïIõ]ÃòÛ/|>sâpí;ê<\f\aÎÀ)\9b\ 1ÏõK\8e̼±îúW=×\87\efðUß±_¿l~~¦×ºðÍõý\18æ\9b·Uïûgï<ç'¥¬Ìæ:ÖÃ|ó\17j.\81a¾ùøª]Xÿàâ\97\8bîÆç><\µ4þ\0[ê}\7f$Oz±ø\ 2$ßÿ\86\86\86\86\86\86\86=\ f\ 3z\8fQq×ÒÑ\93\9cæN\81r\fºð÷yá=\8c_\1fÒâtÞæSýʧp¶»%¶}:\9e¿ä/à \ 4-0Bx¦\90^3ª\1cÕi¥=\9d»´ oï1\8exn\b>X%LàT0      \0-\14\98,\ 1£Aa\87`\14»òh zÊT\ 4\8eÂ\16Úï\93H\96\ 2[?4\86íO     (\ 4]ømÀ\1c{'¨\19t©×$à1C\86"#n\94\1d\99vëhº`}Ê­à\9c\8bÈEâ\93Sÿ´\9cq>oÑ|\17ø@I¹\ 2\e$$\13*\84\88\9bÑeÜ\8aÕAÕ\80\13\86ù\15(\1fÀ\18è´\10\98?\81©é£0\91Z\18FÛã\ 6å©>\12Ì»à\99»\ 3\9bl|«ó.påJ\99\ 5SL\8a\80\19\1a¥i\19<FéZðMǪ¬v`ؾJ\13\89fj\83DÇG\ebJã\80\85hÐ)\11©Äqi\bµóÌ      \82vF\8a²\8a\87¿àÚ¢¬\8b\eê8©\1d|\e8Q\8cùÇ\fÄ`ÜÏÑ\7f\a¢\98`\82º/,ÿ$ü\9dÔ¿èÒz¤ÌÁ29\85Iþ!\-TX¥ýû\fy:øj{Åä{Æb=ä/\9dS5U\8dÿohhhhhhhhhhhhhØ\eÐçÿßzüµ_\9aZÚ+ü59ÇÃÎ<òg\993\8e®7¾¡\7fþò\85o\97øVÙ\eßZùË\85;Íã\99·\17º7þpåù'ÇÛ\8b\ 1Þ~0~>Ç[\93?}tù¼\14ÏÏè\94.Î|´×üK5æ}\98Ã~²ÆÊ¿yD\89\95\8fºð÷KÒ3é\1d°hþÇ^-¹È\8b·ýóõ\99Ã~ò9/úIlË+Ëþ¦ðÔ\85÷ß5\ 3ßlfàj7\ fø»oÜ/ó±Á\9b¶P\e\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1aFyµàGQµ.%·E§)        "\ 5åÓ\9d\82Þ Bw>\fÓå\92°.\18¦,ócc?\8f÷×\82f\ 5\94\1aà\8b`ÒcĤ\96QÂ2é\80¶ÌaAÛ\83À\94\11^â¹tû\b^\19e½N^\ 3\80¯|\82\12\91\91t\ 3\92\16\ f´A¦ä\bÆ\18f\9d`b\v\9d|d\82\a\1am$W\b\\82ë4\8d\15p    \95%Ö¦ó-þ¿¡¡¡¡¡¡¡¡¡¡¡¡¡aïA\9fÿ\7fæ²Ï_>µ´7þz\8dÃ\9fìÿ\7fHåÅ?\7fêû²\9f¿2¾7~V\8aQ\1e\8eÏ?°z²ïóã\83R¼}\88ÂÎ\1e¿©ÆÀ\9fÿ¬¾#ÇÕËâ½½ºÆ¤¿u×\8a'\8a\87}áìO¬Ï{`Ã\8aÇr»TÉ\91Þ\8f\11?sýÅ/\96²\98ËNIe£ãã·Õ>\89\rK\1fÏ^\aºÄ¤\7f\85\81Ô\17<¿æÖRVüô\ f®mÑG\97û¼P9Æÿ Êç¯\99X\9ccç½+yì³\8fû{p¬úñ\91\8b\8a\96¡xØo¬¾\ 5÷ݹ,÷=H7èß?Z˰0\95\8dÖ2|!\95\9d\8dãJyA\8e\1fçÿØJew¥úè\rpî«Ç-*e¥\ f}oÿOL¬ûíRær}OÖv~vΪ\7f->\10!\97\1d^cà¯ú\8bsÿ=Çøwõíª\9eùÃ~óû\ fxد\9c[Êb\1e³×ë\9a\84Õ¹>mJß·Öù»{ìÂ'rY\17Ç\9f}øGk5f¥²Ñ~\ 3[j\1f\86=\ 5æU­Ë°OýuÕãý¯CñE°Öçþå8þµ8®¸eUö0pRdmÈÃé>z&üìî\8b\9fÊeÞ\fÆøgo\80\ fÞY|\ 3\8a\97Äñõ½;kî\99/\16o\0\99×ÒÕÕOÿ´\89K¯Ïz\93\98rH44444444L\aò¦\869\12l\8c\1eÿ:çD\8aÏ7ä.\19ñ.S\1a 
++Ugð\1e ùÈ\9c\ 5^\87h¥Ö\1d\97I\vwÚbáéÁÒ_Þ\a\1f±§õ\8c\95V$\1fj\18@Ogz\ 6C+Ö¨\14¶~.\85§[Ú\ 4XÆ5\9b\88\16ÑjÞ{)\19­ÏøþÀ4\19\96       
++²o\82×b §Ç\9e\12ï\8e\82ä\9b?2¿¼Ãcsnz&Jpt\9c\97F\15ßý 1\16ÁêèyMJÎñ\vâ\88%#È;Þ{7ñÛtA\10Ê\8b\80¶1ß\81\95)\9d\84ÃÒ\11\16C\9eR\89Ð\v\94H\0;pº.Ht\bÕF\8e¶Õ\98'\f§µB0\1f\88*ñö)W\86\fÊû\ 1]À¨<\fU/\80ùìr¨(gÒ}J\18!\8c\15Öåî\ 4Ó¿Gb\99»=ÐSc:\1f\v\ e4&0Fö¡ñÿ\r\r\r\r\r\r\r\r\r\r\r\r\r\r{\ 3\ 6øÿ\1füÕ§¦\96î[|èI ^sÄÚÓ\93\1f¾4c½\92£\9b|ã¿\9c¶à\7f\13§¨\9dí\rxÓOöÿ¿?ñ\9aô{?ôíÓ\16']\80T8\7f]õB\9f¬\17Ø\ý\ 2¾¹fAò\17°ÎúÎG`XG°±¶ó¼\89\17¾\96µ\ 2Êfnô®ÊÏ/»ç\9c§\8a\8e p÷\ejýW\1c±6k\ 5¤\f¹ì[\95o½tbvæîeçÁ¿¹ò×\9fÛ¼<sðÌ¢\9aÊ\ e©|ëÚ\89\ f­Ëe]\1eò¾Æ`8oýK3ä\9f\7fr\ 6\8dÁU©\ f£u\ 4÷×>\f{÷oKí\1c\9dcþþ\9a\aaX\ f°½Îñ°\1e`cõÒ_þÂGn,¾þ"·å\91\9a+`\98ó\7fl\ 6Îÿ¡Ú÷]ïZóo¹,\16N|ë\9c®¾aïþ-uM,\9bØþµÂ³\17ßûM\ 3\úGn)9ßEæõ3\97¾\fÇ\19?Y\9cÇ%ØR6\96î»\15ÇéÏ=pw.óEw\92ó\16Ü\88ã´­÷}3óì¢\94­¯Þýßþò©/\15Ï\a\9eÊFûóï¨ïÁ\9fﻤä\8a·¡ùA4444444ì.\14\8e3\ 6òùØV)\8a\115\9d¬2\97¨"Ó´\ef\16\ 6æk\ f\82\16çÖy\17E\8c!\ 4f\91·ÞØ bÄîËbO¤´ÑÉ\85\9e\9eô\86§<9Q#¥\8eä\8e\93Ϲ4ÖË\18»¼õ¨Õh<5ä\98îÄï\8eâÂGåBPB1¿\0ªW\9a\ eUK¦`\8fØ\9e©è\84ËT<Z\8aM<U\0Ôö¢e\11Ûh\8f\8a-s>9íEâÏ] g»Ç\13\95ÚEÒøÆ\aç0\0\ 2]\8e\ 6-#M\1eU\88\91Áâhªa\1avj\16ôtz\8aét\13\12ÛA*\ 2\94¦HÂ8¡BÇå\ 6/©cµÑ`;é)JpÑÚ(\83£R"²}Ê)OÒ\19\13\0\ft ÆBØ\94X\81\1eûäÁSÒ§\8eÓ¶¬]\90 §N\81îó\1amÇ  mi¡Ï\81\87Æ÷\ 5\85\1eG\e´b\9a\ 6\ f¤HÛsè4U\ah\16\ 6\8b\1eú1`¬P#æERñ\8a\ eaäÐ\aG\96\1aWG´\8f\89î\9d\ eܨc\101ßEÿ`lÊ_¯D\9a\7f\87ï\eA\9bn~\v\98-\0C\92®ÁÀx\8b\82ô3.­\1a\86H\81¹×Å?\1f\15böÈÓó\v\8e\0´Vk&a ¥>®W\z\12EX\ 3ÆrP,'\1e\92ÁrwdíÙè´¦Ñw\83\8bE ÀÁY¦¡À*\8fÜÑ\aN´QYú\80·\82\89+\84Áû\83\1aq\ 1Ö£d\ 6\aEA  \1e\85\91\8bÁ[×\7f\17\15ÆP\ fè\15$\96\\1cв\fê\16\ 6seDê'<'Ép\88±Fmãÿ\e\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1aö\ eôùÿ+OzxÇÔÒÞø²Ä-ß\86\7f-8¥Äç\9bÞx¨\9cå¼\7fZpvæªÉóoOç\19/}ÌÛǼ]âÁqýuõúc¾7gkæiEè\95Øëa]À\96zýÂ\7fÜ'ÅH» ð\9cÌ\ 5\9fÈz¿ûþG\13ÿ/#®\9fUãÂ/üðû\93
++-{\ 3\8fÚõÒªt>úÐqûä¢ï½§ÄÐ\vç2/þɪm8÷\e«_Èü½*ñàYgÀú¯:®Äåk#r|ýþ\95ã}óÝ«ò}Ú\9bÌß/©|úE¯þÚ·3ïï
++×~szæho\81õ\95û\1eö\ 1¸¡öaØ\aàëU\9fðÖ­%þ\9ciIÇúy\12Fóþ\eëü\99YËr\1c¹4Å? WùíÓ\9f:sV\99Û\92\vá\9c4\8f\99¿?õÚÌû\87\12Ó~H}æ\9fÝý\89üL×é!¾^ó9üò!«sì}TE»pU\1d³\ f¿pï\9d\1d\9f^<\17\ 6\17Ïͼ¸
++E/Pç¯å´ohhhhhhh\18\97£L\1eé"8²¯Z\8fõùFK\1e\98¤:\89_\93ý·\12×j£H\91ÚÁË\92;>ñÙ9i»±¡x¢Kï\18ô¬£Ãþ\93bWQ¼\0¼Hü©@­2_\e\9c±*Do¤5]Î÷.\ fº"=ON>\18FÑ;Ùù¶O\93ç\1cÛké£Õôhï|á§Ë\95¾Ûxt'\9c`¾4\\86\ 1Iô¶VBXeÐ4åØ:\92ÔZ\vô\ 1\1dÃN\9b!âÌ\11/Ñ'\95²Ø\8bè­C¹p¸6¦H{\8a\ fb\f\f\80\97\1a­öô ÷Ú\93³Oì¶³¨\17\95ð2eI'[í\9d2\8c­Ot5ihlÂ¥\v\14¨fÏ\0Ç\ 1Æ\ 4\1a\81±\ e:]\97\7fv\18D\86Ù\vVíèJ "\1aG{\ 1ü\86Öbl\ Ù\ 1\89r\8a-Ðh\8fo\8a\9eF\0¸ÄÒ\81\80|8ú\8b\99´\1c)\1a8\18º     \b\1f0-Ñ\91&÷Qc\92ËÜ\ eúD`$0ÍX~J\9b\88¦9ÆÂ[ú)h\92ô\ e_\8bøt\15i{åHð³µVQî,öP\r\b*ÇØ¤åÃÞLÊ]Ðù=à\16k±,<¾ßÐ9A\ 6\9fò\12à\ 6\93çÍà\11x\ eÚ\8anS5ã¼\b´¢pÔ@D\8c\81À{\82\97#­p\1d4\96?\86ªñÿ\r\r\r\r\r\r\r\r\r\r\r\r\r\r{\ 3úü\7fïöåÿ<µtßñí5¾zݼ߹\98\ fj¬7¾8ñ½üÏ¡\97Ì\7f#sÖR÷\8a\aû¹8\8eztã\1f$îÕXÛ+qÚô5\7f×\19¿ù\9d\vÙ\e_Yyã\85;M\8ak7Và9\8fÔ¼\ 3s¿\7fí³ù¼ ½ñ³ªßüþ'ÿê÷\93^@PG°:\9dÿ
++\8e\ 5¯\9fütÒ\v\18åzã¢úÚÏ\7fçÐå©ý\9ez\84eõ9û\9c÷\eßMç£\10½ñY©^rÇ\8f¼:÷Íì/àÄìñÓSûé\11¿åïÏúQáïmæ°ß¨\1cýpÞ\80Pýã¯xßù/g\8e^\16ÿÿ\8b\ 68ó%9Æ^Û\90¹öy3øÇ\8fÕøûå\13«oË|º\88ù¾\83SÙèøô-\ 3\9b\ e+\{\8a¯jhhhhhhhhhhècÀ\9b_yc\18\bO'°À\84ìé\9c°JEmKL9\19æ\984\vJËÁXma]\f\9eò\b\86Ñã;\82¦©\16ýê\19\99\1d©q\88Æ\92'\ f\92¦\ 6Þ3Gýÿ±wí1~\15×Ù¿\86Ê?ã\a\16¥\85 \9a\12lñ0`æý\90\bJ       ´\88\12\1eÁ\18ã\a¦µ)\16¬1Pªº\ 4µQ@\8aC(Ð\96V\96\82\14$P\ 3I\89¡@ã\ 6\ 2üad¤PÅ\84\97!\14Hq6\ 6L\bµ+h1¥ß\993wv½¿Ýý«®\0\9fO\¼{çÞ¹3gfîc¿s¾\93,ÎóV;\9f­NÆF\8aB'¢Þç\18(\84>hbÑS$ï\f\93s"·\80h\897¶Ú8\8d³\14.\1d\9dU\89\12\11(\93¨`ÄOÁؤP\16HcÀ\12ÿ\9dõÇ.6>*e`³\90ÑÎ\u\ 1,ZHy  \ 2\ es¤« q\ 1G²ûÖ\aMßSäLM^    ¤aàay\12ë76GºNFU\9e\b÷¬H\9bßz\92*h~)\1a\9f\9d  »ÑÊHÉ\a\8fBI\1e\91\\8e1Îä×\80\ 1\ e¬ß qÍd(³\ 3Z\8a\ f`MÂþDé\93\ f\81¶h\83¦VP/\ 39¹¸¨5\19YaÂa\ eè\9ct²ägR\14ÿÉ«\80Òå¡k*F2 ¦CÔ¦\e×¢Ö@Î\ eä\95S4\ 2H×ÁøØåD\10þ_ \10\b\ 4\ 2\81\10\b\ 4\82}\ 1#üÿÒ]\9bÿ{li¿w\18\85¥\8fÃó¿Wb¬\89ç?âÉ».`ÍyÒ翵ñö{Æù\8fhðßóä§\vßî\8cG=\9cÓ|\90ç¿¢ü]bP\17àöæw0:/@\17\ f>¾þÿÃ\8dë\1fÔÿßXÚ{\ 5\85s\96\1aÿªÆ´ßÛÎûÖ\9c\v\7fÂe6òyG7}\82\15/-¼\9d5\ 2\94f^ÿ ¦EpØÜ%¯°\ e\80¶|\1eû\11PÅW\1e¶æ\17µ¬Æ­_ßøù5Ãß\98Ãe&p,üK-OÁ\92x\11û\11X_ÛyZ\e£AÝ\81[\9a¯ÀÐð¼\r\ 1\8eËWå¼ñ5    .jãõOG,g\9bySõê¯\9eÞ\95\rú;°ÿÄ\85ØÞ}à\92·¸,:îß®\96Û^ýÕ\85ÿÆeÙpÿ\86\9a\7fÈ\97?[u\ e¢UÜ\87kËõþ\1eÛ9'­æ¾Ó\1fFù¼R6¾\ 6Â\89M\8fáܯ\9cW5\10b\1d£Me~-ÄvÒ1\v\7fÉZ\ 6¶ê\1c¬,ç\8d¯s°jT\9e\82ã\1eb\9d\ 3gù¼k'ÉoÀy\18Nƶ୥ÿPÊ(ÞlÊ\9ey&\96\ eoâ:\9d«6c½     ²ËUÿ<ô,\97Å\9a\8b`QómY¾ãÀOÕÜ\aU;a]Ë%ñá\8c\85Õ\7f\9c  ·ÎìÖÊ`Î\84kKÙøZ\r«¦wí\6ü¯ì?B1Ql³Y][Î}ýÊ>\97\ fǵó\16\ f\9fº\81}R´b»\1cÝÖÿâg\ fþ\ 1\979ËmY0sä¼ïÞÌe9rÿ6\95²ñu#noklëÁ\8bwp\99õU§¢­\95G¿ù\a?Û3GÃ)­\9dg\ eÏ­z\13º¶e¨Ýw\ 6ó7\9cÑô&Ö?zÊëµ,òy\eg\8eÔy×tÖ¢H\91Û²vVgëón:ã\8dRf¢\16\7f\1c\81@ðIÄ^\8aµÞ[yÉÇòº\13ŸO\19'v\9eb§)ÊÜ\8d\8a¥o±½5\1f¹ñ\81BÒ}!dñ\86A¡Èª$«÷\94æ\9bx[C9½Ñ×@9íC°\14Í­uÔ¸\96\89Þ\92\92:±ÌÙ\eK*ê\9ar\8e\a\9c\1c\83Φ\ 4\97'\18ÕÂ\1a:SÐwôÄ&z\8a\b\8e\ 1×Éx\12\e
++H\ f\94c]¥\9aO>»<FsÝÒõ1bÄ?§\16{Oòû\94â¼öÙÓØDO1÷)QLzøÈÆ\96ã´\1cÉ\96ôî\93)w»Bçp\1e\8e2\1e×qè\ 1ZgqN$\95{KÜq\111 .ÙQÜ8.DGRH\7fÄ\10ñ7E7O(£\ 1l\8bq5ååq\9c\9c\ 6\13i+\8cÖm\1f«uOiÆÜ\18\89bÄKÊx\9d\9c&\89\84\84\8b\aUyýDiâñ\86írÑÍ\ fä-\10\1c\ 6       \1fSVå¤(\ f½"\85\ 4XVÑk,\16\81¢\9cò\98-\ eF§µ\891òÊSö\ 6ô\1c#\8b\8f\0ün\88 Æ¾TòÖs\9b\89ñÇ.ëP¿å8÷\8cKÐÚÊ\ 1Ö¡\84\10iÄvãé@P¥0²!o\82b\17ÌWJ\93åH\84\ 2§+¬\b\876`®¸\ 4\13`\8a¸à\¦ÉàÐÐ\9ch.\93ë\86\r\ 6Ãi¸R1[ \91J¾ø4àWL\93D\9c\14²OE\e\ 3\9f¥¾x(\84¨ªÞÅx>\a\86Èy\92\v¨ë\1eÓÔÚ¦\a\81i\86^(jÑ\18Í~Ltò\ 5\b\8aD!\12½@V\1d\vC\82\ eX\buÎ`ÞyÝî'\14Ø\8fo\ 5Z\ 1´ÈlÑ&À¤\85\1dè6\81Õb#\ eÁqX\ f´VCÆm\11ÃHûEÿ_ \10\b\ 4\ 2\81\10\b\ 4\82}\ 3#üÿq\9bv.\19[:µ÷\8f-\87ú\9eñÿ[\e¯5\7fçU¿ËܸñýÊ\85ñþϬd½ú\9cû=×øòc\1fß|\16sd\ 1û\99×~\0ÛÑïly·ðÿ*\86~ováâ\ 6ùÿÃ\1a§»æË'¼Sö\ekú½³\eç>´ù7\1f/ñÿÚ¢þ;\eG:\7f×\8a\17ËþHÇ\1f×\8eÿõ\9f\1fò#\8eóWhÿ¦Ö¯y;UÑ\vÈAÅi½E\8dã{á{+Þf¾ßzæ\r¯h}[ùÔ\95Ç0ÿ®j\1cÿ\13Í\87\17à®QÜüqw0ÿn*\97|kéÿøz\ 3+§wm¹æ¤\95o27\1f*G»ßôn¼Ö¼¶æ\80ZVs\17\_Úù\rl\97¼ùõ{\98\7fï¸Ï¡òw ñ9ö[\1aO9¨a0â[±ìÈÅÜ¿l4ó¾[Ëyãsì³ËyCØ\96oûBåØ]å\84\99ï\1f?\aÁim~\ròï'6­\85µ_½àM.ó\8am}mkç\92\9b.{¾æ'¨ýÛÒÊ>üÜÐsÌÛ»êCp[Óaøæ£+\99Gw>òyªic,ÚvüïT_\97ê[±¾Í£¥Ã³\98+§?^ò8\8c*»ô(.³Õf\9b\9aÿÌ\92ç\1fÔ\\16\ 3\8fíÆ¶\16\a\ 5¥-ãë>\8cæ ÇòÚë\1a¯ý\17\18f~Ú''7F\81\10ü\1fá#Ìw'Kñ·®ðÜ{Ã?aÜÜÛ\93\7fDb\88)ÊÛ£W\9d~~˳\9e\89\bvD\82G;*79ó\950Wù7P<;ù\ fÀ*ÑæÄ±òÚ:\f\1c^i`ôPyÔD\16´1\10\95ë\1cF\85\14ï5Nµh \ 6Ë\13ó\9bQ\89Ñ8Î8\87¡V8
++?\93,<1³¤\0\8fÿ\9cO¦ÐÖ\9eâÒ\8d\8e\94\91\9cuIU@ß"\96\18\9e1Òè3FÊ9\>atØö<\82¨)Á¸\ 1ÿ'Éy²\8f©³É\14Î\e\18xía\15¼)ÓdÄ´L*3õ\9a<\9a\130VÄEÃP\98˸\14\91êä3\91]ñÿp(\99 /=ç0Ð\89ó3P\1c:*ÄuÊ\v\7fñÊÜ|\ 1Øg\83X}Õ\95\8cèü@)\ 6P\10\1ef-Bú\ 1û"%\ 53A\19\8c@B\9b\8dr)\90o\ 5.\84\19A\ e1\98\ 5f?yÄ`e\ 5¢Õ\ 3\89\18\90\14\0¹|\94AÓ0>\96\&·\rE\8a\0>Á>\18W\98&\94 {\8a OI\17\1f\9d\84ÆS#\ffeÀ\190Õ$qõSÆÄ¯\8fö\91 iHY\10"5¯\8býßK>A´\8eQ£2Å\a\ 1?àv\86ö\97SSÍ'ñ±ÑM\10þ_ \10\b\ 4\ 2\81\10\b\ 4\82}\ 1#üÿ     'õÿfli¿wï\ 4:ü7\16¾q\90\9fßÖb\99çí¼ð\85«Gâá\7fÕbrO^1\7fgáÕ\9d\89\1dßIÜëû÷.\7fºÆæWîu[»ö`\8cýÒQ±òoOg^=U>~û$±ëgO¢ÕÿÞ$|õõí¼A\8exÑ$ñÛW·~_ýÐÂ\9fwñÔÕo \9d7\18Oýê(­þ3\1fªqÑ\8a¯·¥ÙeÑË\vº¸èÌý{rÖÈy{jüw1ýÔ\96ß\9eöÅmÌõFëe\11\b\ 4\ 2\81\10\b\ 4\82\8f &\8a¹÷^ûê#\90cöF%¯È\99(N©¾\0\83Ú\15{Í? j{4\r~ò_Ñ1¦Ñ: ä\8bbtêr\17t>\e{Ã÷h\94öHÑ!Ð\81\94\ fLi®ðÿ\ 2\81\10\b\ 4\ 2\81\10ì\13\18áÿ×_uËo\8c-íW-mâ\9a\8fÞ|ìùÌ¥ëØïmi|øu§\1fº\99µ«\1döolºã?>óØÿ)ûmðýÞK³ºý«Î\9fÇqûÞâø]e?9\1e\1c»ë÷K\vp&ô{»Gù\11ÜR8üä(¿\0\14Ï?o÷öË\8a\1fA\8e©ËmOÜö\7fÞøÇ¯±\1f\81¯üüº\16\17>¨iþÀ\84\1c¼@ \10\b\ 4\ 2\81\10\b>\1e(\7©B\90\83wʤ\1càrª9H<>\0#¥ðP:{|¹ZíÉO:XRé }\ 6\9d\9d§Xû¤µ¶\86¤Ð\8cI\16çy«\9dÏV\93/\ 1EîSR\v\9fc0\19ß­\9aô
++R¤L\ e&çd\ 29XSn\ 6«ñQIú&¸ttV%\17M.2(ÚäIsA\98ä³*\ e\ 3)êª\97\1c\12õ-\85D          \9c%\ 5±ª¯\11¼+õå\1c´M©ú\18X\9dqlq\11Àõ9\a\83ðÿ\ 2\81\10\b\ 4\ 2\81\10ì\13\18áÿÿö\87»ÍØÒ©½\1d-ÖüÆÙî¬ÊóOé×8sâÔç\7f0ÿ\83\9a#Ýõ{SÆÕ\ 5\98Ö[[ö¯Ã¶ì»ç<Çü¼ÑÌÏ?Ür\9c\ fæ~¿·i\9e_¼}Ö×8\9f@0\1c#¿½Åº/\1dÞþm\8e»ïò|/\98$¯ø¶IbäW5?\82±y¾\ 5\ 2\81\10\b\ 4\ 2\81@ðÿ\aâµKô;sÜ:Xomô\8ar\P\1e    \1d\1cÅåk\12Ù×\94\ 6\1e1ðNë`¼¢D 9W~}oÄÜkÊHQTùCT\95³Çq>ê\9c\1f(98È5\80\12K ÍÎÄr\19\13\83\8a$\r`\92q\1e\1d\8bIgÊ\7fR\1c\11\14\94D(9àº9\92Ã\82.\19\0|Fu\8a²\a ©V\ 5¯`\88\80]ÞErd ÿ\ 2g¨"ô8åD)-\84ÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81à\93\ fùþ\17\b\ 4\ 2\81\10\b\ 4\ 2\81`_À\88ÿÿº×\1e¿nléÔÞ3ä
++?\8eÿÿ®æÿ¿fíüwØ\9fßÚ~ï\89æ??çKGý\aûëçÐïÍ\9dÞö_yÜ\aìW¯u¿çÊ~òÅ?aç#§V\7fûÜïÍh:\7fÇ|øÙe´?F\8a/`\9d?\8a\a\9d\ 3ß/º\80V\9b~oiiÏblóÞ¿û\8bE\17Ðx;­\97èР       â\ e\ e)eS±ýË÷\17\ fsY\b¡\94m/ý¾\ 2ÛÂ9Ëø<­4Ç\16lk±\ 5\83y  \8f\9eÙÕù\97\ f,ã:IÙ¡\94\9d8½;ïâg^~\94Ë\82çX\86\ 5ûwýý£×¯\9eÃù\f\95â\9c~\8f\95vRLÅåo\18ÅeÁp|ÄA3;û\ræA<¥\95\r\rÏÛPÊ\1cÎ,e\1c\8fq0¶\97ï?ç\r.\v\9eë<df7V\eï¿|;\97¥Àñ\11·L\92[ñ´rÞ7°]òæ×ïáÜ\8a*p[R\eçÕÃO~\9fË¢ã:Ï\9eÞÕi\8f¯9\19£2µÎiTöwØîÿ­\8b_­±!µÎW§usaÕ\e§þ\1a\97yÅý\e*ö¼\ fÛEO?â¹,\ 4\1e\87\11-ÊE\e.}\93ç¨Ò±\94©ý»:\aãMîm:\92W\1dºâõR\96µâq?|FWæö[Ê\1a\93ÚÕÜ\91\87\97óÎÇö§úâ\1d\15×¹¥å¿\rÓeEÿÒ\98¤¹\7f«öïl6\18ß²hTìË¥G\952o5÷}Ç´n\9e-yþAÍe1ðØ\9e¸\7f×÷\ fg,\1cæ²ä¸Îõ\93èdNiç]s\14Ïk\13U\8dÑÙ:*\9eæÔ\r\1ck£ëÜ=¤\9d÷Ó\r\8b~QË|\1d£2îwc;ûåGîã²XÇVµûÎ`\8eË÷Ú\1c|áök^á{\86õ<~\87·yvæðå7sY®ë}Q[\7f¿÷ü\8b'pþKU×_\9aÖÍù±¹1§õ6¶{Ýy7\9dñ\ 6ß\ 3£Vòð\10\böI\8c\93×Iã½H{\9bqÓdz2\ 5§\8dñ\ 1/\ 6Á\91\8bhLTìé\81aLÆ=Þ\ 4üCN Z9¯)_\95I*d<429\8aZMúM&§llR¸Ûd\8fGMòxJ\93¯§£\9a­óFå\1449§:Ô\16\12\8e29j<ë\çg\1a\92u((þ²9Z­}\8c¸wû\9a;\v\8f7´Uáî\8a\87\8bE3\93­~¶!àÉN\r¦ôTº\ 4A\8eõ¿µÉY\VyëÐ\15åbõ\7f\96±:«\91}å\g\82Ò9\84LέÙà\8d.££¸tR)âµL\91³­Ã\83\b{ ¯Qg\12ÉÂ-\1c¯\v9À¼hiÐ\94x+ÓSMÙèÐ"\\8aD»"YT\91ô\15êKÖ [hiÀ\83\11ÏÛ \14zo2\ esd´àp\9aÅ\18Eü`lÔØ\ac\18º¦O¦Ú\8fµ¹4\9eZ!Æ8e\ f\7fb\ 3\8a*9­S\9aRíãJþ/OR^0\1dizéjk<À\1c\r¾Ç\e\857\ eý3\ eÍ´\18hC.ËxT¡ÐÁØx$kR\17Óä"\8c"\ 3s`$`:ü\10M°©\8c\883Ñá`E³\ 4}L°\ 2F,ÓS-\99â\15Ì©Éð\ ejrÀ`8\97qE\1cPLJ\19¥ñø74©|Ì$\94\16»\9cd\ eG\97þàºZg\8c/f\91\83µ>JþËdg¼¶âÕ\aã\83+Á|!\90e0b\96Ì[ªÇhfOæÕè?NÇ,C¿\ 3ùk'\8bi\85Vaµf,%£GÆ\9c\92»a^æêCnt6\13å\97£-\91W¸Eç5:\8d\ 5\95r¤©\85å\84ÞÓ½ÂF\8cAÄðéD÷
++Z¯
++Gi\12§\83E\1cÞÚIÑ-`þ'ú\9cÀm\81æ\82Ñ1S\r
++ÃZdàð=\95­µä\97\16\98×      ¦v¸<Ý(&òs7JizÝqÔ@ë¨s8   ÿǨÂа\1eÌ\86VyX\12ëÁãÎ\13Ë\ 4Ág\béÔQÖ8\8buãT\19\ e\\18ß\19eÎÒ=%£\84òã¡ZX;µÜw\98\8dh\ 3Mo¼\98\eåè`\8f\1d4ÑI$\ fë\a\13Ø;G{hNb\16¨\84\ 5â°J±.°Ll \89\1306¸s\ 5\8béËkIQÿ3\8e¡{¦åØîr\8fÁ\92hyöb¹ï¢\ 1\81Þ\9c\95ç{\91ÅDr\16\13\1eË\1eMã÷ʲ\9e\1d\96\19M\8b\9dêpeFÂÆ0¼r\9cº\ fË\f\ 3§p\9fÆ]¹,rº\85bw\86\89póÅ·-&:ºG÷c\f,\96ªÂ4ó0%
++\rëúÁR\1aͦ;!ê\8d>ëÑyú&Ò\ 3¤I\83Õ\85\15©âî>\ 5³â6äù;\86ò$jzjØà'Ê\7fHSPø\7f\81\10\b\ 4\ 2\81\10\bö\ 5\8cðÿ7ìX²}léÔÞí\85×\1cäÿ×5\8exO>ÿ±vü±\8foæãUÈýÞ-\85C#~{þ®\15/\96<\7fÑ\9a\89²\9fxè#N=èÃÂÛ+­¦õ65Nñòá\1f\1fÅü»uÌ\rÞU®Müßas\97¼Â\9c·¶Ìã±^á9ØV>»û$.s\8ey¼;Ûµ\ 69ïÛJ\9dD\10^üêê»\99\9f¶¹ò¾¥l\ 2\ eºé\13\ e\ fÏèú°zø\14[9èÊ\17?SÊÆç§Ok\9a\8b+_|h\ 6\97¥ê\97°´]ï\ fß:ö6æ§­eîóáÆ%/;r1Û\85H\81R6T8Ó¿Ævö³_Ú¯ê5V\7f\86EÍ×bù\8e\ 3?U9áZçúæC°xø¬;\98\875ªòÓ³º9°õàÅÌkç\8e\9f~`F×\96A\8evmãß×?zÊëÕç#²]>ßòGþ\89>ù5æa\8b¬\86\10\b\ 4\ 2\81`\1fÀ\ 4\vá.;\9e>{¯\95Ó\8e\9c        ªïÂÇÑÏd<\1f\93hÉ¡ÇÚê\7fPúü\91õ3Räy\11Ñ#\1fSåÓ]*¹ô\8a?\0¹H£\1d¦ó\1fÁ\87\82&O\10\8c\9bN        Öw\81ë!?\r\8dO(´Í\92q&åÊ\9dêæ\ 1>u<±î¦\90ÜôKÐcý\9f\8c¢9\80ÚØs@ëBÞkô\85ÒûY\8c³!ÿ\et+\935éKÔz¯ÈåÉ\90\9fA '
++²\ 2.\92:¿
++Ø3\1aJr\8fùd\r;m\17¿\99¤#yI`J\95\ f­2oM g\1aL\rG\9e.ä}bMä\9fÉÕ\8a̪°#\ 6ô"+ÌÜ\84)C¿iK#\19`\ 1\eÈA\b\93\18c\15q\ 5Ìa\9a¦ ­Ç¼$? íðoö¤H\88\ e`1\90\97\0F\ eó5\90{PÄbÈeÜ\84ÿ\17\b\ 4\ 2\81\10\b\ 4\ 2\81à\93\ fùþ\17\b\ 4\ 2\81\10\b\ 4\ 2\81`_À\88ÿÿ{\9f¾ùÏÇ\96NëmiþØW\1d¹æ5öÃ×\89ýâw5\1d®o͹ð'ÕG?rÙöVöÈ\9dË·°¯½©>ó¿*e¬Ñ5wC\8d\1d°ìÿ½{TÙ\9eú]\ 2\81\10\b\ 4\ 2\81\10\b\18%~By¥u6Ö*å]P&ÕýÁ\86.VÂxEñ\10{|ÿÏ{7Ü7¶¾©½¹\13èÿÏ.1Ü\17`;âÉ».¨qï±_ãï\aõÿ\9f(õÌÆö\95S>ó£\1a×­ú½+Z,ÿu§\1fº¹Ö\8fzn\9bÞÕ?ïÉ»Î-û\9d÷ýªÏN\7f\1f8~ç\9f½À:\ 2FMë=6¢     p÷ò§YË_Õ\18öÝ­\ f+~j¿Çeºjº¯kõ­\19^}\a\eÍe×·óV>uå1U\93?±¦ûÖÖ\9f÷?wÎ\8bU\93ßñyk÷ïlð_3/ûw.\8bU\83`{Ó5\98H\93ÿkض>¸àg{ê\13\9cÑê\1cÔäO­ï\83\9aü/5½\805¯­9\80ËBf\9d\81µ\93h\1el\1féû\80\ 6Á\19­lõ\96ó¿Ãcl2·óöÖ\96A\r\82Ý¥-\v±\9dtÌÂ_²\ 6\81­\1aùw\16½\80!lË·}¡ê\13¸ª!\7fQéû\ 4Úúe\9e\8c¯­?»Ô9¾æ\81ku®ýê\ 5o²î~wÞª\ 3º±=wãê§j\99涬oý»`îÐË¥ÌêZççgv¶^²í\86\13«\8eBà¿k-mólÙðÐwX[_eîÃP±\v­Æ«î¸ìm.ÓUCâ½éÝßß\ 6u÷×\952Òm8÷õ+û\\96êy³Û\18-~öà\1f°n\83«\7fc[ÐòW\fjë߸\7fg³3_zèÛü÷·.\87ÃÚ\96Ãã\877\9c¾½ê6ÔyvQÓ\ 3\19ÔÏg½\ eÑÏ\17\b\ 4\82\8fõû%k\89\9cW>\90Òu\8a©ÓH\1f£\99>©~¼¢0Ü`­\1d9\96â\9añ\8aU\14룦\80íÿeïêcþ¬Ês\7f\8bÎß\v-\9d\13²Íu
++µ
++´XÏ÷\87
++«¤LF\0Q¾Ji\ 1\98m)c\8d!¸%d\9aI&A¶\18C\16\L \11&J·°@¶l a£sdÀdP\1cBçà\85j\11\ÁÉĹëºÏù=ïËû¾m²?H\98½¯äiés\9eç|Üç\9cç÷<Ü÷}]\99ÄÕ¤ä\8e¤q¯|¯¡L\813Õá\r Æ\82_\12\93\99Ój­39¸\«Ï>;¼E¦\9c\ eA-ònf#3}Ñ\ 1¼\910}Úá}Æz^]mÂï\1f{S\12éÛ+Sn{.ù«Æÿm\99~\8d\8e\ f|ú¦T\92©\a\9b¢÷=G\9aDõÙ'æI\eKf{GR}\e\98N\1eIÙ_x\96IÚ5Æ@½\ 6\18È£RÇätÇ\14wv\9bÜì>rÈÁ\96E\aÔ}xÍå(Kþ7SÛ-\86S
++å\ 2ð§£\18\0¥\a`\1a\99\90H&z´\14\ 3\f\14Ñ\9f\8cI'/\18\16\89©\14\ 4À\v,\93Âa82ÖgÒÂ'¦\94gz\1f\99§\1e²¬ÁP¢('¤l&yì\vp\10LxÚ#,á\fZ\10.\ 2Ì=¾\83D\8d`\92ç>O'¤igÌÎí·X ¸/a9Ç4ᢷÕ\97Y9îûã»§6\a\13ödÀh`\bÉuÏ\80ç$gXk?ùùè8ÙåCàLN¸\13°ªr\84µøîZ\v\97`0\9c\88\8bä\18ÀN@½T ÈÜ\85\9e\92\98\9fk\14VÅjÃ\9a\ fòno2Öd\96o
++á\ 3¨\\a\ 6K³ \97´
++ʸa-óòÑ\97b8\r0\vv\9d¥\ 2\ 1Ö
++\a\1e\ 2VVÄlcfñ\82OÎ3ìÒ\80"k°Àø\80ñ0\ e\96qªXèX\f¢É\80ÿ´üT\18\9e/¯äÈGW<\1f\14|Zà[\19û\fO\82\8cÅb"7¯\87\19°\97°Å
++»\9d1¸Ø\1ex\18vä¶Ä\84ñ\91\87î\9b\11\17íO#\ 2Æ@;xz%ìñÆiPD\85\80ôf\96Ò\ 4 Û<¥öí\8e5Z±[03x4aÉ[
++A a\8e\ak\1a{Ýr·S½#ñ¡
++\9bYj*`<è#\9eQEô9"¶\fv!LMõ:î\17X\8b \89ì\rNãÿ\15
++\85B¡P(\14
++\85B¡8\b ßÿ
++\85B¡P(\14
++\85B¡P\1c\f\98\89ÿÿÓ³~æØ¹¥ã®ÇƸåÕû.\7f_Ëñwq<Z,±Õ\1fÂqÔ\8fO_ËóѺ<\1e]#ç\19ð»íãïú¾\9cwÔù{l\88\1dþâÖU¢\17\18\13ó\ 5^\1eâ©·Ü{ÄßK<¿õu<ºHêY@/Pêaìòqÿðz\89\95\84ñèTéçz\1c+\7ftËi¢#è¢\9f\1a]=hðÍ×\11|a\88­~ô+\17?×bÿ}leË\ 6-½ù\1a\83\87Ï\94}eÝ7&1ü-×à\ 6\ 2\1cÿuûo=Ûbêshq××ÉX×á¸á\8fÎùV+«¹Åâ¿ eoÀñ\8d\9bnñö!¶Xîg\86¸òù\1a\83MWq\a\8e÷\94õ\8fu\1dÁ\1e\e¿và`ø\9bÛ6´~\16\9bºNâ¡\93ö¶ï¸ µWZ\ÐÔèuC\ eÇ\99W\9dÝbÎM¶m\f7K\9d\vÇð¯8l²&ÎÞãonqóÖµØø¦ùÇ\18ð\8dwmhu\86b\9b­·\ fs=_\7fðå!\86\7fn<ºB¡P(\14
++ÅÁ\fÉSH\8cîöÔSË=6ÜÙ\14\93+^rO\19\83lchù¿\89ñî\94131g_Kî9\19®d\e\8cµ±\ 6\13R¶1Sz-2ô\9f\11Ù\94Íc\86A.\85\9al\ 6ﯾ 9Ær£¦\16¥_\18w\D´y\7fzn\vh£µó\9e±òfè\7fbp{ÂÈ0\90ìM-ÆK¸>^ùq-*`f\b\85íð\87C\87)ËV\12Æ\10\8dä\ 3dô9àuÑáß\8e\ 1Ñ8W,³4\16½VóM`àÌ´\bã\9cØ'\97\9c]Dó©\14Z0`\ eqsd+bif\0Ý\ 4\18¬\ fÛø\84®\9al|6\18\v®\9a£\83\97k\8am\1d`zEÃ\8eù\ f\94\11ì}ÈX2³4\a\13LPðYQÑa¦\9a\18&,x|Lø\80Ù\86½²\v¹¢mÜ\88ÉöÌ\7f\80q\92$¬x\83ÞW\18\8dñù0f_\ 3\9c3N\16¯®¶æÜר«Tæ\8b!àJ¬"t\9faÿÌ   \80ñ«\87    \8d·) öÀ\19*\ 1c.¸\8e¶ö8\835\8f\0JÁ´\16l\86\8c~aQ$Ç,\ f\eð©\86zq\8ey
++\8e     \e!d¬\9fê­1\fîç\bBdN\bþi\98\89b²G³ø\90e>@À?±mЧd'y\ 5 ëSò     \12æ:Ut\18\v(1MJ\16pM\8cÍÇj\81¡\1c#÷Cà\19ÊMÂ6\ 6³ÈÝ\85}\88ÕàÐ\14zÈt\1aì>¦U\94W/WAýÿ
++\85B¡P(\14
++\85B¡P\1c\f\98ñÿß\7fúÅOÍ-\1d\8föNñï?DZü\a«NîÜya<zaàOÛvÅêï·óÞ\8fG\9f\1c¸Å\8e¹wÕ¹\8doÎæñè:©g>\9fßÚáúå_ÿô¿ñ|\88¡\8cG×Kýô3_;½êE9_C\1a\8fÎ\92zæÇ\11¬\15\1f9}ù;¿·ü%\9e/5\99       \8f \vO¼xõ>\89\v\b.O\8d\8e[<iw>'àgå\1eúÍ7ܱ®ñé\99Üyñ.\1aâ\ f~ó¡Çïj1\ 3)¶²÷Jß\1a\97à¯_ÛÊji\1ch÷,\9dôãw\96m{ºÇ\13\94æSß+}Y\83ã\8a÷t?½\ f¦ùÔ\17K{ô©_ú\1dg:Ï ku\96Yí=wh++=~a×\ 1ô\17ÂÐ\97ù\\82[\ 6½\87+OØôÝÎ\17ØÇðüÀa·uú¾;&±\rí¾k\ 6\9bùw®\7f°Å!\18×â     ®\92~\92OïãGõñeß9ìÂ\92\99:×ú\1e¿`:g\9e\94}\ eÇ\aOغ§\95å\1e3pëÀ}·ùÙǯnñ\v¥ÇK¬\9bá·{ðüU-FÁÚÙº\14\1cßKG\9eût\8f_ècرtRçyß{Ï       \9d\8fáj\89_X\98Kp÷`ëß[ºùá^VZ\G\19b76~û\ 3\7fÜc"L\8bmh1\1f\1fÀ±ï\96\8b\9eée¡Õi\ 6»\8}ʧ[Ù\84Ûoía\931<tûºÆ\87\18ò$ne\18ÃüX
++3ÄòÌç ¼dj\98÷y<\83Ç-\99¹ïØ£[\99ïÜ~\ f\r\9f>é¶Æ%h;oã\86Ã&ó0\9f\83ð\ 1\99¿\r\9cÛ§×~ª\95EÓÆ°FöÃ-´õã\7f÷\17­,÷µ»ij¦½/M¸\vs\eßÝ\aà'¼l°Ùõw­ÝÓËrëË\9a©I?\7fí\91o¾«q\17\9a¾§·\ f1B¿kOü\8fÎ[Úãd®_:y\ 6*¯¡Bqð û}\16        ÿWÄ\ 3\8f¬L9Ú\89\ fk\8eßõ@|k6ù\88\7fGC\ e§W\9bó-\99dÈÇ\1c\18\XÄ\rI\92®H÷\1d*¢÷\18¿$x¸\9b\92q_
++Î\ 4\8fË,ý~\1eO7Òt\99\9añJ\90\9dI¸¶\8a÷)düâÕBÒ;KooÆï_È>Ó·Êת\9c0>\9c©¼ÌÅXðÃêsr\81|zÂ/'\84k\95î«ä;\ fY Y#\9d¿ø\91\82IÑFóÔ\1a\1f¼!\17_\885ål2jAïSE¹A{1åBsñzrgÁ¤tʺa.¼\17æ­jq\ 1½¬µó¡¡±è\1a{\9b\8cT\1c\98¤\8eó\85\8e74e+Ì\16Ù{üP\aü\92\9bÊéJôw\93)/\90r\vo}\ 6ÍÙîKÍøU/\ 6³ÐÞ÷Äß\8a\1f4Ø3aú`UoLíþî\90³¬\1f\9f¼ÌWä ÄU×îÃ{\9a'#\9c\94E\vò\bº\8a^\84@ï>n/\ 5Ý$\ 1\1e¬\90rBÇj)ô-ºÈ%àj¥\9bÚÓO\8ce\89ÑV¬§\1ax*Ó\ e赯ô)\86ýðÅÁxÁU:\8fù²\14h(ü®z/NP\1a\8a®ÏH:@ôÄ&®N\9c\85\91-\16¹«\98Û$\v\80Îpi\1f¯ç\98Y²!\92'0Ò½LB@þ"\17R\97\88û\12# CÚ`\1e*Z¬ô\vc\ 5\94À}@ÂÀ\94¸Y\12ê\8e½¯¨\12\1fÖ\a¬\1c²\14\1a\1fK`÷"\9d·Å\92\99\90.hFÑâ-\95L\87\98\ 2ºYgíùÆçF'lNEæ¥`Ý\15ánCϰ\rûÜc\9fpÈØ\83ôå\alJ4H\92ºè1.z\9c\19\89QéÅ'\97\1dÖ\ew\87µ\99Ä\86hÙÓ«-\81\0ô\v\93Î\10\93HKÕLO³lÖ\12*\96\vyô¸\89\1a\eb$##é
++#¶\94¡·:$òT\9a¾f0\11É\1aÞHî<<g2\8cHÚGÌ\ 1cv±\9a\1d\ 3\a|\92M]8.Ô\89'G&\1d_$·3þL°\9e¬9>\ 52\1eA$\1c\945Õ9ç\17àRô\911"x¶a²Jás"½vy'÷\17§2\87ç\94a\16è;¦\12¯\86\r   è\ri\17\9c\91\95<¡|`a)`\9a\1aiºp\ 1Æj\84Y\14CêvÚ/ß#\16\7f\15[y² ÷~FzùC\9cÍ¥Úùþ=yÍe.¸\e¸1äA\8c¿\9dúÿ\15
++\85B¡P(\14
++\85B¡880ãÿ_|ö\eÿynéxt\86ø¸vôrñ\9fÇbÕn
++\85B¡P(\14
++\85B¡8\98!<\1cäXË\12 @~\84\14­\8b\95A8 PrÍ):o*Y\12\1c¥\14\83\84_1V     w\14át\10­Åd¼a\0\ 2Ù\r¨ZHw¿ó)»H\95?\9f\18\aTÈ0a$\14ÊZÆ4\909ÁEË\18    OÉF\86O\95\82NåÈ\9ajd(\8dð\Dc¼úÿ\15
++\85B¡P(\14
++\85B¡øé\87~ÿ+\14
++\85B¡P(\14
++\85Bq0`&þ\7fù%\9fÿðÜÒñhç ÛöJ\9e¿Æ]F>¿å÷Ý|^פËãγÕô\ 2ß²©ñ²Õ:î¼k<¿rßu©WBÌS£½ÃùmÓ[ol\9cy®sµ}aàj\9b¯ÏwìûærßÝ)e\vëå=0Ô¹î¶\8f6~»blã\ f;CúNM¼\97Þ±¾iâU\1f\1a\8fÛó\aà\7fûäÀÿvù\976?2áxkÜbÛ\ f \89·[ÊÈ\8b\9d[\1fleÑ6n±çgñ¿\9dÚ¸è|,\8d«í\9ea|\e¦÷þYãq³\9d¯ìù¥\93:ÏýÄ¥ßjeÅ6®¶-RçGYç\93öÖÆ\9dæ:çáÞ¡½ù¼jë\ 6î´ù\1c\f\\82¿2uÚ\93­,wn¸]R'¹èN\7fúM76~4ã\95\1fM¡P(\14
++\85Bq0\80:z\85úw¤\83ô^\18<S¶$­KÆ\ 5\13¼­\89\1c\93>U\12ÙQÈ®\90@Îdc]¡2¡§Äb¦Z`¨ÂÂg)\85't\8c\96²7É4>=Òt&Æ\81g\e\82\8f¯à,u1×L\9eA\17\85\94£Á\90\ fOâÎÑr(\fLOèdÍT>ôä ­\14£#'i°d\17u\85W\92>4G\97\1a?:ãß³1\aâ¸\ô*é      î\8fÓ\13å   æ$\ 1bö¯Q\9eA\v#     ÷«\89Ô¿Ìe6\8fßþ´:gé9r\8eñõ\9d\11\17a\99\91²\12\9dÄtÅúJ¾Z\87ö\93èGz\8dÿW(\14
++\85B¡P(\14
++\85â À\8cÿ\7fÙ®£\9f\9c[:îþdú¶O]óK÷6ÿ®sãÑ©\8b'ç?qÊ\9bÛy\17òxtÅàÓ>ä\83oýª\9cÏÆ\8eG7-\99\¿øýG|]tû\8c)ãÑîAßî¨\1f\9f¾VÎ[\87z~8ø\9c/9w¥Ä\1dÄèqþp©çZöç\9bGþ7ϧÄë/\91zè»ÿöùo\15\9d¿\9cs\18\8fn\90zÖãXù£[N\13þB\17ýx´Sê\99Ëk85Ú%ã¢\1füÒéûEëÌZ\1fZ\Á\96A3ð\92G¯¬­,\99æ?¿~\88+8?_Ô´ê|ìñ\ 1\9f\1dêÜ2½ò¶¦·g}\8bGh\9as¿\8aã\9c/_¸§\97Õæ[ÿ9)û\14\8e]\7fuÖ¿·²\14\9boýÖÁ\9e\7f¹ü¦Q\18]×:ûá0g榮Å\97|\8f9عx2?óµøÎ\92²_ÀqÖÏ\9eÑ4
++s­-\ 6`ÇPvûÊõ-\16£ÚÔb\1cÂ`\97\8f<tù»[YèÚ\86§\1e:iï\91¿Þ"ú\8eÎÄØâ\18\9a\96âÂ\1aw\ef\95Í\8d\7fxlX{/\1f²õ\89VV»nÞ¦á¾\rÓÏ|±iãùØÊ®\97û\18˲ñ®\rMã.\94®'xÕ`\97#\8eÝô/M7Ï÷9ºLêÜ\86ãò\e7?×ã-z?o\9f\1571WÿîêÃfÊæÆT¼<Øó\8dGnÙ-eÕu\9d¾\93\17ÏÜwëÛzYî:\8bRçÂ\1aww.\99\94Í\8fŸn¨óôé\9b\ fme%7»<9ØEuì\14
++\85B¡ø¿á#Û¶QzÎFüÆ»\10Ã\1c½¸h³\93k
++Ý\9dÆÄZK¬\94\ 3+ÔnóÔN«\f}­Å¸\1a²õ>T
++9\8a?\91b`!¸D\99\83¡\19:\91CuÔ\8d³&SÇ­\ 6O\9fhÁ{ \8f\ eïËâ'4\14\15\v\94\ 1¯
++ÙÆ\R\8d\91îN¶P=Õ\0ñ\12]\8aC\81±¸\9b¬cì\9b¡Ã\99zmÂJV$èS|ËøwN\14\89Ki¶Æ%½½¢Gf9\1e\î,U\19«+¢\13W)ú\86&èÔÍ\13=3ÆÑ&Ñ\81˳m\16"õþJ¢÷\97ÚvyÐ@ÌTõ\13ÙK2¢ÑÖ\véh6.¶àê\ 1´Ô\9c\bG\9a\80¾:\93(\9b\99c;oè#Æ48Ì\85§\81E\99\19ó\10\1c\feS@\97Ñ *£?Þ\ 5\ e\94ê\81tSS\ 4\11íb\94\14\ 2¤\8f\1e\17\15ô¸Ö\84\92"uEZ\87j ^\14á*%\ 4³­\86B\9f\11\9cjÌb\1f³©µùÖ½\9fè\ fÎñ\15ÿ¿â\9d\13\1d@\83áÂ\ 48ï&q  s´,)ÉX±\9a)%\19MÂL\99L        Ä\9a(*I\1dGl\ eö!\ 4\9e¡þc¬X\9c\18\ 3VvÆ|[ê&R*\8fî{¬|\860\94A\vÕR_\95sPa±Úµ\11K*\12IÀ        ²t\9fó\ 33\89¶#Z\88\94Σ\ 2&Ö1µE\ 3wO¡F$ç9FöÆq\8fbsEF\ 1P½Ô9Z.bJjÁ¶¥¥\ 3\85\1f,eçÑ\rì`\8a[b¦²u-\8e\ 2K\ 4\93ÄÐ\ fØ\17\95\99®\11ê\19\ 4\82Í\8f\87\82(\9e\16\83\ 5\8dÍ\18at\8aEbè\12S!\91\19Øìø@`L\ 4¦Bî¯>\ 5Ñ£u9«ÿ_¡P(\14
++\85B¡P(\14\8a\9f~è÷¿B¡P(\14
++\85B¡P(\14\a\ 3fâÿ\7fcÏö·Í-\9dðóý|/oqíBå P(\14
++\85B¡P(\14
++\85â5\bÉ\ 5"ߢ·Õx\13r}å÷¿»óø?\99{Ïxtß\907¼zß9'uþ\7f;\1eí\90<äÏàØùð²ÿ\94\1cå\9cÂxt½ä 3\ fþþÓWý\8fä\12û\14Ç£÷\ ez\ 1+ï»ùL9\1f"ο0ä\1eïÙ·\òö\83Ïi<Z#õ_Æ6\9e}Ó=r¾\842\1eݳ\1f\1e\81\9dC?ß¹ïc\92ó\9e¢c?\87ë_ÿá·|Mx\ 1ª1ã\9eÏÞô\b.xTô\b²¯ãÑ
++¹\9eyÙËO:ü'Â\v\99ð\ eð\8f\13/^-ý¬Áå©Ñí\aà\ 4¸iÈÃßèÏ\7f¢\95å\9eO¿ì°IÙ²\15½\8cyBRv«ÜGN\84K¿ãL+K®åqß=ä\9bo\9d^ë[\8e~êZ\ 3'Ë}\87ãØüÔÑ'ôüý\9eS¾}éÄÎ\97¿ùâ==\7f¿ß·f¦\9fïXßúÂ|¦E3¹álôÌ«În9ó&ÛvßÞa®_:òܧ\9b&\82\ f-Oý¡%\93ö®ø\83ó¾Ûµ\rº]Ì\ 1t\ f\16Ë}äqøý¿ÝÒÚs©´1\1c7äÓÏç\v¸o\98çó¯\9dh0LrûW\f¶þÉñ[\1en|\ 1¡ë:\3Øe>'À\ 3\ 3ÏÀ\95Çoþׯ      \90;WÂeRv<û¹äì\96¿\9fciu¾nÐÌxñs\e\9fê\9c\0¡õs÷¬<ü\15·µü}ë\9b=w\rí=ú\85+\9fhe>¶±ß9Øå®·\7flºåïûÔú¹a\18\83æï+\14
++\85B¡x\r~\83\14¤h\13_wM)1Æ\90c\8aäe¯6\14\1flÂG\8a\v¶äÂ\ 4úl]p¶ÔY\9cè\vñ\b\fÜö¾t\9e÷\10êpÎW\87wÌÔ9ê]\8d\91Iø¹\16\83WÝê:·@NÅw>v¦gÛÉy\\83wW\97\q>\17þ\ 35I\ e»7Îe¼\9c\v/¾ÐÓ;fÄ\a\8f¶bÌÕ\16\9eMLÈÆ8\85´ 9_3n\8bµâZ\92\ e\90M?y\1f\9dq%Ø>\1et-Á>\89\1c\v9\bÛ\7fë;é È'a0òa|\8d\1fÀ\85,<òL\947!\9a\98\12Þ.aÇÐÇ!]\8aL\85/\1c<FØíQBL.Å\9cÙ{oûõ\ eS%¼\ 3ä\b\9bð\ eÌáÓG÷cvd¶'k\ 2Æ\9a2fË\98ì\9cÁàÉX`J¶Ù`ÒM\b4X\f\1ctÍhV\12ø\85󠲫ø´\8c\11FL\86ùñ\99Ôú)%[¨\90àb\89ò\r\8bY¢à\fÕ\8c[±>\8a#Q@!ç\ 5Ú\8c¥\18,\1fCZ\ 3ïÐ_Ë\84þHÂ\7f´B
++\ 2ÔZ1Å\99kE¨Ê\1cÖaÂ'OHäùwè4\95\17`¨bHwG\8a-_a\v\12(\90ã\1f3\15ðý×òô\83¡\8dJ Ã?ZÉø\e\9d6\aà\9d°\86\v?áýÝdÉÚï|\aûå¼H9²\8d\b\eb!\90\9c\81ËÐ\89 \ 2¾\fñ\ 1\81¿¨\1dakÄ|8\8bÕ\12ð\89\83\86*-\9eÈÝA¥\83\ 1ëªáäkü¿B¡P(\14
++\85B¡P(\14\a\afüÿ\9fÿò)wÌ-}C÷eÒ1yí1ïûmñ\9f\17·h<zl\8açé÷^ñÕ?üPã¦\ fi<º{à__½ïð\8b\9a/¹ú\89_\9dׯþÇ¥\8f5_*ýöÏÐݹ@\ÀºAWþØ\97Þþ\ 3ñÿ[\9bÇ£\9drýüx\81eòÿ1Îa?§W½(ç«ôGúÏÀ\86U/¼_üÂ)8\9c¿ZêY\83ã\98¯ýò}âÿ·5Oô\b$^à©_ü'9_\rú³I|³sõ\ 2Æ£{\86ñ®Üg6ÊùdòÔh÷xRϲ[.l<ûÆt_üó\87Llú¿ì]mÐ\9dEyÎÛ¡õ¼ù \14ã\a-£|\95\ 4\13âî³ßU0ãÄ\1a\99ðÙ\10\ 2$\10KR"¼\10¡©fü\982#S\19¥\88­tøÁ´LaZ£\88¡¨ (Ö\19[¨ò\83\16\90\ fc\9a\92ø\1a, 4´\85&\8c½®Ý}ö=9Ï9oÿ\18\8d\993\90gßó<»÷Þ»ç¹÷¾ïëzïäÓ\7f\95Ú\1a\93âß«K\9c÷«÷\0\99Ú¬M±ãÍñ{\8c·?yç%   \83¿Q&Å\80\8f8¼ÕïúG·\7f3µY\93âí\8f\8e\97¾tr\rf\97þo\9cüd®ïhlêçg\v\aC\97Ó`E\89·ß\7fûÅ\ f§ùor<zyiëò\ fl(±\7fñg\17ý µ\85&=ïÆ8¾UøÜò\89\95m\9bK1õ\rÑ\1enÂçîׯß\91y\vòót±Ñ\r?~ׯ¥6\93ó\ 2\8e\98ÕÎÛÛü\ 5Ûr¾D\93r\14ÖÅ~þ%>g\9fzE\1a\9fs9öÿõ¨³á\\b)7\8551\97?·ýºØÆã¼Øöà¬ö{]\9e\84\97ÆÛ¹}åÄ<·Aå<\84[\ foÛönÙ\90ó,\94NÏ[7ÞÚö©'­|>çY4ý|\0ìËùÏ¿-ñ$HÓ$[Ú]¸5Î}F}6åDÈ<\ fëúr)\16Ý\97Ú´J÷Ü<M~ƾ2\86n~ƾ2ïç\9f0±=åYÈl/»g¶mÝ\1c\8c\15s§ú2ÈõðÆrÏ»f\úHjóY\9f«\8b]wy ^\18oïÙå\81XQÆwõW&R^\87v"Íû1%¿fÍä²;3×\83Ïß+¹0\9bî[\99ò:È\9e\eÛÞ>»]+\1f\9a¿&éÅ\89\9c+2Å\ 3±fò¤ù©Me^\86ÃÊ\9a^qÜ9;\13×\83\92Y\9f3Ûç=ñ\86\v\9eÍmy\f\9bf¶÷<còÁϧ\\11\91Ç>oÎTÛ`\8eÉÒñöy\7f$ß¹3å\91DXç\92'3\9c?ÂÏiíì\8c\1f½ö¶\94c"TÍ1©ò³\90\14¯ó\8d\vÖ3<Ø0"ä¬\13¾ \ 2ÿtR\aÇ͹qä\95\86©G4så\15I¬SìkDLO\12\0ÇêFq]·øã¸\80Ë\fÑ4Z\18\8d>à7\ 1cm\ 4Ã\9eXbFâ9x¼'4<\ 6+M
++Ü5º1ì²Á\90\15£kÄ\86ǦÚ\98\1c\v\1c\8e³ÞÆí\18\ fÓ\8dpÄn·9ÆÔÏÑÝÆ;y\v<K`\13\94\91~\9cÄ0ñûZ\128\9e\84ê\96\8cíññ\ 4"ǯE\88\0àÁ:'\\84R·6"R3vf1\1e¨\96\7fO\9c\1fºôÍÿËk\8d©w¤Í\16\ftânÎ;ô\1fê·Þ3.\86çè\10"\7fµ\8c\98ådäfpVzèI        M8l\8b)äh0Nü\ø¦/\86\89þò\99\8d\88\17¥od\9fn`Mx¬Ñ\9aLí^ãë\84Ü'\1e?&!(k\19¤´Úi«e0\f\9c*A¤tibf­!r»ò\12\1e\8aò\81èî\9a â0j\15\88"\8fßn¯9/\96\ 6ë,.9\ 3ýB÷\82\93NÆsm` \ 1ÿ\14d
++\17°\ 1)\f~\15q\11zwP\19údå~qïá¸ø\r^wü\ 1â\g`V\93`\0Ó£H<À\1fÃ\18g\96¤2HïD¿\84ØôÉöC\8c7óÿ\89åNê&Ú^Yó\98\19Ë{:\12\ 3\98¬\8fƹhkVYÚ\1aÔ\99îeÉ\19\80î\92R\1e{\19\96²\88D\rFAõ\9c\86@k&\9f\ 3\94\8eÿ\8f±m"º;ì<\18S\\10ij·\92\ e¯Û\9e} Q9ã¼\ eP\0¹$\1c\\1cg\88:ÏPµs\8cìcµ\bZ\8d\86fdLüMû\84\8a¶Á^aô.Ú\8bãÔ        Ï }\1ek\87\9f{^i\ f\e\81ÞñjéÓ}\15ó$\f{\8e¡´9\e\ 1³ÈÅM¤ý!y\ 4\82\89\1a\11°_ê´W8\11ìtxøX\17x   sØ\ 24£ßØ \14_\80\8c\87\93\9c\ 1\1aÁô)¦\95ðÆ|Åoø\e¤\13n_X\ 4è.¦Ga_Áï
++M\126ÊȺðN\93f\0\9do8H¦'pÿÃÒÇ\9cáÑ\ eSìµkB\9c\84¾ýÍ£OxB\eó\8f[\97\ 4öbX\94\8c       )Ð\82\ 6\8c\81;(\93²ñ8ô\ fû\1a&Öc±
++ر\87}3×\99y\ 4\81$   èI\b\;\999\ 2\e^̦A¯qCîØô\1f°\8d\ 6\ f+e~\ 6\7f#hëd\18À®\13ó´kü¿J\95*UªT©R¥J\95*UªT9\14d*þ\7fÓM·?2Øú\9a\1c+c,éÚ\85O\9f\91âö\16×SÍq7/`m©û^üêâWS<2èÞØË¥\ 6û\v\ f\1d\15ëðucT/ÇÆºuþ\87\95\98àþõüKK­óCk\16üWz®\r½±Uåþû×ùo.1­÷¼òÖ\17c<_4a|lF¹ÿÄä[¾\98â×2ó½ß\18Çð\ e|V~áâgr[H1²£K^½w_¹;µ¥³õñ±Íñ{\8c+~øØÕ\8fä\18u\e\ 3,qýG~wU\8aý:\9d\8b¦©Í\9f\88m\9fÆç¬ÇÎ9,ë3ÇT\97\94¹Y=yÙüÌY\9fëö\97\96\98ø\85»>ñöÔÖÆM\1f\8e}\19Îg\7fÖ4\9cõ½Ø\17æ\18¬Ú¾¢mËzY\e¿7\9cÏ~ÃÜ©{\ eòÙ/+\18\ 27\7fsé3\99Ï>ÖtU©R¥J\95*UªT©r°JÌ/ÒR2·\b¯çÞËà       øÄÜ\ 1Éx¬W\fi\e)½hkñ­2J9#È\11Ï8w°ægÁï®=S;\ 4+ѽ \9aQ{æ\ 40O\88\12=\83\ 3Ä|\16\85\e\81\80\ 2,T׺±\r\93]LãØWÏ¿h\98\8f \85s\92¸\r\8aù\1f¾±A±Ö^µ±nã´Co\82íÏGÉ8\ 51¬Ýà\9d^1ÖÍ\14*gR®\84v\8cþGÿá\17\81#\10\84éÏ\9f     . \9b\8c³K\11ó\91c\8e\87\12¶ñ"´s6¢nß\v'ÐaèÍ2· åE\ eäU¤\1c7æ6H¦\19hL\82dE¾j\ú\7f\vÃax\1eO×D!P1]Æ3\83\ 3ÿ\92ÊÇL'\·\9a)9²an\10\ 6\ 6\95`¾ñ'\ 6Ú¡Ò-,ªi\ 2\93¨<'V3óLP³P\ e\9eÂ\8c"Ìe\8dÿW©R¥J\95*UªT©R¥J\95*\87\86Tÿ¿J\95*UªT©R¥J\95*UªT9\14d*ÿ\7fó)[\8e\1fl}ÍØ­\85ßîú#ô\99    ÷Iãú£#p\ 1ßXpþ\16<°ð¼\98Ën\88Û÷þ>\1eÁ~\ÀÝåþûã\ 2¾Pòù\97/9ê\81\84EÕ4½±k"¦Y\17/pGÁô\9a\9b¿\15¯;!{\19·ª\8b\v\98\89\8dvì«g,\8d<\82²!þ_áÂÛ¿\8e\9cv¼'¿xäÞXG\80\ eõ2ÿ_\97\88x\9f\vØÏ½[N\8f×\e£ÆÇ>Sòë¯\9c\1cW\99/0sûm\8ecc\8dÀ\9f|)a\88I(#a¤m\8aÏ!þÖ\1f<³)ãôE\98!´}¤ô¹\8bï7£Ô+\uôÆ\1få6\9fê\0\95¼ü\8d\93?\99\95Ú|Æ\13¼µäóo¿ûì\1f§:\akR?'JíÇÆ\9d\eç¦9¶!õss¹ç\15\93\ fÝ\930ü\æ\ 4ìÅñ\rÇ÷{!êw8¾ßuÅÖÖï>üã     oÏ6i|/\17ܼM[/J:ó.ã\99í+Ü\92ݺ\8a\9bË÷ºX|ÿ0\r¦Þ¶8\86áõ\18_/zYóô\99\9fÎx{"Õ@\[æ¨\8b\7fw]±¡ÕæÊç3þ]Öç½e\1dt9\bo\8egwÃë8ÖÎjÇþÑ».ÚÙbÕ¥ï=TôÒå'L|\88Ãñèúqå\ 6\1e\9c;Õ6\889·«\8fópéqy-g\e\TÖÕi»\9e\7fMÆ£3iì·\97¾t±ê\1e*vÝŪÛ]ù\10«T©Rå\97T~\ 1\a
++w\90opøi2^\12.\90hb3Zìµæ@sÈ\1dtùÆ-6Ú \ f\bäÔx"\9b\89 =߯b\9e¸\8eïÇ\82 v!dÝ\8dâã\eÅc7
++ÃoT>w¼\17¬ND CrÄ¥ë0\v«h(\a\10\e\93p\8a\8eXv\11áT['\r+\9c\8dá\94ÑÒ\ 3\10Ò\8dTqè#¬\98\88\88\#Â8\82Éñí\8a³\11_\96X[ \89\10§¬9XqèbÝ\ 3Gd\8d\1eÀ(å\18q7®&M\9d:(¢\9fçq\18f`\7fÞ½\82¥\ 4N\10\16A\\8f\ 1\ 6\1d1OMÂf$#^CàÖ¼fH%\b[Ãþ\81¯ZR)\12ö\ f\17°<\1a\82\ 1²Ô\0S«5¯À\88¡\ 1è\12JÄì8\15°h±fØ\1d.#Ì\9eU± \996È9G'[.ÅA~Å\918¬#ðe1Dì9X®m}Á\0Nc\7f\1dÆP.Â~ÿ\7fù\86\ f\1e\ f÷Æ>\12ý\88ÏÑ¿ýï\85Ë\12\1e½Ô½\'Î÷ïc/;éåäËIÕÖÿ'?ÿMë\92?\16Boì\969íß\1f\7fÕ¢W³\7f\0ÿüèâ\17}ì´ßz \9f\ f_Rþ~\7füÿ\97\8aÿ¼h\8f\8e¸\0\1a\e{°`sÿÝ\15\vãý\r\81^Æ9¿\81ã{ê\98ÿ\8d8\ 2\96~þDéçÉ{>ød¼î\1aøíûFà\b¬-ÏÝ\1fçÿ\84Øÿëèó}þìïe,\7fÙôùgÃqþ\97\95çìÝÚò\ 3¸ì\ f\1e\9e«Oܸ3\9d\11àG ù\913Ûó\92K¶­¼5\9d\11\b\99|©^©¥?ÿo&\9eNmMö#\17Í\19}~°äðÑç\a/ÌmÏUö\9eröS©\r{F\1a_Ña\17Cá¬Â£Ðå\aH\ö\1fÇç\89/¯ø÷ýÏ\16\16Ì\1e}¶°n\1a^\81\89YE×Ï-¼%Ù\9dÊø\ 3:Þó/è\ f>»ðã     [\1f»hêg¹çGæ^þ½ìÏûÔ¶ª`6¼aþ¥       Ó\9d\eul{b\1a\9f}ë4\98õwD}¾\93þõs«ÿ6aÏc!ô\9de$<\87Ã\13N\ 2ATÓ<\14\9fÎ^9\99ñ\1c²ï½¹p8¬\99\9cø\òõ±ãŶ÷Ï\19}\ e0\85u\7fÁä\99·¥s\80&ãàß\1eíl\vÏ9¶ß\7fWjsyþVÍjm°\8b\ 3q]Y·ßøÄi»3\9e\83Mmwô\9d\1f\ù©Ô\16òZ9¡èú\9b¿ó\81Éäϧó\9f*UªT©ò+ëë+b\9eÃÛ\89î\áÂ\9eÂéÇ\8f\8b¦3B\8en¼­\93ìZ³B:¾¤\93ì\9a¯æ\86n*~\12        ´N7\f~=^Ä\1c\99´\ 5üP:¾DL'c6î\ 6\9f\f\1e\16i\ráïé¨JAþmKÏ%Ñ,Hü\0³ Xk\r×Ý\a\16\16ã\17ËëXFÜÐÉ¡\83\8e·\10W°î3öû°zb¼Ý\13\8fÜ·ïëÒ
++\8b\97·\80\17*8¬\9e\9cöx/\11"\82ß\e¢Ãë\bí\1eK\9fñTôKh¸6xÓ¦ÿ\8c§ò(\ 4n¹±h\87\a\aç(2JÀ!Çp<ÝU¼ÈÁ\aa=ºSð2à<ÐEµFD
++xþYc8\14£X\8e\rßOFUQ\ 5xQ\80«fUÇwiø\8a\8b\bÚ\ fÝA¥ðúèÐC\15x1\86O"0c\92¾%\1c\19øp\8a\fùñT\ 5\8e#\(\vç7\10îßzâdzÜ\9bS\86\9f}ζ\86¾1\11tS=þ\15\88\15¯Èp\ 1[À}á£iRHð¼'\9fßX\98\87ç©Á´ç    äJÇS¬ rýÔù\ 3º`Y¹\ f£\82¿Æ\17YQ|(#àÀ\8d\18ÀyW\1crôA\e_Î;2/À\8c\83èN\87àúÏ à%³öݹþk\89\97\80\94\12\1acw\f\89H-xÖ\82i\83=Ñ#Æ\94CµðQ=Cl\82§IM,½§~¥2\86\1elÃ32\9e\8bب,."²(Àq\92<äR<C`ý|C\8dK\ 2\ e@m\8e\98þx\14¼÷f\80k$ò¬4\8eÜ\14AEî±¶ÏZð\1c\8a°úðÃ\15\ fâÈQ\81\ 5+èO\13"\ 16m\95ÑTM Ä\ 1fH\12¯\9fN\11Wu\13\ 2ß?ö_Â6°2\ 3T\80UÌ{\19ª\81L\14\8aG\85"\9fF°Æ\9fT\ 1\92¬\1c\ 6\ f\98â\1fé÷\8dñ\18\93ôÆ\ 3Gøõ\8dÏ\98ýé<"ê"Â\18ÈÈÅ\82í#\1eÁ@ßx\b    B<\8fì4<o\19ÈÙ\10\89\ 6\fW_$oà\ 2G\ 3          dÜ]à)\90¼\82\87,ÄoÀjô<G3x¸#Q\ 1mD³Ï<\ròX»xr<\13!\ 1\ e6#\9e¼ñpOÅõ\83Õ%Ð/øÇMbÌ@÷\b\b\ 1EòÐÌrjx=\9d\ 5A\14\91\10\9c÷®æÿW©R¥J\95*UªT©R¥J\95*\87\82LÅÿ×ÿá{:ùÿ½±y1îØÍ·?"Æëþ\1c\9f\85/½ûñ\18\8dmóü»ñö\1d%¾÷ô\85\13ãêÎéÞØ·K¬ôÒÓ\7fû»)\7f^ÉÞØ¶\12+Ü?Þ¾<ÆH\99'~¶\9cØ\95bã>¤xæ®\92·Ý\8dq§¼ôá1ç\87J\1fþþ¸\8b\1fK1ç&Ç,ß>\r\86\18\a\1dÎ\1fÿh¹ç}_Ì\\0ä@\8dm«Kl|Í\89\17¤x;Ï»fLÅþù¼Ç¿6ñý\14«6&År·\96Ú\8aUÿráÂ\14«\969v<£Ô\a\fá\81\ e]\1eø\ 5ñygâ³gËÚݹ-Ç\95×\95¸òÅ\93§}2µù\9c_~{ÉÛ^µëä7çº\8d\1cû_ZrÏ»ùåó¦á\10\98QbÇ]¾ó\97K\rÀ`\9ex\95*UªT©R¥ÊÏ[¦É;'+z(qÛ\83\93\ 3~Xþô\81¬I8ØbÁ\8cj7Ò72ÇÝ\ fF>y\8e\ 2z\13MÌS\90\82E\ 4ÂZçÚz\br\ e¤\9cy\15sâ¡@Óæ.H\17ãôV+åÙ\15Ë\1c\ 6ò\a(\8d.xü\87!fÁÀ²\v
++\93à\14\9e\ 1\ 5{*ÜÆÉÇà`\9aP"ëf \91&åF`\18\9e¥8NéÀç\9b\80\98K\80å `\89\8d#\ 2¿¦.E,×0ø¾\97\ 1­0EÜI9é\98Ó.\8cð1eE*fù\b\98\92fi\ 6+$h$Ê
++\1a¤7\9eÚVL~an\8faj\a=$¨\b³BF\ 5¦ÐCE¸½òm.È\90¼\8dþZ\ e¦óHÃ\12"\1dãýC¹\0`\96\166\8a\ 5ÆÄ\12¬\v§u )+¯èOy\r](ï\95\8d\897ÌïPX{>XÖ^\90\99\8dýÅ8\94\99q°äoÔø\7f\95*UªT©R¥J\95*UªT©r(ÈTüÿ\967ݹe°µ76£Ô\9b\9fð­?='ÅÍ\89\9fwt\89\8b_³ôMßÍñXÑ\e{¶Ä¯\apøâõ/á³àÅ\87ÿ'Öí\v\87û,*ø\7fÇ}ç\93ßOõüÚãz|îûñùÔs¯ýv¼îy=a¥uñü\96Åë\8c©Ï~÷ë¾\13ëÿ\ 5q\ 4u\89\99/ú§_\8f\18\vÝ\e[R0ÉÞ²çÆ\18ó÷\9ax\ 1ûbì\9a\ f>\7fÜ+ñz°\18×\86\118\7fkKÌú\9d\97,\8ey\r,.\eÏ8\88±¦~K[ß/r=ú¦ø\8cá\98\ 1×\8e·ßëâ\ 2LÕko\9c¼â¶\ß\9fãÿ×\8f·ý~òÎK~\92ÚTÆò»c|ê{\838\7fg\15½uëôW\15L\85sn~ßÎÜ\16RÛT=ú\87N]÷\1f¹N?×\95/\88ýä ×ï¸bK®Ó\ f©\9f\8b¢Ý\fÇ\0¼#Îù]ø¬}ä~\93ò)¬Í\98\b\ 5\8fpÅo\9c\95p\f]\bI\9f"ÚÖp\fÀ\84\83Ǽ\88Ë\9fÛ~]jó&å"\3»ý^\17\ 3p[ÑÙe\933\13Nc°MúÞËãí÷önÙ\90\85Ò©/·Ìlí¿\9b¿\91\87c\an(óÞÅ!¸½<ï£ß\98HÏk¬OÏÛWp÷.\9e\~jÆ!ðùyãm_®þÊDÂ\ eÔ.×÷/-ö¿zò²ù)\7f\1c\94­Å\96ºX\ 3×\14½t±\ 6vÌn\9fwÞÇ®üAjó2ÙIJip\bæM\83Gxm\9c÷á8\ 4;Æ[\9bøÍc&v¤|\91&¯±\13¦Ã*\1comâô§¿\9a±
++EÎÍéM\83_0of«\97A<Â*UªT\19%}uÁ\8aÁAº0\ eSbév\96\ 5ÍM\13ëÞ\85qN\ 5nò¬Ù´¾pm\8fª_&,l¬uÇk\89\97¶¯öv8ÿ¶\13Áæg\vÝ\bG¼0Ûbq\8dÀ\9búyst\ fÆå\1aþ5~\87¡%¢\815.è ø\a\8dg\81¼\8c°>\92Ág'\9cbÁ¼eå{\ 4éj¬Ó\81\95å\r\b`Çðº³x'Ó¶at\98\81]\ eG\11£)à~^1p\r\1d\86±3tY\12GÌi\82\99\18ⳬ]g}-£®è}Ãg\1aß\14\8fYß.d£}\8e¹\1f$õÄ\f\8c+ÂÀ1VÉZ}¾¤M\93Ï@XCt\ 5ê×)ç¶¿\96Z\89\10úð\ fØ\15¦\ 4\14îô\11\98}\ 5çí\0áéñ\ fÑcâ6ÆØ8\ 6\1a³\ 2\9cÔ!âÛq Cêïcp¾o|N\11´N©\84-\80I\ f\\80°\856¯aD]?L\87\1d\93\8d\99qÐb2b\95\11W\13\93
++µC«XOq\8fÀÒ\14\9a!~\83\11\1d@\8cÌ_&|\8f\167\90(¢XjÁ[ÂsÀZ\1cïÓxf,Ð\83R\1c#&Á2ËÅc7á&\8c     Æ\9fBUL%p.ö\82\9b\9f\801J"'`úa«Øu\98|ÂásÁcCÇ.\80\1d\ 5Ã
++4\ 3A-`\8b\94q\ 3\93¼\e3:\98\82\80÷mMÀ\r\r\95Y&N\18ìHX\11\11+q\10\v±Æÿ«T©R¥J\95*UªT©R¥J\95C@ªÿ_¥J\95*UªT©R¥J\95*Uª\1c
++2\95ÿÿ\81¯\8f¿w°µ?\7f\ 3\vÏKyÞäá{t\8aÏï\9cùÿ\99yþloì\89x\9e\90øÿæ­MyÓAõÆvÇ\9c[æø.~uñ«9¿Y÷2.\1fï¿ø\9fçnË8rÌÿ/\hoÝsÿ»r\1e\8d\1dS°ó\96/9ê\81Ì%Þôr.p\97Gð¥R¿°\7f}Á¼\11u\ 4[GÔ\11<\ƵhÏMëãuoðÜ\89ò÷\13\ f¼î\1fc}\81Tèç£åïOÞó\81ÈUgM#{c·\96\1câ\ 5O%\9eBk\ 3î¿`\ 4\1faª¿`®òâ\97.y*]Wxîg
++×üÉ/\1e¹7Ö)@\11½±^_]C?nâìÒÏÕ÷¬z,×\15ä\9cüÄSȶ¿>þ¢\7fM\98\8aÊ¥¶Må~\e'7~-Õ\15è\\ 3pc¹g\977P\14~È«\8eÞø£Ü\96\97\94¶Wæ\\9ex
++\95Ó)\17ü¥R7Ñ­GX\10ç~8\86c⣼\11\9f»Þv~\1a\83Ñ6å{o-|\8aÝZ\85\153[»üÁ=ïKx\92¶­\ fØQ¸)ÕÉ\99\89\8c©øpÉ­ÿð±\19ßÑ)\91î¹£`TÞýúõ;r[\1eÃ\e\ foíqÝS÷ÍNmÞæ\÷Ø\97yø\þÃù§æ\1a\87\9cϾ¨è¥\8b\19y}©\7fèÖ1ì*ëô÷¯97×*¸Ì\17¹uV»\ 6N=ieâ0\94\11Ú\85ó\1e¿w\1e>\7f,×?\9bñ$E\9aÛ)\8eÏ\8b&oxGnËu\1aSX\9aç\9f0±=Õ#È\ã°¯´ýô\94\89Tã tîç½qìÃù\14\97\95ïí\9byÅ¿¥¶ÐÖ#\94u¶zòÛ÷¥\1a\a­Óøn-µHÝú\87\17ú¾7Xÿ0Qö\8c\v\1fÿ²LmΦ¹½7ÚüFÞó¶Ë\7f\92ê\18dÆÄ\Wt½é¾\95?lk\1cÒóRíÀ)ø|tι©VÁ\99\ßñàÜÖ\ 6»õ\ fÛJ_ºx\99½Y­Îºõ\ f»\8bͯ8î\9c\9d\19KS¦¶³¦ÁÙ<¬Øçï=þÔ[Óþ*LÞ'JÍÏ`ýÃøØæRÃqî\rË\7f\9cö_\171\95ªT©òó\91\98\88\82\85½Z;ÙÇaE`5æ\9a\13æÍHéE\9b\97Mî2lí\96\19×\v\17ð2ddd\8f#\9b·1Ú\11Þ\8c|RXòJ\13ü\8c4ØÞyf\8d\14\90\10.óN\93\ 5Ü6NkÖ54¶1%\aÜE6:Â\82\99¾üq¯\99\9dlB`.¾µVÄZ\b#tÄ-k\ÌgÆoo 
++\9a\93Óò»õ\7f\86áx\8dÊc\1fU'Ñò\85\1f,|kJ\10\ fM\93\f\ f\9d`®o\90Ö\ 5ê/B¢Aå*\10FÏ3%\9cDv\86Õ\16ä\15ǯ\98\8aõ\ 6\82å\ f0\81\94\ 4m¦jEH¹{ ¹í\e¼ë´s3\8c\8f¼\9fOnD\rJ[g@\88?Â{Ãj¼     Lé÷Ä=d\1eûÿ±÷íÑv\15e\9e÷,q87¹!H\83à4£\10P\12\12°Þ\ fyttÂ\88\ eÆ\ 4!äI¢\ 4\89\92\10t1=Y\88KÖèj\10\19Û\85Kz\86Õf\rA\90Ç2=\8d B;\99\91Ql\83\ 4        \10#\rá\92`x\ 6\14\9a8Î÷ûªv\9dsï9÷þÑ\8a\13\16Gswí]»ê«ª}v\9dï÷ý>$E¤QAÿ\f\89\88Aa^<nJ¯\1c\10\0Dâw\8fµ\10p\86\82æ"8ÙàæÓàE\96f¤¯Eem'ö&ë9*º#u\95\ 6\9eæ_Ìs\eº\84\ 4¹\f§"½a\93#Òp¤\ 6­,\88$\9aT\fùGê\90õô'ô\19\11§ \14\8b$Ò¬\ 2»\9c\15ë\94G\80@°Ú8º\14Ñ;\b´ÐM.>Í:\80ôzkðºÖh×iH<R\9fåÀ\88\1c\95MÞy\8b°\ 5¾¥·²hæAú\8fn\16l\8a¥-9ó,f\92±e­\a\87LtZ7ë(h\84¨D\f ¥%Coè4}pså¨wôFDCª\91j\91Þr Y\89Ç\91\81ÑiÖa&[(-j¬z<\9b Àè\1dG¸À\124HÔF\9a\83\10ͤ¥mAÒ§{\89@o)\86W\8fÅÂ\8e\10&äñà°\ 4\r¹Éàè?#S[\ 4=XðP       ¼ð%\ 6Dq<\b-(D\ 1\91A\fÍ\rzv@ó\1cs4"@\84\96+xù1dUIzÒñ\13\12¡\ 20\vj¦'\91B`\80t\88\95Âk:BG°\82i\18\9b\98\v<\aèU\ eë§hc6±0T-4\ 3YÃqt¼Ø\98ñ+cÄì(g8÷$^Õ<\1e\9fx\18jhØ\9b\91ûÿ\8b\ e9nÒèï\93\ 3[\ 3E\ 3þsÓ\1f\9f\9dÞ\85\1d\1d¿£ä[¿â\1d«çð>\93îØÎñÏiÿ?ï´´Ï\84\9eÿ\8c\89Í;çÑ\1f\9föJÚgIÝÎqòÈ/0å¾\r\vÒ\9e\a\aLlÞÝGê\v|yBÿ}þæÉ\9dý¹¹?íó\ 5êç÷Ò^\1d\81\r¥=«?õÎ\17x?¯°¯>´Äÿ¯8çøtÜjªÿ\951öù\9bJ.ô\91ú\ 2§\97}þH\1d\813øü\85Ø\9f¿vã\aØn´ñh·\86&7í\19©#0TÞÇÏ{Tß\92ìIÏ\97\81\0ôù¢á\9f\1c\97÷í&í7®/v:ó\94¼ß§        ã»öí\ç¶y×§=½È{Â\81.\8d\81÷­MeM\9cö\96ÉÍo\11½ù\15\9e/vX~ÿ'¦å²\1c\87¾\9eï\87ü\ 3\17=­D*s*Õ¹»èH¼vÊÜGr\99ɱØãè\ fl\9d\9e>í]ûï¿\8fâûÝF\9f\93ÂÂmYc ïy\8fäþõ×\1f¸|\9c½yg¯5ÿÖ\8f§¶\ 4\91÷Z\a\94ßOzu\ 46L\18{o~e\99o\9f¼éÂ\87r^\ 6\91Ê6\1f4ö>zïAcï\95_)sâÒS.|0ïkóo\16í2\97zãúO.k±7®\7fY\99ç\97\1e·$õ\81\1eb¶kOß\7fÏ{À¤±÷µ[K\1e\8fÞø|3aìýé\9a      Íï w¿ý/\87SY\1a÷\8a\8a\8a\8a\8aßËo\fýö\v\92\1f\e\19za\86Ú7½ô§|òMNõ¾{ÿü\9bEz¯µiO:j\ fó»þFAíå\98Ø~qδíF .íªètÚ\94\99\98âöGç6\1f\1d[NÛjÚÉ9\ e\82ºE¯ÛØßÓ\9b\1fµ\1dÂï\90@ ­3õ\19²ô\12òð´/¡^Ñ\8eÐÓ^XBÛ\1fÁþ\b÷Fx¯6>ß\9b^O-t\r\9a}2²ÎÓþS\8c\11\8f>Ö>\ 1²ït¶³´Ms]ûº\9exý?°Ö\83¤!\97lCê|4\82e\ 2ò^\89¶U´\ f\87\87t\80bQzd<×\b\15g\19\ 4Ú§F\8bPqÚ\ 4\1aè¿G´ÈqH´vdz¨Ð«(\10?Ýû[D?½wë£Gþ\ 5üd\13±§¥ÑD,=½öQOiïH»w¤^§Qô4·!° LÄ\80!g\ 2\r\85 F\a\9c©\15\99\8dæJò·íÃ{R¯°zñ+\16M\84ü[\85\8aX\ 2tÌ Ë\ 1u\13ò\14
++¿«Ð\f\8a\1cÈN\93ÃÐê5\10> M(Í\v:\ fÙ*È4\16ª\13ÔpK\aé±\10"æ¤Á\8fi\bKGÚ
++#¡Ô\ 1\r\12²\17M\ eG\87\10ó\8e\8c\b\ 2?\!\e\ 1mæèlh\9b\80V\15Ý\96\96
++~뢩ç\91ÕBQ?»~Óè§\87B\13\ f?\ fÑT\ eÁwýfSÖÀ(­\86?F½\91±ò\1dàgWÌ+ì>ðS\v=r+ÿ¿¢¢¢¢¢¢¢¢¢¢¢¢¢bÿ@Çÿ\7fç\86E\eG\97\1eØÚVxæ#ýü\1d\9eèȼ\0[ØWØëÏ\17cðù70\8f\1aÎÀi¯¾ýWì\9f\97\88/8¹\9c?\92?\7fDñû\8eäÏo*¾éi¿=\9ayïH\bÙnÝÌ~Æ\998ÿû\7f~\1fûáe¤ú\87J\1cÁ\e\9f<âGÉ?/l;ç\99\87\7fxèì7ý#÷×\ 6
++ÅïØë\87Oþôþzþ;\v\87¼WÏ?q\1fÀM\98\92t\1dU\9a\17sûàËüê»\96&N7XX\vmñ\9döúÚ÷\16\9fr/ï~}W\1e\80/dÿ½rÉO½\83Ëæ¢Î\a÷&ÿ¶6\99\93\7fsño/òËv¥2\9bÛy\ 6߯¿o\7fÃäÎýFç\1d\98_b\0z}û'\17\15Ͼù»\99ç¯SßWðuýc\0¶ÁÌ\ 3çÒç×\e/x&qL|æ\82¯çvöÏ;peÉ\ 3ðÀ»æ'[{\93c\0\9bùÿág¦_\97|û:ûý×Mj®ëÍ\ 3ð|ásôúöE\89=éåݧØ\bð¨Í\ 1\8b\13o\9b\f\93Êæ\f6¶>{\97Þ\909\ 1*\8dCâ5ôÏ\11pDá\ 4,ZÛp  \82Ì1\15¥ìö\81\v\1eH|\81àR;M©ókw/Ou\1aë3\9f½ð\82zùó[ÛMY/\97àú      \9d²ÓoÉüù\90ú ¸Îþ|\81­e.-\1c>íÖÌ\91ÏÜ\93{ÚÍü|ôÖùOå²<~k¸ÎÅ\98ÛOͺ"\95Ù\1c\ 3pÇ8ù\ 3®\9cÔ¹ßÍÇä2\9fú°y\9cü\ 1»'5m¹öîY»òsÎ'{^Ý\95\93\94\1c»\94׿óÅÖ\95»PQ16\98ûËy¸C`~£sÈ?\1eá\90ö¬þÜáª:v¿\82ÆìèÁ%b\10à\95
++°ß\152P#\8f´\85SÍ"3ºqA\ 5¸¦<\94Ó­\16ô
++!%¼\9f\8aþV hÓ±À<Ôä\1f\82ß\1aK\98¾µmH>¦×#ÏvòWâ6ô\8c-yÔÇà«÷ñ{Q;á6\ 5Q\17\8ck\90Ë\ 5ȵR¥dÚÖ«ä½õ\11\1eHd6ÒÖ
++娱àg;\85óñ\17\f40¦¯ðõðÓ\ e¼\8eºã£¹Ìð\80\87\86\130FÜÁïÊ;@t@\1aÏ\88\ 6Ù\1eè\ 5& ¯}\10p\15\1d\19\80¦78\0484·à\ 5´\10B\87\90¿æY\8e9\ f/²@BuO\83\80\89ø:û®_¯ø\ 3\10¿÷©Ü\b4åA-4 ú#è\ 1^oz\16ÐÌ¢A¦     I]s4|\10Ø7ôÀ\88\880\80p<Æ\b\89îi\96\83á%ê$&\1dO|PBhä\ 2xî0\ 4­\88Ð\9dg çåèÇÓ \93\aE\86
++\98\82
++ì
++ï¼ É!اLs     Í¢eJK\90\9aA\8d2BÓõìEfýw²\rY   <\11\9a\ 1Ô×ü|è\97\ 3Äxæc4¹GÈ\8e¡É\87 ÁX/ñ\0\91C&è%Î\81\81ÞÄ=\8cæ\93ì+ñ3\rïHâVôÀC\82\ 5<\9b©\12ê"\16!?½é\e\86l\8f`\13\15\96\vUMOnxÞé\8aÀÏ\19^O\8eF\11K\10¬\aD]à\85]ѳ\8c¾44^â\105\12\1f8lF\82\83à\1a\83H\ 5\9a)\1aË\12ßQ4$ôÍfQS´HW@S
++_=B\97ø\13\vÓÓ\ 32`Ñ\93!D~n\19L<Í+ÆûÎs³\8b#Ôä\98\19Á£ªþÿ\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a?}Ôý\7fEEEEEEEEEEEEEÅþ\80\ eÿÿ\r\17\9f¼`ti»µ\9b¹Êß Ï\94_M?=óÞM»õ|áø\8eÔùû\ÑS_½æÄ\17òqÝní(ç\8fäÿï`~.\ 2\ f¦¾°ù×Ìÿ\17Þuë\b\8eÔóÛ8\86nß@9~ê\14\17`\1dâ\ e^*÷\1d\19
++\1f\1f\1d/0ØÚÐnêyùê\8f&^º°\99¯¿\93Ëúkè//ñ\ 4½\1aú÷\16-·^-¾\8dE+~®\\99ôçeÒ¤\1dl}§\8b¯¿êëI\8bOÉTçõ%þâü-ÛïNe.ë ÝVtº{ùú\as;ûóõW\16\eöêòïèhýß2?Å1\18\99¹Ò7\97±Z9<ãë\99˯»ùÞ¸xõ\13«'g\9d¾¬ë~G»\99+½Úûg\8c£Å\97b:ÀÛ>ë_Íy*kñe{^Û¥··ãï\13_ßÛı¾n¨\19ó\v\9fÙ~e*kî·~\1c}ýËx\1cfÒç:sî#YÃÏ'»\Ì}\806ÞCw®|4ñü­M}¿ºèØ-xö¤S³N~Î\1fpIÑâ»lò\85?Ëù0Bw|\a\1a»äñ\ f~©ÑþKý»\8d¯û }öܸlg.Ëú~\97\15NþÒá\19I\v_\99<\ e\97\15m¼Ã\8f» qù!ÌËe\9b\8a\8e|¯öþ=ÜwÄ[\9c\ 5\89#oD£Ë_bM\1eø«\85Ïe}ý\1cß±©pÝ{ã\ 3\95µÒ«Cxy»\99×½Úû_.kvéîCÞ\90ÊB\9e\83×\95¸ ß\ eÍ\eÎeÙ.CÜ\87þ\9aýóËóêÓ·\9fûD£Ù\9fÛÒÑ\98ìÑ6¼¸+\8eáÇ)>À«¬[yíÄNÙ´Ôw¯uºnsÑÞ\øàáw¦x\84¤}LÏ        ¶Ù\8dô\99³ý{·§2\9fu+7\97¾÷Æ\1c\RbFªö~ž\f\ 5=°,Ȳ\865ÞúiÂ#<É\831\e¥B¸aæ\9f\82\1c\1dB£¡=\86Æ|?þ{·¶yù»\ f\ f­)NÕË  v\rÞ»\93à\15Ë\b:3Õ§\1d-p\vö2\19C)\ 1r9â\17 ®\ 6\92xà ¥\7f
++å\ 2}\8b#\90\80\eA¯h /\87h\ô ª\eú¢s\9e¾y\85\ 1\97\99Ì\1d\10úÀÂÚà*;2\7f\14`\80Kð`AbWÔVj\ 28ÎTf-è»\96.\b\83h\98\80ú\98\8fÁ¹Ä\ f\ 2úÝè\86\81W-!\14\bY0\93b\1es\9b©\13\16\9cTj*sq©%`\ 6\93I\15â\11\92\ el\93\e\0\b\81kÆÍHh\8e\91ý5ìjéuÑPÃÁ\ 2§>)\89H\ 2\ 5\82¿¦ç¸\84P-D³<²SAS\eßB ÕR×t\8a\97 \1e;ô8Ͻ×Gk.å2\18­\95>\9e>b\1aÛ\0\1e´\13\90ö\v\1d-¯ÑZ\80cåBh4\ e\ 2Â_\1c}\ f     ê?Ôä\8dÂ\1cðÈ®¤\11\17AÃì 6\1f\82\ f\b\90@ÄT\87¹i~\80¬\ fñ>\ 1õz,VZ\19\ eôwgÈ$Ð<\ 4µ\9cº\18\11ßÂ\13U\18\1a0\e¬dñ3\89Ú\10\15ÃÆ\92\1c?\10ðBA\8d@\12!\88Â٢˨@ ×àOKeB\18\18\97\ 3\9du"©Nz§s\86ììE\9eGôõklÖu\14\98       \ 6\ 1\9e!J\17#\ 2\1c\98ØM\v\10f¦7\18ÏÒ\86\90s£i\a©z<whjÒ·*f\84\88Þ:*\17\8eÎ\8d\1cõ@¶#\13`º!*\84º
++n=\99\19!F\b\13öÐs£#\11§ÑêG\84\ 3\r\ 2=6èY\81\84^\9e\e\1c\116átæúÃ8´Þºó\ e\90u<çÜ¡I\81
++%ç\ 5-\1a\ 3±@\9aÌô<4\98¬\86V¹f1J\8e;@¡ÁÕ\18\11\88Ö!ÌBcÔøy\19\1d7\84º\10\84\ 6\90¬\11\ 4T\ 51\824f\ e¤tAO7Å\91\15)|\83&7\82\9dh\9c\r-s2ª`ù;\84Bàá\ 2\11BKKÛQÝMþ\83±r? \12\0K\ e\11\1dÒ¨<v\1e©\13D\80¸d>Ï"ü!p\f\0uW\83kï¡,Ií¥'\9fãð\v\8dÙA\9d§!\10¼²hâ Á\89¥o\ 5\f\15\9e\9b
++r\82\ 2ó\ 5+\ 1q-4?\ 5Ù\83¶!!\85Fi\ ejAd\0¢¹è»\ 6ÛD\8b\f+\90Ó\87\12:ü±ê\ 5Vÿ\7fEEEEEEEEEEEEEÅ\9f>êþ¿¢¢¢¢¢¢¢¢¢¢¢¢¢b\7f@\87ÿÿã\8f\9eøõÑ¥\a¶Ö3·\14¤ÕµSßý1æÉ\a5Ðn\1dQø¯#ùÿI\9fÿ\1aúÜû³#_LÜWgÚ9·zâÿ\1füaæ¨Fèü\1fY8Ä#õÿ×\15]ò¡÷\1eöCæó\v\11Ú­£¸\1eð×\8fþÍìY|\*:\7f/sg×Òç\8cG\8eúç\94\17\0Çï(\1cÞ{\9f\9dòjÒùw¢á\82÷×ì?´hö÷òü\8f\1dG³ÿê\92³à¢á\9f\1c\97c\0LæïNì\94\rê¬ç\9fy÷¯\94¾.Ñ\8b\12÷\úÌg¿d\9c\18\80½\13:eï[\9bÊ\1aî2\ fÙ\18zþ·ñýþ\ 2}øæÒ]\99Ë\9fs¯¯\19lÚò½õK7g.\7fæ _=Ô\8cU¯fÿå|Ý\17èsÁ/?ÿÍÄå\17ùºÅÜNÄ8|ëÍç?\96øú:\97}®hï_rÛ¹Ã\99¯\1fR[¾\r7ôòî·LjÚÒ«¯?«ä¤\7fõ¨s\9eÊúú&ñà/.1\0½\9cükË\ïåÝ\9fÅ×\81çÿ¡;VÝ\9fʬL×=_ÆoÁ±+·'þ¼Ìsb`\1c\1a\9egý¹õ{»ôõwÞ\90Ê´Mu.\1fê\94mJ<\7fcr\9e\83\r%\86£\97\93¿¢Äpôòî\a¸-ýy÷C%\86\8e«NÎÜú\9c#`÷ÄÆ./Þþ±T§ó\99w?c\1c\96b\97^íý\1dECÿ¬)g¦ë¢\96y=\94çÈìác3\ f^fþüK%Æ¡jèWTTì\8bh¸ÝÒipøCÔAjï 3n\fÓ§AÙTAG\8f\1c×V{ú~B\8c\0r\b@0\1e¬Ó\80(\81\10¡å\1d,ÒÎÓ\7f\90\89çÔ\ 6\16<_Å1q §G(ý#\8c F\rÅwpoñ²ãD\bT\1fÝ\1e\99W\v"3]áÆÊ90\ 6§_Z0|Aöe\92\17©}8Ïy£\ 1>\1ew\9e¾ø\1d¢P ãNC"¡ãOöu\92¾Á \97\1e¨¿AP\a\ 4äÀµÒ°½Q\ 6\19!\90õ\1eÒÝ4*Ñ\91mÀÃ\87ä{P\887¤6\19\10»\95òPg\170\ \97gd¤0\ e\8aé\11Âãôý+A]&ëõ\8d¯ \13h\98\15ñ\r°kìÊ\970Vn\bÉ\99  hÆP\8f\9as_\87Ü\10d\v§´SÆ\89..\7f\13\8bÐËñ¦\815ý4ã÷×\\0¿k\Ð\b\8dw¶/Èê\ 6Q\1e4z\8e\1e\e\8aú A\19§~*\bÝc!ÒS\88Î2dä@\13\15¤qzïIJ\8fÈ\11AÆ¡ûJNb\86H\ 2\9a\96\1aôxÉ:ý´¤\1d=­"ÙÅ\ 4®Ë"Z\ 1Ñ-\1aáT"¯Ü(,²\17Ð\82ÅÀÒ\rTgîj\91r\15tÅ?`N ÷\9esºhOÏ6Z\bÔ\15¨ñ\v$÷ ÛÒ¬6\98Ä
++á)È»Â\99+\10é$\fâ\8aÈ\ 4i\rÐ\ 3\86±q¬ø³®X1Ì\ 4\8f¸\ 2Φ`\10EE\9d\8c4\0\92n\1a±ú\14OJ\8fåíè¾\ eOtÚàs\b­\1e\89\9c\v\9c-\80&Kì\8aíÙ\aⶪÿ¿¢¢¢¢¢¢¢¢¢¢¢¢¢b\7f@Çÿ\7fè[¿þ\1fF\97¶s®ò^=¿W\8a\8fü³ïÿ×?H\9aSÆ·[Ç\96¼î#ýù§\17½º\19ÿû\8dì\97tA\98vëäâs=á\85C^cÿ¼\96ª\9ds\8fÃÏwü\9es\1fæã^ÇÁÖ¡¥þ^}¾eEÃíµÛ\96>\90ýö¹,ù\rûûíw\14ßç\8a\87/\8dÙ7/\92\8fýô¢cÖë·_Áeð%\7fd×%Ç$\1f»È9É\17\97ëV\ f?71\95\85ì\87]Æ6íï\7f\9f\9b½Zz§\97\9cò½þ÷Ó¹NøS·\7fkîÓ©ÌÙìïç²þþ÷˸\9d_¡ÏÜSW¥¶x\9fsÃ/\9eÜÔÙ«³·¸\8cO¯ÎÞ2.ë¯Q·³K£nù\94¬C\17»}É\18¿½\13Vý"\95Å|ÝK\85DZeãü'Fúµç\14½¼ù;Nx[òO\v\9dôÝ®/~û^ÿô¬®\9cò³ïÊZl"Í\973ºò¿ßtM*\8b>õ}¨h¸Íß~VS\96Çï¨Â\91ØzøÂÝÙw\9dýö¡Ølöð½7e\r·Ü\96ÄÉø\12ʶÝuC£ïV}×\15\15\15\15\15\15\15ÿR\14®\ 3½/²ÏÓjE¯Óеt\ 1\8aaI[/B\ 5O\80w\ 1\aù@Ö.\84\80]PM^÷±´\1aáû´ÒhpJ¢0Ò\83\90ð{ñ×\8eä,ì«\9c\92bcï\852B¨Æ\9f\9dó®Sï¡!(£èÒq´\ e>vË$\ 1jR\14 \ 1@$Ôê\10EÄ0¸Hí·ÊAKÔ±(\1csQ`9P\1c¨\1d
++Ã`\15\94\15éoÇ
++~Ñ;P~ f\18 \95é c
++\91A\1a\16¥\ 4¨%Þ;ºO$»(\b :Ð8D诵:\8a\aÔ|È\ÐÔtÜ?2\15M\1fM;\19é»Îû}ëubì%t\15!«(YI\96\f\13!åj!Í\19Y\rÖ@ê/*\9a$ÑÒm<8\a\18/\85\r!mb´§YI3Éyo<Æ\85î­Á\16±°(\94/cbE\ 4X\15g³X$\88+4wAÕ\8aÊ»Æ>ý¸+\ 3ãè5þ¡ù$\11\83âÀÔ\90el¨»ÖTÿ\7fEEEEEEEEEEEEEÅþ\80\8eÿ\7fñ\15ëÿçèÒvëÊâ\e\9fú\83éç¤ümðç\7f¹Ä<\9f1ó-Éÿ/\95j·6\8fÁ\vØTÎÿæ}où>ó\ 2\94ÕíÖü\92»j×\9e){ø¸Fþ?ÁõÌ£ÏÚáé/óñh\90\17p\f]\80½|\1c±¿\8f/zÛ\9e\94ÏÏ\9b\86w\0\7fì{Î;\91\8f#±Å`kké×y\8fê[r^C\95|þSK\1fzóõí,<\86^®À%]ñÿ£¹\ 2÷\95ë\96ßÿ\89i\99+\10\92_\7ff\89eÿÄ\91«\93\9f]§\\17\83­ç¹-ð_¿vÊÜGr¾¾\9cgljÉ\83×ëó_Îeýãñ7\96þ\89õ\vïOe4Jé~|Ý|ú\wÕ¼\9f§²è\93Oürîáô¹ðÉãNÍ|\80&ÿÚäf\1c×ü§\ 5¿ÌññÙ.kÊØ|ú»+S¬¾r!]÷X\19ÏÛ\a.x ùü\9bØò\8b\8b={cà×\97:¿v÷òT§±>õ/iM\fñu»ÿkÎ÷\96s#\9e5©±ç9\9f½èç©,Èd³\9bË\|ù+K\9eL~}²(\97}\87ëì\9f\7fm÷81é\1d-\89\87¯¿ô\17©LÛÔ÷\ 3
++\9fã»W½\7f\89é\12\8f`ΤN\9d\17]\93Ê"ëSTTTTTTTTT¼þ\18\8fß\80l\8fÊ\1aÛ\95ÓÑ*çèµÙê\18´ÞÇ4>\94¤¦S\9b\ 5Ó\ 6\10.î=t\11\8c\vto&W\98\18¹í\92£Öá\95\16ð\89\aÚËÐ\v\eND\v5\ 1/àz\ e\8as+Â+\8dl\80\ 3M>F\vÚ¯\8f\81\9déÍñÂ\1dp\81ó\86\ 6c\9cBÆUä¹sΠ    ¾\96ö8]Z\0\98ê\fÆ\82µ@[;\vÁ\81F'\ 2z\ 2ìÓ6dxïlÐÖ5¼\14\e\83\1dÃ\aN;Ù¤­!A\ 5¡&4\1c\17\f\ 1ç\1ed\ 6\85S]ù%¡\85\ 11\0ã¤D\1e\90Ø\8fÙ\b\ 2®|Ì\rè\7fx/<Ëp8Ǭ\17è|8Oû        $ÑD¶Ad D
++î\90ó\1c\ 6\e\ 5\ f"´BrÛ\85\114ÔÂ:G\97\a\1f\8a.\86ò~\8c\·ì×\87}\15\94A¬1 \96\14h[Ì´\1fjKðÕÿ_QQQQQQQQQQQQQñ§\8fºÿ¯¨¨¨¨¨¨¨¨¨¨¨¨¨Ø\1fÐáÿÿô\9eInti»µa\f\1eþºÂ]þüg\8e\7f\89yõÒ\98ÁÖîÂçîÍ\9d\97ò\9dAÃíá[Î{.å«ÓYÃmkáÇ\9f¿eûÝ©ÌeÎö½\85Ã\7fÇ·.Ú\99xîÁ%îüw¸\fâpç?¶êÆÌeÏ÷{\89Ëúçl»¾ð²\17­½ð¡T\16²î]âe/¦Ïܧf]\91xàVdí¾Âs?{í\19O§ø\ 6ÏÚ(\15\15\15\15\15\15\15\15\15\15\15\15\15¯\ fÀe×\10bÔ:qå!£\17D£¿§¼WJ\ 6\11\8cL±Ô]yýFç§\84\96£\ 1çß«à¬\rÈkH59äèó.\8a\18C@rSe=\ 20b\84L ´ø´ÑZ\1a\17\95\93Ѱþ\1em"=ÝQG\ 4M\80\87\1f\91\9a\11\995Ys\92.hô÷ ì¨pGÈ1z\1d\11\10Íí\8e\8aÊ\8cmb\0\fÕ÷zÅ\1dTÿ\7fEEEEEEEEEEEEEÅþ\80\8eÿÿ­ÿãó¯\8c.=°5\87\7f\1f\80_þê\83Í\a³\9e\1f\1d?«h¬­\9dúî\8f±Þ^P\ 3íì\8f\87\89{>ùî¤\81§l£ÿw\r}îýÙ\91/²OÝ;Ón­á|i\eé3õ\85Í¿f~\81\80þßK|_p\ 5V\9cs<ç\1d´Vûvë\9eRÿ\8c=\7f}>\1f\ fVµ[w\94¼r'ìùKöõ;«d»5ÄÇ᯿oÉÔ\97S;]l·V\96\\81o|ò\88\1fq~Á(¨\9dÛÊ}ï}vÊ«é¸\13\83­å%ç[¯^àr¾¦\7f\9b'5×õò\1a\8e-¶íÕ\ 4\WÚwä±\8b~\915\ 1uºnoW\8eÀãoÍù\ 3s¾»ï\94\1czß[¿tsÎ\11\98uÿ.æëúk\ 2.+:\83â\8bç6º\7f*çú+\9ay\9f:zñ\ 39\7f H\9ayC<\1e·Ñ礰p[*s*õ!pÿ \99wá3Û¯L9\ 2\83Mí< ðD\96¼caê\1f\92d$»p\1fþ\v}ÎÞ==ñ/DÔI\83ð²bÏù÷/\9aÎe\92Àe[&5cm\ eX\9cr\ 4RçS[6\14=½s\87×þE*³.ç\86,¶þäM\r\17\84S¡ Î ÍuK\87\1c\81Êä|\8c÷r;¯ Ï\997]ðXÒ \141Õ¹©ÌÇÅÃ\9bÒuÆ\98\9cçpR3Çzs\19^;N.CSÆá°iË\7f\9aÊt.\9bÁeÐCü\9b°"é!Zë\13×å\9eb³E\ fý\9dLeÞ¥ñ[_ì²døÇǤu©²¾ä¬bÏ^=Ä9e=,|ðð;sîĬyxF±Yo\9eí]eU×°¢¢¢b_ÆXºZH@¥¥7ô\1adB(úR\865\8f\ 5\92\8bEþ.üÿ\90ïªäßÒ\81\8e\ 6\a%,ÈSC²\8dûã ¦\ 6Ñã\10\91MÌÄÔþ <\1d¥\17Gï¤Vð(6í\87²Y@j18Ú\943.Ò\v\ 2\92¹Q\1dô~è¼\13F!'\1e\7f\0\ e*\14Ç¢\86º\9a±øNuÚ\8b\18¨\8b.Àn\9e\9aÞ^´\8bHFgèÅ\94\8c  Ø\16M\84\7fR#cX¤zèî\91\93j¼~\94\9ccT§kþMCC-\v¸»\14tS\87\97\18      Ã\87Híõ4XÚÐ\v\98#\ 3Sk1\ e\12Ùö\94Ö\86FËÂÎ\8eZ\e\85\89t.½¤ª@\17(z¯×t>5ÍCÓ-Ð\98Yº PÅ\9c\0\ f\1d\87Ê\9bs:åg3ô\8eç\8c\8b<Wúi\91\91ytÐH«çµ\16ôBI\r¤ªÐ\1e\8f7V\r}9º%u*ê\10<\r¸ \81¦\ e\91ëNÀÁKf²ð\80J$\11ô\82\ 68:L#\9a*\12yýhܼeÁ=\19èzEí¤©D/#Ô¿`©ÿN\90Y\9cã\f\84HE\17¨ý0!^ä¨\11xItt\85e?1uÚ$ß-´äd\fÆy3\9e.\9dÓô\82æ­À¬fß.Õ\9c´òاK\93WÀA+\1c\f\9fç\1a\19&öÉ#8\96O["\8b#uÄ£û\8dö\1e¦"æ\1f5\10-kr7\8e\95÷\11«\98õî"\96\ 3\8d\93¡i\16\fV\19V*\19\9cV~d£ÓÄ0\9e&\ 32íQÕ´ºè<äÌ£Å@#As\96,H\ai¹Ñz¡>Ð\90º\0\13"\1d¡\81¢!­b%\1cÄ\ 1i\99Ѭ¢ñA¦C\ 1\85\8a6d/\1d¡i\17\12wÐHÔôä )C3\9bþPÆÉî\9c\8b\ 2óÑÃëMæàü\88p«c\84\ 6\vjR\bdM¬\vê\f­+º\97\92\ 5à3G
++A\1a\84èè\95\99:àñH¡\85\8aÞSwiq\aEÖÅt¥\8a\14=Sh\9d\eÙþ\90yQ($T¤\eÐBF{\90\a\90nc¡Ñ\aî\80\82è"\9e\98\16dõÿWTTTTTTTTTTTTTì\17èøÿÿlÞ\ 1³F\97\ e\1e+1û\vþvåãÉ\7f­²\8fó\15.\83Ïñ3\e\97\f§2+ª/¯¢¢¢¢¢¢¢¢¢¢¢¢¢â\ f\væ\98x\17e\b::m<\88â¢á\99¨êÿ¯¨¨¨¨¨¨¨¨¨¨¨¨¨Ø/Ðñÿ\7fñ\8d\1f¿dti»5Ä>þ\ 5ô9þ¾\r\1fâx]cm»5µ+\ eßp¼½±B·[\86\8fÿgúL\7fé½\1c\8críÖ\16>\8e á\13^8ä5\8e«×R5Zû\88½þoÇ\9cûÓ\14;¯}\8a?\9eÁ×\80_ðÕw-Mü\ 2¨\1erÙó\\86Øò\8fìºä\98\1c;/R¼ó½å^«\9fX=\99ˬË\9c\85\15|¿¯Ðgî©«v¥xu\9fuÿ\8f-}ê\8dÙ~¬ä\12xñö\8fq^\ 3å<Ç4WTTTTTTTTTTTü© +Î>z!S¼=í§\82\87½`M\ 1HI¨¨¼Ó\90\9f\87®½\8cÆ*-]\90´\9fSØb)\154]g5Bîµ\fJ{g¬\8e\8fÞ©HûDi\9c\12Á\e\8a\18\14\ 4F4Âúi¯h á!èÖÞh\11 FÁÚ RŤÝ\ 1!\bÈ}AoB
++úO;Ë~î \95BÔ|ô\96Û®\ 3«\15\b-\8c\8fY\8bß
++è8h«\85R^;ÄÙC\1f\84êSPt0Ú:  =-ª\fÚ\18\90\8b°\96zHÿB°¿\17\10\17\89\962D\ 1=\12j\ f\14%d\93\92-¨ÃÜè(\r¤C\84öÔG«é
++ô\r\19\ 1¢¢J\8dÐÊ9Mÿf-\ 3§¨QT³¥\8e\98Ìá\9cÔÐõ'\v\ 52\1eÂý\8d·>\98(µ£fÒ1C×ÐH\bH\13xȱØ\18è\1eÂ"í\81\90,pVýÿ\15\15\15\15\15\15\15\15\15\15\15\15\15\15û\ 3:þÿù«\7fóÅÑ¥í¬\8d\9eôüç\9d\96tïµl·æOì\1c?tYÒo\8fºÝj³\9f\1c\17M{õí¿b^\80\94¾Ý
++Ecý\9b÷½åû|\Y:ÿt>\1f\1aã»öLÙÃÇ5ôÿ\97\8dÁ/8\98ï\vÝñ)?ü£鸠 íÖó\85G0ôÞÃ~Èy\ 1\84 ã3'vêéÎ\17°¢Ô?2_ÀÖÂ9x|ÑÛ¸=Þ{Ón\9dÌõ\83o0í·G/IÇ#\1d\9f:©éïû^}'ç)\bBÅvÖF@ýÇïYÇ|\81`,ÙaKiçȼ\ 3+\8bÝÞsÞ\89|ßh\94\1fl\1dQ\8e¿|õG\9fHö·&q\196\17\rýÅ\7f?ÿÁTæcâN,+y\0zy\15\eJß/\1a\1eÔ\99\92\1eüm¥Ý«\87W}=ë=d}ýå\93:e«ïLe&&îÄ\1d]×½om*\8b!Õ¹\82Û2\93>kNÊù\ 3´\11IC\7fùA\9dë\9e\9b\98ÊBÖ¿\99Ë\ e§ÏöoÍ}:å2p6Õ\99òF¬£Ïí'-Hý³Æ%\8dùï\14Í\8aKO]þËÌÿÈmÙTl&Ö/¼?å9@F\v\94Måë\ e¥Ï\85O\1ewjâ\86D\9d\1cUæï]·æ>\ 4é\92].;¨\99\93«6\9fó\8dT¦bºß¬\89ͼéÍ\81°mrsÝG·|ò]i\r±\942\95\1d1ÔØì:sî#©ÌùTg\98ØÌÑ×nÌZÿ\90Êå²³Ê|üÐågç2/S\9d\eøº\95ôYºãß\1e\90ó#dÎÌÌIM;\17<{Ò©9?\82Je\8bË\1aêÍ\9d0³Ø³7wÂcel{s'\1c:Ô)[>\85Ë´\8aéºûº®;#µEÛ\9c\17c\a\97½\87>g=³ø¿ç\9c\vy~®á>ôÏǰ~\1cnÏ@Yó_»{y²\19­ÕÌ      *ã·t÷!oH¹\13B\9e\13+J®\86E;®:9\97¹Tç\9c²\1e\96\f¯üFâ\v\89\98ú°\82û\ e.Ñ9\9f½èç©,È4¶\9dÜ\1e\v\87O»5ç\Èc\94r®,¦Ïܧf¥¼\18\81\1e\8a\¶®ð¡>ðø·oÍ9\17òüL\-¬\87\9eµ+\95\19\9fÚ¹±Üoöð,\1e\a(÷¦²ùCÍ\ú7\83\1fØ\91ʼNíl\97Ü\10g¯=ãé\94\17ƳÎpEEEÅ\1f#à;\14\ 2\19\85\T&Ä¢§\ euq\ 1¿\9d\8a\10wçó¢ëä\19è\9f\v¡Û·\bñn\96¶§\93é\9b\;ú&¤o5z{Õ\92\15½\ 3ÝT\1aH°#\83\12=h\95P\1e\82æ\8e}\9a\97µ¤úm\bÈR@ÿ\8bª\94\80{0yú\94EF\ 4) àn%²\18x©á(ÔÑ"\9d¹\827\91¾1\1cÝÈBjÝ\eªÝé\10\94×Ð\WPòÏíö\ 1\92ùÐ!7pIJäi\90¬jn\f\12\ 2\bz\13\83ȸ¤f\b2J\bHtÎòú\169        4´Ì¥÷A'\e"!9YÕê\18´æ¼æA[M\9b\ 6úÞ\ fd\aEõ9ªËÂ¥*¬w18²\rB\97a}ëé\eR\92\ 5¢ÑÖHç#|¬h\1e:B\16\84\17\1ai\f\90==jÖC·\126¦÷k\11 \f\8f<íȯ\ 5ÝuäB·\18ä\bqö8^\9evj5û\8d\ 3ª§:rN\ 3I¯í\92ÿ_Áp\ enn\89\17s\9e\ f8\84®\f\94¹`\91ñAÐ(ìkù\1aà¡æyJ#Hvìø«c¤¹C÷O\7fÃêH¦@#@\8dâÜ\aÙ>)\97\ 1î¥à\85\8eT\rû±\a\83|.\f/\9b2ZLÞÑ8i\8cp\93kÃz\1a\89(¡ÿ\1f¤\eQ\87
++4\81hP¡c\8f\1e    =xlh¢6çÐ\94Çü¢¹§Ê}á\ 2Çû\9e§\834ÌNs\1e\ eZ³"-
++j\92ö
++É\ 1¨Ø`ì\1c²GXËÇ\13¿À\80\9b@FñôÿÎ9^\93Þ I\89Æî)x?ÐYót\16¤û=µ\98\86\80®UX\80\18s\9aØ\ 29\ 1\90\1d<DüÁ\80À3@`Úi\9e§\ eÙ\e°\9aa\192<MK°-FÙ\93\1e\15\ 69\16¼4´\8eTÚttå\99à\"Þ\19\9aãÎ56×tû¦\8eêÿ¯¨¨¨¨¨¨¨¨¨¨¨¨¨Ø\1fÐñÿOØþâ1£KÛ­ë\8b/õ'³§ÿ_öóhgÛ­vÉ\17?aîÛþ\81\8f{!ÛÙ\ fÜëç\17|übú\óÌ\9fmâã\ 1\8dì\9b:\93>Gÿfö,öÏKåÛÙ÷Ë~ò\ f¿\95ëñQ\88\1e®\a>á)§\1dú[ö\93\v)\ 6[[Ëñ^_qâ\ 6ÀaõÀ_-|nd¾õ½ìǺ\91>s¶\7fïöäSó.\95\1dQê|ÓQ+\93?1ªìûëøÐ\17\ eß|L.óÕÿUQQQQQQQQQQ±/\82sÓGCÛ\16p\ f¤U´!s´1
++ZG§\94Vð?£ÐhIE\ 6ÁëZÒQKEʳ\8f>:\a\ 6\ 6¢ÐÙom\947t²\b\11±ÿ6D\ 1O6\9dhe\80Ó\1c\bÙ\97ʪè´0ÆDºc\ 4§<J\15\fâèAtq\ eÁö\8eê¶\99\7f\90x8t1ÇðÓ&\rÚ\ 3ÒF#\f\18\12\1eÔ\0\eep&Jä¼\97\88Ì÷ \8f8Ú!º¨\83¤\e\19é\85õ\89ICe\96n\19bæ7\b\19\ 55\98\9a«\98\9f\ 2Ý\ 1a<5W8\84õ{\9b¸\ 6\91\ 1Ê\08N\16P2\b\ 1\1aL\90Î\v­\ 55ÎS³,õ\ f\82\ 2`N\84\18=È&>\v
++Xt\1fݶV\1aå\ 4\18)Þ{)ÈJÔ     Ç\86\0ï$\ 6á¤\b\ e>|o4m¦åhþ     µ\9cú
++A\85\80?\9c\1c\8f+¡¢ðÔ\1cÚÅ\ fÔøÿ\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8a\8aý\ 3\1dÿÿ)3ï:\7fti»5«øÎ\8fùÄ\8cߤØQ)Û­½E\ fÿòYoýQ\8a\r5¢É\17ÐË\17\98Qüù+\7fpØÿâx{©c»\15ÆðóÏ,1«÷>;åÕ\14'ïÄ`ë\80\12k½âáKc\8e]\179>½+\96ü\v9'\80rÉ_?¿ÜG\9f\90ã¾½ÈñÍÇ\16.ç\8eαÝ^\8bÄ\1dHqÑ·ÓgÙ\ 3ß³©ÌåØç#JÌmol·)u>tçÊGS\1c¶µ)þw%\97}\89>s\1e<3ÇasX\19âö»â\94\90¸
++Ú¦²#Küý\92áiÇq\99×9\1e÷¨\12¿ý¡]\9fh§² r[J\9còü§ßûÖÄU\109\9eú¬q8\ e/\95Xò­\87\9dÊ\9a¶$ý\ 4ôaö¶»nhâ\8d\13\94\1eÞ01Í\8dàk®\84\8a\8a\8a\8a\8a\8a\8a\8a\8a}\19M,7¼ÙZxm¤³Zg½x¨\eD\8eåWðÞBF!*xZ\95\8f&ji\ 3ý)\ 2\ 2Ë\ 5\9cÑp\9d{ªD\ 5ã\9c\97\11ÂõQ£\eá5W\ 1Áá\82%ß½\13\1a1æt\96\80\90>ÜËZ \1c\9fê\vP\85\800\ 2\vÚú\b-%|ÖÞ\ 4'\9d3t\19Äê½A,»\87zA ý
++îi\83Ê1öÔ(Iµ*\99ÿ\8e\bêwQhhB4ñÿ}4- .àFùâ\95\ eB\8b@6\80>?dð\93\7fZQS|wì¿Õ\91ºÈÞ\7f/a ²\ 6ÝSiö¼ÓeV9ÚëP\a#ÙTPsµBh{\8c\12Þ\90i£ö\1a\11üÆyê tüc\90Ú\19\89\0z2§dé\ 1Ã6"\83âlt\fÁñN\93}¬Ä\b¹FÓÀ      #¨oÔh\eÍx¾v§iè=µ\93¬J\7f\83¦À=PÆ\1aÖ,\90
++¾\7fH\0\f\8cÃ\1dЬ\13!\91ò\80ª\884®L\9fHÿv4\ 6\91*\12t\80\9aH]#C@\85\ 3\rVR\a2\8f\v\10w\0!\ 32
++"\820@ó
++S'ÐÌ\81\16\a²\13\18úÿhÁn\90\ 2ú\1dP.\0cÁÒ4\85=i ¢ÁØWÿ\7fEEEEEEEEEEEEEÅþ\80\8eÿÿÛK>íG\97¶³\7fø\eô\99ò«é§'\8dyièø\18þü\93\8b\9eô {þãÃ|Ü+Ñèü÷êÞod\1fóBú\1cÿÚ\8d\1fàx~Ö\v\98Zx\a#õðg\16\1dþ\8fìº$ûøEÖÇ\ eåÞ+\87g$íz£²Þx»h­/\7f䮡äÇ\ f.ùÇ\8fä2è\7fÿMÈzêÈõÈe\a\17ýýKî\9a÷dÒê\8e!ù¹¯\1fÇç>§K\1f`vÒ\eGt\v\97-æ²þ\9a\ 3G\15Íû^\7füuÅÿ?{øØ¬ñ-uÒê\ e¥\9dß½êý;³Æ·K}¸rRÓ÷\7f÷Ð#ïLþxa\13gâØ.ýïꫯ¨¨¨¨¨¨¨¨¨øC\80ó\ 3Ø@[+¨ô[Ù¥\9dß\8f\7f\80t\11\91ö!\bÓ·Â)a¨\Z:\80\80\98@\98¹4Ö\18\1c\ 1ÕÀF%\82²\88\8e÷::\89\1còHY\0ײ´´ûà\84@ì§§ª\95\fMÜýX¾lp\1aØ9ßèögÍùn\9eÀ\1f\93¾\0"ïÉöÑ\ 6ëCÎñà\824cå.(Ç\85\ 6\ fAF\81¤J1ó\ 5\84\132Dg$\ 4þ\99\82 \95\10d\ 3º\81¢q¤^xëY*\0\94\10C\ 6Öt\9a亨U\ 1ù<"5\8eÊ\85£s#Y\ 5Ä\0EÝ¥s\90\1c\ 2ã\86<\f^{ð*@éðà\84Ð\91\88Óh\13\e`d¤­ A\94lJ\98\886°`\85èêÿ¯¨¨¨¨¨¨¨¨¨¨¨¨¨Ø?Ðñÿßÿ\ f\17?0º´Ý\12üû\0üÃ'î\99wZòÿkÙnÍ\81+\9fó?¯^sâ\vù¸n·V´;ç\7fòÝ)>_Ùvk\aÜë\ 3\vè3å¾\r\v\92ÿÝúvk&\9fÏú\ 2g\1e÷b\8a¡\8f®Ýº\87ï\v\9fõ\89ÿgò¶ä\93\17¡Ýº¸ø¹Gê\11<v`sßwî9øÃ|<Jªÿr®¿7\1fÁòrþ\8c=\86õ\0\8c\15tü1¾ï<ú¬\1d\9eþ2\1f\8f\86ÚsGÉÿ>ôÞÃ~Èy
++\ 4·§´\7fõ§ÞÉv°J«vËLh\8eß°j:·Ó:ôw9ç\13_K\9f3\1e\9f\99\1fá\90ï`C\89µ\7fß«©\9e Tlò Ì¤ÏÔïÿù}|\F:\7fc\19\97ã÷¬{\90\8f\eÔ\9fr\8bß\86v\9eý¦\7f\84\rd\9fÅE«àø½;/äãÑ\87ÁÖ\95\85\17qÞ£ú\96ÌïP\89\e°¾ôáå«?úD*³&q\18¦\96û_4ü\93ãÒ8k\938\f3ºÊ\ 6uÖhPI§às%×úWßµt8\97ùTç=l\83¿¦Ï\¹rG*K9x\a\16Ý\87ó¶Í»\9eË\94ÈyíCÉO¿zxUâ}(\95s¯àq\86\8eÄ\82¿]ùx.Ë9á·\16­\8a\87o9ï¹T¦s^\88;&4íüÌÆ%©\9d4\ 1Óu\97\8f£3qe»\19¯5'e-   mDâ \Îm\81&Äk§Ì}$\959\93ÚyIᵬxöÍßÍù+tºßõ\83(C^û­\7fwÖ?\8dÌmq\ 4Ûl\1d}n?iÁO¹Ì\1a\974\1a®ævbB¬~bõäTærßÛ<OΥϯ7^ð\f\979o\92=\1fk7s褰p[Ö¼P©\ fs&6u\9e¿ó +Òzuy¾,\9eØØìÕw,L6\8b\97-eN||xB\9a\13Ñ©Ä\95¹îÀÆf×\99s\1fÉe>õo\16_÷Aúì¹q\19óZ\90d6õïË\13\1a{~è\8eU÷§2+\13çeey\ e-\1d~ÿ\17RYÃ͹\97ËÀ±Yl/z\96Ë´mæÄ\84f\9dï\9d°ê\17©,æûí>¨\19\873oº qs\8cÈ×=_ô>\ e\9b¶ü§éy\954V\a['OlÆvéîCÞ\90ÊBæôl+Ï¡%Ã?NyD¼Êsbþ8\1c¢Ûʺ]øàáwæ²Ì\ 5zibS6\7fûYפ²\18\93\1dØ\8c\16Ȧ2\a?ðø·om4=R[Ö\r\82»¿öïÿi¤ÞÇu¥-£ùE\15ÅW\80¬ÞÈ\9c¬#|-ÒH\10Ó\90g\9b ¡øëCð£bK\7f×\1cÜE7Ùúè­Å7q\0{Íja\ 4b\ 3}D]
++WJ¤CÖôÝ\82èK\rucn¨5\ 2I·éN*àL¸1<µÅÇ\9cÛ\9a\1e)ÁH+d\8e}Ôt­AØ%R)ÓÚù\7fì]\vÌ\9eeyî\97
++­¸\84)¸FMé ¶\8c\ 3\ 3ÂHI\fé*-X
++´\1cF\19\ 5ËAÂ\92Æà Ó\f\19\ 5M\97\91\8clD\v«PF7\8d\1c·à`ÚÄ:\ 194Òpø-r\10i\99\10ØÜuÝÏû>ÿáûû/\19¢n}nýª}\9fï}\ e÷søÞ·×}_W¯\97=Îál©\v®ú<Ó\9eÇø\9dê£35\93à\94ÆÚË.ñä)8\15nÈTDwèNÂÐ\12\95¶ñeTn³\r\81Ï3ÁE\1c\9aÌBE\83V%|\8fù¤p\a\1a\b¸\a\ 3ÄÔiì#ê-;\93\ 2O=\9by\16ifõâ\1a}D\b\ 6\97¢G'Ð\11\85\9f\93£/ÔW§¦5³/\15\86\87\1d\82S\a\17\1dU\9eñ\17ã\82\96\1cÑ(\8d»N7\9dM\89G1IL\ee\ e§\89Aòm\r\15Á1Ý\18]Ò!G\£ð9!:C$ÑzO\14Ð\ 4¢^Áù N"èÆT_<\90è\9c°¨È\83-\8aèÙÁ\85\8a?¬AÅH@-\98\1cµ\99ªã\r\9fÀ\89\89\1eî1BúÑair\12°f¢Ã$âÿÚ\ 4¯\13xK\98Wx0\bx\95\98+ì#\9fô"3T\99\1cÍ?\ 3f¼äÉ*8\9djëðÔ4Zä¥\ fYúÅqaZ"Ö ëµË\8b®9Ö\8aÜë\b«âG\91#W\86O\eºd!+<°(rc\93\8d\9b\ 2u\ 6lSìA<VzìI8Ô\8b:8¡Yo\99pl&ð\91cëi\85\8bð\1d    \9c\99¬ãAò\82Ñ\84*þQtFÉLÎ\16S¤äW\f+\84X-æÎ1QÛb\83\11\82äÞC?¹â5ó\9e\89\8e\1afg3¹Zæ\95±«rH $I]\9eËCÁ\11V\14Á3Ó²£ì-Íyç*öh ô=\13\85T     \ f¼èH\9f³\1c\ 4\9bð 
++¿ð,ÁÿêÄ>\12`d¦6:\8csD\19åB2äVÇ\86óÊS©\9c[\9e\8cèxLÂ\84`Qá\1a&\e\1d\9cK\14\83cR3ö\83¡^½Ï\14FOØÎ9á\84Â\90Ð.\86Iqv\8d\9dH¸´(³ë$lír^a\95(:\9e»\94'\ fF\8f\ ebZ=Wµeî;Æ\86e¦dj1÷¬\8eG¦×Ì«¶<ö8N\1cz\ e[\855eO\18YrÒñ\/kÎñ\9c$\8c\8aþà\1cB\87±\1e\88e³f\8fÃ\9c\93ly¤³3\1ec¥¯u&]\17\16\16±<º¹ÿq\82aí8\f\94ç5}\825\10¹É\95Å´¡»Þ\88î;Î\1eL\99\93Ý\88Þf\1eæXé\12\aÀÛñ\9dî<íuÜáClEÙר\93\96~\88d\93wäÇWB\vï-eäqNÂo\8a\11m3Ñ\1e\87\9aÀÉü¹\90tråp:Z®v.RìGô>`ô\9aG9\81iâò\9eÇ+Ṵ̀Ð2\96\ 3êsd:Ài\87s%ù\89¿yX¡Fèö9ÒÒï)¹òe=*á¦OÜk\98M%1\ e¤\aÀL\92Ö¾\8b1\80\vQ\1dêÔ\1c4Wv\f\11ßÀ\1e&_\82ÃY\15\99/Ï)Ãã\89¨\ 3à\ 4òÂ\90@\1fb\9c
++Ç\ f\8e\16üúEÆ% Ûø\ f~\80Q#V Ö\ fN\91DE\81\80ÕcùãCÒ\ 5üªqòèLt\9d\rfa`Ð<\ 5\19îÀ\9f\848\94yÏ#Û3\89\9f;Uã'\ 1[(c-ãWÞ\8a\ fp\8a3\1c!á·ÕóPão½á\89Î\93\1cÇIwÎM\17\13\82\85\8c9\12\18?ª~-xL\18ã%0\16ø¶ãjÀêÁé\8d\ 5\80Õ\1aqnÅî:¹\1e\187\80çý\86ÿ7kÖ¬Y³fÍ\9a5kÖ¬Y³fû\82\8dãÿÿ¹ñ\89_\9bZ:\1c¬¯¸÷Òã\ f}¨`;Æ\f\aoËõQ\9eÿ=õû\93ñö\83+~{ä¿î'XkHÊ\r\a\ fV<ø\993?,yþ1F\¿^ê9~ÖTÜ{\87\'v7ÿÄ\83\7f&8¶ÒjöàÆª\17pùá\97\16¬ZëT°+5\ 3v|Yå%\98·à̧\v&«íDü\8d\r®Øxá³\1d\9f@.\98׿\9a§ÿ\83»\96ÿh2&»CÊ®Ãç\82\17¯ýjÁV{¬ìú\19t\bÖ \8eFüû®÷\9f¿³Ó!èî[=·÷Ó÷\8e^U°Õè:­\81\85Õ\87£¸ë¼\1aWpÊÕ\9f\ 6*vc?RÊ\18ÃáÞ³úÙ¢Cà:\9cwI\8d\17\95ß=®\94ù®\9f\1c\8fb¤kk?ÿúþµ¥=çc\19öª\191\8a\91®¯Xç\9a±\8fÝ^x\16t*un\9bÛß÷Ú\9d\17>ZÊ¢\9b¨C0½&Â\15\8cr)l¨ã\eÅ:\97V\9fýñþKÇÊ\9a÷©q"4kÖ¬Y³fÍ\9aýÿ6ÁØm6\ 2ùw\7f7\8c¿È\ e\ f¦DxCÏ\9fßÇ\9a0\9a\84\81%¶û>\83\0J9\9e¸%\16É\ 67#?ü;÷\19
++fP\87·9ú\19´áû\98«½òÝ;Fj0K=W=\80>\96e:\\9e\91HY¸í)u`º|z2\ 2Ø\9cݬÉñ_\18\vfÝk\ 60\96¡Ä7a\94Þ\ 5eÒ¬\994í½\8ef\ 4Û\96\982\9b´\8dA1\9eÊ¡\1dfÔã»        þaü\95·\11ï4\fÒÐ\fqp\f»Qø\16#º²\89\19y\86ÿ:\8a'0\14Æ\93¯\0SLU\ 2¥rÖÂ\97 SÎ\96ÑsÖ0¢Àà}\8f}DO5Ãp¤o\96³n\19\ 2\94P\1a\9c.±$*0þ\ en\96E\81þSôÁ\18²ý³^Ô\80F5cu\18¿\9aù\ 6\ 5¼\91ä̸\99.ÒGÁ1hÓ\93Ú\0\8e5[ôVeÊB\98\98\88q.\8cèÒ14þÿfÍ\9a5kÖ¬Y³fÍ\9a5kÖl\9f±qüÿÐí\7f¶ljép°D0éQüÿÕ\8a\8d\7fôÍßú\ fÁùµ\8e³\a\8fÌ\80\8b\97üÒéó\91\97JÙôùÈ/U\8c÷ì±µó\vÞlr)\9b\9d\80Ï©/¯þr\97\93Ûå~o\962âÛ\9f¹ó¬g{îþÒ\97]5÷û©;Vý°äÈê\ eOßTc N\9d¿âÙN÷^\17Üx{½oãýK^èxöcéË\ 35ΠåÁ6kÖ¬Y³fÍ\9a5kÖ¬ÙÿÎ\84K\80$\ 3NE\92VX¼6F·×\1cù½Å       \94\18\ 1¦Ý{«k\\ 3\ 3*\9csQ3®Â\ 42|$\92á¨`<ÞiMa 0\91\846\8eñ \81È»÷r}Ö¤¸\8ew\99C\83\fd\1c'ùS|vQb¼§ò&x¼\883vA\93\9aBb!ºØ\8a\10È!\94é¬(j
++\rÿoÖ¬Y³fÍ\9a5kÖ¬Y³fÍö\r\eÇÿ¯üË\r\7f1µt8¸QxÂGyû\9d\\1fåá\1fVÞþÅß|èãåzÈÃÁÇæöõ,Ú¶é\14¹î¼\1f\ eæÕïÏÿÖuO\15\1e~\97úø\ 2âìëN[Txõ½E»·ÔÜìɼú\eæôß_ød¹\1eBF=7ÈõQ\9eüÂ#P®\9fõ\84\\8f\16ýÜ"ÜÙ\8cwØïùC¾-׳B?\1f¬|\a\ f¿2ÿÍr=¨aÇO>\95o\7fö`^mw\94\93þaic\ 5>\97üȨ\8e\a¾ãÇßZÇ÷æÜO\16¾z\e])»©òz¯}òî9e.R(1\vkçôe\17o?í¶ÂËn:îü÷Õ¸\8bs_^|S)³]\1eü\e³û²Q>÷a\8dýXsø\19\85\e\81I$R6g\ 6®÷-U³`\94Ïý\98Ê«ÿÖ­ë:>\ 2ëJ_¾.u2ÏÿûßXÿT)ó¾ð\11¼*ã;\r\9f?Òç¿Ôñ\11¨ÒÏÂ\85>=Gü8ßÂÏ\8e]ÿX\89\1dq]?\97ÌéËFy\f\ e\96¾LÏõþ\9eÊe¿zl×WJ\99õå¾]³û1\þOë\vW\81\8bj"gDás?ñ\8e.æD\15N\85Â_ÁX\95׿´æù®Ì\15_ï9 _{£±*;e½Ü\8aÏÉ?¸ïÎR\16\88¥uO\8cƱÌ\13\9fqÃ/Ûq÷W&ó¹\7f¤®¥©q,³;=\10~á¤ç^Ù¿\949_üòÜì~|ËÆ6\1dXÊRl¼   Í\9a5kö˱\9e\8b\9b      »ÞP\1a<\84)<õ\ 5Ã"(åÈ`\1emÇ?\1d\95Â3\viÈ]ÑáaÎ0ŧq5Jy\ eÿ'¹Ý§ÃÂ&ä8ÿªð\84O§IÞë¬SÊ\{\8cÊ8\99\ 2\13\9aé<Q\ fç\9d\8e\b¦¥ìº\8dQiÔC=\v\8f\ 28\8céËp6³Ã\1d\95\19"5FÐGÌb2º®\9biñÕ)\1cî5ÿ}/\18­É\94Å\88¥w]ÎxpdÆ\ fL}¦,\83c\9aô/D¯Ä1Å:*Ô\90\88\r\8bÜ=&;k«<¦\93     é\18¬c\1e\1a°´1ÝJV=Ö(Gî±Âp«Á³)\93Ü­ä\9e³\93¤Ç\ fFú@ï£O\94\ 4ÀRÐ\9e\89W\99\98\8d©§*\a3óm\8eÔ¤Ï\18\85'\11\0{\8eqy´\9dª\9eÅT½\ræì\13©¶½F\88MØ7I4A\18\9eM¸»rëçì\98PN\86\7fO)\89\80\9d\87Çÿ\1cHéOi\15\16:N\9ds:°\17¸\8a©Òäú\87¯r\10áx4\97d§`Þ°õ\92bæ9úEÕ\89À\r\86'ÄÄ\8då\98¿ÎJ°\9c0%
++k\rk:eê¬\90ô\9e\v\97Âô\ e{\10N\81û¢ïÎ\enF%ë\85ì
++8Fb¤\a­\9eÀ!ðN5qHŦ9?ÔÊÀ}.§nïãù\9eû*Q\80#§$\ûü\86*j!Zv\eÉ\ f\14Q|n§¬©­â(¥ÀU\88\11\10©»Á\1c{Cí\8e\98³\8d\96\91\ 5\ eûÅ\11Í·9\89î\17Ö\1aO2t&\17e\10l{mùmx\ 5ÓÆ\19N\81Ô\ 5ØH¡×>ù¹j­4ü¿Y³fÍ\9a5kÖ¬Y³fÍ\9a\17l\1cÿ¿\7fÁ¡gN-Ý¿Ó\17'¦÷¹ÅÏ,+\9cí\ 1×w
++FÈ?þ|áï](¼ýÉÌ\1a\ en®¸÷Q»W\9eX4ã­\1e\ eæT¾\80ÃV\1cñZÁ\99s\18v<ìÄ\1a\8fú·\83v\94úU\1a\ eÖÖë\93ã\bî©\98ígOú`á#0.\ e\aÃ\8a\9bOä#\18\ e®ß\vþÿp\8d_¸öªE{\ 4·×ÎÍ\1e,­ý\1cÕ¼¿²¶ý7\87\9dõï\9dæ},¸è8gÀ¨Îüçê}£\1a\ 3kgÐo?D0Úéu\ 4\96Π\aðjÅ}WÝqÑ\8bÅתÃ}7Ö¾Ü}G§OÏ\7f»\972Wçú¢±ç¾VÊ¢/Ü\ 6\8fÏéÛ\eÅûÓÜ~®þð\91Ë\8f.e.\95ûN­Üý£\98~áKX\89Ïq\1f]YtØùïµRvCmï3÷®/q\ 2&¤2\ 6W9&FõÛWW¼\7f\14ÓßSûyæ÷ÿQ\97µ\16C\89Kx©®\935cëo+\\11*wºè\13ʦj´ßXu\ 4NyáSÃRÖëÌÏ«ú
++£\98þ¼  ±\0\1fÿ»Rfº8\81[dÞWã³ü\87K®)e¾+ûHÝ\17£Úî\9bæô}\19Õ4¸¥\8eaÙØ\82®Lwzñã1\12OÜüé§K\99õÅ×Ã÷\8eß×0ýfÍ\9a5kÖ¬Ù;3ÉÅöÊMà\84\17|7¤\12û\10\13yã§Ó8·\13âWb6Ú\ 4ç»8\89>\96\83\10;ÑáØç\7fû(\ë9àËÖ;廨\8f)yá³þ\a\1cÚ\90á=\ 6\82­!t¸|Ï÷?56Ã8Æ0è\9cIÜï\13\ 3d|\88\85ÿ=(<\83f\ 6âX&l3BÂǤ\198\0¯0\9b;°Ú`       yG\82Ý\1eu\19 3á\88ñ\14N>z¦»+\9b²RÉ{\82ëhK%EÞ{O(\9eA<\19}ÕYøúY\11Fe¢ò~|LÚ\87Ĩ\e\1dǯå\98=Æê\19Òaj¼\a¡çD\16z\85'}¾        ø2G9\a<UöXu\1f\172]lQÂTáÑ5¢½\1aç \14ü¼\8fÑ\ 5VE\8bÁ{\ 69Hl       Ü\ 4\aY    ó@UV\95ëJY\82ëDØñ¦f\ 3Ö\b=\86×\f\ 6lX´l3\1c\1a0»¨\127z\86s0N\ 5\8b\82q×   \8e£
++CR%pÁ\97þý*i\a !Ç&Ð<\96NJ\f­Rt5\96QȨ\8a!T\f\97\89l\f5{\ 6v(\83µ!1\e\8cРú\80\8a\_x3\86\17á\ f×ðÿfÍ\9a5kÖ¬Y³fÍ\9a5kÖl_°qüÿéOí\8eSK÷\1f쨹ã\93qþGä:ñÙgÎüðn¹\1e£ë5Þ/Ãgåak\1e+\18¹Ò\ 5\7f½§b\89£9ñÇH}_Âgùq\17¿Pðì¨\væ¹µâ\93£yè7Ï S¿«òÿoø\93Ó_,\18r\9f3þà{ûþ\7fà\88\vÆ:M\ 1[î{`¯yÚÍ\9a5kÖ¬Y³fÍ\9a5kÖìÝ1\89UÀk\991AkK2\90I¹ú}\8cB0&\95\98\fRt(ò/xrr(\148\87?Crä  À\e%¹72IC\Ô>3D\83\84\ 4ÄÊÉÙá\rnKÁ)'Ü\14(HB\98¡\18/\91QÂØ\ 1\ 6¢{á\a0>$R&ÈÍY»¬X\8c\17äà\19\8a\91\192Á¸\v\12\158eÉÉ\91)\1c £\ edbñ\96\f\00\8b.YfÿkÆ\85\ 4Ü\1c\ 3ßq\1dcA\98êOþ
++\s¸\87t\15\9e¢\ 5\91\91)9QIÀ\e\17È[¡
++\97\81×ÑL\8d}1Ê)\85®úPÂ\1f\12ßÉ\eþ߬Y³fÍ\9a5kÖ¬Y³fÍ\9aí\v6\8eÿ¿~Í5çL-\1d\ e¶  \ f:1ôK7\1cõ\93.\9fß\ e\a»äú¨.À\9e   ùÿ\1fZÛåùçá`³äB\7f\ 1\9f\87\1f\9b÷ZÉ\93\ en8\98%\18ý¨\8eÀM\95\83|rþÿ15Ïþ;Ë\16ÿ\97\·Á\ f\a\8f×\18\81õ\ fýÆ7\85ÿ_\93Ïÿ²9}ÿ·­Yøz\89_`=ë¥ÝãñYø/¿¹Mx\ 1t\8e³\a\9f¯í\9e÷\94½½\8cWw|øëjîü[[Î.¹ó*Nâ\92g¿.?üÒÂ\e u*÷½Ts¶×=ñé\ÊB\17\87ð\\8dC¸jë\9a\92WO\95G)ÛYó¹ÿà\85+\ e\ 1ªã\8bß,ý_\8eÏÚGß>®\94¹N'`g\8d_X?¶Hâ\17\98.Sâ%VW~\83¯ßuÉ®R\96BÉs_-íqbÏßyñ­\85oÀæ.^¢æã\8fò\r¼!ewâsÎ÷îó¥,\842\86­\95\94«?ÑñýG]òÎ\ f\961L\9fÿ\7fj\9dÏ+\ fúdáí×9u<ó\aöã;{ìÈ»K\\87³]®~Õo\18Íÿ_/u^Äû\9eÓ\9b»\9cûnn·Õy?ãÑ\ f\94¹.?~K]Óg\8cm.ùÿÙÄÒ^ÑV(ùñ\97|¡¬Ó¬M;X\9a5kÖ¬Y³fï¢Mäß·\ e\ fB\14\11§\92¹-¼@¿\bN}­<¹ç\8dÅó©wA\99\82CFKñ\ 5kKû^3\9f?©¨4å\17"\1eÐ\8dQ¶Ó\ 3\88\865xç\b¥ö\çÓä\8d\17¾{BÂL\9f\9f5)ï^3ëZ\18èCT=\ f\80²ä\G÷1à\98Çëp\ 6Ïà9\84\12obvÙ2iß$\95(ú®2\ 1gÒ¥«hñ0\18\13¨\90Ø\87\bÏd´\93\98\84­\ 4Ö\8d\ 1¾tÁà[ÊPñÀèd\15SâQ_²Âï\ eß\903\1f\ ePÊb*2¾\86ÇoøÃEÒ´Sß\82\91ì\a     ÏÐl\93éãýX¨\15\115qjL&qd²F\ 5ôËS\8d ¡ÿI\19\8a\bïZæ\9dcI \ f\18     zÌlu¼F\ 5)
++M\97I\89Ú\0Á\ 5Tnð\kÑmT\ 4?PK\0^Ãð2As\8e\ 6\ 1\f\ 1\12\13o\83G\84[¾ËãÇ;\8c\84à\93Ê\1do\ 2¾è$Ë=1á\9dä\aäò·!PÿÁÁ³d9\10á\b\8b\94<PZqÁ\98Dæ}\8bnëH6|\97¥5\8dZ\9c,\19i2D´§:n\b\83\17½~®±4¥¿XH:dJ\89èØk+LѲx79\ 5P]ÂBÃ\1cfT®1'\11\v5Q&\84ëÆåÈ\10\ 5\0T\80\8e³áe¥\88?¹>\rÅ\1f\fÅ\v´\88U0\86\80[\89@?w\ 5\89ï2ý\97á<ôUQêÅ`öáP~\9f\7fÃìò\1d¥áÿÍ\9a5kÖ¬Y³fÍ\9a5kÖ¬Ù¾`ãøÿâß¿aÁÔÒý\a«kþÿ5\87_zrÇ\93?k8¸ºæÖO\8e\vØQqÔÉ|þW
++öº\15\9f\85?ÙþSáçW1\f;^râæ\v\9f\,ø\7f\b\98òô8ü\92\83ú{F±öqý\81KƾsDÇÑï
++\8fÀÆzß\13·\9f÷ã\82µ[_Ê\9c\94\91§þ­c\97\17Ízj4JÙ\9cÊ\8b?\8a§\9f\ñíQ<}Kõݹ//¾©ÄBX[xÕï©ý\1cåÚ?GÊ\8eÇç&wVéK\ e±`û\v¤/ÓkÝ«\8aE\8fââ¯Vü~\94ïà\1e¹ï\ 4|N}yõ\97;­û\8e\97á\81\1a\830Êo_¸è§ç©¿b\ 6]úGj\1cÅ(ßüº:G\eï_òB)s±øå}\95¿\7fª.}³fÍ\9a5kÖ¬Y³_\8eM\83ù¾S½vÁ\8d\9d\91|l§£ÊÄ\8a㸾ý´\ñ\1d\8füt\1có}®øtñ\ 6\92;\8d§p¼jhKNý\8e\eÿ窹N\1c:gg2\ 3\18HVæ\92\v\ 6ϸ\16ý \8aË|s\16:\vo8Ç\ 4s
++Ð{\8f\81\1a\b9\ 4ª\ 10S\øÝá\1f\87\13\86ñ\ 5    N
++:g>\1d'\13$"B`h\8d\ 1OÔè>ZÌÔfËZRà\8dO\94\r\b\9eêó¨Û÷\1cþï\16÷¼äö;\ 6\eä\84ÑX\ 5\1fEöÍÀ§\16m\ 6\\8bÊ:\fS\99\fïÆä\8d\ 4¾ª-óåU\8c22o°24æ\87\82\ 6\19oKLñ\ fx\89Ét)®z!ð\873P}\94Å¥èY\9fÐY\ 6nhÖf¸¸\12ã`\ 4ó\87W2;\ 1×\87Àå\18m¯Q\ 1³:a\12Щ\19â_\f\15%ðÞÃX\b*9°#\fA@\v\12§°·\98\1d\0C¯3Ý?ÚLñ3jK¤ÈëÂ? %X\0\93\195c\ 6ÐÙL\ 1\89\14¸\ 5\19\1eb\18Kb\18\fÂP\ 6ÆÌ\ 4zÄ{¹ÞðÿfÍ\9a5kÖ¬Y³fÍ\9a5kÖlß°qü\7fѯ\9f{ïÔÒáàÁ\8a)\1fµ{å\89\1dί\87\83\e\9a\82\7fþÓ\15\ 5÷va8Ø Øî(/À\e³ûz~g÷}'v¸nFý\aôõLÎó/\9841â¥Ç\1fúPÁz\8d\19\ e\ e\96v\89Ó_½äCß.×\9dêóüùýÏ\9eôÁò}ãÐî\96ÚÏùߺNôç\9dwi8xà\80¾?Gîþâù¼î\93\9b\ 4c\9eªk0ìp÷Q\1e\81M5ß|¿ç\ f\91þ¤¬<Ú\95ïó\8fk¯Z´§\8b\9b@=¯V¾\83\13Î;Jêç?ÞMÔ­\9fwkÏ- ºX\81\ 5rÏçñYó÷Ë\8b¦\822ºä¯ªã^ýµU\8fv\9c\ 4]Îþ\9e\19b!ÆóäW\1cÛÝÇü\13){{vï\83¿:úì±\8e¯ \96ö6×ù:oÇÊ\9bK\f\85êòù\1f¯Øýé\7f»þ\99Nß!\97ûÖNÐ~øñ\81%¾"u±\17B9 1\ 6ë^yÿ½e-\ 5[î;¦úq4¾béÜ~\fÿ0ÿì2\ 6oB\89iØ.e×ásÁ\8b×~µp\19¨.þÀÉ\18ÎÂç§[/x¹\94EWÆðRõ§ýí3¾[Ö¯êô$ÖÉ\18¦ç9x¤Æ±¬ºã¢\17K<GÑQ\9d\18ËrñöÓn+e&\97x\8eyUGã­[×uü\bÖ\95ûæU_¯úî\7f³wµÁzUÕ9·ÕæÞ|b\8bÂTjùPH\bØ}ö÷n+b\8b\95Á\80 $¹ÂM\825\f\bÁP&µ\8c\8d63e
++-4Ò\8eíØ\81¶ÌÀTPThÓª \86\1fLeZ¦¢\88PD\e$¾&\88\88\rubÅÚçÙ{\9fýÞÜ÷ÞÛ_t\8cYÏp.\93³ÏÙ\1fk\7f¼{\9fµÖ³.\U8\10ºj\97±g¢\97ÙhÜ\8b£ÛØÞ0Øñú\9aVëy~\96Ë[q­Ùgn¯ö#ºØ\8f<±¨\1fã£ñ2TËsãà¬ëKZo\aòPî¿k\99ïG/Ù]íGj¿?ÖÞ\9b\1aìýpI3®\94w`Qßö\9bvm*m·.\94>ºoi?ϯú§Í\8f\94´PmK>¸¨\97õ\97wN>UÓêXÚ=1,ï²\93\8aý\91©±B\1eh6>/_¹éK5­Úñ¼:·a\vË»õòl\e¤\19¼uÁ\90k\83ïýçÝï*uÁx)mx¾µoý`e)/\18SúöÁÆS13\8eÈÄØK\16õãz×Mo~²¬{ýø<²å9\93S¢·\râ{ï_¸zPÖ?\17K]\96´5jÍ\8eÕO\9750tJ~ä\ 4\82Ã\12½\8et\16\ eí\12Û[uE_\1a¬f\9ck3|§ÄÜæ&Da\1dô!ÿþ÷þ´>\90©Ú"C\8f\ 5[%êl\83ÉA®é1LÓBCÏmºoke=ÝM£\8f¡sÊQ\13Hu\97År\87\9f\17§£\89x'Ä\1c˼r~;æ\97²\92\14c\8dõmðûn\15\9e\ fQM«Ï\~â³q^÷2¡F¸øÔ¦T\82¿[\17\8bNÎã=zFkç\92Í:·DG_>\19\v!\92\8fÛ°~\89\12ý|-\95\92\16-#«¸6Tüjkµ§\9aW;\1d(áÈ'4¹À©»¤&Ü\1a4\9b\94áÉÐ\87»÷\95\87 UÐÔbÖvêà5u~A)î\ 2<r\89©×O'ç{Ý$õ²JûH\ 5&ýÀYx\87.ìXWëSð\ 6\9bÀ.F\8fÞ@C¹#ì\1c\1dÔQ5\ 6\95'\ f:»;)zÿ£\83!\1c¼ \ 3\15ùÓ\ 3å\8d\8eÁN\9aþè¦CC\ 2\92(\82\14!ëâsmr\9d0:h¸\e\15`¼³/6\1f\81C\ fi<âµçn\ 3\1dWääm\bmÌ Î8\9b\18j¥«\8c\13»\8c\9eÕ\1e\9bu*°«ÍÀ\\9c\ 53m\1d\90\911Ù^Á\98\bY¢¶1k\95!d:\83ã\7f\18hIQi\8bfR\17MWtcrWYH\8eÅ¢¶\10~àt\bô\97W\aqºk\b£CC\Õ\13sò ñ\9aÖ\0þ'-n=\97\89C\98o!¨ä\8b\8d        ¤LÖ\ 5dDß~ô\e2ÃÄB\1dBGú\ 44    âƨÃ`íèÚO\ 3\17\8dÂ3É\7fò¶ãÒ\14ò0òVÓâÅ)Zr`Z¡=NEÚ·`¥Ê\81\a¢£ù\ 4        \10ð\0\ 6LÄbÐå9\85á¤ÙCèÔ<\86\8d·ý¼×ä6Èv\ 5Áæµ;xZ\1a\98<eh°^Æ\11Äát¶\ 4Y ú\7f\81\10\b\ 4\ 2\81\10\b\ e\aÈù_ \10\b\ 4\ 2\81\10\b\ 4\82Ã\ 1Cûÿ\r?wü÷f¦\8eWÛåbÿ\7fÕ\e\8a-¸vãc[ç\88ÿ\17³­ì(ÿߦüüh\9c¿ÕùùQ^@Õì\Wþà5ßÏ÷»\ eùïi\1cp\aÛó¿0+\8fàxµ\8f\9fiÏ?1vú<vó»\eßß\96Á\96{\8a\1d»MÕ67Û\80ÿ\ 5®\7fxÅÅ»K»Mo·\9bß\9bÝ>¼Øíþ%®óN»b_I\v]yïÌ\9cFûâGïÙüÕb\ 3î\±q_\92å¶\ e×ïv\17?Sm¹«Mö\vÍÞwÔ^{Ekß\85;.\7f´Úk×òîl¶ø\e\a\9b\8e¯\\80©ÆºËi³Ûr\ fãîM\r\96\958x4<Êi\a\96\ eÓfÚ]?Ôìû7>óó?[Òbõm(q$_\87ë}K×\94ò\82«qþ\1eXÚ÷éùÇ¿µØy'Smê\8bÏ\0\e\9eg\17V?\10'q÷\ 4\ 2\81\10ü_ Íw§½ÑØ[f\9f\80l\91«bìbR6\9b9k¥}ê\8cr\ 1ÿT\99\18Îâ!MJ2\e;2\96å\1ctH´\94wÆz¼J\v~äD/ÆYb\8c½\98¶ïÜæ\ 5TРa¤ê\9eæË\91¬w\1dÍÿ;´Ð9\87Ü<\ 3\9aÑÚ\9d&þ>[\17ÓOB»Dn1K#ïê\13¢m°]¶3¦«\ 4öv}ü´jçO
++9\9as\am³}\7f³WwÈÖ[§4\89ö a\ 5\89e\87\ag dlè(`\9dh.M¿\b\9f\8d»sl;\869£ù4¤§I\8dæ\18*®£çIf¾KÁÓ\f\1d­\b\91Ô|\94\ 1îY¼Ãnc¨º\10<ÊI\91^(N[ÏþS±Éd.^ÁCÑV\9dd\81\81MPô<AÍðïgó\19\99Ï?\86~\ 1èb4BE\8fÿl\97\83-jŨr\10\16}+ÐE\9c,¤1D_jú\ 3\98H\97\9f\8e\1càô\r¥\ fE²è\ 6\88\8e¬s\89ì\84t\rPÉå\11HºAÌ\14Ë\9c\r6ï$\ 2dtºH\9f\ 4ÏÐ\91:e×\12;Í×ç'Å¿e6nÉC\8eÏPôÿ\ 2\81\10\b\ 4\ 2\81\10üôCÎÿ\ 2\81\10\b\ 4\ 2\81\10Èù_ \10\b\ 4\ 2\81\10\b\ 4\ 2\81\9cÿ\ 5\ 2\81\10\b\ 4\ 2\81\10\1c
++\18òÿíI'\9c03u|ìØÌÁö\11\7f\7fÕ\99\85'¯³ãcÛ\1aÏß\8aϯZWb¯\93\9fïÕ\99?n&ßÞøØ\95ù>¹ê\1e\¿â¿òýè\13òÏù\\80ëä\1fÞq6ï'íÌÄØ\87òóä¯;æ\8e\8d\ f\97rUå\8c\eo¼pW\9d¸å©ÂIØÅÂ{·¹qÛ\8dƼß=O|úSò{§ãºÙnx<§%\1fj\1cï\ÞZ\§­\ûláàËa9\91¶3¿·\19ׯ=¿ù\92\92fk\8cï\esyoÁµÿ\8e\8böÖXë5nø\81å}ûî^pÉÃ\85\83/úÂÁw]ÎsöØçwµö\8dÆ\ 6¿%§±²¿4qö\9eÂ\89\17r,r\81\10\b\ 4\ 2\81@0\ 4¹Û:åT×%m\8cRÎz¥c\8d\97®¼ê"C¸\aëbê|J$]tØ\93'G\16C\9b)\bñZ\f¤\ 2´ZYÃPì&vÈL\87H6Â\14\9cGºòx6\91t1Ø »\94"É#;Óu\8e\f\826\98`\94&¥d\17È\ 5\88;\89\8f\18\81Þ\ 4¯-y)}@Æ(J{äà#        ÈÉ\ 1\88#\92ÑÖküQ\99ó\rõ\bÉk\95K4Îu&\ 5¾ :£\18\14Þ\15â?m5Z\90cÛ+R\16vQ\91\86.\a\89\9fÆå\18")ç\ 2ʶ¤kì"êÝ%\86º·\96äyÊ;F¶\8fx\1c-&\8b¥B¹\99\9eÎùÊß\17UP\9d÷\ eÕÇ\8bZ\99\9e¿0j\13H'\1e´ç³8¹t.·Éi\94\1fbå¡Ì¼\85\914\84\9dF\7f\86¿\9a\1c\99\8a\94\91\85ý\11\ 2c\vU\87ª¹\8e¥\85Î\90<Ò$\17\15DB\86Éè\94GG¡éø\87%á£\89h\1fDb\90G²!\97O\96IOÞ=\83ÇI\99È\9aá\86JìEVXc\b \1cÞ!\ 5$* ¢vÞ&4"!\7fÈ\ 6§PíQmÒó\19\eÊØÒÑ%\95YF!Ø´ rOv$\ 2$¡e\80t\1d\8a³\16\99 \83hÈý\17mDUb4>\ f\9eØ\91\1c2p\84¢¹\86¬ë\81\7f½ÂÉ/óB\ 6\9f:<\9eéC!6
++<ór¦è¦\9fÿ\9f^ø£]3çűS\1açû5«¾qNán÷¸ÿ|æ\97ç\9f\1d+Þð®r\9e×\vÆÇî_Þ?ÿÚý¯Ú\94ÏÑ1á\9c¿­ñù\1fÌÿ¿gy\7fÖÝ~Æ«þµò¸«ñ±;'x\7f4.Àésðÿ/ÈÏ_\89ë\ 3ßù\85ûóýÈûÛÚw\84%ozù¿ð¾S\8cGpC\8b\17péº\93¿\97ïcv\8d\8f]\93\9fÿs\«\9e\7fSæÍÇ,C¹ççrwàZýø±ÿ]â\vh<¿»µ÷Ôý¿÷ïù>fùøØ\ 3ù>9ïWþø¸õå;H²}ü\ 2>\7fòþ\eóÙ>ZÆMØÚøú/9û\95Y\ eI\19Èçþ,ÿ»Xÿ5/û·|ßEÜÿÌâa>*ç\8f\ 1\19úx\ 1³\7f79:×é:\ë?zÞWJ\9a®ß\ e>µ¼ïÏw\f¾ñ75Í\95ï\18['ú<\7fxW\9f'\ 6~N\9b\<üÞ2aÊ÷\16¯Ëw\93©Å}_]üå¯ï*ß[¼+ßi\8e\ÜËÿÂpQ\89\87`\W¾\8d¬nyn\1e\9cü\89\9c\86a[b      \9cÛÚ÷¹Û6>TÒt\8d¿0Ùúúï\8fßXb:`\95*mØÞÊ{ïi\9b¾]Ò|,õ´¹OøÀÅ»¯¸#§yScAܹ¸\1f\9fêO7|­¤%]äy[«\8b\82/\96\98\ eX7sÚ\87Z|\82K\9f~ãÏÔø\18ª´aÅÒ&ëךּ¹Ì\11SûHµ¶_6Xdêw(]Þ[ÐÆþä\17/\U¾5\ 1¥.KæþÖtËòþÛÛh\9c\bÛÊÛ88ëú\1a'¢Öó¾ii3ãD\´¨Ïsý®©AùFÕÇ\97¸¨}\ 3üëxiIs.\14¹\º¬\9f\17£± >8Ñ÷Ñ\8f\97¬­ïÅÚ\86çÛø\9c\1a<\93Ç'~\7fêXº²Å\16ÙzïÚo\96´\14K]ö\8e÷õ|ßÝ\e\9eêÓJ¿ïmsqý`e\89Y\81\9fñ\92Vby°\9eoÛ÷;ã%­\97Ë\13mÎ_0xË­9-êú}î\99üÞeù{`wgMÓµ\9e\13Ã÷ι·¤YUæÑ¶ÖöÑX\17±ÅÏ8û\e\9fþDY;ñ«\94Ó®Îýðgü\1eøÄ½\1fîÓê÷Îñ¾\1fv½æ=\83²¶\96X%\ 2Áa²¯w
++\9b­¼ßÁ¾\1ak0÷K\ e[»üûÅ}fL.\90s\1a»8î|½'9·RÜÂ\92³]å\8d=\16v\8bý¸µØ\9dc·ÛqS\13¸³åæ\ f[Ië\12wÒøÉÆ\1e\9bìá\96\14Î\ 1;2\8fÝ\ô\9e¯E×ï_ñ\90\9b\87³\e[=k4N\1e<\`Kn¹x\1e\8aüÒä\85G[#2G\ 54ùÙCå\1f'¿xdz\ e\8f:]f\8eÇ\ e\19\19b\ 5Vì"þvk\8b·\14\19ð\15¶=8ò`K\9fÈ   ®¹\ 1     8\89A\ 6<íø\80ó\14Ï[Ø\13\e\1cÕðÓà°Ù@Ë\93&\8d9*À\1aàé|\80ÃÎ\1d[}þ\80\90Ý\1dç§Z§zæÀ0Á\8e#Zl¶q¤CçzÕÎ\1eí\fâ k´H¡×#\ 3\1dõüäØ;ôg\1dMqc0E\ e\98\9e#<\a\15被e&Æ\13\bl\98M\99K=¹zî\8cÆú\98È¥¯qjäY\ 4ÇEþ\98 \9a6ÅiuÁ0Â1&$H
++\1dm¹ÉÂÞ\rg2\8c\ 1ò®\87\84Ã$N\95   ÒD_ 26\1f_É&\8f7"rÅ \89±\aе\8a\ 1\ 4\ 3N\87Ø\1eb^\18L     \87\ 3T°*R²JñÌ\ 393;\1eÿp&Å   Î0\84\81õl.ǶcN     -Æ      \84ý\8b½·É2¿g\89\8bÀ³6ºÌ£\96\89£Ã¦ø¢\9c\89<#\11àF(q\11P)Å\89\8aÞê×\ 4\8c~L&ÆDp¦\9c­Ñ\1a\9e       #ë\1d\f\eeÌ\Üú\I:RøÛ\1c&\ 23BåÝ\18f9Ï\8b\8c\87@\12\7fã,\97¤ÄØ\ e\98í87wyc\8d\93\8bÕ\89GyÌ\ 2\ 6\9cÀC\11\1d\88É\89\94\98óÂ\0\8d\9c}\906GOeÖO*¯E\98\9aÜ\84£\0}иE\ fa]áèCG¡@\86\10 ë½gì\ 3Ô\ ek\18òâBdÈô\8f)MÁðÀ\8e\89\80Ù      \99jÖ7àh\9b¥\8a\9ay\8b*ñ;\a:\17Ë\92òÊ×¹\84\ 6ä2±«\9f#.\ 5\87dâ³
++çi,WX\928õ1\9f1\ f5Ëa}²Ü±ôa\ 43D\ 5\f\9d¦Y;\ 6°àâkØ\ eT\v\8b\ 1\9cÃ\1eó ³8°ÇÀÕ\1eÒ\8büÔÂ)Î\9c\18{\ 2E\a\91¤ÿ9DE§ëZ\e\r¿¸¸üQ\ 1k\ f\96\eô(¿/à\9cÅéËÐ\10è\85\80îL\8cU\91+æXD\ e\ fFH`\ 30x\19ç 1r\9bÎ\11FPsü\9a\81SÎ2\bEäïS\16:\1eÀ¤\89ü\9c1O\8c\ 64:pk©ÚZc-\17Ï\[N¨éý\8e<,\97\ eçÊz\12ò'+¯Åþ_ \10\b\ 4\ 2\81\10\b\ 4\82Ã\ 1Cýÿ\av¿ë\953S\17\8e\9d\92õ\8a£úÿë\9aýÿ\rGØ·dÝ\92¶¸\7fCÓ{^{â\96s³^º³\vÆ«N\97ʱã.[y èQ;3>vDÎ\7fTÿÿ@¾?ªÿ?¦\95{°þ\7f¼é\9aOùç\97~7ëᣲãcÛs>£þ\b{æÐÏ¿Ðt{'ïß\90õù1\984>6\99ï\1fÅrßxä\8f\8b~¾C=\8f\9dCo_ô\80£~\r±Õó\9d_5\1f¯þ\14U?øÜâ¾®\7fõ«\e\aU\97\1e\8a~pkÓ5¯7\17þGI\v©è\a·5½ð;\9fX{Kѳ«®èioiv\ e£>\ fSM¯øÛû¶\9ePtðª÷]XÚ\97wÌ«kyü\ e\99Ó>\94ÓÎõé\91\17N+iÖ\16½ilãeTw\7fÍÐ6áã\93\ f÷i¥\r\a\96\ fß;åÖª×7ÅÇâÆ¬3¾\9e2þö\1f\7f¬\8c\9d^Çy`\1eý¼j¶%¿\7fÜT)/\18U깩Õó\8aÁ\19\1e¼*2+¶!Gâºü\9b'\95ö\85Tëyz³{¹xï²k\8bîÞ×þ[Ñò¼l°ç\93%-¸\92ç\95müì<ù\82ï\16½~Wý=®ncô\a'^Pú=\99j_qfó\ 5\9eÍy¼kå\\91K±1\98Ý/åÁæëò\83c×}«¦Ù\92¦Zyïûìæ¢g×>\96ö]×Ú0j\ fpe³¯¸pÇå\8fÖ´ªó\1foy\1euÒ%\83j+`ÊXºr\1e;\82_\9fVÞêÓJ\9a\8b¥\9eÇ.îe6åÞýlM«c÷SmÝ\18õ\91¹zYßö/ï\9c|ª¦¹\92¶³ÙB\8cÚ-\1cXÔçùò\95\9b¾TÖ:SÇîê6\8fFm\13&\9boÓ¨\8dÁÍ­\1f¾ú\89ÉÒ\ f±s%ÏmM.£ö\0§·÷Fí\ 1.m¶T\9fý\93³ö\16\9d¿­v.Ç´<Gý\83¶OK;ãø²Öê¬\97\12\b\ 4\82Ã\ 59\8e=\7f\80isí\83Í:tjÐip\91ºPuõE·N\95sd\14s\95ðS\81_æ¬C\ e\9aÖâ.+?SÕåÓ\9a\ 2»+\93íÒ²^3Û\80\126\e\8eü\9c\ f.M·%\bÈ4Û\ 3+*Ô\83z\11m¹SPÝ\82Yl      <~ËgÓ\15öºú\16KÞGs\90\1d\ 4\ 3¶3zý<v+ù¹\8e¡à\13\8a_Ðë\87ÕtÛòl\en©¯ux\bÿ÷Þ«yì\97GìÅ\ f\18t\10v
++V±)±Ê\ 5ÃÒ¦¬÷ut\1cÀæ\92#\8av\0JÑö¡ã\1eOÓxA\17K$\8c   \8b\97h|\84\8d!»C£Î\1d\ 4©h\8aK%q¬v\r/¦-»¥Y\ 2­x´Íca.{+lÅl\97û\vã\18\ 2\11\99ÑB$§Gô\ e\ e\ 5\9e\10+Eí03Ñ\91\909}\ 1Øë\89>\b\1d\9eÓ\96¦\13
++Ou4\1aAçØèØLüg]ä1\88¦X\8eÃ2Ðr\bç\9bÔe\e\1c\9a\f"e\8b\bÅa\8bao1\8a:\9aRÌeÛA³\r\83:(.\fóÙp%ÚØj\9a   \18º\80ÐÕ Ø<\ 4Ú Ñ}\82v\1c\9aòÊòËvÓ8ã¢\7fR/+ïó\83       £\94\86\vy\937¯M\95CÞô\14É\8e#1\ewÏg\e ú\7f\81\10\b\ 4\ 2\81\10\b\ e\a\fõÿo?êìß\9a\99:>vfÖC\8dòÿ\rùë^úÍ£³Þ;&åz\9dëìzãç\9b\8ewjpÙIU¿Ö\15]XlºÚ\99º7\81\10\b\ 4\ 2\81\10\bþ¿1Í>cÄ~è\10â\89,6\ 1\9e\f\97Ãóÿ¢gϽqf{'Æ6·óüÔ''\1f©Üo\95\eíê\9cv-®Çþñü'\8bͶwÅîuk;ë\8fÚü®n6ü\17<rÔ=ÕîÕT^±ÆóuÖ\9eg\17V\7f\0ÒX\b\ 4\ 2\81\10\b\ 4\ 2\81\93òm £÷\81ÏÇí *\9f\7fâÁ\9d~6ùÛ\81ñ¦Å0ðäØ4\81D\8e\9dU.\91PÞû\12\83\ 2Çü\14\19V\ 1§vzìtt` 7±Î|\90ÎÑK\83l\84.zò=ÒI\89>\1cdétÞu8í\93¿ÐiòÐêdé>B§pO/\17\ fè\14:-öÿ\ 2\81\10\b\ 4\ 2\81\10\1c\16\18êÿ\9fÚvÉ\933S\17\8eÝ\9c¿\ fÌäù\e\1f{0Ç«\1aõ\vØÞø¼^»\7fí\eË}òá\1d\939ãÈ\91µåê×~¯Þ7¸¿¤Ï\7fÅçW­+qÙº0^c\9d\8dò\ 2^׸½¾pΪÿÉ÷\8dwãcÏ4{\83\7fÄ;òýÄ|\1ek\9cW§ì·_,|\81
++åÞßÊ=\98Gð3ÍÞáàx\81%vÞ[q\1d÷£sÎÈ÷;Æÿ»¯µ÷ÔýïÉù{§ÑÞÛ\e\8aÇWý¨Ä\vLÈç¾eÃç§Ç\vü`\96ó(OáÎ9âü\95¸_³Çù»k\9eX~\85\87\8eå|ú\93\95k\8e!\8arÚ5­nï\1e|á¤Â1hláF»¿Å\0üÛ\136|©¦\85b\aò©y¸  \8fn1Ö¶\f®¸µò\ fÖ\98uw.\e¦m¹§¤ÙTÊ;bi_Ï?ع¾Ô\93\8c"9í±Öw£q\ 5'\e\1fã¨ÿ\89m\9cq?|Ýy\8f\974oKÚEK\86uùîâ\92\16+gÜ]Y֯ǵöc\e÷UÞÂTäyô4¾Ã\99¼\85·5¾¼ÑX\85O4îÅK\9f}Åg«í\8c)í{>·\9dÆ8wÿÚÛ\8b¬\9dõÓcù±Ð-OmY^ã\18VN<Ûd}ÅàÁÂ?èCåü;·ñ9\8eÆ*\1cor\19åIÜÞæÿ¦Çï]RÒb\1d/74;\9e+\1e\91Âw\98Ã\17q¼4\9e½«~ñ\9dû*ßaåW|"×\85\7fÞ¶}MáÒcH\95\ 5C¾JÖsÛòË¿Rx\vS,í»\7fY?\a×ì3·×\18\87ºÊ¥\8d¥QÞB5\8dcp¦-Òö<®\7f\ 3×ùß\99ú»Â\a¨êø¼¹½75Øûá\92f\)ï@ã;¼iצÊ#èBéÛ\a\1eþ£Âõ8ä\1f|¦ñGNî9õ\97\8b\9f\93ª\1c\83ÏÍé\ 3ÕÇb\9c\9d\7fps[ûÖ\ f6\7f¤ð\ fªTúý®Æ\1f¹î\ fßýµ\92\16»ÒG;Û\9a<Ê[øÜ¢¾¼÷\9e\9f\ eª\8e\89mK\86åÍ\8c\9bxuãU\1d\8d\9bxç´¸\89\ e's]¦p\9d÷­3®-i®ò9\16n×;p\9dûõÏÝ]ÒB\9dG\85Ç\93\1c\91/;vóîÂ\93¨ë:ø\\93Ù,1\15[|ÇÑ\98\8a%¾#\1fØuÓ\9b\9f<8¦âù­í39\14ûØ\8f³Å[\9c\18;£q6¾\7fáê\9aæb\8dwºt\98çí\8bKZ\f\9a%}\1f­Ù±úéòû\e:%\e\97\9f
++d\1e´\8e\1c\86\8e\91ìðû\90\18¢-z£J\90j]¢´¡×I\ 5\974m9\19¿Úåû\95ËΩCÍ\ 6µÅÚÃö\83AÐ\t(}ÁAñÆgçÄ2\fB\16\ré¶\18ÁNE´!zò~Y\92¥iR·aùÃ\1f\15\9cc¬-\9bE\17C\89ëå!\9eÿeïêcö¬îr\9f\bò´@\99
++\8a\80\8aP¥´\r\9cï\ fù°K\8ac\84o
++\14h¡:\b\1d}¡@j\82\8cEÂêd\1f\ eP¶ÔØ?\88\b\f\b$6À6F@êÖ(8\ 2\11*\92Ò½-ÂØ\A×\80âïú\9ds\9fçá}\9e÷5Ñ4nöweO\97÷>÷}îóu\7fqý~×\ 5ç4\98\vF\1aëÒ\9e\9c³£[\87ñ\81Ú\ e\v6j=ÎÂbiè\ eè5ï ÷\ 5µ7ça\èithúØ\a0\aî(\8c\ 5Y©ËѰÑÎ*\81Î\v\1enm\ 1Fx
++Ú]ì\bVdùhò\fÌ#i d:cÆûrÖ|g4\18H\17\ 2T½èå v\9e\81Ã\1a\823jîAK\ f·'\ 51´âË6­^Ù\14]³éüÉY\17\8d\0Ù¶\10S*\1eé\99W\81ÕCí«qÒÕ¿\ fFjð93P$\ 4\919¬!\98a\13\ f\95»\90ñöTb\81k\19\eËA\97\90Æ\13~i´´!­ç ÑÖÚ3Î\83o\9c÷b\8c8R\19ÖuÔcõ\ e©ÝM\8fÐZfh³Æú1°\96\eêß4þ\8f\9dW£6\19V~\ e.m\81®\bxúÁx^[\1f
++ú\8b\10j£z T\a×:,2\98ÀY^?X-\ e\9b`AIKIÓð`"gÒÖË4*0÷ëô(-|ìiI×yi^¨.YXÔÑú£)N0\8c¤Fñ\8eôæà©y\10\90]Ĺé\1aÒð\15\84Ä¢w¬BéáÌ\aý>H\12Z8öÑE
++\87;\9aEÖÚóÚYeiÑ«DSÏýÁ\95
++M?0Ò\1e\93\95!@Ù­\91\9c Ú\a)@ZÙ\8eÝ\ 5ÇzjÒm,ÐÁ\9en\93¶ãÒ\ 3\r\19;]\ 6Üǰ\18éV`¡\ f\b\vLZ-\117@ÈAÒ­OC5/Áh\117\1e¼¬S»1pÔô\b\7fDUµ;±èñ.H#¬\\88t×Kt^O£\ 25Dè\ 6²!`Ä Ñ\84R£,\9c33V(\8c\12\f;k&\97\ 6×$\r\8b\9bÎc\92\96S\f4vh_§\93\99 HIÍì|þ\86}ÿ\ 6þ\89*%\9a\12º\8b\vÖc-4\1d¡£h\aëöCy\vÂÿ\v\ 4\ 2\81\10\b\ 4\ 2\81@°7`Àÿï¸ä\ f\96N-ݯòÒ£~~'òöÂó\1f¼²ð{Ùö{§6\9f¿£¯[ô\1f\85;Ñz\98\87?~×7N©\9eU\99¶3?\ 5\ eqá3Ï\96ø\ 2\15hûræDFýÿ
++o?ÊÃ\1fÚ8·5\9f:\9eã\v¼±¦_¹?p@«.\P¶{KûßÐ8ë\89g\ fy\86yx\r\9f¿§[û?¾»Ô\ 3û\94\85!\1e\v8»·¸\8dÃ(g~\17\97}\99~çè\89í¥,U~ôþv\9eë\8eX³£òÔ\95G\9a\99Oå¢×Íé\8e;wý'_¯\9cråÌW\1dÔ\9dï\91_¼âµÊãVþ©p§ã=í\965\9fµ¥?{ö\8eZVùû­Í¯p\94ã=²q\99¿ûý\85\eJ\99í|ò\9a\97áÚ\87.\9d¬^x©ðÍ\85\17\a÷¶úû¯ÞZÊRõD[Âý[L¿\rîÒÂÑç\10Ëù\9ehu¾wïªÊ\e[WÎ÷\16×9Þ\voSã᯿¯ó­ë¸èâ\89\ 6\86[.z³\94yUxÀS\e/~Þ¦«\9f¯eºôa}ãïÏß¶ö\84η®\1c\97ÚÚzxÖ\95ß-e©zý-\9a\81S^ÖøßQO»%\8dW½ì­\9fÿ\99ÊÿÖ±^2\ 3\8f[â!®ÂqÛõý\85;5Õ¯ð\9d6·£:\1c\8b\ eìÖÄ(¯:\88a¹xòþ£kY,cýÃ!\8f¹Í÷Uî´òÔ\1fáãî@ÙÖÇïù0¯Úo1\1d¿óÒËÇ\17\ e\98\8e#fà\¯mkb*ç*\10\b\ 4\82=\83aO¸\ 4;4\10\82ÎÀ¯*\81\16\84#\97wÎØ@7y\ fn0é\88è\ 2íR\ 2áËÖi>\14®-\ 6ð«®Ô;ì\83ç³\83}\1aò[=ícC¤G\8dó°)SZ±½\16½Ð\99D¯      Æ*£\98Õ\a\87FO\7f¯\12\87-à4ôÄÏt h2z\8eÁ[\8f\9e\13t^\e\92OÅRͲ±\9eñ°ù\83Ë®\86\a+\ eÊ\+EÕÛÔñË\9e\1e±Ì§{Wþ¦g\92\ e\11öZü7Õ\ fË®D\1d\ f\132ùa\ e\96ÞZS`\8eÞÑ\ 3ÒSç\8a}_ªc@\ 3 \98)w\1c\vRëô\18aç+\9f\17U\ e\85K\ 4ýêÂ0?=\1d\9f8]\9e²\a\9d¬\90]\1c½ö\83}©ë\19sÕy\0\84ö\v°[³4Ç.§Ê5ÒdX´B±·]HàRAÁÃd\rÄ2Ö\88\r\ 1\f¼³4]6F\ e@°ð¯£\89¤î+\15\15\r#MB° PéÔ1¸Ìl0µ,8¶[ä\90\80\10éCA\85=ÆÕ²Ç\1e\95\ e{AN\17Ç0\1d\1fÿÓèI¨=fUqd
++]tpô\83I!ìãè½\98º§\91wîpyeZ\8c*Ók(µ\8a­\1di\10UD\ 3èËÂ"\9a\89¦"º\88Ø"º
++\11k\8b \a\9a\bêa6\99\8e¦^ÀÅ."È\82\96oFü\13\r\80§¾Ò̧\16Ç@£B\ 3L\1d6.¥\1a¯â\9d\9eÁ7\92>RhP\1c¢\16b\17\ f±§<5a\83\1di\11"\1e      \9fÇcý)-V\8fE§S ÿ9]â-\14V?-ÃÄ\8b\v\98qº­QãpñÐEé¼F,$âY\11\1f\93a¤I·\1dÌ}Ft\11ì
++i\1e4\82\0\10.\84[\ 4j¶t\9bÄâ\83\vd\82Ob ¯OÄ¥hº-p\°ðÿ\ 2\81\10\b\ 4\ 2\81\10ì\r\18ðÿÇ^}Û\1fM-ݯ·³ål®[¸íÌÂ;\86YýÞ\91mûq»~õòÂáæÜ¯Úþ£yû\9bxûhÞþrÞ~\11ý\16lÙx\1eow\9e¶ÏkõÌ9ç×¾ÅÛ£Ò³{ý\19ü\b\+\eÍ·~«å*/{þ\92\85\85\1fÖ5Ï÷¹\96«ìöY^øS$\pÙGZ¾õ\8amgÝÑqÇ\85\a\9dÕÎ7Ê+\9f8\ 3\97{D\e»©\1c©@ \10\b\ 4\ 2\81\10\bö\f\86â\b:m~\ 4\10C\1a\8a£áÈ\a\ 4O@McH\8f`*Ç?UKÂz«\10W\10\ e13ôYi\1c¤\14¬\ fÚCÖ#a+\87fx\ fE\7fD©Ø\1c¡ý\91³\81Ê\b}W+è-X\8fp      §k<Êtz  Æd\ 4_Ñ~.$X\ 3\fÅýPeJ!Ì&\84\bé\18áÿ\ 5\ 2\81\10\b\ 4\ 2\81@ Ø+0àÿ/~oßw§\96î×ÛØòó\87õÿ÷«üö¨.À­\8dg\9f÷­Ï\9e[8x\17ú5\ fyT/`ç4ùÿ©é\95\7fæ´Ã\9e­ç\8dýÞú¦g=\1c\17Ðï­l\ü\ 3[~ù)Ö\v0\9eêßÎùÁÈ\vÿÒäÂwy{F{V5\ e~Ñ®/_Áº\0É\9b~ïNnç\9f¢=ï|\8c9ýà\fí¿x\1aÝþ÷yûbúÍ\7fêð-¬\v 3µóÔ\16ï°ùí£vóö\1chÿUM¯ú¨S\ eþ\80ÇMiÚ¾¤å¨_yÆáß)Ûá\9b0¿é\1a\ f\17¼SÇÙuZÚãõÿWµ1ýÄ+ökÕ\9b¡æ|ßÕ4ªGõÿ\9f\9c!¶b#\1fw-Æòè\15/\16-\ 3¥K^÷ʦÙ>Æ\e ÕyîIµNíª¶ÀÒÖÎUÿxc.e¡æÞonósÍäl[ËLÉi_Ü´×ÿü·.\9b¬e±è\88¯mëïòç¯;¶h'¨Tb9\965m\81\eN¨:÷Ö©Röãv¾\89É\ 5\ fV\8dÿª½~jÓî\1eÕ\XÜægÓ#×ì,e)\94:\977ýñ\eO¾üͪÕ_óòomëXýÉ¥ÿT´ú³)ã2ÑÆlT«ÿÑÖΫ'\97\94q\89¡Æ\9cläþ=L¿\95ßý\86¯e¡\8c˺\96ë?ªã¿¡\9dïñ\aë¸$]µÐo\9aÛ]çWì\9cûÇ¥,Ôµ4Ðô¸jr\8e­Z\r¦Ô¹yÿ®\7f/=6ñJÑjð¾\8cËkíÚØ}ä\85;ªVCõ)x¨é1\8cÆâ\14\ f\83³è·ëÞ\95;k¼MÕ\16Pm<Gµ\1aN\9fÛ­\97O\7f}¢èF\98\90ÊX\7fµõý¢y\13¯\16­\ 6]×õ\89\ 6¬\9f3(;ýäNÿ¡´së\fú\ fϵëüý9Wÿs)˵\ f\98\8dÆ\f­oké\85G\97½þaO\81÷Û\9aX>yÕ1Õ7@\97yx¢im\8cêF,oý»xò¾Û\8aþC\8e¥lË ^êÕ¥]Yõ¼¸y\ 6­\86\rm\Fµ\1aîj\1e'£úøE\a\ 6\13ü+³ÏØ^Êbõ\148tn·&D\ 3_ øÉ\arréiÆiÎÆº\1c¢\rÐ\ 3÷ÉABßÓ;\1e=b æn2,9\ 2Äã\8d2ð·F:î\10÷6Ð,7ôn\90\ 3=%\13l\10bv\19\16\1aô'Ì\fÀ Yz\1aÐ\8d/*ª+¹\10àR`XL?DjC¦¶$\b°«`³á´hä\vÓ^H¹\85ÑB²ðIÊT_²\9c\9bì!#\ eo\83 \90\8c\ fþ/"A;\ 4G\87\81Ä\8b\ e¾\f\91º\12èq\8a$÷ìS§¿M\r\9c\8fôÊÃ9½Ù\8fÏ\r\1eã\81 á¼\10mf¡}Ö\87O3ò{°\vàlmCCÜ4ê\8bF\81ñ\ e©ýÈ
++Ö 1ñ¶¤K\86·²\ eêý°\13§Y¢¦r\8a{\bì¬`\15½°Ä\ 4º\92]( \ f@­²lÈÓé¶ÓÖYc4\1c\ 6zãÕ\9b"CWɰ`\ 3l&<ÜV¦Ñ\1d\80ÔC¦IPÈéÇ8`Í@c\885\ 3X\8f\80FÀÃW\81V\91¦q\8aPp éó\81\16\0uÅBk Â¥!CY?C\1c\9e\16\90F\9ex\8aÈЧ\11M°³\80\r\ 5j2\8e&\94\1a¢|¤\11I.\1a$Ë£ ê\ 1ÀÜÂP\8dÝüØÀãl\90\10\ eeÿN»Âi$î»\8cW`\8c9\r)->4\93\16\95\81±C¢k"%\eØP\ 3\9a\ 1ÖG¸vÐ3\8dy\hPXZ\9d~X/Þ(¥ñ\98u0dÀ¤\ 5c\9c£\7fi\15@o\83\86À\ 5:\937    \ e\ e4óÐ\89w0èà~@\85\1f\8eå\v\ 2²Õé\83\87ý\ 5,ÖS\ 2Ç\8c¾Ð*L3x2LÕy(úü´:¡G\11\92å5á 1\9faF¯;ý\ 4úZ\82:\ 2\v8ä.¯\9f\15\19Ê8Â\ f\ 1Î`\11\8a\12c8÷±^ còîé\85ÐdÎõ÷Ðo\88©je\8cÕ\ 3\9a\98i\ e 2B¯}tS\88\8a.6Å÷\ 5úNÁ°â>\86µ¥X]\82fÑó\9d`\8aN Òð-Rû1\9fÈíϺ^Çôj4Õ\eÂÒÝ   ¦)TW¨ëÉÐÛ1½èFhP\84zMã®â\8b'\85MC\9e)µ?\1c¯ÐÅ-\94k\91¦_A+\0Wc­\83Ã\f`$Â\ 6-ôÿ\83kWø\7f\81\10\b\ 4\ 2\81\10\bö
++\føÿ[\1e9ò+SKû½Y\8d÷>n×\ 5§\14N\18¼ô­CÛ¯ÿhá`\8dï÷\96\vpDóTþ°/ÀüVÏ\87}\ 1\8el<Ù¾ß;ô;\85?W~vÕ\v\98\86\17\9eÁO~\9fÆ\83ýÞ\ek\8f®¼°*|Ö\17¹l¼ßúÊ\16ç0Ê\7f.\9aAǾÄG\80ç\7ftAñ\0Ç\7f\12«Úêm,FýÏ\v÷ûgô;ÿ­\85Å\a\eÿa{Ö@\1f~<çXâ\aÆû\98\1fÚøÏ©^å\ 2\81\10\b\ 4\ 2\81`ïAÇß+\v\8d~\9d\15}|Å\yt]ânb0].ü8\1d\97Irç\ÔàÊM@\84Hbß
++ú6Ó\9a£M"í\82X\19\ 4ï\18\90øTäyû\90¿B²\9e\9a\91A¸ûäLð>Ä¢\93\1f\94\8f!#XÀf\r\e\a\1d}L\1aÉô°Yð\8e\95ü="D\107\83Ð\vĪÀ\18\ 3Þ#&[g\rbL\10\87\92*!"ÂÁ\7fB%E\9b\1db\<¢p3\ 2\11ò8O\ fkÑvϱ±üw\84o\ 1§í#L\15±7ñ/Sc\1c\8c¢SÐ÷°ö\ 6A7&ÐéµJ\18ø`M\ e*Ä \1c\ 2|àp\ 1\8b\ 6\1aIÄúÀP!Âø#"¼ÄFÅã\e\12æ\ 2qK\1eþ\16\16\11N\99&!\85à`3\90è/Øk j\15Ñ\9b0¹Ð\99j Ñ§YrVø\7f\81\10\b\ 4\ 2\81\10\bö
++\føÿGÎ:ùå©¥ýÞ\96æEÿa\9e¿äçC·ÿ¨-\e/*ùÄ>vq\ 1È\r=îo\ fÚZòMUê÷În~÷Çîþ\8d\7fã<|­iÿ-\9cK:\9a\9f¿³åå\1eð±C¾Íùù
++õ\1cÐr±?¾ûø\7få¸\0er¿z\99£\9d\vv]Êùù)ZÚ~6ï\ f\8e~Áû;Wsþ|\8eivïѦ/0\9aë¾a\86\9bZÎì\9aÉ«ï.1\ 6¦òìgs\9b\17Ï\1a\97_~zËoÝ}àêm¥,º\12·°¡y­¿úÈ9ÿRrÈ\83/eóù|ãsÈ\7fÜò\85GsÈ\9f8°+ûԯ׶D«ÊqOr\9dãc\1aÖµ\18\8a«&·ÿu)\8b¾Ä&ÜÞ|\12®?ì\13\98\86\9a{~yÓ5\18\8dwØØÆe\83»ôå\9a'\1eK[NmþíïÝ»ªÆBXWú°¸Íõh\9cÄs\avëæäc/x»æ\90×<ñþPÞö¢ÇK¾·³¥lã\ 1]\1fn¸å¢7k\9e\1c¸³­\89K¾Ôù9$]âGnnkb4Oü\88¦GðKÇ\9YóÄm\89-\99w`·þÎß¶ö\84.f£\9cïÄ¡¼í\9d÷\94¸\fëK\9dËçvó>\9aïýè\f9Ý?l¾\13?zø\93%\87\9a_¾¡åQ¿û\95\15ß+9Ý´Ò¸ì5.[N¿sv,)q'È#â²[[¾÷h.øW\87rÈïç¸\1aäé\95±^És{\aýÎÜúø=Õç¢æ{/n10_ÿüi;kÜO(unn}_ÿÍ%oÔ²Xæ}^;ßh~ùâ¦UpÚö·÷«Þ#¾êBÌ\90_>_òË\ 5\ 2\81@ð?\ 2ò\9bU\ e%ß=!+Øv:Ý?\89~ê³Æä[s[\13èRz\f×\9cä@ï?mÿi´\f¦r¢\96Þí\92\89ð4\aÓúßò¤]nóØÜåª\1dPòßéUÚyåC±dO]¾ý0¿º\87t\ eh\8a ÿ\90è pÚ5_;æè\91
++îSÈà­©\81I+\1ayHÈS7SÒØ\9d\ 6$bf-´ßs \97[äð;p¾\9eÞ±\1c¿·ªH\8d\1fÌ\83Ç¢IO5\83°NP¼ ¶G$\95\ få|ë@§µ\91Ö\91\8b]\8eù\9eò¸\9fN\ f\0ê\1a`\9f9¯]Ñw\ 4ýikÎýt\1a\16SsóY/$Ы\1a]\1cÔ\9e¦qo2\14.Lð´ê=$"º9\1f\93÷\8f\b\0\r\9d}h\11$MG\86º\86¨Nã\1cÔ\10è£*%ç Ö@W   M9]\87¸\ e\90\1cO\9dw\9eÛè!\8a ÐEËñ\ 1\ 1\f<t\12pV:  \r\ 1\94)Úúu\9e\9a³ÿ¿Õ=Ñô\99\9bhJhRè}\1fz\15õþ\92èÓÇ ¸\81æ\89Ú\ 4Í\aê*Ö\1aMG \17k\8f8\aj¢¡\9b\bV\1f&\fùþÔQ¾\ 6UÑ, ]h!&º-E/ü¿@ \10\b\ 4\ 2\81\10\b\ 4{\ 3\ 6üÿiÇ|öß§\96î×{k¬þ\7f¿7«ixÿý\99\vÿ\93·Ûàû½CyûÅô[ðÞ½g0ßÎ:ü¯1\ fú\10ý\ e8ÿçþ\8e·û¤g÷îäú/¤ßïë+Þ*<nÇÇ~\91ë:\97~ç¿a7V½oS¸Ì¢×>\9es½½qØË'\9f.ü¯s®p\84ï4ÎõâÉ3K\19D2g\r¸ÓÂ-Î{°j\14ØrÜk3ð\95k\e/.ü¡@ \10\b\ 4\ 2\81@ ø¿\ 2çñÃË)f\95é\9bÄ"¥^\e\9fA\82'\98\98càttk\r\92ÊurÞ¸\98Kƾ\ 6\rÇ4\ 4e\15\94\9c\91\86H\ ecCDª:\8c\v\90\10\8d¢8ÌBC\1a\1fÁ\18\ eYõÉX\8bÐ\b\84f¤D\8d\8a\1e5e¯\11\15\80\98\18¯Tó\13p\19\8avL\88\9d\8cQ& \90ÆGúS±a\84£\9dh3UJ­B\10\ 3"\11¨­ÈÚ\auN\87BU\1fÆ\14ÖÌ\9aÆC '\15\10·\90\f\ 2\7f¡Æ(\ 4:kÈ\81úèU@ø     Ô÷i\ 3\8d¤\ 1¿\1f\8dA?\9dÃ\16Ø\8cøl\14\8dV ÖG\9b\ 3²ü\ 3Ü)\ 2â\v|DèG\9a1\96"8kyV\ 2ô\18TV0
++°:aÞh¬\14\ 2gh\f©[\11Ö
++\981­¢\83y\bU£èüYEH\1dÐ~\1c\f=&>¡ûql\8f\10\b\ 4\ 2\81\10\b\ 4\ 2\81\10\b\ 4\ 2\81\10\b\ 4\82\9f~Hþ¿@ \10\b\ 4\ 2\81\10\b\ 4òý/\10\b\ 4\ 2\81\10\b\ 4\ 2\81àÿ\ 3\ 6ú\7f\8f¿\7fò¾SKû½}ØÃë6úm~ñ\88\1f±^^\f®ß{\88·Ã\ fí3§\1dölÕ\ 5\8cýÞföç\82\82-\eÏãíÎû~oûll\87¶Þ¢]îyöùóÊö{;y;ô\ 5\8fúö\17^)Û]ê÷Nl^l\13Ï\1eò\f\a\r?¿Ó\9b\1eᢿÙ\97}æBRÔ\9e'\9bÇÜü§\ eßÂþ\7f:S{f\rù\ 2ÞÎ~hÉÁ§p^óÜ;ê\94\83?`=B¥ÕìÞÓ¼ýVú­¸ï\9c\17\8b/ ÑE\1fð}nëµô»àè\15¥L«ê\ 1·±y\96]ÿ\9bk^/eºú¼-k\1e~\17ýåĶê\19\98K\9dÛçtí[3¹æ±RærñH[?wPö\83ý\8bg`ª\1epOr¿~\emyà²âÅçtõd\9b\98ÓõmÔOp       ÷\ fÿlzä\9a\9d¥,\85â×vç\9c®\9d£^\83Or[¾@¿+ßüÜ\ 3Åk°ór\9bà:\97ÑoÃç/è|\bcéߺæ·7ê\19ø(\9f\ f^u/=6ñJñ÷ó¾¶eÿ®-»\8f¼pGõ÷sÕW®ùµ¹}\96\17o<íª÷\1fÛ¿M£'¹©­Ù\9b\ eZýb)c\8b\97æ\8d\87\83Wl;ë\8eª5©\8a§ÞÒ\ 3»ó\8dz\ 6®k}8oÓÕÏ×2]æá\86¹Ýù>8i¢\9cÏ:WÎwzÓ\9a¼lòô\93;_ÀÒ\87­¼Î mù\17ß¼¼h[Ò\9a-cýt;ß!Ç^þ\ fÅûÏÚâáwÿ\9cî|7\9e´ºxÿùX=\1f74ß¼\15\93\13\7fU|\ 1U.ç+¾\95k0Gw¯þA)ÓªÖ¹ÿà¸S¿VËRYó/ÌéÖÒÚÇ/(~\82pÂá²\87Ú¼\7fúáK_ïÊJ[v\ eÖÙ1+Jÿ¢ªí¼«y>\8eêl^Û¼<ÏÜñ\vw\97{\8eª¾\8e7\8b\87\9f\10\8e\96nþmt\875ôJ\12²q    ÖmÅSMi«\15üȼ\86AZ0Æ9ú7$\a\7f©\18éÅÁ¹\f!/\17µÏ      .ZN\19øc%z`y<\94SpÊE«\ 3\1c¹\12m\82W\16\1d\9d©\ 4ÞbTmö)ÍàgF·ñ`,\9cçèÀ\19½æ\12\97S\v\f;éÑsѱÇ\17Ì\86Ùó+òß,\18¦\93\1fò»Ó)\ 4\b\86¥\f³½\98\832\15\ 3\1cÅÐ\9f\1c=u\ÓI!\0FÝ¡7\92D'KÊÐá\90\86Ú«!\82æsf?9È\97Ñ\ 33ÓKVD\eÑu:\ 1\9dßè@m\82¸XT6Ág\8e¶+Kï\7fx¬Ù\9c1¸VÑsZ\e:Av¦øÍù\98±+ÔØ"<¼Ì ­¶xÝY¼\83°ÿ\9d\8dFÇdi"-»ÙÑû°¥9a  4c`:W´ÄØeÎÓ\9e4òp\87KqOj­ÁÝ\fNl\96-ïèøÎ7OýW{g\ fbW\11\86anw\15d\9b4b#\bbL\90ùÿi\82\85\82\85\11\11\8dA\13;Q\91°),ìba\13\fÑBÁJ\ 4\9b\14B,\ 2"\b\96\16\16¦S\14\r¨H\ 4\11ü©DÄ÷ýfîÉÆì¦\v
++y\9feYö\9c;sf¾ù¾á\9ef\9e^\vÏ\83õ\14Ǻîå<Ûíü2Ì: ïÜ<å\89©¦y\8e\e\ 5|ôÛ\95`~=;\12\14:<¤\8c\806^-\fFÎÉd\84È:t\8cH"ÍR¦â\8f\12c¦JqñÐ!$\993fÎׯ\7f\8a\1fn¹ÚÌ­Æ\1c§Unã§ÛËU\88ÌBB¡ï`îºÚjų\91÷\88>­}>#á{¦ÝÑÎÝc%òÁôsS0È¥Å×¶ì\90M,hV\92åvD\8e {\9d7\7f_
++TGbñk¡0;sà\b\95/Eø\8cç±tè>Ò\98GccB4kDÉù\82\98\9fe\ 6ò¥ \ 4\189ÌÈ
++½q\rR`G\8e\aÓ¡\16\9c·\âI\83XA\94cÝ8üÐ\v÷\ 2dr¡ÍÏÏu¤yÒ]ç,¼±/P`\88ò±Ï;¬\ 1V"bóÉØ)B\9b¾½\88Øa¢\94\"K±+à!ئ°²\9e\9eÁ\88\90wzóx\8e\1eE\80\81éFs\1eU}\99\13\0\8b§þ\ f«\85\85ãcQS4p:\87\1a·¢@nôH\9b#ÇË\97Ââ¸\8faÀhSýfÌØ])VtH©\86ü¤å\10©G\81': p³Ó«\88\8a\88\11\95Ç£\ f\91\v\9eAÀ«\ 1V\ f«\96©ÏÌXT|"$ǽ\ 5;1\83\18y¶_CqFîKqÄ(¡\96:ö¯\9e¸°¨\96\82j\ e(ÈÂ\1aÃ\1cÐ\98NB\84\ 4µ\8c1q'¢¸Ò^\17\85\10B\b!\84\10B\b!\84\10B\b!\84\10B\b!\84\10B\b!\84\10B\b!\84\10B\b!\84\10B\b!\84\10B\b!\84\10B\bq\83\91ÿO\b!\84\10B\b!\84¸\19¸âÿ»üÛ¾\aÿ}w½ztñjm¿|߯Ã\87\17ãzõ±9Ãèá»çÓ\ 3O\ eW\9c¯ëÕó\8bóìáûo\1f^@\1fÂzõêÖæúÕ¾ÀËv\9d.°Ï\1f9ð·]\8f%¯Wg\16?ÚÁßßz\96×sËìÇú?Ëþ¿ºóOóÿ\95\80~Üm\9bñ\í\ 5tËx\9e;|ÇgÃó\17ýzÕì:\e\9d>uï\1fvݧtËêÜuü\7f¯ìðñ\9dxozüüðÀ]47\19\9dm§.\f§\99§©Äî½±u¥Ýkw\r\8f_(Ã-÷®Ýcãíï··¦soº\ 1\ fnmbÿÍ\87/ü0¼zÃi³qËñy/}ðÌx^«mxÒ\1eZæ|üî§.\rç^ð£Ý\976Î#ø=´ÿÈ/Ó«7Ýy\17\97µ¸Ö¹7¼\81\8fá÷\89\9fâ¹éÇ\vÃ\ 3÷¶ÝÛÝ\81waY÷§Ï¾øÅ¸×üpĽ¿ÜûëÖ\13\97\86\ 3¯§Ñç¾eîÇ?96\1dx\9bv'\97ù]ë¹{s\89ç±\1f\7f~gúêòô0.óûúüÑ1¿æg<\1fXòùè·\8f¿>îõéS<i÷è\9d;üÝGç\87\93\8e\ 6\18!\84\10B\bñ_c\8e½>ü\83ÎѨWh:tÔÈ\85îKí%¸LqaÌÙÇ^\9b§`/Ò4éó\90õ\85\84o\93Ñ<zÔúEO_[À[Ìt\15îâ¸+)ÆVñ\84\12Ûp-ÆÄ\86øC=\9e\vè´öè\12\9e\e=M\7fÍ»\9a\8aI
++£Ë=t\8c\80\90ìËø.NÌÿ\8dã\ fó6\97gEûPRî#\ 6¾&×9n4J±vOÇ$¾Ï÷y\1f³+i\87Ã3ú\9c\16ÇcÂ×i
++é\92)&)¼ÃÛEJÑ#d\81\8b\94\12s¢ú±Si\89\81\9e\8bAJ\88 Úeº\ 6#~j+9ô^p§Y_\88\f\17¢õhfQ,(¥}ÝQ\10\99\8bç<±þyx6\13\92£\85V¸R\1dA«Ó\97ê]G\9ckâ}Ê\19óô:v$Dp\88Xd0ç|\11d:&\11\ e½I¬Í_Y\1d{uλÆ\97²\1dNÏ%\1e\9a\91\ebP\9ezsË=ÌÓâU\937\9fjîÎä\84t\8eÎ1îá\ eí\8d\96ÃF\15i©È2¤\84ö\v!\84\10B\b!\84\10âfà\1fx2 Ñ\0\0\80\0
+\ No newline at end of file
diff --git a/patches/e2fsprogs-tests-f_expisize_ea_del.patch b/patches/e2fsprogs-tests-f_expisize_ea_del.patch
new file mode 100644 (file)
index 0000000..30b82d7
Binary files /dev/null and b/patches/e2fsprogs-tests-f_expisize_ea_del.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_bad_blk.patch b/patches/e2fsprogs-tests-f_extents_bad_blk.patch
new file mode 100644 (file)
index 0000000..71c7134
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_bad_blk.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_ee_block.patch b/patches/e2fsprogs-tests-f_extents_ee_block.patch
new file mode 100644 (file)
index 0000000..db91a60
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_ee_block.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_ee_len.patch b/patches/e2fsprogs-tests-f_extents_ee_len.patch
new file mode 100644 (file)
index 0000000..4b9eb02
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_ee_len.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_ee_start.patch b/patches/e2fsprogs-tests-f_extents_ee_start.patch
new file mode 100644 (file)
index 0000000..7f25753
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_ee_start.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_eh_depth.patch b/patches/e2fsprogs-tests-f_extents_eh_depth.patch
new file mode 100644 (file)
index 0000000..af9a98f
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_eh_depth.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_eh_entries.patch b/patches/e2fsprogs-tests-f_extents_eh_entries.patch
new file mode 100644 (file)
index 0000000..29efec3
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_eh_entries.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_eh_magic.patch b/patches/e2fsprogs-tests-f_extents_eh_magic.patch
new file mode 100644 (file)
index 0000000..0f0f67c
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_eh_magic.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_eh_max.patch b/patches/e2fsprogs-tests-f_extents_eh_max.patch
new file mode 100644 (file)
index 0000000..544770c
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_eh_max.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_ei_block.patch b/patches/e2fsprogs-tests-f_extents_ei_block.patch
new file mode 100644 (file)
index 0000000..da4b25b
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_ei_block.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_ei_leaf.patch b/patches/e2fsprogs-tests-f_extents_ei_leaf.patch
new file mode 100644 (file)
index 0000000..8b73934
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_ei_leaf.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_imbalanced_tree.patch b/patches/e2fsprogs-tests-f_extents_imbalanced_tree.patch
new file mode 100644 (file)
index 0000000..8962c36
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_imbalanced_tree.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_inrlevel-incons.patch b/patches/e2fsprogs-tests-f_extents_inrlevel-incons.patch
new file mode 100644 (file)
index 0000000..be1a2ea
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_inrlevel-incons.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_orphan_blks.patch b/patches/e2fsprogs-tests-f_extents_orphan_blks.patch
new file mode 100644 (file)
index 0000000..7f950fa
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_orphan_blks.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_overlap.patch b/patches/e2fsprogs-tests-f_extents_overlap.patch
new file mode 100644 (file)
index 0000000..4706874
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_overlap.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_res_blk.patch b/patches/e2fsprogs-tests-f_extents_res_blk.patch
new file mode 100644 (file)
index 0000000..f89f900
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_res_blk.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_shrd_blk.patch b/patches/e2fsprogs-tests-f_extents_shrd_blk.patch
new file mode 100644 (file)
index 0000000..6139009
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_shrd_blk.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_split.patch b/patches/e2fsprogs-tests-f_extents_split.patch
new file mode 100644 (file)
index 0000000..2eaa58f
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_split.patch differ
diff --git a/patches/e2fsprogs-tests-f_extents_unsorted.patch b/patches/e2fsprogs-tests-f_extents_unsorted.patch
new file mode 100644 (file)
index 0000000..82678ac
Binary files /dev/null and b/patches/e2fsprogs-tests-f_extents_unsorted.patch differ
diff --git a/patches/e2fsprogs-tests-f_ibadness.patch b/patches/e2fsprogs-tests-f_ibadness.patch
new file mode 100644 (file)
index 0000000..3f4328b
Binary files /dev/null and b/patches/e2fsprogs-tests-f_ibadness.patch differ
diff --git a/patches/e2fsprogs-tests-f_ibadness_bad_extents.patch b/patches/e2fsprogs-tests-f_ibadness_bad_extents.patch
new file mode 100644 (file)
index 0000000..3ade00b
Binary files /dev/null and b/patches/e2fsprogs-tests-f_ibadness_bad_extents.patch differ
diff --git a/patches/e2fsprogs-tests-f_jchksum_bblk.patch b/patches/e2fsprogs-tests-f_jchksum_bblk.patch
new file mode 100644 (file)
index 0000000..25ab7df
Binary files /dev/null and b/patches/e2fsprogs-tests-f_jchksum_bblk.patch differ
diff --git a/patches/e2fsprogs-tests-f_jchksum_blast_trans.patch b/patches/e2fsprogs-tests-f_jchksum_blast_trans.patch
new file mode 100644 (file)
index 0000000..f5cc619
Binary files /dev/null and b/patches/e2fsprogs-tests-f_jchksum_blast_trans.patch differ
diff --git a/patches/e2fsprogs-tests-f_jchksum_remount.patch b/patches/e2fsprogs-tests-f_jchksum_remount.patch
new file mode 100644 (file)
index 0000000..e310b79
Binary files /dev/null and b/patches/e2fsprogs-tests-f_jchksum_remount.patch differ
diff --git a/patches/e2fsprogs-tests-f_large_ea.patch b/patches/e2fsprogs-tests-f_large_ea.patch
new file mode 100644 (file)
index 0000000..373ed10
Binary files /dev/null and b/patches/e2fsprogs-tests-f_large_ea.patch differ
diff --git a/patches/e2fsprogs-tests-f_many_subdirs.patch b/patches/e2fsprogs-tests-f_many_subdirs.patch
new file mode 100644 (file)
index 0000000..74dcb0d
Binary files /dev/null and b/patches/e2fsprogs-tests-f_many_subdirs.patch differ
diff --git a/patches/e2fsprogs-tests-f_mmp.patch b/patches/e2fsprogs-tests-f_mmp.patch
new file mode 100644 (file)
index 0000000..b9dd01a
--- /dev/null
@@ -0,0 +1,169 @@
+Index: e2fsprogs/tests/f_mmp/name
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_mmp/name
+@@ -0,0 +1 @@
++enable MMP during mke2fs
+Index: e2fsprogs/tests/f_mmp/script
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_mmp/script
+@@ -0,0 +1,24 @@
++FSCK_OPT=-yf
++touch $TMPFILE
++
++stat -f $TMPFILE | grep "Type: tmpfs" > /dev/null
++if [ $? == 0 ] ; then
++      echo "skipped for tmpfs (no O_DIRECT support)"
++      return 0
++fi
++
++$MKE2FS -q -F -o Linux -b 1024 -O mmp $TMPFILE 100 > $test_name.log 2>&1
++status=$?
++if [ "$status" != 0 ] ; then
++      echo "mke2fs -O mmp failed" >  $test_name.failed
++fi
++
++$FSCK $FSCK_OPT $TMPFILE > $test_name.log 2>&1
++status=$?
++if [ "$status" = 0 ] ; then
++      echo "ok"
++      touch $test_name.ok
++else
++      echo "e2fsck with MMP enabled failed" >  $test_name.failed
++fi
++
+Index: e2fsprogs/tests/f_mmp_off/name
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_mmp_off/name
+@@ -0,0 +1 @@
++disable MMP
+Index: e2fsprogs/tests/f_mmp_off/script
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_mmp_off/script
+@@ -0,0 +1,30 @@
++FSCK_OPT=-yf
++touch $TMPFILE
++
++stat -f $TMPFILE | grep "Type: tmpfs" > /dev/null
++if [ $? == 0 ] ; then
++      echo "skipped for tmpfs (no O_DIRECT support)"
++      return 0
++fi
++
++$MKE2FS -q -F -o Linux -b 1024 -O mmp $TMPFILE 100 > $test_name.log 2>&1
++status=$?
++if [ "$status" != 0 ] ; then
++      echo "mke2fs -O mmp failed" >  $test_name.failed
++fi
++
++$TUNE2FS -O ^mmp $TMPFILE > $test_name.log 2>&1
++status=$?
++if [ "$status" != 0 ] ; then
++      echo "tune2fs -O ^mmp failed" >  $test_name.failed
++fi
++
++$FSCK $FSCK_OPT  $TMPFILE > $test_name.log 2>&1
++status=$?
++if [ "$status" = 0 ] ; then
++      echo "ok"
++      touch $test_name.ok
++else
++      echo "e2fsck after MMP disable failed" >  $test_name.failed
++fi
++
+Index: e2fsprogs/tests/f_mmp_on/name
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_mmp_on/name
+@@ -0,0 +1 @@
++enable MMP using tune2fs
+Index: e2fsprogs/tests/f_mmp_on/script
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_mmp_on/script
+@@ -0,0 +1,30 @@
++FSCK_OPT=-yf
++touch $TMPFILE
++
++stat -f $TMPFILE | grep "Type: tmpfs" > /dev/null
++if [ $? == 0 ] ; then
++      echo "skipped for tmpfs (no O_DIRECT support)"
++      return 0
++fi
++
++$MKE2FS -q -F -o Linux -b 1024 $TMPFILE 100 > $test_name.log 2>&1
++status=$?
++if [ "$status" != 0 ] ; then
++      echo "mke2fs failed" >  $test_name.failed
++fi
++
++$TUNE2FS -O mmp $TMPFILE > $test_name.log 2>&1
++status=$?
++if [ "$status" != 0 ] ; then
++      echo "tune2fs -O mmp failed" >  $test_name.failed
++fi
++
++$FSCK $FSCK_OPT  $TMPFILE > $test_name.log 2>&1
++status=$?
++if [ "$status" = 0 ] ; then
++      echo "ok"
++      touch $test_name.ok
++else
++      echo "e2fsck with MMP enabled failed" >  $test_name.failed
++fi
++
+Index: e2fsprogs/tests/f_mmp_corrupt/name
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_mmp_corrupt/name
+@@ -0,0 +1 @@
++repair MMP when it is corrupted
+Index: e2fsprogs/tests/f_mmp_corrupt/script
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_mmp_corrupt/script
+@@ -0,0 +1,41 @@
++FSCK_OPT=-yf
++touch $TMPFILE
++
++stat -f $TMPFILE | grep "Type: tmpfs" > /dev/null
++if [ $? == 0 ] ; then
++      echo "skipped for tmpfs (no O_DIRECT support)"
++      return 0
++fi
++
++echo "make the test image ..." > $test_name.log
++$MKE2FS -q -F -o Linux -b 1024 -O mmp $TMPFILE 100 >> $test_name.log 2>&1
++status=$?
++if [ "$status" != 0 ] ; then
++      echo "mke2fs -O mmp failed" >  $test_name.failed
++      exit 1
++fi
++
++# create a corrupted image
++mmp_block=`$DEBUGFS -R "dump_mmp" $TMPFILE 2>/dev/null | grep "MMP Block" | awk '{print $NF}'`
++echo "mmp_block is: $mmp_block" >> $test_name.log
++echo "corrupt the mmp ..." >> $test_name.log
++dd conv=notrunc if=/dev/zero of=$TMPFILE bs=1k count=1 seek=$mmp_block >> $test_name.log 2>&1
++
++echo "the first fsck ..." >> $test_name.log
++$FSCK $FSCK_OPT $TMPFILE >> $test_name.log 2>&1
++status=$?
++if [ "$status" != 0 ] ; then
++      echo "the second fsck ..." >> $test_name.log
++      $FSCK $FSCK_OPT $TMPFILE >> $test_name.log 2>&1
++      status=$?
++      if  [ "$status" = 0 ] ; then
++      echo "ok"
++      touch $test_name.ok
++      else
++      echo "the second fsck with corrupted mmp failed" >  $test_name.failed
++      fi
++else
++      echo "the first fsck with corrupted mmp failed" >  $test_name.failed
++fi
++
++rm -f $TMPFILE
diff --git a/patches/e2fsprogs-tests-f_random_corruption.patch b/patches/e2fsprogs-tests-f_random_corruption.patch
new file mode 100644 (file)
index 0000000..0d64b48
--- /dev/null
@@ -0,0 +1,330 @@
+The f_random_corruption test enables a random subset of filesystem features,
+picks one of the valid filesystem block and inode sizes, and a random device
+size and creates a new filesystem with those parameters.
+
+It is possible to disable the running of the test by setting the environment
+variable F_RANDOM_CORRUPTION=skip.  By default the test script is run only
+one time, but setting the LOOP_COUNT variable allows the test to run multiple
+times.
+
+If the script is running as root the filesystem is mounted and populated with
+file data to allow a more useful test filesystem to be generated.  In some
+cases the kernel may not support the requested filesystem features and the
+filesystem cannot be mounted.  This is not considered a test failure.
+
+The resulting filesystem is corrupted with both random data and by shifting
+data from one part of the device to another and then repaired by e2fsck.
+In some rare cases the random corruption is severe enough that the filesystem
+is not recoverable (e.g. small filesystem with no backup superblock has bad
+superblock corruption) but in most cases "e2fsck -fy" should be able to fix
+all errors in some way.
+
+After e2fsck has repaired the filesystem, it is optionally mounted (if the
+environment variable MOUNT_AFTER_CORRUPTION=yes is set) and the test files
+created in the filesystem are deleted.  This verifies that the fixes in the
+filesystem are sufficient for the kernel to use the filesystem without error.
+Since there is some possibility of the kernel oopsing if there is a filesystem
+bug, this part of the test is not enabled by default.
+
+Signed-off-by: Kalpak Shah <kalpak@clusterfs.com>
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/tests/f_random_corruption/script
+===================================================================
+--- /dev/null
++++ e2fsprogs/tests/f_random_corruption/script
+@@ -0,0 +1,272 @@
++# This is to make sure that if this test fails other tests can still be run
++# instead of doing an exit. We break before the end of the loop.
++export LOOP_COUNT=${LOOP_COUNT:-1}
++export COUNT=0
++
++while [ $COUNT -lt $LOOP_COUNT ]; do
++[ "$F_RANDOM_CORRUPTION" = "skip" ] && echo "skipped" && break
++
++# choose block and inode sizes randomly
++BLK_SIZES=(1024 2048 4096)
++INODE_SIZES=(128 256 512 1024)
++
++SEED=$(head -1 /dev/urandom | od -N 1 | awk '{ print $2 }')
++RANDOM=$SEED
++
++IMAGE=${IMAGE:-$TMPFILE}
++DATE=`date '+%Y%m%d%H%M%S'`
++ARCHIVE=$IMAGE.$DATE
++SIZE=${SIZE:-$(( 192000 + RANDOM + RANDOM )) }
++FS_TYPE=${FS_TYPE:-ext3}
++BLK_SIZE=${BLK_SIZES[(( $RANDOM % ${#BLK_SIZES[*]} ))]}
++INODE_SIZE=${INODE_SIZES[(( $RANDOM % ${#INODE_SIZES[*]} ))]}
++DEF_FEATURES="sparse_super,filetype,dir_index"
++FEATURES=${FEATURES:-$DEF_FEATURES}
++MOUNT_OPTS="-o loop"
++MNTPT=$test_dir/temp
++OUT=$test_name.log
++FAILED=$test_name.failed
++OKFILE=$test_name.ok
++
++# Do you want to try and mount the filesystem?
++MOUNT_AFTER_CORRUPTION=${MOUNT_AFTER_CORRUPTION:-"no"}
++# Do you want to remove the files from the mounted filesystem?
++# Ideally use it only in test environment.
++REMOVE_FILES=${REMOVE_FILES:-"no"}
++
++# In KB
++CORRUPTION_SIZE=${CORRUPTION_SIZE:-64}
++CORRUPTION_ITERATIONS=${CORRUPTION_ITERATIONS:-5}
++
++MKFS=../misc/mke2fs
++E2FSCK=../e2fsck/e2fsck
++FIRST_FSCK_OPTS="-fyv"
++SECOND_FSCK_OPTS="-fyv"
++
++# Lets check if the image can fit in the current filesystem.
++BASE_DIR=`dirname $IMAGE`
++BASE_AVAIL_BLOCKS=`df -P -k $BASE_DIR  | awk '/%/ { print $4 }'`
++
++if (( BASE_AVAIL_BLOCKS < NUM_BLKS * (BLK_SIZE / 1024) )); then
++      echo "$BASE_DIR does not have enough space to accomodate test image."
++      echo "Skipping test...."
++      break;
++fi
++
++# Lets have a journal more times than not.
++HAVE_JOURNAL=$((RANDOM % 12 ))
++if (( HAVE_JOURNAL == 0 )); then
++      FS_TYPE="ext2"
++      HAVE_JOURNAL=""
++else
++      HAVE_JOURNAL="-j"
++fi
++
++# meta_bg and resize_inode features should not be enabled simultaneously
++META_BG=$(( $RANDOM % 12 ))
++if (( META_BG == 0 )); then
++      FEATURES=$FEATURES,meta_bg,^resize_inode
++else
++      FEATURES=$FEATURES,resize_inode
++fi
++
++modprobe ext4 2> /dev/null
++
++# If ext4 is present in the kernel then we can play with ext4 options
++EXT4=`grep ext4 /proc/filesystems 2> /dev/null`
++if [ -n "$EXT4" ]; then
++      USE_EXT4=$((RANDOM % 2 ))
++      if (( USE_EXT4 == 1 )); then
++              FS_TYPE="ext4"
++      fi
++fi
++
++if [ "$FS_TYPE" = "ext4" ]; then
++      UNINIT_GROUPS=$((RANDOM % 12 ))
++      if (( UNINIT_GROUPS == 0 )); then
++              FEATURES=$FEATURES,uninit_bg
++      fi
++      EXPAND_ESIZE=$((RANDOM % 12 ))
++      if (( EXPAND_EISIZE == 0 )); then
++              FIRST_FSCK_OPTS="$FIRST_FSCK_OPTS -Eexpand_extra_isize"
++      fi
++fi
++
++MKFS_OPTS="$HAVE_JOURNAL -b $BLK_SIZE -I $INODE_SIZE -O $FEATURES"
++
++NUM_BLKS=$(((SIZE * 1024) / BLK_SIZE))
++
++log()
++{
++      [ "$VERBOSE" ] && echo "$*"
++      echo "$*" >> $OUT
++}
++
++error()
++{
++      log "$*"
++      echo "$*" >> $FAILED
++}
++
++unset_vars()
++{
++      unset IMAGE DATE ARCHIVE FS_TYPE SIZE BLK_SIZE MKFS_OPTS MOUNT_OPTS
++      unset E2FSCK FIRST_FSCK_OPTS SECOND_FSCK_OPTS OUT FAILED OKFILE
++}
++
++cleanup()
++{
++      [ "$1" ] && error "$*" || error "Error occured..."
++      umount -f $MNTPT > /dev/null 2>&1 | tee -a $OUT
++      [ -d $MNTPT ] && rmdir $MNTPT
++      cp $OUT $OUT.$DATE
++      echo " failed"
++      echo "error: *** This appears to be a bug in e2fsprogs ***"
++      echo "Please contact linux-ext4@vger.kernel.org for further assistance."
++      echo "Include $OUT.$DATE, and save $ARCHIVE locally for reference."
++      unset_vars
++      break;
++}
++
++echo -n "Random corruption test for e2fsck:"
++# Truncate the output log file
++rm -f $FAILED $OKFILE
++> $OUT
++
++get_random_location()
++{
++      total=$1
++
++      tmp=$(((RANDOM * 32768) % total))
++
++      # Try and have more corruption in metadata at the start of the
++      # filesystem.
++      if ((tmp % 3 == 0 || tmp % 5 == 0 || tmp % 7 == 0)); then
++              tmp=$((tmp % 32768))
++      fi
++
++      echo $tmp
++}
++
++make_fs_dirty()
++{
++      from=`get_random_location $NUM_BLKS`
++
++      # Number of blocks to write garbage into should be within fs and should
++      # not be too many.
++      num_blks_to_dirty=$((RANDOM % $1))
++
++      # write garbage into the selected blocks
++      [ ! -c /dev/urandom ] && return
++      log "writing ${num_blks_to_dirty}kB random garbage at offset ${from}kB"
++      dd if=/dev/urandom of=$IMAGE bs=1kB seek=$from conv=notrunc \
++              count=$num_blks_to_dirty >> $OUT 2>&1
++}
++
++
++touch $IMAGE
++log "Format the filesystem image..."
++log
++# Write some garbage blocks into the filesystem to make sure e2fsck has to do
++# a more difficult job than checking blocks of zeroes.
++log "Copy some random data into filesystem image...."
++make_fs_dirty 32768
++log "$MKFS $MKFS_OPTS -F $IMAGE $NUM_BLKS >> $OUT"
++$MKFS $MKFS_OPTS -F $IMAGE $NUM_BLKS >> $OUT 2>&1
++if [ $? -ne 0 ]; then
++      zero_size=`grep "Device size reported to be zero" $OUT`
++      short_write=`grep "Attempt to write block from filesystem resulted in short write" $OUT`
++
++      if (( zero_size != 0 || short_write != 0 )); then
++              echo "mkfs failed due to device size of 0 or a short write. This is harmless and need not be reported."
++      else
++              cleanup "mkfs failed - internal error during operation. Aborting random regression test..."
++      fi
++fi
++
++if [ `id -u` = 0 ]; then
++      mkdir -p $MNTPT
++      if [ $? -ne 0 ]; then
++              log "Failed to create or find mountpoint...."
++      else
++              mount -t $FS_TYPE $MOUNT_OPTS $IMAGE $MNTPT 2>&1 | tee -a $OUT
++              if [ ${PIPESTATUS[0]} -ne 0 ]; then
++                      log "Error mounting file system - skipped"
++              else
++                      df -h $MNTPT >> $OUT
++                      df -i $MNTPT >> $OUT
++                      log "Copying data into the test filesystem..."
++
++                      cp -r ../{.git,lib,misc,e2fsck,po} $MNTPT/ >> $OUT 2>&1
++                      sync
++                      umount -f $MNTPT > /dev/null 2>&1 | tee -a $OUT
++              fi
++      fi
++else
++      log "skipping mount test for non-root user"
++fi
++
++log "Corrupt the image by moving around blocks of data..."
++log
++for (( i = 0; i < $CORRUPTION_ITERATIONS; i++ )); do
++      from=`get_random_location $NUM_BLKS`
++      to=`get_random_location $NUM_BLKS`
++
++      log "Moving ${CORRUPTION_SIZE}kB from block ${from}kB to ${to}kB"
++      dd if=$IMAGE of=$IMAGE bs=1k count=$CORRUPTION_SIZE conv=notrunc skip=$from seek=$to >> $OUT 2>&1
++
++      # more corruption by overwriting blocks from within the filesystem.
++      make_fs_dirty $CORRUPTION_SIZE
++done
++
++# Copy the image for reproducing the bug.
++cp --sparse=always $IMAGE $ARCHIVE >> $OUT 2>&1
++
++log "First pass of fsck..."
++$E2FSCK $FIRST_FSCK_OPTS $IMAGE >> $OUT 2>&1
++RET=$?
++
++# Run e2fsck for the second time and check if the problem gets solved.
++# After we can report error with pass1.
++[ $((RET & 1)) == 0 ] || log "The first fsck corrected errors"
++[ $((RET & 2)) == 0 ] || error "The first fsck wants a reboot"
++[ $((RET & 4)) == 0 ] || error "The first fsck left uncorrected errors"
++[ $((RET & 8)) == 0 ] || error "The first fsck reports an operational error"
++[ $((RET & 16)) == 0 ] || error "The first fsck reports there was a usage error"
++[ $((RET & 32)) == 0 ] || error "The first fsck reports it was cancelled"
++[ $((RET & 128)) == 0 ] || error "The first fsck reports a library error"
++
++log "---------------------------------------------------------"
++
++log "Second pass of fsck..."
++$E2FSCK $SECOND_FSCK_OPTS $IMAGE >> $OUT 2>&1
++RET=$?
++[ $((RET & 1)) == 0 ] || cleanup "The second fsck corrected errors!"
++[ $((RET & 2)) == 0 ] || cleanup "The second fsck wants a reboot"
++[ $((RET & 4)) == 0 ] || cleanup "The second fsck left uncorrected errors"
++[ $((RET & 8)) == 0 ] || cleanup "The second fsck reports an operational error"
++[ $((RET & 16)) == 0 ] || cleanup "The second fsck reports a usage error"
++[ $((RET & 32)) == 0 ] || cleanup "The second fsck reports it was cancelled"
++[ $((RET & 128)) == 0 ] || cleanup "The second fsck reports a library error"
++
++[ -f $FAILED ] && cleanup
++
++if [ "$MOUNT_AFTER_CORRUPTION" = "yes" ]; then
++      mount -t $FS_TYPE $MOUNT_OPTS $IMAGE $MNTPT 2>&1 | tee -a $OUT
++      [ ${PIPESTATUS[0]} -ne 0 ] && log "error mounting file system - skipped"
++
++      [ "$REMOVE_FILES" = "yes" ] && rm -rf $MNTPT/* >> $OUT
++      umount -f $MNTPT > /dev/null 2>&1 | tee -a $OUT
++fi
++
++rm -f $ARCHIVE
++[ -d $MNTPT ] && rmdir $MNTPT
++
++# Report success
++echo " ok"
++echo "Succeeded..." > $OKFILE
++
++unset_vars
++
++COUNT=$((COUNT + 1))
++done
+Index: e2fsprogs/tests/Makefile.in
+===================================================================
+--- e2fsprogs.orig/tests/Makefile.in
++++ e2fsprogs/tests/Makefile.in
+@@ -27,6 +27,8 @@ mke2fs.conf: $(srcdir)/mke2fs.conf.in
+       $(CP) $(srcdir)/mke2fs.conf.in mke2fs.conf
+ check:: test_script
++      @echo "Removing remnants of earlier tests..."
++      $(RM) -f *~ *.log *.new *.failed *.ok test.img2*
+       @echo "Running e2fsprogs test suite..."
+       @echo " "
+       @./test_script
+@@ -66,7 +68,7 @@ testend: test_script ${TDIR}/image
+       @echo "If all is well, edit ${TDIR}/name and rename ${TDIR}."
+ clean::
+-      $(RM) -f *~ *.log *.new *.failed *.ok test.img test_script mke2fs.conf
++      $(RM) -f *~ *.log *.new *.failed *.ok test.img* test_script mke2fs.conf
+ distclean:: clean
+       $(RM) -f Makefile
diff --git a/patches/e2fsprogs-tests-f_uninit_blk-uninit-set_inode-uninit-not-set.patch b/patches/e2fsprogs-tests-f_uninit_blk-uninit-set_inode-uninit-not-set.patch
new file mode 100644 (file)
index 0000000..f1b63ee
Binary files /dev/null and b/patches/e2fsprogs-tests-f_uninit_blk-uninit-set_inode-uninit-not-set.patch differ
diff --git a/patches/e2fsprogs-tests-f_uninit_blks-used_blk-uninit-not-set.patch b/patches/e2fsprogs-tests-f_uninit_blks-used_blk-uninit-not-set.patch
new file mode 100644 (file)
index 0000000..554d4f9
Binary files /dev/null and b/patches/e2fsprogs-tests-f_uninit_blks-used_blk-uninit-not-set.patch differ
diff --git a/patches/e2fsprogs-tests-f_uninit_checksum_invalid.patch b/patches/e2fsprogs-tests-f_uninit_checksum_invalid.patch
new file mode 100644 (file)
index 0000000..74307ac
Binary files /dev/null and b/patches/e2fsprogs-tests-f_uninit_checksum_invalid.patch differ
diff --git a/patches/e2fsprogs-tests-f_uninit_disable.patch b/patches/e2fsprogs-tests-f_uninit_disable.patch
new file mode 100644 (file)
index 0000000..2d092ca
Binary files /dev/null and b/patches/e2fsprogs-tests-f_uninit_disable.patch differ
diff --git a/patches/e2fsprogs-tests-f_uninit_enable.patch b/patches/e2fsprogs-tests-f_uninit_enable.patch
new file mode 100644 (file)
index 0000000..2feb4b8
Binary files /dev/null and b/patches/e2fsprogs-tests-f_uninit_enable.patch differ
diff --git a/patches/e2fsprogs-tests-f_uninit_incorrect_free_inodes_count.patch b/patches/e2fsprogs-tests-f_uninit_incorrect_free_inodes_count.patch
new file mode 100644 (file)
index 0000000..e7c88b9
Binary files /dev/null and b/patches/e2fsprogs-tests-f_uninit_incorrect_free_inodes_count.patch differ
diff --git a/patches/e2fsprogs-tests-f_uninit_ino-ref_beyond_bg-itable-unused.patch b/patches/e2fsprogs-tests-f_uninit_ino-ref_beyond_bg-itable-unused.patch
new file mode 100644 (file)
index 0000000..a84d384
Binary files /dev/null and b/patches/e2fsprogs-tests-f_uninit_ino-ref_beyond_bg-itable-unused.patch differ
diff --git a/patches/e2fsprogs-tests-f_uninit_restart_fsck.patch b/patches/e2fsprogs-tests-f_uninit_restart_fsck.patch
new file mode 100644 (file)
index 0000000..c1bba53
Binary files /dev/null and b/patches/e2fsprogs-tests-f_uninit_restart_fsck.patch differ
diff --git a/patches/e2fsprogs-tests-s_basic_scan.patch b/patches/e2fsprogs-tests-s_basic_scan.patch
new file mode 100644 (file)
index 0000000..a273217
Binary files /dev/null and b/patches/e2fsprogs-tests-s_basic_scan.patch differ
diff --git a/patches/e2fsprogs-tunefs-dirty.patch b/patches/e2fsprogs-tunefs-dirty.patch
new file mode 100644 (file)
index 0000000..14acbeb
--- /dev/null
@@ -0,0 +1,30 @@
+Running tune2fs on a filesystem with an unrecovered journal can cause
+the tune2fs settings to be reverted when the journal is replayed.  Print
+a warning if this is detected so that the user isn't surprised if it
+happens.
+
+Signed-off-by: Jim Garlick <garlick@llnl.gov>
+Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
+
+Index: e2fsprogs/misc/tune2fs.c
+===================================================================
+--- e2fsprogs.orig/misc/tune2fs.c
++++ e2fsprogs/misc/tune2fs.c
+@@ -1855,6 +1855,17 @@ retry_open:
+               ext2fs_mark_super_dirty(fs);
+               printf(_("Setting stripe width to %d\n"), stripe_width);
+       }
++
++      /* Warn if file system needs recovery and it is opened for writing. */
++      if ((open_flag & EXT2_FLAG_RW) && !(mount_flags & EXT2_MF_MOUNTED) &&
++          (sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) &&
++          (sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER)) {
++              fprintf(stderr,
++                      _("Warning: needs_recovery flag is set. You may wish\n"
++                        "replay the journal then rerun this command, or any\n"
++                        "changes may be overwritten by journal recovery.\n"));
++      }
++
+       free(device_name);
+       remove_error_table(&et_ext2_error_table);
+       return (ext2fs_close(fs) ? 1 : 0);
diff --git a/patches/e2fsprogs-uninit-fixes.patch b/patches/e2fsprogs-uninit-fixes.patch
new file mode 100644 (file)
index 0000000..ed5c9e0
--- /dev/null
@@ -0,0 +1,36 @@
+Index: e2fsprogs/debugfs/set_fields.c
+===================================================================
+--- e2fsprogs.orig/debugfs/set_fields.c
++++ e2fsprogs/debugfs/set_fields.c
+@@ -583,6 +583,8 @@ void do_set_block_group_descriptor(int a
+                               current_fs->group_desc, set_bg),
+               sizeof(set_gd));
++      set_sb = *current_fs->super;
++
+       if (ss->func(ss, argv[3]) == 0) {
+               memcpy(ext2fs_group_desc(current_fs,
+                               current_fs->group_desc, set_bg),
+Index: e2fsprogs/misc/mke2fs.c
+===================================================================
+--- e2fsprogs.orig/misc/mke2fs.c
++++ e2fsprogs/misc/mke2fs.c
+@@ -284,6 +284,9 @@ _("Warning: the backup superblock/group 
+                               ext2fs_group_desc_csum_set(fs, group);
+                               ext2fs_free_blocks_count_add(fs->super, 1);
+                       }
++                      /* The kernel doesn't need to zero the itable blocks */
++                      ext2fs_bg_flags_set(fs, i, EXT2_BG_INODE_ZEROED |
++                                          ext2fs_bg_flags(fs, i));
+               }
+               group_block += fs->super->s_blocks_per_group;
+       }
+@@ -2378,6 +2381,8 @@ int main (int argc, char *argv[])
+       }
+ no_journal:
++      if (!super_only)
++              ext2fs_set_gdt_csum(fs);
+       if (!quiet)
+               printf(_("Writing superblocks and "
+                      "filesystem accounting information: "));
diff --git a/patches/e2fsprogs-version.patch b/patches/e2fsprogs-version.patch
new file mode 100644 (file)
index 0000000..fb85598
--- /dev/null
@@ -0,0 +1,14 @@
+Change to Lustre patch version number
+
+Index: e2fsprogs/version.h
+===================================================================
+--- e2fsprogs.orig/version.h
++++ e2fsprogs/version.h
+@@ -7,5 +7,5 @@
+  * file may be redistributed under the GNU Public License v2.
+  */
+-#define E2FSPROGS_VERSION "1.41.14"
+-#define E2FSPROGS_DATE "22-Dec-2010"
++#define E2FSPROGS_VERSION "1.41.90.wc1"
++#define E2FSPROGS_DATE "18-Mar-2011"
diff --git a/patches/libcom_err-unidiff.patch b/patches/libcom_err-unidiff.patch
new file mode 100644 (file)
index 0000000..ccb30e1
--- /dev/null
@@ -0,0 +1,15 @@
+diff -ru e2fsprogs-1.40.4/lib/et/Makefile.in e2fsprogs-cfs/lib/et/Makefile.in
+--- e2fsprogs-1.40.4/lib/et/Makefile.in
++++ e2fsprogs-cfs/lib/et/Makefile.in
+@@ -113,9 +113,9 @@
+       for i in $(srcdir)/test_cases/*.et ; do \
+               t=`basename $$i | sed -e 's/.et//'`; \
+               ./compile_et --build-tree $$i ; \
+-              diff -c $(srcdir)/test_cases/$$t.c $$t.c > $$t.failed; \
++              diff @UNI_DIFF_OPTS@ $(srcdir)/test_cases/$$t.c $$t.c > $$t.failed; \
+               if [ $$? -ne 0 ]; then echo Test case $$t failed; exit 1 ; fi ; \
+-              diff -c $(srcdir)/test_cases/$$t.h $$t.h >> $$t.failed; \
++              diff @UNI_DIFF_OPTS@ $(srcdir)/test_cases/$$t.h $$t.h >> $$t.failed; \
+               if [ $$? -ne 0 ]; then echo Test case $$t failed; exit 1 ; fi ; \
+               $(RM) -f $$t.c $$t.h $$t.failed; \
+               echo "Test case $$t succeeded" ; \
diff --git a/patches/series b/patches/series
new file mode 100644 (file)
index 0000000..ffe5002
--- /dev/null
@@ -0,0 +1,77 @@
+e2fsprogs-discard.patch
+e2fsprogs-version.patch
+e2fsprogs-misc.patch
+e2fsprogs-osx.patch
+e2fsprogs-dblist.patch
+e2fsprogs-bigjournal.patch
+e2fsprogs-e2fsck_exclusive.patch
+e2fsprogs-bad-ininode-ea.patch
+e2fsprogs-blkid-zfs.patch
+e2fsprogs-fiemap-lustre.patch
+e2fsprogs-count_wrong_valid.patch
+e2fsprogs-specdotin.patch
+e2fsprogs-extended_ops.patch
+e2fsprogs-lazy_journal_init.patch
+e2fsprogs-size_high.patch
+e2fsprogs-tests-f_many_subdirs.patch
+e2fsprogs-extents.patch
+e2fsprogs-tests-f_bad_ea_value.patch
+e2fsprogs-tests-f_extents_bad_blk.patch
+e2fsprogs-tests-f_extents_ee_block.patch
+e2fsprogs-tests-f_extents_ee_len.patch
+e2fsprogs-tests-f_extents_ee_start.patch
+e2fsprogs-tests-f_extents_eh_depth.patch
+e2fsprogs-tests-f_extents_eh_entries.patch
+e2fsprogs-tests-f_extents_eh_magic.patch
+e2fsprogs-tests-f_extents_eh_max.patch
+e2fsprogs-skip-extent-tests.patch
+e2fsprogs-tests-f_extents_ei_block.patch
+e2fsprogs-tests-f_extents_ei_leaf.patch
+e2fsprogs-tests-f_extents_imbalanced_tree.patch
+e2fsprogs-tests-f_extents_inrlevel-incons.patch
+e2fsprogs-tests-f_extents_orphan_blks.patch
+e2fsprogs-tests-f_extents_overlap.patch
+e2fsprogs-tests-f_extents_res_blk.patch
+e2fsprogs-tests-f_extents_shrd_blk.patch
+e2fsprogs-tests-f_extents_unsorted.patch
+e2fsprogs-tests-f_extents_split.patch
+e2fsprogs-config-before-cmdline.patch
+e2fsprogs-new-opt-shrdblks.patch
+e2fsprogs-tunefs-dirty.patch
+sles/e2fsprogs-SLES10--m-support.patch
+sles/libcom_err-no-static-buffer.patch
+sles/libcom_err-no-init_error_table.patch
+e2fsprogs-uninit-fixes.patch
+e2fsprogs-tests-f_uninit_enable.patch
+e2fsprogs-tests-f_uninit_disable.patch
+e2fsprogs-tests-f_uninit_blks-used_blk-uninit-not-set.patch
+e2fsprogs-tests-f_uninit_blk-uninit-set_inode-uninit-not-set.patch
+e2fsprogs-tests-f_uninit_checksum_invalid.patch
+e2fsprogs-tests-f_uninit_incorrect_free_inodes_count.patch
+e2fsprogs-tests-f_uninit_ino-ref_beyond_bg-itable-unused.patch
+e2fsprogs-tests-f_uninit_restart_fsck.patch
+e2fsprogs-expand-extra-isize.patch
+e2fsprogs-tests-f_expisize.patch
+e2fsprogs-tests-f_expisize_ea_del.patch
+e2fsprogs-ibadness-counter.patch
+e2fsprogs-tests-f_ibadness.patch
+e2fsprogs-tests-f_ibadness_bad_extents.patch
+e2fsprogs-tests-f_random_corruption.patch
+e2fsprogs-mmp.patch
+e2fsprogs-tests-f_mmp.patch
+e2fsprogs-tests-f_jchksum_bblk.patch
+e2fsprogs-tests-f_jchksum_blast_trans.patch
+e2fsprogs-tests-f_jchksum_remount.patch
+e2fsprogs-i_size-corruption.patch
+e2fsprogs-attr_cleanup.patch
+e2fsprogs-large-ea.patch
+e2fsprogs-tests-f_large_ea.patch
+e2fsprogs-lustre_ismounted.patch
+e2fsprogs-lfsck.patch
+e2fsprogs-add-trusted-fid.patch
+e2fsprogs-add-io_channel_readahead.patch
+e2fsprogs-e2scan.patch
+e2fsprogs-tests-s_basic_scan.patch
+e2fsprogs-data_in_dirent.patch
+e2fsprogs-tests-f_data_in_dirent.patch
+e2fsprogs-rpm_support.patch
diff --git a/patches/sles/11/rpm/README.SUSE b/patches/sles/11/rpm/README.SUSE
new file mode 100644 (file)
index 0000000..ef2be40
--- /dev/null
@@ -0,0 +1,11 @@
+e2fsprogs-devel
+---------------
+Since the e2fsprogs libraries has been split out into own packages,
+each having its own devel package
+libext2fs-devel
+libblkid-devel
+libuuid-devel
+libcom_err-devel
+the e2fsprogs-devel package is deprecated and is provided for temporary
+backwards compatibility only.
+
diff --git a/patches/sles/11/rpm/e2fsprogs-1.41.1-splash_support.patch b/patches/sles/11/rpm/e2fsprogs-1.41.1-splash_support.patch
new file mode 100644 (file)
index 0000000..e7ccde1
--- /dev/null
@@ -0,0 +1,186 @@
+Index: e2fsprogs-1.41.7/e2fsck/splash.c
+===================================================================
+--- /dev/null
++++ e2fsprogs-1.41.7/e2fsck/splash.c
+@@ -0,0 +1,100 @@
++/*
++ * add support for switching the splash screen on boot
++ */
++#include <stdio.h>
++#include <string.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <unistd.h>
++#include <errno.h>
++#include "splash.h"
++
++static int verbose = 0;
++
++/* nop implementation
++ */
++static void nop(void)
++{
++}
++
++static struct splash_ops nop_ops = {
++      .splash_on = nop,
++      .splash_off = nop
++};
++
++/*
++ *  bootsplash implementation
++ */
++#define BOOTSPLASH_CTL        "/proc/splash"
++
++static int bootsplash_exists(void)
++{
++      struct stat sb;
++
++      if (stat(BOOTSPLASH_CTL, &sb) == -1)
++              return 0;
++
++      if (S_ISREG(sb.st_mode))
++              return 1;
++
++      return 0;
++}
++
++/* write msg to splash control */
++static void bootsplash_msg(const char *msg, size_t size)
++{
++      int fd;
++      size_t written;
++
++      fd = open(BOOTSPLASH_CTL, O_WRONLY);
++      if (fd == -1) {
++              if (verbose)
++                      printf("cannot open %s\n", BOOTSPLASH_CTL);
++              return;
++      }
++
++      written = write(fd, msg, size);
++      if (written != size) {
++              if (verbose)
++                      printf("size = %i, written = %i\n", size, written);
++      }
++
++      close(fd);
++}
++
++static void bootsplash_on(void)
++{
++      if (verbose)
++              printf("setting bootsplash silent\n");
++      bootsplash_msg("silent\n", 7);
++}
++
++static void bootsplash_off(void)
++{
++      if (verbose)
++              printf("setting bootsplash verbose\n");
++      bootsplash_msg("verbose\n", 8);
++}
++
++static struct splash_ops bootsplash_ops = {
++      .splash_on = bootsplash_on,
++      .splash_off = bootsplash_off
++};
++
++/*
++ * Initialisation
++ */
++void splash_init(struct splash_ops **ops)
++{
++      if (bootsplash_exists())
++              *ops = &bootsplash_ops;
++      else
++              *ops = &nop_ops;
++}
++
++void splash_set_verbose(void)
++{
++      verbose = 1;
++}
++
+Index: e2fsprogs-1.41.7/e2fsck/splash.h
+===================================================================
+--- /dev/null
++++ e2fsprogs-1.41.7/e2fsck/splash.h
+@@ -0,0 +1,13 @@
++#ifndef _SPLASH_H
++#define _SPLASH_H
++
++struct splash_ops {
++      void (*splash_on)(void);
++      void (*splash_off)(void);
++};
++
++void splash_init(struct splash_ops **ops);
++void splash_set_verbose(void);
++
++#endif /* _SPLASH_H */
++
+Index: e2fsprogs-1.41.7/e2fsck/Makefile.in
+===================================================================
+--- e2fsprogs-1.41.7.orig/e2fsck/Makefile.in
++++ e2fsprogs-1.41.7/e2fsck/Makefile.in
+@@ -63,7 +63,7 @@ COMPILE_ET=$(top_builddir)/lib/et/compil
+ OBJS= crc32.o dict.o unix.o e2fsck.o super.o pass1.o pass1b.o pass2.o \
+       pass3.o pass4.o pass5.o journal.o badblocks.o util.o dirinfo.o \
+       dx_dirinfo.o ehandler.o problem.o message.o recovery.o region.o \
+-      revoke.o ea_refcount.o rehash.o profile.o prof_err.o pass6.o $(MTRACE_OBJ)
++      revoke.o ea_refcount.o rehash.o profile.o prof_err.o pass6.o splash.o $(MTRACE_OBJ)
+ @LFSCK_CMT@OBJS += lfsck_common.o
+ @LFSCK_CMT@LFSCK_OBJS = lfsck_common.o lfsck.o
+@@ -101,6 +101,7 @@ SRCS= $(srcdir)/e2fsck.c \
+       $(srcdir)/rehash.c \
+       $(srcdir)/region.c \
+       $(srcdir)/profile.c \
++      $(srcdir)/splash.c \
+       prof_err.c \
+       $(MTRACE_SRC)
+@@ -475,3 +476,5 @@ region.o: $(srcdir)/region.c $(srcdir)/e
+ profile.o: $(srcdir)/profile.c $(top_srcdir)/lib/et/com_err.h \
+  $(srcdir)/profile.h prof_err.h
+ prof_err.o: prof_err.c
++splash.o: splash.c splash.h
++
+Index: e2fsprogs-1.41.7/e2fsck/unix.c
+===================================================================
+--- e2fsprogs-1.41.7.orig/e2fsck/unix.c
++++ e2fsprogs-1.41.7/e2fsck/unix.c
+@@ -53,6 +53,7 @@ extern int optind;
+ #include "e2p/e2p.h"
+ #include "e2fsck.h"
+ #include "problem.h"
++#include "splash.h"
+ #include "../version.h"
+ /* Command line options */
+@@ -941,6 +942,7 @@ int main (int argc, char *argv[])
+       int sysval, sys_page_size = 4096;
+       __u32 features[3];
+       char *cp;
++      struct splash_ops *sops;
+       clear_problem_context(&pctx);
+ #ifdef MTRACE
+@@ -970,6 +972,7 @@ int main (int argc, char *argv[])
+               exit(FSCK_ERROR);
+       }
+       reserve_stdio_fds();
++      splash_init(&sops);
+       init_resource_track(&ctx->global_rtrack, NULL);
+       if (!(ctx->options & E2F_OPT_PREEN) || show_version_only)
+@@ -1284,6 +1287,7 @@ print_unsupp_features:
+               fatal_error(ctx, 0);
+       check_if_skip(ctx);
+       check_resize_inode(ctx);
++      sops->splash_off();
+       if (bad_blocks_file)
+               read_bad_blocks_file(ctx, bad_blocks_file, replace_bad_blocks);
+       else if (cflag)
diff --git a/patches/sles/11/rpm/e2fsprogs-1.41.4.de.po b/patches/sles/11/rpm/e2fsprogs-1.41.4.de.po
new file mode 100644 (file)
index 0000000..0347505
--- /dev/null
@@ -0,0 +1,5069 @@
+# Deutsche Übersetzungen für e2fsprogs
+# Copyright (C) 1996 Theodore Tso (msgids)
+# This file is distributed under the same license as the e2fsprogs package.
+# Olaf Klemke <olke@users.sourceforge.net>,2002
+# Marc Langer <marc@marclanger.de>,2003
+# Philipp Thomas <pth@suse.de>, 2007, 2008, 2009
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: e2fsprogs-1.41.4\n"
+"Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
+"POT-Creation-Date: 2009-01-26 20:41-0500\n"
+"PO-Revision-Date: 2009-03-09 19:33+0100\n"
+"Last-Translator: Philipp Thomas <pth@suse.de>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: e2fsck/badblocks.c:22
+#: misc/mke2fs.c:165
+#, c-format
+msgid "Bad block %u out of range; ignored.\n"
+msgstr "Bad block %u außerhalb des gültigen Bereichs; ignoriert.\n"
+
+#: e2fsck/badblocks.c:45
+msgid "while sanity checking the bad blocks inode"
+msgstr "während der logischen Prüfung des »Bad Block«-Inodes"
+
+#: e2fsck/badblocks.c:57
+msgid "while reading the bad blocks inode"
+msgstr "während des Lesens des »Bad Block«-Inodes"
+
+#: e2fsck/badblocks.c:71
+#: e2fsck/iscan.c:112
+#: e2fsck/scantest.c:109
+#: e2fsck/unix.c:1037
+#: e2fsck/unix.c:1120
+#: misc/badblocks.c:1148
+#: misc/badblocks.c:1156
+#: misc/badblocks.c:1170
+#: misc/badblocks.c:1182
+#: misc/dumpe2fs.c:505
+#: misc/e2image.c:576
+#: misc/e2image.c:672
+#: misc/e2image.c:688
+#: misc/mke2fs.c:181
+#: misc/tune2fs.c:1515
+#: resize/main.c:309
+#, c-format
+msgid "while trying to open %s"
+msgstr "beim Versuch, %s zu öffnen"
+
+#: e2fsck/badblocks.c:82
+#, c-format
+msgid "while trying popen '%s'"
+msgstr "beim Versuch, »%s« mittels »popen« zu öffnen"
+
+#: e2fsck/badblocks.c:93
+#: misc/mke2fs.c:188
+msgid "while reading in list of bad blocks from file"
+msgstr "beim Lesen der »Bad Block«-Liste aus der Datei"
+
+#: e2fsck/badblocks.c:104
+msgid "while updating bad block inode"
+msgstr "beim Updaten des »Bad Block«-Inodes"
+
+#: e2fsck/badblocks.c:130
+#, c-format
+msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
+msgstr "Warnung: Nicht zulässiger Block %u im »Bad Blocks«-Inode gefunden! Bereinigt.\n"
+
+#: e2fsck/ehandler.c:54
+#, c-format
+msgid "Error reading block %lu (%s) while %s.  "
+msgstr "Lesefehler - Block %lu (%s) während %s. "
+
+#: e2fsck/ehandler.c:57
+#, c-format
+msgid "Error reading block %lu (%s).  "
+msgstr "Lesefehler - Block %lu (%s). "
+
+#: e2fsck/ehandler.c:60
+#: e2fsck/ehandler.c:109
+msgid "Ignore error"
+msgstr "Ignoriere Fehler"
+
+#: e2fsck/ehandler.c:61
+msgid "Force rewrite"
+msgstr "Rückschreiben erzwingen"
+
+#: e2fsck/ehandler.c:103
+#, c-format
+msgid "Error writing block %lu (%s) while %s.  "
+msgstr "Schreibfehler - Block %lu (%s) während %s. "
+
+#: e2fsck/ehandler.c:106
+#, c-format
+msgid "Error writing block %lu (%s).  "
+msgstr "Schreibfehler - Block %lu (%s). "
+
+#: e2fsck/emptydir.c:56
+msgid "empty dirblocks"
+msgstr "leere Verzeichnisblöcke"
+
+#: e2fsck/emptydir.c:61
+msgid "empty dir map"
+msgstr "leere Verzeichnisliste"
+
+#: e2fsck/emptydir.c:97
+#, c-format
+msgid "Empty directory block %u (#%d) in inode %u\n"
+msgstr "leerer Verzeichnisblock %u (#%d) im Inode %u\n"
+
+#: e2fsck/extend.c:21
+#, c-format
+msgid "%s: %s filename nblocks blocksize\n"
+msgstr "%s: %s Dateiname nblocks Blockgröße\n"
+
+#: e2fsck/extend.c:43
+#, c-format
+msgid "Illegal number of blocks!\n"
+msgstr "Blockanzahl nicht zulässig!\n"
+
+#: e2fsck/extend.c:49
+#, c-format
+msgid "Couldn't allocate block buffer (size=%d)\n"
+msgstr "Konnte keinen Blockpuffer (Größe=%d) reservieren.\n"
+
+#: e2fsck/flushb.c:34
+#, c-format
+msgid "Usage: %s disk\n"
+msgstr "Aufruf: %s Laufwerk\n"
+
+#: e2fsck/flushb.c:63
+#, c-format
+msgid "BLKFLSBUF ioctl not supported!  Can't flush buffers.\n"
+msgstr "BLKFLSBUF ioctl nicht unterstützt!  Kann Puffer nicht leeren.\n"
+
+#: e2fsck/iscan.c:46
+#, c-format
+msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
+msgstr "Aufruf: %s [-F] [-I inode_buffer_blocks] Gerät\n"
+
+#: e2fsck/iscan.c:83
+#: e2fsck/unix.c:818
+#, c-format
+msgid "while opening %s for flushing"
+msgstr "beim Öffnen von %s für die Puffer-Leerung."
+
+#: e2fsck/iscan.c:88
+#: e2fsck/unix.c:824
+#: resize/main.c:285
+#, c-format
+msgid "while trying to flush %s"
+msgstr "während des Rückschreibeversuches auf %s"
+
+#: e2fsck/iscan.c:121
+#: e2fsck/scantest.c:116
+#: misc/e2image.c:482
+msgid "while opening inode scan"
+msgstr "beim Start des Inode-Scans"
+
+#: e2fsck/iscan.c:129
+#: misc/e2image.c:500
+msgid "while getting next inode"
+msgstr "beim Laden des nächsten Inodes"
+
+#: e2fsck/iscan.c:138
+#, c-format
+msgid "%u inodes scanned.\n"
+msgstr "%u Inodes untersucht.\n"
+
+#: e2fsck/journal.c:507
+msgid "reading journal superblock\n"
+msgstr "Lese Journal-Superblock\n"
+
+#: e2fsck/journal.c:564
+#, c-format
+msgid "%s: no valid journal superblock found\n"
+msgstr "%s: keinen gültigen Journal-Superblock gefunden\n"
+
+#: e2fsck/journal.c:573
+#, c-format
+msgid "%s: journal too short\n"
+msgstr "%s: Das Journal ist zu kurz\n"
+
+#: e2fsck/journal.c:858
+#, c-format
+msgid "%s: recovering journal\n"
+msgstr "%s: stelle das Journal wieder her\n"
+
+#: e2fsck/journal.c:860
+#, c-format
+msgid "%s: won't do journal recovery while read-only\n"
+msgstr "%s: Das Journal ist nur lesbar - Keine Wiederherstellung\n"
+
+#: e2fsck/journal.c:881
+#, c-format
+msgid "while trying to re-open %s"
+msgstr "beim Versuch, %s erneut zu öffnen"
+
+#: e2fsck/message.c:110
+msgid "aextended attribute"
+msgstr "aerweiterte Eigenschaft"
+
+#: e2fsck/message.c:111
+msgid "Aerror allocating"
+msgstr "AFehler beim Zuweisen"
+
+#: e2fsck/message.c:112
+msgid "bblock"
+msgstr "bBlock"
+
+#: e2fsck/message.c:113
+msgid "Bbitmap"
+msgstr "BBitmap"
+
+#: e2fsck/message.c:114
+msgid "ccompress"
+msgstr "ckomprimieren"
+
+#: e2fsck/message.c:115
+msgid "Cconflicts with some other fs @b"
+msgstr "CKonflikte mit anderen Dateisystemen @b"
+
+#: e2fsck/message.c:116
+msgid "iinode"
+msgstr "iInode"
+
+#: e2fsck/message.c:117
+msgid "Iillegal"
+msgstr "Iillegal(er)"
+
+#: e2fsck/message.c:118
+msgid "jjournal"
+msgstr "jJournal"
+
+#: e2fsck/message.c:119
+msgid "Ddeleted"
+msgstr "Dgelöscht"
+
+#: e2fsck/message.c:120
+msgid "ddirectory"
+msgstr "dVerzeichnis"
+
+#: e2fsck/message.c:121
+msgid "eentry"
+msgstr "eEintrag"
+
+#: e2fsck/message.c:122
+msgid "E@e '%Dn' in %p (%i)"
+msgstr "E@e »%Dn« in %p (%i)"
+
+#: e2fsck/message.c:123
+msgid "ffilesystem"
+msgstr "fDateisystem"
+
+#: e2fsck/message.c:124
+msgid "Ffor @i %i (%Q) is"
+msgstr "Ffür @i %i (%Q) ist"
+
+#: e2fsck/message.c:125
+msgid "ggroup"
+msgstr "gGruppe"
+
+#: e2fsck/message.c:126
+msgid "hHTREE @d @i"
+msgstr "hHTREE @d @i"
+
+#: e2fsck/message.c:127
+msgid "llost+found"
+msgstr "llost+found"
+
+#: e2fsck/message.c:128
+msgid "Lis a link"
+msgstr "List ein Link"
+
+#: e2fsck/message.c:129
+msgid "mmultiply-claimed"
+msgstr "mmehrfach beansprucht"
+
+#: e2fsck/message.c:130
+msgid "ninvalid"
+msgstr "nungültig"
+
+#: e2fsck/message.c:131
+msgid "oorphaned"
+msgstr "overwaist"
+
+#: e2fsck/message.c:132
+msgid "pproblem in"
+msgstr "pProblem in"
+
+#: e2fsck/message.c:133
+msgid "rroot @i"
+msgstr "rRoot @i"
+
+#: e2fsck/message.c:134
+msgid "sshould be"
+msgstr "ssollte sein"
+
+#: e2fsck/message.c:135
+msgid "Ssuper@b"
+msgstr "SSuper@b"
+
+#: e2fsck/message.c:136
+msgid "uunattached"
+msgstr "unicht verbunden"
+
+#: e2fsck/message.c:137
+msgid "vdevice"
+msgstr "vGerät"
+
+#: e2fsck/message.c:138
+msgid "xextent"
+msgstr "xErweiterung"
+
+#: e2fsck/message.c:139
+msgid "zzero-length"
+msgstr "zNull-Länge"
+
+#: e2fsck/message.c:150
+msgid "<The NULL inode>"
+msgstr "<Der NULL Inode>"
+
+#: e2fsck/message.c:151
+msgid "<The bad blocks inode>"
+msgstr "<Der »Bad Blocks«-Inode>"
+
+#: e2fsck/message.c:153
+msgid "<The ACL index inode>"
+msgstr "<Der »ACL Index«-Inode>"
+
+#: e2fsck/message.c:154
+msgid "<The ACL data inode>"
+msgstr "<Der »ACL Data«-Inode>"
+
+#: e2fsck/message.c:155
+msgid "<The boot loader inode>"
+msgstr "<Der »Boot Loader«-Inode>"
+
+#: e2fsck/message.c:156
+msgid "<The undelete directory inode>"
+msgstr "<Der »undelete directory«-Inode>"
+
+#: e2fsck/message.c:157
+msgid "<The group descriptor inode>"
+msgstr "<Des »group descriptor«-Inode>"
+
+#: e2fsck/message.c:158
+msgid "<The journal inode>"
+msgstr "<Der Journal-Inode>"
+
+#: e2fsck/message.c:159
+msgid "<Reserved inode 9>"
+msgstr "<Der reservierte Inode 9>"
+
+#: e2fsck/message.c:160
+msgid "<Reserved inode 10>"
+msgstr "<Der reservierte Inode 10>"
+
+#: e2fsck/message.c:323
+#, c-format
+msgid "regular file"
+msgstr "'reguläre Datei"
+
+#: e2fsck/message.c:325
+#, c-format
+msgid "directory"
+msgstr "Verzeichnis"
+
+#: e2fsck/message.c:327
+#, c-format
+msgid "character device"
+msgstr "zeichenorientiertes Gerät"
+
+#: e2fsck/message.c:329
+#, c-format
+msgid "block device"
+msgstr "Blockgerät"
+
+#: e2fsck/message.c:331
+#, c-format
+msgid "named pipe"
+msgstr "named pipe"
+
+#: e2fsck/message.c:333
+#, c-format
+msgid "symbolic link"
+msgstr "symbolische Verknüpfung"
+
+#: e2fsck/message.c:335
+#, c-format
+msgid "socket"
+msgstr " Socket"
+
+#: e2fsck/message.c:337
+#, c-format
+msgid "unknown file type with mode 0%o"
+msgstr "unbekannter Dateityp mit Modus 0%o"
+
+#: e2fsck/pass1b.c:215
+msgid "multiply claimed inode map"
+msgstr "mehrfach beanspruchte Inode-Liste"
+
+#: e2fsck/pass1b.c:567
+#: e2fsck/pass1b.c:700
+#, c-format
+msgid "internal error: can't find dup_blk for %u\n"
+msgstr "interner Fehler; dup_blk für %u nicht gefunden\n"
+
+#: e2fsck/pass1b.c:743
+msgid "returned from clone_file_block"
+msgstr "zurückgegeben von clone_file_block"
+
+#: e2fsck/pass1b.c:762
+#, c-format
+msgid "internal error: couldn't lookup EA block record for %u"
+msgstr "interner Fehler: EA Blockliste für %u wurde nicht gefunden"
+
+#: e2fsck/pass1b.c:774
+#, c-format
+msgid "internal error: couldn't lookup EA inode record for %u"
+msgstr "Interner Fehler: EA Inodeliste für %u wurde nicht gefunden"
+
+#: e2fsck/pass1.c:430
+#: e2fsck/pass2.c:780
+msgid "reading directory block"
+msgstr "lese Verzeichnisblock"
+
+#: e2fsck/pass1.c:552
+msgid "in-use inode map"
+msgstr "»in-use inode«-Liste"
+
+#: e2fsck/pass1.c:561
+msgid "directory inode map"
+msgstr "»directory inode«-Liste"
+
+#: e2fsck/pass1.c:569
+msgid "regular file inode map"
+msgstr "»regular file inode«-Liste"
+
+#: e2fsck/pass1.c:576
+msgid "in-use block map"
+msgstr "»in-use block«-Liste"
+
+#: e2fsck/pass1.c:630
+msgid "opening inode scan"
+msgstr "Starte Inode-Scan"
+
+#: e2fsck/pass1.c:654
+msgid "getting next inode from scan"
+msgstr "beim Lesen des nächsten Inodes"
+
+#: e2fsck/pass1.c:1122
+msgid "Pass 1"
+msgstr "Durchgang 1"
+
+#: e2fsck/pass1.c:1181
+#, c-format
+msgid "reading indirect blocks of inode %u"
+msgstr "lese indirekte Blöcke von Inode %u"
+
+#: e2fsck/pass1.c:1225
+msgid "bad inode map"
+msgstr "fehlerhafte Inode-Liste"
+
+#: e2fsck/pass1.c:1247
+msgid "inode in bad block map"
+msgstr "Inode in »Bad Blocks«-Liste"
+
+#: e2fsck/pass1.c:1267
+msgid "imagic inode map"
+msgstr "i»magic inode«-Liste"
+
+#: e2fsck/pass1.c:1294
+msgid "multiply claimed block map"
+msgstr "Den Eintrag in der Liste belegter Blöcke verdoppeln"
+
+#: e2fsck/pass1.c:1393
+msgid "ext attr block map"
+msgstr "ext attr block map"
+
+#: e2fsck/pass1.c:2134
+#, c-format
+msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
+msgstr "%6lu(%c): erwartete %6lu erhielt phys %6lu (Blockanzahl %lld)\n"
+
+#: e2fsck/pass1.c:2449
+msgid "block bitmap"
+msgstr "Block Bitmap"
+
+#: e2fsck/pass1.c:2453
+msgid "inode bitmap"
+msgstr "Inode Bitmap"
+
+#: e2fsck/pass1.c:2457
+msgid "inode table"
+msgstr "Inode-Tabelle"
+
+#: e2fsck/pass2.c:284
+msgid "Pass 2"
+msgstr "Durchgang 2"
+
+#: e2fsck/pass2.c:803
+msgid "Can not continue."
+msgstr "Fortsetzung nicht möglich."
+
+#: e2fsck/pass3.c:79
+msgid "inode done bitmap"
+msgstr "»inode done«-Bitmap"
+
+#: e2fsck/pass3.c:90
+msgid "Peak memory"
+msgstr "Peak-Memory"
+
+#: e2fsck/pass3.c:146
+msgid "Pass 3"
+msgstr "Durchgang 3"
+
+#: e2fsck/pass3.c:334
+msgid "inode loop detection bitmap"
+msgstr "»inode loop detection«-Bitmap"
+
+#: e2fsck/pass4.c:196
+msgid "Pass 4"
+msgstr "Durchgang 4"
+
+#: e2fsck/pass5.c:70
+msgid "Pass 5"
+msgstr "Durchgang 5"
+
+#: e2fsck/problem.c:50
+msgid "(no prompt)"
+msgstr "(nicht interaktiv)"
+
+#: e2fsck/problem.c:51
+msgid "Fix"
+msgstr "Repariere"
+
+#: e2fsck/problem.c:52
+msgid "Clear"
+msgstr "Bereinige"
+
+#: e2fsck/problem.c:53
+msgid "Relocate"
+msgstr "Zurücksetzen"
+
+#: e2fsck/problem.c:54
+msgid "Allocate"
+msgstr "Gebe frei"
+
+#: e2fsck/problem.c:55
+msgid "Expand"
+msgstr "Erweitere"
+
+#: e2fsck/problem.c:56
+msgid "Connect to /lost+found"
+msgstr "Verbinde nach /lost+found"
+
+#: e2fsck/problem.c:57
+msgid "Create"
+msgstr "Erstelle"
+
+#: e2fsck/problem.c:58
+msgid "Salvage"
+msgstr "Rette"
+
+#: e2fsck/problem.c:59
+msgid "Truncate"
+msgstr "Verkürze"
+
+#: e2fsck/problem.c:60
+msgid "Clear inode"
+msgstr "Bereinige Inode"
+
+#: e2fsck/problem.c:61
+msgid "Abort"
+msgstr "Abbrechen"
+
+#: e2fsck/problem.c:62
+msgid "Split"
+msgstr "Aufsplitten"
+
+#: e2fsck/problem.c:63
+msgid "Continue"
+msgstr "Fortsetzen"
+
+#: e2fsck/problem.c:64
+msgid "Clone multiply-claimed blocks"
+msgstr "multiply claimed block map"
+
+#: e2fsck/problem.c:65
+msgid "Delete file"
+msgstr "Lösche Datei"
+
+#: e2fsck/problem.c:66
+msgid "Suppress messages"
+msgstr "Ausgaben unterdrücken"
+
+#: e2fsck/problem.c:67
+msgid "Unlink"
+msgstr "Unlink"
+
+#: e2fsck/problem.c:68
+msgid "Clear HTree index"
+msgstr "Bereinige HTree-Index"
+
+#: e2fsck/problem.c:69
+msgid "Recreate"
+msgstr "Zurücksetzen"
+
+#: e2fsck/problem.c:78
+msgid "(NONE)"
+msgstr "(NICHTS)"
+
+#: e2fsck/problem.c:79
+msgid "FIXED"
+msgstr "REPARIERT"
+
+#: e2fsck/problem.c:80
+msgid "CLEARED"
+msgstr "BEREINIGT"
+
+#: e2fsck/problem.c:81
+msgid "RELOCATED"
+msgstr "ZURÜCKGESETZT"
+
+#: e2fsck/problem.c:82
+msgid "ALLOCATED"
+msgstr "FREIGEGEBEN"
+
+#: e2fsck/problem.c:83
+msgid "EXPANDED"
+msgstr "ERWEITERT"
+
+#: e2fsck/problem.c:84
+msgid "RECONNECTED"
+msgstr "WIEDER VERBUNDEN"
+
+#: e2fsck/problem.c:85
+msgid "CREATED"
+msgstr "ANGELEGT"
+
+#: e2fsck/problem.c:86
+msgid "SALVAGED"
+msgstr "GERETTET"
+
+#: e2fsck/problem.c:87
+msgid "TRUNCATED"
+msgstr "BEENDET"
+
+#: e2fsck/problem.c:88
+msgid "INODE CLEARED"
+msgstr "INODE BEREINIGT"
+
+#: e2fsck/problem.c:89
+msgid "ABORTED"
+msgstr "ABGEBROCHEN"
+
+#: e2fsck/problem.c:90
+msgid "SPLIT"
+msgstr "ABGESPALTET"
+
+#: e2fsck/problem.c:91
+msgid "CONTINUING"
+msgstr "SETZE FORT"
+
+#: e2fsck/problem.c:92
+msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
+msgstr "DOPPELTE/DEFEKTE BLÖCKE DUPLIZIERT"
+
+#: e2fsck/problem.c:93
+msgid "FILE DELETED"
+msgstr "DATEI GELÖSCHT"
+
+#: e2fsck/problem.c:94
+msgid "SUPPRESSED"
+msgstr "UNTERDRÜCKT"
+
+#: e2fsck/problem.c:95
+msgid "UNLINKED"
+msgstr "GETRENNT"
+
+#: e2fsck/problem.c:96
+msgid "HTREE INDEX CLEARED"
+msgstr "HTREE INDEX BEREINIGT"
+
+#: e2fsck/problem.c:97
+msgid "WILL RECREATE"
+msgstr "ANGELEGT"
+
+#. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
+#: e2fsck/problem.c:106
+msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
+msgstr "@b @B für @g %g ist nicht in @g.  (@b %b)\n"
+
+#. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
+#: e2fsck/problem.c:110
+msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
+msgstr "@i @B für @g %g ist nicht in @g.  (@b %b)\n"
+
+#. @-expanded: inode table for group %g is not in group.  (block %b)\n
+#. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
+#: e2fsck/problem.c:115
+msgid ""
+"@i table for @g %g is not in @g.  (@b %b)\n"
+"WARNING: SEVERE DATA LOSS POSSIBLE.\n"
+msgstr ""
+"@i Tabelle für @g %g ist nicht in @g.  (@b %b)\n"
+"WARNUNG: GROSSER DATENVERLUST IST MÖGLICH.\n"
+
+#. @-expanded: \n
+#. @-expanded: The superblock could not be read or does not describe a correct ext2\n
+#. @-expanded: filesystem.  If the device is valid and it really contains an ext2\n
+#. @-expanded: filesystem (and not swap or ufs or something else), then the superblock\n
+#. @-expanded: is corrupt, and you might try running e2fsck with an alternate superblock:\n
+#. @-expanded:     e2fsck -b %S <device>\n
+#. @-expanded: \n
+#: e2fsck/problem.c:121
+#, c-format
+msgid ""
+"\n"
+"The @S could not be read or does not describe a correct ext2\n"
+"@f.  If the @v is valid and it really contains an ext2\n"
+"@f (and not swap or ufs or something else), then the @S\n"
+"is corrupt, and you might try running e2fsck with an alternate @S:\n"
+"    e2fsck -b %S <@v>\n"
+"\n"
+msgstr ""
+"\n"
+"@S ist unlesbar bzw. beschreibt kein gültiges ext2\n"
+"@f.  Wenn @v gültig ist und ein ext2\n"
+"@f (kein swap oder ufs usw.) enthält,  dann ist der @S\n"
+"beschädigt, und sie könnten e2fsck mit einem anderen @S:\n"
+"    e2fsck -b %S <@v>\n"
+"\n"
+
+#. @-expanded: The filesystem size (according to the superblock) is %b blocks\n
+#. @-expanded: The physical size of the device is %c blocks\n
+#. @-expanded: Either the superblock or the partition table is likely to be corrupt!\n
+#: e2fsck/problem.c:130
+msgid ""
+"The @f size (according to the @S) is %b @bs\n"
+"The physical size of the @v is %c @bs\n"
+"Either the @S or the partition table is likely to be corrupt!\n"
+msgstr ""
+"Die @f Größe ( laut @S) ist %b @bs\n"
+"Die physikalische Größe von @v ist %c @bs\n"
+"Entweder der @S oder die Partionstabelle ist beschädigt!\n"
+
+#. @-expanded: superblock block_size = %b, fragsize = %c.\n
+#. @-expanded: This version of e2fsck does not support fragment sizes different\n
+#. @-expanded: from the block size.\n
+#: e2fsck/problem.c:137
+msgid ""
+"@S @b_size = %b, fragsize = %c.\n"
+"This version of e2fsck does not support fragment sizes different\n"
+"from the @b size.\n"
+msgstr ""
+"@S @b_size = %b, fragsize = %c.\n"
+"Diese Version von e2fsck unterstützt keine von @b-Größen verschiedene Fragmentgrößen.\n"
+
+#. @-expanded: superblock blocks_per_group = %b, should have been %c\n
+#: e2fsck/problem.c:144
+msgid "@S @bs_per_group = %b, should have been %c\n"
+msgstr "@S @bs_per_group = %b, sollte %c sein.\n"
+
+#. @-expanded: superblock first_data_block = %b, should have been %c\n
+#: e2fsck/problem.c:149
+msgid "@S first_data_@b = %b, should have been %c\n"
+msgstr "@S first_data_@b = %b, sollte %c haben.\n"
+
+#. @-expanded: filesystem did not have a UUID; generating one.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:154
+msgid ""
+"@f did not have a UUID; generating one.\n"
+"\n"
+msgstr ""
+"@f hat keinen UUID ; generiere einen.\n"
+"\n"
+
+#: e2fsck/problem.c:159
+#, c-format
+msgid ""
+"Note: if several inode or block bitmap blocks or part\n"
+"of the inode table require relocation, you may wish to try\n"
+"running e2fsck with the '-b %S' option first.  The problem\n"
+"may lie only with the primary block group descriptors, and\n"
+"the backup block group descriptors may be OK.\n"
+"\n"
+msgstr ""
+"Hinweis: Wenn mehrere Inodes oder Bitmap-Blöcke\n"
+"neu geordnet werden müssen, oder ein Teil der Inode-Tabelle\n"
+"verschoben werden muss, könnte es helfen, e2fsck erst einmal\n"
+"mit der Option »-b %S« zu starten. Das Problem könnte\n"
+"im primären Blockgruppenbezeichner liegen, und seine\n"
+"Sicherungskopie in Ordnung sein.\n"
+"\n"
+
+#. @-expanded: Corruption found in superblock.  (%s = %N).\n
+#: e2fsck/problem.c:168
+msgid "Corruption found in @S.  (%s = %N).\n"
+msgstr "Beschädigung gefunden in @S.  (%s = %N).\n"
+
+#. @-expanded: Error determining size of the physical device: %m\n
+#: e2fsck/problem.c:173
+#, c-format
+msgid "Error determining size of the physical @v: %m\n"
+msgstr "Fehler bei der Feststellung der Größe des physikalischen @v: %m\n"
+
+#. @-expanded: inode count in superblock is %i, should be %j.\n
+#: e2fsck/problem.c:178
+msgid "@i count in @S is %i, @s %j.\n"
+msgstr "@i-Anzahl in @S ist %i, sollte %j sein.\n"
+
+#: e2fsck/problem.c:182
+msgid "The Hurd does not support the filetype feature.\n"
+msgstr "Hurd unterstützt das Dateityp-Feature nicht.\n"
+
+#. @-expanded: superblock has an invalid journal (inode %i).\n
+#: e2fsck/problem.c:187
+#, fuzzy, c-format
+msgid "@S has an @n @j (@i %i).\n"
+msgstr "@S hat einen defekten ext3 @j (@i %i).\n"
+
+#. @-expanded: External journal has multiple filesystem users (unsupported).\n
+#: e2fsck/problem.c:192
+msgid "External @j has multiple @f users (unsupported).\n"
+msgstr "Externes @j hat mehrere @f Nutzer (nicht unterstützt).\n"
+
+#. @-expanded: Can't find external journal\n
+#: e2fsck/problem.c:197
+msgid "Can't find external @j\n"
+msgstr "Kann kein externes @j finden.\n"
+
+#. @-expanded: External journal has bad superblock\n
+#: e2fsck/problem.c:202
+msgid "External @j has bad @S\n"
+msgstr "Externes @j hat ungültigen @S\n"
+
+#. @-expanded: External journal does not support this filesystem\n
+#: e2fsck/problem.c:207
+msgid "External @j does not support this @f\n"
+msgstr "Externes @j unterstützt nicht @f\n"
+
+#. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
+#. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal
+#. @-expanded: format.\n
+#. @-expanded: It is also possible the journal superblock is corrupt.\n
+#: e2fsck/problem.c:212
+#, fuzzy
+msgid ""
+"@f @j @S is unknown type %N (unsupported).\n"
+"It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
+"It is also possible the @j @S is corrupt.\n"
+msgstr ""
+"Ext3 @j @S ist eine unbekannter Type %N (nicht unterstützt).\n"
+"Es ist möglich, dass ihr e2fsck älter ist und/oder dieses @j Format nicht unterstützt.\n"
+"Es ist ebenso möglich, dass @j @S defekt ist.\n"
+
+#. @-expanded: journal superblock is corrupt.\n
+#: e2fsck/problem.c:220
+#, fuzzy
+msgid "@j @S is corrupt.\n"
+msgstr "Ext3 @j @S ist defekt.\n"
+
+#. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
+#: e2fsck/problem.c:225
+#, c-format
+msgid "@S has_@j flag is clear, but a @j %s is present.\n"
+msgstr "ext3 Recovery-Flag sauber, aber ein @j %s ist vorhanden.\n"
+
+#. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
+#: e2fsck/problem.c:230
+#, fuzzy
+msgid "@S needs_recovery flag is set, but no @j is present.\n"
+msgstr "@S hat das ext3 »needs_recovery«-Flag gesetzt, aber kein @j.\n"
+
+#. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
+#: e2fsck/problem.c:235
+#, fuzzy
+msgid "@S needs_recovery flag is clear, but @j has data.\n"
+msgstr "ext3 Recovery-Flag sauber, aber das @j enthält Daten.\n"
+
+#. @-expanded: Clear journal
+#: e2fsck/problem.c:240
+msgid "Clear @j"
+msgstr "Bereinige @j"
+
+#. @-expanded: Run journal anyway
+#: e2fsck/problem.c:245
+msgid "Run @j anyway"
+msgstr "Starte @j trotzdem"
+
+#. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
+#: e2fsck/problem.c:250
+msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
+msgstr "Recovery-Kennzeichen in Backup @S nicht gesetzt, @j wird trotzdem gestartet.\n"
+
+#. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
+#: e2fsck/problem.c:255
+msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
+msgstr "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
+
+#. @-expanded: illegal block #%B (%b) found in orphaned inode %i.\n
+#: e2fsck/problem.c:260
+msgid "@I @b #%B (%b) found in @o @i %i.\n"
+msgstr "@I @b #%B (%b) gefunden in @o @i %i.\n"
+
+#. @-expanded: Already cleared block #%B (%b) found in orphaned inode %i.\n
+#: e2fsck/problem.c:265
+msgid "Already cleared @b #%B (%b) found in @o @i %i.\n"
+msgstr "bereits bereinigt @b #%B (%b) gefunden in @o @i %i.\n"
+
+#. @-expanded: illegal orphaned inode %i in superblock.\n
+#: e2fsck/problem.c:270
+#, c-format
+msgid "@I @o @i %i in @S.\n"
+msgstr "@I @o @i %i in @S.\n"
+
+#. @-expanded: illegal inode %i in orphaned inode list.\n
+#: e2fsck/problem.c:275
+#, c-format
+msgid "@I @i %i in @o @i list.\n"
+msgstr "@I @i %i in @o @i Liste.\n"
+
+#. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.
+#: e2fsck/problem.c:280
+#: e2fsck/problem.c:647
+msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
+msgstr "@f hat Eigenschfts-Kennzeichen gesetzt, ist aber ein Revision 0 @f. "
+
+#. @-expanded: journal superblock has an unknown read-only feature flag set.\n
+#: e2fsck/problem.c:285
+#, fuzzy
+msgid "@j @S has an unknown read-only feature flag set.\n"
+msgstr "Ext3 @j @S hat ein unbekanntes Nur-Lesen-Flag gesetzt.\n"
+
+#. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
+#: e2fsck/problem.c:290
+#, fuzzy
+msgid "@j @S has an unknown incompatible feature flag set.\n"
+msgstr "Ext3 @j @S hat ein unbekanntes Inkompatibel-Flag gesetzt.\n"
+
+#. @-expanded: journal version not supported by this e2fsck.\n
+#: e2fsck/problem.c:295
+msgid "@j version not supported by this e2fsck.\n"
+msgstr "@j Version wird von diesem e2fsck nicht unterstützt.\n"
+
+#. @-expanded: Moving journal from /%s to hidden inode.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:300
+#, c-format
+msgid ""
+"Moving @j from /%s to hidden @i.\n"
+"\n"
+msgstr ""
+"Verschiebe @j von /%s zum versteckten Inode.\n"
+"\n"
+
+#. @-expanded: Error moving journal: %m\n
+#. @-expanded: \n
+#: e2fsck/problem.c:305
+#, c-format
+msgid ""
+"Error moving @j: %m\n"
+"\n"
+msgstr ""
+"Fehler beim Verschieben von  @j: %m\n"
+"\n"
+
+#. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
+#. @-expanded: Clearing fields beyond the V1 journal superblock...\n
+#. @-expanded: \n
+#: e2fsck/problem.c:310
+msgid ""
+"Found @n V2 @j @S fields (from V1 @j).\n"
+"Clearing fields beyond the V1 @j @S...\n"
+"\n"
+msgstr ""
+"Fand unvollständige V2 @j @S Felder (vom V1 Journal).\n"
+"Bereinige die Felder hinter V1 @j @S...\n"
+"\n"
+
+#. @-expanded: Backing up journal inode block information.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:316
+msgid ""
+"Backing up @j @i @b information.\n"
+"\n"
+msgstr ""
+"Sichere @j @i @b Information.\n"
+"\n"
+
+#. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
+#. @-expanded: is %N; should be zero.
+#: e2fsck/problem.c:321
+msgid ""
+"@f does not have resize_@i enabled, but s_reserved_gdt_@bs\n"
+"is %N; @s zero.  "
+msgstr ""
+"Für @f ist resize_@i nicht eingeschaltet, aber s_reserved_gdt_@bs\n"
+"ist %N; @s Null.  "
+
+#. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.
+#: e2fsck/problem.c:327
+msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
+msgstr "Resize_@i nicht aktiviert, aber die zu modifgizierende Inod ist nicht-Null."
+
+#. @-expanded: Resize inode not valid.
+#: e2fsck/problem.c:332
+msgid "Resize @i not valid.  "
+msgstr "@r ist kein @d.  "
+
+#. @-expanded: superblock last mount time is in the future.
+#: e2fsck/problem.c:337
+msgid "@S last mount time is in the future.  "
+msgstr "Der Zeitpunkt des letzten Einhängens von @S liegt in der Zukunft"
+
+#. @-expanded: superblock last write time is in the future.
+#: e2fsck/problem.c:342
+msgid "@S last write time is in the future.  "
+msgstr "Der Zeitpunkt des letzten Schreibens von @S liegt in der Zukunft.  "
+
+#. @-expanded: superblock hint for external superblock should be %X.
+#: e2fsck/problem.c:346
+#, c-format
+msgid "@S hint for external superblock @s %X.  "
+msgstr "@S Hinweis für externen Superblock @s %X"
+
+#. @-expanded: Adding dirhash hint to filesystem.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:351
+msgid ""
+"Adding dirhash hint to @f.\n"
+"\n"
+msgstr ""
+"Füge Verzeinishash-Hilfe zu @f hinzu.\n"
+"\n"
+
+#. @-expanded: group descriptor %g checksum is invalid.
+#: e2fsck/problem.c:356
+#, c-format
+msgid "@g descriptor %g checksum is invalid.  "
+msgstr "Prüfsumme von @g -Deskriptor %g ist ungültig.  "
+
+#. @-expanded: group descriptor %g marked uninitialized without feature set.\n
+#: e2fsck/problem.c:361
+#, c-format
+msgid "@g descriptor %g marked uninitialized without feature set.\n"
+msgstr "@g -Deskriptor %g ist als nicht initialisiert gekennzeichnet ohne eine gesetzte Eigenschaft.\n"
+
+#. @-expanded: group %g block bitmap uninitialized but inode bitmap in use.\n
+#: e2fsck/problem.c:366
+#, c-format
+msgid "@g %g @b @B uninitialized but @i @B in use.\n"
+msgstr "Die @b @B von @g %g ist nicht initialisiert aber @i @B wird verwendet.\n"
+
+#. @-expanded: group descriptor %g has invalid unused inodes count %b.
+#: e2fsck/problem.c:371
+msgid "@g descriptor %g has invalid unused inodes count %b.  "
+msgstr "@g Deskriptor %g hat eine ungültige Anzahl ungenutzter Inodes von %b.  "
+
+#. @-expanded: Last group block bitmap uninitialized.
+#: e2fsck/problem.c:376
+msgid "Last @g @b @B uninitialized.  "
+msgstr "Die letzte @g @b @B ist nicht initialisiert.  "
+
+#: e2fsck/problem.c:381
+#, c-format
+msgid "Journal transaction %i was corrupt, replay was aborted.\n"
+msgstr "Journaltransaktion %i war beschädigt, die Wiederholung wurde abgegrochen.\n"
+
+#: e2fsck/problem.c:385
+msgid "The test_fs flag is set (and ext4 is available).  "
+msgstr ""
+
+#. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
+#: e2fsck/problem.c:392
+msgid "Pass 1: Checking @is, @bs, and sizes\n"
+msgstr "Durchgang 1: Prüfe @is, @bs, und Größen\n"
+
+#. @-expanded: root inode is not a directory.
+#: e2fsck/problem.c:396
+msgid "@r is not a @d.  "
+msgstr "@r ist kein @d.  "
+
+#. @-expanded: root inode has dtime set (probably due to old mke2fs).
+#: e2fsck/problem.c:401
+msgid "@r has dtime set (probably due to old mke2fs).  "
+msgstr "@r hat dtime gesetzt (vielleicht durch ein zu altes mke2fs).  "
+
+#. @-expanded: Reserved inode %i (%Q) has invalid mode.
+#: e2fsck/problem.c:406
+msgid "Reserved @i %i (%Q) has @n mode.  "
+msgstr "Reservierte @i %i %Q hat einen falschen Modus.  "
+
+#. @-expanded: deleted inode %i has zero dtime.
+#: e2fsck/problem.c:411
+#, c-format
+msgid "@D @i %i has zero dtime.  "
+msgstr "@D @i %i hat \"zero dtime\".  "
+
+#. @-expanded: inode %i is in use, but has dtime set.
+#: e2fsck/problem.c:416
+#, c-format
+msgid "@i %i is in use, but has dtime set.  "
+msgstr "@i %i ist in Benutzung, aber hat dtime gesetzt.  "
+
+#. @-expanded: inode %i is a zero-length directory.
+#: e2fsck/problem.c:421
+#, c-format
+msgid "@i %i is a @z @d.  "
+msgstr "@i %i ist ein @z @d.  "
+
+#. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
+#: e2fsck/problem.c:426
+msgid "@g %g's @b @B at %b @C.\n"
+msgstr "@g %g's @b @B auf %b @C.\n"
+
+#. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
+#: e2fsck/problem.c:431
+msgid "@g %g's @i @B at %b @C.\n"
+msgstr "@g %g's @i @B auf %b @C.\n"
+
+#. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
+#: e2fsck/problem.c:436
+msgid "@g %g's @i table at %b @C.\n"
+msgstr "@g %g's @i Tabelle auf %b @C.\n"
+
+#. @-expanded: group %g's block bitmap (%b) is bad.
+#: e2fsck/problem.c:441
+msgid "@g %g's @b @B (%b) is bad.  "
+msgstr "@g %g's @b @B (%b) ist ungültig.  "
+
+#. @-expanded: group %g's inode bitmap (%b) is bad.
+#: e2fsck/problem.c:446
+msgid "@g %g's @i @B (%b) is bad.  "
+msgstr "@g %g's @i @B (%b) ist ungültig.  "
+
+#. @-expanded: inode %i, i_size is %Is, should be %N.
+#: e2fsck/problem.c:451
+msgid "@i %i, i_size is %Is, @s %N.  "
+msgstr "@i %i, i_size ist %Is, @s %N.  "
+
+#. @-expanded: inode %i, i_blocks is %Ib, should be %N.
+#: e2fsck/problem.c:456
+msgid "@i %i, i_@bs is %Ib, @s %N.  "
+msgstr "@i %i, i_@bs ist %Ib, @s %N.  "
+
+#. @-expanded: illegal block #%B (%b) in inode %i.
+#: e2fsck/problem.c:461
+msgid "@I @b #%B (%b) in @i %i.  "
+msgstr "@I @b #%B (%b) in @i %i.  "
+
+#. @-expanded: block #%B (%b) overlaps filesystem metadata in inode %i.
+#: e2fsck/problem.c:466
+msgid "@b #%B (%b) overlaps @f metadata in @i %i.  "
+msgstr "@b #%B (%b) überlappt @f metadata in @i %i.  "
+
+#. @-expanded: inode %i has illegal block(s).
+#: e2fsck/problem.c:471
+#, c-format
+msgid "@i %i has illegal @b(s).  "
+msgstr "@i %i hat unzulässigen @b(s).  "
+
+#. @-expanded: Too many illegal blocks in inode %i.\n
+#: e2fsck/problem.c:476
+#, c-format
+msgid "Too many illegal @bs in @i %i.\n"
+msgstr "Zu viele unzulässige @bs in @i %i.\n"
+
+#. @-expanded: illegal block #%B (%b) in bad block inode.
+#: e2fsck/problem.c:481
+msgid "@I @b #%B (%b) in bad @b @i.  "
+msgstr "@I @b #%B (%b) in bad @b @i.  "
+
+#. @-expanded: Bad block inode has illegal block(s).
+#: e2fsck/problem.c:486
+msgid "Bad @b @i has illegal @b(s).  "
+msgstr "Bad @b @i hat unzulässigen @b(s).  "
+
+#. @-expanded: Duplicate or bad block in use!\n
+#: e2fsck/problem.c:491
+msgid "Duplicate or bad @b in use!\n"
+msgstr "Doppelter oder unzulässiger @b in Gebrauch!\n"
+
+#. @-expanded: Bad block %b used as bad block inode indirect block.
+#: e2fsck/problem.c:496
+msgid "Bad @b %b used as bad @b @i indirect @b.  "
+msgstr "Bad @b %b benutzt als bad @b @i indirekt @b.  "
+
+#. @-expanded: \n
+#. @-expanded: The bad block inode has probably been corrupted.  You probably\n
+#. @-expanded: should stop now and run e2fsck -c to scan for bad blocks\n
+#. @-expanded: in the filesystem.\n
+#: e2fsck/problem.c:501
+msgid ""
+"\n"
+"The bad @b @i has probably been corrupted.  You probably\n"
+"should stop now and run e2fsck -c to scan for bad blocks\n"
+"in the @f.\n"
+msgstr ""
+"\n"
+"Defekter @b @i ist wahrscheinlich beschädigt worden. Sie sollten\n"
+"nun eher innehalten und »e2fsck -c« ausführen, um nach defekten\n"
+"Blöcken in @f zu suchen.\n"
+
+#. @-expanded: \n
+#. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
+#: e2fsck/problem.c:508
+msgid ""
+"\n"
+"If the @b is really bad, the @f can not be fixed.\n"
+msgstr ""
+"\n"
+"Wenn der @b wirklich defekt ist, kann der @f nicht repariert werden.\n"
+
+#. @-expanded: You can remove this block from the bad block list and hope\n
+#. @-expanded: that the block is really OK.  But there are no guarantees.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:513
+msgid ""
+"You can remove this @b from the bad @b list and hope\n"
+"that the @b is really OK.  But there are no guarantees.\n"
+"\n"
+msgstr ""
+"Sie können @b von der @b - Liste  löschen  \n"
+"und hoffen das @b wirklich in Ordnung ist, es \n"
+"gibt aber KEINE GARANTIEN.\n"
+"\n"
+
+#. @-expanded: The primary superblock (%b) is on the bad block list.\n
+#: e2fsck/problem.c:519
+msgid "The primary @S (%b) is on the bad @b list.\n"
+msgstr "Der primäre @S (%b) ist auf der bad @b Liste.\n"
+
+#. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
+#: e2fsck/problem.c:524
+msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
+msgstr "Block %b im primären Deskriptor @g ist auf der bad @b Liste\n"
+
+#. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
+#: e2fsck/problem.c:530
+msgid "Warning: Group %g's @S (%b) is bad.\n"
+msgstr "Warnung: Gruppe %g's @S (%b) ist ungültig.\n"
+
+#. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
+#: e2fsck/problem.c:535
+msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
+msgstr "Warnung: Gruppe %g's Kopie vom Deskriptor @g hat einen bad @b (%b).\n"
+
+#. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
+#: e2fsck/problem.c:541
+msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
+msgstr "Programmfehler?  @b #%b verlangt ohne Grund in process_bad_@b.\n"
+
+#. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
+#: e2fsck/problem.c:547
+msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
+msgstr "@A %N grenzt an @b(s) in @b @g %g for %s: %m\n"
+
+#. @-expanded: error allocating block buffer for relocating %s\n
+#: e2fsck/problem.c:552
+#, c-format
+msgid "@A @b buffer for relocating %s\n"
+msgstr "@A @b Puffer zum Verschieben %s\n"
+
+#. @-expanded: Relocating group %g's %s from %b to %c...\n
+#: e2fsck/problem.c:557
+msgid "Relocating @g %g's %s from %b to %c...\n"
+msgstr "Verschiebe @g %g's %s von %b nach %c...\n"
+
+#. @-expanded: Relocating group %g's %s to %c...\n
+#: e2fsck/problem.c:562
+#, c-format
+msgid "Relocating @g %g's %s to %c...\n"
+msgstr "Verschiebe @g %g's %s nach %c...\n"
+
+#. @-expanded: Warning: could not read block %b of %s: %m\n
+#: e2fsck/problem.c:567
+msgid "Warning: could not read @b %b of %s: %m\n"
+msgstr "Warnung: kann  @b %b von %s: %m nicht lesen\n"
+
+#. @-expanded: Warning: could not write block %b for %s: %m\n
+#: e2fsck/problem.c:572
+msgid "Warning: could not write @b %b for %s: %m\n"
+msgstr "Warnung: kann  @b %b von %s: %m nicht schreiben\n"
+
+#. @-expanded: error allocating inode bitmap (%N): %m\n
+#: e2fsck/problem.c:577
+#: e2fsck/problem.c:1378
+msgid "@A @i @B (%N): %m\n"
+msgstr "@A @i @B (%N): %m\n"
+
+#. @-expanded: error allocating block bitmap (%N): %m\n
+#: e2fsck/problem.c:582
+msgid "@A @b @B (%N): %m\n"
+msgstr "@A @i @B (%N): %m\n"
+
+#. @-expanded: error allocating icount link information: %m\n
+#: e2fsck/problem.c:587
+#, c-format
+msgid "@A icount link information: %m\n"
+msgstr "@A icount link information: %m\n"
+
+#. @-expanded: error allocating directory block array: %m\n
+#: e2fsck/problem.c:592
+#, c-format
+msgid "@A @d @b array: %m\n"
+msgstr "@A @d @b array: %m\n"
+
+#. @-expanded: Error while scanning inodes (%i): %m\n
+#: e2fsck/problem.c:597
+#, c-format
+msgid "Error while scanning @is (%i): %m\n"
+msgstr "Fehler während der Suche @is (%i): %m\n"
+
+#. @-expanded: Error while iterating over blocks in inode %i: %m\n
+#: e2fsck/problem.c:602
+#, c-format
+msgid "Error while iterating over @bs in @i %i: %m\n"
+msgstr "Fehler beim Iterieren über @bs in @i %i: %m\n"
+
+#. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
+#: e2fsck/problem.c:607
+msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
+msgstr "Fehler beim Speichern von @i count Informationen (@i=%i, count=%N): %m\n"
+
+#. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
+#: e2fsck/problem.c:612
+msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
+msgstr "Fehler beim Speichern @d @b Informationen (@i=%i, @b=%b, num=%N): %m\n"
+
+#. @-expanded: Error reading inode %i: %m\n
+#: e2fsck/problem.c:618
+#, c-format
+msgid "Error reading @i %i: %m\n"
+msgstr "Fehler beim Lesen von @i %i: %m\n"
+
+#. @-expanded: inode %i has imagic flag set.
+#: e2fsck/problem.c:626
+#, c-format
+msgid "@i %i has imagic flag set.  "
+msgstr "@i %i hat Imagic-Flag gesetzt.  "
+
+#. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
+#. @-expanded: or append-only flag set.
+#: e2fsck/problem.c:631
+#, c-format
+msgid ""
+"Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
+"or append-only flag set.  "
+msgstr ""
+"Spezielle (@v/socket/fifo/symlink) Datei (@i %i) hat immutable\n"
+"oder append-only Flag gesetzt.  "
+
+#. @-expanded: inode %i has compression flag set on filesystem without compression support.
+#: e2fsck/problem.c:637
+#, c-format
+msgid "@i %i has @cion flag set on @f without @cion support.  "
+msgstr "@i %i hat @cion Flag gesetzt auf @f ohne @cion Unterstützung.  "
+
+#. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.
+#: e2fsck/problem.c:642
+#, c-format
+msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
+msgstr ""
+"Spezielle (@v/socket/fifo/symlink) Datei (@i %i) hat immutable\n"
+"oder append-only Flag gesetzt.  "
+
+#. @-expanded: journal inode is not in use, but contains data.
+#: e2fsck/problem.c:652
+msgid "@j @i is not in use, but contains data.  "
+msgstr "@i %i ist in Benutzung, aber hat dtime gesetzt.  "
+
+#. @-expanded: journal is not regular file.
+#: e2fsck/problem.c:657
+msgid "@j is not regular file.  "
+msgstr "@j ist keine reguläre Datei.  "
+
+#. @-expanded: inode %i was part of the orphaned inode list.
+#: e2fsck/problem.c:662
+#, c-format
+msgid "@i %i was part of the @o @i list.  "
+msgstr "@i %i war Teil der orphaned @i Liste.  "
+
+#. @-expanded: inodes that were part of a corrupted orphan linked list found.
+#: e2fsck/problem.c:668
+msgid "@is that were part of a corrupted orphan linked list found.  "
+msgstr "@is,  die Teile einer defekten Liste mit verwaisten Links waren.  "
+
+#. @-expanded: error allocating refcount structure (%N): %m\n
+#: e2fsck/problem.c:673
+msgid "@A refcount structure (%N): %m\n"
+msgstr "@A icount structure: %m\n"
+
+#. @-expanded: Error reading extended attribute block %b for inode %i.
+#: e2fsck/problem.c:678
+msgid "Error reading @a @b %b for @i %i.  "
+msgstr "Fehler beim Lesen @a @b %b for @i %i.  "
+
+#. @-expanded: inode %i has a bad extended attribute block %b.
+#: e2fsck/problem.c:683
+msgid "@i %i has a bad @a @b %b.  "
+msgstr "@i %i hat defekten @a @b %b.  "
+
+#. @-expanded: Error reading extended attribute block %b (%m).
+#: e2fsck/problem.c:688
+msgid "Error reading @a @b %b (%m).  "
+msgstr "Fehler beim Lesen @a @b %b (%m).  "
+
+#. @-expanded: extended attribute block %b has reference count %B, should be %N.
+#: e2fsck/problem.c:693
+msgid "@a @b %b has reference count %B, @s %N.  "
+msgstr "@a @b %b hat den Referenzzähler %B, richtig wäre %N.  "
+
+#. @-expanded: Error writing extended attribute block %b (%m).
+#: e2fsck/problem.c:698
+msgid "Error writing @a @b %b (%m).  "
+msgstr "Fehler beim Schreiben @a @b %b (%m).  "
+
+#. @-expanded: extended attribute block %b has h_blocks > 1.
+#: e2fsck/problem.c:703
+msgid "@a @b %b has h_@bs > 1.  "
+msgstr "@a @b %b hat h_blocks > 1.  "
+
+#. @-expanded: error allocating extended attribute block %b.
+#: e2fsck/problem.c:708
+msgid "@A @a @b %b.  "
+msgstr "@A @a @b %b.  "
+
+#. @-expanded: extended attribute block %b is corrupt (allocation collision).
+#: e2fsck/problem.c:713
+msgid "@a @b %b is corrupt (allocation collision).  "
+msgstr "@a @b %b ist defekt (allocation collision).  "
+
+#. @-expanded: extended attribute block %b is corrupt (invalid name).
+#: e2fsck/problem.c:718
+msgid "@a @b %b is corrupt (@n name).  "
+msgstr "@a @b %b ist defekt (ungültiger Name).  "
+
+#. @-expanded: extended attribute block %b is corrupt (invalid value).
+#: e2fsck/problem.c:723
+msgid "@a @b %b is corrupt (@n value).  "
+msgstr "@a @b %b ist defekt (ungültiger Wert).  "
+
+#. @-expanded: inode %i is too big.
+#: e2fsck/problem.c:728
+#, c-format
+msgid "@i %i is too big.  "
+msgstr "@i %i ist zu groß.  "
+
+#. @-expanded: block #%B (%b) causes directory to be too big.
+#: e2fsck/problem.c:732
+msgid "@b #%B (%b) causes @d to be too big.  "
+msgstr "@b #%B (%b) macht @d zu groß.  "
+
+#. @-expanded: block #%B (%b) causes file to be too big.
+#: e2fsck/problem.c:737
+msgid "@b #%B (%b) causes file to be too big.  "
+msgstr "@b #%B (%b) macht die Datei zu groß.  "
+
+#. @-expanded: block #%B (%b) causes symlink to be too big.
+#: e2fsck/problem.c:742
+msgid "@b #%B (%b) causes symlink to be too big.  "
+msgstr "@b #%B (%b) macht den Symlink zu groß.  "
+
+#. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
+#: e2fsck/problem.c:747
+#, c-format
+msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
+msgstr "@i %i hat INDEX_FL Flag auf @f gesetzt ohne HTREE-Unterstützung.\n"
+
+#. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
+#: e2fsck/problem.c:752
+#, c-format
+msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
+msgstr "@i %i hat INDEX_FL flag gesetzt, ist aber kein @d.\n"
+
+#. @-expanded: HTREE directory inode %i has an invalid root node.\n
+#: e2fsck/problem.c:757
+#, c-format
+msgid "@h %i has an @n root node.\n"
+msgstr "@h %i hat einen unvollständigen root node.\n"
+
+#. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
+#: e2fsck/problem.c:762
+msgid "@h %i has an unsupported hash version (%N)\n"
+msgstr "@h %i hat eine nicht unterstützte hash-Version (%N)\n"
+
+#. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
+#: e2fsck/problem.c:767
+#, c-format
+msgid "@h %i uses an incompatible htree root node flag.\n"
+msgstr "@h %i benutzt einen nicht unterstützten htree root node flag.\n"
+
+#. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
+#: e2fsck/problem.c:772
+msgid "@h %i has a tree depth (%N) which is too big\n"
+msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
+
+#. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
+#. @-expanded: filesystem metadata.
+#: e2fsck/problem.c:777
+msgid ""
+"Bad @b @i has an indirect @b (%b) that conflicts with\n"
+"@f metadata.  "
+msgstr ""
+"Defekter @b @i hat einen indirekten @b (%b), der mit\n"
+"den @f Metadaten in Konflikt steht.  "
+
+#. @-expanded: Resize inode (re)creation failed: %m.
+#: e2fsck/problem.c:783
+#, c-format
+msgid "Resize @i (re)creation failed: %m."
+msgstr "Erzeugung von Vergrösserungs-@i scheiterte: %m."
+
+#. @-expanded: inode %i has a extra size (%IS) which is invalid\n
+#: e2fsck/problem.c:788
+msgid "@i %i has a extra size (%IS) which is @n\n"
+msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
+
+#. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
+#: e2fsck/problem.c:793
+msgid "@a in @i %i has a namelen (%N) which is @n\n"
+msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
+
+#. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
+#: e2fsck/problem.c:798
+msgid "@a in @i %i has a value size (%N) which is @n\n"
+msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
+
+#. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
+#: e2fsck/problem.c:803
+msgid "@a in @i %i has a value offset (%N) which is @n\n"
+msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
+
+#. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
+#: e2fsck/problem.c:808
+msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
+msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
+
+#. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
+#: e2fsck/problem.c:813
+msgid "@a in @i %i has a hash (%N) which is @n\n"
+msgstr "@a in %i hat einen @n Hashwert von (%N)\n"
+
+#. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
+#: e2fsck/problem.c:818
+msgid "@i %i is a %It but it looks like it is really a directory.\n"
+msgstr "@i ist ein %It aber es sieht so aus, als ob es tatsächlich ein Verzeichnis ist.\n"
+
+#. @-expanded: Error while reading over extent tree in inode %i: %m\n
+#: e2fsck/problem.c:823
+#, c-format
+msgid "Error while reading over @x tree in @i %i: %m\n"
+msgstr "Fehler beim Iterieren über Baum @x in @i %i: %m\n"
+
+#. @-expanded: Failed to iterate extents in inode %i\n
+#. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
+#: e2fsck/problem.c:828
+msgid ""
+"Failed to iterate extents in @i %i\n"
+"\t(op %s, blk %b, lblk %c): %m\n"
+msgstr ""
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, invalid physical block %b, len %N)\n
+#: e2fsck/problem.c:834
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, @n physical @b %b, len %N)\n"
+msgstr ""
+"@i %i hat eine @n Erweiterung\n"
+"\t(logischer @b %c, @n physischer @b %b, Länge %N)\n"
+
+#. @-expanded: inode %i has an invalid extent\n
+#. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
+#: e2fsck/problem.c:839
+msgid ""
+"@i %i has an @n extent\n"
+"\t(logical @b %c, physical @b %b, @n len %N)\n"
+msgstr ""
+"@i %i hat eine @n Erweiterung\n"
+"\t(logischer @b %c, physischer @b %b, @n Länge %N)\n"
+
+#. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
+#: e2fsck/problem.c:844
+#, c-format
+msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
+msgstr "@i %i hat  EXTENTS_FL Kennung auf einem @f ohne Unterstützung für Erweiterungen.\n"
+
+#. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
+#: e2fsck/problem.c:849
+#, c-format
+msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
+msgstr "@i %i besitzt das Erweiterungsformat, aber dem @S fehlt die Eigenschaft EXTENTS\n"
+
+#. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
+#: e2fsck/problem.c:854
+#, c-format
+msgid "@i %i missing EXTENT_FL, but is in extents format\n"
+msgstr "@i %i fehlt EXTENT_FL, aber hat das Format einer Erweiterungs-@i\n"
+
+#: e2fsck/problem.c:859
+#, c-format
+msgid "Fast symlink %i has EXTENT_FL set.  "
+msgstr "Schneller Symlink %i hat EXTENT_FL gesetzt.  "
+
+#. @-expanded: inode %i has out of order extents\n
+#. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
+#: e2fsck/problem.c:864
+msgid ""
+"@i %i has out of order extents\n"
+"\t(@n logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+"@i %i hat unregelmässige Erweitertungen\n"
+"\t(@n logischer @b %c, physischer @b %b, Länge %N)\n"
+
+#. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
+#: e2fsck/problem.c:868
+msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
+msgstr ""
+
+#. @-expanded: \n
+#. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
+#. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
+#: e2fsck/problem.c:875
+msgid ""
+"\n"
+"Running additional passes to resolve @bs claimed by more than one @i...\n"
+"Pass 1B: Rescanning for @m @bs\n"
+msgstr ""
+"\n"
+"Doppelter @bs gefunden... starte Scan nach doppelten @b.\n"
+"Durchgang 1B: Suche nach doppelten/defekten @bs\n"
+
+#. @-expanded: multiply-claimed block(s) in inode %i:
+#: e2fsck/problem.c:881
+#, c-format
+msgid "@m @b(s) in @i %i:"
+msgstr "@m @b(s) in @i %i:"
+
+#: e2fsck/problem.c:896
+#, c-format
+msgid "Error while scanning inodes (%i): %m\n"
+msgstr "Fehlen beim Prüfen von Inodes (%i): %m\n"
+
+#. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
+#: e2fsck/problem.c:901
+#, c-format
+msgid "@A @i @B (@i_dup_map): %m\n"
+msgstr "@A @i @B (inode_dup_map): %m\n"
+
+#. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
+#: e2fsck/problem.c:906
+#, c-format
+msgid "Error while iterating over @bs in @i %i (%s): %m\n"
+msgstr "Fehler beim Durchlaufen der @bs in @i %i (%s): %m\n"
+
+#. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
+#: e2fsck/problem.c:911
+#: e2fsck/problem.c:1227
+msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
+msgstr "Fehler bei der Anpassung des refcount für @a @b %b (@i %i): %m\n"
+
+#. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
+#: e2fsck/problem.c:917
+msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
+msgstr "Durchgang 1C: Prüfe Verzeichnisse nach @is mit doppelten @bs.\n"
+
+#. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
+#: e2fsck/problem.c:923
+msgid "Pass 1D: Reconciling @m @bs\n"
+msgstr "Durchgang 1D: Gleiche doppelte @bs ab\n"
+
+#. @-expanded: File %Q (inode #%i, mod time %IM) \n
+#. @-expanded:   has %B multiply-claimed block(s), shared with %N file(s):\n
+#: e2fsck/problem.c:928
+msgid ""
+"File %Q (@i #%i, mod time %IM) \n"
+"  has %B @m @b(s), shared with %N file(s):\n"
+msgstr ""
+"Datei %Q (@i #%i, mod time %IM) \n"
+"  hat %B doppelte @b(s), geteilt mit %N Datei(en):\n"
+
+#. @-expanded: \t%Q (inode #%i, mod time %IM)\n
+#: e2fsck/problem.c:934
+msgid "\t%Q (@i #%i, mod time %IM)\n"
+msgstr "\t%Q (@i #%i, mod time %IM)\n"
+
+#. @-expanded: \t<filesystem metadata>\n
+#: e2fsck/problem.c:939
+msgid "\t<@f metadata>\n"
+msgstr "\t<@f metadata>\n"
+
+#. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
+#. @-expanded: \n
+#: e2fsck/problem.c:944
+msgid ""
+"(There are %N @is containing @m @bs.)\n"
+"\n"
+msgstr ""
+"(es gibt %N @is, die doppelte/defekte @bs enthalten.)\n"
+"\n"
+
+#. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:949
+msgid ""
+"@m @bs already reassigned or cloned.\n"
+"\n"
+msgstr ""
+"Duplizierte @bs bereits neu zugeordnet bzw. geklont.\n"
+"\n"
+
+#: e2fsck/problem.c:962
+#, c-format
+msgid "Couldn't clone file: %m\n"
+msgstr "Kann die Datei %m nicht klonen.\n"
+
+#. @-expanded: Pass 2: Checking directory structure\n
+#: e2fsck/problem.c:968
+msgid "Pass 2: Checking @d structure\n"
+msgstr "Durchgang 2: Prüfe @d Struktur\n"
+
+#. @-expanded: invalid inode number for '.' in directory inode %i.\n
+#: e2fsck/problem.c:973
+#, c-format
+msgid "@n @i number for '.' in @d @i %i.\n"
+msgstr "Falsche @i Nummer für ».« in @d @i %i.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
+#: e2fsck/problem.c:978
+msgid "@E has @n @i #: %Di.\n"
+msgstr "@E hat falsche @i #: %Di.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.
+#: e2fsck/problem.c:983
+msgid "@E has @D/unused @i %Di.  "
+msgstr "@E hat @D/unbenutzt @i %Di.  "
+
+#. @-expanded: entry '%Dn' in %p (%i) is a link to '.'
+#: e2fsck/problem.c:988
+msgid "@E @L to '.'  "
+msgstr "@E @L nach ».«  "
+
+#. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
+#: e2fsck/problem.c:993
+msgid "@E points to @i (%Di) located in a bad @b.\n"
+msgstr "@E zeigt auf @i (%Di) in einem defekten @b.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
+#: e2fsck/problem.c:998
+msgid "@E @L to @d %P (%Di).\n"
+msgstr "@E @L nach @d %P (%Di).\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
+#: e2fsck/problem.c:1003
+msgid "@E @L to the @r.\n"
+msgstr "@E @L zur @r.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
+#: e2fsck/problem.c:1008
+msgid "@E has illegal characters in its name.\n"
+msgstr "@E hat ein unzulässiges Zeichen im Namen.\n"
+
+#. @-expanded: Missing '.' in directory inode %i.\n
+#: e2fsck/problem.c:1013
+#, c-format
+msgid "Missing '.' in @d @i %i.\n"
+msgstr "Fehlende ».« in @d @i %i.\n"
+
+#. @-expanded: Missing '..' in directory inode %i.\n
+#: e2fsck/problem.c:1018
+#, c-format
+msgid "Missing '..' in @d @i %i.\n"
+msgstr "Fehlende »..« in @d @i %i.\n"
+
+#. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
+#: e2fsck/problem.c:1023
+msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
+msgstr "Erster @e »%Dn« (inode=%Di) in @d @i %i (%p) @s ».«\n"
+
+#. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
+#: e2fsck/problem.c:1028
+msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
+msgstr "Zweiter @e »%Dn« (inode=%Di) in @d @i %i @s »..«\n"
+
+#. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
+#: e2fsck/problem.c:1033
+msgid "i_faddr @F %IF, @s zero.\n"
+msgstr "i_faddr @F %IF, @s null.\n"
+
+#. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
+#: e2fsck/problem.c:1038
+msgid "i_file_acl @F %If, @s zero.\n"
+msgstr "i_file_acl @F %If, @s null.\n"
+
+#. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
+#: e2fsck/problem.c:1043
+msgid "i_dir_acl @F %Id, @s zero.\n"
+msgstr "i_dir_acl @F %Id, @s null.\n"
+
+#. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1048
+msgid "i_frag @F %N, @s zero.\n"
+msgstr "i_frag @F %N, @s null.\n"
+
+#. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1053
+msgid "i_fsize @F %N, @s zero.\n"
+msgstr "i_fsize @F %N, @s null.\n"
+
+#. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
+#: e2fsck/problem.c:1058
+msgid "@i %i (%Q) has @n mode (%Im).\n"
+msgstr "@i %i (%Q) hat einen falschen Modus (%Im).\n"
+
+#. @-expanded: directory inode %i, block %B, offset %N: directory corrupted\n
+#: e2fsck/problem.c:1063
+msgid "@d @i %i, @b %B, offset %N: @d corrupted\n"
+msgstr "@d @i %i, @b %B, offset %N: @d defekt\n"
+
+#. @-expanded: directory inode %i, block %B, offset %N: filename too long\n
+#: e2fsck/problem.c:1068
+msgid "@d @i %i, @b %B, offset %N: filename too long\n"
+msgstr "@d @i %i, @b %B, offset %N: Dateiname zu lang\n"
+
+#. @-expanded: directory inode %i has an unallocated block #%B.
+#: e2fsck/problem.c:1073
+msgid "@d @i %i has an unallocated @b #%B.  "
+msgstr "@d @i %i hat einen nicht zugewiesenen @b #%B.  "
+
+#. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
+#: e2fsck/problem.c:1078
+#, c-format
+msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
+msgstr "».« @d @e in @d @i %i ist nicht NULL-terminiert\n"
+
+#. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
+#: e2fsck/problem.c:1083
+#, c-format
+msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
+msgstr "»..« @d @e in @d @i %i ist nicht NULL-terminiert\n"
+
+#. @-expanded: inode %i (%Q) is an illegal character device.\n
+#: e2fsck/problem.c:1088
+msgid "@i %i (%Q) is an @I character @v.\n"
+msgstr "@i %i (%Q) ist ein @I Zeichen @v.\n"
+
+#. @-expanded: inode %i (%Q) is an illegal block device.\n
+#: e2fsck/problem.c:1093
+msgid "@i %i (%Q) is an @I @b @v.\n"
+msgstr "@i %i (%Q) ist ein @I @b @v.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
+#: e2fsck/problem.c:1098
+msgid "@E is duplicate '.' @e.\n"
+msgstr "@E ist ein doppelter ».« @e.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
+#: e2fsck/problem.c:1103
+msgid "@E is duplicate '..' @e.\n"
+msgstr "@E ist ein doppelter »..« @e.\n"
+
+#: e2fsck/problem.c:1108
+#: e2fsck/problem.c:1403
+#, c-format
+msgid "Internal error: couldn't find dir_info for %i.\n"
+msgstr "Interner Fehler: kann dir_info für %i nicht finden.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
+#: e2fsck/problem.c:1113
+msgid "@E has rec_len of %Dr, @s %N.\n"
+msgstr "@E hat rec_len von %Dr, sollte %N sein.\n"
+
+#. @-expanded: error allocating icount structure: %m\n
+#: e2fsck/problem.c:1118
+#, c-format
+msgid "@A icount structure: %m\n"
+msgstr "@A icount structure: %m\n"
+
+#. @-expanded: Error iterating over directory blocks: %m\n
+#: e2fsck/problem.c:1123
+#, c-format
+msgid "Error iterating over @d @bs: %m\n"
+msgstr "Fehler beim Durchlaufen der @d @bs: %m\n"
+
+#. @-expanded: Error reading directory block %b (inode %i): %m\n
+#: e2fsck/problem.c:1128
+msgid "Error reading @d @b %b (@i %i): %m\n"
+msgstr "Lesefehler @d @b %b (@i %i): %m\n"
+
+#. @-expanded: Error writing directory block %b (inode %i): %m\n
+#: e2fsck/problem.c:1133
+msgid "Error writing @d @b %b (@i %i): %m\n"
+msgstr "Schreibfehler @d @b %b (@i %i): %m\n"
+
+#. @-expanded: error allocating new directory block for inode %i (%s): %m\n
+#: e2fsck/problem.c:1138
+#, c-format
+msgid "@A new @d @b for @i %i (%s): %m\n"
+msgstr "@A neu @d @b for @i %i (%s): %m\n"
+
+#. @-expanded: Error deallocating inode %i: %m\n
+#: e2fsck/problem.c:1143
+#, c-format
+msgid "Error deallocating @i %i: %m\n"
+msgstr "Fehler bei der Freigabe von @i %i: %m\n"
+
+#. @-expanded: directory entry for '.' in %p (%i) is big.\n
+#: e2fsck/problem.c:1148
+#, c-format
+msgid "@d @e for '.' in %p (%i) is big.\n"
+msgstr "Verzeichniseintrag für ».« in %p (%i) ist gross.\n"
+
+#. @-expanded: inode %i (%Q) is an illegal FIFO.\n
+#: e2fsck/problem.c:1153
+msgid "@i %i (%Q) is an @I FIFO.\n"
+msgstr "@i %i (%Q) ist ein @I FIFO.\n"
+
+#. @-expanded: inode %i (%Q) is an illegal socket.\n
+#: e2fsck/problem.c:1158
+msgid "@i %i (%Q) is an @I socket.\n"
+msgstr "@i %i (%Q) ist ein @I Socket.\n"
+
+#. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
+#: e2fsck/problem.c:1163
+msgid "Setting filetype for @E to %N.\n"
+msgstr "Setze Dateitype für @E auf %N.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
+#: e2fsck/problem.c:1168
+msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
+msgstr "@E hat einen falschen Dateityp (war %Dt, sollte %N sein).\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
+#: e2fsck/problem.c:1173
+msgid "@E has filetype set.\n"
+msgstr "@E hat Dateityp gesetzt.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
+#: e2fsck/problem.c:1178
+msgid "@E has a @z name.\n"
+msgstr "@E hat einen Namen der Länge Null..\n"
+
+#. @-expanded: Symlink %Q (inode #%i) is invalid.\n
+#: e2fsck/problem.c:1183
+msgid "Symlink %Q (@i #%i) is @n.\n"
+msgstr "Symlink %Q (@i #%i) is invalid.\n"
+
+#. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
+#: e2fsck/problem.c:1188
+msgid "@a @b @F @n (%If).\n"
+msgstr "@a @b @F ist falsch (%If).\n"
+
+#. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
+#: e2fsck/problem.c:1193
+msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
+msgstr "@f enthält große Dateien, aber das LARGE_FILE Flag in @S ist nicht gesetzt.\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) not referenced\n
+#: e2fsck/problem.c:1198
+msgid "@p @h %d: node (%B) not referenced\n"
+msgstr "@p @h %d: Node (%B) nicht referenziert\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) referenced twice\n
+#: e2fsck/problem.c:1203
+msgid "@p @h %d: node (%B) referenced twice\n"
+msgstr "@p @h %d: Node (%B) doppelt referenziert\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has bad min hash\n
+#: e2fsck/problem.c:1208
+msgid "@p @h %d: node (%B) has bad min hash\n"
+msgstr "@p @h %d: node (%B) has bad min hash\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has bad max hash\n
+#: e2fsck/problem.c:1213
+msgid "@p @h %d: node (%B) has bad max hash\n"
+msgstr "@p @h %d: node (%B) has bad max hash\n"
+
+#. @-expanded: invalid HTREE directory inode %d (%q).
+#: e2fsck/problem.c:1218
+msgid "@n @h %d (%q).  "
+msgstr "Invalid @h %d (%q).  "
+
+#. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
+#: e2fsck/problem.c:1222
+msgid "@p @h %d (%q): bad @b number %b.\n"
+msgstr "@p @h %d (%q): bad @b number %b.\n"
+
+#. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
+#: e2fsck/problem.c:1232
+#, c-format
+msgid "@p @h %d: root node is @n\n"
+msgstr "@p @h %d: root node is invalid\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid limit (%N)\n
+#: e2fsck/problem.c:1237
+msgid "@p @h %d: node (%B) has @n limit (%N)\n"
+msgstr "@p @h %d: node (%B) has bad limit (%N)\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid count (%N)\n
+#: e2fsck/problem.c:1242
+msgid "@p @h %d: node (%B) has @n count (%N)\n"
+msgstr "@p @h %d: node (%B) has bad count (%N)\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has an unordered hash table\n
+#: e2fsck/problem.c:1247
+msgid "@p @h %d: node (%B) has an unordered hash table\n"
+msgstr "@p @h %d: node (%B) has an unordered hash table\n"
+
+#. @-expanded: problem in HTREE directory inode %d: node (%B) has invalid depth (%N)\n
+#: e2fsck/problem.c:1252
+msgid "@p @h %d: node (%B) has @n depth (%N)\n"
+msgstr "@p @h %d: Knoten (%B) has @n Tiefe (%N)\n"
+
+#. @-expanded: Duplicate entry '%Dn' in %p (%i) found.
+#: e2fsck/problem.c:1257
+msgid "Duplicate @E found.  "
+msgstr "Doppelte @E gefunden.  "
+
+#. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
+#. @-expanded: Rename to %s
+#: e2fsck/problem.c:1262
+#, no-c-format
+msgid ""
+"@E has a non-unique filename.\n"
+"Rename to %s"
+msgstr ""
+"@E hat keinen eindeutigen Dateinnamen.\n"
+"Benenne in %s um"
+
+#. @-expanded: Duplicate entry '%Dn' found.\n
+#. @-expanded: \tMarking %p (%i) to be rebuilt.\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1267
+msgid ""
+"Duplicate @e '%Dn' found.\n"
+"\tMarking %p (%i) to be rebuilt.\n"
+"\n"
+msgstr ""
+"Doppelte @e '%Dn' gefunden.\n"
+"\tMarkiere %p (%i) für die Neuerstellung.\n"
+"\n"
+
+#. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
+#: e2fsck/problem.c:1272
+msgid "i_blocks_hi @F %N, @s zero.\n"
+msgstr "i_blocks_hi @F %N, @s zero.\n"
+
+#. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
+#: e2fsck/problem.c:1277
+msgid "Unexpected @b in @h %d (%q).\n"
+msgstr "Unerwarteter @b in @h %d (%q).\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
+#: e2fsck/problem.c:1281
+msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
+msgstr "@i %i wurde in @g %g gefunden, für die _INODE_UNINIT gesetzt ist.\n"
+
+#. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
+#: e2fsck/problem.c:1286
+msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
+msgstr "@i %i wurde im Bereich ungenutzter Inodes von @g %g gefunden.\n"
+
+#. @-expanded: Pass 3: Checking directory connectivity\n
+#: e2fsck/problem.c:1293
+msgid "Pass 3: Checking @d connectivity\n"
+msgstr "Durchgang 3: Prüfe @d Verknüpfungen\n"
+
+#. @-expanded: root inode not allocated.
+#: e2fsck/problem.c:1298
+msgid "@r not allocated.  "
+msgstr "@r nicht zugeordnet. "
+
+#. @-expanded: No room in lost+found directory.
+#: e2fsck/problem.c:1303
+msgid "No room in @l @d.  "
+msgstr "Kein Platz in @l @d.  "
+
+#. @-expanded: Unconnected directory inode %i (%p)\n
+#: e2fsck/problem.c:1308
+#, c-format
+msgid "Unconnected @d @i %i (%p)\n"
+msgstr "Nicht verbundene @d @i %i (%p)\n"
+
+#. @-expanded: /lost+found not found.
+#: e2fsck/problem.c:1313
+msgid "/@l not found.  "
+msgstr "/@l nicht gefunden.  "
+
+#. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
+#: e2fsck/problem.c:1318
+msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
+msgstr "»..« in %Q (%i) ist %P (%j), @s %q (%d).\n"
+
+#. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
+#: e2fsck/problem.c:1323
+msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
+msgstr "Falscher oder fehlender /@l.  Wiederverbinden nicht möglich.\n"
+
+#. @-expanded: Could not expand /lost+found: %m\n
+#: e2fsck/problem.c:1328
+#, c-format
+msgid "Could not expand /@l: %m\n"
+msgstr "Erweitern nicht möglich /@l: %m\n"
+
+#: e2fsck/problem.c:1333
+#, c-format
+msgid "Could not reconnect %i: %m\n"
+msgstr "Wiederverbinden nicht möglich %i: %m\n"
+
+#. @-expanded: Error while trying to find /lost+found: %m\n
+#: e2fsck/problem.c:1338
+#, c-format
+msgid "Error while trying to find /@l: %m\n"
+msgstr "Fehler während der Suche nach /@l: %m\n"
+
+#. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
+#: e2fsck/problem.c:1343
+#, c-format
+msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
+msgstr "ext2fs_new_@b: %m während des Versuches /@l @d zu erzeugen.\n"
+
+#. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
+#: e2fsck/problem.c:1348
+#, c-format
+msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
+msgstr "ext2fs_new_@i: %m während des Versuches /@l @d zu erzeugen.\n"
+
+#. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
+#: e2fsck/problem.c:1353
+#, c-format
+msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
+msgstr "ext2fs_new_dir_@b: %m während des Versuches /@l @d zu erzeugen.\n"
+
+#. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
+#: e2fsck/problem.c:1358
+#, c-format
+msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
+msgstr "ext2fs_write_dir_@b: %m während des Schreibens von @d @b für /@l\n"
+
+#. @-expanded: Error while adjusting inode count on inode %i\n
+#: e2fsck/problem.c:1363
+#, c-format
+msgid "Error while adjusting @i count on @i %i\n"
+msgstr "Fehler während der Einstellung von @i count auf @i %i\n"
+
+#. @-expanded: Couldn't fix parent of inode %i: %m\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1368
+#, c-format
+msgid ""
+"Couldn't fix parent of @i %i: %m\n"
+"\n"
+msgstr ""
+"Konnte Parent von @i %i: %m nicht reparieren\n"
+"\n"
+
+#. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
+#. @-expanded: \n
+#: e2fsck/problem.c:1373
+#, c-format
+msgid ""
+"Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
+"\n"
+msgstr ""
+"Parent von @i %i konnte nicht repariert werden: \n"
+"parent @d nicht gefunden.\n"
+
+#. @-expanded: Error creating root directory (%s): %m\n
+#: e2fsck/problem.c:1383
+#, c-format
+msgid "Error creating root @d (%s): %m\n"
+msgstr "Fehler beim Erzeugen des root @d (%s): %m\n"
+
+#. @-expanded: Error creating /lost+found directory (%s): %m\n
+#: e2fsck/problem.c:1388
+#, c-format
+msgid "Error creating /@l @d (%s): %m\n"
+msgstr "Fehler beim Erzeugen des /@l @d (%s): %m\n"
+
+#. @-expanded: root inode is not a directory; aborting.\n
+#: e2fsck/problem.c:1393
+msgid "@r is not a @d; aborting.\n"
+msgstr "@r ist kein @d; breche ab.\n"
+
+#. @-expanded: Cannot proceed without a root inode.\n
+#: e2fsck/problem.c:1398
+msgid "Cannot proceed without a @r.\n"
+msgstr "Kann ohne @r nicht fortsetzen.\n"
+
+#. @-expanded: /lost+found is not a directory (ino=%i)\n
+#: e2fsck/problem.c:1408
+#, c-format
+msgid "/@l is not a @d (ino=%i)\n"
+msgstr "/@l ist kein @d (ino=%i)\n"
+
+#: e2fsck/problem.c:1415
+msgid "Pass 3A: Optimizing directories\n"
+msgstr "Durchgang 3A: Optimiere Verzeichnisse\n"
+
+#: e2fsck/problem.c:1420
+#, c-format
+msgid "Failed to create dirs_to_hash iterator: %m\n"
+msgstr "dirs_to_hash Iterator konnte nicht erzeugt werden: %m\n"
+
+#: e2fsck/problem.c:1425
+msgid "Failed to optimize directory %q (%d): %m\n"
+msgstr "Verzeichnis %q (%d) konnte nicht optimiert werden: %m\n"
+
+#: e2fsck/problem.c:1430
+msgid "Optimizing directories: "
+msgstr "Optimiere Verzeichnisse: "
+
+#: e2fsck/problem.c:1447
+msgid "Pass 4: Checking reference counts\n"
+msgstr "Durchgang 4: Überprüfe die Referenzzähler\n"
+
+#. @-expanded: unattached zero-length inode %i.
+#: e2fsck/problem.c:1452
+#, c-format
+msgid "@u @z @i %i.  "
+msgstr "@I @o @i %i in @S.  "
+
+#. @-expanded: unattached inode %i\n
+#: e2fsck/problem.c:1457
+#, c-format
+msgid "@u @i %i\n"
+msgstr "@u @i %i\n"
+
+#. @-expanded: inode %i ref count is %Il, should be %N.
+#: e2fsck/problem.c:1462
+msgid "@i %i ref count is %Il, @s %N.  "
+msgstr "@i %i Referenzzähler ist %Il, @s %N.  "
+
+#. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
+#. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
+#. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
+#: e2fsck/problem.c:1466
+msgid ""
+"WARNING: PROGRAMMING BUG IN E2FSCK!\n"
+"\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
+"@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
+msgstr ""
+"WARNUNG: PROGRAMMIERFEHLER IN E2FSCK!\n"
+"\tODER EIN TROTTEL (SIE) PRÜFT EIN EINGEHÄNGTES (AKTIVES) DATEISYSTEM.\n"
+"@i_link_info[%i] ist %N, @i.i_links_count ist %Il.  Sie sollten identisch sein!\n"
+
+#. @-expanded: Pass 5: Checking group summary information\n
+#: e2fsck/problem.c:1476
+msgid "Pass 5: Checking @g summary information\n"
+msgstr "Durchgang 5: Überprüfe @g Zusammenfassung\n"
+
+#. @-expanded: Padding at end of inode bitmap is not set.
+#: e2fsck/problem.c:1481
+msgid "Padding at end of @i @B is not set. "
+msgstr "Auffüllbyte am Ende von @i @B ist nicht gesetzt. "
+
+#. @-expanded: Padding at end of block bitmap is not set.
+#: e2fsck/problem.c:1486
+msgid "Padding at end of @b @B is not set. "
+msgstr "Auffüllbyte am Ende von @b @B ist nicht gesetzt. "
+
+#. @-expanded: block bitmap differences:
+#: e2fsck/problem.c:1491
+msgid "@b @B differences: "
+msgstr "@b @B differieren: "
+
+#. @-expanded: inode bitmap differences:
+#: e2fsck/problem.c:1511
+msgid "@i @B differences: "
+msgstr "@i @B differieren: "
+
+#. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
+#: e2fsck/problem.c:1531
+msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
+msgstr "Die Anzahl freier @is ist falsch für @g #%g (%i, gezählt=%j).\n"
+
+#. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
+#: e2fsck/problem.c:1536
+msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
+msgstr "Die Anzahl Verzeichnisse ist falsch für @g #%g (%i, gezählt=%j).\n"
+
+#. @-expanded: Free inodes count wrong (%i, counted=%j).\n
+#: e2fsck/problem.c:1541
+msgid "Free @is count wrong (%i, counted=%j).\n"
+msgstr "Die Anzahl freier @is ist falsch (%i, gezählt=%j).\n"
+
+#. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
+#: e2fsck/problem.c:1546
+msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
+msgstr "Die Anzahl freier Blöcke in @g #%g ist falsch (%b, gezählt=%c).\n"
+
+#. @-expanded: Free blocks count wrong (%b, counted=%c).\n
+#: e2fsck/problem.c:1551
+msgid "Free @bs count wrong (%b, counted=%c).\n"
+msgstr "Die Anzahl freier Blöcke ist falsch (%b, gezählt=%c).\n"
+
+#. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap
+#. @-expanded: endpoints (%i, %j)\n
+#: e2fsck/problem.c:1556
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "PROGRAMMIERFEHLER: @f (#%N) @B Endpunkte (%b, %c) passen nicht zu den berechneten @B Endpunkten (%i, %j)\n"
+
+#: e2fsck/problem.c:1562
+msgid "Internal error: fudging end of bitmap (%N)\n"
+msgstr "Interner Fehler: fudging end of bitmap (%N)\n"
+
+#. @-expanded: Error copying in replacement inode bitmap: %m\n
+#: e2fsck/problem.c:1567
+#, c-format
+msgid "Error copying in replacement @i @B: %m\n"
+msgstr "Fehler beim hineinkopieren von @i @B: %m\n"
+
+#. @-expanded: Error copying in replacement block bitmap: %m\n
+#: e2fsck/problem.c:1572
+#, c-format
+msgid "Error copying in replacement @b @B: %m\n"
+msgstr "Fehler beim hineinkopieren von @b @B: %m\n"
+
+#. @-expanded: Recreate journal
+#: e2fsck/problem.c:1597
+msgid "Recreate @j"
+msgstr "@j zurücksetzen"
+
+#. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
+#: e2fsck/problem.c:1602
+#, c-format
+msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
+msgstr "Blöcke von @g %g sind in Beutzung obwohl @g als BLOCK_UNINIT markiert ist\n"
+
+#. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
+#: e2fsck/problem.c:1607
+#, c-format
+msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
+msgstr "@g %g @i(s) sind in Benutzung obwohl @g als INODE_UNINIT markiert ist\n"
+
+#: e2fsck/problem.c:1725
+#, c-format
+msgid "Unhandled error code (0x%x)!\n"
+msgstr "Unbenutzter Fehlercode (0x%x)!\n"
+
+#: e2fsck/problem.c:1820
+msgid "IGNORED"
+msgstr "IGNORIERT"
+
+#: e2fsck/scantest.c:81
+#, c-format
+msgid "Memory used: %d, elapsed time: %6.3f/%6.3f/%6.3f\n"
+msgstr "benutzter Speicher: %d, vergangende Zeit: %6.3f/%6.3f/%6.3f\n"
+
+#: e2fsck/scantest.c:100
+#, c-format
+msgid "size of inode=%d\n"
+msgstr "Größe des Inode=%d\n"
+
+#: e2fsck/scantest.c:121
+msgid "while starting inode scan"
+msgstr "beim Starten der Inodeprüfung"
+
+#: e2fsck/scantest.c:132
+msgid "while doing inode scan"
+msgstr "während der Inodeprüfung"
+
+#: e2fsck/super.c:187
+#, c-format
+msgid "while calling ext2fs_block_iterate for inode %d"
+msgstr "während des Aufrufs von ext2fs_block_iterate für Inode %d"
+
+#: e2fsck/super.c:209
+#, c-format
+msgid "while calling ext2fs_adjust_ea_refcount for inode %d"
+msgstr "während des Aufrufs von ext2fs_adjust_ea_refcount für Inode %d"
+
+#: e2fsck/super.c:267
+msgid "Truncating"
+msgstr "Kürze"
+
+#: e2fsck/super.c:268
+msgid "Clearing"
+msgstr "Bereinige"
+
+#: e2fsck/unix.c:76
+#, c-format
+msgid ""
+"Usage: %s [-panyrcdfvtDFV] [-b superblock] [-B blocksize]\n"
+"\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
+"\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
+"\t\t[-E extended-options] device\n"
+msgstr ""
+"Aufruf: %s [-panyrcdfvtDFV] [-b Superblock] [-B Blockgröße]\n"
+"\t\t[-I Inode_Puffer_Blöcke] [-P Prozess_Inodegröße]\n"
+"\t\t[-l|-L Bad_Blocks_Datei] [-C Dateideskriptor] [-j externes_Journal]\n"
+"\t\t[-E erweiterte_Optionen] Gerät\n"
+
+#: e2fsck/unix.c:82
+#, c-format
+msgid ""
+"\n"
+"Emergency help:\n"
+" -p                   Automatic repair (no questions)\n"
+" -n                   Make no changes to the filesystem\n"
+" -y                   Assume \"yes\" to all questions\n"
+" -c                   Check for bad blocks and add them to the badblock list\n"
+" -f                   Force checking even if filesystem is marked clean\n"
+msgstr ""
+"\n"
+"Notfallhile:\n"
+" -p        automatische Reparatur (keine Fragen)\n"
+" -n        keine Veränderungen am Dateisystem vornehmen\n"
+" -y        \" Ja \" auf alle Fragen annehmen\n"
+" -c        suche nach defekten Blöcken\n"
+" -f        erzwinge die Überprüfung auch wenn alles i.O. erscheint\n"
+
+#: e2fsck/unix.c:88
+#, c-format
+msgid ""
+" -v                   Be verbose\n"
+" -b superblock        Use alternative superblock\n"
+" -B blocksize         Force blocksize when looking for superblock\n"
+" -j external_journal  Set location of the external journal\n"
+" -l bad_blocks_file   Add to badblocks list\n"
+" -L bad_blocks_file   Set badblocks list\n"
+msgstr ""
+" -v                   sei gesprächig\n"
+" -b Superbloc         Nutze Superblockkopie\n"
+" -B Blockgröße        erzwinge Blockgröße beim Suchen vom Superblock\n"
+" -j externes-Journal  Angabe des Speicherortes des externen Jounals\n"
+" -l bad_blocks_file   zur Liste der defekten Blöcke hinzufügen\n"
+" -L bad_blocks_file   Liste der defekten Blöcke definieren\n"
+
+#: e2fsck/unix.c:132
+#, c-format
+msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"
+msgstr "%s: %u/%u Dateien (%0d.%d%% nicht zusammenhängend), %u/%u Blöcke\n"
+
+#: e2fsck/unix.c:150
+#, c-format
+msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
+msgstr "         # von Inodes mit ind/dind/tind Blöcken: %u/%u/%u\n"
+
+#: e2fsck/unix.c:157
+#, c-format
+msgid "         Extent depth histogram: "
+msgstr "         Erweiterungstiefe Histogramm: "
+
+#: e2fsck/unix.c:207
+#: misc/badblocks.c:916
+#: misc/tune2fs.c:1567
+#: misc/util.c:151
+#: resize/main.c:248
+#, c-format
+msgid "while determining whether %s is mounted."
+msgstr "bei der Prüfung, ob %s eingehängt ist."
+
+#: e2fsck/unix.c:225
+#, c-format
+msgid "Warning!  %s is mounted.\n"
+msgstr "Warnung!  %s ist eingehängt.\n"
+
+#: e2fsck/unix.c:229
+#, c-format
+msgid "%s is mounted.  "
+msgstr "%s ist eingehängt.  "
+
+#: e2fsck/unix.c:231
+msgid ""
+"Cannot continue, aborting.\n"
+"\n"
+msgstr ""
+"Fortsetzung nicht möglich, breche ab.\n"
+"\n"
+
+#: e2fsck/unix.c:232
+#, c-format
+msgid ""
+"\n"
+"\n"
+"\a\a\a\aWARNING!!!  Running e2fsck on a mounted filesystem may cause\n"
+"SEVERE filesystem damage.\a\a\a\n"
+"\n"
+msgstr ""
+"\n"
+"\n"
+"\a\a\a\aWARNUNG!!!  Die Benutzung von e2fsck auf einem eingehängten\n"
+"Dateisystem kann das Dateisystem STARK BESCHÄDIGEN.\n"
+"\n"
+
+#: e2fsck/unix.c:235
+msgid "Do you really want to continue"
+msgstr "Wirklich fortfahren"
+
+#: e2fsck/unix.c:237
+#, c-format
+msgid "check aborted.\n"
+msgstr "Prüfung abgebrochen.\n"
+
+#: e2fsck/unix.c:310
+msgid " contains a file system with errors"
+msgstr " enthält ein fehlerhaftes Dateisystem"
+
+#: e2fsck/unix.c:312
+msgid " was not cleanly unmounted"
+msgstr " wurde nicht ordnungsgemäß ausgehängt"
+
+#: e2fsck/unix.c:314
+msgid " primary superblock features different from backup"
+msgstr "Eigenschaften des primären Superblocks unterscheiden sich vom Backup"
+
+#: e2fsck/unix.c:318
+#, c-format
+msgid " has been mounted %u times without being checked"
+msgstr " wurde %u mal ohne Überprüfung eingehängt"
+
+#: e2fsck/unix.c:324
+msgid " has filesystem last checked time in the future"
+msgstr " hat einen in der Zukunft liegenden Zeitpunkt der letzten Püfung des Dateisystems"
+
+#: e2fsck/unix.c:330
+#, c-format
+msgid " has gone %u days without being checked"
+msgstr " wurde %u Tage ohne Überprüfung genutzt"
+
+#: e2fsck/unix.c:339
+msgid ", check forced.\n"
+msgstr ", Prüfung erzwungen.\n"
+
+#: e2fsck/unix.c:342
+#, c-format
+msgid "%s: clean, %u/%u files, %u/%u blocks"
+msgstr "%s: sauber, %u/%u Dateien, %u/%u Blöcke"
+
+#: e2fsck/unix.c:359
+msgid " (check deferred; on battery)"
+msgstr " (Prüfung nach nächstem Einhängen)"
+
+#: e2fsck/unix.c:362
+msgid " (check after next mount)"
+msgstr " (Prüfung nach nächstem Einhängen)"
+
+#: e2fsck/unix.c:364
+#, c-format
+msgid " (check in %ld mounts)"
+msgstr " (Prüfung nach %ld Einhängevorgängen)"
+
+#: e2fsck/unix.c:511
+#, c-format
+msgid "ERROR: Couldn't open /dev/null (%s)\n"
+msgstr "Fehler: Kann /dev/null (%s) nicht öffnen\n"
+
+#: e2fsck/unix.c:581
+#, c-format
+msgid "Invalid EA version.\n"
+msgstr "Invalid EA version.\n"
+
+#: e2fsck/unix.c:590
+#, c-format
+msgid "Unknown extended option: %s\n"
+msgstr "Unbekannte erweiterte Option: %s\n"
+
+#: e2fsck/unix.c:612
+#, c-format
+msgid ""
+"Syntax error in e2fsck config file (%s, line #%d)\n"
+"\t%s\n"
+msgstr ""
+"Syntaxfehler in der Konfigurationsdatei von e2fsck (%s, Zeile %d)\n"
+"\t%s\n"
+
+#: e2fsck/unix.c:680
+#, c-format
+msgid "Error validating file descriptor %d: %s\n"
+msgstr "Fehler bei Überprüfung des Datei-Deskriptors %d: %s\n"
+
+#: e2fsck/unix.c:684
+msgid "Invalid completion information file descriptor"
+msgstr "Ungültiger »completion information«-Datei-Deskriptor"
+
+#: e2fsck/unix.c:699
+msgid "Only one of the options -p/-a, -n or -y may be specified."
+msgstr "Nur eine der Optionen -p/-a, -n oder -y darf angegeben werden."
+
+#: e2fsck/unix.c:720
+#, c-format
+msgid "The -t option is not supported on this version of e2fsck.\n"
+msgstr "Die -t Option wird von dieser e2fsck-Version nicht unterstützt.\n"
+
+#: e2fsck/unix.c:801
+#: misc/tune2fs.c:549
+#: misc/tune2fs.c:833
+#: misc/tune2fs.c:850
+#, c-format
+msgid "Unable to resolve '%s'"
+msgstr "Nicht möglich »%s« aufzulösen"
+
+#: e2fsck/unix.c:831
+#, c-format
+msgid "The -c and the -l/-L options may not be both used at the same time.\n"
+msgstr "Die -c und -l/-L Optionen dürfen nicht gleichzeitig verwendet werden.\n"
+
+#: e2fsck/unix.c:879
+#, c-format
+msgid ""
+"E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
+"\n"
+msgstr "2FSCK_JBD_DEBUG \"%s\" ist keine Ganzzahl\n"
+
+#: e2fsck/unix.c:888
+#, c-format
+msgid ""
+"\n"
+"Invalid non-numeric argument to -%c (\"%s\")\n"
+"\n"
+msgstr ""
+"\n"
+"Ungültiges nicht-numerisches Argument für -%c (\"%s\")\n"
+"\n"
+
+#: e2fsck/unix.c:929
+#, c-format
+msgid "Error: ext2fs library version out of date!\n"
+msgstr "Fehler: ext2fs-Bibliotheks-Version ist zu alt!\n"
+
+#: e2fsck/unix.c:937
+msgid "while trying to initialize program"
+msgstr "bei der Programminitialisierung"
+
+#: e2fsck/unix.c:951
+#, c-format
+msgid "\tUsing %s, %s\n"
+msgstr "\tBenutze %s, %s\n"
+
+#: e2fsck/unix.c:963
+msgid "need terminal for interactive repairs"
+msgstr "Benötige ein Terminal für interaktive Reparaturen"
+
+#: e2fsck/unix.c:1010
+#, c-format
+msgid "%s: %s trying backup blocks...\n"
+msgstr "%s: %s versuche es mit Backup-Blöcken...\n"
+
+#: e2fsck/unix.c:1012
+msgid "Superblock invalid,"
+msgstr "Superblock ungültig"
+
+#: e2fsck/unix.c:1013
+msgid "Group descriptors look bad..."
+msgstr "Gruppen-Deskriptoren scheinen defekt zu sein..."
+
+#: e2fsck/unix.c:1040
+#, c-format
+msgid ""
+"The filesystem revision is apparently too high for this version of e2fsck.\n"
+"(Or the filesystem superblock is corrupt)\n"
+"\n"
+msgstr ""
+"Diese Dateisystem-Revision ist offensichtlich zu neu für diese Version \n"
+"von e2fsck (oder der Dateisystem-Superblock ist defekt).\n"
+"\n"
+
+#: e2fsck/unix.c:1046
+#, c-format
+msgid "Could this be a zero-length partition?\n"
+msgstr "Könnte es eine Partion der Länge Null sein?\n"
+
+#: e2fsck/unix.c:1048
+#, c-format
+msgid "You must have %s access to the filesystem or be root\n"
+msgstr "Sie benötigen %s- oder root-Rechte für das Dateisystem.\n"
+
+#: e2fsck/unix.c:1053
+#, c-format
+msgid "Possibly non-existent or swap device?\n"
+msgstr "Möglicherweise ist die Partition nicht vorhanden oder eine Swap-Partition?\n"
+
+#: e2fsck/unix.c:1055
+#, c-format
+msgid "Filesystem mounted or opened exclusively by another program?\n"
+msgstr ""
+"Ist das Dateisystem eingehängt or exklusiv von einem anderen Programm\n"
+"\n"
+"geöffnet worden?\n"
+
+#: e2fsck/unix.c:1059
+#, c-format
+msgid ""
+"Disk write-protected; use the -n option to do a read-only\n"
+"check of the device.\n"
+msgstr ""
+"Laufwerk ist schreibgeschützt, nutzen Sie die -n Option\n"
+"um es im Nur-Lesen-Modus zu prüfen.\n"
+
+#: e2fsck/unix.c:1123
+msgid "Get a newer version of e2fsck!"
+msgstr "Neuere Version von e2fsck benötigt!"
+
+#: e2fsck/unix.c:1147
+#, c-format
+msgid "while checking ext3 journal for %s"
+msgstr "während der Prüfung des ext3-Journals für %s"
+
+#: e2fsck/unix.c:1158
+#, c-format
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
+msgstr "Warnung: Überspringe Journal-Wiederherstellung, da das Dateisystem im Nur-Lesen-Modus ist.\n"
+
+#: e2fsck/unix.c:1171
+#, c-format
+msgid "unable to set superblock flags on %s\n"
+msgstr "Superblock-Flags konntan auf %s nicht gesetzt werden\n"
+
+#: e2fsck/unix.c:1177
+#, c-format
+msgid "while recovering ext3 journal of %s"
+msgstr "bei der Wiederherstellung des ext3-Journals von %s"
+
+#: e2fsck/unix.c:1201
+#, c-format
+msgid "%s has unsupported feature(s):"
+msgstr "%s besitzt nicht unterstützte Eigenschaft(en):"
+
+#: e2fsck/unix.c:1217
+msgid "Warning: compression support is experimental.\n"
+msgstr "Warnung: Die Kompressionsunterstützung ist experimentell.\n"
+
+#: e2fsck/unix.c:1222
+#, c-format
+msgid ""
+"E2fsck not compiled with HTREE support,\n"
+"\tbut filesystem %s has HTREE directories.\n"
+msgstr ""
+"Die Unterstützung für HTREE wurde in e2fsck nicht aktiviert,\n"
+"\taber das Dateisystem %s besitzt HTREE Verzeichnisse.\n"
+
+#: e2fsck/unix.c:1276
+msgid "while reading bad blocks inode"
+msgstr "beim Lesen des Bad-Block-Inodes"
+
+#: e2fsck/unix.c:1278
+#, c-format
+msgid "This doesn't bode well, but we'll try to go on...\n"
+msgstr "Das verheißt nichts gutes, aber wir versuchen es trotzdem ..\n"
+
+#: e2fsck/unix.c:1304
+msgid "Couldn't determine journal size"
+msgstr "Konnte die Größe des Dateisystems nicht ermitteln"
+
+#: e2fsck/unix.c:1307
+#, c-format
+msgid "Creating journal (%d blocks): "
+msgstr "Erstelle Journal (%d Blöcke): "
+
+#: e2fsck/unix.c:1314
+#: misc/mke2fs.c:2091
+msgid ""
+"\n"
+"\twhile trying to create journal"
+msgstr ""
+"\n"
+"\tbeim Erstellen des Journals"
+
+#: e2fsck/unix.c:1317
+#, c-format
+msgid " Done.\n"
+msgstr " Erledigt.\n"
+
+#: e2fsck/unix.c:1318
+#, c-format
+msgid ""
+"\n"
+"*** journal has been re-created - filesystem is now ext3 again ***\n"
+msgstr ""
+"\n"
+"*** Journal wurde wiederhergestellt - Dateisystem ist nun wieder ext3 ***\n"
+
+#: e2fsck/unix.c:1325
+#, c-format
+msgid "Restarting e2fsck from the beginning...\n"
+msgstr "Beginne e2fsck neu ...\n"
+
+#: e2fsck/unix.c:1329
+msgid "while resetting context"
+msgstr "beim Rücksetzen des Kontexts"
+
+#: e2fsck/unix.c:1336
+#, c-format
+msgid "%s: e2fsck canceled.\n"
+msgstr "%s: e2fsck abgebrochhen.\n"
+
+#: e2fsck/unix.c:1341
+msgid "aborted"
+msgstr "abgebrochen"
+
+#: e2fsck/unix.c:1353
+#, c-format
+msgid ""
+"\n"
+"%s: ***** FILE SYSTEM WAS MODIFIED *****\n"
+msgstr ""
+"\n"
+"%s: ***** DATEISYSTEM WURDE VERÄNDERT *****\n"
+
+#: e2fsck/unix.c:1356
+#, c-format
+msgid "%s: ***** REBOOT LINUX *****\n"
+msgstr "%s: ***** LINUX MUSS NEU GESTARTET WERDEN *****\n"
+
+#: e2fsck/unix.c:1364
+#, c-format
+msgid ""
+"\n"
+"%s: ********** WARNING: Filesystem still has errors **********\n"
+"\n"
+msgstr ""
+"\n"
+"%s: ********** WARNUNG: Noch Fehler im Dateisystem  **********\n"
+"\n"
+
+#: e2fsck/unix.c:1400
+msgid "while setting block group checksum info"
+msgstr "beim Setzen der Blockgruppen-Prüfsummeninfo"
+
+#: e2fsck/util.c:138
+#: misc/util.c:68
+msgid "yY"
+msgstr "jJ"
+
+#: e2fsck/util.c:139
+msgid "nN"
+msgstr "nN"
+
+#: e2fsck/util.c:153
+msgid "<y>"
+msgstr "<j>"
+
+#: e2fsck/util.c:155
+msgid "<n>"
+msgstr "<n>"
+
+#: e2fsck/util.c:157
+msgid " (y/n)"
+msgstr " (j/n)"
+
+#: e2fsck/util.c:172
+msgid "cancelled!\n"
+msgstr "abgebrochen!\n"
+
+#: e2fsck/util.c:187
+msgid "yes\n"
+msgstr "ja\n"
+
+#: e2fsck/util.c:189
+msgid "no\n"
+msgstr "nein\n"
+
+#: e2fsck/util.c:199
+#, c-format
+msgid ""
+"%s? no\n"
+"\n"
+msgstr ""
+"%s? nein\n"
+"\n"
+
+#: e2fsck/util.c:203
+#, c-format
+msgid ""
+"%s? yes\n"
+"\n"
+msgstr ""
+"%s? ja\n"
+"\n"
+
+#: e2fsck/util.c:207
+msgid "yes"
+msgstr "ja"
+
+#: e2fsck/util.c:207
+msgid "no"
+msgstr "nein"
+
+#: e2fsck/util.c:221
+#, c-format
+msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
+msgstr "e2fsck_read_bitmaps: illegal bitmap block(s) für %s"
+
+#: e2fsck/util.c:226
+msgid "reading inode and block bitmaps"
+msgstr "lese Inode und Block bitmaps"
+
+#: e2fsck/util.c:231
+#, c-format
+msgid "while retrying to read bitmaps for %s"
+msgstr "während des wiederholten Versuches, Bitmaps für %s einzulesen"
+
+#: e2fsck/util.c:243
+msgid "writing block and inode bitmaps"
+msgstr "Schreibe Block- und Inode-Bitmaps"
+
+#: e2fsck/util.c:248
+#, c-format
+msgid "while rewriting block and inode bitmaps for %s"
+msgstr "während des wiederholten Versuches, Block- und Inode-Bitmaps für %s zu schreiben."
+
+#: e2fsck/util.c:260
+#, c-format
+msgid ""
+"\n"
+"\n"
+"%s: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.\n"
+"\t(i.e., without -a or -p options)\n"
+msgstr ""
+"\n"
+"\n"
+"%s: UNERWARTETE INKONSISTENZ; fsck MANUELL AUSFÜHREN\n"
+"\t(d.h. ohne -a oder -p Option)\n"
+
+#: e2fsck/util.c:336
+#, c-format
+msgid "Memory used: %dk/%dk (%dk/%dk), "
+msgstr "benutzter Speicher: %dk/%dk (%dk/%dk), "
+
+#: e2fsck/util.c:340
+#, c-format
+msgid "Memory used: %d, "
+msgstr "benutzter Speicher: %d, "
+
+#: e2fsck/util.c:346
+#, c-format
+msgid "time: %5.2f/%5.2f/%5.2f\n"
+msgstr "Zeit: %5.2f/%5.2f/%5.2f\n"
+
+#: e2fsck/util.c:351
+#, c-format
+msgid "elapsed time: %6.3f\n"
+msgstr "abgelaufende Zeit: %6.3f\n"
+
+#: e2fsck/util.c:385
+#: e2fsck/util.c:399
+#, c-format
+msgid "while reading inode %ld in %s"
+msgstr "beim Lesen von Inode %ld in %s"
+
+#: e2fsck/util.c:413
+#: e2fsck/util.c:426
+#, c-format
+msgid "while writing inode %ld in %s"
+msgstr "beim Schreiben von Inode %ld in %s"
+
+#: e2fsck/util.c:575
+msgid "while allocating zeroizing buffer"
+msgstr "beim reservieren eines Puffers zum Nullen"
+
+#: misc/badblocks.c:66
+msgid "done                                \n"
+msgstr "erledigt                            \n"
+
+#: misc/badblocks.c:89
+#, c-format
+msgid ""
+"Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
+"       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
+"       device [last_block [first_block]]\n"
+msgstr ""
+"Aufruf: %s [-b Blockgröße] [-i Eingabedatei] [-o Ausgabedatei] [-svwnf]\n"
+"        [-c Blöcke_auf_einmal] [-d Verzögerungsfaktor_zwischen_Lesedurchgängen]\n"
+"        [-e maximale_Bad_Blocks] [-p Anzahl_Durchgänge]\n"
+"        [-t Testmuster [-t Testmuster [...]]]\n"
+"        Gerät [letzter_Block [Startblock]]\n"
+
+#: misc/badblocks.c:100
+#, c-format
+msgid ""
+"%s: The -n and -w options are mutually exclusive.\n"
+"\n"
+msgstr ""
+"%s: Die Optionen -n und -w schliessen sich gegenseitig aus.\n"
+"\n"
+
+#: misc/badblocks.c:202
+#, c-format
+msgid "%6.2f%% done, %s elapsed"
+msgstr ""
+
+#: misc/badblocks.c:289
+msgid "Testing with random pattern: "
+msgstr "Teste mit zufälligen Mustern: "
+
+#: misc/badblocks.c:307
+msgid "Testing with pattern 0x"
+msgstr "Teste mit Muster 0x"
+
+#: misc/badblocks.c:335
+#: misc/badblocks.c:404
+msgid "during seek"
+msgstr "beim Suchen"
+
+#: misc/badblocks.c:346
+#, c-format
+msgid "Weird value (%ld) in do_read\n"
+msgstr "Merkwürdiger Wert (%ld) in do_read\n"
+
+#: misc/badblocks.c:424
+msgid "during ext2fs_sync_device"
+msgstr "während ext2fs_sync_device"
+
+#: misc/badblocks.c:440
+#: misc/badblocks.c:699
+msgid "while beginning bad block list iteration"
+msgstr "beim Beginn des »Bad Block«-Listendurchlaufs"
+
+#: misc/badblocks.c:454
+#: misc/badblocks.c:551
+#: misc/badblocks.c:709
+msgid "while allocating buffers"
+msgstr "beim Zuweisen von Puffern"
+
+#: misc/badblocks.c:458
+#, c-format
+msgid "Checking blocks %lu to %lu\n"
+msgstr "Prüfe von Block %lu bis %lu\n"
+
+#: misc/badblocks.c:463
+msgid "Checking for bad blocks in read-only mode\n"
+msgstr "Suche nach defekten Blöcken im Nur-Lesen-Modus\n"
+
+#: misc/badblocks.c:472
+msgid "Checking for bad blocks (read-only test): "
+msgstr "Suche nach defekten Blöcken (Nur-Lesen-Modus):"
+
+#: misc/badblocks.c:480
+#: misc/badblocks.c:583
+#: misc/badblocks.c:628
+#: misc/badblocks.c:772
+msgid "Too many bad blocks, aborting test\n"
+msgstr "Zu viele defekte Blöcke - Test wird abgebrochen\n"
+
+#: misc/badblocks.c:558
+msgid "Checking for bad blocks in read-write mode\n"
+msgstr "Suche nach defekten Blöcken (Lesen+Schreiben-Modus)\n"
+
+#: misc/badblocks.c:560
+#: misc/badblocks.c:722
+#, c-format
+msgid "From block %lu to %lu\n"
+msgstr "Von Block %lu bis %lu\n"
+
+#: misc/badblocks.c:618
+msgid "Reading and comparing: "
+msgstr "Lesen und Vergleichen:"
+
+#: misc/badblocks.c:721
+msgid "Checking for bad blocks in non-destructive read-write mode\n"
+msgstr "Suche nach defekten Blöcken im zerstörungsfreien Lesen+Schreiben-Modus\n"
+
+#: misc/badblocks.c:727
+msgid "Checking for bad blocks (non-destructive read-write test)\n"
+msgstr "Suche nach defekten Blöcken (zerstörungsfreier Lesen+Schreiben-Modus)\n"
+
+#: misc/badblocks.c:734
+msgid ""
+"\n"
+"Interrupt caught, cleaning up\n"
+msgstr ""
+"\n"
+"Unterbrochen, räume auf\n"
+
+#: misc/badblocks.c:810
+#, c-format
+msgid "during test data write, block %lu"
+msgstr "beim Schreiben der Test-Daten; Block %lu"
+
+#: misc/badblocks.c:921
+#: misc/util.c:156
+#, c-format
+msgid "%s is mounted; "
+msgstr "%s ist eingehängt; "
+
+#: misc/badblocks.c:923
+msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
+msgstr "Badblocks wird trotzdem erzwungen. Hoffentlich ist /etc/mtab nicht korrekt.\n"
+
+#: misc/badblocks.c:928
+msgid "it's not safe to run badblocks!\n"
+msgstr "es ist zu unsicher, Badblocks zu starten!\n"
+
+#: misc/badblocks.c:933
+#: misc/util.c:167
+#, c-format
+msgid "%s is apparently in use by the system; "
+msgstr "%s wird offensichtlich vom System genutzt; "
+
+#: misc/badblocks.c:936
+msgid "badblocks forced anyway.\n"
+msgstr "Badblocks wird trotzdem erzwungen. Hoffentlich ist /etc/mtab nicht korrekt.\n"
+
+#: misc/badblocks.c:956
+#, c-format
+msgid "invalid %s - %s"
+msgstr "ungültige %s - %s"
+
+#: misc/badblocks.c:1015
+#, c-format
+msgid "bad block size - %s"
+msgstr "bad block Größe - %s"
+
+#: misc/badblocks.c:1070
+#, c-format
+msgid "can't allocate memory for test_pattern - %s"
+msgstr "Kann keinen Speicher für Testmuster reservieren - %s"
+
+#: misc/badblocks.c:1097
+msgid "Maximum of one test_pattern may be specified in read-only mode"
+msgstr "Es darf im Nur-Lesen-Modus nur ein Testmuster angegeben werden"
+
+#: misc/badblocks.c:1103
+msgid "Random test_pattern is not allowed in read-only mode"
+msgstr "Zufälliges Testmuster ist im Nur-Lesen-Modus nicht erlaubt"
+
+#: misc/badblocks.c:1117
+msgid ""
+"Couldn't determine device size; you must specify\n"
+"the size manually\n"
+msgstr "Größe des Gerätes ist nicht feststellbar. Sie müssen sie manuell angeben.\n"
+
+#: misc/badblocks.c:1123
+msgid "while trying to determine device size"
+msgstr "beim Versuch, die Gerätegröße festzustellen"
+
+#: misc/badblocks.c:1128
+msgid "last block"
+msgstr "letzter Block"
+
+#: misc/badblocks.c:1134
+msgid "first block"
+msgstr "erster Block"
+
+#: misc/badblocks.c:1137
+#, c-format
+msgid "invalid starting block (%lu): must be less than %lu"
+msgstr "Ungültiger Startblock (%lu): er muss kleiner als %lu sein"
+
+#: misc/badblocks.c:1193
+msgid "while creating in-memory bad blocks list"
+msgstr "erstelle Bad-Block-Liste im Speicher"
+
+#: misc/badblocks.c:1208
+msgid "while adding to in-memory bad block list"
+msgstr "füge zur Bad-Block-Liste im Speicher hinzu"
+
+#: misc/badblocks.c:1232
+#, c-format
+msgid "Pass completed, %u bad blocks found.\n"
+msgstr "Durchgang beendet, %u defekte Blöcke gefunden.\n"
+
+#: misc/chattr.c:85
+#, c-format
+msgid "Usage: %s [-RVf] [-+=AacDdijsSu] [-v version] files...\n"
+msgstr "Aufruf: %s [-RVf] [-+=AacDdijsSu] [-v Version] Dateien...\n"
+
+#: misc/chattr.c:152
+#, c-format
+msgid "bad version - %s\n"
+msgstr "falsche Version - %s\n"
+
+#: misc/chattr.c:198
+#: misc/lsattr.c:113
+#, c-format
+msgid "while trying to stat %s"
+msgstr "beim Auslesen des Status von %s"
+
+#: misc/chattr.c:204
+#: misc/chattr.c:222
+#, c-format
+msgid "Flags of %s set as "
+msgstr "Flags von %s wie folgt gesetzt: "
+
+#: misc/chattr.c:214
+#, c-format
+msgid "while reading flags on %s"
+msgstr "beim Lesens der Flags in %s"
+
+#: misc/chattr.c:231
+#, c-format
+msgid "while setting flags on %s"
+msgstr "beim Setzen der Flags in %s"
+
+#: misc/chattr.c:239
+#, c-format
+msgid "Version of %s set as %lu\n"
+msgstr "Version von %s gesetzt auf %lu\n"
+
+#: misc/chattr.c:243
+#, c-format
+msgid "while setting version on %s"
+msgstr "beim Setzen der Version in %s"
+
+#: misc/chattr.c:263
+#, c-format
+msgid "Couldn't allocate path variable in chattr_dir_proc"
+msgstr "Konnte Pfad-Variable in chattr_dir_proc nicht reservieren"
+
+#: misc/chattr.c:302
+msgid "= is incompatible with - and +\n"
+msgstr "= ist inkompatibel mit - und +\n"
+
+#: misc/chattr.c:310
+msgid "Must use '-v', =, - or +\n"
+msgstr "Benutze »-v«, =, - oder +\n"
+
+#: misc/dumpe2fs.c:53
+#, c-format
+msgid "Usage: %s [-bfhixV] [-ob superblock] [-oB blocksize] device\n"
+msgstr "Aufruf: %s [-bfhixV] [-ob Superblock] [-oB Blockgröße] Gerät\n"
+
+#: misc/dumpe2fs.c:168
+#, c-format
+msgid "Group %lu: (Blocks "
+msgstr "Gruppe %lu: (Blöcke "
+
+#: misc/dumpe2fs.c:173
+#, c-format
+msgid "  Checksum 0x%04x, unused inodes %d\n"
+msgstr " Prüfsumme 0x%04x, %d ungenutzte Inodes\n"
+
+#: misc/dumpe2fs.c:178
+#, c-format
+msgid "  %s superblock at "
+msgstr "  %s Superblock in "
+
+#: misc/dumpe2fs.c:179
+msgid "Primary"
+msgstr "Primary"
+
+#: misc/dumpe2fs.c:179
+msgid "Backup"
+msgstr "Backup"
+
+#: misc/dumpe2fs.c:183
+#, c-format
+msgid ", Group descriptors at "
+msgstr ", Gruppendeskriptoren in "
+
+#: misc/dumpe2fs.c:187
+#, c-format
+msgid ""
+"\n"
+"  Reserved GDT blocks at "
+msgstr ""
+"\n"
+"  reservierte GDT Blöcke bei "
+
+#: misc/dumpe2fs.c:194
+#, c-format
+msgid " Group descriptor at "
+msgstr ", Gruppendeskriptor in "
+
+#: misc/dumpe2fs.c:200
+msgid "  Block bitmap at "
+msgstr "  Block bitmap in "
+
+#: misc/dumpe2fs.c:205
+msgid ", Inode bitmap at "
+msgstr ", Inode Bitmap in "
+
+#: misc/dumpe2fs.c:210
+msgid ""
+"\n"
+"  Inode table at "
+msgstr ""
+"\n"
+"  Inode-Tabelle in "
+
+#: misc/dumpe2fs.c:217
+#, c-format
+msgid ""
+"\n"
+"  %u free blocks, %u free inodes, %u directories%s"
+msgstr ""
+"\n"
+"  %u freie Blöcke, %u freie Inodes, %u Verzeichnisse%s"
+
+#: misc/dumpe2fs.c:224
+#, c-format
+msgid ", %u unused inodes\n"
+msgstr ", %u ungenutzte Inodes\n"
+
+#: misc/dumpe2fs.c:227
+msgid "  Free blocks: "
+msgstr "  Freie Blöcke: "
+
+#: misc/dumpe2fs.c:237
+msgid "  Free inodes: "
+msgstr "  Freie Inodes: "
+
+#: misc/dumpe2fs.c:264
+msgid "while printing bad block list"
+msgstr "beim Ausgeben der »Bad Block«-Liste"
+
+#: misc/dumpe2fs.c:270
+#, c-format
+msgid "Bad blocks: %u"
+msgstr "Bad Blocks: %u"
+
+#: misc/dumpe2fs.c:292
+#: misc/tune2fs.c:279
+msgid "while reading journal inode"
+msgstr "beim Lesen des Journal-Inodes"
+
+#: misc/dumpe2fs.c:295
+msgid "Journal size:             "
+msgstr "Journalgrösse:            "
+
+#: misc/dumpe2fs.c:319
+#: misc/tune2fs.c:200
+msgid "while reading journal superblock"
+msgstr "beim Lesen des Journal-Superblocks"
+
+#: misc/dumpe2fs.c:327
+msgid "Couldn't find journal superblock magic numbers"
+msgstr "Konnte die magische Nummer des Journal-Superblocks nicht finden"
+
+#: misc/dumpe2fs.c:331
+#, c-format
+msgid ""
+"\n"
+"Journal block size:       %u\n"
+"Journal length:           %u\n"
+"Journal first block:      %u\n"
+"Journal sequence:         0x%08x\n"
+"Journal start:            %u\n"
+"Journal number of users:  %u\n"
+msgstr ""
+"\n"
+"Journal Blockgröße:       %u\n"
+"Journal Länge:            %u\n"
+"Journal Startblock:       %u\n"
+"Journal Sequenz:          0x%08x\n"
+"Journal Start:            %u\n"
+"Journal Anzahl Nutzer:    %u\n"
+
+#: misc/dumpe2fs.c:344
+#, c-format
+msgid "Journal users:            %s\n"
+msgstr "Jounalnutzer:            %s\n"
+
+#: misc/dumpe2fs.c:360
+#: misc/mke2fs.c:693
+#: misc/tune2fs.c:868
+#, c-format
+msgid "Couldn't allocate memory to parse options!\n"
+msgstr "Speicher zum Parsen der Optionen konnte nicht reserviert werden!\n"
+
+#: misc/dumpe2fs.c:386
+#, c-format
+msgid "Invalid superblock parameter: %s\n"
+msgstr "Ungültiger Superblock-Parameter: %s\n"
+
+#: misc/dumpe2fs.c:401
+#, c-format
+msgid "Invalid blocksize parameter: %s\n"
+msgstr "Ungültiger Blockgrössen-Parameter: %s\n"
+
+#: misc/dumpe2fs.c:412
+#, c-format
+msgid ""
+"\n"
+"Bad extended option(s) specified: %s\n"
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid extended options are:\n"
+"\tsuperblock=<superblock number>\n"
+"\tblocksize=<blocksize>\n"
+msgstr ""
+"\n"
+"Falsche erweiterte Optionen angegeben: %s\n"
+"\n"
+"Erweiterte Optionen werden durch Kommatas getrennt. Manche erwarten ein\n"
+"\tArgument, welches mit Gleichheitszeichen (»=«) zugewiesen wird.\n"
+"\n"
+"Gültige erweiterte Optionen sind:\n"
+"\tsuperblock=<Nummer des Spuperblocks>\n"
+"\tblocksize=<Blockgrösse>\n"
+"\n"
+
+#: misc/dumpe2fs.c:471
+#: misc/mke2fs.c:1355
+#, c-format
+msgid "\tUsing %s\n"
+msgstr "\tBenutze %s\n"
+
+#: misc/dumpe2fs.c:507
+#: misc/e2image.c:674
+#: misc/tune2fs.c:1518
+#: resize/main.c:311
+#, c-format
+msgid "Couldn't find valid filesystem superblock.\n"
+msgstr "Kann keinen gültigen Dateisystem-Superblock finden.\n"
+
+#: misc/dumpe2fs.c:532
+#, c-format
+msgid ""
+"\n"
+"%s: %s: error reading bitmaps: %s\n"
+msgstr ""
+"\n"
+"%s: %s: Fehler beim Lesen von Bitmaps: %s\n"
+
+#: misc/e2image.c:52
+#, c-format
+msgid "Usage: %s [-rsI] device image_file\n"
+msgstr "Aufruf: %s [-r] Gerätedatei\n"
+
+#: misc/e2image.c:64
+msgid "Couldn't allocate header buffer\n"
+msgstr "Header-Puffer konnte nicht zugewiesen werden\n"
+
+#: misc/e2image.c:83
+#, c-format
+msgid "short write (only %d bytes) for writing image header"
+msgstr "short write (only %d bytes) for writing image header"
+
+#: misc/e2image.c:102
+msgid "while writing superblock"
+msgstr "beim Schreiben des Superblocks"
+
+#: misc/e2image.c:110
+msgid "while writing inode table"
+msgstr "beim Schreiben der Inode-Tabelle"
+
+#: misc/e2image.c:117
+msgid "while writing block bitmap"
+msgstr "beim Schreiben der Block-Bitmap"
+
+#: misc/e2image.c:124
+msgid "while writing inode bitmap"
+msgstr "beim Schreiben der Inode-Bitmap"
+
+#: misc/e2label.c:57
+#, c-format
+msgid "e2label: cannot open %s\n"
+msgstr "e2label: Kann %s nicht öffnen.\n"
+
+#: misc/e2label.c:62
+#, c-format
+msgid "e2label: cannot seek to superblock\n"
+msgstr "e2label: cannot seek to superblock\n"
+
+#: misc/e2label.c:67
+#, c-format
+msgid "e2label: error reading superblock\n"
+msgstr "e2label: Lesefehler im Superblock\n"
+
+#: misc/e2label.c:71
+#, c-format
+msgid "e2label: not an ext2 filesystem\n"
+msgstr "e2label: Kein ext2 Dateisystem\n"
+
+#: misc/e2label.c:96
+#: misc/tune2fs.c:1653
+#, c-format
+msgid "Warning: label too long, truncating.\n"
+msgstr "Warnung: Name zu lang, kürze ihn.\n"
+
+#: misc/e2label.c:99
+#, c-format
+msgid "e2label: cannot seek to superblock again\n"
+msgstr "e2label: cannot seek to superblock again\n"
+
+#: misc/e2label.c:104
+#, c-format
+msgid "e2label: error writing superblock\n"
+msgstr "e2label: Fehler beim Schreiben des Superblocks\n"
+
+#: misc/e2label.c:116
+#: misc/tune2fs.c:541
+#, c-format
+msgid "Usage: e2label device [newlabel]\n"
+msgstr "Aufruf: e2label Gerät [neuer_Name]\n"
+
+#: misc/e2undo.c:35
+#, c-format
+msgid "Usage: %s <transaction file> <filesystem>\n"
+msgstr "Aufruf: %s <Transaktionsdatei> <Dateisystem>\n"
+
+#: misc/e2undo.c:52
+msgid "Failed to read the file system data \n"
+msgstr "Die Dateisystemdaten konnten nicht gelesenb werden \n"
+
+#: misc/e2undo.c:62
+#: misc/e2undo.c:83
+#: misc/e2undo.c:108
+#: misc/e2undo.c:204
+#, c-format
+msgid "Failed tdb_fetch %s\n"
+msgstr "tdb_fetch von %s ist misslungen\n"
+
+#: misc/e2undo.c:70
+#, c-format
+msgid "The file system Mount time didn't match %u\n"
+msgstr "Die Zeit des letzten Einhängens des Dateisystems war nicht %u\n"
+
+#: misc/e2undo.c:89
+msgid "The file system UUID didn't match \n"
+msgstr "Die UUID des Dateisystems stimmte nicht überein \n"
+
+#: misc/e2undo.c:161
+#, c-format
+msgid "Failed tdb_open %s\n"
+msgstr "tdb_open von %s ist misslungen\n"
+
+#: misc/e2undo.c:167
+#, c-format
+msgid "Error while determining whether %s is mounted.\n"
+msgstr "Fehler beim Überprüfen, ob %s eingehängt ist.\n"
+
+#: misc/e2undo.c:173
+msgid "e2undo should only be run on unmounted file system\n"
+msgstr "e2undo sollte nur auf nicht-eingehängten Dateisystemen laufen\n"
+
+#: misc/e2undo.c:182
+#, c-format
+msgid "Failed to open %s\n"
+msgstr "%s konnte nicht geöffnet werden\n"
+
+#: misc/e2undo.c:208
+#, c-format
+msgid "Replayed transaction of size %zd at location %ld\n"
+msgstr "Zurückgespielte Transaktion der Größe %zd an Position %ld\n"
+
+#: misc/e2undo.c:214
+#, c-format
+msgid "Failed write %s\n"
+msgstr "Gescheitertes Schreiben von %s\n"
+
+#: misc/fsck.c:347
+#, c-format
+msgid "WARNING: couldn't open %s: %s\n"
+msgstr "WARNUNG: Konnte %s nicht öffnen: %s\n"
+
+#: misc/fsck.c:357
+#, c-format
+msgid "WARNING: bad format on line %d of %s\n"
+msgstr "WARNUNG: falsches Format in Zeile %d von %s\n"
+
+#: misc/fsck.c:372
+msgid ""
+"\a\a\aWARNING: Your /etc/fstab does not contain the fsck passno\n"
+"\tfield.  I will kludge around things for you, but you\n"
+"\tshould fix your /etc/fstab file as soon as you can.\n"
+"\n"
+msgstr ""
+"\a\a\aWARNUNG: Ihre /etc/fstab enthält kein »fsck passno«\n"
+"\tFeld.  Ich werde dieses ignorieren, aber Sie\n"
+"\tsollten ihre /etc/fstab so schnell wie möglich korrigieren.\n"
+"\n"
+
+#: misc/fsck.c:481
+#, c-format
+msgid "fsck: %s: not found\n"
+msgstr "fsck: %s: nicht gefunden\n"
+
+#: misc/fsck.c:597
+#, c-format
+msgid "%s: wait: No more child process?!?\n"
+msgstr "%s: wait: kein Kindprozess mehr?!?\n"
+
+#: misc/fsck.c:619
+#, c-format
+msgid "Warning... %s for device %s exited with signal %d.\n"
+msgstr "Warnung... %s für Gerät %s wurde mit Signal %d beendet.\n"
+
+#: misc/fsck.c:625
+#, c-format
+msgid "%s %s: status is %x, should never happen.\n"
+msgstr "%s %s: Status ist %x, sollte nie vorkommen.\n"
+
+#: misc/fsck.c:664
+#, c-format
+msgid "Finished with %s (exit status %d)\n"
+msgstr "Beendet mit %s (exit status %d)\n"
+
+#: misc/fsck.c:724
+#, c-format
+msgid "%s: Error %d while executing fsck.%s for %s\n"
+msgstr "%s: Fehler %d bei Ausführung von fsck.%s für %s\n"
+
+#: misc/fsck.c:745
+msgid ""
+"Either all or none of the filesystem types passed to -t must be prefixed\n"
+"with 'no' or '!'.\n"
+msgstr ""
+"Bei -t müssen entweder allen oder keinem Dateisystem ein »no« bzw. »!«\n"
+"vorangestellt werden.\n"
+
+#: misc/fsck.c:764
+msgid "Couldn't allocate memory for filesystem types\n"
+msgstr "Kann keinen Speicher für Dateisystemtypen reservieren.\n"
+
+#: misc/fsck.c:887
+#, c-format
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
+msgstr ""
+"%s: überspringe die ungültige Zeile in /etc/fstab: bind mount mit\n"
+" Durchgangsnummer für fsck, die nicht Null ist\n"
+
+#: misc/fsck.c:914
+#, c-format
+msgid "fsck: cannot check %s: fsck.%s not found\n"
+msgstr "fsck: kann %s nicht überprüfen: fsck.%s nicht gefunden\n"
+
+#: misc/fsck.c:970
+msgid "Checking all file systems.\n"
+msgstr "Überprüfe alle Dateisysteme.\n"
+
+#: misc/fsck.c:1061
+#, c-format
+msgid "--waiting-- (pass %d)\n"
+msgstr "--warten-- (Durchgang %d)\n"
+
+#: misc/fsck.c:1081
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgstr "Aufruf: fsck [-AMNPRTV] [ -C [ fd ] ] [-t Datesystemtyp] [FS-Optionen] [Dateisystem...]\n"
+
+#: misc/fsck.c:1123
+#, c-format
+msgid "%s: too many devices\n"
+msgstr "%s: zu viele Geräte\n"
+
+#: misc/fsck.c:1156
+#: misc/fsck.c:1242
+#, c-format
+msgid "%s: too many arguments\n"
+msgstr "%s: zu viele Argumente\n"
+
+#: misc/lsattr.c:73
+#, c-format
+msgid "Usage: %s [-RVadlv] [files...]\n"
+msgstr "Aufruf: %s [-RVadlv] [Dateien...]\n"
+
+#: misc/lsattr.c:83
+#, c-format
+msgid "While reading flags on %s"
+msgstr "Beim Lesen der Flags von %s"
+
+#: misc/lsattr.c:90
+#, c-format
+msgid "While reading version on %s"
+msgstr "Beim Lesen der Version von %s"
+
+#: misc/mke2fs.c:104
+#, c-format
+msgid ""
+"Usage: %s [-c|-l filename] [-b block-size] [-f fragment-size]\n"
+"\t[-i bytes-per-inode] [-I inode-size] [-J journal-options]\n"
+"\t[-G meta group size] [-N number-of-inodes]\n"
+"\t[-m reserved-blocks-percentage] [-o creator-os]\n"
+"\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
+"\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
+"\t[-T fs-type] [-U UUID] [-jnqvFSV] device [blocks-count]\n"
+msgstr ""
+"Aufruf: %s [-c|-l Dateiname] [-b Blockgröße] [-f Fragmentgröße]\n"
+"\t[-i Bytes-pro-Inode] [-I Inodegrösse] [-J Journal-Optionen]\n"
+"\t[-G Größe_der_Metagruppe] [-N Anzahl_der_Inodes]\n"
+"\t[-m Reservierte-Blöcke-Prozent] [-o Erzeuger-OS]\n"
+"\t[-g Blöcke-pro-Gruppe] [-L Volume-Label]\n"
+"\t[-M letztes-eingehängtes-Verzeichnis] [-O Eigenschaft[,...]]\n"
+"\t[-r fs-Revision] [-E erweiterte-Option[,...]]\n"
+"\t[-T Fs-Typ] [-jnqvFSV] Gerät [Block-Anzahl]\n"
+
+#: misc/mke2fs.c:206
+#, c-format
+msgid "Running command: %s\n"
+msgstr "Führe aus: %s\n"
+
+#: misc/mke2fs.c:210
+#, c-format
+msgid "while trying to run '%s'"
+msgstr "während des Versuchs, »%s« auszuführen"
+
+#: misc/mke2fs.c:217
+msgid "while processing list of bad blocks from program"
+msgstr "beim Auswerten der »Bad Block«-Liste vom Programm"
+
+#: misc/mke2fs.c:244
+#, c-format
+msgid "Block %d in primary superblock/group descriptor area bad.\n"
+msgstr "Block %d im primären Superblock/Gruppendeskriptorbereich defekt.\n"
+
+#: misc/mke2fs.c:246
+#, c-format
+msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
+msgstr ""
+"Die Blöcke %u bis einschließlich %u müssen in Ordung sein, um ein\n"
+"\tDateisystem zu erstellen.\n"
+
+#: misc/mke2fs.c:249
+msgid "Aborting....\n"
+msgstr "Breche ab...\n"
+
+#: misc/mke2fs.c:269
+#, c-format
+msgid ""
+"Warning: the backup superblock/group descriptors at block %u contain\n"
+"\tbad blocks.\n"
+"\n"
+msgstr ""
+"Warnung: die Sicherung des Superblock bzw. Gruppendeskriptors in Block %u enthält\n"
+"\tdefekte Blöcke.\n"
+"\n"
+
+#: misc/mke2fs.c:288
+msgid "while marking bad blocks as used"
+msgstr "beim Markieren von defekten Blöcken als »belegt«"
+
+#: misc/mke2fs.c:346
+msgid "done                            \n"
+msgstr "erledigt                        \n"
+
+#: misc/mke2fs.c:360
+msgid "Writing inode tables: "
+msgstr "Schreibe Inode-Tabellen: "
+
+#: misc/mke2fs.c:383
+#, c-format
+msgid ""
+"\n"
+"Could not write %d blocks in inode table starting at %u: %s\n"
+msgstr ""
+"\n"
+"Konnte %d Blöcke nicht in Inoden-Tabelle schreiben, beginnend bei %u: %s\n"
+
+#: misc/mke2fs.c:407
+msgid "while creating root dir"
+msgstr "beim Erstellen des Wurzelverzeichnisses"
+
+#: misc/mke2fs.c:414
+msgid "while reading root inode"
+msgstr "beim Lesen des Root-Inode"
+
+#: misc/mke2fs.c:428
+msgid "while setting root inode ownership"
+msgstr "beim Setzen des Root-Inode-Eigentümers"
+
+#: misc/mke2fs.c:446
+msgid "while creating /lost+found"
+msgstr "beim Erstellen von /lost+found"
+
+#: misc/mke2fs.c:453
+msgid "while looking up /lost+found"
+msgstr "beim Suchen von /lost+found"
+
+#: misc/mke2fs.c:466
+msgid "while expanding /lost+found"
+msgstr "beim Expandieren von /lost+found"
+
+#: misc/mke2fs.c:481
+msgid "while setting bad block inode"
+msgstr "beim Setzen des »Bad Block«-Inodes"
+
+#: misc/mke2fs.c:508
+#, c-format
+msgid "Out of memory erasing sectors %d-%d\n"
+msgstr "Speicher voll beim Löschen der Sektoren %d-%d\n"
+
+#: misc/mke2fs.c:518
+#, c-format
+msgid "Warning: could not read block 0: %s\n"
+msgstr "Warnung: konnte Block %s nicht lesen\n"
+
+#: misc/mke2fs.c:534
+#, c-format
+msgid "Warning: could not erase sector %d: %s\n"
+msgstr "Warnung: konnte Sektor %d: %s nicht löschen\n"
+
+#: misc/mke2fs.c:550
+msgid "while initializing journal superblock"
+msgstr "beim Initialisieren des Journal-Superblocks"
+
+#: misc/mke2fs.c:556
+msgid "Zeroing journal device: "
+msgstr "Überschreibe Journal-Device mit Nullen: "
+
+#: misc/mke2fs.c:569
+#, c-format
+msgid "while zeroing journal device (block %u, count %d)"
+msgstr "beim Überschreiben des Journal-Device mit Nullen (Block %u, Nr. %d)"
+
+#: misc/mke2fs.c:585
+msgid "while writing journal superblock"
+msgstr "beim Schreiben des Journal-Superblocks"
+
+#: misc/mke2fs.c:601
+#, c-format
+msgid ""
+"warning: %u blocks unused.\n"
+"\n"
+msgstr ""
+"Warnung: %u Blöcke unbenutzt.\n"
+"\n"
+
+#: misc/mke2fs.c:606
+#, c-format
+msgid "Filesystem label=%s\n"
+msgstr "Dateisystem-Label=%s\n"
+
+#: misc/mke2fs.c:607
+msgid "OS type: "
+msgstr "OS-Typ: "
+
+#: misc/mke2fs.c:612
+#, c-format
+msgid "Block size=%u (log=%u)\n"
+msgstr "Blockgröße=%u (log=%u)\n"
+
+#: misc/mke2fs.c:614
+#, c-format
+msgid "Fragment size=%u (log=%u)\n"
+msgstr "Fragmentgröße=%u (log=%u)\n"
+
+#: misc/mke2fs.c:616
+#, c-format
+msgid "%u inodes, %u blocks\n"
+msgstr "%u Inodes, %u Blöcke\n"
+
+#: misc/mke2fs.c:618
+#, c-format
+msgid "%u blocks (%2.2f%%) reserved for the super user\n"
+msgstr "%u Blöcke (%2.2f%%) reserviert für den Superuser\n"
+
+#: misc/mke2fs.c:621
+#, c-format
+msgid "First data block=%u\n"
+msgstr "Erster Datenblock=%u\n"
+
+#: misc/mke2fs.c:623
+#, c-format
+msgid "Maximum filesystem blocks=%lu\n"
+msgstr "Maximale Dateisystem-Blöcke=%lu\n"
+
+#: misc/mke2fs.c:627
+#, c-format
+msgid "%u block groups\n"
+msgstr "%u Blockgruppen\n"
+
+#: misc/mke2fs.c:629
+#, c-format
+msgid "%u block group\n"
+msgstr "%u Blockgruppe\n"
+
+#: misc/mke2fs.c:630
+#, c-format
+msgid "%u blocks per group, %u fragments per group\n"
+msgstr "%u Blöcke pro Gruppe, %u Fragmente pro Gruppe\n"
+
+#: misc/mke2fs.c:632
+#, c-format
+msgid "%u inodes per group\n"
+msgstr "%u Inodes pro Gruppe\n"
+
+#: misc/mke2fs.c:639
+#, c-format
+msgid "Superblock backups stored on blocks: "
+msgstr "Superblock-Sicherungskopien gespeichert in den Blöcken: "
+
+#: misc/mke2fs.c:718
+#, c-format
+msgid "Invalid stride parameter: %s\n"
+msgstr "Ungültiger \"stride\"-Parameter: %s\n"
+
+#: misc/mke2fs.c:733
+#, c-format
+msgid "Invalid stripe-width parameter: %s\n"
+msgstr "Ungültiger Stripebreite-Parameter: %s\n"
+
+#: misc/mke2fs.c:755
+#, c-format
+msgid "Invalid resize parameter: %s\n"
+msgstr "Ungültiger \"resize\"-Parameter: %s\n"
+
+#: misc/mke2fs.c:762
+#, c-format
+msgid "The resize maximum must be greater than the filesystem size.\n"
+msgstr "Das Maximum der Vergrösserung muss oberhalb als der Dateisystem-Grösse liegen.\n"
+
+#: misc/mke2fs.c:786
+#, c-format
+msgid "On-line resizing not supported with revision 0 filesystems\n"
+msgstr ""
+"Online-Grössenänderungen werden bei Revison 0 Dateisystemen nicht\n"
+"\tunterstützt\n"
+
+#: misc/mke2fs.c:808
+#, c-format
+msgid ""
+"\n"
+"Bad option(s) specified: %s\n"
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid extended options are:\n"
+"\tstride=<RAID per-disk data chunk in blocks>\n"
+"\tstripe-width=<RAID stride * data disks in blocks>\n"
+"\tresize=<resize maximum size in blocks>\n"
+"\tlazy_itable_init=<0 to disable, 1 to enable>\n"
+"\ttest_fs\n"
+"\n"
+msgstr ""
+"\n"
+"Ungültige Option(en) angegeben: %s\n"
+"\n"
+"Erweiterte Optionen werden durch Kommatas getrennt. Manche erwarten ein\n"
+"\tArgument, welches mit Gleichheitszeichen (»=«) zugewiesen wird.\n"
+"\n"
+"\terhalten welches mit Gleichheitszeichen (»=«) zugewiesen wird.\n"
+"\n"
+"gültige erweiterte Optionen sind:\n"
+"\tstride=<RAID Segmentgrösse in Blöcken>\n"
+"\tstripe-width=<RAID Stride * Datenplatten in Blöcken>\n"
+"\tresize=<Obergrenze für Grössenänderung in Blöcken>\n"
+"\tlazy_itable_init=<0 für Ab-, 1 für Einschalten>\n"
+"\ttest_fs\n"
+"\n"
+
+#: misc/mke2fs.c:824
+#, c-format
+msgid ""
+"\n"
+"Warning: RAID stripe-width %u not an even multiple of stride %u.\n"
+"\n"
+msgstr ""
+"\n"
+"Warnung: RAID Stripe-Breite %u ist kein ganzzahliges Vielfaches von\n"
+"\tStride %u.\n"
+"\n"
+
+#: misc/mke2fs.c:856
+#, c-format
+msgid ""
+"Syntax error in mke2fs config file (%s, line #%d)\n"
+"\t%s\n"
+msgstr ""
+"Syntax Fehler in der Konfigurationsdatei von mkefs (%s, Zeile %d)\n"
+"\t%s\n"
+
+#: misc/mke2fs.c:869
+#: misc/tune2fs.c:353
+#, c-format
+msgid "Invalid filesystem option set: %s\n"
+msgstr "Unvollständige Dateisystem-Option gesetzt: %s\n"
+
+#: misc/mke2fs.c:979
+#, c-format
+msgid ""
+"\n"
+"Warning!  Your mke2fs.conf file does not define the %s filesystem type.\n"
+msgstr ""
+"\n"
+"Warnung: Ihre mke2fs.conf Datei definiert den Typ des Dateisystems auf %s nicht.\n"
+
+#: misc/mke2fs.c:982
+#, c-format
+msgid ""
+"You probably need to install an updated mke2fs.conf file.\n"
+"\n"
+msgstr ""
+"Sie müssen wahrscheinlich eine aktualisierte mke2fs.conf Datei installieren.\n"
+"\n"
+
+#: misc/mke2fs.c:1177
+#, c-format
+msgid "invalid block size - %s"
+msgstr "bad block Größe - %s"
+
+#: misc/mke2fs.c:1181
+#, c-format
+msgid "Warning: blocksize %d not usable on most systems.\n"
+msgstr "Warnung: Blockgröße %d ist auf den meisten Systemen unbrauchbar.\n"
+
+#: misc/mke2fs.c:1197
+#, c-format
+msgid "invalid fragment size - %s"
+msgstr "falsche Fragmentgröße - %s"
+
+#: misc/mke2fs.c:1203
+#, c-format
+msgid "Warning: fragments not supported.  Ignoring -f option\n"
+msgstr "Warnung: Fragmente werden nicht unterstützt. Ignoriere -f Option\n"
+
+#: misc/mke2fs.c:1210
+msgid "Illegal number for blocks per group"
+msgstr "unzulässige Angabe für Blöcke pro Gruppe"
+
+#: misc/mke2fs.c:1215
+msgid "blocks per group must be multiple of 8"
+msgstr "Anzahl der Blöcke pro Gruppe muss ein Vielfaches von 8 sein"
+
+#: misc/mke2fs.c:1223
+msgid "Illegal number for flex_bg size"
+msgstr "Illegale Zahl für flex_bg Größe"
+
+#: misc/mke2fs.c:1229
+msgid "flex_bg size must be a power of 2"
+msgstr "flex_bg Größe muss eine Zweierpotenz sein"
+
+#: misc/mke2fs.c:1239
+#, c-format
+msgid "invalid inode ratio %s (min %d/max %d)"
+msgstr "Unzulässiges Inode-Verhältnis %s (Min %d/Max %d"
+
+#: misc/mke2fs.c:1256
+msgid "in malloc for bad_blocks_filename"
+msgstr "in malloc for bad_blocks_filename"
+
+#: misc/mke2fs.c:1265
+#, c-format
+msgid "invalid reserved blocks percent - %s"
+msgstr "Unzulässige \"Reservierte Blöcke\"-Prozentangabe - %s"
+
+#: misc/mke2fs.c:1283
+#, c-format
+msgid "bad revision level - %s"
+msgstr "ungültiges Intervall - %s"
+
+#: misc/mke2fs.c:1295
+#, c-format
+msgid "invalid inode size - %s"
+msgstr "Unzulässige Inode-Größe - %s"
+
+#: misc/mke2fs.c:1315
+#, c-format
+msgid "bad num inodes - %s"
+msgstr "ungültiges Intervall - %s"
+
+#: misc/mke2fs.c:1380
+#: misc/mke2fs.c:2052
+#, c-format
+msgid "while trying to open journal device %s\n"
+msgstr "beim Versuch, das Journal-Device %s zu öffnen\n"
+
+#: misc/mke2fs.c:1386
+#, c-format
+msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
+msgstr "Journal-Device Blockgröße (%d) kleiner als Minimum-Blockgröße %d\n"
+
+#: misc/mke2fs.c:1392
+#, c-format
+msgid "Using journal device's blocksize: %d\n"
+msgstr "Verwende die Blockgrösse des Geräts: %d\n"
+
+#: misc/mke2fs.c:1401
+#, c-format
+msgid "%d-byte blocks too big for system (max %d)"
+msgstr "%d-Byte Blöcke zu groß für das System (max %d)"
+
+#: misc/mke2fs.c:1405
+#, c-format
+msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgstr "Warnung: %d-byte Blöcke sind zu groß für das System (max %d), fahre dennoch fort\n"
+
+#: misc/mke2fs.c:1413
+#, c-format
+msgid "invalid blocks count - %s"
+msgstr "ungültige Anzahl Blöcke - %s"
+
+#: misc/mke2fs.c:1423
+msgid "filesystem"
+msgstr "Dateisystem"
+
+#: misc/mke2fs.c:1459
+#, c-format
+msgid ""
+"%s: Size of device %s too big to be expressed in 32 bits\n"
+"\tusing a blocksize of %d.\n"
+msgstr ""
+"%s: Größe von Gerät %s lässt sich in 32 Bits nicht darstellen\n"
+"\teine Blockgröße von %d wird verwendet.\n"
+
+#: misc/mke2fs.c:1468
+#: resize/main.c:371
+msgid "while trying to determine filesystem size"
+msgstr "beim Bestimmen der Dateisystemgröße"
+
+#: misc/mke2fs.c:1475
+msgid ""
+"Couldn't determine device size; you must specify\n"
+"the size of the filesystem\n"
+msgstr ""
+"Konnte die Gerätegröße nicht ermitteln. Geben\n"
+"Sie die Größe des Dateisystems an\n"
+
+#: misc/mke2fs.c:1482
+msgid ""
+"Device size reported to be zero.  Invalid partition specified, or\n"
+"\tpartition table wasn't reread after running fdisk, due to\n"
+"\ta modified partition being busy and in use.  You may need to reboot\n"
+"\tto re-read your partition table.\n"
+msgstr ""
+"Zurückgegebene Gerätegröße ist gleich null. Unvollständige Partition\n"
+"\tangegeben oder die Partitionstabelle wurde nach einem fdisk-Lauf\n"
+"\tnicht wieder eingelesen, weil eine veränderte Partition in Gebrauch\n"
+"\tund gesperrt ist. Sie könnten gezwungen sein, neu zu booten, um die\n"
+"\tPartitionstabelle neu einzulesen.\n"
+
+#: misc/mke2fs.c:1500
+msgid "Filesystem larger than apparent device size."
+msgstr "Dateisystem ist größer als augenscheinlich das Gerät selbst."
+
+#: misc/mke2fs.c:1506
+#, c-format
+msgid "Failed to parse fs types list\n"
+msgstr "Analyse der Liste von Dateisystemen war nicht möglich\n"
+
+#: misc/mke2fs.c:1542
+msgid "fs_types for mke2fs.conf resolution: "
+msgstr "fs_types für mke2fs.conf Lösung: "
+
+#: misc/mke2fs.c:1549
+#, c-format
+msgid "Filesystem features not supported with revision 0 filesystems\n"
+msgstr ""
+"Dateisystem-Eigenschaften werden für Dateisysteme der Revision 0 nicht\n"
+"\tunterstützt\n"
+
+#: misc/mke2fs.c:1556
+#, c-format
+msgid "Sparse superblocks not supported with revision 0 filesystems\n"
+msgstr ""
+"Verteilte Superblöcke werden für Dateisysteme der Revision 0 nicht\n"
+"\tunterstützt\n"
+
+#: misc/mke2fs.c:1568
+#, c-format
+msgid "Journals not supported with revision 0 filesystems\n"
+msgstr "Journale werden für Dateisysteme der Revision 0 nicht unterstützt\n"
+
+#: misc/mke2fs.c:1586
+#, c-format
+msgid ""
+"The resize_inode and meta_bg features are not compatible.\n"
+"They can not be both enabled simultaneously.\n"
+msgstr ""
+"Die Eigenschaften resize_inode und meta_bg sind nicht kompatibel.\n"
+"Sie können nicht gleichzeitig aktiviert werden.\n"
+
+#: misc/mke2fs.c:1603
+msgid "while trying to determine hardware sector size"
+msgstr "beim Ermitteln der Hardware-Sektorgröße"
+
+#: misc/mke2fs.c:1661
+msgid "reserved online resize blocks not supported on non-sparse filesystem"
+msgstr ""
+"Für Online-Grössenänderungen reservierte Blöcke werden auf Dateisystemen\n"
+"\tohne Unterstützung für Lückenkompression  nicht unterstützt"
+
+#: misc/mke2fs.c:1670
+msgid "blocks per group count out of range"
+msgstr "Anzahl der Blöcke pro Gruppe ausserhaalb des gültigen Bereichs"
+
+#: misc/mke2fs.c:1685
+msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
+msgstr "Eigenschaft flex_bg wurde nicht aktiviert, daher darf flex_bg Grösse nicht angegeben werden"
+
+#: misc/mke2fs.c:1697
+#, c-format
+msgid "invalid inode size %d (min %d/max %d)"
+msgstr "ungültige Inode-Größe %d (min %d/max %d)"
+
+#: misc/mke2fs.c:1711
+#, c-format
+msgid "too many inodes (%llu), raise inode ratio?"
+msgstr "zu viele Inodes (%llu), Inode-Verhältnis erhöhen?"
+
+#: misc/mke2fs.c:1716
+#, c-format
+msgid "too many inodes (%llu), specify < 2^32 inodes"
+msgstr "zu viele Inodes (%llu), sie müssen weniger als 2^32 Inodes angeben"
+
+#: misc/mke2fs.c:1731
+#, c-format
+msgid ""
+"inode_size (%u) * inodes_count (%u) too big for a\n"
+"\tfilesystem with %lu blocks, specify higher inode_ratio (-i)\n"
+"\tor lower inode count (-N).\n"
+msgstr ""
+"inode_size (%u) * inodes_count (%u) is zu gross für ein\n"
+"\tDateisystem mit %lu Blöcken, geben Sie bitte entweder ein höheres\n"
+"\tinode_ratio (-i) oder eine niedrigere Anzahl an Inodes (-N) an.\n"
+
+#: misc/mke2fs.c:1828
+#: misc/tune2fs.c:1462
+#, c-format
+msgid "while trying to delete %s"
+msgstr "beim Versuch, %s zu löschen"
+
+#: misc/mke2fs.c:1837
+#, c-format
+msgid ""
+"Overwriting existing filesystem; this can be undone using the command:\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Überschreibe das bestehende Dateisystem; dies kann rückgängig gemacht werden\n"
+"durch den Befehl:\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/mke2fs.c:1885
+msgid "while setting up superblock"
+msgstr "beim Erstellen des Superblocks"
+
+#: misc/mke2fs.c:1936
+#, c-format
+msgid "unknown os - %s"
+msgstr "unbekanntes OS - %s"
+
+#: misc/mke2fs.c:1990
+msgid "while trying to allocate filesystem tables"
+msgstr "beim Zuordnen von Dateisystemtabellen"
+
+#: misc/mke2fs.c:2021
+#, c-format
+msgid "while zeroing block %u at end of filesystem"
+msgstr "beim Nullen von Block %u am Ende des Dateisystems"
+
+#: misc/mke2fs.c:2034
+msgid "while reserving blocks for online resize"
+msgstr "beim Lesen des Bad-Block-Inodes"
+
+#: misc/mke2fs.c:2045
+#: misc/tune2fs.c:477
+msgid "journal"
+msgstr "Journal"
+
+#: misc/mke2fs.c:2057
+#, c-format
+msgid "Adding journal to device %s: "
+msgstr "Erstelle Journal auf Gerät %s: "
+
+#: misc/mke2fs.c:2064
+#, c-format
+msgid ""
+"\n"
+"\twhile trying to add journal to device %s"
+msgstr ""
+"\n"
+"\tbeim Erstellen des Journals auf Gerät %s"
+
+#: misc/mke2fs.c:2069
+#: misc/mke2fs.c:2095
+#: misc/tune2fs.c:506
+#: misc/tune2fs.c:520
+#, c-format
+msgid "done\n"
+msgstr "erledigt\n"
+
+#: misc/mke2fs.c:2083
+#, c-format
+msgid "Creating journal (%u blocks): "
+msgstr "Erstelle Journal (%u Blöcke): "
+
+#: misc/mke2fs.c:2100
+#, c-format
+msgid "Writing superblocks and filesystem accounting information: "
+msgstr "Schreibe Superblöcke und Dateisystem-Accountinginformationen: "
+
+#: misc/mke2fs.c:2105
+#, c-format
+msgid ""
+"\n"
+"Warning, had trouble writing out superblocks."
+msgstr ""
+"\n"
+"Warnung: Probleme beim Schreiben der Superblöcke."
+
+#: misc/mke2fs.c:2108
+#, c-format
+msgid ""
+"done\n"
+"\n"
+msgstr ""
+"erledigt\n"
+"\n"
+
+#: misc/mklost+found.c:49
+#, c-format
+msgid "Usage: mklost+found\n"
+msgstr "Aufruf: mklost+found\n"
+
+#: misc/partinfo.c:39
+#, c-format
+msgid ""
+"Usage:  %s device...\n"
+"\n"
+"Prints out the partition information for each given device.\n"
+"For example: %s /dev/hda\n"
+"\n"
+msgstr ""
+"Aufruf: %s Gerät...\n"
+"\n"
+"Gibt Informationen über die Partitionen jedes angegebenen Gerätes aus.\n"
+"Zum Beispiel: %s /dev/hda\n"
+"\n"
+
+#: misc/partinfo.c:49
+#, c-format
+msgid "Cannot open %s: %s"
+msgstr "Kann %s nicht öffnen: %s"
+
+#: misc/partinfo.c:55
+#, c-format
+msgid "Cannot get geometry of %s: %s"
+msgstr "Geometrie von %s kann nicht ermittelt werden: %s"
+
+#: misc/partinfo.c:63
+#, c-format
+msgid "Cannot get size of %s: %s"
+msgstr "Grösse von %s kann nicht gelesen werden: %s"
+
+#: misc/partinfo.c:69
+#, c-format
+msgid "%s: h=%3d s=%3d c=%4d   start=%8d size=%8lu end=%8d\n"
+msgstr "%s: h=%3d s=%3d c=%4d   Start=%8d Grösse=%8lu Ende=%8d\n"
+
+#: misc/tune2fs.c:96
+msgid "Please run e2fsck on the filesystem.\n"
+msgstr "Lassen Sie bitte e2fsck über das Dateisystem laufen.\n"
+
+#: misc/tune2fs.c:103
+#, c-format
+msgid ""
+"Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
+"\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
+"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] \n"
+"\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
+"\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
+"\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
+"\t[ -I new_inode_size ] device\n"
+msgstr ""
+"Aufruf: %s [-c max-Anzahl-Mounts] [-e Fehler-Verhalten] [-g Gruppe]\n"
+"\t[-i Intervall[d|m|w]] [-j] [-J Journal-Optionen] [-l]\n"
+"\t[-m reservierte_Blöcke_Prozent] [-o [^]Einhäng_Optionen[,...]]\n"
+"\t[-r Anzahl_reservierte_Blöcke] [-u Benutzer] [-C Anzahl_Einhängen]\n"
+"\t[-L Volume_Label] [-M letztes_eingehängtes_Verzeichnis]\n"
+"\t[-O [^]Eigenschaft[,...]] [-E erweiterte-Option[,...]]\n"
+"\t[-T letzter_Prüfzeitpunkt] [-U UUID] [-I neue_Inodegrösse] Gerät\n"
+
+#: misc/tune2fs.c:188
+msgid "while trying to open external journal"
+msgstr "beim Öffnen des externen Journals"
+
+#: misc/tune2fs.c:192
+#, c-format
+msgid "%s is not a journal device.\n"
+msgstr "%s ist kein Journal-Gerät.\n"
+
+#: misc/tune2fs.c:207
+msgid "Journal superblock not found!\n"
+msgstr "Journal-Superblock nicht gefunden!\n"
+
+#: misc/tune2fs.c:219
+msgid "Filesystem's UUID not found on journal device.\n"
+msgstr "UUID des Dateisystems auf Journal-Gerät nicht gefunden.\n"
+
+#: misc/tune2fs.c:240
+msgid "Journal NOT removed\n"
+msgstr "Journal NICHT gelöscht\n"
+
+#: misc/tune2fs.c:246
+msgid "Journal removed\n"
+msgstr "Journal gelöscht\n"
+
+#: misc/tune2fs.c:286
+msgid "while reading bitmaps"
+msgstr "beim Lesen von Bitmaps"
+
+#: misc/tune2fs.c:294
+msgid "while clearing journal inode"
+msgstr "beim Bereinigen des Journal-Inodes"
+
+#: misc/tune2fs.c:305
+msgid "while writing journal inode"
+msgstr "beim Schreiben des Journal-Inodes"
+
+#: misc/tune2fs.c:320
+#, c-format
+msgid "Invalid mount option set: %s\n"
+msgstr "Ungültige Einhänge-Option gesetzt: %s\n"
+
+#: misc/tune2fs.c:356
+#, c-format
+msgid "Clearing filesystem feature '%s' not supported.\n"
+msgstr "Das Zurücksetzen von Dateisystem-Eigenschaft »%s« wird nicht unterstützt.\n"
+
+#: misc/tune2fs.c:362
+#, c-format
+msgid "Setting filesystem feature '%s' not supported.\n"
+msgstr "Das Setzen der Dateisystem-Eigenschaft »%s« wird nicht unterstützt.\n"
+
+#: misc/tune2fs.c:371
+msgid ""
+"The has_journal feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"Die has_jounal Eigenschaft kann nur zurückgesetzt werden, wenn das\n"
+"Dateisystem nicht oder im Nur-Lesen-Modus eingehängt ist.\n"
+
+#: misc/tune2fs.c:379
+msgid ""
+"The needs_recovery flag is set.  Please run e2fsck before clearing\n"
+"the has_journal flag.\n"
+msgstr ""
+"Das needs_recovery Flag ist gesetzt. Bitte starten sie e2fsck vor\n"
+"der Zurücksetzung des has_journal Flags.\n"
+
+#: misc/tune2fs.c:412
+msgid ""
+"Clearing the flex_bg flag would cause the the filesystem to be\n"
+"inconsistent.\n"
+msgstr ""
+"Das Zurücksetzen der Kennung flex_bg würde das Dateisystem inkonsistent\n"
+"machen.\n"
+
+#: misc/tune2fs.c:423
+msgid ""
+"The huge_file feature may only be cleared when the filesystem is\n"
+"unmounted or mounted read-only.\n"
+msgstr ""
+"Die huge_file Eigenschaft kann nur zurückgesetzt werden, wenn das\n"
+"Dateisystem nicht oder im Nur-Lesen-Modus eingehängt ist.\n"
+
+#: misc/tune2fs.c:451
+#, c-format
+msgid "(and reboot afterwards!)\n"
+msgstr "(und hinterher das System neu starten!)\n"
+
+#: misc/tune2fs.c:472
+msgid "The filesystem already has a journal.\n"
+msgstr "Das Dateisystem hat schon ein Journal.\n"
+
+#: misc/tune2fs.c:490
+#, c-format
+msgid ""
+"\n"
+"\twhile trying to open journal on %s\n"
+msgstr ""
+"\n"
+"\tbeim Öffnen des Journals auf %s\n"
+
+#: misc/tune2fs.c:494
+#, c-format
+msgid "Creating journal on device %s: "
+msgstr "Erstelle Journal auf Gerät %s: "
+
+#: misc/tune2fs.c:502
+#, c-format
+msgid "while adding filesystem to journal on %s"
+msgstr "beim Hinzufügen des Dateisystems zum Journal auf %s"
+
+#: misc/tune2fs.c:508
+msgid "Creating journal inode: "
+msgstr "Erstelle Journal-Inode: "
+
+#: misc/tune2fs.c:517
+msgid ""
+"\n"
+"\twhile trying to create journal file"
+msgstr ""
+"\n"
+"\tbeim Erstellen der Journaldatei"
+
+#: misc/tune2fs.c:584
+#, c-format
+msgid "Couldn't parse date/time specifier: %s"
+msgstr "Konnte Datum/Zeit nicht parsen: %s"
+
+#: misc/tune2fs.c:608
+#: misc/tune2fs.c:621
+#, c-format
+msgid "bad mounts count - %s"
+msgstr "Ungültiger Mounts-Zähler - %s"
+
+#: misc/tune2fs.c:637
+#, c-format
+msgid "bad error behavior - %s"
+msgstr "ungültiges Fehler-Verhalten - %s"
+
+#: misc/tune2fs.c:664
+#, c-format
+msgid "bad gid/group name - %s"
+msgstr "ungültige(r) GID oder Gruppenname - %s"
+
+#: misc/tune2fs.c:697
+#, c-format
+msgid "bad interval - %s"
+msgstr "ungültiges Intervall - %s"
+
+#: misc/tune2fs.c:725
+#, c-format
+msgid "bad reserved block ratio - %s"
+msgstr "ungültiges Reservierte-Blöcke-Verhältnis - %s"
+
+#: misc/tune2fs.c:740
+msgid "-o may only be specified once"
+msgstr "-o darf nur eimal angegeben werden"
+
+#: misc/tune2fs.c:750
+msgid "-O may only be specified once"
+msgstr "-O darf nur eimal angegeben werden"
+
+#: misc/tune2fs.c:760
+#, c-format
+msgid "bad reserved blocks count - %s"
+msgstr "ungültige Anzahl von reservierten Blöcken - %s"
+
+#: misc/tune2fs.c:789
+#, c-format
+msgid "bad uid/user name - %s"
+msgstr "ungültige(r) UID/Benutzername - %s"
+
+#: misc/tune2fs.c:806
+#, c-format
+msgid "bad inode size - %s"
+msgstr "Unzulässige Inodegröße - %s"
+
+#: misc/tune2fs.c:813
+#, c-format
+msgid "Inode size must be a power of two- %s"
+msgstr "Inodegrösse muss eine Zweierpotenz sein- %s"
+
+#: misc/tune2fs.c:900
+#, c-format
+msgid "Invalid RAID stride: %s\n"
+msgstr "Ungültiger RAID Stride: %s\n"
+
+#: misc/tune2fs.c:915
+#, c-format
+msgid "Invalid RAID stripe-width: %s\n"
+msgstr "Ungültige RAID Stripe-Breite: %s\n"
+
+#: misc/tune2fs.c:930
+#, c-format
+msgid "Invalid hash algorithm: %s\n"
+msgstr "Ungültiger Hashalgorithmus: %s\n"
+
+#: misc/tune2fs.c:936
+#, c-format
+msgid "Setting default hash algorithm to %s (%d)\n"
+msgstr "Der standard Hashalgorithmus wird auf %s (%d) gesetzt\n"
+
+#: misc/tune2fs.c:944
+#, c-format
+msgid ""
+"\n"
+"Bad options specified.\n"
+"\n"
+"Extended options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid extended options are:\n"
+"\tstride=<RAID per-disk chunk size in blocks>\n"
+"\tstripe_width=<RAID stride*data disks in blocks>\n"
+"\thash_alg=<hash algorithm>\n"
+"\ttest_fs\n"
+"\t^test_fs\n"
+msgstr ""
+"\n"
+"Ungültige Optionen wurden angegeben.\n"
+"\n"
+"Erweiterte Optionen werden mit Kommatas getrennt angegeben und erwarten\n"
+"\teventuell ein Argument, welches mit Gleichheitszeichen (»=«)\n"
+"\tzugewiesenwird.\n"
+"\n"
+"Gültige erweiterte Optionen sind:\n"
+"\tstride=<RAID Segmentgrösse pro PLatte in Blöcken>\n"
+"\tstripe-width=<RAID Stride*Datenplatten in Blöcken>\n"
+"\thash_alg=<Hashalgorithmus>\n"
+"\ttest_fs\n"
+"\t^test_fs\n"
+
+#: misc/tune2fs.c:1384
+#: misc/tune2fs.c:1389
+#: resize/resize2fs.c:760
+msgid "blocks to be moved"
+msgstr "zu verschiebende Blöcke"
+
+#: misc/tune2fs.c:1471
+#, fuzzy, c-format
+msgid ""
+"To undo the tune2fs operation please run the command\n"
+"    e2undo %s %s\n"
+"\n"
+msgstr ""
+"Um die Aktionen von tune2fs rückgängig zu machen, starten Sie bitte den\n"
+"Befehl\n"
+"    e2undo %s %s\n"
+"\n"
+
+#: misc/tune2fs.c:1529
+#, c-format
+msgid "The inode size is already %d\n"
+msgstr "Die Inodegrösse ist bereits %d\n"
+
+#: misc/tune2fs.c:1534
+#, c-format
+msgid "Shrinking the inode size is not supported\n"
+msgstr "Das Schrumpfen der Inodegrösse wird nicht unterstützt\n"
+
+#: misc/tune2fs.c:1577
+#, c-format
+msgid "Setting maximal mount count to %d\n"
+msgstr "Setze die maximale Mount-Anzahl auf %d\n"
+
+#: misc/tune2fs.c:1583
+#, c-format
+msgid "Setting current mount count to %d\n"
+msgstr "Setze die derzeitige Mount-Anzahl auf %d\n"
+
+#: misc/tune2fs.c:1588
+#, c-format
+msgid "Setting error behavior to %d\n"
+msgstr "Setze das Fehler-Verhalten auf %d\n"
+
+#: misc/tune2fs.c:1593
+#, c-format
+msgid "Setting reserved blocks gid to %lu\n"
+msgstr "Setze die GID für reservierte Blöcke auf %lu\n"
+
+#: misc/tune2fs.c:1598
+#, c-format
+msgid "Setting interval between checks to %lu seconds\n"
+msgstr "Setze das Intervall zwischen Checks auf %lu Sekunden\n"
+
+#: misc/tune2fs.c:1605
+#, c-format
+msgid "Setting reserved blocks percentage to %g%% (%u blocks)\n"
+msgstr "Setze den Prozentsatz reservierter Böcke auf %g%% (%u Blöcke)\n"
+
+#: misc/tune2fs.c:1612
+#, c-format
+msgid "reserved blocks count is too big (%lu)"
+msgstr "Anzahl der reservierten Blöcke ist zu gross (%lu)"
+
+#: misc/tune2fs.c:1618
+#, c-format
+msgid "Setting reserved blocks count to %lu\n"
+msgstr "Setze die Anzahl der reservierten Blöcke auf %lu\n"
+
+#: misc/tune2fs.c:1624
+msgid ""
+"\n"
+"The filesystem already has sparse superblocks.\n"
+msgstr ""
+"\n"
+"Das Dateisystem hat bereits verteilte Superblöcke.\n"
+
+#: misc/tune2fs.c:1631
+#, c-format
+msgid ""
+"\n"
+"Sparse superblock flag set.  %s"
+msgstr ""
+"\n"
+"Kennzeichen für verteilten Superblock gesetzt. %s"
+
+#: misc/tune2fs.c:1636
+msgid ""
+"\n"
+"Clearing the sparse superflag not supported.\n"
+msgstr ""
+"\n"
+"Das Zurücksetzen des Kennzeichens für »verteilter Superblock« wird nicht\n"
+"\tunterstützt.\n"
+
+#: misc/tune2fs.c:1643
+#, c-format
+msgid "Setting time filesystem last checked to %s\n"
+msgstr "Setze die Zeit des letzten Dateisystemchecks auf %s\n"
+
+#: misc/tune2fs.c:1649
+#, c-format
+msgid "Setting reserved blocks uid to %lu\n"
+msgstr "Setze die UID für reservierte Blöcke auf %lu\n"
+
+#: misc/tune2fs.c:1700
+msgid "Invalid UUID format\n"
+msgstr "Ungültiges UUID Format\n"
+
+#: misc/tune2fs.c:1712
+msgid "The inode size may only be changed when the filesystem is unmounted.\n"
+msgstr ""
+"Die Grösse der Inodes kann nur geändert werden, wenn das Dateisystem\n"
+"nicht eingehängt ist.\n"
+
+#: misc/tune2fs.c:1719
+msgid ""
+"Changing the inode size not supported for filesystems with the flex_bg\n"
+"feature enabled.\n"
+msgstr ""
+
+#: misc/tune2fs.c:1731
+msgid ""
+"Error in resizing the inode size.\n"
+"Run e2undo to undo the file system changes. \n"
+msgstr ""
+"Fehler beim Verändern der Inodegrösse.\n"
+"Starten Sie e2undo um die Änderungen am Dateisystem rückgängig zu machen. \n"
+
+#: misc/tune2fs.c:1735
+#, c-format
+msgid "Setting inode size %lu\n"
+msgstr "Setze Inode-Größe auf %lu\n"
+
+#: misc/tune2fs.c:1745
+#, c-format
+msgid "Setting stride size to %d\n"
+msgstr "Setze Stride-Größe auf %d\n"
+
+#: misc/tune2fs.c:1750
+#, c-format
+msgid "Setting stripe width to %d\n"
+msgstr "Setze die Stripe-Breite auf %d\n"
+
+#: misc/util.c:72
+msgid "Proceed anyway? (y,n) "
+msgstr "Trotzdem fortsetzen? (j,n) "
+
+#: misc/util.c:93
+#, c-format
+msgid "Could not stat %s --- %s\n"
+msgstr "Status für %s konnte nicht ermittelt werden --- %s\n"
+
+#: misc/util.c:96
+msgid ""
+"\n"
+"The device apparently does not exist; did you specify it correctly?\n"
+msgstr ""
+"\n"
+"Das Gerät existiert offensichtlich nicht; haben Sie es richtig angegeben?\n"
+
+#: misc/util.c:107
+#, c-format
+msgid "%s is not a block special device.\n"
+msgstr "%s ist kein spezielles Block-Gerät.\n"
+
+#: misc/util.c:136
+#, c-format
+msgid "%s is entire device, not just one partition!\n"
+msgstr "%s ist das ganze Gerät, nicht nur eine Partition!\n"
+
+#: misc/util.c:158
+msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
+msgstr "mke2fs trotzdem erzwungen. Hoffentlich ist /etc/mtab ungültig.\n"
+
+#: misc/util.c:163
+#, c-format
+msgid "will not make a %s here!\n"
+msgstr "werde dort kein %s erstellen!\n"
+
+#: misc/util.c:170
+msgid "mke2fs forced anyway.\n"
+msgstr "mke2fs wird sowieso erzwungen.\n"
+
+#: misc/util.c:186
+msgid "Couldn't allocate memory to parse journal options!\n"
+msgstr "Konnte keinen Speicher zur Analyse der Journal-Optionen anfordern!\n"
+
+#: misc/util.c:228
+msgid ""
+"\n"
+"Bad journal options specified.\n"
+"\n"
+"Journal options are separated by commas, and may take an argument which\n"
+"\tis set off by an equals ('=') sign.\n"
+"\n"
+"Valid journal options are:\n"
+"\tsize=<journal size in megabytes>\n"
+"\tdevice=<journal device>\n"
+"\n"
+"The journal size must be between 1024 and 10240000 filesystem blocks.\n"
+"\n"
+msgstr ""
+"\n"
+"Ungültige Journal-Optionen wurden angegeben.\n"
+"\n"
+"Journal-Optionen werden durch Kommatas getrennt. Manche erwarten ein\n"
+"\tArgument, welches mit Gleichheitszeichen (»=«) zugewiesen wird.\n"
+"\n"
+"Gültige Journal-Optionen sind:\n"
+"\tsize=<Journalgröße in Megabytes>\n"
+"\tdevice=<Journal-Gerät>\n"
+"\n"
+"Die Grösse des Journals muss zwischen 1024 und 10240000 Dateisystem-Blöcken\n"
+"\tliegen.\n"
+"\n"
+
+#: misc/util.c:258
+msgid ""
+"\n"
+"Filesystem too small for a journal\n"
+msgstr ""
+"\n"
+"Das Dateisystem ist zu klein für ein Journal\n"
+
+#: misc/util.c:265
+#, c-format
+msgid ""
+"\n"
+"The requested journal size is %d blocks; it must be\n"
+"between 1024 and 10240000 blocks.  Aborting.\n"
+msgstr ""
+"\n"
+"Die angegebene Journalgröße beträgt %d Blöcke. Sie muss aber zwischen\n"
+"1024 und 102400 Dateisystem-Blöcken liegen. Abbruch! \n"
+
+#: misc/util.c:273
+msgid ""
+"\n"
+"Journal size too big for filesystem.\n"
+msgstr ""
+"\n"
+"Das Journal ist zu groß für dieses Dateisystem.\n"
+
+#: misc/util.c:283
+#, c-format
+msgid ""
+"This filesystem will be automatically checked every %d mounts or\n"
+"%g days, whichever comes first.  Use tune2fs -c or -i to override.\n"
+msgstr ""
+"Das Dateisystem wird automatisch nach jeweils %d Einhäng-Vorgängen bzw.\n"
+"alle %g Tage überprüft, je nachdem, was zuerst eintritt. Dies kann durch\n"
+"tune2fs -c oder -i geändert werden.\n"
+
+#: misc/uuidgen.c:31
+#, c-format
+msgid "Usage: %s [-r] [-t]\n"
+msgstr "Aufruf: %s [-r] [-t]\n"
+
+#: resize/extent.c:196
+msgid "# Extent dump:\n"
+msgstr "# Extent dump:\n"
+
+#: resize/extent.c:197
+#, c-format
+msgid "#\tNum=%d, Size=%d, Cursor=%d, Sorted=%d\n"
+msgstr "#\tNum=%d, Size=%d, Cursor=%d, Sorted=%d\n"
+
+#: resize/extent.c:200
+#, c-format
+msgid "#\t\t %u -> %u (%d)\n"
+msgstr "#\t\t %u -> %u (%d)\n"
+
+#: resize/main.c:42
+#, c-format
+msgid ""
+"Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
+"\n"
+msgstr ""
+"Aufruf: %s [-d Debug_Optionen] [-f] [-F] [-M] [-P] [-p] Gerät [neue_Größe]\n"
+"\n"
+
+#: resize/main.c:64
+msgid "Extending the inode table"
+msgstr "Vergrößere die Inode-Tabelle"
+
+#: resize/main.c:67
+msgid "Relocating blocks"
+msgstr "Verteile die Blöcke neu"
+
+#: resize/main.c:70
+msgid "Scanning inode table"
+msgstr "Prüfe die Inode-Tabelle"
+
+#: resize/main.c:73
+msgid "Updating inode references"
+msgstr "Aktualisiere die Inode-Referenzen"
+
+#: resize/main.c:76
+msgid "Moving inode table"
+msgstr "Verschiebe die Inode-Tabelle"
+
+#: resize/main.c:79
+msgid "Unknown pass?!?"
+msgstr "Unbekannter Durchgang?!?"
+
+#: resize/main.c:82
+#, c-format
+msgid "Begin pass %d (max = %lu)\n"
+msgstr "Start von Durchgang %d (max = %lu)\n"
+
+#: resize/main.c:264
+#, c-format
+msgid "while opening %s"
+msgstr "beim Öffnen von %s"
+
+# c-format
+#: resize/main.c:276
+#, c-format
+msgid "while getting stat information for %s"
+msgstr "beim Ermitteln der Statusinformation für %s"
+
+#: resize/main.c:337
+#, c-format
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+"%s: Die Kombination der Eigenschaften flex_bg und\n"
+"t!resize_inode wird von resize2fs nicht unterestützt.\n"
+
+#: resize/main.c:345
+#, c-format
+msgid "Estimated minimum size of the filesystem: %u\n"
+msgstr "Geschätzte minimale Grösse des Dateisystems: %u\n"
+
+#: resize/main.c:381
+#, c-format
+msgid "Invalid new size: %s\n"
+msgstr "Unzulässige neue Größe: %s\n"
+
+#: resize/main.c:394
+msgid "Invalid stride length"
+msgstr "Ungültige Stride-Länge"
+
+#: resize/main.c:418
+#, c-format
+msgid ""
+"The containing partition (or device) is only %u (%dk) blocks.\n"
+"You requested a new size of %u blocks.\n"
+"\n"
+msgstr ""
+"Die Partition (oder das Gerät) ist nur %u (%dk) Blöcke groß.\n"
+"Die gewünschte Größe war %u Blöcke.\n"
+"\n"
+
+#: resize/main.c:425
+#, c-format
+msgid ""
+"The filesystem is already %u blocks long.  Nothing to do!\n"
+"\n"
+msgstr ""
+"Das Dateisystem ist schon %u Blöcke groß. Nichts zu tun!\n"
+"\n"
+
+#: resize/main.c:436
+#, c-format
+msgid ""
+"Please run 'e2fsck -f %s' first.\n"
+"\n"
+msgstr ""
+"Bitte zuerst »e2fsck -f %s« laufen lassen.\n"
+"\n"
+
+#: resize/main.c:447
+#, c-format
+msgid "while trying to resize %s"
+msgstr "beim Versuch, die Größe von %s zu ändern"
+
+#: resize/main.c:452
+#, c-format
+msgid ""
+"The filesystem on %s is now %u blocks long.\n"
+"\n"
+msgstr ""
+"Das Dateisystem auf %s ist nun %u Blöcke groß.\n"
+"\n"
+
+#: resize/online.c:37
+#, c-format
+msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
+msgstr "Das Dateisystem auf %s ist auf %s eingehängt; Online-Grössenveränderung nötig\n"
+
+#: resize/online.c:41
+#, c-format
+msgid "On-line shrinking from %u to %u not supported.\n"
+msgstr "Die Online-Verkleinerung von %u auf %u wird nicht unterstützt.\n"
+
+#: resize/online.c:61
+msgid "Filesystem does not support online resizing"
+msgstr "Das Dateisystem unterstützt keine Online-Grössenveränderung"
+
+#: resize/online.c:68
+#, c-format
+msgid "while trying to open mountpoint %s"
+msgstr "beim Versuch, Einhängpunkt %s zu öffnen"
+
+#: resize/online.c:76
+msgid "Permission denied to resize filesystem"
+msgstr "Zugriff verweigert für die Grössenänderung des Dateisystems"
+
+#: resize/online.c:79
+msgid "Kernel does not support online resizing"
+msgstr "Der Kernel unterstützt die Online-Vergrösserung nicht"
+
+#: resize/online.c:82
+msgid "While checking for on-line resizing support"
+msgstr "Beim Überprüfen, ob Online-Vergrösserung unterstützt wird"
+
+#: resize/online.c:111
+#, c-format
+msgid "Performing an on-line resize of %s to %u (%dk) blocks.\n"
+msgstr "Führe eine Online-Grössenänderung von %s auf %u (%dk) Blöcke durch.\n"
+
+#: resize/online.c:121
+msgid "While trying to extend the last group"
+msgstr "Beim Versuch, die letzte Gruppe zu erweitern"
+
+#: resize/online.c:180
+#, c-format
+msgid "While trying to add group #%d"
+msgstr "Beim Versuch, Gruppe %d hinzu zu fügen"
+
+#: resize/online.c:191
+#, c-format
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Dateisystem auf %s ist auf %s eingehängt und Online-Grössenänderung wird auf diesem System nicht unterstützt.\n"
+
+#: resize/resize2fs.c:322
+#, c-format
+msgid "inodes (%llu) must be less than %u"
+msgstr "Die Anzahl der Indoes (%llu) muss unter %u liegen"
+
+#: resize/resize2fs.c:755
+msgid "reserved blocks"
+msgstr "reservierte Blöcke"
+
+#: resize/resize2fs.c:765
+msgid "meta-data blocks"
+msgstr "Metadaten-Blöcke"
+
+#: resize/resize2fs.c:1703
+#, c-format
+msgid "Should never happen: resize inode corrupt!\n"
+msgstr "Das sollte niemals passieren: Die zu verändernde Inode ist defekt!\n"
+
+#~ msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
+#~ msgstr "@S hat kein has_@j Flag, aber ein ext3 @j %s.\n"
+#~ msgid "Error while deleting extent: %m\n"
+#~ msgstr "Fehler während des Löschens der Erweiterung: %m\n"
+#~ msgid "Recreate journal to make the filesystem ext3 again?\n"
+#~ msgstr ""
+#~ "Soll das Journal wiederhergestellt werden, damit das Dateisystem\n"
+#~ "\twieder ext3 ist?\n"
+#~ msgid "while retrying to write block bitmaps for %s"
+#~ msgstr ""
+#~ "während des wiederholten Versuches, Block-Bitmaps für %s zu schreiben."
+#~ msgid "writing inode bitmaps"
+#~ msgstr "Schreibe Inoden-Bitmaps"
+#~ msgid "%s failed for %s: %s\n"
+#~ msgstr "%s ist für %s gescheitert: %s\n"
+#~ msgid "open"
+#~ msgstr "offen"
+#~ msgid "HDIO_GETGEO ioctl"
+#~ msgstr "HDIO_GETGEO Ioctl"
+#~ msgid "BLKGETSIZE ioctl"
+#~ msgstr "BLKGETSIZE Ioctl"
+
diff --git a/patches/sles/11/rpm/libcom_err-compile_et_permissions.patch b/patches/sles/11/rpm/libcom_err-compile_et_permissions.patch
new file mode 100644 (file)
index 0000000..528f303
--- /dev/null
@@ -0,0 +1,13 @@
+Index: e2fsprogs-1.41.7/lib/et/compile_et.sh.in
+===================================================================
+--- e2fsprogs-1.41.7.orig/lib/et/compile_et.sh.in
++++ e2fsprogs-1.41.7/lib/et/compile_et.sh.in
+@@ -51,7 +51,7 @@ if test -f ${BASE}.h && cmp -s ${BASE}.h
+     rm -f ${BASE}.h.$$
+ else
+     mv -f ${BASE}.h.$$ ${BASE}.h
+-    chmod -w ${BASE}.h
++#    chmod -w ${BASE}.h
+ fi
+ $AWK -f "${DIR}/et_c.awk" "outfile=${BASE}.c.$$" "outfn=${BASE}.c" "$ROOT.et"
+ if test -f ${BASE}.c && cmp -s ${BASE}.c.$$ ${BASE}.c ; then
diff --git a/patches/sles/11/system-blkid.patch b/patches/sles/11/system-blkid.patch
new file mode 100644 (file)
index 0000000..fffe7fc
--- /dev/null
@@ -0,0 +1,10 @@
+--- e2fsprogs-1.41.12/e2fsck/Makefile.in.dist
++++ e2fsprogs-1.41.12/e2fsck/Makefile.in
+@@ -366,7 +366,6 @@
+  $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
+  $(top_builddir)/lib/ext2fs/ext2_err.h $(top_srcdir)/lib/ext2fs/bitops.h \
+- $(top_srcdir)/lib/blkid/blkid.h $(top_builddir)/lib/blkid/blkid_types.h \
+  $(srcdir)/problem.h $(srcdir)/lfsck.h
+ journal.o: $(srcdir)/journal.c $(srcdir)/jfs_user.h $(srcdir)/e2fsck.h \
+  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
diff --git a/patches/sles/e2fsprogs-SLES10--m-support.patch b/patches/sles/e2fsprogs-SLES10--m-support.patch
new file mode 100644 (file)
index 0000000..635eeaf
--- /dev/null
@@ -0,0 +1,43 @@
+Index: e2fsprogs/misc/fsck.8.in
+===================================================================
+--- e2fsprogs.orig/misc/fsck.8.in
++++ e2fsprogs/misc/fsck.8.in
+@@ -8,7 +8,7 @@ fsck \- check and repair a Linux file sy
+ .SH SYNOPSIS
+ .B fsck
+ [
+-.B \-sAVRTMNP
++.B \-sAVRTmMNP
+ ]
+ [
+ .B \-C
+@@ -233,7 +233,7 @@ a progress bar at a time.  GUI front-end
+ .IR fd ,
+ in which case the progress bar information will be sent to that file descriptor.
+ .TP
+-.B \-M
++.B \-m or \-M
+ Do not check mounted filesystems and return an exit code of 0
+ for mounted filesystems.
+ .TP
+Index: e2fsprogs/misc/fsck.c
+===================================================================
+--- e2fsprogs.orig/misc/fsck.c
++++ e2fsprogs/misc/fsck.c
+@@ -1074,7 +1074,7 @@ static int check_all(NOARGS)
+ static void usage(NOARGS)
+ {
+-      fputs(_("Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"), stderr);
++      fputs(_("Usage: fsck [-AmMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"), stderr);
+       exit(EXIT_USAGE);
+ }
+@@ -1196,6 +1196,7 @@ static void PRS(int argc, char *argv[])
+                       case 'T':
+                               notitle++;
+                               break;
++                      case 'm':
+                       case 'M':
+                               ignore_mounted++;
+                               break;
diff --git a/patches/sles/libcom_err-no-init_error_table.patch b/patches/sles/libcom_err-no-init_error_table.patch
new file mode 100644 (file)
index 0000000..059a142
--- /dev/null
@@ -0,0 +1,35 @@
+SLES upstream patch to remove init_error_table() (not thread safe).
+
+Index: e2fsprogs/lib/et/com_err.h
+===================================================================
+--- e2fsprogs.orig/lib/et/com_err.h
++++ e2fsprogs/lib/et/com_err.h
+@@ -42,7 +42,10 @@ extern void (*set_com_err_hook (void (*)
+       (const char *, long, const char *, va_list);
+ extern void (*reset_com_err_hook (void)) (const char *, long,
+                                         const char *, va_list);
++#if 0
+ extern int init_error_table(const char * const *msgs, long base, int count);
++#endif
++#define init_error_table(...) PLEASE_DO_NOT_USE_init_error_table_FUNCTION
+ extern errcode_t add_error_table(const struct error_table * et);
+ extern errcode_t remove_error_table(const struct error_table * et);
+Index: e2fsprogs/lib/et/init_et.c
+===================================================================
+--- e2fsprogs.orig/lib/et/init_et.c
++++ e2fsprogs/lib/et/init_et.c
+@@ -16,6 +16,7 @@
+  * express or implied warranty.
+  */
++#if 0
+ #include <stdio.h>
+ #include <errno.h>
+ #ifdef HAVE_STDLIB_H
+@@ -50,3 +51,5 @@ int init_error_table(const char * const 
+     _et_dynamic_list = &new_et->etl;
+     return 0;
+ }
++#endif
++
diff --git a/patches/sles/libcom_err-no-static-buffer.patch b/patches/sles/libcom_err-no-static-buffer.patch
new file mode 100644 (file)
index 0000000..7b1f1ae
--- /dev/null
@@ -0,0 +1,33 @@
+SLES upstream patch to remove the use of a static error buffer.
+
+Index: e2fsprogs/lib/et/error_message.c
+===================================================================
+--- e2fsprogs.orig/lib/et/error_message.c
++++ e2fsprogs/lib/et/error_message.c
+@@ -148,25 +148,7 @@ const char * error_message (errcode_t co
+     }
+     et_list_unlock();
+ oops:
+-    strcpy (buffer, "Unknown code ");
+-    if (table_num) {
+-      strcat (buffer, error_table_name (table_num));
+-      strcat (buffer, " ");
+-    }
+-    for (cp = buffer; *cp; cp++)
+-      ;
+-    if (offset >= 100) {
+-      *cp++ = '0' + offset / 100;
+-      offset %= 100;
+-      started++;
+-    }
+-    if (started || offset >= 10) {
+-      *cp++ = '0' + offset / 10;
+-      offset %= 10;
+-    }
+-    *cp++ = '0' + offset;
+-    *cp = '\0';
+-    return(buffer);
++    return "Unknown code";
+ }
+ /*